unseen monster' glyph ('I' character or '?' tile)
monsters can throw cockatrice eggs at hero, but there was no handling for eggs
when the missile hit an intervening monster
+clarify that shape-shifted vampires revert to vampire form when petrified or
+ digested; when back in 'V' form, they're vulnerable to such damage
Fixes to Post-3.6.0 Problems that Were Exposed Via git Repository
return MM_MISS;
if (vis) {
+ /* [this two-part formatting dates back to when only one x_monnam
+ result could be included in an expression because the next one
+ would overwrite first's result -- that's no longer the case] */
Sprintf(buf, "%s swallows", Monnam(magr));
pline("%s %s.", buf, mon_nam(mdef));
}
for (obj = mdef->minvent; obj; obj = obj->nobj)
(void) snuff_lit(obj);
+ if (is_vampshifter(mdef)
+ && newcham(mdef, &mons[mdef->cham], FALSE, FALSE)) {
+ if (vis) {
+ /* 'it' -- previous form is no longer available and
+ using that would be excessively verbose */
+ pline("%s expels it.", Monnam(magr));
+ pline("It turns into %s.", a_monnam(mdef));
+ }
+ return MM_HIT; /* bypass mdamagem() */
+ }
+
/*
* All of this manipulation is needed to keep the display correct.
* There is a flush at the next pline().
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....
/* 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",
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 */
for (otmp = mdef->minvent; otmp; otmp = otmp->nobj)
(void) snuff_lit(otmp);
+ /* force vampire in bat, cloud, or wolf form to revert back to
+ vampire form now instead of dealing with that when it dies */
+ if (is_vampshifter(mdef)
+ && newcham(mdef, &mons[mdef->cham], FALSE, FALSE)) {
+ You("engulf it, then expel it.");
+ if (canspotmon(mdef))
+ pline("It turns into %s.", a_monnam(mdef));
+ else
+ map_invisible(mdef->mx, mdef->my);
+ return 1;
+ }
+
/* engulfing a cockatrice or digesting a Rider or Medusa */
fatal_gulp = (touch_petrifies(pd) && !Stone_resistance)
|| (mattk->adtyp == AD_DGST
m_useup(mdef, otmp);
newuhs(FALSE);
+ /* Message sequencing BUG: if you gain a level here,
+ * "welcome to level N+1" is given immediately and
+ * then "you totally digest <foo>" is given later.
+ */
xkilled(mdef, XKILL_NOMSG | XKILL_NOCORPSE);
if (mdef->mhp > 0) { /* monster lifesaved */
You("hurriedly regurgitate the sizzling in your %s.",