From f5e7a98fbf23e7c6da2b2964c2ac3e4934455c41 Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Sun, 26 Jun 2022 04:21:09 +0200 Subject: [PATCH] Avoid using -1 as a discriminator --- Source/missiles.cpp | 2 +- Source/monster.cpp | 64 +++++++++++++++++++++++++++++---------------- Source/monster.h | 1 + 3 files changed, 43 insertions(+), 24 deletions(-) diff --git a/Source/missiles.cpp b/Source/missiles.cpp index a954a1d05..ed6eb6503 100644 --- a/Source/missiles.cpp +++ b/Source/missiles.cpp @@ -883,7 +883,7 @@ bool MonsterTrapHit(int m, int mindam, int maxdam, int dist, missile_id t, bool PlayEffect(monster, 1); } else { if (monster.MType->mtype != MT_GOLEM) - M_StartHit(m, -1, dam); + M_StartHit(m, dam); } return true; } diff --git a/Source/monster.cpp b/Source/monster.cpp index e45e14561..e40821d64 100644 --- a/Source/monster.cpp +++ b/Source/monster.cpp @@ -1051,23 +1051,17 @@ void Teleport(int i) } } -void MonsterHitMonster(int mid, int i, int dam) +void HitMonster(int mid, int dam) { assert(mid >= 0 && mid < MAXMONSTERS); auto &monster = Monsters[mid]; assert(monster.MType != nullptr); - if (i >= 0 && i < MAX_PLRS) - monster.mWhoHit |= 1 << i; - delta_monster_hp(mid, monster._mhitpoints, *MyPlayer); NetSendCmdMonDmg(false, mid, dam); PlayEffect(monster, 1); if (IsAnyOf(monster.MType->mtype, MT_SNEAK, MT_STALKER, MT_UNSEEN, MT_ILLWEAV) || dam >> 6 >= monster.mLevel + 3) { - if (i >= 0) - monster._mdir = Opposite(Monsters[i]._mdir); - if (monster.MType->mtype == MT_BLINK) { Teleport(mid); } else if (IsAnyOf(monster.MType->mtype, MT_NSCAV, MT_BSCAV, MT_WSCAV, MT_YSCAV, MT_GRAVEDIG)) { @@ -1082,6 +1076,22 @@ void MonsterHitMonster(int mid, int i, int dam) } } +void MonsterHitMonster(int mid, int i, int dam) +{ + assert(mid >= 0 && mid < MAXMONSTERS); + auto &monster = Monsters[mid]; + assert(monster.MType != nullptr); + + if (i < MAX_PLRS) + monster.mWhoHit |= 1 << i; + + if (IsAnyOf(monster.MType->mtype, MT_SNEAK, MT_STALKER, MT_UNSEEN, MT_ILLWEAV) || dam >> 6 >= monster.mLevel + 3) { + monster._mdir = Opposite(Monsters[i]._mdir); + } + + HitMonster(mid, dam); +} + void MonsterDeath(int mid, int pnum, Direction md, bool sendmsg) { assert(mid >= 0 && mid < MAXMONSTERS); @@ -3927,24 +3937,13 @@ void M_GetKnockback(int i) StartMonsterGotHit(i); } -void M_StartHit(int i, int pnum, int dam) +void M_StartHit(int i, int dam) { - auto &monster = Monsters[i]; + Monster &monster = Monsters[i]; - if (pnum >= 0) - monster.mWhoHit |= 1 << pnum; - if (pnum == MyPlayerId) { - delta_monster_hp(i, monster._mhitpoints, *MyPlayer); - NetSendCmdMonDmg(false, i, dam); - } PlayEffect(monster, 1); + if (IsAnyOf(monster.MType->mtype, MT_SNEAK, MT_STALKER, MT_UNSEEN, MT_ILLWEAV) || dam >> 6 >= monster.mLevel + 3) { - if (pnum >= 0) { - monster._menemy = pnum; - monster.enemyPosition = Players[pnum].position.future; - monster._mFlags &= ~MFLAG_TARGETS_MONSTER; - monster._mdir = GetMonsterDirection(monster); - } if (monster.MType->mtype == MT_BLINK) { Teleport(i); } else if (IsAnyOf(monster.MType->mtype, MT_NSCAV, MT_BSCAV, MT_WSCAV, MT_YSCAV) @@ -3959,6 +3958,25 @@ void M_StartHit(int i, int pnum, int dam) } } +void M_StartHit(int i, int pnum, int dam) +{ + Monster &monster = Monsters[i]; + + monster.mWhoHit |= 1 << pnum; + if (pnum == MyPlayerId) { + delta_monster_hp(i, monster._mhitpoints, *MyPlayer); + NetSendCmdMonDmg(false, i, dam); + } + if (IsAnyOf(monster.MType->mtype, MT_SNEAK, MT_STALKER, MT_UNSEEN, MT_ILLWEAV) || dam >> 6 >= monster.mLevel + 3) { + monster._menemy = pnum; + monster.enemyPosition = Players[pnum].position.future; + monster._mFlags &= ~MFLAG_TARGETS_MONSTER; + monster._mdir = GetMonsterDirection(monster); + } + + M_StartHit(i, dam); +} + void M_StartKill(int i, int pnum) { assert(i >= 0 && i < MAXMONSTERS); @@ -4656,9 +4674,9 @@ void MissToMonst(Missile &missile, Point position) monster.position.tile = position; M_StartStand(monster, monster._mdir); if ((monster._mFlags & MFLAG_TARGETS_MONSTER) == 0) - M_StartHit(m, -1, 0); + M_StartHit(m, 0); else - MonsterHitMonster(m, -1, 0); + HitMonster(m, 0); if (monster.MType->mtype == MT_GLOOM) return; diff --git a/Source/monster.h b/Source/monster.h index d8280b24f..e3447c3af 100644 --- a/Source/monster.h +++ b/Source/monster.h @@ -286,6 +286,7 @@ bool M_Talker(const Monster &monster); void M_StartStand(Monster &monster, Direction md); void M_ClearSquares(int i); void M_GetKnockback(int i); +void M_StartHit(int i, int dam); void M_StartHit(int i, int pnum, int dam); void M_StartKill(int i, int pnum); void M_SyncStartKill(int i, Point position, int pnum);