version number set to 4.1.1.1
[rocksndiamonds.git] / src / main.h
index f44d1e30e37d2fafe41e07ad5f71eb888c2342d4..b66da1d20e2ba4a116ba1692766e218d9d69c331 100644 (file)
@@ -24,6 +24,7 @@
 #include "game_em/game_em.h"
 #include "game_sp/game_sp.h"
 #include "game_mm/game_mm.h"
+#include "engines.h"
 
 #include "conf_gfx.h"  /* include auto-generated data structure definitions */
 #include "conf_snd.h"  /* include auto-generated data structure definitions */
@@ -75,6 +76,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_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_NEXT_FRAME(f, g)    (IS_NEW_FRAME(f, g) && (f) > 0)
 
 #define IS_LOOP_SOUND(s)       (sound_info[s].loop)
+#define IS_LOOP_MUSIC(s)       (music_info[s].loop)
 
 #define IS_SPECIAL_GFX_ARG(a)  ((a) >= 0 && (a) < NUM_SPECIAL_GFX_ARGS)
 
 #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_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_BEAMER_START             (EL_MM_START + 98)
-#define EL_MM_BEAMER_1                 (EL_MM_BEAMER_START + 0)
-#define EL_MM_BEAMER_2                 (EL_MM_BEAMER_START + 1)
-#define EL_MM_BEAMER_3                 (EL_MM_BEAMER_START + 2)
-#define EL_MM_BEAMER_4                 (EL_MM_BEAMER_START + 3)
-#define EL_MM_BEAMER_5                 (EL_MM_BEAMER_START + 4)
-#define EL_MM_BEAMER_6                 (EL_MM_BEAMER_START + 5)
-#define EL_MM_BEAMER_7                 (EL_MM_BEAMER_START + 6)
-#define EL_MM_BEAMER_8                 (EL_MM_BEAMER_START + 7)
-#define EL_MM_BEAMER_9                 (EL_MM_BEAMER_START + 8)
-#define EL_MM_BEAMER_10                        (EL_MM_BEAMER_START + 9)
-#define EL_MM_BEAMER_11                        (EL_MM_BEAMER_START + 10)
-#define EL_MM_BEAMER_12                        (EL_MM_BEAMER_START + 11)
-#define EL_MM_BEAMER_13                        (EL_MM_BEAMER_START + 12)
-#define EL_MM_BEAMER_14                        (EL_MM_BEAMER_START + 13)
-#define EL_MM_BEAMER_15                        (EL_MM_BEAMER_START + 14)
-#define EL_MM_BEAMER_16                        (EL_MM_BEAMER_START + 15)
-#define EL_MM_BEAMER_END               EL_MM_BEAMER_15
+#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_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_POLARISATOR_START                (EL_MM_START + 119)
-#define EL_MM_POLARISATOR_1            (EL_MM_POLARISATOR_START + 0)
-#define EL_MM_POLARISATOR_2            (EL_MM_POLARISATOR_START + 1)
-#define EL_MM_POLARISATOR_3            (EL_MM_POLARISATOR_START + 2)
-#define EL_MM_POLARISATOR_4            (EL_MM_POLARISATOR_START + 3)
-#define EL_MM_POLARISATOR_5            (EL_MM_POLARISATOR_START + 4)
-#define EL_MM_POLARISATOR_6            (EL_MM_POLARISATOR_START + 5)
-#define EL_MM_POLARISATOR_7            (EL_MM_POLARISATOR_START + 6)
-#define EL_MM_POLARISATOR_8            (EL_MM_POLARISATOR_START + 7)
-#define EL_MM_POLARISATOR_9            (EL_MM_POLARISATOR_START + 8)
-#define EL_MM_POLARISATOR_10           (EL_MM_POLARISATOR_START + 9)
-#define EL_MM_POLARISATOR_11           (EL_MM_POLARISATOR_START + 10)
-#define EL_MM_POLARISATOR_12           (EL_MM_POLARISATOR_START + 11)
-#define EL_MM_POLARISATOR_13           (EL_MM_POLARISATOR_START + 12)
-#define EL_MM_POLARISATOR_14           (EL_MM_POLARISATOR_START + 13)
-#define EL_MM_POLARISATOR_15           (EL_MM_POLARISATOR_START + 14)
-#define EL_MM_POLARISATOR_16           (EL_MM_POLARISATOR_START + 15)
-#define EL_MM_POLARISATOR_END          EL_MM_POLARISATOR_15
-#define EL_MM_POLARISATOR_CROSS_START  (EL_MM_START + 135)
-#define EL_MM_POLARISATOR_CROSS_1      (EL_MM_POLARISATOR_CROSS_START + 0)
-#define EL_MM_POLARISATOR_CROSS_2      (EL_MM_POLARISATOR_CROSS_START + 1)
-#define EL_MM_POLARISATOR_CROSS_3      (EL_MM_POLARISATOR_CROSS_START + 2)
-#define EL_MM_POLARISATOR_CROSS_4      (EL_MM_POLARISATOR_CROSS_START + 3)
-#define EL_MM_POLARISATOR_CROSS_END    EL_MM_POLARISATOR_CROSS_03
+#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_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_END                      (EL_DF_START2 + 355)
 
