]> granicus.if.org Git - nethack/commitdiff
fix github issue 223 - rubbing ring on touchstone
authorPatR <rankin@nethack.org>
Thu, 19 Sep 2019 19:48:41 +0000 (12:48 -0700)
committerPatR <rankin@nethack.org>
Thu, 19 Sep 2019 19:48:41 +0000 (12:48 -0700)
Fixes #223

The touchstone code treated all rings as if they had gemstones, but
quite a few don't and feedback could be unexpected.  Cited case was
an iron ring yielding a cyan (hi_metal) streak instead of the normal
iron result ("scritch, scritch").  A gold ring yielded a yellow
streak rather than a golden scratch.  I didn't test silver ring but
suspect it yielded a silver streak rather than a silvery scratch.

This changes touchstones to treat non-gemstone rings like other
classes of objects instead of like gems.  I made mineral rings keep
acting like gemstone rings--I'm not sure whether that's right.

doc/fixes36.3
src/apply.c

index c87d9022d8b449866bdae50b927d1bccd687ab44..2d045e8aa698db15fc6dfb0fd7c3443cd0795ef0 100644 (file)
@@ -1,4 +1,4 @@
-$NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.113 $ $NHDT-Date: 1568831820 2019/09/18 18:37:00 $
+$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,
@@ -141,6 +141,10 @@ 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
index cf1232bb5693d49d55be089c88c307ecf2f7e813..11bd09d03a8842813d6eb7edd955aa541f9b8e32 100644 (file)
@@ -1,4 +1,4 @@
-/* NetHack 3.6 apply.c $NHDT-Date: 1568831822 2019/09/18 18:37:02 $  $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.276 $ */
+/* 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. */
@@ -2317,13 +2317,14 @@ STATIC_OVL 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)
@@ -2368,7 +2369,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) {