rnd-20030113-1-src
[rocksndiamonds.git] / src / main.h
index b24799a61fcceadf7081f4b6aa17367e64780cfe..93100c54dccdb800c35aee7ae161a5c4b653fe62 100644 (file)
 #include "conf_gfx.h"
 #include "conf_snd.h"
 
+#define IMG_UNDEFINED          (-1)
 #define IMG_EMPTY              IMG_EMPTY_SPACE
 #define IMG_SP_EMPTY           IMG_SP_EMPTY_SPACE
 #define IMG_CHAR_START         IMG_CHAR_SPACE
-#define IMG_GENERIC_START      IMG_GENERIC_0
+#define IMG_CUSTOM_START       IMG_CUSTOM_1
 
 #define WIN_XSIZE      672
 #define WIN_YSIZE      560
@@ -57,7 +58,7 @@
 #define IN_SCR_FIELD(x,y) ((x)>=BX1 && (x)<=BX2 && (y)>=BY1 &&(y)<=BY2)
 #define IN_LEV_FIELD(x,y) ((x)>=0 && (x)<lev_fieldx && (y)>=0 &&(y)<lev_fieldy)
 
-/* values for 'Elementeigenschaften1' */
+/* values for 'Properties1' */
 #define EP_BIT_AMOEBALIVE      (1 << 0)
 #define EP_BIT_AMOEBOID                (1 << 1)
 #define EP_BIT_SCHLUESSEL      (1 << 2)
 #define EP_BIT_OVER_PLAYER     (1 << 30)
 #define EP_BIT_ACTIVE_BOMB     (1 << 31)
 
-/* values for 'Elementeigenschaften2' */
+/* values for 'Properties2' */
 #define EP_BIT_BELT            (1 << 0)
 #define EP_BIT_BELT_ACTIVE     (1 << 1)
 #define EP_BIT_BELT_SWITCH     (1 << 2)
 #define EP_BIT_TUBE            (1 << 3)
 #define EP_BIT_EM_SLIPPERY_WALL        (1 << 4)
 
