fixed name of element 'beamer' to 'teleporter'
[rocksndiamonds.git] / src / main.h
index a88e12b8b3ea1c4f4773be6ae487255f6a44d7d3..d1ca675ade4ee756a308854482c68e99617f5355 100644 (file)
@@ -1,15 +1,13 @@
-/***********************************************************
-* Rocks'n'Diamonds -- McDuffin Strikes Back!               *
-*----------------------------------------------------------*
-* (c) 1995-2006 Artsoft Entertainment                      *
-*               Holger Schemel                             *
-*               Detmolder Strasse 189                      *
-*               33604 Bielefeld                            *
-*               Germany                                    *
-*               e-mail: info@artsoft.org                   *
-*----------------------------------------------------------*
-* main.h                                                   *
-***********************************************************/
+// ============================================================================
+// Rocks'n'Diamonds - McDuffin Strikes Back!
+// ----------------------------------------------------------------------------
+// (c) 1995-2014 by Artsoft Entertainment
+//                         Holger Schemel
+//                 info@artsoft.org
+//                 http://www.artsoft.org/
+// ----------------------------------------------------------------------------
+// main.h
+// ============================================================================
 
 #ifndef MAIN_H
 #define MAIN_H
 
 #include "libgame/libgame.h"
 #include "game_em/game_em.h"
+#include "game_sp/game_sp.h"
+#include "game_mm/game_mm.h"
 
 #include "conf_gfx.h"  /* include auto-generated data structure definitions */
 #include "conf_snd.h"  /* include auto-generated data structure definitions */
 #include "conf_mus.h"  /* include auto-generated data structure definitions */
 
+
 #define IMG_UNDEFINED                  (-1)
 #define IMG_EMPTY                      IMG_EMPTY_SPACE
-#define IMG_SP_EMPTY                   IMG_SP_EMPTY_SPACE
+#define IMG_SP_EMPTY                   IMG_EMPTY_SPACE
+#define IMG_SP_EMPTY_SPACE             IMG_EMPTY_SPACE
 #define IMG_EXPLOSION                  IMG_DEFAULT_EXPLODING
 #define IMG_CHAR_START                 IMG_CHAR_SPACE
+#define IMG_STEEL_CHAR_START           IMG_STEEL_CHAR_SPACE
 #define IMG_CUSTOM_START               IMG_CUSTOM_1
 
 #define SND_UNDEFINED                  (-1)
 #define MUS_UNDEFINED                  (-1)
 
-#define WIN_XSIZE                      672
-#define WIN_YSIZE                      560
+#define WIN_XSIZE_DEFAULT              672
+#define WIN_YSIZE_DEFAULT              560
+
+#define SCR_FIELDX_DEFAULT             17
+#define SCR_FIELDY_DEFAULT             17
 
-#define DEFAULT_FULLSCREEN_MODE                "800x600"
+#define SXSIZE_DEFAULT                 (SCR_FIELDX_DEFAULT * TILEX)
+#define SYSIZE_DEFAULT                 (SCR_FIELDY_DEFAULT * TILEY)
 
-#define SCR_FIELDX                     17
-#define SCR_FIELDY                     17
 #define MAX_BUF_XSIZE                  (SCR_FIELDX + 2)
 #define MAX_BUF_YSIZE                  (SCR_FIELDY + 2)
 #define MIN_LEV_FIELDX                 3
 #define MAX_LEV_FIELDX                 MAX_PLAYFIELD_WIDTH
 #define MAX_LEV_FIELDY                 MAX_PLAYFIELD_HEIGHT
 
+#define MIN_SCROLL_DELAY               0
+#define STD_SCROLL_DELAY               3
+#define MAX_SCROLL_DELAY               8
+
 #define SCREENX(a)                     ((a) - scroll_x)
 #define SCREENY(a)                     ((a) - scroll_y)
 #define LEVELX(a)                      ((a) + scroll_x)
 #define LEVELY(a)                      ((a) + scroll_y)
-#define IN_VIS_FIELD(x,y) ((x)>=0 && (x)<SCR_FIELDX && (y)>=0 &&(y)<SCR_FIELDY)
-#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)
+
+#define IN_FIELD(x, y, xsize, ysize)   ((x) >= 0 && (x) < (xsize) &&      \
+                                        (y) >= 0 && (y) < (ysize))
+#define IN_FIELD_MINMAX(x, y, xmin, ymin, xmax, ymax)                     \
+                                       ((x) >= (xmin) && (x) <= (xmax) && \
+                                        (y) >= (ymin) && (y) <= (ymax))
+
+#define IN_PIX_FIELD(x, y)             IN_FIELD(x, y, SXSIZE, SYSIZE)
+#define IN_VIS_FIELD(x, y)             IN_FIELD(x, y, SCR_FIELDX, SCR_FIELDY)
+#define IN_LEV_FIELD(x, y)             IN_FIELD(x, y, lev_fieldx, lev_fieldy)
+#define IN_SCR_FIELD(x, y)             IN_FIELD_MINMAX(x,y, BX1,BY1, BX2,BY2)
 
 /* values for configurable properties (custom elem's only, else pre-defined) */
+/* (never change these values, as they are stored in level files!) */
 #define EP_DIGGABLE                    0
 #define EP_COLLECTIBLE_ONLY            1
 #define EP_DONT_RUN_INTO               2
 #define EP_THROWABLE                   28
 #define EP_CAN_EXPLODE                 29
 #define EP_GRAVITY_REACHABLE           30
+#define EP_DONT_GET_HIT_BY             31
 
 /* values for pre-defined properties */
+/* (from here on, values can be changed by inserting new values) */
 #define EP_PLAYER                      32
 #define EP_CAN_PASS_MAGIC_WALL         33
-#define EP_SWITCHABLE                  34
-#define EP_BD_ELEMENT                  35
-#define EP_SP_ELEMENT                  36
-#define EP_SB_ELEMENT                  37
-#define EP_GEM                         38
-#define EP_FOOD_DARK_YAMYAM            39
-#define EP_FOOD_PENGUIN                        40
-#define EP_FOOD_PIG                    41
-#define EP_HISTORIC_WALL               42
-#define EP_HISTORIC_SOLID              43
-#define EP_CLASSIC_ENEMY               44
-#define EP_BELT                                45
-#define EP_BELT_ACTIVE                 46
-#define EP_BELT_SWITCH                 47
-#define EP_TUBE                                48
-#define EP_KEYGATE                     49
-#define EP_AMOEBOID                    50
-#define EP_AMOEBALIVE                  51
-#define EP_HAS_EDITOR_CONTENT          52
-#define EP_CAN_TURN_EACH_MOVE          53
-#define EP_CAN_GROW                    54
-#define EP_ACTIVE_BOMB                 55
-#define EP_INACTIVE                    56
+#define EP_CAN_PASS_DC_MAGIC_WALL      34
+#define EP_SWITCHABLE                  35
+#define EP_BD_ELEMENT                  36
+#define EP_SP_ELEMENT                  37
+#define EP_SB_ELEMENT                  38
+#define EP_GEM                         39
+#define EP_FOOD_DARK_YAMYAM            40
+#define EP_FOOD_PENGUIN                        41
+#define EP_FOOD_PIG                    42
+#define EP_HISTORIC_WALL               43
+#define EP_HISTORIC_SOLID              44
+#define EP_CLASSIC_ENEMY               45
+#define EP_BELT                                46
+#define EP_BELT_ACTIVE                 47
+#define EP_BELT_SWITCH                 48
+#define EP_TUBE                                49
+#define EP_ACID_POOL                   50
+#define EP_KEYGATE                     51
+#define EP_AMOEBOID                    52
+#define EP_AMOEBALIVE                  53
+#define EP_HAS_EDITOR_CONTENT          54
+#define EP_CAN_TURN_EACH_MOVE          55
+#define EP_CAN_GROW                    56
+#define EP_ACTIVE_BOMB                 57
+#define EP_INACTIVE                    58
 
 /* values for special configurable properties (depending on level settings) */
-#define EP_EM_SLIPPERY_WALL            57
+#define EP_EM_SLIPPERY_WALL            59
 
 /* values for special graphics properties (no effect on game engine) */
-#define EP_GFX_CRUMBLED                        58
+#define EP_GFX_CRUMBLED                        60
 
 /* values for derived properties (determined from properties above) */
-#define EP_ACCESSIBLE_OVER             59
-#define EP_ACCESSIBLE_INSIDE           60
-#define EP_ACCESSIBLE_UNDER            61
-#define EP_WALKABLE                    62
-#define EP_PASSABLE                    63
-#define EP_ACCESSIBLE                  64
-#define EP_COLLECTIBLE                 65
-#define EP_SNAPPABLE                   66
-#define EP_WALL                                67
-#define EP_SOLID_FOR_PUSHING           68
-#define EP_DRAGONFIRE_PROOF            69
-#define EP_EXPLOSION_PROOF             70
-#define EP_CAN_SMASH                   71
-#define EP_EXPLODES_3X3_OLD            72
-#define EP_CAN_EXPLODE_BY_FIRE         73
-#define EP_CAN_EXPLODE_SMASHED         74
-#define EP_CAN_EXPLODE_IMPACT          75
-#define EP_SP_PORT                     76
-#define EP_CAN_EXPLODE_BY_DRAGONFIRE   77
-#define EP_CAN_EXPLODE_BY_EXPLOSION    78
-#define EP_COULD_MOVE_INTO_ACID                79
-#define EP_MAYBE_DONT_COLLIDE_WITH     80
-#define EP_CAN_BE_CLONED_BY_ANDROID    81
+#define EP_ACCESSIBLE_OVER             61
+#define EP_ACCESSIBLE_INSIDE           62
+#define EP_ACCESSIBLE_UNDER            63
+#define EP_WALKABLE                    64
+#define EP_PASSABLE                    65
+#define EP_ACCESSIBLE                  66
+#define EP_COLLECTIBLE                 67
+#define EP_SNAPPABLE                   68
+#define EP_WALL                                69
+#define EP_SOLID_FOR_PUSHING           70
+#define EP_DRAGONFIRE_PROOF            71
+#define EP_EXPLOSION_PROOF             72
+#define EP_CAN_SMASH                   73
+#define EP_EXPLODES_3X3_OLD            74
+#define EP_CAN_EXPLODE_BY_FIRE         75
+#define EP_CAN_EXPLODE_SMASHED         76
+#define EP_CAN_EXPLODE_IMPACT          77
+#define EP_SP_PORT                     78
+#define EP_CAN_EXPLODE_BY_DRAGONFIRE   79
+#define EP_CAN_EXPLODE_BY_EXPLOSION    80
+#define EP_COULD_MOVE_INTO_ACID                81
+#define EP_MAYBE_DONT_COLLIDE_WITH     82
+#define EP_CAN_BE_CLONED_BY_ANDROID    83
 
 /* values for internal purpose only (level editor) */
-#define EP_WALK_TO_OBJECT              82
-#define EP_DEADLY                      83
-#define EP_EDITOR_CASCADE              84
-#define EP_EDITOR_CASCADE_ACTIVE       85
-#define EP_EDITOR_CASCADE_INACTIVE     86
+#define EP_WALK_TO_OBJECT              84
+#define EP_DEADLY                      85
+#define EP_EDITOR_CASCADE              86
+#define EP_EDITOR_CASCADE_ACTIVE       87
+#define EP_EDITOR_CASCADE_INACTIVE     88
 
 /* values for internal purpose only (game engine) */
-#define EP_HAS_ACTION                  87
-#define EP_CAN_CHANGE_OR_HAS_ACTION    88
+#define EP_HAS_ACTION                  89
+#define EP_CAN_CHANGE_OR_HAS_ACTION    90
 
 /* values for internal purpose only (other) */
-#define EP_OBSOLETE                    89
+#define EP_OBSOLETE                    91
 
-#define NUM_ELEMENT_PROPERTIES         90
+#define NUM_ELEMENT_PROPERTIES         92
 
 #define NUM_EP_BITFIELDS               ((NUM_ELEMENT_PROPERTIES + 31) / 32)
 #define EP_BITFIELD_BASE_NR            0
                                         PLAYER_BITS_3 | \
                                         PLAYER_BITS_4)
 #define PLAYER_BITS_TRIGGER            (1 << 4)
+#define PLAYER_BITS_ACTION             (1 << 5)
 
 /* values for move directions (bits 0 - 3: basic move directions) */
 #define MV_BIT_PREVIOUS                        4
 #define CP_WHEN_REMOVABLE              4
 #define CP_WHEN_WALKABLE               5
 
-/* values for change actions for custom elements */
+/* values for change actions for custom elements (stored in level file) */
 #define CA_NO_ACTION                   0
 #define CA_EXIT_PLAYER                 1
 #define CA_KILL_PLAYER                 2
 #define CA_SET_CE_SCORE                        15
 #define CA_SET_CE_VALUE                        16
 #define CA_SET_ENGINE_SCAN_MODE                17
+#define CA_SET_PLAYER_INVENTORY                18
+#define CA_SET_CE_ARTWORK              19
+#define CA_SET_LEVEL_RANDOM_SEED       20
 
 #define CA_HEADLINE_LEVEL_ACTIONS      250
 #define CA_HEADLINE_PLAYER_ACTIONS     251
 #define CA_ARG_PLAYER_4                        (CA_ARG_PLAYER + PLAYER_BITS_4)
 #define CA_ARG_PLAYER_ANY              (CA_ARG_PLAYER + PLAYER_BITS_ANY)
 #define CA_ARG_PLAYER_TRIGGER          (CA_ARG_PLAYER + PLAYER_BITS_TRIGGER)
+#define CA_ARG_PLAYER_ACTION           (CA_ARG_PLAYER + PLAYER_BITS_ACTION)
 #define CA_ARG_PLAYER_HEADLINE         (CA_ARG_PLAYER + 999)
 #define CA_ARG_NUMBER                  11000
 #define CA_ARG_NUMBER_MIN              (CA_ARG_NUMBER + 0)
 #define CA_ARG_ELEMENT_RESET           (CA_ARG_ELEMENT + 0)
 #define CA_ARG_ELEMENT_TARGET          (CA_ARG_ELEMENT + 1)
 #define CA_ARG_ELEMENT_TRIGGER         (CA_ARG_ELEMENT + 2)
+#define CA_ARG_ELEMENT_ACTION          (CA_ARG_ELEMENT + 7)
 #define CA_ARG_ELEMENT_HEADLINE                (CA_ARG_ELEMENT + 997)
 #define CA_ARG_ELEMENT_CV_TARGET       (CA_ARG_ELEMENT_TARGET)
 #define CA_ARG_ELEMENT_CV_TRIGGER      (CA_ARG_ELEMENT_TRIGGER)
+#define CA_ARG_ELEMENT_CV_ACTION       (CA_ARG_ELEMENT_ACTION)
 #define CA_ARG_ELEMENT_CV_HEADLINE     (CA_ARG_ELEMENT_HEADLINE)
 #define CA_ARG_ELEMENT_NR_TARGET       (CA_ARG_ELEMENT + 3)
 #define CA_ARG_ELEMENT_NR_TRIGGER      (CA_ARG_ELEMENT + 4)
+#define CA_ARG_ELEMENT_NR_ACTION       (CA_ARG_ELEMENT + 8)
 #define CA_ARG_ELEMENT_NR_HEADLINE     (CA_ARG_ELEMENT + 998)
 #define CA_ARG_ELEMENT_CS_TARGET       (CA_ARG_ELEMENT + 5)
 #define CA_ARG_ELEMENT_CS_TRIGGER      (CA_ARG_ELEMENT + 6)
+#define CA_ARG_ELEMENT_CS_ACTION       (CA_ARG_ELEMENT + 9)
 #define CA_ARG_ELEMENT_CS_HEADLINE     (CA_ARG_ELEMENT + 999)
 #define CA_ARG_SPEED                   13000
 #define CA_ARG_SPEED_NOT_MOVING                (CA_ARG_SPEED + STEPSIZE_NOT_MOVING)
 #define CA_ARG_SCAN_MODE_NORMAL                (CA_ARG_SCAN_MODE + MV_NORMAL)
 #define CA_ARG_SCAN_MODE_REVERSE       (CA_ARG_SCAN_MODE + MV_REVERSE)
 #define CA_ARG_SCAN_MODE_HEADLINE      (CA_ARG_SCAN_MODE + 999)
+#define CA_ARG_INVENTORY               18000
+#define CA_ARG_INVENTORY_RESET         (CA_ARG_INVENTORY + 0)
+#define CA_ARG_INVENTORY_RM_TARGET     (CA_ARG_INVENTORY + 1)
+#define CA_ARG_INVENTORY_RM_TRIGGER    (CA_ARG_INVENTORY + 2)
+#define CA_ARG_INVENTORY_RM_ACTION     (CA_ARG_INVENTORY + 3)
+#define CA_ARG_INVENTORY_RM_FIRST      (CA_ARG_INVENTORY + 4)
+#define CA_ARG_INVENTORY_RM_LAST       (CA_ARG_INVENTORY + 5)
+#define CA_ARG_INVENTORY_RM_ALL                (CA_ARG_INVENTORY + 6)
+#define CA_ARG_INVENTORY_HEADLINE      (CA_ARG_INVENTORY + 998)
+#define CA_ARG_INVENTORY_RM_HEADLINE   (CA_ARG_INVENTORY + 999)
 #define CA_ARG_UNDEFINED               65535
 
 /* values for custom move patterns (bits 0 - 3: basic move directions) */
 #define IS_THROWABLE(e)                HAS_PROPERTY(e, EP_THROWABLE)
 #define CAN_EXPLODE(e)         HAS_PROPERTY(e, EP_CAN_EXPLODE)
 #define IS_GRAVITY_REACHABLE(e)        HAS_PROPERTY(e, EP_GRAVITY_REACHABLE)
+#define DONT_GET_HIT_BY(e)     HAS_PROPERTY(e, EP_DONT_GET_HIT_BY)
 
 /* macros for special configurable properties */
 #define IS_EM_SLIPPERY_WALL(e) HAS_PROPERTY(e, EP_EM_SLIPPERY_WALL)
 /* macros for pre-defined properties */
 #define ELEM_IS_PLAYER(e)      HAS_PROPERTY(e, EP_PLAYER)
 #define CAN_PASS_MAGIC_WALL(e) HAS_PROPERTY(e, EP_CAN_PASS_MAGIC_WALL)
+#define CAN_PASS_DC_MAGIC_WALL(e) HAS_PROPERTY(e, EP_CAN_PASS_DC_MAGIC_WALL)
 #define IS_SWITCHABLE(e)       HAS_PROPERTY(e, EP_SWITCHABLE)
 #define IS_BD_ELEMENT(e)       HAS_PROPERTY(e, EP_BD_ELEMENT)
 #define IS_SP_ELEMENT(e)       HAS_PROPERTY(e, EP_SP_ELEMENT)
 #define IS_BELT_ACTIVE(e)      HAS_PROPERTY(e, EP_BELT_ACTIVE)
 #define IS_BELT_SWITCH(e)      HAS_PROPERTY(e, EP_BELT_SWITCH)
 #define IS_TUBE(e)             HAS_PROPERTY(e, EP_TUBE)
