From ba62e47eec434c413a054c2fd2d5a7eeddd11acf Mon Sep 17 00:00:00 2001 From: Eric Robinson Date: Thu, 4 Dec 2025 05:14:44 -0500 Subject: [PATCH 1/3] Refactor StartNewLvl --- Source/player.cpp | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/Source/player.cpp b/Source/player.cpp index 35887a8b2..cd8b65b4a 100644 --- a/Source/player.cpp +++ b/Source/player.cpp @@ -2680,8 +2680,7 @@ void StartPlrHit(Player &player, int dam, bool forcehit) #if defined(__clang__) || defined(__GNUC__) __attribute__((no_sanitize("shift-base"))) #endif -void -StartPlayerKill(Player &player, DeathReason deathReason) +void StartPlayerKill(Player &player, DeathReason deathReason) { if (player.hasNoLife() && player._pmode == PM_DEATH) { return; @@ -2893,11 +2892,7 @@ void RemovePlrMissiles(const Player &player) } } -#if defined(__clang__) || defined(__GNUC__) -__attribute__((no_sanitize("shift-base"))) -#endif -void -StartNewLvl(Player &player, interface_mode fom, int lvl) +void StartNewLvl(Player &player, interface_mode fom, int lvl) { InitLevelChange(player); @@ -2914,7 +2909,10 @@ StartNewLvl(Player &player, interface_mode fom, int lvl) player.setLevel(setlvlnum); break; case WM_DIABTWARPUP: - MyPlayer->pTownWarps |= 1 << (leveltype - 2); + assert(leveltype >= DTYPE_CATACOMBS && leveltype <= DTYPE_HELL); + const unsigned warpIndex = static_cast(leveltype - 2); + const uint8_t warpMask = static_cast(1u << warpIndex); + MyPlayer->pTownWarps |= warpMask; player.setLevel(lvl); break; case WM_DIABRETOWN: From df4a3677e45ade72ff20a6f6ec08e15eaa0d3314 Mon Sep 17 00:00:00 2001 From: Eric Robinson Date: Thu, 4 Dec 2025 05:17:47 -0500 Subject: [PATCH 2/3] Update player.cpp --- Source/player.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Source/player.cpp b/Source/player.cpp index cd8b65b4a..81a134e8a 100644 --- a/Source/player.cpp +++ b/Source/player.cpp @@ -2908,13 +2908,14 @@ void StartNewLvl(Player &player, interface_mode fom, int lvl) setlvlnum = (_setlevels)lvl; player.setLevel(setlvlnum); break; - case WM_DIABTWARPUP: + case WM_DIABTWARPUP: { assert(leveltype >= DTYPE_CATACOMBS && leveltype <= DTYPE_HELL); const unsigned warpIndex = static_cast(leveltype - 2); const uint8_t warpMask = static_cast(1u << warpIndex); MyPlayer->pTownWarps |= warpMask; player.setLevel(lvl); break; + } case WM_DIABRETOWN: break; default: From 2c33b62a066488168b04ae29555017625f6405b2 Mon Sep 17 00:00:00 2001 From: Eric Robinson Date: Thu, 4 Dec 2025 15:05:38 -0500 Subject: [PATCH 3/3] Update player.cpp --- Source/player.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Source/player.cpp b/Source/player.cpp index 81a134e8a..fd516535a 100644 --- a/Source/player.cpp +++ b/Source/player.cpp @@ -2680,7 +2680,8 @@ void StartPlrHit(Player &player, int dam, bool forcehit) #if defined(__clang__) || defined(__GNUC__) __attribute__((no_sanitize("shift-base"))) #endif -void StartPlayerKill(Player &player, DeathReason deathReason) +void +StartPlayerKill(Player &player, DeathReason deathReason) { if (player.hasNoLife() && player._pmode == PM_DEATH) { return;