diff --git a/Source/missiles.cpp b/Source/missiles.cpp index d50593b09..7094f1fa8 100644 --- a/Source/missiles.cpp +++ b/Source/missiles.cpp @@ -251,7 +251,7 @@ bool MonsterMHit(int pnum, int monsterId, int mindam, int maxdam, int dist, miss if (monster._mmode != MonsterMode::Petrified && MissilesData[t].mType == 0 && HasAnyOf(player._pIFlags, ItemSpecialEffect::Knockback)) M_GetKnockback(monster); if (monster.type().type != MT_GOLEM) - M_StartHit(monsterId, pnum, dam); + M_StartHit(monster, pnum, dam); } if (monster._msquelch == 0) { @@ -877,7 +877,7 @@ bool MonsterTrapHit(int monsterId, int mindam, int maxdam, int dist, missile_id PlayEffect(monster, 1); } else { if (monster.type().type != MT_GOLEM) - M_StartHit(monsterId, dam); + M_StartHit(monster, dam); } return true; } diff --git a/Source/monster.cpp b/Source/monster.cpp index 78385fea7..3c0a74499 100644 --- a/Source/monster.cpp +++ b/Source/monster.cpp @@ -1287,7 +1287,7 @@ void CheckReflect(int monsterId, int pnum, int dam) if (monster._mhitpoints >> 6 <= 0) M_StartKill(monsterId, pnum); else - M_StartHit(monsterId, pnum, mdam); + M_StartHit(monster, pnum, mdam); } void MonsterAttackPlayer(int monsterId, int pnum, int hit, int minDam, int maxDam) @@ -1375,7 +1375,7 @@ void MonsterAttackPlayer(int monsterId, int pnum, int hit, int minDam, int maxDa if (monster._mhitpoints >> 6 <= 0) M_StartKill(monsterId, pnum); else - M_StartHit(monsterId, pnum, mdam); + M_StartHit(monster, pnum, mdam); } if ((monster._mFlags & MFLAG_NOLIFESTEAL) == 0 && monster.type().type == MT_SKING && gbIsMultiplayer) monster._mhitpoints += dam; @@ -3886,10 +3886,8 @@ void M_GetKnockback(Monster &monster) StartMonsterGotHit(monster); } -void M_StartHit(int monsterId, int dam) +void M_StartHit(Monster &monster, int dam) { - Monster &monster = Monsters[monsterId]; - PlayEffect(monster, 1); if (IsAnyOf(monster.type().type, MT_SNEAK, MT_STALKER, MT_UNSEEN, MT_ILLWEAV) || dam >> 6 >= monster.mLevel + 3) { @@ -3907,14 +3905,12 @@ void M_StartHit(int monsterId, int dam) } } -void M_StartHit(int monsterId, int pnum, int dam) +void M_StartHit(Monster &monster, int pnum, int dam) { - Monster &monster = Monsters[monsterId]; - monster.mWhoHit |= 1 << pnum; if (pnum == MyPlayerId) { delta_monster_hp(monster, *MyPlayer); - NetSendCmdMonDmg(false, monsterId, dam); + NetSendCmdMonDmg(false, monster.getId(), dam); } if (IsAnyOf(monster.type().type, MT_SNEAK, MT_STALKER, MT_UNSEEN, MT_ILLWEAV) || dam >> 6 >= monster.mLevel + 3) { monster._menemy = pnum; @@ -3923,7 +3919,7 @@ void M_StartHit(int monsterId, int pnum, int dam) monster._mdir = GetMonsterDirection(monster); } - M_StartHit(monsterId, dam); + M_StartHit(monster, dam); } void StartMonsterDeath(Monster &monster, int pnum, bool sendmsg) @@ -4625,7 +4621,7 @@ void MissToMonst(Missile &missile, Point position) monster.position.tile = position; M_StartStand(monster, monster._mdir); if ((monster._mFlags & MFLAG_TARGETS_MONSTER) == 0) - M_StartHit(monsterId, 0); + M_StartHit(monster, 0); else HitMonster(monsterId, 0); diff --git a/Source/monster.h b/Source/monster.h index de7b9d0b7..a7782e4eb 100644 --- a/Source/monster.h +++ b/Source/monster.h @@ -307,8 +307,8 @@ bool M_Talker(const Monster &monster); void M_StartStand(Monster &monster, Direction md); void M_ClearSquares(const Monster &monster); void M_GetKnockback(Monster &monster); -void M_StartHit(int monsterId, int dam); -void M_StartHit(int monsterId, int pnum, int dam); +void M_StartHit(Monster &monster, int dam); +void M_StartHit(Monster &monster, int pnum, int dam); void StartMonsterDeath(Monster &monster, int pnum, bool sendmsg); void M_StartKill(int monsterId, int pnum); void M_SyncStartKill(int monsterId, Point position, int pnum); diff --git a/Source/msg.cpp b/Source/msg.cpp index b32dcb371..a73047aca 100644 --- a/Source/msg.cpp +++ b/Source/msg.cpp @@ -1434,8 +1434,9 @@ DWORD OnKnockback(const TCmd *pCmd, int pnum) const auto &message = *reinterpret_cast(pCmd); if (gbBufferMsgs != 1 && Players[pnum].isOnActiveLevel() && message.wParam1 < MaxMonsters) { - M_GetKnockback(Monsters[message.wParam1]); - M_StartHit(message.wParam1, pnum, 0); + Monster &monster = Monsters[message.wParam1]; + M_GetKnockback(monster); + M_StartHit(monster, pnum, 0); } return sizeof(message); diff --git a/Source/player.cpp b/Source/player.cpp index 067d67837..b7a3d7a70 100644 --- a/Source/player.cpp +++ b/Source/player.cpp @@ -975,7 +975,7 @@ bool PlrHitMonst(int pnum, int monsterId, bool adjacentDamage = false) } else { if (monster._mmode != MonsterMode::Petrified && HasAnyOf(player._pIFlags, ItemSpecialEffect::Knockback)) M_GetKnockback(monster); - M_StartHit(monsterId, pnum, dam); + M_StartHit(monster, pnum, dam); } return true;