]> granicus.if.org Git - nethack/commitdiff
wincap field updates
authornethack.allison <nethack.allison>
Mon, 4 Feb 2002 12:50:46 +0000 (12:50 +0000)
committernethack.allison <nethack.allison>
Mon, 4 Feb 2002 12:50:46 +0000 (12:50 +0000)
As Warwick suggested, instead of having fixed tile
sizes as options, allow specification of the size
explicitly.

Also, at Yitzhak's suggestion, provide a hook for
overriding the port's tile file name.  That name,
and the contents of the file it points to, will
be window-port specific of course.

doc/window.doc
include/flag.h
include/winprocs.h
src/options.c
src/save.c

index 7fedb40359abbac99313b7a185274085fc07ce87..989732f8caf1487a32463fee156cbdf3902112f1 100644 (file)
@@ -440,9 +440,9 @@ to support:
   |  preload_tiles    | WC_PRELOAD_TILES   | wc_preload_tiles  |boolean |
   |  scroll_margin    | WC_SCROLL_MARGIN   | wc_scroll_margin  |int     |
   |  tiled_map        | WC_TILED_MAP       | wc_tiled_map      |boolean |
-  |  tiles_16x16      | WC_TILES_16x16     | wc_tiles_16x16    |boolean |
-  |  tiles_32x32      | WC_TILES_32x32     | wc_tiles_32x32    |boolean |
-  |  tiles_8x16       | WC_TILES_8x16      | wc_tiles_8x16     |boolean |
+  |  tile_width       | WC_TILE_WIDTH      | wc_tile_width     |int     |
+  |  tile_height      | WC_TILE_HEIGHT     | wc_tile_height    |int     |
+  |  tile_file        | WC_TILE_FILE       | wc_tile_file      |char *  |
   |  use_inverse      | WC_INVERSE         | wc_inverse        |boolean |
   |  vary_msgcount    | WC_VARY_MSGCOUNT   | wc_vary_msgcount  |int     |
   +-------------------+--------------------+-------------------+--------+
@@ -471,9 +471,12 @@ preload_tiles      -- port should preload tiles into memory.
 scroll_margin  -- port should scroll the display when the hero or cursor
                   is this number of cells away from the edge of the window.
 tiled_map      -- port should display a tiled map if it can.
-tiles_16x16    -- port should display 16x16 tiles if it can.
-tiles_32x32    -- port should display 32x32 tiles if it can.
-tiles_8x16     -- port should display 8x16 tiles if it can.
+tile_width     -- port should display tiles with this width or round to closest
+                  if it can.
+tile_height    -- port should display tiles with this height or round to closest
+                  if it can.
+tile_file      -- open this alterntive tile file. The file name is likely to be
+                  window-port or platform specific.
 use_inverse    -- port should display inverse when NetHack asks for it.
 vary_msgcount  -- port should display this number of messages at a time in
                   the message window.
