From: nethack.rankin Date: Sun, 18 Feb 2007 03:33:43 +0000 (+0000) Subject: polyself weapon drop feedback X-Git-Tag: MOVE2GIT~704 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=1e7ace58f7658f308bad71a9451199c818d530da;p=nethack polyself weapon drop feedback 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. --- diff --git a/src/polyself.c b/src/polyself.c index da58d70c1..1787387d1 100644 --- a/src/polyself.c +++ b/src/polyself.c @@ -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(); diff --git a/src/weapon.c b/src/weapon.c index 1127d0ddd..a3e46ca71 100644 --- a/src/weapon.c +++ b/src/weapon.c @@ -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: