Merge branch 'fix-pray-goto' of https://github.com/argrath/NetHack into pr765-767

This commit is contained in:
nhmall
2022-05-20 17:40:04 -04:00
+39 -28
View File
@@ -7,6 +7,7 @@
static int prayer_done(void); static int prayer_done(void);
static struct obj *worst_cursed_item(void); static struct obj *worst_cursed_item(void);
static int in_trouble(void); static int in_trouble(void);
static void fix_curse_trouble(struct obj *, const char *);
static void fix_worst_trouble(int); static void fix_worst_trouble(int);
static void angrygods(aligntyp); static void angrygods(aligntyp);
static void at_your_feet(const char *); static void at_your_feet(const char *);
@@ -328,6 +329,30 @@ worst_cursed_item(void)
return otmp; return otmp;
} }
static void
fix_curse_trouble(struct obj *otmp, const char *what)
{
if (!otmp) {
impossible("fix_curse_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 static void
fix_worst_trouble(int trouble) fix_worst_trouble(int trouble)
{ {
@@ -409,8 +434,10 @@ fix_worst_trouble(int trouble)
if (otmp == uright) if (otmp == uright)
what = rightglow; what = rightglow;
} }
if (otmp) if (otmp) {
goto decurse; fix_curse_trouble(otmp, what);
break;
}
} }
break; break;
case TROUBLE_STUCK_IN_WALL: case TROUBLE_STUCK_IN_WALL:
@@ -441,11 +468,13 @@ fix_worst_trouble(int trouble)
if (otmp == uright) if (otmp == uright)
what = rightglow; what = rightglow;
} }
goto decurse; fix_curse_trouble(otmp, what);
break;
case TROUBLE_UNUSEABLE_HANDS: case TROUBLE_UNUSEABLE_HANDS:
if (welded(uwep)) { if (welded(uwep)) {
otmp = uwep; otmp = uwep;
goto decurse; fix_curse_trouble(otmp, what);
break;
} }
if (Upolyd && nohands(g.youmonst.data)) { if (Upolyd && nohands(g.youmonst.data)) {
if (!Unchanging) { if (!Unchanging) {
@@ -453,7 +482,8 @@ fix_worst_trouble(int trouble)
rehumanize(); /* "You return to {normal} form." */ rehumanize(); /* "You return to {normal} form." */
} else if ((otmp = unchanger()) != 0 && otmp->cursed) { } else if ((otmp = unchanger()) != 0 && otmp->cursed) {
/* otmp is an amulet of unchanging */ /* otmp is an amulet of unchanging */
goto decurse; fix_curse_trouble(otmp, what);
break;
} }
} }
if (nohands(g.youmonst.data) || !freehand()) if (nohands(g.youmonst.data) || !freehand())
@@ -461,7 +491,8 @@ fix_worst_trouble(int trouble)
break; break;
case TROUBLE_CURSED_BLINDFOLD: case TROUBLE_CURSED_BLINDFOLD:
otmp = ublindf; otmp = ublindf;
goto decurse; fix_curse_trouble(otmp, what);
break;
case TROUBLE_LYCANTHROPE: case TROUBLE_LYCANTHROPE:
you_unwere(TRUE); you_unwere(TRUE);
break; break;
@@ -479,8 +510,7 @@ fix_worst_trouble(int trouble)
otmp = uarmg; otmp = uarmg;
else if (Cursed_obj(uarmf, FUMBLE_BOOTS)) else if (Cursed_obj(uarmf, FUMBLE_BOOTS))
otmp = uarmf; otmp = uarmf;
goto decurse; fix_curse_trouble(otmp, what);
/*NOTREACHED*/
break; break;
case TROUBLE_CURSED_ITEMS: case TROUBLE_CURSED_ITEMS:
otmp = worst_cursed_item(); otmp = worst_cursed_item();
@@ -488,26 +518,7 @@ fix_worst_trouble(int trouble)
what = rightglow; what = rightglow;
else if (otmp == uleft) else if (otmp == uleft)
what = leftglow; what = leftglow;
decurse: fix_curse_trouble(otmp, 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)
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();
break; break;
case TROUBLE_POISONED: case TROUBLE_POISONED:
/* override Fixed_abil; ignore items which confer that */ /* override Fixed_abil; ignore items which confer that */