fixed name of element 'beamer' to 'teleporter'
[rocksndiamonds.git] / src / main.h
index 0d7218ad47981fdae3e279be06391515baade289..d1ca675ade4ee756a308854482c68e99617f5355 100644 (file)
@@ -23,6 +23,7 @@
 #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 */
@@ -41,8 +42,6 @@
 #define SND_UNDEFINED                  (-1)
 #define MUS_UNDEFINED                  (-1)
 
-#define DEFAULT_FULLSCREEN_MODE                "800x600"
-
 #define WIN_XSIZE_DEFAULT              672
 #define WIN_YSIZE_DEFAULT              560
 
@@ -76,6 +75,7 @@
                                        ((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)
 #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 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 !!! */
 #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_FROM_LEVEL_TEMPLATE         863
 
-#define NUM_FILE_ELEMENTS              864
+#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_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 + 72)
+#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                (NUM_DRAWABLE_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_GRAPHIC_1                   (EL_FIRST_DUMMY + 25)
-#define EL_GRAPHIC_2                   (EL_FIRST_DUMMY + 26)
-#define EL_GRAPHIC_3                   (EL_FIRST_DUMMY + 27)
-#define EL_GRAPHIC_4                   (EL_FIRST_DUMMY + 28)
-#define EL_GRAPHIC_5                   (EL_FIRST_DUMMY + 29)
-#define EL_GRAPHIC_6                   (EL_FIRST_DUMMY + 30)
-#define EL_GRAPHIC_7                   (EL_FIRST_DUMMY + 31)
-#define EL_GRAPHIC_8                   (EL_FIRST_DUMMY + 32)
+#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 + 33)
+#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_STEEL_CHARS                (EL_FIRST_INTERNAL + 22)
-#define EL_INTERNAL_CASCADE_STEEL_CHARS_ACTIVE (EL_FIRST_INTERNAL + 23)
-#define EL_INTERNAL_CASCADE_CE                 (EL_FIRST_INTERNAL + 24)
-#define EL_INTERNAL_CASCADE_CE_ACTIVE          (EL_FIRST_INTERNAL + 25)
-#define EL_INTERNAL_CASCADE_GE                 (EL_FIRST_INTERNAL + 26)
-#define EL_INTERNAL_CASCADE_GE_ACTIVE          (EL_FIRST_INTERNAL + 27)
-#define EL_INTERNAL_CASCADE_REF                        (EL_FIRST_INTERNAL + 28)
-#define EL_INTERNAL_CASCADE_REF_ACTIVE         (EL_FIRST_INTERNAL + 29)
-#define EL_INTERNAL_CASCADE_USER               (EL_FIRST_INTERNAL + 30)
-#define EL_INTERNAL_CASCADE_USER_ACTIVE                (EL_FIRST_INTERNAL + 31)
-#define EL_INTERNAL_CASCADE_DYNAMIC            (EL_FIRST_INTERNAL + 32)
-#define EL_INTERNAL_CASCADE_DYNAMIC_ACTIVE     (EL_FIRST_INTERNAL + 33)
+#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 + 33)
+#define EL_INTERNAL_END                        (EL_FIRST_INTERNAL + 37)
 
-#define MAX_NUM_ELEMENTS               (EL_FIRST_INTERNAL + 34)
+#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_PART_1                  84
-#define ACTION_PART_2                  85
-#define ACTION_PART_3                  86
-#define ACTION_PART_4                  87
-#define ACTION_PART_5                  88
-#define ACTION_PART_6                  89
-#define ACTION_PART_7                  90
-#define ACTION_PART_8                  91
-#define ACTION_OTHER                   92
-
-#define NUM_ACTIONS                    93
+#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
 #define GFX_SPECIAL_ARG_DEFAULT                0
 #define GFX_SPECIAL_ARG_LOADING                1
 #define GFX_SPECIAL_ARG_TITLE_INITIAL  2
-#define GFX_SPECIAL_ARG_TITLE          3
-#define GFX_SPECIAL_ARG_MAIN           4
-#define GFX_SPECIAL_ARG_LEVELS         5
-#define GFX_SPECIAL_ARG_LEVELNR                6
-#define GFX_SPECIAL_ARG_SCORES         7
-#define GFX_SPECIAL_ARG_EDITOR         8
-#define GFX_SPECIAL_ARG_INFO           9
-#define GFX_SPECIAL_ARG_SETUP          10
-#define GFX_SPECIAL_ARG_PLAYING                11
-#define GFX_SPECIAL_ARG_DOOR           12
-#define GFX_SPECIAL_ARG_TAPE           13
-#define GFX_SPECIAL_ARG_PANEL          14
-#define GFX_SPECIAL_ARG_PREVIEW                15
-#define GFX_SPECIAL_ARG_CRUMBLED       16
-
-#define NUM_SPECIAL_GFX_ARGS           17
+#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_ARG_STEP_OFFSET            25
 #define GFX_ARG_STEP_XOFFSET           26
 #define GFX_ARG_STEP_YOFFSET           27
-#define GFX_ARG_STEP_FRAMES            28
-#define GFX_ARG_STEP_DELAY             29
-#define GFX_ARG_DIRECTION              30
-#define GFX_ARG_POSITION               31
-#define GFX_ARG_DRAW_XOFFSET           32
-#define GFX_ARG_DRAW_YOFFSET           33
-#define GFX_ARG_DRAW_MASKED            34
-#define GFX_ARG_ANIM_DELAY_FIXED       35
-#define GFX_ARG_ANIM_DELAY_RANDOM      36
-#define GFX_ARG_POST_DELAY_FIXED       37
-#define GFX_ARG_POST_DELAY_RANDOM      38
-#define GFX_ARG_NAME                   39
-#define GFX_ARG_SCALE_UP_FACTOR                40
-#define GFX_ARG_TILE_SIZE              41
-#define GFX_ARG_CLONE_FROM             42
-#define GFX_ARG_FADE_MODE              43
-#define GFX_ARG_FADE_DELAY             44
-#define GFX_ARG_POST_DELAY             45
-#define GFX_ARG_AUTO_DELAY             46
-#define GFX_ARG_ALIGN                  47
-#define GFX_ARG_VALIGN                 48
-#define GFX_ARG_SORT_PRIORITY          49
-#define GFX_ARG_CLASS                  50
-#define GFX_ARG_STYLE                  51
-#define GFX_ARG_ACTIVE_XOFFSET         52
-#define GFX_ARG_ACTIVE_YOFFSET         53
-#define GFX_ARG_PRESSED_XOFFSET                54
-#define GFX_ARG_PRESSED_YOFFSET                55
-
-#define NUM_GFX_ARGS                   56
+#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 FONT_INPUT_2_ACTIVE            24
 #define FONT_INPUT_1                   25
 #define FONT_INPUT_2                   26
-#define FONT_OPTION_OFF                        27
-#define FONT_OPTION_ON                 28
-#define FONT_VALUE_1                   29
-#define FONT_VALUE_2                   30
-#define FONT_VALUE_OLD                 31
-#define FONT_LEVEL_NUMBER_ACTIVE       32
-#define FONT_LEVEL_NUMBER              33
-#define FONT_TAPE_RECORDER             34
-#define FONT_GAME_INFO                 35
-#define FONT_INFO_ELEMENTS             36
-#define FONT_INFO_LEVELSET             37
-
-#define NUM_FONTS                      38
+#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               8
-#define NUM_GLOBAL_ANIM_PARTS          8
+#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    7
-#define GLOBAL_ANIM_ID_CONTROL_FIRST   (NUM_GLOBAL_ANIMS + 0)
-#define GLOBAL_ANIM_ID_CONTROL_LAST    (NUM_GLOBAL_ANIMS + 7)
+#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       7
-#define GLOBAL_ANIM_ID_PART_BASE       8
+#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_LOADING              1
 #define GAME_MODE_TITLE_INITIAL                2
-#define GAME_MODE_TITLE                        3
-#define GAME_MODE_MAIN                 4
-#define GAME_MODE_LEVELS               5
-#define GAME_MODE_LEVELNR              6
-#define GAME_MODE_SCORES               7
-#define GAME_MODE_EDITOR               8
-#define GAME_MODE_INFO                 9
-#define GAME_MODE_SETUP                        10
-#define GAME_MODE_PLAYING              11
-#define GAME_MODE_PSEUDO_DOOR          12
-#define GAME_MODE_PSEUDO_TAPE          13
-#define GAME_MODE_PSEUDO_PANEL         14
-#define GAME_MODE_PSEUDO_PREVIEW       15
-#define GAME_MODE_PSEUDO_CRUMBLED      16
-
-/* there are no special config file suffixes for these modes */
-#define GAME_MODE_PSEUDO_TYPENAME      17
-#define GAME_MODE_QUIT                 18
+#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
 /* program information and versioning definitions */
 #define PROGRAM_VERSION_MAJOR          4
 #define PROGRAM_VERSION_MINOR          0
-#define PROGRAM_VERSION_PATCH          0
-#define PROGRAM_VERSION_BUILD          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_EMAIL_STRING           "info@artsoft.org"
 #define PROGRAM_WEBSITE_STRING         "http://www.artsoft.org/"
-#define PROGRAM_COPYRIGHT_STRING       "Copyright \xa9""1995-2015 by Holger Schemel"
+#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 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_TEST                  0
-#define AUTOPLAY_PLAY                  1
-#define AUTOPLAY_FFWD                  2
+#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
@@ -2203,6 +2721,22 @@ struct MenuInfo
   int list_size[NUM_SPECIAL_GFX_ARGS];
   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];