-#define EL_MM_BEAMER_RED_START         (EL_DF_START2 + 356)
-#define EL_MM_BEAMER_RED_1             (EL_MM_BEAMER_RED_START + 0)
-#define EL_MM_BEAMER_RED_2             (EL_MM_BEAMER_RED_START + 1)
-#define EL_MM_BEAMER_RED_3             (EL_MM_BEAMER_RED_START + 2)
-#define EL_MM_BEAMER_RED_4             (EL_MM_BEAMER_RED_START + 3)
-#define EL_MM_BEAMER_RED_5             (EL_MM_BEAMER_RED_START + 4)
-#define EL_MM_BEAMER_RED_6             (EL_MM_BEAMER_RED_START + 5)
-#define EL_MM_BEAMER_RED_7             (EL_MM_BEAMER_RED_START + 6)
-#define EL_MM_BEAMER_RED_8             (EL_MM_BEAMER_RED_START + 7)
-#define EL_MM_BEAMER_RED_9             (EL_MM_BEAMER_RED_START + 8)
-#define EL_MM_BEAMER_RED_10            (EL_MM_BEAMER_RED_START + 9)
-#define EL_MM_BEAMER_RED_11            (EL_MM_BEAMER_RED_START + 10)
-#define EL_MM_BEAMER_RED_12            (EL_MM_BEAMER_RED_START + 11)
-#define EL_MM_BEAMER_RED_13            (EL_MM_BEAMER_RED_START + 12)
-#define EL_MM_BEAMER_RED_14            (EL_MM_BEAMER_RED_START + 13)
-#define EL_MM_BEAMER_RED_15            (EL_MM_BEAMER_RED_START + 14)
-#define EL_MM_BEAMER_RED_16            (EL_MM_BEAMER_RED_START + 15)
-#define EL_MM_BEAMER_RED_END           EL_MM_BEAMER_RED_16
-#define EL_MM_BEAMER_YELLOW_START      (EL_DF_START2 + 372)
-#define EL_MM_BEAMER_YELLOW_1          (EL_MM_BEAMER_YELLOW_START + 0)
-#define EL_MM_BEAMER_YELLOW_2          (EL_MM_BEAMER_YELLOW_START + 1)
-#define EL_MM_BEAMER_YELLOW_3          (EL_MM_BEAMER_YELLOW_START + 2)
-#define EL_MM_BEAMER_YELLOW_4          (EL_MM_BEAMER_YELLOW_START + 3)
-#define EL_MM_BEAMER_YELLOW_5          (EL_MM_BEAMER_YELLOW_START + 4)
-#define EL_MM_BEAMER_YELLOW_6          (EL_MM_BEAMER_YELLOW_START + 5)
-#define EL_MM_BEAMER_YELLOW_7          (EL_MM_BEAMER_YELLOW_START + 6)
-#define EL_MM_BEAMER_YELLOW_8          (EL_MM_BEAMER_YELLOW_START + 7)
-#define EL_MM_BEAMER_YELLOW_9          (EL_MM_BEAMER_YELLOW_START + 8)
-#define EL_MM_BEAMER_YELLOW_10         (EL_MM_BEAMER_YELLOW_START + 9)
-#define EL_MM_BEAMER_YELLOW_11         (EL_MM_BEAMER_YELLOW_START + 10)
-#define EL_MM_BEAMER_YELLOW_12         (EL_MM_BEAMER_YELLOW_START + 11)
-#define EL_MM_BEAMER_YELLOW_13         (EL_MM_BEAMER_YELLOW_START + 12)
-#define EL_MM_BEAMER_YELLOW_14         (EL_MM_BEAMER_YELLOW_START + 13)
-#define EL_MM_BEAMER_YELLOW_15         (EL_MM_BEAMER_YELLOW_START + 14)
-#define EL_MM_BEAMER_YELLOW_16         (EL_MM_BEAMER_YELLOW_START + 15)
-#define EL_MM_BEAMER_YELLOW_END                EL_MM_BEAMER_YELLOW_16
-#define EL_MM_BEAMER_GREEN_START       (EL_DF_START2 + 388)
-#define EL_MM_BEAMER_GREEN_1           (EL_MM_BEAMER_GREEN_START + 0)
-#define EL_MM_BEAMER_GREEN_2           (EL_MM_BEAMER_GREEN_START + 1)
-#define EL_MM_BEAMER_GREEN_3           (EL_MM_BEAMER_GREEN_START + 2)
-#define EL_MM_BEAMER_GREEN_4           (EL_MM_BEAMER_GREEN_START + 3)
-#define EL_MM_BEAMER_GREEN_5           (EL_MM_BEAMER_GREEN_START + 4)
-#define EL_MM_BEAMER_GREEN_6           (EL_MM_BEAMER_GREEN_START + 5)
-#define EL_MM_BEAMER_GREEN_7           (EL_MM_BEAMER_GREEN_START + 6)
-#define EL_MM_BEAMER_GREEN_8           (EL_MM_BEAMER_GREEN_START + 7)
-#define EL_MM_BEAMER_GREEN_9           (EL_MM_BEAMER_GREEN_START + 8)
-#define EL_MM_BEAMER_GREEN_10          (EL_MM_BEAMER_GREEN_START + 9)
-#define EL_MM_BEAMER_GREEN_11          (EL_MM_BEAMER_GREEN_START + 10)
-#define EL_MM_BEAMER_GREEN_12          (EL_MM_BEAMER_GREEN_START + 11)
-#define EL_MM_BEAMER_GREEN_13          (EL_MM_BEAMER_GREEN_START + 12)
-#define EL_MM_BEAMER_GREEN_14          (EL_MM_BEAMER_GREEN_START + 13)
-#define EL_MM_BEAMER_GREEN_15          (EL_MM_BEAMER_GREEN_START + 14)
-#define EL_MM_BEAMER_GREEN_16          (EL_MM_BEAMER_GREEN_START + 15)
-#define EL_MM_BEAMER_GREEN_END         EL_MM_BEAMER_GREEN_16
-#define EL_MM_BEAMER_BLUE_START                (EL_DF_START2 + 404)
-#define EL_MM_BEAMER_BLUE_1            (EL_MM_BEAMER_BLUE_START + 0)
-#define EL_MM_BEAMER_BLUE_2            (EL_MM_BEAMER_BLUE_START + 1)
-#define EL_MM_BEAMER_BLUE_3            (EL_MM_BEAMER_BLUE_START + 2)
-#define EL_MM_BEAMER_BLUE_4            (EL_MM_BEAMER_BLUE_START + 3)
-#define EL_MM_BEAMER_BLUE_5            (EL_MM_BEAMER_BLUE_START + 4)
-#define EL_MM_BEAMER_BLUE_6            (EL_MM_BEAMER_BLUE_START + 5)
-#define EL_MM_BEAMER_BLUE_7            (EL_MM_BEAMER_BLUE_START + 6)
-#define EL_MM_BEAMER_BLUE_8            (EL_MM_BEAMER_BLUE_START + 7)
-#define EL_MM_BEAMER_BLUE_9            (EL_MM_BEAMER_BLUE_START + 8)
-#define EL_MM_BEAMER_BLUE_10           (EL_MM_BEAMER_BLUE_START + 9)
-#define EL_MM_BEAMER_BLUE_11           (EL_MM_BEAMER_BLUE_START + 10)
-#define EL_MM_BEAMER_BLUE_12           (EL_MM_BEAMER_BLUE_START + 11)
-#define EL_MM_BEAMER_BLUE_13           (EL_MM_BEAMER_BLUE_START + 12)
-#define EL_MM_BEAMER_BLUE_14           (EL_MM_BEAMER_BLUE_START + 13)
-#define EL_MM_BEAMER_BLUE_15           (EL_MM_BEAMER_BLUE_START + 14)
-#define EL_MM_BEAMER_BLUE_16           (EL_MM_BEAMER_BLUE_START + 15)
-#define EL_MM_BEAMER_BLUE_END          EL_MM_BEAMER_BLUE_16
+#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 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_PART_9                  92
-#define ACTION_PART_10                 93
-#define ACTION_PART_11                 94
-#define ACTION_PART_12                 95
-#define ACTION_PART_13                 96
-#define ACTION_PART_14                 97
-#define ACTION_PART_15                 98
-#define ACTION_PART_16                 99
-#define ACTION_PART_17                 100
-#define ACTION_PART_18                 101
-#define ACTION_PART_19                 102
-#define ACTION_PART_20                 103
-#define ACTION_PART_21                 104
-#define ACTION_PART_22                 105
-#define ACTION_PART_23                 106
-#define ACTION_PART_24                 107
-#define ACTION_PART_25                 108
-#define ACTION_PART_26                 109
-#define ACTION_PART_27                 110
-#define ACTION_PART_28                 111
-#define ACTION_PART_29                 112
-#define ACTION_PART_30                 113
-#define ACTION_PART_31                 114
-#define ACTION_PART_32                 115
-#define ACTION_OTHER                   116
-
-#define NUM_ACTIONS                    117
+#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_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
+#define GFX_ARG_INIT_EVENT_ACTION      42
+#define GFX_ARG_ANIM_EVENT             43
+#define GFX_ARG_ANIM_EVENT_ACTION      44
+#define GFX_ARG_NAME                   45
+#define GFX_ARG_SCALE_UP_FACTOR                46
+#define GFX_ARG_TILE_SIZE              47
+#define GFX_ARG_CLONE_FROM             48
+#define GFX_ARG_FADE_MODE              49
+#define GFX_ARG_FADE_DELAY             50
+#define GFX_ARG_POST_DELAY             51
+#define GFX_ARG_AUTO_DELAY             52
+#define GFX_ARG_ALIGN                  53
+#define GFX_ARG_VALIGN                 54
+#define GFX_ARG_SORT_PRIORITY          55
+#define GFX_ARG_CLASS                  56
+#define GFX_ARG_STYLE                  57
+#define GFX_ARG_ACTIVE_XOFFSET         58
+#define GFX_ARG_ACTIVE_YOFFSET         59
+#define GFX_ARG_PRESSED_XOFFSET                60
+#define GFX_ARG_PRESSED_YOFFSET                61
+
+#define NUM_GFX_ARGS                   62
 
 
 /* values for sound configuration suffixes */
 #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 FONT_VALUE_OLD_NARROW          33
