From eaef0a197e6b4c4976758320253e256b9bcb98f9 Mon Sep 17 00:00:00 2001 From: galaxyhaxz Date: Fri, 30 Aug 2019 23:22:21 -0500 Subject: [PATCH] Fix returning in MonsterTrapHit (#1463) --- Source/missiles.cpp | 139 ++++++++++++++++++++------------------------ 1 file changed, 62 insertions(+), 77 deletions(-) diff --git a/Source/missiles.cpp b/Source/missiles.cpp index fc825b498..6b4616df8 100644 --- a/Source/missiles.cpp +++ b/Source/missiles.cpp @@ -474,97 +474,82 @@ void MoveMissilePos(int i) BOOL MonsterTrapHit(int m, int mindam, int maxdam, int dist, int t, BOOLEAN shift) { int hit, hper, dam, mor, mir; - BOOL resist, ret, rv; + BOOL resist, ret; resist = FALSE; if (monster[m].mtalkmsg) { - ret = FALSE; - } else if (monster[m]._mhitpoints >> 6 <= 0) { - ret = FALSE; - } else if (monster[m].MType->mtype == MT_ILLWEAV && monster[m]._mgoal == MGOAL_RETREAT) - ret = FALSE; - else if (monster[m]._mmode == MM_CHARGE) - ret = FALSE; - - else { - mir = missiledata[t].mResist; - mor = monster[m].mMagicRes; - if (mor & IMUNE_MAGIC && mir == MISR_MAGIC) { - ret = FALSE; - } - - else if (mor & IMUNE_FIRE && mir == MISR_FIRE) { - ret = FALSE; - } - - else if (mor & IMUNE_LIGHTNING && mir == MISR_LIGHTNING) { - ret = FALSE; - } + return FALSE; + } + if (monster[m]._mhitpoints >> 6 <= 0) { + return FALSE; + } + if (monster[m].MType->mtype == MT_ILLWEAV && monster[m]._mgoal == MGOAL_RETREAT) + return FALSE; + if (monster[m]._mmode == MM_CHARGE) + return FALSE; - //else if (mor & IMUNE_ACID && mir == MISR_ACID) { - //ret = FALSE; - //} - else { + mir = missiledata[t].mResist; + mor = monster[m].mMagicRes; + if (mor & IMUNE_MAGIC && mir == MISR_MAGIC + || mor & IMUNE_FIRE && mir == MISR_FIRE + || mor & IMUNE_LIGHTNING && mir == MISR_LIGHTNING) { + return FALSE; + } - if ((mor & RESIST_MAGIC && mir == MISR_MAGIC) || (mor & RESIST_FIRE && mir == MISR_FIRE) || (mor & RESIST_LIGHTNING && mir == MISR_LIGHTNING)) { - resist = TRUE; - } + if ((mor & RESIST_MAGIC && mir == MISR_MAGIC) + || (mor & RESIST_FIRE && mir == MISR_FIRE) + || (mor & RESIST_LIGHTNING && mir == MISR_LIGHTNING)) { + resist = TRUE; + } - hit = random(68, 100); - hper = 90 - (BYTE)monster[m].mArmorClass - dist; - if (hper < 5) - hper = 5; - if (hper > 95) - hper = 95; - if (CheckMonsterHit(m, &rv)) { - ret = rv; - } else { + hit = random(68, 100); + hper = 90 - (BYTE)monster[m].mArmorClass - dist; + if (hper < 5) + hper = 5; + if (hper > 95) + hper = 95; + if (CheckMonsterHit(m, &ret)) { + return ret; + } #ifdef _DEBUG - if (hit >= hper && !debug_mode_dollar_sign && !debug_mode_key_inverted_v && monster[m]._mmode != MM_STONE) { - ret = FALSE; - } + else if (hit < hper || debug_mode_dollar_sign || debug_mode_key_inverted_v || monster[m]._mmode == MM_STONE) { #else - if (hit >= hper && monster[m]._mmode != MM_STONE) { - ret = FALSE; - } + else if (hit < hper || monster[m]._mmode == MM_STONE) { #endif - else { - dam = mindam + random(68, maxdam - mindam + 1); - if (!shift) - dam <<= 6; - if (resist) - monster[m]._mhitpoints -= dam >> 2; - else - monster[m]._mhitpoints -= dam; + dam = mindam + random(68, maxdam - mindam + 1); + if (!shift) + dam <<= 6; + if (resist) + monster[m]._mhitpoints -= dam >> 2; + else + monster[m]._mhitpoints -= dam; #ifdef _DEBUG - if (debug_mode_dollar_sign || debug_mode_key_inverted_v) - monster[m]._mhitpoints = 0; + if (debug_mode_dollar_sign || debug_mode_key_inverted_v) + monster[m]._mhitpoints = 0; #endif - if (monster[m]._mhitpoints >> 6 <= 0) { - if (monster[m]._mmode == MM_STONE) { - M_StartKill(m, -1); - monster[m]._mmode = MM_STONE; - } else { - M_StartKill(m, -1); - } - } else { - if (resist) { - PlayEffect(m, 1); - } else if (monster[m]._mmode == MM_STONE) { - if (m > 3) - M_StartHit(m, -1, dam); - monster[m]._mmode = MM_STONE; - } else { - if (m > 3) - M_StartHit(m, -1, dam); - } - } - ret = TRUE; - } + if (monster[m]._mhitpoints >> 6 <= 0) { + if (monster[m]._mmode == MM_STONE) { + M_StartKill(m, -1); + monster[m]._mmode = MM_STONE; + } else { + M_StartKill(m, -1); + } + } else { + if (resist) { + PlayEffect(m, 1); + } else if (monster[m]._mmode == MM_STONE) { + if (m > 3) + M_StartHit(m, -1, dam); + monster[m]._mmode = MM_STONE; + } else { + if (m > 3) + M_StartHit(m, -1, dam); } } + return TRUE; + } else { + return FALSE; } - return ret; } BOOL MonsterMHit(int pnum, int m, int mindam, int maxdam, int dist, int t, BOOLEAN shift)