mon->mhp manipulation

I've hunted for other instances where monster hit points were set
to zero or less without calling the routine that kills off the
monster (see recent mon_unslime() vs zhitm()) and didn't find any
for mhp subtraction.  I haven't checked for direct assignment yet.

For a while I thought I'd found several cases where a monster was
intended to be killed but got left with positive hit points, but
it turned out that lifesaved_monster(), of all places, was setting
them to zero.  I've moved that to its callers so that it isn't so
well hidden.  And changed several ''if ((mon->mhp -= dmg) <= 0)''
into separate subtraction and 'if' just so the mhp manipulation is
a bit more visible.

I think the only actual change here is the message for monster
being killed by lava, where glass golems now melt instead of burn.
This commit is contained in:
PatR
2016-05-21 18:25:16 -07:00
parent 29e9179ca5
commit c1bfa1360f
7 changed files with 49 additions and 28 deletions

View File

@@ -352,12 +352,12 @@ int force;
/* Falling is okay for falling down
within a pit from jostling too */
mselftouch(mtmp, "Falling, ", TRUE);
if (mtmp->mhp > 0)
if ((mtmp->mhp -=
rnd(m_already_trapped ? 4 : 6)) <= 0) {
if (!cansee(x, y))
if (mtmp->mhp > 0) {
mtmp->mhp -= rnd(m_already_trapped ? 4 : 6);
if (mtmp->mhp <= 0) {
if (!cansee(x, y)) {
pline("It is destroyed!");
else {
} else {
You("destroy %s!",
mtmp->mtame
? x_monnam(mtmp, ARTICLE_THE,
@@ -370,6 +370,7 @@ int force;
}
xkilled(mtmp, XKILL_NOMSG);
}
}
}
} else if (x == u.ux && y == u.uy) {
if (Levitation || Flying