+#define IS_ACID_POOL(e)                HAS_PROPERTY(e, EP_ACID_POOL)
 #define IS_KEYGATE(e)          HAS_PROPERTY(e, EP_KEYGATE)
 #define IS_AMOEBOID(e)         HAS_PROPERTY(e, EP_AMOEBOID)
 #define IS_AMOEBALIVE(e)       HAS_PROPERTY(e, EP_AMOEBALIVE)
 #define IS_OBSOLETE(e)         HAS_PROPERTY(e, EP_OBSOLETE)
 
 /* special macros used in game engine */
+#define IS_FILE_ELEMENT(e)     ((e) >= 0 &&                            \
+                                (e) <= NUM_FILE_ELEMENTS)
+
+#define IS_DRAWABLE_ELEMENT(e) ((e) >= 0 &&                            \
+                                (e) <= NUM_DRAWABLE_ELEMENTS)
+
+#define IS_RUNTIME_ELEMENT(e)  ((e) >= 0 &&                            \
+                                (e) <= NUM_RUNTIME_ELEMENTS)
+
+#define IS_VALID_ELEMENT(e)    ((e) >= 0 &&                            \
+                                (e) <= MAX_NUM_ELEMENTS)
+
 #define IS_CUSTOM_ELEMENT(e)   ((e) >= EL_CUSTOM_START &&              \
                                 (e) <= EL_CUSTOM_END)
 
 #define IS_INTERNAL_ELEMENT(e) ((e) >= EL_INTERNAL_START &&            \
                                 (e) <= EL_INTERNAL_END)
 
+#define IS_MM_ELEMENT(e)       ((e) >= EL_MM_START &&                  \
+                                (e) <= EL_MM_END)
+
+#define IS_DF_ELEMENT(e)       ((e) >= EL_DF_START &&                  \
+                                (e) <= EL_DF_END)
+
+#define IS_MM_MCDUFFIN(e)      ((e) >= EL_MM_MCDUFFIN_START &&         \
+                                (e) <= EL_MM_MCDUFFIN_END)
+
+#define IS_DF_LASER(e)         ((e) >= EL_DF_LASER_START &&            \
+                                (e) <= EL_DF_LASER_END)
+
+#define IS_MM_WALL(e)          (((e) >= EL_MM_WALL_START &&            \
+                                 (e) <= EL_MM_WALL_END) ||             \
+                                ((e) >= EL_DF_WALL_START &&            \
+                                 (e) <= EL_DF_WALL_END))
+
+#define IS_DF_WALL(e)          ((e) >= EL_DF_WALL_START &&             \
+                                (e) <= EL_DF_WALL_END)
+
+#define IS_MM_WALL_EDITOR(e)   ((e) == EL_MM_STEEL_WALL ||             \
+                                (e) == EL_MM_WOODEN_WALL ||            \
+                                (e) == EL_MM_ICE_WALL ||               \
+                                (e) == EL_MM_AMOEBA_WALL ||            \
+                                (e) == EL_DF_STEEL_WALL ||             \
+                                (e) == EL_DF_WOODEN_WALL)
+
 #define IS_ENVELOPE(e)         ((e) >= EL_ENVELOPE_1 &&                \
                                 (e) <= EL_ENVELOPE_4)
 
+#define IS_BALLOON_ELEMENT(e)  ((e) == EL_BALLOON ||                   \
+                                (e) == EL_BALLOON_SWITCH_LEFT ||       \
+                                (e) == EL_BALLOON_SWITCH_RIGHT ||      \
+                                (e) == EL_BALLOON_SWITCH_UP ||         \
+                                (e) == EL_BALLOON_SWITCH_DOWN ||       \
+                                (e) == EL_BALLOON_SWITCH_ANY ||        \
+                                (e) == EL_BALLOON_SWITCH_NONE)
+
 #define IS_RND_KEY(e)          ((e) >= EL_KEY_1 &&                     \
                                 (e) <= EL_KEY_4)
 #define IS_EM_KEY(e)           ((e) >= EL_EM_KEY_1 &&                  \
 #define EM_KEY_NR(e)           ((e) - EL_EM_KEY_1)
 #define EMC_KEY_NR(e)          ((e) - EL_EMC_KEY_5 + 4)
 #define KEY_NR(e)              (IS_RND_KEY(e) ? RND_KEY_NR(e) :        \
-                                IS_EM_KEY(e) ?  EM_KEY_NR(e) :         \
+                                IS_EM_KEY(e)  ? EM_KEY_NR(e)  :        \
                                 IS_EMC_KEY(e) ? EMC_KEY_NR(e) : 0)
 
 #define IS_RND_GATE(e)         ((e) >= EL_GATE_1 &&                    \
                                 (e) <= EL_EM_GATE_4)
 #define IS_EMC_GATE(e)         ((e) >= EL_EMC_GATE_5 &&                \
                                 (e) <= EL_EMC_GATE_8)
+#define IS_DC_GATE(e)          ((e) == EL_DC_GATE_WHITE)
 #define IS_GATE(e)             (IS_RND_GATE(e) ||                      \
                                 IS_EM_GATE(e) ||                       \
-                                IS_EMC_GATE(e))
+                                IS_EMC_GATE(e) ||                      \
+                                IS_DC_GATE(e))
 #define RND_GATE_NR(e)         ((e) - EL_GATE_1)
 #define EM_GATE_NR(e)          ((e) - EL_EM_GATE_1)
 #define EMC_GATE_NR(e)         ((e) - EL_EMC_GATE_5 + 4)
                                 (e) <= EL_EMC_GATE_8_GRAY)
 #define IS_EMC_GATE_GRAY_ACTIVE(e) ((e) >= EL_EMC_GATE_5_GRAY_ACTIVE &&        \
                                 (e) <= EL_EMC_GATE_8_GRAY_ACTIVE)
+#define IS_DC_GATE_GRAY(e)     ((e) == EL_DC_GATE_WHITE_GRAY)
+#define IS_DC_GATE_GRAY_ACTIVE(e) ((e) == EL_DC_GATE_WHITE_GRAY_ACTIVE)
+
 #define IS_GATE_GRAY(e)                (IS_RND_GATE_GRAY(e) ||                 \
                                 IS_EM_GATE_GRAY(e) ||                  \
-                                IS_EMC_GATE_GRAY(e))
+                                IS_EMC_GATE_GRAY(e) ||                 \
+                                IS_DC_GATE_GRAY(e))
 #define IS_GATE_GRAY_ACTIVE(e) (IS_RND_GATE_GRAY_ACTIVE(e) ||          \
                                 IS_EM_GATE_GRAY_ACTIVE(e) ||           \
-                                IS_EMC_GATE_GRAY_ACTIVE(e))
+                                IS_EMC_GATE_GRAY_ACTIVE(e) ||          \
+                                IS_DC_GATE_GRAY_ACTIVE(e))
 #define RND_GATE_GRAY_NR(e)    ((e) - EL_GATE_1_GRAY)
 #define RND_GATE_GRAY_ACTIVE_NR(e) ((e) - EL_GATE_1_GRAY_ACTIVE)
 #define EM_GATE_GRAY_NR(e)     ((e) - EL_EM_GATE_1_GRAY)
                                 IS_EM_GATE_GRAY(e) ?  EM_GATE_GRAY_NR(e) :   \
                                 IS_EMC_GATE_GRAY(e) ? EMC_GATE_GRAY_NR(e) : 0)
 
-#define GFX_ELEMENT(e)         (element_info[e].use_gfx_element ?      \
-                                element_info[e].gfx_element : e)
+#define IS_ACID_POOL_OR_ACID(e)        (IS_ACID_POOL(e) || (e) == EL_ACID)
+
+#define IS_EMC_PILLAR(e)       ((e) >= EL_EMC_WALL_1 &&                \
+                                (e) <= EL_EMC_WALL_3)
+#define IS_SP_CHIP(e)          ((e) == EL_SP_CHIP_SINGLE ||            \
+                                (e) == EL_SP_CHIP_LEFT ||              \
+                                (e) == EL_SP_CHIP_RIGHT ||             \
+                                (e) == EL_SP_CHIP_TOP ||               \
+                                (e) == EL_SP_CHIP_BOTTOM)
+#define IS_SP_HARDWARE_BASE(e) ((e) == EL_SP_HARDWARE_BASE_1 ||        \
+                                (e) == EL_SP_HARDWARE_BASE_2 ||        \
+                                (e) == EL_SP_HARDWARE_BASE_3 ||        \
+                                (e) == EL_SP_HARDWARE_BASE_4 ||        \
+                                (e) == EL_SP_HARDWARE_BASE_5 ||        \
+                                (e) == EL_SP_HARDWARE_BASE_6)
+
+#define IS_DC_STEELWALL_2(e)   ((e) >= EL_DC_STEELWALL_2_LEFT &&       \
+                                (e) <= EL_DC_STEELWALL_2_SINGLE)
+
+#define MM_WALL_BASE(e)                ((e) & 0xfff0)
+#define MM_WALL_BITS(e)                ((e) & 0x000f)
+
+#define GFX_ELEMENT(e)         (element_info[e].gfx_element)
 
 /* !!! CHECK THIS !!! */
 #if 1
                                 (e) == EL_EMERALD_RED    ? EL_DIAMOND :    \
                                 (e) == EL_EMERALD_PURPLE ? EL_DIAMOND :    \
                                 EL_ROCK)
-#define EL_CHANGED2(e)         ((e) == EL_ROCK           ? EL_BD_DIAMOND : \
+#define EL_CHANGED_BD(e)       ((e) == EL_ROCK           ? EL_BD_DIAMOND : \
                                 (e) == EL_BD_ROCK        ? EL_BD_DIAMOND : \
                                 EL_BD_ROCK)
+#define EL_CHANGED_DC(e)       ((e) == EL_ROCK           ? EL_EMERALD :    \
+                                (e) == EL_BD_ROCK        ? EL_BD_DIAMOND : \
+                                (e) == EL_EMERALD        ? EL_DIAMOND :    \
+                                (e) == EL_EMERALD_YELLOW ? EL_DIAMOND :    \
+                                (e) == EL_EMERALD_RED    ? EL_DIAMOND :    \
+                                (e) == EL_EMERALD_PURPLE ? EL_DIAMOND :    \
+                                (e) == EL_PEARL          ? EL_BOMB    :    \
+                                (e) == EL_CRYSTAL        ? EL_CRYSTAL :    \
+                                EL_ROCK)
 #define IS_DRAWABLE(e)         ((e) < EL_BLOCKED)
 #define IS_NOT_DRAWABLE(e)     ((e) >= EL_BLOCKED)
 #define TAPE_IS_EMPTY(x)       ((x).length == 0)
 
 #define IS_LOOP_SOUND(s)       (sound_info[s].loop)
 
+#define IS_SPECIAL_GFX_ARG(a)  ((a) >= 0 && (a) < NUM_SPECIAL_GFX_ARGS)
+
+#define IS_GLOBAL_ANIM_PART(a) ((a) >= 0 && (a) < NUM_GLOBAL_ANIM_PARTS)
+
 #define EL_CASCADE_ACTIVE(e)   (IS_EDITOR_CASCADE_INACTIVE(e) ? (e) + 1 : (e))
 #define EL_CASCADE_INACTIVE(e) (IS_EDITOR_CASCADE_ACTIVE(e)   ? (e) - 1 : (e))
 #define EL_CASCADE_TOGGLE(e)   (IS_EDITOR_CASCADE_INACTIVE(e) ? (e) + 1 :    \
                                 (d) == MV_UP    ? "MV_UP"    :         \
                                 (d) == MV_DOWN  ? "MV_DOWN"  : "(various)")
 
+#define ELEMENT_ACTIVE(e)      (ActiveElement[e])
+#define BUTTON_ACTIVE(b)       (ActiveButton[b])
+#define FONT_ACTIVE(f)         (ActiveFont[f])
+
 /* fundamental game speed values */
 #define MICROLEVEL_SCROLL_DELAY        50      /* delay for scrolling micro level */
 #define MICROLEVEL_LABEL_DELAY 250     /* delay for micro level label */
 #define MAX_ELEMENT_NAME_LEN   32
 #define MAX_TAPES_PER_SET      1024
 #define MAX_SCORE_ENTRIES      100
-#define MAX_NUM_TITLE_SCREENS  5
+#define MAX_NUM_TITLE_IMAGES   5
+#define MAX_NUM_TITLE_MESSAGES 5
 
 #define MAX_NUM_AMOEBA         100
 
-#define NUM_BELTS              4
-#define NUM_BELT_PARTS         3
 #define NUM_ENVELOPES          4
 #define MIN_ENVELOPE_XSIZE     1
 #define MIN_ENVELOPE_YSIZE     1
 #define STD_ELEMENT_CONTENTS   4
 #define MAX_ELEMENT_CONTENTS   8
 
+/* values for initial player inventory */
+#define MIN_INITIAL_INVENTORY_SIZE     1
+#define MAX_INITIAL_INVENTORY_SIZE     8
+
 /* often used screen positions */
-#define SX                     8
-#define SY                     8
-#define REAL_SX                        (SX - 2)
-#define REAL_SY                        (SY - 2)
-#define DX                     566
-#define DY                     60
-#define VX                     DX
-#define VY                     400
-#define EX                     DX
-#define EY                     (VY - 44)
 #define TILESIZE               32
 #define TILEX                  TILESIZE
 #define TILEY                  TILESIZE
+#define TILEX_VAR              TILESIZE_VAR
+#define TILEY_VAR              TILESIZE_VAR
 #define MINI_TILESIZE          (TILESIZE / 2)
 #define MINI_TILEX             MINI_TILESIZE
 #define MINI_TILEY             MINI_TILESIZE
 #define MICRO_TILEY            MICRO_TILESIZE
 #define MIDPOSX                        (SCR_FIELDX / 2)
 #define MIDPOSY                        (SCR_FIELDY / 2)
-#define SXSIZE                 (SCR_FIELDX * TILEX)
-#define SYSIZE                 (SCR_FIELDY * TILEY)
-#define FXSIZE                 ((SCR_FIELDX + 2) * TILEX)
-#define FYSIZE                 ((SCR_FIELDY + 2) * TILEY)
-#define DXSIZE                 100
-#define DYSIZE                 280
-#define VXSIZE                 DXSIZE
-#define VYSIZE                 100
-#define EXSIZE                 DXSIZE
-#define EYSIZE                 (VYSIZE + 44)
-#define FULL_SXSIZE            (2 + SXSIZE + 2)
-#define FULL_SYSIZE            (2 + SYSIZE + 2)
+#define FXSIZE                 ((2 + SCR_FIELDX + 2) * TILEX_VAR)
+#define FYSIZE                 ((2 + SCR_FIELDY + 2) * TILEY_VAR)
+
 #define MICROLEVEL_XSIZE       ((STD_LEV_FIELDX + 2) * MICRO_TILEX)
 #define MICROLEVEL_YSIZE       ((STD_LEV_FIELDY + 2) * MICRO_TILEY)
 #define MICROLEVEL_XPOS                (SX + (SXSIZE - MICROLEVEL_XSIZE) / 2)
 #define MICROLABEL1_YPOS       (MICROLEVEL_YPOS - 36)
 #define MICROLABEL2_YPOS       (MICROLEVEL_YPOS + MICROLEVEL_YSIZE + 7)
 
+/* values for GfxRedraw */
+#define GFX_REDRAW_NONE                                (0)
+#define GFX_REDRAW_TILE                                (1 << 0)
+#define GFX_REDRAW_TILE_CRUMBLED               (1 << 1)
+#define GFX_REDRAW_TILE_CRUMBLED_NEIGHBOURS    (1 << 2)
+#define GFX_REDRAW_TILE_TWINKLED               (1 << 3)
 
 /* score for elements */
 #define SC_EMERALD             0
 #define SC_CRYSTAL             11
 #define SC_PEARL               12
 #define SC_SHIELD              13
-#define SC_UNKNOWN_14          14
+#define SC_ELEM_BONUS          14
 #define SC_UNKNOWN_15          15
 
 #define LEVEL_SCORE_ELEMENTS   16      /* level elements with score */
 #define EL_CRYSTAL                     257
 #define EL_WALL_PEARL                  258
 #define EL_WALL_CRYSTAL                        259
-#define EL_DOOR_WHITE                  260
-#define EL_DOOR_WHITE_GRAY             261
-#define EL_KEY_WHITE                   262
+#define EL_DC_GATE_WHITE               260
+#define EL_DC_GATE_WHITE_GRAY          261
+#define EL_DC_KEY_WHITE                        262
 #define EL_SHIELD_NORMAL               263
 #define EL_EXTRA_TIME                  264
 #define EL_SWITCHGATE_OPEN             265
 #define EL_SIGN_STOP                   301
 #define EL_SIGN_WHEELCHAIR             302
 #define EL_SIGN_PARKING                        303
-#define EL_SIGN_ONEWAY                 304
-#define EL_SIGN_HEART                  305
-#define EL_SIGN_TRIANGLE               306
-#define EL_SIGN_ROUND                  307
-#define EL_SIGN_EXIT                   308
-#define EL_SIGN_YINYANG                        309
-#define EL_SIGN_OTHER                  310
+#define EL_SIGN_NO_ENTRY               304
+#define EL_SIGN_UNUSED_1               305
+#define EL_SIGN_GIVE_WAY               306
+#define EL_SIGN_ENTRY_FORBIDDEN                307
+#define EL_SIGN_EMERGENCY_EXIT         308
+#define EL_SIGN_YIN_YANG               309
+#define EL_SIGN_UNUSED_2               310
 #define EL_MOLE_LEFT                   311
 #define EL_MOLE_RIGHT                  312
 #define EL_MOLE_UP                     313
 
 #define EL_BD_EXPANDABLE_WALL          713
 
-#define EL_LAST_CE_8                   714
-#define EL_LAST_CE_7                   715
-#define EL_LAST_CE_6                   716
-#define EL_LAST_CE_5                   717
-#define EL_LAST_CE_4                   718
-#define EL_LAST_CE_3                   719
-#define EL_LAST_CE_2                   720
-#define EL_LAST_CE_1                   721
+#define EL_PREV_CE_8                   714
+#define EL_PREV_CE_7                   715
+#define EL_PREV_CE_6                   716
+#define EL_PREV_CE_5                   717
+#define EL_PREV_CE_4                   718
+#define EL_PREV_CE_3                   719
+#define EL_PREV_CE_2                   720
+#define EL_PREV_CE_1                   721
 #define EL_SELF                                722
 #define EL_NEXT_CE_1                   723
 #define EL_NEXT_CE_2                   724
 #define EL_NEXT_CE_8                   730
 #define EL_ANY_ELEMENT                 731
 
