diff --git a/Source/items.cpp b/Source/items.cpp index 98150c36c..f7ba6ea88 100644 --- a/Source/items.cpp +++ b/Source/items.cpp @@ -886,7 +886,7 @@ void CalcPlrItemVals(int playerId, bool Loadgfx) player._pgfxnum = g; player._pGFXLoad = 0; SetPlrAnims(player); - LoadPlrGFX(playerId, static_cast(PFILE_STAND | PFILE_WALK)); + LoadPlrGFX(player, static_cast(PFILE_STAND | PFILE_WALK)); if (player._pmode == PM_STAND) { player._pAnimWidth = player._pNWidth; player.AnimInfo.ChangeAnimationData(player._pNAnim[player._pdir], player._pNFrames, 3); diff --git a/Source/msg.cpp b/Source/msg.cpp index 6b3021724..5c4657b4a 100644 --- a/Source/msg.cpp +++ b/Source/msg.cpp @@ -2218,6 +2218,7 @@ static DWORD On_ACK_PLRINFO(TCmd *pCmd, int pnum) static DWORD On_PLAYER_JOINLEVEL(TCmd *pCmd, int pnum) { auto *p = (TCmdLocParam1 *)pCmd; + auto &player = plr[pnum]; if (gbBufferMsgs == 1) msg_send_packet(pnum, p, sizeof(*p)); @@ -2235,13 +2236,13 @@ static DWORD On_PLAYER_JOINLEVEL(TCmd *pCmd, int pnum) plr[pnum].plrlevel = p->wParam1; plr[pnum]._pGFXLoad = 0; if (currlevel == plr[pnum].plrlevel) { - LoadPlrGFX(pnum, PFILE_STAND); + LoadPlrGFX(player, PFILE_STAND); SyncInitPlr(pnum); if ((plr[pnum]._pHitPoints >> 6) > 0) StartStand(pnum, DIR_S); else { plr[pnum]._pgfxnum = 0; - LoadPlrGFX(pnum, PFILE_DEATH); + LoadPlrGFX(player, PFILE_DEATH); plr[pnum]._pmode = PM_DEATH; NewPlrAnim(plr[pnum], plr[pnum]._pDAnim[DIR_S], plr[pnum]._pDFrames, 1, plr[pnum]._pDWidth); plr[pnum].AnimInfo.CurrentFrame = plr[pnum].AnimInfo.NumberOfFrames - 1; diff --git a/Source/multi.cpp b/Source/multi.cpp index 27288ba10..7c1b63c7d 100644 --- a/Source/multi.cpp +++ b/Source/multi.cpp @@ -829,6 +829,8 @@ void recv_plrinfo(int pnum, TCmdPlrInfoHdr *p, bool recv) } assert((DWORD)pnum < MAX_PLRS); + auto &player = plr[pnum]; + if (sgwPackPlrOffsetTbl[pnum] != p->wOffset) { sgwPackPlrOffsetTbl[pnum] = 0; if (p->wOffset != 0) { @@ -864,7 +866,7 @@ void recv_plrinfo(int pnum, TCmdPlrInfoHdr *p, bool recv) } EventPlrMsg(fmt::format(szEvent, plr[pnum]._pName, plr[pnum]._pLevel).c_str()); - LoadPlrGFX(pnum, PFILE_STAND); + LoadPlrGFX(player, PFILE_STAND); SyncInitPlr(pnum); if (plr[pnum].plrlevel == currlevel) { @@ -872,7 +874,7 @@ void recv_plrinfo(int pnum, TCmdPlrInfoHdr *p, bool recv) StartStand(pnum, DIR_S); } else { plr[pnum]._pgfxnum = 0; - LoadPlrGFX(pnum, PFILE_DEATH); + LoadPlrGFX(player, PFILE_DEATH); plr[pnum]._pmode = PM_DEATH; NewPlrAnim(plr[pnum], plr[pnum]._pDAnim[DIR_S], plr[pnum]._pDFrames, 1, plr[pnum]._pDWidth); plr[pnum].AnimInfo.CurrentFrame = plr[pnum].AnimInfo.NumberOfFrames - 1; diff --git a/Source/player.cpp b/Source/player.cpp index 8370cf721..ebdb628f1 100644 --- a/Source/player.cpp +++ b/Source/player.cpp @@ -383,7 +383,7 @@ void SetPlayerGPtrs(byte *pData, byte **pAnim) } } -void LoadPlrGFX(int pnum, player_graphic gfxflag) +void LoadPlrGFX(PlayerStruct &player, player_graphic gfxflag) { char prefix[16]; char pszName[256]; @@ -391,11 +391,6 @@ void LoadPlrGFX(int pnum, player_graphic gfxflag) byte *pData; byte **pAnim; - if ((DWORD)pnum >= MAX_PLRS) { - app_fatal("LoadPlrGFX: illegal player %i", pnum); - } - auto &player = plr[pnum]; - HeroClass c = player._pClass; if (c == HeroClass::Bard && hfbard_mpq == nullptr) { c = HeroClass::Rogue; @@ -508,9 +503,9 @@ void InitPlayerGFX(int pnum) if (player._pHitPoints >> 6 == 0) { player._pgfxnum = 0; - LoadPlrGFX(pnum, PFILE_DEATH); + LoadPlrGFX(player, PFILE_DEATH); } else { - LoadPlrGFX(pnum, PFILE_NONDEATH); + LoadPlrGFX(player, PFILE_NONDEATH); } } @@ -1317,7 +1312,7 @@ void StartStand(int pnum, Direction dir) if (!player._pInvincible || player._pHitPoints != 0 || pnum != myplr) { if ((player._pGFXLoad & PFILE_STAND) == 0) { - LoadPlrGFX(pnum, PFILE_STAND); + LoadPlrGFX(player, PFILE_STAND); } NewPlrAnim(player, player._pNAnim[dir], player._pNFrames, 3, player._pNWidth); @@ -1482,7 +1477,7 @@ void StartWalk(int pnum, int xvel, int yvel, int xoff, int yoff, int xadd, int y //Load walk animation in case it's not loaded yet if ((player._pGFXLoad & PFILE_WALK) == 0) { - LoadPlrGFX(pnum, PFILE_WALK); + LoadPlrGFX(player, PFILE_WALK); } //Start walk animation @@ -1525,7 +1520,7 @@ void StartAttack(int pnum, Direction d) } if ((player._pGFXLoad & PFILE_ATTACK) == 0) { - LoadPlrGFX(pnum, PFILE_ATTACK); + LoadPlrGFX(player, PFILE_ATTACK); } int skippedAnimationFrames = 0; @@ -1561,7 +1556,7 @@ void StartRangeAttack(int pnum, Direction d, int cx, int cy) } if ((player._pGFXLoad & PFILE_ATTACK) == 0) { - LoadPlrGFX(pnum, PFILE_ATTACK); + LoadPlrGFX(player, PFILE_ATTACK); } int skippedAnimationFrames = 0; @@ -1597,7 +1592,7 @@ void StartPlrBlock(int pnum, Direction dir) PlaySfxLoc(IS_ISWORD, player.position.tile.x, player.position.tile.y); if ((player._pGFXLoad & PFILE_BLOCK) == 0) { - LoadPlrGFX(pnum, PFILE_BLOCK); + LoadPlrGFX(player, PFILE_BLOCK); } int skippedAnimationFrames = 0; @@ -1631,19 +1626,19 @@ void StartSpell(int pnum, Direction d, int cx, int cy) switch (spelldata[player._pSpell].sType) { case STYPE_FIRE: if ((player._pGFXLoad & PFILE_FIRE) == 0) { - LoadPlrGFX(pnum, PFILE_FIRE); + LoadPlrGFX(player, PFILE_FIRE); } NewPlrAnim(player, player._pFAnim[d], player._pSFrames, 0, player._pSWidth, animationFlags, 0, player._pSFNum); break; case STYPE_LIGHTNING: if ((player._pGFXLoad & PFILE_LIGHTNING) == 0) { - LoadPlrGFX(pnum, PFILE_LIGHTNING); + LoadPlrGFX(player, PFILE_LIGHTNING); } NewPlrAnim(player, player._pLAnim[d], player._pSFrames, 0, player._pSWidth, animationFlags, 0, player._pSFNum); break; case STYPE_MAGIC: if ((player._pGFXLoad & PFILE_MAGIC) == 0) { - LoadPlrGFX(pnum, PFILE_MAGIC); + LoadPlrGFX(player, PFILE_MAGIC); } NewPlrAnim(player, player._pTAnim[d], player._pSFrames, 0, player._pSWidth, animationFlags, 0, player._pSFNum); break; @@ -1743,7 +1738,7 @@ void StartPlrHit(int pnum, int dam, bool forcehit) Direction pd = player._pdir; if ((player._pGFXLoad & PFILE_HIT) == 0) { - LoadPlrGFX(pnum, PFILE_HIT); + LoadPlrGFX(player, PFILE_HIT); } int skippedAnimationFrames = 0; @@ -1852,7 +1847,7 @@ StartPlayerKill(int pnum, int earflag) } if ((player._pGFXLoad & PFILE_DEATH) == 0) { - LoadPlrGFX(pnum, PFILE_DEATH); + LoadPlrGFX(player, PFILE_DEATH); } NewPlrAnim(player, player._pDAnim[player._pdir], player._pDFrames, 1, player._pDWidth); diff --git a/Source/player.h b/Source/player.h index 599c21874..306b49214 100644 --- a/Source/player.h +++ b/Source/player.h @@ -410,7 +410,7 @@ extern PlayerStruct plr[MAX_PLRS]; extern bool deathflag; extern int ToBlkTbl[enum_size::value]; -void LoadPlrGFX(int pnum, player_graphic gfxflag); +void LoadPlrGFX(PlayerStruct &player, player_graphic gfxflag); void InitPlayerGFX(int pnum); void InitPlrGFXMem(PlayerStruct &player); void FreePlayerGFX(PlayerStruct &player);