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:
@@ -192,11 +192,14 @@ data.base lookup of an entry with any blank lines would falsely claim that
|
||||
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
|
||||
|
||||
@@ -219,6 +219,7 @@ struct instance_flags {
|
||||
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 */
|
||||
|
||||
@@ -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