From: SHIRAKATA Kentaro Date: Thu, 2 Jan 2003 05:44:36 +0000 (+0000) Subject: separate radar patch X-Git-Url: http://git.osdn.net/view?p=jnethack%2Fhtdocs.git;a=commitdiff_plain;h=57a39b2ba843d2774bec8390f2cc7ff9f6b73424 separate radar patch --- diff --git a/patch/radar.patch b/patch/radar.patch new file mode 100644 index 0000000..f6ba3ba --- /dev/null +++ b/patch/radar.patch @@ -0,0 +1,440 @@ +diff -aur -xCVS jnethack/include/config.h new/include/config.h +--- jnethack/include/config.h Thu Jan 2 14:04:48 2003 ++++ new/include/config.h Thu Jan 2 14:30:17 2003 +@@ -133,6 +133,7 @@ + # ifdef USE_XPM + # define GRAPHIC_TOMBSTONE /* Use graphical tombstone (rip.xpm) */ + # endif ++#define RADAR /* Display radar */ + #endif + + +diff -aur -xCVS jnethack/include/flag.h new/include/flag.h +--- jnethack/include/flag.h Thu Jan 2 14:05:23 2003 ++++ new/include/flag.h Mon Apr 29 04:33:43 2002 +@@ -68,6 +68,9 @@ + boolean pickup; /* whether you pickup or move and look */ + + boolean pushweapon; /* When wielding, push old weapon into second slot */ ++#ifdef RADAR ++ boolean radar; ++#endif + boolean rest_on_space; /* space means rest */ + boolean safe_dog; /* give complete protection to the dog */ + #ifdef EXP_ON_BOTL +diff -aur -xCVS jnethack/include/winX.h new/include/winX.h +--- jnethack/include/winX.h Thu Jan 2 14:05:54 2003 ++++ new/include/winX.h Mon Apr 29 04:33:44 2002 +@@ -281,6 +281,9 @@ + int tombtext_dx; /* x-displacement between tombstone line */ + int tombtext_dy; /* y-displacement between tombstone line */ + #endif ++#ifdef RADAR ++ Boolean radar; ++#endif + Boolean center_popups; /* to centre popups over the main window */ + } AppResources; + +@@ -333,6 +336,9 @@ + E void FDECL(create_map_window,(struct xwindow*, BOOLEAN_P, Widget)); + E void FDECL(destroy_map_window,(struct xwindow*)); + E int FDECL(x_event,(int)); ++#ifdef RADAR ++E void FDECL(dismiss_radar,(Widget, XEvent*, String*, Cardinal*)); ++#endif + + /* ### winmenu.c ### */ + E void FDECL(menu_delete, (Widget, XEvent*, String*, Cardinal*)); +diff -aur -xCVS jnethack/src/options.c new/src/options.c +--- jnethack/src/options.c Thu Jan 2 14:08:33 2003 ++++ new/src/options.c Thu Jan 2 14:04:40 2003 +@@ -144,6 +144,9 @@ + {"prayconfirm", &flags.prayconfirm, TRUE, SET_IN_GAME}, + {"preload_tiles", &iflags.wc_preload_tiles, TRUE, DISP_IN_GAME}, /*WC*/ + {"pushweapon", &flags.pushweapon, FALSE, SET_IN_GAME}, ++#ifdef RADAR ++ { "radar", &flags.radar, FALSE, SET_IN_GAME}, ++#endif + #if defined(MICRO) && !defined(AMIGA) && !defined(MSWIN_GRAPHICS) + {"rawio", &iflags.rawio, FALSE, DISP_IN_GAME}, + #else +diff -aur -xCVS jnethack/win/X11/winX.c new/win/X11/winX.c +--- jnethack/win/X11/winX.c Thu Jan 2 14:31:36 2003 ++++ new/win/X11/winX.c Mon Dec 23 04:47:01 2002 +@@ -950,6 +950,9 @@ + #ifdef GRAPHIC_TOMBSTONE + {"rip_dismiss_text",rip_dismiss_text},/* action for rip in text widget */ + #endif ++#ifdef RADAR ++ {"dismiss_radar", dismiss_radar}, ++#endif + {"menu_key", menu_key}, /* action for menu accelerators */ + {"yn_key", yn_key}, /* action for yn accelerators */ + {"yn_delete", yn_delete}, /* action for yn delete-window */ +@@ -1003,6 +1006,10 @@ + XtOffset(AppResources *,tombtext_dx), XtRString, "0" }, + { "tombtext_dy", "Tombtext_dy", XtRInt, sizeof(int), + XtOffset(AppResources *,tombtext_dy), XtRString, "13" }, ++# ifdef RADAR /* µ¡Ç½¤·¤Æ¤Þ¤»¤ó */ ++ { "radar", "Radar", XtRBoolean, sizeof(Boolean), ++ XtOffset(AppResources *, radar), XtRString, "True" }, ++# endif + #endif + #if 1 /*JP*/ + { "centerPopups", "CenterPopups", XtRBoolean, sizeof(Boolean), +@@ -2136,6 +2143,9 @@ + + direction=atoi(params[0]); + ++#ifdef RADAR ++ viewport = XtNameToWidget(toplevel, "*map_viewport"); ++#endif + horiz_sb = XtNameToWidget(viewport, "*horizontal"); + vert_sb = XtNameToWidget(viewport, "*vertical"); + +diff -aur -xCVS jnethack/win/X11/winmap.c new/win/X11/winmap.c +--- jnethack/win/X11/winmap.c Thu Jan 2 14:34:07 2003 ++++ new/win/X11/winmap.c Mon Dec 23 04:55:51 2002 +@@ -71,6 +71,56 @@ + static void FDECL(get_char_info, (struct xwindow *)); + static void FDECL(display_cursor, (struct xwindow *)); + ++#ifdef RADAR ++ ++#define RADAR_WIDTH (80 * 4) ++#define RADAR_HEIGHT (24 * 4) ++ ++#define USE_RADAR (map_info->is_tile) ++static int radar_is_popuped; ++static int radar_is_initialized; ++ ++static Widget radar; ++static int radar_x, radar_y; ++static int radar_w, radar_h; ++ ++static Widget radar_popup; ++static Window radar_window; ++static Pixmap radar_pixmap; ++static Pixmap radar_pixmap2; ++static GC radar_gc_black; ++static GC radar_gc_white; ++static GC radar_gc[16]; ++ ++static XColor radar_color[16] = { ++ {0, 0x0000, 0x0000, 0x0000,}, /* black */ ++ {0, 0xffff, 0xffff, 0xffff,}, /* white */ ++ {0, 0xffff, 0x0000, 0x0000,}, /* red */ ++ {0, 0x0000, 0xffff, 0x0000,}, /* green */ ++ {0, 0x0000, 0x0000, 0xffff,}, /* blue */ ++ {0, 0xffff, 0xffff, 0x0000,}, /* yellow */ ++ {0, 0xffff, 0x0000, 0xffff,}, /* magenta */ ++ {0, 0x8000, 0x8000, 0x8000,}, /* gray */ ++ {0, 0xffff, 0x8000, 0x0000,}, /* orange */ ++ {0, 0x0000, 0x8000, 0x0000,}, /* dark green */ ++ {0, 0x0000, 0xffff, 0xffff,}, /* cyan */ ++}; ++enum { ++ RADAR_BLACK, ++ RADAR_WHITE, ++ RADAR_RED, ++ RADAR_GREEN, ++ RADAR_BLUE, ++ RADAR_YELLOW, ++ RADAR_MAGENTA, ++ RADAR_GRAY, ++ RADAR_ORANGE, ++ RADAR_DARKGREEN, ++ RADAR_CYAN, ++}; ++ ++#endif /*RADAR*/ ++ + #if 1 /*JP*/ + struct pxm_slot_t { + int fg; +@@ -367,6 +417,9 @@ + #endif + + if (errorcode != XpmSuccess) { ++#ifdef RADAR ++ USE_RADAR = 0; ++#endif + if (errorcode == XpmColorFailed) { + Sprintf(buf, "Insufficient colors available to load %s.", + appResources.tile_file); +@@ -641,6 +694,34 @@ + return result; + } + ++#ifdef RADAR ++void ++check_sb(struct xwindow *wp) ++{ ++ Arg arg[2]; ++ Widget viewport, horiz_sb, vert_sb; ++ float top, shown; ++ ++ viewport = XtParent(wp->w); ++ horiz_sb = XtNameToWidget(viewport, "horizontal"); ++ vert_sb = XtNameToWidget(viewport, "vertical"); ++ ++ if (horiz_sb) { ++ XtSetArg(arg[0], XtNshown, &shown); ++ XtSetArg(arg[1], XtNtopOfThumb, &top); ++ XtGetValues(horiz_sb, arg, TWO); ++ radar_x = top * RADAR_WIDTH; ++ radar_w = shown * RADAR_WIDTH; ++ } ++ if (vert_sb) { ++ XtSetArg(arg[0], XtNshown, &shown); ++ XtSetArg(arg[1], XtNtopOfThumb, &top); ++ XtGetValues(vert_sb, arg, TWO); ++ radar_y = top * RADAR_HEIGHT; ++ radar_h = shown * RADAR_HEIGHT; ++ } ++} ++#endif + + /* + * Make sure the map's cursor is always visible. +@@ -673,6 +754,10 @@ + XtSetArg(arg[0], XtNshown, &shown); + XtSetArg(arg[1], XtNtopOfThumb, &top); + XtGetValues(horiz_sb, arg, TWO); ++#ifdef RADAR ++ radar_x = top * RADAR_WIDTH; ++ radar_w = shown * RADAR_WIDTH; ++#endif + + /* [ALI] Don't assume map widget is the same size as actual map */ + cursor_middle = (wp->cursx + 0.5) * wp->map_information->square_width / +@@ -721,6 +806,10 @@ + XtSetArg(arg[0], XtNshown, &shown); + XtSetArg(arg[1], XtNtopOfThumb, &top); + XtGetValues(vert_sb, arg, TWO); ++#ifdef RADAR ++ radar_y = top * RADAR_HEIGHT; ++ radar_h = shown * RADAR_HEIGHT; ++#endif + + cursor_middle = (wp->cursy + 0.5) * wp->map_information->square_height / + wp->pixel_height; +@@ -1323,6 +1412,74 @@ + int row; + register int count; + ++#ifdef RADAR ++ Arg args[16]; ++ Cardinal num_args; ++ Dimension width, height; ++ int depth; ++ Display *dpy; ++ XGCValues gcval; ++ Colormap cmap; ++ ++ dpy = XtDisplay(radar); ++ ++ if(USE_RADAR){ ++ int i; ++ ++ if(flags.radar && !radar_is_popuped){ ++ XtPopup(radar_popup, XtGrabNone); ++ radar_is_popuped = TRUE; ++ } ++ if(!flags.radar && radar_is_popuped){ ++ XtPopdown(radar_popup); ++ radar_is_popuped = FALSE; ++ } ++ ++ if(!radar_is_initialized){ ++ radar_is_initialized = TRUE; ++ ++ XtRealizeWidget(radar_popup); ++ ++ num_args = 0; ++ XtSetArg(args[num_args], XtNwidth, &width); ++num_args; ++ XtSetArg(args[num_args], XtNheight, &height); ++num_args; ++ ++ XtGetValues(radar, args, num_args); ++ depth = DefaultDepth(dpy, DefaultScreen(dpy)); ++ radar_window = XtWindow(radar); ++ radar_pixmap = XCreatePixmap(dpy, radar_window, ++ width, height, depth); ++ radar_pixmap2 = XCreatePixmap(dpy, radar_window, ++ width, height, depth); ++ ++ num_args = 0; ++ XtSetArg(args[num_args], XtNbackgroundPixmap, radar_pixmap); num_args++; ++ XtSetValues(radar, args, num_args); ++ ++ num_args = 0; ++ XtSetArg(args[num_args], XtNcolormap, &cmap); num_args++; ++ XtGetValues(radar, args, num_args); ++ ++ gcval.function = GXcopy; ++ for(i=0 ; i<16 ; ++i){ ++ XAllocColor(dpy, cmap, &radar_color[i]); ++ ++ gcval.foreground = radar_color[i].pixel; ++ radar_gc[i] = XCreateGC(dpy, radar_window, ++ GCFunction | GCForeground, ++ &gcval); ++ } ++ radar_gc_black = radar_gc[RADAR_BLACK]; ++ radar_gc_white = radar_gc[RADAR_WHITE]; ++ ++ XFillRectangle(dpy, radar_pixmap, ++ radar_gc_black, 0, 0, width, height); ++ XFillRectangle(dpy, radar_pixmap2, ++ radar_gc_black, 0, 0, width, height); ++ } ++ } ++#endif /*RADAR*/ ++ + if (start_row < 0 || stop_row >= ROWNO) { + impossible("map_update: bad row range %d-%d\n", start_row, stop_row); + return; +@@ -1454,6 +1611,60 @@ + } + /*ITA*/ + } ++# ifdef RADAR ++ if(tile_pixmap && USE_RADAR){ ++# define RADAR_MONSTER RADAR_YELLOW ++# define RADAR_HUMAN RADAR_WHITE ++# define RADAR_OBJECT RADAR_BLUE ++ ++# define RADAR_WALL RADAR_GRAY ++# define RADAR_FLOOR RADAR_DARKGREEN ++# define RADAR_DOOR RADAR_ORANGE ++# define RADAR_LADDER RADAR_MAGENTA ++# define RADAR_WATER RADAR_BLUE ++# define RADAR_TRAP RADAR_RED ++ ++ int c; ++ c = RADAR_BLACK; ++ if(tile < 290) ++ c = RADAR_MONSTER; ++ else if(tile < 345) ++ c = RADAR_HUMAN; ++ else if(tile < 345 + 394) ++ c = RADAR_OBJECT; ++ else if(tile < 345 + 394 + 1) ++ ; ++ else if(tile < 345 + 394 + 12) ++ c = RADAR_WALL; ++ else if(tile < 345 + 394 + 15) ++ c = RADAR_FLOOR; ++ else if(tile < 345 + 394 + 17) ++ c = RADAR_DOOR; ++ else if(tile < 345 + 394 + 20) ++ c = RADAR_FLOOR; ++ else if(tile < 345 + 394 + 24) ++ c = RADAR_LADDER; ++ else if(tile < 345 + 394 + 29) ++ c = RADAR_WATER; ++ else if(tile < 345 + 394 + 30) ++ c = RADAR_GRAY; ++ else if(tile < 345 + 394 + 31) ++ c = RADAR_ORANGE; ++ else if(tile < 345 + 394 + 35) ++ c = RADAR_ORANGE; ++ else if(tile < 345 + 394 + 38) ++ c = RADAR_CYAN; ++ else if(tile < 345 + 394 + 60) ++ c = RADAR_TRAP; ++ else if(tile < 345 + 394 + 121) ++ c = RADAR_YELLOW; ++ else ++ c = RADAR_WALL; ++ ++ XFillRectangle(dpy, radar_pixmap2, radar_gc[c], ++ cur_col * 4, row * 4, 4, 4); ++ } ++# endif /*RADAR*/ + #endif /*JP*/ + + if (glyph_is_pet(glyph) && iflags.hilite_pet) { +@@ -1493,6 +1704,19 @@ + map_info->square_width-1, + map_info->square_height-1); + } ++#ifdef RADAR ++ if(USE_RADAR){ ++ XCopyArea(dpy, radar_pixmap2, radar_pixmap, radar_gc_black, ++ 0, 0, RADAR_WIDTH, RADAR_HEIGHT, 0, 0); ++ check_sb(wp); ++ XDrawRectangle(dpy, radar_pixmap, radar_gc_white, ++ radar_x, radar_y, ++ radar_w, radar_h); ++ XCopyArea(dpy, radar_pixmap, radar_window, radar_gc_black, ++ 0, 0, RADAR_WIDTH, RADAR_HEIGHT, 0, 0); ++ XRaiseWindow(dpy, XtWindow(radar_popup)); ++ } ++#endif + } else { + struct text_map_info_t *text_map = map_info->mtype.text_map; + +@@ -1603,6 +1827,28 @@ + : input() \ + "; + ++#ifdef RADAR ++static char radar_translations[] = ++"#override\n\ ++ Left: scroll(4)\n\ ++ Right: scroll(6)\n\ ++ Up: scroll(8)\n\ ++ Down: scroll(2)\n\ ++ Escape: dismiss_radar()\n\ ++ : input()\ ++"; ++#endif ++ ++#ifdef RADAR ++void ++dismiss_radar(Widget w, XEvent*ev , String *s, Cardinal*n) ++{ ++ XtPopdown(radar_popup); ++ flags.radar = FALSE; ++ radar_is_popuped = FALSE; ++} ++#endif ++ + /* + * The map window creation routine. + */ +@@ -1619,6 +1865,33 @@ + Dimension rows, columns; + #if 0 + int screen_width, screen_height; ++#endif ++ ++#ifdef RADAR ++ num_args = 0; ++ XtSetArg(args[num_args], XtNwidth, RADAR_WIDTH); num_args++; ++ XtSetArg(args[num_args], XtNheight, RADAR_HEIGHT); num_args++; ++ ++ radar_popup = XtCreatePopupShell("radar", ++ /* ++ trainsientShellWidgetClass, ++ */ ++ topLevelShellWidgetClass, ++ toplevel, args, num_args); ++ ++ num_args = 0; ++ /* ++ XtSetArg(args[num_args], XtNsensitive, False); num_args++; ++ */ ++ XtSetArg(args[num_args], XtNlabel, ""); num_args++; ++ XtSetArg(args[num_args], XtNtranslations, ++ XtParseTranslationTable(radar_translations)); num_args++; ++ ++ radar = XtCreateManagedWidget("radar", ++ labelWidgetClass, ++ radar_popup, ++ args, ++ num_args); + #endif + + wp->type = NHW_MAP;