diff --git a/doc/fixes36.3 b/doc/fixes36.3 index 247c5410a..fbac27988 100644 --- a/doc/fixes36.3 +++ b/doc/fixes36.3 @@ -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 uarmh null pointer dereference if a helm of opposite alignment came off due 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 diff --git a/include/decl.h b/include/decl.h index 05aa7f895..c9f769e86 100644 --- a/include/decl.h +++ b/include/decl.h @@ -316,7 +316,8 @@ struct c_common_strings { const char *const c_nothing_happens, *const c_thats_enough_tries, *const c_silly_thing_to, *const c_shudder_for_moment, *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]; }; E const struct c_common_strings c_common_strings; @@ -331,6 +332,9 @@ E const struct c_common_strings c_common_strings; #define Never_mind c_common_strings.c_Never_mind #define vision_clears c_common_strings.c_vision_clears #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 */ E const char *materialnm[]; diff --git a/src/artifact.c b/src/artifact.c index 966ab70ca..f6ab3065f 100644 --- a/src/artifact.c +++ b/src/artifact.c @@ -983,10 +983,10 @@ boolean vis; /* whether the action can be seen */ char *hittee; /* target's name: "you" or mon_nam(mdef) */ { struct permonst *old_uasmon; - const char *verb, *fakename; + const char *verb; boolean youattack = (magr == &g.youmonst), youdefend = (mdef == &g.youmonst), 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 */ /* the most severe effects are less likely at higher enchantment */ @@ -1126,13 +1126,13 @@ char *hittee; /* target's name: "you" or mon_nam(mdef) */ mdef->mconf = 1; } - /* now give message(s) describing side-effects; - don't let vtense() be fooled by assigned name ending in 's' */ - fakename = youdefend ? "you" : "mon"; + /* now give message(s) describing side-effects; Use fakename + so vtense() won't be fooled by assigned name ending in 's' */ + fakeidx = youdefend ? 1 : 0; if (youattack || youdefend || vis) { (void) upstart(hittee); /* capitalize */ if (resisted) { - pline("%s %s!", hittee, vtense(fakename, "resist")); + pline("%s %s!", hittee, vtense(fakename[fakeidx], "resist")); shieldeff(youdefend ? u.ux : mdef->mx, youdefend ? u.uy : mdef->my); } @@ -1146,7 +1146,7 @@ char *hittee; /* target's name: "you" or mon_nam(mdef) */ Strcat(buf, " and "); if (do_confuse) 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) ? '!' : '.'); } } diff --git a/src/decl.c b/src/decl.c index ed16900d4..e93aba9d8 100644 --- a/src/decl.c +++ b/src/decl.c @@ -93,7 +93,8 @@ const struct c_common_strings c_common_strings = { "Nothing happens.", "You can move again.", "Never mind.", "vision quickly clears.", - { "the", "your" } }; + { "the", "your" }, + { "mon", "you" } }; /* NOTE: the order of these words exactly corresponds to the order of oc_material values #define'd in objclass.h. */ diff --git a/src/muse.c b/src/muse.c index dfef522c9..5173952a3 100644 --- a/src/muse.c +++ b/src/muse.c @@ -827,7 +827,7 @@ struct monst *mtmp; Mnam = Monnam(mtmp); 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"); if (levl[g.trapx][g.trapy].typ == SCORR) { levl[g.trapx][g.trapy].typ = CORR; @@ -924,7 +924,7 @@ struct monst *mtmp; if (vis) { Mnam = Monnam(mtmp); pline("%s %s onto a teleport trap!", Mnam, - vtense(Mnam, locomotion(mtmp->data, "jump"))); + vtense(fakename[0], locomotion(mtmp->data, "jump"))); seetrap(t_at(g.trapx, g.trapy)); } /* don't use rloc_to() because worm tails must "move" */ @@ -1873,7 +1873,7 @@ struct monst *mtmp; const char *Mnam = Monnam(mtmp); pline("%s deliberately %s onto a polymorph trap!", Mnam, - vtense(Mnam, locomotion(mtmp->data, "jump"))); + vtense(fakename[0], locomotion(mtmp->data, "jump"))); } if (vis) seetrap(t_at(g.trapx, g.trapy)); @@ -2451,7 +2451,7 @@ boolean by_you; /* true: if mon kills itself, hero gets credit/blame */ newsym(mon->mx, mon->my); if (vis) 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", trap->tseen ? "the" : "a"); }