From 9c4e34f988bb73dbd4c5c27d5f613944668fc3c9 Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Mon, 19 Jul 2021 23:35:45 +0200 Subject: [PATCH] Player by reference --- Source/controls/plrctrls.cpp | 8 +- Source/cursor.cpp | 7 +- Source/missiles.cpp | 57 ++-- Source/monster.cpp | 57 ++-- Source/msg.cpp | 397 ++++++++++++++------------- Source/multi.cpp | 51 ++-- Source/objects.cpp | 513 ++++++++++++++++++++--------------- Source/palette.cpp | 32 +-- Source/pfile.cpp | 19 +- Source/plrmsg.cpp | 5 +- Source/quests.cpp | 16 +- Source/scrollrt.cpp | 5 +- Source/spells.cpp | 45 +-- Source/tmsg.cpp | 2 +- Source/town.cpp | 7 +- 15 files changed, 670 insertions(+), 551 deletions(-) diff --git a/Source/controls/plrctrls.cpp b/Source/controls/plrctrls.cpp index ef6a506ce..2b5055afb 100644 --- a/Source/controls/plrctrls.cpp +++ b/Source/controls/plrctrls.cpp @@ -1416,11 +1416,11 @@ void UpdateSpellTarget() pcursplr = -1; pcursmonst = -1; - int range = 1; - if (Players[MyPlayerId]._pRSpell == SPL_TELEPORT) - range = 4; + auto &myPlayer = Players[MyPlayerId]; + + int range = myPlayer._pRSpell == SPL_TELEPORT ? 4 : 1; - auto cursm = Players[MyPlayerId].position.future + Displacement::fromDirection(Players[MyPlayerId]._pdir) * range; + auto cursm = myPlayer.position.future + Displacement::fromDirection(myPlayer._pdir) * range; cursmx = cursm.x; cursmy = cursm.y; } diff --git a/Source/cursor.cpp b/Source/cursor.cpp index 051a71b45..1bfbf07ee 100644 --- a/Source/cursor.cpp +++ b/Source/cursor.cpp @@ -383,9 +383,10 @@ void CheckCursMove() if (Objects[pcursobj]._oSelFlag < 1) pcursobj = -1; } else if (pcursplr != -1) { - if (Players[pcursplr]._pmode == PM_DEATH || Players[pcursplr]._pmode == PM_QUIT || !Players[pcursplr].plractive - || currlevel != Players[pcursplr].plrlevel || Players[pcursplr]._pHitPoints >> 6 <= 0 - || ((dFlags[Players[pcursplr].position.tile.x][Players[pcursplr].position.tile.y] & BFLAG_VISIBLE) == 0)) + auto &targetPlayer = Players[pcursplr]; + if (targetPlayer._pmode == PM_DEATH || targetPlayer._pmode == PM_QUIT || !targetPlayer.plractive + || currlevel != targetPlayer.plrlevel || targetPlayer._pHitPoints >> 6 <= 0 + || ((dFlags[targetPlayer.position.tile.x][targetPlayer.position.tile.y] & BFLAG_VISIBLE) == 0)) pcursplr = -1; } diff --git a/Source/missiles.cpp b/Source/missiles.cpp index 87b156985..bc3450235 100644 --- a/Source/missiles.cpp +++ b/Source/missiles.cpp @@ -290,8 +290,9 @@ bool MonsterMHit(int pnum, int m, int mindam, int maxdam, int dist, int t, bool dam = mindam + GenerateRnd(maxdam - mindam + 1); } + const auto &player = Players[pnum]; + if (MissileData[t].mType == 0) { - const auto &player = Players[pnum]; dam = player._pIBonusDamMod + dam * player._pIBonusDam / 100 + dam; if (player._pClass == HeroClass::Rogue) dam += player._pDamageMod; @@ -307,7 +308,7 @@ bool MonsterMHit(int pnum, int m, int mindam, int maxdam, int dist, int t, bool if (pnum == MyPlayerId) monster._mhitpoints -= dam; - if ((gbIsHellfire && (Players[pnum]._pIFlags & ISPL_NOHEALMON) != 0) || (!gbIsHellfire && (Players[pnum]._pIFlags & ISPL_FIRE_ARROWS) != 0)) + if ((gbIsHellfire && (player._pIFlags & ISPL_NOHEALMON) != 0) || (!gbIsHellfire && (player._pIFlags & ISPL_FIRE_ARROWS) != 0)) monster._mFlags |= MFLAG_NOHEAL; if (monster._mhitpoints >> 6 <= 0) { @@ -325,7 +326,7 @@ bool MonsterMHit(int pnum, int m, int mindam, int maxdam, int dist, int t, bool M_StartHit(m, pnum, dam); monster.Petrify(); } else { - if (MissileData[t].mType == 0 && (Players[pnum]._pIFlags & ISPL_KNOCKBACK) != 0) { + if (MissileData[t].mType == 0 && (player._pIFlags & ISPL_KNOCKBACK) != 0) { M_GetKnockback(m); } if (m > MAX_PLRS - 1) @@ -335,7 +336,7 @@ bool MonsterMHit(int pnum, int m, int mindam, int maxdam, int dist, int t, bool if (monster._msquelch == 0) { monster._msquelch = UINT8_MAX; - monster.position.last = Players[pnum].position.tile; + monster.position.last = player.position.tile; } return true; @@ -1462,7 +1463,8 @@ void AddReflection(int mi, Point /*src*/, Point /*dst*/, int /*midir*/, int8_t / if (Missiles[mi]._mispllvl != 0) lvl = Missiles[mi]._mispllvl; - Players[id].wReflections += lvl * Players[id]._pLevel; + auto &player = Players[id]; + player.wReflections += lvl * player._pLevel; UseMana(id, SPL_REFLECT); } @@ -1582,7 +1584,7 @@ void AddStealPotions(int mi, Point src, Point /*dst*/, int /*midir*/, int8_t /*m int8_t pnum = dPlayer[tx][ty]; if (pnum == 0) continue; - auto &player = Players[pnum > 0 ? pnum - 1 : -(pnum + 1)]; + auto &player = Players[abs(pnum) - 1]; bool hasPlayedSFX = false; for (int si = 0; si < MAXBELTITEMS; si++) { @@ -1655,7 +1657,7 @@ void AddManaTrap(int mi, Point src, Point /*dst*/, int /*midir*/, int8_t /*miene if (0 < tx && tx < MAXDUNX && 0 < ty && ty < MAXDUNY) { int8_t pid = dPlayer[tx][ty]; if (pid != 0) { - auto &player = Players[(pid > 0) ? pid - 1 : -(pid + 1)]; + auto &player = Players[abs(pid) - 1]; player._pMana = 0; player._pManaBase = player._pMana + player._pMaxManaBase - player._pMaxMana; @@ -2352,7 +2354,8 @@ void AddFlash2(int mi, Point /*src*/, Point /*dst*/, int /*midir*/, int8_t miene { if (mienemy == TARGET_MONSTERS) { if (id != -1) { - int dmg = GenerateRndSum(20, Players[id]._pLevel + 1) + Players[id]._pLevel + 1; + int dmg = Players[id]._pLevel + 1; + dmg += GenerateRndSum(20, dmg); Missiles[mi]._midam = ScaleSpellEffect(dmg, Missiles[mi]._mispllvl); Missiles[mi]._midam += Missiles[mi]._midam / 2; } else { @@ -2365,12 +2368,13 @@ void AddFlash2(int mi, Point /*src*/, Point /*dst*/, int /*midir*/, int8_t miene void AddManashield(int mi, Point /*src*/, Point /*dst*/, int /*midir*/, int8_t mienemy, int id, int /*dam*/) { - Missiles[mi]._mirange = 48 * Players[id]._pLevel; + auto &player = Players[id]; + Missiles[mi]._mirange = 48 * player._pLevel; if (mienemy == TARGET_MONSTERS) UseMana(id, SPL_MANASHIELD); if (id == MyPlayerId) NetSendCmd(true, CMD_SETSHIELD); - Players[id].pManaShield = true; + player.pManaShield = true; } void AddFiremove(int mi, Point src, Point dst, int /*midir*/, int8_t /*mienemy*/, int id, int /*dam*/) @@ -2387,7 +2391,9 @@ void AddFiremove(int mi, Point src, Point dst, int /*midir*/, int8_t /*mienemy*/ void AddGuardian(int mi, Point src, Point dst, int /*midir*/, int8_t /*mienemy*/, int id, int /*dam*/) { - int dmg = GenerateRnd(10) + (Players[id]._pLevel / 2) + 1; + auto &player = Players[id]; + + int dmg = GenerateRnd(10) + (player._pLevel / 2) + 1; Missiles[mi]._midam = ScaleSpellEffect(dmg, Missiles[mi]._mispllvl); Missiles[mi]._miDelFlag = true; @@ -2416,8 +2422,8 @@ void AddGuardian(int mi, Point src, Point dst, int /*midir*/, int8_t /*mienemy*/ if (!Missiles[mi]._miDelFlag) { Missiles[mi]._misource = id; Missiles[mi]._mlid = AddLight(Missiles[mi].position.tile, 1); - Missiles[mi]._mirange = Missiles[mi]._mispllvl + (Players[id]._pLevel / 2); - Missiles[mi]._mirange += (Missiles[mi]._mirange * Players[id]._pISplDur) / 128; + Missiles[mi]._mirange = Missiles[mi]._mispllvl + (player._pLevel / 2); + Missiles[mi]._mirange += (Missiles[mi]._mirange * player._pISplDur) / 128; if (Missiles[mi]._mirange > 30) Missiles[mi]._mirange = 30; @@ -2937,7 +2943,8 @@ void AddApoca(int mi, Point src, Point /*dst*/, int /*midir*/, int8_t /*mienemy* Missiles[mi]._miVar4 = 1; if (Missiles[mi]._miVar5 >= MAXDUNX) Missiles[mi]._miVar5 = MAXDUNX - 1; - Missiles[mi]._midam = GenerateRndSum(6, Players[id]._pLevel) + Players[id]._pLevel; + int playerLevel = Players[id]._pLevel; + Missiles[mi]._midam = GenerateRndSum(6, playerLevel) + playerLevel; Missiles[mi]._mirange = 255; Missiles[mi]._miDelFlag = false; UseMana(id, SPL_APOCA); @@ -3094,8 +3101,10 @@ int AddMissile(Point src, Point dst, int midir, int mitype, int8_t micaster, int if (ActiveMissileCount >= MAXMISSILES - 1) return -1; - if (mitype == MIS_MANASHIELD && Players[id].pManaShield) { - if (currlevel != Players[id].plrlevel) + auto &player = Players[id]; + + if (mitype == MIS_MANASHIELD && player.pManaShield) { + if (currlevel != player.plrlevel) return -1; for (int i = 0; i < ActiveMissileCount; i++) { @@ -3311,12 +3320,13 @@ void MI_Firebolt(int i) int p = Missiles[i]._misource; if (p != -1) { if (Missiles[i]._micaster == TARGET_MONSTERS) { + auto &player = Players[p]; switch (Missiles[i]._mitype) { case MIS_FIREBOLT: - d = GenerateRnd(10) + (Players[p]._pMagic / 8) + Missiles[i]._mispllvl + 1; + d = GenerateRnd(10) + (player._pMagic / 8) + Missiles[i]._mispllvl + 1; break; case MIS_FLARE: - d = 3 * Missiles[i]._mispllvl - (Players[p]._pMagic / 8) + (Players[p]._pMagic / 2); + d = 3 * Missiles[i]._mispllvl - (player._pMagic / 8) + (player._pMagic / 2); break; case MIS_BONESPIRIT: d = 0; @@ -3654,9 +3664,11 @@ void MI_LightningArrow(int i) void MI_Reflect(int i) { int src = Missiles[i]._misource; - if (src != MyPlayerId && currlevel != Players[src].plrlevel) + auto &player = Players[src]; + + if (src != MyPlayerId && currlevel != player.plrlevel) Missiles[i]._miDelFlag = true; - if (Players[src].wReflections <= 0) { + if (player.wReflections <= 0) { Missiles[i]._miDelFlag = true; NetSendCmd(true, CMD_REFLECT); } @@ -3759,10 +3771,11 @@ void MI_SpecArrow(int i) Direction dir = DIR_S; mienemy_type micaster = TARGET_PLAYERS; if (id != -1) { - dir = Players[id]._pdir; + auto &player = Players[id]; + dir = player._pdir; micaster = TARGET_MONSTERS; - switch (Players[id]._pILMinDam) { + switch (player._pILMinDam) { case 0: mitype = MIS_FIRENOVA; break; diff --git a/Source/monster.cpp b/Source/monster.cpp index ee6444abf..4f3a8134d 100644 --- a/Source/monster.cpp +++ b/Source/monster.cpp @@ -3364,7 +3364,8 @@ void LazarusAi(int i) Direction md = GetMonsterDirection(monster); if ((dFlags[mx][my] & BFLAG_VISIBLE) != 0) { if (!gbIsMultiplayer) { - if (monster.mtalkmsg == TEXT_VILE13 && monster._mgoal == MGOAL_INQUIRING && Players[MyPlayerId].position.tile.x == 35 && Players[MyPlayerId].position.tile.y == 46) { + auto &myPlayer = Players[MyPlayerId]; + if (monster.mtalkmsg == TEXT_VILE13 && monster._mgoal == MGOAL_INQUIRING && myPlayer.position.tile.x == 35 && myPlayer.position.tile.y == 46) { PlayInGameMovie("gendata\\fprst3.smk"); monster._mmode = MM_TALK; Quests[Q_BETRAYER]._qvar1 = 5; @@ -4273,7 +4274,9 @@ void PrepDoEnding() MyPlayerIsDead = false; cineflag = true; - Players[MyPlayerId].pDiabloKillLevel = std::max(Players[MyPlayerId].pDiabloKillLevel, static_cast(sgGameInitInfo.nDifficulty + 1)); + auto &myPlayer = Players[MyPlayerId]; + + myPlayer.pDiabloKillLevel = std::max(myPlayer.pDiabloKillLevel, static_cast(sgGameInitInfo.nDifficulty + 1)); for (auto &player : Players) { player._pmode = PM_QUIT; @@ -4458,10 +4461,11 @@ void ProcessMonsters() monster.enemyPosition = monster.position.last; } else { assert(monster._menemy >= 0 && monster._menemy < MAX_PLRS); - monster.enemyPosition = Players[monster._menemy].position.future; + auto &player = Players[monster._menemy]; + monster.enemyPosition = player.position.future; if ((dFlags[mx][my] & BFLAG_VISIBLE) != 0) { monster._msquelch = UINT8_MAX; - monster.position.last = Players[monster._menemy].position.future; + monster.position.last = player.position.future; } else if (monster._msquelch != 0 && monster.MType->mtype != MT_DIABLO) { /// BUGFIX: change '_mAi' to 'MType->mtype' monster._msquelch--; } @@ -5056,21 +5060,21 @@ int PreSpawnSkeleton() void TalktoMonster(MonsterStruct &monster) { - int pnum = monster._menemy; + auto &player = Players[monster._menemy]; monster._mmode = MM_TALK; if (monster._mAi != AI_SNOTSPIL && monster._mAi != AI_LACHDAN) { return; } if (QuestStatus(Q_LTBANNER) && Quests[Q_LTBANNER]._qvar1 == 2) { - if (Players[pnum].TryRemoveInvItemById(IDI_BANNER)) { + if (player.TryRemoveInvItemById(IDI_BANNER)) { Quests[Q_LTBANNER]._qactive = QUEST_DONE; monster.mtalkmsg = TEXT_BANNER12; monster._mgoal = MGOAL_INQUIRING; } } if (QuestStatus(Q_VEIL) && monster.mtalkmsg >= TEXT_VEIL9) { - if (Players[pnum].TryRemoveInvItemById(IDI_GLDNELIX)) { + if (player.TryRemoveInvItemById(IDI_GLDNELIX)) { monster.mtalkmsg = TEXT_VEIL11; monster._mgoal = MGOAL_INQUIRING; } @@ -5080,29 +5084,30 @@ void TalktoMonster(MonsterStruct &monster) void SpawnGolum(int i, Point position, int mi) { assert(i >= 0 && i < MAXMONSTERS); - auto &monster = Monsters[i]; + auto &player = Players[i]; + auto &golem = Monsters[i]; dMonster[position.x][position.y] = i + 1; - monster.position.tile = position; - monster.position.future = position; - monster.position.old = position; - monster._pathcount = 0; - monster._mmaxhp = 2 * (320 * Missiles[mi]._mispllvl + Players[i]._pMaxMana / 3); - monster._mhitpoints = monster._mmaxhp; - monster.mArmorClass = 25; - monster.mHit = 5 * (Missiles[mi]._mispllvl + 8) + 2 * Players[i]._pLevel; - monster.mMinDamage = 2 * (Missiles[mi]._mispllvl + 4); - monster.mMaxDamage = 2 * (Missiles[mi]._mispllvl + 8); - monster._mFlags |= MFLAG_GOLEM; - StartSpecialStand(monster, DIR_S); - UpdateEnemy(monster); + golem.position.tile = position; + golem.position.future = position; + golem.position.old = position; + golem._pathcount = 0; + golem._mmaxhp = 2 * (320 * Missiles[mi]._mispllvl + player._pMaxMana / 3); + golem._mhitpoints = golem._mmaxhp; + golem.mArmorClass = 25; + golem.mHit = 5 * (Missiles[mi]._mispllvl + 8) + 2 * player._pLevel; + golem.mMinDamage = 2 * (Missiles[mi]._mispllvl + 4); + golem.mMaxDamage = 2 * (Missiles[mi]._mispllvl + 8); + golem._mFlags |= MFLAG_GOLEM; + StartSpecialStand(golem, DIR_S); + UpdateEnemy(golem); if (i == MyPlayerId) { NetSendCmdGolem( - monster.position.tile.x, - monster.position.tile.y, - monster._mdir, - monster._menemy, - monster._mhitpoints, + golem.position.tile.x, + golem.position.tile.y, + golem._mdir, + golem._menemy, + golem._mhitpoints, currlevel); } } diff --git a/Source/msg.cpp b/Source/msg.cpp index 719a46de9..dff3945b7 100644 --- a/Source/msg.cpp +++ b/Source/msg.cpp @@ -683,11 +683,11 @@ DWORD OnGotoGetItem(TCmd *pCmd, PlayerStruct &player) return sizeof(*p); } -DWORD OnRequestGetItem(TCmd *pCmd, int pnum) +DWORD OnRequestGetItem(TCmd *pCmd, PlayerStruct &player) { auto *p = (TCmdGItem *)pCmd; - if (gbBufferMsgs != 1 && IOwnLevel(Players[pnum].plrlevel)) { + if (gbBufferMsgs != 1 && IOwnLevel(player.plrlevel)) { if (GetItemRecord(p->dwSeed, p->wCI, p->wIndx)) { int ii = FindGetItem(p->wIndx, p->wCI, p->dwSeed); if (ii != -1) { @@ -718,7 +718,8 @@ DWORD OnGetItem(TCmd *pCmd, int pnum) if ((currlevel == p->bLevel || p->bPnum == MyPlayerId) && p->bMaster != MyPlayerId) { if (p->bPnum == MyPlayerId) { if (currlevel != p->bLevel) { - ii = SyncPutItem(Players[MyPlayerId], Players[MyPlayerId].position.tile, p->wIndx, p->wCI, p->dwSeed, p->bId, p->bDur, p->bMDur, p->bCh, p->bMCh, p->wValue, p->dwBuff, p->wToHit, p->wMaxDam, p->bMinStr, p->bMinMag, p->bMinDex, p->bAC); + auto &player = Players[MyPlayerId]; + ii = SyncPutItem(player, player.position.tile, p->wIndx, p->wCI, p->dwSeed, p->bId, p->bDur, p->bMDur, p->bCh, p->bMCh, p->wValue, p->dwBuff, p->wToHit, p->wMaxDam, p->bMinStr, p->bMinMag, p->bMinDex, p->bAC); if (ii != -1) InvGetItem(MyPlayerId, &Items[ii], ii); } else { @@ -749,11 +750,11 @@ DWORD OnGotoAutoGetItem(TCmd *pCmd, PlayerStruct &player) return sizeof(*p); } -DWORD OnRequestAutoGetItem(TCmd *pCmd, int pnum) +DWORD OnRequestAutoGetItem(TCmd *pCmd, PlayerStruct &player) { auto *p = (TCmdGItem *)pCmd; - if (gbBufferMsgs != 1 && IOwnLevel(Players[pnum].plrlevel)) { + if (gbBufferMsgs != 1 && IOwnLevel(player.plrlevel)) { if (GetItemRecord(p->dwSeed, p->wCI, p->wIndx)) { int ii = FindGetItem(p->wIndx, p->wCI, p->dwSeed); if (ii != -1) { @@ -784,7 +785,8 @@ DWORD OnAutoGetItem(TCmd *pCmd, int pnum) if ((currlevel == p->bLevel || p->bPnum == MyPlayerId) && p->bMaster != MyPlayerId) { if (p->bPnum == MyPlayerId) { if (currlevel != p->bLevel) { - int ii = SyncPutItem(Players[MyPlayerId], Players[MyPlayerId].position.tile, p->wIndx, p->wCI, p->dwSeed, p->bId, p->bDur, p->bMDur, p->bCh, p->bMCh, p->wValue, p->dwBuff, p->wToHit, p->wMaxDam, p->bMinStr, p->bMinMag, p->bMinDex, p->bAC); + auto &player = Players[MyPlayerId]; + int ii = SyncPutItem(player, player.position.tile, p->wIndx, p->wCI, p->dwSeed, p->bId, p->bDur, p->bMDur, p->bCh, p->bMCh, p->wValue, p->dwBuff, p->wToHit, p->wMaxDam, p->bMinStr, p->bMinMag, p->bMinDex, p->bAC); if (ii != -1) AutoGetItem(MyPlayerId, &Items[ii], ii); } else { @@ -874,11 +876,13 @@ DWORD OnRespawnItem(TCmd *pCmd, int pnum) if (gbBufferMsgs == 1) { SendPacket(pnum, p, sizeof(*p)); } else { - if (currlevel == Players[pnum].plrlevel && pnum != MyPlayerId) { - SyncPutItem(Players[pnum], { p->x, p->y }, p->wIndx, p->wCI, p->dwSeed, p->bId, p->bDur, p->bMDur, p->bCh, p->bMCh, p->wValue, p->dwBuff, p->wToHit, p->wMaxDam, p->bMinStr, p->bMinMag, p->bMinDex, p->bAC); + auto &player = Players[pnum]; + int playerLevel = player.plrlevel; + if (currlevel == playerLevel && pnum != MyPlayerId) { + SyncPutItem(player, { p->x, p->y }, p->wIndx, p->wCI, p->dwSeed, p->bId, p->bDur, p->bMDur, p->bCh, p->bMCh, p->wValue, p->dwBuff, p->wToHit, p->wMaxDam, p->bMinStr, p->bMinMag, p->bMinDex, p->bAC); } PutItemRecord(p->dwSeed, p->wCI, p->wIndx); - DeltaPutItem(p, p->x, p->y, Players[pnum].plrlevel); + DeltaPutItem(p, p->x, p->y, playerLevel); } return sizeof(*p); @@ -898,98 +902,98 @@ DWORD OnAttackTile(TCmd *pCmd, PlayerStruct &player) return sizeof(*p); } -DWORD OnStandingAttackTile(TCmd *pCmd, int pnum) +DWORD OnStandingAttackTile(TCmd *pCmd, PlayerStruct &player) { auto *p = (TCmdLoc *)pCmd; - if (gbBufferMsgs != 1 && currlevel == Players[pnum].plrlevel) { - ClrPlrPath(Players[pnum]); - Players[pnum].destAction = ACTION_ATTACK; - Players[pnum].destParam1 = p->x; - Players[pnum].destParam2 = p->y; + if (gbBufferMsgs != 1 && currlevel == player.plrlevel) { + ClrPlrPath(player); + player.destAction = ACTION_ATTACK; + player.destParam1 = p->x; + player.destParam2 = p->y; } return sizeof(*p); } -DWORD OnRangedAttackTile(TCmd *pCmd, int pnum) +DWORD OnRangedAttackTile(TCmd *pCmd, PlayerStruct &player) { auto *p = (TCmdLoc *)pCmd; - if (gbBufferMsgs != 1 && currlevel == Players[pnum].plrlevel) { - ClrPlrPath(Players[pnum]); - Players[pnum].destAction = ACTION_RATTACK; - Players[pnum].destParam1 = p->x; - Players[pnum].destParam2 = p->y; + if (gbBufferMsgs != 1 && currlevel == player.plrlevel) { + ClrPlrPath(player); + player.destAction = ACTION_RATTACK; + player.destParam1 = p->x; + player.destParam2 = p->y; } return sizeof(*p); } -DWORD OnSpellWall(TCmd *pCmd, int pnum) +DWORD OnSpellWall(TCmd *pCmd, PlayerStruct &player) { auto *p = (TCmdLocParam3 *)pCmd; - if (gbBufferMsgs != 1 && currlevel == Players[pnum].plrlevel) { + if (gbBufferMsgs != 1 && currlevel == player.plrlevel) { auto spell = static_cast(p->wParam1); if (currlevel != 0 || spelldata[spell].sTownSpell) { - ClrPlrPath(Players[pnum]); - Players[pnum].destAction = ACTION_SPELLWALL; - Players[pnum].destParam1 = p->x; - Players[pnum].destParam2 = p->y; - Players[pnum].destParam3 = static_cast(p->wParam2); - Players[pnum].destParam4 = p->wParam3; - Players[pnum]._pSpell = spell; - Players[pnum]._pSplType = Players[pnum]._pRSplType; - Players[pnum]._pSplFrom = 0; + ClrPlrPath(player); + player.destAction = ACTION_SPELLWALL; + player.destParam1 = p->x; + player.destParam2 = p->y; + player.destParam3 = static_cast(p->wParam2); + player.destParam4 = p->wParam3; + player._pSpell = spell; + player._pSplType = player._pRSplType; + player._pSplFrom = 0; } else { - PlayerMessageFormat(fmt::format(_("{:s} has cast an illegal spell."), Players[pnum]._pName).c_str()); + PlayerMessageFormat(fmt::format(_("{:s} has cast an illegal spell."), player._pName).c_str()); } } return sizeof(*p); } -DWORD OnSpellTile(TCmd *pCmd, int pnum) +DWORD OnSpellTile(TCmd *pCmd, PlayerStruct &player) { auto *p = (TCmdLocParam2 *)pCmd; - if (gbBufferMsgs != 1 && currlevel == Players[pnum].plrlevel) { + if (gbBufferMsgs != 1 && currlevel == player.plrlevel) { auto spell = static_cast(p->wParam1); if (currlevel != 0 || spelldata[spell].sTownSpell) { - ClrPlrPath(Players[pnum]); - Players[pnum].destAction = ACTION_SPELL; - Players[pnum].destParam1 = p->x; - Players[pnum].destParam2 = p->y; - Players[pnum].destParam3 = static_cast(p->wParam2); - Players[pnum]._pSpell = spell; - Players[pnum]._pSplType = Players[pnum]._pRSplType; - Players[pnum]._pSplFrom = 0; + ClrPlrPath(player); + player.destAction = ACTION_SPELL; + player.destParam1 = p->x; + player.destParam2 = p->y; + player.destParam3 = static_cast(p->wParam2); + player._pSpell = spell; + player._pSplType = player._pRSplType; + player._pSplFrom = 0; } else { - PlayerMessageFormat(fmt::format(_("{:s} has cast an illegal spell."), Players[pnum]._pName).c_str()); + PlayerMessageFormat(fmt::format(_("{:s} has cast an illegal spell."), player._pName).c_str()); } } return sizeof(*p); } -DWORD OnTargetSpellTile(TCmd *pCmd, int pnum) +DWORD OnTargetSpellTile(TCmd *pCmd, PlayerStruct &player) { auto *p = (TCmdLocParam2 *)pCmd; - if (gbBufferMsgs != 1 && currlevel == Players[pnum].plrlevel) { + if (gbBufferMsgs != 1 && currlevel == player.plrlevel) { auto spell = static_cast(p->wParam1); if (currlevel != 0 || spelldata[spell].sTownSpell) { - ClrPlrPath(Players[pnum]); - Players[pnum].destAction = ACTION_SPELL; - Players[pnum].destParam1 = p->x; - Players[pnum].destParam2 = p->y; - Players[pnum].destParam3 = static_cast(p->wParam2); - Players[pnum]._pSpell = spell; - Players[pnum]._pSplType = RSPLTYPE_INVALID; - Players[pnum]._pSplFrom = 2; + ClrPlrPath(player); + player.destAction = ACTION_SPELL; + player.destParam1 = p->x; + player.destParam2 = p->y; + player.destParam3 = static_cast(p->wParam2); + player._pSpell = spell; + player._pSplType = RSPLTYPE_INVALID; + player._pSplFrom = 2; } else { - PlayerMessageFormat(fmt::format(_("{:s} has cast an illegal spell."), Players[pnum]._pName).c_str()); + PlayerMessageFormat(fmt::format(_("{:s} has cast an illegal spell."), player._pName).c_str()); } } @@ -1022,13 +1026,13 @@ DWORD OnDisarm(TCmd *pCmd, PlayerStruct &player) return sizeof(*p); } -DWORD OnOperateObjectTelekinesis(TCmd *pCmd, int pnum) +DWORD OnOperateObjectTelekinesis(TCmd *pCmd, PlayerStruct &player) { auto *p = (TCmdParam1 *)pCmd; - if (gbBufferMsgs != 1 && currlevel == Players[pnum].plrlevel) { - Players[pnum].destAction = ACTION_OPERATETK; - Players[pnum].destParam1 = p->wParam1; + if (gbBufferMsgs != 1 && currlevel == player.plrlevel) { + player.destAction = ACTION_OPERATETK; + player.destParam1 = p->wParam1; } return sizeof(*p); @@ -1062,114 +1066,114 @@ DWORD OnAttackPlayer(TCmd *pCmd, PlayerStruct &player) return sizeof(*p); } -DWORD OnRangedAttackMonster(TCmd *pCmd, int pnum) +DWORD OnRangedAttackMonster(TCmd *pCmd, PlayerStruct &player) { auto *p = (TCmdParam1 *)pCmd; - if (gbBufferMsgs != 1 && currlevel == Players[pnum].plrlevel) { - ClrPlrPath(Players[pnum]); - Players[pnum].destAction = ACTION_RATTACKMON; - Players[pnum].destParam1 = p->wParam1; + if (gbBufferMsgs != 1 && currlevel == player.plrlevel) { + ClrPlrPath(player); + player.destAction = ACTION_RATTACKMON; + player.destParam1 = p->wParam1; } return sizeof(*p); } -DWORD OnRangedAttackPlayer(TCmd *pCmd, int pnum) +DWORD OnRangedAttackPlayer(TCmd *pCmd, PlayerStruct &player) { auto *p = (TCmdParam1 *)pCmd; - if (gbBufferMsgs != 1 && currlevel == Players[pnum].plrlevel) { - ClrPlrPath(Players[pnum]); - Players[pnum].destAction = ACTION_RATTACKPLR; - Players[pnum].destParam1 = p->wParam1; + if (gbBufferMsgs != 1 && currlevel == player.plrlevel) { + ClrPlrPath(player); + player.destAction = ACTION_RATTACKPLR; + player.destParam1 = p->wParam1; } return sizeof(*p); } -DWORD OnSpellMonster(TCmd *pCmd, int pnum) +DWORD OnSpellMonster(TCmd *pCmd, PlayerStruct &player) { auto *p = (TCmdParam3 *)pCmd; - if (gbBufferMsgs != 1 && currlevel == Players[pnum].plrlevel) { + if (gbBufferMsgs != 1 && currlevel == player.plrlevel) { auto spell = static_cast(p->wParam2); if (currlevel != 0 || spelldata[spell].sTownSpell) { - ClrPlrPath(Players[pnum]); - Players[pnum].destAction = ACTION_SPELLMON; - Players[pnum].destParam1 = p->wParam1; - Players[pnum].destParam2 = p->wParam3; - Players[pnum]._pSpell = spell; - Players[pnum]._pSplType = Players[pnum]._pRSplType; - Players[pnum]._pSplFrom = 0; + ClrPlrPath(player); + player.destAction = ACTION_SPELLMON; + player.destParam1 = p->wParam1; + player.destParam2 = p->wParam3; + player._pSpell = spell; + player._pSplType = player._pRSplType; + player._pSplFrom = 0; } else { - PlayerMessageFormat(fmt::format(_("{:s} has cast an illegal spell."), Players[pnum]._pName).c_str()); + PlayerMessageFormat(fmt::format(_("{:s} has cast an illegal spell."), player._pName).c_str()); } } return sizeof(*p); } -DWORD OnSpellPlayer(TCmd *pCmd, int pnum) +DWORD OnSpellPlayer(TCmd *pCmd, PlayerStruct &player) { auto *p = (TCmdParam3 *)pCmd; - if (gbBufferMsgs != 1 && currlevel == Players[pnum].plrlevel) { + if (gbBufferMsgs != 1 && currlevel == player.plrlevel) { auto spell = static_cast(p->wParam2); if (currlevel != 0 || spelldata[spell].sTownSpell) { - ClrPlrPath(Players[pnum]); - Players[pnum].destAction = ACTION_SPELLPLR; - Players[pnum].destParam1 = p->wParam1; - Players[pnum].destParam2 = p->wParam3; - Players[pnum]._pSpell = spell; - Players[pnum]._pSplType = Players[pnum]._pRSplType; - Players[pnum]._pSplFrom = 0; + ClrPlrPath(player); + player.destAction = ACTION_SPELLPLR; + player.destParam1 = p->wParam1; + player.destParam2 = p->wParam3; + player._pSpell = spell; + player._pSplType = player._pRSplType; + player._pSplFrom = 0; } else { - PlayerMessageFormat(fmt::format(_("{:s} has cast an illegal spell."), Players[pnum]._pName).c_str()); + PlayerMessageFormat(fmt::format(_("{:s} has cast an illegal spell."), player._pName).c_str()); } } return sizeof(*p); } -DWORD OnTargetSpellMonster(TCmd *pCmd, int pnum) +DWORD OnTargetSpellMonster(TCmd *pCmd, PlayerStruct &player) { auto *p = (TCmdParam3 *)pCmd; - if (gbBufferMsgs != 1 && currlevel == Players[pnum].plrlevel) { + if (gbBufferMsgs != 1 && currlevel == player.plrlevel) { auto spell = static_cast(p->wParam2); if (currlevel != 0 || spelldata[spell].sTownSpell) { - ClrPlrPath(Players[pnum]); - Players[pnum].destAction = ACTION_SPELLMON; - Players[pnum].destParam1 = p->wParam1; - Players[pnum].destParam2 = p->wParam3; - Players[pnum]._pSpell = spell; - Players[pnum]._pSplType = RSPLTYPE_INVALID; - Players[pnum]._pSplFrom = 2; + ClrPlrPath(player); + player.destAction = ACTION_SPELLMON; + player.destParam1 = p->wParam1; + player.destParam2 = p->wParam3; + player._pSpell = spell; + player._pSplType = RSPLTYPE_INVALID; + player._pSplFrom = 2; } else { - PlayerMessageFormat(fmt::format(_("{:s} has cast an illegal spell."), Players[pnum]._pName).c_str()); + PlayerMessageFormat(fmt::format(_("{:s} has cast an illegal spell."), player._pName).c_str()); } } return sizeof(*p); } -DWORD OnTargetSpellPlayer(TCmd *pCmd, int pnum) +DWORD OnTargetSpellPlayer(TCmd *pCmd, PlayerStruct &player) { auto *p = (TCmdParam3 *)pCmd; - if (gbBufferMsgs != 1 && currlevel == Players[pnum].plrlevel) { + if (gbBufferMsgs != 1 && currlevel == player.plrlevel) { auto spell = static_cast(p->wParam2); if (currlevel != 0 || spelldata[spell].sTownSpell) { - ClrPlrPath(Players[pnum]); - Players[pnum].destAction = ACTION_SPELLPLR; - Players[pnum].destParam1 = p->wParam1; - Players[pnum].destParam2 = p->wParam3; - Players[pnum]._pSpell = spell; - Players[pnum]._pSplType = RSPLTYPE_INVALID; - Players[pnum]._pSplFrom = 2; + ClrPlrPath(player); + player.destAction = ACTION_SPELLPLR; + player.destParam1 = p->wParam1; + player.destParam2 = p->wParam3; + player._pSpell = spell; + player._pSplType = RSPLTYPE_INVALID; + player._pSplFrom = 2; } else { - PlayerMessageFormat(fmt::format(_("{:s} has cast an illegal spell."), Players[pnum]._pName).c_str()); + PlayerMessageFormat(fmt::format(_("{:s} has cast an illegal spell."), player._pName).c_str()); } } @@ -1257,9 +1261,10 @@ DWORD OnMonstDeath(TCmd *pCmd, int pnum) if (gbBufferMsgs == 1) SendPacket(pnum, p, sizeof(*p)); else if (pnum != MyPlayerId && p->wParam1 < MAXMONSTERS) { - if (currlevel == Players[pnum].plrlevel) + int playerLevel = Players[pnum].plrlevel; + if (currlevel == playerLevel) M_SyncStartKill(p->wParam1, { p->x, p->y }, pnum); - delta_kill_monster(p->wParam1, { p->x, p->y }, Players[pnum].plrlevel); + delta_kill_monster(p->wParam1, { p->x, p->y }, playerLevel); } return sizeof(*p); @@ -1312,14 +1317,15 @@ DWORD OnMonstDamage(TCmd *pCmd, int pnum) if (gbBufferMsgs == 1) SendPacket(pnum, p, sizeof(*p)); // BUGFIX: change to sizeof(*p) or it still uses TCmdParam2 size for hellfire (fixed) else if (pnum != MyPlayerId) { - if (currlevel == Players[pnum].plrlevel) { + int playerLevel = Players[pnum].plrlevel; + if (currlevel == playerLevel) { auto &monster = Monsters[p->wMon]; monster.mWhoHit |= 1 << pnum; if (monster._mhitpoints > 0) { monster._mhitpoints -= p->dwDam; if ((monster._mhitpoints >> 6) < 1) monster._mhitpoints = 1 << 6; - delta_monster_hp(p->wMon, monster._mhitpoints, Players[pnum].plrlevel); + delta_monster_hp(p->wMon, monster._mhitpoints, playerLevel); } } } @@ -1341,12 +1347,12 @@ DWORD OnPlayerDeath(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD OnPlayerDamage(TCmd *pCmd, int pnum) +DWORD OnPlayerDamage(TCmd *pCmd, PlayerStruct &player) { auto *p = (TCmdDamage *)pCmd; if (p->bPlr == MyPlayerId && currlevel != 0 && gbBufferMsgs != 1) { - if (currlevel == Players[pnum].plrlevel && p->dwDam <= 192000 && Players[MyPlayerId]._pHitPoints >> 6 > 0) { + if (currlevel == player.plrlevel && p->dwDam <= 192000 && Players[MyPlayerId]._pHitPoints >> 6 > 0) { ApplyPlrDamage(MyPlayerId, 0, 0, p->dwDam, 1); } } @@ -1361,9 +1367,10 @@ DWORD OnOpenDoor(TCmd *pCmd, int pnum) if (gbBufferMsgs == 1) { SendPacket(pnum, p, sizeof(*p)); } else { - if (currlevel == Players[pnum].plrlevel) + int playerLevel = Players[pnum].plrlevel; + if (currlevel == playerLevel) SyncOpObject(pnum, CMD_OPENDOOR, p->wParam1); - DeltaSyncObject(p->wParam1, CMD_OPENDOOR, Players[pnum].plrlevel); + DeltaSyncObject(p->wParam1, CMD_OPENDOOR, playerLevel); } return sizeof(*p); @@ -1376,9 +1383,10 @@ DWORD OnCloseDoor(TCmd *pCmd, int pnum) if (gbBufferMsgs == 1) { SendPacket(pnum, p, sizeof(*p)); } else { - if (currlevel == Players[pnum].plrlevel) + int playerLevel = Players[pnum].plrlevel; + if (currlevel == playerLevel) SyncOpObject(pnum, CMD_CLOSEDOOR, p->wParam1); - DeltaSyncObject(p->wParam1, CMD_CLOSEDOOR, Players[pnum].plrlevel); + DeltaSyncObject(p->wParam1, CMD_CLOSEDOOR, playerLevel); } return sizeof(*p); @@ -1391,9 +1399,10 @@ DWORD OnOperateObject(TCmd *pCmd, int pnum) if (gbBufferMsgs == 1) { SendPacket(pnum, p, sizeof(*p)); } else { - if (currlevel == Players[pnum].plrlevel) + int playerLevel = Players[pnum].plrlevel; + if (currlevel == playerLevel) SyncOpObject(pnum, CMD_OPERATEOBJ, p->wParam1); - DeltaSyncObject(p->wParam1, CMD_OPERATEOBJ, Players[pnum].plrlevel); + DeltaSyncObject(p->wParam1, CMD_OPERATEOBJ, playerLevel); } return sizeof(*p); @@ -1406,9 +1415,10 @@ DWORD OnPlayerOperateObject(TCmd *pCmd, int pnum) if (gbBufferMsgs == 1) { SendPacket(pnum, p, sizeof(*p)); } else { - if (currlevel == Players[pnum].plrlevel) + int playerLevel = Players[pnum].plrlevel; + if (currlevel == playerLevel) SyncOpObject(p->wParam1, CMD_PLROPOBJ, p->wParam2); - DeltaSyncObject(p->wParam2, CMD_PLROPOBJ, Players[pnum].plrlevel); + DeltaSyncObject(p->wParam2, CMD_PLROPOBJ, playerLevel); } return sizeof(*p); @@ -1421,9 +1431,10 @@ DWORD OnBreakObject(TCmd *pCmd, int pnum) if (gbBufferMsgs == 1) { SendPacket(pnum, p, sizeof(*p)); } else { - if (currlevel == Players[pnum].plrlevel) + int playerLevel = Players[pnum].plrlevel; + if (currlevel == playerLevel) SyncBreakObj(p->wParam1, p->wParam2); - DeltaSyncObject(p->wParam2, CMD_BREAKOBJ, Players[pnum].plrlevel); + DeltaSyncObject(p->wParam2, CMD_BREAKOBJ, playerLevel); } return sizeof(*p); @@ -1701,10 +1712,12 @@ DWORD OnCheatExperience(TCmd *pCmd, int pnum) // NOLINT(misc-unused-parameters) DWORD OnCheatSpellLevel(TCmd *pCmd, int pnum) // NOLINT(misc-unused-parameters) { #ifdef _DEBUG - if (gbBufferMsgs == 1) + if (gbBufferMsgs == 1) { SendPacket(pnum, pCmd, sizeof(*pCmd)); - else - Players[pnum]._pSplLvl[Players[pnum]._pRSpell]++; + } else { + auto &player = Players[pnum]; + player._pSplLvl[player._pRSpell]++; + } #endif return sizeof(*pCmd); } @@ -1718,31 +1731,34 @@ DWORD OnNova(TCmd *pCmd, int pnum) { auto *p = (TCmdLoc *)pCmd; - if (gbBufferMsgs != 1 && currlevel == Players[pnum].plrlevel && pnum != MyPlayerId) { - ClrPlrPath(Players[pnum]); - Players[pnum]._pSpell = SPL_NOVA; - Players[pnum]._pSplType = RSPLTYPE_INVALID; - Players[pnum]._pSplFrom = 3; - Players[pnum].destAction = ACTION_SPELL; - Players[pnum].destParam1 = p->x; - Players[pnum].destParam2 = p->y; + if (gbBufferMsgs != 1) { + auto &player = Players[pnum]; + if (currlevel == player.plrlevel && pnum != MyPlayerId) { + ClrPlrPath(player); + player._pSpell = SPL_NOVA; + player._pSplType = RSPLTYPE_INVALID; + player._pSplFrom = 3; + player.destAction = ACTION_SPELL; + player.destParam1 = p->x; + player.destParam2 = p->y; + } } return sizeof(*p); } -DWORD OnSetShield(TCmd *pCmd, int pnum) +DWORD OnSetShield(TCmd *pCmd, PlayerStruct &player) { if (gbBufferMsgs != 1) - Players[pnum].pManaShield = true; + player.pManaShield = true; return sizeof(*pCmd); } -DWORD OnRemoveShield(TCmd *pCmd, int pnum) +DWORD OnRemoveShield(TCmd *pCmd, PlayerStruct &player) { if (gbBufferMsgs != 1) - Players[pnum].pManaShield = false; + player.pManaShield = false; return sizeof(*pCmd); } @@ -2342,34 +2358,35 @@ void NetSendCmdPItem(bool bHiPri, _cmd_id bCmd, Point position) cmd.bCmd = bCmd; cmd.x = position.x; cmd.y = position.y; - cmd.wIndx = Players[MyPlayerId].HoldItem.IDidx; - - if (Players[MyPlayerId].HoldItem.IDidx == IDI_EAR) { - cmd.wCI = Players[MyPlayerId].HoldItem._iName[8] | (Players[MyPlayerId].HoldItem._iName[7] << 8); - cmd.dwSeed = Players[MyPlayerId].HoldItem._iName[12] | ((Players[MyPlayerId].HoldItem._iName[11] | ((Players[MyPlayerId].HoldItem._iName[10] | (Players[MyPlayerId].HoldItem._iName[9] << 8)) << 8)) << 8); - cmd.bId = Players[MyPlayerId].HoldItem._iName[13]; - cmd.bDur = Players[MyPlayerId].HoldItem._iName[14]; - cmd.bMDur = Players[MyPlayerId].HoldItem._iName[15]; - cmd.bCh = Players[MyPlayerId].HoldItem._iName[16]; - cmd.bMCh = Players[MyPlayerId].HoldItem._iName[17]; - cmd.wValue = Players[MyPlayerId].HoldItem._ivalue | (Players[MyPlayerId].HoldItem._iName[18] << 8) | ((Players[MyPlayerId].HoldItem._iCurs - ICURS_EAR_SORCERER) << 6); - cmd.dwBuff = Players[MyPlayerId].HoldItem._iName[22] | ((Players[MyPlayerId].HoldItem._iName[21] | ((Players[MyPlayerId].HoldItem._iName[20] | (Players[MyPlayerId].HoldItem._iName[19] << 8)) << 8)) << 8); + auto &myPlayer = Players[MyPlayerId]; + cmd.wIndx = myPlayer.HoldItem.IDidx; + + if (myPlayer.HoldItem.IDidx == IDI_EAR) { + cmd.wCI = myPlayer.HoldItem._iName[8] | (myPlayer.HoldItem._iName[7] << 8); + cmd.dwSeed = myPlayer.HoldItem._iName[12] | ((myPlayer.HoldItem._iName[11] | ((myPlayer.HoldItem._iName[10] | (myPlayer.HoldItem._iName[9] << 8)) << 8)) << 8); + cmd.bId = myPlayer.HoldItem._iName[13]; + cmd.bDur = myPlayer.HoldItem._iName[14]; + cmd.bMDur = myPlayer.HoldItem._iName[15]; + cmd.bCh = myPlayer.HoldItem._iName[16]; + cmd.bMCh = myPlayer.HoldItem._iName[17]; + cmd.wValue = myPlayer.HoldItem._ivalue | (myPlayer.HoldItem._iName[18] << 8) | ((myPlayer.HoldItem._iCurs - ICURS_EAR_SORCERER) << 6); + cmd.dwBuff = myPlayer.HoldItem._iName[22] | ((myPlayer.HoldItem._iName[21] | ((myPlayer.HoldItem._iName[20] | (myPlayer.HoldItem._iName[19] << 8)) << 8)) << 8); } else { - cmd.wCI = Players[MyPlayerId].HoldItem._iCreateInfo; - cmd.dwSeed = Players[MyPlayerId].HoldItem._iSeed; - cmd.bId = Players[MyPlayerId].HoldItem._iIdentified ? 1 : 0; - cmd.bDur = Players[MyPlayerId].HoldItem._iDurability; - cmd.bMDur = Players[MyPlayerId].HoldItem._iMaxDur; - cmd.bCh = Players[MyPlayerId].HoldItem._iCharges; - cmd.bMCh = Players[MyPlayerId].HoldItem._iMaxCharges; - cmd.wValue = Players[MyPlayerId].HoldItem._ivalue; - cmd.wToHit = Players[MyPlayerId].HoldItem._iPLToHit; - cmd.wMaxDam = Players[MyPlayerId].HoldItem._iMaxDam; - cmd.bMinStr = Players[MyPlayerId].HoldItem._iMinStr; - cmd.bMinMag = Players[MyPlayerId].HoldItem._iMinMag; - cmd.bMinDex = Players[MyPlayerId].HoldItem._iMinDex; - cmd.bAC = Players[MyPlayerId].HoldItem._iAC; - cmd.dwBuff = Players[MyPlayerId].HoldItem.dwBuff; + cmd.wCI = myPlayer.HoldItem._iCreateInfo; + cmd.dwSeed = myPlayer.HoldItem._iSeed; + cmd.bId = myPlayer.HoldItem._iIdentified ? 1 : 0; + cmd.bDur = myPlayer.HoldItem._iDurability; + cmd.bMDur = myPlayer.HoldItem._iMaxDur; + cmd.bCh = myPlayer.HoldItem._iCharges; + cmd.bMCh = myPlayer.HoldItem._iMaxCharges; + cmd.wValue = myPlayer.HoldItem._ivalue; + cmd.wToHit = myPlayer.HoldItem._iPLToHit; + cmd.wMaxDam = myPlayer.HoldItem._iMaxDam; + cmd.bMinStr = myPlayer.HoldItem._iMinStr; + cmd.bMinMag = myPlayer.HoldItem._iMinMag; + cmd.bMinDex = myPlayer.HoldItem._iMinDex; + cmd.bAC = myPlayer.HoldItem._iAC; + cmd.dwBuff = myPlayer.HoldItem.dwBuff; } if (bHiPri) @@ -2382,13 +2399,15 @@ void NetSendCmdChItem(bool bHiPri, BYTE bLoc) { TCmdChItem cmd; + auto &myPlayer = Players[MyPlayerId]; + cmd.bCmd = CMD_CHANGEPLRITEMS; cmd.bLoc = bLoc; - cmd.wIndx = Players[MyPlayerId].HoldItem.IDidx; - cmd.wCI = Players[MyPlayerId].HoldItem._iCreateInfo; - cmd.dwSeed = Players[MyPlayerId].HoldItem._iSeed; - cmd.bId = Players[MyPlayerId].HoldItem._iIdentified ? 1 : 0; - cmd.dwBuff = Players[MyPlayerId].HoldItem.dwBuff; + cmd.wIndx = myPlayer.HoldItem.IDidx; + cmd.wCI = myPlayer.HoldItem._iCreateInfo; + cmd.dwSeed = myPlayer.HoldItem._iSeed; + cmd.bId = myPlayer.HoldItem._iIdentified ? 1 : 0; + cmd.dwBuff = myPlayer.HoldItem.dwBuff; if (bHiPri) NetSendHiPri(MyPlayerId, (byte *)&cmd, sizeof(cmd)); @@ -2518,13 +2537,13 @@ DWORD ParseCmd(int pnum, TCmd *pCmd) case CMD_GOTOGETITEM: return OnGotoGetItem(pCmd, player); case CMD_REQUESTGITEM: - return OnRequestGetItem(pCmd, pnum); + return OnRequestGetItem(pCmd, player); case CMD_GETITEM: return OnGetItem(pCmd, pnum); case CMD_GOTOAGETITEM: return OnGotoAutoGetItem(pCmd, player); case CMD_REQUESTAGITEM: - return OnRequestAutoGetItem(pCmd, pnum); + return OnRequestAutoGetItem(pCmd, player); case CMD_AGETITEM: return OnAutoGetItem(pCmd, pnum); case CMD_ITEMEXTRA: @@ -2538,37 +2557,37 @@ DWORD ParseCmd(int pnum, TCmd *pCmd) case CMD_ATTACKXY: return OnAttackTile(pCmd, player); case CMD_SATTACKXY: - return OnStandingAttackTile(pCmd, pnum); + return OnStandingAttackTile(pCmd, player); case CMD_RATTACKXY: - return OnRangedAttackTile(pCmd, pnum); + return OnRangedAttackTile(pCmd, player); case CMD_SPELLXYD: - return OnSpellWall(pCmd, pnum); + return OnSpellWall(pCmd, player); case CMD_SPELLXY: - return OnSpellTile(pCmd, pnum); + return OnSpellTile(pCmd, player); case CMD_TSPELLXY: - return OnTargetSpellTile(pCmd, pnum); + return OnTargetSpellTile(pCmd, player); case CMD_OPOBJXY: return OnOperateObjectTile(pCmd, player); case CMD_DISARMXY: return OnDisarm(pCmd, player); case CMD_OPOBJT: - return OnOperateObjectTelekinesis(pCmd, pnum); + return OnOperateObjectTelekinesis(pCmd, player); case CMD_ATTACKID: return OnAttackMonster(pCmd, player); case CMD_ATTACKPID: return OnAttackPlayer(pCmd, player); case CMD_RATTACKID: - return OnRangedAttackMonster(pCmd, pnum); + return OnRangedAttackMonster(pCmd, player); case CMD_RATTACKPID: - return OnRangedAttackPlayer(pCmd, pnum); + return OnRangedAttackPlayer(pCmd, player); case CMD_SPELLID: - return OnSpellMonster(pCmd, pnum); + return OnSpellMonster(pCmd, player); case CMD_SPELLPID: - return OnSpellPlayer(pCmd, pnum); + return OnSpellPlayer(pCmd, player); case CMD_TSPELLID: - return OnTargetSpellMonster(pCmd, pnum); + return OnTargetSpellMonster(pCmd, player); case CMD_TSPELLPID: - return OnTargetSpellPlayer(pCmd, pnum); + return OnTargetSpellPlayer(pCmd, player); case CMD_KNOCKBACK: return OnKnockback(pCmd, pnum); case CMD_RESURRECT: @@ -2594,7 +2613,7 @@ DWORD ParseCmd(int pnum, TCmd *pCmd) case CMD_PLRDEAD: return OnPlayerDeath(pCmd, pnum); case CMD_PLRDAMAGE: - return OnPlayerDamage(pCmd, pnum); + return OnPlayerDamage(pCmd, player); case CMD_OPENDOOR: return OnOpenDoor(pCmd, pnum); case CMD_CLOSEDOOR: @@ -2645,9 +2664,9 @@ DWORD ParseCmd(int pnum, TCmd *pCmd) case CMD_NOVA: return OnNova(pCmd, pnum); case CMD_SETSHIELD: - return OnSetShield(pCmd, pnum); + return OnSetShield(pCmd, player); case CMD_REMSHIELD: - return OnRemoveShield(pCmd, pnum); + return OnRemoveShield(pCmd, player); case CMD_REFLECT: return OnReflect(pCmd, pnum); case CMD_NAKRUL: diff --git a/Source/multi.cpp b/Source/multi.cpp index 66c89ad92..fffecad6a 100644 --- a/Source/multi.cpp +++ b/Source/multi.cpp @@ -115,18 +115,19 @@ byte *ReceivePacket(TBuffer *pBuf, byte *body, size_t *size) void NetReceivePlayerData(TPkt *pkt) { - const Point target = Players[MyPlayerId].GetTargetPosition(); + const auto &myPlayer = Players[MyPlayerId]; + const Point target = myPlayer.GetTargetPosition(); pkt->hdr.wCheck = LoadBE32("\0\0ip"); - pkt->hdr.px = Players[MyPlayerId].position.tile.x; - pkt->hdr.py = Players[MyPlayerId].position.tile.y; + pkt->hdr.px = myPlayer.position.tile.x; + pkt->hdr.py = myPlayer.position.tile.y; pkt->hdr.targx = target.x; pkt->hdr.targy = target.y; - pkt->hdr.php = Players[MyPlayerId]._pHitPoints; - pkt->hdr.pmhp = Players[MyPlayerId]._pMaxHP; - pkt->hdr.bstr = Players[MyPlayerId]._pBaseStr; - pkt->hdr.bmag = Players[MyPlayerId]._pBaseMag; - pkt->hdr.bdex = Players[MyPlayerId]._pBaseDex; + pkt->hdr.php = myPlayer._pHitPoints; + pkt->hdr.pmhp = myPlayer._pMaxHP; + pkt->hdr.bstr = myPlayer._pBaseStr; + pkt->hdr.bmag = myPlayer._pBaseMag; + pkt->hdr.bdex = myPlayer._pBaseDex; } void SendPacket(int playerId, void *packet, BYTE dwSize) @@ -179,7 +180,9 @@ void ParseTurn(int pnum, uint32_t turn) void PlayerLeftMsg(int pnum, bool left) { - if (!Players[pnum].plractive) { + auto &player = Players[pnum]; + + if (!player.plractive) { return; } @@ -199,11 +202,11 @@ void PlayerLeftMsg(int pnum, bool left) pszFmt = _("Player '{:s}' dropped due to timeout"); break; } - EventPlrMsg(fmt::format(pszFmt, Players[pnum]._pName).c_str()); + EventPlrMsg(fmt::format(pszFmt, player._pName).c_str()); } - Players[pnum].plractive = false; - Players[pnum]._pName[0] = '\0'; - ResetPlayerGFX(Players[pnum]); + player.plractive = false; + player._pName[0] = '\0'; + ResetPlayerGFX(player); gbActivePlayers--; } @@ -358,13 +361,16 @@ void SetupLocalPositions() x += plrxoff[MyPlayerId]; y += plryoff[MyPlayerId]; - Players[MyPlayerId].position.tile = { x, y }; - Players[MyPlayerId].position.future = { x, y }; - Players[MyPlayerId].plrlevel = currlevel; - Players[MyPlayerId]._pLvlChanging = true; - Players[MyPlayerId].pLvlLoad = 0; - Players[MyPlayerId]._pmode = PM_NEWLVL; - Players[MyPlayerId].destAction = ACTION_NONE; + + auto &myPlayer = Players[MyPlayerId]; + + myPlayer.position.tile = { x, y }; + myPlayer.position.future = { x, y }; + myPlayer.plrlevel = currlevel; + myPlayer._pLvlChanging = true; + myPlayer.pLvlLoad = 0; + myPlayer._pmode = PM_NEWLVL; + myPlayer.destAction = ACTION_NONE; } void HandleEvents(_SNETEVENT *pEvt) @@ -751,8 +757,9 @@ bool NetInit(bool bSinglePlayer) SetupLocalPositions(); SendPlayerInfo(-2, CMD_SEND_PLRINFO); - ResetPlayerGFX(Players[MyPlayerId]); - Players[MyPlayerId].plractive = true; + auto &myPlayer = Players[MyPlayerId]; + ResetPlayerGFX(myPlayer); + myPlayer.plractive = true; gbActivePlayers = 1; if (!sgbPlayerTurnBitTbl[MyPlayerId] || msg_wait_resync()) diff --git a/Source/objects.cpp b/Source/objects.cpp index 7f6a5bfcc..95b8a1287 100644 --- a/Source/objects.cpp +++ b/Source/objects.cpp @@ -732,9 +732,10 @@ void AddDiabObjs() void AddCryptObject(int i, int a2) { if (a2 > 5) { + auto &myPlayer = Players[MyPlayerId]; switch (a2) { case 6: - switch (Players[MyPlayerId]._pClass) { + switch (myPlayer._pClass) { case HeroClass::Warrior: case HeroClass::Barbarian: Objects[i]._oVar2 = TEXT_BOOKA; @@ -754,7 +755,7 @@ void AddCryptObject(int i, int a2) } break; case 7: - switch (Players[MyPlayerId]._pClass) { + switch (myPlayer._pClass) { case HeroClass::Warrior: case HeroClass::Barbarian: Objects[i]._oVar2 = TEXT_BOOKB; @@ -774,7 +775,7 @@ void AddCryptObject(int i, int a2) } break; case 8: - switch (Players[MyPlayerId]._pClass) { + switch (myPlayer._pClass) { case HeroClass::Warrior: case HeroClass::Barbarian: Objects[i]._oVar2 = TEXT_BOOKC; @@ -1443,7 +1444,9 @@ void UpdateObjectLight(int i, int lightRadius) void UpdateCircle(int i) { - if (Players[MyPlayerId].position.tile != Objects[i].position) { + auto &myPlayer = Players[MyPlayerId]; + + if (myPlayer.position.tile != Objects[i].position) { if (Objects[i]._otype == OBJ_MCIRCLE1) Objects[i]._oAnimFrame = 1; if (Objects[i]._otype == OBJ_MCIRCLE2) @@ -1470,10 +1473,10 @@ void UpdateCircle(int i) ObjChangeMapResync(Objects[i]._oVar1, Objects[i]._oVar2, Objects[i]._oVar3, Objects[i]._oVar4); if (Quests[Q_BETRAYER]._qactive == QUEST_ACTIVE && Quests[Q_BETRAYER]._qvar1 <= 4) // BUGFIX stepping on the circle again will break the quest state (fixed) Quests[Q_BETRAYER]._qvar1 = 4; - AddMissile(Players[MyPlayerId].position.tile, { 35, 46 }, Players[MyPlayerId]._pdir, MIS_RNDTELEPORT, TARGET_MONSTERS, MyPlayerId, 0, 0); + AddMissile(myPlayer.position.tile, { 35, 46 }, myPlayer._pdir, MIS_RNDTELEPORT, TARGET_MONSTERS, MyPlayerId, 0, 0); track_repeat_walk(false); sgbMouseDown = CLICK_NONE; - ClrPlrPath(Players[MyPlayerId]); + ClrPlrPath(myPlayer); StartStand(MyPlayerId, DIR_S); } } @@ -1582,19 +1585,21 @@ void UpdateBurningCrossDamage(int i) { int damage[4] = { 6, 8, 10, 12 }; - if (Players[MyPlayerId]._pmode == PM_DEATH) + auto &myPlayer = Players[MyPlayerId]; + + if (myPlayer._pmode == PM_DEATH) return; - int8_t fireResist = Players[MyPlayerId]._pFireResist; + int8_t fireResist = myPlayer._pFireResist; if (fireResist > 0) damage[leveltype - 1] -= fireResist * damage[leveltype - 1] / 100; - if (Players[MyPlayerId].position.tile.x != Objects[i].position.x || Players[MyPlayerId].position.tile.y != Objects[i].position.y - 1) + if (myPlayer.position.tile.x != Objects[i].position.x || myPlayer.position.tile.y != Objects[i].position.y - 1) return; ApplyPlrDamage(MyPlayerId, 0, 0, damage[leveltype - 1]); - if (Players[MyPlayerId]._pHitPoints >> 6 > 0) { - Players[MyPlayerId].Say(HeroSpeech::Argh); + if (myPlayer._pHitPoints >> 6 > 0) { + myPlayer.Say(HeroSpeech::Argh); } } @@ -2177,6 +2182,8 @@ void OperateBook(int pnum, int i) int dx; int dy; + auto &player = Players[pnum]; + if (Objects[i]._oSelFlag == 0) return; if (setlevel && setlvlnum == SL_VILEBETRAYER) { @@ -2199,7 +2206,7 @@ void OperateBook(int pnum, int i) } if (doAddMissile) { Objects[dObject[35][36] - 1]._oVar5++; - AddMissile(Players[pnum].position.tile, { dx, dy }, Players[pnum]._pdir, MIS_RNDTELEPORT, TARGET_MONSTERS, pnum, 0, 0); + AddMissile(player.position.tile, { dx, dy }, player._pdir, MIS_RNDTELEPORT, TARGET_MONSTERS, pnum, 0, 0); missileAdded = true; doAddMissile = false; } @@ -2213,17 +2220,17 @@ void OperateBook(int pnum, int i) return; if (setlvlnum == SL_BONECHAMB) { - Players[pnum]._pMemSpells |= GetSpellBitmask(SPL_GUARDIAN); - if (Players[pnum]._pSplLvl[SPL_GUARDIAN] < MAX_SPELL_LEVEL) - Players[pnum]._pSplLvl[SPL_GUARDIAN]++; + player._pMemSpells |= GetSpellBitmask(SPL_GUARDIAN); + if (player._pSplLvl[SPL_GUARDIAN] < MAX_SPELL_LEVEL) + player._pSplLvl[SPL_GUARDIAN]++; Quests[Q_SCHAMB]._qactive = QUEST_DONE; if (!deltaload) PlaySfxLoc(IS_QUESTDN, Objects[i].position); InitDiabloMsg(EMSG_BONECHAMB); AddMissile( - Players[pnum].position.tile, + player.position.tile, Objects[i].position + Displacement { -2, -4 }, - Players[pnum]._pdir, + player._pdir, MIS_GUARDIAN, TARGET_MONSTERS, pnum, @@ -2353,7 +2360,8 @@ void OperateChest(int pnum, int i, bool sendmsg) } } if (Objects[i]._oTrapFlag && Objects[i]._otype >= OBJ_TCHEST1 && Objects[i]._otype <= OBJ_TCHEST3) { - Direction mdir = GetDirection(Objects[i].position, Players[pnum].position.tile); + auto &player = Players[pnum]; + Direction mdir = GetDirection(Objects[i].position, player.position.tile); int mtype; switch (Objects[i]._oVar4) { case 0: @@ -2377,7 +2385,7 @@ void OperateChest(int pnum, int i, bool sendmsg) default: mtype = MIS_ARROW; } - AddMissile(Objects[i].position, Players[pnum].position.tile, mdir, mtype, TARGET_PLAYERS, -1, 0, 0); + AddMissile(Objects[i].position, player.position.tile, mdir, mtype, TARGET_PLAYERS, -1, 0, 0); Objects[i]._oTrapFlag = false; } if (pnum == MyPlayerId) @@ -2445,17 +2453,20 @@ void OperateSlainHero(int pnum, int i) if (deltaload) { return; } - if (Players[pnum]._pClass == HeroClass::Warrior) { + + auto &player = Players[pnum]; + + if (player._pClass == HeroClass::Warrior) { CreateMagicArmor(Objects[i].position, ITYPE_HARMOR, ICURS_BREAST_PLATE, false, true); - } else if (Players[pnum]._pClass == HeroClass::Rogue) { + } else if (player._pClass == HeroClass::Rogue) { CreateMagicWeapon(Objects[i].position, ITYPE_BOW, ICURS_LONG_WAR_BOW, false, true); - } else if (Players[pnum]._pClass == HeroClass::Sorcerer) { + } else if (player._pClass == HeroClass::Sorcerer) { CreateSpellBook(Objects[i].position, SPL_LIGHTNING, false, true); - } else if (Players[pnum]._pClass == HeroClass::Monk) { + } else if (player._pClass == HeroClass::Monk) { CreateMagicWeapon(Objects[i].position, ITYPE_STAFF, ICURS_WAR_STAFF, false, true); - } else if (Players[pnum]._pClass == HeroClass::Bard) { + } else if (player._pClass == HeroClass::Bard) { CreateMagicWeapon(Objects[i].position, ITYPE_SWORD, ICURS_BASTARD_SWORD, false, true); - } else if (Players[pnum]._pClass == HeroClass::Barbarian) { + } else if (player._pClass == HeroClass::Barbarian) { CreateMagicWeapon(Objects[i].position, ITYPE_AXE, ICURS_BATTLE_AXE, false, true); } Players[MyPlayerId].Say(HeroSpeech::RestInPeaceMyFriend); @@ -2610,13 +2621,15 @@ bool OperateShrineHidden(int pnum) if (pnum != MyPlayerId) return false; + auto &player = Players[pnum]; + int cnt = 0; - for (const auto &item : Players[pnum].InvBody) { + for (const auto &item : player.InvBody) { if (!item.isEmpty()) cnt++; } if (cnt > 0) { - for (auto &item : Players[pnum].InvBody) { + for (auto &item : player.InvBody) { if (!item.isEmpty() && item._iMaxDur != DUR_INDESTRUCTIBLE && item._iMaxDur != 0) { @@ -2628,7 +2641,7 @@ bool OperateShrineHidden(int pnum) } while (true) { cnt = 0; - for (auto &item : Players[pnum].InvBody) { + for (auto &item : player.InvBody) { if (!item.isEmpty() && item._iMaxDur != DUR_INDESTRUCTIBLE && item._iMaxDur != 0) { cnt++; } @@ -2636,15 +2649,15 @@ bool OperateShrineHidden(int pnum) if (cnt == 0) break; int r = GenerateRnd(NUM_INVLOC); - if (Players[pnum].InvBody[r].isEmpty() || Players[pnum].InvBody[r]._iMaxDur == DUR_INDESTRUCTIBLE || Players[pnum].InvBody[r]._iMaxDur == 0) + if (player.InvBody[r].isEmpty() || player.InvBody[r]._iMaxDur == DUR_INDESTRUCTIBLE || player.InvBody[r]._iMaxDur == 0) continue; - Players[pnum].InvBody[r]._iDurability -= 20; - Players[pnum].InvBody[r]._iMaxDur -= 20; - if (Players[pnum].InvBody[r]._iDurability <= 0) - Players[pnum].InvBody[r]._iDurability = 1; - if (Players[pnum].InvBody[r]._iMaxDur <= 0) - Players[pnum].InvBody[r]._iMaxDur = 1; + player.InvBody[r]._iDurability -= 20; + player.InvBody[r]._iMaxDur -= 20; + if (player.InvBody[r]._iDurability <= 0) + player.InvBody[r]._iDurability = 1; + if (player.InvBody[r]._iMaxDur <= 0) + player.InvBody[r]._iMaxDur = 1; break; } } @@ -2661,46 +2674,48 @@ bool OperateShrineGloomy(int pnum) if (pnum != MyPlayerId) return true; - if (!Players[pnum].InvBody[INVLOC_HEAD].isEmpty()) - Players[pnum].InvBody[INVLOC_HEAD]._iAC += 2; - if (!Players[pnum].InvBody[INVLOC_CHEST].isEmpty()) - Players[pnum].InvBody[INVLOC_CHEST]._iAC += 2; - if (!Players[pnum].InvBody[INVLOC_HAND_LEFT].isEmpty()) { - if (Players[pnum].InvBody[INVLOC_HAND_LEFT]._itype == ITYPE_SHIELD) { - Players[pnum].InvBody[INVLOC_HAND_LEFT]._iAC += 2; + auto &player = Players[pnum]; + + if (!player.InvBody[INVLOC_HEAD].isEmpty()) + player.InvBody[INVLOC_HEAD]._iAC += 2; + if (!player.InvBody[INVLOC_CHEST].isEmpty()) + player.InvBody[INVLOC_CHEST]._iAC += 2; + if (!player.InvBody[INVLOC_HAND_LEFT].isEmpty()) { + if (player.InvBody[INVLOC_HAND_LEFT]._itype == ITYPE_SHIELD) { + player.InvBody[INVLOC_HAND_LEFT]._iAC += 2; } else { - Players[pnum].InvBody[INVLOC_HAND_LEFT]._iMaxDam--; - if (Players[pnum].InvBody[INVLOC_HAND_LEFT]._iMaxDam < Players[pnum].InvBody[INVLOC_HAND_LEFT]._iMinDam) - Players[pnum].InvBody[INVLOC_HAND_LEFT]._iMaxDam = Players[pnum].InvBody[INVLOC_HAND_LEFT]._iMinDam; + player.InvBody[INVLOC_HAND_LEFT]._iMaxDam--; + if (player.InvBody[INVLOC_HAND_LEFT]._iMaxDam < player.InvBody[INVLOC_HAND_LEFT]._iMinDam) + player.InvBody[INVLOC_HAND_LEFT]._iMaxDam = player.InvBody[INVLOC_HAND_LEFT]._iMinDam; } } - if (!Players[pnum].InvBody[INVLOC_HAND_RIGHT].isEmpty()) { - if (Players[pnum].InvBody[INVLOC_HAND_RIGHT]._itype == ITYPE_SHIELD) { - Players[pnum].InvBody[INVLOC_HAND_RIGHT]._iAC += 2; + if (!player.InvBody[INVLOC_HAND_RIGHT].isEmpty()) { + if (player.InvBody[INVLOC_HAND_RIGHT]._itype == ITYPE_SHIELD) { + player.InvBody[INVLOC_HAND_RIGHT]._iAC += 2; } else { - Players[pnum].InvBody[INVLOC_HAND_RIGHT]._iMaxDam--; - if (Players[pnum].InvBody[INVLOC_HAND_RIGHT]._iMaxDam < Players[pnum].InvBody[INVLOC_HAND_RIGHT]._iMinDam) - Players[pnum].InvBody[INVLOC_HAND_RIGHT]._iMaxDam = Players[pnum].InvBody[INVLOC_HAND_RIGHT]._iMinDam; + player.InvBody[INVLOC_HAND_RIGHT]._iMaxDam--; + if (player.InvBody[INVLOC_HAND_RIGHT]._iMaxDam < player.InvBody[INVLOC_HAND_RIGHT]._iMinDam) + player.InvBody[INVLOC_HAND_RIGHT]._iMaxDam = player.InvBody[INVLOC_HAND_RIGHT]._iMinDam; } } - for (int j = 0; j < Players[pnum]._pNumInv; j++) { - switch (Players[pnum].InvList[j]._itype) { + for (int j = 0; j < player._pNumInv; j++) { + switch (player.InvList[j]._itype) { case ITYPE_SWORD: case ITYPE_AXE: case ITYPE_BOW: case ITYPE_MACE: case ITYPE_STAFF: - Players[pnum].InvList[j]._iMaxDam--; - if (Players[pnum].InvList[j]._iMaxDam < Players[pnum].InvList[j]._iMinDam) - Players[pnum].InvList[j]._iMaxDam = Players[pnum].InvList[j]._iMinDam; + player.InvList[j]._iMaxDam--; + if (player.InvList[j]._iMaxDam < player.InvList[j]._iMinDam) + player.InvList[j]._iMaxDam = player.InvList[j]._iMinDam; break; case ITYPE_SHIELD: case ITYPE_HELM: case ITYPE_LARMOR: case ITYPE_MARMOR: case ITYPE_HARMOR: - Players[pnum].InvList[j]._iAC += 2; + player.InvList[j]._iAC += 2; break; default: break; @@ -2719,19 +2734,21 @@ bool OperateShrineWeird(int pnum) if (pnum != MyPlayerId) return true; - if (!Players[pnum].InvBody[INVLOC_HAND_LEFT].isEmpty() && Players[pnum].InvBody[INVLOC_HAND_LEFT]._itype != ITYPE_SHIELD) - Players[pnum].InvBody[INVLOC_HAND_LEFT]._iMaxDam++; - if (!Players[pnum].InvBody[INVLOC_HAND_RIGHT].isEmpty() && Players[pnum].InvBody[INVLOC_HAND_RIGHT]._itype != ITYPE_SHIELD) - Players[pnum].InvBody[INVLOC_HAND_RIGHT]._iMaxDam++; + auto &player = Players[pnum]; - for (int j = 0; j < Players[pnum]._pNumInv; j++) { - switch (Players[pnum].InvList[j]._itype) { + if (!player.InvBody[INVLOC_HAND_LEFT].isEmpty() && player.InvBody[INVLOC_HAND_LEFT]._itype != ITYPE_SHIELD) + player.InvBody[INVLOC_HAND_LEFT]._iMaxDam++; + if (!player.InvBody[INVLOC_HAND_RIGHT].isEmpty() && player.InvBody[INVLOC_HAND_RIGHT]._itype != ITYPE_SHIELD) + player.InvBody[INVLOC_HAND_RIGHT]._iMaxDam++; + + for (int j = 0; j < player._pNumInv; j++) { + switch (player.InvList[j]._itype) { case ITYPE_SWORD: case ITYPE_AXE: case ITYPE_BOW: case ITYPE_MACE: case ITYPE_STAFF: - Players[pnum].InvList[j]._iMaxDam++; + player.InvList[j]._iMaxDam++; break; default: break; @@ -2748,10 +2765,12 @@ bool OperateShrineMagical(int pnum) if (deltaload) return false; + auto &player = Players[pnum]; + AddMissile( - Players[pnum].position.tile, - Players[pnum].position.tile, - Players[pnum]._pdir, + player.position.tile, + player.position.tile, + player._pdir, MIS_MANASHIELD, -1, pnum, @@ -2773,15 +2792,17 @@ bool OperateShrineStone(int pnum) if (pnum != MyPlayerId) return true; - for (auto &item : Players[pnum].InvBody) { + auto &player = Players[pnum]; + + for (auto &item : player.InvBody) { if (item._itype == ITYPE_STAFF) item._iCharges = item._iMaxCharges; } - for (int j = 0; j < Players[pnum]._pNumInv; j++) { - if (Players[pnum].InvList[j]._itype == ITYPE_STAFF) - Players[pnum].InvList[j]._iCharges = Players[pnum].InvList[j]._iMaxCharges; + for (int j = 0; j < player._pNumInv; j++) { + if (player.InvList[j]._itype == ITYPE_STAFF) + player.InvList[j]._iCharges = player.InvList[j]._iMaxCharges; } - for (auto &item : Players[pnum].SpdList) { + for (auto &item : player.SpdList) { if (item._itype == ITYPE_STAFF) item._iCharges = item._iMaxCharges; // belt items don't have charges? } @@ -2798,11 +2819,13 @@ bool OperateShrineReligious(int pnum) if (pnum != MyPlayerId) return true; - for (auto &item : Players[pnum].InvBody) + auto &player = Players[pnum]; + + for (auto &item : player.InvBody) item._iDurability = item._iMaxDur; - for (int j = 0; j < Players[pnum]._pNumInv; j++) - Players[pnum].InvList[j]._iDurability = Players[pnum].InvList[j]._iMaxDur; - for (auto &item : Players[pnum].SpdList) + for (int j = 0; j < player._pNumInv; j++) + player.InvList[j]._iDurability = player.InvList[j]._iMaxDur; + for (auto &item : player.SpdList) item._iDurability = item._iMaxDur; // belt items don't have durability? InitDiabloMsg(EMSG_SHRINE_RELIGIOUS); @@ -2817,10 +2840,12 @@ bool OperateShrineEnchanted(int pnum) if (pnum != MyPlayerId) return false; + auto &player = Players[pnum]; + int cnt = 0; uint64_t spell = 1; int maxSpells = gbIsHellfire ? MAX_SPELLS : 37; - uint64_t spells = Players[pnum]._pMemSpells; + uint64_t spells = player._pMemSpells; for (int j = 0; j < maxSpells; j++) { if ((spell & spells) != 0) cnt++; @@ -2829,20 +2854,20 @@ bool OperateShrineEnchanted(int pnum) if (cnt > 1) { spell = 1; for (int j = SPL_FIREBOLT; j < maxSpells; j++) { // BUGFIX: < MAX_SPELLS, there is no spell with MAX_SPELLS index (fixed) - if ((Players[pnum]._pMemSpells & spell) != 0) { - if (Players[pnum]._pSplLvl[j] < MAX_SPELL_LEVEL) - Players[pnum]._pSplLvl[j]++; + if ((player._pMemSpells & spell) != 0) { + if (player._pSplLvl[j] < MAX_SPELL_LEVEL) + player._pSplLvl[j]++; } spell *= 2; } int r; do { r = GenerateRnd(maxSpells); - } while ((Players[pnum]._pMemSpells & GetSpellBitmask(r + 1)) == 0); - if (Players[pnum]._pSplLvl[r + 1] >= 2) - Players[pnum]._pSplLvl[r + 1] -= 2; + } while ((player._pMemSpells & GetSpellBitmask(r + 1)) == 0); + if (player._pSplLvl[r + 1] >= 2) + player._pSplLvl[r + 1] -= 2; else - Players[pnum]._pSplLvl[r + 1] = 0; + player._pSplLvl[r + 1] = 0; } InitDiabloMsg(EMSG_SHRINE_ENCHANTED); @@ -2880,27 +2905,29 @@ bool OperateShrineFascinating(int pnum) if (pnum != MyPlayerId) return false; - Players[pnum]._pMemSpells |= GetSpellBitmask(SPL_FIREBOLT); + auto &player = Players[pnum]; + + player._pMemSpells |= GetSpellBitmask(SPL_FIREBOLT); - if (Players[pnum]._pSplLvl[SPL_FIREBOLT] < MAX_SPELL_LEVEL) - Players[pnum]._pSplLvl[SPL_FIREBOLT]++; - if (Players[pnum]._pSplLvl[SPL_FIREBOLT] < MAX_SPELL_LEVEL) - Players[pnum]._pSplLvl[SPL_FIREBOLT]++; + if (player._pSplLvl[SPL_FIREBOLT] < MAX_SPELL_LEVEL) + player._pSplLvl[SPL_FIREBOLT]++; + if (player._pSplLvl[SPL_FIREBOLT] < MAX_SPELL_LEVEL) + player._pSplLvl[SPL_FIREBOLT]++; - DWORD t = Players[pnum]._pMaxManaBase / 10; - int v1 = Players[pnum]._pMana - Players[pnum]._pManaBase; - int v2 = Players[pnum]._pMaxMana - Players[pnum]._pMaxManaBase; - Players[pnum]._pManaBase -= t; - Players[pnum]._pMana -= t; - Players[pnum]._pMaxMana -= t; - Players[pnum]._pMaxManaBase -= t; - if (Players[pnum]._pMana >> 6 <= 0) { - Players[pnum]._pMana = v1; - Players[pnum]._pManaBase = 0; + DWORD t = player._pMaxManaBase / 10; + int v1 = player._pMana - player._pManaBase; + int v2 = player._pMaxMana - player._pMaxManaBase; + player._pManaBase -= t; + player._pMana -= t; + player._pMaxMana -= t; + player._pMaxManaBase -= t; + if (player._pMana >> 6 <= 0) { + player._pMana = v1; + player._pManaBase = 0; } - if (Players[pnum]._pMaxMana >> 6 <= 0) { - Players[pnum]._pMaxMana = v2; - Players[pnum]._pMaxManaBase = 0; + if (player._pMaxMana >> 6 <= 0) { + player._pMaxMana = v2; + player._pMaxManaBase = 0; } InitDiabloMsg(EMSG_SHRINE_FASCINATING); @@ -2913,10 +2940,12 @@ bool OperateShrineCryptic(int pnum) if (deltaload) return false; + auto &player = Players[pnum]; + AddMissile( - Players[pnum].position.tile, - Players[pnum].position.tile, - Players[pnum]._pdir, + player.position.tile, + player.position.tile, + player._pdir, MIS_NOVA, -1, pnum, @@ -2926,8 +2955,8 @@ bool OperateShrineCryptic(int pnum) if (pnum != MyPlayerId) return false; - Players[pnum]._pMana = Players[pnum]._pMaxMana; - Players[pnum]._pManaBase = Players[pnum]._pMaxManaBase; + player._pMana = player._pMaxMana; + player._pManaBase = player._pMaxManaBase; InitDiabloMsg(EMSG_SHRINE_CRYPTIC); @@ -2942,39 +2971,41 @@ bool OperateShrineEldritch(int pnum) if (pnum != MyPlayerId) return true; - for (int j = 0; j < Players[pnum]._pNumInv; j++) { - if (Players[pnum].InvList[j]._itype == ITYPE_MISC) { - if (Players[pnum].InvList[j]._iMiscId == IMISC_HEAL - || Players[pnum].InvList[j]._iMiscId == IMISC_MANA) { - SetPlrHandItem(&Players[pnum].HoldItem, ItemMiscIdIdx(IMISC_REJUV)); - GetPlrHandSeed(&Players[pnum].HoldItem); - Players[pnum].HoldItem._iStatFlag = true; - Players[pnum].InvList[j] = Players[pnum].HoldItem; + auto &player = Players[pnum]; + + for (int j = 0; j < player._pNumInv; j++) { + if (player.InvList[j]._itype == ITYPE_MISC) { + if (player.InvList[j]._iMiscId == IMISC_HEAL + || player.InvList[j]._iMiscId == IMISC_MANA) { + SetPlrHandItem(&player.HoldItem, ItemMiscIdIdx(IMISC_REJUV)); + GetPlrHandSeed(&player.HoldItem); + player.HoldItem._iStatFlag = true; + player.InvList[j] = player.HoldItem; } - if (Players[pnum].InvList[j]._iMiscId == IMISC_FULLHEAL - || Players[pnum].InvList[j]._iMiscId == IMISC_FULLMANA) { - SetPlrHandItem(&Players[pnum].HoldItem, ItemMiscIdIdx(IMISC_FULLREJUV)); - GetPlrHandSeed(&Players[pnum].HoldItem); - Players[pnum].HoldItem._iStatFlag = true; - Players[pnum].InvList[j] = Players[pnum].HoldItem; + if (player.InvList[j]._iMiscId == IMISC_FULLHEAL + || player.InvList[j]._iMiscId == IMISC_FULLMANA) { + SetPlrHandItem(&player.HoldItem, ItemMiscIdIdx(IMISC_FULLREJUV)); + GetPlrHandSeed(&player.HoldItem); + player.HoldItem._iStatFlag = true; + player.InvList[j] = player.HoldItem; } } } - for (auto &item : Players[pnum].SpdList) { + for (auto &item : player.SpdList) { if (item._itype == ITYPE_MISC) { if (item._iMiscId == IMISC_HEAL || item._iMiscId == IMISC_MANA) { - SetPlrHandItem(&Players[pnum].HoldItem, ItemMiscIdIdx(IMISC_REJUV)); - GetPlrHandSeed(&Players[pnum].HoldItem); - Players[pnum].HoldItem._iStatFlag = true; - item = Players[pnum].HoldItem; + SetPlrHandItem(&player.HoldItem, ItemMiscIdIdx(IMISC_REJUV)); + GetPlrHandSeed(&player.HoldItem); + player.HoldItem._iStatFlag = true; + item = player.HoldItem; } if (item._iMiscId == IMISC_FULLHEAL || item._iMiscId == IMISC_FULLMANA) { - SetPlrHandItem(&Players[pnum].HoldItem, ItemMiscIdIdx(IMISC_FULLREJUV)); - GetPlrHandSeed(&Players[pnum].HoldItem); - Players[pnum].HoldItem._iStatFlag = true; - item = Players[pnum].HoldItem; + SetPlrHandItem(&player.HoldItem, ItemMiscIdIdx(IMISC_FULLREJUV)); + GetPlrHandSeed(&player.HoldItem); + player.HoldItem._iStatFlag = true; + item = player.HoldItem; } } } @@ -3014,6 +3045,8 @@ bool OperateShrineDivine(int pnum, Point spawnPosition) if (pnum != MyPlayerId) return false; + auto &player = Players[pnum]; + if (currlevel < 4) { CreateTypeItem(spawnPosition, false, ITYPE_MISC, IMISC_FULLMANA, false, true); CreateTypeItem(spawnPosition, false, ITYPE_MISC, IMISC_FULLHEAL, false, true); @@ -3022,10 +3055,10 @@ bool OperateShrineDivine(int pnum, Point spawnPosition) CreateTypeItem(spawnPosition, false, ITYPE_MISC, IMISC_FULLREJUV, false, true); } - Players[pnum]._pMana = Players[pnum]._pMaxMana; - Players[pnum]._pManaBase = Players[pnum]._pMaxManaBase; - Players[pnum]._pHitPoints = Players[pnum]._pMaxHP; - Players[pnum]._pHPBase = Players[pnum]._pMaxHPBase; + player._pMana = player._pMaxMana; + player._pManaBase = player._pMaxManaBase; + player._pHitPoints = player._pMaxHP; + player._pHPBase = player._pMaxHPBase; InitDiabloMsg(EMSG_SHRINE_DIVINE); @@ -3037,6 +3070,8 @@ bool OperateShrineHoly(int pnum) if (deltaload) return false; + auto &player = Players[pnum]; + int j = 0; int xx; int yy; @@ -3050,7 +3085,7 @@ bool OperateShrineHoly(int pnum) break; } while (nSolidTable[lv] || dObject[xx][yy] != 0 || dMonster[xx][yy] != 0); - AddMissile(Players[pnum].position.tile, { xx, yy }, Players[pnum]._pdir, MIS_RNDTELEPORT, -1, pnum, 0, 2 * leveltype); + AddMissile(player.position.tile, { xx, yy }, player._pdir, MIS_RNDTELEPORT, -1, pnum, 0, 2 * leveltype); if (pnum != MyPlayerId) return false; @@ -3062,30 +3097,34 @@ bool OperateShrineHoly(int pnum) bool OperateShrineSacred(int pnum) { - if (deltaload || pnum != MyPlayerId) + if (deltaload) + return false; + if (pnum != MyPlayerId) return false; - Players[pnum]._pMemSpells |= GetSpellBitmask(SPL_CBOLT); + auto &player = Players[pnum]; + + player._pMemSpells |= GetSpellBitmask(SPL_CBOLT); - if (Players[pnum]._pSplLvl[SPL_CBOLT] < MAX_SPELL_LEVEL) - Players[pnum]._pSplLvl[SPL_CBOLT]++; - if (Players[pnum]._pSplLvl[SPL_CBOLT] < MAX_SPELL_LEVEL) - Players[pnum]._pSplLvl[SPL_CBOLT]++; + if (player._pSplLvl[SPL_CBOLT] < MAX_SPELL_LEVEL) + player._pSplLvl[SPL_CBOLT]++; + if (player._pSplLvl[SPL_CBOLT] < MAX_SPELL_LEVEL) + player._pSplLvl[SPL_CBOLT]++; - uint32_t t = Players[pnum]._pMaxManaBase / 10; - int v1 = Players[pnum]._pMana - Players[pnum]._pManaBase; - int v2 = Players[pnum]._pMaxMana - Players[pnum]._pMaxManaBase; - Players[pnum]._pManaBase -= t; - Players[pnum]._pMana -= t; - Players[pnum]._pMaxMana -= t; - Players[pnum]._pMaxManaBase -= t; - if (Players[pnum]._pMana >> 6 <= 0) { - Players[pnum]._pMana = v1; - Players[pnum]._pManaBase = 0; + uint32_t t = player._pMaxManaBase / 10; + int v1 = player._pMana - player._pManaBase; + int v2 = player._pMaxMana - player._pMaxManaBase; + player._pManaBase -= t; + player._pMana -= t; + player._pMaxMana -= t; + player._pMaxManaBase -= t; + if (player._pMana >> 6 <= 0) { + player._pMana = v1; + player._pManaBase = 0; } - if (Players[pnum]._pMaxMana >> 6 <= 0) { - Players[pnum]._pMaxMana = v2; - Players[pnum]._pMaxManaBase = 0; + if (player._pMaxMana >> 6 <= 0) { + player._pMaxMana = v2; + player._pMaxManaBase = 0; } InitDiabloMsg(EMSG_SHRINE_SACRED); @@ -3100,17 +3139,19 @@ bool OperateShrineSpiritual(int pnum) if (pnum != MyPlayerId) return false; - for (int8_t &gridItem : Players[pnum].InvGrid) { + auto &player = Players[pnum]; + + for (int8_t &gridItem : player.InvGrid) { if (gridItem == 0) { int r = 5 * leveltype + GenerateRnd(10 * leveltype); - DWORD t = Players[pnum]._pNumInv; // check - Players[pnum].InvList[t] = golditem; - Players[pnum].InvList[t]._iSeed = AdvanceRndSeed(); - Players[pnum]._pNumInv++; - gridItem = Players[pnum]._pNumInv; - Players[pnum].InvList[t]._ivalue = r; - Players[pnum]._pGold += r; - SetPlrHandGoldCurs(&Players[pnum].InvList[t]); + DWORD t = player._pNumInv; // check + player.InvList[t] = golditem; + player.InvList[t]._iSeed = AdvanceRndSeed(); + player._pNumInv++; + gridItem = player._pNumInv; + player.InvList[t]._ivalue = r; + player._pGold += r; + SetPlrHandGoldCurs(&player.InvList[t]); } } @@ -3129,10 +3170,12 @@ bool OperateShrineSpooky(int pnum) return true; } - Players[MyPlayerId]._pHitPoints = Players[MyPlayerId]._pMaxHP; - Players[MyPlayerId]._pHPBase = Players[MyPlayerId]._pMaxHPBase; - Players[MyPlayerId]._pMana = Players[MyPlayerId]._pMaxMana; - Players[MyPlayerId]._pManaBase = Players[MyPlayerId]._pMaxManaBase; + auto &myPlayer = Players[MyPlayerId]; + + myPlayer._pHitPoints = myPlayer._pMaxHP; + myPlayer._pHPBase = myPlayer._pMaxHPBase; + myPlayer._pMana = myPlayer._pMaxMana; + myPlayer._pManaBase = myPlayer._pMaxManaBase; InitDiabloMsg(EMSG_SHRINE_SPOOKY2); @@ -3214,26 +3257,28 @@ bool OperateShrineOrnate(int pnum) if (pnum != MyPlayerId) return false; - Players[pnum]._pMemSpells |= GetSpellBitmask(SPL_HBOLT); - if (Players[pnum]._pSplLvl[SPL_HBOLT] < MAX_SPELL_LEVEL) - Players[pnum]._pSplLvl[SPL_HBOLT]++; - if (Players[pnum]._pSplLvl[SPL_HBOLT] < MAX_SPELL_LEVEL) - Players[pnum]._pSplLvl[SPL_HBOLT]++; + auto &player = Players[pnum]; - uint32_t t = Players[pnum]._pMaxManaBase / 10; - int v1 = Players[pnum]._pMana - Players[pnum]._pManaBase; - int v2 = Players[pnum]._pMaxMana - Players[pnum]._pMaxManaBase; - Players[pnum]._pManaBase -= t; - Players[pnum]._pMana -= t; - Players[pnum]._pMaxMana -= t; - Players[pnum]._pMaxManaBase -= t; - if (Players[pnum]._pMana >> 6 <= 0) { - Players[pnum]._pMana = v1; - Players[pnum]._pManaBase = 0; + player._pMemSpells |= GetSpellBitmask(SPL_HBOLT); + if (player._pSplLvl[SPL_HBOLT] < MAX_SPELL_LEVEL) + player._pSplLvl[SPL_HBOLT]++; + if (player._pSplLvl[SPL_HBOLT] < MAX_SPELL_LEVEL) + player._pSplLvl[SPL_HBOLT]++; + + uint32_t t = player._pMaxManaBase / 10; + int v1 = player._pMana - player._pManaBase; + int v2 = player._pMaxMana - player._pMaxManaBase; + player._pManaBase -= t; + player._pMana -= t; + player._pMaxMana -= t; + player._pMaxManaBase -= t; + if (player._pMana >> 6 <= 0) { + player._pMana = v1; + player._pManaBase = 0; } - if (Players[pnum]._pMaxMana >> 6 <= 0) { - Players[pnum]._pMaxMana = v2; - Players[pnum]._pMaxManaBase = 0; + if (player._pMaxMana >> 6 <= 0) { + player._pMaxMana = v2; + player._pMaxManaBase = 0; } InitDiabloMsg(EMSG_SHRINE_ORNATE); @@ -3248,15 +3293,17 @@ bool OperateShrineGlimmering(int pnum) if (pnum != MyPlayerId) return false; - for (auto &item : Players[pnum].InvBody) { + auto &player = Players[pnum]; + + for (auto &item : player.InvBody) { if (item._iMagical != ITEM_QUALITY_NORMAL && !item._iIdentified) item._iIdentified = true; } - for (int j = 0; j < Players[pnum]._pNumInv; j++) { - if (Players[pnum].InvList[j]._iMagical != ITEM_QUALITY_NORMAL && !Players[pnum].InvList[j]._iIdentified) - Players[pnum].InvList[j]._iIdentified = true; + for (int j = 0; j < player._pNumInv; j++) { + if (player.InvList[j]._iMagical != ITEM_QUALITY_NORMAL && !player.InvList[j]._iIdentified) + player.InvList[j]._iIdentified = true; } - for (auto &item : Players[pnum].SpdList) { + for (auto &item : player.SpdList) { if (item._iMagical != ITEM_QUALITY_NORMAL && !item._iIdentified) item._iIdentified = true; // belt items can't be magical? } @@ -3310,7 +3357,9 @@ bool OperateShrineOily(int pnum, Point spawnPosition) if (pnum != MyPlayerId) return false; - switch (Players[MyPlayerId]._pClass) { + auto &myPlayer = Players[MyPlayerId]; + + switch (myPlayer._pClass) { case HeroClass::Warrior: ModifyPlrStr(MyPlayerId, 2); break; @@ -3337,8 +3386,8 @@ bool OperateShrineOily(int pnum, Point spawnPosition) AddMissile( spawnPosition, - Players[MyPlayerId].position.tile, - Players[MyPlayerId]._pdir, + myPlayer.position.tile, + myPlayer._pdir, MIS_FIREWALL, TARGET_PLAYERS, -1, @@ -3357,7 +3406,9 @@ bool OperateShrineGlowing(int pnum) if (pnum != MyPlayerId) return false; - int playerXP = Players[MyPlayerId]._pExperience; + auto &myPlayer = Players[MyPlayerId]; + + int playerXP = myPlayer._pExperience; int magicGain = playerXP / 1000; int xpLoss = 0; if (playerXP > 5000) { @@ -3365,7 +3416,7 @@ bool OperateShrineGlowing(int pnum) xpLoss = static_cast(playerXP * 0.95); } ModifyPlrMag(MyPlayerId, magicGain); - Players[MyPlayerId]._pExperience = xpLoss; + myPlayer._pExperience = xpLoss; if (sgOptions.Gameplay.bExperienceBar) { force_redraw = 255; @@ -3385,8 +3436,10 @@ bool OperateShrineMendicant(int pnum) if (pnum != MyPlayerId) return false; - int gold = Players[MyPlayerId]._pGold / 2; - AddPlrExperience(MyPlayerId, Players[MyPlayerId]._pLevel, gold); + auto &myPlayer = Players[MyPlayerId]; + + int gold = myPlayer._pGold / 2; + AddPlrExperience(MyPlayerId, myPlayer._pLevel, gold); TakePlrsMoney(gold); CheckStats(Players[pnum]); @@ -3409,12 +3462,14 @@ bool OperateShrineSparkling(int pnum, Point spawnPosition) if (pnum != MyPlayerId) return false; - AddPlrExperience(MyPlayerId, Players[MyPlayerId]._pLevel, 1000 * currlevel); + auto &myPlayer = Players[MyPlayerId]; + + AddPlrExperience(MyPlayerId, myPlayer._pLevel, 1000 * currlevel); AddMissile( spawnPosition, - Players[MyPlayerId].position.tile, - Players[MyPlayerId]._pdir, + myPlayer.position.tile, + myPlayer._pdir, MIS_FLASH, TARGET_PLAYERS, -1, @@ -3441,10 +3496,12 @@ bool OperateShrineTown(int pnum, Point spawnPosition) if (pnum != MyPlayerId) return false; + auto &myPlayer = Players[MyPlayerId]; + AddMissile( spawnPosition, - Players[MyPlayerId].position.tile, - Players[MyPlayerId]._pdir, + myPlayer.position.tile, + myPlayer._pdir, MIS_TOWN, TARGET_PLAYERS, pnum, @@ -3463,8 +3520,10 @@ bool OperateShrineShimmering(int pnum) if (pnum != MyPlayerId) return false; - Players[pnum]._pMana = Players[pnum]._pMaxMana; - Players[pnum]._pManaBase = Players[pnum]._pMaxManaBase; + auto &player = Players[pnum]; + + player._pMana = player._pMaxMana; + player._pManaBase = player._pMaxManaBase; InitDiabloMsg(EMSG_SHRINE_SHIMMERING); @@ -3506,8 +3565,10 @@ bool OperateShrineMurphys(int pnum) if (pnum != MyPlayerId) return false; + auto &myPlayer = Players[MyPlayerId]; + bool broke = false; - for (auto &item : Players[MyPlayerId].InvBody) { + for (auto &item : myPlayer.InvBody) { if (!item.isEmpty() && GenerateRnd(3) == 0) { if (item._iDurability != DUR_INDESTRUCTIBLE) { if (item._iDurability > 0) { @@ -3519,7 +3580,7 @@ bool OperateShrineMurphys(int pnum) } } if (!broke) { - TakePlrsMoney(Players[MyPlayerId]._pGold / 3); + TakePlrsMoney(myPlayer._pGold / 3); } InitDiabloMsg(EMSG_SHRINE_MURPHYS); @@ -3839,6 +3900,7 @@ void OperateCauldron(int pnum, int i, _sfx_id sType) bool OperateFountains(int pnum, int i) { + auto &player = Players[pnum]; bool applied = false; SetRndSeed(Objects[i]._oRndSeed); switch (Objects[i]._otype) { @@ -3848,13 +3910,13 @@ bool OperateFountains(int pnum, int i) if (pnum != MyPlayerId) return false; - if (Players[pnum]._pHitPoints < Players[pnum]._pMaxHP) { + if (player._pHitPoints < player._pMaxHP) { PlaySfxLoc(LS_FOUNTAIN, Objects[i].position); - Players[pnum]._pHitPoints += 64; - Players[pnum]._pHPBase += 64; - if (Players[pnum]._pHitPoints > Players[pnum]._pMaxHP) { - Players[pnum]._pHitPoints = Players[pnum]._pMaxHP; - Players[pnum]._pHPBase = Players[pnum]._pMaxHPBase; + player._pHitPoints += 64; + player._pHPBase += 64; + if (player._pHitPoints > player._pMaxHP) { + player._pHitPoints = player._pMaxHP; + player._pHPBase = player._pMaxHPBase; } applied = true; } else @@ -3866,14 +3928,14 @@ bool OperateFountains(int pnum, int i) if (pnum != MyPlayerId) return false; - if (Players[pnum]._pMana < Players[pnum]._pMaxMana) { + if (player._pMana < player._pMaxMana) { PlaySfxLoc(LS_FOUNTAIN, Objects[i].position); - Players[pnum]._pMana += 64; - Players[pnum]._pManaBase += 64; - if (Players[pnum]._pMana > Players[pnum]._pMaxMana) { - Players[pnum]._pMana = Players[pnum]._pMaxMana; - Players[pnum]._pManaBase = Players[pnum]._pMaxManaBase; + player._pMana += 64; + player._pManaBase += 64; + if (player._pMana > player._pMaxMana) { + player._pMana = player._pMaxMana; + player._pManaBase = player._pMaxManaBase; } applied = true; @@ -3889,9 +3951,9 @@ bool OperateFountains(int pnum, int i) if (deltaload) return false; AddMissile( - Players[pnum].position.tile, - Players[pnum].position.tile, - Players[pnum]._pdir, + player.position.tile, + player.position.tile, + player._pdir, MIS_INFRA, -1, pnum, @@ -3935,7 +3997,7 @@ bool OperateFountains(int pnum, int i) } } - CheckStats(Players[pnum]); + CheckStats(player); applied = true; if (pnum == MyPlayerId) NetSendCmdParam1(false, CMD_OPERATEOBJ, i); @@ -5268,10 +5330,11 @@ void BreakObject(int pnum, int oi) { int objdam = 10; if (pnum != -1) { - int mind = Players[pnum]._pIMinDam; - int maxd = Players[pnum]._pIMaxDam; + auto &player = Players[pnum]; + int mind = player._pIMinDam; + int maxd = player._pIMaxDam; objdam = GenerateRnd(maxd - mind + 1) + mind; - objdam += Players[pnum]._pDamageMod + Players[pnum]._pIBonusDamMod + objdam * Players[pnum]._pIBonusDam / 100; + objdam += player._pDamageMod + player._pIBonusDamMod + objdam * player._pIBonusDam / 100; } switch (Objects[oi]._otype) { diff --git a/Source/palette.cpp b/Source/palette.cpp index 372e66960..988a7b8c5 100644 --- a/Source/palette.cpp +++ b/Source/palette.cpp @@ -355,41 +355,41 @@ void palette_update_caves() void palette_update_crypt() { - static int LaveDelay = 0; - static int GlowDelay = 0; + static int laveDelay = 0; + static int glowDelay = 0; - if (LaveDelay > 1) { + if (laveDelay > 1) { CycleColorsReverse(1, 15); - LaveDelay = 0; + laveDelay = 0; } else { - LaveDelay++; + laveDelay++; } - if (GlowDelay > 0) { + if (glowDelay > 0) { CycleColorsReverse(16, 31); palette_update(); - GlowDelay++; + glowDelay++; } else { - GlowDelay = 1; + glowDelay = 1; } } void palette_update_hive() { - static int WaveDelay = 0; - static int BubbleDelay = 0; + static int waveDelay = 0; + static int bubbleDelay = 0; - if (WaveDelay == 2) { + if (waveDelay == 2) { CycleColorsReverse(1, 8); - WaveDelay = 0; + waveDelay = 0; } else { - WaveDelay++; + waveDelay++; } - if (BubbleDelay == 2) { + if (bubbleDelay == 2) { CycleColorsReverse(9, 15); palette_update(); - BubbleDelay = 0; + bubbleDelay = 0; } else { - BubbleDelay++; + bubbleDelay++; } } diff --git a/Source/pfile.cpp b/Source/pfile.cpp index 2246365f0..0fe0bf224 100644 --- a/Source/pfile.cpp +++ b/Source/pfile.cpp @@ -273,11 +273,13 @@ void pfile_write_hero(bool writeGameData, bool clearTables) RenameTempToPerm(); } PkPlayerStruct pkplr; - PackPlayer(&pkplr, Players[MyPlayerId], !gbIsMultiplayer); + auto &myPlayer = Players[MyPlayerId]; + + PackPlayer(&pkplr, myPlayer, !gbIsMultiplayer); EncodeHero(&pkplr); if (!gbVanilla) { SaveHotkeys(); - SaveHeroItems(Players[MyPlayerId]); + SaveHeroItems(myPlayer); } } @@ -297,14 +299,15 @@ bool pfile_ui_set_hero_infos(bool (*uiAddHeroInfo)(_uiheroinfo *)) if (hasSaveGame) pkplr.bIsHellfire = gbIsHellfireSaveGame ? 1 : 0; + auto &player = Players[0]; UnPackPlayer(&pkplr, 0, false); CloseArchive(&archive); - LoadHeroItems(Players[0]); - RemoveEmptyInventory(Players[0]); + LoadHeroItems(player); + RemoveEmptyInventory(player); CalcPlrInv(0, false); - Game2UiPlayer(Players[0], &uihero, hasSaveGame); + Game2UiPlayer(player, &uihero, hasSaveGame); uiAddHeroInfo(&uihero); } CloseArchive(&archive); @@ -385,10 +388,12 @@ void pfile_read_player_from_save(uint32_t saveNum, int playerId) CloseArchive(&archive); + auto &player = Players[playerId]; + UnPackPlayer(&pkplr, playerId, false); - LoadHeroItems(Players[playerId]); - RemoveEmptyInventory(Players[playerId]); + LoadHeroItems(player); + RemoveEmptyInventory(player); CalcPlrInv(playerId, false); } diff --git a/Source/plrmsg.cpp b/Source/plrmsg.cpp index 14ccbcbca..c706f0e1c 100644 --- a/Source/plrmsg.cpp +++ b/Source/plrmsg.cpp @@ -83,9 +83,10 @@ void SendPlrMsg(int pnum, const char *pszStr) plr_msg_slot = (plr_msg_slot + 1) & (PMSG_COUNT - 1); pMsg->player = pnum; pMsg->time = SDL_GetTicks(); - assert(strlen(Players[pnum]._pName) < PLR_NAME_LEN); + auto &player = Players[pnum]; + assert(strlen(player._pName) < PLR_NAME_LEN); assert(strlen(pszStr) < MAX_SEND_STR_LEN); - strcpy(pMsg->str, fmt::format(_(/* TRANSLATORS: Shown if player presses "v" button. {:s} is player name, {:d} is level, {:s} is location */ "{:s} (lvl {:d}): {:s}"), Players[pnum]._pName, Players[pnum]._pLevel, pszStr).c_str()); + strcpy(pMsg->str, fmt::format(_(/* TRANSLATORS: Shown if player presses "v" button. {:s} is player name, {:d} is level, {:s} is location */ "{:s} (lvl {:d}): {:s}"), player._pName, player._pLevel, pszStr).c_str()); } void ClearPlrMsg() diff --git a/Source/quests.cpp b/Source/quests.cpp index 21190c856..a316efe89 100644 --- a/Source/quests.cpp +++ b/Source/quests.cpp @@ -313,23 +313,25 @@ void CheckQuestKill(const MonsterStruct &monster, bool sendmsg) if (gbIsSpawn) return; + auto &myPlayer = Players[MyPlayerId]; + if (monster.MType->mtype == MT_SKING) { Quests[Q_SKELKING]._qactive = QUEST_DONE; - Players[MyPlayerId].Say(HeroSpeech::RestWellLeoricIllFindYourSon, 30); + myPlayer.Say(HeroSpeech::RestWellLeoricIllFindYourSon, 30); if (sendmsg) NetSendCmdQuest(true, Q_SKELKING); } else if (monster.MType->mtype == MT_CLEAVER) { Quests[Q_BUTCHER]._qactive = QUEST_DONE; - Players[MyPlayerId].Say(HeroSpeech::TheSpiritsOfTheDeadAreNowAvenged, 30); + myPlayer.Say(HeroSpeech::TheSpiritsOfTheDeadAreNowAvenged, 30); if (sendmsg) NetSendCmdQuest(true, Q_BUTCHER); } else if (monster._uniqtype - 1 == UMT_GARBUD) { //"Gharbad the Weak" Quests[Q_GARBUD]._qactive = QUEST_DONE; - Players[MyPlayerId].Say(HeroSpeech::ImNotImpressed, 30); + myPlayer.Say(HeroSpeech::ImNotImpressed, 30); } else if (monster._uniqtype - 1 == UMT_ZHAR) { //"Zhar the Mad" Quests[Q_ZHAR]._qactive = QUEST_DONE; - Players[MyPlayerId].Say(HeroSpeech::ImSorryDidIBreakYourConcentration, 30); + myPlayer.Say(HeroSpeech::ImSorryDidIBreakYourConcentration, 30); } else if (monster._uniqtype - 1 == UMT_LAZARUS && gbIsMultiplayer) { //"Arch-Bishop Lazarus" Quests[Q_BETRAYER]._qactive = QUEST_DONE; Quests[Q_BETRAYER]._qvar1 = 7; @@ -344,7 +346,7 @@ void CheckQuestKill(const MonsterStruct &monster, bool sendmsg) } } } - Players[MyPlayerId].Say(HeroSpeech::YourMadnessEndsHereBetrayer, 30); + myPlayer.Say(HeroSpeech::YourMadnessEndsHereBetrayer, 30); if (sendmsg) { NetSendCmdQuest(true, Q_BETRAYER); NetSendCmdQuest(true, Q_DIABLO); @@ -356,10 +358,10 @@ void CheckQuestKill(const MonsterStruct &monster, bool sendmsg) Quests[Q_BETRAYER]._qvar2 = 4; Quests[Q_DIABLO]._qactive = QUEST_ACTIVE; AddMissile({ 35, 32 }, { 35, 32 }, 0, MIS_RPORTAL, TARGET_MONSTERS, MyPlayerId, 0, 0); - Players[MyPlayerId].Say(HeroSpeech::YourMadnessEndsHereBetrayer, 30); + myPlayer.Say(HeroSpeech::YourMadnessEndsHereBetrayer, 30); } else if (monster._uniqtype - 1 == UMT_WARLORD) { //"Warlord of Blood" Quests[Q_WARLORD]._qactive = QUEST_DONE; - Players[MyPlayerId].Say(HeroSpeech::YourReignOfPainHasEnded, 30); + myPlayer.Say(HeroSpeech::YourReignOfPainHasEnded, 30); } } diff --git a/Source/scrollrt.cpp b/Source/scrollrt.cpp index 77662af0c..a7b01c088 100644 --- a/Source/scrollrt.cpp +++ b/Source/scrollrt.cpp @@ -485,9 +485,10 @@ static void DrawPlayerIconHelper(const Surface &out, int pnum, missile_graphic_i */ static void DrawPlayerIcons(const Surface &out, int pnum, int x, int y, bool lighting) { - if (Players[pnum].pManaShield) + auto &player = Players[pnum]; + if (player.pManaShield) DrawPlayerIconHelper(out, pnum, MFILE_MANASHLD, x, y, lighting); - if (Players[pnum].wReflections > 0) + if (player.wReflections > 0) DrawPlayerIconHelper(out, pnum, MFILE_REFLECT, x, y + 16, lighting); } diff --git a/Source/spells.cpp b/Source/spells.cpp index e20e268d4..dea7263db 100644 --- a/Source/spells.cpp +++ b/Source/spells.cpp @@ -68,30 +68,31 @@ void UseMana(int id, spell_id sn) { int ma; // mana cost - if (id == MyPlayerId) { - switch (Players[id]._pSplType) { - case RSPLTYPE_SKILL: - case RSPLTYPE_INVALID: - break; - case RSPLTYPE_SCROLL: - RemoveScroll(Players[id]); - break; - case RSPLTYPE_CHARGES: - UseStaffCharge(Players[id]); - break; - case RSPLTYPE_SPELL: -#ifdef _DEBUG - if (!debug_mode_key_inverted_v) { -#endif - ma = GetManaAmount(Players[id], sn); - Players[id]._pMana -= ma; - Players[id]._pManaBase -= ma; - drawmanaflag = true; + if (id != MyPlayerId) + return; + + auto &myPlayer = Players[MyPlayerId]; + + switch (myPlayer._pSplType) { + case RSPLTYPE_SKILL: + case RSPLTYPE_INVALID: + break; + case RSPLTYPE_SCROLL: + RemoveScroll(myPlayer); + break; + case RSPLTYPE_CHARGES: + UseStaffCharge(myPlayer); + break; + case RSPLTYPE_SPELL: #ifdef _DEBUG - } -#endif + if (debug_mode_key_inverted_v) break; - } +#endif + ma = GetManaAmount(myPlayer, sn); + myPlayer._pMana -= ma; + myPlayer._pManaBase -= ma; + drawmanaflag = true; + break; } } diff --git a/Source/tmsg.cpp b/Source/tmsg.cpp index 7f4462f5d..3f23f396c 100644 --- a/Source/tmsg.cpp +++ b/Source/tmsg.cpp @@ -5,8 +5,8 @@ */ #include -#include "tmsg.h" #include "diablo.h" +#include "tmsg.h" namespace devilution { diff --git a/Source/town.cpp b/Source/town.cpp index f54e14291..9262e0749 100644 --- a/Source/town.cpp +++ b/Source/town.cpp @@ -168,14 +168,15 @@ void DrlgTPass3() FillSector("Levels\\TownData\\Sector4s.DUN", 0, 0); if (gbIsSpawn || !gbIsMultiplayer) { - if (gbIsSpawn || ((Players[MyPlayerId].pTownWarps & 1) == 0 && (!gbIsHellfire || Players[MyPlayerId]._pLevel < 10))) { + auto &myPlayer = Players[MyPlayerId]; + if (gbIsSpawn || ((myPlayer.pTownWarps & 1) == 0 && (!gbIsHellfire || myPlayer._pLevel < 10))) { FillTile(48, 20, 320); } - if (gbIsSpawn || ((Players[MyPlayerId].pTownWarps & 2) == 0 && (!gbIsHellfire || Players[MyPlayerId]._pLevel < 15))) { + if (gbIsSpawn || ((myPlayer.pTownWarps & 2) == 0 && (!gbIsHellfire || myPlayer._pLevel < 15))) { FillTile(16, 68, 332); FillTile(16, 70, 331); } - if (gbIsSpawn || ((Players[MyPlayerId].pTownWarps & 4) == 0 && (!gbIsHellfire || Players[MyPlayerId]._pLevel < 20))) { + if (gbIsSpawn || ((myPlayer.pTownWarps & 4) == 0 && (!gbIsHellfire || myPlayer._pLevel < 20))) { for (int x = 36; x < 46; x++) { FillTile(x, 78, GenerateRnd(4) + 1); }