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
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];
} c_common_strings;
#define nothing_happens c_common_strings.c_nothing_happens
#define thats_enough_tries c_common_strings.c_thats_enough_tries
#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[];
char *hittee; /* target's name: "you" or mon_nam(mdef) */
{
struct permonst *old_uasmon;
- const char *verb, *fakename;
+ const char *verb;
boolean youattack = (magr == &youmonst), youdefend = (mdef == &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 */
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);
}
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) ? '!' : '.');
}
}
"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. */
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[trapx][trapy].typ == SCORR) {
levl[trapx][trapy].typ = CORR;
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(trapx, trapy));
}
/* don't use rloc_to() because worm tails must "move" */
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(trapx, trapy));
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");
}