From: PatR Date: Sat, 30 Jul 2016 08:19:44 +0000 (-0700) Subject: fix #H4457 - grammar nitpick X-Git-Tag: NetHack-3.6.1_RC01~636 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=6632c380f350e9b5ca364834ff0bf5ccbe2f7886;p=nethack fix #H4457 - grammar nitpick "Your pair of speed boots glow silver for a moment." should be "Your pair of speed boots glows silver for a moment.". The fix reverses a post-3.6.0 change to is_plural(). Also, add new pair_of() to test for object formatted as "pair of Bars". For verb usage, that's definitely singular, but for pronoun usage, sometimes plural seems better (although it might actually be incorrect). I fixed up the formatting of a block comment in obj.h, but it is still a candidate for tab cleanup. --- diff --git a/doc/fixes36.1 b/doc/fixes36.1 index aef6c5289..8b63f9015 100644 --- a/doc/fixes36.1 +++ b/doc/fixes36.1 @@ -338,6 +338,7 @@ fix for long lines in config file (28-Jan-2016) made 'O' command's 'list' and 'remove' menu choices in interactive handling for menu colorings, message types, and autopickup exceptions subject to buffer overflow when picking a destination for #jump, '$' to show valid dest. is more accurate +enchant armor gave "your pair of boots/gloves glow", should have been "glows" Platform- and/or Interface-Specific Fixes diff --git a/include/obj.h b/include/obj.h index bb872af4f..e2dc585d4 100644 --- a/include/obj.h +++ b/include/obj.h @@ -330,14 +330,17 @@ struct obj { ((obj)->otyp == LUCKSTONE || (obj)->otyp == LOADSTONE \ || (obj)->otyp == FLINT || (obj)->otyp == TOUCHSTONE) -/* misc */ +/* misc helpers, simple enough to be macros */ #define is_flimsy(otmp) \ (objects[(otmp)->otyp].oc_material <= LEATHER \ || (otmp)->otyp == RUBBER_HOSE) - -/* helpers, simple enough to be macros */ #define is_plural(o) \ - ((o)->quan != 1L || (o)->otyp == LENSES || is_gloves(o) || is_boots(o)) + ((o)->quan != 1L \ + /* "the Eyes of the Overworld" are plural, but \ + "a pair of lenses named the Eyes of the Overworld" is not */ \ + || ((o)->oartifact == ART_EYES_OF_THE_OVERWORLD \ + && !undiscovered_artifact(ART_EYES_OF_THE_OVERWORLD))) +#define pair_of(o) ((o)->otyp == LENSES || is_gloves(o) || is_boots(o)) /* Flags for get_obj_location(). */ #define CONTAINED_TOO 0x1 @@ -366,17 +369,14 @@ struct obj { * Notes for adding new oextra structures: * * 1. Add the structure definition and any required macros in an - *appropriate - * header file that precedes this one. - * 2. Add a pointer to your new struct to the oextra struct in this - *file. + * appropriate header file that precedes this one. + * 2. Add a pointer to your new struct to oextra struct in this file. * 3. Add a referencing macro to this file after the newobj macro above * (see ONAME, OMONST, OMIN, OLONG, or OMAILCMD for examples). * 4. Add a testing macro after the set of referencing macros * (see has_oname(), has_omonst(), has_omin(), has_olong(), * has_omailcmd() for examples). - * 5. Create a newXX(otmp) function and possibly a free_XX(otmp) - *function + * 5. Create newXX(otmp) function and possibly free_XX(otmp) function * in an appropriate new or existing source file and add a prototype * for it to include/extern.h. The majority of these are currently * located in mkobj.c for convenience. diff --git a/src/dokick.c b/src/dokick.c index b7e5c5757..4737a27a0 100644 --- a/src/dokick.c +++ b/src/dokick.c @@ -1091,6 +1091,7 @@ dokick() goto ouch; if (IS_TREE(maploc->typ)) { struct obj *treefruit; + /* nothing, fruit or trouble? 75:23.5:1.5% */ if (rn2(3)) { if (!rn2(6) && !(mvitals[PM_KILLER_BEE].mvflags & G_GONE)) @@ -1101,7 +1102,9 @@ dokick() && (treefruit = rnd_treefruit_at(x, y))) { long nfruit = 8L - rnl(7), nfall; short frtype = treefruit->otyp; + treefruit->quan = nfruit; + treefruit->owt = weight(treefruit); if (is_plural(treefruit)) pline("Some %s fall from the tree!", xname(treefruit)); else @@ -1125,6 +1128,7 @@ dokick() int cnt = rnl(4) + 2; int made = 0; coord mm; + mm.x = x; mm.y = y; while (cnt--) { diff --git a/src/invent.c b/src/invent.c index 8859bb7b3..5aa99ce6c 100644 --- a/src/invent.c +++ b/src/invent.c @@ -1489,7 +1489,7 @@ struct obj *otmp; } if (s1) pline("Use the '%s' command to %s %s%s.", s1, s2, - !is_plural(otmp) ? "that" : "those", s3); + !(is_plural(otmp) || pair_of(otmp)) ? "that" : "those", s3); else #endif pline(silly_thing_to, word); diff --git a/src/objnam.c b/src/objnam.c index 6caa583b7..24e444056 100644 --- a/src/objnam.c +++ b/src/objnam.c @@ -2763,24 +2763,25 @@ struct obj *no_wish; } /* - Skip over "pair of ", "pairs of", "set of" and "sets of". - - Accept "3 pair of boots" as well as "3 pairs of boots". It is valid - English either way. See makeplural() for more on pair/pairs. - - We should only double count if the object in question is not - referred to as a "pair of". E.g. We should double if the player - types "pair of spears", but not if the player types "pair of - lenses". Luckily (?) all objects that are referred to as pairs - -- boots, gloves, and lenses -- are also not mergable, so cnt is - ignored anyway. - */ + * Skip over "pair of ", "pairs of", "set of" and "sets of". + * + * Accept "3 pair of boots" as well as "3 pairs of boots". It is + * valid English either way. See makeplural() for more on pair/pairs. + * + * We should only double count if the object in question is not + * referred to as a "pair of". E.g. We should double if the player + * types "pair of spears", but not if the player types "pair of + * lenses". Luckily (?) all objects that are referred to as pairs + * -- boots, gloves, and lenses -- are also not mergable, so cnt is + * ignored anyway. + */ if (!strncmpi(bp, "pair of ", 8)) { bp += 8; cnt *= 2; - } else if (cnt > 1 && !strncmpi(bp, "pairs of ", 9)) { + } else if (!strncmpi(bp, "pairs of ", 9)) { bp += 9; - cnt *= 2; + if (cnt > 1) + cnt *= 2; } else if (!strncmpi(bp, "set of ", 7)) { bp += 7; } else if (!strncmpi(bp, "sets of ", 8)) { diff --git a/src/potion.c b/src/potion.c index aebbc75ee..b5971dd79 100644 --- a/src/potion.c +++ b/src/potion.c @@ -1798,7 +1798,7 @@ dodip() if (inaccessible_equipment(obj, "dip", FALSE)) return 0; - shortestname = is_plural(obj) ? "them" : "it"; + shortestname = (is_plural(obj) || pair_of(obj)) ? "them" : "it"; /* * Bypass safe_qbuf() since it doesn't handle varying suffix without * an awful lot of support work. Format the object once, even though diff --git a/src/wield.c b/src/wield.c index 058eff434..929d45c82 100644 --- a/src/wield.c +++ b/src/wield.c @@ -421,10 +421,11 @@ dowieldquiver() } Strcpy(qbuf, "Ready all of them instead?"); } else { + boolean use_plural = (is_plural(uwep) || pair_of(uwep)); + Sprintf(qbuf, "You are wielding %s. Ready %s instead?", - /* uwep->quan is 1, but name might be plural ('boots') */ - !is_plural(uwep) ? "that" : "those", - !is_plural(uwep) ? "it" : "them"); + !use_plural ? "that" : "those", + !use_plural ? "it" : "them"); } /* require confirmation to ready the main weapon */ if (ynq(qbuf) != 'y') { @@ -458,11 +459,12 @@ dowieldquiver() } Strcpy(qbuf, "Ready all of them instead?"); } else { + boolean use_plural = (is_plural(uswapwep) || pair_of(uswapwep)); + Sprintf(qbuf, "%s your %s weapon. Ready %s instead?", - !is_plural(uswapwep) ? "That is" : "Those are", + !use_plural ? "That is" : "Those are", u.twoweap ? "second" : "alternate", - /* uswapwep->quan is 1, but name might be plural */ - !is_plural(uswapwep) ? "it" : "them"); + !use_plural ? "it" : "them"); } /* require confirmation to ready the alternate weapon */ if (ynq(qbuf) != 'y') {