diff --git a/src/d_main.c b/src/d_main.c index 2c02565d..d570ae35 100644 --- a/src/d_main.c +++ b/src/d_main.c @@ -1597,9 +1597,9 @@ void D_SRB2Main(void) { pagename = "TITLESKY"; levelstarttic = gametic; - G_SetGamestate(GS_LEVEL); if (!P_SetupLevel(false)) I_Quit(); // fail so reset game stuff + G_SetGamestate(GS_LEVEL); } #ifdef HAVE_DISCORDRPC diff --git a/src/g_game.c b/src/g_game.c index c6cb31b0..c6c6d63f 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -1733,14 +1733,12 @@ void G_DoLoadLevel(boolean resetplayer) Y_EndIntermission(); if (gamestate == GS_VOTING) Y_EndVote(); - - G_SetGamestate(GS_LEVEL); - - for (i = 0; i < MAXPLAYERS; i++) - { - if (resetplayer || (playeringame[i] && players[i].playerstate == PST_DEAD)) - players[i].playerstate = PST_REBORN; - } + // Don't allow people to download a partial/corrupted + // save while the server's loading the map/during the wipe. + // (this addresses "map" command usage, which means + // transitions/different gamestates would be skipped.) + if (gamestate == GS_LEVEL) + gamestate = GS_WAITINGPLAYERS; // Setup the level. if (!P_SetupLevel(false)) @@ -1750,6 +1748,14 @@ void G_DoLoadLevel(boolean resetplayer) return; } + G_SetGamestate(GS_LEVEL); + + for (i = 0; i < MAXPLAYERS; i++) + { + if (resetplayer || (playeringame[i] && players[i].playerstate == PST_DEAD)) + players[i].playerstate = PST_REBORN; + } + if (!resetplayer) P_FindEmerald();