ref: cef9a7f8da0dbdce4e95b17151e75ac3bd4b7ebd
dir: /rott/winrott.c/
/* Routines from winrott needed for the highres support for the SDL port */
#include <stdlib.h>
#include <string.h>
#include "WinRott.h"
#include "modexlib.h"
//typedef unsigned char byte;
int iGLOBAL_SCREENWIDTH = 640;//bna val 800
int iGLOBAL_SCREENHEIGHT = 480;//bna val 600
int iGLOBAL_SCREENBWIDE ;
int iG_SCREENWIDTH;// default screen width in bytes
int ScreenWidthToWriteToCfg = 0;
int ScreenHeightToWriteToCfg = 0;
int WriteNewResolutionToCfg = 0;
int iGLOBAL_HEALTH_X;
int iGLOBAL_HEALTH_Y;
int iGLOBAL_AMMO_X;
int iGLOBAL_AMMO_Y;
int iGLOBAL_FOCALWIDTH;
double dGLOBAL_FPFOCALWIDTH;
double dTopYZANGLELIMIT;
int iG_X_center;
int iG_Y_center;
//int topBarCenterOffset = 0;
boolean iG_aimCross = 0;
extern int viewheight;
extern int viewwidth;
extern int FocalWidthOffset;
//----------------------------------------------------------------------
#define FINEANGLES 2048
void RecalculateFocalWidth(void)
{
iGLOBAL_FOCALWIDTH = 160 - FocalWidthOffset;
dGLOBAL_FPFOCALWIDTH = 160.0 - FocalWidthOffset;
}
void SetRottScreenRes (int Width, int Height)
{
iGLOBAL_SCREENWIDTH = Width;
iGLOBAL_SCREENHEIGHT = Height;
iGLOBAL_FOCALWIDTH = 160 - FocalWidthOffset;
dGLOBAL_FPFOCALWIDTH = (double) iGLOBAL_FOCALWIDTH;
int middleWidth = Width / 2;
iGLOBAL_AMMO_X = middleWidth + 160 - 20;
iGLOBAL_AMMO_Y = iGLOBAL_SCREENHEIGHT - 16;
iGLOBAL_HEALTH_X = middleWidth - 160 + 20;
iGLOBAL_HEALTH_Y = iGLOBAL_AMMO_Y;
iGLOBAL_SCREENBWIDE = iGLOBAL_SCREENWIDTH*(96/320);
iG_SCREENWIDTH = iGLOBAL_SCREENWIDTH*(96/320);;// default screen width in bytes
dTopYZANGLELIMIT = (44*FINEANGLES/360);;
/*
if (iGLOBAL_SCREENWIDTH == 320) {
iGLOBAL_FOCALWIDTH = 160 - FocalWidthOffset;
dGLOBAL_FPFOCALWIDTH = 160.0 - FocalWidthOffset;
iGLOBAL_HEALTH_X = 20;
iGLOBAL_HEALTH_Y = 185;
iGLOBAL_AMMO_X = 300;
iGLOBAL_AMMO_Y = 184;
dTopYZANGLELIMIT = (44*FINEANGLES/360);;
}
if (iGLOBAL_SCREENWIDTH == 640) {
if (iGLOBAL_SCREENHEIGHT == 400)
{
iGLOBAL_FOCALWIDTH = 180 - FocalWidthOffset;
dGLOBAL_FPFOCALWIDTH = 180.0 - FocalWidthOffset ;
iGLOBAL_HEALTH_X = 180;
iGLOBAL_HEALTH_Y = 400 - 16;
iGLOBAL_AMMO_X = 460;
iGLOBAL_AMMO_Y = 400 - 16;
dTopYZANGLELIMIT = (42*FINEANGLES/360);;
}
else
{
iGLOBAL_FOCALWIDTH = 180 - FocalWidthOffset;
dGLOBAL_FPFOCALWIDTH = 180.0 - FocalWidthOffset ;
iGLOBAL_HEALTH_X = 40;//20*2;
iGLOBAL_HEALTH_Y = 466;//(185*2)+16;
iGLOBAL_AMMO_X = 600;//300*2;
iGLOBAL_AMMO_Y = 464;//480-16;
dTopYZANGLELIMIT = (42*FINEANGLES/360);;
}
}
if (iGLOBAL_SCREENWIDTH == 800) {
iGLOBAL_FOCALWIDTH = 200 - FocalWidthOffset;
dGLOBAL_FPFOCALWIDTH = 200.0 - FocalWidthOffset;
iGLOBAL_HEALTH_X = 40;//20*2;
iGLOBAL_HEALTH_Y = 585;//(185/200)*600;
iGLOBAL_AMMO_X = 750;//(300/320)*800;
iGLOBAL_AMMO_Y = 584;//600-16;
dTopYZANGLELIMIT = (90*FINEANGLES/360);;
}
*/
//dYZANGLELIMIT = (12*FINEANGLES/360);
//#define YZANGLELIMIT (12*FINEANGLES/360)//bna--(30*FINEANGLES/360)
//#define TopYZANGLELIMIT (44*FINEANGLES/360)//bna added
// GetCurrentDirectory(sizeof(ApogeePath),ApogeePath);// curent directory name
}
//----------------------------------------------------------------------
//luckey for me that I am not programmin a 386 or the next
//4 function would never have worked. bna++
extern int viewsize;
void MoveScreenUpLeft()
{
int startX,startY,startoffset;
byte *Ycnt,*b;
// SetTextMode ( );
b=(byte *)bufferofs;
b += (((iGLOBAL_SCREENHEIGHT-viewheight)/2)*iGLOBAL_SCREENWIDTH)+((iGLOBAL_SCREENWIDTH-viewwidth)/2);
if (viewsize == 8) {
b += 8*iGLOBAL_SCREENWIDTH;
}
startX = 3; //take 3 pixels to the right
startY = 3; //take 3 lines down
startoffset = (startY*iGLOBAL_SCREENWIDTH)+startX;
for (Ycnt=b; Ycnt<b+((viewheight-startY)*iGLOBAL_SCREENWIDTH); Ycnt+=iGLOBAL_SCREENWIDTH) {
memcpy(Ycnt,Ycnt+startoffset, viewwidth-startX);
}
}
//----------------------------------------------------------------------
void MoveScreenDownLeft()
{
int startX,startY,startoffset;
byte *Ycnt,*b;
// SetTextMode ( );
b=(byte *)bufferofs;
b += (((iGLOBAL_SCREENHEIGHT-viewheight)/2)*iGLOBAL_SCREENWIDTH)+((iGLOBAL_SCREENWIDTH-viewwidth)/2);
if (viewsize == 8) {
b += 8*iGLOBAL_SCREENWIDTH;
}
startX = 3; //take 3 pixels to the right
startY = 3; //take 3 lines down
startoffset = (startY*iGLOBAL_SCREENWIDTH);//+startX;
//Ycnt starts in botton of screen and copys lines upwards
for (Ycnt=b+((viewheight-startY-1)*iGLOBAL_SCREENWIDTH); Ycnt>b; Ycnt-=iGLOBAL_SCREENWIDTH) {
memcpy(Ycnt+startoffset,Ycnt+startX,viewwidth-startX);
}
}
//----------------------------------------------------------------------
void MoveScreenUpRight()
{
int startX,startY,startoffset;
byte *Ycnt,*b;
// SetTextMode ( );
b=(byte *)bufferofs;
b += (((iGLOBAL_SCREENHEIGHT-viewheight)/2)*iGLOBAL_SCREENWIDTH)+((iGLOBAL_SCREENWIDTH-viewwidth)/2);
if (viewsize == 8) {
b += 8*iGLOBAL_SCREENWIDTH;
}
startX = 3; //take 3 pixels to the right
startY = 3; //take 3 lines down
startoffset = (startY*iGLOBAL_SCREENWIDTH);//+startX;
for (Ycnt=b; Ycnt<b+((viewheight-startY)*iGLOBAL_SCREENWIDTH); Ycnt+=iGLOBAL_SCREENWIDTH) {
memcpy(Ycnt+startX,Ycnt+startoffset, viewwidth-startX);
}
}
//----------------------------------------------------------------------
void MoveScreenDownRight()
{
int startX,startY,startoffset;
byte *Ycnt,*b;
// SetTextMode ( );
b=(byte *)bufferofs;
b += (((iGLOBAL_SCREENHEIGHT-viewheight)/2)*iGLOBAL_SCREENWIDTH)+((iGLOBAL_SCREENWIDTH-viewwidth)/2);
if (viewsize == 8) {
b += 8*iGLOBAL_SCREENWIDTH;
}
startX = 3; //take 3 pixels to the right
startY = 3; //take 3 lines down
startoffset = (startY*iGLOBAL_SCREENWIDTH)+startX;
//Ycnt starts in botton of screen and copys lines upwards
for (Ycnt=b+((viewheight-startY-1)*iGLOBAL_SCREENWIDTH); Ycnt>b; Ycnt-=iGLOBAL_SCREENWIDTH) {
memcpy(Ycnt+startoffset,Ycnt,viewwidth-startX);
}
}
extern int whichResolution;
boolean writeNewResIntoCfg = false;
void WriteNewResolution(void)
{
}