and could result in a panic if the blindfold was stolen during removal
cmdassist help for movement prefix followed by invalid direction was strange
when the direction was up, down, or self disallowed for that prefix
+poor message when shape-shifted vampire reverts to vampire if it has a name:
+ The Dracula suddenly transforms and rises as Dracula.
+poor message when shape-shifted vampire reverts if cause of 'death' was
+ disintegration or digestion and shifted form wasn't amorphous:
+ The vampire bat is disintegrated. The vampire bat suddenly transforms
+ and rises as a vampire. (fix: switch to existing alternate phrasing
+ used for amorphous form, "reconstitute" rather than "transform")
Fixes to Post-3.6.0 Problems that Were Exposed Via git Repository
-/* NetHack 3.6 mon.c $NHDT-Date: 1492733171 2017/04/21 00:06:11 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.237 $ */
+/* NetHack 3.6 mon.c $NHDT-Date: 1495836090 2017/05/26 22:01:30 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.238 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
#include "mfndpos.h"
#include <ctype.h>
-STATIC_VAR boolean vamp_rise_msg;
+STATIC_VAR boolean vamp_rise_msg, disintegested;
STATIC_DCL void FDECL(sanity_check_single_mon, (struct monst *, BOOLEAN_P,
const char *));
/* alternate message phrasing for some monster types */
spec_mon = (nonliving(mtmp->data)
|| noncorporeal(mtmp->data)
- || amorphous(mtmp->data));
-
- /* construct a format string before transformation */
- Sprintf(buf, "The %s%s suddenly %s and rises as %%s!",
- spec_mon ? "" : "seemingly dead ",
- x_monnam(mtmp, ARTICLE_NONE, (char *) 0,
+ || amorphous(mtmp->data)),
+ spec_death = (disintegested /* disintegrated or digested */
+ || noncorporeal(mtmp->data)
+ || amorphous(mtmp->data));
+
+ /* construct a format string before transformation;
+ will be capitalized when used, expects one %s arg */
+ Sprintf(buf, "%s suddenly %s and rises as %%s!",
+ x_monnam(mtmp,
+ has_mname(mtmp) ? ARTICLE_NONE : ARTICLE_THE,
+ spec_mon ? (char *) 0 : "seemingly dead",
SUPPRESS_SADDLE | SUPPRESS_HALLUCINATION
| SUPPRESS_INVISIBLE | SUPPRESS_IT,
FALSE),
- spec_mon ? "reconstitutes" : "transforms");
+ spec_death ? "reconstitutes" : "transforms");
mtmp->mcanmove = 1;
mtmp->mfrozen = 0;
if (mtmp->mhpmax <= 0)
else
mtmp->cham = mndx;
if (canspotmon(mtmp)) {
- pline(buf, a_monnam(mtmp));
+ /* was using a_monnam(mtmp) but that's weird if mtmp is named:
+ "Dracula suddenly transforms and rises as Dracula" */
+ pline(upstart(buf), an(mtmp->data->mname));
vamp_rise_msg = TRUE;
}
newsym(x, y);
else if (mtmp->data == &mons[PM_WERERAT])
set_mon_data(mtmp, &mons[PM_HUMAN_WERERAT], -1);
- /* if MAXMONNO monsters of a given type have died, and it
- * can be done, extinguish that monster.
- *
+ /*
* mvitals[].died does double duty as total number of dead monsters
* and as experience factor for the player killing more monsters.
* this means that a dragon dying by other means reduces the
be_sad = (mdef->mtame != 0);
/* no corpses if digested or disintegrated */
- if (how == AD_DGST || how == -AD_RBRE)
+ disintegested = (how == AD_DGST || how == -AD_RBRE);
+ if (disintegested)
mondead(mdef);
else
mondied(mdef);
thrownobj = 0;
}
- vamp_rise_msg = FALSE; /* might get set in mondead() */
+ vamp_rise_msg = FALSE; /* might get set in mondead(); only checked below */
+ disintegested = nocorpse; /* alternate vamp_rise message needed if true */
/* dispose of monster and make cadaver */
if (stoned)
monstone(mtmp);
else
mondead(mtmp);
+ disintegested = FALSE; /* reset */
if (mtmp->mhp > 0) { /* monster lifesaved */
/* Cannot put the non-visible lifesaving message in
- * lifesaved_monster() since the message appears only when you
+ * lifesaved_monster() since the message appears only when _you_
* kill it (as opposed to visible lifesaving which always appears).
*/
stoned = FALSE;