changing level workaround (C341-13)
Use a new flush_screen(-1) call to toggle 3rd screen update in goto_level. This keeps the 3rd screen state unchanged, no matter what happens at higher levels, ensures the map window cursor stays on the hero, ensures the hero's showrace colors remains bright white, and so on.
This commit is contained in:
@@ -1346,8 +1346,11 @@ flush_screen(cursor_on_u)
|
||||
* flush_screen->print_glyph->impossible->pline->flush_screen
|
||||
*/
|
||||
static boolean flushing = 0;
|
||||
static boolean delay_flushing = 0;
|
||||
register int x,y;
|
||||
|
||||
if (cursor_on_u == -1) delay_flushing = !delay_flushing;
|
||||
if (delay_flushing) return;
|
||||
if (flushing) return; /* if already flushing then return */
|
||||
flushing = 1;
|
||||
|
||||
|
||||
3
src/do.c
3
src/do.c
@@ -1094,6 +1094,7 @@ boolean at_stairs, falling, portal;
|
||||
/* do this prior to level-change pline messages */
|
||||
vision_reset(); /* clear old level's line-of-sight */
|
||||
vision_full_recalc = 0; /* don't let that reenable vision yet */
|
||||
flush_screen(-1); /* ensure all map flushes are postponed */
|
||||
|
||||
if (portal && !In_endgame(&u.uz)) {
|
||||
/* find the portal on the new level */
|
||||
@@ -1243,7 +1244,7 @@ boolean at_stairs, falling, portal;
|
||||
/* Reset the screen. */
|
||||
vision_reset(); /* reset the blockages */
|
||||
docrt(); /* does a full vision recalc */
|
||||
flush_screen(1);
|
||||
flush_screen(-1);
|
||||
|
||||
/*
|
||||
* Move all plines beyond the screen reset.
|
||||
|
||||
Reference in New Issue
Block a user