-#define NUM_FILE_ELEMENTS              732
+#define EL_STEEL_CHAR_START            732
+#define EL_STEEL_CHAR_ASCII0           (EL_STEEL_CHAR_START  - 32)
+#define EL_STEEL_CHAR_ASCII0_START     (EL_STEEL_CHAR_ASCII0 + 32)
+
+/* (auto-generated data structure definitions included with normal chars) */
+
+#define EL_STEEL_CHAR_ASCII0_END       (EL_STEEL_CHAR_ASCII0 + 111)
+#define EL_STEEL_CHAR_END              (EL_STEEL_CHAR_START  + 79)
+
+#define EL_STEEL_CHAR(c)               (EL_STEEL_CHAR_ASCII0+MAP_FONT_ASCII(c))
+
+#define EL_SPERMS                      812
+#define EL_BULLET                      813
+#define EL_HEART                       814
+#define EL_CROSS                       815
+#define EL_FRANKIE                     816
+#define EL_SIGN_SPERMS                 817
+#define EL_SIGN_BULLET                 818
+#define EL_SIGN_HEART                  819
+#define EL_SIGN_CROSS                  820
+#define EL_SIGN_FRANKIE                        821
+
+#define EL_STEEL_EXIT_CLOSED           822
+#define EL_STEEL_EXIT_OPEN             823
+
+#define EL_DC_STEELWALL_1_LEFT         824
+#define EL_DC_STEELWALL_1_RIGHT                825
+#define EL_DC_STEELWALL_1_TOP          826
+#define EL_DC_STEELWALL_1_BOTTOM       827
+#define EL_DC_STEELWALL_1_HORIZONTAL   828
+#define EL_DC_STEELWALL_1_VERTICAL     829
+#define EL_DC_STEELWALL_1_TOPLEFT      830
+#define EL_DC_STEELWALL_1_TOPRIGHT     831
+#define EL_DC_STEELWALL_1_BOTTOMLEFT   832
+#define EL_DC_STEELWALL_1_BOTTOMRIGHT  833
+#define EL_DC_STEELWALL_1_TOPLEFT_2    834
+#define EL_DC_STEELWALL_1_TOPRIGHT_2   835
+#define EL_DC_STEELWALL_1_BOTTOMLEFT_2 836
+#define EL_DC_STEELWALL_1_BOTTOMRIGHT_2        837
+
+#define EL_DC_STEELWALL_2_LEFT         838
+#define EL_DC_STEELWALL_2_RIGHT                839
+#define EL_DC_STEELWALL_2_TOP          840
+#define EL_DC_STEELWALL_2_BOTTOM       841
+#define EL_DC_STEELWALL_2_HORIZONTAL   842
+#define EL_DC_STEELWALL_2_VERTICAL     843
+#define EL_DC_STEELWALL_2_MIDDLE       844
+#define EL_DC_STEELWALL_2_SINGLE       845
+
+#define EL_DC_SWITCHGATE_SWITCH_UP     846
+#define EL_DC_SWITCHGATE_SWITCH_DOWN   847
+#define EL_DC_TIMEGATE_SWITCH          848
+#define EL_DC_TIMEGATE_SWITCH_ACTIVE   849
+
+#define EL_DC_LANDMINE                 850
+
+#define EL_EXPANDABLE_STEELWALL                   851
+#define EL_EXPANDABLE_STEELWALL_HORIZONTAL 852
+#define EL_EXPANDABLE_STEELWALL_VERTICAL   853
+#define EL_EXPANDABLE_STEELWALL_ANY       854
+
+#define EL_EM_EXIT_CLOSED              855
+#define EL_EM_EXIT_OPEN                        856
+#define EL_EM_STEEL_EXIT_CLOSED                857
+#define EL_EM_STEEL_EXIT_OPEN          858
+
+#define EL_DC_GATE_FAKE_GRAY           859
+
+#define EL_DC_MAGIC_WALL               860
+
+#define EL_QUICKSAND_FAST_EMPTY                861
+#define EL_QUICKSAND_FAST_FULL         862
+
+#define EL_FROM_LEVEL_TEMPLATE         863
+
+#define EL_MM_START                    864
+#define EL_MM_START_1                  EL_MM_START
+
+#define EL_MM_EMPTY_SPACE              (EL_MM_START + 0)
+#define EL_MM_EMPTY                    EL_MM_EMPTY_SPACE
+#define EL_MM_MIRROR_START             (EL_MM_START + 1)
+#define EL_MM_MIRROR_1                 (EL_MM_MIRROR_START + 0)
+#define EL_MM_MIRROR_2                 (EL_MM_MIRROR_START + 1)
+#define EL_MM_MIRROR_3                 (EL_MM_MIRROR_START + 2)
+#define EL_MM_MIRROR_4                 (EL_MM_MIRROR_START + 3)
+#define EL_MM_MIRROR_5                 (EL_MM_MIRROR_START + 4)
+#define EL_MM_MIRROR_6                 (EL_MM_MIRROR_START + 5)
+#define EL_MM_MIRROR_7                 (EL_MM_MIRROR_START + 6)
+#define EL_MM_MIRROR_8                 (EL_MM_MIRROR_START + 7)
+#define EL_MM_MIRROR_9                 (EL_MM_MIRROR_START + 8)
+#define EL_MM_MIRROR_10                        (EL_MM_MIRROR_START + 9)
+#define EL_MM_MIRROR_11                        (EL_MM_MIRROR_START + 10)
+#define EL_MM_MIRROR_12                        (EL_MM_MIRROR_START + 11)
+#define EL_MM_MIRROR_13                        (EL_MM_MIRROR_START + 12)
+#define EL_MM_MIRROR_14                        (EL_MM_MIRROR_START + 13)
+#define EL_MM_MIRROR_15                        (EL_MM_MIRROR_START + 14)
+#define EL_MM_MIRROR_16                        (EL_MM_MIRROR_START + 15)
+#define EL_MM_MIRROR_END               EL_MM_MIRROR_15
+#define EL_MM_STEEL_GRID_FIXED_START   (EL_MM_START + 17)
+#define EL_MM_STEEL_GRID_FIXED_1       (EL_MM_STEEL_GRID_FIXED_START + 0)
+#define EL_MM_STEEL_GRID_FIXED_2       (EL_MM_STEEL_GRID_FIXED_START + 1)
+#define EL_MM_STEEL_GRID_FIXED_3       (EL_MM_STEEL_GRID_FIXED_START + 2)
+#define EL_MM_STEEL_GRID_FIXED_4       (EL_MM_STEEL_GRID_FIXED_START + 3)
+#define EL_MM_STEEL_GRID_FIXED_END     EL_MM_STEEL_GRID_FIXED_03
+#define EL_MM_MCDUFFIN_START           (EL_MM_START + 21)
+#define EL_MM_MCDUFFIN_RIGHT           (EL_MM_MCDUFFIN_START + 0)
+#define EL_MM_MCDUFFIN_UP              (EL_MM_MCDUFFIN_START + 1)
+#define EL_MM_MCDUFFIN_LEFT            (EL_MM_MCDUFFIN_START + 2)
+#define EL_MM_MCDUFFIN_DOWN            (EL_MM_MCDUFFIN_START + 3)
+#define EL_MM_MCDUFFIN_END             EL_MM_MCDUFFIN_DOWN
+#define EL_MM_EXIT_CLOSED              (EL_MM_START + 25)
+#define EL_MM_EXIT_OPENING_1           (EL_MM_START + 26)
+#define EL_MM_EXIT_OPENING_2           (EL_MM_START + 27)
+#define EL_MM_EXIT_OPEN                        (EL_MM_START + 28)
+#define EL_MM_KETTLE                   (EL_MM_START + 29)
+#define EL_MM_BOMB                     (EL_MM_START + 30)
+#define EL_MM_PRISM                    (EL_MM_START + 31)
+#define EL_MM_WALL_START               (EL_MM_START + 32)
+#define EL_MM_WALL_EMPTY               EL_MM_WALL_START
+#define EL_MM_WALL_00                  EL_MM_WALL_START
+#define EL_MM_STEEL_WALL_START         EL_MM_WALL_00
+#define EL_MM_STEEL_WALL_1             EL_MM_STEEL_WALL_START
+#define EL_MM_WALL_15                  (EL_MM_START + 47)
+#define EL_MM_STEEL_WALL_END           EL_MM_WALL_15
+#define EL_MM_WALL_16                  (EL_MM_START + 48)
+#define EL_MM_WOODEN_WALL_START                EL_MM_WALL_16
+#define EL_MM_WOODEN_WALL_1            EL_MM_WOODEN_WALL_START
+#define EL_MM_WALL_31                  (EL_MM_START + 63)
+#define EL_MM_WOODEN_WALL_END          EL_MM_WALL_31
+#define EL_MM_WALL_32                  (EL_MM_START + 64)
+#define EL_MM_ICE_WALL_START           EL_MM_WALL_32
+#define EL_MM_ICE_WALL_1               EL_MM_ICE_WALL_START
+#define EL_MM_WALL_47                  (EL_MM_START + 79)
+#define EL_MM_ICE_WALL_END             EL_MM_WALL_47
+#define EL_MM_WALL_48                  (EL_MM_START + 80)
+#define EL_MM_AMOEBA_WALL_START                EL_MM_WALL_48
+#define EL_MM_AMOEBA_WALL_1            EL_MM_AMOEBA_WALL_START
+#define EL_MM_WALL_63                  (EL_MM_START + 95)
+#define EL_MM_AMOEBA_WALL_END          EL_MM_WALL_63
+#define EL_MM_WALL_END                 EL_MM_WALL_63
+#define EL_MM_WOODEN_BLOCK             (EL_MM_START + 96)
+#define EL_MM_GRAY_BALL                        (EL_MM_START + 97)
+#define EL_MM_TELEPORTER_START         (EL_MM_START + 98)
+#define EL_MM_TELEPORTER_1             (EL_MM_TELEPORTER_START + 0)
+#define EL_MM_TELEPORTER_2             (EL_MM_TELEPORTER_START + 1)
+#define EL_MM_TELEPORTER_3             (EL_MM_TELEPORTER_START + 2)
+#define EL_MM_TELEPORTER_4             (EL_MM_TELEPORTER_START + 3)
+#define EL_MM_TELEPORTER_5             (EL_MM_TELEPORTER_START + 4)
+#define EL_MM_TELEPORTER_6             (EL_MM_TELEPORTER_START + 5)
+#define EL_MM_TELEPORTER_7             (EL_MM_TELEPORTER_START + 6)
+#define EL_MM_TELEPORTER_8             (EL_MM_TELEPORTER_START + 7)
+#define EL_MM_TELEPORTER_9             (EL_MM_TELEPORTER_START + 8)
+#define EL_MM_TELEPORTER_10            (EL_MM_TELEPORTER_START + 9)
+#define EL_MM_TELEPORTER_11            (EL_MM_TELEPORTER_START + 10)
+#define EL_MM_TELEPORTER_12            (EL_MM_TELEPORTER_START + 11)
+#define EL_MM_TELEPORTER_13            (EL_MM_TELEPORTER_START + 12)
+#define EL_MM_TELEPORTER_14            (EL_MM_TELEPORTER_START + 13)
+#define EL_MM_TELEPORTER_15            (EL_MM_TELEPORTER_START + 14)
+#define EL_MM_TELEPORTER_16            (EL_MM_TELEPORTER_START + 15)
+#define EL_MM_TELEPORTER_END           EL_MM_TELEPORTER_15
+#define EL_MM_FUSE_ACTIVE              (EL_MM_START + 114)
+#define EL_MM_PACMAN_START             (EL_MM_START + 115)
+#define EL_MM_PACMAN_RIGHT             (EL_MM_PACMAN_START + 0)
+#define EL_MM_PACMAN_UP                        (EL_MM_PACMAN_START + 1)
+#define EL_MM_PACMAN_LEFT              (EL_MM_PACMAN_START + 2)
+#define EL_MM_PACMAN_DOWN              (EL_MM_PACMAN_START + 3)
+#define EL_MM_PACMAN_END               EL_MM_PACMAN_DOWN
+#define EL_MM_POLARIZER_START          (EL_MM_START + 119)
+#define EL_MM_POLARIZER_1              (EL_MM_POLARIZER_START + 0)
+#define EL_MM_POLARIZER_2              (EL_MM_POLARIZER_START + 1)
+#define EL_MM_POLARIZER_3              (EL_MM_POLARIZER_START + 2)
+#define EL_MM_POLARIZER_4              (EL_MM_POLARIZER_START + 3)
+#define EL_MM_POLARIZER_5              (EL_MM_POLARIZER_START + 4)
+#define EL_MM_POLARIZER_6              (EL_MM_POLARIZER_START + 5)
+#define EL_MM_POLARIZER_7              (EL_MM_POLARIZER_START + 6)
+#define EL_MM_POLARIZER_8              (EL_MM_POLARIZER_START + 7)
+#define EL_MM_POLARIZER_9              (EL_MM_POLARIZER_START + 8)
+#define EL_MM_POLARIZER_10             (EL_MM_POLARIZER_START + 9)
+#define EL_MM_POLARIZER_11             (EL_MM_POLARIZER_START + 10)
+#define EL_MM_POLARIZER_12             (EL_MM_POLARIZER_START + 11)
+#define EL_MM_POLARIZER_13             (EL_MM_POLARIZER_START + 12)
+#define EL_MM_POLARIZER_14             (EL_MM_POLARIZER_START + 13)
+#define EL_MM_POLARIZER_15             (EL_MM_POLARIZER_START + 14)
+#define EL_MM_POLARIZER_16             (EL_MM_POLARIZER_START + 15)
+#define EL_MM_POLARIZER_END            EL_MM_POLARIZER_15
+#define EL_MM_POLARIZER_CROSS_START    (EL_MM_START + 135)
+#define EL_MM_POLARIZER_CROSS_1                (EL_MM_POLARIZER_CROSS_START + 0)
+#define EL_MM_POLARIZER_CROSS_2                (EL_MM_POLARIZER_CROSS_START + 1)
+#define EL_MM_POLARIZER_CROSS_3                (EL_MM_POLARIZER_CROSS_START + 2)
+#define EL_MM_POLARIZER_CROSS_4                (EL_MM_POLARIZER_CROSS_START + 3)
+#define EL_MM_POLARIZER_CROSS_END      EL_MM_POLARIZER_CROSS_03
+#define EL_MM_MIRROR_FIXED_START       (EL_MM_START + 139)
+#define EL_MM_MIRROR_FIXED_1           (EL_MM_MIRROR_FIXED_START + 0)
+#define EL_MM_MIRROR_FIXED_2           (EL_MM_MIRROR_FIXED_START + 1)
+#define EL_MM_MIRROR_FIXED_3           (EL_MM_MIRROR_FIXED_START + 2)
+#define EL_MM_MIRROR_FIXED_4           (EL_MM_MIRROR_FIXED_START + 3)
+#define EL_MM_MIRROR_FIXED_END         EL_MM_MIRROR_FIXED_03
+#define EL_MM_STEEL_LOCK               (EL_MM_START + 143)
+#define EL_MM_KEY                      (EL_MM_START + 144)
+#define EL_MM_LIGHTBULB                        (EL_MM_START + 145)
+#define EL_MM_LIGHTBULB_ACTIVE         (EL_MM_START + 146)
+#define EL_MM_LIGHTBALL                        (EL_MM_START + 147)
+#define EL_MM_STEEL_BLOCK              (EL_MM_START + 148)
+#define EL_MM_WOODEN_LOCK              (EL_MM_START + 149)
+#define EL_MM_FUEL_FULL                        (EL_MM_START + 150)
+#define EL_MM_WOODEN_GRID_FIXED_START  (EL_MM_START + 151)
+#define EL_MM_WOODEN_GRID_FIXED_1      (EL_MM_WOODEN_GRID_FIXED_START + 0)
+#define EL_MM_WOODEN_GRID_FIXED_2      (EL_MM_WOODEN_GRID_FIXED_START + 1)
+#define EL_MM_WOODEN_GRID_FIXED_3      (EL_MM_WOODEN_GRID_FIXED_START + 2)
+#define EL_MM_WOODEN_GRID_FIXED_4      (EL_MM_WOODEN_GRID_FIXED_START + 3)
+#define EL_MM_WOODEN_GRID_FIXED_END    EL_MM_WOODEN_GRID_FIXED_03
+#define EL_MM_FUEL_EMPTY               (EL_MM_START + 155)
+
+#define EL_MM_UNUSED_156               (EL_MM_START + 156)
+#define EL_MM_UNUSED_157               (EL_MM_START + 157)
+#define EL_MM_UNUSED_158               (EL_MM_START + 158)
+#define EL_MM_UNUSED_159               (EL_MM_START + 159)
+
+#define EL_MM_END_1                    (EL_MM_START + 159)
+#define EL_MM_START_2                  (EL_MM_START + 160)
+
+#define EL_DF_START                    EL_MM_START_2
+#define EL_DF_START2                   (EL_DF_START - 240)
+
+#define EL_DF_MIRROR_START             EL_DF_START
+#define EL_DF_MIRROR_1                 (EL_DF_MIRROR_START + 0)
+#define EL_DF_MIRROR_2                 (EL_DF_MIRROR_START + 1)
+#define EL_DF_MIRROR_3                 (EL_DF_MIRROR_START + 2)
+#define EL_DF_MIRROR_4                 (EL_DF_MIRROR_START + 3)
+#define EL_DF_MIRROR_5                 (EL_DF_MIRROR_START + 4)
+#define EL_DF_MIRROR_6                 (EL_DF_MIRROR_START + 5)
+#define EL_DF_MIRROR_7                 (EL_DF_MIRROR_START + 6)
+#define EL_DF_MIRROR_8                 (EL_DF_MIRROR_START + 7)
+#define EL_DF_MIRROR_9                 (EL_DF_MIRROR_START + 8)
+#define EL_DF_MIRROR_10                        (EL_DF_MIRROR_START + 9)
+#define EL_DF_MIRROR_11                        (EL_DF_MIRROR_START + 10)
+#define EL_DF_MIRROR_12                        (EL_DF_MIRROR_START + 11)
+#define EL_DF_MIRROR_13                        (EL_DF_MIRROR_START + 12)
+#define EL_DF_MIRROR_14                        (EL_DF_MIRROR_START + 13)
+#define EL_DF_MIRROR_15                        (EL_DF_MIRROR_START + 14)
+#define EL_DF_MIRROR_16                        (EL_DF_MIRROR_START + 15)
+#define EL_DF_MIRROR_END               EL_DF_MIRROR_15
+
+#define EL_DF_WOODEN_GRID_FIXED_START  (EL_DF_START2 + 256)
+#define EL_DF_WOODEN_GRID_FIXED_1      (EL_DF_WOODEN_GRID_FIXED_START + 0)
+#define EL_DF_WOODEN_GRID_FIXED_2      (EL_DF_WOODEN_GRID_FIXED_START + 1)
+#define EL_DF_WOODEN_GRID_FIXED_3      (EL_DF_WOODEN_GRID_FIXED_START + 2)
+#define EL_DF_WOODEN_GRID_FIXED_4      (EL_DF_WOODEN_GRID_FIXED_START + 3)
+#define EL_DF_WOODEN_GRID_FIXED_5      (EL_DF_WOODEN_GRID_FIXED_START + 4)
+#define EL_DF_WOODEN_GRID_FIXED_6      (EL_DF_WOODEN_GRID_FIXED_START + 5)
+#define EL_DF_WOODEN_GRID_FIXED_7      (EL_DF_WOODEN_GRID_FIXED_START + 6)
+#define EL_DF_WOODEN_GRID_FIXED_8      (EL_DF_WOODEN_GRID_FIXED_START + 7)
+#define EL_DF_WOODEN_GRID_FIXED_END    EL_DF_WOODEN_GRID_FIXED_07
+
+#define EL_DF_STEEL_GRID_FIXED_START   (EL_DF_START2 + 264)
+#define EL_DF_STEEL_GRID_FIXED_1       (EL_DF_STEEL_GRID_FIXED_START + 0)
+#define EL_DF_STEEL_GRID_FIXED_2       (EL_DF_STEEL_GRID_FIXED_START + 1)
+#define EL_DF_STEEL_GRID_FIXED_3       (EL_DF_STEEL_GRID_FIXED_START + 2)
+#define EL_DF_STEEL_GRID_FIXED_4       (EL_DF_STEEL_GRID_FIXED_START + 3)
+#define EL_DF_STEEL_GRID_FIXED_5       (EL_DF_STEEL_GRID_FIXED_START + 4)
+#define EL_DF_STEEL_GRID_FIXED_6       (EL_DF_STEEL_GRID_FIXED_START + 5)
+#define EL_DF_STEEL_GRID_FIXED_7       (EL_DF_STEEL_GRID_FIXED_START + 6)
+#define EL_DF_STEEL_GRID_FIXED_8       (EL_DF_STEEL_GRID_FIXED_START + 7)
+#define EL_DF_STEEL_GRID_FIXED_END     EL_DF_STEEL_GRID_FIXED_07
+
+#define EL_DF_WOODEN_WALL_START                (EL_DF_START2 + 272)
+#define EL_DF_WOODEN_WALL_1            (EL_DF_WOODEN_WALL_START + 0)
+#define EL_DF_WOODEN_WALL_END          (EL_DF_WOODEN_WALL_START + 15)
+
+#define EL_DF_STEEL_WALL_START         (EL_DF_START2 + 288)
+#define EL_DF_STEEL_WALL_1             (EL_DF_STEEL_WALL_START + 0)
+#define EL_DF_STEEL_WALL_END           (EL_DF_STEEL_WALL_START + 15)
+
+#define EL_DF_WALL_START               EL_DF_WOODEN_WALL_START
+#define EL_DF_WALL_END                 EL_DF_STEEL_WALL_END
+
+#define EL_DF_EMPTY                    (EL_DF_START2 + 304)
+#define EL_DF_CELL                     (EL_DF_START2 + 305)
+#define EL_DF_MINE                     (EL_DF_START2 + 306)
+#define EL_DF_REFRACTOR                        (EL_DF_START2 + 307)
+
+#define EL_DF_LASER_START              (EL_DF_START2 + 308)
+#define EL_DF_LASER_RIGHT              (EL_DF_LASER_START + 0)
+#define EL_DF_LASER_UP                 (EL_DF_LASER_START + 1)
+#define EL_DF_LASER_LEFT               (EL_DF_LASER_START + 2)
+#define EL_DF_LASER_DOWN               (EL_DF_LASER_START + 3)
+#define EL_DF_LASER_END                        EL_DF_LASER_DOWN
+
+#define EL_DF_RECEIVER_START           (EL_DF_START2 + 312)
+#define EL_DF_RECEIVER_RIGHT           (EL_DF_RECEIVER_START + 0)
+#define EL_DF_RECEIVER_UP              (EL_DF_RECEIVER_START + 1)
+#define EL_DF_RECEIVER_LEFT            (EL_DF_RECEIVER_START + 2)
+#define EL_DF_RECEIVER_DOWN            (EL_DF_RECEIVER_START + 3)
+#define EL_DF_RECEIVER_END             EL_DF_RECEIVER_DOWN
+
+#define EL_DF_FIBRE_OPTIC_START                (EL_DF_START2 + 316)
+#define EL_DF_FIBRE_OPTIC_RED_1                (EL_DF_FIBRE_OPTIC_START + 0)
+#define EL_DF_FIBRE_OPTIC_RED_2                (EL_DF_FIBRE_OPTIC_START + 1)
+#define EL_DF_FIBRE_OPTIC_YELLOW_1     (EL_DF_FIBRE_OPTIC_START + 2)
+#define EL_DF_FIBRE_OPTIC_YELLOW_2     (EL_DF_FIBRE_OPTIC_START + 3)
+#define EL_DF_FIBRE_OPTIC_GREEN_1      (EL_DF_FIBRE_OPTIC_START + 4)
+#define EL_DF_FIBRE_OPTIC_GREEN_2      (EL_DF_FIBRE_OPTIC_START + 5)
+#define EL_DF_FIBRE_OPTIC_BLUE_1       (EL_DF_FIBRE_OPTIC_START + 6)
+#define EL_DF_FIBRE_OPTIC_BLUE_2       (EL_DF_FIBRE_OPTIC_START + 7)
+#define EL_DF_FIBRE_OPTIC_END          EL_DF_FIBRE_OPTIC_07
+
+#define EL_DF_MIRROR_ROTATING_START    (EL_DF_START2 + 324)
+#define EL_DF_MIRROR_ROTATING_1                (EL_DF_MIRROR_ROTATING_START + 0)
+#define EL_DF_MIRROR_ROTATING_2                (EL_DF_MIRROR_ROTATING_START + 1)
+#define EL_DF_MIRROR_ROTATING_3                (EL_DF_MIRROR_ROTATING_START + 2)
+#define EL_DF_MIRROR_ROTATING_4                (EL_DF_MIRROR_ROTATING_START + 3)
+#define EL_DF_MIRROR_ROTATING_5                (EL_DF_MIRROR_ROTATING_START + 4)
+#define EL_DF_MIRROR_ROTATING_6                (EL_DF_MIRROR_ROTATING_START + 5)
+#define EL_DF_MIRROR_ROTATING_7                (EL_DF_MIRROR_ROTATING_START + 6)
+#define EL_DF_MIRROR_ROTATING_8                (EL_DF_MIRROR_ROTATING_START + 7)
+#define EL_DF_MIRROR_ROTATING_9                (EL_DF_MIRROR_ROTATING_START + 8)
+#define EL_DF_MIRROR_ROTATING_10       (EL_DF_MIRROR_ROTATING_START + 9)
+#define EL_DF_MIRROR_ROTATING_11       (EL_DF_MIRROR_ROTATING_START + 10)
+#define EL_DF_MIRROR_ROTATING_12       (EL_DF_MIRROR_ROTATING_START + 11)
+#define EL_DF_MIRROR_ROTATING_13       (EL_DF_MIRROR_ROTATING_START + 12)
+#define EL_DF_MIRROR_ROTATING_14       (EL_DF_MIRROR_ROTATING_START + 13)
+#define EL_DF_MIRROR_ROTATING_15       (EL_DF_MIRROR_ROTATING_START + 14)
+#define EL_DF_MIRROR_ROTATING_16       (EL_DF_MIRROR_ROTATING_START + 15)
+#define EL_DF_MIRROR_ROTATING_END      EL_DF_MIRROR_ROTATING_15
+
+#define EL_DF_WOODEN_GRID_ROTATING_START (EL_DF_START2 + 340)
+#define EL_DF_WOODEN_GRID_ROTATING_1   (EL_DF_WOODEN_GRID_ROTATING_START + 0)
+#define EL_DF_WOODEN_GRID_ROTATING_2   (EL_DF_WOODEN_GRID_ROTATING_START + 1)
+#define EL_DF_WOODEN_GRID_ROTATING_3   (EL_DF_WOODEN_GRID_ROTATING_START + 2)
+#define EL_DF_WOODEN_GRID_ROTATING_4   (EL_DF_WOODEN_GRID_ROTATING_START + 3)
+#define EL_DF_WOODEN_GRID_ROTATING_5   (EL_DF_WOODEN_GRID_ROTATING_START + 4)
+#define EL_DF_WOODEN_GRID_ROTATING_6   (EL_DF_WOODEN_GRID_ROTATING_START + 5)
+#define EL_DF_WOODEN_GRID_ROTATING_7   (EL_DF_WOODEN_GRID_ROTATING_START + 6)
+#define EL_DF_WOODEN_GRID_ROTATING_8   (EL_DF_WOODEN_GRID_ROTATING_START + 7)
+#define EL_DF_WOODEN_GRID_ROTATING_END EL_DF_WOODEN_GRID_ROTATING_07
+
+#define EL_DF_STEEL_GRID_ROTATING_START        (EL_DF_START2 + 348)
+#define EL_DF_STEEL_GRID_ROTATING_1    (EL_DF_STEEL_GRID_ROTATING_START + 0)
+#define EL_DF_STEEL_GRID_ROTATING_2    (EL_DF_STEEL_GRID_ROTATING_START + 1)
+#define EL_DF_STEEL_GRID_ROTATING_3    (EL_DF_STEEL_GRID_ROTATING_START + 2)
+#define EL_DF_STEEL_GRID_ROTATING_4    (EL_DF_STEEL_GRID_ROTATING_START + 3)
+#define EL_DF_STEEL_GRID_ROTATING_5    (EL_DF_STEEL_GRID_ROTATING_START + 4)
+#define EL_DF_STEEL_GRID_ROTATING_6    (EL_DF_STEEL_GRID_ROTATING_START + 5)
+#define EL_DF_STEEL_GRID_ROTATING_7    (EL_DF_STEEL_GRID_ROTATING_START + 6)
+#define EL_DF_STEEL_GRID_ROTATING_8    (EL_DF_STEEL_GRID_ROTATING_START + 7)
+#define EL_DF_STEEL_GRID_ROTATING_END  EL_DF_STEEL_GRID_ROTATING_07
+
+#define EL_DF_END                      (EL_DF_START2 + 355)
+
+#define EL_MM_TELEPORTER_RED_START     (EL_DF_START2 + 356)
+#define EL_MM_TELEPORTER_RED_1         (EL_MM_TELEPORTER_RED_START + 0)
+#define EL_MM_TELEPORTER_RED_2         (EL_MM_TELEPORTER_RED_START + 1)
+#define EL_MM_TELEPORTER_RED_3         (EL_MM_TELEPORTER_RED_START + 2)
+#define EL_MM_TELEPORTER_RED_4         (EL_MM_TELEPORTER_RED_START + 3)
+#define EL_MM_TELEPORTER_RED_5         (EL_MM_TELEPORTER_RED_START + 4)
+#define EL_MM_TELEPORTER_RED_6         (EL_MM_TELEPORTER_RED_START + 5)
+#define EL_MM_TELEPORTER_RED_7         (EL_MM_TELEPORTER_RED_START + 6)
+#define EL_MM_TELEPORTER_RED_8         (EL_MM_TELEPORTER_RED_START + 7)
+#define EL_MM_TELEPORTER_RED_9         (EL_MM_TELEPORTER_RED_START + 8)
+#define EL_MM_TELEPORTER_RED_10                (EL_MM_TELEPORTER_RED_START + 9)
+#define EL_MM_TELEPORTER_RED_11                (EL_MM_TELEPORTER_RED_START + 10)
+#define EL_MM_TELEPORTER_RED_12                (EL_MM_TELEPORTER_RED_START + 11)
+#define EL_MM_TELEPORTER_RED_13                (EL_MM_TELEPORTER_RED_START + 12)
+#define EL_MM_TELEPORTER_RED_14                (EL_MM_TELEPORTER_RED_START + 13)
+#define EL_MM_TELEPORTER_RED_15                (EL_MM_TELEPORTER_RED_START + 14)
+#define EL_MM_TELEPORTER_RED_16                (EL_MM_TELEPORTER_RED_START + 15)
+#define EL_MM_TELEPORTER_RED_END       EL_MM_TELEPORTER_RED_16
+#define EL_MM_TELEPORTER_YELLOW_START  (EL_DF_START2 + 372)
+#define EL_MM_TELEPORTER_YELLOW_1      (EL_MM_TELEPORTER_YELLOW_START + 0)
+#define EL_MM_TELEPORTER_YELLOW_2      (EL_MM_TELEPORTER_YELLOW_START + 1)
+#define EL_MM_TELEPORTER_YELLOW_3      (EL_MM_TELEPORTER_YELLOW_START + 2)
+#define EL_MM_TELEPORTER_YELLOW_4      (EL_MM_TELEPORTER_YELLOW_START + 3)
+#define EL_MM_TELEPORTER_YELLOW_5      (EL_MM_TELEPORTER_YELLOW_START + 4)
+#define EL_MM_TELEPORTER_YELLOW_6      (EL_MM_TELEPORTER_YELLOW_START + 5)
+#define EL_MM_TELEPORTER_YELLOW_7      (EL_MM_TELEPORTER_YELLOW_START + 6)
+#define EL_MM_TELEPORTER_YELLOW_8      (EL_MM_TELEPORTER_YELLOW_START + 7)
+#define EL_MM_TELEPORTER_YELLOW_9      (EL_MM_TELEPORTER_YELLOW_START + 8)
+#define EL_MM_TELEPORTER_YELLOW_10     (EL_MM_TELEPORTER_YELLOW_START + 9)
+#define EL_MM_TELEPORTER_YELLOW_11     (EL_MM_TELEPORTER_YELLOW_START + 10)
+#define EL_MM_TELEPORTER_YELLOW_12     (EL_MM_TELEPORTER_YELLOW_START + 11)
+#define EL_MM_TELEPORTER_YELLOW_13     (EL_MM_TELEPORTER_YELLOW_START + 12)
+#define EL_MM_TELEPORTER_YELLOW_14     (EL_MM_TELEPORTER_YELLOW_START + 13)
+#define EL_MM_TELEPORTER_YELLOW_15     (EL_MM_TELEPORTER_YELLOW_START + 14)
+#define EL_MM_TELEPORTER_YELLOW_16     (EL_MM_TELEPORTER_YELLOW_START + 15)
+#define EL_MM_TELEPORTER_YELLOW_END    EL_MM_TELEPORTER_YELLOW_16
+#define EL_MM_TELEPORTER_GREEN_START   (EL_DF_START2 + 388)
+#define EL_MM_TELEPORTER_GREEN_1       (EL_MM_TELEPORTER_GREEN_START + 0)
+#define EL_MM_TELEPORTER_GREEN_2       (EL_MM_TELEPORTER_GREEN_START + 1)
+#define EL_MM_TELEPORTER_GREEN_3       (EL_MM_TELEPORTER_GREEN_START + 2)
+#define EL_MM_TELEPORTER_GREEN_4       (EL_MM_TELEPORTER_GREEN_START + 3)
+#define EL_MM_TELEPORTER_GREEN_5       (EL_MM_TELEPORTER_GREEN_START + 4)
+#define EL_MM_TELEPORTER_GREEN_6       (EL_MM_TELEPORTER_GREEN_START + 5)
+#define EL_MM_TELEPORTER_GREEN_7       (EL_MM_TELEPORTER_GREEN_START + 6)
+#define EL_MM_TELEPORTER_GREEN_8       (EL_MM_TELEPORTER_GREEN_START + 7)
+#define EL_MM_TELEPORTER_GREEN_9       (EL_MM_TELEPORTER_GREEN_START + 8)
+#define EL_MM_TELEPORTER_GREEN_10      (EL_MM_TELEPORTER_GREEN_START + 9)
+#define EL_MM_TELEPORTER_GREEN_11      (EL_MM_TELEPORTER_GREEN_START + 10)
+#define EL_MM_TELEPORTER_GREEN_12      (EL_MM_TELEPORTER_GREEN_START + 11)
+#define EL_MM_TELEPORTER_GREEN_13      (EL_MM_TELEPORTER_GREEN_START + 12)
+#define EL_MM_TELEPORTER_GREEN_14      (EL_MM_TELEPORTER_GREEN_START + 13)
+#define EL_MM_TELEPORTER_GREEN_15      (EL_MM_TELEPORTER_GREEN_START + 14)
+#define EL_MM_TELEPORTER_GREEN_16      (EL_MM_TELEPORTER_GREEN_START + 15)
+#define EL_MM_TELEPORTER_GREEN_END     EL_MM_TELEPORTER_GREEN_16
+#define EL_MM_TELEPORTER_BLUE_START    (EL_DF_START2 + 404)
+#define EL_MM_TELEPORTER_BLUE_1                (EL_MM_TELEPORTER_BLUE_START + 0)
+#define EL_MM_TELEPORTER_BLUE_2                (EL_MM_TELEPORTER_BLUE_START + 1)
+#define EL_MM_TELEPORTER_BLUE_3                (EL_MM_TELEPORTER_BLUE_START + 2)
+#define EL_MM_TELEPORTER_BLUE_4                (EL_MM_TELEPORTER_BLUE_START + 3)
+#define EL_MM_TELEPORTER_BLUE_5                (EL_MM_TELEPORTER_BLUE_START + 4)
+#define EL_MM_TELEPORTER_BLUE_6                (EL_MM_TELEPORTER_BLUE_START + 5)
+#define EL_MM_TELEPORTER_BLUE_7                (EL_MM_TELEPORTER_BLUE_START + 6)
+#define EL_MM_TELEPORTER_BLUE_8                (EL_MM_TELEPORTER_BLUE_START + 7)
+#define EL_MM_TELEPORTER_BLUE_9                (EL_MM_TELEPORTER_BLUE_START + 8)
+#define EL_MM_TELEPORTER_BLUE_10       (EL_MM_TELEPORTER_BLUE_START + 9)
+#define EL_MM_TELEPORTER_BLUE_11       (EL_MM_TELEPORTER_BLUE_START + 10)
+#define EL_MM_TELEPORTER_BLUE_12       (EL_MM_TELEPORTER_BLUE_START + 11)
+#define EL_MM_TELEPORTER_BLUE_13       (EL_MM_TELEPORTER_BLUE_START + 12)
+#define EL_MM_TELEPORTER_BLUE_14       (EL_MM_TELEPORTER_BLUE_START + 13)
+#define EL_MM_TELEPORTER_BLUE_15       (EL_MM_TELEPORTER_BLUE_START + 14)
+#define EL_MM_TELEPORTER_BLUE_16       (EL_MM_TELEPORTER_BLUE_START + 15)
+#define EL_MM_TELEPORTER_BLUE_END      EL_MM_TELEPORTER_BLUE_16
+
+#define EL_MM_MCDUFFIN                 1204
+#define EL_MM_PACMAN                   1205
+#define EL_MM_FUSE                     1206
+#define EL_MM_STEEL_WALL               1207
+#define EL_MM_WOODEN_WALL              1208
+#define EL_MM_ICE_WALL                 1209
+#define EL_MM_AMOEBA_WALL              1210
+#define EL_DF_LASER                    1211
+#define EL_DF_RECEIVER                 1212
+#define EL_DF_STEEL_WALL               1213
+#define EL_DF_WOODEN_WALL              1214
+
+#define EL_MM_END_2                    (EL_DF_START2 + 430)
+#define EL_MM_END                      EL_MM_END_2
+
+#define NUM_FILE_ELEMENTS              1215
 
 
 /* "real" (and therefore drawable) runtime elements */
 #define EL_CONVEYOR_BELT_4_RIGHT_ACTIVE         (EL_FIRST_RUNTIME_REAL + 25)
 #define EL_EXIT_OPENING                        (EL_FIRST_RUNTIME_REAL + 26)
 #define EL_EXIT_CLOSING                        (EL_FIRST_RUNTIME_REAL + 27)
