diff --git a/Source/missiles.cpp b/Source/missiles.cpp index 78a523c9b..2bbe23375 100644 --- a/Source/missiles.cpp +++ b/Source/missiles.cpp @@ -251,26 +251,14 @@ bool MonsterMHit(int pnum, int m, int mindam, int maxdam, int dist, missile_id t monster._mFlags |= MFLAG_NOHEAL; if (monster._mhitpoints >> 6 <= 0) { - if (monster._mmode == MonsterMode::Petrified) { - M_StartKill(m, pnum); - monster.Petrify(); - } else { - M_StartKill(m, pnum); - } + M_StartKill(m, pnum); + } else if (resist) { + PlayEffect(monster, 1); } else { - if (resist) { - PlayEffect(monster, 1); - } else if (monster._mmode == MonsterMode::Petrified) { - if (m > MAX_PLRS - 1) - M_StartHit(m, pnum, dam); - monster.Petrify(); - } else { - if (MissilesData[t].mType == 0 && HasAnyOf(player._pIFlags, ItemSpecialEffect::Knockback)) { - M_GetKnockback(m); - } - if (m > MAX_PLRS - 1) - M_StartHit(m, pnum, dam); - } + if (monster._mmode != MonsterMode::Petrified && MissilesData[t].mType == 0 && HasAnyOf(player._pIFlags, ItemSpecialEffect::Knockback)) + M_GetKnockback(m); + if (m > MAX_PLRS - 1) + M_StartHit(m, pnum, dam); } if (monster._msquelch == 0) { @@ -959,23 +947,12 @@ bool MonsterTrapHit(int m, int mindam, int maxdam, int dist, missile_id t, bool monster._mhitpoints = 0; #endif if (monster._mhitpoints >> 6 <= 0) { - if (monster._mmode == MonsterMode::Petrified) { - M_StartKill(m, -1); - monster.Petrify(); - } else { - M_StartKill(m, -1); - } + M_StartKill(m, -1); + } else if (resist) { + PlayEffect(monster, 1); } else { - if (resist) { - PlayEffect(monster, 1); - } else if (monster._mmode == MonsterMode::Petrified) { - if (m > MAX_PLRS - 1) - M_StartHit(m, -1, dam); - monster.Petrify(); - } else { - if (m > MAX_PLRS - 1) - M_StartHit(m, -1, dam); - } + if (m > MAX_PLRS - 1) + M_StartHit(m, -1, dam); } return true; } diff --git a/Source/monster.cpp b/Source/monster.cpp index bdfda1f8a..d197e1153 100644 --- a/Source/monster.cpp +++ b/Source/monster.cpp @@ -1115,6 +1115,7 @@ void StartMonsterDeath(int i, int pnum, bool sendmsg) PlayEffect(monster, 2); Direction md = pnum >= 0 ? GetMonsterDirection(monster) : monster._mdir; + bool wasPetrified = (monster._mmode == MonsterMode::Petrified); NewMonsterAnim(monster, MonsterGraphic::Death, md, gGameLogicStep < GameLogicStep::ProcessMonsters ? AnimationDistributionFlags::ProcessAnimationPending : AnimationDistributionFlags::None); monster._mmode = MonsterMode::Death; monster._mgoal = MGOAL_NONE; @@ -1128,6 +1129,8 @@ void StartMonsterDeath(int i, int pnum, bool sendmsg) M_FallenFear(monster.position.tile); if ((monster.MType->mtype >= MT_NACID && monster.MType->mtype <= MT_XACID) || monster.MType->mtype == MT_SPIDLORD) AddMissile(monster.position.tile, { 0, 0 }, Direction::South, MIS_ACIDPUD, TARGET_PLAYERS, i, monster._mint + 1, 0); + if (wasPetrified) + monster.Petrify(); } void StartDeathFromMonster(int i, int mid) @@ -1161,7 +1164,7 @@ void StartDeathFromMonster(int i, int mid) Direction md = Opposite(killer._mdir); if (monster.MType->mtype == MT_GOLEM) md = Direction::South; - + bool wasPetrified = (monster._mmode == MonsterMode::Petrified); NewMonsterAnim(monster, MonsterGraphic::Death, md, gGameLogicStep < GameLogicStep::ProcessMonsters ? AnimationDistributionFlags::ProcessAnimationPending : AnimationDistributionFlags::None); monster._mmode = MonsterMode::Death; monster.position.offset = { 0, 0 }; @@ -1176,6 +1179,8 @@ void StartDeathFromMonster(int i, int mid) if (gbIsHellfire) M_StartStand(killer, killer._mdir); + if (wasPetrified) + monster.Petrify(); } void StartFadein(Monster &monster, Direction md, bool backwards) @@ -1304,19 +1309,9 @@ void MonsterAttackMonster(int i, int mid, int hper, int mind, int maxd) int dam = (mind + GenerateRnd(maxd - mind + 1)) << 6; monster._mhitpoints -= dam; if (monster._mhitpoints >> 6 <= 0) { - if (monster._mmode == MonsterMode::Petrified) { - StartDeathFromMonster(i, mid); - monster.Petrify(); - } else { - StartDeathFromMonster(i, mid); - } + StartDeathFromMonster(i, mid); } else { - if (monster._mmode == MonsterMode::Petrified) { - MonsterHitMonster(mid, i, dam); - monster.Petrify(); - } else { - MonsterHitMonster(mid, i, dam); - } + MonsterHitMonster(mid, i, dam); } } } @@ -4072,12 +4067,7 @@ void M_SyncStartKill(int i, Point position, int pnum) monster.position.old = position; } - if (monster._mmode == MonsterMode::Petrified) { - StartMonsterDeath(i, pnum, false); - monster.Petrify(); - } else { - StartMonsterDeath(i, pnum, false); - } + StartMonsterDeath(i, pnum, false); } void M_UpdateLeader(int i) diff --git a/Source/player.cpp b/Source/player.cpp index 65dd67ec8..3b2f585a2 100644 --- a/Source/player.cpp +++ b/Source/player.cpp @@ -984,22 +984,11 @@ bool PlrHitMonst(int pnum, int m, bool adjacentDamage = false) } #endif if ((monster._mhitpoints >> 6) <= 0) { - if (monster._mmode == MonsterMode::Petrified) { - M_StartKill(m, pnum); - monster.Petrify(); - } else { - M_StartKill(m, pnum); - } + M_StartKill(m, pnum); } else { - if (monster._mmode == MonsterMode::Petrified) { - M_StartHit(m, pnum, dam); - monster.Petrify(); - } else { - if (HasAnyOf(player._pIFlags, ItemSpecialEffect::Knockback)) { - M_GetKnockback(m); - } - M_StartHit(m, pnum, dam); - } + if (monster._mmode != MonsterMode::Petrified && HasAnyOf(player._pIFlags, ItemSpecialEffect::Knockback)) + M_GetKnockback(m); + M_StartHit(m, pnum, dam); } return true;