wishing for "<foo> of <bar> abilities" (trunk only)
Wishing for "{gain,restore,sustain} abilities" works since
makesingular() changes it to "* ability", but a post-3.4.3 change to
makesingular() caused "potion(s) of {gain,restore} abilities" and
"ring of sustain abilities" to fail to match the name, then yield a
random potion or ring. If there turn out to be many other similar
situations, makesingular()'s behavior for "foo(s) of bars" may need
to revert. For now, handle "* of * abilities" as a special case.
This commit is contained in:
10
src/objnam.c
10
src/objnam.c
@@ -2145,6 +2145,16 @@ boolean retry_inverted; /* optional extra "of" handling */
|
||||
releaseobuf(p);
|
||||
return fuzzymatch(buf, o_str, " -", TRUE);
|
||||
}
|
||||
} else if (strstri(o_str, "ability")) {
|
||||
/* when presented with "foo of bar", make singular() used to
|
||||
singularize both foo & bar, but now only does so for foo */
|
||||
/* catch "{potion(s),ring} of {gain,restore,sustain} abilities" */
|
||||
if ((p = strstri(u_str, "abilities")) != 0 &&
|
||||
!*(p + sizeof "abilities" - 1)) {
|
||||
(void)strncpy(buf, u_str, (unsigned)(p - u_str));
|
||||
Strcpy(buf + (p - u_str), "ability");
|
||||
return fuzzymatch(buf, o_str, " -", TRUE);
|
||||
}
|
||||
} else if (!strcmp(o_str, "aluminum")) {
|
||||
/* this special case doesn't really fit anywhere else... */
|
||||
/* (note that " wand" will have been stripped off by now) */
|
||||
|
||||
Reference in New Issue
Block a user