From 6bc785c099e9e23dd924c357680688d908697de4 Mon Sep 17 00:00:00 2001 From: James R Date: Sun, 26 Mar 2023 06:28:39 -0700 Subject: [PATCH 1/3] I_Error if ENCORE/TWEAKMAP has an incorrect size Prevent memory errors if the lump is too large. --- src/p_setup.c | 7 +++++++ src/r_data.c | 2 ++ 2 files changed, 9 insertions(+) diff --git a/src/p_setup.c b/src/p_setup.c index 94820188e..3f842d543 100644 --- a/src/p_setup.c +++ b/src/p_setup.c @@ -7877,6 +7877,13 @@ boolean P_LoadLevel(boolean fromnetsave, boolean reloadinggamestate) if (encoreLump) { + if (encoreLump->size != 256) + { + I_Error("%s: %s lump is not 256 bytes (actual size %s bytes)\n" + "Make sure the lump is in DOOM Flat or SRB2 Encore format and 16x16", + maplumpname, encoreLump->name, sizeu1(encoreLump->size)); + } + R_ReInitColormaps(mapheaderinfo[gamemap-1]->palette, encoreLump->data, encoreLump->size); } else diff --git a/src/r_data.c b/src/r_data.c index 6f01510a2..a0a0dea20 100644 --- a/src/r_data.c +++ b/src/r_data.c @@ -314,6 +314,8 @@ void R_ReInitColormaps(UINT16 num, void *newencoremap, size_t encoremapsize) lighttable_t *colormap_p, *colormap_p2; size_t p, i; + I_Assert(encoremapsize == 256); + encoremap = Z_MallocAlign(256 + 10, PU_LEVEL, NULL, 8); M_Memcpy(encoremap, newencoremap, encoremapsize); colormap_p = colormap_p2 = colormaps; From a5aefa5b29f507b105ccd2499e60dfe29eb1e030 Mon Sep 17 00:00:00 2001 From: James R Date: Sun, 26 Mar 2023 06:34:02 -0700 Subject: [PATCH 2/3] Fix vote encore scramble getting overridden by cvar --- src/g_game.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/g_game.c b/src/g_game.c index 9d250f120..b5969ab0e 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -4172,6 +4172,8 @@ static void G_GetNextMap(void) if (!spec) #endif //#if 0 lastmap = nextmap; + + deferencoremode = (cv_kartencore.value == 1); } // @@ -4343,7 +4345,6 @@ void G_NextLevel(void) } forceresetplayers = false; - deferencoremode = (cv_kartencore.value == 1); gameaction = ga_worlddone; } From 6d5cb50755167be68fdebe9351c7b68cc051fa30 Mon Sep 17 00:00:00 2001 From: James R Date: Sun, 26 Mar 2023 06:43:25 -0700 Subject: [PATCH 3/3] cv_debugencorevote: force an encore scramble Useful for debugging the random chance encore vote. --- src/k_kart.c | 1 + src/k_pwrlv.c | 6 +++++- src/k_pwrlv.h | 3 +++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/k_kart.c b/src/k_kart.c index b9baa2d2c..5e2ca1b1c 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -352,6 +352,7 @@ void K_RegisterKartStuff(void) CV_RegisterVar(&cv_gptest); CV_RegisterVar(&cv_capsuletest); CV_RegisterVar(&cv_battletest); + CV_RegisterVar(&cv_debugencorevote); CV_RegisterVar(&cv_reducevfx); } diff --git a/src/k_pwrlv.c b/src/k_pwrlv.c index aa98cbcc3..0f234a504 100644 --- a/src/k_pwrlv.c +++ b/src/k_pwrlv.c @@ -33,6 +33,8 @@ UINT8 spectateGriefed = 0; SINT8 speedscramble = -1; SINT8 encorescramble = -1; +consvar_t cv_debugencorevote = CVAR_INIT ("debugencorevote", "Off", CV_CHEAT|CV_NETVAR, CV_OnOff, NULL); + SINT8 K_UsingPowerLevels(void) { SINT8 pt = PWRLV_DISABLED; @@ -548,7 +550,9 @@ void K_SetPowerLevelScrambles(SINT8 powertype) else speedscramble = -1; - if (cv_kartencore.value == -1) + if (cv_debugencorevote.value) + encorescramble = 1; + else if (cv_kartencore.value == -1) encorescramble = (encore ? 1 : 0); else encorescramble = -1; diff --git a/src/k_pwrlv.h b/src/k_pwrlv.h index 17822a661..9469fe3b7 100644 --- a/src/k_pwrlv.h +++ b/src/k_pwrlv.h @@ -14,6 +14,7 @@ #include "doomtype.h" #include "doomdef.h" #include "d_player.h" +#include "command.h" #ifdef __cplusplus extern "C" { @@ -35,6 +36,8 @@ typedef enum extern SINT8 speedscramble; extern SINT8 encorescramble; +extern consvar_t cv_debugencorevote; + extern UINT16 clientpowerlevels[MAXPLAYERS][PWRLV_NUMTYPES]; extern INT16 clientPowerAdd[MAXPLAYERS]; extern UINT8 spectateGriefed;