From d82f2ebc9e7e2046cc13aa1cc13af6afb45752d5 Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Mon, 27 Jun 2022 22:53:45 +0200 Subject: [PATCH] Pass players by reference instead of an index --- Source/inv.cpp | 29 +++---- Source/inv.h | 4 +- Source/items.cpp | 16 ++-- Source/loadsave.cpp | 2 +- Source/monster.cpp | 4 +- Source/msg.cpp | 16 ++-- Source/objects.cpp | 130 ++++++++++++++++-------------- Source/player.cpp | 185 ++++++++++++------------------------------- Source/player.h | 16 ++-- Source/qol/stash.cpp | 2 +- Source/stores.cpp | 2 +- 11 files changed, 167 insertions(+), 239 deletions(-) diff --git a/Source/inv.cpp b/Source/inv.cpp index fc20cdf6b..999c9d40c 100644 --- a/Source/inv.cpp +++ b/Source/inv.cpp @@ -272,10 +272,8 @@ void ChangeEquipment(Player &player, inv_body_loc bodyLocation, const Item &item } } -bool AutoEquip(int playerId, const Item &item, inv_body_loc bodyLocation, bool persistItem) +bool AutoEquip(Player &player, const Item &item, inv_body_loc bodyLocation, bool persistItem) { - Player &player = Players[playerId]; - if (!CanEquip(player, item, bodyLocation)) { return false; } @@ -283,7 +281,7 @@ bool AutoEquip(int playerId, const Item &item, inv_body_loc bodyLocation, bool p if (persistItem) { ChangeEquipment(player, bodyLocation, item); - if (*sgOptions.Audio.autoEquipSound && playerId == MyPlayerId) { + if (*sgOptions.Audio.autoEquipSound && &player == MyPlayer) { PlaySFX(ItemInvSnds[ItemCAnimTbl[item._iCurs]]); } @@ -566,10 +564,8 @@ void CheckInvPaste(Player &player, Point cursorPosition) } } -void CheckInvCut(int pnum, Point cursorPosition, bool automaticMove, bool dropItem) +void CheckInvCut(Player &player, Point cursorPosition, bool automaticMove, bool dropItem) { - Player &player = Players[pnum]; - if (player._pmode > PM_WALK3) { return; } @@ -778,7 +774,7 @@ void CheckInvCut(int pnum, Point cursorPosition, bool automaticMove, bool dropIt } } holdItem = player.InvList[iv - 1]; - automaticallyMoved = automaticallyEquipped = AutoEquip(pnum, holdItem); + automaticallyMoved = automaticallyEquipped = AutoEquip(player, holdItem); } } @@ -811,7 +807,7 @@ void CheckInvCut(int pnum, Point cursorPosition, bool automaticMove, bool dropIt CalcPlrInv(player, true); holdItem._iStatFlag = player.CanUseItem(holdItem); - if (pnum == MyPlayerId) { + if (&player == MyPlayer) { if (automaticallyEquipped) { PlaySFX(ItemInvSnds[ItemCAnimTbl[holdItem._iCurs]]); } else if (!automaticMove || automaticallyMoved) { @@ -1254,14 +1250,14 @@ bool AutoPlaceItemInBelt(Player &player, const Item &item, bool persistItem) return false; } -bool AutoEquip(int playerId, const Item &item, bool persistItem) +bool AutoEquip(Player &player, const Item &item, bool persistItem) { if (!CanEquip(item)) { return false; } for (int bodyLocation = INVLOC_HEAD; bodyLocation < NUM_INVLOC; bodyLocation++) { - if (AutoEquip(playerId, item, (inv_body_loc)bodyLocation, persistItem)) { + if (AutoEquip(player, item, (inv_body_loc)bodyLocation, persistItem)) { return true; } } @@ -1511,7 +1507,7 @@ void CheckInvItem(bool isShiftHeld, bool isCtrlHeld) } else if (IsStashOpen && isCtrlHeld) { TransferItemToStash(*MyPlayer, pcursinvitem); } else { - CheckInvCut(MyPlayerId, MousePosition, isShiftHeld, isCtrlHeld); + CheckInvCut(*MyPlayer, MousePosition, isShiftHeld, isCtrlHeld); } } @@ -1597,10 +1593,9 @@ std::optional FindAdjacentPositionForItem(Point origin, Direction facing) return {}; } -void AutoGetItem(int pnum, Item *itemPointer, int ii) +void AutoGetItem(Player &player, Item *itemPointer, int ii) { Item &item = *itemPointer; - Player &player = Players[pnum]; if (dropGoldFlag) { CloseGoldDrop(); @@ -1623,7 +1618,7 @@ void AutoGetItem(int pnum, Item *itemPointer, int ii) SetPlrHandGoldCurs(item); } } else { - done = AutoEquipEnabled(player, item) && AutoEquip(pnum, item); + done = AutoEquipEnabled(player, item) && AutoEquip(player, item); if (done) { autoEquipped = true; } @@ -1637,7 +1632,7 @@ void AutoGetItem(int pnum, Item *itemPointer, int ii) } if (done) { - if (!autoEquipped && *sgOptions.Audio.itemPickupSound && pnum == MyPlayerId) { + if (!autoEquipped && *sgOptions.Audio.itemPickupSound && &player == MyPlayer) { PlaySFX(IS_IGRAB); } @@ -1645,7 +1640,7 @@ void AutoGetItem(int pnum, Item *itemPointer, int ii) return; } - if (pnum == MyPlayerId) { + if (&player == MyPlayer) { player.Say(HeroSpeech::ICantCarryAnymore); } RespawnItem(item, true); diff --git a/Source/inv.h b/Source/inv.h index ec07dcf8b..338d01aff 100644 --- a/Source/inv.h +++ b/Source/inv.h @@ -136,7 +136,7 @@ bool AutoEquipEnabled(const Player &player, const Item &item); * whether the player can equip the item but you don't want the item to actually be equipped. 'True' by default. * @return 'True' if the item was equipped and 'False' otherwise. */ -bool AutoEquip(int playerId, const Item &item, bool persistItem = true); +bool AutoEquip(Player &player, const Item &item, bool persistItem = true); /** * @brief Checks whether the given item can be placed on the specified player's inventory. @@ -200,7 +200,7 @@ void InvGetItem(Player &player, int ii); * @return the first valid point or an empty optional */ std::optional FindAdjacentPositionForItem(Point origin, Direction facing); -void AutoGetItem(int pnum, Item *item, int ii); +void AutoGetItem(Player &player, Item *itemPointer, int ii); /** * @brief Searches for a dropped item with the same type/createInfo/seed diff --git a/Source/items.cpp b/Source/items.cpp index c404252a6..bbb666496 100644 --- a/Source/items.cpp +++ b/Source/items.cpp @@ -3868,10 +3868,10 @@ void UseItem(int pnum, item_misc_id mid, spell_id spl) } break; case IMISC_ELIXSTR: - ModifyPlrStr(pnum, 1); + ModifyPlrStr(player, 1); break; case IMISC_ELIXMAG: - ModifyPlrMag(pnum, 1); + ModifyPlrMag(player, 1); if (gbIsHellfire) { player.RestoreFullMana(); if (&player == MyPlayer) { @@ -3880,10 +3880,10 @@ void UseItem(int pnum, item_misc_id mid, spell_id spl) } break; case IMISC_ELIXDEX: - ModifyPlrDex(pnum, 1); + ModifyPlrDex(player, 1); break; case IMISC_ELIXVIT: - ModifyPlrVit(pnum, 1); + ModifyPlrVit(player, 1); if (gbIsHellfire) { player.RestoreFullLife(); if (&player == MyPlayer) { @@ -3985,10 +3985,10 @@ void UseItem(int pnum, item_misc_id mid, spell_id spl) NewCursor(CURSOR_OIL); break; case IMISC_SPECELIX: - ModifyPlrStr(pnum, 3); - ModifyPlrMag(pnum, 3); - ModifyPlrDex(pnum, 3); - ModifyPlrVit(pnum, 3); + ModifyPlrStr(player, 3); + ModifyPlrMag(player, 3); + ModifyPlrDex(player, 3); + ModifyPlrVit(player, 3); break; case IMISC_RUNEF: player._pTSpell = SPL_RUNEFIRE; diff --git a/Source/loadsave.cpp b/Source/loadsave.cpp index 555c8d53b..aae70bfc9 100644 --- a/Source/loadsave.cpp +++ b/Source/loadsave.cpp @@ -2053,7 +2053,7 @@ void LoadGame(bool firstflag) LoadGameLevel(firstflag, ENTRY_LOAD); SyncInitPlr(MyPlayerId); - SyncPlrAnim(MyPlayerId); + SyncPlrAnim(myPlayer); ViewPosition = { viewX, viewY }; ActiveMonsterCount = tmpNummonsters; diff --git a/Source/monster.cpp b/Source/monster.cpp index e40821d64..0ef293ed7 100644 --- a/Source/monster.cpp +++ b/Source/monster.cpp @@ -1423,7 +1423,7 @@ void MonsterAttackPlayer(int i, int pnum, int hit, int minDam, int maxDam) Point newPosition = player.position.tile + monster._mdir; if (PosOkPlayer(player, newPosition)) { player.position.tile = newPosition; - FixPlayerLocation(pnum, player._pdir); + FixPlayerLocation(player, player._pdir); FixPlrWalkTags(pnum); dPlayer[newPosition.x][newPosition.y] = pnum + 1; SetPlayerOld(player); @@ -4697,7 +4697,7 @@ void MissToMonst(Missile &missile, Point position) Point newPosition = oldPosition + monster._mdir; if (PosOkPlayer(player, newPosition)) { player.position.tile = newPosition; - FixPlayerLocation(pnum, player._pdir); + FixPlayerLocation(player, player._pdir); FixPlrWalkTags(pnum); dPlayer[newPosition.x][newPosition.y] = pnum + 1; SetPlayerOld(player); diff --git a/Source/msg.cpp b/Source/msg.cpp index 4e07fa6da..84100ccb1 100644 --- a/Source/msg.cpp +++ b/Source/msg.cpp @@ -749,7 +749,7 @@ DWORD OnAddStrength(const TCmd *pCmd, int pnum) if (gbBufferMsgs == 1) SendPacket(pnum, &message, sizeof(message)); else if (message.wParam1 <= 256) - ModifyPlrStr(pnum, message.wParam1); + ModifyPlrStr(Players[pnum], message.wParam1); return sizeof(message); } @@ -761,7 +761,7 @@ DWORD OnAddMagic(const TCmd *pCmd, int pnum) if (gbBufferMsgs == 1) SendPacket(pnum, &message, sizeof(message)); else if (message.wParam1 <= 256) - ModifyPlrMag(pnum, message.wParam1); + ModifyPlrMag(Players[pnum], message.wParam1); return sizeof(message); } @@ -773,7 +773,7 @@ DWORD OnAddDexterity(const TCmd *pCmd, int pnum) if (gbBufferMsgs == 1) SendPacket(pnum, &message, sizeof(message)); else if (message.wParam1 <= 256) - ModifyPlrDex(pnum, message.wParam1); + ModifyPlrDex(Players[pnum], message.wParam1); return sizeof(message); } @@ -785,7 +785,7 @@ DWORD OnAddVitality(const TCmd *pCmd, int pnum) if (gbBufferMsgs == 1) SendPacket(pnum, &message, sizeof(message)); else if (message.wParam1 <= 256) - ModifyPlrVit(pnum, message.wParam1); + ModifyPlrVit(Players[pnum], message.wParam1); return sizeof(message); } @@ -928,7 +928,7 @@ DWORD OnRequestAutoGetItem(const TCmd *pCmd, Player &player) if (message.bPnum != MyPlayerId) SyncGetItem(position, message.dwSeed, message.wIndx, message.wCI); else - AutoGetItem(MyPlayerId, &Items[message.bCursitem], message.bCursitem); + AutoGetItem(*MyPlayer, &Items[message.bCursitem], message.bCursitem); SetItemRecord(message.dwSeed, message.wCI, message.wIndx); } else if (!NetSendCmdReq2(CMD_REQUESTAGITEM, MyPlayerId, message.bPnum, message)) { NetSendCmdExtra(message); @@ -955,9 +955,9 @@ DWORD OnAutoGetItem(const TCmd *pCmd, int pnum) Player &player = *MyPlayer; int ii = SyncPutItem(player, player.position.tile, message.wIndx, message.wCI, message.dwSeed, message.bId, message.bDur, message.bMDur, message.bCh, message.bMCh, message.wValue, message.dwBuff, message.wToHit, message.wMaxDam, message.bMinStr, message.bMinMag, message.bMinDex, message.bAC); if (ii != -1) - AutoGetItem(MyPlayerId, &Items[ii], ii); + AutoGetItem(*MyPlayer, &Items[ii], ii); } else { - AutoGetItem(MyPlayerId, &Items[message.bCursitem], message.bCursitem); + AutoGetItem(*MyPlayer, &Items[message.bCursitem], message.bCursitem); } } else { SyncGetItem(position, message.dwSeed, message.wIndx, message.wCI); @@ -2007,7 +2007,7 @@ DWORD OnCheatExperience(const TCmd *pCmd, int pnum) // NOLINT(misc-unused-parame if (*sgOptions.Gameplay.experienceBar) { force_redraw = 255; } - NextPlrLevel(pnum); + NextPlrLevel(Players[pnum]); } #endif return sizeof(*pCmd); diff --git a/Source/objects.cpp b/Source/objects.cpp index 30e2b857b..d77831977 100644 --- a/Source/objects.cpp +++ b/Source/objects.cpp @@ -2556,27 +2556,29 @@ bool OperateShrineMysterious(int pnum) if (pnum != MyPlayerId) return false; - ModifyPlrStr(pnum, -1); - ModifyPlrMag(pnum, -1); - ModifyPlrDex(pnum, -1); - ModifyPlrVit(pnum, -1); + Player &player = Players[pnum]; + + ModifyPlrStr(player, -1); + ModifyPlrMag(player, -1); + ModifyPlrDex(player, -1); + ModifyPlrVit(player, -1); switch (static_cast(GenerateRnd(4))) { case CharacterAttribute::Strength: - ModifyPlrStr(pnum, 6); + ModifyPlrStr(player, 6); break; case CharacterAttribute::Magic: - ModifyPlrMag(pnum, 6); + ModifyPlrMag(player, 6); break; case CharacterAttribute::Dexterity: - ModifyPlrDex(pnum, 6); + ModifyPlrDex(player, 6); break; case CharacterAttribute::Vitality: - ModifyPlrVit(pnum, 6); + ModifyPlrVit(player, 6); break; } - CheckStats(Players[pnum]); + CheckStats(player); InitDiabloMsg(EMSG_SHRINE_MYSTERIOUS); @@ -2903,8 +2905,10 @@ bool OperateShrineEerie(int pnum) if (pnum != MyPlayerId) return false; - ModifyPlrMag(pnum, 2); - CheckStats(Players[pnum]); + Player &player = Players[pnum]; + + ModifyPlrMag(player, 2); + CheckStats(player); InitDiabloMsg(EMSG_SHRINE_EERIE); @@ -3003,8 +3007,10 @@ bool OperateShrineAbandoned(int pnum) if (pnum != MyPlayerId) return false; - ModifyPlrDex(pnum, 2); - CheckStats(Players[pnum]); + Player &player = Players[pnum]; + + ModifyPlrDex(player, 2); + CheckStats(player); if (pnum != MyPlayerId) return true; @@ -3019,8 +3025,10 @@ bool OperateShrineCreepy(int pnum) if (pnum != MyPlayerId) return false; - ModifyPlrStr(pnum, 2); - CheckStats(Players[pnum]); + Player &player = Players[pnum]; + + ModifyPlrStr(player, 2); + CheckStats(player); if (pnum != MyPlayerId) return true; @@ -3035,8 +3043,10 @@ bool OperateShrineQuiet(int pnum) if (pnum != MyPlayerId) return false; - ModifyPlrVit(pnum, 2); - CheckStats(Players[pnum]); + Player &player = Players[pnum]; + + ModifyPlrVit(player, 2); + CheckStats(player); if (pnum != MyPlayerId) return true; @@ -3090,12 +3100,14 @@ bool OperateShrineTainted(int pnum) int v3 = r == 2 ? 1 : -1; int v4 = r == 3 ? 1 : -1; - ModifyPlrStr(MyPlayerId, v1); - ModifyPlrMag(MyPlayerId, v2); - ModifyPlrDex(MyPlayerId, v3); - ModifyPlrVit(MyPlayerId, v4); + Player &player = *MyPlayer; - CheckStats(*MyPlayer); + ModifyPlrStr(player, v1); + ModifyPlrMag(player, v2); + ModifyPlrDex(player, v3); + ModifyPlrVit(player, v4); + + CheckStats(player); InitDiabloMsg(EMSG_SHRINE_TAINTED2); @@ -3115,28 +3127,28 @@ bool OperateShrineOily(int pnum, Point spawnPosition) if (pnum != MyPlayerId) return false; - Player &myPlayer = *MyPlayer; + Player &player = Players[pnum]; - switch (myPlayer._pClass) { + switch (player._pClass) { case HeroClass::Warrior: - ModifyPlrStr(MyPlayerId, 2); + ModifyPlrStr(player, 2); break; case HeroClass::Rogue: - ModifyPlrDex(MyPlayerId, 2); + ModifyPlrDex(player, 2); break; case HeroClass::Sorcerer: - ModifyPlrMag(MyPlayerId, 2); + ModifyPlrMag(player, 2); break; case HeroClass::Barbarian: - ModifyPlrVit(MyPlayerId, 2); + ModifyPlrVit(player, 2); break; case HeroClass::Monk: - ModifyPlrStr(MyPlayerId, 1); - ModifyPlrDex(MyPlayerId, 1); + ModifyPlrStr(player, 1); + ModifyPlrDex(player, 1); break; case HeroClass::Bard: - ModifyPlrDex(MyPlayerId, 1); - ModifyPlrMag(MyPlayerId, 1); + ModifyPlrDex(player, 1); + ModifyPlrMag(player, 1); break; } @@ -3144,8 +3156,8 @@ bool OperateShrineOily(int pnum, Point spawnPosition) AddMissile( spawnPosition, - myPlayer.position.tile, - myPlayer._pdir, + player.position.tile, + player._pdir, MIS_FIREWALL, TARGET_PLAYERS, -1, @@ -3162,21 +3174,21 @@ bool OperateShrineGlowing(int pnum) if (pnum != MyPlayerId) return false; - Player &myPlayer = *MyPlayer; + Player &player = Players[pnum]; // Add 0-5 points to Magic (0.1% of the players XP) - ModifyPlrMag(MyPlayerId, static_cast(std::min(myPlayer._pExperience / 1000, 5))); + ModifyPlrMag(player, static_cast(std::min(player._pExperience / 1000, 5))); // Take 5% of the players experience to offset the bonus, unless they're very low level in which case take all their experience. - if (myPlayer._pExperience > 5000) - myPlayer._pExperience = static_cast(myPlayer._pExperience * 0.95); + if (player._pExperience > 5000) + player._pExperience = static_cast(player._pExperience * 0.95); else - myPlayer._pExperience = 0; + player._pExperience = 0; if (*sgOptions.Gameplay.experienceBar) force_redraw = 255; - CheckStats(Players[pnum]); + CheckStats(player); InitDiabloMsg(EMSG_SHRINE_GLOWING); @@ -3188,13 +3200,13 @@ bool OperateShrineMendicant(int pnum) if (pnum != MyPlayerId) return false; - Player &myPlayer = *MyPlayer; + Player &player = Players[pnum]; - int gold = myPlayer._pGold / 2; - AddPlrExperience(MyPlayerId, myPlayer._pLevel, gold); + int gold = player._pGold / 2; + AddPlrExperience(player, player._pLevel, gold); TakePlrsMoney(gold); - CheckStats(Players[pnum]); + CheckStats(player); InitDiabloMsg(EMSG_SHRINE_MENDICANT); @@ -3212,21 +3224,21 @@ bool OperateShrineSparkling(int pnum, Point spawnPosition) if (pnum != MyPlayerId) return false; - Player &myPlayer = *MyPlayer; + Player &player = Players[pnum]; - AddPlrExperience(MyPlayerId, myPlayer._pLevel, 1000 * currlevel); + AddPlrExperience(player, player._pLevel, 1000 * currlevel); AddMissile( spawnPosition, - myPlayer.position.tile, - myPlayer._pdir, + player.position.tile, + player._pdir, MIS_FLASH, TARGET_PLAYERS, -1, 3 * currlevel + 2, 0); - CheckStats(Players[pnum]); + CheckStats(player); InitDiabloMsg(EMSG_SHRINE_SPARKLING); @@ -3281,23 +3293,25 @@ bool OperateShrineSolar(int pnum) if (pnum != MyPlayerId) return false; + Player &player = Players[pnum]; + time_t tm = time(nullptr); int hour = localtime(&tm)->tm_hour; if (hour >= 20 || hour < 4) { InitDiabloMsg(EMSG_SHRINE_SOLAR4); - ModifyPlrVit(MyPlayerId, 2); + ModifyPlrVit(player, 2); } else if (hour >= 18) { InitDiabloMsg(EMSG_SHRINE_SOLAR3); - ModifyPlrMag(MyPlayerId, 2); + ModifyPlrMag(player, 2); } else if (hour >= 12) { InitDiabloMsg(EMSG_SHRINE_SOLAR2); - ModifyPlrStr(MyPlayerId, 2); + ModifyPlrStr(player, 2); } else /* 4:00 to 11:59 */ { InitDiabloMsg(EMSG_SHRINE_SOLAR1); - ModifyPlrDex(MyPlayerId, 2); + ModifyPlrDex(player, 2); } - CheckStats(Players[pnum]); + CheckStats(player); return true; } @@ -3680,16 +3694,16 @@ bool OperateFountains(int pnum, int i) for (auto alteration : alterations) { switch (alteration.first) { case 0: - ModifyPlrStr(pnum, alteration.second); + ModifyPlrStr(player, alteration.second); break; case 1: - ModifyPlrMag(pnum, alteration.second); + ModifyPlrMag(player, alteration.second); break; case 2: - ModifyPlrDex(pnum, alteration.second); + ModifyPlrDex(player, alteration.second); break; case 3: - ModifyPlrVit(pnum, alteration.second); + ModifyPlrVit(player, alteration.second); break; } } diff --git a/Source/player.cpp b/Source/player.cpp index c2753fa86..ded0a7091 100644 --- a/Source/player.cpp +++ b/Source/player.cpp @@ -404,13 +404,8 @@ void StartWalkStand(int pnum) } } -void ChangeOffset(int pnum) +void ChangeOffset(Player &player) { - if ((DWORD)pnum >= MAX_PLRS) { - app_fatal("PM_ChangeOffset: illegal player %i", pnum); - } - Player &player = Players[pnum]; - int px = player.position.offset2.deltaX / 256; int py = player.position.offset2.deltaY / 256; @@ -425,7 +420,7 @@ void ChangeOffset(int pnum) px -= player.position.offset2.deltaX >> 8; py -= player.position.offset2.deltaY >> 8; - if (pnum == MyPlayerId && ScrollInfo._sdir != ScrollDirection::None) { + if (&player == MyPlayer && ScrollInfo._sdir != ScrollDirection::None) { ScrollInfo.offset += { px, py }; } @@ -460,7 +455,7 @@ void StartAttack(int pnum, Direction d) animationFlags = static_cast(animationFlags | AnimationDistributionFlags::RepeatedAction); NewPlrAnim(player, player_graphic::Attack, d, player._pAFrames, 1, animationFlags, skippedAnimationFrames, player._pAFNum); player._pmode = PM_ATTACK; - FixPlayerLocation(pnum, d); + FixPlayerLocation(player, d); SetPlayerOld(player); } @@ -489,7 +484,7 @@ void StartRangeAttack(int pnum, Direction d, int cx, int cy) NewPlrAnim(player, player_graphic::Attack, d, player._pAFrames, 1, animationFlags, skippedAnimationFrames, player._pAFNum); player._pmode = PM_RATTACK; - FixPlayerLocation(pnum, d); + FixPlayerLocation(player, d); SetPlayerOld(player); player.position.temp = { cx, cy }; } @@ -526,7 +521,7 @@ void StartSpell(int pnum, Direction d, int cx, int cy) player._pmode = PM_SPELL; - FixPlayerLocation(pnum, d); + FixPlayerLocation(player, d); SetPlayerOld(player); player.position.temp = { cx, cy }; @@ -599,13 +594,8 @@ int DropGold(Player &player, int amount, bool skipFullStacks) return amount; } -void DropHalfPlayersGold(int pnum) +void DropHalfPlayersGold(Player &player) { - if ((DWORD)pnum >= MAX_PLRS) { - app_fatal("DropHalfPlayersGold: illegal player %i", pnum); - } - Player &player = Players[pnum]; - int remainingGold = DropGold(player, player._pGold / 2, true); if (remainingGold > 0) { DropGold(player, remainingGold, false); @@ -716,7 +706,7 @@ bool DoWalk(int pnum, int variant) AutoPickup(pnum); return true; } // We didn't reach new tile so update player's "sub-tile" position - ChangeOffset(pnum); + ChangeOffset(player); return false; } @@ -734,17 +724,12 @@ bool WeaponDecay(Player &player, int ii) return false; } -bool DamageWeapon(int pnum, int durrnd) +bool DamageWeapon(Player &player, int durrnd) { - if (pnum != MyPlayerId) { + if (&player != MyPlayer) { return false; } - if ((DWORD)pnum >= MAX_PLRS) { - app_fatal("DamageWeapon: illegal player %i", pnum); - } - Player &player = Players[pnum]; - if (WeaponDecay(player, INVLOC_HAND_LEFT)) return true; if (WeaponDecay(player, INVLOC_HAND_RIGHT)) @@ -994,12 +979,12 @@ bool PlrHitMonst(int pnum, int m, bool adjacentDamage = false) return true; } -bool PlrHitPlr(int pnum, int8_t p) +bool PlrHitPlr(Player &attacker, int8_t p) { if ((DWORD)p >= MAX_PLRS) { app_fatal("PlrHitPlr: illegal target player %i", p); } - auto &target = Players[p]; + Player &target = Players[p]; if (target._pInvincible) { return false; @@ -1009,11 +994,6 @@ bool PlrHitPlr(int pnum, int8_t p) return false; } - if ((DWORD)pnum >= MAX_PLRS) { - app_fatal("PlrHitPlr: illegal attacking player %i", pnum); - } - auto &attacker = Players[pnum]; - int hit = GenerateRnd(100); int hper = attacker.GetMeleeToHit() - target.GetArmor(); @@ -1061,7 +1041,7 @@ bool PlrHitPlr(int pnum, int8_t p) } drawhpflag = true; } - if (pnum == MyPlayerId) { + if (&attacker == MyPlayer) { NetSendCmdDamage(true, p, skdam); } StartPlrHit(p, skdam, false); @@ -1133,7 +1113,7 @@ bool DoAttack(int pnum) } else { p = -(dPlayer[dx][dy] + 1); } - didhit = PlrHitPlr(pnum, p); + didhit = PlrHitPlr(player, p); } else { Object *object = ObjectAtPosition(position, false); if (object != nullptr) { @@ -1172,7 +1152,7 @@ bool DoAttack(int pnum) } } - if (didhit && DamageWeapon(pnum, 30)) { + if (didhit && DamageWeapon(player, 30)) { StartStand(pnum, player._pdir); ClearStateVariables(player); return true; @@ -1244,7 +1224,7 @@ bool DoRangeAttack(int pnum) PlaySfxLoc(arrows != 1 ? IS_STING1 : PS_BFIRE, player.position.tile); } - if (DamageWeapon(pnum, 40)) { + if (DamageWeapon(player, 40)) { StartStand(pnum, player._pdir); ClearStateVariables(player); return true; @@ -1259,17 +1239,12 @@ bool DoRangeAttack(int pnum) return false; } -void DamageParryItem(int pnum) +void DamageParryItem(Player &player) { - if (pnum != MyPlayerId) { + if (&player != MyPlayer) { return; } - if ((DWORD)pnum >= MAX_PLRS) { - app_fatal("DamageParryItem: illegal player %i", pnum); - } - Player &player = Players[pnum]; - if (player.InvBody[INVLOC_HAND_LEFT]._itype == ItemType::Shield || player.InvBody[INVLOC_HAND_LEFT]._itype == ItemType::Staff) { if (player.InvBody[INVLOC_HAND_LEFT]._iDurability == DUR_INDESTRUCTIBLE) { return; @@ -1305,7 +1280,7 @@ bool DoBlock(int pnum) ClearStateVariables(player); if (GenerateRnd(10) == 0) { - DamageParryItem(pnum); + DamageParryItem(player); } return true; } @@ -1313,20 +1288,15 @@ bool DoBlock(int pnum) return false; } -void DamageArmor(int pnum) +void DamageArmor(Player &player) { int a; Item *pi; - if (pnum != MyPlayerId) { + if (&player != MyPlayer) { return; } - if ((DWORD)pnum >= MAX_PLRS) { - app_fatal("DamageArmor: illegal player %i", pnum); - } - Player &player = Players[pnum]; - if (player.InvBody[INVLOC_CHEST].isEmpty() && player.InvBody[INVLOC_HEAD].isEmpty()) { return; } @@ -1403,7 +1373,7 @@ bool DoGotHit(int pnum) StartStand(pnum, player._pdir); ClearStateVariables(player); if (GenerateRnd(4) != 0) { - DamageArmor(pnum); + DamageArmor(player); } return true; @@ -1412,18 +1382,13 @@ bool DoGotHit(int pnum) return false; } -bool DoDeath(int pnum) +bool DoDeath(Player &player) { - if ((DWORD)pnum >= MAX_PLRS) { - app_fatal("PM_DoDeath: illegal player %i", pnum); - } - Player &player = Players[pnum]; - if (player.AnimInfo.CurrentFrame == player.AnimInfo.NumberOfFrames - 1) { if (player.AnimInfo.TickCounterOfCurrentFrame == 0) { player.AnimInfo.TicksPerFrame = 1000000000; dFlags[player.position.tile.x][player.position.tile.y] |= DungeonFlag::DeadPlayer; - } else if (pnum == MyPlayerId && player.AnimInfo.TickCounterOfCurrentFrame == 30) { + } else if (&player == MyPlayer && player.AnimInfo.TickCounterOfCurrentFrame == 30) { MyPlayerIsDead = true; if (!gbIsMultiplayer) { gamemenu_on(); @@ -1695,7 +1660,7 @@ void CheckNewPath(int pnum, bool pmWillBeCalled) break; } - FixPlayerLocation(pnum, player._pdir); + FixPlayerLocation(player, player._pdir); player.destAction = ACTION_NONE; return; @@ -1765,17 +1730,11 @@ void CheckNewPath(int pnum, bool pmWillBeCalled) } } -bool PlrDeathModeOK(int p) +bool PlrDeathModeOK(Player &player) { - if (p != MyPlayerId) { + if (&player != MyPlayer) { return true; } - - if ((DWORD)p >= MAX_PLRS) { - app_fatal("PlrDeathModeOK: illegal player %i", p); - } - Player &player = Players[p]; - if (player._pmode == PM_DEATH) { return true; } @@ -2640,13 +2599,8 @@ int CalcStatDiff(Player &player) return diff; } -void NextPlrLevel(int pnum) +void NextPlrLevel(Player &player) { - if ((DWORD)pnum >= MAX_PLRS) { - app_fatal("NextPlrLevel: illegal player %i", pnum); - } - Player &player = Players[pnum]; - player._pLevel++; player._pMaxLvl++; @@ -2667,7 +2621,7 @@ void NextPlrLevel(int pnum) player._pMaxHPBase += hp; player._pHPBase = player._pMaxHPBase; - if (pnum == MyPlayerId) { + if (&player == MyPlayer) { drawhpflag = true; } @@ -2685,7 +2639,7 @@ void NextPlrLevel(int pnum) player._pManaBase = player._pMaxManaBase; } - if (pnum == MyPlayerId) { + if (&player == MyPlayer) { drawmanaflag = true; } @@ -2695,17 +2649,12 @@ void NextPlrLevel(int pnum) CalcPlrInv(player, true); } -void AddPlrExperience(int pnum, int lvl, int exp) +void AddPlrExperience(Player &player, int lvl, int exp) { - if (pnum != MyPlayerId) { + if (&player != MyPlayer) { return; } - if (pnum >= MAX_PLRS || pnum < 0) { - app_fatal("AddPlrExperience: illegal player %i", pnum); - } - Player &player = Players[pnum]; - if (player._pHitPoints <= 0) { return; } @@ -2743,7 +2692,7 @@ void AddPlrExperience(int pnum, int lvl, int exp) } if (newLvl != player._pLevel) { for (int i = newLvl - player._pLevel; i > 0; i--) { - NextPlrLevel(pnum); + NextPlrLevel(player); } } @@ -2762,7 +2711,7 @@ void AddPlrMonstExper(int lvl, int exp, char pmask) if (totplrs != 0) { int e = exp / totplrs; if ((pmask & (1 << MyPlayerId)) != 0) - AddPlrExperience(MyPlayerId, lvl, e); + AddPlrExperience(*MyPlayer, lvl, e); } } @@ -2893,17 +2842,12 @@ void SetPlayerOld(Player &player) player.position.old = player.position.tile; } -void FixPlayerLocation(int pnum, Direction bDir) +void FixPlayerLocation(Player &player, Direction bDir) { - if ((DWORD)pnum >= MAX_PLRS) { - app_fatal("FixPlayerLocation: illegal player %i", pnum); - } - Player &player = Players[pnum]; - player.position.future = player.position.tile; player.position.offset = { 0, 0 }; player._pdir = bDir; - if (pnum == MyPlayerId) { + if (&player == MyPlayer) { ScrollInfo.offset = { 0, 0 }; ScrollInfo._sdir = ScrollDirection::None; ViewPosition = player.position.tile; @@ -2926,7 +2870,7 @@ void StartStand(int pnum, Direction dir) NewPlrAnim(player, player_graphic::Stand, dir, player._pNFrames, 4); player._pmode = PM_STAND; - FixPlayerLocation(pnum, dir); + FixPlayerLocation(player, dir); FixPlrWalkTags(pnum); dPlayer[player.position.tile.x][player.position.tile.y] = pnum + 1; SetPlayerOld(player); @@ -2954,7 +2898,7 @@ void StartPlrBlock(int pnum, Direction dir) NewPlrAnim(player, player_graphic::Block, dir, player._pBFrames, 3, AnimationDistributionFlags::SkipsDelayOfLastFrame, skippedAnimationFrames); player._pmode = PM_BLOCK; - FixPlayerLocation(pnum, dir); + FixPlayerLocation(player, dir); SetPlayerOld(player); } @@ -3032,7 +2976,7 @@ void StartPlrHit(int pnum, int dam, bool forcehit) NewPlrAnim(player, player_graphic::Hit, pd, player._pHFrames, 1, AnimationDistributionFlags::None, skippedAnimationFrames); player._pmode = PM_GOTHIT; - FixPlayerLocation(pnum, pd); + FixPlayerLocation(player, pd); FixPlrWalkTags(pnum); dPlayer[player.position.tile.x][player.position.tile.y] = pnum + 1; SetPlayerOld(player); @@ -3085,7 +3029,7 @@ StartPlayerKill(int pnum, int earflag) } if (player.isOnActiveLevel()) { - FixPlayerLocation(pnum, player._pdir); + FixPlayerLocation(player, player._pdir); RemovePlrFromMap(pnum); dFlags[player.position.tile.x][player.position.tile.y] |= DungeonFlag::DeadPlayer; SetPlayerOld(player); @@ -3099,7 +3043,7 @@ StartPlayerKill(int pnum, int earflag) } if (!diablolevel) { - DropHalfPlayersGold(pnum); + DropHalfPlayersGold(player); if (earflag != -1) { if (earflag != 0) { Item ear; @@ -3379,7 +3323,7 @@ void ProcessPlayers() if (player.plractive && player.isOnActiveLevel() && (pnum == MyPlayerId || !player._pLvlChanging)) { CheckCheatStats(player); - if (!PlrDeathModeOK(pnum) && (player._pHitPoints >> 6) <= 0) { + if (!PlrDeathModeOK(player) && (player._pHitPoints >> 6) <= 0) { SyncPlrKill(pnum, -1); } @@ -3423,7 +3367,7 @@ void ProcessPlayers() tplayer = DoGotHit(pnum); break; case PM_DEATH: - tplayer = DoDeath(pnum); + tplayer = DoDeath(player); break; } CheckNewPath(pnum, tplayer); @@ -3599,13 +3543,8 @@ void CheckPlrSpell(bool isShiftHeld, spell_id spellID, spell_type spellType) } } -void SyncPlrAnim(int pnum) +void SyncPlrAnim(Player &player) { - if ((DWORD)pnum >= MAX_PLRS) { - app_fatal("SyncPlrAnim: illegal player %i", pnum); - } - Player &player = Players[pnum]; - player_graphic graphic; switch (player._pmode) { case PM_STAND: @@ -3627,7 +3566,7 @@ void SyncPlrAnim(int pnum) break; case PM_SPELL: graphic = player_graphic::Fire; - if (pnum == MyPlayerId) { + if (&player == MyPlayer) { switch (spelldata[player._pSpell].sType) { case STYPE_FIRE: graphic = player_graphic::Fire; @@ -3725,13 +3664,8 @@ void CheckStats(Player &player) } } -void ModifyPlrStr(int p, int l) +void ModifyPlrStr(Player &player, int l) { - if ((DWORD)p >= MAX_PLRS) { - app_fatal("ModifyPlrStr: illegal player %i", p); - } - Player &player = Players[p]; - l = clamp(l, 0 - player._pBaseStr, player.GetMaximumAttributeValue(CharacterAttribute::Strength) - player._pBaseStr); player._pStrength += l; @@ -3739,18 +3673,13 @@ void ModifyPlrStr(int p, int l) CalcPlrInv(player, true); - if (p == MyPlayerId) { + if (&player == MyPlayer) { NetSendCmdParam1(false, CMD_SETSTR, player._pBaseStr); } } -void ModifyPlrMag(int p, int l) +void ModifyPlrMag(Player &player, int l) { - if ((DWORD)p >= MAX_PLRS) { - app_fatal("ModifyPlrMag: illegal player %i", p); - } - Player &player = Players[p]; - l = clamp(l, 0 - player._pBaseStr, player.GetMaximumAttributeValue(CharacterAttribute::Magic) - player._pBaseMag); player._pMagic += l; @@ -3772,36 +3701,26 @@ void ModifyPlrMag(int p, int l) CalcPlrInv(player, true); - if (p == MyPlayerId) { + if (&player == MyPlayer) { NetSendCmdParam1(false, CMD_SETMAG, player._pBaseMag); } } -void ModifyPlrDex(int p, int l) +void ModifyPlrDex(Player &player, int l) { - if ((DWORD)p >= MAX_PLRS) { - app_fatal("ModifyPlrDex: illegal player %i", p); - } - Player &player = Players[p]; - l = clamp(l, 0 - player._pBaseDex, player.GetMaximumAttributeValue(CharacterAttribute::Dexterity) - player._pBaseDex); player._pDexterity += l; player._pBaseDex += l; CalcPlrInv(player, true); - if (p == MyPlayerId) { + if (&player == MyPlayer) { NetSendCmdParam1(false, CMD_SETDEX, player._pBaseDex); } } -void ModifyPlrVit(int p, int l) +void ModifyPlrVit(Player &player, int l) { - if ((DWORD)p >= MAX_PLRS) { - app_fatal("ModifyPlrVit: illegal player %i", p); - } - Player &player = Players[p]; - l = clamp(l, 0 - player._pBaseVit, player.GetMaximumAttributeValue(CharacterAttribute::Vitality) - player._pBaseVit); player._pVitality += l; @@ -3819,7 +3738,7 @@ void ModifyPlrVit(int p, int l) CalcPlrInv(player, true); - if (p == MyPlayerId) { + if (&player == MyPlayer) { NetSendCmdParam1(false, CMD_SETVIT, player._pBaseVit); } } diff --git a/Source/player.h b/Source/player.h index d07b918bc..7b3d03a67 100644 --- a/Source/player.h +++ b/Source/player.h @@ -763,9 +763,9 @@ void SetPlrAnims(Player &player); void CreatePlayer(int playerId, HeroClass c); int CalcStatDiff(Player &player); #ifdef _DEBUG -void NextPlrLevel(int pnum); +void NextPlrLevel(Player &player); #endif -void AddPlrExperience(int pnum, int lvl, int exp); +void AddPlrExperience(Player &player, int lvl, int exp); void AddPlrMonstExper(int lvl, int exp, char pmask); void ApplyPlrDamage(int pnum, int dam, int minHP = 0, int frac = 0, int earflag = 0); void InitPlayer(Player &player, bool FirstTime); @@ -773,7 +773,7 @@ void InitMultiView(); void PlrClrTrans(Point position); void PlrDoTrans(Point position); void SetPlayerOld(Player &player); -void FixPlayerLocation(int pnum, Direction bDir); +void FixPlayerLocation(Player &player, Direction bDir); void StartStand(int pnum, Direction dir); void StartPlrBlock(int pnum, Direction dir); void FixPlrWalkTags(int pnum); @@ -795,14 +795,14 @@ bool PosOkPlayer(const Player &player, Point position); void MakePlrPath(Player &player, Point targetPosition, bool endspace); void CalcPlrStaff(Player &player); void CheckPlrSpell(bool isShiftHeld, spell_id spellID = MyPlayer->_pRSpell, spell_type spellType = MyPlayer->_pRSplType); -void SyncPlrAnim(int pnum); +void SyncPlrAnim(Player &player); void SyncInitPlrPos(int pnum); void SyncInitPlr(int pnum); void CheckStats(Player &player); -void ModifyPlrStr(int p, int l); -void ModifyPlrMag(int p, int l); -void ModifyPlrDex(int p, int l); -void ModifyPlrVit(int p, int l); +void ModifyPlrStr(Player &player, int l); +void ModifyPlrMag(Player &player, int l); +void ModifyPlrDex(Player &player, int l); +void ModifyPlrVit(Player &player, int l); void SetPlayerHitPoints(Player &player, int val); void SetPlrStr(Player &player, int v); void SetPlrMag(Player &player, int v); diff --git a/Source/qol/stash.cpp b/Source/qol/stash.cpp index 9f2f2d00b..9551d3d0d 100644 --- a/Source/qol/stash.cpp +++ b/Source/qol/stash.cpp @@ -197,7 +197,7 @@ void CheckStashCut(Point cursorPosition, bool automaticMove) if (CanBePlacedOnBelt(holdItem)) { automaticallyMoved = AutoPlaceItemInBelt(player, holdItem, true); } else { - automaticallyMoved = automaticallyEquipped = AutoEquip(MyPlayerId, holdItem); + automaticallyMoved = automaticallyEquipped = AutoEquip(player, holdItem); } } diff --git a/Source/stores.cpp b/Source/stores.cpp index 4ccf4a93c..b7c811a10 100644 --- a/Source/stores.cpp +++ b/Source/stores.cpp @@ -333,7 +333,7 @@ bool StoreAutoPlace(Item &item, bool persistItem) { Player &player = *MyPlayer; - if (AutoEquipEnabled(player, item) && AutoEquip(MyPlayerId, item, persistItem)) { + if (AutoEquipEnabled(player, item) && AutoEquip(player, item, persistItem)) { return true; }