#include "src/lib/16_rf.h"\r
#pragma hdrstop\r
\r
+struct glob_game_vars *gvar;\r
+static word far* clockw= (word far*) 0x046C; /* 18.2hz clock */\r
+\r
/*\r
=============================================================================\r
\r
=====================\r
*/\r
\r
-void RF_FixOfs (void)\r
+void RF_FixOfs (global_game_variables_t *gvar)\r
{\r
- if (grmode == EGAGR)\r
- {\r
+// if (grmode == EGAGR)\r
+// {\r
screenpage = 0;\r
otherpage = 1;\r
- panx = pany = pansx = pansy = panadjust = 0;\r
+ gvar->video.ofs.pan.panx = gvar->video.ofs.pan.pany = gvar->video.ofs.pan.pansx = gvar->video.ofs.pan.pansy = gvar->video.ofs.pan.panadjust = 0;\r
displayofs = screenstart[screenpage];\r
bufferofs = screenstart[otherpage];\r
masterofs = screenstart[2];\r
- VW_SetScreen (displayofs,0);\r
+/*++++ VL_SetScreen (displayofs,0);\r
}\r
else\r
{\r
bufferofs = 0;\r
masterofs = 0x8000;\r
- }\r
+ }*/\r
}\r
\r
\r
// make a lookup table for the maps left edge\r
//\r
if (mapheight > MAXMAPHEIGHT)\r
- Quit ("RF_NewMap: Map too tall!");\r
+ Quit (gvar, "RF_NewMap: Map too tall!");\r
spot = 0;\r
for (i=0;i<mapheight;i++)\r
{\r
// new chain of animating tiles\r
\r
if (i>=MAXANIMTYPES)\r
- Quit ("RF_MarkTileGraphics: Too many unique animated tiles!");\r
+ Quit (gvar, "RF_MarkTileGraphics: Too many unique animated tiles!");\r
allanims[i].current = tile;\r
allanims[i].count = tinf[SPEED+tile];\r
\r
CA_MarkGrChunk(STARTTILE16+next);\r
next += (signed char)(tinf[ANIM+next]);\r
if (++anims > 20)\r
- Quit ("MarkTileGraphics: Unending animation!");\r
+ Quit (gvar, "MarkTileGraphics: Unending animation!");\r
}\r
\r
}\r
// new chain of animating tiles\r
\r
if (i>=MAXANIMTYPES)\r
- Quit ("RF_MarkTileGraphics: Too many unique animated tiles!");\r
+ Quit (gvar, "RF_MarkTileGraphics: Too many unique animated tiles!");\r
allanims[i].current = tilehigh;\r
allanims[i].count = tinf[MSPEED+tile];\r
\r
CA_MarkGrChunk(STARTTILE16M+next);\r
next += (signed char)(tinf[MANIM+next]);\r
if (++anims > 20)\r
- Quit ("MarkTileGraphics: Unending animation!");\r
+ Quit (gvar, "MarkTileGraphics: Unending animation!");\r
}\r
\r
}\r
if (tinf[ANIM+tile] && tinf[SPEED+tile])\r
{\r
if (!animfreeptr)\r
- Quit ("RF_CheckForAnimTile: No free spots in tilearray!");\r
+ Quit (gvar, "RF_CheckForAnimTile: No free spots in tilearray!");\r
anim = animfreeptr;\r
animfreeptr = animfreeptr->nexttile;\r
next = animhead; // stick it at the start of the list\r
if (tinf[MANIM+tile] && tinf[MSPEED+tile])\r
{\r
if (!animfreeptr)\r
- Quit ("RF_CheckForAnimTile: No free spots in tilearray!");\r
+ Quit (gvar, "RF_CheckForAnimTile: No free spots in tilearray!");\r
anim = animfreeptr;\r
animfreeptr = animfreeptr->nexttile;\r
next = animhead; // stick it at the start of the list\r
y = current->y-originytile;\r
\r
if (x>=PORTTILESWIDE || y>=PORTTILESHIGH)\r
- Quit ("RFL_AnimateTiles: Out of bounds!");\r
+ Quit (gvar, "RFL_AnimateTiles: Out of bounds!");\r
\r
updateofs = uwidthtable[y] + x;\r
RFL_NewTile(updateofs); // puts "1"s in both pages\r
originyscreen = originytile<<SY_T_SHIFT;\r
originmap = mapbwidthtable[originytile] + originxtile*2;\r
\r
-#if GRMODE == EGAGR\r
- panx = (originxglobal>>G_P_SHIFT) & 15;\r
- pansx = panx & 8;\r
- pany = pansy = (originyglobal>>G_P_SHIFT) & 15;\r
- panadjust = panx/8 + ylookup[pany];\r
-#endif\r
+//#if GRMODE == EGAGR\r
+ gvar->video.ofs.pan.panx = (originxglobal>>G_P_SHIFT) & 15;\r
+ gvar->video.ofs.pan.pansx = gvar->video.ofs.pan.panx & 8;\r
+ gvar->video.ofs.pan.pany = gvar->video.ofs.pan.pansy = (originyglobal>>G_P_SHIFT) & 15;\r
+// gvar->video.ofs.pan.panadjust = gvar->video.ofs.pan.panx/8 + gvar->video.ofs.ylookup[gvar->video.ofs.pan.pany];\r
+ gvar->video.ofs.pan.panadjust = gvar->video.ofs.pan.panx/8 + (gvar->video.ofs.pan.pany*gvar->video.page[0].stridew);\r
+/*#endif\r
\r
#if GRMODE == CGAGR\r
- panx = (originxglobal>>G_P_SHIFT) & 15;\r
- pansx = panx & 12;\r
- pany = pansy = (originyglobal>>G_P_SHIFT) & 15;\r
- panadjust = pansx/4 + ylookup[pansy];\r
+ gvar->video.ofs.pan.panx = (originxglobal>>G_P_SHIFT) & 15;\r
+ gvar->video.ofs.pan.pansx = gvar->video.ofs.pan.panx & 12;\r
+ gvar->video.ofs.pan.pany = gvar->video.ofs.pan.pansy = (originyglobal>>G_P_SHIFT) & 15;\r
+ gvar->video.ofs.pan.panadjust = gvar->video.ofs.pan.pansx/4 + gvar->video.ofs.ylookup[gvar->video.ofs.pan.pansy];\r
#endif\r
+ */\r
\r
}\r
\r
\r
void RFL_ClearScrollBlocks (void)\r
{\r
- hscrollblocks = vscrollblocks = 0;\r
+ gvar->video.ofs.pan.hscrollblocks = gvar->video.ofs.pan.vscrollblocks = 0;\r
}\r
\r
\r
{\r
if (horizontal)\r
{\r
- hscrolledge[hscrollblocks] = y;\r
- if (hscrollblocks++ == MAXSCROLLEDGES)\r
- Quit ("RF_SetScrollBlock: Too many horizontal scroll blocks");\r
+ gvar->video.ofs.pan.hscrolledge[gvar->video.ofs.pan.hscrollblocks] = y;\r
+ if (gvar->video.ofs.pan.hscrollblocks++ == MAXSCROLLEDGES)\r
+ Quit (gvar, "RF_SetScrollBlock: Too many horizontal scroll blocks");\r
}\r
else\r
{\r
- vscrolledge[vscrollblocks] = x;\r
- if (vscrollblocks++ == MAXSCROLLEDGES)\r
- Quit ("RF_SetScrollBlock: Too many vertical scroll blocks");\r
+ gvar->video.ofs.pan.vscrolledge[gvar->video.ofs.pan.vscrollblocks] = x;\r
+ if (gvar->video.ofs.pan.vscrollblocks++ == MAXSCROLLEDGES)\r
+ Quit (gvar, "RF_SetScrollBlock: Too many vertical scroll blocks");\r
}\r
}\r
\r
if (x>0)\r
{\r
newxtile+=SCREENTILESWIDE;\r
- for (check=0;check<vscrollblocks;check++)\r
- if (vscrolledge[check] == newxtile)\r
+ for (check=0;check<gvar->video.ofs.pan.vscrollblocks;check++)\r
+ if (gvar->video.ofs.pan.vscrolledge[check] == newxtile)\r
{\r
originxglobal = originxglobal&0xff00;\r
break;\r
}\r
else if (x<0)\r
{\r
- for (check=0;check<vscrollblocks;check++)\r
- if (vscrolledge[check] == newxtile)\r
+ for (check=0;check<gvar->video.ofs.pan.vscrollblocks;check++)\r
+ if (gvar->video.ofs.pan.vscrolledge[check] == newxtile)\r
{\r
originxglobal = (originxglobal&0xff00)+0x100;\r
break;\r
if (y>0)\r
{\r
newytile+=SCREENTILESHIGH;\r
- for (check=0;check<hscrollblocks;check++)\r
- if (hscrolledge[check] == newytile)\r
+ for (check=0;check<gvar->video.ofs.pan.hscrollblocks;check++)\r
+ if (gvar->video.ofs.pan.hscrolledge[check] == newytile)\r
{\r
originyglobal = originyglobal&0xff00;\r
break;\r
}\r
else if (y<0)\r
{\r
- for (check=0;check<hscrollblocks;check++)\r
- if (hscrolledge[check] == newytile)\r
+ for (check=0;check<gvar->video.ofs.pan.hscrollblocks;check++)\r
+ if (gvar->video.ofs.pan.hscrolledge[check] == newytile)\r
{\r
originyglobal = (originyglobal&0xff00)+0x100;\r
break;\r
count = PORTTILESHIGH;\r
break;\r
default:\r
- Quit ("RFL_NewRow: Bad dir!");\r
+ Quit (gvar, "RFL_NewRow: Bad dir!");\r
}\r
\r
while (count--)\r
=\r
=====================\r
*/\r
-\r
+/*++++\r
void RF_MapToMap (unsigned srcx, unsigned srcy,\r
unsigned destx, unsigned desty,\r
unsigned width, unsigned height)\r
}\r
}\r
}\r
-\r
+*/\r
//===========================================================================\r
\r
\r
=\r
=====================\r
*/\r
-\r
+/*++++\r
void RF_MemToMap (unsigned far *source, unsigned plane,\r
unsigned destx, unsigned desty,\r
unsigned width, unsigned height)\r
RFL_CheckForAnimTile (destx+x,desty+y);\r
}\r
}\r
-}\r
+}*/\r
\r
//===========================================================================\r
\r
originxtile = orgx>>G_T_SHIFT;\r
originytile = orgy>>G_T_SHIFT;\r
\r
- for (check=0;check<vscrollblocks;check++)\r
+ for (check=0;check<gvar->video.ofs.pan.vscrollblocks;check++)\r
{\r
- edge = vscrolledge[check];\r
+ edge = gvar->video.ofs.pan.vscrolledge[check];\r
if (edge>=originxtile && edge <=originxtile+10)\r
{\r
orgx = (edge+1)*TILEGLOBAL;\r
}\r
}\r
\r
- for (check=0;check<hscrollblocks;check++)\r
+ for (check=0;check<gvar->video.ofs.pan.hscrollblocks;check++)\r
{\r
- edge = hscrolledge[check];\r
+ edge = gvar->video.ofs.pan.hscrolledge[check];\r
if (edge>=originytile && edge <=originytile+6)\r
{\r
orgy = (edge+1)*TILEGLOBAL;\r
\r
void RF_ClearBlock (int x, int y, int width, int height)\r
{\r
- eraseblocktype block;\r
+// eraseblocktype block;\r
\r
#if GRMODE == EGAGR\r
block.screenx = x/8+originxscreen;\r
{\r
int xx,yy,xl,xh,yl,yh;\r
\r
- xl=(x+panx)/16;\r
- xh=(x+panx+width+15)/16;\r
- yl=(y+pany)/16;\r
- yh=(y+pany+height+15)/16;\r
+ xl=(x+gvar->video.ofs.pan.panx)/16;\r
+ xh=(x+gvar->video.ofs.pan.panx+width+15)/16;\r
+ yl=(y+gvar->video.ofs.pan.pany)/16;\r
+ yh=(y+gvar->video.ofs.pan.pany+height+15)/16;\r
for (yy=yl;yy<=yh;yy++)\r
for (xx=xl;xx<=xh;xx++)\r
RFL_NewTile (yy*UPDATEWIDE+xx);\r
\r
void RF_CalcTics (void)\r
{\r
- long newtime,oldtimecount;\r
+ long newtime;//,oldtimecount;\r
+ word TimeCount = *clockw;\r
\r
//\r
// calculate tics since last refresh for adaptive timing\r
if (lasttimecount > TimeCount)\r
TimeCount = lasttimecount; // if the game was paused a LONG time\r
\r
- if (DemoMode) // demo recording and playback needs\r
+/*++++ if (DemoMode) // demo recording and playback needs\r
{ // to be constant\r
//\r
// take DEMOTICS or more tics, and modify Timecount to reflect time taken\r
tics = DEMOTICS;\r
}\r
else\r
- {\r
+ {*/\r
//\r
// non demo, so report actual time\r
//\r
TimeCount -= (tics-MAXTICS);\r
tics = MAXTICS;\r
}\r
- }\r
+// }\r
}\r
\r
/*\r
unsigned updatenum;\r
\r
RFL_BoundNewOrigin (x,y);\r
-/*??\r
+\r
// calculate new origin related globals\r
//\r
- RFL_CalcOriginStuff (x,y);*/\r
+ RFL_CalcOriginStuff (x,y);\r
\r
//\r
// clear out all animating tiles\r
//\r
// set up the new update arrays at base position\r
//\r
-//?? memset (tilecache,0,sizeof(tilecache)); // old cache is invalid\r
+ memset (tilecache,0,sizeof(tilecache)); // old cache is invalid\r
\r
updatestart[0] = baseupdatestart[0];\r
updatestart[1] = baseupdatestart[1];\r
int oldxt,oldyt,move,yy;\r
unsigned updatespot;\r
byte *update0,*update1;\r
- unsigned oldpanx,oldpanadjust,oldoriginmap,oldscreen,newscreen,screencopy;\r
+ unsigned oldgvar->video.ofs.pan.panx,oldgvar->video.ofs.pan.panadjust,oldoriginmap,oldscreen,newscreen,screencopy;\r
int screenmove;\r
\r
oldxt = originxtile;\r
oldyt = originytile;\r
oldoriginmap = originmap;\r
- oldpanadjust = panadjust;\r
- oldpanx = panx;\r
+ oldgvar->video.ofs.pan.panadjust = gvar->video.ofs.pan.panadjust;\r
+ oldgvar->video.ofs.pan.panx = gvar->video.ofs.pan.panx;\r
\r
RFL_CalcOriginStuff ((long)originxglobal + x,(long)originyglobal + y);\r
\r
oldscreen = screenstart[i] - screenmove;\r
newscreen = oldscreen + screencopy;\r
screenstart[i] = newscreen + screenmove;\r
- VW_ScreenToScreen (oldscreen,newscreen,\r
+//++++ VW_ScreenToScreen (oldscreen,newscreen,\r
PORTTILESWIDE*2,PORTTILESHIGH*16);\r
\r
- if (i==screenpage)\r
- VW_SetScreen(newscreen+oldpanadjust,oldpanx & xpanmask);\r
+//++++ if (i==screenpage)\r
+//++++ VL_SetScreen(newscreen+oldgvar->video.ofs.pan.panadjust,oldgvar->video.ofs.pan.panx & xpanmask);\r
}\r
}\r
bufferofs = screenstart[otherpage];\r
// this is a brand new sprite, so allocate a block from the array\r
\r
if (!spritefreeptr)\r
- Quit ("RF_PlaceSprite: No free spots in spritearray!");\r
+ Quit (gvar, "RF_PlaceSprite: No free spots in spritearray!");\r
\r
sprite = spritefreeptr;\r
spritefreeptr = spritefreeptr->nextsprite;\r
//\r
// erase the block by copying from the master screen\r
//\r
- pos = ylookup[block->screeny]+block->screenx;\r
- VW_ScreenToScreen (masterofs+pos,bufferofs+pos,\r
+ pos = gvar->video.ofs.ylookup[block->screeny]+block->screenx;\r
+//++++ VW_ScreenToScreen (masterofs+pos,bufferofs+pos,\r
block->width,block->height);\r
\r
//\r
height = PORTSCREENHIGH - porty; // clip bottom off\r
}\r
\r
- dest = bufferofs + ylookup[porty] + portx;\r
+ dest = bufferofs + gvar->video.ofs.ylookup[porty] + portx;\r
\r
switch (sprite->draw)\r
{\r
case spritedraw:\r
- VW_MaskBlock(grsegs[sprite->grseg], sourceofs,\r
+//++++ VW_MaskBlock(grsegs[sprite->grseg], sourceofs,\r
dest,sprite->width,height,sprite->planesize);\r
break;\r
\r
//\r
// display the changed screen\r
//\r
- VW_SetScreen(bufferofs+panadjust,panx & xpanmask);\r
+ VL_SetScreen(bufferofs+gvar->video.ofs.pan.panadjust,gvar->video.ofs.pan.panx & xpanmask);\r
\r
//\r
// prepare for next refresh\r
unsigned updatenum;\r
\r
RFL_BoundNewOrigin (x,y);\r
-/*??\r
+\r
// calculate new origin related globals\r
//\r
- RFL_CalcOriginStuff (x,y);*/\r
+ RFL_CalcOriginStuff (x,y);\r
\r
//\r
// clear out all animating tiles\r
// this is a brand new sprite, so allocate a block from the array\r
\r
if (!spritefreeptr)\r
- Quit ("RF_PlaceSprite: No free spots in spritearray!");\r
+ Quit (gvar, "RF_PlaceSprite: No free spots in spritearray!");\r
\r
sprite = spritefreeptr;\r
spritefreeptr = spritefreeptr->nextsprite;\r
//\r
// erase the block by copying from the master screen\r
//\r
- pos = ylookup[block->screeny]+block->screenx;\r
+//---- pos = gvar->video.ofs.ylookup[block->screeny]+block->screenx;\r
+ pos = (block->screeny*gvar->video.page[0].stridew)+block->screenx;\r
block->width = (block->width + (pos&1) + 1)& ~1;\r
pos &= ~1; // make sure a word copy gets used\r
- VW_ScreenToScreen (masterofs+pos,bufferofs+pos,\r
+//++++ VW_ScreenToScreen (masterofs+pos,bufferofs+pos,\r
block->width,block->height);\r
\r
//\r
height = PORTSCREENHIGH - porty; // clip bottom off\r
}\r
\r
- dest = bufferofs + ylookup[porty] + portx;\r
+ dest = bufferofs + gvar->video.ofs.ylookup[porty] + portx;\r
\r
switch (sprite->draw)\r
{\r