rnd-20041001-1-src
[rocksndiamonds.git] / src / libgame / system.h
index d1c41d2a91164a39378f07590767a0b548bf61c3..188b08119e9f7d044034ce338f9d63db53ae004e 100644 (file)
 #define DEFAULT_KEY_DOWN       KSYM_Down
 #if defined(PLATFORM_MACOSX)
 #define DEFAULT_KEY_SNAP       KSYM_Control_L
-#define DEFAULT_KEY_BOMB       KSYM_KP_Enter
+#define DEFAULT_KEY_DROP       KSYM_KP_Enter
 #else
-#define DEFAULT_KEY_SNAP       KSYM_Shift_L
-#define DEFAULT_KEY_BOMB       KSYM_Shift_R
+#define DEFAULT_KEY_SNAP       KSYM_Control_L
+#define DEFAULT_KEY_DROP       KSYM_Control_R
 #endif
 #define DEFAULT_KEY_OKAY       KSYM_Return
 #define DEFAULT_KEY_CANCEL     KSYM_Escape
                                 (x) == MV_RIGHT ? MV_BIT_RIGHT :       \
                                 (x) == MV_UP    ? MV_BIT_UP    : MV_BIT_DOWN)
 
+#define MV_DIR_OPPOSITE(x)     ((x) == MV_LEFT  ? MV_RIGHT :           \
+                                (x) == MV_RIGHT ? MV_LEFT  :           \
+                                (x) == MV_UP    ? MV_DOWN  :           \
+                                (x) == MV_DOWN  ? MV_UP    : MV_NO_MOVING)
+
 
 /* values for animation mode (frame order and direction) */
 #define ANIM_NONE              0
 #define REDRAW_FPS             (1 << 11)
 #define REDRAWTILES_THRESHOLD  (SCR_FIELDX * SCR_FIELDY / 2)
 
+#define IN_GFX_SCREEN(x, y)    (x >= gfx.sx && x < gfx.sx + gfx.sxsize && \
+                                y >= gfx.sy && y < gfx.sy + gfx.sysize)
+#define IN_GFX_DOOR(x, y)      (x >= gfx.dx && x < gfx.dx + gfx.dxsize && \
+                                y >= gfx.dy && y < gfx.dy + gfx.dysize)
+#define IN_GFX_VIDEO(x, y)     (x >= gfx.vx && x < gfx.vx + gfx.vxsize && \
+                                y >= gfx.vy && y < gfx.vy + gfx.vysize)
 
 /* values for mouse cursor */
 #define CURSOR_DEFAULT         0
 /* default name for unknown player names */
 #define ANONYMOUS_NAME         "anonymous"
 
+/* default for other unknown names */
+#define UNKNOWN_NAME           "unknown"
+
 /* default name for new levels */
 #define NAMELESS_LEVEL_NAME    "nameless level"
 
 #define LEVELSETUP_DIRECTORY   "levelsetup"
 #define SETUP_FILENAME         "setup.conf"
 #define LEVELSETUP_FILENAME    "levelsetup.conf"
+#define EDITORSETUP_FILENAME   "editorsetup.conf"
+#define HELPANIM_FILENAME      "helpanim.conf"
+#define HELPTEXT_FILENAME      "helptext.conf"
 #define LEVELINFO_FILENAME     "levelinfo.conf"
 #define GRAPHICSINFO_FILENAME  "graphicsinfo.conf"
 #define SOUNDSINFO_FILENAME    "soundsinfo.conf"
 #define LEVELSETUP_DIRECTORY   "lvlsetup"
 #define SETUP_FILENAME         "setup.cnf"
 #define LEVELSETUP_FILENAME    "lvlsetup.cnf"
+#define EDITORSETUP_FILENAME   "edsetup.cnf"
+#define HELPANIM_FILENAME      "helpanim.cnf"
+#define HELPTEXT_FILENAME      "helptext.cnf"
 #define LEVELINFO_FILENAME     "lvlinfo.cnf"
 #define GRAPHICSINFO_FILENAME  "gfxinfo.cnf"
 #define SOUNDSINFO_FILENAME    "sndinfo.cnf"
    PAGEX3: buffer for animations
 */
 
-#define DOOR_GFX_PAGESIZE      (gfx.dxsize)
+/* these values are hard-coded to be able to use them in initialization */
+#define DOOR_GFX_PAGE_WIDTH    100     /* should be set to "gfx.dxsize" */
+#define DOOR_GFX_PAGE_HEIGHT   280     /* should be set to "gfx.dysize" */
+
+#define DOOR_GFX_PAGESIZE      (DOOR_GFX_PAGE_WIDTH)
 #define DOOR_GFX_PAGEX1                (0 * DOOR_GFX_PAGESIZE)
 #define DOOR_GFX_PAGEX2                (1 * DOOR_GFX_PAGESIZE)
 #define DOOR_GFX_PAGEX3                (2 * DOOR_GFX_PAGESIZE)
 #define DOOR_GFX_PAGEX7                (6 * DOOR_GFX_PAGESIZE)
 #define DOOR_GFX_PAGEX8                (7 * DOOR_GFX_PAGESIZE)
 #define DOOR_GFX_PAGEY1                (0)