-#define IS_AMOEBALIVE(e)       (Elementeigenschaften1[e] & EP_BIT_AMOEBALIVE)
-#define IS_AMOEBOID(e)         (Elementeigenschaften1[e] & EP_BIT_AMOEBOID)
-#define IS_SCHLUESSEL(e)       (Elementeigenschaften1[e] & EP_BIT_SCHLUESSEL)
-#define IS_PFORTE(e)           (Elementeigenschaften1[e] & EP_BIT_PFORTE)
-#define IS_SOLID(e)            (Elementeigenschaften1[e] & EP_BIT_SOLID)
-#define IS_MASSIVE(e)          (Elementeigenschaften1[e] & EP_BIT_MASSIVE)
-#define IS_SLIPPERY(e)         (Elementeigenschaften1[e] & EP_BIT_SLIPPERY)
-#define IS_ENEMY(e)            (Elementeigenschaften1[e] & EP_BIT_ENEMY)
-#define IS_MAUER(e)            (Elementeigenschaften1[e] & EP_BIT_MAUER)
-#define CAN_FALL(e)            (Elementeigenschaften1[e] & EP_BIT_CAN_FALL)
-#define CAN_SMASH(e)           (Elementeigenschaften1[e] & EP_BIT_CAN_SMASH)
-#define CAN_CHANGE(e)          (Elementeigenschaften1[e] & EP_BIT_CAN_CHANGE)
-#define CAN_MOVE(e)            (Elementeigenschaften1[e] & EP_BIT_CAN_MOVE)
-#define COULD_MOVE(e)          (Elementeigenschaften1[e] & EP_BIT_COULD_MOVE)
-#define DONT_TOUCH(e)          (Elementeigenschaften1[e] & EP_BIT_DONT_TOUCH)
-#define DONT_GO_TO(e)          (Elementeigenschaften1[e] & EP_BIT_DONT_GO_TO)
-#define IS_MAMPF2(e)           (Elementeigenschaften1[e] & EP_BIT_MAMPF2)
-#define IS_CHAR(e)             (Elementeigenschaften1[e] & EP_BIT_CHAR)
-#define IS_BD_ELEMENT(e)       (Elementeigenschaften1[e] & EP_BIT_BD_ELEMENT)
-#define IS_SB_ELEMENT(e)       (Elementeigenschaften1[e] & EP_BIT_SB_ELEMENT)
-#define IS_GEM(e)              (Elementeigenschaften1[e] & EP_BIT_GEM)
-#define IS_INACTIVE(e)         (Elementeigenschaften1[e] & EP_BIT_INACTIVE)
-#define IS_EXPLOSIVE(e)                (Elementeigenschaften1[e] & EP_BIT_EXPLOSIVE)
-#define IS_MAMPF3(e)           (Elementeigenschaften1[e] & EP_BIT_MAMPF3)
-#define IS_PUSHABLE(e)         (Elementeigenschaften1[e] & EP_BIT_PUSHABLE)
-#define ELEM_IS_PLAYER(e)      (Elementeigenschaften1[e] & EP_BIT_PLAYER)
-#define HAS_CONTENT(e)         (Elementeigenschaften1[e] & EP_BIT_HAS_CONTENT)
-#define IS_EATABLE(e)          (Elementeigenschaften1[e] & EP_BIT_EATABLE)
-#define IS_SP_ELEMENT(e)       (Elementeigenschaften1[e] & EP_BIT_SP_ELEMENT)
-#define IS_QUICK_GATE(e)       (Elementeigenschaften1[e] & EP_BIT_QUICK_GATE)
-#define IS_OVER_PLAYER(e)      (Elementeigenschaften1[e] & EP_BIT_OVER_PLAYER)
-#define IS_ACTIVE_BOMB(e)      (Elementeigenschaften1[e] & EP_BIT_ACTIVE_BOMB)
-
-#define IS_BELT(e)             (Elementeigenschaften2[e] & EP_BIT_BELT)
-#define IS_BELT_ACTIVE(e)      (Elementeigenschaften2[e] & EP_BIT_BELT_ACTIVE)
-#define IS_BELT_SWITCH(e)      (Elementeigenschaften2[e] & EP_BIT_BELT_SWITCH)
-#define IS_TUBE(e)             (Elementeigenschaften2[e] & EP_BIT_TUBE)
-#define IS_EM_SLIPPERY_WALL(e) (Elementeigenschaften2[e] & EP_BIT_EM_SLIPPERY_WALL)
+#define IS_AMOEBALIVE(e)       (Properties1[e] & EP_BIT_AMOEBALIVE)
+#define IS_AMOEBOID(e)         (Properties1[e] & EP_BIT_AMOEBOID)
+#define IS_SCHLUESSEL(e)       (Properties1[e] & EP_BIT_SCHLUESSEL)
+#define IS_PFORTE(e)           (Properties1[e] & EP_BIT_PFORTE)
+#define IS_SOLID(e)            (Properties1[e] & EP_BIT_SOLID)
+#define IS_MASSIVE(e)          (Properties1[e] & EP_BIT_MASSIVE)
+#define IS_SLIPPERY(e)         (Properties1[e] & EP_BIT_SLIPPERY)
+#define IS_ENEMY(e)            (Properties1[e] & EP_BIT_ENEMY)
+#define IS_MAUER(e)            (Properties1[e] & EP_BIT_MAUER)
+#define CAN_FALL(e)            (Properties1[e] & EP_BIT_CAN_FALL)
+#define CAN_SMASH(e)           (Properties1[e] & EP_BIT_CAN_SMASH)
+#define CAN_CHANGE(e)          (Properties1[e] & EP_BIT_CAN_CHANGE)
+#define CAN_MOVE(e)            (Properties1[e] & EP_BIT_CAN_MOVE)
+#define COULD_MOVE(e)          (Properties1[e] & EP_BIT_COULD_MOVE)
+#define DONT_TOUCH(e)          (Properties1[e] & EP_BIT_DONT_TOUCH)
+#define DONT_GO_TO(e)          (Properties1[e] & EP_BIT_DONT_GO_TO)
+#define IS_MAMPF2(e)           (Properties1[e] & EP_BIT_MAMPF2)
+#define IS_CHAR(e)             (Properties1[e] & EP_BIT_CHAR)
+#define IS_BD_ELEMENT(e)       (Properties1[e] & EP_BIT_BD_ELEMENT)
+#define IS_SB_ELEMENT(e)       (Properties1[e] & EP_BIT_SB_ELEMENT)
+#define IS_GEM(e)              (Properties1[e] & EP_BIT_GEM)
+#define IS_INACTIVE(e)         (Properties1[e] & EP_BIT_INACTIVE)
+#define IS_EXPLOSIVE(e)                (Properties1[e] & EP_BIT_EXPLOSIVE)
+#define IS_MAMPF3(e)           (Properties1[e] & EP_BIT_MAMPF3)
+#define IS_PUSHABLE(e)         (Properties1[e] & EP_BIT_PUSHABLE)
+#define ELEM_IS_PLAYER(e)      (Properties1[e] & EP_BIT_PLAYER)
+#define HAS_CONTENT(e)         (Properties1[e] & EP_BIT_HAS_CONTENT)
+#define IS_EATABLE(e)          (Properties1[e] & EP_BIT_EATABLE)
+#define IS_SP_ELEMENT(e)       (Properties1[e] & EP_BIT_SP_ELEMENT)
+#define IS_QUICK_GATE(e)       (Properties1[e] & EP_BIT_QUICK_GATE)
+#define IS_OVER_PLAYER(e)      (Properties1[e] & EP_BIT_OVER_PLAYER)
+#define IS_ACTIVE_BOMB(e)      (Properties1[e] & EP_BIT_ACTIVE_BOMB)
+
+#define IS_BELT(e)             (Properties2[e] & EP_BIT_BELT)
+#define IS_BELT_ACTIVE(e)      (Properties2[e] & EP_BIT_BELT_ACTIVE)
+#define IS_BELT_SWITCH(e)      (Properties2[e] & EP_BIT_BELT_SWITCH)
+#define IS_TUBE(e)             (Properties2[e] & EP_BIT_TUBE)
+#define IS_EM_SLIPPERY_WALL(e) (Properties2[e] & EP_BIT_EM_SLIPPERY_WALL)
 
 #define IS_PLAYER(x,y)         (ELEM_IS_PLAYER(StorePlayer[x][y]))
 
 #define MAX_LEVEL_AUTHOR_LEN   32
 #define MAX_TAPELEN            (1000 * 50)     /* max. time * framerate */
 #define MAX_SCORE_ENTRIES      100
