From: SHIRAKATA Kentaro Date: Sun, 8 May 2022 13:50:01 +0000 (+0900) Subject: split fixing curse trouble into separate function X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=0315cd876a6d6c56e4b55f72f48a6023f75c8385;p=nethack split fixing curse trouble into separate function --- diff --git a/src/pray.c b/src/pray.c index d8a3cc97c..dea8abe27 100644 --- a/src/pray.c +++ b/src/pray.c @@ -7,6 +7,7 @@ static int prayer_done(void); static struct obj *worst_cursed_item(void); static int in_trouble(void); +static void fix_curse_trouble(struct obj *, const char *); static void fix_worst_trouble(int); static void angrygods(aligntyp); static void at_your_feet(const char *); @@ -328,6 +329,30 @@ worst_cursed_item(void) return otmp; } +static void +fix_curse_trouble(struct obj *otmp, const char *what) +{ + if (!otmp) { + impossible("fix_worst_trouble: nothing to uncurse."); + return; + } + if (otmp == uarmg && Glib) { + make_glib(0); + Your("%s are no longer slippery.", gloves_simple_name(uarmg)); + if (!otmp->cursed) + return; + } + if (!Blind || (otmp == ublindf && Blindfolded_only)) { + pline("%s %s.", + what ? what : (const char *) Yobjnam2(otmp, "softly glow"), + hcolor(NH_AMBER)); + iflags.last_msg = PLNMSG_OBJ_GLOWS; + otmp->bknown = !Hallucination; /* ok to skip set_bknown() */ + } + uncurse(otmp); + update_inventory(); +} + static void fix_worst_trouble(int trouble) { @@ -409,8 +434,10 @@ fix_worst_trouble(int trouble) if (otmp == uright) what = rightglow; } - if (otmp) - goto decurse; + if (otmp) { + fix_curse_trouble(otmp, what); + break; + } } break; case TROUBLE_STUCK_IN_WALL: @@ -441,11 +468,13 @@ fix_worst_trouble(int trouble) if (otmp == uright) what = rightglow; } - goto decurse; + fix_curse_trouble(otmp, what); + break; case TROUBLE_UNUSEABLE_HANDS: if (welded(uwep)) { otmp = uwep; - goto decurse; + fix_curse_trouble(otmp, what); + break; } if (Upolyd && nohands(g.youmonst.data)) { if (!Unchanging) { @@ -453,7 +482,8 @@ fix_worst_trouble(int trouble) rehumanize(); /* "You return to {normal} form." */ } else if ((otmp = unchanger()) != 0 && otmp->cursed) { /* otmp is an amulet of unchanging */ - goto decurse; + fix_curse_trouble(otmp, what); + break; } } if (nohands(g.youmonst.data) || !freehand()) @@ -461,7 +491,8 @@ fix_worst_trouble(int trouble) break; case TROUBLE_CURSED_BLINDFOLD: otmp = ublindf; - goto decurse; + fix_curse_trouble(otmp, what); + break; case TROUBLE_LYCANTHROPE: you_unwere(TRUE); break; @@ -479,8 +510,7 @@ fix_worst_trouble(int trouble) otmp = uarmg; else if (Cursed_obj(uarmf, FUMBLE_BOOTS)) otmp = uarmf; - goto decurse; - /*NOTREACHED*/ + fix_curse_trouble(otmp, what); break; case TROUBLE_CURSED_ITEMS: otmp = worst_cursed_item(); @@ -488,26 +518,7 @@ fix_worst_trouble(int trouble) what = rightglow; else if (otmp == uleft) what = leftglow; - decurse: - if (!otmp) { - impossible("fix_worst_trouble: nothing to uncurse."); - return; - } - if (otmp == uarmg && Glib) { - make_glib(0); - Your("%s are no longer slippery.", gloves_simple_name(uarmg)); - if (!otmp->cursed) - break; - } - if (!Blind || (otmp == ublindf && Blindfolded_only)) { - pline("%s %s.", - what ? what : (const char *) Yobjnam2(otmp, "softly glow"), - hcolor(NH_AMBER)); - iflags.last_msg = PLNMSG_OBJ_GLOWS; - otmp->bknown = !Hallucination; /* ok to skip set_bknown() */ - } - uncurse(otmp); - update_inventory(); + fix_curse_trouble(otmp, what); break; case TROUBLE_POISONED: /* override Fixed_abil; ignore items which confer that */