-#define DOOR_GFX_PAGEY2                (gfx.dysize)
+#define DOOR_GFX_PAGEY2                (DOOR_GFX_PAGE_HEIGHT)
 
 
 /* macros for version handling */
-#define VERSION_IDENT(x,y,z)   ((x) * 1000000 + (y) * 10000 + (z) * 100)
-#define RELEASE_IDENT(x,y,z,r) (VERSION_IDENT(x,y,z) + (r))
 #define VERSION_MAJOR(x)       ((x) / 1000000)
 #define VERSION_MINOR(x)       (((x) % 1000000) / 10000)
 #define VERSION_PATCH(x)       (((x) % 10000) / 100)
-#define VERSION_RELEASE(x)     ((x) % 100)
+#define VERSION_BUILD(x)       ((x) % 100)
+#define VERSION_IDENT(a,b,c,d) ((a) * 1000000 + (b) * 10000 + (c) * 100 + (d))
 
 
 /* macros for parent/child process identification */
@@ -507,18 +530,13 @@ struct SetupJoystickInfo
 
   int xleft, xmiddle, xright;
   int yupper, ymiddle, ylower;
-  int snap;
-  int bomb;
+  int snap, drop;
 };
 
 struct SetupKeyboardInfo
 {
-  Key left;
-  Key right;
-  Key up;
-  Key down;
-  Key snap;
-  Key bomb;
+  Key left, right, up, down;
+  Key snap, drop;
 };
 
 struct SetupInputInfo
@@ -532,6 +550,7 @@ struct SetupEditorInfo
 {
   boolean el_boulderdash;
   boolean el_emerald_mine;
+  boolean el_emerald_mine_club;
   boolean el_more;
   boolean el_sokoban;
   boolean el_supaplex;
@@ -540,6 +559,7 @@ struct SetupEditorInfo
   boolean el_chars;
   boolean el_custom;
   boolean el_custom_more;
+  boolean el_user_defined;
 
   boolean el_headlines;
 };
@@ -607,7 +627,7 @@ struct TreeInfo
 
   /* fields for "type == TREE_TYPE_LEVEL_DIR" */
 
-  char *filename;      /* tree info sub-directory basename (may be ".") */
+  char *subdir;                /* tree info sub-directory basename (may be ".") */
   char *fullpath;      /* complete path relative to tree base directory */
   char *basepath;      /* absolute base path of tree base directory */
   char *identifier;    /* identifier string for configuration files */
@@ -623,15 +643,21 @@ struct TreeInfo
   char *sounds_path;   /* path to optional custom sounds set (level only) */
   char *music_path;    /* path to optional custom music set (level only) */
 
+  char *level_filename;        /* filename of level file (for packed level file) */
+  char *level_filetype;        /* type of levels in level directory or level file */
+
   int levels;          /* number of levels in level series */
   int first_level;     /* first level number (to allow start with 0 or 1) */
   int last_level;      /* last level number (automatically calculated) */
   int sort_priority;   /* sort levels by 'sort_priority' and then by name */
 
+  boolean latest_engine;/* force level set to use the latest game engine */
+
   boolean level_group; /* directory contains more level series directories */
   boolean parent_link; /* entry links back to parent directory */
   boolean user_defined;        /* user defined levels are stored in home directory */
   boolean readonly;    /* readonly levels can not be changed with editor */
+  boolean handicap;    /* level set has no handicap when set to "false" */
 
   int color;           /* color to use on selection screen for this level */
   char *class_desc;    /* description of level series class */
@@ -666,6 +692,12 @@ struct ValueTextInfo
 };
 
 struct ConfigInfo
+{
+  char *token;
+  char *value;
+};
+
+struct ConfigTypeInfo
 {
   char *token;
   char *value;
@@ -725,7 +757,7 @@ struct ArtworkListInfo
   struct FileInfo *dynamic_file_list;          /* dynamic artwrk file array */
 
   int num_suffix_list_entries;
-  struct ConfigInfo *suffix_list;              /* parameter suffixes array */
+  struct ConfigTypeInfo *suffix_list;          /* parameter suffixes array */
 
   int num_base_prefixes;
   int num_ext1_suffixes;
@@ -842,7 +874,7 @@ Bitmap *LoadCustomImage(char *);
 void ReloadCustomImage(Bitmap *, char *);
 
 Bitmap *ZoomBitmap(Bitmap *, int, int);
-void CreateBitmapWithSmallBitmaps(Bitmap *);
+void CreateBitmapWithSmallBitmaps(Bitmap *, int);
 
 void SetMouseCursor(int);