+#define FONT_VALUE_OLD                 34
+#define FONT_VALUE_NARROW              35
+#define FONT_LEVEL_NUMBER_ACTIVE       36
+#define FONT_LEVEL_NUMBER              37
+#define FONT_TAPE_RECORDER             38
+#define FONT_GAME_INFO                 39
+#define FONT_INFO_ELEMENTS             40
+#define FONT_INFO_LEVELSET             41
+#define FONT_MAIN_NETWORK_PLAYERS      42
+
+#define NUM_FONTS                      43
 #define NUM_INITIAL_FONTS              4
 
 /* values for toon animation configuration */
 
 
 /* program information and versioning definitions */
-#define PROGRAM_VERSION_MAJOR          4
-#define PROGRAM_VERSION_MINOR          0
+#define PROGRAM_VERSION_SUPER          4
+#define PROGRAM_VERSION_MAJOR          1
+#define PROGRAM_VERSION_MINOR          1
 #define PROGRAM_VERSION_PATCH          1
-#define PROGRAM_VERSION_BUILD          5
 #define PROGRAM_VERSION_EXTRA          ""
 
 #define PROGRAM_TITLE_STRING           "Rocks'n'Diamonds"
 #define GAME_VERSION_2_0               FILE_VERSION_2_0
 #define GAME_VERSION_3_0               FILE_VERSION_3_0
 
