Merge branch 'NetHack-3.6'

This commit is contained in:
nhmall
2019-06-24 23:53:08 -04:00
4 changed files with 108 additions and 43 deletions
+18 -1
View File
@@ -1,4 +1,4 @@
$NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.66 $ $NHDT-Date: 1561414302 2019/06/24 22:11:42 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.69 $ $NHDT-Date: 1561429723 2019/06/25 02:28:43 $
This fixes36.3 file is here to capture information about updates in the 3.6.x This fixes36.3 file is here to capture information about updates in the 3.6.x
lineage following the release of 3.6.2 in May 2019. Please note, however, lineage following the release of 3.6.2 in May 2019. Please note, however,
@@ -88,6 +88,7 @@ wizard mode ^I menu could list "Not carrying anything" after inventory items
if perm_invent option was On (even on tty where that's not supported) if perm_invent option was On (even on tty where that's not supported)
change #adjust to treat carrying only gold as not having anything to adjust change #adjust to treat carrying only gold as not having anything to adjust
saving bones with 'perm_invent' On could result in "Bad fruit #N" warnings saving bones with 'perm_invent' On could result in "Bad fruit #N" warnings
update persistent inventory window immediately if 'sortpack' option is toggled
Fixes to Post-3.6.2 Problems that Were Exposed Via git Repository Fixes to Post-3.6.2 Problems that Were Exposed Via git Repository
@@ -144,6 +145,19 @@ curses: don't convert ^M (or <return> or <enter> key) into ^J; both ^J and ^M
cause the hero to try to move cause the hero to try to move
curses: draw map in screen columns 1..79 like tty, rather than in 2..80 curses: draw map in screen columns 1..79 like tty, rather than in 2..80
curses: make text windows wider so that help feedback is more readable curses: make text windows wider so that help feedback is more readable
curses: using ':' for search string matching to toggle menu items in a multple
page menu would highlight arbitrary items on the currently visible
page in sync with the lines that matching items had on other pages
curses+'perm_invent': entries were wrapping without any control; usually not
noticeable because next entry overwrote, but visible for final entry
when whole inventory fit within the available height; looked ok with
borders Off but clearly wrong for borders On
curses+'perm_invent': if too many entries for window height, last one which
fit had the next one appended (including hightlighted selector letter)
when window borders were Off
curses+'perm_invent': top line was wasted (left blank) when borders Off
curses+'perm_invent': don't highlight inventory letters since nothing is
selectable from the menu comprising the persistent inventory window
curses+EDIT_GETLIN: when a prompt's answer was preloaded, using ESC to discard curses+EDIT_GETLIN: when a prompt's answer was preloaded, using ESC to discard
it deleted it from the answer buffer but didn't erase it from screen it deleted it from the answer buffer but didn't erase it from screen
tty: re-do one optimization used when status conditions have all been removed tty: re-do one optimization used when status conditions have all been removed
@@ -163,6 +177,9 @@ classify sources as released, beta, or work-in-progress via NH_DEVEL_STATUS
if you reach the edge of a level (relatively uncommon) and try to move off, if you reach the edge of a level (relatively uncommon) and try to move off,
report that you can't go farther if the 'mention_walls' option is set report that you can't go farther if the 'mention_walls' option is set
wizard-mode: display effect to show where an unseen wished-for monster landed wizard-mode: display effect to show where an unseen wished-for monster landed
curses+'perm_invent': since persistent inventory is narrow, strip off "a",
"an", or "the" prefix on inventory entries shown there so that a tiny
bit more of the interesting portion is visible
NetHack Community Patches (or Variation) Included NetHack Community Patches (or Variation) Included
+6 -6
View File
@@ -1,4 +1,4 @@
/* NetHack 3.6 options.c $NHDT-Date: 1561022792 2019/06/20 09:26:32 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.365 $ */ /* NetHack 3.6 options.c $NHDT-Date: 1561427671 2019/06/25 01:54:31 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.366 $ */
/* 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. */
@@ -4021,12 +4021,12 @@ boolean tinitial, tfrom_file;
if (VIA_WINDOWPORT()) if (VIA_WINDOWPORT())
status_initialize(REASSESS_ONLY); status_initialize(REASSESS_ONLY);
g.context.botl = TRUE; g.context.botl = TRUE;
} else if (boolopt[i].addr == &flags.invlet_constant) { } else if (boolopt[i].addr == &flags.invlet_constant
if (flags.invlet_constant) { || boolopt[i].addr == &flags.sortpack) {
if (!flags.invlet_constant)
reassign(); reassign();
if (iflags.perm_invent) if (iflags.perm_invent)
g.opt_need_redraw = TRUE; update_inventory();
}
} else if (boolopt[i].addr == &flags.lit_corridor } else if (boolopt[i].addr == &flags.lit_corridor
|| boolopt[i].addr == &flags.dark_room) { || boolopt[i].addr == &flags.dark_room) {
/* /*
+35 -23
View File
@@ -101,7 +101,7 @@ static void menu_display_page(nhmenu *menu, WINDOW * win, int page_num,
char *); char *);
static int menu_get_selections(WINDOW * win, nhmenu *menu, int how); static int menu_get_selections(WINDOW * win, nhmenu *menu, int how);
static void menu_select_deselect(WINDOW * win, nhmenu_item *item, static void menu_select_deselect(WINDOW * win, nhmenu_item *item,
menu_op operation); menu_op operation, int);
static int menu_operation(WINDOW * win, nhmenu *menu, menu_op operation, static int menu_operation(WINDOW * win, nhmenu *menu, menu_op operation,
int page_num); int page_num);
static void menu_clear_selections(nhmenu *menu); static void menu_clear_selections(nhmenu *menu);
@@ -1257,7 +1257,6 @@ menu_get_selections(WINDOW * win, nhmenu *menu, int how)
num_selected = -1; num_selected = -1;
} else { } else {
num_selected = 0; num_selected = 0;
} }
dismiss = TRUE; dismiss = TRUE;
break; break;
@@ -1361,12 +1360,14 @@ menu_get_selections(WINDOW * win, nhmenu *menu, int how)
&& strstri(menu_item_ptr->str, search_key)) { && strstri(menu_item_ptr->str, search_key)) {
if (how == PICK_ONE) { if (how == PICK_ONE) {
menu_clear_selections(menu); menu_clear_selections(menu);
menu_select_deselect(win, menu_item_ptr, SELECT); menu_select_deselect(win, menu_item_ptr,
SELECT, curpage);
num_selected = 1; num_selected = 1;
dismiss = TRUE; dismiss = TRUE;
break; break;
} else { } else {
menu_select_deselect(win, menu_item_ptr, INVERT); menu_select_deselect(win, menu_item_ptr,
INVERT, curpage);
} }
} }
@@ -1399,19 +1400,22 @@ menu_get_selections(WINDOW * win, nhmenu *menu, int how)
if (how == PICK_ONE) { if (how == PICK_ONE) {
menu_clear_selections(menu); menu_clear_selections(menu);
menu_select_deselect(win, menu_item_ptr, SELECT); menu_select_deselect(win, menu_item_ptr,
SELECT, curpage);
if (count) if (count)
menu_item_ptr->count = count; menu_item_ptr->count = count;
num_selected = 1; num_selected = 1;
dismiss = TRUE; dismiss = TRUE;
break; break;
} else if (how == PICK_ANY && curletter == count_letter) { } else if (how == PICK_ANY && curletter == count_letter) {
menu_select_deselect(win, menu_item_ptr, SELECT); menu_select_deselect(win, menu_item_ptr,
SELECT, curpage);
menu_item_ptr->count = count; menu_item_ptr->count = count;
count = 0; count = 0;
count_letter = '\0'; count_letter = '\0';
} else { } else {
menu_select_deselect(win, menu_item_ptr, INVERT); menu_select_deselect(win, menu_item_ptr,
INVERT, curpage);
} }
} }
} }
@@ -1437,30 +1441,38 @@ menu_get_selections(WINDOW * win, nhmenu *menu, int how)
} }
/* Select, deselect, or toggle selected for the given menu entry */ /* Select, deselect, or toggle selected for the given menu entry.
For search operations, the toggled entry might be on a different
page than the one currently shown. */
static void static void
menu_select_deselect(WINDOW * win, nhmenu_item *item, menu_op operation) menu_select_deselect(WINDOW *win, nhmenu_item *item,
menu_op operation, int current_page)
{ {
int curletter = item->accelerator; int curletter = item->accelerator;
boolean visible = (item->page_num == current_page);
if ((operation == DESELECT) || (item->selected && (operation == INVERT))) { if (operation == DESELECT || (item->selected && operation == INVERT)) {
item->selected = FALSE; item->selected = FALSE;
mvwaddch(win, item->line_num + 1, 1, ' '); if (visible) {
curses_toggle_color_attr(win, HIGHLIGHT_COLOR, NONE, ON); mvwaddch(win, item->line_num + 1, 1, ' ');
mvwaddch(win, item->line_num + 1, 2, curletter); curses_toggle_color_attr(win, HIGHLIGHT_COLOR, NONE, ON);
curses_toggle_color_attr(win, HIGHLIGHT_COLOR, NONE, OFF); mvwaddch(win, item->line_num + 1, 2, curletter);
mvwaddch(win, item->line_num + 1, 3, ')'); curses_toggle_color_attr(win, HIGHLIGHT_COLOR, NONE, OFF);
mvwaddch(win, item->line_num + 1, 3, ')');
}
} else { } else {
item->selected = TRUE; item->selected = TRUE;
curses_toggle_color_attr(win, HIGHLIGHT_COLOR, A_REVERSE, ON); if (visible) {
mvwaddch(win, item->line_num + 1, 1, '<'); curses_toggle_color_attr(win, HIGHLIGHT_COLOR, A_REVERSE, ON);
mvwaddch(win, item->line_num + 1, 2, curletter); mvwaddch(win, item->line_num + 1, 1, '<');
mvwaddch(win, item->line_num + 1, 3, '>'); mvwaddch(win, item->line_num + 1, 2, curletter);
curses_toggle_color_attr(win, HIGHLIGHT_COLOR, A_REVERSE, OFF); mvwaddch(win, item->line_num + 1, 3, '>');
curses_toggle_color_attr(win, HIGHLIGHT_COLOR, A_REVERSE, OFF);
}
} }
if (visible)
wrefresh(win); wrefresh(win);
} }
@@ -1513,7 +1525,7 @@ menu_operation(WINDOW * win, nhmenu *menu, menu_op
} }
if (menu_item_ptr->identifier.a_void != NULL) { if (menu_item_ptr->identifier.a_void != NULL) {
menu_select_deselect(win, menu_item_ptr, operation); menu_select_deselect(win, menu_item_ptr, operation, current_page);
} }
menu_item_ptr = menu_item_ptr->next_item; menu_item_ptr = menu_item_ptr->next_item;
+49 -13
View File
@@ -53,7 +53,7 @@ curses_update_inv(void)
wnoutrefresh(win); wnoutrefresh(win);
} }
/* Adds an inventory item. */ /* Adds an inventory item. 'y' is 1 rather than 0 for the first item. */
void void
curses_add_inv(int y, curses_add_inv(int y,
int glyph UNUSED, int glyph UNUSED,
@@ -61,21 +61,59 @@ curses_add_inv(int y,
{ {
WINDOW *win = curses_get_nhwin(INV_WIN); WINDOW *win = curses_get_nhwin(INV_WIN);
int color = NO_COLOR; int color = NO_COLOR;
int x = 0; int x = 0, width, height, available_width,
border = curses_window_has_border(INV_WIN) ? 1 : 0;
/* Figure out where to draw the line */ /* Figure out where to draw the line */
if (curses_window_has_border(INV_WIN)) { x += border; /* x starts at 0 and is incremented for border */
x++; y -= 1 - border; /* y starts at 1 and is decremented for non-border */
}
curses_get_window_size(INV_WIN, &height, &width);
/*
* TODO:
* If border is On and 'y' is too big, turn border Off in order to
* get two more lines of perm_invent.
*
* And/or implement a way to switch focus from map to inventory
* so that the latter can be scrolled. Must not require use of a
* mouse.
*
* Also, when entries are omitted due to lack of space, mark the
* last line to indicate "there's more that you can't see" (like
* horizontal status window does for excess status conditions).
* Normal menu does this via 'page M of N'.
*/
if (y - border >= height) /* 'height' is already -2 for Top+Btm borders */
return;
available_width = width; /* 'width' also already -2 for Lft+Rgt borders */
wmove(win, y, x); wmove(win, y, x);
if (accelerator) { if (accelerator) {
#if 0
attr_t bold = A_BOLD; attr_t bold = A_BOLD;
wattron(win, bold); wattron(win, bold);
waddch(win, accelerator); waddch(win, accelerator);
wattroff(win, bold); wattroff(win, bold);
wprintw(win, ") "); wprintw(win, ") ");
#else
/* despite being shown as a menu, nothing is selectable from the
persistent inventory window so don't highlight inventory letters */
wprintw(win, "%c) ", accelerator);
#endif
available_width -= 3;
/* narrow the entries to fit more of the interesting text; do so
unconditionally rather than trying to figure whether it's needed;
when 'sortpack' is enabled we could also strip out "<class> of"
from "<prefix><class> of <item><suffix> but if that's to be done,
core ought to do it */
if (!strncmpi(str, "a ", 2))
str += 2;
else if (!strncmpi(str, "an ", 3))
str += 3;
else if (!strncmpi(str, "the ", 4))
str +=4;
} }
#if 0 /* FIXME: MENU GLYPHS */ #if 0 /* FIXME: MENU GLYPHS */
if (accelerator && glyph != NO_GLYPH && iflags.use_menu_glyphs) { if (accelerator && glyph != NO_GLYPH && iflags.use_menu_glyphs) {
@@ -84,27 +122,25 @@ curses_add_inv(int y,
int symbol = 0; int symbol = 0;
attr_t glyphclr; attr_t glyphclr;
mapglyph(glyph, &symbol, &color, &dummy, mapglyph(glyph, &symbol, &color, &dummy, u.ux, u.uy);
u.ux, u.uy);
glyphclr = curses_color_attr(color, 0); glyphclr = curses_color_attr(color, 0);
wattron(win, glyphclr); wattron(win, glyphclr);
wprintw(win, "%c ", symbol); wprintw(win, "%c ", symbol);
wattroff(win, glyphclr); wattroff(win, glyphclr);
available_width -= 2;
} }
#endif #endif
if (accelerator /* Don't colorize categories */ if (accelerator /* Don't colorize categories */
&& iflags.use_menu_color) { && iflags.use_menu_color) {
char str_mutable[BUFSZ];
Strcpy(str_mutable, str);
attr = 0; attr = 0;
get_menu_coloring(str_mutable, &color, (int *) &attr); get_menu_coloring(str, &color, (int *) &attr);
attr = curses_convert_attr(attr); attr = curses_convert_attr(attr);
} }
if (color == NO_COLOR) color = NONE; if (color == NO_COLOR)
color = NONE;
curses_toggle_color_attr(win, color, attr, ON); curses_toggle_color_attr(win, color, attr, ON);
/* wattron(win, attr); */ /* wattron(win, attr); */
wprintw(win, "%s", str); wprintw(win, "%.*s", available_width, str);
/* wattroff(win, attr); */ /* wattroff(win, attr); */
curses_toggle_color_attr(win, color, attr, OFF); curses_toggle_color_attr(win, color, attr, OFF);
wclrtoeol(win); wclrtoeol(win);