diff --git a/include/botl.h b/include/botl.h index ecac2fe5d..386fd5eaa 100644 --- a/include/botl.h +++ b/include/botl.h @@ -114,7 +114,7 @@ enum blconditions { #define BL_MASK_TRAPPED 0x04000000L #define BL_MASK_UNCONSC 0x08000000L #define BL_MASK_WOUNDEDL 0x10000000L -#define BL_MASK_BITS 28 /* number of mask bits that can be set */ +#define BL_MASK_BITS 29 /* number of mask bits that can be set */ /* clang-format on */ struct conditions_t { diff --git a/win/curses/cursstat.c b/win/curses/cursstat.c index 9a85be656..a7ff2549c 100644 --- a/win/curses/cursstat.c +++ b/win/curses/cursstat.c @@ -721,7 +721,7 @@ boolean border; time_and_score |= 2; cond_count = 0; if (curses_condition_bits) { - for (i = 0; i < BL_MASK_BITS; ++i) + for (i = 0; i < CONDITION_COUNT; ++i) if (curses_condition_bits & (1 << i)) ++cond_count; } @@ -996,7 +996,7 @@ curs_stat_conds(int vert_cond, /* 0 => horizontal, 1 => vertical */ condbuf[0] = '\0'; if (nohilite) *nohilite = TRUE; /* assume ok */ - for (i = 0; i < BL_MASK_BITS; ++i) { + for (i = 0; i < CONDITION_COUNT; ++i) { ci = cond_idx[i]; bitmsk = conditions[ci].mask; if (curses_condition_bits & bitmsk) { @@ -1025,7 +1025,7 @@ curs_stat_conds(int vert_cond, /* 0 => horizontal, 1 => vertical */ cond_bits = curses_condition_bits; /* show active conditions directly; for vertical, three per line */ - for (i = 0; i < BL_MASK_BITS; ++i) { + for (i = 0; i < CONDITION_COUNT; ++i) { ci = cond_idx[i]; bitmsk = conditions[ci].mask; if (cond_bits & bitmsk) { diff --git a/win/win32/mhstatus.h b/win/win32/mhstatus.h index 4d5d93753..fc62ec423 100644 --- a/win/win32/mhstatus.h +++ b/win/win32/mhstatus.h @@ -21,7 +21,7 @@ static const int *fieldorders[] = { fieldorder1, fieldorder2, NULL }; static const int fieldcounts[NHSW_LINES] = { SIZE(fieldorder1) - 1, SIZE(fieldorder2) - 1}; #define MSWIN_MAX_LINE1_STRINGS (SIZE(fieldorder1) - 1) -#define MSWIN_MAX_LINE2_STRINGS (SIZE(fieldorder2) - 1 + BL_MASK_BITS) +#define MSWIN_MAX_LINE2_STRINGS (SIZE(fieldorder2) - 1 + CONDITION_COUNT) #define MSWIN_MAX_LINE_STRINGS (MSWIN_MAX_LINE1_STRINGS > MSWIN_MAX_LINE2_STRINGS ? \ MSWIN_MAX_LINE1_STRINGS : MSWIN_MAX_LINE2_STRINGS) diff --git a/win/win32/mswproc.c b/win/win32/mswproc.c index b4df786f8..1958a3260 100644 --- a/win/win32/mswproc.c +++ b/win/win32/mswproc.c @@ -2798,26 +2798,41 @@ NHMessageBox(HWND hWnd, LPCTSTR text, UINT type) static mswin_status_lines _status_lines; static mswin_status_string _status_strings[MAXBLSTATS]; -static mswin_status_string _condition_strings[BL_MASK_BITS]; +static mswin_status_string _condition_strings[CONDITION_COUNT]; static mswin_status_field _status_fields[MAXBLSTATS]; -static mswin_condition_field _condition_fields[BL_MASK_BITS] = { - { BL_MASK_STONE, "Stone" }, - { BL_MASK_SLIME, "Slime" }, - { BL_MASK_STRNGL, "Strngl" }, - { BL_MASK_FOODPOIS, "FoodPois" }, - { BL_MASK_TERMILL, "TermIll" }, - { BL_MASK_BLIND, "Blind" }, - { BL_MASK_DEAF, "Deaf" }, - { BL_MASK_STUN, "Stun" }, - { BL_MASK_CONF, "Conf" }, - { BL_MASK_HALLU, "Hallu" }, - { BL_MASK_LEV, "Lev" }, - { BL_MASK_FLY, "Fly" }, - { BL_MASK_RIDE, "Ride" } +static mswin_condition_field _condition_fields[CONDITION_COUNT] = { + { BL_MASK_BAREH, "Bare" }, + { BL_MASK_BLIND, "Blind" }, + { BL_MASK_BUSY, "Busy" }, + { BL_MASK_CONF, "Conf" }, + { BL_MASK_DEAF, "Deaf" }, + { BL_MASK_ELF_IRON, "Iron" }, + { BL_MASK_FLY, "Fly" }, + { BL_MASK_FOODPOIS, "FoodPois" }, + { BL_MASK_GLOWHANDS, "Glow" }, + { BL_MASK_GRAB, "Grab" }, + { BL_MASK_HALLU, "Hallu" }, + { BL_MASK_HELD, "Held" }, + { BL_MASK_ICY, "Icy" }, + { BL_MASK_INLAVA, "Lava" }, + { BL_MASK_LEV, "Lev" }, + { BL_MASK_PARLYZ, "Parlyz" }, + { BL_MASK_RIDE, "Ride" }, + { BL_MASK_SLEEPING, "Zzz" }, + { BL_MASK_SLIME, "Slime" }, + { BL_MASK_SLIPPERY, "Slip" }, + { BL_MASK_STONE, "Stone" }, + { BL_MASK_STRNGL, "Strngl" }, + { BL_MASK_STUN, "Stun" }, + { BL_MASK_SUBMERGED, "Sub" }, + { BL_MASK_TERMILL, "TermIll" }, + { BL_MASK_TETHERED, "Teth" }, + { BL_MASK_TRAPPED, "Trap" }, + { BL_MASK_UNCONSC, "Out" }, + { BL_MASK_WOUNDEDL, "Legs" }, }; - extern winid WIN_STATUS; #ifdef STATUS_HILITES @@ -2839,6 +2854,7 @@ void mswin_status_init(void) { logDebug("mswin_status_init()\n"); + int ci; for (int i = 0; i < SIZE(_status_fields); i++) { mswin_status_field * status_field = &_status_fields[i]; @@ -2847,9 +2863,10 @@ mswin_status_init(void) } for (int i = 0; i < SIZE(_condition_fields); i++) { - mswin_condition_field * condition_field = &_condition_fields[i]; - nhassert(condition_field->mask == (1 << i)); - condition_field->bit_position = i; + ci = cond_idx[i]; + mswin_condition_field * condition_field = &_condition_fields[ci]; + nhassert(condition_field->mask == (1 << ci)); + condition_field->bit_position = ci; } for (int i = 0; i < SIZE(_status_strings); i++) { @@ -2858,7 +2875,8 @@ mswin_status_init(void) } for (int i = 0; i < SIZE(_condition_strings); i++) { - mswin_status_string * status_string = &_condition_strings[i]; + ci = cond_idx[i]; + mswin_status_string * status_string = &_condition_strings[ci]; status_string->str = NULL; } @@ -2883,10 +2901,11 @@ mswin_status_init(void) &_status_strings[field_index]; if (field_index == BL_CONDITION) { - for (int j = 0; j < BL_MASK_BITS; j++) { + for (int j = 0; j < CONDITION_COUNT; j++) { + ci = cond_idx[j]; nhassert(status_strings->count <= SIZE(status_strings->status_strings)); status_strings->status_strings[status_strings->count++] = - &_condition_strings[j]; + &_condition_strings[ci]; } } } @@ -3043,7 +3062,7 @@ mswin_status_update(int idx, genericptr_t ptr, int chg, int percent, int color, long cond, *condptr = (long *) ptr; char *text = (char *) ptr; MSNHMsgUpdateStatus update_cmd_data; - int ocolor, ochar; + int ocolor, ochar, ci; unsigned ospecial; logDebug("mswin_status_update(%d, %p, %d, %d, %x, %p)\n", idx, ptr, chg, percent, color, condmasks); @@ -3067,14 +3086,16 @@ mswin_status_update(int idx, genericptr_t ptr, int chg, int percent, int color, switch (idx) { case BL_CONDITION: { - mswin_condition_field * condition_field = _condition_fields; + mswin_condition_field * condition_field; nhassert(status_string->str == NULL); cond = *condptr; - for (int i = 0; i < BL_MASK_BITS; i++, condition_field++) { - status_string = &_condition_strings[i]; + for (int i = 0; i < CONDITION_COUNT; i++) { + ci = cond_idx[i]; + condition_field = &_condition_fields[ci]; + status_string = &_condition_strings[ci]; if (condition_field->mask & cond) { status_string->str = condition_field->name;