index 526932d5a4fc58b2c26eadd96caa03e8e483ff91..c50c3cdd983a792e1adc64b4a275eca9ea7d117c 100644 (file)
@@ -209,16 +209,16 @@ struct instance_flags {
 /*
  * Window capability support.
  */
-       boolean wc_color;               /* use color graphics */
-       boolean wc_hilite_pet;          /* hilight pets */
-       boolean wc_ascii_map;           /* show map using traditional ascii */
-       boolean wc_tiled_map;           /* show map using tiles */
-       boolean wc_preload_tiles;       /* preload tiles into memory */
-       boolean wc_tiles_8x16;          /* use 8x16  tiles */
-       boolean wc_tiles_16x16;         /* use 16x16 tiles */
-       boolean wc_tiles_32x32;         /* use 32x32 tiles */
+       boolean wc_color;               /* use color graphics                  */
+       boolean wc_hilite_pet;          /* hilight pets                        */
+       boolean wc_ascii_map;           /* show map using traditional ascii    */
+       boolean wc_tiled_map;           /* show map using tiles                */
+       boolean wc_preload_tiles;       /* preload tiles into memory           */
+       int     wc_tile_width;          /* tile width                          */
+       int     wc_tile_height;         /* tile height                         */
+       char    *wc_tile_file;          /* name of tile file;overrides default */
        boolean wc_inverse;             /* use inverse video for some things   */
-       int     wc_align_status;        /*  status win at top|bot|right|left    */
+       int     wc_align_status;        /*  status win at top|bot|right|left   */
        int     wc_align_message;       /* message win at top|bot|right|left   */
        int     wc_vary_msgcount;       /* show more old messages at a time    */
        char    *wc_font_map;           /* points to font name for the map win */
index c26f68a15ae3be4fac796f24890a28c2af4ffa73..d3dccae59b333bf5b0978ce83c2024f6a5f2e7f4 100644 (file)
@@ -139,9 +139,9 @@ extern NEARDATA struct window_procs windowprocs;
 #define WC_ASCII_MAP    0x04L          /* 03 supports an ascii map                  */
 #define WC_TILED_MAP    0x08L          /* 04 supports a tiled map                   */
 #define WC_PRELOAD_TILES 0x10L         /* 05 supports pre-loading tiles             */
-#define WC_TILES_8x16   0x20L          /* 06 supports 8x16 tiles                    */
-#define WC_TILES_16x16  0x40L          /* 07 supports 16x16 tiles                   */
-#define WC_TILES_32x32  0x80L          /* 08 supports 32x32 tiles                   */
+#define WC_TILE_WIDTH   0x20L          /* 06 prefer this width of tile              */
+#define WC_TILE_HEIGHT  0x40L          /* 07 prefer this height of tile             */
+#define WC_TILE_FILE    0x80L          /* 08 alternative tile file name             */
 #define WC_INVERSE      0x100L         /* 09 Port supports inverse video            */
 #define WC_ALIGN_MESSAGE 0x200L                /* 10 supports message alignmt top|b|l|r     */
 #define WC_ALIGN_STATUS         0x400L         /* 11 supports status alignmt top|b|l|r      */
@@ -168,6 +168,7 @@ extern NEARDATA struct window_procs windowprocs;
 #define ALIGN_TOP      3
 #define ALIGN_BOTTOM   4
 
+/* map_mode settings - deprecated */
 #define MAP_MODE_TILES         0
 #define MAP_MODE_ASCII4x6      1
 #define MAP_MODE_ASCII6x8      2
index 078fff6d60315323a2e27bf88f2314f8186996c1..d5817f47377ef034a25d08328697dee4ec4b9721 100644 (file)
@@ -1,4 +1,4 @@
-/*     SCCS Id: @(#)options.c  3.3     2002/02/02      */
+/*     SCCS Id: @(#)options.c  3.3     2002/02/04      */
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
@@ -171,9 +171,6 @@ static struct Bool_Opt
        {"standout", &flags.standout, FALSE, SET_IN_GAME},
        {"time", &flags.time, FALSE, SET_IN_GAME},
        {"tiled_map",     &iflags.wc_tiled_map, FALSE, DISP_IN_GAME},   /*WC*/
-       {"tiles_8x16",    &iflags.wc_tiles_8x16, FALSE, DISP_IN_GAME},  /*WC*/
-       {"tiles_16x16",   &iflags.wc_tiles_16x16, FALSE, DISP_IN_GAME}, /*WC*/
-       {"tiles_32x32",   &iflags.wc_tiles_32x32, FALSE, DISP_IN_GAME}, /*WC*/
 #ifdef TIMED_DELAY
        {"timed_delay", &flags.nap, TRUE, SET_IN_GAME},
 #else
@@ -289,6 +286,9 @@ static struct Comp_Opt
 #endif
        { "suppress_alert", "suppress alerts about version-specific features",
                                                8, SET_IN_GAME },
+       { "tile_width", "width of tiles", 20, DISP_IN_GAME},    /*WC*/
+       { "tile_height", "height of tiles", 20, DISP_IN_GAME},  /*WC*/
+       { "tile_file", "name of tile file", 70, DISP_IN_GAME},  /*WC*/
        { "traps",    "the symbols to use in drawing traps",
                                                MAXTCHARS+1, SET_IN_FILE },
 #ifdef MAC
@@ -1879,6 +1879,36 @@ goodfruit:
                } else if (negated) bad_negation(fullname, TRUE);
                return;
        }
