diff --git a/Source/objects.cpp b/Source/objects.cpp index 5177ae908..4ff26eccb 100644 --- a/Source/objects.cpp +++ b/Source/objects.cpp @@ -2551,10 +2551,10 @@ void OperatePedistal(int pnum, int i) } } -bool OperateShrineMysterious(int pnum) +void OperateShrineMysterious(int pnum) { if (pnum != MyPlayerId) - return false; + return; Player &player = Players[pnum]; @@ -2579,16 +2579,16 @@ bool OperateShrineMysterious(int pnum) } CheckStats(player); + CalcPlrInv(player, true); + force_redraw = 255; InitDiabloMsg(EMSG_SHRINE_MYSTERIOUS); - - return true; } -bool OperateShrineHidden(int pnum) +void OperateShrineHidden(int pnum) { if (pnum != MyPlayerId) - return false; + return; Player &player = Players[pnum]; @@ -2632,14 +2632,12 @@ bool OperateShrineHidden(int pnum) } InitDiabloMsg(EMSG_SHRINE_HIDDEN); - - return true; } -bool OperateShrineGloomy(int pnum) +void OperateShrineGloomy(int pnum) { if (pnum != MyPlayerId) - return true; + return; Player &player = Players[pnum]; @@ -2667,15 +2665,15 @@ bool OperateShrineGloomy(int pnum) } } - InitDiabloMsg(EMSG_SHRINE_GLOOMY); + CalcPlrInv(Players[pnum], true); - return true; + InitDiabloMsg(EMSG_SHRINE_GLOOMY); } -bool OperateShrineWeird(int pnum) +void OperateShrineWeird(int pnum) { if (pnum != MyPlayerId) - return true; + return; Player &player = Players[pnum]; @@ -2698,15 +2696,18 @@ bool OperateShrineWeird(int pnum) } } - InitDiabloMsg(EMSG_SHRINE_WEIRD); + CalcPlrInv(Players[pnum], true); - return true; + InitDiabloMsg(EMSG_SHRINE_WEIRD); } -bool OperateShrineMagical(int pnum) +void OperateShrineMagical(int pnum) { Player &player = Players[pnum]; + if (pnum != MyPlayerId) + return; + AddMissile( player.position.tile, player.position.tile, @@ -2717,47 +2718,40 @@ bool OperateShrineMagical(int pnum) 0, 2 * leveltype); - if (pnum != MyPlayerId) - return false; - InitDiabloMsg(EMSG_SHRINE_MAGICAL); - - return true; } -bool OperateShrineStone(int pnum) +void OperateShrineStone(int pnum) { if (pnum != MyPlayerId) - return true; + return; for (Item &item : PlayerItemsRange { Players[pnum] }) { if (item._itype == ItemType::Staff) - item._iCharges = item._iMaxCharges; // belt items don't have charges? + item._iCharges = item._iMaxCharges; } - InitDiabloMsg(EMSG_SHRINE_STONE); + force_redraw = 255; - return true; + InitDiabloMsg(EMSG_SHRINE_STONE); } -bool OperateShrineReligious(int pnum) +void OperateShrineReligious(int pnum) { if (pnum != MyPlayerId) - return true; + return; for (Item &item : PlayerItemsRange { Players[pnum] }) { - item._iDurability = item._iMaxDur; // belt items don't have durability? + item._iDurability = item._iMaxDur; } InitDiabloMsg(EMSG_SHRINE_RELIGIOUS); - - return true; } -bool OperateShrineEnchanted(int pnum) +void OperateShrineEnchanted(int pnum) { if (pnum != MyPlayerId) - return false; + return; Player &player = Players[pnum]; @@ -2790,11 +2784,9 @@ bool OperateShrineEnchanted(int pnum) } InitDiabloMsg(EMSG_SHRINE_ENCHANTED); - - return true; } -bool OperateShrineThaumaturgic(int pnum) +void OperateShrineThaumaturgic(int pnum) { for (int j = 0; j < ActiveObjectCount; j++) { int v1 = ActiveObjects[j]; @@ -2807,17 +2799,15 @@ bool OperateShrineThaumaturgic(int pnum) } if (pnum != MyPlayerId) - return true; + return; InitDiabloMsg(EMSG_SHRINE_THAUMATURGIC); - - return true; } -bool OperateShrineCostOfWisdom(int pnum, spell_id spellId, diablo_message message) +void OperateShrineCostOfWisdom(int pnum, spell_id spellId, diablo_message message) { if (pnum != MyPlayerId) - return false; + return; Player &player = Players[pnum]; @@ -2844,12 +2834,12 @@ bool OperateShrineCostOfWisdom(int pnum, spell_id spellId, diablo_message messag player._pMaxManaBase = 0; } - InitDiabloMsg(message); + force_redraw = 255; - return true; + InitDiabloMsg(message); } -bool OperateShrineCryptic(int pnum) +void OperateShrineCryptic(int pnum) { Player &player = Players[pnum]; @@ -2864,20 +2854,20 @@ bool OperateShrineCryptic(int pnum) 2 * leveltype); if (pnum != MyPlayerId) - return false; + return; player._pMana = player._pMaxMana; player._pManaBase = player._pMaxManaBase; InitDiabloMsg(EMSG_SHRINE_CRYPTIC); - return true; + force_redraw = 255; } -bool OperateShrineEldritch(int pnum) +void OperateShrineEldritch(int pnum) { if (pnum != MyPlayerId) - return true; + return; for (Item &item : InventoryAndBeltPlayerItemsRange { Players[pnum] }) { if (item._itype != ItemType::Misc) { @@ -2895,24 +2885,24 @@ bool OperateShrineEldritch(int pnum) } } - InitDiabloMsg(EMSG_SHRINE_ELDRITCH); + force_redraw = 255; - return true; + InitDiabloMsg(EMSG_SHRINE_ELDRITCH); } -bool OperateShrineEerie(int pnum) +void OperateShrineEerie(int pnum) { if (pnum != MyPlayerId) - return false; + return; Player &player = Players[pnum]; ModifyPlrMag(player, 2); CheckStats(player); + CalcPlrInv(player, true); + force_redraw = 255; InitDiabloMsg(EMSG_SHRINE_EERIE); - - return true; } /** @@ -2923,10 +2913,10 @@ bool OperateShrineEerie(int pnum) * @return false if the shrine was activated by another player in a multiplayer game and * no changes were made by this instance, true otherwise. */ -bool OperateShrineDivine(int pnum, Point spawnPosition) +void OperateShrineDivine(int pnum, Point spawnPosition) { if (pnum != MyPlayerId) - return false; + return; Player &player = Players[pnum]; @@ -2943,27 +2933,25 @@ bool OperateShrineDivine(int pnum, Point spawnPosition) player._pHitPoints = player._pMaxHP; player._pHPBase = player._pMaxHPBase; - InitDiabloMsg(EMSG_SHRINE_DIVINE); + force_redraw = 255; - return true; + InitDiabloMsg(EMSG_SHRINE_DIVINE); } -bool OperateShrineHoly(int pnum) +void OperateShrineHoly(int pnum) { AddMissile(Players[pnum].position.tile, { 0, 0 }, Direction::South, MIS_RNDTELEPORT, TARGET_PLAYERS, pnum, 0, 2 * leveltype); if (pnum != MyPlayerId) - return false; + return; InitDiabloMsg(EMSG_SHRINE_HOLY); - - return true; } -bool OperateShrineSpiritual(int pnum) +void OperateShrineSpiritual(int pnum) { if (pnum != MyPlayerId) - return false; + return; Player &player = Players[pnum]; @@ -2979,15 +2967,13 @@ bool OperateShrineSpiritual(int pnum) } InitDiabloMsg(EMSG_SHRINE_SPIRITUAL); - - return true; } -bool OperateShrineSpooky(int pnum) +void OperateShrineSpooky(int pnum) { if (pnum == MyPlayerId) { InitDiabloMsg(EMSG_SHRINE_SPOOKY1); - return true; + return; } Player &myPlayer = *MyPlayer; @@ -2997,100 +2983,90 @@ bool OperateShrineSpooky(int pnum) myPlayer._pMana = myPlayer._pMaxMana; myPlayer._pManaBase = myPlayer._pMaxManaBase; - InitDiabloMsg(EMSG_SHRINE_SPOOKY2); + force_redraw = 255; - return true; + InitDiabloMsg(EMSG_SHRINE_SPOOKY2); } -bool OperateShrineAbandoned(int pnum) +void OperateShrineAbandoned(int pnum) { if (pnum != MyPlayerId) - return false; + return; Player &player = Players[pnum]; ModifyPlrDex(player, 2); CheckStats(player); - - if (pnum != MyPlayerId) - return true; + CalcPlrInv(player, true); + force_redraw = 255; InitDiabloMsg(EMSG_SHRINE_ABANDONED); - - return true; } -bool OperateShrineCreepy(int pnum) +void OperateShrineCreepy(int pnum) { if (pnum != MyPlayerId) - return false; + return; Player &player = Players[pnum]; ModifyPlrStr(player, 2); CheckStats(player); - - if (pnum != MyPlayerId) - return true; + CalcPlrInv(player, true); + force_redraw = 255; InitDiabloMsg(EMSG_SHRINE_CREEPY); - - return true; } -bool OperateShrineQuiet(int pnum) +void OperateShrineQuiet(int pnum) { if (pnum != MyPlayerId) - return false; + return; Player &player = Players[pnum]; ModifyPlrVit(player, 2); CheckStats(player); - - if (pnum != MyPlayerId) - return true; + CalcPlrInv(player, true); + force_redraw = 255; InitDiabloMsg(EMSG_SHRINE_QUIET); - - return true; } -bool OperateShrineSecluded(int pnum) +void OperateShrineSecluded(int pnum) { if (pnum != MyPlayerId) - return true; + return; for (int x = 0; x < DMAXX; x++) for (int y = 0; y < DMAXY; y++) UpdateAutomapExplorer({ x, y }, MAP_EXP_SHRINE); InitDiabloMsg(EMSG_SHRINE_SECLUDED); - - return true; } -bool OperateShrineGlimmering(int pnum) +void OperateShrineGlimmering(int pnum) { if (pnum != MyPlayerId) - return false; + return; for (Item &item : PlayerItemsRange { Players[pnum] }) { if (item._iMagical != ITEM_QUALITY_NORMAL && !item._iIdentified) { - item._iIdentified = true; // belt items can't be magical? + item._iIdentified = true; } } - InitDiabloMsg(EMSG_SHRINE_GLIMMERING); + CalcPlrInv(Players[pnum], true); + force_redraw = 255; - return true; + InitDiabloMsg(EMSG_SHRINE_GLIMMERING); } -bool OperateShrineTainted(int pnum) +void OperateShrineTainted(int pnum) { if (pnum == MyPlayerId) { InitDiabloMsg(EMSG_SHRINE_TAINTED1); - return true; + return; } int r = GenerateRnd(4); @@ -3108,10 +3084,10 @@ bool OperateShrineTainted(int pnum) ModifyPlrVit(player, v4); CheckStats(player); + CalcPlrInv(player, true); + force_redraw = 255; InitDiabloMsg(EMSG_SHRINE_TAINTED2); - - return true; } /** @@ -3119,13 +3095,11 @@ bool OperateShrineTainted(int pnum) * firewall near the shrine that will spread towards the player * @param pnum The player that activated the shrine * @param spawnPosition Start location for the firewall - * @return false if the current player did not activate the shrine (i.e. it's a multiplayer - * game) and we bailed early to avoid doubling the effects, true otherwise. */ -bool OperateShrineOily(int pnum, Point spawnPosition) +void OperateShrineOily(int pnum, Point spawnPosition) { if (pnum != MyPlayerId) - return false; + return; Player &player = Players[pnum]; @@ -3153,6 +3127,8 @@ bool OperateShrineOily(int pnum, Point spawnPosition) } CheckStats(Players[pnum]); + CalcPlrInv(Players[pnum], true); + force_redraw = 255; AddMissile( spawnPosition, @@ -3165,14 +3141,12 @@ bool OperateShrineOily(int pnum, Point spawnPosition) 0); InitDiabloMsg(EMSG_SHRINE_OILY); - - return true; } -bool OperateShrineGlowing(int pnum) +void OperateShrineGlowing(int pnum) { if (pnum != MyPlayerId) - return false; + return; Player &player = Players[pnum]; @@ -3185,20 +3159,16 @@ bool OperateShrineGlowing(int pnum) else player._pExperience = 0; - if (*sgOptions.Gameplay.experienceBar) - force_redraw = 255; - CheckStats(player); + force_redraw = 255; InitDiabloMsg(EMSG_SHRINE_GLOWING); - - return true; } -bool OperateShrineMendicant(int pnum) +void OperateShrineMendicant(int pnum) { if (pnum != MyPlayerId) - return false; + return; Player &player = Players[pnum]; @@ -3206,23 +3176,20 @@ bool OperateShrineMendicant(int pnum) AddPlrExperience(player, player._pLevel, gold); TakePlrsMoney(gold); - CheckStats(player); + force_redraw = 255; InitDiabloMsg(EMSG_SHRINE_MENDICANT); - - return true; } /** * @brief Grants experience to the player based on their current level while also triggering a magic trap * @param pnum The player that activated the shrine * @param spawnPosition The trap results in casting flash from this location targeting the player - * @return false if the current player didn't activate the shrine (to avoid doubling the effect), true otherwise */ -bool OperateShrineSparkling(int pnum, Point spawnPosition) +void OperateShrineSparkling(int pnum, Point spawnPosition) { if (pnum != MyPlayerId) - return false; + return; Player &player = Players[pnum]; @@ -3238,23 +3205,20 @@ bool OperateShrineSparkling(int pnum, Point spawnPosition) 3 * currlevel + 2, 0); - CheckStats(player); + force_redraw = 255; InitDiabloMsg(EMSG_SHRINE_SPARKLING); - - return true; } /** * @brief Spawns a town portal near the active player * @param pnum The player that activated the shrine * @param spawnPosition The position of the shrine, the portal will be placed on the side closest to the player - * @return false if the current player didn't activate the shrine (to avoid doubling the effect), true otherwise */ -bool OperateShrineTown(int pnum, Point spawnPosition) +void OperateShrineTown(int pnum, Point spawnPosition) { if (pnum != MyPlayerId) - return false; + return; Player &myPlayer = *MyPlayer; @@ -3269,29 +3233,27 @@ bool OperateShrineTown(int pnum, Point spawnPosition) 0); InitDiabloMsg(EMSG_SHRINE_TOWN); - - return true; } -bool OperateShrineShimmering(int pnum) +void OperateShrineShimmering(int pnum) { if (pnum != MyPlayerId) - return false; + return; Player &player = Players[pnum]; player._pMana = player._pMaxMana; player._pManaBase = player._pMaxManaBase; - InitDiabloMsg(EMSG_SHRINE_SHIMMERING); + force_redraw = 255; - return true; + InitDiabloMsg(EMSG_SHRINE_SHIMMERING); } -bool OperateShrineSolar(int pnum) +void OperateShrineSolar(int pnum) { if (pnum != MyPlayerId) - return false; + return; Player &player = Players[pnum]; @@ -3312,14 +3274,14 @@ bool OperateShrineSolar(int pnum) } CheckStats(player); - - return true; + CalcPlrInv(player, true); + force_redraw = 255; } -bool OperateShrineMurphys(int pnum) +void OperateShrineMurphys(int pnum) { if (pnum != MyPlayerId) - return false; + return; Player &myPlayer = *MyPlayer; @@ -3340,168 +3302,131 @@ bool OperateShrineMurphys(int pnum) } InitDiabloMsg(EMSG_SHRINE_MURPHYS); - - return true; } void OperateShrine(int pnum, int i, _sfx_id sType) { + assert(i >= 0 && i < MAXOBJECTS); + Object &shrine = Objects[i]; + + if (shrine._oSelFlag == 0) + return; + if (dropGoldFlag) { CloseGoldDrop(); dropGoldValue = 0; } - assert(i >= 0 && i < MAXOBJECTS); + SetRndSeed(shrine._oRndSeed); + shrine._oSelFlag = 0; - if (Objects[i]._oSelFlag == 0) - return; + PlaySfxLoc(sType, shrine.position); + shrine._oAnimFlag = true; + shrine._oAnimDelay = 1; - SetRndSeed(Objects[i]._oRndSeed); - Objects[i]._oSelFlag = 0; - - PlaySfxLoc(sType, Objects[i].position); - Objects[i]._oAnimFlag = true; - Objects[i]._oAnimDelay = 1; - - switch (Objects[i]._oVar1) { + switch (shrine._oVar1) { case ShrineMysterious: - if (!OperateShrineMysterious(pnum)) - return; + OperateShrineMysterious(pnum); break; case ShrineHidden: - if (!OperateShrineHidden(pnum)) - return; + OperateShrineHidden(pnum); break; case ShrineGloomy: - if (!OperateShrineGloomy(pnum)) - return; + OperateShrineGloomy(pnum); break; case ShrineWeird: - if (!OperateShrineWeird(pnum)) - return; + OperateShrineWeird(pnum); break; case ShrineMagical: case ShrineMagicaL2: - if (!OperateShrineMagical(pnum)) - return; + OperateShrineMagical(pnum); break; case ShrineStone: - if (!OperateShrineStone(pnum)) - return; + OperateShrineStone(pnum); break; case ShrineReligious: - if (!OperateShrineReligious(pnum)) - return; + OperateShrineReligious(pnum); break; case ShrineEnchanted: - if (!OperateShrineEnchanted(pnum)) - return; + OperateShrineEnchanted(pnum); break; case ShrineThaumaturgic: - if (!OperateShrineThaumaturgic(pnum)) - return; + OperateShrineThaumaturgic(pnum); break; case ShrineFascinating: - if (!OperateShrineCostOfWisdom(pnum, SPL_FIREBOLT, EMSG_SHRINE_FASCINATING)) - return; + OperateShrineCostOfWisdom(pnum, SPL_FIREBOLT, EMSG_SHRINE_FASCINATING); break; case ShrineCryptic: - if (!OperateShrineCryptic(pnum)) - return; + OperateShrineCryptic(pnum); break; case ShrineEldritch: - if (!OperateShrineEldritch(pnum)) - return; + OperateShrineEldritch(pnum); break; case ShrineEerie: - if (!OperateShrineEerie(pnum)) - return; + OperateShrineEerie(pnum); break; case ShrineDivine: - if (!OperateShrineDivine(pnum, Objects[i].position)) - return; + OperateShrineDivine(pnum, shrine.position); break; case ShrineHoly: - if (!OperateShrineHoly(pnum)) - return; + OperateShrineHoly(pnum); break; case ShrineSacred: - if (!OperateShrineCostOfWisdom(pnum, SPL_CBOLT, EMSG_SHRINE_SACRED)) - return; + OperateShrineCostOfWisdom(pnum, SPL_CBOLT, EMSG_SHRINE_SACRED); break; case ShrineSpiritual: - if (!OperateShrineSpiritual(pnum)) - return; + OperateShrineSpiritual(pnum); break; case ShrineSpooky: - if (!OperateShrineSpooky(pnum)) - return; + OperateShrineSpooky(pnum); break; case ShrineAbandoned: - if (!OperateShrineAbandoned(pnum)) - return; + OperateShrineAbandoned(pnum); break; case ShrineCreepy: - if (!OperateShrineCreepy(pnum)) - return; + OperateShrineCreepy(pnum); break; case ShrineQuiet: - if (!OperateShrineQuiet(pnum)) - return; + OperateShrineQuiet(pnum); break; case ShrineSecluded: - if (!OperateShrineSecluded(pnum)) - return; + OperateShrineSecluded(pnum); break; case ShrineOrnate: - if (!OperateShrineCostOfWisdom(pnum, SPL_HBOLT, EMSG_SHRINE_ORNATE)) - return; + OperateShrineCostOfWisdom(pnum, SPL_HBOLT, EMSG_SHRINE_ORNATE); break; case ShrineGlimmering: - if (!OperateShrineGlimmering(pnum)) - return; + OperateShrineGlimmering(pnum); break; case ShrineTainted: - if (!OperateShrineTainted(pnum)) - return; + OperateShrineTainted(pnum); break; case ShrineOily: - if (!OperateShrineOily(pnum, Objects[i].position)) - return; + OperateShrineOily(pnum, shrine.position); break; case ShrineGlowing: - if (!OperateShrineGlowing(pnum)) - return; + OperateShrineGlowing(pnum); break; case ShrineMendicant: - if (!OperateShrineMendicant(pnum)) - return; + OperateShrineMendicant(pnum); break; case ShrineSparkling: - if (!OperateShrineSparkling(pnum, Objects[i].position)) - return; + OperateShrineSparkling(pnum, shrine.position); break; case ShrineTown: - if (!OperateShrineTown(pnum, Objects[i].position)) - return; + OperateShrineTown(pnum, shrine.position); break; case ShrineShimmering: - if (!OperateShrineShimmering(pnum)) - return; + OperateShrineShimmering(pnum); break; case ShrineSolar: - if (!OperateShrineSolar(pnum)) - return; + OperateShrineSolar(pnum); break; case ShrineMurphys: - if (!OperateShrineMurphys(pnum)) - return; + OperateShrineMurphys(pnum); break; } - CalcPlrInv(Players[pnum], true); - force_redraw = 255; - if (pnum == MyPlayerId) NetSendCmdParam2(false, CMD_PLROPOBJ, pnum, i); }