+#if 0
 #define MAX_ELEMENTS           700             /* 500 static + 200 runtime */
 #define MAX_GRAPHICS           1536            /* see below: NUM_TILES */
+#endif
 #define MAX_NUM_AMOEBA         100
 
 /* values for elements with content */
 #define VXSIZE                 DXSIZE
 #define VYSIZE                 100
 #define EXSIZE                 DXSIZE
-#define EYSIZE                 (VXSIZE + 44)
+#define EYSIZE                 (VYSIZE + 44)
 #define FULL_SXSIZE            (2 + SXSIZE + 2)
 #define FULL_SYSIZE            (2 + SYSIZE + 2)
 #define MICROLEV_XSIZE         ((STD_LEV_FIELDX + 2) * MICRO_TILEX)
 **       0 <= element < xxx: real elements, stored in level file
 **      xxx <= element < yyy: flag elements, only used at runtime
 */
-/* "real" level elements */
+/* "real" level file elements */
+#define EL_UNDEFINED                   -1
+
 #define EL_EMPTY_SPACE                 0
 #define EL_EMPTY                       EL_EMPTY_SPACE
 #define EL_SAND                                1
 #define EL_UNUSED_358                  358
 #define EL_UNUSED_359                  359
 
-#define EL_GENERIC_START               360
-#define EL_GENERIC_0                   (EL_GENERIC_START + 0)
-#define EL_GENERIC_31                  (EL_GENERIC_START + 31)
-#define EL_GENERIC_END                 (EL_GENERIC_START + 31)
+#define EL_CUSTOM_START                        360
+#define EL_CUSTOM_1                    (EL_CUSTOM_START + 0)
+#define EL_CUSTOM_128                  (EL_CUSTOM_START + 127)
+#define EL_CUSTOM_END                  (EL_CUSTOM_START + 127)
 
-#define NUM_FILE_ELEMENTS              392
+#define NUM_FILE_ELEMENTS              488
 
 
 /* "real" (and therefore drawable) runtime elements */
 #define EL_FIRST_RUNTIME_REAL          NUM_FILE_ELEMENTS
 