-#define EL_SP_EXIT_OPENING             (EL_FIRST_RUNTIME_REAL + 28)
-#define EL_SP_EXIT_CLOSING             (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_DROPPING             (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)
-#define EL_EMC_FAKE_GRASS_ACTIVE       (EL_FIRST_RUNTIME_REAL + 45)
-#define EL_GATE_1_GRAY_ACTIVE          (EL_FIRST_RUNTIME_REAL + 46)
-#define EL_GATE_2_GRAY_ACTIVE          (EL_FIRST_RUNTIME_REAL + 47)
-#define EL_GATE_3_GRAY_ACTIVE          (EL_FIRST_RUNTIME_REAL + 48)
-#define EL_GATE_4_GRAY_ACTIVE          (EL_FIRST_RUNTIME_REAL + 49)
-#define EL_EM_GATE_1_GRAY_ACTIVE       (EL_FIRST_RUNTIME_REAL + 50)
-#define EL_EM_GATE_2_GRAY_ACTIVE       (EL_FIRST_RUNTIME_REAL + 51)
-#define EL_EM_GATE_3_GRAY_ACTIVE       (EL_FIRST_RUNTIME_REAL + 52)
-#define EL_EM_GATE_4_GRAY_ACTIVE       (EL_FIRST_RUNTIME_REAL + 53)
-#define EL_EMC_GATE_5_GRAY_ACTIVE      (EL_FIRST_RUNTIME_REAL + 54)
-#define EL_EMC_GATE_6_GRAY_ACTIVE      (EL_FIRST_RUNTIME_REAL + 55)
-#define EL_EMC_GATE_7_GRAY_ACTIVE      (EL_FIRST_RUNTIME_REAL + 56)
-#define EL_EMC_GATE_8_GRAY_ACTIVE      (EL_FIRST_RUNTIME_REAL + 57)
-#define EL_EMC_DRIPPER_ACTIVE          (EL_FIRST_RUNTIME_REAL + 58)
-#define EL_EMC_SPRING_BUMPER_ACTIVE    (EL_FIRST_RUNTIME_REAL + 59)
+#define EL_STEEL_EXIT_OPENING          (EL_FIRST_RUNTIME_REAL + 28)
+#define EL_STEEL_EXIT_CLOSING          (EL_FIRST_RUNTIME_REAL + 29)
+#define EL_EM_EXIT_OPENING             (EL_FIRST_RUNTIME_REAL + 30)
+#define EL_EM_EXIT_CLOSING             (EL_FIRST_RUNTIME_REAL + 31)
+#define EL_EM_STEEL_EXIT_OPENING       (EL_FIRST_RUNTIME_REAL + 32)
+#define EL_EM_STEEL_EXIT_CLOSING       (EL_FIRST_RUNTIME_REAL + 33)
+#define EL_SP_EXIT_OPENING             (EL_FIRST_RUNTIME_REAL + 34)
+#define EL_SP_EXIT_CLOSING             (EL_FIRST_RUNTIME_REAL + 35)
+#define EL_SP_EXIT_OPEN                        (EL_FIRST_RUNTIME_REAL + 36)
+#define EL_SP_TERMINAL_ACTIVE          (EL_FIRST_RUNTIME_REAL + 37)
+#define EL_SP_BUGGY_BASE_ACTIVATING    (EL_FIRST_RUNTIME_REAL + 38)
+#define EL_SP_BUGGY_BASE_ACTIVE                (EL_FIRST_RUNTIME_REAL + 39)
+#define EL_SP_MURPHY_CLONE             (EL_FIRST_RUNTIME_REAL + 40)
+#define EL_AMOEBA_DROPPING             (EL_FIRST_RUNTIME_REAL + 41)
+#define EL_QUICKSAND_EMPTYING          (EL_FIRST_RUNTIME_REAL + 42)
+#define EL_QUICKSAND_FAST_EMPTYING     (EL_FIRST_RUNTIME_REAL + 43)
+#define EL_MAGIC_WALL_ACTIVE           (EL_FIRST_RUNTIME_REAL + 44)
+#define EL_BD_MAGIC_WALL_ACTIVE                (EL_FIRST_RUNTIME_REAL + 45)
+#define EL_DC_MAGIC_WALL_ACTIVE                (EL_FIRST_RUNTIME_REAL + 46)
+#define EL_MAGIC_WALL_FULL             (EL_FIRST_RUNTIME_REAL + 47)
+#define EL_BD_MAGIC_WALL_FULL          (EL_FIRST_RUNTIME_REAL + 48)
+#define EL_DC_MAGIC_WALL_FULL          (EL_FIRST_RUNTIME_REAL + 49)
+#define EL_MAGIC_WALL_EMPTYING         (EL_FIRST_RUNTIME_REAL + 50)
+#define EL_BD_MAGIC_WALL_EMPTYING      (EL_FIRST_RUNTIME_REAL + 51)
+#define EL_DC_MAGIC_WALL_EMPTYING      (EL_FIRST_RUNTIME_REAL + 52)
+#define EL_MAGIC_WALL_DEAD             (EL_FIRST_RUNTIME_REAL + 53)
+#define EL_BD_MAGIC_WALL_DEAD          (EL_FIRST_RUNTIME_REAL + 54)
+#define EL_DC_MAGIC_WALL_DEAD          (EL_FIRST_RUNTIME_REAL + 55)
+#define EL_EMC_FAKE_GRASS_ACTIVE       (EL_FIRST_RUNTIME_REAL + 56)
+#define EL_GATE_1_GRAY_ACTIVE          (EL_FIRST_RUNTIME_REAL + 57)
+#define EL_GATE_2_GRAY_ACTIVE          (EL_FIRST_RUNTIME_REAL + 58)
+#define EL_GATE_3_GRAY_ACTIVE          (EL_FIRST_RUNTIME_REAL + 59)
+#define EL_GATE_4_GRAY_ACTIVE          (EL_FIRST_RUNTIME_REAL + 60)
+#define EL_EM_GATE_1_GRAY_ACTIVE       (EL_FIRST_RUNTIME_REAL + 61)
+#define EL_EM_GATE_2_GRAY_ACTIVE       (EL_FIRST_RUNTIME_REAL + 62)
+#define EL_EM_GATE_3_GRAY_ACTIVE       (EL_FIRST_RUNTIME_REAL + 63)
+#define EL_EM_GATE_4_GRAY_ACTIVE       (EL_FIRST_RUNTIME_REAL + 64)
+#define EL_EMC_GATE_5_GRAY_ACTIVE      (EL_FIRST_RUNTIME_REAL + 65)
+#define EL_EMC_GATE_6_GRAY_ACTIVE      (EL_FIRST_RUNTIME_REAL + 66)
+#define EL_EMC_GATE_7_GRAY_ACTIVE      (EL_FIRST_RUNTIME_REAL + 67)
+#define EL_EMC_GATE_8_GRAY_ACTIVE      (EL_FIRST_RUNTIME_REAL + 68)
+#define EL_DC_GATE_WHITE_GRAY_ACTIVE   (EL_FIRST_RUNTIME_REAL + 69)
+#define EL_EMC_DRIPPER_ACTIVE          (EL_FIRST_RUNTIME_REAL + 70)
+#define EL_EMC_SPRING_BUMPER_ACTIVE    (EL_FIRST_RUNTIME_REAL + 71)
+#define EL_MM_EXIT_OPENING             (EL_FIRST_RUNTIME_REAL + 72)
+#define EL_MM_EXIT_CLOSING             (EL_FIRST_RUNTIME_REAL + 73)
+#define EL_MM_GRAY_BALL_OPENING                (EL_FIRST_RUNTIME_REAL + 74)
+#define EL_MM_ICE_WALL_SHRINKING       (EL_FIRST_RUNTIME_REAL + 75)
+#define EL_MM_AMOEBA_WALL_GROWING      (EL_FIRST_RUNTIME_REAL + 76)
+#define EL_MM_PACMAN_EATING_RIGHT      (EL_FIRST_RUNTIME_REAL + 77)
+#define EL_MM_PACMAN_EATING_UP         (EL_FIRST_RUNTIME_REAL + 78)
+#define EL_MM_PACMAN_EATING_LEFT       (EL_FIRST_RUNTIME_REAL + 79)
+#define EL_MM_PACMAN_EATING_DOWN       (EL_FIRST_RUNTIME_REAL + 80)
+
+#define NUM_DRAWABLE_ELEMENTS          (EL_FIRST_RUNTIME_REAL + 81)
+
+#define EL_MM_RUNTIME_START            EL_MM_EXIT_OPENING
+#define EL_MM_RUNTIME_END              EL_MM_AMOEBA_WALL_GROWING
 
 /* "unreal" (and therefore not drawable) runtime elements */
