diff --git a/Source/objects.cpp b/Source/objects.cpp index 31d1fb9ea0cd..68ada2e59774 100644 --- a/Source/objects.cpp +++ b/Source/objects.cpp @@ -2233,7 +2233,7 @@ void OperatePedestal(Player &player, Object &pedestal, bool sendmsg) } } -void OperateShrineMysterious(Player &player) +void OperateShrineMysterious(DiabloGenerator &rng, Player &player) { if (&player != MyPlayer) return; @@ -2243,7 +2243,7 @@ void OperateShrineMysterious(Player &player) ModifyPlrDex(player, -1); ModifyPlrVit(player, -1); - switch (static_cast(GenerateRnd(4))) { + switch (static_cast(rng.generateRnd(4))) { case CharacterAttribute::Strength: ModifyPlrStr(player, 6); break; @@ -2265,7 +2265,7 @@ void OperateShrineMysterious(Player &player) InitDiabloMsg(EMSG_SHRINE_MYSTERIOUS); } -void OperateShrineHidden(Player &player) +void OperateShrineHidden(DiabloGenerator &rng, Player &player) { if (&player != MyPlayer) return; @@ -2295,7 +2295,7 @@ void OperateShrineHidden(Player &player) } if (cnt == 0) break; - int r = GenerateRnd(NUM_INVLOC); + int r = rng.generateRnd(NUM_INVLOC); if (player.InvBody[r].isEmpty() || player.InvBody[r]._iMaxDur == DUR_INDESTRUCTIBLE || player.InvBody[r]._iMaxDur == 0) continue; @@ -2422,7 +2422,7 @@ void OperateShrineReligious(Player &player) InitDiabloMsg(EMSG_SHRINE_RELIGIOUS); } -void OperateShrineEnchanted(Player &player) +void OperateShrineEnchanted(DiabloGenerator &rng, Player &player) { if (&player != MyPlayer) return; @@ -2439,7 +2439,7 @@ void OperateShrineEnchanted(Player &player) if (cnt > 1) { int spellToReduce; do { - spellToReduce = GenerateRnd(maxSpells) + 1; + spellToReduce = rng.generateRnd(maxSpells) + 1; } while ((player._pMemSpells & GetSpellBitmask(static_cast(spellToReduce))) == 0); spell = 1; @@ -2471,12 +2471,12 @@ void OperateShrineEnchanted(Player &player) InitDiabloMsg(EMSG_SHRINE_ENCHANTED); } -void OperateShrineThaumaturgic(const Player &player) +void OperateShrineThaumaturgic(DiabloGenerator &rng, const Player &player) { for (int j = 0; j < ActiveObjectCount; j++) { Object &object = Objects[ActiveObjects[j]]; if (object.IsChest() && object._oSelFlag == 0) { - object._oRndSeed = AdvanceRndSeed(); + object._oRndSeed = rng.advanceRndSeed(); object._oSelFlag = 1; object._oAnimFrame -= 2; } @@ -2640,7 +2640,7 @@ void OperateShrineHoly(const Player &player) InitDiabloMsg(EMSG_SHRINE_HOLY); } -void OperateShrineSpiritual(Player &player) +void OperateShrineSpiritual(DiabloGenerator &rng, Player &player) { if (&player != MyPlayer) return; @@ -2648,7 +2648,7 @@ void OperateShrineSpiritual(Player &player) for (int8_t &itemIndex : player.InvGrid) { if (itemIndex == 0) { Item &goldItem = player.InvList[player._pNumInv]; - MakeGoldStack(goldItem, 5 * leveltype + GenerateRnd(10 * leveltype)); + MakeGoldStack(goldItem, 5 * leveltype + rng.generateRnd(10 * leveltype)); player._pNumInv++; itemIndex = player._pNumInv; @@ -2746,14 +2746,14 @@ void OperateShrineGlimmering(Player &player) InitDiabloMsg(EMSG_SHRINE_GLIMMERING); } -void OperateShrineTainted(const Player &player) +void OperateShrineTainted(DiabloGenerator &rng, const Player &player) { if (&player == MyPlayer) { InitDiabloMsg(EMSG_SHRINE_TAINTED1); return; } - int r = GenerateRnd(4); + int r = rng.generateRnd(4); int v1 = r == 0 ? 1 : -1; int v2 = r == 1 ? 1 : -1; @@ -2949,14 +2949,14 @@ void OperateShrineSolar(Player &player) RedrawEverything(); } -void OperateShrineMurphys(Player &player) +void OperateShrineMurphys(DiabloGenerator &rng, Player &player) { if (&player != MyPlayer) return; bool broke = false; for (auto &item : player.InvBody) { - if (!item.isEmpty() && FlipCoin(3)) { + if (!item.isEmpty() && rng.flipCoin(3)) { if (item._iDurability != DUR_INDESTRUCTIBLE) { if (item._iDurability > 0) { item._iDurability /= 2; @@ -2980,7 +2980,7 @@ void OperateShrine(Player &player, Object &shrine, SfxID sType) CloseGoldDrop(); - SetRndSeed(shrine._oRndSeed); + DiabloGenerator rng(shrine._oRndSeed); shrine._oSelFlag = 0; PlaySfxLoc(sType, shrine.position); @@ -2989,10 +2989,10 @@ void OperateShrine(Player &player, Object &shrine, SfxID sType) switch (shrine._oVar1) { case ShrineMysterious: - OperateShrineMysterious(player); + OperateShrineMysterious(rng, player); break; case ShrineHidden: - OperateShrineHidden(player); + OperateShrineHidden(rng, player); break; case ShrineGloomy: OperateShrineGloomy(player); @@ -3011,10 +3011,10 @@ void OperateShrine(Player &player, Object &shrine, SfxID sType) OperateShrineReligious(player); break; case ShrineEnchanted: - OperateShrineEnchanted(player); + OperateShrineEnchanted(rng, player); break; case ShrineThaumaturgic: - OperateShrineThaumaturgic(player); + OperateShrineThaumaturgic(rng, player); break; case ShrineFascinating: OperateShrineCostOfWisdom(player, SpellID::Firebolt, EMSG_SHRINE_FASCINATING); @@ -3038,7 +3038,7 @@ void OperateShrine(Player &player, Object &shrine, SfxID sType) OperateShrineCostOfWisdom(player, SpellID::ChargedBolt, EMSG_SHRINE_SACRED); break; case ShrineSpiritual: - OperateShrineSpiritual(player); + OperateShrineSpiritual(rng, player); break; case ShrineSpooky: OperateShrineSpooky(player); @@ -3062,7 +3062,7 @@ void OperateShrine(Player &player, Object &shrine, SfxID sType) OperateShrineGlimmering(player); break; case ShrineTainted: - OperateShrineTainted(player); + OperateShrineTainted(rng, player); break; case ShrineOily: OperateShrineOily(player, shrine.position); @@ -3086,7 +3086,7 @@ void OperateShrine(Player &player, Object &shrine, SfxID sType) OperateShrineSolar(player); break; case ShrineMurphys: - OperateShrineMurphys(player); + OperateShrineMurphys(rng, player); break; }