-#define EL_MAGIC_WALL_ACTIVE           (EL_FIRST_RUNTIME_REAL + 0)
-#define EL_BD_MAGIC_WALL_ACTIVE                (EL_FIRST_RUNTIME_REAL + 1)
-#define EL_MAGIC_WALL_FULL             (EL_FIRST_RUNTIME_REAL + 2)
-#define EL_BD_MAGIC_WALL_FULL          (EL_FIRST_RUNTIME_REAL + 3)
-#define EL_MAGIC_WALL_DEAD             (EL_FIRST_RUNTIME_REAL + 4)
-#define EL_BD_MAGIC_WALL_DEAD          (EL_FIRST_RUNTIME_REAL + 5)
-#define EL_EXIT_OPENING                        (EL_FIRST_RUNTIME_REAL + 6)
-#define EL_SP_TERMINAL_ACTIVE          (EL_FIRST_RUNTIME_REAL + 7)
-#define EL_SP_BUGGY_BASE_ACTIVE                (EL_FIRST_RUNTIME_REAL + 8)
-#define EL_EM_KEY1                     (EL_FIRST_RUNTIME_REAL + 9)
-#define EL_EM_KEY2                     (EL_FIRST_RUNTIME_REAL + 10)
-#define EL_EM_KEY3                     (EL_FIRST_RUNTIME_REAL + 11)
-#define EL_EM_KEY4                     (EL_FIRST_RUNTIME_REAL + 12)
-#define EL_DYNABOMB_PLAYER1_ACTIVE     (EL_FIRST_RUNTIME_REAL + 13)
-#define EL_DYNABOMB_PLAYER2_ACTIVE     (EL_FIRST_RUNTIME_REAL + 14)
-#define EL_DYNABOMB_PLAYER3_ACTIVE     (EL_FIRST_RUNTIME_REAL + 15)
-#define EL_DYNABOMB_PLAYER4_ACTIVE     (EL_FIRST_RUNTIME_REAL + 16)
-#define EL_SWITCHGATE_OPENING          (EL_FIRST_RUNTIME_REAL + 17)
-#define EL_SWITCHGATE_CLOSING          (EL_FIRST_RUNTIME_REAL + 18)
-#define EL_TIMEGATE_OPENING            (EL_FIRST_RUNTIME_REAL + 19)
-#define EL_TIMEGATE_CLOSING            (EL_FIRST_RUNTIME_REAL + 20)
-#define EL_PEARL_BREAKING              (EL_FIRST_RUNTIME_REAL + 21)
-#define EL_TRAP_ACTIVE                 (EL_FIRST_RUNTIME_REAL + 22)
-#define EL_SP_MURPHY_CLONE             (EL_FIRST_RUNTIME_REAL + 23)
-#define EL_QUICKSAND_EMPTYING          (EL_FIRST_RUNTIME_REAL + 24)
-#define EL_MAGIC_WALL_EMPTYING         (EL_FIRST_RUNTIME_REAL + 25)
-#define EL_BD_MAGIC_WALL_EMPTYING      (EL_FIRST_RUNTIME_REAL + 26)
-#define EL_AMOEBA_DRIPPING             (EL_FIRST_RUNTIME_REAL + 27)
-#define EL_SP_EXIT_OPEN                        (EL_FIRST_RUNTIME_REAL + 28)
-#define EL_INVISIBLE_STEELWALL_ACTIVE  (EL_FIRST_RUNTIME_REAL + 29)
-#define EL_INVISIBLE_SAND_ACTIVE       (EL_FIRST_RUNTIME_REAL + 30)
-#define EL_INVISIBLE_WALL_ACTIVE       (EL_FIRST_RUNTIME_REAL + 31)
-#define EL_CONVEYOR_BELT1_LEFT_ACTIVE  (EL_FIRST_RUNTIME_REAL + 32)
-#define EL_CONVEYOR_BELT1_MIDDLE_ACTIVE        (EL_FIRST_RUNTIME_REAL + 33)
-#define EL_CONVEYOR_BELT1_RIGHT_ACTIVE (EL_FIRST_RUNTIME_REAL + 34)
-#define EL_CONVEYOR_BELT2_LEFT_ACTIVE  (EL_FIRST_RUNTIME_REAL + 35)
-#define EL_CONVEYOR_BELT2_MIDDLE_ACTIVE        (EL_FIRST_RUNTIME_REAL + 36)
-#define EL_CONVEYOR_BELT2_RIGHT_ACTIVE (EL_FIRST_RUNTIME_REAL + 37)
-#define EL_CONVEYOR_BELT3_LEFT_ACTIVE  (EL_FIRST_RUNTIME_REAL + 38)
-#define EL_CONVEYOR_BELT3_MIDDLE_ACTIVE        (EL_FIRST_RUNTIME_REAL + 39)
-#define EL_CONVEYOR_BELT3_RIGHT_ACTIVE (EL_FIRST_RUNTIME_REAL + 40)
-#define EL_CONVEYOR_BELT4_LEFT_ACTIVE  (EL_FIRST_RUNTIME_REAL + 41)
-#define EL_CONVEYOR_BELT4_MIDDLE_ACTIVE        (EL_FIRST_RUNTIME_REAL + 42)
-#define EL_CONVEYOR_BELT4_RIGHT_ACTIVE (EL_FIRST_RUNTIME_REAL + 43)
+#define EL_EM_KEY1                     (EL_FIRST_RUNTIME_REAL + 0)
+#define EL_EM_KEY2                     (EL_FIRST_RUNTIME_REAL + 1)
+#define EL_EM_KEY3                     (EL_FIRST_RUNTIME_REAL + 2)
+#define EL_EM_KEY4                     (EL_FIRST_RUNTIME_REAL + 3)
+#define EL_DYNABOMB_PLAYER1_ACTIVE     (EL_FIRST_RUNTIME_REAL + 4)
+#define EL_DYNABOMB_PLAYER2_ACTIVE     (EL_FIRST_RUNTIME_REAL + 5)
+#define EL_DYNABOMB_PLAYER3_ACTIVE     (EL_FIRST_RUNTIME_REAL + 6)
+#define EL_DYNABOMB_PLAYER4_ACTIVE     (EL_FIRST_RUNTIME_REAL + 7)
+#define EL_SWITCHGATE_OPENING          (EL_FIRST_RUNTIME_REAL + 8)
+#define EL_SWITCHGATE_CLOSING          (EL_FIRST_RUNTIME_REAL + 9)
+#define EL_TIMEGATE_OPENING            (EL_FIRST_RUNTIME_REAL + 10)
+#define EL_TIMEGATE_CLOSING            (EL_FIRST_RUNTIME_REAL + 11)
+#define EL_PEARL_BREAKING              (EL_FIRST_RUNTIME_REAL + 12)
+#define EL_TRAP_ACTIVE                 (EL_FIRST_RUNTIME_REAL + 13)
+#define EL_INVISIBLE_STEELWALL_ACTIVE  (EL_FIRST_RUNTIME_REAL + 14)
+#define EL_INVISIBLE_WALL_ACTIVE       (EL_FIRST_RUNTIME_REAL + 15)
+#define EL_INVISIBLE_SAND_ACTIVE       (EL_FIRST_RUNTIME_REAL + 16)
+#define EL_CONVEYOR_BELT1_LEFT_ACTIVE  (EL_FIRST_RUNTIME_REAL + 17)
+#define EL_CONVEYOR_BELT1_MIDDLE_ACTIVE        (EL_FIRST_RUNTIME_REAL + 18)
+#define EL_CONVEYOR_BELT1_RIGHT_ACTIVE (EL_FIRST_RUNTIME_REAL + 19)
+#define EL_CONVEYOR_BELT2_LEFT_ACTIVE  (EL_FIRST_RUNTIME_REAL + 20)
+#define EL_CONVEYOR_BELT2_MIDDLE_ACTIVE        (EL_FIRST_RUNTIME_REAL + 21)
+#define EL_CONVEYOR_BELT2_RIGHT_ACTIVE (EL_FIRST_RUNTIME_REAL + 22)
+#define EL_CONVEYOR_BELT3_LEFT_ACTIVE  (EL_FIRST_RUNTIME_REAL + 23)
+#define EL_CONVEYOR_BELT3_MIDDLE_ACTIVE        (EL_FIRST_RUNTIME_REAL + 24)
+#define EL_CONVEYOR_BELT3_RIGHT_ACTIVE (EL_FIRST_RUNTIME_REAL + 25)
+#define EL_CONVEYOR_BELT4_LEFT_ACTIVE  (EL_FIRST_RUNTIME_REAL + 26)
+#define EL_CONVEYOR_BELT4_MIDDLE_ACTIVE        (EL_FIRST_RUNTIME_REAL + 27)
+#define EL_CONVEYOR_BELT4_RIGHT_ACTIVE (EL_FIRST_RUNTIME_REAL + 28)
+#define EL_EXIT_OPENING                        (EL_FIRST_RUNTIME_REAL + 29)
+#define EL_SP_EXIT_OPEN                        (EL_FIRST_RUNTIME_REAL + 30)
+#define EL_SP_TERMINAL_ACTIVE          (EL_FIRST_RUNTIME_REAL + 31)
+#define EL_SP_BUGGY_BASE_ACTIVATING    (EL_FIRST_RUNTIME_REAL + 32)
+#define EL_SP_BUGGY_BASE_ACTIVE                (EL_FIRST_RUNTIME_REAL + 33)
+#define EL_SP_MURPHY_CLONE             (EL_FIRST_RUNTIME_REAL + 34)
+#define EL_AMOEBA_DRIPPING             (EL_FIRST_RUNTIME_REAL + 35)
+#define EL_QUICKSAND_EMPTYING          (EL_FIRST_RUNTIME_REAL + 36)
+#define EL_MAGIC_WALL_ACTIVE           (EL_FIRST_RUNTIME_REAL + 37)
+#define EL_BD_MAGIC_WALL_ACTIVE                (EL_FIRST_RUNTIME_REAL + 38)
+#define EL_MAGIC_WALL_FULL             (EL_FIRST_RUNTIME_REAL + 39)
+#define EL_BD_MAGIC_WALL_FULL          (EL_FIRST_RUNTIME_REAL + 40)
+#define EL_MAGIC_WALL_EMPTYING         (EL_FIRST_RUNTIME_REAL + 41)
+#define EL_BD_MAGIC_WALL_EMPTYING      (EL_FIRST_RUNTIME_REAL + 42)
+#define EL_MAGIC_WALL_DEAD             (EL_FIRST_RUNTIME_REAL + 43)
+#define EL_BD_MAGIC_WALL_DEAD          (EL_FIRST_RUNTIME_REAL + 44)
 
 /* "unreal" (and therefore not drawable) runtime elements */
