using nhl_error() to report a Lua processing problem would clobber the stack
level teleporation's "You materialize on a different level!" could be given
out of sequence with other arrival messages
-creating Mine Town variant 1 (Orcish Town) sometimes complained about being
- unable to place lregion type 1 and failed to have any staircase up
+more sequencing: if wielding Sting or similar and level teleporting to a
+ level with different warning effect, the start-glowing or stop-glowing
+ message came before the materialize message on the destination level
prevent "you materialize on a different level" after "a mysterious force
prevents you from descending" if you try to level teleport past the
stairs down from the quest home level before being granted access
+creating Mine Town variant 1 (Orcish Town) sometimes complained about being
+ unable to place lregion type 1 and failed to have any staircase up
set g.context.botl for glove and wielding actions that could start or end
bare-handedness in support of condtests[bl_bareh]
reinstate ranked ordering of the status condition fields
int failing_untrap; /* move_into_trap() -> spoteffects() -> dotrap() */
int in_lava_effects; /* hack for Boots_off() */
int last_msg; /* indicator of last message player saw */
+ int no_glow; /* controls see_monster()'s Sting_effects() */
int override_ID; /* true to force full identification of objects */
int parse_config_file_src; /* hack for parse_config_line() */
int purge_monsters; /* # of dead monsters still on fmon list */
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 */
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),
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);
/* 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 */