diff --git a/Source/objects.cpp b/Source/objects.cpp index b489fa3d7..2d51d4fab 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,24 +2336,24 @@ void OperateShrineGloomy(Player &player) if (&player != MyPlayer) return; - // Increment armor class by 2 and decrements max damage by 1. for (Item &item : PlayerItemsRange(player)) { switch (item._itype) { case ItemType::Sword: case ItemType::Axe: case ItemType::Bow: case ItemType::Mace: - case ItemType::Staff: - item._iMaxDam--; - if (item._iMaxDam < item._iMinDam) - item._iMaxDam = item._iMinDam; - 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: - item._iAC += 2; + item._iAC = ClampU8(item._iAC + 2); break; default: break; @@ -2356,7 +2361,6 @@ void OperateShrineGloomy(Player &player) } CalcPlrInv(player, true); - InitDiabloMsg(EMSG_SHRINE_GLOOMY); }