diff --git a/include/extern.h b/include/extern.h index 9526bb45b..9467371b4 100644 --- a/include/extern.h +++ b/include/extern.h @@ -1,4 +1,4 @@ -/* NetHack 3.6 extern.h $NHDT-Date: 1573290414 2019/11/09 09:06:54 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.736 $ */ +/* NetHack 3.6 extern.h $NHDT-Date: 1573346164 2019/11/10 00:36:04 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.738 $ */ /* Copyright (c) Steve Creps, 1988. */ /* NetHack may be freely redistributed. See license for details. */ @@ -474,6 +474,7 @@ E int NDECL(Helmet_on); E int FDECL(select_off, (struct obj *)); E int NDECL(take_off); #endif +E const char *FDECL(fingers_or_gloves, (BOOLEAN_P)); E void FDECL(off_msg, (struct obj *)); E void FDECL(set_wear, (struct obj *)); E boolean FDECL(donning, (struct obj *)); diff --git a/src/apply.c b/src/apply.c index a7f1b9a15..e77db07d4 100644 --- a/src/apply.c +++ b/src/apply.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 apply.c $NHDT-Date: 1573290415 2019/11/09 09:06:55 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.282 $ */ +/* NetHack 3.6 apply.c $NHDT-Date: 1573346182 2019/11/10 00:36:22 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.283 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /*-Copyright (c) Robert Patrick Rankin, 2012. */ /* NetHack may be freely redistributed. See license for details. */ @@ -2293,20 +2293,19 @@ struct obj *obj; if (Glib) { pline("%s from your %s.", Tobjnam(obj, "slip"), - makeplural(body_part(FINGER))); + fingers_or_gloves(FALSE)); dropx(obj); return; } if (obj->spe > 0) { - const char *fingers_or_gloves; int oldglib; if ((obj->cursed || Fumbling) && !rn2(2)) { consume_obj_charge(obj, TRUE); pline("%s from your %s.", Tobjnam(obj, "slip"), - makeplural(body_part(FINGER))); + fingers_or_gloves(FALSE)); dropx(obj); return; } @@ -2317,8 +2316,6 @@ struct obj *obj; return; consume_obj_charge(obj, TRUE); - fingers_or_gloves = !uarmg ? makeplural(body_part(FINGER)) - : gloves_simple_name(uarmg); oldglib = (int) (Glib & TIMEOUT); if (otmp != &zeroobj) { You("cover %s with a thick layer of grease.", yname(otmp)); @@ -2326,11 +2323,11 @@ struct obj *obj; if (obj->cursed && !nohands(youmonst.data)) { make_glib(oldglib + rn1(6, 10)); /* + 10..15 */ pline("Some of the grease gets all over your %s.", - fingers_or_gloves); + fingers_or_gloves(TRUE)); } } else { make_glib(oldglib + rn1(11, 5)); /* + 5..15 */ - You("coat your %s with grease.", fingers_or_gloves); + You("coat your %s with grease.", fingers_or_gloves(TRUE)); } } else { if (obj->known) diff --git a/src/cmd.c b/src/cmd.c index f62e4e1ff..dca4c54ea 100644 --- a/src/cmd.c +++ b/src/cmd.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 cmd.c $NHDT-Date: 1573290415 2019/11/09 09:06:55 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.348 $ */ +/* NetHack 3.6 cmd.c $NHDT-Date: 1573346187 2019/11/10 00:36:27 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.349 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /*-Copyright (c) Robert Patrick Rankin, 2013. */ /* NetHack may be freely redistributed. See license for details. */ @@ -2477,9 +2477,7 @@ int final; } } if (Glib) { - Sprintf(buf, "slippery %s", - !uarmg ? makeplural(body_part(FINGER)) - : gloves_simple_name(uarmg)); + Sprintf(buf, "slippery %s", fingers_or_gloves(TRUE)); if (wizard) Sprintf(eos(buf), " (%ld)", (Glib & TIMEOUT)); you_have(buf, ""); diff --git a/src/do_wear.c b/src/do_wear.c index 27661c677..94e578175 100644 --- a/src/do_wear.c +++ b/src/do_wear.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 do_wear.c $NHDT-Date: 1573290416 2019/11/09 09:06:56 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.112 $ */ +/* NetHack 3.6 do_wear.c $NHDT-Date: 1573346188 2019/11/10 00:36:28 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.113 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /*-Copyright (c) Robert Patrick Rankin, 2012. */ /* NetHack may be freely redistributed. See license for details. */ @@ -44,6 +44,16 @@ STATIC_PTR int FDECL(accessory_or_armor_on, (struct obj *)); STATIC_DCL void FDECL(already_wearing, (const char *)); STATIC_DCL void FDECL(already_wearing2, (const char *, const char *)); +/* plural "fingers" or optionally "gloves" */ +const char * +fingers_or_gloves(check_gloves) +boolean check_gloves; +{ + return ((check_gloves && uarmg) + ? gloves_simple_name(uarmg) /* "gloves" or "gauntlets" */ + : makeplural(body_part(FINGER))); /* "fingers" */ +} + void off_msg(otmp) struct obj *otmp; @@ -1537,7 +1547,15 @@ struct obj *otmp; boolean use_plural = (is_boots(otmp) || is_gloves(otmp) || otmp->otyp == LENSES || otmp->quan > 1L); - You("can't. %s cursed.", use_plural ? "They are" : "It is"); + /* might be trying again after applying grease to hands */ + if (Glib && otmp->bknown + /* for weapon, we'll only get here via 'A )' */ + && (uarmg ? (otmp == uwep) + : ((otmp->owornmask & (W_WEP | W_RING)) != 0))) + pline("Despite your slippery %s, you can't.", + fingers_or_gloves(TRUE)); + else + You("can't. %s cursed.", use_plural ? "They are" : "It is"); set_bknown(otmp, 1); return 1; } @@ -1749,7 +1767,7 @@ boolean noisy; gloved fingers */ if (noisy) Your("%s are too slippery to pull on %s.", - makeplural(body_part(FINGER)), gloves_simple_name(otmp)); + fingers_or_gloves(FALSE), gloves_simple_name(otmp)); err++; } else *mask = W_ARMG; @@ -1848,7 +1866,7 @@ struct obj *obj; if (uleft && uright) { There("are no more %s%s to fill.", humanoid(youmonst.data) ? "ring-" : "", - makeplural(body_part(FINGER))); + fingers_or_gloves(FALSE)); return 0; } if (uleft) { @@ -2039,7 +2057,7 @@ doputon() /* 'P' message doesn't mention armor */ Your("%s%s are full, and you're already wearing an amulet and %s.", humanoid(youmonst.data) ? "ring-" : "", - makeplural(body_part(FINGER)), + fingers_or_gloves(FALSE), (ublindf->otyp == LENSES) ? "some lenses" : "a blindfold"); return 0; } @@ -2109,7 +2127,7 @@ glibr() /* changed so cursed rings don't fall off, GAN 10/30/86 */ Your("%s off your %s.", (leftfall && rightfall) ? "rings slip" : "ring slips", - (leftfall && rightfall) ? makeplural(body_part(FINGER)) + (leftfall && rightfall) ? fingers_or_gloves(FALSE) : body_part(FINGER)); xfl++; if (leftfall) { @@ -2231,6 +2249,10 @@ int otyp; return uarmg; if (ring->cursed) return ring; + /* normally outermost layer is processed first, but slippery gloves + wears off quickly so uncurse ring itself before handling those */ + if (uarmg && Glib) + return uarmg; } /* either no ring or not right type or nothing prevents its removal */ return (struct obj *) 0; @@ -2259,17 +2281,21 @@ register struct obj *otmp; /* special ring checks */ if (otmp == uright || otmp == uleft) { + struct obj glibdummy; + if (nolimbs(youmonst.data)) { pline_The("ring is stuck."); return 0; } + glibdummy = zeroobj; why = 0; /* the item which prevents ring removal */ if (welded(uwep) && (otmp == uright || bimanual(uwep))) { Sprintf(buf, "free a weapon %s", body_part(HAND)); why = uwep; - } else if (uarmg && uarmg->cursed) { - Sprintf(buf, "take off your %s", c_gloves); - why = uarmg; + } else if (uarmg && (uarmg->cursed || Glib)) { + Sprintf(buf, "take off your %s%s", + Glib ? "slippery " : "", gloves_simple_name(uarmg)); + why = !Glib ? uarmg : &glibdummy; } if (why) { You("cannot %s to remove the ring.", buf); diff --git a/src/eat.c b/src/eat.c index 3d1ca80fa..9620c372f 100644 --- a/src/eat.c +++ b/src/eat.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 eat.c $NHDT-Date: 1573290417 2019/11/09 09:06:57 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.204 $ */ +/* NetHack 3.6 eat.c $NHDT-Date: 1573346189 2019/11/10 00:36:29 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.205 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /*-Copyright (c) Robert Patrick Rankin, 2012. */ /* NetHack may be freely redistributed. See license for details. */ @@ -1380,9 +1380,7 @@ const char *mesg; /* Assume !Glib, because you can't open tins when Glib. */ make_glib(rn1(11, 5)); /* 5..15 */ pline("Eating %s food made your %s very slippery.", - tintxts[r].txt, - !uarmg ? makeplural(body_part(FINGER)) - : gloves_simple_name(uarmg)); + tintxts[r].txt, fingers_or_gloves(TRUE)); } } else { /* spinach... */ @@ -1507,8 +1505,7 @@ struct obj *otmp; no_opener: pline("It is not so easy to open this tin."); if (Glib) { - pline_The("tin slips from your %s.", - makeplural(body_part(FINGER))); + pline_The("tin slips from your %s.", fingers_or_gloves(FALSE)); if (otmp->quan > 1L) { otmp = splitobj(otmp, 1L); } diff --git a/src/invent.c b/src/invent.c index 0e11e52f4..5cb094bcc 100644 --- a/src/invent.c +++ b/src/invent.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 invent.c $NHDT-Date: 1571436003 2019/10/18 22:00:03 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.265 $ */ +/* NetHack 3.6 invent.c $NHDT-Date: 1573346190 2019/11/10 00:36:30 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.266 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /*-Copyright (c) Derek S. Ray, 2015. */ /* NetHack may be freely redistributed. See license for details. */ @@ -1719,7 +1719,7 @@ register const char *let, *word; if (iflags.force_invmenu) Sprintf(menuquery, "What do you want to %s?", word); if (!strcmp(word, "grease")) - Sprintf(qbuf, "your %s", makeplural(body_part(FINGER))); + Sprintf(qbuf, "your %s", fingers_or_gloves(FALSE)); else if (!strcmp(word, "write with")) Sprintf(qbuf, "your %s", body_part(FINGERTIP)); else if (!strcmp(word, "wield")) diff --git a/src/potion.c b/src/potion.c index 268103967..4f9a42d51 100644 --- a/src/potion.c +++ b/src/potion.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 potion.c $NHDT-Date: 1573290421 2019/11/09 09:07:01 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.165 $ */ +/* NetHack 3.6 potion.c $NHDT-Date: 1573346191 2019/11/10 00:36:31 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.166 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /*-Copyright (c) Robert Patrick Rankin, 2013. */ /* NetHack may be freely redistributed. See license for details. */ @@ -2138,8 +2138,7 @@ dodip() fire_damage(obj, TRUE, u.ux, u.uy); } else if (potion->cursed) { pline_The("potion spills and covers your %s with oil.", - !uarmg ? makeplural(body_part(FINGER)) - : gloves_simple_name(uarmg)); + fingers_or_gloves(TRUE)); make_glib((int) (Glib & TIMEOUT) + d(2, 10)); } else if (obj->oclass != WEAPON_CLASS && !is_weptool(obj)) { /* the following cases apply only to weapons */ diff --git a/src/pray.c b/src/pray.c index 42e5f8be8..79369fc02 100644 --- a/src/pray.c +++ b/src/pray.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 pray.c $NHDT-Date: 1564532667 2019/07/31 00:24:27 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.117 $ */ +/* NetHack 3.6 pray.c $NHDT-Date: 1573346192 2019/11/10 00:36:32 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.118 $ */ /* Copyright (c) Benson I. Margulies, Mike Stephenson, Steve Linhart, 1989. */ /* NetHack may be freely redistributed. See license for details. */ @@ -494,6 +494,12 @@ int trouble; 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"), diff --git a/src/write.c b/src/write.c index c9047589f..34afaf61c 100644 --- a/src/write.c +++ b/src/write.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 write.c $NHDT-Date: 1450261366 2015/12/16 10:22:46 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.17 $ */ +/* NetHack 3.6 write.c $NHDT-Date: 1573346194 2019/11/10 00:36:34 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.20 $ */ /* NetHack may be freely redistributed. See license for details. */ #include "hack.h" @@ -109,7 +109,7 @@ register struct obj *pen; return 0; } else if (Glib) { pline("%s from your %s.", Tobjnam(pen, "slip"), - makeplural(body_part(FINGER))); + fingers_or_gloves(FALSE)); dropx(pen); return 1; }