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); }