fix #H4426 - shapeshifted vampires vs stoning

and vs digestion.  minstapetrify() was previously changed to
explicitly revert a shape-shifted vampire back to vampire form
when it was turned to stone.  This does the same for monstone().
It also causes shape-shifted vampires to revert to vampire form
immediately when swallowed, so subsequent death via digestion or
engulfing damage doesn't have to deal with reverting changed shape.

I'm not convinced this is the right fix for either stoning or
being digested.  Unlike with ordinary damage, where multiple hits
are usually needed to kill a vampire after it reverts to 'V' form,
here the vampire will be killed by the next successful stoning or
digestion attack in one hit.  It ought to least try to flee.
This commit is contained in:
PatR
2016-07-11 17:38:02 -07:00
parent 47572a7946
commit ff29971453
4 changed files with 39 additions and 5 deletions

View File

@@ -2043,6 +2043,9 @@ struct monst *mdef;
xchar x = mdef->mx, y = mdef->my;
boolean wasinside = FALSE;
if (!vamp_stone(mdef)) /* vampshifter reverts to vampire */
return;
/* we have to make the statue before calling mondead, to be able to
* put inventory in it, and we have to check for lifesaving before
* making the statue....
@@ -2402,9 +2405,8 @@ struct monst *mtmp;
/* construct a format string before transformation */
Sprintf(buf, "The lapidifying %s %s %s",
x_monnam(mtmp, ARTICLE_NONE, (char *) 0,
SUPPRESS_SADDLE | SUPPRESS_HALLUCINATION
| SUPPRESS_INVISIBLE | SUPPRESS_IT,
FALSE),
(SUPPRESS_SADDLE | SUPPRESS_HALLUCINATION
| SUPPRESS_INVISIBLE | SUPPRESS_IT), FALSE),
amorphous(mtmp->data) ? "coalesces on the"
: is_flyer(mtmp->data) ? "drops to the"
: "writhes on the",
@@ -2434,8 +2436,8 @@ struct monst *mtmp;
else
mtmp->cham = mndx;
if (canspotmon(mtmp)) {
pline("%s rises from the %s with renewed agility!",
Amonnam(mtmp), surface(mtmp->mx, mtmp->my));
pline("%s rises from the %s with renewed agility!",
Amonnam(mtmp), surface(mtmp->mx, mtmp->my));
}
newsym(mtmp->mx, mtmp->my);
return FALSE; /* didn't petrify */