diff --git a/doc/fixes36.2 b/doc/fixes36.2 index c200e88f3..949691dad 100644 --- a/doc/fixes36.2 +++ b/doc/fixes36.2 @@ -111,6 +111,9 @@ add window port status_update() value BL_RESET to use as a flag to redraw all status fields, distinguished from BL_FLUSH which now only specifies that the bot() call has completed so any buffered changes should now be rendered +for hilite_status of string status fields (title, dungeon-level, alignment), + the types value-goes-up and -down aren't meaningful; treat them as + value-changed if from config file and don't offer as choices with 'O' Fixes to Post-3.6.1 Problems that Were Exposed Via git Repository @@ -146,6 +149,7 @@ windows: Added ntassert() mechanism for Windows based port use tty: significant optimizations for performance and per field rendering tty: use WC2_FLUSH_STATUS to buffer changes until BL_FLUSH is received tty: support BL_RESET in status_update to force an update to all status fields +tty: stop hitpointbar from jumping to 100% health at zero hit points unix: Makefile.src and Makefile.utl inadvertently relied on a 'gnu make' extension when using $(VERBOSEMAKE) to reduce build-time feedback; replace with $(QUIETCC) which operates the same but defaults to @@ -165,7 +169,7 @@ sortloot option has been enhanced to improve object ordering; primarily, items of undiscovered type come out before items of discovered type within each class or sub-class of objects YAFM when stumbling on an undetected monster while hallucinating -Make it clear when a leprechaun dodges your attack +make it clear when a leprechaun dodges your attack wizard mode #wizidentify can now select individual items for permanent identification and don't display the selection to permanently identify everything if everything is already fully identified diff --git a/src/botl.c b/src/botl.c index 784438a14..8ffe73c5e 100644 --- a/src/botl.c +++ b/src/botl.c @@ -1851,7 +1851,13 @@ boolean from_configfile; if (*s[sidx + 1] == '\0') sidx--; } else if (!strcmpi(s[sidx], "up") || !strcmpi(s[sidx], "down")) { - if (!strcmpi(s[sidx], "down")) + if (initblstats[fld].anytype == ANY_STR) + /* ordered string comparison is supported but LT/GT for + the string fields (title, dungeon-level, alignment) + is pointless; treat 'up' or 'down' for string fields + as 'changed' rather than rejecting them outright */ + ; + else if (!strcmpi(s[sidx], "down")) down = TRUE; else up = TRUE; @@ -2054,8 +2060,6 @@ boolean from_configfile; return TRUE; } - - const struct condmap valid_conditions[] = { {"stone", BL_MASK_STONE}, {"slime", BL_MASK_SLIME}, @@ -3039,12 +3043,22 @@ choose_value: hilite.rel = lt_gt_eq; hilite.value = aval; } else if (behavior == BL_TH_UPDOWN) { - boolean ltok = (fld != BL_TIME), gtok = TRUE; + if (initblstats[fld].anytype != ANY_STR) { + boolean ltok = (fld != BL_TIME), gtok = TRUE; - lt_gt_eq = status_hilite_menu_choose_updownboth(fld, (char *)0, - ltok, gtok); - if (lt_gt_eq == NO_LTEQGT) - goto choose_behavior; + lt_gt_eq = status_hilite_menu_choose_updownboth(fld, (char *)0, + ltok, gtok); + if (lt_gt_eq == NO_LTEQGT) + goto choose_behavior; + } else { /* ANY_STR */ + /* player picked ' value changes' in outer menu; + ordered string comparison is supported but LT/GT for the + string status fields (title, dungeon level, alignment) + is pointless; rather than calling ..._choose_updownboth() + with ltok==False plus gtok=False and having a menu with a + single choice, skip it altogether and just use 'changed' */ + lt_gt_eq = EQ_VALUE; + } Sprintf(colorqry, "Choose a color for when %s %s:", initblstats[fld].fldname, (lt_gt_eq == EQ_VALUE) ? "changes" diff --git a/src/cmd.c b/src/cmd.c index d73d0e60e..b5c6ee1a2 100644 --- a/src/cmd.c +++ b/src/cmd.c @@ -2486,7 +2486,7 @@ int final; else if (u.moreluck < 0) you_have("reduced luck", ""); if (carrying(LUCKSTONE) || stone_luck(TRUE)) { - ltmp = stone_luck(0); + ltmp = stone_luck(FALSE); if (ltmp <= 0) enl_msg("Bad luck ", "does", "did", " not time out for you", ""); if (ltmp >= 0) diff --git a/win/tty/wintty.c b/win/tty/wintty.c index 5ad7a3dcc..6e0214911 100644 --- a/win/tty/wintty.c +++ b/win/tty/wintty.c @@ -4244,16 +4244,23 @@ render_status(VOID_ARGS) } } if (iflags.hilite_delta) { + char *s = bar; tty_putstatusfield(nullfield, "[", x++, y); - if (hpbar_color != NO_COLOR && coloridx != CLR_MAX) - term_start_color(hpbar_color); - term_start_attr(ATR_INVERSE); - tty_putstatusfield(nullfield, bar, x, y); - x += (int) strlen(bar); - term_end_attr(ATR_INVERSE); - if (hpbar_color != NO_COLOR && coloridx != CLR_MAX) - term_end_color(); - if (twoparts) { + if (hpbar_percent > 0) { + if (hpbar_color != NO_COLOR && coloridx != CLR_MAX) + term_start_color(hpbar_color); + term_start_attr(ATR_INVERSE); + } + if (hpbar_percent == 0) + s = text; + tty_putstatusfield(nullfield, s, x, y); + x += (int) strlen(s); + if (hpbar_percent > 0) { + term_end_attr(ATR_INVERSE); + if (hpbar_color != NO_COLOR && coloridx != CLR_MAX) + term_end_color(); + } + if (twoparts && hpbar_percent > 0) { *bar2 = savedch; tty_putstatusfield(nullfield, bar2, x, y); x += (int) strlen(bar2);