-#define EL_FIRST_RUNTIME_UNREAL                (EL_FIRST_RUNTIME_REAL + 60)
+#define EL_FIRST_RUNTIME_UNREAL                (NUM_DRAWABLE_ELEMENTS)
 
 #define EL_BLOCKED                     (EL_FIRST_RUNTIME_UNREAL + 0)
 #define EL_EXPLOSION                   (EL_FIRST_RUNTIME_UNREAL + 1)
 #define EL_AMOEBA_GROWING              (EL_FIRST_RUNTIME_UNREAL + 6)
 #define EL_AMOEBA_SHRINKING            (EL_FIRST_RUNTIME_UNREAL + 7)
 #define EL_EXPANDABLE_WALL_GROWING     (EL_FIRST_RUNTIME_UNREAL + 8)
-#define EL_FLAMES                      (EL_FIRST_RUNTIME_UNREAL + 9)
-#define EL_PLAYER_IS_LEAVING           (EL_FIRST_RUNTIME_UNREAL + 10)
-#define EL_PLAYER_IS_EXPLODING_1       (EL_FIRST_RUNTIME_UNREAL + 11)
-#define EL_PLAYER_IS_EXPLODING_2       (EL_FIRST_RUNTIME_UNREAL + 12)
-#define EL_PLAYER_IS_EXPLODING_3       (EL_FIRST_RUNTIME_UNREAL + 13)
-#define EL_PLAYER_IS_EXPLODING_4       (EL_FIRST_RUNTIME_UNREAL + 14)
-#define EL_QUICKSAND_FILLING           (EL_FIRST_RUNTIME_UNREAL + 15)
-#define EL_MAGIC_WALL_FILLING          (EL_FIRST_RUNTIME_UNREAL + 16)
-#define EL_BD_MAGIC_WALL_FILLING       (EL_FIRST_RUNTIME_UNREAL + 17)
-#define EL_ELEMENT_SNAPPING            (EL_FIRST_RUNTIME_UNREAL + 18)
-#define EL_DIAGONAL_SHRINKING          (EL_FIRST_RUNTIME_UNREAL + 19)
-#define EL_DIAGONAL_GROWING            (EL_FIRST_RUNTIME_UNREAL + 20)
-
-#define NUM_RUNTIME_ELEMENTS           (EL_FIRST_RUNTIME_UNREAL + 21)
+#define EL_EXPANDABLE_STEELWALL_GROWING        (EL_FIRST_RUNTIME_UNREAL + 9)
+#define EL_FLAMES                      (EL_FIRST_RUNTIME_UNREAL + 10)
+#define EL_PLAYER_IS_LEAVING           (EL_FIRST_RUNTIME_UNREAL + 11)
+#define EL_PLAYER_IS_EXPLODING_1       (EL_FIRST_RUNTIME_UNREAL + 12)
+#define EL_PLAYER_IS_EXPLODING_2       (EL_FIRST_RUNTIME_UNREAL + 13)
+#define EL_PLAYER_IS_EXPLODING_3       (EL_FIRST_RUNTIME_UNREAL + 14)
+#define EL_PLAYER_IS_EXPLODING_4       (EL_FIRST_RUNTIME_UNREAL + 15)
+#define EL_QUICKSAND_FILLING           (EL_FIRST_RUNTIME_UNREAL + 16)
+#define EL_QUICKSAND_FAST_FILLING      (EL_FIRST_RUNTIME_UNREAL + 17)
+#define EL_MAGIC_WALL_FILLING          (EL_FIRST_RUNTIME_UNREAL + 18)
+#define EL_BD_MAGIC_WALL_FILLING       (EL_FIRST_RUNTIME_UNREAL + 19)
+#define EL_DC_MAGIC_WALL_FILLING       (EL_FIRST_RUNTIME_UNREAL + 20)
+#define EL_ELEMENT_SNAPPING            (EL_FIRST_RUNTIME_UNREAL + 21)
+#define EL_DIAGONAL_SHRINKING          (EL_FIRST_RUNTIME_UNREAL + 22)
+#define EL_DIAGONAL_GROWING            (EL_FIRST_RUNTIME_UNREAL + 23)
+
+#define NUM_RUNTIME_ELEMENTS           (EL_FIRST_RUNTIME_UNREAL + 24)
 
 /* dummy elements (never used as game elements, only used as graphics) */
 #define EL_FIRST_DUMMY                 NUM_RUNTIME_ELEMENTS
 #define EL_SHIELD_NORMAL_ACTIVE                (EL_FIRST_DUMMY + 18)
 #define EL_SHIELD_DEADLY_ACTIVE                (EL_FIRST_DUMMY + 19)
 #define EL_AMOEBA                      (EL_FIRST_DUMMY + 20)
-#define EL_DEFAULT                     (EL_FIRST_DUMMY + 21)
-#define EL_BD_DEFAULT                  (EL_FIRST_DUMMY + 22)
-#define EL_SP_DEFAULT                  (EL_FIRST_DUMMY + 23)
-#define EL_SB_DEFAULT                  (EL_FIRST_DUMMY + 24)
+#define EL_MM_LIGHTBALL_RED            (EL_FIRST_DUMMY + 21)
+#define EL_MM_LIGHTBALL_BLUE           (EL_FIRST_DUMMY + 22)
+#define EL_MM_LIGHTBALL_YELLOW         (EL_FIRST_DUMMY + 23)
+#define EL_MM_MASK_MCDUFFIN_RIGHT      (EL_FIRST_DUMMY + 24)
+#define EL_MM_MASK_MCDUFFIN_UP         (EL_FIRST_DUMMY + 25)
+#define EL_MM_MASK_MCDUFFIN_LEFT       (EL_FIRST_DUMMY + 26)
+#define EL_MM_MASK_MCDUFFIN_DOWN       (EL_FIRST_DUMMY + 27)
+#define EL_MM_MASK_GRID_1              (EL_FIRST_DUMMY + 28)
+#define EL_MM_MASK_GRID_2              (EL_FIRST_DUMMY + 29)
+#define EL_MM_MASK_GRID_3              (EL_FIRST_DUMMY + 30)
+#define EL_MM_MASK_GRID_4              (EL_FIRST_DUMMY + 31)
+#define EL_MM_MASK_RECTANGLE           (EL_FIRST_DUMMY + 32)
+#define EL_MM_MASK_CIRCLE              (EL_FIRST_DUMMY + 33)
+#define EL_DEFAULT                     (EL_FIRST_DUMMY + 34)
+#define EL_BD_DEFAULT                  (EL_FIRST_DUMMY + 35)
+#define EL_SP_DEFAULT                  (EL_FIRST_DUMMY + 36)
+#define EL_SB_DEFAULT                  (EL_FIRST_DUMMY + 37)
+#define EL_MM_DEFAULT                  (EL_FIRST_DUMMY + 38)
+#define EL_GRAPHIC_1                   (EL_FIRST_DUMMY + 39)
+#define EL_GRAPHIC_2                   (EL_FIRST_DUMMY + 40)
+#define EL_GRAPHIC_3                   (EL_FIRST_DUMMY + 41)
+#define EL_GRAPHIC_4                   (EL_FIRST_DUMMY + 42)
+#define EL_GRAPHIC_5                   (EL_FIRST_DUMMY + 43)
+#define EL_GRAPHIC_6                   (EL_FIRST_DUMMY + 44)
+#define EL_GRAPHIC_7                   (EL_FIRST_DUMMY + 45)
+#define EL_GRAPHIC_8                   (EL_FIRST_DUMMY + 46)
+
+#define EL_MM_DUMMY_START              EL_MM_MASK_MCDUFFIN_RIGHT
+#define EL_MM_DUMMY_END                        EL_MM_MASK_CIRCLE
 
 /* internal elements (only used for internal purposes like copying) */
-#define EL_FIRST_INTERNAL              (EL_FIRST_DUMMY + 25)
+#define EL_FIRST_INTERNAL              (EL_FIRST_DUMMY + 47)
 
 #define EL_INTERNAL_CLIPBOARD_CUSTOM   (EL_FIRST_INTERNAL + 0)
 #define EL_INTERNAL_CLIPBOARD_CHANGE   (EL_FIRST_INTERNAL + 1)
 #define EL_INTERNAL_CASCADE_DC_ACTIVE          (EL_FIRST_INTERNAL + 17)
 #define EL_INTERNAL_CASCADE_DX                 (EL_FIRST_INTERNAL + 18)
 #define EL_INTERNAL_CASCADE_DX_ACTIVE          (EL_FIRST_INTERNAL + 19)
