fix #H1662 - temporary vs permanent sleepiness (trunk only)
From a bug report, wearing
(or removing) an amulet of restful sleep was overriding permanent
sleepiness which had been obtained previously via eating another amulet.
The setting of timeout clobbered the non-timeout bits for that intrinsic.
This also adds the timeout counter for sleepiness to enlightenment
feedback in wizard mode. Unrelated: rephrase enlightenment feedback for
adornment to more accurately describe what that does.
This commit is contained in:
@@ -285,6 +285,7 @@ seen eels who were stuck in isolated pools would never re-hide
|
||||
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
|
||||
|
||||
26
src/cmd.c
26
src/cmd.c
@@ -1,4 +1,4 @@
|
||||
/* 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. */
|
||||
|
||||
@@ -1525,9 +1525,13 @@ int final;
|
||||
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) {
|
||||
@@ -1687,12 +1691,14 @@ int final;
|
||||
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));
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* 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. */
|
||||
|
||||
@@ -641,7 +641,14 @@ Amulet_on()
|
||||
}
|
||||
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;
|
||||
@@ -690,8 +697,9 @@ Amulet_off()
|
||||
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;
|
||||
|
||||
Reference in New Issue
Block a user