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