-#define GAME_VERSION_ACTUAL            VERSION_IDENT(PROGRAM_VERSION_MAJOR, \
+#define GAME_VERSION_ACTUAL            VERSION_IDENT(PROGRAM_VERSION_SUPER, \
+                                                     PROGRAM_VERSION_MAJOR, \
                                                      PROGRAM_VERSION_MINOR, \
-                                                     PROGRAM_VERSION_PATCH, \
-                                                     PROGRAM_VERSION_BUILD)
+                                                     PROGRAM_VERSION_PATCH)
 
 /* values for game_emulation */
 #define EMU_NONE                       0
@@ -2619,6 +2641,13 @@ struct MenuMainButtonInfo
 
   struct MenuPosInfo prev_level;
   struct MenuPosInfo next_level;
+
+  struct MenuPosInfo first_level;
+  struct MenuPosInfo last_level;
+  struct MenuPosInfo level_number;
+
+  struct MenuPosInfo insert_solution;
+  struct MenuPosInfo play_solution;
 };
 
 struct MenuMainTextInfo
@@ -2658,6 +2687,9 @@ struct MenuMainInfo
   struct MenuMainButtonInfo button;
   struct MenuMainTextInfo text;
   struct MenuMainInputInfo input;
+
+  struct TextPosInfo preview_players;
+  struct TextPosInfo network_players;
 };
 
 struct TitleFadingInfo
