Sting vs level teleport's "materialize" message
When level teleporting, Sting/Orcrish/Grimtooth would start or stop glowing based on occupants of the new level before "you materialize on another level". That wasn't necessarily incorrect for the glow stopping but was clearly wrong for it starting. This fix uses a flag as a hack to avoid finding and changing all the calls to docrt() and see_monsters(). It ought to be fixed properly....
This commit is contained in:
@@ -1295,12 +1295,19 @@ see_monsters()
|
||||
if (Warn_of_mon && (g.context.warntype.obj & mon->data->mflags2) != 0L)
|
||||
new_warn_obj_cnt++;
|
||||
}
|
||||
/*
|
||||
* Make Sting glow blue or stop glowing if required.
|
||||
*/
|
||||
if (new_warn_obj_cnt != g.warn_obj_cnt) {
|
||||
Sting_effects(new_warn_obj_cnt);
|
||||
g.warn_obj_cnt = new_warn_obj_cnt;
|
||||
|
||||
/* message sequencing: when changing levels via level teleport,
|
||||
the start-glow/stop-glow message from Sting_effects() would come
|
||||
too soon so we suppress it for docrt() -> see_monsters() then
|
||||
reenable it and call see_monsters() a second time */
|
||||
if (!iflags.no_glow) {
|
||||
/*
|
||||
* Make Sting glow blue or stop glowing if required.
|
||||
*/
|
||||
if (new_warn_obj_cnt != g.warn_obj_cnt) {
|
||||
Sting_effects(new_warn_obj_cnt);
|
||||
g.warn_obj_cnt = new_warn_obj_cnt;
|
||||
}
|
||||
}
|
||||
|
||||
/* when mounted, hero's location gets caught by monster loop */
|
||||
|
||||
13
src/do.c
13
src/do.c
@@ -1265,7 +1265,7 @@ boolean at_stairs, falling, portal;
|
||||
int l_idx, save_mode;
|
||||
NHFILE *nhfp;
|
||||
xchar new_ledger;
|
||||
boolean cant_go_back, great_effort,
|
||||
boolean cant_go_back, great_effort, materializing,
|
||||
up = (depth(newlevel) < depth(&u.uz)),
|
||||
newdungeon = (u.uz.dnum != newlevel->dnum),
|
||||
was_in_W_tower = In_W_tower(u.ux, u.uy, &u.uz),
|
||||
@@ -1613,9 +1613,15 @@ boolean at_stairs, falling, portal;
|
||||
else if (Is_firelevel(&u.uz))
|
||||
fumaroles();
|
||||
|
||||
/* to control message sequencing hack for Sting_effects() */
|
||||
materializing = (g.dfr_post_msg
|
||||
&& !strncmpi(g.dfr_post_msg, "You materialize", 15));
|
||||
|
||||
/* Reset the screen. */
|
||||
vision_reset(); /* reset the blockages */
|
||||
g.glyphmap_perlevel_flags = 0L; /* force per-level mapglyph() changes */
|
||||
if (materializing)
|
||||
iflags.no_glow++; /* to suppress see_monster()'s Sting_effects() */
|
||||
docrt(); /* does a full vision recalc */
|
||||
flush_screen(-1);
|
||||
|
||||
@@ -1625,9 +1631,12 @@ boolean at_stairs, falling, portal;
|
||||
|
||||
/* deferred arrival message for level teleport looks odd if given
|
||||
after the various messages below so give it before them */
|
||||
if (g.dfr_post_msg && !strncmpi(g.dfr_post_msg, "You materialize", 15)) {
|
||||
if (materializing) {
|
||||
pline("%s", g.dfr_post_msg);
|
||||
free((genericptr_t) g.dfr_post_msg), g.dfr_post_msg = 0;
|
||||
|
||||
iflags.no_glow--;
|
||||
see_monsters(); /* docrt() did this but we need to repeat it */
|
||||
}
|
||||
|
||||
/* special levels can have a custom arrival message */
|
||||
|
||||
Reference in New Issue
Block a user