]> granicus.if.org Git - nethack/commitdiff
Fix autowielding tools taking no time
authorPasi Kallinen <paxed@alt.org>
Tue, 15 Mar 2022 09:34:45 +0000 (11:34 +0200)
committerPasi Kallinen <paxed@alt.org>
Tue, 15 Mar 2022 09:34:48 +0000 (11:34 +0200)
When applying some tools (whips, polearms, grapples), or rubbing
a lamp, or when fireassist is on and you fire something without
wielded launcher, the automatic wielding should take as much time
as wielding the item normally does.

Fixes #696

src/apply.c
src/dig.c
src/dothrow.c

index 086f9b9d857fe97706c1cf4d98863bd4eb7f794c..2dc448b698492a89feae1c000f0cf054de2d4ecb 100644 (file)
@@ -1576,8 +1576,14 @@ dorub(void)
             return ECMD_OK;
         }
     }
-    if (!wield_tool(obj, "rub"))
+    if (obj != uwep) {
+        if (wield_tool(obj, "rub")) {
+            cmdq_add_ec(dorub);
+            cmdq_add_key(obj->invlet);
+            return ECMD_TIME;
+        }
         return ECMD_OK;
+    }
 
     /* now uwep is obj */
     if (uwep->otyp == MAGIC_LAMP) {
@@ -2686,9 +2692,12 @@ use_whip(struct obj *obj)
     const char *msg_snap = "Snap!";
 
     if (obj != uwep) {
-        if (!wield_tool(obj, "lash"))
-            return ECMD_OK;
-        res = ECMD_TIME;
+        if (wield_tool(obj, "lash")) {
+            cmdq_add_ec(doapply);
+            cmdq_add_key(obj->invlet);
+            return ECMD_TIME;
+        }
+        return ECMD_OK;
     }
     if (!getdir((char *) 0))
         return (res|ECMD_CANCEL);
@@ -3078,9 +3087,12 @@ use_pole(struct obj *obj, boolean autohit)
         return ECMD_OK;
     }
     if (obj != uwep) {
-        if (!wield_tool(obj, "swing"))
-            return ECMD_OK;
-        res = ECMD_TIME;
+        if (wield_tool(obj, "swing")) {
+            cmdq_add_ec(doapply);
+            cmdq_add_key(obj->invlet);
+            return ECMD_TIME;
+        }
+        return ECMD_OK;
     }
     /* assert(obj == uwep); */
 
@@ -3331,10 +3343,12 @@ use_grapple(struct obj *obj)
         return ECMD_OK;
     }
     if (obj != uwep) {
-        if (!wield_tool(obj, "cast"))
-            return ECMD_OK;
-        else
-            res = ECMD_TIME;
+        if (wield_tool(obj, "cast")) {
+            cmdq_add_ec(doapply);
+            cmdq_add_key(obj->invlet);
+            return ECMD_TIME;
+        }
+        return ECMD_OK;
     }
     /* assert(obj == uwep); */
 
@@ -3947,12 +3961,10 @@ doapply(void)
             break;
         }
         pline("Sorry, I don't know how to use that.");
-        nomul(0);
-        return ECMD_OK;
+        return ECMD_FAIL;
     }
     if ((res & ECMD_TIME) && obj && obj->oartifact)
         arti_speak(obj);
-    nomul(0);
     return res;
 }
 
index 29dc38b845915e7fa8133d0b0174ff6f184c2c6e..b5d4676c2fadee986b15f5d85eccd9b5a17799b5 100644 (file)
--- a/src/dig.c
+++ b/src/dig.c
@@ -966,10 +966,13 @@ use_pick_axe(struct obj *obj)
 
     /* Check tool */
     if (obj != uwep) {
-        if (!wield_tool(obj, "swing"))
-            return ECMD_OK;
-        else
-            res = ECMD_TIME;
+        if (wield_tool(obj, "swing")) {
+            /* we're now wielding it. next turn, apply to dig. */
+            cmdq_add_ec(doapply);
+            cmdq_add_key(obj->invlet);
+            return ECMD_TIME;
+        }
+        return ECMD_OK;
     }
     ispick = is_pick(obj);
     verb = ispick ? "dig" : "chop";
index 7d56dfef49cdfa22f34c09ce72210a4a5e627f81..bdd35db79037678306004ec38e214425d90db678 100644 (file)
@@ -461,7 +461,7 @@ dofire(void)
                        swap to it and retry */
                     cmdq_add_ec(doswapweapon);
                     cmdq_add_ec(dofire);
-                    return ECMD_OK;
+                    return ECMD_TIME;
                 } else
                     You("have no ammunition readied.");
             }
@@ -502,7 +502,7 @@ dofire(void)
             /* swap weapons and retry fire */
             cmdq_add_ec(doswapweapon);
             cmdq_add_ec(dofire);
-            return ECMD_OK;
+            return ECMD_TIME;
         } else if ((olauncher = find_launcher(obj)) != 0) {
             /* wield launcher, retry fire */
             if (uwep && !flags.pushweapon)
@@ -510,7 +510,7 @@ dofire(void)
             cmdq_add_ec(dowield);
             cmdq_add_key(olauncher->invlet);
             cmdq_add_ec(dofire);
-            return ECMD_OK;
+            return ECMD_TIME;
         }
     }