]> granicus.if.org Git - nethack/commitdiff
fix github issue 221 - unfixable troubles
authorPatR <rankin@nethack.org>
Wed, 18 Sep 2019 18:37:11 +0000 (11:37 -0700)
committerPatR <rankin@nethack.org>
Wed, 18 Sep 2019 18:37:11 +0000 (11:37 -0700)
Fixes #221

Routine unfixeable_trouble_count() is used for both applying a unicorn
horn (possibly internally via #monster if poly'd into a unicorn) and
drinking a blessed potion of restore ability.  For the latter case, it
always gave the wrong answer (unless the hero happened to be all of
Sick and Stunned and Confused and Hallucinating and Vomiting and Deaf).
Since the actual count wasn't used to decide whether hero felt "great"
or just "good", having any of those conditions would hide the problem.

doc/fixes36.3
include/youprop.h
src/apply.c

index 6959edf197b3db1106465520ec7932a17c5536ed..c87d9022d8b449866bdae50b927d1bccd687ab44 100644 (file)
@@ -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.113 $ $NHDT-Date: 1568831820 2019/09/18 18:37:00 $
 
 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,8 @@ 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()
 
 
 Fixes to Post-3.6.2 Problems that Were Exposed Via git Repository
index c0eb10eefee09a0d17024e8a53c4d0bc6b86dbc1..c9656aacf1f870fb0ca522c002d52ba3c9e9e590 100644 (file)
@@ -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
index 5bc67850a11058c3998095297c476406ab2a1f7e..cf1232bb5693d49d55be089c88c307ecf2f7e813 100644 (file)
@@ -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: 1568831822 2019/09/18 18:37:02 $  $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.276 $ */
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /*-Copyright (c) Robert Patrick Rankin, 2012. */
 /* NetHack may be freely redistributed.  See license for details. */
@@ -3738,25 +3738,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;