OSDN Git Service

update year to 2020
[jnethack/source.git] / src / wield.c
index 63a5e77..1ccec8f 100644 (file)
@@ -1,10 +1,11 @@
-/* NetHack 3.6 wield.c $NHDT-Date: 1446887539 2015/11/07 09:12:19 $  $NHDT-Branch: master $:$NHDT-Revision: 1.47 $ */
+/* NetHack 3.6 wield.c $NHDT-Date: 1559670611 2019/06/04 17:50:11 $  $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.59 $ */
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
+/*-Copyright (c) Robert Patrick Rankin, 2009. */
 /* NetHack may be freely redistributed.  See license for details. */
 
 /* JNetHack Copyright */
 /* (c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000  */
-/* For 3.4-, Copyright (c) SHIRAKATA Kentaro, 2002-2016            */
+/* For 3.4-, Copyright (c) SHIRAKATA Kentaro, 2002-2020            */
 /* JNetHack may be freely redistributed.  See license for details. */
 
 #include "hack.h"
@@ -104,6 +105,10 @@ register struct obj *obj;
 */
             pline("%s\82Í\8bP\82«\82ð\8e~\82ß\82½\81D", xname(olduwep));
     }
+    if (uwep == obj
+        && ((uwep && uwep->oartifact == ART_OGRESMASHER)
+            || (olduwep && olduwep->oartifact == ART_OGRESMASHER)))
+        context.botl = 1;
     /* Note: Explicitly wielding a pick-axe will not give a "bashing"
      * message.  Wielding one via 'a'pplying it will.
      * 3.2.2:  Wielding arbitrary objects will give bashing message too.
@@ -115,7 +120,6 @@ register struct obj *obj;
                        : !is_weptool(obj) && !is_wet_towel(obj);
     } else
         unweapon = TRUE; /* for "bare hands" message */
-    update_inventory();
 }
 
 STATIC_OVL boolean
@@ -129,7 +133,7 @@ struct obj *obj;
         return FALSE;
 
     /* Prevent wielding cockatrice when not wearing gloves --KAA */
-#if 0 /*JP*/
+#if 0 /*JP:T*/
     You("wield %s in your bare %s.",
         corpse_xname(obj, (const char *) 0, CXN_PFX_THE),
         makeplural(body_part(HAND)));
@@ -171,7 +175,7 @@ struct obj *wep;
         /* hero must have been life-saved to get here; use a turn */
         res++; /* corpse won't be wielded */
     } else if (uarms && bimanual(wep)) {
-#if 0 /*JP*/
+#if 0 /*JP:T*/
         You("cannot wield a two-handed %s while wearing a shield.",
             is_sword(wep) ? "sword" : wep->otyp == BATTLE_AXE ? "axe"
                                                               : "weapon");
@@ -203,17 +207,26 @@ struct obj *wep;
             pline("%s\82Í\8f\9f\8eè\82É\82 \82È\82½\82Ì%s\82É\91\95\94õ\82³\82ê\82½\81D",
                   xname(wep), body_part(HAND));
 #endif
-            wep->bknown = TRUE;
+            set_bknown(wep, 1);
         } else {
             /* The message must be printed before setuwep (since
              * you might die and be revived from changing weapons),
              * and the message must be before the death message and
              * Lifesaved rewielding.  Yet we want the message to
              * say "weapon in hand", thus this kludge.
+             * [That comment is obsolete.  It dates from the days (3.0)
+             * when unwielding Firebrand could cause hero to be burned
+             * to death in Hell due to loss of fire resistance.
+             * "Lifesaved re-wielding or re-wearing" is ancient history.]
              */
             long dummy = wep->owornmask;
 
             wep->owornmask |= W_WEP;
+            if (wep->otyp == AKLYS && (wep->owornmask & W_WEP) != 0)
+/*JP
+                You("secure the tether.");
+*/
+                You("\82Ð\82à\82ð\82µ\82Á\82©\82è\82Æ\8cÅ\92è\82µ\82½\81D");
             prinv((char *) 0, wep, 0L);
             wep->owornmask = dummy;
         }