-#define EL_INTERNAL_CASCADE_CHARS              (EL_FIRST_INTERNAL + 20)
-#define EL_INTERNAL_CASCADE_CHARS_ACTIVE       (EL_FIRST_INTERNAL + 21)
-#define EL_INTERNAL_CASCADE_CE                 (EL_FIRST_INTERNAL + 22)
-#define EL_INTERNAL_CASCADE_CE_ACTIVE          (EL_FIRST_INTERNAL + 23)
-#define EL_INTERNAL_CASCADE_GE                 (EL_FIRST_INTERNAL + 24)
-#define EL_INTERNAL_CASCADE_GE_ACTIVE          (EL_FIRST_INTERNAL + 25)
-#define EL_INTERNAL_CASCADE_REF                        (EL_FIRST_INTERNAL + 26)
-#define EL_INTERNAL_CASCADE_REF_ACTIVE         (EL_FIRST_INTERNAL + 27)
-#define EL_INTERNAL_CASCADE_USER               (EL_FIRST_INTERNAL + 28)
-#define EL_INTERNAL_CASCADE_USER_ACTIVE                (EL_FIRST_INTERNAL + 29)
-#define EL_INTERNAL_CASCADE_DYNAMIC            (EL_FIRST_INTERNAL + 30)
-#define EL_INTERNAL_CASCADE_DYNAMIC_ACTIVE     (EL_FIRST_INTERNAL + 31)
+#define EL_INTERNAL_CASCADE_MM                 (EL_FIRST_INTERNAL + 20)
+#define EL_INTERNAL_CASCADE_MM_ACTIVE          (EL_FIRST_INTERNAL + 21)
+#define EL_INTERNAL_CASCADE_DF                 (EL_FIRST_INTERNAL + 22)
+#define EL_INTERNAL_CASCADE_DF_ACTIVE          (EL_FIRST_INTERNAL + 23)
+#define EL_INTERNAL_CASCADE_CHARS              (EL_FIRST_INTERNAL + 24)
+#define EL_INTERNAL_CASCADE_CHARS_ACTIVE       (EL_FIRST_INTERNAL + 25)
+#define EL_INTERNAL_CASCADE_STEEL_CHARS                (EL_FIRST_INTERNAL + 26)
+#define EL_INTERNAL_CASCADE_STEEL_CHARS_ACTIVE (EL_FIRST_INTERNAL + 27)
+#define EL_INTERNAL_CASCADE_CE                 (EL_FIRST_INTERNAL + 28)
+#define EL_INTERNAL_CASCADE_CE_ACTIVE          (EL_FIRST_INTERNAL + 29)
+#define EL_INTERNAL_CASCADE_GE                 (EL_FIRST_INTERNAL + 30)
+#define EL_INTERNAL_CASCADE_GE_ACTIVE          (EL_FIRST_INTERNAL + 31)
+#define EL_INTERNAL_CASCADE_REF                        (EL_FIRST_INTERNAL + 32)
+#define EL_INTERNAL_CASCADE_REF_ACTIVE         (EL_FIRST_INTERNAL + 33)
+#define EL_INTERNAL_CASCADE_USER               (EL_FIRST_INTERNAL + 34)
+#define EL_INTERNAL_CASCADE_USER_ACTIVE                (EL_FIRST_INTERNAL + 35)
+#define EL_INTERNAL_CASCADE_DYNAMIC            (EL_FIRST_INTERNAL + 36)
+#define EL_INTERNAL_CASCADE_DYNAMIC_ACTIVE     (EL_FIRST_INTERNAL + 37)
 
 #define EL_INTERNAL_CLIPBOARD_START    (EL_FIRST_INTERNAL + 0)
 #define EL_INTERNAL_CLIPBOARD_END      (EL_FIRST_INTERNAL + 2)
 #define EL_INTERNAL_START              (EL_FIRST_INTERNAL + 0)
-#define EL_INTERNAL_END                        (EL_FIRST_INTERNAL + 31)
+#define EL_INTERNAL_END                        (EL_FIRST_INTERNAL + 37)
 
-#define MAX_NUM_ELEMENTS               (EL_FIRST_INTERNAL + 32)
+#define MAX_NUM_ELEMENTS               (EL_FIRST_INTERNAL + 38)
 
 
 /* values for graphics/sounds action types */
 #define ACTION_EATING                  49
 #define ACTION_TWINKLING               50
 #define ACTION_SPLASHING               51
-#define ACTION_PAGE_1                  52
-#define ACTION_PAGE_2                  53
-#define ACTION_PAGE_3                  54
-#define ACTION_PAGE_4                  55
-#define ACTION_PAGE_5                  56
-#define ACTION_PAGE_6                  57
-#define ACTION_PAGE_7                  58
-#define ACTION_PAGE_8                  59
-#define ACTION_PAGE_9                  60
-#define ACTION_PAGE_10                 61
-#define ACTION_PAGE_11                 62
-#define ACTION_PAGE_12                 63
-#define ACTION_PAGE_13                 64
-#define ACTION_PAGE_14                 65
-#define ACTION_PAGE_15                 66
-#define ACTION_PAGE_16                 67
-#define ACTION_PAGE_17                 68
-#define ACTION_PAGE_18                 69
-#define ACTION_PAGE_19                 70
-#define ACTION_PAGE_20                 71
-#define ACTION_PAGE_21                 72
-#define ACTION_PAGE_22                 73
-#define ACTION_PAGE_23                 74
-#define ACTION_PAGE_24                 75
-#define ACTION_PAGE_25                 76
-#define ACTION_PAGE_26                 77
-#define ACTION_PAGE_27                 78
-#define ACTION_PAGE_28                 79
-#define ACTION_PAGE_29                 80
-#define ACTION_PAGE_30                 81
-#define ACTION_PAGE_31                 82
-#define ACTION_PAGE_32                 83
-#define ACTION_OTHER                   84
-
-#define NUM_ACTIONS                    85
+#define ACTION_HITTING                 52
+#define ACTION_PAGE_1                  53
+#define ACTION_PAGE_2                  54
+#define ACTION_PAGE_3                  55
+#define ACTION_PAGE_4                  56
+#define ACTION_PAGE_5                  57
+#define ACTION_PAGE_6                  58
+#define ACTION_PAGE_7                  59
+#define ACTION_PAGE_8                  60
+#define ACTION_PAGE_9                  61
+#define ACTION_PAGE_10                 62
+#define ACTION_PAGE_11                 63
+#define ACTION_PAGE_12                 64
+#define ACTION_PAGE_13                 65
+#define ACTION_PAGE_14                 66
+#define ACTION_PAGE_15                 67
+#define ACTION_PAGE_16                 68
+#define ACTION_PAGE_17                 69
+#define ACTION_PAGE_18                 70
+#define ACTION_PAGE_19                 71
+#define ACTION_PAGE_20                 72
+#define ACTION_PAGE_21                 73
+#define ACTION_PAGE_22                 74
+#define ACTION_PAGE_23                 75
+#define ACTION_PAGE_24                 76
+#define ACTION_PAGE_25                 77
+#define ACTION_PAGE_26                 78
+#define ACTION_PAGE_27                 79
+#define ACTION_PAGE_28                 80
+#define ACTION_PAGE_29                 81
+#define ACTION_PAGE_30                 82
+#define ACTION_PAGE_31                 83
+#define ACTION_PAGE_32                 84
+#define ACTION_PART_1                  85
+#define ACTION_PART_2                  86
+#define ACTION_PART_3                  87
+#define ACTION_PART_4                  88
+#define ACTION_PART_5                  89
+#define ACTION_PART_6                  90
+#define ACTION_PART_7                  91
+#define ACTION_PART_8                  92
+#define ACTION_PART_9                  93
+#define ACTION_PART_10                 94
+#define ACTION_PART_11                 95
+#define ACTION_PART_12                 96
+#define ACTION_PART_13                 97
+#define ACTION_PART_14                 98
+#define ACTION_PART_15                 99
+#define ACTION_PART_16                 100
+#define ACTION_PART_17                 101
+#define ACTION_PART_18                 102
+#define ACTION_PART_19                 103
+#define ACTION_PART_20                 104
+#define ACTION_PART_21                 105
+#define ACTION_PART_22                 106
+#define ACTION_PART_23                 107
+#define ACTION_PART_24                 108
+#define ACTION_PART_25                 109
+#define ACTION_PART_26                 110
+#define ACTION_PART_27                 111
+#define ACTION_PART_28                 112
+#define ACTION_PART_29                 113
+#define ACTION_PART_30                 114
+#define ACTION_PART_31                 115
+#define ACTION_PART_32                 116
+#define ACTION_OTHER                   117
+
+#define NUM_ACTIONS                    118
 
 #define ACTION_BORING_LAST             ACTION_BORING_10
 #define ACTION_SLEEPING_LAST           ACTION_SLEEPING_3
 
 /* values for special image configuration suffixes (must match game mode) */
 #define GFX_SPECIAL_ARG_DEFAULT                0
-#define GFX_SPECIAL_ARG_TITLE          1
-#define GFX_SPECIAL_ARG_MAIN           2
-#define GFX_SPECIAL_ARG_LEVELS         3
-#define GFX_SPECIAL_ARG_SCORES         4
-#define GFX_SPECIAL_ARG_EDITOR         5
-#define GFX_SPECIAL_ARG_INFO           6
-#define GFX_SPECIAL_ARG_SETUP          7
-#define GFX_SPECIAL_ARG_PLAYING                8
-#define GFX_SPECIAL_ARG_DOOR           9
-#define GFX_SPECIAL_ARG_PREVIEW                10
-#define GFX_SPECIAL_ARG_CRUMBLED       11
-
-#define NUM_SPECIAL_GFX_ARGS           12
+#define GFX_SPECIAL_ARG_LOADING                1
+#define GFX_SPECIAL_ARG_TITLE_INITIAL  2
+#define GFX_SPECIAL_ARG_TITLE_INITIAL_1        3
+#define GFX_SPECIAL_ARG_TITLE_INITIAL_2        4
+#define GFX_SPECIAL_ARG_TITLE_INITIAL_3        5
+#define GFX_SPECIAL_ARG_TITLE_INITIAL_4        6
+#define GFX_SPECIAL_ARG_TITLE_INITIAL_5        7
+#define GFX_SPECIAL_ARG_TITLE          8
+#define GFX_SPECIAL_ARG_TITLE_1                9
+#define GFX_SPECIAL_ARG_TITLE_2                10
+#define GFX_SPECIAL_ARG_TITLE_3                11
+#define GFX_SPECIAL_ARG_TITLE_4                12
+#define GFX_SPECIAL_ARG_TITLE_5                13
+#define GFX_SPECIAL_ARG_MAIN           14
+#define GFX_SPECIAL_ARG_LEVELS         15
+#define GFX_SPECIAL_ARG_LEVELNR                16
+#define GFX_SPECIAL_ARG_SCORES         17
+#define GFX_SPECIAL_ARG_EDITOR         18
+#define GFX_SPECIAL_ARG_INFO           19
+#define GFX_SPECIAL_ARG_SETUP          20
+#define GFX_SPECIAL_ARG_PLAYING                21
+#define GFX_SPECIAL_ARG_DOOR           22
+#define GFX_SPECIAL_ARG_TAPE           23
+#define GFX_SPECIAL_ARG_PANEL          24
+#define GFX_SPECIAL_ARG_PREVIEW                25
+#define GFX_SPECIAL_ARG_CRUMBLED       26
+#define GFX_SPECIAL_ARG_MAINONLY       27
+#define GFX_SPECIAL_ARG_TYPENAME       28
+#define GFX_SPECIAL_ARG_SUBMENU                29
+#define GFX_SPECIAL_ARG_MENU           30
+#define GFX_SPECIAL_ARG_TOONS          31
+#define GFX_SPECIAL_ARG_SCORESOLD      32
+#define GFX_SPECIAL_ARG_SCORESNEW      33
+#define GFX_SPECIAL_ARG_FADING         34
+#define GFX_SPECIAL_ARG_QUIT           35
+
+#define NUM_SPECIAL_GFX_ARGS           36
+
+/* these additional definitions are currently only used for draw offsets */
+#define GFX_SPECIAL_ARG_INFO_MAIN      0
+#define GFX_SPECIAL_ARG_INFO_TITLE     1
+#define GFX_SPECIAL_ARG_INFO_ELEMENTS  2
+#define GFX_SPECIAL_ARG_INFO_MUSIC     3
+#define GFX_SPECIAL_ARG_INFO_CREDITS   4
+#define GFX_SPECIAL_ARG_INFO_PROGRAM   5
+#define GFX_SPECIAL_ARG_INFO_VERSION   6
+#define GFX_SPECIAL_ARG_INFO_LEVELSET  7
+
+#define NUM_SPECIAL_GFX_INFO_ARGS      8
+
+/* these additional definitions are currently only used for draw offsets */
+/* (must match SETUP_MODE_* values as defined in src/screens.c) */
+/* (should also match corresponding entries in src/conf_gfx.c) */
+#define GFX_SPECIAL_ARG_SETUP_MAIN             0
+#define GFX_SPECIAL_ARG_SETUP_GAME             1
+#define GFX_SPECIAL_ARG_SETUP_EDITOR           2
+#define GFX_SPECIAL_ARG_SETUP_GRAPHICS         3
+#define GFX_SPECIAL_ARG_SETUP_SOUND            4
+#define GFX_SPECIAL_ARG_SETUP_ARTWORK          5
+#define GFX_SPECIAL_ARG_SETUP_INPUT            6
+#define GFX_SPECIAL_ARG_SETUP_TOUCH            7
+#define GFX_SPECIAL_ARG_SETUP_SHORTCUTS                8
+#define GFX_SPECIAL_ARG_SETUP_SHORTCUTS_1      9
+#define GFX_SPECIAL_ARG_SETUP_SHORTCUTS_2      10
+#define GFX_SPECIAL_ARG_SETUP_SHORTCUTS_3      11
+#define GFX_SPECIAL_ARG_SETUP_SHORTCUTS_4      12
+#define GFX_SPECIAL_ARG_SETUP_SHORTCUTS_5      13
+#define GFX_SPECIAL_ARG_SETUP_CHOOSE_ARTWORK   14
+#define GFX_SPECIAL_ARG_SETUP_CHOOSE_OTHER     15
+
+#define NUM_SPECIAL_GFX_SETUP_ARGS             16
 
 
 /* values for image configuration suffixes */
 #define GFX_ARG_DIGGABLE_LIKE          23
 #define GFX_ARG_BORDER_SIZE            24
 #define GFX_ARG_STEP_OFFSET            25
-#define GFX_ARG_STEP_DELAY             26
-#define GFX_ARG_DIRECTION              27
-#define GFX_ARG_POSITION               28
-#define GFX_ARG_DRAW_XOFFSET           29
-#define GFX_ARG_DRAW_YOFFSET           30
-#define GFX_ARG_DRAW_MASKED            31
-#define GFX_ARG_ANIM_DELAY_FIXED       32
-#define GFX_ARG_ANIM_DELAY_RANDOM      33
-#define GFX_ARG_POST_DELAY_FIXED       34
-#define GFX_ARG_POST_DELAY_RANDOM      35
-#define GFX_ARG_NAME                   36
-#define GFX_ARG_SCALE_UP_FACTOR                37
-#define GFX_ARG_CLONE_FROM             38
-
-#define NUM_GFX_ARGS                   39
+#define GFX_ARG_STEP_XOFFSET           26
+#define GFX_ARG_STEP_YOFFSET           27
+#define GFX_ARG_STEP_DELAY             28
+#define GFX_ARG_DIRECTION              29
+#define GFX_ARG_POSITION               30
+#define GFX_ARG_DRAW_XOFFSET           31
+#define GFX_ARG_DRAW_YOFFSET           32
+#define GFX_ARG_DRAW_MASKED            33
+#define GFX_ARG_DRAW_ORDER             34
+#define GFX_ARG_INIT_DELAY_FIXED       35
+#define GFX_ARG_INIT_DELAY_RANDOM      36
+#define GFX_ARG_ANIM_DELAY_FIXED       37
+#define GFX_ARG_ANIM_DELAY_RANDOM      38
+#define GFX_ARG_POST_DELAY_FIXED       39
+#define GFX_ARG_POST_DELAY_RANDOM      40
+#define GFX_ARG_INIT_EVENT             41
+#define GFX_ARG_ANIM_EVENT             42
+#define GFX_ARG_NAME                   43
+#define GFX_ARG_SCALE_UP_FACTOR                44
+#define GFX_ARG_TILE_SIZE              45
+#define GFX_ARG_CLONE_FROM             46
+#define GFX_ARG_FADE_MODE              47
+#define GFX_ARG_FADE_DELAY             48
+#define GFX_ARG_POST_DELAY             49
+#define GFX_ARG_AUTO_DELAY             50
+#define GFX_ARG_ALIGN                  51
+#define GFX_ARG_VALIGN                 52
+#define GFX_ARG_SORT_PRIORITY          53
+#define GFX_ARG_CLASS                  54
+#define GFX_ARG_STYLE                  55
+#define GFX_ARG_ACTIVE_XOFFSET         56
+#define GFX_ARG_ACTIVE_YOFFSET         57
+#define GFX_ARG_PRESSED_XOFFSET                58
+#define GFX_ARG_PRESSED_YOFFSET                59
+
+#define NUM_GFX_ARGS                   60
 
 
 /* values for sound configuration suffixes */
 #define NUM_MUS_ARGS                   1
 
 
-/* values for font configuration */
+/* values for font configuration (definitions must match those from main.c) */
 #define FONT_INITIAL_1                 0
 #define FONT_INITIAL_2                 1
 #define FONT_INITIAL_3                 2
 #define FONT_INITIAL_4                 3
 #define FONT_TITLE_1                   4
 #define FONT_TITLE_2                   5
-#define FONT_MENU_1                    6
-#define FONT_MENU_2                    7
-#define FONT_TEXT_1_ACTIVE             8
-#define FONT_TEXT_2_ACTIVE             9
-#define FONT_TEXT_3_ACTIVE             10
-#define FONT_TEXT_4_ACTIVE             11
-#define FONT_TEXT_1                    12
-#define FONT_TEXT_2                    13
-#define FONT_TEXT_3                    14
-#define FONT_TEXT_4                    15
-#define FONT_ENVELOPE_1                        16
-#define FONT_ENVELOPE_2                        17
-#define FONT_ENVELOPE_3                        18
-#define FONT_ENVELOPE_4                        19
-#define FONT_INPUT_1_ACTIVE            20
-#define FONT_INPUT_2_ACTIVE            21
-#define FONT_INPUT_1                   22
-#define FONT_INPUT_2                   23
-#define FONT_OPTION_OFF                        24
-#define FONT_OPTION_ON                 25
-#define FONT_VALUE_1                   26
-#define FONT_VALUE_2                   27
-#define FONT_VALUE_OLD                 28
-#define FONT_LEVEL_NUMBER_ACTIVE       29
-#define FONT_LEVEL_NUMBER              30
-#define FONT_TAPE_RECORDER             31
-#define FONT_GAME_INFO                 32
-
-#define NUM_FONTS                      33
+#define FONT_MENU_1_ACTIVE             6
+#define FONT_MENU_2_ACTIVE             7
+#define FONT_MENU_1                    8
+#define FONT_MENU_2                    9
+#define FONT_TEXT_1_ACTIVE             10
+#define FONT_TEXT_2_ACTIVE             11
+#define FONT_TEXT_3_ACTIVE             12
+#define FONT_TEXT_4_ACTIVE             13
+#define FONT_TEXT_1                    14
+#define FONT_TEXT_2                    15
+#define FONT_TEXT_3                    16
+#define FONT_TEXT_4                    17
+#define FONT_ENVELOPE_1                        18
+#define FONT_ENVELOPE_2                        19
+#define FONT_ENVELOPE_3                        20
+#define FONT_ENVELOPE_4                        21
+#define FONT_REQUEST                   22
+#define FONT_INPUT_1_ACTIVE            23
+#define FONT_INPUT_2_ACTIVE            24
+#define FONT_INPUT_1                   25
+#define FONT_INPUT_2                   26
+#define FONT_OPTION_OFF_NARROW         27
+#define FONT_OPTION_OFF                        28
+#define FONT_OPTION_ON_NARROW          29
+#define FONT_OPTION_ON                 30
+#define FONT_VALUE_1                   31
+#define FONT_VALUE_2                   32
+#define FONT_VALUE_OLD                 33
+#define FONT_VALUE_NARROW              34
+#define FONT_LEVEL_NUMBER_ACTIVE       35
+#define FONT_LEVEL_NUMBER              36
+#define FONT_TAPE_RECORDER             37
+#define FONT_GAME_INFO                 38
+#define FONT_INFO_ELEMENTS             39
+#define FONT_INFO_LEVELSET             40
+
+#define NUM_FONTS                      41
 #define NUM_INITIAL_FONTS              4
 
