more slippery gloves

Move makeplural(body_part(FINGER)) into its own routine, with option
to substitute gloves when wearing such.

Wearing slippery gloves (ie, wearing gloves while having slippery
fingers) wouldn't let you put on a ring because you can't take the
gloves off, but removing a worn ring lacked the same restriction.

After changing that, teach prayer that slippery gloves is another
reason why a ring of levitation can't be removed.
This commit is contained in:
PatR
2019-11-09 16:36:41 -08:00
parent 67bea58539
commit 15dbf661d9
9 changed files with 60 additions and 36 deletions

View File

@@ -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 *));

View File

@@ -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)

View File

@@ -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, "");

View File

@@ -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);

View File

@@ -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);
}

View File

@@ -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"))

View File

@@ -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 */

View File

@@ -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"),

View File

@@ -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;
}