mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2026-02-28 00:11:09 +00:00
Time Attack replays: let tally finish even if replay data ends during tally
- If tally is skipped, the replay will be cut short - Just stop reading the demo if this happened after the tally started - It's okay to let the level continue without any input because the player already finished (we know the result)
This commit is contained in:
parent
29ba47459c
commit
ed4c4d8363
3 changed files with 19 additions and 6 deletions
|
|
@ -3958,6 +3958,7 @@ void G_StopDemo(void)
|
|||
demobuf.buffer = NULL;
|
||||
demo.playback = false;
|
||||
demo.timing = false;
|
||||
demo.waitingfortally = false;
|
||||
g_singletics = false;
|
||||
|
||||
{
|
||||
|
|
@ -3989,7 +3990,13 @@ boolean G_CheckDemoStatus(void)
|
|||
if (demo.quitafterplaying)
|
||||
I_Quit();
|
||||
|
||||
if (!demo.attract)
|
||||
// When this replay was recorded, the player skipped
|
||||
// the Tally and ended the demo early.
|
||||
// Keep the demo open and don't boot to intermission
|
||||
// YET, pause demo playback.
|
||||
if (!demo.waitingfortally && modeattacking && exitcountdown)
|
||||
demo.waitingfortally = true;
|
||||
else if (!demo.attract)
|
||||
G_FinishExitLevel();
|
||||
else
|
||||
{
|
||||
|
|
@ -4024,6 +4031,7 @@ boolean G_CheckDemoStatus(void)
|
|||
Z_Free(demobuf.buffer);
|
||||
|
||||
demo.recording = false;
|
||||
demo.waitingfortally = false;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -90,6 +90,7 @@ struct demovars_s {
|
|||
boolean quitafterplaying; // quit after playing a demo from cmdline
|
||||
boolean deferstart; // don't start playing demo right away
|
||||
boolean netgame; // multiplayer netgame
|
||||
boolean waitingfortally; // demo ended but we're keeping the level open for the tally to finish
|
||||
|
||||
tic_t savebutton; // Used to determine when the local player can choose to save the replay while the race is still going
|
||||
boolean willsave;
|
||||
|
|
|
|||
14
src/p_tick.c
14
src/p_tick.c
|
|
@ -904,7 +904,7 @@ void P_Ticker(boolean run)
|
|||
if (playeringame[i])
|
||||
G_WriteDemoTiccmd(&players[i].cmd, i);
|
||||
}
|
||||
if (demo.playback)
|
||||
if (demo.playback && !demo.waitingfortally)
|
||||
{
|
||||
G_ReadDemoExtraData();
|
||||
for (i = 0; i < MAXPLAYERS; i++)
|
||||
|
|
@ -1150,9 +1150,12 @@ void P_Ticker(boolean run)
|
|||
exitcountdown--;
|
||||
}
|
||||
|
||||
if (server && exitcountdown == 1)
|
||||
if (exitcountdown == 1)
|
||||
{
|
||||
SendNetXCmd(XD_EXITLEVEL, NULL, 0);
|
||||
if (demo.playback)
|
||||
G_FinishExitLevel();
|
||||
else if (server)
|
||||
SendNetXCmd(XD_EXITLEVEL, NULL, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1204,14 +1207,15 @@ void P_Ticker(boolean run)
|
|||
if (cv_recordmultiplayerdemos.value && demo.savebutton && demo.savebutton + 3*TICRATE < leveltime)
|
||||
G_CheckDemoTitleEntry();
|
||||
}
|
||||
else if (demo.playback) // Use Ghost data for consistency checks.
|
||||
else if (demo.playback && !demo.waitingfortally) // Use Ghost data for consistency checks.
|
||||
{
|
||||
G_ConsAllGhostTics();
|
||||
}
|
||||
|
||||
if (modeattacking)
|
||||
{
|
||||
G_GhostTicker();
|
||||
if (!demo.waitingfortally)
|
||||
G_GhostTicker();
|
||||
if (!demo.playback)
|
||||
G_TickTimeStickerMedals();
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue