mirror of
https://git.do.srb2.org/KartKrew/Kart-Public.git
synced 2025-01-17 23:21:05 +00:00
Move public demo vars to a single struct
This commit is contained in:
parent
ccefc48af3
commit
4b7d2aea84
27 changed files with 209 additions and 199 deletions
|
@ -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;
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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.
|
||||
// ===========================
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
180
src/g_game.c
180
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)
|
||||
{
|
||||
|
|
28
src/g_game.h
28
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;
|
||||
|
||||
|
|
|
@ -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));
|
||||
|
|
10
src/k_kart.c
10
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
|
||||
|
|
|
@ -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)\
|
||||
|
|
12
src/m_menu.c
12
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();
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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));
|
||||
|
||||
|
|
|
@ -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])
|
||||
{
|
||||
|
|
16
src/p_tick.c
16
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)
|
||||
|
|
18
src/p_user.c
18
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<<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)
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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])
|
||||
{
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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())
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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.");
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue