X11: Hilight piles of objects
This commit is contained in:
@@ -230,9 +230,9 @@ win/X11:
|
|||||||
(files for X versions)
|
(files for X versions)
|
||||||
Install.X11 NetHack.ad Window.c dialogs.c ibm.bdf
|
Install.X11 NetHack.ad Window.c dialogs.c ibm.bdf
|
||||||
nethack.rc nh10.bdf nh32icon nh56icon nh72icon
|
nethack.rc nh10.bdf nh32icon nh56icon nh72icon
|
||||||
nh_icon.xpm pet_mark.xbm rip.xpm tile2x11.c winX.c
|
nh_icon.xpm pet_mark.xbm pilemark.xbm rip.xpm tile2x11.c
|
||||||
winmap.c winmenu.c winmesg.c winmisc.c winstat.c
|
winX.c winmap.c winmenu.c winmesg.c winmisc.c
|
||||||
wintext.c winval.c
|
winstat.c wintext.c winval.c
|
||||||
|
|
||||||
win/gem:
|
win/gem:
|
||||||
(files for GEM versions)
|
(files for GEM versions)
|
||||||
|
|||||||
@@ -941,6 +941,7 @@ tty: fix crashing when a location has more than 32k items
|
|||||||
tty: fix segfault when MD termcap is not defined
|
tty: fix segfault when MD termcap is not defined
|
||||||
tty: do not cut off statuslines at 80 characters for wider term
|
tty: do not cut off statuslines at 80 characters for wider term
|
||||||
tty: prevent accidental escapes from string entries
|
tty: prevent accidental escapes from string entries
|
||||||
|
tty: hilight object piles
|
||||||
unix: remove use of parentheses in nethack man page usage that confused a
|
unix: remove use of parentheses in nethack man page usage that confused a
|
||||||
man page conversion tool
|
man page conversion tool
|
||||||
unix: new -wwindowtype option
|
unix: new -wwindowtype option
|
||||||
@@ -990,6 +991,7 @@ X11: added support for hilite_pet to text map mode
|
|||||||
X11: ensure vertical scrollbar shows up in text display windows
|
X11: ensure vertical scrollbar shows up in text display windows
|
||||||
X11: fix typo in mouse click sanity check; result might have pointed to
|
X11: fix typo in mouse click sanity check; result might have pointed to
|
||||||
spurious location after window resizing
|
spurious location after window resizing
|
||||||
|
X11: use a plus sign to mark piles of objects
|
||||||
platforms that support hangup: SAFERHANGUP to avoid losing objects in transit
|
platforms that support hangup: SAFERHANGUP to avoid losing objects in transit
|
||||||
between lists when hangup occurs, and also avoid cheats due to
|
between lists when hangup occurs, and also avoid cheats due to
|
||||||
well-timed hangups to stop a long melee
|
well-timed hangups to stop a long melee
|
||||||
|
|||||||
+8
-1
@@ -56,8 +56,13 @@ struct text_map_info_t {
|
|||||||
square_lbearing;
|
square_lbearing;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct tile_glyph_info_t {
|
||||||
|
unsigned short glyph;
|
||||||
|
unsigned special;
|
||||||
|
};
|
||||||
|
|
||||||
struct tile_map_info_t {
|
struct tile_map_info_t {
|
||||||
unsigned short glyphs[ROWNO][COLNO]; /* Saved glyph numbers. */
|
struct tile_glyph_info_t glyphs[ROWNO][COLNO]; /* Saved glyph numbers. */
|
||||||
GC white_gc;
|
GC white_gc;
|
||||||
GC black_gc;
|
GC black_gc;
|
||||||
unsigned long image_width; /* dimensions of tile image */
|
unsigned long image_width; /* dimensions of tile image */
|
||||||
@@ -247,6 +252,8 @@ typedef struct {
|
|||||||
int message_lines; /* number of lines to attempt to show */
|
int message_lines; /* number of lines to attempt to show */
|
||||||
String pet_mark_bitmap; /* X11 bitmap file used to mark pets */
|
String pet_mark_bitmap; /* X11 bitmap file used to mark pets */
|
||||||
Pixel pet_mark_color; /* color of pet mark */
|
Pixel pet_mark_color; /* color of pet mark */
|
||||||
|
String pilemark_bitmap; /* X11 bitmap file used to mark item piles */
|
||||||
|
Pixel pilemark_color; /* color of item pile mark */
|
||||||
#ifdef GRAPHIC_TOMBSTONE
|
#ifdef GRAPHIC_TOMBSTONE
|
||||||
String tombstone; /* name of XPM file for tombstone */
|
String tombstone; /* name of XPM file for tombstone */
|
||||||
int tombtext_x; /* x-coord of center of first tombstone text */
|
int tombtext_x; /* x-coord of center of first tombstone text */
|
||||||
|
|||||||
@@ -50,6 +50,9 @@ NetHack.ad: ../win/X11/NetHack.ad
|
|||||||
pet_mark.xbm: ../win/X11/pet_mark.xbm
|
pet_mark.xbm: ../win/X11/pet_mark.xbm
|
||||||
cp ../win/X11/pet_mark.xbm pet_mark.xbm
|
cp ../win/X11/pet_mark.xbm pet_mark.xbm
|
||||||
|
|
||||||
|
pilemark.xbm: ../win/X11/pilemark.xbm
|
||||||
|
cp ../win/X11/pilemark.xbm pilemark.xbm
|
||||||
|
|
||||||
rip.xpm: ../win/X11/rip.xpm
|
rip.xpm: ../win/X11/rip.xpm
|
||||||
cp ../win/X11/rip.xpm rip.xpm
|
cp ../win/X11/rip.xpm rip.xpm
|
||||||
|
|
||||||
@@ -152,5 +155,5 @@ dungeon: dungeon.def ../util/makedefs ../util/dgn_comp
|
|||||||
|
|
||||||
spotless:
|
spotless:
|
||||||
-rm -f spec_levs quest_levs *.lev $(VARDAT) dungeon dungeon.pdf
|
-rm -f spec_levs quest_levs *.lev $(VARDAT) dungeon dungeon.pdf
|
||||||
-rm -f nhdat x11tiles beostiles pet_mark.xbm rip.xpm mapbg.xpm
|
-rm -f nhdat x11tiles beostiles pet_mark.xbm pilemark.xbm rip.xpm mapbg.xpm
|
||||||
-rm -f rip.img GEM_RSC.RSC title.img nh16.img NetHack.ad
|
-rm -f rip.img GEM_RSC.RSC title.img nh16.img NetHack.ad
|
||||||
|
|||||||
@@ -156,6 +156,9 @@ NetHack.ad: $(GAME)
|
|||||||
pet_mark.xbm:
|
pet_mark.xbm:
|
||||||
( cd dat ; $(MAKE) pet_mark.xbm )
|
( cd dat ; $(MAKE) pet_mark.xbm )
|
||||||
|
|
||||||
|
pilemark.xbm:
|
||||||
|
( cd dat ; $(MAKE) pilemark.xbm )
|
||||||
|
|
||||||
rip.xpm:
|
rip.xpm:
|
||||||
( cd dat ; $(MAKE) rip.xpm )
|
( cd dat ; $(MAKE) rip.xpm )
|
||||||
|
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ WINSRC = $(WINX11SRC)
|
|||||||
WINOBJ = $(WINX11OBJ)
|
WINOBJ = $(WINX11OBJ)
|
||||||
WINLIB = $(WINX11LIB)
|
WINLIB = $(WINX11LIB)
|
||||||
|
|
||||||
VARDATND = x11tiles NetHack.ad pet_mark.xbm
|
VARDATND = x11tiles NetHack.ad pet_mark.xbm pilemark.xbm
|
||||||
|
|
||||||
#WINTTYLIB=-lcurses
|
#WINTTYLIB=-lcurses
|
||||||
|
|
||||||
|
|||||||
@@ -197,5 +197,6 @@ dialogs.c - A better dialog widget. Original code (modified slightly
|
|||||||
Theisen. This is from his Ghostview program (which is under
|
Theisen. This is from his Ghostview program (which is under
|
||||||
the GNU public license, v2 or higher).
|
the GNU public license, v2 or higher).
|
||||||
pet_mark.xbm - A pet indicator bitmap for tiles.
|
pet_mark.xbm - A pet indicator bitmap for tiles.
|
||||||
|
pilemark.xbm - Item pile indicator for tiles.
|
||||||
rip.xpm - A graphical tombstone.
|
rip.xpm - A graphical tombstone.
|
||||||
tile2x11.c - Converts win/share tiles for X11 use.
|
tile2x11.c - Converts win/share tiles for X11 use.
|
||||||
|
|||||||
@@ -27,6 +27,9 @@ NetHack.tile_file: x11tiles
|
|||||||
! The annotation of pets.
|
! The annotation of pets.
|
||||||
!NetHack.pet_mark_bitmap: pet_mark.xbm
|
!NetHack.pet_mark_bitmap: pet_mark.xbm
|
||||||
!NetHack.pet_mark_color: Red
|
!NetHack.pet_mark_color: Red
|
||||||
|
! The annotation of item piles.
|
||||||
|
!NetHack.pilemark_bitmap: pilemark.xbm
|
||||||
|
!NetHack.pilemark_color: Green
|
||||||
|
|
||||||
! Tombstone
|
! Tombstone
|
||||||
! The image file
|
! The image file
|
||||||
|
|||||||
@@ -0,0 +1,6 @@
|
|||||||
|
#define pilemark_width 16
|
||||||
|
#define pilemark_height 16
|
||||||
|
static unsigned char pilemark_bits[] = {
|
||||||
|
0x00, 0x00, 0x18, 0x00, 0x18, 0x00, 0x7e, 0x00, 0x7e, 0x00, 0x18, 0x00,
|
||||||
|
0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||||
@@ -980,6 +980,12 @@ static XtResource resources[] = {
|
|||||||
{ nhStr("pet_mark_color"), nhStr("Pet_mark_color"), XtRPixel,
|
{ nhStr("pet_mark_color"), nhStr("Pet_mark_color"), XtRPixel,
|
||||||
sizeof(XtRPixel), XtOffset(AppResources *, pet_mark_color), XtRString,
|
sizeof(XtRPixel), XtOffset(AppResources *, pet_mark_color), XtRString,
|
||||||
nhStr("Red") },
|
nhStr("Red") },
|
||||||
|
{ nhStr("pilemark_bitmap"), nhStr("Pilemark_bitmap"), XtRString,
|
||||||
|
sizeof(String), XtOffset(AppResources *, pilemark_bitmap), XtRString,
|
||||||
|
nhStr("pilemark.xbm") },
|
||||||
|
{ nhStr("pilemark_color"), nhStr("Pilemark_color"), XtRPixel,
|
||||||
|
sizeof(XtRPixel), XtOffset(AppResources *, pilemark_color), XtRString,
|
||||||
|
nhStr("Green") },
|
||||||
#ifdef GRAPHIC_TOMBSTONE
|
#ifdef GRAPHIC_TOMBSTONE
|
||||||
{ nhStr("tombstone"), "Tombstone", XtRString, sizeof(String),
|
{ nhStr("tombstone"), "Tombstone", XtRString, sizeof(String),
|
||||||
XtOffset(AppResources *, tombstone), XtRString, "rip.xpm" },
|
XtOffset(AppResources *, tombstone), XtRString, "rip.xpm" },
|
||||||
|
|||||||
+33
-8
@@ -88,7 +88,7 @@ int glyph, bkglyph;
|
|||||||
|
|
||||||
/* update both the tile and text backing stores */
|
/* update both the tile and text backing stores */
|
||||||
{
|
{
|
||||||
unsigned short *t_ptr = &map_info->tile_map.glyphs[y][x];
|
unsigned short *t_ptr = &map_info->tile_map.glyphs[y][x].glyph;
|
||||||
|
|
||||||
if (*t_ptr != glyph) {
|
if (*t_ptr != glyph) {
|
||||||
*t_ptr = glyph;
|
*t_ptr = glyph;
|
||||||
@@ -108,6 +108,11 @@ int glyph, bkglyph;
|
|||||||
(void) mapglyph(glyph, &och, &color, &special, x, y);
|
(void) mapglyph(glyph, &och, &color, &special, x, y);
|
||||||
ch = (uchar) och;
|
ch = (uchar) och;
|
||||||
|
|
||||||
|
if (special != map_info->tile_map.glyphs[y][x].special) {
|
||||||
|
map_info->tile_map.glyphs[y][x].special = special;
|
||||||
|
update_bbox = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
/* Only update if we need to. */
|
/* Only update if we need to. */
|
||||||
ch_ptr = &map_info->text_map.text[y][x];
|
ch_ptr = &map_info->text_map.text[y][x];
|
||||||
|
|
||||||
@@ -122,6 +127,7 @@ int glyph, bkglyph;
|
|||||||
#ifdef TEXTCOLOR
|
#ifdef TEXTCOLOR
|
||||||
if ((special & MG_PET) && iflags.hilite_pet)
|
if ((special & MG_PET) && iflags.hilite_pet)
|
||||||
color += CLR_MAX;
|
color += CLR_MAX;
|
||||||
|
if ((special & MG_OBJPILE) && iflags.use_inverse)
|
||||||
*co_ptr = color;
|
*co_ptr = color;
|
||||||
#endif
|
#endif
|
||||||
if (!map_info->is_tile)
|
if (!map_info->is_tile)
|
||||||
@@ -178,6 +184,7 @@ struct tile_annotation {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static struct tile_annotation pet_annotation;
|
static struct tile_annotation pet_annotation;
|
||||||
|
static struct tile_annotation pile_annotation;
|
||||||
|
|
||||||
static void
|
static void
|
||||||
init_annotation(annotation, filename, colorpixel)
|
init_annotation(annotation, filename, colorpixel)
|
||||||
@@ -232,6 +239,8 @@ post_process_tiles()
|
|||||||
|
|
||||||
init_annotation(&pet_annotation, appResources.pet_mark_bitmap,
|
init_annotation(&pet_annotation, appResources.pet_mark_bitmap,
|
||||||
appResources.pet_mark_color);
|
appResources.pet_mark_color);
|
||||||
|
init_annotation(&pile_annotation, appResources.pilemark_bitmap,
|
||||||
|
appResources.pilemark_color);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -902,14 +911,15 @@ static void
|
|||||||
map_all_stone(map_info)
|
map_all_stone(map_info)
|
||||||
struct map_info_t *map_info;
|
struct map_info_t *map_info;
|
||||||
{
|
{
|
||||||
int i;
|
int x,y;
|
||||||
unsigned short *sp, stone;
|
unsigned short *sp, stone;
|
||||||
stone = cmap_to_glyph(S_stone);
|
stone = cmap_to_glyph(S_stone);
|
||||||
|
|
||||||
for (sp = (unsigned short *) map_info->tile_map.glyphs, i = 0;
|
for (x = 0; x < COLNO; x++)
|
||||||
i < ROWNO * COLNO; sp++, i++) {
|
for (y = 0; y < ROWNO; y++) {
|
||||||
*sp = stone;
|
map_info->tile_map.glyphs[y][x].glyph = stone;
|
||||||
}
|
map_info->tile_map.glyphs[y][x].special = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -1248,7 +1258,7 @@ boolean inverted;
|
|||||||
|
|
||||||
for (row = start_row; row <= stop_row; row++) {
|
for (row = start_row; row <= stop_row; row++) {
|
||||||
for (cur_col = start_col; cur_col <= stop_col; cur_col++) {
|
for (cur_col = start_col; cur_col <= stop_col; cur_col++) {
|
||||||
int glyph = tile_map->glyphs[row][cur_col];
|
int glyph = tile_map->glyphs[row][cur_col].glyph;
|
||||||
int tile = glyph2tile[glyph];
|
int tile = glyph2tile[glyph];
|
||||||
int src_x, src_y;
|
int src_x, src_y;
|
||||||
int dest_x = cur_col * tile_map->square_width;
|
int dest_x = cur_col * tile_map->square_width;
|
||||||
@@ -1276,6 +1286,21 @@ boolean inverted;
|
|||||||
XSetForeground(dpy, tile_map->black_gc,
|
XSetForeground(dpy, tile_map->black_gc,
|
||||||
BlackPixelOfScreen(screen));
|
BlackPixelOfScreen(screen));
|
||||||
}
|
}
|
||||||
|
if ((tile_map->glyphs[row][cur_col].special & MG_OBJPILE)) {
|
||||||
|
/* draw object pile annotation (a plus sign) */
|
||||||
|
XSetForeground(dpy, tile_map->black_gc,
|
||||||
|
pile_annotation.foreground);
|
||||||
|
XSetClipOrigin(dpy, tile_map->black_gc, dest_x, dest_y);
|
||||||
|
XSetClipMask(dpy, tile_map->black_gc,
|
||||||
|
pile_annotation.bitmap);
|
||||||
|
XCopyPlane(dpy, pile_annotation.bitmap, XtWindow(wp->w),
|
||||||
|
tile_map->black_gc, 0, 0, pile_annotation.width,
|
||||||
|
pile_annotation.height, dest_x, dest_y, 1);
|
||||||
|
XSetClipOrigin(dpy, tile_map->black_gc, 0, 0);
|
||||||
|
XSetClipMask(dpy, tile_map->black_gc, None);
|
||||||
|
XSetForeground(dpy, tile_map->black_gc,
|
||||||
|
BlackPixelOfScreen(screen));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1284,7 +1309,7 @@ boolean inverted;
|
|||||||
XtDisplay(wp->w), XtWindow(wp->w),
|
XtDisplay(wp->w), XtWindow(wp->w),
|
||||||
#ifdef USE_WHITE
|
#ifdef USE_WHITE
|
||||||
/* kludge for white square... */
|
/* kludge for white square... */
|
||||||
tile_map->glyphs[start_row][start_col] == cmap_to_glyph(S_ice)
|
tile_map->glyphs[start_row][start_col].glyph == cmap_to_glyph(S_ice)
|
||||||
? tile_map->black_gc
|
? tile_map->black_gc
|
||||||
: tile_map->white_gc,
|
: tile_map->white_gc,
|
||||||
#else
|
#else
|
||||||
|
|||||||
Reference in New Issue
Block a user