@@ -2705,6 +2737,35 @@ struct MenuInfo
   int list_size[NUM_SPECIAL_GFX_ARGS];
   int list_size_info[NUM_SPECIAL_GFX_INFO_ARGS];
 
+  int left_spacing[NUM_SPECIAL_GFX_ARGS];
+  int left_spacing_info[NUM_SPECIAL_GFX_INFO_ARGS];
+  int left_spacing_setup[NUM_SPECIAL_GFX_SETUP_ARGS];
+  int right_spacing[NUM_SPECIAL_GFX_ARGS];
+  int right_spacing_info[NUM_SPECIAL_GFX_INFO_ARGS];
+  int right_spacing_setup[NUM_SPECIAL_GFX_SETUP_ARGS];
+  int top_spacing[NUM_SPECIAL_GFX_ARGS];
+  int top_spacing_info[NUM_SPECIAL_GFX_INFO_ARGS];
+  int top_spacing_setup[NUM_SPECIAL_GFX_SETUP_ARGS];
+  int bottom_spacing[NUM_SPECIAL_GFX_ARGS];
+  int bottom_spacing_info[NUM_SPECIAL_GFX_INFO_ARGS];
+  int bottom_spacing_setup[NUM_SPECIAL_GFX_SETUP_ARGS];
+
+  int paragraph_spacing[NUM_SPECIAL_GFX_ARGS];
+  int paragraph_spacing_info[NUM_SPECIAL_GFX_INFO_ARGS];
+  int paragraph_spacing_setup[NUM_SPECIAL_GFX_SETUP_ARGS];
+  int headline1_spacing[NUM_SPECIAL_GFX_ARGS];
+  int headline1_spacing_info[NUM_SPECIAL_GFX_INFO_ARGS];
+  int headline1_spacing_setup[NUM_SPECIAL_GFX_SETUP_ARGS];
+  int headline2_spacing[NUM_SPECIAL_GFX_ARGS];
+  int headline2_spacing_info[NUM_SPECIAL_GFX_INFO_ARGS];
+  int headline2_spacing_setup[NUM_SPECIAL_GFX_SETUP_ARGS];
+  int line_spacing[NUM_SPECIAL_GFX_ARGS];
+  int line_spacing_info[NUM_SPECIAL_GFX_INFO_ARGS];
+  int line_spacing_setup[NUM_SPECIAL_GFX_SETUP_ARGS];
+  int extra_spacing[NUM_SPECIAL_GFX_ARGS];
+  int extra_spacing_info[NUM_SPECIAL_GFX_INFO_ARGS];
+  int extra_spacing_setup[NUM_SPECIAL_GFX_SETUP_ARGS];
+
   struct TitleFadingInfo enter_menu;
   struct TitleFadingInfo leave_menu;
   struct TitleFadingInfo enter_screen[NUM_SPECIAL_GFX_ARGS];
