From 6a3ffef1eeaf254ae3b467ed64dc074e37c15602 Mon Sep 17 00:00:00 2001 From: Eric Robinson Date: Fri, 26 Dec 2025 01:47:15 -0500 Subject: [PATCH 1/2] Refactor OperateShrineGloomy --- Source/objects.cpp | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/Source/objects.cpp b/Source/objects.cpp index 859c7374b..0ee88165a 100644 --- a/Source/objects.cpp +++ b/Source/objects.cpp @@ -2331,7 +2331,21 @@ void OperateShrineGloomy(Player &player) if (&player != MyPlayer) return; - // Increment armor class by 2 and decrements max damage by 1. + auto clampU8 = [](int v) { + return std::clamp(v, 0, 255); + }; + + auto incAC = [&](Item &item, int delta) { + item._iAC = clampU8(item._iAC + delta); + }; + + auto decMaxDam = [&](Item &item) { + const int minDam = static_cast(item._iMinDam); + const int maxDam = static_cast(item._iMaxDam); + const int newMax = std::max(maxDam - 1, minDam); + item._iMaxDam = static_cast(clampU8(newMax)); + }; + for (Item &item : PlayerItemsRange(player)) { switch (item._itype) { case ItemType::Sword: @@ -2339,16 +2353,14 @@ void OperateShrineGloomy(Player &player) case ItemType::Bow: case ItemType::Mace: case ItemType::Staff: - item._iMaxDam--; - if (item._iMaxDam < item._iMinDam) - item._iMaxDam = item._iMinDam; + decMaxDam(item); break; case ItemType::Shield: case ItemType::Helm: case ItemType::LightArmor: case ItemType::MediumArmor: case ItemType::HeavyArmor: - item._iAC += 2; + incAC(item, 2); break; default: break; @@ -2356,7 +2368,6 @@ void OperateShrineGloomy(Player &player) } CalcPlrInv(player, true); - InitDiabloMsg(EMSG_SHRINE_GLOOMY); } From 276372f04bb6e922108941db4fc21b60cf24dd5a Mon Sep 17 00:00:00 2001 From: Eric Robinson Date: Fri, 26 Dec 2025 01:56:28 -0500 Subject: [PATCH 2/2] Update objects.cpp --- Source/objects.cpp | 31 ++++++++++++------------------- 1 file changed, 12 insertions(+), 19 deletions(-) diff --git a/Source/objects.cpp b/Source/objects.cpp index 0ee88165a..8c77902c3 100644 --- a/Source/objects.cpp +++ b/Source/objects.cpp @@ -2247,6 +2247,11 @@ void OperatePedestal(Player &player, Object &pedestal, bool sendmsg) } } +int ClampU8(int v) +{ + return std::clamp(v, 0, 255); +} + void OperateShrineMysterious(DiabloGenerator &rng, Player &player) { if (&player != MyPlayer) @@ -2331,36 +2336,24 @@ void OperateShrineGloomy(Player &player) if (&player != MyPlayer) return; - auto clampU8 = [](int v) { - return std::clamp(v, 0, 255); - }; - - auto incAC = [&](Item &item, int delta) { - item._iAC = clampU8(item._iAC + delta); - }; - - auto decMaxDam = [&](Item &item) { - const int minDam = static_cast(item._iMinDam); - const int maxDam = static_cast(item._iMaxDam); - const int newMax = std::max(maxDam - 1, minDam); - item._iMaxDam = static_cast(clampU8(newMax)); - }; - for (Item &item : PlayerItemsRange(player)) { switch (item._itype) { case ItemType::Sword: case ItemType::Axe: case ItemType::Bow: case ItemType::Mace: - case ItemType::Staff: - decMaxDam(item); - break; + case ItemType::Staff: { + const int minDam = static_cast(item._iMinDam); + const int maxDam = static_cast(item._iMaxDam); + const int newMax = std::max(maxDam - 1, minDam); + item._iMaxDam = static_cast(ClampU8(newMax)); + } break; case ItemType::Shield: case ItemType::Helm: case ItemType::LightArmor: case ItemType::MediumArmor: case ItemType::HeavyArmor: - incAC(item, 2); + item._iAC = ClampU8(item._iAC + 2); break; default: break;