From e7108cfde1fd5cc1d4e2ab7456b752aabde8eecd Mon Sep 17 00:00:00 2001 From: toaster Date: Sun, 23 Jan 2022 21:35:29 +0000 Subject: [PATCH] Resolve the replay crash issue :mike: (Also no longer mess around with moving flags into booleans per my comment) --- src/g_demo.c | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/src/g_demo.c b/src/g_demo.c index 2f0f75885..023482ba8 100644 --- a/src/g_demo.c +++ b/src/g_demo.c @@ -2689,7 +2689,7 @@ void G_DoPlayDemo(char *defdemoname) UINT32 randseed; char msg[1024]; - boolean spectator, kickstart, shrinkme; + boolean spectator; UINT8 slots[MAXPLAYERS], kartspeed[MAXPLAYERS], kartweight[MAXPLAYERS], numslots = 0; #if defined(SKIPERRORS) && !defined(DEVELOP) @@ -2962,12 +2962,10 @@ void G_DoPlayDemo(char *defdemoname) { UINT8 flags = READUINT8(demo_p); - spectator = kickstart = shrinkme = false; + spectator = !!(flags & DEMO_SPECTATOR); - if ((spectator = !!(flags & DEMO_SPECTATOR)) == true) + if (spectator == true) { - flags &= ~DEMO_SPECTATOR; - if (modeattacking) { snprintf(msg, 1024, M_GetText("%s is a Record Attack replay with spectators, and is thus invalid.\n"), pdemoname); @@ -2981,12 +2979,6 @@ void G_DoPlayDemo(char *defdemoname) } } - if ((kickstart = !!(flags & DEMO_KICKSTART)) == true) - flags &= ~DEMO_KICKSTART; - - if ((shrinkme = !!(flags & DEMO_SHRINKME)) == true) - flags &= ~DEMO_SHRINKME; - slots[numslots] = p; numslots++; @@ -3008,12 +3000,12 @@ void G_DoPlayDemo(char *defdemoname) playeringame[p] = true; players[p].spectator = spectator; - if (kickstart) + if (flags & DEMO_KICKSTART) players[p].pflags |= PF_KICKSTARTACCEL; else players[p].pflags &= ~PF_KICKSTARTACCEL; - if (shrinkme) + if (flags & DEMO_SHRINKME) players[p].pflags |= PF_SHRINKME; else players[p].pflags &= ~PF_SHRINKME; @@ -3278,7 +3270,10 @@ void G_AddGhost(char *defdemoname) return; } - if ((READUINT8(p) & ~(DEMO_KICKSTART|DEMO_SHRINKME)) != 0) + p++; // player number - doesn't really need to be checked, TODO maybe support adding multiple players' ghosts at once + + // any invalidating flags? + if ((READUINT8(p) & (DEMO_SPECTATOR)) != 0) { CONS_Alert(CONS_NOTICE, M_GetText("Failed to add ghost %s: Invalid player slot.\n"), pdemoname); Z_Free(pdemoname);