@@ -2232,6 +2766,7 @@ struct DoorInfo
   int height;
   int step_offset;
   int step_delay;
+  int post_delay;
   int anim_mode;
 };
 
@@ -2283,6 +2818,8 @@ struct EditorSettingsInfo
   struct XY element_name;
 
   struct EditorTabsInfo tabs;
+
+  struct XY tooltip;
 };
 
 struct EditorGadgetInfo
@@ -2299,40 +2836,44 @@ struct EditorGadgetInfo
 
 struct EditorButtonInfo
 {
-  struct XY prev_level;
-  struct XY next_level;
-
-  struct XY properties;
-
-  struct XY draw_single;
-  struct XY draw_connected;
-  struct XY draw_line;
-  struct XY draw_arc;
-  struct XY draw_rectangle;
-  struct XY draw_filled_box;
-  struct XY rotate_up;
-  struct XY draw_text;
-  struct XY flood_fill;
-  struct XY rotate_left;
-  struct XY zoom_level;
-  struct XY rotate_right;
-  struct XY draw_random;
-  struct XY grab_brush;
-  struct XY rotate_down;
-  struct XY pick_element;
-
-  struct XY ce_copy_from;
-  struct XY ce_copy_to;
-  struct XY ce_swap;
-  struct XY ce_copy;
-  struct XY ce_paste;
-
-  struct XY undo;
-  struct XY conf;
-  struct XY save;
-  struct XY clear;
-  struct XY test;
-  struct XY exit;
+  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
@@ -2340,21 +2881,17 @@ struct EditorInputInfo
   struct XY level_number;
 };
 
