Browse Source

Pass players by reference instead of an index

pull/4813/head
Anders Jenbo 4 years ago
parent
commit
d82f2ebc9e
  1. 29
      Source/inv.cpp
  2. 4
      Source/inv.h
  3. 16
      Source/items.cpp
  4. 2
      Source/loadsave.cpp
  5. 4
      Source/monster.cpp
  6. 16
      Source/msg.cpp
  7. 130
      Source/objects.cpp
  8. 185
      Source/player.cpp
  9. 16
      Source/player.h
  10. 2
      Source/qol/stash.cpp
  11. 2
      Source/stores.cpp

29
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<Point> 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);

4
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<Point> 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

16
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;

2
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;

4
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);

16
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);

130
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<CharacterAttribute>(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<int>(std::min<uint32_t>(myPlayer._pExperience / 1000, 5)));
ModifyPlrMag(player, static_cast<int>(std::min<uint32_t>(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<uint32_t>(myPlayer._pExperience * 0.95);
if (player._pExperience > 5000)
player._pExperience = static_cast<uint32_t>(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;
}
}

185
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<AnimationDistributionFlags>(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);
}
}

16
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);

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

2
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;
}

Loading…
Cancel
Save