Move public demo vars to a single struct

This commit is contained in:
fickleheart 2019-03-24 21:32:15 -05:00
parent ccefc48af3
commit 4b7d2aea84
27 changed files with 209 additions and 199 deletions

View File

@ -1742,8 +1742,8 @@ static void CL_LoadReceivedSavegame(void)
}
paused = false;
demoplayback = false;
titledemo = false;
demo.playback = false;
demo.title = false;
automapactive = false;
// load a base level
@ -2541,7 +2541,7 @@ static void Command_connect(void)
return;
}
if (Playing() || titledemo)
if (Playing() || demo.title)
{
CONS_Printf(M_GetText("You cannot connect while in a game. End this game first.\n"));
return;
@ -2642,7 +2642,7 @@ void CL_RemovePlayer(INT32 playernum, INT32 reason)
demo_extradata[playernum] |= DXD_PLAYSTATE;
if (server && !demoplayback)
if (server && !demo.playback)
{
INT32 node = playernode[playernum];
//playerpernode[node] = 0; // It'd be better to remove them all at once, but ghosting happened, so continue to let CL_RemovePlayer do it one-by-one
@ -2717,7 +2717,7 @@ void CL_RemovePlayer(INT32 playernum, INT32 reason)
RemoveAdminPlayer(playernum); // don't stay admin after you're gone
}
if (playernum == displayplayer && !demoplayback)
if (playernum == displayplayer && !demo.playback)
displayplayer = consoleplayer; // don't look through someone's view who isn't there
#ifdef HAVE_BLUA
@ -2738,7 +2738,7 @@ void CL_Reset(void)
G_StopMetalRecording();
if (metalplayback)
G_StopMetalDemo();
if (demorecording)
if (demo.recording)
G_CheckDemoStatus();
// reset client/server code
@ -3657,7 +3657,7 @@ boolean Playing(void)
boolean SV_SpawnServer(void)
{
if (demoplayback)
if (demo.playback)
G_StopDemo(); // reset engine parameter
if (metalplayback)
G_StopMetalDemo();
@ -5245,7 +5245,7 @@ void TryRunTics(tic_t realtics)
NetUpdate();
if (demoplayback)
if (demo.playback)
{
neededtic = gametic + realtics * (gamestate == GS_LEVEL ? cv_playbackspeed.value : 1);
// start a game after a demo
@ -5508,7 +5508,7 @@ FILESTAMP
}
else
{
if (!demoplayback)
if (!demo.playback)
{
INT32 counts;

View File

@ -1502,7 +1502,7 @@ void D_SRB2Main(void)
if (M_CheckParm("-playdemo"))
{
singledemo = true; // quit after one demo
demo.quitafterplaying = true; // quit after one demo
G_DeferedPlayDemo(tmp);
}
else

View File

@ -2005,7 +2005,7 @@ static void Command_View_f(void)
default: viewnum = 1;
}
if (viewnum > 1 && !( multiplayer && demoplayback ))
if (viewnum > 1 && !( multiplayer && demo.playback ))
{
CONS_Alert(CONS_NOTICE,
"You must be viewing a multiplayer replay to use this.\n");
@ -2083,7 +2083,7 @@ static void Command_SetViews_f(void)
UINT8 splits;
UINT8 newsplits;
if (!( demoplayback && multiplayer ))
if (!( demo.playback && multiplayer ))
{
CONS_Alert(CONS_NOTICE,
"You must be viewing a multiplayer replay to use this.\n");
@ -2137,7 +2137,7 @@ static void Command_Playdemo_f(void)
}
// disconnect from server here?
if (demoplayback)
if (demo.playback)
G_StopDemo();
if (metalplayback)
G_StopMetalDemo();
@ -2148,8 +2148,8 @@ static void Command_Playdemo_f(void)
CONS_Printf(M_GetText("Playing back demo '%s'.\n"), name);
demo_loadfiles = strcmp(COM_Argv(2), "-addfiles") == 0;
demo_ignorefiles = strcmp(COM_Argv(2), "-force") == 0;
demo.loadfiles = strcmp(COM_Argv(2), "-addfiles") == 0;
demo.ignorefiles = strcmp(COM_Argv(2), "-force") == 0;
// Internal if no extension, external if one exists
// If external, convert the file name to a path in SRB2's home directory
@ -2176,7 +2176,7 @@ static void Command_Timedemo_f(void)
}
// disconnect from server here?
if (demoplayback)
if (demo.playback)
G_StopDemo();
if (metalplayback)
G_StopMetalDemo();
@ -2610,7 +2610,7 @@ static void Got_Mapcmd(UINT8 **cp, INT32 playernum)
CON_ToggleOff();
CON_ClearHUD();
if (demoplayback && !timingdemo)
if (demo.playback && !demo.timing)
precache = false;
if (resetplayer)
@ -2628,18 +2628,18 @@ static void Got_Mapcmd(UINT8 **cp, INT32 playernum)
#endif*/
demosaved = demodefersave = false;
demosavebutton = 0;
demo.savebutton = 0;
G_InitNew(pencoremode, mapname, resetplayer, skipprecutscene);
if (demoplayback && !timingdemo)
if (demo.playback && !demo.timing)
precache = true;
if (timingdemo)
if (demo.timing)
G_DoneLevelLoad();
if (metalrecording)
G_BeginMetal();
if (demorecording) // Okay, level loaded, character spawned and skinned,
if (demo.recording) // Okay, level loaded, character spawned and skinned,
G_BeginRecording(); // I AM NOW READY TO RECORD.
demo_start = true;
demo.deferstart = true;
}
static void Command_Pause(void)
@ -2695,7 +2695,7 @@ static void Got_Pause(UINT8 **cp, INT32 playernum)
paused = READUINT8(*cp);
dedicatedpause = READUINT8(*cp);
if (!demoplayback)
if (!demo.playback)
{
if (netgame)
{
@ -4668,7 +4668,7 @@ static void PointLimit_OnChange(void)
static void NumLaps_OnChange(void)
{
if (!G_RaceGametype() || (modeattacking || demoplayback))
if (!G_RaceGametype() || (modeattacking || demo.playback))
return;
if (server && Playing()
@ -5108,7 +5108,7 @@ static void Command_ExitLevel_f(void)
CONS_Printf(M_GetText("This only works in a netgame.\n"));
else if (!(server || (IsPlayerAdmin(consoleplayer))))
CONS_Printf(M_GetText("Only the server or a remote admin can use this.\n"));
else if (gamestate != GS_LEVEL || demoplayback)
else if (gamestate != GS_LEVEL || demo.playback)
CONS_Printf(M_GetText("You must be in a level to use this.\n"));
else
SendNetXCmd(XD_EXITLEVEL, NULL, 0);

View File

@ -9873,7 +9873,7 @@ static inline int lib_getenum(lua_State *L)
lua_pushinteger(L, mapmusflags);
return 1;
} else if (fastcmp(word,"server")) {
if ((!multiplayer || !(netgame || demoplayback)) && !playeringame[serverplayer])
if ((!multiplayer || !(netgame || demo.playback)) && !playeringame[serverplayer])
return 0;
LUA_PushUserdata(L, &players[serverplayer], META_PLAYER);
return 1;

View File

@ -487,8 +487,6 @@ extern UINT32 timesBeaten; // # of times the game has been beaten.
extern UINT32 timesBeatenWithEmeralds;
//extern UINT32 timesBeatenUltimate;
extern char demotitle[65];
// ===========================
// Internal parameters, fixed.
// ===========================

View File

@ -909,9 +909,9 @@ void F_StartTitleScreen(void)
// IWAD dependent stuff.
// music is started in the ticker
if (!fromtitledemo) // SRB2Kart: Don't reset music if the right track is already playing
if (!demo.fromtitle) // SRB2Kart: Don't reset music if the right track is already playing
S_StopMusic();
fromtitledemo = false;
demo.fromtitle = false;
animtimer = 0;
@ -1098,9 +1098,9 @@ void F_TitleScreenTicker(boolean run)
}*/
loadreplay:
titledemo = fromtitledemo = true;
demo_ignorefiles = true;
demo_loadfiles = false;
demo.title = demo.fromtitle = true;
demo.ignorefiles = true;
demo.loadfiles = false;
G_DoPlayDemo(dname);
}
}

View File

@ -101,7 +101,6 @@ UINT8 numDemos = 0; //3; -- i'm FED UP of losing my skincolour to a broken
UINT32 demoDelayTime = 15*TICRATE;
UINT32 demoIdleTime = 3*TICRATE;
boolean timingdemo; // if true, exit with report on completion
boolean nodrawers; // for comparative timing purposes
boolean noblit; // for comparative timing purposes
static tic_t demostarttime; // for comparative timing purposes
@ -289,21 +288,16 @@ UINT32 timesBeatenWithEmeralds;
//@TODO put these all in a struct for namespacing purposes?
static char demoname[128];
char demotitle[65];
boolean demorecording, demosaved, demodefersave, demoplayback;
boolean demo_loadfiles, demo_ignorefiles; // Demo file loading options
tic_t demosavebutton;
boolean titledemo; // Title Screen demo can be cancelled by any key
boolean fromtitledemo; // SRB2Kart: Don't stop the music
boolean demosaved, demodefersave;
static UINT8 *demobuffer = NULL;
static UINT8 *demo_p, *demotime_p;
static UINT8 *demoend;
static UINT8 demoflags;
static UINT16 demoversion;
boolean singledemo; // quit after playing a demo from cmdline
boolean demo_start; // don't start playing demo right away
static boolean demosynced = true; // console warning message
struct demovars_s demo;
boolean metalrecording; // recording as metal sonic
mobj_t *metalplayback;
static UINT8 *metalbuffer = NULL;
@ -1252,7 +1246,7 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics, UINT8 ssplayer)
static boolean keyboard_look, keyboard_look2, keyboard_look3, keyboard_look4; // true if lookup/down using keyboard
static boolean resetdown, resetdown2, resetdown3, resetdown4; // don't cam reset every frame
if (demoplayback) return;
if (demo.playback) return;
switch (ssplayer)
{
@ -1842,8 +1836,8 @@ static INT32 spectatedelay, spectatedelay2, spectatedelay3, spectatedelay4 = 0;
boolean G_Responder(event_t *ev)
{
// any other key pops up menu if in demos
if (gameaction == ga_nothing && !singledemo &&
((demoplayback && !modeattacking && !titledemo && !multiplayer) || gamestate == GS_TITLESCREEN))
if (gameaction == ga_nothing && !demo.quitafterplaying &&
((demo.playback && !modeattacking && !demo.title && !multiplayer) || gamestate == GS_TITLESCREEN))
{
if (ev->type == ev_keydown && ev->data1 != 301)
{
@ -1852,7 +1846,7 @@ boolean G_Responder(event_t *ev)
}
return false;
}
else if (demoplayback && titledemo)
else if (demo.playback && demo.title)
{
// Title demo uses intro responder
if (F_IntroResponder(ev))
@ -1922,21 +1916,21 @@ boolean G_Responder(event_t *ev)
if (gamestate == GS_LEVEL && ev->type == ev_keydown
&& (ev->data1 == KEY_F12 || ev->data1 == gamecontrol[gc_viewpoint][0] || ev->data1 == gamecontrol[gc_viewpoint][1]))
{
if (!demoplayback && (splitscreen || !netgame))
if (!demo.playback && (splitscreen || !netgame))
displayplayer = consoleplayer;
else
{
G_AdjustView(1, 1, true);
// change statusbar also if playing back demo
if (singledemo)
if (demo.quitafterplaying)
ST_changeDemoView();
return true;
}
}
if (gamestate == GS_LEVEL && ev->type == ev_keydown && multiplayer && demoplayback)
if (gamestate == GS_LEVEL && ev->type == ev_keydown && multiplayer && demo.playback)
{
if (ev->data1 == gamecontrolbis[gc_viewpoint][0] || ev->data1 == gamecontrolbis[gc_viewpoint][1])
{
@ -2106,7 +2100,7 @@ boolean G_CouldView(INT32 playernum)
return false;
// I don't know if we want this actually, but I'll humor the suggestion anyway
if (G_BattleGametype() && !demoplayback)
if (G_BattleGametype() && !demo.playback)
{
if (player->kartstuff[k_bumper] <= 0)
return false;
@ -2284,7 +2278,7 @@ void G_ResetView(UINT8 viewnum, INT32 playernum, boolean onlyactive)
}
}
if (viewnum == 1 && demoplayback)
if (viewnum == 1 && demo.playback)
consoleplayer = displayplayer;
}
@ -2415,7 +2409,7 @@ void G_Ticker(boolean run)
switch (gamestate)
{
case GS_LEVEL:
if (titledemo)
if (demo.title)
F_TitleDemoTicker();
P_Ticker(run); // tic the game
ST_Ticker();
@ -2545,7 +2539,7 @@ static inline void G_PlayerFinishLevel(INT32 player)
// SRB2kart: Increment the "matches played" counter.
if (player == consoleplayer)
{
if (legitimateexit && !demoplayback && !mapreset) // (yes you're allowed to unlock stuff this way when the game is modified)
if (legitimateexit && !demo.playback && !mapreset) // (yes you're allowed to unlock stuff this way when the game is modified)
{
matchesplayed++;
if (M_UpdateUnlockablesAndExtraEmblems(true))
@ -3331,7 +3325,7 @@ void G_ExitLevel(void)
// Remove CEcho text on round end.
HU_ClearCEcho();
if (multiplayer && demorecording && cv_recordmultiplayerdemos.value == 2)
if (multiplayer && demo.recording && cv_recordmultiplayerdemos.value == 2)
G_SaveDemo();
}
}
@ -3397,7 +3391,7 @@ boolean G_GametypeHasSpectators(void)
#if 0
return (gametype != GT_COOP && gametype != GT_COMPETITION && gametype != GT_RACE);
#else
return (netgame || (multiplayer && demoplayback)); //true
return (netgame || (multiplayer && demo.playback)); //true
#endif
}
@ -3723,7 +3717,7 @@ static void G_DoCompleted(void)
}
// play some generic music if there's no win/cool/lose music going on (for exitlevel commands)
if (G_RaceGametype() && ((multiplayer && demoplayback) || j == splitscreen+1) && (cv_inttime.value > 0))
if (G_RaceGametype() && ((multiplayer && demo.playback) || j == splitscreen+1) && (cv_inttime.value > 0))
S_ChangeMusicInternal("racent", true);
if (automapactive)
@ -3733,7 +3727,7 @@ static void G_DoCompleted(void)
prevmap = (INT16)(gamemap-1);
if (demoplayback) goto demointermission;
if (demo.playback) goto demointermission;
// go to next level
// nextmap is 0-based, unlike gamemap
@ -3860,7 +3854,7 @@ void G_AfterIntermission(void)
HU_ClearCEcho();
//G_NextLevel();
if (demoplayback)
if (demo.playback)
{
G_StopDemo();
D_StartTitle();
@ -4441,7 +4435,7 @@ void G_LoadGame(UINT32 slot, INT16 mapoverride)
}
save_p += VERSIONSIZE;
if (demoplayback) // reset game engine
if (demo.playback) // reset game engine
G_StopDemo();
// paused = false;
@ -4540,7 +4534,7 @@ void G_DeferedInitNew(boolean pencoremode, const char *mapname, INT32 pickedchar
UINT8 color = 0;
paused = false;
if (demoplayback)
if (demo.playback)
COM_BufAddText("stopdemo\n");
while (ghosts)
@ -4602,7 +4596,7 @@ void G_InitNew(UINT8 pencoremode, const char *mapname, boolean resetplayer, bool
legitimateexit = false; // SRB2Kart
comebackshowninfo = false;
if (!demoplayback && !netgame) // Netgame sets random seed elsewhere, demo playback sets seed just before us!
if (!demo.playback && !netgame) // Netgame sets random seed elsewhere, demo playback sets seed just before us!
P_SetRandSeed(M_RandomizedSeed()); // Use a more "Random" random seed
//SRB2Kart - Score is literally the only thing you SHOULDN'T reset at all times
@ -4648,7 +4642,7 @@ void G_InitNew(UINT8 pencoremode, const char *mapname, boolean resetplayer, bool
players[i].marescore = 0;
if (resetplayer && !(multiplayer && demoplayback)) // SRB2Kart
if (resetplayer && !(multiplayer && demo.playback)) // SRB2Kart
{
players[i].score = 0;
}
@ -5094,7 +5088,7 @@ void G_ReadDemoTiccmd(ticcmd_t *cmd, INT32 playernum)
{
UINT8 ziptic;
if (!demo_p || !demo_start)
if (!demo_p || !demo.deferstart)
return;
ziptic = READUINT8(demo_p);
@ -5202,35 +5196,35 @@ void G_WriteDemoTiccmd(ticcmd_t *cmd, INT32 playernum)
void G_GhostAddThok(INT32 playernum)
{
if (!demorecording || !(demoflags & DF_GHOST))
if (!demo.recording || !(demoflags & DF_GHOST))
return;
ghostext[playernum].flags = (ghostext[playernum].flags & ~EZT_THOKMASK) | EZT_THOK;
}
void G_GhostAddSpin(INT32 playernum)
{
if (!demorecording || !(demoflags & DF_GHOST))
if (!demo.recording || !(demoflags & DF_GHOST))
return;
ghostext[playernum].flags = (ghostext[playernum].flags & ~EZT_THOKMASK) | EZT_SPIN;
}
void G_GhostAddRev(INT32 playernum)
{
if (!demorecording || !(demoflags & DF_GHOST))
if (!demo.recording || !(demoflags & DF_GHOST))
return;
ghostext[playernum].flags = (ghostext[playernum].flags & ~EZT_THOKMASK) | EZT_REV;
}
void G_GhostAddFlip(INT32 playernum)
{
if (!demorecording || !(demoflags & DF_GHOST))
if (!demo.recording || !(demoflags & DF_GHOST))
return;
ghostext[playernum].flags |= EZT_FLIP;
}
void G_GhostAddColor(INT32 playernum, ghostcolor_t color)
{
if (!demorecording || !(demoflags & DF_GHOST))
if (!demo.recording || !(demoflags & DF_GHOST))
return;
if (ghostext[playernum].lastcolor == (UINT8)color)
{
@ -5243,7 +5237,7 @@ void G_GhostAddColor(INT32 playernum, ghostcolor_t color)
void G_GhostAddScale(INT32 playernum, fixed_t scale)
{
if (!demorecording || !(demoflags & DF_GHOST))
if (!demo.recording || !(demoflags & DF_GHOST))
return;
if (ghostext[playernum].lastscale == scale)
{
@ -5256,7 +5250,7 @@ void G_GhostAddScale(INT32 playernum, fixed_t scale)
void G_GhostAddHit(INT32 playernum, mobj_t *victim)
{
if (!demorecording || !(demoflags & DF_GHOST))
if (!demo.recording || !(demoflags & DF_GHOST))
return;
ghostext[playernum].flags |= EZT_HIT;
ghostext[playernum].hits++;
@ -5490,7 +5484,7 @@ void G_ConsGhostTic(INT32 playernum)
fixed_t syncleeway;
boolean nightsfail = false;
if (!demo_p || !demo_start)
if (!demo_p || !demo.deferstart)
return;
if (!(demoflags & DF_GHOST))
return; // No ghost data to use.
@ -6068,7 +6062,7 @@ void G_RecordDemo(const char *name)
demobuffer = malloc(maxsize);
demoend = demobuffer + maxsize;
demorecording = true;
demo.recording = true;
}
void G_RecordMetal(void)
@ -6111,7 +6105,7 @@ void G_BeginRecording(void)
// Full replay title
demo_p += 64;
snprintf(demotitle, 64, "%s - %s", G_BuildMapTitle(gamemap), modeattacking ? "Record Attack" : connectedservername);
snprintf(demo.titlename, 64, "%s - %s", G_BuildMapTitle(gamemap), modeattacking ? "Record Attack" : connectedservername);
// demo checksum
demo_p += 16;
@ -6253,7 +6247,7 @@ void G_BeginMetal(void)
void G_SetDemoTime(UINT32 ptime, UINT32 plap)
{
if (!demorecording || !demotime_p)
if (!demo.recording || !demotime_p)
return;
if (demoflags & DF_RECORDATTACK)
{
@ -6637,7 +6631,7 @@ void G_DoPlayDemo(char *defdemoname)
// read demo header
gameaction = ga_nothing;
demoplayback = true;
demo.playback = true;
if (memcmp(demo_p, DEMOHEADER, 12))
{
snprintf(msg, 1024, M_GetText("%s is not a SRB2Kart replay file.\n"), pdemoname);
@ -6645,8 +6639,8 @@ void G_DoPlayDemo(char *defdemoname)
M_StartMessage(msg, NULL, MM_NOTHING);
Z_Free(pdemoname);
Z_Free(demobuffer);
demoplayback = false;
titledemo = false;
demo.playback = false;
demo.title = false;
return;
}
demo_p += 12; // DEMOHEADER
@ -6658,8 +6652,8 @@ void G_DoPlayDemo(char *defdemoname)
{
case DEMOVERSION: // latest always supported
// demo title
M_Memcpy(demotitle, demo_p, 64);
CONS_Printf("Demo title: %s\n", demotitle);
M_Memcpy(demo.titlename, demo_p, 64);
CONS_Printf("Demo title: %s\n", demo.titlename);
demo_p += 64;
break;
@ -6675,8 +6669,8 @@ void G_DoPlayDemo(char *defdemoname)
M_StartMessage(msg, NULL, MM_NOTHING);
Z_Free(pdemoname);
Z_Free(demobuffer);
demoplayback = false;
titledemo = false;
demo.playback = false;
demo.title = false;
return;
}
demo_p += 16; // demo checksum
@ -6687,8 +6681,8 @@ void G_DoPlayDemo(char *defdemoname)
M_StartMessage(msg, NULL, MM_NOTHING);
Z_Free(pdemoname);
Z_Free(demobuffer);
demoplayback = false;
titledemo = false;
demo.playback = false;
demo.title = false;
return;
}
demo_p += 4; // "PLAY"
@ -6706,8 +6700,8 @@ void G_DoPlayDemo(char *defdemoname)
M_StartMessage(msg, NULL, MM_NOTHING);
Z_Free(pdemoname);
Z_Free(demobuffer);
demoplayback = false;
titledemo = false;
demo.playback = false;
demo.title = false;
return;
}
}
@ -6716,11 +6710,11 @@ void G_DoPlayDemo(char *defdemoname)
#endif
gametype = READUINT8(demo_p);
if (titledemo) // Titledemos should always play and ought to always be compatible with whatever wadlist is running.
if (demo.title) // Titledemos should always play and ought to always be compatible with whatever wadlist is running.
G_SkipDemoExtraFiles(&demo_p);
else if (demo_loadfiles)
else if (demo.loadfiles)
G_LoadDemoExtraFiles(&demo_p);
else if (demo_ignorefiles)
else if (demo.ignorefiles)
G_SkipDemoExtraFiles(&demo_p);
else
{
@ -6766,8 +6760,8 @@ void G_DoPlayDemo(char *defdemoname)
M_StartMessage(msg, NULL, MM_NOTHING);
Z_Free(pdemoname);
Z_Free(demobuffer);
demoplayback = false;
titledemo = false;
demo.playback = false;
demo.title = false;
return;
}
}
@ -6831,8 +6825,8 @@ void G_DoPlayDemo(char *defdemoname)
M_StartMessage(msg, NULL, MM_NOTHING);
Z_Free(pdemoname);
Z_Free(demobuffer);
demoplayback = false;
titledemo = false;
demo.playback = false;
demo.title = false;
return;
}
@ -6844,8 +6838,8 @@ void G_DoPlayDemo(char *defdemoname)
M_StartMessage(msg, NULL, MM_NOTHING);
Z_Free(pdemoname);
Z_Free(demobuffer);
demoplayback = false;
titledemo = false;
demo.playback = false;
demo.title = false;
return;
}
@ -6868,8 +6862,8 @@ void G_DoPlayDemo(char *defdemoname)
M_StartMessage(msg, NULL, MM_NOTHING);
Z_Free(pdemoname);
Z_Free(demobuffer);
demoplayback = false;
titledemo = false;
demo.playback = false;
demo.title = false;
return;
}
@ -6889,7 +6883,7 @@ void G_DoPlayDemo(char *defdemoname)
#endif
// didn't start recording right away.
demo_start = false;
demo.deferstart = false;
displayplayer = consoleplayer = 0;
memset(playeringame, 0, sizeof(playeringame));
@ -6910,8 +6904,8 @@ void G_DoPlayDemo(char *defdemoname)
M_StartMessage(msg, NULL, MM_NOTHING);
Z_Free(pdemoname);
Z_Free(demobuffer);
demoplayback = false;
titledemo = false;
demo.playback = false;
demo.title = false;
return;
}
@ -6936,7 +6930,7 @@ void G_DoPlayDemo(char *defdemoname)
#endif
// didn't start recording right away.
demo_start = false;
demo.deferstart = false;
/*#ifdef HAVE_BLUA
LUAh_MapChange(gamemap);
@ -6964,8 +6958,8 @@ void G_DoPlayDemo(char *defdemoname)
M_StartMessage(msg, NULL, MM_NOTHING);
Z_Free(pdemoname);
Z_Free(demobuffer);
demoplayback = false;
titledemo = false;
demo.playback = false;
demo.title = false;
return;
}
}
@ -6979,8 +6973,8 @@ void G_DoPlayDemo(char *defdemoname)
M_StartMessage(msg, NULL, MM_NOTHING);
Z_Free(pdemoname);
Z_Free(demobuffer);
demoplayback = false;
titledemo = false;
demo.playback = false;
demo.title = false;
return;
}
@ -7025,7 +7019,7 @@ void G_DoPlayDemo(char *defdemoname)
splitscreen = 0;
if (titledemo)
if (demo.title)
{
splitscreen = M_RandomKey(6)-1;
splitscreen = min(min(3, numslots-1), splitscreen); // Bias toward 1p and 4p views
@ -7060,7 +7054,7 @@ post_compat:
players[i].kartweight = kartweight[i];
}
demo_start = true;
demo.deferstart = true;
}
#undef SKIPERRORS
@ -7397,7 +7391,7 @@ void G_TimeDemo(const char *name)
restorecv_vidwait = cv_vidwait.value;
if (cv_vidwait.value)
CV_Set(&cv_vidwait, "0");
timingdemo = true;
demo.timing = true;
singletics = true;
framecount = 0;
demostarttime = I_GetTime();
@ -7531,11 +7525,11 @@ void G_StopDemo(void)
{
Z_Free(demobuffer);
demobuffer = NULL;
demoplayback = false;
if (titledemo)
demo.playback = false;
if (demo.title)
modeattacking = false;
titledemo = false;
timingdemo = false;
demo.title = false;
demo.timing = false;
singletics = false;
if (gamestate == GS_LEVEL && rendermode != render_none)
@ -7566,7 +7560,7 @@ boolean G_CheckDemoStatus(void)
// DO NOT end metal sonic demos here
if (timingdemo)
if (demo.timing)
{
INT32 demotime;
double f1, f2;
@ -7574,7 +7568,7 @@ boolean G_CheckDemoStatus(void)
if (!demotime)
return true;
G_StopDemo();
timingdemo = false;
demo.timing = false;
f1 = (double)demotime;
f2 = (double)framecount*TICRATE;
CONS_Printf(M_GetText("timed %u gametics in %d realtics\n%f seconds, %f avg fps\n"), leveltime,demotime,f1/TICRATE,f2/f1);
@ -7584,12 +7578,12 @@ boolean G_CheckDemoStatus(void)
return true;
}
if (demoplayback)
if (demo.playback)
{
if (singledemo)
if (demo.quitafterplaying)
I_Quit();
if (multiplayer && !titledemo)
if (multiplayer && !demo.title)
G_ExitLevel();
else
{
@ -7604,12 +7598,12 @@ boolean G_CheckDemoStatus(void)
return true;
}
if (demorecording && (!multiplayer || cv_recordmultiplayerdemos.value == 2))
if (demo.recording && (!multiplayer || cv_recordmultiplayerdemos.value == 2))
{
G_SaveDemo();
return true;
}
demorecording = false;
demo.recording = false;
return false;
}
@ -7622,7 +7616,7 @@ void G_SaveDemo(void)
#endif
WRITEUINT8(demo_p, DEMOMARKER); // add the demo end marker
M_Memcpy(p, demotitle, 64); // Write demo title here
M_Memcpy(p, demo.titlename, 64); // Write demo title here
p += 64;
if (multiplayer)
@ -7633,17 +7627,18 @@ void G_SaveDemo(void)
size_t i, strindex = 0;
boolean dash = true;
for (i = 0; demotitle[i] && i < 127; i++)
for (i = 0; demo.titlename[i] && i < 127; i++)
{
if ((demotitle[i] >= 'a' && demotitle[i] <= 'z') || (demotitle[i] >= '0' && demotitle[i] <= '9'))
if ((demo.titlename[i] >= 'a' && demo.titlename[i] <= 'z') ||
(demo.titlename[i] >= '0' && demo.titlename[i] <= '9'))
{
demo_slug[strindex] = demotitle[i];
demo_slug[strindex] = demo.titlename[i];
strindex++;
dash = false;
}
else if (demotitle[i] >= 'A' && demotitle[i] <= 'Z')
else if (demo.titlename[i] >= 'A' && demo.titlename[i] <= 'Z')
{
demo_slug[strindex] = demotitle[i] + 'a' - 'A';
demo_slug[strindex] = demo.titlename[i] + 'a' - 'A';
strindex++;
dash = false;
}
@ -7657,7 +7652,6 @@ void G_SaveDemo(void)
demo_slug[strindex] = 0;
if (dash) demo_slug[strindex-1] = 0;
CONS_Printf("%s\n%s\n", demotitle, demo_slug);
writepoint = strstr(demoname, "-") + 1;
demo_slug[128 - (writepoint - demoname) - 4] = 0;
@ -7673,7 +7667,7 @@ void G_SaveDemo(void)
demosaved = FIL_WriteFile(va(pandf, srb2home, demoname), demobuffer, demo_p - demobuffer); // finally output the file.
free(demobuffer);
demorecording = false;
demo.recording = false;
if (modeattacking != ATTACKING_RECORD)
{

View File

@ -36,13 +36,31 @@ extern boolean playeringame[MAXPLAYERS];
// ======================================
// demoplaying back and demo recording
extern boolean demoplayback, titledemo, fromtitledemo, demorecording, timingdemo, demosaved, demodefersave, demo_loadfiles, demo_ignorefiles;
extern tic_t demosavebutton;
extern boolean demosaved, demodefersave;
extern consvar_t cv_recordmultiplayerdemos, cv_netdemosyncquality;
// Quit after playing a demo from cmdline.
extern boolean singledemo;
extern boolean demo_start;
// Publicly-accessible demo vars
struct demovars_s {
char titlename[65];
boolean recording, playback, timing;
boolean title; // Title Screen demo can be cancelled by any key
boolean loadfiles, ignorefiles; // Demo file loading options
boolean fromtitle; // SRB2Kart: Don't stop the music
boolean quitafterplaying; // quit after playing a demo from cmdline
boolean deferstart; // don't start playing demo right away
tic_t savebutton; // Used to determine when the local player can choose to save the replay while the race is still going
enum {
DSM_NOTSAVING,
DSM_WILLAUTOSAVE,
DSM_TITLEENTRY,
DSM_WILLSAVE,
DSM_SAVED
} savemode;
};
extern struct demovars_s demo;
extern mobj_t *metalplayback;

View File

@ -2206,7 +2206,7 @@ static void HU_DrawDemoInfo(void)
}
else
{
V_DrawRightAlignedThinString(BASEVIDWIDTH-2, BASEVIDHEIGHT-10, V_ALLOWLOWERCASE, demotitle);
V_DrawRightAlignedThinString(BASEVIDWIDTH-2, BASEVIDHEIGHT-10, V_ALLOWLOWERCASE, demo.titlename);
}
if (modeattacking)
@ -2326,7 +2326,7 @@ void HU_Drawer(void)
if (cechotimer)
HU_DrawCEcho();
if (!( Playing() || demoplayback )
if (!( Playing() || demo.playback )
|| gamestate == GS_INTERMISSION || gamestate == GS_CUTSCENE
|| gamestate == GS_CREDITS || gamestate == GS_EVALUATION
|| gamestate == GS_GAMEEND
@ -2346,7 +2346,7 @@ void HU_Drawer(void)
LUAh_ScoresHUD();
#endif
}
if (demoplayback)
if (demo.playback)
{
HU_DrawDemoInfo();
}
@ -2356,7 +2356,7 @@ void HU_Drawer(void)
return;
// draw the crosshair, not when viewing demos nor with chasecam
/*if (!automapactive && !demoplayback)
/*if (!automapactive && !demo.playback)
{
if (cv_crosshair.value && !camera.chase && !players[displayplayer].spectator)
HU_DrawCrosshair();
@ -3009,7 +3009,7 @@ static void HU_DrawRankings(void)
// When you play, you quickly see your score because your name is displayed in white.
// When playing back a demo, you quickly see who's the view.
if (!splitscreen)
whiteplayer = demoplayback ? displayplayer : consoleplayer;
whiteplayer = demo.playback ? displayplayer : consoleplayer;
scorelines = 0;
memset(completed, 0, sizeof (completed));

View File

@ -7115,7 +7115,7 @@ void K_drawKartTimestamp(tic_t drawtime, INT32 TX, INT32 TY, INT16 emblemmap, UI
else if ((drawtime/TICRATE) & 1)
V_DrawKartString(TX, TY+3, splitflags, va("99'59\"99"));
if (emblemmap && (modeattacking || (mode == 1)) && !demoplayback) // emblem time!
if (emblemmap && (modeattacking || (mode == 1)) && !demo.playback) // emblem time!
{
INT32 workx = TX + 96, worky = TY+18;
SINT8 curemb = 0;
@ -8731,7 +8731,7 @@ void K_drawKartHUD(void)
&& comeback
&& stplyr->playerstate == PST_LIVE)));
if (!titledemo && (!battlefullscreen || splitscreen))
if (!demo.title && (!battlefullscreen || splitscreen))
{
// Draw the CHECK indicator before the other items, so it's overlapped by everything else
if (cv_kartcheck.value && !splitscreen && !players[displayplayer].exiting)
@ -8768,7 +8768,7 @@ void K_drawKartHUD(void)
K_drawKartItem();
// If not splitscreen, draw...
if (!splitscreen && !titledemo)
if (!splitscreen && !demo.title)
{
// Draw the timestamp
#ifdef HAVE_BLUA
@ -8788,7 +8788,7 @@ void K_drawKartHUD(void)
if (!stplyr->spectator) // Bottom of the screen elements, don't need in spectate mode
{
if (titledemo) // Draw title logo instead in titledemos
if (demo.title) // Draw title logo instead in demo.titles
{
INT32 x = BASEVIDWIDTH - 32, y = 128, offs;
@ -8838,7 +8838,7 @@ void K_drawKartHUD(void)
#endif
K_DrawKartPositionNum(stplyr->kartstuff[k_position]);
}
else //if (!(demoplayback && hu_showscores))
else //if (!(demo.playback && hu_showscores))
{
// Draw the input UI
#ifdef HAVE_BLUA

View File

@ -273,7 +273,7 @@ boolean cht_Responder(event_t *ev)
#define REQUIRE_OBJECTPLACE if (!objectplacing)\
{ CONS_Printf(M_GetText("OBJECTPLACE must be enabled.\n")); return; }
#define REQUIRE_INLEVEL if (gamestate != GS_LEVEL || demoplayback)\
#define REQUIRE_INLEVEL if (gamestate != GS_LEVEL || demo.playback)\
{ CONS_Printf(M_GetText("You must be in a level to use this.\n")); return; }
#define REQUIRE_SINGLEPLAYER if (netgame || multiplayer)\

View File

@ -2445,7 +2445,7 @@ boolean M_Responder(event_t *ev)
static INT32 lastx = 0, lasty = 0;
void (*routine)(INT32 choice); // for some casting problem
if (dedicated || (demoplayback && titledemo)
if (dedicated || (demo.playback && demo.title)
|| gamestate == GS_INTRO || gamestate == GS_CUTSCENE || gamestate == GS_GAMEEND
|| gamestate == GS_CREDITS || gamestate == GS_EVALUATION)
return false;
@ -2917,7 +2917,7 @@ void M_Drawer(void)
void M_StartControlPanel(void)
{
// time attack HACK
if (modeattacking && demoplayback)
if (modeattacking && demo.playback)
{
G_CheckDemoStatus();
S_ChangeMusicInternal("racent", true);
@ -6946,7 +6946,7 @@ static void M_HandleStaffReplay(INT32 choice)
break;
M_ClearMenus(true);
modeattacking = ATTACKING_RECORD;
demo_loadfiles = false; demo_ignorefiles = true; // Just assume that record attack replays have the files needed
demo.loadfiles = false; demo.ignorefiles = true; // Just assume that record attack replays have the files needed
G_DoPlayDemo(va("%sS%02u",G_BuildMapName(cv_nextmap.value),cv_dummystaff.value));
break;
default:
@ -6967,7 +6967,7 @@ static void M_ReplayTimeAttack(INT32 choice)
const char *which;
M_ClearMenus(true);
modeattacking = ATTACKING_RECORD; // set modeattacking before G_DoPlayDemo so the map loader knows
demo_loadfiles = false; demo_ignorefiles = true; // Just assume that record attack replays have the files needed
demo.loadfiles = false; demo.ignorefiles = true; // Just assume that record attack replays have the files needed
if (currentMenu == &SP_ReplayDef)
{
@ -7164,7 +7164,7 @@ static void M_ExitGameResponse(INT32 ch)
static void M_EndGame(INT32 choice)
{
(void)choice;
if (demoplayback)
if (demo.playback)
return;
if (!Playing())
@ -7589,7 +7589,7 @@ static void M_StartServer(INT32 choice)
else
joinpasswordset = false;
if (demoplayback)
if (demo.playback)
G_StopDemo();
if (metalrecording)
G_StopMetalDemo();

View File

@ -851,7 +851,7 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck)
// Secret emblem thingy
case MT_EMBLEM:
{
if (demoplayback || player->bot)
if (demo.playback || player->bot)
return;
emblemlocations[special->health-1].collected = true;

View File

@ -212,7 +212,7 @@ boolean P_DoSpring(mobj_t *spring, mobj_t *object)
{
object->angle = spring->angle;
if (!demoplayback || P_AnalogMove(object->player))
if (!demo.playback || P_AnalogMove(object->player))
{
if (object->player == &players[consoleplayer])
localangle = spring->angle;
@ -1264,7 +1264,7 @@ static boolean PIT_CheckThing(mobj_t *thing)
thing->angle = tmthing->angle;
if (!demoplayback || P_AnalogMove(thing->player))
if (!demo.playback || P_AnalogMove(thing->player))
{
if (thing->player == &players[consoleplayer])
localangle = thing->angle;

View File

@ -10789,7 +10789,7 @@ void P_SpawnPlayer(INT32 playernum)
}
// spawn as spectator determination
if (multiplayer && demoplayback); // Don't mess with spectator values since the demo setup handles them already.
if (multiplayer && demo.playback); // Don't mess with spectator values since the demo setup handles them already.
else if (!G_GametypeHasSpectators())
p->spectator = false;
else if (netgame && p->jointime <= 1 && pcount)

View File

@ -2729,7 +2729,7 @@ static boolean P_CanSave(void)
if ((cursaveslot < 0) // Playing without saving
|| (modifiedgame && !savemoddata) // Game is modified
|| (netgame || multiplayer) // Not in single-player
|| (demoplayback || demorecording || metalrecording) // Currently in demo
|| (demo.playback || demo.recording || metalrecording) // Currently in demo
|| (players[consoleplayer].lives <= 0) // Completely dead
|| (modeattacking || ultimatemode || G_IsSpecialStage(gamemap))) // Specialized instances
return false;
@ -3113,9 +3113,9 @@ boolean P_SetupLevel(boolean skipprecip)
}
}
if (modeattacking == ATTACKING_RECORD && !demoplayback)
if (modeattacking == ATTACKING_RECORD && !demo.playback)
P_LoadRecordGhosts();
/*else if (modeattacking == ATTACKING_NIGHTS && !demoplayback)
/*else if (modeattacking == ATTACKING_NIGHTS && !demo.playback)
P_LoadNightsGhosts();*/
if (G_TagGametype())
@ -3163,9 +3163,9 @@ boolean P_SetupLevel(boolean skipprecip)
? cv_basenumlaps.value
: mapheaderinfo[gamemap - 1]->numlaps);
//@TODO NET REPLAYS NEED BETTER FILE NAMING STUFF. ALSO OPTIONS. FUCK.
// Start recording replay in multiplayer with a temp filename
//@TODO I'd like to fix dedis crashing when recording replays for the future too...
if (!demoplayback && multiplayer && !dedicated) {
if (!demo.playback && multiplayer && !dedicated) {
static char buf[256];
sprintf(buf, "replay"PATHSEP"online"PATHSEP"%d-%s", (int) (time(NULL)), G_BuildMapName(gamemap));

View File

@ -3834,7 +3834,7 @@ DoneSection2:
if (player->mo->scale > mapobjectscale)
linespeed = FixedMul(linespeed, mapobjectscale + (player->mo->scale - mapobjectscale));
if (!demoplayback || P_AnalogMove(player))
if (!demo.playback || P_AnalogMove(player))
{
if (player == &players[consoleplayer])
localangle = player->mo->angle;
@ -7841,7 +7841,7 @@ void T_Pusher(pusher_t *p)
thing->player->pflags |= PF_SLIDING;
thing->angle = R_PointToAngle2 (0, 0, xspeed<<(FRACBITS-PUSH_FACTOR), yspeed<<(FRACBITS-PUSH_FACTOR));
if (!demoplayback || P_AnalogMove(thing->player))
if (!demo.playback || P_AnalogMove(thing->player))
{
if (thing->player == &players[consoleplayer])
{

View File

@ -599,7 +599,7 @@ void P_Ticker(boolean run)
if (run)
{
if (demorecording)
if (demo.recording)
{
if (!multiplayer) {
G_WriteDemoTiccmd(&players[consoleplayer].cmd, 0);
@ -610,7 +610,7 @@ void P_Ticker(boolean run)
G_WriteDemoTiccmd(&players[i].cmd, i);
}
}
if (demoplayback)
if (demo.playback)
{
if (!multiplayer) {
@ -629,7 +629,7 @@ void P_Ticker(boolean run)
}
// Keep track of how long they've been playing!
if (!demoplayback) // Don't increment if a demo is playing.
if (!demo.playback) // Don't increment if a demo is playing.
totalplaytime++;
/*if (!useNightsSS && G_IsSpecialStage(gamemap))
@ -728,23 +728,23 @@ void P_Ticker(boolean run)
if (multiplayer)
{
if (demorecording)
if (demo.recording)
{
G_WriteAllGhostTics();
if (demosavebutton && demosavebutton + 3*TICRATE < leveltime && InputDown(gc_lookback, 1))
if (demo.savebutton && demo.savebutton + 3*TICRATE < leveltime && InputDown(gc_lookback, 1))
demodefersave = true;
}
if (demoplayback) // Use Ghost data for consistency checks.
if (demo.playback) // Use Ghost data for consistency checks.
{
G_ConsAllGhostTics();
}
}
else
{
if (demorecording)
if (demo.recording)
G_WriteGhostTic(players[consoleplayer].mo, consoleplayer);
if (demoplayback) // Use Ghost data for consistency checks.
if (demo.playback) // Use Ghost data for consistency checks.
G_ConsGhostTic(0);
}
if (modeattacking)

View File

@ -169,7 +169,7 @@ fixed_t P_ReturnThrustY(mobj_t *mo, angle_t angle, fixed_t move)
boolean P_AutoPause(void)
{
// Don't pause even on menu-up or focus-lost in netgames or record attack
if (netgame || modeattacking || titledemo)
if (netgame || modeattacking || demo.title)
return false;
return (menuactive || ( window_notinfocus && cv_pauseifunfocused.value ));
@ -1147,7 +1147,7 @@ boolean P_EndingMusic(player_t *player)
if (!P_IsLocalPlayer(player)) // Only applies to a local player
return false;
if (multiplayer && demoplayback) // Don't play this in multiplayer replays
if (multiplayer && demo.playback) // Don't play this in multiplayer replays
return false;
// Event - Level Finish
@ -1707,7 +1707,7 @@ void P_SpawnThokMobj(player_t *player)
}
P_SetTarget(&mobj->target, player->mo); // the one thing P_SpawnGhostMobj doesn't do
if (demorecording)
if (demo.recording)
G_GhostAddThok((INT32) (player - players));
}
@ -1776,7 +1776,7 @@ void P_DoPlayerExit(player_t *player)
|| (splitscreen && player == &players[secondarydisplayplayer])
|| (splitscreen > 1 && player == &players[thirddisplayplayer])
|| (splitscreen > 2 && player == &players[fourthdisplayplayer]))
&& (!player->spectator && !demoplayback))
&& (!player->spectator && !demo.playback))
legitimateexit = true;
if (G_RaceGametype()) // If in Race Mode, allow
@ -1836,7 +1836,7 @@ void P_DoPlayerExit(player_t *player)
player->kartstuff[k_cardanimation] = 0; // srb2kart: reset battle animation
if (player == &players[consoleplayer])
demosavebutton = leveltime;
demo.savebutton = leveltime;
/*if (playeringame[player-players] && netgame && !circuitmap)
CONS_Printf(M_GetText("%s has completed the level.\n"), player_names[player-players]);*/
@ -3878,7 +3878,7 @@ static void P_DoSpinDash(player_t *player, ticcmd_t *cmd) // SRB2kart - unused.
// Now spawn the color thok circle.
P_SpawnSpinMobj(player, player->revitem);
if (demorecording)
if (demo.recording)
G_GhostAddRev((INT32) (player - players));
}
}
@ -6767,7 +6767,7 @@ static void P_MovePlayer(player_t *player)
if (player->pflags & PF_SPINNING && player->speed > FixedMul(15<<FRACBITS, player->mo->scale) && !(player->pflags & PF_JUMPED))
{
P_SpawnSpinMobj(player, player->spinitem);
if (demorecording)
if (demo.recording)
G_GhostAddSpin((INT32) (player - players));
}
*/
@ -7958,7 +7958,7 @@ boolean P_MoveChaseCamera(player_t *player, camera_t *thiscam, boolean resetcall
// if (leveltime > 0 && timeinmap <= 0)
// return true;
if (demoplayback)
if (demo.playback)
{
focusangle = mo->angle;
focusaiming = 0;
@ -8670,7 +8670,7 @@ void P_DoTimeOver(player_t *player)
|| (splitscreen && player == &players[secondarydisplayplayer])
|| (splitscreen > 1 && player == &players[thirddisplayplayer])
|| (splitscreen > 2 && player == &players[fourthdisplayplayer]))
&& !demoplayback)
&& !demo.playback)
legitimateexit = true; // SRB2kart: losing a race is still seeing it through to the end :p
if (player->mo)

View File

@ -1600,7 +1600,7 @@ void R_PrecacheLevel(void)
thinker_t *th;
spriteframe_t *sf;
if (demoplayback)
if (demo.playback)
return;
// do not flush the memory, Z_Malloc twice with same user will cause error in Z_CheckHeap()

View File

@ -193,7 +193,7 @@ void SplitScreen_OnChange(void)
// recompute screen size
R_ExecuteSetViewSize();
if (!demoplayback && !botingame)
if (!demo.playback && !botingame)
{
for (i = 1; i < 3; i++)
{
@ -879,7 +879,7 @@ void R_SkyboxFrame(player_t *player)
{
aimingangle = player->aiming;
viewangle = player->mo->angle;
if (/*!demoplayback && */player->playerstate != PST_DEAD)
if (/*!demo.playback && */player->playerstate != PST_DEAD)
{
if (player == &players[consoleplayer])
{
@ -1141,7 +1141,7 @@ void R_SetupFrame(player_t *player, boolean skybox)
aimingangle = player->aiming;
viewangle = viewmobj->angle;
if (/*!demoplayback && */player->playerstate != PST_DEAD)
if (/*!demo.playback && */player->playerstate != PST_DEAD)
{
if (player == &players[consoleplayer])
{

View File

@ -2660,7 +2660,7 @@ void SetPlayerSkinByNum(INT32 playernum, INT32 skinnum)
player->kartspeed = skin->kartspeed;
player->kartweight = skin->kartweight;
/*if (!(cv_debug || devparm) && !(netgame || multiplayer || demoplayback || modeattacking))
/*if (!(cv_debug || devparm) && !(netgame || multiplayer || demo.playback || modeattacking))
{
if (playernum == consoleplayer)
CV_StealthSetValue(&cv_playercolor, skin->prefcolor);

View File

@ -1920,7 +1920,7 @@ void S_ChangeMusic(const char *mmusic, UINT16 mflags, boolean looping)
#endif
if (S_MusicDisabled()
|| titledemo) // SRB2Kart: Demos don't interrupt title screen music
|| demo.title) // SRB2Kart: Demos don't interrupt title screen music
return;
// No Music (empty string)
@ -1955,7 +1955,7 @@ void S_ChangeMusic(const char *mmusic, UINT16 mflags, boolean looping)
void S_StopMusic(void)
{
if (!I_SongPlaying()
|| titledemo) // SRB2Kart: Demos don't interrupt title screen music
|| demo.title) // SRB2Kart: Demos don't interrupt title screen music
return;
if (I_SongPaused())

View File

@ -3061,7 +3061,7 @@ void I_Quit(void)
//added:16-02-98: when recording a demo, should exit using 'q' key,
// but sometimes we forget and use 'F10'.. so save here too.
if (demorecording)
if (demo.recording)
G_CheckDemoStatus();
if (metalrecording)
G_StopMetalRecording();
@ -3179,7 +3179,7 @@ void I_Error(const char *error, ...)
G_SaveGameData(false); // Tails 12-08-2002
// Shutdown. Here might be other errors.
if (demorecording)
if (demo.recording)
G_CheckDemoStatus();
if (metalrecording)
G_StopMetalRecording();

View File

@ -1894,7 +1894,7 @@ static void ST_overlayDrawer(void)
V_DrawScaledPatch(hudinfo[HUD_GRAVBOOTSICO].x, STRINGY(hudinfo[HUD_GRAVBOOTSICO].y), V_SNAPTORIGHT, gravboots);
*/
if (!(multiplayer && demoplayback))
if (!(multiplayer && demo.playback))
{
if(!P_IsLocalPlayer(stplyr))
{
@ -1907,7 +1907,7 @@ static void ST_overlayDrawer(void)
V_DrawCenteredString((BASEVIDWIDTH/2), BASEVIDHEIGHT-32, V_ALLOWLOWERCASE, player_names[stplyr-players]);
}
}
else if (!titledemo)
else if (!demo.title)
{
if (!splitscreen)
@ -2015,7 +2015,7 @@ static void ST_overlayDrawer(void)
}
// Replay manual-save stuff
if (demorecording && multiplayer && demosavebutton && demosavebutton + 3*TICRATE < leveltime)
if (demo.recording && multiplayer && demo.savebutton && demo.savebutton + 3*TICRATE < leveltime)
{
if (demodefersave || cv_recordmultiplayerdemos.value == 2)
V_DrawRightAlignedThinString(BASEVIDWIDTH - 2, 2, V_HUDTRANS|V_SNAPTOTOP|V_SNAPTORIGHT|V_ALLOWLOWERCASE|(G_BattleGametype() ? V_REDMAP : V_SKYMAP), "Replay will be saved.");

View File

@ -644,7 +644,7 @@ void I_Error(const char *error, ...)
// save demo, could be useful for debug
// NOTE: demos are normally not saved here.
if (demorecording)
if (demo.recording)
G_CheckDemoStatus();
if (metalrecording)
G_StopMetalRecording();
@ -730,7 +730,7 @@ void I_Quit(void)
DWORD mode;
// when recording a demo, should exit using 'q',
// but sometimes we forget and use Alt+F4, so save here too.
if (demorecording)
if (demo.recording)
G_CheckDemoStatus();
if (metalrecording)
G_StopMetalRecording();

View File

@ -351,7 +351,7 @@ void Y_IntermissionDrawer(void)
V_DrawFadeScreen(0xFF00, 22);
if (!splitscreen)
whiteplayer = demoplayback ? displayplayer : consoleplayer;
whiteplayer = demo.playback ? displayplayer : consoleplayer;
if (cons_menuhighlight.value)
hilicol = cons_menuhighlight.value;
@ -360,7 +360,7 @@ void Y_IntermissionDrawer(void)
else
hilicol = ((intertype == int_race) ? V_SKYMAP : V_REDMAP);
if (sorttic != -1 && intertic > sorttic && !demoplayback)
if (sorttic != -1 && intertic > sorttic && !demo.playback)
{
INT32 count = (intertic - sorttic);
@ -553,7 +553,7 @@ dotimer:
char *string;
INT32 tickdown = (timer+1)/TICRATE;
if (multiplayer && demoplayback)
if (multiplayer && demo.playback)
string = va("Replay ends in %d", tickdown);
else
string = va("%s starts in %d", cv_advancemap.string, tickdown);
@ -562,9 +562,9 @@ dotimer:
string);
}
if (demorecording && cv_recordmultiplayerdemos.value == 1)
if (demo.recording && cv_recordmultiplayerdemos.value == 1)
V_DrawRightAlignedThinString(BASEVIDWIDTH - 2, 2, V_SNAPTOTOP|V_SNAPTORIGHT|V_ALLOWLOWERCASE|hilicol, "Look Backward: Save replay");
else if (demosaved && !demoplayback)
else if (demosaved && !demo.playback)
V_DrawRightAlignedThinString(BASEVIDWIDTH - 2, 2, V_SNAPTOTOP|V_SNAPTORIGHT|V_ALLOWLOWERCASE|hilicol, "Replay saved!");
// Make it obvious that scrambling is happening next round.
@ -582,7 +582,7 @@ void Y_Ticker(void)
if (intertype == int_none)
return;
if (demorecording && cv_recordmultiplayerdemos.value == 1 && (demodefersave || InputDown(gc_lookback, 1)))
if (demo.recording && cv_recordmultiplayerdemos.value == 1 && (demodefersave || InputDown(gc_lookback, 1)))
{
demodefersave = false;
G_SaveDemo();
@ -631,7 +631,7 @@ void Y_Ticker(void)
{
if (sorttic == -1)
sorttic = intertic + max((cv_inttime.value/2)-2, 2)*TICRATE; // 8 second pause after match results
else if (!(multiplayer && demoplayback)) // Don't advance to rankings in replays
else if (!(multiplayer && demo.playback)) // Don't advance to rankings in replays
{
if (!data.match.rankingsmode && (intertic >= sorttic + 8))
Y_CalculateMatchData(1, Y_CompareRank);
@ -780,7 +780,7 @@ void Y_StartIntermission(void)
{
if (cv_inttime.value == 0 && gametype == GT_COOP)
timer = 0;
else if (demoplayback) // Override inttime (which is pulled from the replay anyway
else if (demo.playback) // Override inttime (which is pulled from the replay anyway
timer = 10*TICRATE;
else
{
@ -816,7 +816,7 @@ void Y_StartIntermission(void)
}
case int_race: // (time-only race)
{
if (!majormods && !multiplayer && !demoplayback) // remove this once we have a proper time attack screen
if (!majormods && !multiplayer && !demo.playback) // remove this once we have a proper time attack screen
{
// Update visitation flags
mapvisited[gamemap-1] |= MV_BEATEN;