@@ -225,7 +238,7 @@ struct obj *wep;
         if (artifact_light(wep) && !wep->lamplit) {
             begin_burn(wep, FALSE);
             if (!Blind)
-#if 0 /*JP*/
+#if 0 /*JP:T*/
                 pline("%s to shine %s!", Tobjnam(wep, "begin"),
                       arti_light_description(wep));
 #else
@@ -238,7 +251,10 @@ struct obj *wep;
         if (Race_if(PM_ELF) && !wep->oartifact
             && objects[wep->otyp].oc_material == IRON) {
             /* Elves are averse to wielding cold iron */
+/*JP
             You("have an uneasy feeling about wielding cold iron.");
+*/
+            You("\97â\82½\82¢\93S\82ð\91\95\94õ\82·\82é\82±\82Æ\82É\95s\88À\82È\8bC\8e\9d\82É\82È\82Á\82½.");
             change_luck(-1);
         }
 #endif
@@ -247,7 +263,7 @@ struct obj *wep;
 
             if ((this_shkp = shop_keeper(inside_shop(u.ux, u.uy)))
                 != (struct monst *) 0) {
-#if 0 /*JP*/
+#if 0 /*JP:T*/
                 pline("%s says \"You be careful with my %s!\"",
                       shkname(this_shkp), xname(wep));
 #else
@@ -265,7 +281,9 @@ setuqwep(obj)
 register struct obj *obj;
 {
     setworn(obj, W_QUIVER);
-    update_inventory();
+    /* no extra handling needed; this used to include a call to
+       update_inventory() but that's already performed by setworn() */
+    return;
 }
 
 void
@@ -273,17 +291,21 @@ setuswapwep(obj)
 register struct obj *obj;
 {
     setworn(obj, W_SWAPWEP);
-    update_inventory();
+    return;
 }
 
 /*** Commands to change particular slot(s) ***/
 
-static NEARDATA const char wield_objs[] = { ALL_CLASSES, ALLOW_NONE,
-                                            WEAPON_CLASS, TOOL_CLASS, 0 };
-static NEARDATA const char ready_objs[] = { COIN_CLASS, ALL_CLASSES,
-                                            ALLOW_NONE, WEAPON_CLASS, 0 };
-static NEARDATA const char bullets[] = /* (note: different from dothrow.c) */
-    { COIN_CLASS, ALL_CLASSES, ALLOW_NONE, GEM_CLASS, WEAPON_CLASS, 0 };
+static NEARDATA const char wield_objs[] = {
+    ALL_CLASSES, ALLOW_NONE, WEAPON_CLASS, TOOL_CLASS, 0
+};
+static NEARDATA const char ready_objs[] = {
+    ALLOW_COUNT, COIN_CLASS, ALL_CLASSES, ALLOW_NONE, WEAPON_CLASS, 0
+};
+static NEARDATA const char bullets[] = { /* (note: different from dothrow.c) */
+    ALLOW_COUNT, COIN_CLASS, ALL_CLASSES, ALLOW_NONE,
+    GEM_CLASS, WEAPON_CLASS, 0
+};
 
 int
 dowield()
@@ -374,10 +396,10 @@ doswapweapon()
     result = ready_weapon(oldswap);
 
     /* Set your new secondary weapon */
-    if (uwep == oldwep)
+    if (uwep == oldwep) {
         /* Wield failed for some reason */
         setuswapwep(oldswap);
-    else {
+    else {
         setuswapwep(oldwep);
         if (uswapwep)
             prinv((char *) 0, uswapwep, 0L);
@@ -397,80 +419,224 @@ doswapweapon()
 int
 dowieldquiver()
 {
-    register struct obj *newquiver;
-    const char *quivee_types =
-        (uslinging()
-         || (uswapwep && objects[uswapwep->otyp].oc_skill == P_SLING))
-            ? bullets
-            : ready_objs;
+    char qbuf[QBUFSZ];
+    struct obj *newquiver;
+    const char *quivee_types;
+    int res;
+    boolean finish_splitting = FALSE,
+            was_uwep = FALSE, was_twoweap = u.twoweap;
 
     /* Since the quiver isn't in your hands, don't check cantwield(), */
     /* will_weld(), touch_petrifies(), etc. */
     multi = 0;
-
-    /* Prompt for a new quiver */
-    if (!(newquiver = getobj(quivee_types, "ready")))
+    /* forget last splitobj() before calling getobj() with ALLOW_COUNT */
+    context.objsplit.child_oid = context.objsplit.parent_oid = 0;
+
+    /* Prompt for a new quiver: "What do you want to ready?"
+       (Include gems/stones as likely candidates if either primary
+       or secondary weapon is a sling.) */
+    quivee_types = (uslinging()
+                    || (uswapwep
+                        && objects[uswapwep->otyp].oc_skill == P_SLING))
+                   ? bullets
+                   : ready_objs;
+    newquiver = getobj(quivee_types, "ready");
+
+    if (!newquiver) {
         /* Cancelled */
         return 0;
-
-    /* Handle no object, or object in other slot */
-    /* Any type is okay, since we give no intrinsics anyways */
-    if (newquiver == &zeroobj) {
+    } else if (newquiver == &zeroobj) { /* no object */
         /* Explicitly nothing */
         if (uquiver) {
 /*JP
             You("now have no ammunition readied.");
 */
             pline("\91\95\93U\82·\82é\82½\82ß\82Ì\96î\92e\82ª\82È\82­\82È\82Á\82½\81D");
-            setuqwep(newquiver = (struct obj *) 0);
+            /* skip 'quivering: prinv()' */
+            setuqwep((struct obj *) 0);
         } else {
 /*JP
             You("already have no ammunition readied!");
 */
             pline("\91\95\93U\82·\82é\82½\82ß\82Ì\96î\92e\82ª\82È\82¢\81D");
-            return 0;
         }
+        return 0;
+    } else if (newquiver->o_id == context.objsplit.child_oid) {
+        /* if newquiver is the result of supplying a count to getobj()
+           we don't want to split something already in the quiver;
+           for any other item, we need to give it its own inventory slot */
+        if (uquiver && uquiver->o_id == context.objsplit.parent_oid) {
+            unsplitobj(newquiver);
+            goto already_quivered;
+        }
+        finish_splitting = TRUE;
     } else if (newquiver == uquiver) {
+    already_quivered:
 /*JP
         pline("That ammunition is already readied!");
 */
         pline("\82à\82¤\91\95\93U\82³\82ê\82Ä\82¢\82é\81I");
         return 0;
-    } else if (newquiver == uwep) {
-        /* Prevent accidentally readying the main weapon */
-#if 0 /*JP*/
-        pline("%s already being used as a weapon!",
-              !is_plural(uwep) ? "That is" : "They are");
-#else
-        pline("\82à\82¤\95\90\8aí\82Æ\82µ\82Ä\8eg\82í\82ê\82Ä\82¢\82é\81I");
-#endif
-        return 0;
     } else if (newquiver->owornmask & (W_ARMOR | W_ACCESSORY | W_SADDLE)) {
 /*JP
         You("cannot ready that!");
 */
         You("\82»\82ê\82Í\8eg\82¦\82È\82¢\81I");
         return 0;
-    } else {
-        long dummy;
+    } else if (newquiver == uwep) {
+        int weld_res = !uwep->bknown;
 
-        /* Check if it's the secondary weapon */
-        if (newquiver == uswapwep) {
-            setuswapwep((struct obj *) 0);
-            untwoweapon();
+        if (welded(uwep)) {
+            weldmsg(uwep);
+            reset_remarm(); /* same as dowield() */
+            return weld_res;
         }
+        /* offer to split stack if wielding more than 1 */
+        if (uwep->quan > 1L && inv_cnt(FALSE) < 52 && splittable(uwep)) {
+#if 0 /*JP:T*/
+            Sprintf(qbuf, "You are wielding %ld %s.  Ready %ld of them?",
+                    uwep->quan, simpleonames(uwep), uwep->quan - 1L);
+#else
+            Sprintf(qbuf, "\82 \82È\82½\82Í%ld %s\82ð\91\95\94õ\82µ\82Ä\82¢\82é\81D\82»\82Ì\82¤\82¿ %ld \82ð\8f\80\94õ\82·\82é\81H",
+                    uwep->quan, simpleonames(uwep), uwep->quan - 1L);
+#endif
+            switch (ynq(qbuf)) {
+            case 'q':
+                return 0;
+            case 'y':
+                /* leave 1 wielded, split rest off and put into quiver */
+                newquiver = splitobj(uwep, uwep->quan - 1L);
+                finish_splitting = TRUE;
+                goto quivering;
+            default:
+                break;
+            }
+/*JP
+            Strcpy(qbuf, "Ready all of them instead?");
+*/
+            Strcpy(qbuf, "\91ã\82í\82è\82É\82±\82ê\82ç\91S\95\94\82ð\8f\80\94õ\82·\82é\81H");
+        } else {
+#if 0 /*JP*/
+            boolean use_plural = (is_plural(uwep) || pair_of(uwep));
 
-        /* Okay to put in quiver; print it */
-        dummy = newquiver->owornmask;
-        newquiver->owornmask |= W_QUIVER;
-        prinv((char *) 0, newquiver, 0L);
-        newquiver->owornmask = dummy;
+            Sprintf(qbuf, "You are wielding %s.  Ready %s instead?",
+                    !use_plural ? "that" : "those",
+                    !use_plural ? "it" : "them");
+#else /* \95s\8e©\91R\82¾\82¯\82Ç\82Æ\82è\82 \82¦\82¸\82±\82ê\82Å\82æ\82µ\82Æ\82·\82é */
+            Strcpy(qbuf, "\82 \82È\82½\82Í\82»\82ê\82ð\91\95\94õ\82µ\82Ä\82¢\82é\81D\91ã\82í\82è\82É\82»\82ê\82ð\8f\80\94õ\82·\82é\81H");
+#endif
+        }
+        /* require confirmation to ready the main weapon */
+        if (ynq(qbuf) != 'y') {
+            (void) Shk_Your(qbuf, uwep); /* replace qbuf[] contents */
+#if 0 /*JP:T*/
+            pline("%s%s %s wielded.", qbuf,
+                  simpleonames(uwep), otense(uwep, "remain"));
+#else
+            pline("%s%s\82ð\91\95\94õ\82µ\82½\82Ü\82Ü\82É\82µ\82½\81D", qbuf,
+                  simpleonames(uwep));
+#endif
+            return 0;
+        }
+        /* quivering main weapon, so no longer wielding it */
+        setuwep((struct obj *) 0);
+        untwoweapon();
+        was_uwep = TRUE;
+    } else if (newquiver == uswapwep) {
+        if (uswapwep->quan > 1L && inv_cnt(FALSE) < 52
+            && splittable(uswapwep)) {
+#if 0 /*JP*/
+            Sprintf(qbuf, "%s %ld %s.  Ready %ld of them?",
+                    u.twoweap ? "You are dual wielding"
+                              : "Your alternate weapon is",
+                    uswapwep->quan, simpleonames(uswapwep),
+                    uswapwep->quan - 1L);
+#else /*TODO:\93ñ\93\81\97¬\82Ì\82Æ\82«\82Í\82©\82È\82è\95s\8e©\91R */
+            Sprintf(qbuf, "%s %ld %s\82¾\81D\82»\82Ì\82¤\82¿%ld\82ð\8f\80\94õ\82·\82é\81H",
+                    u.twoweap ? "\82 \82È\82½\82ª\82»\82ê\82¼\82ê\91\95\94õ\82µ\82Ä\82¢\82é\82Ì\82Í"
+                              : "\82 \82È\82½\82Ì\97\\94õ\82Ì\95\90\8aí\82Í",
+                    uswapwep->quan, simpleonames(uswapwep),
+                    uswapwep->quan - 1L);
+#endif
+            switch (ynq(qbuf)) {
+            case 'q':
+                return 0;
+            case 'y':
+                /* leave 1 alt-wielded, split rest off and put into quiver */
+                newquiver = splitobj(uswapwep, uswapwep->quan - 1L);
+                finish_splitting = TRUE;
+                goto quivering;
+            default:
+                break;
+            }
+/*JP
+            Strcpy(qbuf, "Ready all of them instead?");
+*/
+            Strcpy(qbuf, "\91ã\82í\82è\82É\82±\82ê\82ç\91S\95\94\82ð\8f\80\94õ\82·\82é\81H");
+        } else {
+#if 0 /*JP*/
+            boolean use_plural = (is_plural(uswapwep) || pair_of(uswapwep));
+
+            Sprintf(qbuf, "%s your %s weapon.  Ready %s instead?",
+                    !use_plural ? "That is" : "Those are",
+                    u.twoweap ? "second" : "alternate",
+                    !use_plural ? "it" : "them");
+#else
+            Sprintf(qbuf, "\82»\82ê\82Í%s\95\90\8aí\82¾\81D\91ã\82í\82è\82É\82»\82ê\82ð\8f\80\94õ\82·\82é\81H",
+                    u.twoweap ? "\93ñ\94Ô\96Ú\82Ì" : "\97\\94õ\82Ì");
+#endif
+        }
+        /* require confirmation to ready the alternate weapon */
+        if (ynq(qbuf) != 'y') {
+            (void) Shk_Your(qbuf, uswapwep); /* replace qbuf[] contents */
+#if 0 /*JP:T*/
+            pline("%s%s %s %s.", qbuf,
+                  simpleonames(uswapwep), otense(uswapwep, "remain"),
+                  u.twoweap ? "wielded" : "as secondary weapon");
+#else
+            pline("%s%s\82ð%s\82Ü\82Ü\82É\82µ\82½\81D", qbuf,
+                  simpleonames(uswapwep),
+                  u.twoweap ? "\91\95\94õ\82µ\82½" : "\93ñ\94Ô\96Ú\82Ì\95\90\8aí\82Ì");
+#endif
+            return 0;
+        }
+        /* quivering alternate weapon, so no more uswapwep */
+        setuswapwep((struct obj *) 0);
+        untwoweapon();
     }
 
-    /* Finally, place it in the quiver */
+ quivering:
+    if (finish_splitting) {
+        freeinv(newquiver);
+        newquiver->nomerge = 1;
+        addinv(newquiver);
+        newquiver->nomerge = 0;
+    }
+    /* place item in quiver before printing so that inventory feedback
+       includes "(at the ready)" */
     setuqwep(newquiver);
-    /* Take no time since this is a convenience slot */
-    return 0;
+    prinv((char *) 0, newquiver, 0L);
+
+    /* quiver is a convenience slot and manipulating it ordinarily
+       consumes no time, but unwielding primary or secondary weapon
+       should take time (perhaps we're adjacent to a rust monster
+       or disenchanter and want to hit it immediately, but not with
+       something we're wielding that's vulnerable to its damage) */
+    res = 0;
+    if (was_uwep) {
+/*JP
+        You("are now empty %s.", body_part(HANDED));
+*/
+        You("\95\90\8aí\82ð\8e\9d\82½\82È\82­\82È\82Á\82½\81D");
+        res = 1;
+    } else if (was_twoweap && !u.twoweap) {
+/*JP
+        You("are no longer wielding two weapons at once.");
+*/
+        You("\93ñ\93\81\97¬\82ð\82â\82ß\82½\81D");
+        res = 1;
+    }
+    return res;
 }
 
 /* used for #rub and for applying pick-axe, whip, grappling hook or polearm */
@@ -479,8 +645,10 @@ wield_tool(obj, verb)
 struct obj *obj;
 const char *verb; /* "rub",&c */
 {
+#if 0 /*JP*/
     const char *what;
     boolean more_than_1;
+#endif
 
     if (obj == uwep)
         return TRUE; /* nothing to do if already wielding it */
@@ -488,15 +656,13 @@ const char *verb; /* "rub",&c */
 #if 0 /*JP*/
     if (!verb)
         verb = "wield";
-#endif
     what = xname(obj);
-#if 0 /*JP*/
     more_than_1 = (obj->quan > 1L || strstri(what, "pair of ") != 0
                    || strstri(what, "s of ") != 0);
 #endif
 
     if (obj->owornmask & (W_ARMOR | W_ACCESSORY)) {
-#if 0 /*JP*/
+#if 0 /*JP:T*/
         You_cant("%s %s while wearing %s.", verb, yname(obj),
                  more_than_1 ? "them" : "it");
 #else
@@ -536,7 +702,7 @@ const char *verb; /* "rub",&c */
     }
     /* check shield */
     if (uarms && bimanual(obj)) {
-#if 0 /*JP*/
+#if 0 /*JP:T*/
         You("cannot %s a two-handed %s while wearing a shield.", verb,
             (obj->oclass == WEAPON_CLASS) ? "weapon" : "tool");
 #else
@@ -556,11 +722,16 @@ const char *verb; /* "rub",&c */
     } else {
         struct obj *oldwep = uwep;
 
+        if (will_weld(obj)) {
+            /* hope none of ready_weapon()'s early returns apply here... */
+            (void) ready_weapon(obj);
+        } else {
 /*JP
-        You("now wield %s.", doname(obj));
+            You("now wield %s.", doname(obj));
 */
-        You("%s\82ð\91\95\94õ\82µ\82½\81D", doname(obj));
-        setuwep(obj);
+            You("%s\82ð\91\95\94õ\82µ\82½\81D", doname(obj));
+            setuwep(obj);
+        }
         if (flags.pushweapon && oldwep && uwep != oldwep)
             setuswapwep(oldwep);
     }
@@ -621,7 +792,7 @@ can_twoweapon()
 */
         You("\8f\82\82ð\8e\9d\82Á\82Ä\82¢\82é\8aÔ\82Í\97¼\8eè\8e\9d\82¿\82Å\82«\82È\82¢\81D");
     else if (uswapwep->oartifact)
-#if 0 /*JP*/
+#if 0 /*JP:T*/
         pline("%s being held second to another weapon!",
               Yobjnam2(uswapwep, "resist"));
 #else
@@ -633,7 +804,7 @@ can_twoweapon()
         ; /* must be life-saved to reach here; return FALSE */
     } else if (Glib || uswapwep->cursed) {
         if (!Glib)
-            uswapwep->bknown = TRUE;
+            set_bknown(uswapwep, 1);
         drop_uswapwep();
     } else
         return TRUE;
@@ -752,14 +923,35 @@ register int amount;
     if (!uwep || (uwep->oclass != WEAPON_CLASS && !is_weptool(uwep))) {
         char buf[BUFSZ];
 
-#if 0 /*JP*/
-        Sprintf(buf, "Your %s %s.", makeplural(body_part(HAND)),
-                (amount >= 0) ? "twitch" : "itch");
+        if (amount >= 0 && uwep && will_weld(uwep)) { /* cursed tin opener */
+            if (!Blind) {
+#if 0 /*JP:T*/
+                Sprintf(buf, "%s with %s aura.",
+                        Yobjnam2(uwep, "glow"), an(hcolor(NH_AMBER)));
 #else
-        Sprintf(buf, "\82 \82È\82½\82Ì%s\82Í%s\81D", makeplural(body_part(HAND)),
-                (amount >= 0) ? "\82Ð\82«\82Â\82Á\82½" : "\83\80\83Y\83\80\83Y\82µ\82½");
+                Sprintf(buf, "%s\82Í%s\83I\81[\83\89\82É\82Â\82Â\82Ü\82ê\82½\81D",
+                        xname(uwep), hcolor(NH_AMBER));
 #endif
-        strange_feeling(otmp, buf);
+                uwep->bknown = !Hallucination; /* ok to bypass set_bknown() */
+            } else {
+                /* cursed tin opener is wielded in right hand */
+/*JP
+                Sprintf(buf, "Your right %s tingles.", body_part(HAND));
+*/
+                Sprintf(buf, "\82 \82È\82½\82Ì\89E%s\82Í\82¿\82­\82¿\82­\82µ\82½\81D", body_part(HAND));
+            }
+            uncurse(uwep);
+            update_inventory();
+        } else {
+#if 0 /*JP:T*/
+            Sprintf(buf, "Your %s %s.", makeplural(body_part(HAND)),
+                    (amount >= 0) ? "twitch" : "itch");
+#else
+            Sprintf(buf, "\82 \82È\82½\82Ì%s\82Í%s\81D", makeplural(body_part(HAND)),
+                    (amount >= 0) ? "\82Ð\82«\82Â\82Á\82½" : "\83\80\83Y\83\80\83Y\82µ\82½");
+#endif
+        }
+        strange_feeling(otmp, buf); /* pline()+docall()+useup() */
         exercise(A_DEX, (boolean) (amount >= 0));
         return 0;
     }
@@ -770,7 +962,7 @@ register int amount;
     if (uwep->otyp == WORM_TOOTH && amount >= 0) {
         multiple = (uwep->quan > 1L);
         /* order: message, transformation, shop handling */
-#if 0 /*JP*/
+#if 0 /*JP:T*/
         Your("%s %s much sharper now.", simpleonames(uwep),
              multiple ? "fuse, and become" : "is");
 #else
@@ -796,7 +988,7 @@ register int amount;
     } else if (uwep->otyp == CRYSKNIFE && amount < 0) {
         multiple = (uwep->quan > 1L);
         /* order matters: message, shop handling, transformation */
-#if 0 /*JP*/
+#if 0 /*JP:T*/
         Your("%s %s much duller now.", simpleonames(uwep),
              multiple ? "fuse, and become" : "is");
 #else
@@ -831,7 +1023,7 @@ register int amount;
     if (((uwep->spe > 5 && amount >= 0) || (uwep->spe < -5 && amount < 0))
         && rn2(3)) {
         if (!Blind)
-#if 0 /*JP*/
+#if 0 /*JP:T*/
             pline("%s %s for a while and then %s.",
                   Yobjnam2(uwep, "violently glow"), color,
                   otense(uwep, "evaporate"));
@@ -853,7 +1045,7 @@ register int amount;
         xtime = (amount * amount == 1) ? "moment" : "while";
 */
         xtime = (amount*amount == 1) ? "\88ê\8fu" : "\82µ\82Î\82ç\82­\82Ì\8aÔ";
-#if 0 /*JP*/
+#if 0 /*JP:T*/
         pline("%s %s for a %s.",
               Yobjnam2(uwep, amount == 0 ? "violently glow" : "glow"), color,
               xtime);
@@ -883,7 +1075,7 @@ register int amount;
      * spe dependent.  Give an obscure clue here.
      */
     if (uwep->oartifact == ART_MAGICBANE && uwep->spe >= 0) {
-#if 0 /*JP*/
+#if 0 /*JP:T*/
         Your("right %s %sches!", body_part(HAND),
              (((amount > 1) && (uwep->spe > 1)) ? "flin" : "it"));
 #else
@@ -910,7 +1102,7 @@ welded(obj)
 register struct obj *obj;
 {
     if (obj && obj == uwep && will_weld(obj)) {
-        obj->bknown = TRUE;
+        set_bknown(obj, 1);
         return 1;
     }
     return 0;