Browse Source

Fix returning in MonsterTrapHit (#1463)

pull/256/head
galaxyhaxz 7 years ago committed by Anders Jenbo
parent
commit
eaef0a197e
  1. 139
      Source/missiles.cpp

139
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)

Loading…
Cancel
Save