fix errant verb tense in some messages if pet or mon name ends in 's'

Report stated:
"Poes deliberately slither onto a polymorph trap!" ... it's only one cat, er,
black naga. Why does the parser treat the name as plural? There are lots of
singular words and names that end in -s or -es!

H9249 1780
This commit is contained in:
nhmall
2019-09-26 11:49:15 -04:00
parent 9361e872b2
commit da6c393e43
5 changed files with 20 additions and 13 deletions
+2
View File
@@ -154,6 +154,8 @@ wielded aklys that returned to hero when thrown while inside an engulfer left
panic if same weapon killed any engulfer via melee from inside panic if same weapon killed any engulfer via melee from inside
uarmh null pointer dereference if a helm of opposite alignment came off due uarmh null pointer dereference if a helm of opposite alignment came off due
to being polymorphed to being polymorphed
verb tense was inappropriate in some messages when a mon/pet had a name
ending in 's'
Fixes to Post-3.6.2 Problems that Were Exposed Via git Repository Fixes to Post-3.6.2 Problems that Were Exposed Via git Repository
+5 -1
View File
@@ -302,7 +302,8 @@ E struct c_common_strings {
const char *const c_nothing_happens, *const c_thats_enough_tries, const char *const c_nothing_happens, *const c_thats_enough_tries,
*const c_silly_thing_to, *const c_shudder_for_moment, *const c_silly_thing_to, *const c_shudder_for_moment,
*const c_something, *const c_Something, *const c_You_can_move_again, *const c_something, *const c_Something, *const c_You_can_move_again,
*const c_Never_mind, *c_vision_clears, *const c_the_your[2]; *const c_Never_mind, *c_vision_clears, *const c_the_your[2],
*const c_fakename[2];
} c_common_strings; } c_common_strings;
#define nothing_happens c_common_strings.c_nothing_happens #define nothing_happens c_common_strings.c_nothing_happens
#define thats_enough_tries c_common_strings.c_thats_enough_tries #define thats_enough_tries c_common_strings.c_thats_enough_tries
@@ -314,6 +315,9 @@ E struct c_common_strings {
#define Never_mind c_common_strings.c_Never_mind #define Never_mind c_common_strings.c_Never_mind
#define vision_clears c_common_strings.c_vision_clears #define vision_clears c_common_strings.c_vision_clears
#define the_your c_common_strings.c_the_your #define the_your c_common_strings.c_the_your
/* fakename[] used occasionally so vtense() won't be fooled by an assigned
name ending in 's' */
#define fakename c_common_strings.c_fakename
/* material strings */ /* material strings */
E const char *materialnm[]; E const char *materialnm[];
+7 -7
View File
@@ -969,10 +969,10 @@ boolean vis; /* whether the action can be seen */
char *hittee; /* target's name: "you" or mon_nam(mdef) */ char *hittee; /* target's name: "you" or mon_nam(mdef) */
{ {
struct permonst *old_uasmon; struct permonst *old_uasmon;
const char *verb, *fakename; const char *verb;
boolean youattack = (magr == &youmonst), youdefend = (mdef == &youmonst), boolean youattack = (magr == &youmonst), youdefend = (mdef == &youmonst),
resisted = FALSE, do_stun, do_confuse, result; resisted = FALSE, do_stun, do_confuse, result;
int attack_indx, scare_dieroll = MB_MAX_DIEROLL / 2; int attack_indx, fakeidx, scare_dieroll = MB_MAX_DIEROLL / 2;
result = FALSE; /* no message given yet */ result = FALSE; /* no message given yet */
/* the most severe effects are less likely at higher enchantment */ /* the most severe effects are less likely at higher enchantment */
@@ -1112,13 +1112,13 @@ char *hittee; /* target's name: "you" or mon_nam(mdef) */
mdef->mconf = 1; mdef->mconf = 1;
} }
/* now give message(s) describing side-effects; /* now give message(s) describing side-effects; Use fakename
don't let vtense() be fooled by assigned name ending in 's' */ so vtense() won't be fooled by assigned name ending in 's' */
fakename = youdefend ? "you" : "mon"; fakeidx = youdefend ? 1 : 0;
if (youattack || youdefend || vis) { if (youattack || youdefend || vis) {
(void) upstart(hittee); /* capitalize */ (void) upstart(hittee); /* capitalize */
if (resisted) { if (resisted) {
pline("%s %s!", hittee, vtense(fakename, "resist")); pline("%s %s!", hittee, vtense(fakename[fakeidx], "resist"));
shieldeff(youdefend ? u.ux : mdef->mx, shieldeff(youdefend ? u.ux : mdef->mx,
youdefend ? u.uy : mdef->my); youdefend ? u.uy : mdef->my);
} }
@@ -1132,7 +1132,7 @@ char *hittee; /* target's name: "you" or mon_nam(mdef) */
Strcat(buf, " and "); Strcat(buf, " and ");
if (do_confuse) if (do_confuse)
Strcat(buf, "confused"); Strcat(buf, "confused");
pline("%s %s %s%c", hittee, vtense(fakename, "are"), buf, pline("%s %s %s%c", hittee, vtense(fakename[fakeidx], "are"), buf,
(do_stun && do_confuse) ? '!' : '.'); (do_stun && do_confuse) ? '!' : '.');
} }
} }
+2 -1
View File
@@ -253,7 +253,8 @@ struct c_common_strings c_common_strings = { "Nothing happens.",
"You can move again.", "You can move again.",
"Never mind.", "Never mind.",
"vision quickly clears.", "vision quickly clears.",
{ "the", "your" } }; { "the", "your" },
{ "mon", "you" } };
/* NOTE: the order of these words exactly corresponds to the /* NOTE: the order of these words exactly corresponds to the
order of oc_material values #define'd in objclass.h. */ order of oc_material values #define'd in objclass.h. */
+4 -4
View File
@@ -846,7 +846,7 @@ struct monst *mtmp;
Mnam = Monnam(mtmp); Mnam = Monnam(mtmp);
pline("%s %s into a %s!", Mnam, pline("%s %s into a %s!", Mnam,
vtense(Mnam, locomotion(mtmp->data, "jump")), vtense(fakename[0], locomotion(mtmp->data, "jump")),
(t->ttyp == TRAPDOOR) ? "trap door" : "hole"); (t->ttyp == TRAPDOOR) ? "trap door" : "hole");
if (levl[trapx][trapy].typ == SCORR) { if (levl[trapx][trapy].typ == SCORR) {
levl[trapx][trapy].typ = CORR; levl[trapx][trapy].typ = CORR;
@@ -943,7 +943,7 @@ struct monst *mtmp;
if (vis) { if (vis) {
Mnam = Monnam(mtmp); Mnam = Monnam(mtmp);
pline("%s %s onto a teleport trap!", Mnam, pline("%s %s onto a teleport trap!", Mnam,
vtense(Mnam, locomotion(mtmp->data, "jump"))); vtense(fakename[0], locomotion(mtmp->data, "jump")));
seetrap(t_at(trapx, trapy)); seetrap(t_at(trapx, trapy));
} }
/* don't use rloc_to() because worm tails must "move" */ /* don't use rloc_to() because worm tails must "move" */
@@ -1892,7 +1892,7 @@ struct monst *mtmp;
const char *Mnam = Monnam(mtmp); const char *Mnam = Monnam(mtmp);
pline("%s deliberately %s onto a polymorph trap!", Mnam, pline("%s deliberately %s onto a polymorph trap!", Mnam,
vtense(Mnam, locomotion(mtmp->data, "jump"))); vtense(fakename[0], locomotion(mtmp->data, "jump")));
} }
if (vis) if (vis)
seetrap(t_at(trapx, trapy)); seetrap(t_at(trapx, trapy));
@@ -2470,7 +2470,7 @@ boolean by_you; /* true: if mon kills itself, hero gets credit/blame */
newsym(mon->mx, mon->my); newsym(mon->mx, mon->my);
if (vis) if (vis)
pline("%s %s %s %s fire trap!", Mnam, pline("%s %s %s %s fire trap!", Mnam,
vtense(Mnam, locomotion(mon->data, "move")), vtense(fakename[0], locomotion(mon->data, "move")),
is_floater(mon->data) ? "over" : "onto", is_floater(mon->data) ? "over" : "onto",
trap->tseen ? "the" : "a"); trap->tseen ? "the" : "a");
} }