hilite_status: score vs !SCORE_ON_BOTL

When built without support for SCORE_ON_BOTL (the default), suppress
'score' field from 'O' menus for adding/removing hilite_status rules.

Also, add "encumbrance" as field name synonym for "carrying-capacity"
and "experience-points" for "experience".  Relevant for rules set in
config file or via NETHACKOPTIONS.
This commit is contained in:
PatR
2018-06-24 17:44:33 -07:00
parent 9b71a62cb4
commit c04b652e40
2 changed files with 59 additions and 34 deletions
+4 -1
View File
@@ -52,12 +52,15 @@ when using the 'O' command to create a status highlight that specifies
separate rules for each attribute to be merged when highlighting separate rules for each attribute to be merged when highlighting
highlighting status conditions would fail to use attributes if a rule with highlighting status conditions would fail to use attributes if a rule with
them was followed by another one without (color only or color&normal) them was followed by another one without (color only or color&normal)
when using 'O' to set hilite_status rules, hide the 'score' status field if
game has been built without SCORE_ON_BOTL; latent rules for 'score'
can still be set in config file but can't be added or removed via 'O'
Fixes to Post-3.6.1 Problems that Were Exposed Via git Repository Fixes to Post-3.6.1 Problems that Were Exposed Via git Repository
------------------------------------------------------------------ ------------------------------------------------------------------
fix access violation when --debug:xxxx has no other args after it fix access violation when --debug:xxxx has no other args after it
Setting the inverse attribute for gold had the space before "$:" setting the inverse attribute for gold had the space before "$:"
getting highlighted along with the gold field getting highlighted along with the gold field
sortloot segfaulted when filtering a subset of items (seen with 'A' command) sortloot segfaulted when filtering a subset of items (seen with 'A' command)
+55 -33
View File
@@ -924,6 +924,7 @@ init_blstats()
#ifdef STATUS_HILITES #ifdef STATUS_HILITES
struct hilite_s *keep_hilite_chain = blstats[i][j].thresholds; struct hilite_s *keep_hilite_chain = blstats[i][j].thresholds;
#endif #endif
blstats[i][j] = initblstats[j]; blstats[i][j] = initblstats[j];
blstats[i][j].a = zeroany; blstats[i][j].a = zeroany;
if (blstats[i][j].valwidth) { if (blstats[i][j].valwidth) {
@@ -932,8 +933,7 @@ init_blstats()
} else } else
blstats[i][j].val = (char *) 0; blstats[i][j].val = (char *) 0;
#ifdef STATUS_HILITES #ifdef STATUS_HILITES
if (keep_hilite_chain) blstats[i][j].thresholds = keep_hilite_chain;
blstats[i][j].thresholds = keep_hilite_chain;
#endif #endif
} }
} }
@@ -1204,26 +1204,28 @@ static struct fieldid_t {
const char *fieldname; const char *fieldname;
enum statusfields fldid; enum statusfields fldid;
} fieldids_alias[] = { } fieldids_alias[] = {
{"characteristics", BL_CHARACTERISTICS}, { "characteristics", BL_CHARACTERISTICS },
{"dx", BL_DX}, { "encumbrance", BL_CAP },
{"co", BL_CO}, { "experience-points", BL_EXP },
{"con", BL_CO}, { "dx", BL_DX },
{"points", BL_SCORE}, { "co", BL_CO },
{"cap", BL_CAP}, { "con", BL_CO },
{"pw", BL_ENE}, { "points", BL_SCORE },
{"pw-max", BL_ENEMAX}, { "cap", BL_CAP },
{"xl", BL_XP}, { "pw", BL_ENE },
{"xplvl", BL_XP}, { "pw-max", BL_ENEMAX },
{"ac", BL_AC}, { "xl", BL_XP },
{"hit-dice", BL_HD}, { "xplvl", BL_XP },
{"turns", BL_TIME}, { "ac", BL_AC },
{"hp", BL_HP}, { "hit-dice", BL_HD },
{"hp-max", BL_HPMAX}, { "turns", BL_TIME },
{"dgn", BL_LEVELDESC}, { "hp", BL_HP },
{"xp", BL_EXP}, { "hp-max", BL_HPMAX },
{"exp", BL_EXP}, { "dgn", BL_LEVELDESC },
{"flags", BL_CONDITION}, { "xp", BL_EXP },
{0, BL_FLUSH} { "exp", BL_EXP },
{ "flags", BL_CONDITION },
{0, BL_FLUSH }
}; };
/* format arguments */ /* format arguments */
@@ -1258,6 +1260,7 @@ const char *name;
if (!nmatches) { if (!nmatches) {
/* check partial matches to canonical names */ /* check partial matches to canonical names */
int len = (int) strlen(name); int len = (int) strlen(name);
for (i = 0; i < SIZE(initblstats); i++) for (i = 0; i < SIZE(initblstats); i++)
if (!strncmpi(name, initblstats[i].fldname, len)) { if (!strncmpi(name, initblstats[i].fldname, len)) {
fld = initblstats[i].fld; fld = initblstats[i].fld;
@@ -1286,7 +1289,8 @@ long augmented_time;
return FALSE; return FALSE;
while (tl) { while (tl) {
/* only this style times out */ /* only this style times out (includes general 'changed'
as well as specific 'up' and 'down') */
if (tl->behavior == BL_TH_UPDOWN) if (tl->behavior == BL_TH_UPDOWN)
return TRUE; return TRUE;
tl = tl->next; tl = tl->next;
@@ -1491,6 +1495,7 @@ int *colorptr;
case BL_TH_TEXTMATCH: case BL_TH_TEXTMATCH:
txtstr = blstats[idx][fldidx].val; txtstr = blstats[idx][fldidx].val;
if (fldidx == BL_TITLE) if (fldidx == BL_TITLE)
/* "<name> the <rank-title>", skip past "<name> the " */
txtstr += (strlen(plname) + sizeof " the " - sizeof ""); txtstr += (strlen(plname) + sizeof " the " - sizeof "");
if (hl->rel == TXT_VALUE && hl->textmatch[0]) { if (hl->rel == TXT_VALUE && hl->textmatch[0]) {
if (fuzzymatch(hl->textmatch, txtstr, "\" -_", TRUE)) { if (fuzzymatch(hl->textmatch, txtstr, "\" -_", TRUE)) {
@@ -1523,15 +1528,14 @@ split_clridx(idx, coloridx, attrib)
int idx; int idx;
int *coloridx, *attrib; int *coloridx, *attrib;
{ {
if (coloridx && attrib) { if (coloridx)
*coloridx = idx & 0x00FF; *coloridx = idx & 0x00FF;
if (attrib)
*attrib = (idx >> 8) & 0x00FF; *attrib = (idx >> 8) & 0x00FF;
}
} }
/* /*
* This is the parser for the hilite options * This is the parser for the hilite options.
* *
* parse_status_hl1() separates each hilite entry into * parse_status_hl1() separates each hilite entry into
* a set of field threshold/action component strings, * a set of field threshold/action component strings,
@@ -2422,17 +2426,24 @@ STATIC_OVL int
status_hilite_linestr_countfield(fld) status_hilite_linestr_countfield(fld)
int fld; int fld;
{ {
struct _status_hilite_line_str *tmp = status_hilite_str; struct _status_hilite_line_str *tmp;
boolean countall = (fld == BL_FLUSH);
int count = 0; int count = 0;
while (tmp) { for (tmp = status_hilite_str; tmp; tmp = tmp->next) {
if (tmp->fld == fld || fld == BL_FLUSH) #ifndef SCORE_ON_BOTL
/* when SCORE_ON_BOTL is disabled, only count 'score' rules
if explicitly asked to do so; exclude them from 'all' count */
if (countall && tmp->fld == BL_SCORE)
continue;
#endif
if (countall || tmp->fld == fld)
count++; count++;
tmp = tmp->next;
} }
return count; return count;
} }
/* used by options handling, doset(options.c) */
int int
count_status_hilites(VOID_ARGS) count_status_hilites(VOID_ARGS)
{ {
@@ -2635,8 +2646,12 @@ status_hilite_menu_choose_field()
start_menu(tmpwin); start_menu(tmpwin);
for (i = 0; i < MAXBLSTATS; i++) { for (i = 0; i < MAXBLSTATS; i++) {
#ifndef SCORE_ON_BOTL
if (initblstats[i].fld == BL_SCORE)
continue;
#endif
any = zeroany; any = zeroany;
any.a_int = (i+1); any.a_int = (i + 1);
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE,
initblstats[i].fldname, MENU_UNSELECTED); initblstats[i].fldname, MENU_UNSELECTED);
} }
@@ -3427,6 +3442,14 @@ shlmenu_redo:
int count = status_hilite_linestr_countfield(i); int count = status_hilite_linestr_countfield(i);
char buf[BUFSZ]; char buf[BUFSZ];
#ifndef SCORE_ON_BOTL
/* config file might contain rules for highlighting 'score'
even when SCORE_ON_BOTL is disabled; if so, 'O' command
menus won't manipulate them, but will display them for
the "View all hilites in config format" operation */
if (initblstats[i].fld == BL_SCORE)
continue;
#endif
any = zeroany; any = zeroany;
any.a_int = i + 1; any.a_int = i + 1;
Sprintf(buf, "%-18s", initblstats[i].fldname); Sprintf(buf, "%-18s", initblstats[i].fldname);
@@ -3436,7 +3459,6 @@ shlmenu_redo:
buf, MENU_UNSELECTED); buf, MENU_UNSELECTED);
} }
end_menu(tmpwin, "Status hilites:"); end_menu(tmpwin, "Status hilites:");
if ((res = select_menu(tmpwin, PICK_ONE, &picks)) > 0) { if ((res = select_menu(tmpwin, PICK_ONE, &picks)) > 0) {
i = picks->item.a_int - 1; i = picks->item.a_int - 1;