From 717dcf020973fd00fafc79af757f171a4a25aee9 Mon Sep 17 00:00:00 2001 From: James R Date: Sat, 9 Mar 2024 05:20:36 -0800 Subject: [PATCH] restartlevel: preserve last map's gametype - gametype can be changed without changing gamemap, through the pause menu option --- src/d_netcmd.c | 3 ++- src/doomstat.h | 2 +- src/g_game.c | 1 + src/p_saveg.c | 2 ++ 4 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/d_netcmd.c b/src/d_netcmd.c index 2e2a1bc9a..e6c9d57b3 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -244,6 +244,7 @@ char timedemo_csv_id[256]; boolean timedemo_quit; INT16 gametype = GT_RACE; +INT16 g_lastgametype = GT_RACE; INT16 numgametypes = GT_FIRSTFREESLOT; boolean forceresetplayers = false; @@ -2965,7 +2966,7 @@ static void Command_RestartLevel(void) newencore = (cv_kartencore.value == 1) || encoremode; } - D_MapChange(gamemap, gametype, newencore, false, 0, false, false); + D_MapChange(gamemap, g_lastgametype, newencore, false, 0, false, false); } static void Handle_MapQueueSend(UINT16 newmapnum, UINT16 newgametype, boolean newencoremode) diff --git a/src/doomstat.h b/src/doomstat.h index ce0782cd9..761a3410b 100644 --- a/src/doomstat.h +++ b/src/doomstat.h @@ -631,7 +631,7 @@ struct gametype_t extern gametype_t *gametypes[MAXGAMETYPES+1]; extern INT16 numgametypes; -extern INT16 gametype; +extern INT16 gametype, g_lastgametype; // Gametype rules enum GameTypeRules diff --git a/src/g_game.c b/src/g_game.c index 5d181a536..74d7a2564 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -5126,6 +5126,7 @@ void G_InitNew(UINT8 pencoremode, INT32 map, boolean resetplayer, boolean skippr g_reloadingMap = (map == gamemap); gamemap = map; + g_lastgametype = gametype; automapactive = false; imcontinuing = false; diff --git a/src/p_saveg.c b/src/p_saveg.c index 8a1956ba4..2de6edae8 100644 --- a/src/p_saveg.c +++ b/src/p_saveg.c @@ -6436,6 +6436,7 @@ static void P_NetArchiveMisc(savebuffer_t *save, boolean resending) else WRITEINT16(save->p, gamestate); WRITEINT16(save->p, gametype); + WRITEINT16(save->p, g_lastgametype); { UINT32 pig = 0; @@ -6622,6 +6623,7 @@ static boolean P_NetUnArchiveMisc(savebuffer_t *save, boolean reloading) G_SetGamestate(READINT16(save->p)); gametype = READINT16(save->p); + g_lastgametype = READINT16(save->p); { UINT32 pig = READUINT32(save->p);