+/* values for toon animation configuration */
+#define MAX_NUM_TOONS                  20
+
+/* values for global animation configuration (must match those from main.c) */
+#define NUM_GLOBAL_ANIMS               MAX_GLOBAL_ANIMS
+#define NUM_GLOBAL_ANIM_PARTS          MAX_GLOBAL_ANIM_PARTS
+#define NUM_GLOBAL_ANIM_PARTS_ALL      (NUM_GLOBAL_ANIM_PARTS + 1)
+#define NUM_GLOBAL_ANIM_TOKENS         (2 * NUM_GLOBAL_ANIMS)
+
+#define GLOBAL_ANIM_ID_GRAPHIC_FIRST   0
+#define GLOBAL_ANIM_ID_GRAPHIC_LAST    (NUM_GLOBAL_ANIMS - 1)
+#define GLOBAL_ANIM_ID_CONTROL_FIRST   (NUM_GLOBAL_ANIMS)
+#define GLOBAL_ANIM_ID_CONTROL_LAST    (2 * NUM_GLOBAL_ANIMS - 1)
+
+#define GLOBAL_ANIM_ID_PART_FIRST      0
+#define GLOBAL_ANIM_ID_PART_LAST       (NUM_GLOBAL_ANIM_PARTS - 1)
+#define GLOBAL_ANIM_ID_PART_BASE       (NUM_GLOBAL_ANIM_PARTS)
+
+/* values for global border graphics */
+#define IMG_GLOBAL_BORDER_FIRST                IMG_GLOBAL_BORDER
+#define IMG_GLOBAL_BORDER_LAST         IMG_GLOBAL_BORDER_PLAYING
+
 /* values for game_status (must match special image configuration suffixes) */
 #define GAME_MODE_DEFAULT              0
-#define GAME_MODE_TITLE                        1
-#define GAME_MODE_MAIN                 2
-#define GAME_MODE_LEVELS               3
-#define GAME_MODE_SCORES               4
-#define GAME_MODE_EDITOR               5
-#define GAME_MODE_INFO                 6
-#define GAME_MODE_SETUP                        7
-#define GAME_MODE_PLAYING              8
-#define GAME_MODE_PSEUDO_DOOR          9
-#define GAME_MODE_PSEUDO_PREVIEW       10
-#define GAME_MODE_PSEUDO_CRUMBLED      11
-
-/* there are no special config file suffixes for these modes */
-#define GAME_MODE_PSEUDO_TYPENAME      12
-#define GAME_MODE_QUIT                 13
+#define GAME_MODE_LOADING              1
+#define GAME_MODE_TITLE_INITIAL                2
+#define GAME_MODE_TITLE_INITIAL_1      3
+#define GAME_MODE_TITLE_INITIAL_2      4
+#define GAME_MODE_TITLE_INITIAL_3      5
+#define GAME_MODE_TITLE_INITIAL_4      6
+#define GAME_MODE_TITLE_INITIAL_5      7
+#define GAME_MODE_TITLE                        8
+#define GAME_MODE_TITLE_1              9
+#define GAME_MODE_TITLE_2              10
+#define GAME_MODE_TITLE_3              11
+#define GAME_MODE_TITLE_4              12
+#define GAME_MODE_TITLE_5              13
+#define GAME_MODE_MAIN                 14
+#define GAME_MODE_LEVELS               15
+#define GAME_MODE_LEVELNR              16
+#define GAME_MODE_SCORES               17
+#define GAME_MODE_EDITOR               18
+#define GAME_MODE_INFO                 19
+#define GAME_MODE_SETUP                        20
+#define GAME_MODE_PLAYING              21
+#define GAME_MODE_PSEUDO_DOOR          22
+#define GAME_MODE_PSEUDO_TAPE          23
+#define GAME_MODE_PSEUDO_PANEL         24
+#define GAME_MODE_PSEUDO_PREVIEW       25
+#define GAME_MODE_PSEUDO_CRUMBLED      26
+#define GAME_MODE_PSEUDO_MAINONLY      27
+#define GAME_MODE_PSEUDO_TYPENAME      28
+#define GAME_MODE_PSEUDO_SUBMENU       29
+#define GAME_MODE_PSEUDO_MENU          30
+#define GAME_MODE_PSEUDO_TOONS         31
+#define GAME_MODE_PSEUDO_SCORESOLD     32
+#define GAME_MODE_PSEUDO_SCORESNEW     33
+#define GAME_MODE_PSEUDO_FADING                34
+#define GAME_MODE_QUIT                 35
+
+#define NUM_GAME_MODES                 36
 
 /* special definitions currently only used for custom artwork configuration */
 #define MUSIC_PREFIX_BACKGROUND                0
 #define NUM_MUSIC_PREFIXES             1
-#define MAX_LEVELS                     1000
 
 /* definitions for demo animation lists */
 #define HELPANIM_LIST_NEXT             -1
 
 
 /* program information and versioning definitions */
-#define PROGRAM_VERSION_MAJOR          3
-#define PROGRAM_VERSION_MINOR          2
-#define PROGRAM_VERSION_PATCH          2
-#define PROGRAM_VERSION_BUILD          0
+#define PROGRAM_VERSION_MAJOR          4
+#define PROGRAM_VERSION_MINOR          0
+#define PROGRAM_VERSION_PATCH          1
+#define PROGRAM_VERSION_BUILD          5
+#define PROGRAM_VERSION_EXTRA          ""
 
 #define PROGRAM_TITLE_STRING           "Rocks'n'Diamonds"
 #define PROGRAM_AUTHOR_STRING          "Holger Schemel"
-#define PROGRAM_COPYRIGHT_STRING       "Copyright Â©1995-2006 by Holger Schemel"
 #define PROGRAM_EMAIL_STRING           "info@artsoft.org"
 #define PROGRAM_WEBSITE_STRING         "http://www.artsoft.org/"
+#define PROGRAM_COPYRIGHT_STRING       "Copyright \xa9""1995-2018 by Holger Schemel"
+#define PROGRAM_COMPANY_STRING         "A Game by Artsoft Entertainment"
+
+#define PROGRAM_ICON_FILENAME          "RocksIcon32x32.png"
 
-#define ICON_TITLE_STRING              PROGRAM_TITLE_STRING
 #define COOKIE_PREFIX                  "ROCKSNDIAMONDS"
-#define FILENAME_PREFIX                        "Rocks"
-
-#define USERDATA_DIRECTORY_WIN32       PROGRAM_TITLE_STRING
-#define USERDATA_DIRECTORY_MACOSX      PROGRAM_TITLE_STRING
-#define USERDATA_DIRECTORY_UNIX                ".rocksndiamonds"
-#define USERDATA_DIRECTORY_DOS         "userdata"
-
-#if defined(PLATFORM_WIN32)
-#define USERDATA_DIRECTORY             USERDATA_DIRECTORY_WIN32
-#elif defined(PLATFORM_MACOSX)
-#define USERDATA_DIRECTORY             USERDATA_DIRECTORY_MACOSX
-#elif defined(PLATFORM_UNIX)
-#define USERDATA_DIRECTORY             USERDATA_DIRECTORY_UNIX
-#else
-#define USERDATA_DIRECTORY             USERDATA_DIRECTORY_DOS
-#endif
 
-#define X11_ICON_FILENAME              "rocks_icon.xbm"
-#define X11_ICONMASK_FILENAME          "rocks_iconmask.xbm"
-#define SDL_ICON_FILENAME              "rocks_icon_32x32.pcx"
-#define MSDOS_POINTER_FILENAME         "mouse.pcx"
+#define USERDATA_DIRECTORY_OTHER       "userdata"
 
 /* file version numbers for resource files (levels, tapes, score, setup, etc.)
 ** currently supported/known file version numbers:
 #define LEVEL_FILE_TYPE_DX             5
 #define LEVEL_FILE_TYPE_SB             6
 #define LEVEL_FILE_TYPE_DC             7
+#define LEVEL_FILE_TYPE_MM             8
 
-#define NUM_LEVEL_FILE_TYPES           8
+#define NUM_LEVEL_FILE_TYPES           9
 
 /* values for game engine type identifier */
 #define GAME_ENGINE_TYPE_UNKNOWN       LEVEL_FILE_TYPE_UNKNOWN
 #define GAME_ENGINE_TYPE_RND           LEVEL_FILE_TYPE_RND
 #define GAME_ENGINE_TYPE_EM            LEVEL_FILE_TYPE_EM
+#define GAME_ENGINE_TYPE_SP            LEVEL_FILE_TYPE_SP
+#define GAME_ENGINE_TYPE_MM            LEVEL_FILE_TYPE_MM
+
+#define NUM_ENGINE_TYPES               4
+
+/* values for automatically playing tapes */
+#define AUTOPLAY_NONE                  0
+#define AUTOPLAY_PLAY                  (1 << 0)
+#define AUTOPLAY_FFWD                  (1 << 1)
+#define AUTOPLAY_WARP                  (1 << 2)
+#define AUTOPLAY_TEST                  (1 << 3)
+#define AUTOPLAY_WARP_NO_DISPLAY       AUTOPLAY_TEST
+
+#define AUTOPLAY_MODE_NONE             0
+#define AUTOPLAY_MODE_PLAY             (AUTOPLAY_MODE_NONE | AUTOPLAY_PLAY)
+#define AUTOPLAY_MODE_FFWD             (AUTOPLAY_MODE_PLAY | AUTOPLAY_FFWD)
+#define AUTOPLAY_MODE_WARP             (AUTOPLAY_MODE_FFWD | AUTOPLAY_WARP)
+#define AUTOPLAY_MODE_TEST             (AUTOPLAY_MODE_WARP | AUTOPLAY_TEST)
+#define AUTOPLAY_MODE_WARP_NO_DISPLAY  AUTOPLAY_MODE_TEST
+
+
+struct BorderInfo
+{
+  boolean draw_masked[NUM_SPECIAL_GFX_ARGS];
+  boolean draw_masked_when_fading;
+};
+
+struct RequestButtonInfo
+{
+  struct TextPosInfo yes;
+  struct TextPosInfo no;
+  struct TextPosInfo confirm;
+  struct TextPosInfo player_1;
+  struct TextPosInfo player_2;
+  struct TextPosInfo player_3;
+  struct TextPosInfo player_4;
+};
+
+struct MenuMainButtonInfo
+{
+  struct MenuPosInfo name;
+  struct MenuPosInfo levels;
+  struct MenuPosInfo scores;
+  struct MenuPosInfo editor;
+  struct MenuPosInfo info;
+  struct MenuPosInfo game;
+  struct MenuPosInfo setup;
+  struct MenuPosInfo quit;
+
+  struct MenuPosInfo prev_level;
+  struct MenuPosInfo next_level;
+};
+
+struct MenuMainTextInfo
+{
+  struct TextPosInfo name;
+  struct TextPosInfo levels;
+  struct TextPosInfo scores;
+  struct TextPosInfo editor;
+  struct TextPosInfo info;
+  struct TextPosInfo game;
+  struct TextPosInfo setup;
+  struct TextPosInfo quit;
+
+  struct TextPosInfo first_level;
+  struct TextPosInfo last_level;
+  struct TextPosInfo level_number;
+  struct TextPosInfo level_info_1;
+  struct TextPosInfo level_info_2;
+  struct TextPosInfo level_name;
+  struct TextPosInfo level_author;
+  struct TextPosInfo level_year;
+  struct TextPosInfo level_imported_from;
+  struct TextPosInfo level_imported_by;
+  struct TextPosInfo level_tested_by;
+  struct TextPosInfo title_1;
+  struct TextPosInfo title_2;
+  struct TextPosInfo title_3;
+};
+
+struct MenuMainInputInfo
+{
+  struct TextPosInfo name;
+};
+
+struct MenuMainInfo
+{
+  struct MenuMainButtonInfo button;
+  struct MenuMainTextInfo text;
+  struct MenuMainInputInfo input;
+};
+
+struct TitleFadingInfo
+{
+  int fade_mode;
+  int fade_delay;
+  int post_delay;
+  int auto_delay;
+};
 
-#define NUM_ENGINE_TYPES               3
+struct TitleMessageInfo
+{
+  int x, y;
+  int width, height;
+  int chars, lines;
+  int align, valign;
+  int font;
+  boolean autowrap;
+  boolean centered;
+  boolean parse_comments;
+  int sort_priority;
+
+  int fade_mode;
+  int fade_delay;
+  int post_delay;
+  int auto_delay;
+};
 
+struct InitInfo
+{
+  struct MenuPosInfo busy;
+};
 
 struct MenuInfo
 {
   int draw_xoffset[NUM_SPECIAL_GFX_ARGS];
   int draw_yoffset[NUM_SPECIAL_GFX_ARGS];
+  int draw_xoffset_info[NUM_SPECIAL_GFX_INFO_ARGS];
+  int draw_yoffset_info[NUM_SPECIAL_GFX_INFO_ARGS];
+  int draw_xoffset_setup[NUM_SPECIAL_GFX_SETUP_ARGS];
+  int draw_yoffset_setup[NUM_SPECIAL_GFX_SETUP_ARGS];
 
   int scrollbar_xoffset;
 
   int list_size[NUM_SPECIAL_GFX_ARGS];
-
-  int fade_delay;
-  int post_delay;
+  int list_size_info[NUM_SPECIAL_GFX_INFO_ARGS];
+
+  int paragraph_spacing[NUM_SPECIAL_GFX_INFO_ARGS];
+  int paragraph_spacing_info[NUM_SPECIAL_GFX_INFO_ARGS];
+  int paragraph_spacing_setup[NUM_SPECIAL_GFX_INFO_ARGS];
+  int headline1_spacing[NUM_SPECIAL_GFX_INFO_ARGS];
+  int headline1_spacing_info[NUM_SPECIAL_GFX_INFO_ARGS];
+  int headline1_spacing_setup[NUM_SPECIAL_GFX_INFO_ARGS];
+  int headline2_spacing[NUM_SPECIAL_GFX_INFO_ARGS];
+  int headline2_spacing_info[NUM_SPECIAL_GFX_INFO_ARGS];
+  int headline2_spacing_setup[NUM_SPECIAL_GFX_INFO_ARGS];
+  int line_spacing[NUM_SPECIAL_GFX_INFO_ARGS];
+  int line_spacing_info[NUM_SPECIAL_GFX_INFO_ARGS];
+  int line_spacing_setup[NUM_SPECIAL_GFX_INFO_ARGS];
+  int extra_spacing[NUM_SPECIAL_GFX_INFO_ARGS];
+  int extra_spacing_info[NUM_SPECIAL_GFX_INFO_ARGS];
+  int extra_spacing_setup[NUM_SPECIAL_GFX_INFO_ARGS];
+
+  struct TitleFadingInfo enter_menu;
+  struct TitleFadingInfo leave_menu;
+  struct TitleFadingInfo enter_screen[NUM_SPECIAL_GFX_ARGS];
+  struct TitleFadingInfo leave_screen[NUM_SPECIAL_GFX_ARGS];
+  struct TitleFadingInfo next_screen[NUM_SPECIAL_GFX_ARGS];
 
   int sound[NUM_SPECIAL_GFX_ARGS];
   int music[NUM_SPECIAL_GFX_ARGS];
+
+  struct MenuMainInfo main;
 };
 
 struct DoorInfo
 {
+  struct DoorPartPosInfo part_1;
+  struct DoorPartPosInfo part_2;
+  struct DoorPartPosInfo part_3;
+  struct DoorPartPosInfo part_4;
+  struct DoorPartPosInfo part_5;
+  struct DoorPartPosInfo part_6;
+  struct DoorPartPosInfo part_7;
+  struct DoorPartPosInfo part_8;
+
+  struct DoorPartPosInfo panel;
+
   int width;
   int height;
   int step_offset;
   int step_delay;
+  int post_delay;
+  int anim_mode;
+};
+
+struct RequestInfo
+{
+  struct RequestButtonInfo button;
+  int x, y;
+  int width, height;
+  int border_size;
+  int line_spacing;
+  int step_offset;
+  int step_delay;
   int anim_mode;
+  int align;
+  int valign;
+  boolean autowrap;
+  boolean centered;
+  boolean wrap_single_words;
 };
 
 struct PreviewInfo
 {
   int x, y;
+  int align, valign;
   int xsize, ysize;
+  int xoffset, yoffset;
   int tile_size;
   int step_offset;
   int step_delay;
+  int anim_mode;
+};
+
+struct EditorTabsInfo
+{
+  int x;
+  int y;
+  int yoffset2;
+  int width;
+  int height;
+  int draw_xoffset;
+  int draw_yoffset;
+};
+
+struct EditorSettingsInfo
+{
+  struct MenuPosInfo headline;
+
+  struct XY element_graphic;
+  struct XY element_name;
+
+  struct EditorTabsInfo tabs;
+
+  struct XY tooltip;
+};
+
+struct EditorGadgetInfo
+{
+  int normal_spacing;
+  int small_spacing;
+  int tiny_spacing;
+  int line_spacing;
+  int text_spacing;
+  int tab_spacing;
+
+  struct Rect separator_line;
+};
+
+struct EditorButtonInfo
+{
+  struct XYTileSize prev_level;
+  struct XYTileSize next_level;
+
+  struct XYTileSize properties;
+  struct XYTileSize element_left;
+  struct XYTileSize element_middle;
+  struct XYTileSize element_right;
+  struct XYTileSize palette;
+
+  struct XYTileSize draw_single;
+  struct XYTileSize draw_connected;
+  struct XYTileSize draw_line;
+  struct XYTileSize draw_arc;
+  struct XYTileSize draw_rectangle;
+  struct XYTileSize draw_filled_box;
+  struct XYTileSize rotate_up;
+  struct XYTileSize draw_text;
+  struct XYTileSize flood_fill;
+  struct XYTileSize rotate_left;
+  struct XYTileSize zoom_level;
+  struct XYTileSize rotate_right;
+  struct XYTileSize draw_random;
+  struct XYTileSize grab_brush;
+  struct XYTileSize rotate_down;
+  struct XYTileSize pick_element;
+
+  struct XYTileSize ce_copy_from;
+  struct XYTileSize ce_copy_to;
+  struct XYTileSize ce_swap;
+  struct XYTileSize ce_copy;
+  struct XYTileSize ce_paste;
+
+  struct XYTileSize undo;
+  struct XYTileSize conf;
+  struct XYTileSize save;
+  struct XYTileSize clear;
+  struct XYTileSize test;
+  struct XYTileSize exit;
+};
+
+struct EditorInputInfo
+{
+  struct XY level_number;
+};
+
+struct EditorPaletteInfo
+{
+  int x, y;
+  int cols, rows;
+  int tile_size;
+  boolean show_as_separate_screen;
+  boolean show_on_element_buttons;
+
+  struct XYTileSize element_left;
+  struct XYTileSize element_middle;
+  struct XYTileSize element_right;
+};
+
+struct EditorDrawingAreaInfo
+{
+  int tile_size;
+};
+
+struct EditorInfo
+{
+  struct EditorSettingsInfo settings;
+  struct EditorGadgetInfo gadget;
+  struct EditorButtonInfo button;
+  struct EditorInputInfo input;
+  struct EditorPaletteInfo palette;
+  struct EditorDrawingAreaInfo drawingarea;
+};
+
+struct ViewportInfo
+{
+  struct RectWithBorder window[NUM_SPECIAL_GFX_ARGS];
+  struct RectWithBorder playfield[NUM_SPECIAL_GFX_ARGS];
+  struct RectWithBorder door_1[NUM_SPECIAL_GFX_ARGS];
+  struct RectWithBorder door_2[NUM_SPECIAL_GFX_ARGS];
 };
 
 struct HiScore
