diff --git a/src/wield.c b/src/wield.c index b07952ed1..9aaea38fc 100644 --- a/src/wield.c +++ b/src/wield.c @@ -56,6 +56,7 @@ staticfn boolean cant_wield_corpse(struct obj *) NONNULLARG1; staticfn int ready_weapon(struct obj *) NO_NNARGS; staticfn int ready_ok(struct obj *) NO_NNARGS; staticfn int wield_ok(struct obj *) NO_NNARGS; +staticfn void finish_splitting(struct obj *); /* used by will_weld() */ /* probably should be renamed */ @@ -336,13 +337,20 @@ wield_ok(struct obj *obj) return GETOBJ_DOWNPLAY; } +staticfn void +finish_splitting(struct obj *obj) +{ + /* obj was split off from something; give it its own invlet */ + freeinv(obj); + addinv_nomerge(obj); +} + /* the #wield command - wield a weapon */ int dowield(void) { char qbuf[QBUFSZ]; struct obj *wep, *oldwep; - boolean finish_splitting = FALSE; int result; /* May we attempt this? */ @@ -384,7 +392,7 @@ dowield(void) wep = uwep; goto already_wielded; } - finish_splitting = TRUE; + finish_splitting(wep); goto wielding; } @@ -405,7 +413,7 @@ dowield(void) case 'y': /* leave N-1 quivered, split off 1 to wield */ wep = splitobj(uquiver, 1L); - finish_splitting = TRUE; + finish_splitting(wep); goto wielding; default: break; @@ -433,12 +441,6 @@ dowield(void) } wielding: - if (finish_splitting) { - /* wep was split off from something; give it its own invlet */ - freeinv(wep); - addinv_nomerge(wep); - } - /* Set your new primary weapon */ oldwep = uwep; result = ready_weapon(wep); @@ -507,8 +509,7 @@ doquiver_core(const char *verb) /* "ready" or "fire" */ char qbuf[QBUFSZ]; struct obj *newquiver; int res; - boolean finish_splitting = FALSE, - was_uwep = FALSE, was_twoweap = u.twoweap; + boolean was_uwep = FALSE, was_twoweap = u.twoweap; /* Since the quiver isn't in your hands, don't check cantwield(), will_weld(), touch_petrifies(), etc. */ @@ -551,7 +552,7 @@ doquiver_core(const char *verb) /* "ready" or "fire" */ unsplitobj(newquiver); return ECMD_OK; } - finish_splitting = TRUE; + finish_splitting(newquiver); } else if (newquiver == uquiver) { already_quivered: pline("That ammunition is already readied!"); @@ -578,7 +579,7 @@ doquiver_core(const char *verb) /* "ready" or "fire" */ case 'y': /* leave 1 wielded, split rest off and put into quiver */ newquiver = splitobj(uwep, uwep->quan - 1L); - finish_splitting = TRUE; + finish_splitting(newquiver); goto quivering; default: break; @@ -616,7 +617,7 @@ doquiver_core(const char *verb) /* "ready" or "fire" */ case 'y': /* leave 1 alt-wielded, split rest off and put into quiver */ newquiver = splitobj(uswapwep, uswapwep->quan - 1L); - finish_splitting = TRUE; + finish_splitting(newquiver); goto quivering; default: break; @@ -644,11 +645,6 @@ doquiver_core(const char *verb) /* "ready" or "fire" */ } quivering: - if (finish_splitting) { - freeinv(newquiver); - addinv_nomerge(newquiver); - } - if (!strcmp(verb, "ready")) { /* place item in quiver before printing so that inventory feedback includes "(at the ready)" */