X11 persistent inventory again: initial display

If 'perm_invent' is preset in player's options, have X11 show the
persistent inventory window from the start instead of waiting for
an 'i' command.  moveloop() prolog needed a tweak do deal with it
cleanly.

Require WC_PERM_INVENT in order to honor the perm_invent option.
X11 and curses already set that, tty and curses don't support it,
so only Windows GUI needed to be updated for it.
This commit is contained in:
PatR
2021-02-14 00:57:34 -08:00
parent 36179da82f
commit 8fff588ab3
6 changed files with 24 additions and 17 deletions

View File

@@ -1,4 +1,4 @@
NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.452 $ $NHDT-Date: 1613272633 2021/02/14 03:17:13 $ NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.453 $ $NHDT-Date: 1613292825 2021/02/14 08:53:45 $
General Fixes and Modified Features General Fixes and Modified Features
----------------------------------- -----------------------------------
@@ -531,6 +531,8 @@ X11: was still initializing map to 'stone' instead of 'unexplored' after they
became separate glyphs became separate glyphs
X11: for text map without color, add support for black&white ice; draw it in X11: for text map without color, add support for black&white ice; draw it in
inverse video to distinguish from ordinary floor inverse video to distinguish from ordinary floor
X11: if perm_invent is set in NETHACKOPTIONS or config file, start with the
persistent inventory window displayed
X11+OSX: after the "bad Atom" fix (below), the persistent inventory window X11+OSX: after the "bad Atom" fix (below), the persistent inventory window
crept downward every time it got updated crept downward every time it got updated

View File

