diff --git a/doc/fixes36.3 b/doc/fixes36.3 index 6959edf19..2d045e8aa 100644 --- a/doc/fixes36.3 +++ b/doc/fixes36.3 @@ -1,4 +1,4 @@ -$NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.112 $ $NHDT-Date: 1568509226 2019/09/15 01:00:26 $ +$NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.114 $ $NHDT-Date: 1568922510 2019/09/19 19:48:30 $ This fixes36.3 file is here to capture information about updates in the 3.6.x lineage following the release of 3.6.2 in May 2019. Please note, however, @@ -139,6 +139,12 @@ when spellcasting monster aimed at wrong spot due to not being able to see prevent impossible when guard tries to relocate a monster on a full level hallucination provides partial protection from passive gaze counterattack against hero's attack; check for that before checking for free action +feedback from blessed potion of restore ability never reported "you feel great" + due to bad logic for not-unihorn case in unfixable_trouble_count() +when rubbing a ring on a touchstone, all types of rings were treated as if + they were gems; an iron ring made a cyan streak instead of yielding + "scritch, scritch" and a gold ring made a yellow streak rather than + a golden scratch Fixes to Post-3.6.2 Problems that Were Exposed Via git Repository diff --git a/include/youprop.h b/include/youprop.h index 625732a37..20d1045e8 100644 --- a/include/youprop.h +++ b/include/youprop.h @@ -1,4 +1,4 @@ -/* NetHack 3.6 youprop.h $NHDT-Date: 1433291407 2015/06/03 00:30:07 $ $NHDT-Branch: master $:$NHDT-Revision: 1.23 $ */ +/* NetHack 3.6 youprop.h $NHDT-Date: 1568831820 2019/09/18 18:37:00 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.27 $ */ /* Copyright (c) 1989 Mike Threepoint */ /* NetHack may be freely redistributed. See license for details. */ @@ -75,8 +75,8 @@ /* Pseudo-property */ #define Punished (uball != 0) -/* Those implemented solely as timeouts (we use just intrinsic) */ -#define HStun u.uprops[STUNNED].intrinsic +/* Many are implemented solely as timeouts (we use just intrinsic) */ +#define HStun u.uprops[STUNNED].intrinsic /* timed or FROMFORM */ #define Stunned HStun #define HConfusion u.uprops[CONFUSION].intrinsic diff --git a/src/apply.c b/src/apply.c index c2b6d759d..257c12f98 100644 --- a/src/apply.c +++ b/src/apply.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 apply.c $NHDT-Date: 1559670602 2019/06/04 17:50:02 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.274 $ */ +/* NetHack 3.6 apply.c $NHDT-Date: 1568922511 2019/09/19 19:48:31 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.277 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /*-Copyright (c) Robert Patrick Rankin, 2012. */ /* NetHack may be freely redistributed. See license for details. */ @@ -2301,13 +2301,14 @@ static void use_stone(tstone) struct obj *tstone; { + static const char scritch[] = "\"scritch, scritch\""; + static const char allowall[3] = { COIN_CLASS, ALL_CLASSES, 0 }; + static const char coins_gems[3] = { COIN_CLASS, GEM_CLASS, 0 }; struct obj *obj; boolean do_scratch; const char *streak_color, *choices; char stonebuf[QBUFSZ]; - static const char scritch[] = "\"scritch, scritch\""; - static const char allowall[3] = { COIN_CLASS, ALL_CLASSES, 0 }; - static const char coins_gems[3] = { COIN_CLASS, GEM_CLASS, 0 }; + int oclass; /* in case it was acquired while blinded */ if (!Blind) @@ -2352,7 +2353,14 @@ struct obj *tstone; do_scratch = FALSE; streak_color = 0; - switch (obj->oclass) { + oclass = obj->oclass; + /* prevent non-gemstone rings from being treated like gems */ + if (oclass == RING_CLASS + && objects[obj->otyp].oc_material != GEMSTONE + && objects[obj->otyp].oc_material != MINERAL) + oclass = RANDOM_CLASS; /* something that's neither gem nor ring */ + + switch (oclass) { case GEM_CLASS: /* these have class-specific handling below */ case RING_CLASS: if (tstone->otyp != TOUCHSTONE) { @@ -3712,25 +3720,34 @@ boolean is_horn; if (Stoned) unfixable_trbl++; + if (Slimed) + unfixable_trbl++; if (Strangled) unfixable_trbl++; if (Wounded_legs && !u.usteed) unfixable_trbl++; - if (Slimed) - unfixable_trbl++; - /* lycanthropy is undesirable, but it doesn't actually make you feel bad */ + /* lycanthropy is undesirable, but it doesn't actually make you feel bad + so don't count it as a trouble which can't be fixed */ - if (!is_horn || (Confusion & ~TIMEOUT)) + /* + * Unicorn horn can fix these when they're timed but not when + * they aren't. Potion of restore ability doesn't touch them, + * so they're always unfixable for the not-unihorn case. + * [Most of these are timed only, so always curable via horn. + * An exception is Stunned, which can be forced On by certain + * polymorph forms (stalker, bats).] + */ + if (Sick && (!is_horn || (Sick & ~TIMEOUT) != 0L)) unfixable_trbl++; - if (!is_horn || (Sick & ~TIMEOUT)) + if (Stunned && (!is_horn || (HStun & ~TIMEOUT) != 0L)) unfixable_trbl++; - if (!is_horn || (HHallucination & ~TIMEOUT)) + if (Confusion && (!is_horn || (HConfusion & ~TIMEOUT) != 0L)) unfixable_trbl++; - if (!is_horn || (Vomiting & ~TIMEOUT)) + if (Hallucination && (!is_horn || (HHallucination & ~TIMEOUT) != 0L)) unfixable_trbl++; - if (!is_horn || (HStun & ~TIMEOUT)) + if (Vomiting && (!is_horn || (Vomiting & ~TIMEOUT) != 0L)) unfixable_trbl++; - if (!is_horn || (HDeaf & ~TIMEOUT)) + if (Deaf && (!is_horn || (HDeaf & ~TIMEOUT) != 0L)) unfixable_trbl++; return unfixable_trbl;