-#define EL_FIRST_RUNTIME_UNREAL                (EL_FIRST_RUNTIME_REAL + 44)
+#define EL_FIRST_RUNTIME_UNREAL                (EL_FIRST_RUNTIME_REAL + 45)
 
 #define EL_BLOCKED                     (EL_FIRST_RUNTIME_UNREAL + 0)
 #define EL_EXPLOSION                   (EL_FIRST_RUNTIME_UNREAL + 1)
 #define GFX_START_ROCKSMORE            1280
 #define GFX_END_ROCKSMORE              1535
 
+#if 0
 #define NUM_TILES                      1536    /* see above: MAX_GRAPHICS */
+#endif
 
 /* graphics from "RocksScreen" */
 /* Zeile 0 (0) */
 #define GFX_ARG_YPOS                           1
 #define GFX_ARG_OFFSET                         2
 #define GFX_ARG_VERTICAL                       3
-#define GFX_ARG_FRAMES                         4
-#define GFX_ARG_START_FRAME                    5
-#define GFX_ARG_DELAY                          6
-#define GFX_ARG_MODE_LOOP                      7
-#define GFX_ARG_MODE_LINEAR                    8
-#define GFX_ARG_MODE_PINGPONG                  9
-#define GFX_ARG_MODE_PINGPONG2                 10
-#define GFX_ARG_MODE_REVERSE                   11
-#define GFX_ARG_GLOBAL_SYNC                    12
+#define GFX_ARG_XOFFSET                                4
+#define GFX_ARG_YOFFSET                                5
+#define GFX_ARG_FRAMES                         6
+#define GFX_ARG_START_FRAME                    7
+#define GFX_ARG_DELAY                          8
+#define GFX_ARG_MODE_LOOP                      9
+#define GFX_ARG_MODE_LINEAR                    10
+#define GFX_ARG_MODE_PINGPONG                  11
+#define GFX_ARG_MODE_PINGPONG2                 12
+#define GFX_ARG_MODE_RANDOM                    13
+#define GFX_ARG_MODE_REVERSE                   14
+#define GFX_ARG_GLOBAL_SYNC                    15
 
