]> granicus.if.org Git - nethack/commitdiff
polyself weapon drop feedback
authornethack.rankin <nethack.rankin>
Sun, 18 Feb 2007 03:33:43 +0000 (03:33 +0000)
committernethack.rankin <nethack.rankin>
Sun, 18 Feb 2007 03:33:43 +0000 (03:33 +0000)
     Don't say "you must drop your weapon" when it doesn't actually get
dropped.  And make "weapon" be more specific, comparable to the handing
for slippery fingers.

src/polyself.c
src/weapon.c

index da58d70c1a0348e8fd2d9a57c7e933944407f619..1787387d1faca37eb2d97574f0237e3138720ac7 100644 (file)
@@ -722,6 +722,8 @@ drop_weapon(alone)
 int alone;
 {
     struct obj *otmp;
+    const char *what, *which, *whichtoo;
+    boolean candropwep, candropswapwep;
 
     if (uwep) {
        /* !alone check below is currently superfluous but in the
@@ -729,16 +731,29 @@ int alone;
         * wear gloves but can wield weapons
         */
        if (!alone || cantwield(youmonst.data)) {
-           if (alone) You("find you must drop your weapon%s!",
-                          u.twoweap ? "s" : "");
+           candropwep = canletgo(uwep, "");
+           candropswapwep = !u.twoweap || canletgo(uswapwep, "");
+           if (alone) {
+               what = (candropwep && candropswapwep) ? "drop" : "release";
+               which = is_sword(uwep) ? "sword" : weapon_descr(uwep);
+               if (u.twoweap) {
+                   whichtoo = is_sword(uswapwep) ? "sword" :
+                               weapon_descr(uswapwep);
+                   if (strcmp(which, whichtoo)) which = "weapon";
+               }
+               if (uwep->quan != 1L || u.twoweap) which = makeplural(which);
+
+               You("find you must %s %s %s!", what,
+                   the_your[!!strncmp(which, "corpse", 6)], which);
+           }
            if (u.twoweap) {
                otmp = uswapwep;
                uswapwepgone();
-               if (canletgo(otmp, "")) dropx(otmp);
+               if (candropswapwep) dropx(otmp);
            }
            otmp = uwep;
            uwepgone();
-           if (canletgo(otmp, "")) dropx(otmp);
+           if (candropwep) dropx(otmp);
            update_inventory();
        } else if (!could_twoweap(youmonst.data)) {
            untwoweapon();
index 1127d0ddd0bb00797a1a2d62e40f9282dfc8711d..a3e46ca71975b59cff2360d390649a26fa0cba9d 100644 (file)
@@ -102,7 +102,8 @@ static NEARDATA const char kebabable[] = {
 };
 
 /* weapon's skill category name for use as generalized description of weapon */
-const char *weapon_descr(obj)
+const char *
+weapon_descr(obj)
 struct obj *obj;
 {
     int skill = weapon_type(obj);
@@ -112,7 +113,8 @@ struct obj *obj;
     switch (skill) {
     case P_NONE:
        /* not a weapon: use item class name; override "food" for corpses */
-       descr = (obj->otyp == CORPSE) ? "corpse" :
+       descr = (obj->otyp == CORPSE || obj->otyp == TIN || obj->otyp == EGG) ?
+               OBJ_NAME(objects[obj->otyp]) :
                def_oc_syms[(int)obj->oclass].name;
        break;
     case P_SLING: