From: PatR Date: Mon, 6 Apr 2020 21:15:36 +0000 (-0700) Subject: X11 - ice on black&white text map X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d984b0b87c6c1172f2cf5b6db44be539b68b4552;p=nethack X11 - ice on black&white text map Add support for black&white ice (3.7.0 feature) similar to already supported black&white lava: show in inverse video if it uses the same character as floor (in the ice case; as water in the lava case). Inverse for monster detection, black&white lava, and now black&white ice was being done unconditionally but has been changed so that the user can disable it by toggling the 'use_inverse' run-time option. [Bug noticed in the process: if you move an inverse video cursor onto inverse video detected monster/lava/ice (when doing farlook, for instance), the cursor disappears. I'm not sure how to address that.] --- diff --git a/doc/fixes37.0 b/doc/fixes37.0 index 49b7bd2db..dec38a215 100644 --- a/doc/fixes37.0 +++ b/doc/fixes37.0 @@ -161,6 +161,8 @@ fix door created into random wall or position opening into solid wall being more general; change its default to True X11: was still initializing map to 'stone' instead of 'unexplored' after they became separate glyphs +X11: for text map without color, add support for black&white ice; draw it in + inverse video to distinguish from ordinary floor Platform- and/or Interface-Specific Fixes diff --git a/win/X11/winX.c b/win/X11/winX.c index feab64a44..de4849ab7 100644 --- a/win/X11/winX.c +++ b/win/X11/winX.c @@ -98,7 +98,7 @@ static XtSignalId X11_sig_id; /* Interface definition, for windows.c */ struct window_procs X11_procs = { "X11", - ( WC_COLOR | WC_HILITE_PET | WC_ASCII_MAP | WC_TILED_MAP + ( WC_COLOR | WC_INVERSE | WC_HILITE_PET | WC_ASCII_MAP | WC_TILED_MAP | WC_PLAYER_SELECTION | WC_PERM_INVENT | WC_MOUSE_SUPPORT ), /* status requires VIA_WINDOWPORT(); WC2_FLUSH_STATUS ensures that */ ( WC2_FLUSH_STATUS diff --git a/win/X11/winmap.c b/win/X11/winmap.c index 74cfb4643..2d40dd6e5 100644 --- a/win/X11/winmap.c +++ b/win/X11/winmap.c @@ -129,7 +129,8 @@ int bkglyph UNUSED; co_ptr = &map_info->text_map.colors[y][x]; colordif = (((special & MG_PET) != 0 && iflags.hilite_pet) || ((special & MG_OBJPILE) != 0 && iflags.hilite_pile) - || ((special & (MG_DETECT | MG_BW_LAVA)) != 0)) + || ((special & (MG_DETECT | MG_BW_LAVA | MG_BW_ICE)) != 0 + && iflags.use_inverse)) ? CLR_MAX : 0; if (*co_ptr != (uchar) (color + colordif)) { *co_ptr = (uchar) (color + colordif); @@ -141,9 +142,9 @@ int bkglyph UNUSED; if (update_bbox) { /* update row bbox */ if ((uchar) x < map_info->t_start[y]) - map_info->t_start[y] = x; + map_info->t_start[y] = (uchar) x; if ((uchar) x > map_info->t_stop[y]) - map_info->t_stop[y] = x; + map_info->t_stop[y] = (uchar) x; } }