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: