|
|
|
|
@ -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<int>(item._iMinDam); |
|
|
|
|
const int maxDam = static_cast<int>(item._iMaxDam); |
|
|
|
|
const int newMax = std::max(maxDam - 1, minDam); |
|
|
|
|
item._iMaxDam = static_cast<uint8_t>(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); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|