-#define NUM_GFX_ARGS                           13
+#define NUM_GFX_ARGS                           16
+
+#define GFX_ARG_UNDEFINED                      "-1000000"
+#define GFX_ARG_UNDEFINED_VALUE                        (atoi(GFX_ARG_UNDEFINED))
 
 
 /* values for sound configuration suffixes */
 #define SETUP                  8
 
 #define PROGRAM_VERSION_MAJOR  2
-#define PROGRAM_VERSION_MINOR  1
-#define PROGRAM_VERSION_PATCH  2
-#define PROGRAM_VERSION_STRING "2.1.2"
+#define PROGRAM_VERSION_MINOR  2
+#define PROGRAM_VERSION_PATCH  0
+#define PROGRAM_VERSION_STRING "2.2.0rc3"
 
 #define PROGRAM_TITLE_STRING   "Rocks'n'Diamonds"
 #define PROGRAM_AUTHOR_STRING  "Holger Schemel"
-#define PROGRAM_RIGHTS_STRING  "Copyright ^1995-2002 by"
+#define PROGRAM_RIGHTS_STRING  "Copyright ^1995-2003 by"
 #define PROGRAM_DOS_PORT_STRING        "DOS port done by Guido Schulz"
 #define PROGRAM_IDENT_STRING   PROGRAM_VERSION_STRING " " TARGET_STRING
 #define WINDOW_TITLE_STRING    PROGRAM_TITLE_STRING " " PROGRAM_IDENT_STRING
