diff --git a/include/extern.h b/include/extern.h index 88955cc31..9385f41d4 100644 --- a/include/extern.h +++ b/include/extern.h @@ -2237,6 +2237,7 @@ E int FDECL(chwepon, (struct obj *,int)); E int FDECL(welded, (struct obj *)); E void FDECL(weldmsg, (struct obj *)); E void FDECL(setmnotwielded, (struct monst *,struct obj *)); +E void NDECL(drop_uswapwep); /* ### windows.c ### */ diff --git a/src/mkobj.c b/src/mkobj.c index 2068104bb..156b06044 100644 --- a/src/mkobj.c +++ b/src/mkobj.c @@ -714,6 +714,10 @@ register struct obj *otmp; otmp->cursed = 1; /* welded two-handed weapon interferes with some armor removal */ if (otmp == uwep && bimanual(uwep)) reset_remarm(); + /* rules at top of wield.c state that twoweapon cannot be done + with cursed alternate weapon */ + if (otmp == uswapwep && u.twoweap) + drop_uswapwep(); /* some cursed items need immediate updating */ if (carried(otmp) && confers_luck(otmp)) set_moreluck(); diff --git a/src/wield.c b/src/wield.c index fad266953..53daf89c8 100644 --- a/src/wield.c +++ b/src/wield.c @@ -440,20 +440,26 @@ can_twoweapon() Sprintf(kbuf, "%s corpse", an(mons[uswapwep->corpsenm].mname)); instapetrify(kbuf); } else if (Glib || uswapwep->cursed) { - char str[BUFSZ]; - struct obj *obj = uswapwep; - - /* Avoid trashing makeplural's static buffer */ - Strcpy(str, makeplural(body_part(HAND))); - Your("%s from your %s!", aobjnam(obj, "slip"), str); if (!Glib) - obj->bknown = TRUE; - dropx(obj); + uswapwep->bknown = TRUE; + drop_uswapwep(); } else return (TRUE); return (FALSE); } +void +drop_uswapwep() +{ + char str[BUFSZ]; + struct obj *obj = uswapwep; + + /* Avoid trashing makeplural's static buffer */ + Strcpy(str, makeplural(body_part(HAND))); + Your("%s from your %s!", aobjnam(obj, "slip"), str); + dropx(obj); +} + int dotwoweapon() {