@@ -2734,6 +2795,7 @@ struct DoorInfo
   int height;
   int step_offset;
   int step_delay;
+  int post_delay;
   int anim_mode;
 };
 
@@ -2785,6 +2847,8 @@ struct EditorSettingsInfo
   struct XY element_name;
 
   struct EditorTabsInfo tabs;
+
+  struct XY tooltip;
 };
 
 struct EditorGadgetInfo
@@ -2904,11 +2968,6 @@ struct EnvelopeInfo
   char text[MAX_ENVELOPE_TEXT_LEN + 1];
 };
 
-struct LevelSetInfo
-{
-  int music[MAX_LEVELS];
-};
-
 struct LevelFileInfo
 {
   int nr;
@@ -3036,6 +3095,7 @@ struct LevelInfo
   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 solved_by_one_player;        /* level is solved if one player enters exit */
 
   boolean continuous_snapping; /* repeated snapping without releasing key */
   boolean block_snap_field;    /* snapping blocks field to show animation */
@@ -3046,6 +3106,9 @@ struct LevelInfo
   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 */
@@ -3065,6 +3128,17 @@ struct LevelInfo
   boolean use_action_after_change_bug;
 };
 
+struct NetworkLevelInfo
+{
+  char *leveldir_identifier;           /* network levelset identifier */
+
+  struct LevelFileInfo file_info;      /* file info for level file */
+  struct LevelFileInfo tmpl_info;      /* file info for level template */
+
+  boolean use_network_level_files;     /* use levels from network server */
+  boolean use_custom_template;         /* use CEs from level template */
+};
+
 struct GlobalInfo
 {
   char *autoplay_leveldir;
@@ -3351,7 +3425,9 @@ struct GraphicInfo
   int post_delay_random;       /* animations (pause before next animation) */
 
   int init_event;              /* optional event triggering animation start */
+  int init_event_action;       /* optional action called on animation start */
   int anim_event;              /* optional event triggering animation end   */
+  int anim_event_action;       /* optional action called on animation end   */
 
   int step_offset;             /* optional step offset of toon animations */
   int step_xoffset;            /* optional step offset of toon animations */
@@ -3556,7 +3632,6 @@ extern boolean                    network_player_action_received;
 
 extern int                     graphics_action_mapping[];
 
-extern struct LevelSetInfo     levelset;
 extern struct LevelInfo                level, level_template;
 extern struct HiScore          highscore[];
 extern struct TapeInfo         tape;