@@ -1865,6 +2933,9 @@ struct EnvelopeInfo
   int xsize;
   int ysize;
 
+  boolean autowrap;
+  boolean centered;
+
   char text[MAX_ENVELOPE_TEXT_LEN + 1];
 };
 
@@ -1887,6 +2958,12 @@ struct DateInfo
   int year;
   int month;
   int day;
+
+  enum
+  {
+    DATE_SRC_CLOCK,
+    DATE_SRC_LEVELFILE
+  } src;
 };
 
 struct LevelInfo
@@ -1897,6 +2974,8 @@ struct LevelInfo
 
   /* level stored in native format for the alternative native game engines */
   struct LevelInfo_EM *native_em_level;
+  struct LevelInfo_SP *native_sp_level;
+  struct LevelInfo_MM *native_mm_level;
 
   int file_version;    /* file format version the level is stored with    */
   int game_version;    /* game release version the level was created with */
@@ -1911,10 +2990,13 @@ struct LevelInfo
 
   int time;                            /* available time (seconds) */
   int gems_needed;
+  boolean auto_count_gems;
 
   char name[MAX_LEVEL_NAME_LEN + 1];
   char author[MAX_LEVEL_AUTHOR_LEN + 1];
 
+  int random_seed;
+
   struct EnvelopeInfo envelope[NUM_ENVELOPES];
 
   int score[LEVEL_SCORE_ELEMENTS];
@@ -1975,18 +3057,34 @@ struct LevelInfo
   int initial_player_stepsize[MAX_PLAYERS];    /* initial player speed */
   boolean initial_player_gravity[MAX_PLAYERS];
 
+  boolean use_initial_inventory[MAX_PLAYERS];
+  int initial_inventory_size[MAX_PLAYERS];
+  int initial_inventory_content[MAX_PLAYERS][MAX_INITIAL_INVENTORY_SIZE];
+
   boolean em_slippery_gems;    /* EM style "gems slip from wall" behaviour */
+  boolean em_explodes_by_fire; /* EM style chain explosion behaviour */
   boolean use_spring_bug;      /* for compatibility with old levels */
   boolean use_time_orb_bug;    /* for compatibility with old levels */
   boolean instant_relocation;  /* no visual delay when relocating player */
+  boolean shifted_relocation;  /* no level centering when relocating player */
+  boolean lazy_relocation;     /* only redraw off-screen player relocation */
   boolean can_pass_to_walkable;        /* player can pass to empty or walkable tile */
   boolean grow_into_diggable;  /* amoeba can grow into anything diggable */
+  boolean auto_exit_sokoban;   /* automatically finish solved Sokoban levels */
 
   boolean continuous_snapping; /* repeated snapping without releasing key */
   boolean block_snap_field;    /* snapping blocks field to show animation */
   boolean block_last_field;    /* player blocks previous field while moving */
   boolean sp_block_last_field; /* player blocks previous field while moving */
 
+  /* values for MM/DF elements */
+  boolean mm_laser_red, mm_laser_green, mm_laser_blue;
+  boolean df_laser_red, df_laser_green, df_laser_blue;
+  int mm_time_fuse;
+  int mm_time_bomb;
+  int mm_time_ball;
+  int mm_time_block;
+
   /* ('int' instead of 'boolean' because used as selectbox value in editor) */
   int use_step_counter;                /* count steps instead of seconds for level */
 
@@ -1994,9 +3092,15 @@ struct LevelInfo
 
   boolean use_custom_template; /* use custom properties from template file */
 
+  boolean file_has_custom_elements;    /* set when level file contains CEs */
+
   boolean no_valid_file;       /* set when level file missing or invalid */
+  boolean no_level_file;       /* set when falling back to level template */
 
   boolean changed;             /* set when level was changed in the editor */
+
+  /* runtime flags to handle bugs in old levels (not stored in level file) */
+  boolean use_action_after_change_bug;
 };
 
 struct GlobalInfo
@@ -2004,15 +3108,26 @@ struct GlobalInfo
   char *autoplay_leveldir;
   int autoplay_level[MAX_TAPES_PER_SET];
   boolean autoplay_all;
+  boolean autoplay_mode;
 
   char *convert_leveldir;
   int convert_level_nr;
 
+  char *create_images_dir;
+
   int num_toons;
 
   float frames_per_second;
-  boolean fps_slowdown;
-  int fps_slowdown_factor;
+  boolean show_frames_per_second;
+
+  /* global values for fading screens and masking borders */
+  int border_status;
+
+  /* values for global animations */
+  int anim_status;
+  int anim_status_next;
+
+  boolean use_envelope_request;
 };
 
 struct ElementChangeInfo
@@ -2031,7 +3146,7 @@ struct ElementChangeInfo
   int delay_random;            /* added frame delay before changed (random) */
   int delay_frames;            /* either 1 (frames) or 50 (seconds; 50 fps) */
 
-  int trigger_element;         /* element triggering change */
+  int initial_trigger_element; /* initial element triggering change */
 
   struct Content target_content;/* elements for extended change target */
   boolean use_target_content;  /* use extended change target */
@@ -2046,9 +3161,12 @@ struct ElementChangeInfo
   int action_type;             /* type of action */
   int action_mode;             /* mode of action */
   int action_arg;              /* parameter of action */
+  int action_element;          /* element related to action */
 
   /* ---------- internal values used at runtime when playing ---------- */
 
+  int trigger_element;         /* element triggering change */
+
   /* functions that are called before, while and after the change of an
      element -- currently only used for non-custom elements */
   void (*pre_change_function)(int x, int y);
@@ -2058,6 +3176,7 @@ struct ElementChangeInfo
   short actual_trigger_element;        /* element that actually triggered change */
   int actual_trigger_side;     /* element side that triggered the change */
   int actual_trigger_player;   /* player which actually triggered change */
+  int actual_trigger_player_bits; /* player bits of triggering players */
   int actual_trigger_ce_value; /* CE value of element that triggered change */
   int actual_trigger_ce_score; /* CE score of element that triggered change */
 
@@ -2122,10 +3241,10 @@ struct ElementInfo
 
   /* ---------- special element property values ---------- */
 
-  unsigned long properties[NUM_EP_BITFIELDS];  /* element base properties */
+  unsigned int properties[NUM_EP_BITFIELDS];   /* element base properties */
 
   boolean use_gfx_element;     /* use custom graphic element */
-  int gfx_element;             /* optional custom graphic element */
+  int gfx_element_initial;     /* initial optional custom graphic element */
 
   int access_direction;                /* accessible from which direction */
 
@@ -2176,8 +3295,13 @@ struct ElementInfo
 
   boolean in_group[NUM_GROUP_ELEMENTS];
 
+  int gfx_element;             /* runtime optional custom graphic element */
+
   int collect_score;           /* runtime score value for collecting */
 
+  /* count of this element on playfield, calculated after each frame */
+  int element_count;
+
   /* ---------- internal values used in level editor ---------- */
 
   int access_type;             /* walkable or passable */
@@ -2205,9 +3329,28 @@ struct FontInfo
                                /* internal bitmap ID for special graphics */
 };
 
+struct GlobalAnimNameInfo
+{
+  char *token_name;            /* global animation token in config files */
+};
+
+struct GlobalAnimInfo
+{
+  char *token_name;            /* global animation token in config files */
+
+  /* global animation graphic and control definitions */
+  int graphic[NUM_GLOBAL_ANIM_PARTS_ALL][NUM_SPECIAL_GFX_ARGS];
+
+  /* global animation sound and music definitions */
+  int sound[NUM_GLOBAL_ANIM_PARTS_ALL][NUM_SPECIAL_GFX_ARGS];
+  int music[NUM_GLOBAL_ANIM_PARTS_ALL][NUM_SPECIAL_GFX_ARGS];
+};
+
 struct GraphicInfo
 {
-  Bitmap *bitmap;
+  Bitmap **bitmaps;            /* bitmaps in all required sizes */
+  Bitmap *bitmap;              /* bitmap in default size */
+
   int src_image_width;         /* scaled bitmap size, but w/o small images */
   int src_image_height;                /* scaled bitmap size, but w/o small images */
 
@@ -2234,26 +3377,51 @@ struct GraphicInfo
   int border_size;             /* border size for "crumbled" graphics */
 
   int scale_up_factor;         /* optional factor for scaling image up */
+  int tile_size;               /* optional explicitly defined tile size */
 
   int clone_from;              /* graphic for cloning *all* settings */
 
-  int anim_delay_fixed;                /* optional delay values for bored and   */
-  int anim_delay_random;       /* sleeping player animations (animation */
-  int post_delay_fixed;                /* intervall and following pause before  */
-  int post_delay_random;       /* next intervall (bored animation only) */
+  int init_delay_fixed;                /* optional initial delay values for global */
+  int init_delay_random;       /* animations (pause interval before start) */
+  int anim_delay_fixed;                /* optional delay values for bored/sleeping */
+  int anim_delay_random;       /* and global animations (animation length) */
+  int post_delay_fixed;                /* optional delay values after bored/global */
+  int post_delay_random;       /* animations (pause before next animation) */
+
+  int init_event;              /* optional event triggering animation start */
+  int anim_event;              /* optional event triggering animation end   */
 
   int step_offset;             /* optional step offset of toon animations */
+  int step_xoffset;            /* optional step offset of toon animations */
+  int step_yoffset;            /* optional step offset of toon animations */
   int step_delay;              /* optional step delay of toon animations */
+  int direction;               /* optional move direction of toon animations */
+  int position;                        /* optional draw position of toon animations */
+  int x;                       /* optional draw position of toon animations */
+  int y;                       /* optional draw position of toon animations */
 
   int draw_xoffset;            /* optional offset for drawing font chars */
   int draw_yoffset;            /* optional offset for drawing font chars */
 
   int draw_masked;             /* optional setting for drawing envelope gfx */
+  int draw_order;              /* optional draw order for global animations */
 
-#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
+  int fade_mode;               /* optional setting for drawing title screens */
+  int fade_delay;              /* optional setting for drawing title screens */
+  int post_delay;              /* optional setting for drawing title screens */
+  int auto_delay;              /* optional setting for drawing title screens */
+  int align, valign;           /* optional setting for drawing title screens */
+  int sort_priority;           /* optional setting for drawing title screens */
+
+  int class;
+  int style;
+
+  int active_xoffset;
+  int active_yoffset;
+  int pressed_xoffset;
+  int pressed_yoffset;
+
+  boolean use_image_size;      /* use image size as default width and height */
 };
 
 struct SoundInfo
@@ -2324,15 +3492,17 @@ struct HelpAnimInfo
 };
 
 
-extern Bitmap                 *bitmap_db_cross;
 extern Bitmap                 *bitmap_db_field;
 extern Bitmap                 *bitmap_db_panel;
-extern Bitmap                 *bitmap_db_door;
-extern Pixmap                  tile_clipmask[];
+extern Bitmap                 *bitmap_db_door_1;
+extern Bitmap                 *bitmap_db_door_2;
+extern Bitmap                 *bitmap_db_store_1;
+extern Bitmap                 *bitmap_db_store_2;
 extern DrawBuffer             *fieldbuffer;
 extern DrawBuffer             *drawto_field;
 
 extern int                     game_status;
+extern boolean                 game_status_last_screen;
 extern boolean                 level_editor_test_game;
 extern boolean                 network_playing;
 
@@ -2343,9 +3513,6 @@ extern SDL_Thread        *server_thread;
 
 extern int                     key_joystick_mapping;
 
-extern boolean                 redraw[MAX_BUF_XSIZE][MAX_BUF_YSIZE];
-extern int                     redraw_x1, redraw_y1;
-
 extern short                   Feld[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern short                   MovPos[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern short                   MovDir[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
@@ -2364,6 +3531,7 @@ extern short                      ChangeEvent[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern short                   WasJustMoving[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern short                   WasJustFalling[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern short                   CheckCollision[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
+extern short                   CheckImpact[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern short                   AmoebaNr[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern short                   AmoebaCnt[MAX_NUM_AMOEBA];
 extern short                   AmoebaCnt2[MAX_NUM_AMOEBA];
@@ -2378,14 +3546,38 @@ extern int                      GfxRandom[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern int                     GfxElement[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern int                     GfxAction[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern int                     GfxDir[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
+extern int                     GfxRedraw[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
+
+extern int                     ActiveElement[MAX_NUM_ELEMENTS];
+extern int                     ActiveButton[NUM_IMAGE_FILES];
+extern int                     ActiveFont[NUM_FONTS];
 
 extern int                     lev_fieldx, lev_fieldy;
 extern int                     scroll_x, scroll_y;
 
+extern int                     WIN_XSIZE, WIN_YSIZE;
+extern int                     SCR_FIELDX, SCR_FIELDY;
+extern int                     REAL_SX, REAL_SY;
+extern int                     SX, SY;
+extern int                     DX, DY;
+extern int                     VX, VY;
+extern int                     EX, EY;
+extern int                     dDX, dDY;
+extern int                     FULL_SXSIZE, FULL_SYSIZE;
+extern int                     SXSIZE, SYSIZE;
+extern int                     DXSIZE, DYSIZE;
+extern int                     VXSIZE, VYSIZE;
+extern int                     EXSIZE, EYSIZE;
+extern int                     TILESIZE_VAR;
+
+extern int                     FADE_SX, FADE_SY;
+extern int                     FADE_SXSIZE, FADE_SYSIZE;
+
 extern int                     FX, FY;
 extern int                     ScrollStepSize;
 extern int                     ScreenMovDir, ScreenMovPos, ScreenGfxPos;
 extern int                     BorderElement;
+extern int                     MenuFrameDelay;
 extern int                     GameFrameDelay;
 extern int                     FfwdFrameDelay;
 extern int                     BX1, BY1;
@@ -2407,9 +3599,37 @@ extern struct LevelInfo          level, level_template;
 extern struct HiScore          highscore[];
 extern struct TapeInfo         tape;
 extern struct GlobalInfo       global;
+extern struct BorderInfo       border;
+extern struct ViewportInfo     viewport;
+extern struct TitleFadingInfo  fading;
+extern struct TitleFadingInfo  fading_none;
+extern struct TitleFadingInfo  title_initial_first_default;
+extern struct TitleFadingInfo  title_initial_default;
+extern struct TitleFadingInfo  title_first_default;
+extern struct TitleFadingInfo  title_default;
+extern struct TitleMessageInfo titlescreen_initial_first_default;
+extern struct TitleMessageInfo titlescreen_initial_first[];
+extern struct TitleMessageInfo titlescreen_initial_default;
+extern struct TitleMessageInfo titlescreen_initial[];
+extern struct TitleMessageInfo titlescreen_first_default;
+extern struct TitleMessageInfo titlescreen_first[];
+extern struct TitleMessageInfo titlescreen_default;
+extern struct TitleMessageInfo titlescreen[];
+extern struct TitleMessageInfo titlemessage_initial_first_default;
+extern struct TitleMessageInfo titlemessage_initial_first[];
+extern struct TitleMessageInfo titlemessage_initial_default;
+extern struct TitleMessageInfo titlemessage_initial[];
+extern struct TitleMessageInfo titlemessage_first_default;
+extern struct TitleMessageInfo titlemessage_first[];
+extern struct TitleMessageInfo titlemessage_default;
+extern struct TitleMessageInfo titlemessage[];
+extern struct TitleMessageInfo readme;
+extern struct InitInfo         init, init_last;
 extern struct MenuInfo         menu;
 extern struct DoorInfo         door_1, door_2;
+extern struct RequestInfo      request;
 extern struct PreviewInfo      preview;
+extern struct EditorInfo       editor;
 extern struct ElementInfo      element_info[];
 extern struct ElementNameInfo  element_name_info[];
 extern struct ElementActionInfo        element_action_info[];
@@ -2417,6 +3637,8 @@ extern struct ElementDirectionInfo element_direction_info[];
 extern struct SpecialSuffixInfo special_suffix_info[];
 extern struct TokenIntPtrInfo  image_config_vars[];
 extern struct FontInfo         font_info[];
+extern struct GlobalAnimInfo   global_anim_info[];
+extern struct GlobalAnimNameInfo global_anim_name_info[];
 extern struct MusicPrefixInfo  music_prefix_info[];
 extern struct GraphicInfo      *graphic_info;
 extern struct SoundInfo               *sound_info;
@@ -2424,6 +3646,11 @@ extern struct MusicInfo         *music_info;
 extern struct MusicFileInfo    *music_file_info;
 extern struct HelpAnimInfo     *helpanim_info;
 extern SetupFileHash           *helptext_info;
+extern SetupFileHash          *image_config_hash;
+extern SetupFileHash          *element_token_hash;
+extern SetupFileHash          *graphic_token_hash;
+extern SetupFileHash          *font_token_hash;
+extern SetupFileHash          *hide_setup_hash;
 extern struct ConfigTypeInfo   image_config_suffix[];
 extern struct ConfigTypeInfo   sound_config_suffix[];
 extern struct ConfigTypeInfo   music_config_suffix[];