diff --git a/src/d_clisrv.c b/src/d_clisrv.c index 8e5fad28..d8ce0f96 100644 --- a/src/d_clisrv.c +++ b/src/d_clisrv.c @@ -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; diff --git a/src/d_main.c b/src/d_main.c index 674cf365..6edb1cf4 100644 --- a/src/d_main.c +++ b/src/d_main.c @@ -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 diff --git a/src/d_netcmd.c b/src/d_netcmd.c index b13df51e..d4ffe27a 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -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); diff --git a/src/dehacked.c b/src/dehacked.c index 4f41ac0c..20c2964b 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -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; diff --git a/src/doomstat.h b/src/doomstat.h index c2da75c8..834b3a7c 100644 --- a/src/doomstat.h +++ b/src/doomstat.h @@ -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. // =========================== diff --git a/src/f_finale.c b/src/f_finale.c index cdde54f3..d184a283 100644 --- a/src/f_finale.c +++ b/src/f_finale.c @@ -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); } } diff --git a/src/g_game.c b/src/g_game.c index 8e58c975..ef8a4196 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -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) { diff --git a/src/g_game.h b/src/g_game.h index f78a06d0..ffe98d73 100644 --- a/src/g_game.h +++ b/src/g_game.h @@ -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; diff --git a/src/hu_stuff.c b/src/hu_stuff.c index a8cf35eb..9affc72f 100644 --- a/src/hu_stuff.c +++ b/src/hu_stuff.c @@ -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)); diff --git a/src/k_kart.c b/src/k_kart.c index 8a68cafe..3918e8f9 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -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 diff --git a/src/m_cheat.c b/src/m_cheat.c index 2fc2e85c..e7e877ad 100644 --- a/src/m_cheat.c +++ b/src/m_cheat.c @@ -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)\ diff --git a/src/m_menu.c b/src/m_menu.c index fa88d601..39231034 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -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(); diff --git a/src/p_inter.c b/src/p_inter.c index 90e7a06f..f70bcf3e 100644 --- a/src/p_inter.c +++ b/src/p_inter.c @@ -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; diff --git a/src/p_map.c b/src/p_map.c index 256c9cef..9b0db658 100644 --- a/src/p_map.c +++ b/src/p_map.c @@ -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; diff --git a/src/p_mobj.c b/src/p_mobj.c index 484d34fb..f31075f3 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -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) diff --git a/src/p_setup.c b/src/p_setup.c index 07a72e7f..f73aef99 100644 --- a/src/p_setup.c +++ b/src/p_setup.c @@ -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)); diff --git a/src/p_spec.c b/src/p_spec.c index 67bb7472..6b5f09f6 100644 --- a/src/p_spec.c +++ b/src/p_spec.c @@ -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]) { diff --git a/src/p_tick.c b/src/p_tick.c index 6fd2e09f..a9f78662 100644 --- a/src/p_tick.c +++ b/src/p_tick.c @@ -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) diff --git a/src/p_user.c b/src/p_user.c index 72949c92..18b14f42 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -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<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) diff --git a/src/r_data.c b/src/r_data.c index 1a74f733..7fb11855 100644 --- a/src/r_data.c +++ b/src/r_data.c @@ -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() diff --git a/src/r_main.c b/src/r_main.c index 36182d0e..b4dcd918 100644 --- a/src/r_main.c +++ b/src/r_main.c @@ -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]) { diff --git a/src/r_things.c b/src/r_things.c index baba4211..efc5dd46 100644 --- a/src/r_things.c +++ b/src/r_things.c @@ -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); diff --git a/src/s_sound.c b/src/s_sound.c index 2ddffa3f..9653d8ff 100644 --- a/src/s_sound.c +++ b/src/s_sound.c @@ -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()) diff --git a/src/sdl/i_system.c b/src/sdl/i_system.c index f92f1f14..c0fca64d 100644 --- a/src/sdl/i_system.c +++ b/src/sdl/i_system.c @@ -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(); diff --git a/src/st_stuff.c b/src/st_stuff.c index d87a805d..2dd045c1 100644 --- a/src/st_stuff.c +++ b/src/st_stuff.c @@ -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."); diff --git a/src/win32/win_sys.c b/src/win32/win_sys.c index 47250334..a98aa861 100644 --- a/src/win32/win_sys.c +++ b/src/win32/win_sys.c @@ -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(); diff --git a/src/y_inter.c b/src/y_inter.c index 778ab5ad..5a8791d4 100644 --- a/src/y_inter.c +++ b/src/y_inter.c @@ -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;