ref: 8cdf6b06b9805fe39e72410549175e37415eb056
dir: /game.c/
int ingame,fizzlein;
u16int latchpics[NUMLATCHPICS];
#define MAXDEMOSIZE 8192
void StartDemoRecord (s16int levelnumber)
{
MM_GetPtr (&demobuffer,MAXDEMOSIZE);
MM_SetLock (&demobuffer,true);
demoptr = (char far *)demobuffer;
lastdemoptr = demoptr+MAXDEMOSIZE;
*demoptr = levelnumber;
demoptr += 4; // leave space for length
gm.record = true;
}
char demoname[13] = "DEMO?.";
void FinishDemoRecord (void)
{
s32int length,level;
gm.record = false;
length = demoptr - (char far *)demobuffer;
demoptr = ((char far *)demobuffer)+1;
*(u16int far *)demoptr = length;
CenterWindow(24,3); /* No. */
PrintY+=6;
US_Print(" Demo number (0-9):");
VW_UpdateScreen();
if (US_LineInput (px,py,str,NULL,true,2,0))
{
level = atoi (str);
if (level>=0 && level<=9)
{
demoname[4] = '0'+level;
CA_WriteFile (demoname,(void far *)demobuffer,length);
}
}
MM_FreePtr (&demobuffer);
}
void RecordDemo (void)
{
s16int level,esc;
CenterWindow(26,3); /* No. */
PrintY+=6;
CA_CacheGrChunk(STARTFONT);
fontnumber=0;
US_Print(" Demo which level(1-10):");
VW_UpdateScreen();
VW_FadeIn ();
esc = !US_LineInput (px,py,str,NULL,true,2,0);
if (esc)
return;
level = atoi (str);
level--;
SETFONTCOLOR(0,15);
VW_FadeOut ();
#ifndef SPEAR
NewGame (GDhard,level/10);
gamestate.mapon = level%10;
#else
NewGame (GDhard,0);
gamestate.mapon = level;
#endif
StartDemoRecord (level);
view ();
VW_FadeIn ();
startgame = false;
gm.record = true;
initmap ();
mapmus ();
PM_CheckMainMem ();
fizzlein = true;
PlayLoop ();
gm.demo = false;
stopmus ();
VW_FadeOut ();
FinishDemoRecord ();
}
#define DEATHROTATE 2
void GameLoop (void)
{
s16int i,xl,yl,xh,yh;
char num[20];
int died;
restartgame:
SETFONTCOLOR(0,15);
view ();
died = false;
restart:
do
{
if (!gm.load)
gm.pt = gamestate.oldscore;
hudp();
startgame = false;
if (gm.load)
gm.load = false;
else
initmap ();
ingame = true;
mapmus ();
PM_CheckMainMem ();
if (!died)
PreloadGraphics ();
else
died = false;
fizzlein = true;
hudm ();
startplayloop:
PlayLoop ();
stopmus ();
ingame = false;
if (gm.record && gm.φ != ex_warped)
FinishDemoRecord ();
if (startgame || gm.load)
goto restartgame;
switch (gm.φ)
{
case ex_completed:
case ex_secretlevel:
break;
case ex_died:
return;
case ex_victorious:
return;
}
} while (1);
}