Browse Source

Unwindle If-Elses around petrify monster

pull/4601/head
k-bar 4 years ago committed by Anders Jenbo
parent
commit
4a4e3a5404
  1. 47
      Source/missiles.cpp
  2. 28
      Source/monster.cpp
  3. 19
      Source/player.cpp

47
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;
}

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

19
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;

Loading…
Cancel
Save