tty: S_unexplored

Screen erasure leaves the map set to spaces.  If S_unexplored is
something other than <space>, tty wasn't drawing with S_unexplored
after a menu or long message line got erased following temporary
overwrite of part of the map.

This seems to work but is not the correct way to do things.
clear_screen(), cl_eos(), and cl_end() should all be taught to
flag the map as needing to be refreshed after they erase part of it.
tty_clear_nhwindow(WIN_BASE) is also lacking since it erases the
message line, full map, and status lines but leaves their internal
windows with stale data about what is shown instead of marking them
blank.
This commit is contained in:
PatR
2020-04-17 01:06:37 -07:00
parent 7c44e06ab1
commit 263ee3015f
4 changed files with 29 additions and 18 deletions

View File

@@ -1,4 +1,4 @@
/* NetHack 3.6 display.c $NHDT-Date: 1585781359 2020/04/01 22:49:19 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.128 $ */
/* NetHack 3.6 display.c $NHDT-Date: 1587110793 2020/04/17 08:06:33 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.129 $ */
/* Copyright (c) Dean Luick, with acknowledgements to Kevin Darcy */
/* and Dave Cohrs, 1990. */
/* NetHack may be freely redistributed. See license for details. */
@@ -1625,18 +1625,24 @@ clear_glyph_buffer()
reset_glyph_bbox();
}
/*
* Assumes that the indicated positions are filled with GLYPH_UNEXPLORED glyphs.
*/
/* used by tty after menu or text popup has temporarily overwritten the map */
void
row_refresh(start, stop, y)
int start, stop, y;
{
register int x;
register int x, glyph;
register boolean force;
int ch = ' ', color = NO_COLOR;
unsigned special = 0;
for (x = start; x <= stop; x++)
if (g.gbuf[y][x].glyph != GLYPH_UNEXPLORED)
print_glyph(WIN_MAP, x, y, g.gbuf[y][x].glyph, get_bk_glyph(x, y));
(void) mapglyph(GLYPH_UNEXPLORED, &ch, &color, &special, 0, 0, 0);
force = (ch != ' ' || color != NO_COLOR || (special & ~MG_UNEXPL) != 0);
for (x = start; x <= stop; x++) {
glyph = g.gbuf[y][x].glyph;
if (force || glyph != GLYPH_UNEXPLORED)
print_glyph(WIN_MAP, x, y, glyph, get_bk_glyph(x, y));
}
}
void

View File

@@ -1,4 +1,4 @@
/* NetHack 3.6 mapglyph.c $NHDT-Date: 1580252137 2020/01/28 22:55:37 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.62 $ */
/* NetHack 3.6 mapglyph.c $NHDT-Date: 1587110793 2020/04/17 08:06:33 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.64 $ */
/* Copyright (c) David Cohrs, 1991 */
/* NetHack may be freely redistributed. See license for details. */
@@ -327,8 +327,8 @@ unsigned mgflags;
ch = g.showsyms[idx];
#ifdef TEXTCOLOR
/* Turn off color if no color defined, or rogue level w/o PC graphics. */
if (!has_color(color) ||
((g.glyphmap_perlevel_flags & GMAP_ROGUELEVEL) && !has_rogue_color))
if (!has_color(color)
|| ((g.glyphmap_perlevel_flags & GMAP_ROGUELEVEL) && !has_rogue_color))
#endif
color = NO_COLOR;
*ochar = (int) ch;