cmdassist bits

If the player gives the 'T' command while not wearing any armor,
don't suggest "use 'R' to remove accessories" unless the character is
actually wearing accessories.  Likewise for 'R' while not wearing any
accessories, don't suggest "use 'T' to take off armor" unless wearing
some.

     Add missing amulet case to the silly_thing() handling for 'W' and
'T'.  Also handle boots, gloves, and lenses as plural in the message
there.  silly_thing() has been simplified a little bit in the process.
This commit is contained in:
nethack.rankin
2003-05-26 17:34:28 +00:00
parent 253a9d388b
commit ad243c0286
3 changed files with 40 additions and 30 deletions

View File

@@ -81,6 +81,7 @@ any golem statue hit with stone-to-flesh spell animates as flesh golem
correct invalid startup gender selection
can no longer untrap floor containers during unskilled riding
can no longer easily set land mines and bear traps during unskilled riding
refine cmdassist handling for armor vs accessories
Platform- and/or Interface-Specific Fixes

View File

@@ -1,4 +1,4 @@
/* SCCS Id: @(#)do_wear.c 3.4 2003/03/10 */
/* SCCS Id: @(#)do_wear.c 3.4 2003/05/25 */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
@@ -996,8 +996,9 @@ dotakeoff()
uskin->otyp >= GRAY_DRAGON_SCALES ?
"dragon scales are" : "dragon scale mail is");
else
pline("Not wearing any armor.%s", iflags.cmdassist ?
" Use 'R' command to remove accessories." : "");
pline("Not wearing any armor.%s", (iflags.cmdassist &&
(uleft || uright || uamul || ublindf)) ?
" Use 'R' command to remove accessories." : "");
return 0;
}
if (armorpieces > 1)
@@ -1041,8 +1042,13 @@ doremring()
MOREACC(ublindf);
if(!Accessories) {
pline("Not wearing any accessories.%s", iflags.cmdassist ?
" Use 'T' command to take off non-accessories." : "");
pline("Not wearing any accessories.%s", (iflags.cmdassist &&
(uarm || uarmc ||
#ifdef TOURIST
uarmu ||
#endif
uarms || uarmh || uarmg || uarmf)) ?
" Use 'T' command to take off armor." : "");
return(0);
}
if (Accessories != 1) otmp = getobj(accessories, "remove");

View File

@@ -1094,32 +1094,35 @@ silly_thing(word, otmp)
const char *word;
struct obj *otmp;
{
int otyp = otmp->otyp;
boolean domsg = FALSE;
const char *s1, *s2, *s3;
const char *what = (otmp->quan > 1L) ? "one of those" : "that";
if ((!strcmp(word, "wear") || !strcmp(word, "take off")) &&
(otmp->oclass == RING_CLASS ||
(otmp->oclass == FOOD_CLASS && otmp->otyp == MEAT_RING) ||
(otmp->oclass == TOOL_CLASS &&
(otyp == BLINDFOLD || otyp == TOWEL || otyp == LENSES)))) {
if (!strcmp(word, "wear")) {
s1 = "P"; s2 = "put"; s3 = " on"; domsg = TRUE;
} else {
s1 = "R"; s2 = "remove"; s3 = ""; domsg = TRUE;
}
} else if ((!strcmp(word, "put on") || !strcmp(word, "remove")) &&
(otmp->oclass == ARMOR_CLASS)) {
if (!strcmp(word, "remove")) {
s1 = "T"; s2 = "take"; s3 = " off"; domsg = TRUE;
} else {
s1 = "W"; s2 = "wear"; s3 = ""; domsg = TRUE;
}
const char *s1, *s2, *s3, *what;
int ocls = otmp->oclass, otyp = otmp->otyp;
s1 = s2 = s3 = 0;
/* check for attempted use of accessory commands ('P','R') on armor
and for corresponding armor commands ('W','T') on accessories */
if (ocls == ARMOR_CLASS) {
if (!strcmp(word, "put on"))
s1 = "W", s2 = "wear", s3 = "";
else if (!strcmp(word, "remove"))
s1 = "T", s2 = "take", s3 = " off";
} else if ((ocls == RING_CLASS || otyp == MEAT_RING) ||
ocls == AMULET_CLASS ||
(otyp == BLINDFOLD || otyp == TOWEL || otyp == LENSES)) {
if (!strcmp(word, "wear"))
s1 = "P", s2 = "put", s3 = " on";
else if (!strcmp(word, "take off"))
s1 = "R", s2 = "remove", s3 = "";
}
if (s1) {
what = "that";
/* quantity for armor and accessory objects is always 1,
but some things should be referred to as plural */
if (otyp == LENSES || is_gloves(otmp) || is_boots(otmp))
what = "those";
pline("Use the '%s' command to %s %s%s.", s1, s2, what, s3);
} else {
pline(silly_thing_to, word);
}
if (domsg)
pline("Use the '%s' command to %s %s%s.", s1, s2, what, s3);
else
pline(silly_thing_to, word);
}
#endif /* OVL1 */