tty: panning while clipped
Noticed while testing statuslines on a small terminal window. Using the cursor to pick locations that panned the map to view a new subset would end up showing a new view of the regular map rather than a different section of what was currently displayed. For farlook that caused monsters to take on new hallucinatory forms which was fairly inconsequential, but for #terrain and various forms of detection it reverted to the ordinary map instead of showing the map features that the player requested or the temporarily revealed monsters and such. Most interfaces keep track of the whole map and just show their view of the new subset when panning, similar to redisplay after being covered up and then re-exposed, but tty isn't doing that. I made same change to Amiga as to tty since the code it was using was very similar. I haven't touched any of the other interfaces and assume that they don't need this. I've verified that curses and X11 don't.
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
$NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.288 $ $NHDT-Date: 1553885439 2019/03/29 18:50:39 $
|
$NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.289 $ $NHDT-Date: 1553895318 2019/03/29 21:35:18 $
|
||||||
|
|
||||||
This fixes36.2 file is here to capture information about updates in the 3.6.x
|
This fixes36.2 file is here to capture information about updates in the 3.6.x
|
||||||
lineage following the release of 3.6.1 in April 2018. Please note, however,
|
lineage following the release of 3.6.1 in April 2018. Please note, however,
|
||||||
@@ -488,6 +488,11 @@ tty: when status condition names were abbreviated due to lack of room, they
|
|||||||
tty: when encumbrance state was abbreviated due to lack of room, there was no
|
tty: when encumbrance state was abbreviated due to lack of room, there was no
|
||||||
separation from preceding status field and the value would not update
|
separation from preceding status field and the value would not update
|
||||||
when the state changed (except for removal on change to unencumbered)
|
when the state changed (except for removal on change to unencumbered)
|
||||||
|
tty: when clipping was used to show a subset of the map on a small display,
|
||||||
|
panning into a new subset while using the cursor to pick a location
|
||||||
|
would ask the core to generate a new view of the map rather than use
|
||||||
|
whatever was currently shown, bringing back suppressed monsters/
|
||||||
|
objects/traps for #terrain and new hallucinatory monsters for farlook
|
||||||
X11: its use of genl_status_update exposed a negative index use that could
|
X11: its use of genl_status_update exposed a negative index use that could
|
||||||
lead to a segfault
|
lead to a segfault
|
||||||
X11: rollback disabling of keystroke input for PICK_NONE menus (for scrolling)
|
X11: rollback disabling of keystroke input for PICK_NONE menus (for scrolling)
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* NetHack 3.6 extern.h $NHDT-Date: 1552945074 2019/03/18 21:37:54 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.695 $ */
|
/* NetHack 3.6 extern.h $NHDT-Date: 1553895318 2019/03/29 21:35:18 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.696 $ */
|
||||||
/* Copyright (c) Steve Creps, 1988. */
|
/* Copyright (c) Steve Creps, 1988. */
|
||||||
/* NetHack may be freely redistributed. See license for details. */
|
/* NetHack may be freely redistributed. See license for details. */
|
||||||
|
|
||||||
@@ -351,6 +351,7 @@ E void NDECL(see_traps);
|
|||||||
E void NDECL(curs_on_u);
|
E void NDECL(curs_on_u);
|
||||||
E int NDECL(doredraw);
|
E int NDECL(doredraw);
|
||||||
E void NDECL(docrt);
|
E void NDECL(docrt);
|
||||||
|
E void NDECL(redraw_map);
|
||||||
E void FDECL(show_glyph, (int, int, int));
|
E void FDECL(show_glyph, (int, int, int));
|
||||||
E void NDECL(clear_glyph_buffer);
|
E void NDECL(clear_glyph_buffer);
|
||||||
E void FDECL(row_refresh, (int, int, int));
|
E void FDECL(row_refresh, (int, int, int));
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* NetHack 3.6 display.c $NHDT-Date: 1551138503 2019/02/25 23:48:23 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.97 $ */
|
/* NetHack 3.6 display.c $NHDT-Date: 1553895319 2019/03/29 21:35:19 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.98 $ */
|
||||||
/* Copyright (c) Dean Luick, with acknowledgements to Kevin Darcy */
|
/* Copyright (c) Dean Luick, with acknowledgements to Kevin Darcy */
|
||||||
/* and Dave Cohrs, 1990. */
|
/* and Dave Cohrs, 1990. */
|
||||||
/* NetHack may be freely redistributed. See license for details. */
|
/* NetHack may be freely redistributed. See license for details. */
|
||||||
@@ -1213,8 +1213,7 @@ int mode;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* =========================================================================
|
/* ======================================================================== */
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Loop through all of the monsters and update them. Called when:
|
* Loop through all of the monsters and update them. Called when:
|
||||||
@@ -1380,10 +1379,39 @@ docrt()
|
|||||||
context.botlx = 1; /* force a redraw of the bottom line */
|
context.botlx = 1; /* force a redraw of the bottom line */
|
||||||
}
|
}
|
||||||
|
|
||||||
/* =========================================================================
|
/* for panning beyond a clipped region; resend the current map data to
|
||||||
*/
|
the interface rather than use docrt()'s regeneration of that data */
|
||||||
/* Glyph Buffering (3rd screen) ============================================
|
void
|
||||||
*/
|
redraw_map()
|
||||||
|
{
|
||||||
|
int x, y, glyph;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Not sure whether this is actually necessary; save and restore did
|
||||||
|
* used to get much too involved with each dungeon level as it was
|
||||||
|
* read and written.
|
||||||
|
*
|
||||||
|
* !u.ux: display isn't ready yet; (restoring || !on_level()): was part
|
||||||
|
* of cliparound() but interface shouldn't access this much internals
|
||||||
|
*/
|
||||||
|
if (!u.ux || restoring || !on_level(&u.uz0, &u.uz))
|
||||||
|
return;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This yields sensible clipping when #terrain+getpos is in
|
||||||
|
* progress and the screen displays something other than what
|
||||||
|
* the map would currently be showing.
|
||||||
|
*/
|
||||||
|
for (y = 0; y < ROWNO; ++y)
|
||||||
|
for (x = 1; x < COLNO; ++x) {
|
||||||
|
glyph = glyph_at(x, y); /* not levl[x][y].glyph */
|
||||||
|
print_glyph(WIN_MAP, x, y, glyph, get_bk_glyph(x, y));
|
||||||
|
}
|
||||||
|
flush_screen(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ======================================================================== */
|
||||||
|
/* Glyph Buffering (3rd screen) =========================================== */
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
xchar new; /* perhaps move this bit into the rm structure. */
|
xchar new; /* perhaps move this bit into the rm structure. */
|
||||||
@@ -1536,7 +1564,7 @@ int start, stop, y;
|
|||||||
|
|
||||||
for (x = start; x <= stop; x++)
|
for (x = start; x <= stop; x++)
|
||||||
if (gbuf[y][x].glyph != cmap_to_glyph(S_stone))
|
if (gbuf[y][x].glyph != cmap_to_glyph(S_stone))
|
||||||
print_glyph(WIN_MAP, x, y, gbuf[y][x].glyph, get_bk_glyph(x,y));
|
print_glyph(WIN_MAP, x, y, gbuf[y][x].glyph, get_bk_glyph(x, y));
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -1599,8 +1627,7 @@ int cursor_on_u;
|
|||||||
bot();
|
bot();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* =========================================================================
|
/* ======================================================================== */
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* back_to_glyph()
|
* back_to_glyph()
|
||||||
@@ -1804,16 +1831,19 @@ xchar x, y;
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* This will be used to get the glyph for the background so that
|
* This will be used to get the glyph for the background so that
|
||||||
* it can potentially be merged into graphical window ports
|
* it can potentially be merged into graphical window ports to
|
||||||
* to improve the appearance of stuff on dark room
|
* improve the appearance of stuff on dark room squares and the
|
||||||
* squares and the plane of air etc.
|
* plane of air etc.
|
||||||
*
|
*
|
||||||
* Until that is working correctly in the branch, however, for now
|
* Until that is working correctly in the branch, however, for now
|
||||||
* we just return NO_GLYPH as an indicator to ignore it.
|
* we just return NO_GLYPH as an indicator to ignore it.
|
||||||
|
*
|
||||||
|
* [This should be using background as recorded for #overview rather
|
||||||
|
* than current data from the map.]
|
||||||
*/
|
*/
|
||||||
|
|
||||||
STATIC_OVL int
|
STATIC_OVL int
|
||||||
get_bk_glyph(x,y)
|
get_bk_glyph(x, y)
|
||||||
xchar x, y;
|
xchar x, y;
|
||||||
{
|
{
|
||||||
int idx, bkglyph = NO_GLYPH;
|
int idx, bkglyph = NO_GLYPH;
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* NetHack 3.6 winfuncs.c $NHDT-Date: 1433806596 2015/06/08 23:36:36 $ $NHDT-Branch: master $:$NHDT-Revision: 1.15 $ */
|
/* NetHack 3.6 winfuncs.c $NHDT-Date: 1553895320 2019/03/29 21:35:20 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.16 $ */
|
||||||
/* Copyright (c) Gregg Wonderly, Naperville, Illinois, 1991,1992,1993,1996.
|
/* Copyright (c) Gregg Wonderly, Naperville, Illinois, 1991,1992,1993,1996.
|
||||||
*/
|
*/
|
||||||
/* NetHack may be freely redistributed. See license for details. */
|
/* NetHack may be freely redistributed. See license for details. */
|
||||||
@@ -2131,13 +2131,13 @@ void
|
|||||||
amii_cliparound(x, y)
|
amii_cliparound(x, y)
|
||||||
register int x, y;
|
register int x, y;
|
||||||
{
|
{
|
||||||
extern boolean restoring;
|
|
||||||
#ifdef CLIPPING
|
#ifdef CLIPPING
|
||||||
int oldx = clipx, oldy = clipy;
|
int oldx = clipx, oldy = clipy;
|
||||||
int oldxmax = clipxmax, oldymax = clipymax;
|
int oldxmax = clipxmax, oldymax = clipymax;
|
||||||
int COx, LIx;
|
int COx, LIx;
|
||||||
#define SCROLLCNT 1 /* Get there in 3 moves... */
|
#define SCROLLCNT 1 /* Get there in 3 moves... */
|
||||||
int scrollcnt = SCROLLCNT; /* ...or 1 if we changed level */
|
int scrollcnt = SCROLLCNT; /* ...or 1 if we changed level */
|
||||||
|
|
||||||
if (!clipping) /* And 1 in anycase, cleaner, simpler, quicker */
|
if (!clipping) /* And 1 in anycase, cleaner, simpler, quicker */
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@@ -2306,8 +2306,7 @@ register int x, y;
|
|||||||
clipymax += incy;
|
clipymax += incy;
|
||||||
|
|
||||||
/* Draw the exposed portion */
|
/* Draw the exposed portion */
|
||||||
if (on_level(&u.uz0, &u.uz) && !restoring)
|
redraw_map();
|
||||||
(void) doredraw();
|
|
||||||
flush_glyph_buffer(amii_wins[WIN_MAP]->win);
|
flush_glyph_buffer(amii_wins[WIN_MAP]->win);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2317,8 +2316,7 @@ register int x, y;
|
|||||||
clipymax = saveymax;
|
clipymax = saveymax;
|
||||||
clipxmax = savexmax;
|
clipxmax = savexmax;
|
||||||
#endif
|
#endif
|
||||||
if (on_level(&u.uz0, &u.uz) && !restoring && moves > 1)
|
redraw_map();
|
||||||
(void) doredraw();
|
|
||||||
flush_glyph_buffer(amii_wins[WIN_MAP]->win);
|
flush_glyph_buffer(amii_wins[WIN_MAP]->win);
|
||||||
}
|
}
|
||||||
reclip = 0;
|
reclip = 0;
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* NetHack 3.6 wintty.c $NHDT-Date: 1553858474 2019/03/29 11:21:14 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.199 $ */
|
/* NetHack 3.6 wintty.c $NHDT-Date: 1553895321 2019/03/29 21:35:21 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.200 $ */
|
||||||
/* Copyright (c) David Cohrs, 1991 */
|
/* Copyright (c) David Cohrs, 1991 */
|
||||||
/* NetHack may be freely redistributed. See license for details. */
|
/* NetHack may be freely redistributed. See license for details. */
|
||||||
|
|
||||||
@@ -3315,7 +3315,6 @@ void
|
|||||||
tty_cliparound(x, y)
|
tty_cliparound(x, y)
|
||||||
int x, y;
|
int x, y;
|
||||||
{
|
{
|
||||||
extern boolean restoring;
|
|
||||||
int oldx = clipx, oldy = clipy;
|
int oldx = clipx, oldy = clipy;
|
||||||
|
|
||||||
HUPSKIP();
|
HUPSKIP();
|
||||||
@@ -3336,8 +3335,7 @@ int x, y;
|
|||||||
clipy = clipymax - (LI - 1 - iflags.wc2_statuslines);
|
clipy = clipymax - (LI - 1 - iflags.wc2_statuslines);
|
||||||
}
|
}
|
||||||
if (clipx != oldx || clipy != oldy) {
|
if (clipx != oldx || clipy != oldy) {
|
||||||
if (on_level(&u.uz0, &u.uz) && !restoring)
|
redraw_map(); /* ask the core to resend the map window's data */
|
||||||
(void) doredraw();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif /* CLIPPING */
|
#endif /* CLIPPING */
|
||||||
|
|||||||
Reference in New Issue
Block a user