stepping onto lava destroyed non-fireproof water walking boots but left other
vulnerable boot types intact
fix death reason when eating tainted glob of <monster> (not corpse)
+fix death reason when petrified (avoid redundant 'while getting stoned')
use appropriate place name for drum of earthquake shakes
fix unmapped branch stairs on sokoban level
redraw map when hilite_pile is toggled to display the highlighting
/* stop what you're doing, then faint */
stop_occupation();
You("faint from lack of food.");
- if (!Levitation)
- selftouch("Falling, you");
incr_itimeout(&HDeaf, duration);
nomul(-duration);
multi_reason = "fainted from lack of food";
nomovemsg = "You regain consciousness.";
afternmv = unfaint;
newhs = FAINTED;
+ if (!Levitation)
+ selftouch("Falling, you");
}
} else if (u.uhunger < -(int) (200 + 20 * ACURR(A_CON))) {
u.uhs = STARVED;
return;
}
+/* some special cases for overriding while-helpless reason */
+static const struct {
+ int why, unmulti;
+ const char *exclude, *include;
+} death_fixups[] = {
+ /* "petrified by <foo>, while getting stoned" -- "while getting stoned"
+ prevented any last-second recovery, but it was not the cause of
+ "petrified by <foo>" */
+ { STONING, 1, "getting stoned", (char *) 0 },
+ /* "died of starvation, while fainted from lack of food" is accurate
+ but sounds a fairly silly (and doesn't actually appear unless you
+ splice together death and while-helpless from xlogfile) */
+ { STARVING, 0, "fainted from lack of food", "fainted" },
+};
+
+/* clear away while-helpless when the cause of death caused that
+ helplessness (ie, "petrified by <foo> while getting stoned") */
+STATIC_DCL void
+fixup_death(how)
+int how;
+{
+ int i;
+
+ for (i = 0; i < SIZE(death_fixups); ++i)
+ if (death_fixups[i].why == how
+ && !strcmp(death_fixups[i].exclude, multi_reason)) {
+ if (death_fixups[i].include) /* substitute an alternate reason */
+ multi_reason = death_fixups[i].include;
+ else /* remove the helplessness reason */
+ multi_reason = (char *) 0;
+ if (death_fixups[i].unmulti) /* possibly hide helplessness */
+ multi = 0L;
+ break;
+ }
+}
+
#if defined(WIN32) && !defined(SYSCF)
#define NOTIFY_NETHACK_BUGS
#endif
if (how == ESCAPED || how == PANICKED)
killer.format = NO_KILLER_PREFIX;
+ fixup_death(how); /* actually, fixup multi_reason */
+
if (how != PANICKED) {
/* these affect score and/or bones, but avoid them during panic */
taken = paybill((how == ESCAPED) ? -1 : (how != QUIT));