Merge branch 'NetHack-3.6'
This commit is contained in:
+18
-1
@@ -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
@@ -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
@@ -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
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user