From a229b1b8b19d609c5b40da747ca7fa46b92d297b Mon Sep 17 00:00:00 2001 From: Eric Robinson Date: Thu, 25 Dec 2025 23:25:50 -0500 Subject: [PATCH] Refactor OperateShrineWeird --- Source/objects.cpp | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/Source/objects.cpp b/Source/objects.cpp index 859c7374b..ee1924705 100644 --- a/Source/objects.cpp +++ b/Source/objects.cpp @@ -2365,27 +2365,38 @@ void OperateShrineWeird(Player &player) if (&player != MyPlayer) return; - if (!player.InvBody[INVLOC_HAND_LEFT].isEmpty() && player.InvBody[INVLOC_HAND_LEFT]._itype != ItemType::Shield) - player.InvBody[INVLOC_HAND_LEFT]._iMaxDam++; - if (!player.InvBody[INVLOC_HAND_RIGHT].isEmpty() && player.InvBody[INVLOC_HAND_RIGHT]._itype != ItemType::Shield) - player.InvBody[INVLOC_HAND_RIGHT]._iMaxDam++; + constexpr int MaxDamMin = 0; + constexpr int MaxDamMax = 255; - for (Item &item : InventoryPlayerItemsRange { player }) { + auto isWeaponType = [](const Item &item) { switch (item._itype) { case ItemType::Sword: case ItemType::Axe: case ItemType::Bow: case ItemType::Mace: case ItemType::Staff: - item._iMaxDam++; - break; + return true; default: - break; + return false; } + }; + + auto bumpMaxDamClamped = [](Item &item) { + item._iMaxDam = std::clamp(item._iMaxDam + 1, MaxDamMin, MaxDamMax); + }; + + if (!player.InvBody[INVLOC_HAND_LEFT].isEmpty() && player.InvBody[INVLOC_HAND_LEFT]._itype != ItemType::Shield) + bumpMaxDamClamped(player.InvBody[INVLOC_HAND_LEFT]); + + if (!player.InvBody[INVLOC_HAND_RIGHT].isEmpty() && player.InvBody[INVLOC_HAND_RIGHT]._itype != ItemType::Shield) + bumpMaxDamClamped(player.InvBody[INVLOC_HAND_RIGHT]); + + for (Item &item : InventoryPlayerItemsRange { player }) { + if (isWeaponType(item)) + bumpMaxDamClamped(item); } CalcPlrInv(player, true); - InitDiabloMsg(EMSG_SHRINE_WEIRD); }