@@ -1,4 +1,4 @@
/* NetHack 3.7 allmain.c $NHDT-Date: 1596498146 2020/08/03 23:42:26 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.145 $ */ /* NetHack 3.7 allmain.c $NHDT-Date: 1613292825 2021/02/14 08:53:45 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.151 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/*-Copyright (c) Robert Patrick Rankin, 2012. */ /*-Copyright (c) Robert Patrick Rankin, 2012. */
/* NetHack may be freely redistributed. See license for details. */ /* NetHack may be freely redistributed. See license for details. */
@@ -68,7 +68,6 @@ moveloop(boolean resuming)
g.context.seer_turn = (long) rnd(30); g.context.seer_turn = (long) rnd(30);
} }
g.context.botlx = TRUE; /* for STATUS_HILITES */ g.context.botlx = TRUE; /* for STATUS_HILITES */
update_inventory(); /* for perm_invent */
if (resuming) { /* restoring old game */ if (resuming) { /* restoring old game */
read_engr_at(u.ux, u.uy); /* subset of pickup() */ read_engr_at(u.ux, u.uy); /* subset of pickup() */
} }
@@ -85,6 +84,11 @@ moveloop(boolean resuming)
g.context.move = 0; g.context.move = 0;
g.program_state.in_moveloop = 1; g.program_state.in_moveloop = 1;
/* for perm_invent preset at startup, display persistent inventory after
invent is fully populated and the in_moveloop flag has been set */
if (iflags.perm_invent)
update_inventory();
for (;;) { for (;;) {
#ifdef SAFERHANGUP #ifdef SAFERHANGUP
if (g.program_state.done_hup) if (g.program_state.done_hup)

View File

@@ -1,4 +1,4 @@
/* NetHack 3.7 options.c $NHDT-Date: 1612431350 2021/02/04 09:35:50 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.500 $ */ /* NetHack 3.7 options.c $NHDT-Date: 1613293046 2021/02/14 08:57:26 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.506 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/*-Copyright (c) Michael Allison, 2008. */ /*-Copyright (c) Michael Allison, 2008. */
/* NetHack may be freely redistributed. See license for details. */ /* NetHack may be freely redistributed. See license for details. */
@@ -8091,6 +8091,7 @@ static struct wc_Opt wc_options[] = {
{ "color", WC_COLOR }, { "color", WC_COLOR },
{ "eight_bit_tty", WC_EIGHT_BIT_IN }, { "eight_bit_tty", WC_EIGHT_BIT_IN },
{ "hilite_pet", WC_HILITE_PET }, { "hilite_pet", WC_HILITE_PET },
{ "perm_invent", WC_PERM_INVENT },
{ "popup_dialog", WC_POPUP_DIALOG }, { "popup_dialog", WC_POPUP_DIALOG },
{ "player_selection", WC_PLAYER_SELECTION }, { "player_selection", WC_PLAYER_SELECTION },
{ "preload_tiles", WC_PRELOAD_TILES }, { "preload_tiles", WC_PRELOAD_TILES },
@@ -8098,15 +8099,11 @@ static struct wc_Opt wc_options[] = {
{ "tile_file", WC_TILE_FILE }, { "tile_file", WC_TILE_FILE },
{ "tile_width", WC_TILE_WIDTH }, { "tile_width", WC_TILE_WIDTH },
{ "tile_height", WC_TILE_HEIGHT }, { "tile_height", WC_TILE_HEIGHT },
{ "use_inverse", WC_INVERSE },
{ "align_message", WC_ALIGN_MESSAGE }, { "align_message", WC_ALIGN_MESSAGE },
{ "align_status", WC_ALIGN_STATUS }, { "align_status", WC_ALIGN_STATUS },
{ "font_map", WC_FONT_MAP }, { "font_map", WC_FONT_MAP },
{ "font_menu", WC_FONT_MENU }, { "font_menu", WC_FONT_MENU },
{ "font_message", WC_FONT_MESSAGE }, { "font_message", WC_FONT_MESSAGE },
#if 0
{"perm_invent", WC_PERM_INVENT},
#endif
{ "font_size_map", WC_FONTSIZ_MAP }, { "font_size_map", WC_FONTSIZ_MAP },
{ "font_size_menu", WC_FONTSIZ_MENU }, { "font_size_menu", WC_FONTSIZ_MENU },
{ "font_size_message", WC_FONTSIZ_MESSAGE }, { "font_size_message", WC_FONTSIZ_MESSAGE },
@@ -8118,6 +8115,7 @@ static struct wc_Opt wc_options[] = {
{ "scroll_amount", WC_SCROLL_AMOUNT }, { "scroll_amount", WC_SCROLL_AMOUNT },
{ "scroll_margin", WC_SCROLL_MARGIN }, { "scroll_margin", WC_SCROLL_MARGIN },
{ "splash_screen", WC_SPLASH_SCREEN }, { "splash_screen", WC_SPLASH_SCREEN },
{ "use_inverse", WC_INVERSE },
{ "vary_msgcount", WC_VARY_MSGCOUNT }, { "vary_msgcount", WC_VARY_MSGCOUNT },
{ "windowcolors", WC_WINDOWCOLORS }, { "windowcolors", WC_WINDOWCOLORS },
{ "mouse_support", WC_MOUSE_SUPPORT }, { "mouse_support", WC_MOUSE_SUPPORT },

View File

@@ -1,6 +1,3 @@
Starting or restoring a game with 'perm_invent' enabled via config file
or NETHACKOPTIONS does not begin with inventory shown.
When persistent inventory window is first populated, focus is given to When persistent inventory window is first populated, focus is given to
its window (behavior might be window manager-specific; it happens with its window (behavior might be window manager-specific; it happens with
default window manager on OSX). Focus should be explicitly directed default window manager on OSX). Focus should be explicitly directed

View File

@@ -1,4 +1,4 @@
/* NetHack 3.7 winX.c $NHDT-Date: 1613272634 2021/02/14 03:17:14 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.96 $ */ /* NetHack 3.7 winX.c $NHDT-Date: 1613292827 2021/02/14 08:53:47 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.97 $ */
/* Copyright (c) Dean Luick, 1992 */ /* Copyright (c) Dean Luick, 1992 */
/* NetHack may be freely redistributed. See license for details. */ /* NetHack may be freely redistributed. See license for details. */
@@ -1242,17 +1242,22 @@ X11_destroy_nhwindow(winid window)
void void
X11_update_inventory(void) X11_update_inventory(void)
{ {
struct xwindow *wp = 0;
if (!x_inited) if (!x_inited)
return; return;
if (window_list[WIN_INVEN].menu_information->is_up) { if (iflags.perm_invent) {
if (iflags.perm_invent) { /* skip any calls to update_inventory() before in_moveloop starts */
if (g.program_state.in_moveloop || g.program_state.gameover) {
updated_inventory = 1; /* hack to avoid mapping&raising window */ updated_inventory = 1; /* hack to avoid mapping&raising window */
(void) display_inventory((char *) 0, FALSE); (void) display_inventory((char *) 0, FALSE);
updated_inventory = 0; updated_inventory = 0;
} else {
x11_no_perminv(&window_list[WIN_INVEN]);
} }
} else if ((wp = &window_list[WIN_INVEN]) != 0
&& wp->type == NHW_MENU && wp->menu_information->is_up) {
/* persistent inventory is up but perm_invent is off, take it down */
x11_no_perminv(wp);
} }
} }

View File

@@ -1,4 +1,4 @@
/* NetHack 3.7 mswproc.c $NHDT-Date: 1596498364 2020/08/03 23:46:04 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.153 $ */ /* NetHack 3.7 mswproc.c $NHDT-Date: 1613292828 2021/02/14 08:53:48 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.165 $ */
/* Copyright (C) 2001 by Alex Kompel */ /* Copyright (C) 2001 by Alex Kompel */
/* NetHack may be freely redistributed. See license for details. */ /* NetHack may be freely redistributed. See license for details. */
@@ -86,6 +86,7 @@ struct window_procs mswin_procs = {
| WC_FONTSIZ_MESSAGE | WC_FONTSIZ_STATUS | WC_FONTSIZ_MENU | WC_FONTSIZ_MESSAGE | WC_FONTSIZ_STATUS | WC_FONTSIZ_MENU
| WC_FONTSIZ_TEXT | WC_TILE_WIDTH | WC_TILE_HEIGHT | WC_TILE_FILE | WC_FONTSIZ_TEXT | WC_TILE_WIDTH | WC_TILE_HEIGHT | WC_TILE_FILE
| WC_VARY_MSGCOUNT | WC_WINDOWCOLORS | WC_PLAYER_SELECTION | WC_VARY_MSGCOUNT | WC_WINDOWCOLORS | WC_PLAYER_SELECTION
| WC_PERM_INVENT
| WC_SPLASH_SCREEN | WC_POPUP_DIALOG | WC_MOUSE_SUPPORT, | WC_SPLASH_SCREEN | WC_POPUP_DIALOG | WC_MOUSE_SUPPORT,
#ifdef STATUS_HILITES #ifdef STATUS_HILITES
WC2_HITPOINTBAR | WC2_FLUSH_STATUS | WC2_RESET_STATUS | WC2_HILITE_STATUS | WC2_HITPOINTBAR | WC2_FLUSH_STATUS | WC2_RESET_STATUS | WC2_HILITE_STATUS |