can no longer get both strength and resistance from eating one giant corpse
aborting key/lock pick usage via ESC at direction prompt no longer use a move
when probing from inside an engulfer, "not carrying anything" overlooked hero
+wearing or removing an amulet of restful sleep clobbered permanent sleepiness
Platform- and/or Interface-Specific Fixes
-/* SCCS Id: @(#)cmd.c 3.5 2008/02/12 */
+/* SCCS Id: @(#)cmd.c 3.5 2008/05/25 */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
enl_msg(You_, "fumble", "fumbled", "", from_what(FUMBLING));
}
if (Sleeping) {
- if (magic || cause_known(SLEEPING))
- enl_msg("You ", "fall", "fell", " asleep uncontrollably",
- from_what(SLEEPING));
+ if (magic || cause_known(SLEEPING)) {
+ Strcpy(buf, from_what(SLEEPING));
+#ifdef WIZARD
+ if (wizard) Sprintf(eos(buf), " (%ld)", (HSleeping & TIMEOUT));
+#endif
+ enl_msg("You ", "fall", "fell", " asleep uncontrollably", buf);
+ }
}
/* hunger/nutrition */
if (Hunger) {
if (Adornment) {
int adorn = 0;
- if(uleft && uleft->otyp == RIN_ADORNMENT) adorn += uleft->spe;
- if(uright && uright->otyp == RIN_ADORNMENT) adorn += uright->spe;
- if (adorn < 0)
- you_are("poorly adorned","");
- else
- you_are("adorned","");
+ if (uleft && uleft->otyp == RIN_ADORNMENT) adorn += uleft->spe;
+ if (uright && uright->otyp == RIN_ADORNMENT) adorn += uright->spe;
+ /* the sum might be 0 (+0 ring or two which negate each other);
+ that yields "you are charismatic" (which isn't pointless
+ because it potentially impacts seduction attacks) */
+ Sprintf(buf, "%scharismatic",
+ (adorn > 0) ? "more " : (adorn < 0) ? "less " : "");
+ you_are(buf, from_what(ADORNED));
}
if (Invisible) you_are("invisible",from_what(INVIS));
else if (Invis) you_are("invisible to others",from_what(INVIS));
-/* SCCS Id: @(#)do_wear.c 3.5 2008/01/23 */
+/* SCCS Id: @(#)do_wear.c 3.5 2008/05/25 */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
}
break;
case AMULET_OF_RESTFUL_SLEEP:
- HSleeping = rnd(100);
+ {
+ long newnap = (long)rnd(100), oldnap = (HSleeping & TIMEOUT);
+
+ /* avoid clobbering FROMOUTSIDE bit, which might have
+ gotten set by previously eating one of these amulets */
+ if (newnap < oldnap || oldnap == 0L)
+ HSleeping = (HSleeping & ~TIMEOUT) | newnap;
+ }
break;
case AMULET_OF_YENDOR:
break;
break;
case AMULET_OF_RESTFUL_SLEEP:
setworn((struct obj *)0, W_AMUL);
- if (!ESleeping)
- HSleeping = 0;
+ /* HSleeping = 0L; -- avoid clobbering FROMOUTSIDE bit */
+ if (!ESleeping && !(HSleeping & ~TIMEOUT))
+ HSleeping &= ~TIMEOUT; /* clear timeout bits */
return;
case AMULET_OF_YENDOR:
break;