]> granicus.if.org Git - nethack/commitdiff
cmdassist bits
authornethack.rankin <nethack.rankin>
Mon, 26 May 2003 17:34:28 +0000 (17:34 +0000)
committernethack.rankin <nethack.rankin>
Mon, 26 May 2003 17:34:28 +0000 (17:34 +0000)
     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.

doc/fixes34.2
src/do_wear.c
src/invent.c

index babc5698010ccccaebd97e91ebc328254bf6c51b..71c0a623dcaa3bd64ef80a16acba0c918478cb63 100644 (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
index 3599a0f128bc88f3d057d90be8a616d550367b8f..cd97ffe67ef69a11df818624c6c1cfc36e89630f 100644 (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");
index 6ba6aa9679ba07dea5bbe2659c0578eea4d247cf..f7949472553c5882d0b9494bfed4236b899d70dc 100644 (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 */