+       /* WINCAP
+        * tile_width:nn */
+       fullname = "tile_width";
+       if (match_optname(opts, fullname, sizeof("tile_width")-1, TRUE)) {
+               op = string_for_env_opt(fullname, opts, negated);
+               if ((negated && !op) || (!negated && op)) {
+                       iflags.wc_tile_width = negated ? 0 : atoi(op);
+               } else if (negated) bad_negation(fullname, TRUE);
+               return;
+       }
+       /* WINCAP
+        * tile_file:name */
+       fullname = "tile_file";
+       if (match_optname(opts, fullname, sizeof("tile_file")-1, TRUE)) {
+               if ((op = string_for_env_opt(fullname, opts, FALSE)) != 0) {
+                       if (iflags.wc_tile_file) free(iflags.wc_tile_file);
+                       iflags.wc_tile_file = (char *)alloc(strlen(op) + 1);
+                       Strcpy(iflags.wc_tile_file, op);
+               }
+       }
+       /* WINCAP
+        * tile_height:nn */
+       fullname = "tile_height";
+       if (match_optname(opts, fullname, sizeof("tile_height")-1, TRUE)) {
+               op = string_for_env_opt(fullname, opts, negated);
+               if ((negated && !op) || (!negated && op)) {
+                       iflags.wc_tile_height = negated ? 0 : atoi(op);
+               } else if (negated) bad_negation(fullname, TRUE);
+               return;
+       }
        /* WINCAP
         * vary_msgcount:nn */
        fullname = "vary_msgcount";
@@ -2627,7 +2657,14 @@ char *buf;
                        FEATURE_NOTICE_VER_MAJ,
                        FEATURE_NOTICE_VER_MIN,
                        FEATURE_NOTICE_VER_PATCH);
-       } else if (!strcmp(optname, "traps"))
+       }
+       else if (!strcmp(optname, "tile_file"))
+               Sprintf(buf, "%s", iflags.wc_tile_file ? iflags.wc_tile_file : none);
+       else if (!strcmp(optname, "tile_height"))
+               Sprintf(buf, "%d", iflags.wc_tile_width);
+       else if (!strcmp(optname, "tile_width"))
+               Sprintf(buf, "%d", iflags.wc_tile_width);
+       else if (!strcmp(optname, "traps"))
                Sprintf(buf, "%s", to_be_done);
        else if (!strcmp(optname, "vary_msgcount"))
                Sprintf(buf, "%d", iflags.wc_vary_msgcount);
@@ -2979,9 +3016,9 @@ struct wc_Opt wc_options[] = {
        {"popup_dialog", WC_POPUP_DIALOG},
        {"preload_tiles", WC_PRELOAD_TILES},
        {"tiled_map", WC_TILED_MAP},
-       {"tiles_16x16", WC_TILES_16x16},
-       {"tiles_32x32", WC_TILES_32x32},
-       {"tiles_8x16", WC_TILES_8x16},
+       {"tile_file", WC_TILE_FILE},
+       {"tile_width", WC_TILE_WIDTH},
+       {"tile_height", WC_TILE_HEIGHT},
        {"use_inverse", WC_INVERSE},
        {"align_message", WC_ALIGN_MESSAGE},
        {"align_status", WC_ALIGN_STATUS},
@@ -3037,6 +3074,7 @@ int wtype;
 char *fontname;
 {
        char **fn = (char **)0;
+       if (!fontname) return;
        switch(wtype) {
            case NHW_MAP:
                        fn = &iflags.wc_font_map;
@@ -3053,6 +3091,8 @@ char *fontname;
            case NHW_STATUS:
                        fn = &iflags.wc_font_status;
                        break;
+           default:
+                       return;
        }
        if (fn) {
                if (*fn) free(*fn);
index a2bd8de287b394af96422e31c72063d3a4c39134..2162f09489e4312eeb4b4105c4b5cd8f1e608a7b 100644 (file)
@@ -992,11 +992,12 @@ freedynamicdata()
        free_dungeons();
 
        /* some pointers in iflags */
-       if (iflags.wc_font_map) free(iflags.wc_font_map);       
-       if (iflags.wc_font_message) free(iflags.wc_font_message);       
-       if (iflags.wc_font_text) free(iflags.wc_font_text);     
-       if (iflags.wc_font_menu) free(iflags.wc_font_menu);     
-       if (iflags.wc_font_status) free(iflags.wc_font_status); 
+       if (iflags.wc_font_map) free(iflags.wc_font_map);
+       if (iflags.wc_font_message) free(iflags.wc_font_message);
+       if (iflags.wc_font_text) free(iflags.wc_font_text);
+       if (iflags.wc_font_menu) free(iflags.wc_font_menu);
+       if (iflags.wc_font_status) free(iflags.wc_font_status);
+       if (iflags.wc_tile_file) free(iflags.wc_tile_file);
 
 #endif /* FREE_ALL_MEMORY */
        return;