-struct EditorPaletteElementInfo
-{
-  int x, y;
-  int tile_size;
-};
-
 struct EditorPaletteInfo
 {
   int x, y;
   int cols, rows;
   int tile_size;
+  boolean show_as_separate_screen;
+  boolean show_on_element_buttons;
 
-  struct EditorPaletteElementInfo element_left;
-  struct EditorPaletteElementInfo element_middle;
-  struct EditorPaletteElementInfo element_right;
+  struct XYTileSize element_left;
+  struct XYTileSize element_middle;
+  struct XYTileSize element_right;
 };
 
 struct EditorDrawingAreaInfo
@@ -2438,6 +2975,7 @@ 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 */
@@ -2452,6 +2990,7 @@ 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];
@@ -2538,6 +3077,14 @@ struct LevelInfo
   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 */
 
@@ -2545,7 +3092,10 @@ 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 */
 
@@ -2568,10 +3118,15 @@ struct GlobalInfo
   int num_toons;
 
   float frames_per_second;
+  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;
 };
 
@@ -2774,12 +3329,21 @@ 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
@@ -2817,15 +3381,19 @@ struct GraphicInfo
 
   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_frames;             /* optional step frames 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 */
@@ -2836,6 +3404,7 @@ struct GraphicInfo
   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 */
 
   int fade_mode;               /* optional setting for drawing title screens */
   int fade_delay;              /* optional setting for drawing title screens */
@@ -2923,13 +3492,12 @@ struct HelpAnimInfo
 };
 
 
-extern Bitmap                 *bitmap_db_store;
-extern Bitmap                 *bitmap_db_cross;
 extern Bitmap                 *bitmap_db_field;
 extern Bitmap                 *bitmap_db_panel;
 extern Bitmap                 *bitmap_db_door_1;
 extern Bitmap                 *bitmap_db_door_2;
-extern Bitmap                 *bitmap_db_toons;
+extern Bitmap                 *bitmap_db_store_1;
+extern Bitmap                 *bitmap_db_store_2;
 extern DrawBuffer             *fieldbuffer;
 extern DrawBuffer             *drawto_field;
 
@@ -3009,6 +3577,7 @@ 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;
@@ -3034,19 +3603,25 @@ 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_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_default;
+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_default;
+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_default;
+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;
@@ -3063,6 +3638,7 @@ 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;
@@ -3074,6 +3650,7 @@ 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[];