]> granicus.if.org Git - nethack/commitdiff
fix #K2924 - breaking a wand without free hands
authorPatR <rankin@nethack.org>
Thu, 12 Nov 2020 12:30:25 +0000 (04:30 -0800)
committerPatR <rankin@nethack.org>
Thu, 12 Nov 2020 12:30:25 +0000 (04:30 -0800)
Breaking a wand didn't require the hero to have free hands.
That's definitely a bug when they're both welded to the same
two-handed weapon.  It's debatable when welded separately to
a one-handed weapon and to a shield but simpler to pretend
there's no such distinction.

This also makes glass wand join balsa wand as "fragile".  Hero
doesn't need as much strength to break them as other wands and
the wording for breaking them is slightly different.

My fixes entry initially had a trailing space.  When I took
that out, I spotted a couple of others so take those out too.

doc/fixes37.0
src/apply.c

index 9774892e71aab40e7f247354d9f7d585047273f3..10cead1e50870fd5c2f7dbf929f104ce63e62c5c 100644 (file)
@@ -1,4 +1,4 @@
-NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.349 $ $NHDT-Date: 1604880453 2020/11/09 00:07:33 $
+NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.350 $ $NHDT-Date: 1605184219 2020/11/12 12:30:19 $
 
 General Fixes and Modified Features
 -----------------------------------
@@ -290,6 +290,9 @@ monster hiding under an egg that hatched was kept hidden
 restful sleep regenerates hit points
 attacking non-adjacent concealed mimic by applying a polearm would make the
        hero be stuck to that mimic
+hero could break a wand ("raising the wand high over your head, you break it
+       in two") even if hands were welded to a two-handed weapon or to a
+       one-handed weapon and also to a shield
 
 
 Fixes to 3.7.0-x Problems that Were Exposed Via git Repository
@@ -644,7 +647,7 @@ always print a message when the hero level teleports (github #265)
 remove Sokoban luck penalties for actions you can't cheat with (github #260)
 sounds for minotaurs (github #298)
 correct the Guidebook descriptions for msdos video_width and video_height to
-       state that they work with video:vesa; the video:vga setting that was 
+       state that they work with video:vesa; the video:vga setting that was
        described there forces the 640x480x16 mode where video_width and
        video_height don't operate (github #294)
 redo rndmonst() to operate in a single pass (github pull request #286)
@@ -690,7 +693,7 @@ resurrect 'makedefs -m' to be able to derive default mons[].diffculty values
        suitable for assigning to new or changed monsters
 convert obj->oextra->omid from pointer to scalar
 get rid of unused obj->oextra->olong
-relocated unmaintained code to outdated folder, specifically sys/amiga, 
+relocated unmaintained code to outdated folder, specifically sys/amiga,
        sys/atari, sys/be, sys/mac, sys/os2, sys/wince, win/Qt3, win/gem,
        win/gnome, include/amiconf.h, include/beconf.h, include/def_os2.h,
        include/os2conf.h, include/macconf.h, include/tosconf.h,
index 9c742959c35b50cb849600527918066fae76ffc2..d5f8a17970296294a57debcf2a6bc25fa0e902dd 100644 (file)
@@ -1,4 +1,4 @@
-/* NetHack 3.7 apply.c $NHDT-Date: 1604442295 2020/11/03 22:24:55 $  $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.330 $ */
+/* NetHack 3.7 apply.c $NHDT-Date: 1605184220 2020/11/12 12:30:20 $  $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.331 $ */
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /*-Copyright (c) Robert Patrick Rankin, 2012. */
 /* NetHack may be freely redistributed.  See license for details. */
@@ -3406,21 +3406,24 @@ struct obj *obj;
     boolean fillmsg = FALSE;
     int expltype = EXPL_MAGICAL;
     char confirm[QBUFSZ], buf[BUFSZ];
-    boolean is_fragile = objdescr_is(obj, "balsa");
-
-    if (!paranoid_query(ParanoidBreakwand,
-                       safe_qbuf(confirm,
-                                 "Are you really sure you want to break ",
-                                 "?", obj, yname, ysimple_name, "the wand")))
-        return 0;
+    boolean is_fragile = (objdescr_is(obj, "balsa")
+                          || objdescr_is(obj, "glass"));
 
     if (nohands(g.youmonst.data)) {
         You_cant("break %s without hands!", yname(obj));
         return 0;
+    } else if (!freehand()) {
+        Your("%s are occupied!", makeplural(body_part(HAND)));
+        return 0;
     } else if (ACURR(A_STR) < (is_fragile ? 5 : 10)) {
         You("don't have the strength to break %s!", yname(obj));
         return 0;
     }
+    if (!paranoid_query(ParanoidBreakwand,
+                        safe_qbuf(confirm,
+                                  "Are you really sure you want to break ",
+                                  "?", obj, yname, ysimple_name, "the wand")))
+        return 0;
     pline("Raising %s high above your %s, you %s it in two!", yname(obj),
           body_part(HEAD), is_fragile ? "snap" : "break");