@@ -1554,6 +1568,8 @@ struct LevelInfo
   boolean double_speed;
   boolean gravity;
   boolean em_slippery_gems;    /* EM style "gems slip from wall" behaviour */
+
+  boolean no_level_file;
 };
 
 struct TapeInfo
@@ -1573,6 +1589,8 @@ struct TapeInfo
   boolean recording, playing, pausing;
   boolean fast_forward;
   boolean index_search;
+  boolean auto_play;
+  boolean auto_play_level_solved;
   boolean quick_resume;
   boolean single_step;
   boolean changed;
@@ -1609,6 +1627,9 @@ struct GameInfo
 
 struct GlobalInfo
 {
+  char *autoplay_leveldir;
+  int autoplay_level_nr;
+
   float frames_per_second;
   boolean fps_slowdown;
   int fps_slowdown_factor;
@@ -1642,10 +1663,15 @@ struct NewGraphicInfo
   int anim_delay;              /* important: delay of 1 means "no delay"! */
   int anim_mode;
   boolean anim_global_sync;
+
+#if defined(TARGET_X11_NATIVE_PERFORMANCE_WORKAROUND)
+  Pixmap clip_mask;            /* single-graphic-only clip mask for X11 */
+  GC clip_gc;                  /* single-graphic-only clip gc for X11 */
+#endif
 };
 
-extern GC              tile_clip_gc;
 #if 0
+extern GC              tile_clip_gc;
 extern Bitmap         *pix[];
 #endif
 extern Bitmap         *bitmap_db_field, *bitmap_db_door;
@@ -1670,15 +1696,18 @@ extern short            MovDelay[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern short           Store[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern short           Store2[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern short           StorePlayer[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
-extern short           Frame[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
-extern short           GfxAction[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern boolean         Stop[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern short           JustStopped[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern short           AmoebaNr[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern short           AmoebaCnt[MAX_NUM_AMOEBA], AmoebaCnt2[MAX_NUM_AMOEBA];
+extern short           ExplodePhase[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern short           ExplodeField[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
-extern unsigned long   Elementeigenschaften1[MAX_ELEMENTS];
-extern unsigned long   Elementeigenschaften2[MAX_ELEMENTS];
+
+extern unsigned long   Properties1[MAX_NUM_ELEMENTS];
+extern unsigned long   Properties2[MAX_NUM_ELEMENTS];
+
+extern int             GfxFrame[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
+extern short           GfxAction[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 
 extern int             lev_fieldx,lev_fieldy, scroll_x,scroll_y;
 
@@ -1708,7 +1737,9 @@ extern struct TapeInfo            tape;
 extern struct GameInfo         game;
 extern struct GlobalInfo       global;
 extern struct ElementInfo      element_info[];
+#if 0
 extern struct GraphicInfo      graphic_info[];
+#endif
 extern struct NewGraphicInfo   new_graphic_info[];
 extern struct ConfigInfo       image_config[], sound_config[];
 extern struct ConfigInfo       image_config_suffix[], sound_config_suffix[];