moved workaround for BD runtime elements in editor to separate function
[rocksndiamonds.git] / src / editor.c
index 4411b1996cc7a8f802395696869bf2f82558ab33..6ec52ee30ac21c4100f3120c80d7c9d733b53696 100644 (file)
 
 #define ED_SETTINGS_LEVEL_TABS_X       (editor.settings.tabs.x)
 #define ED_SETTINGS_LEVEL_TABS_Y       (editor.settings.tabs.y)
+#define ED_SETTINGS_ENGINE_TABS_X      (editor.settings.tabs.x)
+#define ED_SETTINGS_ENGINE_TABS_Y      (editor.settings.tabs.y +       \
+                                        ED_TABBUTTON_YSIZE +           \
+                                        ED_GADGET_TINY_DISTANCE +      \
+                                        ED_TAB_BAR_HEIGHT +            \
+                                        ED_GADGET_TEXT_DISTANCE)
 #define ED_SETTINGS_ELEMENT_TABS_X     (editor.settings.tabs.x)
 #define ED_SETTINGS_ELEMENT_TABS_Y     (editor.settings.tabs.y +       \
                                         editor.settings.tabs.yoffset2)
                                         ED_SETTINGS_TABS_YOFFSET +     \
                                         getFontHeight(FONT_TEXT_1) +   \
                                         ED_GADGET_TEXT_DISTANCE)
+#define ED_ENGINE_TABS_XSTART          (ED_SETTINGS_ENGINE_TABS_X)
+#define ED_ENGINE_TABS_YSTART          (ED_SETTINGS_ENGINE_TABS_Y)
+#define ED_ENGINE_SETTINGS_XSTART      (ED_SETTINGS_ENGINE_TABS_X +    \
+                                        ED_SETTINGS_TABS_XOFFSET)
+#define ED_ENGINE_SETTINGS_YSTART      (ED_SETTINGS_ENGINE_TABS_Y +    \
+                                        ED_TABBUTTON_YSIZE +           \
+                                        ED_GADGET_TINY_DISTANCE +      \
+                                        ED_TAB_BAR_HEIGHT +            \
+                                        ED_SETTINGS_TABS_YOFFSET +     \
+                                        getFontHeight(FONT_TEXT_1) +   \
+                                        ED_GADGET_TEXT_DISTANCE)
 #define ED_ELEMENT_TABS_XSTART         (ED_SETTINGS_ELEMENT_TABS_X)
 #define ED_ELEMENT_TABS_YSTART         (ED_SETTINGS_ELEMENT_TABS_Y)
 #define ED_ELEMENT_SETTINGS_XSTART     (ED_SETTINGS_ELEMENT_TABS_X +   \
 #define ED_POS_LEVEL_TABS_LAST         (2 * ED_POS_RANGE - 1)
 #define ED_POS_LEVEL_SETTINGS_FIRST    (2 * ED_POS_RANGE)
 #define ED_POS_LEVEL_SETTINGS_LAST     (3 * ED_POS_RANGE - 1)
-#define ED_POS_ELEMENT_TABS_FIRST      (3 * ED_POS_RANGE)
-#define ED_POS_ELEMENT_TABS_LAST       (4 * ED_POS_RANGE - 1)
-#define ED_POS_ELEMENT_SETTINGS_FIRST  (4 * ED_POS_RANGE)
-#define ED_POS_ELEMENT_SETTINGS_LAST   (5 * ED_POS_RANGE - 1)
+#define ED_POS_ENGINE_TABS_FIRST       (3 * ED_POS_RANGE)
+#define ED_POS_ENGINE_TABS_LAST                (4 * ED_POS_RANGE - 1)
+#define ED_POS_ENGINE_SETTINGS_FIRST   (4 * ED_POS_RANGE)
+#define ED_POS_ENGINE_SETTINGS_LAST    (5 * ED_POS_RANGE - 1)
+#define ED_POS_ELEMENT_TABS_FIRST      (5 * ED_POS_RANGE)
+#define ED_POS_ELEMENT_TABS_LAST       (6 * ED_POS_RANGE - 1)
+#define ED_POS_ELEMENT_SETTINGS_FIRST  (6 * ED_POS_RANGE)
+#define ED_POS_ELEMENT_SETTINGS_LAST   (7 * ED_POS_RANGE - 1)
 
 #define ED_LEVEL_TABS_XPOS(n)          (ED_POS_LEVEL_TABS_FIRST + (n))
 #define ED_LEVEL_TABS_YPOS(n)          (ED_POS_LEVEL_TABS_FIRST + (n))
 #define ED_LEVEL_SETTINGS_XPOS(n)      (ED_POS_LEVEL_SETTINGS_FIRST + (n))
 #define ED_LEVEL_SETTINGS_YPOS(n)      (ED_POS_LEVEL_SETTINGS_FIRST + (n))
 
+#define ED_ENGINE_TABS_XPOS(n)         (ED_POS_ENGINE_TABS_FIRST + (n))
+#define ED_ENGINE_TABS_YPOS(n)         (ED_POS_ENGINE_TABS_FIRST + (n))
+
+#define ED_ENGINE_SETTINGS_XPOS(n)     (ED_POS_ENGINE_SETTINGS_FIRST + (n))
+#define ED_ENGINE_SETTINGS_YPOS(n)     (ED_POS_ENGINE_SETTINGS_FIRST + (n))
+
 #define ED_ELEMENT_TABS_XPOS(n)                (ED_POS_ELEMENT_TABS_FIRST + (n))
 #define ED_ELEMENT_TABS_YPOS(n)                (ED_POS_ELEMENT_TABS_FIRST + (n))
 
                                       (n) <= ED_POS_LEVEL_TABS_LAST)
 #define IS_POS_LEVEL_SETTINGS(n)      ((n) >= ED_POS_LEVEL_SETTINGS_FIRST && \
                                       (n) <= ED_POS_LEVEL_SETTINGS_LAST)
+#define IS_POS_ENGINE_TABS(n)        ((n) >= ED_POS_ENGINE_TABS_FIRST && \
+                                      (n) <= ED_POS_ENGINE_TABS_LAST)
+#define IS_POS_ENGINE_SETTINGS(n)     ((n) >= ED_POS_ENGINE_SETTINGS_FIRST && \
+                                      (n) <= ED_POS_ENGINE_SETTINGS_LAST)
 #define IS_POS_ELEMENT_TABS(n)       ((n) >= ED_POS_ELEMENT_TABS_FIRST && \
                                       (n) <= ED_POS_ELEMENT_TABS_LAST)
 #define IS_POS_ELEMENT_SETTINGS(n)    ((n) >= ED_POS_ELEMENT_SETTINGS_FIRST && \
 
 #define ED_LEVEL_TABS_LINE(n)          ((n) - ED_POS_LEVEL_TABS_FIRST)
 #define ED_LEVEL_SETTINGS_LINE(n)      ((n) - ED_POS_LEVEL_SETTINGS_FIRST)
+#define ED_ENGINE_TABS_LINE(n)         ((n) - ED_POS_ENGINE_TABS_FIRST)
+#define ED_ENGINE_SETTINGS_LINE(n)     ((n) - ED_POS_ENGINE_SETTINGS_FIRST)
 #define ED_ELEMENT_TABS_LINE(n)                ((n) - ED_POS_ELEMENT_TABS_FIRST)
 #define ED_ELEMENT_SETTINGS_LINE(n)    ((n) - ED_POS_ELEMENT_SETTINGS_FIRST)
 
 #define ED_LEVEL_SETTINGS_Y(n)         (ED_LEVEL_SETTINGS_YSTART +     \
                                         (n) * ED_SETTINGS_YOFFSET)
 
+#define ED_ENGINE_TABS_X(n)            (ED_ENGINE_TABS_XSTART +        \
+                                        (n) * ED_SETTINGS_TABS_XOFFSET)
+#define ED_ENGINE_TABS_Y(n)            (ED_ENGINE_TABS_YSTART +        \
+                                        (n) * ED_SETTINGS_TABS_YOFFSET)
+
+#define ED_ENGINE_SETTINGS_X(n)                (ED_ENGINE_SETTINGS_XSTART +    \
+                                        (n) * ED_SETTINGS_XOFFSET)
+#define ED_ENGINE_SETTINGS_Y(n)                (ED_ENGINE_SETTINGS_YSTART +    \
+                                        (n) * ED_SETTINGS_YOFFSET)
+
 #define ED_ELEMENT_TABS_X(n)           (ED_ELEMENT_TABS_XSTART +       \
                                         (n) * ED_SETTINGS_TABS_XOFFSET)
 #define ED_ELEMENT_TABS_Y(n)           (ED_ELEMENT_TABS_YSTART +       \
 #define ED_POS_TO_LEVEL_SETTINGS_Y(n)  \
   (ED_LEVEL_SETTINGS_Y(ED_LEVEL_SETTINGS_LINE(n)))
 
+#define ED_POS_TO_ENGINE_TABS_X(n)     \
+  (ED_ENGINE_TABS_X(ED_ENGINE_TABS_LINE(n)))
+#define ED_POS_TO_ENGINE_TABS_Y(n)     \
+  (ED_ENGINE_TABS_Y(ED_ENGINE_TABS_LINE(n)))
+
+#define ED_POS_TO_ENGINE_SETTINGS_X(n) \
+  (ED_ENGINE_SETTINGS_X(ED_ENGINE_SETTINGS_LINE(n)))
+#define ED_POS_TO_ENGINE_SETTINGS_Y(n) \
+  (ED_ENGINE_SETTINGS_Y(ED_ENGINE_SETTINGS_LINE(n)))
+
 #define ED_POS_TO_ELEMENT_TABS_X(n)    \
   (ED_ELEMENT_TABS_X(ED_ELEMENT_TABS_LINE(n)))
 #define ED_POS_TO_ELEMENT_TABS_Y(n)    \
                                         ED_POS_TO_LEVEL_TABS_X(n) : \
                                         IS_POS_LEVEL_SETTINGS(n) ?     \
                                         ED_POS_TO_LEVEL_SETTINGS_X(n) : \
+                                        IS_POS_ENGINE_TABS(n) ?        \
+                                        ED_POS_TO_ENGINE_TABS_X(n) : \
+                                        IS_POS_ENGINE_SETTINGS(n) ?    \
+                                        ED_POS_TO_ENGINE_SETTINGS_X(n) : \
                                         IS_POS_ELEMENT_TABS(n) ?       \
                                         ED_POS_TO_ELEMENT_TABS_X(n) : \
                                         IS_POS_ELEMENT_SETTINGS(n) ?   \
                                         ED_POS_TO_LEVEL_TABS_Y(n) : \
                                         IS_POS_LEVEL_SETTINGS(n) ?     \
                                         ED_POS_TO_LEVEL_SETTINGS_Y(n) : \
+                                        IS_POS_ENGINE_TABS(n) ?        \
+                                        ED_POS_TO_ENGINE_TABS_Y(n) : \
+                                        IS_POS_ENGINE_SETTINGS(n) ?    \
+                                        ED_POS_TO_ENGINE_SETTINGS_Y(n) : \
                                         IS_POS_ELEMENT_TABS(n) ?       \
                                         ED_POS_TO_ELEMENT_TABS_Y(n) : \
                                         IS_POS_ELEMENT_SETTINGS(n) ?   \
@@ -557,15 +618,46 @@ enum
   GADGET_ID_ANDROID_CONTENT,
   GADGET_ID_AMOEBA_CONTENT,
   GADGET_ID_BD_SNAP_ELEMENT,
+  GADGET_ID_BD_MAGIC_WALL_DIAMOND_TO,
+  GADGET_ID_BD_MAGIC_WALL_ROCK_TO,
+  GADGET_ID_BD_MAGIC_WALL_MEGA_ROCK_TO,
+  GADGET_ID_BD_MAGIC_WALL_NUT_TO,
+  GADGET_ID_BD_MAGIC_WALL_NITRO_PACK_TO,
+  GADGET_ID_BD_MAGIC_WALL_FLYING_DIAMOND_TO,
+  GADGET_ID_BD_MAGIC_WALL_FLYING_ROCK_TO,
   GADGET_ID_BD_AMOEBA_CONTENT_TOO_BIG,
   GADGET_ID_BD_AMOEBA_CONTENT_ENCLOSED,
   GADGET_ID_BD_AMOEBA_2_CONTENT_TOO_BIG,
   GADGET_ID_BD_AMOEBA_2_CONTENT_ENCLOSED,
   GADGET_ID_BD_AMOEBA_2_CONTENT_EXPLODING,
   GADGET_ID_BD_AMOEBA_2_CONTENT_LOOKS_LIKE,
+  GADGET_ID_BD_SLIME_EATS_ELEMENT_1,
+  GADGET_ID_BD_SLIME_CONVERTS_TO_ELEMENT_1,
+  GADGET_ID_BD_SLIME_EATS_ELEMENT_2,
+  GADGET_ID_BD_SLIME_CONVERTS_TO_ELEMENT_2,
+  GADGET_ID_BD_SLIME_EATS_ELEMENT_3,
+  GADGET_ID_BD_SLIME_CONVERTS_TO_ELEMENT_3,
   GADGET_ID_BD_ACID_EATS_ELEMENT,
   GADGET_ID_BD_ACID_TURNS_TO_ELEMENT,
   GADGET_ID_BD_BITER_EATS_ELEMENT,
+  GADGET_ID_BD_BLADDER_CONVERTS_BY_ELEMENT,
+  GADGET_ID_BD_NUT_CONTENT,
+  GADGET_ID_BD_EXPANDING_WALL_LOOKS_LIKE,
+  GADGET_ID_BD_SAND_LOOKS_LIKE,
+  GADGET_ID_BD_ROCK_TURNS_TO_ON_FALLING,
+  GADGET_ID_BD_ROCK_TURNS_TO_ON_IMPACT,
+  GADGET_ID_BD_DIAMOND_TURNS_TO_ON_FALLING,
+  GADGET_ID_BD_DIAMOND_TURNS_TO_ON_IMPACT,
+  GADGET_ID_BD_FIREFLY_EXPLODES_TO,
+  GADGET_ID_BD_FIREFLY_2_EXPLODES_TO,
+  GADGET_ID_BD_BUTTERFLY_EXPLODES_TO,
+  GADGET_ID_BD_BUTTERFLY_2_EXPLODES_TO,
+  GADGET_ID_BD_STONEFLY_EXPLODES_TO,
+  GADGET_ID_BD_DRAGONFLY_EXPLODES_TO,
+  GADGET_ID_BD_DIAMOND_BIRTH_TURNS_TO,
+  GADGET_ID_BD_BOMB_EXPLOSION_TURNS_TO,
+  GADGET_ID_BD_NITRO_EXPLOSION_TURNS_TO,
+  GADGET_ID_BD_EXPLOSION_TURNS_TO,
   GADGET_ID_START_ELEMENT,
   GADGET_ID_ARTWORK_ELEMENT,
   GADGET_ID_EXPLOSION_ELEMENT,
@@ -588,6 +680,13 @@ enum
   GADGET_ID_LEVEL_AUTHOR,
   GADGET_ID_LEVELSET_NAME,
   GADGET_ID_LEVELSET_AUTHOR,
+  GADGET_ID_BD_COLOR_TEXT_B,
+  GADGET_ID_BD_COLOR_TEXT_0,
+  GADGET_ID_BD_COLOR_TEXT_1,
+  GADGET_ID_BD_COLOR_TEXT_2,
+  GADGET_ID_BD_COLOR_TEXT_3,
+  GADGET_ID_BD_COLOR_TEXT_4,
+  GADGET_ID_BD_COLOR_TEXT_5,
   GADGET_ID_ELEMENT_NAME,
 
   // text area identifiers
@@ -599,10 +698,19 @@ enum
   GADGET_ID_TIME_OR_STEPS,
   GADGET_ID_TIME_SCORE_BASE,
   GADGET_ID_GAME_ENGINE_TYPE,
-  GADGET_ID_BD_SCHEDULING_TYPE,
   GADGET_ID_LEVELSET_SAVE_MODE,
+  GADGET_ID_BD_SCHEDULING_TYPE,
+  GADGET_ID_BD_COLOR_TYPE,
+  GADGET_ID_BD_COLOR_C64_B,
+  GADGET_ID_BD_COLOR_C64_0,
+  GADGET_ID_BD_COLOR_C64_1,
+  GADGET_ID_BD_COLOR_C64_2,
+  GADGET_ID_BD_COLOR_C64_3,
+  GADGET_ID_BD_COLOR_C64_4,
+  GADGET_ID_BD_COLOR_C64_5,
   GADGET_ID_WIND_DIRECTION,
   GADGET_ID_PLAYER_SPEED,
+  GADGET_ID_BD_GRAVITY_DIRECTION,
   GADGET_ID_MM_BALL_CHOICE_MODE,
   GADGET_ID_CUSTOM_WALK_TO_ACTION,
   GADGET_ID_CUSTOM_EXPLOSION_TYPE,
@@ -636,6 +744,8 @@ enum
   GADGET_ID_LEVELCONFIG_LEVELSET,
   GADGET_ID_LEVELCONFIG_EDITOR,
   GADGET_ID_LEVELCONFIG_ENGINE,
+  GADGET_ID_ENGINECONFIG_CONFIG,
+  GADGET_ID_ENGINECONFIG_COLORS,
   GADGET_ID_PROPERTIES_INFO,
   GADGET_ID_PROPERTIES_CONFIG,
   GADGET_ID_PROPERTIES_CONFIG_1,
@@ -646,6 +756,7 @@ enum
   GADGET_ID_SAVE_LEVELSET,
   GADGET_ID_ADD_CHANGE_PAGE,
   GADGET_ID_DEL_CHANGE_PAGE,
+  GADGET_ID_BD_SET_RANDOM_COLORS,
 
   // graphicbutton identifiers
 
@@ -683,7 +794,6 @@ enum
   GADGET_ID_BD_LINE_SHIFTING_BORDERS,
   GADGET_ID_BD_SCAN_FIRST_AND_LAST_ROW,
   GADGET_ID_BD_SHORT_EXPLOSIONS,
-  GADGET_ID_BD_GRAVITY_AFFECTS_ALL,
   GADGET_ID_STICK_ELEMENT,
   GADGET_ID_EM_SLIPPERY_GEMS,
   GADGET_ID_EM_EXPLODES_BY_FIRE,
@@ -718,8 +828,10 @@ enum
   GADGET_ID_BD_DIAGONAL_MOVEMENTS,
   GADGET_ID_BD_TOPMOST_PLAYER_ACTIVE,
   GADGET_ID_BD_PUSH_MEGA_ROCK_WITH_SWEET,
+  GADGET_ID_BD_MAGIC_WALL_ZERO_INFINITE,
   GADGET_ID_BD_MAGIC_WALL_WAIT_HATCHING,
   GADGET_ID_BD_MAGIC_WALL_STOPS_AMOEBA,
+  GADGET_ID_BD_MAGIC_WALL_BREAK_SCAN,
   GADGET_ID_BD_AMOEBA_WAIT_FOR_HATCHING,
   GADGET_ID_BD_AMOEBA_START_IMMEDIATELY,
   GADGET_ID_BD_AMOEBA_2_EXPLODE_BY_AMOEBA,
@@ -728,6 +840,17 @@ enum
   GADGET_ID_BD_VOODOO_DIES_BY_ROCK,
   GADGET_ID_BD_VOODOO_VANISH_BY_EXPLOSION,
   GADGET_ID_BD_SLIME_IS_PREDICTABLE,
+  GADGET_ID_BD_CHANGE_EXPANDING_WALL,
+  GADGET_ID_BD_REPLICATORS_ACTIVE,
+  GADGET_ID_BD_CONVEYOR_BELTS_ACTIVE,
+  GADGET_ID_BD_CONVEYOR_BELTS_CHANGED,
+  GADGET_ID_BD_WATER_CANNOT_FLOW_DOWN,
+  GADGET_ID_BD_HAMMER_WALLS_REAPPEAR,
+  GADGET_ID_BD_INFINITE_ROCKETS,
+  GADGET_ID_BD_CREATURES_START_BACKWARDS,
+  GADGET_ID_BD_CREATURES_TURN_ON_HATCHING,
+  GADGET_ID_BD_GRAVITY_SWITCH_ACTIVE,
+  GADGET_ID_BD_GRAVITY_AFFECTS_ALL,
   GADGET_ID_ENVELOPE_AUTOWRAP,
   GADGET_ID_ENVELOPE_CENTERED,
   GADGET_ID_MM_LASER_RED,
@@ -888,6 +1011,13 @@ enum
   ED_TEXTINPUT_ID_LEVEL_AUTHOR,
   ED_TEXTINPUT_ID_LEVELSET_NAME,
   ED_TEXTINPUT_ID_LEVELSET_AUTHOR,
+  ED_TEXTINPUT_ID_BD_COLOR_TEXT_B,
+  ED_TEXTINPUT_ID_BD_COLOR_TEXT_0,
+  ED_TEXTINPUT_ID_BD_COLOR_TEXT_1,
+  ED_TEXTINPUT_ID_BD_COLOR_TEXT_2,
+  ED_TEXTINPUT_ID_BD_COLOR_TEXT_3,
+  ED_TEXTINPUT_ID_BD_COLOR_TEXT_4,
+  ED_TEXTINPUT_ID_BD_COLOR_TEXT_5,
   ED_TEXTINPUT_ID_ELEMENT_NAME,
 
   ED_NUM_TEXTINPUT
@@ -899,6 +1029,9 @@ enum
 #define ED_TEXTINPUT_ID_LEVELSET_FIRST ED_TEXTINPUT_ID_LEVELSET_NAME
 #define ED_TEXTINPUT_ID_LEVELSET_LAST  ED_TEXTINPUT_ID_LEVELSET_AUTHOR
 
+#define ED_TEXTINPUT_ID_COLORS_FIRST   ED_TEXTINPUT_ID_BD_COLOR_TEXT_B
+#define ED_TEXTINPUT_ID_COLORS_LAST    ED_TEXTINPUT_ID_BD_COLOR_TEXT_5
+
 // values for text area gadgets
 enum
 {
@@ -916,10 +1049,19 @@ enum
   ED_SELECTBOX_ID_TIME_OR_STEPS,
   ED_SELECTBOX_ID_TIME_SCORE_BASE,
   ED_SELECTBOX_ID_GAME_ENGINE_TYPE,
-  ED_SELECTBOX_ID_BD_SCHEDULING_TYPE,
   ED_SELECTBOX_ID_LEVELSET_SAVE_MODE,
+  ED_SELECTBOX_ID_BD_SCHEDULING_TYPE,
+  ED_SELECTBOX_ID_BD_COLOR_TYPE,
+  ED_SELECTBOX_ID_BD_COLOR_C64_B,
+  ED_SELECTBOX_ID_BD_COLOR_C64_0,
+  ED_SELECTBOX_ID_BD_COLOR_C64_1,
+  ED_SELECTBOX_ID_BD_COLOR_C64_2,
+  ED_SELECTBOX_ID_BD_COLOR_C64_3,
+  ED_SELECTBOX_ID_BD_COLOR_C64_4,
+  ED_SELECTBOX_ID_BD_COLOR_C64_5,
   ED_SELECTBOX_ID_WIND_DIRECTION,
   ED_SELECTBOX_ID_PLAYER_SPEED,
+  ED_SELECTBOX_ID_BD_GRAVITY_DIRECTION,
   ED_SELECTBOX_ID_MM_BALL_CHOICE_MODE,
   ED_SELECTBOX_ID_CUSTOM_ACCESS_TYPE,
   ED_SELECTBOX_ID_CUSTOM_ACCESS_LAYER,
@@ -959,6 +1101,9 @@ enum
 #define ED_SELECTBOX_ID_ENGINE_FIRST   ED_SELECTBOX_ID_BD_SCHEDULING_TYPE
 #define ED_SELECTBOX_ID_ENGINE_LAST    ED_SELECTBOX_ID_BD_SCHEDULING_TYPE
 
+#define ED_SELECTBOX_ID_COLORS_FIRST   ED_SELECTBOX_ID_BD_COLOR_C64_B
+#define ED_SELECTBOX_ID_COLORS_LAST    ED_SELECTBOX_ID_BD_COLOR_C64_5
+
 #define ED_SELECTBOX_ID_CUSTOM1_FIRST  ED_SELECTBOX_ID_CUSTOM_ACCESS_TYPE
 #define ED_SELECTBOX_ID_CUSTOM1_LAST   ED_SELECTBOX_ID_CUSTOM_WALK_TO_ACTION
 #define ED_SELECTBOX_ID_CUSTOM2_FIRST  ED_SELECTBOX_ID_CUSTOM_MOVE_PATTERN
@@ -976,6 +1121,8 @@ enum
   ED_TEXTBUTTON_ID_LEVELCONFIG_LEVELSET,
   ED_TEXTBUTTON_ID_LEVELCONFIG_EDITOR,
   ED_TEXTBUTTON_ID_LEVELCONFIG_ENGINE,
+  ED_TEXTBUTTON_ID_ENGINECONFIG_CONFIG,
+  ED_TEXTBUTTON_ID_ENGINECONFIG_COLORS,
   ED_TEXTBUTTON_ID_PROPERTIES_INFO,
   ED_TEXTBUTTON_ID_PROPERTIES_CONFIG,
   ED_TEXTBUTTON_ID_PROPERTIES_CONFIG_1,
@@ -986,6 +1133,7 @@ enum
   ED_TEXTBUTTON_ID_SAVE_AS_TEMPLATE_1,
   ED_TEXTBUTTON_ID_ADD_CHANGE_PAGE,
   ED_TEXTBUTTON_ID_DEL_CHANGE_PAGE,
+  ED_TEXTBUTTON_ID_BD_SET_RANDOM_COLORS,
 
   ED_NUM_TEXTBUTTONS
 };
@@ -993,6 +1141,9 @@ enum
 #define ED_TAB_BUTTON_ID_LEVELCONFIG_FIRST ED_TEXTBUTTON_ID_LEVELCONFIG_LEVEL
 #define ED_TAB_BUTTON_ID_LEVELCONFIG_LAST  ED_TEXTBUTTON_ID_LEVELCONFIG_ENGINE
 
+#define ED_TAB_BUTTON_ID_ENGINECONFIG_FIRST ED_TEXTBUTTON_ID_ENGINECONFIG_CONFIG
+#define ED_TAB_BUTTON_ID_ENGINECONFIG_LAST  ED_TEXTBUTTON_ID_ENGINECONFIG_COLORS
+
 #define ED_TAB_BUTTON_ID_PROPERTIES_FIRST ED_TEXTBUTTON_ID_PROPERTIES_INFO
 #define ED_TAB_BUTTON_ID_PROPERTIES_LAST  ED_TEXTBUTTON_ID_PROPERTIES_CHANGE
 
@@ -1028,7 +1179,6 @@ enum
   ED_CHECKBUTTON_ID_BD_LINE_SHIFTING_BORDERS,
   ED_CHECKBUTTON_ID_BD_SCAN_FIRST_AND_LAST_ROW,
   ED_CHECKBUTTON_ID_BD_SHORT_EXPLOSIONS,
-  ED_CHECKBUTTON_ID_BD_GRAVITY_AFFECTS_ALL,
   ED_CHECKBUTTON_ID_STICK_ELEMENT,
   ED_CHECKBUTTON_ID_EM_SLIPPERY_GEMS,
   ED_CHECKBUTTON_ID_EM_EXPLODES_BY_FIRE,
@@ -1063,8 +1213,10 @@ enum
   ED_CHECKBUTTON_ID_BD_DIAGONAL_MOVEMENTS,
   ED_CHECKBUTTON_ID_BD_TOPMOST_PLAYER_ACTIVE,
   ED_CHECKBUTTON_ID_BD_PUSH_MEGA_ROCK_WITH_SWEET,
+  ED_CHECKBUTTON_ID_BD_MAGIC_WALL_ZERO_INFINITE,
   ED_CHECKBUTTON_ID_BD_MAGIC_WALL_WAIT_HATCHING,
   ED_CHECKBUTTON_ID_BD_MAGIC_WALL_STOPS_AMOEBA,
+  ED_CHECKBUTTON_ID_BD_MAGIC_WALL_BREAK_SCAN,
   ED_CHECKBUTTON_ID_BD_AMOEBA_WAIT_FOR_HATCHING,
   ED_CHECKBUTTON_ID_BD_AMOEBA_START_IMMEDIATELY,
   ED_CHECKBUTTON_ID_BD_AMOEBA_2_EXPLODE_BY_AMOEBA,
@@ -1073,6 +1225,17 @@ enum
   ED_CHECKBUTTON_ID_BD_VOODOO_DIES_BY_ROCK,
   ED_CHECKBUTTON_ID_BD_VOODOO_VANISH_BY_EXPLOSION,
   ED_CHECKBUTTON_ID_BD_SLIME_IS_PREDICTABLE,
+  ED_CHECKBUTTON_ID_BD_CHANGE_EXPANDING_WALL,
+  ED_CHECKBUTTON_ID_BD_REPLICATORS_ACTIVE,
+  ED_CHECKBUTTON_ID_BD_CONVEYOR_BELTS_ACTIVE,
+  ED_CHECKBUTTON_ID_BD_CONVEYOR_BELTS_CHANGED,
+  ED_CHECKBUTTON_ID_BD_WATER_CANNOT_FLOW_DOWN,
+  ED_CHECKBUTTON_ID_BD_HAMMER_WALLS_REAPPEAR,
+  ED_CHECKBUTTON_ID_BD_INFINITE_ROCKETS,
+  ED_CHECKBUTTON_ID_BD_CREATURES_START_BACKWARDS,
+  ED_CHECKBUTTON_ID_BD_CREATURES_TURN_ON_HATCHING,
+  ED_CHECKBUTTON_ID_BD_GRAVITY_SWITCH_ACTIVE,
+  ED_CHECKBUTTON_ID_BD_GRAVITY_AFFECTS_ALL,
   ED_CHECKBUTTON_ID_ENVELOPE_AUTOWRAP,
   ED_CHECKBUTTON_ID_ENVELOPE_CENTERED,
   ED_CHECKBUTTON_ID_MM_LASER_RED,
@@ -1122,7 +1285,7 @@ enum
 #define ED_CHECKBUTTON_ID_EDITOR_LAST  ED_CHECKBUTTON_ID_CUSTOM_USE_TEMPLATE_2
 
 #define ED_CHECKBUTTON_ID_ENGINE_FIRST ED_CHECKBUTTON_ID_BD_INTERMISSION
-#define ED_CHECKBUTTON_ID_ENGINE_LAST  ED_CHECKBUTTON_ID_BD_GRAVITY_AFFECTS_ALL
+#define ED_CHECKBUTTON_ID_ENGINE_LAST  ED_CHECKBUTTON_ID_BD_SHORT_EXPLOSIONS
 
 #define ED_CHECKBUTTON_ID_CUSTOM1_FIRST        ED_CHECKBUTTON_ID_CUSTOM_USE_GRAPHIC
 #define ED_CHECKBUTTON_ID_CUSTOM1_LAST ED_CHECKBUTTON_ID_CUSTOM_INDESTRUCTIBLE
@@ -1169,15 +1332,46 @@ enum
   ED_DRAWING_ID_ANDROID_CONTENT,
   ED_DRAWING_ID_AMOEBA_CONTENT,
   ED_DRAWING_ID_BD_SNAP_ELEMENT,
+  ED_DRAWING_ID_BD_MAGIC_WALL_DIAMOND_TO,
+  ED_DRAWING_ID_BD_MAGIC_WALL_ROCK_TO,
+  ED_DRAWING_ID_BD_MAGIC_WALL_MEGA_ROCK_TO,
+  ED_DRAWING_ID_BD_MAGIC_WALL_NUT_TO,
+  ED_DRAWING_ID_BD_MAGIC_WALL_NITRO_PACK_TO,
+  ED_DRAWING_ID_BD_MAGIC_WALL_FLYING_DIAMOND_TO,
+  ED_DRAWING_ID_BD_MAGIC_WALL_FLYING_ROCK_TO,
   ED_DRAWING_ID_BD_AMOEBA_CONTENT_TOO_BIG,
   ED_DRAWING_ID_BD_AMOEBA_CONTENT_ENCLOSED,
   ED_DRAWING_ID_BD_AMOEBA_2_CONTENT_TOO_BIG,
   ED_DRAWING_ID_BD_AMOEBA_2_CONTENT_ENCLOSED,
   ED_DRAWING_ID_BD_AMOEBA_2_CONTENT_EXPLODING,
   ED_DRAWING_ID_BD_AMOEBA_2_CONTENT_LOOKS_LIKE,
+  ED_DRAWING_ID_BD_SLIME_EATS_ELEMENT_1,
+  ED_DRAWING_ID_BD_SLIME_CONVERTS_TO_ELEMENT_1,
+  ED_DRAWING_ID_BD_SLIME_EATS_ELEMENT_2,
+  ED_DRAWING_ID_BD_SLIME_CONVERTS_TO_ELEMENT_2,
+  ED_DRAWING_ID_BD_SLIME_EATS_ELEMENT_3,
+  ED_DRAWING_ID_BD_SLIME_CONVERTS_TO_ELEMENT_3,
   ED_DRAWING_ID_BD_ACID_EATS_ELEMENT,
   ED_DRAWING_ID_BD_ACID_TURNS_TO_ELEMENT,
   ED_DRAWING_ID_BD_BITER_EATS_ELEMENT,
+  ED_DRAWING_ID_BD_BLADDER_CONVERTS_BY_ELEMENT,
+  ED_DRAWING_ID_BD_NUT_CONTENT,
+  ED_DRAWING_ID_BD_EXPANDING_WALL_LOOKS_LIKE,
+  ED_DRAWING_ID_BD_SAND_LOOKS_LIKE,
+  ED_DRAWING_ID_BD_ROCK_TURNS_TO_ON_FALLING,
+  ED_DRAWING_ID_BD_ROCK_TURNS_TO_ON_IMPACT,
+  ED_DRAWING_ID_BD_DIAMOND_TURNS_TO_ON_FALLING,
+  ED_DRAWING_ID_BD_DIAMOND_TURNS_TO_ON_IMPACT,
+  ED_DRAWING_ID_BD_FIREFLY_EXPLODES_TO,
+  ED_DRAWING_ID_BD_FIREFLY_2_EXPLODES_TO,
+  ED_DRAWING_ID_BD_BUTTERFLY_EXPLODES_TO,
+  ED_DRAWING_ID_BD_BUTTERFLY_2_EXPLODES_TO,
+  ED_DRAWING_ID_BD_STONEFLY_EXPLODES_TO,
+  ED_DRAWING_ID_BD_DRAGONFLY_EXPLODES_TO,
+  ED_DRAWING_ID_BD_DIAMOND_BIRTH_TURNS_TO,
+  ED_DRAWING_ID_BD_BOMB_EXPLOSION_TURNS_TO,
+  ED_DRAWING_ID_BD_NITRO_EXPLOSION_TURNS_TO,
+  ED_DRAWING_ID_BD_EXPLOSION_TURNS_TO,
   ED_DRAWING_ID_START_ELEMENT,
   ED_DRAWING_ID_ARTWORK_ELEMENT,
   ED_DRAWING_ID_EXPLOSION_ELEMENT,
@@ -1228,6 +1422,10 @@ enum
 #define ED_MODE_LEVELCONFIG_EDITOR     ED_TEXTBUTTON_ID_LEVELCONFIG_EDITOR
 #define ED_MODE_LEVELCONFIG_ENGINE     ED_TEXTBUTTON_ID_LEVELCONFIG_ENGINE
 
+// sub-screens in the engine settings section
+#define ED_MODE_ENGINECONFIG_CONFIG    ED_TEXTBUTTON_ID_ENGINECONFIG_CONFIG
+#define ED_MODE_ENGINECONFIG_COLORS    ED_TEXTBUTTON_ID_ENGINECONFIG_COLORS
+
 // sub-screens in the element properties section
 #define ED_MODE_PROPERTIES_INFO                ED_TEXTBUTTON_ID_PROPERTIES_INFO
 #define ED_MODE_PROPERTIES_CONFIG      ED_TEXTBUTTON_ID_PROPERTIES_CONFIG
@@ -1467,6 +1665,25 @@ static boolean levelset_use_levelset_artwork = FALSE;
 static boolean levelset_copy_level_template = FALSE;
 static int levelset_save_mode = LEVELSET_SAVE_MODE_UPDATE;
 
+#define MAX_BD_COLORS                  7
+#define MAX_BD_COLOR_TEXT_LEN          10
+
+static boolean bd_color_type_changed = FALSE;
+static int bd_color_type_default = GD_COLOR_TYPE_RGB;
+static int bd_color_c64[MAX_BD_COLORS];
+static char bd_color_text[MAX_BD_COLORS][MAX_BD_COLOR_TEXT_LEN + 1];
+static int bd_color_default[MAX_BD_COLORS];
+static int *bd_color[MAX_BD_COLORS] =
+{
+  &level.bd_color_b,
+  &level.bd_color_0,
+  &level.bd_color_1,
+  &level.bd_color_2,
+  &level.bd_color_3,
+  &level.bd_color_4,
+  &level.bd_color_5,
+};
+
 static struct
 {
   int gadget_type_id;
@@ -1484,416 +1701,416 @@ static struct
   {
     ED_COUNTER_ID_SELECT_LEVEL,
     -1, -1,    // these values are not constant, but can change at runtime
-    1,                                 100,
-    GADGET_ID_SELECT_LEVEL_DOWN,       GADGET_ID_SELECT_LEVEL_UP,
-    GADGET_ID_SELECT_LEVEL_TEXT,       GADGET_ID_NONE,
+    1,                                         100,
+    GADGET_ID_SELECT_LEVEL_DOWN,               GADGET_ID_SELECT_LEVEL_UP,
+    GADGET_ID_SELECT_LEVEL_TEXT,               GADGET_ID_NONE,
     &level_nr,
-    NULL,                              NULL, NULL
+    NULL,                                      NULL, NULL
   },
 
   // ---------- level and editor settings -------------------------------------
 
   {
     ED_COUNTER_ID_LEVEL_XSIZE,
-    ED_LEVEL_SETTINGS_XPOS(0),         ED_LEVEL_SETTINGS_YPOS(4),
-    MIN_LEV_FIELDX,                    MAX_LEV_FIELDX,
-    GADGET_ID_LEVEL_XSIZE_DOWN,                GADGET_ID_LEVEL_XSIZE_UP,
-    GADGET_ID_LEVEL_XSIZE_TEXT,                GADGET_ID_NONE,
+    ED_LEVEL_SETTINGS_XPOS(0),                 ED_LEVEL_SETTINGS_YPOS(4),
+    MIN_LEV_FIELDX,                            MAX_LEV_FIELDX,
+    GADGET_ID_LEVEL_XSIZE_DOWN,                        GADGET_ID_LEVEL_XSIZE_UP,
+    GADGET_ID_LEVEL_XSIZE_TEXT,                        GADGET_ID_NONE,
     &level.fieldx,
-    "Playfield size:",                 NULL, "Width",
+    "Playfield size:",                         NULL, "Width",
   },
   {
     ED_COUNTER_ID_LEVEL_YSIZE,
-    -1,                                        ED_LEVEL_SETTINGS_YPOS(4),
-    MIN_LEV_FIELDY,                    MAX_LEV_FIELDY,
-    GADGET_ID_LEVEL_YSIZE_DOWN,                GADGET_ID_LEVEL_YSIZE_UP,
-    GADGET_ID_LEVEL_YSIZE_TEXT,                GADGET_ID_LEVEL_XSIZE_UP,
+    -1,                                                ED_LEVEL_SETTINGS_YPOS(4),
+    MIN_LEV_FIELDY,                            MAX_LEV_FIELDY,
+    GADGET_ID_LEVEL_YSIZE_DOWN,                        GADGET_ID_LEVEL_YSIZE_UP,
+    GADGET_ID_LEVEL_YSIZE_TEXT,                        GADGET_ID_LEVEL_XSIZE_UP,
     &level.fieldy,
-    NULL,                              " ", "Height",
+    NULL,                                      " ", "Height",
   },
   {
     ED_COUNTER_ID_LEVEL_GEMSLIMIT,
-    ED_LEVEL_SETTINGS_XPOS(0),         ED_LEVEL_SETTINGS_YPOS(5),
-    0,                                 999,
-    GADGET_ID_LEVEL_GEMSLIMIT_DOWN,    GADGET_ID_LEVEL_GEMSLIMIT_UP,
-    GADGET_ID_LEVEL_GEMSLIMIT_TEXT,    GADGET_ID_NONE,
+    ED_LEVEL_SETTINGS_XPOS(0),                 ED_LEVEL_SETTINGS_YPOS(5),
+    0,                                         999,
+    GADGET_ID_LEVEL_GEMSLIMIT_DOWN,            GADGET_ID_LEVEL_GEMSLIMIT_UP,
+    GADGET_ID_LEVEL_GEMSLIMIT_TEXT,            GADGET_ID_NONE,
     &level.gems_needed,
-    NULL,                              "Number of gems to collect:", NULL
+    NULL,                                      "Number of gems to collect:", NULL
   },
   {
     ED_COUNTER_ID_LEVEL_TIMELIMIT,
-    ED_LEVEL_SETTINGS_XPOS(0),         ED_LEVEL_SETTINGS_YPOS(8),
-    0,                                 9999,
-    GADGET_ID_LEVEL_TIMELIMIT_DOWN,    GADGET_ID_LEVEL_TIMELIMIT_UP,
-    GADGET_ID_LEVEL_TIMELIMIT_TEXT,    GADGET_ID_NONE,
+    ED_LEVEL_SETTINGS_XPOS(0),                 ED_LEVEL_SETTINGS_YPOS(8),
+    0,                                         9999,
+    GADGET_ID_LEVEL_TIMELIMIT_DOWN,            GADGET_ID_LEVEL_TIMELIMIT_UP,
+    GADGET_ID_LEVEL_TIMELIMIT_TEXT,            GADGET_ID_NONE,
     &level.time,
-    "Time or step limit to solve level:", NULL, NULL
+    "Time or step limit to solve level:",      NULL, NULL
   },
   {
     ED_COUNTER_ID_LEVEL_TIMESCORE,
-    ED_LEVEL_SETTINGS_XPOS(0),         ED_LEVEL_SETTINGS_YPOS(10),
-    0,                                 999,
-    GADGET_ID_LEVEL_TIMESCORE_DOWN,    GADGET_ID_LEVEL_TIMESCORE_UP,
-    GADGET_ID_LEVEL_TIMESCORE_TEXT,    GADGET_ID_NONE,
+    ED_LEVEL_SETTINGS_XPOS(0),                 ED_LEVEL_SETTINGS_YPOS(10),
+    0,                                         999,
+    GADGET_ID_LEVEL_TIMESCORE_DOWN,            GADGET_ID_LEVEL_TIMESCORE_UP,
+    GADGET_ID_LEVEL_TIMESCORE_TEXT,            GADGET_ID_NONE,
     &level.score[SC_TIME_BONUS],
-    "Score for time or steps left:",   NULL, NULL
+    "Score for time or steps left:",           NULL, NULL
   },
   {
     ED_COUNTER_ID_LEVEL_RANDOM_SEED,
-    ED_LEVEL_SETTINGS_XPOS(0),         ED_LEVEL_SETTINGS_YPOS(13),
-    0,                                 9999,
-    GADGET_ID_LEVEL_RANDOM_SEED_DOWN,  GADGET_ID_LEVEL_RANDOM_SEED_UP,
-    GADGET_ID_LEVEL_RANDOM_SEED_TEXT,  GADGET_ID_NONE,
+    ED_LEVEL_SETTINGS_XPOS(0),                 ED_LEVEL_SETTINGS_YPOS(13),
+    0,                                         9999,
+    GADGET_ID_LEVEL_RANDOM_SEED_DOWN,          GADGET_ID_LEVEL_RANDOM_SEED_UP,
+    GADGET_ID_LEVEL_RANDOM_SEED_TEXT,          GADGET_ID_NONE,
     &level.random_seed,
-    NULL,                              "Random seed:", "(0 => random)"
+    NULL,                                      "Random seed:", "(0 => random)"
   },
   {
     ED_COUNTER_ID_LEVELSET_NUM_LEVELS,
-    ED_LEVEL_SETTINGS_XPOS(0),         ED_LEVEL_SETTINGS_YPOS(4),
-    1,                                 MAX_LEVELS,
-    GADGET_ID_LEVELSET_NUM_LEVELS_DOWN,        GADGET_ID_LEVELSET_NUM_LEVELS_UP,
-    GADGET_ID_LEVELSET_NUM_LEVELS_TEXT,        GADGET_ID_NONE,
+    ED_LEVEL_SETTINGS_XPOS(0),                 ED_LEVEL_SETTINGS_YPOS(4),
+    1,                                         MAX_LEVELS,
+    GADGET_ID_LEVELSET_NUM_LEVELS_DOWN,                GADGET_ID_LEVELSET_NUM_LEVELS_UP,
+    GADGET_ID_LEVELSET_NUM_LEVELS_TEXT,                GADGET_ID_NONE,
     &levelset_num_levels,
-    "Number of levels:",               NULL, NULL,
+    "Number of levels:",                       NULL, NULL,
   },
   {
     ED_COUNTER_ID_LEVEL_RANDOM,
-    ED_LEVEL_SETTINGS_XPOS(0),         ED_LEVEL_SETTINGS_YPOS(0),
-    1,                                 100,
-    GADGET_ID_LEVEL_RANDOM_DOWN,       GADGET_ID_LEVEL_RANDOM_UP,
-    GADGET_ID_LEVEL_RANDOM_TEXT,       GADGET_ID_NONE,
+    ED_LEVEL_SETTINGS_XPOS(0),                 ED_LEVEL_SETTINGS_YPOS(0),
+    1,                                         100,
+    GADGET_ID_LEVEL_RANDOM_DOWN,               GADGET_ID_LEVEL_RANDOM_UP,
+    GADGET_ID_LEVEL_RANDOM_TEXT,               GADGET_ID_NONE,
     &random_placement_value,
-    "Random element placement:",       NULL, "in"
+    "Random element placement:",               NULL, "in"
   },
   {
     ED_COUNTER_ID_BD_CYCLE_DELAY_MS,
-    ED_LEVEL_SETTINGS_XPOS(0),         ED_LEVEL_SETTINGS_YPOS(3),
-    50,                                        500,
-    GADGET_ID_BD_CYCLE_DELAY_MS_DOWN,  GADGET_ID_BD_CYCLE_DELAY_MS_UP,
-    GADGET_ID_BD_CYCLE_DELAY_MS_TEXT,  GADGET_ID_NONE,
+    ED_ENGINE_SETTINGS_XPOS(0),                        ED_ENGINE_SETTINGS_YPOS(3),
+    50,                                                500,
+    GADGET_ID_BD_CYCLE_DELAY_MS_DOWN,          GADGET_ID_BD_CYCLE_DELAY_MS_UP,
+    GADGET_ID_BD_CYCLE_DELAY_MS_TEXT,          GADGET_ID_NONE,
     &level.bd_cycle_delay_ms,
-    NULL,                              NULL, "Game cycle delay (ms)"
+    NULL,                                      NULL, "Game cycle delay (ms)"
   },
   {
     ED_COUNTER_ID_BD_CYCLE_DELAY_C64,
-    ED_LEVEL_SETTINGS_XPOS(0),         ED_LEVEL_SETTINGS_YPOS(3),
-    0,                                 32,
-    GADGET_ID_BD_CYCLE_DELAY_C64_DOWN, GADGET_ID_BD_CYCLE_DELAY_C64_UP,
-    GADGET_ID_BD_CYCLE_DELAY_C64_TEXT, GADGET_ID_NONE,
+    ED_ENGINE_SETTINGS_XPOS(0),                        ED_ENGINE_SETTINGS_YPOS(3),
+    0,                                         32,
+    GADGET_ID_BD_CYCLE_DELAY_C64_DOWN,         GADGET_ID_BD_CYCLE_DELAY_C64_UP,
+    GADGET_ID_BD_CYCLE_DELAY_C64_TEXT,         GADGET_ID_NONE,
     &level.bd_cycle_delay_c64,
-    NULL,                              NULL, "Game cycle delay (C64-style)"
+    NULL,                                      NULL, "Game cycle delay (C64-style)"
   },
   {
     ED_COUNTER_ID_BD_HATCHING_DELAY_CYCLES,
-    ED_LEVEL_SETTINGS_XPOS(0),         ED_LEVEL_SETTINGS_YPOS(4),
-    1,                                 40,
+    ED_ENGINE_SETTINGS_XPOS(0),                        ED_ENGINE_SETTINGS_YPOS(4),
+    1,                                         40,
     GADGET_ID_BD_HATCHING_DELAY_CYCLES_DOWN,   GADGET_ID_BD_HATCHING_DELAY_CYCLES_UP,
     GADGET_ID_BD_HATCHING_DELAY_CYCLES_TEXT,   GADGET_ID_NONE,
     &level.bd_hatching_delay_cycles,
-    NULL,                              NULL, "Hatching delay (cycles)"
+    NULL,                                      NULL, "Hatching delay (cycles)"
   },
   {
     ED_COUNTER_ID_BD_HATCHING_DELAY_SECONDS,
-    ED_LEVEL_SETTINGS_XPOS(0),         ED_LEVEL_SETTINGS_YPOS(4),
-    1,                                 40,
+    ED_ENGINE_SETTINGS_XPOS(0),                        ED_ENGINE_SETTINGS_YPOS(4),
+    1,                                         40,
     GADGET_ID_BD_HATCHING_DELAY_SECONDS_DOWN,  GADGET_ID_BD_HATCHING_DELAY_SECONDS_UP,
     GADGET_ID_BD_HATCHING_DELAY_SECONDS_TEXT,  GADGET_ID_NONE,
     &level.bd_hatching_delay_seconds,
-    NULL,                              NULL, "Hatching delay (seconds)"
+    NULL,                                      NULL, "Hatching delay (seconds)"
   },
 
   // ---------- element settings: configure (various elements) ----------------
 
   {
     ED_COUNTER_ID_BD_PUSHING_PROB,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(2),
-    0,                                 100,
-    GADGET_ID_BD_PUSHING_PROB_DOWN,    GADGET_ID_BD_PUSHING_PROB_UP,
-    GADGET_ID_BD_PUSHING_PROB_TEXT,    GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(2),
+    0,                                         100,
+    GADGET_ID_BD_PUSHING_PROB_DOWN,            GADGET_ID_BD_PUSHING_PROB_UP,
+    GADGET_ID_BD_PUSHING_PROB_TEXT,            GADGET_ID_NONE,
     &level.bd_pushing_prob,
-    NULL,                              NULL, "Push probability"
+    NULL,                                      NULL, "Push probability"
   },
   {
     ED_COUNTER_ID_BD_PUSHING_PROB_WITH_SWEET,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(3),
-    0,                                 100,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(3),
+    0,                                         100,
     GADGET_ID_BD_PUSHING_PROB_WITH_SWEET_DOWN, GADGET_ID_BD_PUSHING_PROB_WITH_SWEET_UP,
     GADGET_ID_BD_PUSHING_PROB_WITH_SWEET_TEXT, GADGET_ID_NONE,
     &level.bd_pushing_prob_with_sweet,
-    NULL,                              NULL, "Push probability with sweet"
+    NULL,                                      NULL, "Push probability with sweet"
   },
   {
     ED_COUNTER_ID_ELEMENT_VALUE1,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(0),
-    MIN_SCORE,                         MAX_SCORE,
-    GADGET_ID_ELEMENT_VALUE1_DOWN,     GADGET_ID_ELEMENT_VALUE1_UP,
-    GADGET_ID_ELEMENT_VALUE1_TEXT,     GADGET_ID_NONE,
-    NULL,                              // will be set when used
-    NULL,                              NULL, NULL
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(0),
+    MIN_SCORE,                                 MAX_SCORE,
+    GADGET_ID_ELEMENT_VALUE1_DOWN,             GADGET_ID_ELEMENT_VALUE1_UP,
+    GADGET_ID_ELEMENT_VALUE1_TEXT,             GADGET_ID_NONE,
+    NULL,                                      // will be set when used
+    NULL,                                      NULL, NULL
   },
   {
     ED_COUNTER_ID_ELEMENT_VALUE2,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(1),
-    MIN_SCORE,                         MAX_SCORE,
-    GADGET_ID_ELEMENT_VALUE2_DOWN,     GADGET_ID_ELEMENT_VALUE2_UP,
-    GADGET_ID_ELEMENT_VALUE2_TEXT,     GADGET_ID_NONE,
-    NULL,                              // will be set when used
-    NULL,                              NULL, NULL
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(1),
+    MIN_SCORE,                                 MAX_SCORE,
+    GADGET_ID_ELEMENT_VALUE2_DOWN,             GADGET_ID_ELEMENT_VALUE2_UP,
+    GADGET_ID_ELEMENT_VALUE2_TEXT,             GADGET_ID_NONE,
+    NULL,                                      // will be set when used
+    NULL,                                      NULL, NULL
   },
   {
     ED_COUNTER_ID_ELEMENT_VALUE3,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(2),
-    MIN_SCORE,                         MAX_SCORE,
-    GADGET_ID_ELEMENT_VALUE3_DOWN,     GADGET_ID_ELEMENT_VALUE3_UP,
-    GADGET_ID_ELEMENT_VALUE3_TEXT,     GADGET_ID_NONE,
-    NULL,                              // will be set when used
-    NULL,                              NULL, NULL
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(2),
+    MIN_SCORE,                                 MAX_SCORE,
+    GADGET_ID_ELEMENT_VALUE3_DOWN,             GADGET_ID_ELEMENT_VALUE3_UP,
+    GADGET_ID_ELEMENT_VALUE3_TEXT,             GADGET_ID_NONE,
+    NULL,                                      // will be set when used
+    NULL,                                      NULL, NULL
   },
   {
     ED_COUNTER_ID_ELEMENT_VALUE4,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(3),
-    MIN_SCORE,                         MAX_SCORE,
-    GADGET_ID_ELEMENT_VALUE4_DOWN,     GADGET_ID_ELEMENT_VALUE4_UP,
-    GADGET_ID_ELEMENT_VALUE4_TEXT,     GADGET_ID_NONE,
-    NULL,                              // will be set when used
-    NULL,                              NULL, NULL
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(3),
+    MIN_SCORE,                                 MAX_SCORE,
+    GADGET_ID_ELEMENT_VALUE4_DOWN,             GADGET_ID_ELEMENT_VALUE4_UP,
+    GADGET_ID_ELEMENT_VALUE4_TEXT,             GADGET_ID_NONE,
+    NULL,                                      // will be set when used
+    NULL,                                      NULL, NULL
   },
   {
     ED_COUNTER_ID_YAMYAM_CONTENT,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(3),
-    MIN_ELEMENT_CONTENTS,              MAX_ELEMENT_CONTENTS,
-    GADGET_ID_YAMYAM_CONTENT_DOWN,     GADGET_ID_YAMYAM_CONTENT_UP,
-    GADGET_ID_YAMYAM_CONTENT_TEXT,     GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(3),
+    MIN_ELEMENT_CONTENTS,                      MAX_ELEMENT_CONTENTS,
+    GADGET_ID_YAMYAM_CONTENT_DOWN,             GADGET_ID_YAMYAM_CONTENT_UP,
+    GADGET_ID_YAMYAM_CONTENT_TEXT,             GADGET_ID_NONE,
     &level.num_yamyam_contents,
-    NULL,                              NULL, "Number of content areas"
+    NULL,                                      NULL, "Number of content areas"
   },
   {
     ED_COUNTER_ID_BALL_CONTENT,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(4),
-    MIN_ELEMENT_CONTENTS,              MAX_ELEMENT_CONTENTS,
-    GADGET_ID_BALL_CONTENT_DOWN,       GADGET_ID_BALL_CONTENT_UP,
-    GADGET_ID_BALL_CONTENT_TEXT,       GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(4),
+    MIN_ELEMENT_CONTENTS,                      MAX_ELEMENT_CONTENTS,
+    GADGET_ID_BALL_CONTENT_DOWN,               GADGET_ID_BALL_CONTENT_UP,
+    GADGET_ID_BALL_CONTENT_TEXT,               GADGET_ID_NONE,
     &level.num_ball_contents,
-    NULL,                              NULL, "Number of content areas"
+    NULL,                                      NULL, "Number of content areas"
   },
   {
     ED_COUNTER_ID_ANDROID_CONTENT,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(4),
-    MIN_ANDROID_ELEMENTS,              MAX_ANDROID_ELEMENTS,
-    GADGET_ID_ANDROID_CONTENT_DOWN,    GADGET_ID_ANDROID_CONTENT_UP,
-    GADGET_ID_ANDROID_CONTENT_TEXT,    GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(4),
+    MIN_ANDROID_ELEMENTS,                      MAX_ANDROID_ELEMENTS,
+    GADGET_ID_ANDROID_CONTENT_DOWN,            GADGET_ID_ANDROID_CONTENT_UP,
+    GADGET_ID_ANDROID_CONTENT_TEXT,            GADGET_ID_NONE,
     &level.num_android_clone_elements,
-    NULL,                              NULL, "Number of clonable elements"
+    NULL,                                      NULL, "Number of clonable elements"
   },
   {
     ED_COUNTER_ID_ENVELOPE_XSIZE,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(0),
-    MIN_ENVELOPE_XSIZE,                        MAX_ENVELOPE_XSIZE,
-    GADGET_ID_ENVELOPE_XSIZE_DOWN,     GADGET_ID_ENVELOPE_XSIZE_UP,
-    GADGET_ID_ENVELOPE_XSIZE_TEXT,     GADGET_ID_NONE,
-    NULL,                              // will be set when used
-    NULL,                              NULL, "Width",
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(0),
+    MIN_ENVELOPE_XSIZE,                                MAX_ENVELOPE_XSIZE,
+    GADGET_ID_ENVELOPE_XSIZE_DOWN,             GADGET_ID_ENVELOPE_XSIZE_UP,
+    GADGET_ID_ENVELOPE_XSIZE_TEXT,             GADGET_ID_NONE,
+    NULL,                                      // will be set when used
+    NULL,                                      NULL, "Width",
   },
   {
     ED_COUNTER_ID_ENVELOPE_YSIZE,
-    -1,                                        ED_ELEMENT_SETTINGS_YPOS(0),
-    MIN_ENVELOPE_YSIZE,                        MAX_ENVELOPE_YSIZE,
-    GADGET_ID_ENVELOPE_YSIZE_DOWN,     GADGET_ID_ENVELOPE_YSIZE_UP,
-    GADGET_ID_ENVELOPE_YSIZE_TEXT,     GADGET_ID_ENVELOPE_XSIZE_UP,
-    NULL,                              // will be set when used
-    NULL,                              " ", "Height",
+    -1,                                                ED_ELEMENT_SETTINGS_YPOS(0),
+    MIN_ENVELOPE_YSIZE,                                MAX_ENVELOPE_YSIZE,
+    GADGET_ID_ENVELOPE_YSIZE_DOWN,             GADGET_ID_ENVELOPE_YSIZE_UP,
+    GADGET_ID_ENVELOPE_YSIZE_TEXT,             GADGET_ID_ENVELOPE_XSIZE_UP,
+    NULL,                                      // will be set when used
+    NULL,                                      " ", "Height",
   },
   {
     ED_COUNTER_ID_INVENTORY_SIZE,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(2),
-    MIN_INITIAL_INVENTORY_SIZE,                MAX_INITIAL_INVENTORY_SIZE,
-    GADGET_ID_INVENTORY_SIZE_DOWN,     GADGET_ID_INVENTORY_SIZE_UP,
-    GADGET_ID_INVENTORY_SIZE_TEXT,     GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(2),
+    MIN_INITIAL_INVENTORY_SIZE,                        MAX_INITIAL_INVENTORY_SIZE,
+    GADGET_ID_INVENTORY_SIZE_DOWN,             GADGET_ID_INVENTORY_SIZE_UP,
+    GADGET_ID_INVENTORY_SIZE_TEXT,             GADGET_ID_NONE,
     &level.initial_inventory_size[0],
-    NULL,                              NULL, "Number of inventory elements"
+    NULL,                                      NULL, "Number of inventory elements"
   },
   {
     ED_COUNTER_ID_MM_BALL_CONTENT,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(3),
-    MIN_ELEMENTS_IN_GROUP,             MAX_MM_BALL_CONTENTS,
-    GADGET_ID_MM_BALL_CONTENT_DOWN,    GADGET_ID_MM_BALL_CONTENT_UP,
-    GADGET_ID_MM_BALL_CONTENT_TEXT,    GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(3),
+    MIN_ELEMENTS_IN_GROUP,                     MAX_MM_BALL_CONTENTS,
+    GADGET_ID_MM_BALL_CONTENT_DOWN,            GADGET_ID_MM_BALL_CONTENT_UP,
+    GADGET_ID_MM_BALL_CONTENT_TEXT,            GADGET_ID_NONE,
     &level.num_mm_ball_contents,
-    NULL,                              NULL, "Number of content elements"
+    NULL,                                      NULL, "Number of content elements"
   },
 
   // ---------- element settings: configure 1 (custom elements) ---------------
 
   {
     ED_COUNTER_ID_CUSTOM_SCORE,
-    ED_ELEMENT_SETTINGS_XPOS(1),       ED_ELEMENT_SETTINGS_YPOS(5),
-    MIN_SCORE,                         MAX_SCORE,
-    GADGET_ID_CUSTOM_SCORE_DOWN,       GADGET_ID_CUSTOM_SCORE_UP,
-    GADGET_ID_CUSTOM_SCORE_TEXT,       GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(1),               ED_ELEMENT_SETTINGS_YPOS(5),
+    MIN_SCORE,                                 MAX_SCORE,
+    GADGET_ID_CUSTOM_SCORE_DOWN,               GADGET_ID_CUSTOM_SCORE_UP,
+    GADGET_ID_CUSTOM_SCORE_TEXT,               GADGET_ID_NONE,
     &custom_element.collect_score_initial,
-    NULL,                              "CE score", " "
+    NULL,                                      "CE score", " "
   },
   {
     ED_COUNTER_ID_CUSTOM_GEMCOUNT,
-    -1,                                        ED_ELEMENT_SETTINGS_YPOS(5),
-    MIN_COLLECT_COUNT,                 MAX_COLLECT_COUNT,
-    GADGET_ID_CUSTOM_GEMCOUNT_DOWN,    GADGET_ID_CUSTOM_GEMCOUNT_UP,
-    GADGET_ID_CUSTOM_GEMCOUNT_TEXT,    GADGET_ID_CUSTOM_SCORE_UP,
+    -1,                                                ED_ELEMENT_SETTINGS_YPOS(5),
+    MIN_COLLECT_COUNT,                         MAX_COLLECT_COUNT,
+    GADGET_ID_CUSTOM_GEMCOUNT_DOWN,            GADGET_ID_CUSTOM_GEMCOUNT_UP,
+    GADGET_ID_CUSTOM_GEMCOUNT_TEXT,            GADGET_ID_CUSTOM_SCORE_UP,
     &custom_element.collect_count_initial,
-    NULL,                              "CE count", NULL
+    NULL,                                      "CE count", NULL
   },
   {
     ED_COUNTER_ID_CUSTOM_VALUE_FIX,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(10),
-    0,                                 9999,
-    GADGET_ID_CUSTOM_VALUE_FIX_DOWN,   GADGET_ID_CUSTOM_VALUE_FIX_UP,
-    GADGET_ID_CUSTOM_VALUE_FIX_TEXT,   GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(10),
+    0,                                         9999,
+    GADGET_ID_CUSTOM_VALUE_FIX_DOWN,           GADGET_ID_CUSTOM_VALUE_FIX_UP,
+    GADGET_ID_CUSTOM_VALUE_FIX_TEXT,           GADGET_ID_NONE,
     &custom_element.ce_value_fixed_initial,
-    NULL,                              "CE value", NULL
+    NULL,                                      "CE value", NULL
   },
   {
     ED_COUNTER_ID_CUSTOM_VALUE_RND,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(10),
-    0,                                 9999,
-    GADGET_ID_CUSTOM_VALUE_RND_DOWN,   GADGET_ID_CUSTOM_VALUE_RND_UP,
-    GADGET_ID_CUSTOM_VALUE_RND_TEXT,   GADGET_ID_CUSTOM_VALUE_FIX_UP,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(10),
+    0,                                         9999,
+    GADGET_ID_CUSTOM_VALUE_RND_DOWN,           GADGET_ID_CUSTOM_VALUE_RND_UP,
+    GADGET_ID_CUSTOM_VALUE_RND_TEXT,           GADGET_ID_CUSTOM_VALUE_FIX_UP,
     &custom_element.ce_value_random_initial,
-    NULL,                              "+random", NULL
+    NULL,                                      "+random", NULL
   },
   {
     ED_COUNTER_ID_PUSH_DELAY_FIX,
-    ED_ELEMENT_SETTINGS_XPOS(1),       ED_ELEMENT_SETTINGS_YPOS(6),
-    0,                                 999,
-    GADGET_ID_PUSH_DELAY_FIX_DOWN,     GADGET_ID_PUSH_DELAY_FIX_UP,
-    GADGET_ID_PUSH_DELAY_FIX_TEXT,     GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(1),               ED_ELEMENT_SETTINGS_YPOS(6),
+    0,                                         999,
+    GADGET_ID_PUSH_DELAY_FIX_DOWN,             GADGET_ID_PUSH_DELAY_FIX_UP,
+    GADGET_ID_PUSH_DELAY_FIX_TEXT,             GADGET_ID_NONE,
     &custom_element.push_delay_fixed,
-    NULL,                              "Push delay", NULL
+    NULL,                                      "Push delay", NULL
   },
   {
     ED_COUNTER_ID_PUSH_DELAY_RND,
-    -1,                                        ED_ELEMENT_SETTINGS_YPOS(6),
-    0,                                 999,
-    GADGET_ID_PUSH_DELAY_RND_DOWN,     GADGET_ID_PUSH_DELAY_RND_UP,
-    GADGET_ID_PUSH_DELAY_RND_TEXT,     GADGET_ID_PUSH_DELAY_FIX_UP,
+    -1,                                                ED_ELEMENT_SETTINGS_YPOS(6),
+    0,                                         999,
+    GADGET_ID_PUSH_DELAY_RND_DOWN,             GADGET_ID_PUSH_DELAY_RND_UP,
+    GADGET_ID_PUSH_DELAY_RND_TEXT,             GADGET_ID_PUSH_DELAY_FIX_UP,
     &custom_element.push_delay_random,
-    NULL,                              "+random", NULL
+    NULL,                                      "+random", NULL
   },
   {
     ED_COUNTER_ID_DROP_DELAY_FIX,
-    ED_ELEMENT_SETTINGS_XPOS(1),       ED_ELEMENT_SETTINGS_YPOS(7),
-    0,                                 999,
-    GADGET_ID_DROP_DELAY_FIX_DOWN,     GADGET_ID_DROP_DELAY_FIX_UP,
-    GADGET_ID_DROP_DELAY_FIX_TEXT,     GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(1),               ED_ELEMENT_SETTINGS_YPOS(7),
+    0,                                         999,
+    GADGET_ID_DROP_DELAY_FIX_DOWN,             GADGET_ID_DROP_DELAY_FIX_UP,
+    GADGET_ID_DROP_DELAY_FIX_TEXT,             GADGET_ID_NONE,
     &custom_element.drop_delay_fixed,
-    NULL,                              "Drop delay", NULL
+    NULL,                                      "Drop delay", NULL
   },
   {
     ED_COUNTER_ID_DROP_DELAY_RND,
-    -1,                                        ED_ELEMENT_SETTINGS_YPOS(7),
-    0,                                 999,
-    GADGET_ID_DROP_DELAY_RND_DOWN,     GADGET_ID_DROP_DELAY_RND_UP,
-    GADGET_ID_DROP_DELAY_RND_TEXT,     GADGET_ID_DROP_DELAY_FIX_UP,
+    -1,                                                ED_ELEMENT_SETTINGS_YPOS(7),
+    0,                                         999,
+    GADGET_ID_DROP_DELAY_RND_DOWN,             GADGET_ID_DROP_DELAY_RND_UP,
+    GADGET_ID_DROP_DELAY_RND_TEXT,             GADGET_ID_DROP_DELAY_FIX_UP,
     &custom_element.drop_delay_random,
-    NULL,                              "+random", NULL
+    NULL,                                      "+random", NULL
   },
 
   // ---------- element settings: configure 2 (custom elements) ---------------
 
   {
     ED_COUNTER_ID_MOVE_DELAY_FIX,
-    ED_ELEMENT_SETTINGS_XPOS(1),       ED_ELEMENT_SETTINGS_YPOS(5),
-    0,                                 999,
-    GADGET_ID_MOVE_DELAY_FIX_DOWN,     GADGET_ID_MOVE_DELAY_FIX_UP,
-    GADGET_ID_MOVE_DELAY_FIX_TEXT,     GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(1),               ED_ELEMENT_SETTINGS_YPOS(5),
+    0,                                         999,
+    GADGET_ID_MOVE_DELAY_FIX_DOWN,             GADGET_ID_MOVE_DELAY_FIX_UP,
+    GADGET_ID_MOVE_DELAY_FIX_TEXT,             GADGET_ID_NONE,
     &custom_element.move_delay_fixed,
-    NULL,                              "Move delay", NULL
+    NULL,                                      "Move delay", NULL
   },
   {
     ED_COUNTER_ID_MOVE_DELAY_RND,
-    -1,                                        ED_ELEMENT_SETTINGS_YPOS(5),
-    0,                                 999,
-    GADGET_ID_MOVE_DELAY_RND_DOWN,     GADGET_ID_MOVE_DELAY_RND_UP,
-    GADGET_ID_MOVE_DELAY_RND_TEXT,     GADGET_ID_MOVE_DELAY_FIX_UP,
+    -1,                                                ED_ELEMENT_SETTINGS_YPOS(5),
+    0,                                         999,
+    GADGET_ID_MOVE_DELAY_RND_DOWN,             GADGET_ID_MOVE_DELAY_RND_UP,
+    GADGET_ID_MOVE_DELAY_RND_TEXT,             GADGET_ID_MOVE_DELAY_FIX_UP,
     &custom_element.move_delay_random,
-    NULL,                              "+random", NULL
+    NULL,                                      "+random", NULL
   },
   {
     ED_COUNTER_ID_STEP_DELAY_FIX,
-    ED_ELEMENT_SETTINGS_XPOS(1),       ED_ELEMENT_SETTINGS_YPOS(6),
-    0,                                 999,
-    GADGET_ID_STEP_DELAY_FIX_DOWN,     GADGET_ID_STEP_DELAY_FIX_UP,
-    GADGET_ID_STEP_DELAY_FIX_TEXT,     GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(1),               ED_ELEMENT_SETTINGS_YPOS(6),
+    0,                                         999,
+    GADGET_ID_STEP_DELAY_FIX_DOWN,             GADGET_ID_STEP_DELAY_FIX_UP,
+    GADGET_ID_STEP_DELAY_FIX_TEXT,             GADGET_ID_NONE,
     &custom_element.step_delay_fixed,
-    NULL,                              "Step delay", NULL
+    NULL,                                      "Step delay", NULL
   },
   {
     ED_COUNTER_ID_STEP_DELAY_RND,
-    -1,                                        ED_ELEMENT_SETTINGS_YPOS(6),
-    0,                                 999,
-    GADGET_ID_STEP_DELAY_RND_DOWN,     GADGET_ID_STEP_DELAY_RND_UP,
-    GADGET_ID_STEP_DELAY_RND_TEXT,     GADGET_ID_STEP_DELAY_FIX_UP,
+    -1,                                                ED_ELEMENT_SETTINGS_YPOS(6),
+    0,                                         999,
+    GADGET_ID_STEP_DELAY_RND_DOWN,             GADGET_ID_STEP_DELAY_RND_UP,
+    GADGET_ID_STEP_DELAY_RND_TEXT,             GADGET_ID_STEP_DELAY_FIX_UP,
     &custom_element.step_delay_random,
-    NULL,                              "+random", NULL
+    NULL,                                      "+random", NULL
   },
   {
     ED_COUNTER_ID_EXPLOSION_DELAY,
-    ED_ELEMENT_SETTINGS_XPOS(1),       ED_ELEMENT_SETTINGS_YPOS(13),
-    0,                                 999,
-    GADGET_ID_EXPLOSION_DELAY_DOWN,    GADGET_ID_EXPLOSION_DELAY_UP,
-    GADGET_ID_EXPLOSION_DELAY_TEXT,    GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(1),               ED_ELEMENT_SETTINGS_YPOS(13),
+    0,                                         999,
+    GADGET_ID_EXPLOSION_DELAY_DOWN,            GADGET_ID_EXPLOSION_DELAY_UP,
+    GADGET_ID_EXPLOSION_DELAY_TEXT,            GADGET_ID_NONE,
     &custom_element.explosion_delay,
-    NULL,                              "Explosion delay", NULL
+    NULL,                                      "Explosion delay", NULL
   },
   {
     ED_COUNTER_ID_IGNITION_DELAY,
-    ED_ELEMENT_SETTINGS_XPOS(1),       ED_ELEMENT_SETTINGS_YPOS(14),
-    0,                                 999,
-    GADGET_ID_IGNITION_DELAY_DOWN,     GADGET_ID_IGNITION_DELAY_UP,
-    GADGET_ID_IGNITION_DELAY_TEXT,     GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(1),               ED_ELEMENT_SETTINGS_YPOS(14),
+    0,                                         999,
+    GADGET_ID_IGNITION_DELAY_DOWN,             GADGET_ID_IGNITION_DELAY_UP,
+    GADGET_ID_IGNITION_DELAY_TEXT,             GADGET_ID_NONE,
     &custom_element.ignition_delay,
-    NULL,                              "Ignition delay", "(by fire)"
+    NULL,                                      "Ignition delay", "(by fire)"
   },
 
   // ---------- element settings: configure (group elements) ------------------
 
   {
     ED_COUNTER_ID_GROUP_CONTENT,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(3),
-    MIN_ELEMENTS_IN_GROUP,             MAX_ELEMENTS_IN_GROUP,
-    GADGET_ID_GROUP_CONTENT_DOWN,      GADGET_ID_GROUP_CONTENT_UP,
-    GADGET_ID_GROUP_CONTENT_TEXT,      GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(3),
+    MIN_ELEMENTS_IN_GROUP,                     MAX_ELEMENTS_IN_GROUP,
+    GADGET_ID_GROUP_CONTENT_DOWN,              GADGET_ID_GROUP_CONTENT_UP,
+    GADGET_ID_GROUP_CONTENT_TEXT,              GADGET_ID_NONE,
     &group_element_info.num_elements,
-    NULL,                              NULL, "Number of elements in group"
+    NULL,                                      NULL, "Number of elements in group"
   },
 
   // ---------- element settings: advanced (custom elements) ------------------
 
   {
     ED_COUNTER_ID_CHANGE_DELAY_FIX,
-    ED_ELEMENT_SETTINGS_XPOS(2),       ED_ELEMENT_SETTINGS_YPOS(2),
-    0,                                 999,
-    GADGET_ID_CHANGE_DELAY_FIX_DOWN,   GADGET_ID_CHANGE_DELAY_FIX_UP,
-    GADGET_ID_CHANGE_DELAY_FIX_TEXT,   GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(2),               ED_ELEMENT_SETTINGS_YPOS(2),
+    0,                                         999,
+    GADGET_ID_CHANGE_DELAY_FIX_DOWN,           GADGET_ID_CHANGE_DELAY_FIX_UP,
+    GADGET_ID_CHANGE_DELAY_FIX_TEXT,           GADGET_ID_NONE,
     &custom_element_change.delay_fixed,
-    NULL,                              "CE delay", NULL,
+    NULL,                                      "CE delay", NULL,
   },
   {
     ED_COUNTER_ID_CHANGE_DELAY_RND,
-    -1,                                        ED_ELEMENT_SETTINGS_YPOS(2),
-    0,                                 999,
-    GADGET_ID_CHANGE_DELAY_RND_DOWN,   GADGET_ID_CHANGE_DELAY_RND_UP,
-    GADGET_ID_CHANGE_DELAY_RND_TEXT,   GADGET_ID_CHANGE_DELAY_FIX_UP,
+    -1,                                                ED_ELEMENT_SETTINGS_YPOS(2),
+    0,                                         999,
+    GADGET_ID_CHANGE_DELAY_RND_DOWN,           GADGET_ID_CHANGE_DELAY_RND_UP,
+    GADGET_ID_CHANGE_DELAY_RND_TEXT,           GADGET_ID_CHANGE_DELAY_FIX_UP,
     &custom_element_change.delay_random,
-    NULL,                              "+random", NULL
+    NULL,                                      "+random", NULL
   },
   {
     ED_COUNTER_ID_CHANGE_CONT_RND,
-    ED_ELEMENT_SETTINGS_XPOS(3),       ED_ELEMENT_SETTINGS_YPOS(12),
-    0,                                 100,
-    GADGET_ID_CHANGE_CONT_RND_DOWN,    GADGET_ID_CHANGE_CONT_RND_UP,
-    GADGET_ID_CHANGE_CONT_RND_TEXT,    GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(3),               ED_ELEMENT_SETTINGS_YPOS(12),
+    0,                                         100,
+    GADGET_ID_CHANGE_CONT_RND_DOWN,            GADGET_ID_CHANGE_CONT_RND_UP,
+    GADGET_ID_CHANGE_CONT_RND_TEXT,            GADGET_ID_NONE,
     &custom_element_change.random_percentage,
-    NULL,                              "Use random replace:", "%"
+    NULL,                                      "Use random replace:", "%"
   },
 };
 
@@ -1904,48 +2121,112 @@ static struct
   int gadget_id;
   int size;
   char *value;
-  char *text_above, *infotext;
+  char *text_above, *text_left, *text_right, *infotext;
 } textinput_info[ED_NUM_TEXTINPUT] =
 {
+  // ---------- level and editor settings -------------------------------------
+
   {
     ED_TEXTINPUT_ID_LEVEL_NAME,
-    ED_LEVEL_SETTINGS_XPOS(0),         ED_LEVEL_SETTINGS_YPOS(0),
+    ED_LEVEL_SETTINGS_XPOS(0),                 ED_LEVEL_SETTINGS_YPOS(0),
     GADGET_ID_LEVEL_NAME,
     MAX_LEVEL_NAME_LEN,
     level.name,
-    "Title:", "Title for this level"
+    "Title:", NULL, NULL,                      "Enter title for this level"
   },
   {
     ED_TEXTINPUT_ID_LEVEL_AUTHOR,
-    ED_LEVEL_SETTINGS_XPOS(0),         ED_LEVEL_SETTINGS_YPOS(2),
+    ED_LEVEL_SETTINGS_XPOS(0),                 ED_LEVEL_SETTINGS_YPOS(2),
     GADGET_ID_LEVEL_AUTHOR,
     MAX_LEVEL_AUTHOR_LEN,
     level.author,
-    "Author:", "Author for this level"
+    "Author:", NULL, NULL,                     "Enter author for this level"
   },
   {
     ED_TEXTINPUT_ID_LEVELSET_NAME,
-    ED_LEVEL_SETTINGS_XPOS(0),         ED_LEVEL_SETTINGS_YPOS(0),
+    ED_LEVEL_SETTINGS_XPOS(0),                 ED_LEVEL_SETTINGS_YPOS(0),
     GADGET_ID_LEVELSET_NAME,
     MAX_LEVEL_NAME_LEN,
     levelset_name,
-    "Title:", "Title for this or new level set"
+    "Title:", NULL, NULL,                      "Enter title for this or new level set"
   },
   {
     ED_TEXTINPUT_ID_LEVELSET_AUTHOR,
-    ED_LEVEL_SETTINGS_XPOS(0),         ED_LEVEL_SETTINGS_YPOS(2),
+    ED_LEVEL_SETTINGS_XPOS(0),                 ED_LEVEL_SETTINGS_YPOS(2),
     GADGET_ID_LEVELSET_AUTHOR,
     MAX_LEVEL_AUTHOR_LEN,
     levelset_author,
-    "Author:", "Author for this or new level set"
+    "Author:", NULL, NULL,                     "Enter author for this or new level set"
+  },
+
+  // ---------- engine settings: colors ---------------------------------------
+
+  {
+    ED_TEXTINPUT_ID_BD_COLOR_TEXT_B,
+    ED_ENGINE_SETTINGS_XPOS(0),                        ED_ENGINE_SETTINGS_YPOS(1),
+    GADGET_ID_BD_COLOR_TEXT_B,
+    MAX_BD_COLOR_TEXT_LEN,
+    bd_color_text[0],
+    NULL, "Border color:      ", NULL,         "Enter border color (not used)"
+  },
+  {
+    ED_TEXTINPUT_ID_BD_COLOR_TEXT_0,
+    ED_ENGINE_SETTINGS_XPOS(0),                        ED_ENGINE_SETTINGS_YPOS(2),
+    GADGET_ID_BD_COLOR_TEXT_0,
+    MAX_BD_COLOR_TEXT_LEN,
+    bd_color_text[1],
+    NULL, "Background color:  ", NULL,         "Enter background color (C64 graphics)"
+  },
+  {
+    ED_TEXTINPUT_ID_BD_COLOR_TEXT_1,
+    ED_ENGINE_SETTINGS_XPOS(0),                        ED_ENGINE_SETTINGS_YPOS(3),
+    GADGET_ID_BD_COLOR_TEXT_1,
+    MAX_BD_COLOR_TEXT_LEN,
+    bd_color_text[2],
+    NULL, "Sand color:        ", NULL,         "Enter sand color (C64 graphics)"
+  },
+  {
+    ED_TEXTINPUT_ID_BD_COLOR_TEXT_2,
+    ED_ENGINE_SETTINGS_XPOS(0),                        ED_ENGINE_SETTINGS_YPOS(4),
+    GADGET_ID_BD_COLOR_TEXT_2,
+    MAX_BD_COLOR_TEXT_LEN,
+    bd_color_text[3],
+    NULL, "Steel wall color:  ", NULL,         "Enter steel wall color (C64 graphics)"
+  },
+  {
+    ED_TEXTINPUT_ID_BD_COLOR_TEXT_3,
+    ED_ENGINE_SETTINGS_XPOS(0),                        ED_ENGINE_SETTINGS_YPOS(5),
+    GADGET_ID_BD_COLOR_TEXT_3,
+    MAX_BD_COLOR_TEXT_LEN,
+    bd_color_text[4],
+    NULL, "Wall color:        ", NULL,         "Enter wall color (C64 graphics)"
+  },
+  {
+    ED_TEXTINPUT_ID_BD_COLOR_TEXT_4,
+    ED_ENGINE_SETTINGS_XPOS(0),                        ED_ENGINE_SETTINGS_YPOS(6),
+    GADGET_ID_BD_COLOR_TEXT_4,
+    MAX_BD_COLOR_TEXT_LEN,
+    bd_color_text[5],
+    NULL, "Amoeba color:      ", NULL,         "Enter amoeba color (C64 graphics)"
   },
+  {
+    ED_TEXTINPUT_ID_BD_COLOR_TEXT_5,
+    ED_ENGINE_SETTINGS_XPOS(0),                        ED_ENGINE_SETTINGS_YPOS(7),
+    GADGET_ID_BD_COLOR_TEXT_5,
+    MAX_BD_COLOR_TEXT_LEN,
+    bd_color_text[6],
+    NULL, "Slime color:       ", NULL,         "Enter slime color (C64 graphics)"
+  },
+
+  // ---------- element settings: configure (several elements) ----------------
+
   {
     ED_TEXTINPUT_ID_ELEMENT_NAME,
     -1, -1,    // these values are not constant, but can change at runtime
     GADGET_ID_ELEMENT_NAME,
-    MAX_ELEMENT_NAME_LEN - 2,          // currently 2 chars less editable
+    MAX_ELEMENT_NAME_LEN - 2,                  // currently 2 chars less editable
     custom_element.description,
-    NULL, "Element name"
+    NULL, NULL, NULL,                          "Enter element name"
   }
 };
 
@@ -1961,7 +2242,7 @@ static struct
 {
   {
     ED_TEXTAREA_ID_ENVELOPE_INFO,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(3),
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(3),
     GADGET_ID_ENVELOPE_INFO,
     MAX_ENVELOPE_XSIZE, MAX_ENVELOPE_YSIZE,
     NULL,
@@ -1971,711 +2252,753 @@ static struct
 
 static struct ValueTextInfo options_time_or_steps[] =
 {
-  { 0,                         "seconds"                       },
-  { 1,                         "steps"                         },
+  { 0,                                 "seconds"                       },
+  { 1,                                 "steps"                         },
 
-  { -1,                                NULL                            }
+  { -1,                                        NULL                            }
 };
 
 static struct ValueTextInfo options_time_score_base[] =
 {
-  { 1,                         "per second/step"               },
-  { 10,                                "per 10 seconds/steps"          },
+  { 1,                                 "per second/step"               },
+  { 10,                                        "per 10 seconds/steps"          },
 
-  { -1,                                NULL                            }
+  { -1,                                        NULL                            }
 };
 
 static struct ValueTextInfo options_game_engine_type[] =
 {
-  { GAME_ENGINE_TYPE_RND,      "Rocks'n'Diamonds"              },
-  { GAME_ENGINE_TYPE_BD,       "Boulder Dash"                  },
-  { GAME_ENGINE_TYPE_EM,       "Emerald Mine"                  },
-  { GAME_ENGINE_TYPE_SP,       "Supaplex"                      },
-  { GAME_ENGINE_TYPE_MM,       "Mirror Magic"                  },
+  { GAME_ENGINE_TYPE_RND,              "Rocks'n'Diamonds"              },
+  { GAME_ENGINE_TYPE_BD,               "Boulder Dash"                  },
+  { GAME_ENGINE_TYPE_EM,               "Emerald Mine"                  },
+  { GAME_ENGINE_TYPE_SP,               "Supaplex"                      },
+  { GAME_ENGINE_TYPE_MM,               "Mirror Magic"                  },
 
-  { -1,                                NULL                            }
+  { -1,                                        NULL                            }
 };
 
 static struct ValueTextInfo options_levelset_save_mode[] =
 {
-  { LEVELSET_SAVE_MODE_UPDATE, "Update this level set"         },
-  { LEVELSET_SAVE_MODE_CREATE, "Create new level set"          },
+  { LEVELSET_SAVE_MODE_UPDATE,         "Update this level set"         },
+  { LEVELSET_SAVE_MODE_CREATE,         "Create new level set"          },
 
-  { -1,                                NULL                            }
+  { -1,                                        NULL                            }
+};
+
+static struct ValueTextInfo options_bd_gravity_direction[] =
+{
+  { GD_MV_DOWN,                                "down"                          },
+  { GD_MV_UP,                          "up"                            },
+  { GD_MV_LEFT,                                "left"                          },
+  { GD_MV_RIGHT,                       "right"                         },
+
+  { -1,                                        NULL                            }
 };
 
 static struct ValueTextInfo options_wind_direction[] =
 {
-  { MV_START_NONE,             "none"                          },
-  { MV_START_LEFT,             "left"                          },
-  { MV_START_RIGHT,            "right"                         },
-  { MV_START_UP,               "up"                            },
-  { MV_START_DOWN,             "down"                          },
+  { MV_START_NONE,                     "none"                          },
+  { MV_START_LEFT,                     "left"                          },
+  { MV_START_RIGHT,                    "right"                         },
+  { MV_START_UP,                       "up"                            },
+  { MV_START_DOWN,                     "down"                          },
 
-  { -1,                                NULL                            }
+  { -1,                                        NULL                            }
 };
 
 static struct ValueTextInfo options_player_speed[] =
 {
-  { 0,                         "frozen"                        },
-  { 1,                         "very slow"                     },
-  { 2,                         "slow"                          },
-  { 4,                         "normal"                        },
-  { 8,                         "fast"                          },
-  { 16,                                "very fast"                     },
-  { 32,                                "ultrafast"                     },
+  { 0,                                 "frozen"                        },
+  { 1,                                 "very slow"                     },
+  { 2,                                 "slow"                          },
+  { 4,                                 "normal"                        },
+  { 8,                                 "fast"                          },
+  { 16,                                        "very fast"                     },
+  { 32,                                        "ultrafast"                     },
 
-  { -1,                                NULL                            }
+  { -1,                                        NULL                            }
 };
 
 static struct ValueTextInfo options_access_type[] =
 {
-  { EP_WALKABLE,               "walkable"                      },
-  { EP_PASSABLE,               "passable"                      },
+  { EP_WALKABLE,                       "walkable"                      },
+  { EP_PASSABLE,                       "passable"                      },
 
-  { -1,                                NULL                            }
+  { -1,                                        NULL                            }
 };
 
 static struct ValueTextInfo options_access_layer[] =
 {
-  { EP_ACCESSIBLE_OVER,                "over"                          },
-  { EP_ACCESSIBLE_INSIDE,      "inside"                        },
-  { EP_ACCESSIBLE_UNDER,       "under"                         },
+  { EP_ACCESSIBLE_OVER,                        "over"                          },
+  { EP_ACCESSIBLE_INSIDE,              "inside"                        },
+  { EP_ACCESSIBLE_UNDER,               "under"                         },
 
-  { -1,                                NULL                            }
+  { -1,                                        NULL                            }
 };
 
 static struct ValueTextInfo options_access_protected[] =
 {
-  { 0,                         "unprotected"                   },
-  { 1,                         "protected"                     },
+  { 0,                                 "unprotected"                   },
+  { 1,                                 "protected"                     },
 
-  { -1,                                NULL                            }
+  { -1,                                        NULL                            }
 };
 
 static struct ValueTextInfo options_access_direction[] =
 {
-  { MV_NO_DIRECTION,           "no direction"                  },
-  { MV_LEFT,                   "left"                          },
-  { MV_RIGHT,                  "right"                         },
-  { MV_UP,                     "up"                            },
-  { MV_DOWN,                   "down"                          },
-  { MV_LEFT  | MV_UP,          "left + up"                     },
-  { MV_LEFT  | MV_DOWN,                "left + down"                   },
-  { MV_RIGHT | MV_UP,          "right + up"                    },
-  { MV_RIGHT | MV_DOWN,                "right + down"                  },
-  { MV_HORIZONTAL,             "horizontal"                    },
-  { MV_VERTICAL,               "vertical"                      },
-  { MV_HORIZONTAL | MV_UP,     "horizontal + up"               },
-  { MV_HORIZONTAL | MV_DOWN,   "horizontal + down"             },
-  { MV_VERTICAL   | MV_LEFT,   "vertical + left"               },
-  { MV_VERTICAL   | MV_RIGHT,  "vertical + right"              },
-  { MV_ALL_DIRECTIONS,         "all directions"                },
-
-  { -1,                                NULL                            }
+  { MV_NO_DIRECTION,                   "no direction"                  },
+  { MV_LEFT,                           "left"                          },
+  { MV_RIGHT,                          "right"                         },
+  { MV_UP,                             "up"                            },
+  { MV_DOWN,                           "down"                          },
+  { MV_LEFT  | MV_UP,                  "left + up"                     },
+  { MV_LEFT  | MV_DOWN,                        "left + down"                   },
+  { MV_RIGHT | MV_UP,                  "right + up"                    },
+  { MV_RIGHT | MV_DOWN,                        "right + down"                  },
+  { MV_HORIZONTAL,                     "horizontal"                    },
+  { MV_VERTICAL,                       "vertical"                      },
+  { MV_HORIZONTAL | MV_UP,             "horizontal + up"               },
+  { MV_HORIZONTAL | MV_DOWN,           "horizontal + down"             },
+  { MV_VERTICAL   | MV_LEFT,           "vertical + left"               },
+  { MV_VERTICAL   | MV_RIGHT,          "vertical + right"              },
+  { MV_ALL_DIRECTIONS,                 "all directions"                },
+
+  { -1,                                        NULL                            }
 };
 
 static struct ValueTextInfo options_walk_to_action[] =
 {
-  { EP_DIGGABLE,               "diggable"                      },
-  { EP_COLLECTIBLE_ONLY,       "collectible"                   },
-  { EP_DROPPABLE,              "collectible & droppable"       },
-  { EP_THROWABLE,              "collectible & throwable"       },
-  { EP_PUSHABLE,               "pushable"                      },
+  { EP_DIGGABLE,                       "diggable"                      },
+  { EP_COLLECTIBLE_ONLY,               "collectible"                   },
+  { EP_DROPPABLE,                      "collectible & droppable"       },
+  { EP_THROWABLE,                      "collectible & throwable"       },
+  { EP_PUSHABLE,                       "pushable"                      },
 
-  { -1,                                NULL                            }
+  { -1,                                        NULL                            }
 };
 
 static struct ValueTextInfo options_move_pattern[] =
 {
-  { MV_LEFT,                   "left"                          },
-  { MV_RIGHT,                  "right"                         },
-  { MV_UP,                     "up"                            },
-  { MV_DOWN,                   "down"                          },
-  { MV_HORIZONTAL,             "horizontal"                    },
-  { MV_VERTICAL,               "vertical"                      },
-  { MV_ALL_DIRECTIONS,         "all directions"                },
-  { MV_WIND_DIRECTION,         "wind direction"                },
-  { MV_TOWARDS_PLAYER,         "towards player"                },
-  { MV_AWAY_FROM_PLAYER,       "away from player"              },
-  { MV_ALONG_LEFT_SIDE,                "along left side"               },
-  { MV_ALONG_RIGHT_SIDE,       "along right side"              },
-  { MV_TURNING_LEFT,           "turning left"                  },
-  { MV_TURNING_RIGHT,          "turning right"                 },
-  { MV_TURNING_LEFT_RIGHT,     "turning left, right"           },
-  { MV_TURNING_RIGHT_LEFT,     "turning right, left"           },
-  { MV_TURNING_RANDOM,         "turning random"                },
-  { MV_MAZE_RUNNER,            "maze runner style"             },
-  { MV_MAZE_HUNTER,            "maze hunter style"             },
-  { MV_WHEN_PUSHED,            "when pushed"                   },
-  { MV_WHEN_DROPPED,           "when dropped/thrown"           },
-
-  { -1,                                NULL                            }
+  { MV_LEFT,                           "left"                          },
+  { MV_RIGHT,                          "right"                         },
+  { MV_UP,                             "up"                            },
+  { MV_DOWN,                           "down"                          },
+  { MV_HORIZONTAL,                     "horizontal"                    },
+  { MV_VERTICAL,                       "vertical"                      },
+  { MV_ALL_DIRECTIONS,                 "all directions"                },
+  { MV_WIND_DIRECTION,                 "wind direction"                },
+  { MV_TOWARDS_PLAYER,                 "towards player"                },
+  { MV_AWAY_FROM_PLAYER,               "away from player"              },
+  { MV_ALONG_LEFT_SIDE,                        "along left side"               },
+  { MV_ALONG_RIGHT_SIDE,               "along right side"              },
+  { MV_TURNING_LEFT,                   "turning left"                  },
+  { MV_TURNING_RIGHT,                  "turning right"                 },
+  { MV_TURNING_LEFT_RIGHT,             "turning left, right"           },
+  { MV_TURNING_RIGHT_LEFT,             "turning right, left"           },
+  { MV_TURNING_RANDOM,                 "turning random"                },
+  { MV_MAZE_RUNNER,                    "maze runner style"             },
+  { MV_MAZE_HUNTER,                    "maze hunter style"             },
+  { MV_WHEN_PUSHED,                    "when pushed"                   },
+  { MV_WHEN_DROPPED,                   "when dropped/thrown"           },
+
+  { -1,                                        NULL                            }
 };
 
 static struct ValueTextInfo options_move_direction[] =
 {
-  { MV_START_AUTOMATIC,                "automatic"                     },
-  { MV_START_LEFT,             "left"                          },
-  { MV_START_RIGHT,            "right"                         },
-  { MV_START_UP,               "up"                            },
-  { MV_START_DOWN,             "down"                          },
-  { MV_START_RANDOM,           "random"                        },
-  { MV_START_PREVIOUS,         "previous"                      },
+  { MV_START_AUTOMATIC,                        "automatic"                     },
+  { MV_START_LEFT,                     "left"                          },
+  { MV_START_RIGHT,                    "right"                         },
+  { MV_START_UP,                       "up"                            },
+  { MV_START_DOWN,                     "down"                          },
+  { MV_START_RANDOM,                   "random"                        },
+  { MV_START_PREVIOUS,                 "previous"                      },
 
-  { -1,                                NULL                            }
+  { -1,                                        NULL                            }
 };
 
 static struct ValueTextInfo options_move_stepsize[] =
 {
-  { 0,                         "not moving"                    },
-  { 1,                         "very slow"                     },
-  { 2,                         "slow"                          },
-  { 4,                         "normal"                        },
-  { 8,                         "fast"                          },
-  { 16,                                "very fast"                     },
-  { 32,                                "even faster"                   },
+  { 0,                                 "not moving"                    },
+  { 1,                                 "very slow"                     },
+  { 2,                                 "slow"                          },
+  { 4,                                 "normal"                        },
+  { 8,                                 "fast"                          },
+  { 16,                                        "very fast"                     },
+  { 32,                                        "even faster"                   },
 
-  { -1,                                NULL                            }
+  { -1,                                        NULL                            }
 };
 
 static struct ValueTextInfo options_move_leave_type[] =
 {
-  { LEAVE_TYPE_UNLIMITED,      "leave behind"                  },
-  { LEAVE_TYPE_LIMITED,                "change it to"                  },
+  { LEAVE_TYPE_UNLIMITED,              "leave behind"                  },
+  { LEAVE_TYPE_LIMITED,                        "change it to"                  },
 
-  { -1,                                NULL                            }
+  { -1,                                        NULL                            }
 };
 
 static struct ValueTextInfo options_smash_targets[] =
 {
-  { EP_CAN_SMASH_PLAYER,       "player"                        },
+  { EP_CAN_SMASH_PLAYER,               "player"                        },
 #if 0
-  { EP_CAN_SMASH_ENEMIES,      "enemies"                       },
+  { EP_CAN_SMASH_ENEMIES,              "enemies"                       },
 #endif
-  { EP_CAN_SMASH_EVERYTHING,   "everything"                    },
+  { EP_CAN_SMASH_EVERYTHING,           "everything"                    },
 
-  { -1,                                NULL                            }
+  { -1,                                        NULL                            }
 };
 
 static struct ValueTextInfo options_slippery_type[] =
 {
-  { SLIPPERY_ANY_RANDOM,       "random"                        },
-  { SLIPPERY_ANY_LEFT_RIGHT,   "left, right"                   },
-  { SLIPPERY_ANY_RIGHT_LEFT,   "right, left"                   },
-  { SLIPPERY_ONLY_LEFT,                "only left"                     },
-  { SLIPPERY_ONLY_RIGHT,       "only right"                    },
+  { SLIPPERY_ANY_RANDOM,               "random"                        },
+  { SLIPPERY_ANY_LEFT_RIGHT,           "left, right"                   },
+  { SLIPPERY_ANY_RIGHT_LEFT,           "right, left"                   },
+  { SLIPPERY_ONLY_LEFT,                        "only left"                     },
+  { SLIPPERY_ONLY_RIGHT,               "only right"                    },
 
-  { -1,                                NULL                            }
+  { -1,                                        NULL                            }
 };
 
 static struct ValueTextInfo options_deadliness[] =
 {
-  { EP_DONT_RUN_INTO,          "running into"                  },
-  { EP_DONT_COLLIDE_WITH,      "colliding with"                },
-  { EP_DONT_GET_HIT_BY,                "getting hit by"                },
-  { EP_DONT_TOUCH,             "touching"                      },
+  { EP_DONT_RUN_INTO,                  "running into"                  },
+  { EP_DONT_COLLIDE_WITH,              "colliding with"                },
+  { EP_DONT_GET_HIT_BY,                        "getting hit by"                },
+  { EP_DONT_TOUCH,                     "touching"                      },
 
-  { -1,                                NULL                            }
+  { -1,                                        NULL                            }
 };
 
 static struct ValueTextInfo options_explosion_type[] =
 {
-  { EXPLODES_3X3,              "3x3"                           },
-  { EXPLODES_CROSS,            "3+3"                           },
-  { EXPLODES_1X1,              "1x1"                           },
+  { EXPLODES_3X3,                      "3x3"                           },
+  { EXPLODES_CROSS,                    "3+3"                           },
+  { EXPLODES_1X1,                      "1x1"                           },
 
-  { -1,                                NULL                            }
+  { -1,                                        NULL                            }
 };
 
 static struct ValueTextInfo options_time_units[] =
 {
-  { 1,                         "frames"                        },
-  { FRAMES_PER_SECOND,         "seconds"                       },
+  { 1,                                 "frames"                        },
+  { FRAMES_PER_SECOND,                 "seconds"                       },
 
-  { -1,                                NULL                            }
+  { -1,                                        NULL                            }
 };
 
 static struct ValueTextInfo options_change_direct_action[] =
 {
-  { CE_TOUCHED_BY_PLAYER,      "touched by player"             },
-  { CE_PRESSED_BY_PLAYER,      "pressed by player"             },
-  { CE_SWITCHED_BY_PLAYER,     "switched by player"            },
-  { CE_SNAPPED_BY_PLAYER,      "snapped by player"             },
-  { CE_PUSHED_BY_PLAYER,       "pushed by player"              },
-  { CE_ENTERED_BY_PLAYER,      "entered by player"             },
-  { CE_LEFT_BY_PLAYER,         "left by player"                },
-  { CE_DROPPED_BY_PLAYER,      "dropped/thrown by player"      },
-  { CE_SWITCHED,               "switched"                      },
-  { CE_HITTING_SOMETHING,      "hitting something"             },
-  { CE_HIT_BY_SOMETHING,       "hit by something"              },
+  { CE_TOUCHED_BY_PLAYER,              "touched by player"             },
+  { CE_PRESSED_BY_PLAYER,              "pressed by player"             },
+  { CE_SWITCHED_BY_PLAYER,             "switched by player"            },
+  { CE_SNAPPED_BY_PLAYER,              "snapped by player"             },
+  { CE_PUSHED_BY_PLAYER,               "pushed by player"              },
+  { CE_ENTERED_BY_PLAYER,              "entered by player"             },
+  { CE_LEFT_BY_PLAYER,                 "left by player"                },
+  { CE_DROPPED_BY_PLAYER,              "dropped/thrown by player"      },
+  { CE_SWITCHED,                       "switched"                      },
+  { CE_HITTING_SOMETHING,              "hitting something"             },
+  { CE_HIT_BY_SOMETHING,               "hit by something"              },
 #if 0
-  { CE_BLOCKED,                        "blocked"                       },
+  { CE_BLOCKED,                                "blocked"                       },
 #endif
-  { CE_IMPACT,                 "impact (on something)"         },
-  { CE_SMASHED,                        "smashed (from above)"          },
+  { CE_IMPACT,                         "impact (on something)"         },
+  { CE_SMASHED,                                "smashed (from above)"          },
 #if 0
-  { CE_VALUE_CHANGES,          "CE value changes"              },
-  { CE_SCORE_CHANGES,          "CE score changes"              },
+  { CE_VALUE_CHANGES,                  "CE value changes"              },
+  { CE_SCORE_CHANGES,                  "CE score changes"              },
 #endif
-  { CE_VALUE_GETS_ZERO,                "CE value gets 0"               },
-  { CE_SCORE_GETS_ZERO,                "CE score gets 0"               },
-  { CE_UNDEFINED,              " "                             },
-  { CE_HEADLINE_SPECIAL_EVENTS,        "[mouse events]"                },
-  { CE_CLICKED_BY_MOUSE,       "clicked by mouse"              },
-  { CE_PRESSED_BY_MOUSE,       "pressed by mouse"              },
-  { CE_UNDEFINED,              " "                             },
-  { CE_HEADLINE_SPECIAL_EVENTS,        "[static states]"               },
-  { CE_NEXT_TO_PLAYER,         "next to player"                },
-
-  { -1,                                NULL                            }
+  { CE_VALUE_GETS_ZERO,                        "CE value gets 0"               },
+  { CE_SCORE_GETS_ZERO,                        "CE score gets 0"               },
+  { CE_UNDEFINED,                      " "                             },
+  { CE_HEADLINE_SPECIAL_EVENTS,                "[mouse events]"                },
+  { CE_CLICKED_BY_MOUSE,               "clicked by mouse"              },
+  { CE_PRESSED_BY_MOUSE,               "pressed by mouse"              },
+  { CE_UNDEFINED,                      " "                             },
+  { CE_HEADLINE_SPECIAL_EVENTS,                "[static states]"               },
+  { CE_NEXT_TO_PLAYER,                 "next to player"                },
+
+  { -1,                                        NULL                            }
 };
 
 static struct ValueTextInfo options_change_other_action[] =
 {
-  { CE_PLAYER_TOUCHES_X,       "player touches"                },
-  { CE_PLAYER_PRESSES_X,       "player presses"                },
-  { CE_PLAYER_SWITCHES_X,      "player switches"               },
-  { CE_PLAYER_SNAPS_X,         "player snaps"                  },
-  { CE_PLAYER_PUSHES_X,                "player pushes"                 },
-  { CE_PLAYER_ENTERS_X,                "player enters"                 },
-  { CE_PLAYER_LEAVES_X,                "player leaves"                 },
-  { CE_PLAYER_DIGS_X,          "player digs"                   },
-  { CE_PLAYER_COLLECTS_X,      "player collects"               },
-  { CE_PLAYER_DROPS_X,         "player drops/throws"           },
-  { CE_TOUCHING_X,             "touching"                      },
-  { CE_HITTING_X,              "hitting"                       },
-  { CE_DIGGING_X,              "digging"                       },
-  { CE_HIT_BY_X,               "hit by"                        },
-  { CE_SWITCH_OF_X,            "switch of"                     },
-  { CE_CHANGE_OF_X,            "change by page of"             },
-  { CE_EXPLOSION_OF_X,         "explosion of"                  },
-  { CE_MOVE_OF_X,              "move of"                       },
-  { CE_CREATION_OF_X,          "creation of"                   },
-  { CE_VALUE_CHANGES_OF_X,     "CE value changes of"           },
-  { CE_SCORE_CHANGES_OF_X,     "CE score changes of"           },
-  { CE_VALUE_GETS_ZERO_OF_X,   "CE value gets 0 of"            },
-  { CE_SCORE_GETS_ZERO_OF_X,   "CE score gets 0 of"            },
-  { CE_UNDEFINED,              " "                             },
-  { CE_HEADLINE_SPECIAL_EVENTS,        "[mouse events]"                },
-  { CE_MOUSE_CLICKED_ON_X,     "mouse clicked on"              },
-  { CE_MOUSE_PRESSED_ON_X,     "mouse pressed on"              },
-  { CE_UNDEFINED,              " "                             },
-  { CE_HEADLINE_SPECIAL_EVENTS,        "[static states]"               },
-  { CE_PLAYER_NEXT_TO_X,       "player next to"                },
-  { CE_NEXT_TO_X,              "next to"                       },
-
-  { -1,                                NULL                            }
+  { CE_PLAYER_TOUCHES_X,               "player touches"                },
+  { CE_PLAYER_PRESSES_X,               "player presses"                },
+  { CE_PLAYER_SWITCHES_X,              "player switches"               },
+  { CE_PLAYER_SNAPS_X,                 "player snaps"                  },
+  { CE_PLAYER_PUSHES_X,                        "player pushes"                 },
+  { CE_PLAYER_ENTERS_X,                        "player enters"                 },
+  { CE_PLAYER_LEAVES_X,                        "player leaves"                 },
+  { CE_PLAYER_DIGS_X,                  "player digs"                   },
+  { CE_PLAYER_COLLECTS_X,              "player collects"               },
+  { CE_PLAYER_DROPS_X,                 "player drops/throws"           },
+  { CE_TOUCHING_X,                     "touching"                      },
+  { CE_HITTING_X,                      "hitting"                       },
+  { CE_DIGGING_X,                      "digging"                       },
+  { CE_HIT_BY_X,                       "hit by"                        },
+  { CE_SWITCH_OF_X,                    "switch of"                     },
+  { CE_CHANGE_OF_X,                    "change by page of"             },
+  { CE_EXPLOSION_OF_X,                 "explosion of"                  },
+  { CE_MOVE_OF_X,                      "move of"                       },
+  { CE_CREATION_OF_X,                  "creation of"                   },
+  { CE_VALUE_CHANGES_OF_X,             "CE value changes of"           },
+  { CE_SCORE_CHANGES_OF_X,             "CE score changes of"           },
+  { CE_VALUE_GETS_ZERO_OF_X,           "CE value gets 0 of"            },
+  { CE_SCORE_GETS_ZERO_OF_X,           "CE score gets 0 of"            },
+  { CE_UNDEFINED,                      " "                             },
+  { CE_HEADLINE_SPECIAL_EVENTS,                "[mouse events]"                },
+  { CE_MOUSE_CLICKED_ON_X,             "mouse clicked on"              },
+  { CE_MOUSE_PRESSED_ON_X,             "mouse pressed on"              },
+  { CE_UNDEFINED,                      " "                             },
+  { CE_HEADLINE_SPECIAL_EVENTS,                "[static states]"               },
+  { CE_PLAYER_NEXT_TO_X,               "player next to"                },
+  { CE_NEXT_TO_X,                      "next to"                       },
+
+  { -1,                                        NULL                            }
 };
 
 static struct ValueTextInfo options_change_trigger_side[] =
 {
-  { CH_SIDE_LEFT,              "left"                          },
-  { CH_SIDE_RIGHT,             "right"                         },
-  { CH_SIDE_TOP,               "top"                           },
-  { CH_SIDE_BOTTOM,            "bottom"                        },
-  { CH_SIDE_LEFT_RIGHT,                "left/right"                    },
-  { CH_SIDE_TOP_BOTTOM,                "top/bottom"                    },
-  { CH_SIDE_ANY,               "any"                           },
+  { CH_SIDE_LEFT,                      "left"                          },
+  { CH_SIDE_RIGHT,                     "right"                         },
+  { CH_SIDE_TOP,                       "top"                           },
+  { CH_SIDE_BOTTOM,                    "bottom"                        },
+  { CH_SIDE_LEFT_RIGHT,                        "left/right"                    },
+  { CH_SIDE_TOP_BOTTOM,                        "top/bottom"                    },
+  { CH_SIDE_ANY,                       "any"                           },
 
-  { -1,                                NULL                            }
+  { -1,                                        NULL                            }
 };
 
 static struct ValueTextInfo options_change_trigger_player[] =
 {
-  { CH_PLAYER_1,               "1"                             },
-  { CH_PLAYER_2,               "2"                             },
-  { CH_PLAYER_3,               "3"                             },
-  { CH_PLAYER_4,               "4"                             },
-  { CH_PLAYER_ANY,             "any"                           },
+  { CH_PLAYER_1,                       "1"                             },
+  { CH_PLAYER_2,                       "2"                             },
+  { CH_PLAYER_3,                       "3"                             },
+  { CH_PLAYER_4,                       "4"                             },
+  { CH_PLAYER_ANY,                     "any"                           },
 
-  { -1,                                NULL                            }
+  { -1,                                        NULL                            }
 };
 
 static struct ValueTextInfo options_change_trigger_page[] =
 {
-  { (1u << 0),                 "1"                             },
-  { (1u << 1),                 "2"                             },
-  { (1u << 2),                 "3"                             },
-  { (1u << 3),                 "4"                             },
-  { (1u << 4),                 "5"                             },
-  { (1u << 5),                 "6"                             },
-  { (1u << 6),                 "7"                             },
-  { (1u << 7),                 "8"                             },
-  { (1u << 8),                 "9"                             },
-  { (1u << 9),                 "10"                            },
-  { (1u << 10),                        "11"                            },
-  { (1u << 11),                        "12"                            },
-  { (1u << 12),                        "13"                            },
-  { (1u << 13),                        "14"                            },
-  { (1u << 14),                        "15"                            },
-  { (1u << 15),                        "16"                            },
-  { (1u << 16),                        "17"                            },
-  { (1u << 17),                        "18"                            },
-  { (1u << 18),                        "19"                            },
-  { (1u << 19),                        "20"                            },
-  { (1u << 20),                        "21"                            },
-  { (1u << 21),                        "22"                            },
-  { (1u << 22),                        "23"                            },
-  { (1u << 23),                        "24"                            },
-  { (1u << 24),                        "25"                            },
-  { (1u << 25),                        "26"                            },
-  { (1u << 26),                        "27"                            },
-  { (1u << 27),                        "28"                            },
-  { (1u << 28),                        "29"                            },
-  { (1u << 29),                        "30"                            },
-  { (1u << 30),                        "31"                            },
-  { (1u << 31),                        "32"                            },
-  { CH_PAGE_ANY,               "any"                           },
-
-  { -1,                                NULL                            }
+  { (1u << 0),                         "1"                             },
+  { (1u << 1),                         "2"                             },
+  { (1u << 2),                         "3"                             },
+  { (1u << 3),                         "4"                             },
+  { (1u << 4),                         "5"                             },
+  { (1u << 5),                         "6"                             },
+  { (1u << 6),                         "7"                             },
+  { (1u << 7),                         "8"                             },
+  { (1u << 8),                         "9"                             },
+  { (1u << 9),                         "10"                            },
+  { (1u << 10),                                "11"                            },
+  { (1u << 11),                                "12"                            },
+  { (1u << 12),                                "13"                            },
+  { (1u << 13),                                "14"                            },
+  { (1u << 14),                                "15"                            },
+  { (1u << 15),                                "16"                            },
+  { (1u << 16),                                "17"                            },
+  { (1u << 17),                                "18"                            },
+  { (1u << 18),                                "19"                            },
+  { (1u << 19),                                "20"                            },
+  { (1u << 20),                                "21"                            },
+  { (1u << 21),                                "22"                            },
+  { (1u << 22),                                "23"                            },
+  { (1u << 23),                                "24"                            },
+  { (1u << 24),                                "25"                            },
+  { (1u << 25),                                "26"                            },
+  { (1u << 26),                                "27"                            },
+  { (1u << 27),                                "28"                            },
+  { (1u << 28),                                "29"                            },
+  { (1u << 29),                                "30"                            },
+  { (1u << 30),                                "31"                            },
+  { (1u << 31),                                "32"                            },
+  { CH_PAGE_ANY,                       "any"                           },
+
+  { -1,                                        NULL                            }
 };
 
 static struct ValueTextInfo options_change_replace_when[] =
 {
-  { CP_WHEN_EMPTY,             "empty"                         },
-  { CP_WHEN_WALKABLE,          "walkable"                      },
-  { CP_WHEN_DIGGABLE,          "diggable"                      },
-  { CP_WHEN_COLLECTIBLE,       "collectible"                   },
-  { CP_WHEN_REMOVABLE,         "removable"                     },
-  { CP_WHEN_DESTRUCTIBLE,      "destructible"                  },
+  { CP_WHEN_EMPTY,                     "empty"                         },
+  { CP_WHEN_WALKABLE,                  "walkable"                      },
+  { CP_WHEN_DIGGABLE,                  "diggable"                      },
+  { CP_WHEN_COLLECTIBLE,               "collectible"                   },
+  { CP_WHEN_REMOVABLE,                 "removable"                     },
+  { CP_WHEN_DESTRUCTIBLE,              "destructible"                  },
 
-  { -1,                                NULL                            }
+  { -1,                                        NULL                            }
 };
 
 static struct ValueTextInfo options_action_type[] =
 {
-  { CA_NO_ACTION,              "no action"                     },
-  { CA_UNDEFINED,              " "                             },
-  { CA_HEADLINE_LEVEL_ACTIONS, "[level]"                       },
-  { CA_RESTART_LEVEL,          "restart level"                 },
-  { CA_SHOW_ENVELOPE,          "show envelope"                 },
-  { CA_SET_LEVEL_TIME,         "set time"                      },
-  { CA_SET_LEVEL_SCORE,                "set score"                     },
-  { CA_SET_LEVEL_GEMS,         "set gems"                      },
-  { CA_SET_LEVEL_WIND,         "set wind dir."                 },
-  { CA_SET_LEVEL_RANDOM_SEED,  "set random seed"               },
-  { CA_UNDEFINED,              " "                             },
-  { CA_HEADLINE_PLAYER_ACTIONS,        "[player]"                      },
-  { CA_MOVE_PLAYER,            "move player"                   },
-  { CA_MOVE_PLAYER_NEW,                "move player new"               },
-  { CA_EXIT_PLAYER,            "exit player"                   },
-  { CA_KILL_PLAYER,            "kill player"                   },
-  { CA_SET_PLAYER_KEYS,                "set keys"                      },
-  { CA_SET_PLAYER_SPEED,       "set speed"                     },
-  { CA_SET_PLAYER_SHIELD,      "set shield"                    },
-  { CA_SET_PLAYER_GRAVITY,     "set gravity"                   },
-  { CA_SET_PLAYER_ARTWORK,     "set artwork"                   },
-  { CA_SET_PLAYER_INVENTORY,   "set inventory"                 },
-  { CA_UNDEFINED,              " "                             },
-  { CA_HEADLINE_CE_ACTIONS,    "[CE]"                          },
-  { CA_SET_CE_VALUE,           "set CE value"                  },
-  { CA_SET_CE_SCORE,           "set CE score"                  },
-  { CA_SET_CE_ARTWORK,         "set CE artwork"                },
-  { CA_UNDEFINED,              " "                             },
-  { CA_HEADLINE_ENGINE_ACTIONS,        "[engine]"                      },
-  { CA_SET_ENGINE_SCAN_MODE,   "set scan mode"                 },
-
-  { -1,                                NULL                            }
+  { CA_NO_ACTION,                      "no action"                     },
+  { CA_UNDEFINED,                      " "                             },
+  { CA_HEADLINE_LEVEL_ACTIONS,         "[level]"                       },
+  { CA_RESTART_LEVEL,                  "restart level"                 },
+  { CA_SHOW_ENVELOPE,                  "show envelope"                 },
+  { CA_SET_LEVEL_TIME,                 "set time"                      },
+  { CA_SET_LEVEL_SCORE,                        "set score"                     },
+  { CA_SET_LEVEL_GEMS,                 "set gems"                      },
+  { CA_SET_LEVEL_WIND,                 "set wind dir."                 },
+  { CA_SET_LEVEL_RANDOM_SEED,          "set random seed"               },
+  { CA_UNDEFINED,                      " "                             },
+  { CA_HEADLINE_PLAYER_ACTIONS,                "[player]"                      },
+  { CA_MOVE_PLAYER,                    "move player"                   },
+  { CA_MOVE_PLAYER_NEW,                        "move player new"               },
+  { CA_EXIT_PLAYER,                    "exit player"                   },
+  { CA_KILL_PLAYER,                    "kill player"                   },
+  { CA_SET_PLAYER_KEYS,                        "set keys"                      },
+  { CA_SET_PLAYER_SPEED,               "set speed"                     },
+  { CA_SET_PLAYER_SHIELD,              "set shield"                    },
+  { CA_SET_PLAYER_GRAVITY,             "set gravity"                   },
+  { CA_SET_PLAYER_ARTWORK,             "set artwork"                   },
+  { CA_SET_PLAYER_INVENTORY,           "set inventory"                 },
+  { CA_UNDEFINED,                      " "                             },
+  { CA_HEADLINE_CE_ACTIONS,            "[CE]"                          },
+  { CA_SET_CE_VALUE,                   "set CE value"                  },
+  { CA_SET_CE_SCORE,                   "set CE score"                  },
+  { CA_SET_CE_ARTWORK,                 "set CE artwork"                },
+  { CA_UNDEFINED,                      " "                             },
+  { CA_HEADLINE_ENGINE_ACTIONS,                "[engine]"                      },
+  { CA_SET_ENGINE_SCAN_MODE,           "set scan mode"                 },
+
+  { -1,                                        NULL                            }
 };
 
 static struct ValueTextInfo options_action_mode_none[] =
 {
-  { CA_MODE_UNDEFINED,         " "                             },
+  { CA_MODE_UNDEFINED,                 " "                             },
 
-  { -1,                                NULL                            }
+  { -1,                                        NULL                            }
 };
 
 static struct ValueTextInfo options_action_mode_assign[] =
 {
-  { CA_MODE_SET,               "="                             },
+  { CA_MODE_SET,                       "="                             },
 
-  { -1,                                NULL                            }
+  { -1,                                        NULL                            }
 };
 
 static struct ValueTextInfo options_action_mode_add_remove[] =
 {
-  { CA_MODE_ADD,               "+"                             },
-  { CA_MODE_SUBTRACT,          "-"                             },
+  { CA_MODE_ADD,                       "+"                             },
+  { CA_MODE_SUBTRACT,                  "-"                             },
 
-  { -1,                                NULL                            }
+  { -1,                                        NULL                            }
 };
 
 static struct ValueTextInfo options_action_mode_calculate[] =
 {
-  { CA_MODE_SET,               "="                             },
-  { CA_MODE_ADD,               "+"                             },
-  { CA_MODE_SUBTRACT,          "-"                             },
-  { CA_MODE_MULTIPLY,          "*"                             },
-  { CA_MODE_DIVIDE,            "/"                             },
-  { CA_MODE_MODULO,            "%"                             },
+  { CA_MODE_SET,                       "="                             },
+  { CA_MODE_ADD,                       "+"                             },
+  { CA_MODE_SUBTRACT,                  "-"                             },
+  { CA_MODE_MULTIPLY,                  "*"                             },
+  { CA_MODE_DIVIDE,                    "/"                             },
+  { CA_MODE_MODULO,                    "%"                             },
 
-  { -1,                                NULL                            }
+  { -1,                                        NULL                            }
 };
 
 static struct ValueTextInfo options_action_arg_none[] =
 {
-  { CA_ARG_UNDEFINED,          "         "                     },
+  { CA_ARG_UNDEFINED,                  "         "                     },
 
-  { -1,                                NULL                            }
+  { -1,                                        NULL                            }
 };
 
 static struct ValueTextInfo options_action_arg_player[] =
 {
-  { CA_ARG_PLAYER_HEADLINE,    "[player]"                      },
-  { CA_ARG_PLAYER_1,           "1"                             },
-  { CA_ARG_PLAYER_2,           "2"                             },
-  { CA_ARG_PLAYER_3,           "3"                             },
-  { CA_ARG_PLAYER_4,           "4"                             },
-  { CA_ARG_PLAYER_ANY,         "any"                           },
-  { CA_ARG_PLAYER_TRIGGER,     "trigger"                       },
-  { CA_ARG_PLAYER_ACTION,      "action ->"                     },
+  { CA_ARG_PLAYER_HEADLINE,            "[player]"                      },
+  { CA_ARG_PLAYER_1,                   "1"                             },
+  { CA_ARG_PLAYER_2,                   "2"                             },
+  { CA_ARG_PLAYER_3,                   "3"                             },
+  { CA_ARG_PLAYER_4,                   "4"                             },
+  { CA_ARG_PLAYER_ANY,                 "any"                           },
+  { CA_ARG_PLAYER_TRIGGER,             "trigger"                       },
+  { CA_ARG_PLAYER_ACTION,              "action ->"                     },
 
-  { -1,                                NULL                            }
+  { -1,                                        NULL                            }
 };
 
 static struct ValueTextInfo options_action_arg_number[] =
 {
-  { CA_ARG_NUMBER_HEADLINE,    "[number]"                      },
-  { CA_ARG_0,                  "0"                             },
-  { CA_ARG_1,                  "1"                             },
-  { CA_ARG_2,                  "2"                             },
-  { CA_ARG_3,                  "3"                             },
-  { CA_ARG_4,                  "4"                             },
-  { CA_ARG_5,                  "5"                             },
-  { CA_ARG_10,                 "10"                            },
-  { CA_ARG_100,                        "100"                           },
-  { CA_ARG_1000,               "1000"                          },
-  { CA_ARG_UNDEFINED,          " "                             },
-  { CA_ARG_NUMBER_MIN,         "min"                           },
-  { CA_ARG_NUMBER_MAX,         "max"                           },
-  { CA_ARG_UNDEFINED,          " "                             },
-  { CA_ARG_NUMBER_RESET,       "reset"                         },
-  { CA_ARG_UNDEFINED,          " "                             },
-  { CA_ARG_NUMBER_CE_VALUE,    "CE value"                      },
-  { CA_ARG_NUMBER_CE_SCORE,    "CE score"                      },
-  { CA_ARG_NUMBER_CE_DELAY,    "CE delay"                      },
-  { CA_ARG_UNDEFINED,          " "                             },
-  { CA_ARG_NUMBER_LEVEL_TIME,  "time"                          },
-  { CA_ARG_NUMBER_LEVEL_GEMS,  "gems"                          },
-  { CA_ARG_NUMBER_LEVEL_SCORE, "score"                         },
-  { CA_ARG_UNDEFINED,          " "                             },
-  { CA_ARG_ELEMENT_CV_HEADLINE,        "[CE value]"                    },
-  { CA_ARG_ELEMENT_CV_TARGET,  "target"                        },
-  { CA_ARG_ELEMENT_CV_TRIGGER, "trigger"                       },
-  { CA_ARG_ELEMENT_CV_ACTION,  "action ->"                     },
-  { CA_ARG_UNDEFINED,          " "                             },
-  { CA_ARG_ELEMENT_CS_HEADLINE,        "[CE score]"                    },
-  { CA_ARG_ELEMENT_CS_TARGET,  "target"                        },
-  { CA_ARG_ELEMENT_CS_TRIGGER, "trigger"                       },
-  { CA_ARG_ELEMENT_CS_ACTION,  "action ->"                     },
-
-  { -1,                                NULL                            }
+  { CA_ARG_NUMBER_HEADLINE,            "[number]"                      },
+  { CA_ARG_0,                          "0"                             },
+  { CA_ARG_1,                          "1"                             },
+  { CA_ARG_2,                          "2"                             },
+  { CA_ARG_3,                          "3"                             },
+  { CA_ARG_4,                          "4"                             },
+  { CA_ARG_5,                          "5"                             },
+  { CA_ARG_10,                         "10"                            },
+  { CA_ARG_100,                                "100"                           },
+  { CA_ARG_1000,                       "1000"                          },
+  { CA_ARG_UNDEFINED,                  " "                             },
+  { CA_ARG_NUMBER_MIN,                 "min"                           },
+  { CA_ARG_NUMBER_MAX,                 "max"                           },
+  { CA_ARG_UNDEFINED,                  " "                             },
+  { CA_ARG_NUMBER_RESET,               "reset"                         },
+  { CA_ARG_UNDEFINED,                  " "                             },
+  { CA_ARG_NUMBER_CE_VALUE,            "CE value"                      },
+  { CA_ARG_NUMBER_CE_SCORE,            "CE score"                      },
+  { CA_ARG_NUMBER_CE_DELAY,            "CE delay"                      },
+  { CA_ARG_UNDEFINED,                  " "                             },
+  { CA_ARG_NUMBER_LEVEL_TIME,          "time"                          },
+  { CA_ARG_NUMBER_LEVEL_GEMS,          "gems"                          },
+  { CA_ARG_NUMBER_LEVEL_SCORE,         "score"                         },
+  { CA_ARG_UNDEFINED,                  " "                             },
+  { CA_ARG_ELEMENT_CV_HEADLINE,                "[CE value]"                    },
+  { CA_ARG_ELEMENT_CV_TARGET,          "target"                        },
+  { CA_ARG_ELEMENT_CV_TRIGGER,         "trigger"                       },
+  { CA_ARG_ELEMENT_CV_ACTION,          "action ->"                     },
+  { CA_ARG_UNDEFINED,                  " "                             },
+  { CA_ARG_ELEMENT_CS_HEADLINE,                "[CE score]"                    },
+  { CA_ARG_ELEMENT_CS_TARGET,          "target"                        },
+  { CA_ARG_ELEMENT_CS_TRIGGER,         "trigger"                       },
+  { CA_ARG_ELEMENT_CS_ACTION,          "action ->"                     },
+
+  { -1,                                        NULL                            }
 };
 
 static struct ValueTextInfo options_action_arg_value[] =
 {
-  { CA_ARG_NUMBER_HEADLINE,    "[number]"                      },
-  { CA_ARG_0,                  "0"                             },
-  { CA_ARG_1,                  "1"                             },
-  { CA_ARG_2,                  "2"                             },
-  { CA_ARG_3,                  "3"                             },
-  { CA_ARG_4,                  "4"                             },
-  { CA_ARG_5,                  "5"                             },
-  { CA_ARG_10,                 "10"                            },
-  { CA_ARG_100,                        "100"                           },
-  { CA_ARG_1000,               "1000"                          },
-  { CA_ARG_UNDEFINED,          " "                             },
-  { CA_ARG_NUMBER_MIN,         "min"                           },
-  { CA_ARG_NUMBER_MAX,         "max"                           },
-  { CA_ARG_UNDEFINED,          " "                             },
-  { CA_ARG_NUMBER_RESET,       "reset"                         },
-  { CA_ARG_UNDEFINED,          " "                             },
-  { CA_ARG_NUMBER_CE_VALUE,    "CE value"                      },
-  { CA_ARG_NUMBER_CE_SCORE,    "CE score"                      },
-  { CA_ARG_NUMBER_CE_DELAY,    "CE delay"                      },
-  { CA_ARG_UNDEFINED,          " "                             },
-  { CA_ARG_NUMBER_LEVEL_TIME,  "time"                          },
-  { CA_ARG_NUMBER_LEVEL_GEMS,  "gems"                          },
-  { CA_ARG_NUMBER_LEVEL_SCORE, "score"                         },
-  { CA_ARG_UNDEFINED,          " "                             },
-  { CA_ARG_ELEMENT_CV_HEADLINE,        "[CE value]"                    },
-  { CA_ARG_ELEMENT_CV_TARGET,  "target"                        },
-  { CA_ARG_ELEMENT_CV_TRIGGER, "trigger"                       },
-  { CA_ARG_ELEMENT_CV_ACTION,  "action ->"                     },
-  { CA_ARG_UNDEFINED,          " "                             },
-  { CA_ARG_ELEMENT_CS_HEADLINE,        "[CE score]"                    },
-  { CA_ARG_ELEMENT_CS_TARGET,  "target"                        },
-  { CA_ARG_ELEMENT_CS_TRIGGER, "trigger"                       },
-  { CA_ARG_ELEMENT_CS_ACTION,  "action ->"                     },
-  { CA_ARG_UNDEFINED,          " "                             },
-  { CA_ARG_ELEMENT_NR_HEADLINE,        "[element]"                     },
-  { CA_ARG_ELEMENT_NR_TARGET,  "target"                        },
-  { CA_ARG_ELEMENT_NR_TRIGGER, "trigger"                       },
-  { CA_ARG_ELEMENT_NR_ACTION,  "action ->"                     },
-
-  { -1,                                NULL                            }
+  { CA_ARG_NUMBER_HEADLINE,            "[number]"                      },
+  { CA_ARG_0,                          "0"                             },
+  { CA_ARG_1,                          "1"                             },
+  { CA_ARG_2,                          "2"                             },
+  { CA_ARG_3,                          "3"                             },
+  { CA_ARG_4,                          "4"                             },
+  { CA_ARG_5,                          "5"                             },
+  { CA_ARG_10,                         "10"                            },
+  { CA_ARG_100,                                "100"                           },
+  { CA_ARG_1000,                       "1000"                          },
+  { CA_ARG_UNDEFINED,                  " "                             },
+  { CA_ARG_NUMBER_MIN,                 "min"                           },
+  { CA_ARG_NUMBER_MAX,                 "max"                           },
+  { CA_ARG_UNDEFINED,                  " "                             },
+  { CA_ARG_NUMBER_RESET,               "reset"                         },
+  { CA_ARG_UNDEFINED,                  " "                             },
+  { CA_ARG_NUMBER_CE_VALUE,            "CE value"                      },
+  { CA_ARG_NUMBER_CE_SCORE,            "CE score"                      },
+  { CA_ARG_NUMBER_CE_DELAY,            "CE delay"                      },
+  { CA_ARG_UNDEFINED,                  " "                             },
+  { CA_ARG_NUMBER_LEVEL_TIME,          "time"                          },
+  { CA_ARG_NUMBER_LEVEL_GEMS,          "gems"                          },
+  { CA_ARG_NUMBER_LEVEL_SCORE,         "score"                         },
+  { CA_ARG_UNDEFINED,                  " "                             },
+  { CA_ARG_ELEMENT_CV_HEADLINE,                "[CE value]"                    },
+  { CA_ARG_ELEMENT_CV_TARGET,          "target"                        },
+  { CA_ARG_ELEMENT_CV_TRIGGER,         "trigger"                       },
+  { CA_ARG_ELEMENT_CV_ACTION,          "action ->"                     },
+  { CA_ARG_UNDEFINED,                  " "                             },
+  { CA_ARG_ELEMENT_CS_HEADLINE,                "[CE score]"                    },
+  { CA_ARG_ELEMENT_CS_TARGET,          "target"                        },
+  { CA_ARG_ELEMENT_CS_TRIGGER,         "trigger"                       },
+  { CA_ARG_ELEMENT_CS_ACTION,          "action ->"                     },
+  { CA_ARG_UNDEFINED,                  " "                             },
+  { CA_ARG_ELEMENT_NR_HEADLINE,                "[element]"                     },
+  { CA_ARG_ELEMENT_NR_TARGET,          "target"                        },
+  { CA_ARG_ELEMENT_NR_TRIGGER,         "trigger"                       },
+  { CA_ARG_ELEMENT_NR_ACTION,          "action ->"                     },
+
+  { -1,                                        NULL                            }
 };
 
 static struct ValueTextInfo options_action_arg_envelope[] =
 {
-  { CA_ARG_NUMBER_HEADLINE,    "[number]"                      },
-  { CA_ARG_1,                  "1"                             },
-  { CA_ARG_2,                  "2"                             },
-  { CA_ARG_3,                  "3"                             },
-  { CA_ARG_4,                  "4"                             },
-  { CA_ARG_UNDEFINED,          " "                             },
-  { CA_ARG_ELEMENT_HEADLINE,   "[element]"                     },
-  { CA_ARG_ELEMENT_TARGET,     "target"                        },
-  { CA_ARG_ELEMENT_TRIGGER,    "trigger"                       },
-  { CA_ARG_ELEMENT_ACTION,     "action ->"                     },
-
-  { -1,                                NULL                            }
+  { CA_ARG_NUMBER_HEADLINE,            "[number]"                      },
+  { CA_ARG_1,                          "1"                             },
+  { CA_ARG_2,                          "2"                             },
+  { CA_ARG_3,                          "3"                             },
+  { CA_ARG_4,                          "4"                             },
+  { CA_ARG_UNDEFINED,                  " "                             },
+  { CA_ARG_ELEMENT_HEADLINE,           "[element]"                     },
+  { CA_ARG_ELEMENT_TARGET,             "target"                        },
+  { CA_ARG_ELEMENT_TRIGGER,            "trigger"                       },
+  { CA_ARG_ELEMENT_ACTION,             "action ->"                     },
+
+  { -1,                                        NULL                            }
 };
 
 static struct ValueTextInfo options_action_arg_key[] =
 {
-  { CA_ARG_NUMBER_HEADLINE,    "[number]"                      },
-  { CA_ARG_1,                  "1"                             },
-  { CA_ARG_2,                  "2"                             },
-  { CA_ARG_3,                  "3"                             },
-  { CA_ARG_4,                  "4"                             },
-  { CA_ARG_5,                  "5"                             },
-  { CA_ARG_6,                  "6"                             },
-  { CA_ARG_7,                  "7"                             },
-  { CA_ARG_8,                  "8"                             },
-  { CA_ARG_UNDEFINED,          " "                             },
-  { CA_ARG_ELEMENT_HEADLINE,   "[element]"                     },
-  { CA_ARG_ELEMENT_TARGET,     "target"                        },
-  { CA_ARG_ELEMENT_TRIGGER,    "trigger"                       },
-  { CA_ARG_ELEMENT_ACTION,     "action ->"                     },
-
-  { -1,                                NULL                            }
+  { CA_ARG_NUMBER_HEADLINE,            "[number]"                      },
+  { CA_ARG_1,                          "1"                             },
+  { CA_ARG_2,                          "2"                             },
+  { CA_ARG_3,                          "3"                             },
+  { CA_ARG_4,                          "4"                             },
+  { CA_ARG_5,                          "5"                             },
+  { CA_ARG_6,                          "6"                             },
+  { CA_ARG_7,                          "7"                             },
+  { CA_ARG_8,                          "8"                             },
+  { CA_ARG_UNDEFINED,                  " "                             },
+  { CA_ARG_ELEMENT_HEADLINE,           "[element]"                     },
+  { CA_ARG_ELEMENT_TARGET,             "target"                        },
+  { CA_ARG_ELEMENT_TRIGGER,            "trigger"                       },
+  { CA_ARG_ELEMENT_ACTION,             "action ->"                     },
+
+  { -1,                                        NULL                            }
 };
 
 static struct ValueTextInfo options_action_arg_speed[] =
 {
-  { CA_ARG_SPEED_HEADLINE,     "[speed]"                       },
-  { CA_ARG_SPEED_NOT_MOVING,   "frozen"                        },
-  { CA_ARG_SPEED_VERY_SLOW,    "very slow"                     },
-  { CA_ARG_SPEED_SLOW,         "slow"                          },
-  { CA_ARG_SPEED_NORMAL,       "normal"                        },
-  { CA_ARG_SPEED_FAST,         "fast"                          },
-  { CA_ARG_SPEED_VERY_FAST,    "very fast"                     },
-  { CA_ARG_SPEED_EVEN_FASTER,  "ultrafast"                     },
-  { CA_ARG_UNDEFINED,          " "                             },
-  { CA_ARG_SPEED_SLOWER,       "slower"                        },
-  { CA_ARG_SPEED_FASTER,       "faster"                        },
-  { CA_ARG_UNDEFINED,          " "                             },
-  { CA_ARG_SPEED_RESET,                "reset"                         },
-
-  { -1,                                NULL                            }
+  { CA_ARG_SPEED_HEADLINE,             "[speed]"                       },
+  { CA_ARG_SPEED_NOT_MOVING,           "frozen"                        },
+  { CA_ARG_SPEED_VERY_SLOW,            "very slow"                     },
+  { CA_ARG_SPEED_SLOW,                 "slow"                          },
+  { CA_ARG_SPEED_NORMAL,               "normal"                        },
+  { CA_ARG_SPEED_FAST,                 "fast"                          },
+  { CA_ARG_SPEED_VERY_FAST,            "very fast"                     },
+  { CA_ARG_SPEED_EVEN_FASTER,          "ultrafast"                     },
+  { CA_ARG_UNDEFINED,                  " "                             },
+  { CA_ARG_SPEED_SLOWER,               "slower"                        },
+  { CA_ARG_SPEED_FASTER,               "faster"                        },
+  { CA_ARG_UNDEFINED,                  " "                             },
+  { CA_ARG_SPEED_RESET,                        "reset"                         },
+
+  { -1,                                        NULL                            }
 };
 
 static struct ValueTextInfo options_action_arg_shield[] =
 {
-  { CA_ARG_SHIELD_HEADLINE,    "[shield]"                      },
-  { CA_ARG_SHIELD_OFF,         "off"                           },
-  { CA_ARG_SHIELD_NORMAL,      "normal"                        },
-  { CA_ARG_SHIELD_DEADLY,      "deadly"                        },
+  { CA_ARG_SHIELD_HEADLINE,            "[shield]"                      },
+  { CA_ARG_SHIELD_OFF,                 "off"                           },
+  { CA_ARG_SHIELD_NORMAL,              "normal"                        },
+  { CA_ARG_SHIELD_DEADLY,              "deadly"                        },
 
-  { -1,                                NULL                            }
+  { -1,                                        NULL                            }
 };
 
 static struct ValueTextInfo options_action_arg_artwork[] =
 {
-  { CA_ARG_ELEMENT_HEADLINE,   "[element]"                     },
-  { CA_ARG_ELEMENT_TARGET,     "target"                        },
-  { CA_ARG_ELEMENT_TRIGGER,    "trigger"                       },
-  { CA_ARG_ELEMENT_ACTION,     "action ->"                     },
-  { CA_ARG_UNDEFINED,          " "                             },
-  { CA_ARG_ELEMENT_RESET,      "reset"                         },
+  { CA_ARG_ELEMENT_HEADLINE,           "[element]"                     },
+  { CA_ARG_ELEMENT_TARGET,             "target"                        },
+  { CA_ARG_ELEMENT_TRIGGER,            "trigger"                       },
+  { CA_ARG_ELEMENT_ACTION,             "action ->"                     },
+  { CA_ARG_UNDEFINED,                  " "                             },
+  { CA_ARG_ELEMENT_RESET,              "reset"                         },
 
-  { -1,                                NULL                            }
+  { -1,                                        NULL                            }
 };
 
 static struct ValueTextInfo options_action_arg_gravity[] =
 {
-  { CA_ARG_GRAVITY_HEADLINE,   "[gravity]"                     },
-  { CA_ARG_GRAVITY_ON,         "on"                            },
-  { CA_ARG_GRAVITY_OFF,                "off"                           },
-  { CA_ARG_GRAVITY_TOGGLE,     "toggle"                        },
+  { CA_ARG_GRAVITY_HEADLINE,           "[gravity]"                     },
+  { CA_ARG_GRAVITY_ON,                 "on"                            },
+  { CA_ARG_GRAVITY_OFF,                        "off"                           },
+  { CA_ARG_GRAVITY_TOGGLE,             "toggle"                        },
 
-  { -1,                                NULL                            }
+  { -1,                                        NULL                            }
 };
 
 static struct ValueTextInfo options_action_arg_direction[] =
 {
-  { CA_ARG_DIRECTION_HEADLINE, "[dir.]"                        },
-  { CA_ARG_DIRECTION_NONE,     "none"                          },
-  { CA_ARG_DIRECTION_LEFT,     "left"                          },
-  { CA_ARG_DIRECTION_RIGHT,    "right"                         },
-  { CA_ARG_DIRECTION_UP,       "up"                            },
-  { CA_ARG_DIRECTION_DOWN,     "down"                          },
-  { CA_ARG_DIRECTION_TRIGGER,  "trigger"                       },
-  { CA_ARG_DIRECTION_TRIGGER_BACK, "-trigger"                  },
+  { CA_ARG_DIRECTION_HEADLINE,         "[dir.]"                        },
+  { CA_ARG_DIRECTION_NONE,             "none"                          },
+  { CA_ARG_DIRECTION_LEFT,             "left"                          },
+  { CA_ARG_DIRECTION_RIGHT,            "right"                         },
+  { CA_ARG_DIRECTION_UP,               "up"                            },
+  { CA_ARG_DIRECTION_DOWN,             "down"                          },
+  { CA_ARG_DIRECTION_TRIGGER,          "trigger"                       },
+  { CA_ARG_DIRECTION_TRIGGER_BACK,     "-trigger"                      },
 
-  { -1,                                NULL                            }
+  { -1,                                        NULL                            }
 };
 
 static struct ValueTextInfo options_action_arg_scan_mode[] =
 {
-  { CA_ARG_SCAN_MODE_HEADLINE, "[mode]"                        },
-  { CA_ARG_SCAN_MODE_NORMAL,   "normal"                        },
-  { CA_ARG_SCAN_MODE_REVERSE,  "reverse"                       },
+  { CA_ARG_SCAN_MODE_HEADLINE,         "[mode]"                        },
+  { CA_ARG_SCAN_MODE_NORMAL,           "normal"                        },
+  { CA_ARG_SCAN_MODE_REVERSE,          "reverse"                       },
 
-  { -1,                                NULL                            }
+  { -1,                                        NULL                            }
 };
 
 static struct ValueTextInfo options_action_arg_inventory[] =
 {
-  { CA_ARG_INVENTORY_HEADLINE, "[add]"                         },
-  { CA_ARG_ELEMENT_TARGET,     "+ target"                      },
-  { CA_ARG_ELEMENT_TRIGGER,    "+ trigger"                     },
-  { CA_ARG_ELEMENT_ACTION,     "+ action"                      },
-  { CA_ARG_UNDEFINED,          " "                             },
-  { CA_ARG_INVENTORY_RM_HEADLINE,"[remove]"                    },
-  { CA_ARG_INVENTORY_RM_TARGET,        "- target"                      },
-  { CA_ARG_INVENTORY_RM_TRIGGER,"- trigger"                    },
-  { CA_ARG_INVENTORY_RM_ACTION,        "- action"                      },
-  { CA_ARG_INVENTORY_RM_FIRST, "- first"                       },
-  { CA_ARG_INVENTORY_RM_LAST,  "- last"                        },
-  { CA_ARG_INVENTORY_RM_ALL,   "- all"                         },
-  { CA_ARG_UNDEFINED,          " "                             },
-  { CA_ARG_INVENTORY_RESET,    "reset"                         },
-
-  { -1,                                NULL                            }
+  { CA_ARG_INVENTORY_HEADLINE,         "[add]"                         },
+  { CA_ARG_ELEMENT_TARGET,             "+ target"                      },
+  { CA_ARG_ELEMENT_TRIGGER,            "+ trigger"                     },
+  { CA_ARG_ELEMENT_ACTION,             "+ action"                      },
+  { CA_ARG_UNDEFINED,                  " "                             },
+  { CA_ARG_INVENTORY_RM_HEADLINE,      "[remove]"                      },
+  { CA_ARG_INVENTORY_RM_TARGET,                "- target"                      },
+  { CA_ARG_INVENTORY_RM_TRIGGER,       "- trigger"                     },
+  { CA_ARG_INVENTORY_RM_ACTION,                "- action"                      },
+  { CA_ARG_INVENTORY_RM_FIRST,         "- first"                       },
+  { CA_ARG_INVENTORY_RM_LAST,          "- last"                        },
+  { CA_ARG_INVENTORY_RM_ALL,           "- all"                         },
+  { CA_ARG_UNDEFINED,                  " "                             },
+  { CA_ARG_INVENTORY_RESET,            "reset"                         },
+
+  { -1,                                        NULL                            }
 };
 
 static char options_change_page_strings[MAX_CHANGE_PAGES][10];
 static struct ValueTextInfo options_change_page[MAX_CHANGE_PAGES + 1] =
 {
-  { -1,                                NULL                            }
+  { -1,                                        NULL                            }
 };
 
 static struct ValueTextInfo options_group_choice_mode[] =
 {
-  { ANIM_RANDOM,               "random"                        },
-  { ANIM_LOOP,                 "loop"                          },
-  { ANIM_LINEAR,               "linear"                        },
-  { ANIM_PINGPONG,             "pingpong"                      },
-  { ANIM_PINGPONG2,            "pingpong 2"                    },
-  { ANIM_LEVEL_NR,             "level number"                  },
+  { ANIM_RANDOM,                       "random"                        },
+  { ANIM_LOOP,                         "loop"                          },
+  { ANIM_LINEAR,                       "linear"                        },
+  { ANIM_PINGPONG,                     "pingpong"                      },
+  { ANIM_PINGPONG2,                    "pingpong 2"                    },
+  { ANIM_LEVEL_NR,                     "level number"                  },
 
-  { -1,                                NULL                            }
+  { -1,                                        NULL                            }
 };
 
 static struct ValueTextInfo options_bd_scheduling_type[] =
 {
-  { GD_SCHEDULING_MILLISECONDS,          "Milliseconds"                },
-  { GD_SCHEDULING_BD1,           "BD1"                         },
-  { GD_SCHEDULING_BD2,           "BD2"                         },
-  { GD_SCHEDULING_PLCK,                  "Construction Kit"            },
-  { GD_SCHEDULING_CRDR,                  "Crazy Dream 7"               },
-  { GD_SCHEDULING_BD1_ATARI,     "Atari BD1"                   },
-  { GD_SCHEDULING_BD2_PLCK_ATARI, "Atari BD2 / PLCK"           },
+  { GD_SCHEDULING_MILLISECONDS,                "Milliseconds"                  },
+  { GD_SCHEDULING_BD1,                 "BD1"                           },
+  { GD_SCHEDULING_BD2,                 "BD2"                           },
+  { GD_SCHEDULING_PLCK,                        "Construction Kit"              },
+  { GD_SCHEDULING_CRDR,                        "Crazy Dream 7"                 },
+  { GD_SCHEDULING_BD1_ATARI,           "Atari BD1"                     },
+  { GD_SCHEDULING_BD2_PLCK_ATARI,      "Atari BD2 / PLCK"              },
+
+  { -1,                                          NULL                          }
+};
+
+static struct ValueTextInfo options_bd_color_type[] =
+{
+  { GD_COLOR_TYPE_RGB,                 "RGB colors"                    },
+  { GD_COLOR_TYPE_C64,                 "C64 colors"                    },
+  { GD_COLOR_TYPE_C64DTV,              "C64DTV colors"                 },
+  { GD_COLOR_TYPE_ATARI,               "Atari colors"                  },
+
+  { -1,                                          NULL                          }
+};
 
-  { -1,                                  NULL                          }
+static struct ValueTextInfo options_bd_color_c64_name[] =
+{
+  { GD_COLOR_INDEX_BLACK,              "Black"                         },
+  { GD_COLOR_INDEX_WHITE,              "White"                         },
+  { GD_COLOR_INDEX_RED,                        "Red"                           },
+  { GD_COLOR_INDEX_CYAN,               "Cyan"                          },
+  { GD_COLOR_INDEX_PURPLE,             "Purple"                        },
+  { GD_COLOR_INDEX_GREEN,              "Green"                         },
+  { GD_COLOR_INDEX_BLUE,               "Blue"                          },
+  { GD_COLOR_INDEX_YELLOW,             "Yellow"                        },
+  { GD_COLOR_INDEX_ORANGE,             "Orange"                        },
+  { GD_COLOR_INDEX_BROWN,              "Brown"                         },
+  { GD_COLOR_INDEX_LIGHTRED,           "Light red"                     },
+  { GD_COLOR_INDEX_GRAY1,              "Dark gray"                     },
+  { GD_COLOR_INDEX_GRAY2,              "Gray"                          },
+  { GD_COLOR_INDEX_LIGHTGREEN,         "Light green"                   },
+  { GD_COLOR_INDEX_LIGHTBLUE,          "Light blue"                    },
+  { GD_COLOR_INDEX_GRAY3,              "Light gray"                    },
+
+  { -1,                                          NULL                          }
 };
 
 static struct ValueTextInfo *action_arg_modes[] =
@@ -2736,56 +3059,135 @@ static struct
 
   {
     ED_SELECTBOX_ID_TIME_OR_STEPS,
-    -1,                                        ED_LEVEL_SETTINGS_YPOS(8),
-    GADGET_ID_TIME_OR_STEPS,           GADGET_ID_LEVEL_TIMELIMIT_UP,
+    -1,                                                ED_LEVEL_SETTINGS_YPOS(8),
+    GADGET_ID_TIME_OR_STEPS,                   GADGET_ID_LEVEL_TIMELIMIT_UP,
     -1,
     options_time_or_steps,
     &level.use_step_counter,
-    NULL, NULL, "(0 => no limit)",     "Select time or step limit"
+    NULL, NULL, "(0 => no limit)",             "Select time or step limit"
   },
   {
     ED_SELECTBOX_ID_TIME_SCORE_BASE,
-    -1,                                        ED_LEVEL_SETTINGS_YPOS(10),
-    GADGET_ID_TIME_SCORE_BASE,         GADGET_ID_LEVEL_TIMESCORE_UP,
+    -1,                                                ED_LEVEL_SETTINGS_YPOS(10),
+    GADGET_ID_TIME_SCORE_BASE,                 GADGET_ID_LEVEL_TIMESCORE_UP,
     -1,
     options_time_score_base,
     &level.time_score_base,
-    NULL, NULL, NULL,                  "Select time score for 1 or 10 seconds/steps"
+    NULL, NULL, NULL,                          "Select time score for 1 or 10 seconds/steps"
   },
   {
     ED_SELECTBOX_ID_GAME_ENGINE_TYPE,
-    ED_LEVEL_SETTINGS_XPOS(0),         ED_LEVEL_SETTINGS_YPOS(12),
-    GADGET_ID_GAME_ENGINE_TYPE,                GADGET_ID_NONE,
+    ED_LEVEL_SETTINGS_XPOS(0),                 ED_LEVEL_SETTINGS_YPOS(12),
+    GADGET_ID_GAME_ENGINE_TYPE,                        GADGET_ID_NONE,
     -1,
     options_game_engine_type,
     &level.game_engine_type,
-    NULL, "Game engine:", NULL,                "Select game engine"
+    NULL, "Game engine:", NULL,                        "Select game engine"
   },
+  {
+    ED_SELECTBOX_ID_LEVELSET_SAVE_MODE,
+    ED_LEVEL_SETTINGS_XPOS(0),                 ED_LEVEL_SETTINGS_YPOS(10),
+    GADGET_ID_LEVELSET_SAVE_MODE,              GADGET_ID_NONE,
+    -1,
+    options_levelset_save_mode,
+    &levelset_save_mode,
+    "Action:", NULL, NULL,                     "Select action when saving level set"
+  },
+
+  // ---------- engine settings: config ---------------------------------------
+
   {
     ED_SELECTBOX_ID_BD_SCHEDULING_TYPE,
-    ED_LEVEL_SETTINGS_XPOS(0),         ED_LEVEL_SETTINGS_YPOS(1),
-    GADGET_ID_BD_SCHEDULING_TYPE,      GADGET_ID_NONE,
+    ED_ENGINE_SETTINGS_XPOS(0),                        ED_ENGINE_SETTINGS_YPOS(1),
+    GADGET_ID_BD_SCHEDULING_TYPE,              GADGET_ID_NONE,
     -1,
     options_bd_scheduling_type,
     &level.bd_scheduling_type,
-    NULL, "Scheduling type:", NULL,    "Select level timing"
+    NULL, "Scheduling type:", NULL,            "Select level timing"
   },
+
+  // ---------- engine settings: colors ---------------------------------------
+
   {
-    ED_SELECTBOX_ID_LEVELSET_SAVE_MODE,
-    ED_LEVEL_SETTINGS_XPOS(0),         ED_LEVEL_SETTINGS_YPOS(10),
-    GADGET_ID_LEVELSET_SAVE_MODE,      GADGET_ID_NONE,
+    ED_SELECTBOX_ID_BD_COLOR_TYPE,
+    ED_ENGINE_SETTINGS_XPOS(0),                        ED_ENGINE_SETTINGS_YPOS(0),
+    GADGET_ID_BD_COLOR_TYPE,                   GADGET_ID_NONE,
     -1,
-    options_levelset_save_mode,
-    &levelset_save_mode,
-    "Action:", NULL, NULL,             "Select action when saving level set"
+    options_bd_color_type,
+    &level.bd_color_type,
+    "Boulder Dash level colors:",
+    "Color palette type:", NULL,               "Select color palette type"
+  },
+  {
+    ED_SELECTBOX_ID_BD_COLOR_C64_B,
+    ED_ENGINE_SETTINGS_XPOS(0),                        ED_ENGINE_SETTINGS_YPOS(1),
+    GADGET_ID_BD_COLOR_C64_B,                  GADGET_ID_NONE,
+    -1,
+    options_bd_color_c64_name,
+    &bd_color_c64[0],
+    NULL, "Border color:      ", NULL,         "Select border color (not used)"
+  },
+  {
+    ED_SELECTBOX_ID_BD_COLOR_C64_0,
+    ED_ENGINE_SETTINGS_XPOS(0),                        ED_ENGINE_SETTINGS_YPOS(2),
+    GADGET_ID_BD_COLOR_C64_0,                  GADGET_ID_NONE,
+    -1,
+    options_bd_color_c64_name,
+    &bd_color_c64[1],
+    NULL, "Background color:  ", NULL,         "Select background color (C64 graphics)"
+  },
+  {
+    ED_SELECTBOX_ID_BD_COLOR_C64_1,
+    ED_ENGINE_SETTINGS_XPOS(0),                        ED_ENGINE_SETTINGS_YPOS(3),
+    GADGET_ID_BD_COLOR_C64_1,                  GADGET_ID_NONE,
+    -1,
+    options_bd_color_c64_name,
+    &bd_color_c64[2],
+    NULL, "Sand color:        ", NULL,         "Select sand color (C64 graphics)"
+  },
+  {
+    ED_SELECTBOX_ID_BD_COLOR_C64_2,
+    ED_ENGINE_SETTINGS_XPOS(0),                        ED_ENGINE_SETTINGS_YPOS(4),
+    GADGET_ID_BD_COLOR_C64_2,                  GADGET_ID_NONE,
+    -1,
+    options_bd_color_c64_name,
+    &bd_color_c64[3],
+    NULL, "Steel wall color:  ", NULL,         "Select steel wall color (C64 graphics)"
+  },
+  {
+    ED_SELECTBOX_ID_BD_COLOR_C64_3,
+    ED_ENGINE_SETTINGS_XPOS(0),                        ED_ENGINE_SETTINGS_YPOS(5),
+    GADGET_ID_BD_COLOR_C64_3,                  GADGET_ID_NONE,
+    -1,
+    options_bd_color_c64_name,
+    &bd_color_c64[4],
+    NULL, "Wall color:        ", NULL,         "Select wall color (C64 graphics)"
+  },
+  {
+    ED_SELECTBOX_ID_BD_COLOR_C64_4,
+    ED_ENGINE_SETTINGS_XPOS(0),                        ED_ENGINE_SETTINGS_YPOS(6),
+    GADGET_ID_BD_COLOR_C64_4,                  GADGET_ID_NONE,
+    -1,
+    options_bd_color_c64_name,
+    &bd_color_c64[5],
+    NULL, "Amoeba color:      ", NULL,         "Select amoeba color (C64 graphics)"
+  },
+  {
+    ED_SELECTBOX_ID_BD_COLOR_C64_5,
+    ED_ENGINE_SETTINGS_XPOS(0),                        ED_ENGINE_SETTINGS_YPOS(7),
+    GADGET_ID_BD_COLOR_C64_5,                  GADGET_ID_NONE,
+    -1,
+    options_bd_color_c64_name,
+    &bd_color_c64[6],
+    NULL, "Slime color:       ", NULL,         "Select slime color (C64 graphics)"
   },
 
   // ---------- element settings: configure (several elements) ----------------
 
   {
     ED_SELECTBOX_ID_WIND_DIRECTION,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(0),
-    GADGET_ID_WIND_DIRECTION,          GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(0),
+    GADGET_ID_WIND_DIRECTION,                  GADGET_ID_NONE,
     -1,
     options_wind_direction,
     &level.wind_direction_initial,
@@ -2793,261 +3195,270 @@ static struct
   },
   {
     ED_SELECTBOX_ID_PLAYER_SPEED,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(7),
-    GADGET_ID_PLAYER_SPEED,            GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(7),
+    GADGET_ID_PLAYER_SPEED,                    GADGET_ID_NONE,
     -1,
     options_player_speed,
     &level.initial_player_stepsize[0],
     NULL, "Initial player speed:", NULL,       "Select initial player speed"
   },
+  {
+    ED_SELECTBOX_ID_BD_GRAVITY_DIRECTION,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(0),
+    GADGET_ID_BD_GRAVITY_DIRECTION,            GADGET_ID_NONE,
+    -1,
+    options_bd_gravity_direction,
+    &level.bd_gravity_direction,
+    NULL, "Gravity direction:", NULL,          "Select initial gravity direction"
+  },
   {
     ED_SELECTBOX_ID_MM_BALL_CHOICE_MODE,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(4),
-    GADGET_ID_MM_BALL_CHOICE_MODE,     GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(4),
+    GADGET_ID_MM_BALL_CHOICE_MODE,             GADGET_ID_NONE,
     -1,
     options_group_choice_mode,
     &level.mm_ball_choice_mode,
-    NULL, "Choice type:", NULL,                "Select type of content choice"
+    NULL, "Choice type:", NULL,                        "Select type of content choice"
   },
 
   // ---------- element settings: configure 1 (custom elements) ---------------
 
   {
     ED_SELECTBOX_ID_CUSTOM_ACCESS_TYPE,
-    ED_ELEMENT_SETTINGS_XPOS(1),       ED_ELEMENT_SETTINGS_YPOS(2),
-    GADGET_ID_CUSTOM_ACCESS_TYPE,      GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(1),               ED_ELEMENT_SETTINGS_YPOS(2),
+    GADGET_ID_CUSTOM_ACCESS_TYPE,              GADGET_ID_NONE,
     -1,
     options_access_type,
     &custom_element.access_type,
-    NULL, NULL, NULL,                  "Select type of access to this field"
+    NULL, NULL, NULL,                          "Select type of access to this field"
   },
   {
     ED_SELECTBOX_ID_CUSTOM_ACCESS_LAYER,
-    -1,                                        ED_ELEMENT_SETTINGS_YPOS(2),
-    GADGET_ID_CUSTOM_ACCESS_LAYER,     GADGET_ID_CUSTOM_ACCESS_TYPE,
+    -1,                                                ED_ELEMENT_SETTINGS_YPOS(2),
+    GADGET_ID_CUSTOM_ACCESS_LAYER,             GADGET_ID_CUSTOM_ACCESS_TYPE,
     -1,
     options_access_layer,
     &custom_element.access_layer,
-    NULL, NULL, NULL,                  "Select layer of access for this field"
+    NULL, NULL, NULL,                          "Select layer of access for this field"
   },
   {
     ED_SELECTBOX_ID_CUSTOM_ACCESS_PROTECTED,
-    -1,                                        ED_ELEMENT_SETTINGS_YPOS(2),
-    GADGET_ID_CUSTOM_ACCESS_PROTECTED, GADGET_ID_CUSTOM_ACCESS_LAYER,
+    -1,                                                ED_ELEMENT_SETTINGS_YPOS(2),
+    GADGET_ID_CUSTOM_ACCESS_PROTECTED,         GADGET_ID_CUSTOM_ACCESS_LAYER,
     -1,
     options_access_protected,
     &custom_element.access_protected,
-    NULL, NULL, NULL,                  "Select protected access for this field"
+    NULL, NULL, NULL,                          "Select protected access for this field"
   },
   {
     ED_SELECTBOX_ID_CUSTOM_ACCESS_DIRECTION,
-    ED_ELEMENT_SETTINGS_XPOS(1),       ED_ELEMENT_SETTINGS_YPOS(3),
-    GADGET_ID_CUSTOM_ACCESS_DIRECTION, GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(1),               ED_ELEMENT_SETTINGS_YPOS(3),
+    GADGET_ID_CUSTOM_ACCESS_DIRECTION,         GADGET_ID_NONE,
     -1,
     options_access_direction,
     &custom_element.access_direction,
-    NULL, "from", NULL,                        "Select access direction for this field"
+    NULL, "from", NULL,                                "Select access direction for this field"
   },
   {
     ED_SELECTBOX_ID_CUSTOM_WALK_TO_ACTION,
-    ED_ELEMENT_SETTINGS_XPOS(1),       ED_ELEMENT_SETTINGS_YPOS(4),
-    GADGET_ID_CUSTOM_WALK_TO_ACTION,   GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(1),               ED_ELEMENT_SETTINGS_YPOS(4),
+    GADGET_ID_CUSTOM_WALK_TO_ACTION,           GADGET_ID_NONE,
     -1,
     options_walk_to_action,
     &custom_element.walk_to_action,
-    NULL, NULL, NULL,                  "Select diggable/collectible/pushable"
+    NULL, NULL, NULL,                          "Select diggable/collectible/pushable"
   },
 
   // ---------- element settings: configure 2 (custom elements) ---------------
 
   {
     ED_SELECTBOX_ID_CUSTOM_MOVE_PATTERN,
-    ED_ELEMENT_SETTINGS_XPOS(1),       ED_ELEMENT_SETTINGS_YPOS(1),
-    GADGET_ID_CUSTOM_MOVE_PATTERN,     GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(1),               ED_ELEMENT_SETTINGS_YPOS(1),
+    GADGET_ID_CUSTOM_MOVE_PATTERN,             GADGET_ID_NONE,
     -1,
     options_move_pattern,
     &custom_element.move_pattern,
-    NULL, "Can move", NULL,            "Select element move pattern"
+    NULL, "Can move", NULL,                    "Select element move pattern"
   },
   {
     ED_SELECTBOX_ID_CUSTOM_MOVE_DIRECTION,
-    ED_ELEMENT_SETTINGS_XPOS(1),       ED_ELEMENT_SETTINGS_YPOS(2),
-    GADGET_ID_CUSTOM_MOVE_DIRECTION,   GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(1),               ED_ELEMENT_SETTINGS_YPOS(2),
+    GADGET_ID_CUSTOM_MOVE_DIRECTION,           GADGET_ID_NONE,
     -1,
     options_move_direction,
     &custom_element.move_direction_initial,
-    NULL, "Starts moving", NULL,       "Select initial element move direction"
+    NULL, "Starts moving", NULL,               "Select initial element move direction"
   },
   {
     ED_SELECTBOX_ID_CUSTOM_MOVE_STEPSIZE,
-    ED_ELEMENT_SETTINGS_XPOS(1),       ED_ELEMENT_SETTINGS_YPOS(4),
-    GADGET_ID_CUSTOM_MOVE_STEPSIZE,    GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(1),               ED_ELEMENT_SETTINGS_YPOS(4),
+    GADGET_ID_CUSTOM_MOVE_STEPSIZE,            GADGET_ID_NONE,
     -1,
     options_move_stepsize,
     &custom_element.move_stepsize,
-    NULL, "Move/fall speed", NULL,     "Select speed of element movement"
+    NULL, "Move/fall speed", NULL,             "Select speed of element movement"
   },
   {
     ED_SELECTBOX_ID_CUSTOM_MOVE_LEAVE_TYPE,
-    ED_ELEMENT_SETTINGS_XPOS(1),       ED_ELEMENT_SETTINGS_YPOS(3),
-    GADGET_ID_CUSTOM_MOVE_LEAVE_TYPE,  GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(1),               ED_ELEMENT_SETTINGS_YPOS(3),
+    GADGET_ID_CUSTOM_MOVE_LEAVE_TYPE,          GADGET_ID_NONE,
     -1,
     options_move_leave_type,
     &custom_element.move_leave_type,
     // left text with leading spaces to place gadget next to "can dig" gadget
     // (needed because drawing area gadgets created after selectbox gadgets)
-    // NULL, "can dig:    can", ":",   "leave behind or change element"
-    NULL, "            Can", ":",      "Select leave behind or change element"
+    // NULL, "can dig:    can", ":",           "leave behind or change element"
+    NULL, "            Can", ":",              "Select leave behind or change element"
   },
   {
     ED_SELECTBOX_ID_CUSTOM_SMASH_TARGETS,
-    -1,                                        ED_ELEMENT_SETTINGS_YPOS(8),
-    GADGET_ID_CUSTOM_SMASH_TARGETS,    GADGET_ID_CUSTOM_CAN_SMASH,
+    -1,                                                ED_ELEMENT_SETTINGS_YPOS(8),
+    GADGET_ID_CUSTOM_SMASH_TARGETS,            GADGET_ID_CUSTOM_CAN_SMASH,
     -1,
     options_smash_targets,
     &custom_element.smash_targets,
-    NULL, "Can smash", NULL,           "Select elements that can be smashed"
+    NULL, "Can smash", NULL,                   "Select elements that can be smashed"
   },
   {
     ED_SELECTBOX_ID_CUSTOM_SLIPPERY_TYPE,
-    ED_ELEMENT_SETTINGS_XPOS(1),       ED_ELEMENT_SETTINGS_YPOS(9),
-    GADGET_ID_CUSTOM_SLIPPERY_TYPE,    GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(1),               ED_ELEMENT_SETTINGS_YPOS(9),
+    GADGET_ID_CUSTOM_SLIPPERY_TYPE,            GADGET_ID_NONE,
     -1,
     options_slippery_type,
     &custom_element.slippery_type,
-    NULL, "Slippery", NULL,            "Select where other elements fall down"
+    NULL, "Slippery", NULL,                    "Select where other elements fall down"
   },
   {
     ED_SELECTBOX_ID_CUSTOM_DEADLINESS,
-    ED_ELEMENT_SETTINGS_XPOS(1),       ED_ELEMENT_SETTINGS_YPOS(10),
-    GADGET_ID_CUSTOM_DEADLINESS,       GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(1),               ED_ELEMENT_SETTINGS_YPOS(10),
+    GADGET_ID_CUSTOM_DEADLINESS,               GADGET_ID_NONE,
     -1,
     options_deadliness,
     &custom_element.deadliness,
-    NULL, "Deadly when", NULL,         "Select deadliness of element"
+    NULL, "Deadly when", NULL,                 "Select deadliness of element"
   },
   {
     ED_SELECTBOX_ID_CUSTOM_EXPLOSION_TYPE,
-    ED_ELEMENT_SETTINGS_XPOS(1),       ED_ELEMENT_SETTINGS_YPOS(11),
-    GADGET_ID_CUSTOM_EXPLOSION_TYPE,   GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(1),               ED_ELEMENT_SETTINGS_YPOS(11),
+    GADGET_ID_CUSTOM_EXPLOSION_TYPE,           GADGET_ID_NONE,
     -1,
     options_explosion_type,
     &custom_element.explosion_type,
-    NULL, "Can explode", NULL,         "Select explosion type"
+    NULL, "Can explode", NULL,                 "Select explosion type"
   },
 
   // ---------- element settings: advanced (custom elements) ------------------
 
   {
     ED_SELECTBOX_ID_CHANGE_TIME_UNITS,
-    ED_ELEMENT_SETTINGS_XPOS(2),       ED_ELEMENT_SETTINGS_YPOS(3),
-    GADGET_ID_CHANGE_TIME_UNITS,       GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(2),               ED_ELEMENT_SETTINGS_YPOS(3),
+    GADGET_ID_CHANGE_TIME_UNITS,               GADGET_ID_NONE,
     -1,
     options_time_units,
     &custom_element_change.delay_frames,
-    NULL, "Delay time given in", NULL, "Select delay time units for change"
+    NULL, "Delay time given in", NULL,         "Select delay time units for change"
   },
   {
     ED_SELECTBOX_ID_CHANGE_DIRECT_ACTION,
-    ED_ELEMENT_SETTINGS_XPOS(2),       ED_ELEMENT_SETTINGS_YPOS(4),
-    GADGET_ID_CHANGE_DIRECT_ACTION,    GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(2),               ED_ELEMENT_SETTINGS_YPOS(4),
+    GADGET_ID_CHANGE_DIRECT_ACTION,            GADGET_ID_NONE,
     -1,
     options_change_direct_action,
     &custom_element_change.direct_action,
-    NULL, NULL, NULL,                  "Select type of direct action"
+    NULL, NULL, NULL,                          "Select type of direct action"
   },
   {
     ED_SELECTBOX_ID_CHANGE_OTHER_ACTION,
-    ED_ELEMENT_SETTINGS_XPOS(2),       ED_ELEMENT_SETTINGS_YPOS(5),
-    GADGET_ID_CHANGE_OTHER_ACTION,     GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(2),               ED_ELEMENT_SETTINGS_YPOS(5),
+    GADGET_ID_CHANGE_OTHER_ACTION,             GADGET_ID_NONE,
     -1,
     options_change_other_action,
     &custom_element_change.other_action,
-    NULL, NULL, "element:",            "Select type of other element action"
+    NULL, NULL, "element:",                    "Select type of other element action"
   },
   {
     ED_SELECTBOX_ID_CHANGE_SIDE,
-    ED_ELEMENT_SETTINGS_XPOS(2),       ED_ELEMENT_SETTINGS_YPOS(6),
-    GADGET_ID_CHANGE_SIDE,             GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(2),               ED_ELEMENT_SETTINGS_YPOS(6),
+    GADGET_ID_CHANGE_SIDE,                     GADGET_ID_NONE,
     -1,
     options_change_trigger_side,
     &custom_element_change.trigger_side,
-    NULL, "at", "side",                        "Select element side triggering change"
+    NULL, "at", "side",                                "Select element side triggering change"
   },
   {
     ED_SELECTBOX_ID_CHANGE_PLAYER,
-    ED_ELEMENT_SETTINGS_XPOS(2),       ED_ELEMENT_SETTINGS_YPOS(7),
-    GADGET_ID_CHANGE_PLAYER,           GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(2),               ED_ELEMENT_SETTINGS_YPOS(7),
+    GADGET_ID_CHANGE_PLAYER,                   GADGET_ID_NONE,
     -1,
     options_change_trigger_player,
     &custom_element_change.trigger_player,
-    NULL, "Player:", " ",              "Select player that causes change"
+    NULL, "Player:", " ",                      "Select player that causes change"
   },
   {
     ED_SELECTBOX_ID_CHANGE_PAGE,
-    ED_ELEMENT_SETTINGS_XPOS(2),       ED_ELEMENT_SETTINGS_YPOS(7),
-    GADGET_ID_CHANGE_PAGE,             GADGET_ID_CHANGE_PLAYER,
+    ED_ELEMENT_SETTINGS_XPOS(2),               ED_ELEMENT_SETTINGS_YPOS(7),
+    GADGET_ID_CHANGE_PAGE,                     GADGET_ID_CHANGE_PLAYER,
     -1,
     options_change_trigger_page,
     &custom_element_change.trigger_page,
-    NULL, "Page:", NULL,               "Select change page that causes change"
+    NULL, "Page:", NULL,                       "Select change page that causes change"
   },
   {
     ED_SELECTBOX_ID_CHANGE_REPLACE_WHEN,
-    ED_ELEMENT_SETTINGS_XPOS(2),       ED_ELEMENT_SETTINGS_YPOS(10),
-    GADGET_ID_CHANGE_REPLACE_WHEN,     GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(2),               ED_ELEMENT_SETTINGS_YPOS(10),
+    GADGET_ID_CHANGE_REPLACE_WHEN,             GADGET_ID_NONE,
     -1,
     options_change_replace_when,
     &custom_element_change.replace_when,
-    NULL, "Replace when", NULL,                "Select which elements can be replaced"
+    NULL, "Replace when", NULL,                        "Select which elements can be replaced"
   },
   {
     ED_SELECTBOX_ID_ACTION_TYPE,
-    ED_ELEMENT_SETTINGS_XPOS(1),       ED_ELEMENT_SETTINGS_YPOS(13),
-    GADGET_ID_ACTION_TYPE,             GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(1),               ED_ELEMENT_SETTINGS_YPOS(13),
+    GADGET_ID_ACTION_TYPE,                     GADGET_ID_NONE,
     15,
     options_action_type,
     &custom_element_change.action_type,
-    NULL, NULL, NULL,                  "Select action on specified condition"
+    NULL, NULL, NULL,                          "Select action on specified condition"
   },
   {
     ED_SELECTBOX_ID_ACTION_MODE,
-    -1,                                        ED_ELEMENT_SETTINGS_YPOS(13),
-    GADGET_ID_ACTION_MODE,             GADGET_ID_ACTION_TYPE,
+    -1,                                                ED_ELEMENT_SETTINGS_YPOS(13),
+    GADGET_ID_ACTION_MODE,                     GADGET_ID_ACTION_TYPE,
     -1,
     options_action_mode_none,
     &custom_element_change.action_mode,
-    NULL, NULL, NULL,                  "Select action operator"
+    NULL, NULL, NULL,                          "Select action operator"
   },
   {
     ED_SELECTBOX_ID_ACTION_ARG,
-    -1,                                        ED_ELEMENT_SETTINGS_YPOS(13),
-    GADGET_ID_ACTION_ARG,              GADGET_ID_ACTION_MODE,
+    -1,                                                ED_ELEMENT_SETTINGS_YPOS(13),
+    GADGET_ID_ACTION_ARG,                      GADGET_ID_ACTION_MODE,
     -1,
     options_action_arg_none,
     &custom_element_change.action_arg,
-    NULL, NULL, NULL,                  "Select action parameter"
+    NULL, NULL, NULL,                          "Select action parameter"
   },
   {
     ED_SELECTBOX_ID_SELECT_CHANGE_PAGE,
-    ED_ELEMENT_SETTINGS_XPOS(1),       ED_ELEMENT_SETTINGS_YPOS(14),
-    GADGET_ID_SELECT_CHANGE_PAGE,      GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(1),               ED_ELEMENT_SETTINGS_YPOS(14),
+    GADGET_ID_SELECT_CHANGE_PAGE,              GADGET_ID_NONE,
     3,
     options_change_page,
     &custom_element.current_change_page,
-    NULL, NULL, NULL,                  "Select element change page"
+    NULL, NULL, NULL,                          "Select element change page"
   },
 
   // ---------- element settings: configure (group elements) ------------------
 
   {
     ED_SELECTBOX_ID_GROUP_CHOICE_MODE,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(4),
-    GADGET_ID_GROUP_CHOICE_MODE,       GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(4),
+    GADGET_ID_GROUP_CHOICE_MODE,               GADGET_ID_NONE,
     -1,
     options_group_choice_mode,
     &group_element_info.choice_mode,
-    NULL, "Choice type:", NULL,                "Select type of group element choice"
+    NULL, "Choice type:", NULL,                        "Select type of group element choice"
   },
 };
 
@@ -3066,86 +3477,103 @@ static struct
 
   {
     ED_TEXTBUTTON_ID_LEVELCONFIG_LEVEL,
-    ED_LEVEL_TABS_XPOS(0),             ED_LEVEL_TABS_YPOS(0),
-    GADGET_ID_LEVELCONFIG_LEVEL,       GADGET_ID_NONE,
-    8,                                 "Level",
-    NULL, NULL, NULL,                  "Configure level settings"
+    ED_LEVEL_TABS_XPOS(0),                     ED_LEVEL_TABS_YPOS(0),
+    GADGET_ID_LEVELCONFIG_LEVEL,               GADGET_ID_NONE,
+    8,                                         "Level",
+    NULL, NULL, NULL,                          "Configure level settings"
   },
   {
     ED_TEXTBUTTON_ID_LEVELCONFIG_LEVELSET,
-    -1,                                        -1,
-    GADGET_ID_LEVELCONFIG_LEVELSET,    GADGET_ID_LEVELCONFIG_LEVEL,
-    8,                                 "Levelset",
-    NULL, NULL, NULL,                  "Update this or create new level set"
+    -1,                                                -1,
+    GADGET_ID_LEVELCONFIG_LEVELSET,            GADGET_ID_LEVELCONFIG_LEVEL,
+    8,                                         "Levelset",
+    NULL, NULL, NULL,                          "Update this or create new level set"
   },
   {
     ED_TEXTBUTTON_ID_LEVELCONFIG_EDITOR,
-    -1,                                        -1,
-    GADGET_ID_LEVELCONFIG_EDITOR,      GADGET_ID_LEVELCONFIG_LEVELSET,
-    8,                                 "Editor",
-    NULL, NULL, NULL,                  "Configure editor settings"
+    -1,                                                -1,
+    GADGET_ID_LEVELCONFIG_EDITOR,              GADGET_ID_LEVELCONFIG_LEVELSET,
+    8,                                         "Editor",
+    NULL, NULL, NULL,                          "Configure editor settings"
   },
   {
     ED_TEXTBUTTON_ID_LEVELCONFIG_ENGINE,
-    -1,                                        -1,
-    GADGET_ID_LEVELCONFIG_ENGINE,      GADGET_ID_LEVELCONFIG_EDITOR,
-    8,                                 "Engine",
-    NULL, NULL, NULL,                  "Configure engine settings"
+    -1,                                                -1,
+    GADGET_ID_LEVELCONFIG_ENGINE,              GADGET_ID_LEVELCONFIG_EDITOR,
+    8,                                         "Engine",
+    NULL, NULL, NULL,                          "Configure game engine settings"
+  },
+
+  // ---------- engine settings (tabs) ----------------------------------------
+
+  {
+    ED_TEXTBUTTON_ID_ENGINECONFIG_CONFIG,
+    ED_ENGINE_TABS_XPOS(0),                    ED_ENGINE_TABS_YPOS(0),
+    GADGET_ID_ENGINECONFIG_CONFIG,             GADGET_ID_NONE,
+    8,                                         "Config",
+    NULL, NULL, NULL,                          "Configure game engine settings"
+  },
+  {
+    ED_TEXTBUTTON_ID_ENGINECONFIG_COLORS,
+    -1,                                                -1,
+    GADGET_ID_ENGINECONFIG_COLORS,             GADGET_ID_ENGINECONFIG_CONFIG,
+    8,                                         "Colors",
+    NULL, NULL, NULL,                          "Configure level colors"
   },
 
   // ---------- element settings (tabs) ---------------------------------------
 
   {
     ED_TEXTBUTTON_ID_PROPERTIES_INFO,
-    ED_ELEMENT_TABS_XPOS(0),           ED_ELEMENT_TABS_YPOS(0),
-    GADGET_ID_PROPERTIES_INFO,         GADGET_ID_NONE,
-    8,                                 "Info",
-    NULL, NULL, NULL,                  "Show information about element"
+    ED_ELEMENT_TABS_XPOS(0),                   ED_ELEMENT_TABS_YPOS(0),
+    GADGET_ID_PROPERTIES_INFO,                 GADGET_ID_NONE,
+    8,                                         "Info",
+    NULL, NULL, NULL,                          "Show information about element"
   },
   {
     ED_TEXTBUTTON_ID_PROPERTIES_CONFIG,
-    -1,                                        -1,
-    GADGET_ID_PROPERTIES_CONFIG,       GADGET_ID_PROPERTIES_INFO,
-    8,                                 "Config",
-    NULL, NULL, NULL,                  "Configure element properties"
+    -1,                                                -1,
+    GADGET_ID_PROPERTIES_CONFIG,               GADGET_ID_PROPERTIES_INFO,
+    8,                                         "Config",
+    NULL, NULL, NULL,                          "Configure element properties"
   },
   {
     ED_TEXTBUTTON_ID_PROPERTIES_CONFIG_1,
-    -1,                                        -1,
-    GADGET_ID_PROPERTIES_CONFIG_1,     GADGET_ID_PROPERTIES_INFO,
-    8,                                 "Config 1",
-    NULL, NULL, NULL,                  "Configure element properties, part 1"
+    -1,                                                -1,
+    GADGET_ID_PROPERTIES_CONFIG_1,             GADGET_ID_PROPERTIES_INFO,
+    8,                                         "Config 1",
+    NULL, NULL, NULL,                          "Configure element properties, part 1"
   },
   {
     ED_TEXTBUTTON_ID_PROPERTIES_CONFIG_2,
-    -1,                                        -1,
-    GADGET_ID_PROPERTIES_CONFIG_2,     GADGET_ID_PROPERTIES_CONFIG_1,
-    8,                                 "Config 2",
-    NULL, NULL, NULL,                  "Configure element properties, part 2"
+    -1,                                                -1,
+    GADGET_ID_PROPERTIES_CONFIG_2,             GADGET_ID_PROPERTIES_CONFIG_1,
+    8,                                         "Config 2",
+    NULL, NULL, NULL,                          "Configure element properties, part 2"
   },
   {
     ED_TEXTBUTTON_ID_PROPERTIES_CHANGE,
-    -1,                                        -1,
-    GADGET_ID_PROPERTIES_CHANGE,       GADGET_ID_PROPERTIES_CONFIG_2,
-    8,                                 "Change",
-    NULL, NULL, NULL,                  "Configure custom element change pages"
+    -1,                                                -1,
+    GADGET_ID_PROPERTIES_CHANGE,               GADGET_ID_PROPERTIES_CONFIG_2,
+    8,                                         "Change",
+    NULL, NULL, NULL,                          "Configure custom element change pages"
   },
 
   // ---------- level and editor settings (buttons) ---------------------------
 
   {
     ED_TEXTBUTTON_ID_SAVE_LEVELSET,
-    ED_LEVEL_SETTINGS_XPOS(0),         ED_LEVEL_SETTINGS_YPOS(10),
-    GADGET_ID_SAVE_LEVELSET,           GADGET_ID_LEVELSET_SAVE_MODE,
-    -1,                                        "Save",
-    NULL, NULL, NULL,                  "Update or create level set"
+    ED_LEVEL_SETTINGS_XPOS(0),                 ED_LEVEL_SETTINGS_YPOS(10),
+    GADGET_ID_SAVE_LEVELSET,                   GADGET_ID_LEVELSET_SAVE_MODE,
+    -1,                                                "Save",
+    NULL, NULL, NULL,                          "Update or create level set"
   },
   {
     ED_TEXTBUTTON_ID_SAVE_AS_TEMPLATE_2,
-    ED_LEVEL_SETTINGS_XPOS(0),         ED_LEVEL_SETTINGS_YPOS(6),
-    GADGET_ID_SAVE_AS_TEMPLATE_2,      GADGET_ID_NONE,
-    -1,                                        "Save",
-    NULL, NULL,                                "this level as level template",
+    ED_LEVEL_SETTINGS_XPOS(0),                 ED_LEVEL_SETTINGS_YPOS(6),
+    GADGET_ID_SAVE_AS_TEMPLATE_2,              GADGET_ID_NONE,
+    -1,                                                "Save",
+    NULL, NULL,                                        "this level as level template",
     "Save current settings as new template"
   },
 
@@ -3153,25 +3581,35 @@ static struct
 
   {
     ED_TEXTBUTTON_ID_SAVE_AS_TEMPLATE_1,
-    -1,                                        -1,
-    GADGET_ID_SAVE_AS_TEMPLATE_1,      GADGET_ID_CUSTOM_USE_TEMPLATE_1,
-    -1,                                        "Save",
-    NULL, " ",                         "As Template",
+    -1,                                                -1,
+    GADGET_ID_SAVE_AS_TEMPLATE_1,              GADGET_ID_CUSTOM_USE_TEMPLATE_1,
+    -1,                                                "Save",
+    NULL, " ",                                 "As Template",
     "Save current settings as new template"
   },
   {
     ED_TEXTBUTTON_ID_ADD_CHANGE_PAGE,
-    -1,                                        -1,
-    GADGET_ID_ADD_CHANGE_PAGE,         GADGET_ID_PASTE_CHANGE_PAGE,
-    -1,                                        "New",
-    NULL, NULL, NULL,                  "Add new change page"
+    -1,                                                -1,
+    GADGET_ID_ADD_CHANGE_PAGE,                 GADGET_ID_PASTE_CHANGE_PAGE,
+    -1,                                                "New",
+    NULL, NULL, NULL,                          "Add new change page"
   },
   {
     ED_TEXTBUTTON_ID_DEL_CHANGE_PAGE,
-    -1,                                        -1,
-    GADGET_ID_DEL_CHANGE_PAGE,         GADGET_ID_ADD_CHANGE_PAGE,
-    -1,                                        "Delete",
-    NULL, NULL, NULL,                  "Delete current change page"
+    -1,                                                -1,
+    GADGET_ID_DEL_CHANGE_PAGE,                 GADGET_ID_ADD_CHANGE_PAGE,
+    -1,                                                "Delete",
+    NULL, NULL, NULL,                          "Delete current change page"
+  },
+
+  // ---------- engine settings (buttons) -------------------------------------
+
+  {
+    ED_TEXTBUTTON_ID_BD_SET_RANDOM_COLORS,
+    ED_ENGINE_SETTINGS_XPOS(0),                        ED_ENGINE_SETTINGS_YPOS(8),
+    GADGET_ID_BD_SET_RANDOM_COLORS,            GADGET_ID_NONE,
+    -1,                                                "Set random colors",
+    NULL, NULL, NULL,                          "Create and set random level colors"
   },
 };
 
@@ -3188,30 +3626,30 @@ static struct
   {
     ED_GRAPHICBUTTON_ID_PREV_CHANGE_PAGE,
     IMG_EDITOR_COUNTER_DOWN,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(14),
-    GADGET_ID_PREV_CHANGE_PAGE,                GADGET_ID_NONE,
-    NULL, NULL,                                "Select previous change page"
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(14),
+    GADGET_ID_PREV_CHANGE_PAGE,                        GADGET_ID_NONE,
+    NULL, NULL,                                        "Select previous change page"
   },
   {
     ED_GRAPHICBUTTON_ID_NEXT_CHANGE_PAGE,
     IMG_EDITOR_COUNTER_UP,
-    -1,                                        ED_ELEMENT_SETTINGS_YPOS(14),
-    GADGET_ID_NEXT_CHANGE_PAGE,                GADGET_ID_SELECT_CHANGE_PAGE,
-    NULL, "Change page",               "Select next change page"
+    -1,                                                ED_ELEMENT_SETTINGS_YPOS(14),
+    GADGET_ID_NEXT_CHANGE_PAGE,                        GADGET_ID_SELECT_CHANGE_PAGE,
+    NULL, "Change page",                       "Select next change page"
   },
   {
     ED_GRAPHICBUTTON_ID_COPY_CHANGE_PAGE,
     IMG_GFX_EDITOR_BUTTON_CP_COPY,
-    -1,                                        ED_ELEMENT_SETTINGS_YPOS(14),
-    GADGET_ID_COPY_CHANGE_PAGE,                GADGET_ID_NEXT_CHANGE_PAGE,
-    " ", NULL,                         "Copy settings from this change page"
+    -1,                                                ED_ELEMENT_SETTINGS_YPOS(14),
+    GADGET_ID_COPY_CHANGE_PAGE,                        GADGET_ID_NEXT_CHANGE_PAGE,
+    " ", NULL,                                 "Copy settings from this change page"
   },
   {
     ED_GRAPHICBUTTON_ID_PASTE_CHANGE_PAGE,
     IMG_GFX_EDITOR_BUTTON_CP_PASTE,
-    -1,                                        ED_ELEMENT_SETTINGS_YPOS(14),
-    GADGET_ID_PASTE_CHANGE_PAGE,       GADGET_ID_COPY_CHANGE_PAGE,
-    NULL, NULL,                                "Paste settings to this change page"
+    -1,                                                ED_ELEMENT_SETTINGS_YPOS(14),
+    GADGET_ID_PASTE_CHANGE_PAGE,               GADGET_ID_COPY_CHANGE_PAGE,
+    NULL, NULL,                                        "Paste settings to this change page"
   },
 };
 
@@ -3321,19 +3759,19 @@ static struct
 {
   {
     ED_RADIOBUTTON_ID_PERCENTAGE,
-    -1,                                        ED_LEVEL_SETTINGS_YPOS(0),
-    GADGET_ID_RANDOM_PERCENTAGE,       GADGET_ID_LEVEL_RANDOM_UP,
+    -1,                                                ED_LEVEL_SETTINGS_YPOS(0),
+    GADGET_ID_RANDOM_PERCENTAGE,               GADGET_ID_LEVEL_RANDOM_UP,
     RADIO_NR_RANDOM_ELEMENTS,
-    &random_placement_method,          RANDOM_USE_PERCENTAGE,
-    " ", "percentage",                 "Use percentage for random elements"
+    &random_placement_method,                  RANDOM_USE_PERCENTAGE,
+    " ", "percentage",                         "Use percentage for random elements"
   },
   {
     ED_RADIOBUTTON_ID_QUANTITY,
-    -1,                                        ED_LEVEL_SETTINGS_YPOS(0),
-    GADGET_ID_RANDOM_QUANTITY,         GADGET_ID_RANDOM_PERCENTAGE,
+    -1,                                                ED_LEVEL_SETTINGS_YPOS(0),
+    GADGET_ID_RANDOM_QUANTITY,                 GADGET_ID_RANDOM_PERCENTAGE,
     RADIO_NR_RANDOM_ELEMENTS,
-    &random_placement_method,          RANDOM_USE_QUANTITY,
-    " ", "quantity",                   "Use quantity for random elements"
+    &random_placement_method,                  RANDOM_USE_QUANTITY,
+    " ", "quantity",                           "Use quantity for random elements"
   }
 };
 
@@ -3351,751 +3789,847 @@ static struct
 
   {
     ED_CHECKBUTTON_ID_AUTO_COUNT_GEMS,
-    ED_LEVEL_SETTINGS_XPOS(0),         ED_LEVEL_SETTINGS_YPOS(6),
-    GADGET_ID_AUTO_COUNT_GEMS,         GADGET_ID_NONE,
+    ED_LEVEL_SETTINGS_XPOS(0),                 ED_LEVEL_SETTINGS_YPOS(6),
+    GADGET_ID_AUTO_COUNT_GEMS,                 GADGET_ID_NONE,
     &level.auto_count_gems,
     NULL, NULL,
-    "Automatically count gems needed", "Set counter to number of gems"
+    "Automatically count gems needed",         "Set counter to number of gems"
   },
   {
     ED_CHECKBUTTON_ID_RATE_TIME_OVER_SCORE,
-    ED_LEVEL_SETTINGS_XPOS(0),         ED_LEVEL_SETTINGS_YPOS(11),
-    GADGET_ID_RATE_TIME_OVER_SCORE,    GADGET_ID_NONE,
+    ED_LEVEL_SETTINGS_XPOS(0),                 ED_LEVEL_SETTINGS_YPOS(11),
+    GADGET_ID_RATE_TIME_OVER_SCORE,            GADGET_ID_NONE,
     &level.rate_time_over_score,
     NULL, NULL,
-    "Rate time/steps used over score", "Sort high scores by playing time/steps"
+    "Rate time/steps used over score",         "Sort high scores by playing time/steps"
   },
   {
     ED_CHECKBUTTON_ID_USE_LEVELSET_ARTWORK,
-    ED_LEVEL_SETTINGS_XPOS(0),         ED_LEVEL_SETTINGS_YPOS(7),
-    GADGET_ID_USE_LEVELSET_ARTWORK,    GADGET_ID_NONE,
+    ED_LEVEL_SETTINGS_XPOS(0),                 ED_LEVEL_SETTINGS_YPOS(7),
+    GADGET_ID_USE_LEVELSET_ARTWORK,            GADGET_ID_NONE,
     &levelset_use_levelset_artwork,
     NULL, NULL,
-    "Use current custom artwork",      "Use custom artwork of this level set"
+    "Use current custom artwork",              "Use custom artwork of this level set"
   },
   {
     ED_CHECKBUTTON_ID_COPY_LEVEL_TEMPLATE,
-    ED_LEVEL_SETTINGS_XPOS(0),         ED_LEVEL_SETTINGS_YPOS(8),
-    GADGET_ID_COPY_LEVEL_TEMPLATE,     GADGET_ID_NONE,
+    ED_LEVEL_SETTINGS_XPOS(0),                 ED_LEVEL_SETTINGS_YPOS(8),
+    GADGET_ID_COPY_LEVEL_TEMPLATE,             GADGET_ID_NONE,
     &levelset_copy_level_template,
     NULL, NULL,
-    "Copy current level template",     "Copy level template of this level set"
+    "Copy current level template",             "Copy level template of this level set"
   },
   {
     ED_CHECKBUTTON_ID_RANDOM_RESTRICTED,
-    ED_LEVEL_SETTINGS_XPOS(0),         ED_LEVEL_SETTINGS_YPOS(1),
-    GADGET_ID_RANDOM_RESTRICTED,       GADGET_ID_NONE,
+    ED_LEVEL_SETTINGS_XPOS(0),                 ED_LEVEL_SETTINGS_YPOS(1),
+    GADGET_ID_RANDOM_RESTRICTED,               GADGET_ID_NONE,
     &random_placement_background_restricted,
     NULL, NULL,
-    "Restrict random placement to:",   "Set random placement restriction"
+    "Restrict random placement to:",           "Set random placement restriction"
   },
   {
     ED_CHECKBUTTON_ID_CUSTOM_USE_TEMPLATE_3,
-    ED_LEVEL_SETTINGS_XPOS(0),         ED_LEVEL_SETTINGS_YPOS(4),
-    GADGET_ID_CUSTOM_USE_TEMPLATE_3,   GADGET_ID_NONE,
+    ED_LEVEL_SETTINGS_XPOS(0),                 ED_LEVEL_SETTINGS_YPOS(4),
+    GADGET_ID_CUSTOM_USE_TEMPLATE_3,           GADGET_ID_NONE,
     &setup.editor.use_template_for_new_levels,
     "Template for new levels and CE/GE:", NULL,
-    "Use template for new levels",     "Use template for level properties"
+    "Use template for new levels",             "Use template for level properties"
   },
   {
     ED_CHECKBUTTON_ID_CUSTOM_USE_TEMPLATE_2,
-    ED_LEVEL_SETTINGS_XPOS(0),         ED_LEVEL_SETTINGS_YPOS(5),
-    GADGET_ID_CUSTOM_USE_TEMPLATE_2,   GADGET_ID_NONE,
+    ED_LEVEL_SETTINGS_XPOS(0),                 ED_LEVEL_SETTINGS_YPOS(5),
+    GADGET_ID_CUSTOM_USE_TEMPLATE_2,           GADGET_ID_NONE,
     &level.use_custom_template,
     NULL, NULL,
-    "Use template for custom elements",        "Use template for custom properties"
+    "Use template for custom elements",                "Use template for custom properties"
   },
   {
     ED_CHECKBUTTON_ID_BD_INTERMISSION,
-    ED_LEVEL_SETTINGS_XPOS(0),         ED_LEVEL_SETTINGS_YPOS(0),
-    GADGET_ID_BD_INTERMISSION,         GADGET_ID_NONE,
+    ED_ENGINE_SETTINGS_XPOS(0),                        ED_ENGINE_SETTINGS_YPOS(0),
+    GADGET_ID_BD_INTERMISSION,                 GADGET_ID_NONE,
     &level.bd_intermission,
     "Boulder Dash game engine settings:", NULL,
-    "Intermission",                    "Level is an intermission level"
+    "Intermission",                            "Level is an intermission level"
   },
   {
     ED_CHECKBUTTON_ID_BD_PAL_TIMING,
-    ED_LEVEL_SETTINGS_XPOS(0),         ED_LEVEL_SETTINGS_YPOS(2),
-    GADGET_ID_BD_PAL_TIMING,           GADGET_ID_NONE,
+    ED_ENGINE_SETTINGS_XPOS(0),                        ED_ENGINE_SETTINGS_YPOS(2),
+    GADGET_ID_BD_PAL_TIMING,                   GADGET_ID_NONE,
     &level.bd_pal_timing,
     NULL, NULL,
-    "PAL timing",                      "Use slower timer (like PAL C64)"
+    "PAL timing",                              "Use slower timer (like PAL C64)"
   },
   {
     ED_CHECKBUTTON_ID_BD_LINE_SHIFTING_BORDERS,
-    ED_LEVEL_SETTINGS_XPOS(0),         ED_LEVEL_SETTINGS_YPOS(6),
-    GADGET_ID_BD_LINE_SHIFTING_BORDERS,        GADGET_ID_NONE,
+    ED_ENGINE_SETTINGS_XPOS(0),                        ED_ENGINE_SETTINGS_YPOS(6),
+    GADGET_ID_BD_LINE_SHIFTING_BORDERS,                GADGET_ID_NONE,
     &level.bd_line_shifting_borders,
     "Compatibility settings:", NULL,
-    "Line-shifting borders",           "Use line-shifting wrap-around"
+    "Line-shifting borders",                   "Use line-shifting wrap-around"
   },
   {
     ED_CHECKBUTTON_ID_BD_SCAN_FIRST_AND_LAST_ROW,
-    ED_LEVEL_SETTINGS_XPOS(0),         ED_LEVEL_SETTINGS_YPOS(7),
-    GADGET_ID_BD_SCAN_FIRST_AND_LAST_ROW, GADGET_ID_NONE,
+    ED_ENGINE_SETTINGS_XPOS(0),                        ED_ENGINE_SETTINGS_YPOS(7),
+    GADGET_ID_BD_SCAN_FIRST_AND_LAST_ROW,      GADGET_ID_NONE,
     &level.bd_scan_first_and_last_row,
     NULL, NULL,
-    "Scan first and last row",         "Also process top/bottom border rows"
+    "Scan first and last row",                 "Also process top/bottom border rows"
   },
   {
     ED_CHECKBUTTON_ID_BD_SHORT_EXPLOSIONS,
-    ED_LEVEL_SETTINGS_XPOS(0),         ED_LEVEL_SETTINGS_YPOS(8),
-    GADGET_ID_BD_SHORT_EXPLOSIONS,     GADGET_ID_NONE,
+    ED_ENGINE_SETTINGS_XPOS(0),                        ED_ENGINE_SETTINGS_YPOS(8),
+    GADGET_ID_BD_SHORT_EXPLOSIONS,             GADGET_ID_NONE,
     &level.bd_short_explosions,
     NULL, NULL,
-    "Short explosions",                        "Use four game cycles for explosions"
-  },
-  {
-    ED_CHECKBUTTON_ID_BD_GRAVITY_AFFECTS_ALL,
-    ED_LEVEL_SETTINGS_XPOS(0),         ED_LEVEL_SETTINGS_YPOS(9),
-    GADGET_ID_BD_GRAVITY_AFFECTS_ALL,  GADGET_ID_NONE,
-    &level.bd_gravity_affects_all,
-    NULL, NULL,
-    "Gravity change affects everything", "Gravity affects all falling objects"
+    "Short explosions",                                "Use four game cycles for explosions"
   },
 
   // ---------- element settings: configure (various elements) ----------------
 
   {
     ED_CHECKBUTTON_ID_STICK_ELEMENT,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(0),
-    GADGET_ID_STICK_ELEMENT,           GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(0),
+    GADGET_ID_STICK_ELEMENT,                   GADGET_ID_NONE,
     &stick_element_properties_window,
     NULL, NULL,
-    "Stick this screen to edit content","Stick this screen to edit content"
+    "Stick this screen to edit content",       "Stick this screen to edit content"
   },
   {
     ED_CHECKBUTTON_ID_EM_SLIPPERY_GEMS,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(1),
-    GADGET_ID_EM_SLIPPERY_GEMS,                GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(1),
+    GADGET_ID_EM_SLIPPERY_GEMS,                        GADGET_ID_NONE,
     &level.em_slippery_gems,
     NULL, NULL,
-    "Slip down from certain flat walls","Use EM/DC style slipping behaviour"
+    "Slip down from certain flat walls",       "Use EM/DC style slipping behaviour"
   },
   {
     ED_CHECKBUTTON_ID_EM_EXPLODES_BY_FIRE,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(1),
-    GADGET_ID_EM_EXPLODES_BY_FIRE,     GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(1),
+    GADGET_ID_EM_EXPLODES_BY_FIRE,             GADGET_ID_NONE,
     &level.em_explodes_by_fire,
     NULL, NULL,
-    "Explodes with chain reaction",    "Use R'n'D style explosion behaviour"
+    "Explodes with chain reaction",            "Use R'n'D style explosion behaviour"
   },
   {
     ED_CHECKBUTTON_ID_USE_SPRING_BUG,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(2),
-    GADGET_ID_USE_SPRING_BUG,          GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(2),
+    GADGET_ID_USE_SPRING_BUG,                  GADGET_ID_NONE,
     &level.use_spring_bug,
     NULL, NULL,
-    "Use spring pushing bug",          "Use odd spring pushing behaviour"
+    "Use spring pushing bug",                  "Use odd spring pushing behaviour"
   },
   {
     ED_CHECKBUTTON_ID_USE_TIME_ORB_BUG,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(1),
-    GADGET_ID_USE_TIME_ORB_BUG,                GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(1),
+    GADGET_ID_USE_TIME_ORB_BUG,                        GADGET_ID_NONE,
     &level.use_time_orb_bug,
     NULL, NULL,
-    "Use time orb bug",                        "Use odd time orb behaviour"
+    "Use time orb bug",                                "Use odd time orb behaviour"
   },
   {
     ED_CHECKBUTTON_ID_USE_LIFE_BUGS,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(5),
-    GADGET_ID_USE_LIFE_BUGS,           GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(5),
+    GADGET_ID_USE_LIFE_BUGS,                   GADGET_ID_NONE,
     &level.use_life_bugs,
     NULL, NULL,
-    "Use buggy element behaviour",     "Use odd (historic) element behaviour"
+    "Use buggy element behaviour",             "Use odd (historic) element behaviour"
   },
   {
     ED_CHECKBUTTON_ID_RANDOM_BALL_CONTENT,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(2),
-    GADGET_ID_RANDOM_BALL_CONTENT,     GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(2),
+    GADGET_ID_RANDOM_BALL_CONTENT,             GADGET_ID_NONE,
     &level.ball_random,
     NULL, NULL,
-    "Create single random element",    "Only create one element from content"
+    "Create single random element",            "Only create one element from content"
   },
   {
     ED_CHECKBUTTON_ID_INITIAL_BALL_ACTIVE,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(1),
-    GADGET_ID_INITIAL_BALL_ACTIVE,     GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(1),
+    GADGET_ID_INITIAL_BALL_ACTIVE,             GADGET_ID_NONE,
     &level.ball_active_initial,
     NULL, NULL,
-    "Magic ball initially activated",  "Activate magic ball after level start"
+    "Magic ball initially activated",          "Activate magic ball after level start"
   },
   {
     ED_CHECKBUTTON_ID_GROW_INTO_DIGGABLE,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(0),
-    GADGET_ID_GROW_INTO_DIGGABLE,      GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(0),
+    GADGET_ID_GROW_INTO_DIGGABLE,              GADGET_ID_NONE,
     &level.grow_into_diggable,
     NULL, NULL,
-    "Can grow into anything diggable", "Grow into more than just sand"
+    "Can grow into anything diggable",         "Grow into more than just sand"
   },
   {
     ED_CHECKBUTTON_ID_SB_FIELDS_NEEDED,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(0),
-    GADGET_ID_SB_FIELDS_NEEDED,                GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(0),
+    GADGET_ID_SB_FIELDS_NEEDED,                        GADGET_ID_NONE,
     &level.sb_fields_needed,
     NULL, NULL,
-    "All fields need to be filled",    "Require all SB fields to be solved"
+    "All fields need to be filled",            "Require all SB fields to be solved"
   },
   {
     ED_CHECKBUTTON_ID_SB_OBJECTS_NEEDED,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(0),
-    GADGET_ID_SB_OBJECTS_NEEDED,       GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(0),
+    GADGET_ID_SB_OBJECTS_NEEDED,               GADGET_ID_NONE,
     &level.sb_objects_needed,
     NULL, NULL,
-    "All objects need to be placed",   "Require all SB objects to be solved"
+    "All objects need to be placed",           "Require all SB objects to be solved"
   },
   {
     ED_CHECKBUTTON_ID_AUTO_EXIT_SOKOBAN,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(1),
-    GADGET_ID_AUTO_EXIT_SOKOBAN,       GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(1),
+    GADGET_ID_AUTO_EXIT_SOKOBAN,               GADGET_ID_NONE,
     &level.auto_exit_sokoban,
     NULL, NULL,
-    "Exit level if all tasks solved",  "Automatically finish Sokoban levels"
+    "Exit level if all tasks solved",          "Automatically finish Sokoban levels"
   },
   {
     ED_CHECKBUTTON_ID_SOLVED_BY_ONE_PLAYER,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(14),
-    GADGET_ID_SOLVED_BY_ONE_PLAYER,    GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(14),
+    GADGET_ID_SOLVED_BY_ONE_PLAYER,            GADGET_ID_NONE,
     &level.solved_by_one_player,
     NULL, NULL,
-    "Only one player must enter exit", "Level solved by first player in exit"
+    "Only one player must enter exit",         "Level solved by first player in exit"
   },
   {
     ED_CHECKBUTTON_ID_FINISH_DIG_COLLECT,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(3),
-    GADGET_ID_FINISH_DIG_COLLECT,      GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(3),
+    GADGET_ID_FINISH_DIG_COLLECT,              GADGET_ID_NONE,
     &level.finish_dig_collect,
     NULL, NULL,
-    "CE action on finished dig/collect", "Only finished dig/collect triggers CE"
+    "CE action on finished dig/collect",       "Only finished dig/collect triggers CE"
   },
   {
     ED_CHECKBUTTON_ID_KEEP_WALKABLE_CE,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(4),
-    GADGET_ID_KEEP_WALKABLE_CE,                GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(4),
+    GADGET_ID_KEEP_WALKABLE_CE,                        GADGET_ID_NONE,
     &level.keep_walkable_ce,
     NULL, NULL,
-    "Keep walkable CE changed to player", "Keep CE changing to player if walkable"
+    "Keep walkable CE changed to player",      "Keep CE changing to player if walkable"
   },
   {
     ED_CHECKBUTTON_ID_CONTINUOUS_SNAPPING,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(9),
-    GADGET_ID_CONTINUOUS_SNAPPING,     GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(9),
+    GADGET_ID_CONTINUOUS_SNAPPING,             GADGET_ID_NONE,
     &level.continuous_snapping,
     NULL, NULL,
-    "Continuous snapping",             "Use snapping without releasing key"
+    "Continuous snapping",                     "Use snapping without releasing key"
   },
   {
     ED_CHECKBUTTON_ID_BLOCK_SNAP_FIELD,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(8),
-    GADGET_ID_BLOCK_SNAP_FIELD,                GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(8),
+    GADGET_ID_BLOCK_SNAP_FIELD,                        GADGET_ID_NONE,
     &level.block_snap_field,
     NULL, NULL,
-    "Block snapped field when snapping", "Use snapping delay to show animation"
+    "Block snapped field when snapping",       "Use snapping delay to show animation"
   },
   {
     ED_CHECKBUTTON_ID_BLOCK_LAST_FIELD,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(2),
-    GADGET_ID_BLOCK_LAST_FIELD,                GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(2),
+    GADGET_ID_BLOCK_LAST_FIELD,                        GADGET_ID_NONE,
     &level.block_last_field,
     NULL, NULL,
-    "Block last field when moving",    "Player blocks last field when moving"
+    "Block last field when moving",            "Player blocks last field when moving"
   },
   {
     ED_CHECKBUTTON_ID_SP_BLOCK_LAST_FIELD,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(2),
-    GADGET_ID_SP_BLOCK_LAST_FIELD,     GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(2),
+    GADGET_ID_SP_BLOCK_LAST_FIELD,             GADGET_ID_NONE,
     &level.sp_block_last_field,
     NULL, NULL,
-    "Block last field when moving",    "Player blocks last field when moving"
+    "Block last field when moving",            "Player blocks last field when moving"
   },
   {
     ED_CHECKBUTTON_ID_INSTANT_RELOCATION,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(3),
-    GADGET_ID_INSTANT_RELOCATION,      GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(3),
+    GADGET_ID_INSTANT_RELOCATION,              GADGET_ID_NONE,
     &level.instant_relocation,
     NULL, NULL,
-    "No scrolling when relocating",    "Player gets relocated without delay"
+    "No scrolling when relocating",            "Player gets relocated without delay"
   },
   {
     ED_CHECKBUTTON_ID_SHIFTED_RELOCATION,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(4),
-    GADGET_ID_SHIFTED_RELOCATION,      GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(4),
+    GADGET_ID_SHIFTED_RELOCATION,              GADGET_ID_NONE,
     &level.shifted_relocation,
     NULL, NULL,
-    "No centering when relocating",    "Level not centered after relocation"
+    "No centering when relocating",            "Level not centered after relocation"
   },
   {
     ED_CHECKBUTTON_ID_LAZY_RELOCATION,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(5),
-    GADGET_ID_LAZY_RELOCATION,         GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(5),
+    GADGET_ID_LAZY_RELOCATION,                 GADGET_ID_NONE,
     &level.lazy_relocation,
     NULL, NULL,
-    "Only redraw off-screen relocation","No redraw if relocation target visible"
+    "Only redraw off-screen relocation",       "No redraw if relocation target visible"
   },
   {
     ED_CHECKBUTTON_ID_USE_START_ELEMENT,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(10),
-    GADGET_ID_USE_START_ELEMENT,       GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(10),
+    GADGET_ID_USE_START_ELEMENT,               GADGET_ID_NONE,
     &level.use_start_element[0],
     NULL, NULL,
-    "Use level start element:",               "Start level at this element's position"
+    "Use level start element:",                       "Start level at this element's position"
   },
   {
     ED_CHECKBUTTON_ID_USE_ARTWORK_ELEMENT,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(11),
-    GADGET_ID_USE_ARTWORK_ELEMENT,     GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(11),
+    GADGET_ID_USE_ARTWORK_ELEMENT,             GADGET_ID_NONE,
     &level.use_artwork_element[0],
     NULL, NULL,
-    "Use artwork from element:",       "Use player artwork from other element"
+    "Use artwork from element:",               "Use player artwork from other element"
   },
   {
     ED_CHECKBUTTON_ID_USE_EXPLOSION_ELEMENT,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(12),
-    GADGET_ID_USE_EXPLOSION_ELEMENT,   GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(12),
+    GADGET_ID_USE_EXPLOSION_ELEMENT,           GADGET_ID_NONE,
     &level.use_explosion_element[0],
     NULL, NULL,
-    "Use explosion from element:",     "Use explosion properties from element"
+    "Use explosion from element:",             "Use explosion properties from element"
   },
   {
     ED_CHECKBUTTON_ID_INITIAL_GRAVITY,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(13),
-    GADGET_ID_INITIAL_GRAVITY,         GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(13),
+    GADGET_ID_INITIAL_GRAVITY,                 GADGET_ID_NONE,
     &level.initial_player_gravity[0],
     NULL, NULL,
-    "Use initial gravity",             "Set initial player gravity"
+    "Use initial gravity",                     "Set initial player gravity"
   },
   {
     ED_CHECKBUTTON_ID_USE_INITIAL_INVENTORY,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(1),
-    GADGET_ID_USE_INITIAL_INVENTORY,   GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(1),
+    GADGET_ID_USE_INITIAL_INVENTORY,           GADGET_ID_NONE,
     &level.use_initial_inventory[0],
     NULL, NULL,
-    "Use initial inventory:",          "Use collected elements on level start"
+    "Use initial inventory:",                  "Use collected elements on level start"
   },
   {
     ED_CHECKBUTTON_ID_CAN_PASS_TO_WALKABLE,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(6),
-    GADGET_ID_CAN_PASS_TO_WALKABLE,    GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(6),
+    GADGET_ID_CAN_PASS_TO_WALKABLE,            GADGET_ID_NONE,
     &level.can_pass_to_walkable,
     NULL, NULL,
-    "Can pass to walkable element",    "Player can pass to empty or walkable"
+    "Can pass to walkable element",            "Player can pass to empty or walkable"
   },
   {
     ED_CHECKBUTTON_ID_CAN_FALL_INTO_ACID,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(1),
-    GADGET_ID_CAN_FALL_INTO_ACID,      GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(1),
+    GADGET_ID_CAN_FALL_INTO_ACID,              GADGET_ID_NONE,
     &custom_element_properties[EP_CAN_MOVE_INTO_ACID],
     NULL, NULL,
-    "Can fall into acid (with gravity)","Player can fall into acid pool"
+    "Can fall into acid (with gravity)",       "Player can fall into acid pool"
   },
   {
     ED_CHECKBUTTON_ID_CAN_MOVE_INTO_ACID,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(0),
-    GADGET_ID_CAN_MOVE_INTO_ACID,      GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(0),
+    GADGET_ID_CAN_MOVE_INTO_ACID,              GADGET_ID_NONE,
     &custom_element_properties[EP_CAN_MOVE_INTO_ACID],
     NULL, NULL,
-    "Can move into acid",              "Element can move into acid pool"
+    "Can move into acid",                      "Element can move into acid pool"
   },
   {
     ED_CHECKBUTTON_ID_DONT_COLLIDE_WITH,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(1),
-    GADGET_ID_DONT_COLLIDE_WITH,       GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(1),
+    GADGET_ID_DONT_COLLIDE_WITH,               GADGET_ID_NONE,
     &custom_element_properties[EP_DONT_COLLIDE_WITH],
     NULL, NULL,
-    "Deadly when colliding with",      "Element is deadly when hitting player"
+    "Deadly when colliding with",              "Element is deadly when hitting player"
   },
   {
     ED_CHECKBUTTON_ID_BD_DIAGONAL_MOVEMENTS,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(0),
-    GADGET_ID_BD_DIAGONAL_MOVEMENTS,   GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(0),
+    GADGET_ID_BD_DIAGONAL_MOVEMENTS,           GADGET_ID_NONE,
     &level.bd_diagonal_movements,
     NULL, NULL,
-    "Can move diagonally",             "Player can move diagonally"
+    "Can move diagonally",                     "Player can move diagonally"
   },
   {
     ED_CHECKBUTTON_ID_BD_TOPMOST_PLAYER_ACTIVE,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(1),
-    GADGET_ID_BD_TOPMOST_PLAYER_ACTIVE,        GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(1),
+    GADGET_ID_BD_TOPMOST_PLAYER_ACTIVE,                GADGET_ID_NONE,
     &level.bd_topmost_player_active,
     NULL, NULL,
-    "Topmost player is active",                "Use first player found on playfield"
+    "Topmost player is active",                        "Use first player found on playfield"
   },
   {
     ED_CHECKBUTTON_ID_BD_PUSH_MEGA_ROCK_WITH_SWEET,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(4),
-    GADGET_ID_BD_PUSH_MEGA_ROCK_WITH_SWEET, GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(4),
+    GADGET_ID_BD_PUSH_MEGA_ROCK_WITH_SWEET,    GADGET_ID_NONE,
     &level.bd_push_mega_rock_with_sweet,
     NULL, NULL,
-    "Mega rocks pushable with sweet",  "Push mega rocks after eating sweet"
+    "Mega rocks pushable with sweet",          "Push mega rocks after eating sweet"
+  },
+  {
+    ED_CHECKBUTTON_ID_BD_MAGIC_WALL_ZERO_INFINITE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(2),
+    GADGET_ID_BD_MAGIC_WALL_ZERO_INFINITE,     GADGET_ID_NONE,
+    &level.bd_magic_wall_zero_infinite,
+    NULL, NULL,
+    "Run forever if duration is zero",         "Run infinitely if timer is zero"
   },
   {
     ED_CHECKBUTTON_ID_BD_MAGIC_WALL_WAIT_HATCHING,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(1),
-    GADGET_ID_BD_MAGIC_WALL_WAIT_HATCHING, GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(3),
+    GADGET_ID_BD_MAGIC_WALL_WAIT_HATCHING,     GADGET_ID_NONE,
     &level.bd_magic_wall_wait_hatching,
     NULL, NULL,
-    "Wait for player's birth",         "Timer start waits for player's birth"
+    "Wait for player's birth",                 "Timer start waits for player's birth"
   },
   {
     ED_CHECKBUTTON_ID_BD_MAGIC_WALL_STOPS_AMOEBA,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(2),
-    GADGET_ID_BD_MAGIC_WALL_STOPS_AMOEBA, GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(4),
+    GADGET_ID_BD_MAGIC_WALL_STOPS_AMOEBA,      GADGET_ID_NONE,
     &level.bd_magic_wall_stops_amoeba,
     NULL, NULL,
-    "Turn amoeba to diamonds",         "Activation changes amoeba to diamonds"
+    "Stop amoeba and turn to diamonds",                "Activation changes amoeba to diamonds"
+  },
+  {
+    ED_CHECKBUTTON_ID_BD_MAGIC_WALL_BREAK_SCAN,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(5),
+    GADGET_ID_BD_MAGIC_WALL_BREAK_SCAN,                GADGET_ID_NONE,
+    &level.bd_magic_wall_break_scan,
+    NULL, NULL,
+    "Emulate amoeba bug in BD1",               "Use buggy BD1 behavior"
   },
   {
     ED_CHECKBUTTON_ID_BD_AMOEBA_WAIT_FOR_HATCHING,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(1),
-    GADGET_ID_BD_AMOEBA_WAIT_FOR_HATCHING, GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(1),
+    GADGET_ID_BD_AMOEBA_WAIT_FOR_HATCHING,     GADGET_ID_NONE,
     &level.bd_amoeba_wait_for_hatching,
     NULL, NULL,
-    "Wait for player's birth",         "Timer start waits for player's birth"
+    "Wait for player's birth",                 "Timer start waits for player's birth"
   },
   {
     ED_CHECKBUTTON_ID_BD_AMOEBA_START_IMMEDIATELY,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(2),
-    GADGET_ID_BD_AMOEBA_START_IMMEDIATELY, GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(2),
+    GADGET_ID_BD_AMOEBA_START_IMMEDIATELY,     GADGET_ID_NONE,
     &level.bd_amoeba_start_immediately,
     NULL, NULL,
-    "Start growing immediately",       "Start slow growth time immediately"
+    "Start growing immediately",               "Start slow growth time immediately"
   },
   {
     ED_CHECKBUTTON_ID_BD_AMOEBA_2_EXPLODE_BY_AMOEBA,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(9),
-    GADGET_ID_BD_AMOEBA_2_EXPLODE_BY_AMOEBA, GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(9),
+    GADGET_ID_BD_AMOEBA_2_EXPLODE_BY_AMOEBA,   GADGET_ID_NONE,
     &level.bd_amoeba_2_explode_by_amoeba,
     NULL, NULL,
-    "Explodes if touched by amoeba",   "Amoeba 2 explodes if touched by amoeba"
+    "Explodes if touched by amoeba",           "Amoeba 2 explodes if touched by amoeba"
   },
   {
     ED_CHECKBUTTON_ID_BD_VOODOO_COLLECTS_DIAMONDS,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(0),
-    GADGET_ID_BD_VOODOO_COLLECTS_DIAMONDS, GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(0),
+    GADGET_ID_BD_VOODOO_COLLECTS_DIAMONDS,     GADGET_ID_NONE,
     &level.bd_voodoo_collects_diamonds,
     NULL, NULL,
-    "Can collect diamonds",            "Can collect diamonds for the player"
+    "Can collect diamonds",                    "Can collect diamonds for the player"
   },
   {
     ED_CHECKBUTTON_ID_BD_VOODOO_HURT_KILLS_PLAYER,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(1),
-    GADGET_ID_BD_VOODOO_HURT_KILLS_PLAYER, GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(1),
+    GADGET_ID_BD_VOODOO_HURT_KILLS_PLAYER,     GADGET_ID_NONE,
     &level.bd_voodoo_hurt_kills_player,
     NULL, NULL,
-    "Player is killed if hurt",                "If hurt in any way, player is killed"
+    "Player is killed if hurt",                        "If hurt in any way, player is killed"
   },
   {
     ED_CHECKBUTTON_ID_BD_VOODOO_DIES_BY_ROCK,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(2),
-    GADGET_ID_BD_VOODOO_DIES_BY_ROCK,  GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(2),
+    GADGET_ID_BD_VOODOO_DIES_BY_ROCK,          GADGET_ID_NONE,
     &level.bd_voodoo_dies_by_rock,
     NULL, NULL,
-    "Killed by falling rock",          "Can be killed by a falling rock"
+    "Killed by falling rock",                  "Can be killed by a falling rock"
   },
   {
     ED_CHECKBUTTON_ID_BD_VOODOO_VANISH_BY_EXPLOSION,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(3),
-    GADGET_ID_BD_VOODOO_VANISH_BY_EXPLOSION, GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(3),
+    GADGET_ID_BD_VOODOO_VANISH_BY_EXPLOSION,   GADGET_ID_NONE,
     &level.bd_voodoo_vanish_by_explosion,
     NULL, NULL,
-    "Disappears in explosions",                "Can be destroyed by explosions"
+    "Disappears in explosions",                        "Can be destroyed by explosions"
   },
   {
     ED_CHECKBUTTON_ID_BD_SLIME_IS_PREDICTABLE,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(0),
-    GADGET_ID_BD_SLIME_IS_PREDICTABLE, GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(1),
+    GADGET_ID_BD_SLIME_IS_PREDICTABLE,         GADGET_ID_NONE,
     &level.bd_slime_is_predictable,
     NULL, NULL,
-    "Slime is predictable",            "Use predictable random numbers"
+    "Slime is predictable",                    "Use predictable random numbers"
+  },
+  {
+    ED_CHECKBUTTON_ID_BD_CHANGE_EXPANDING_WALL,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(0),
+    GADGET_ID_BD_CHANGE_EXPANDING_WALL,                GADGET_ID_NONE,
+    &level.bd_change_expanding_wall,
+    NULL, NULL,
+    "Change direction",                                "Switch horizontal/vertical direction"
+  },
+  {
+    ED_CHECKBUTTON_ID_BD_REPLICATORS_ACTIVE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(0),
+    GADGET_ID_BD_REPLICATORS_ACTIVE,           GADGET_ID_NONE,
+    &level.bd_replicators_active,
+    NULL, NULL,
+    "Active at start",                         "Replicators start in active state"
+  },
+  {
+    ED_CHECKBUTTON_ID_BD_CONVEYOR_BELTS_ACTIVE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(0),
+    GADGET_ID_BD_CONVEYOR_BELTS_ACTIVE,                GADGET_ID_NONE,
+    &level.bd_conveyor_belts_active,
+    NULL, NULL,
+    "Active at start",                         "Conveyor belts start in active state"
+  },
+  {
+    ED_CHECKBUTTON_ID_BD_CONVEYOR_BELTS_CHANGED,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(1),
+    GADGET_ID_BD_CONVEYOR_BELTS_CHANGED,       GADGET_ID_NONE,
+    &level.bd_conveyor_belts_changed,
+    NULL, NULL,
+    "Change direction",                                "Switch conveyor belt direction"
+  },
+  {
+    ED_CHECKBUTTON_ID_BD_WATER_CANNOT_FLOW_DOWN,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(0),
+    GADGET_ID_BD_WATER_CANNOT_FLOW_DOWN,       GADGET_ID_NONE,
+    &level.bd_water_cannot_flow_down,
+    NULL, NULL,
+    "Does not flow downwards",                 "Water can only flow up, left and right"
+  },
+  {
+    ED_CHECKBUTTON_ID_BD_HAMMER_WALLS_REAPPEAR,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(1),
+    GADGET_ID_BD_HAMMER_WALLS_REAPPEAR,                GADGET_ID_NONE,
+    &level.bd_hammer_walls_reappear,
+    NULL, NULL,
+    "Hammered walls reappear",                 "Hammered walls reappear after delay"
+  },
+  {
+    ED_CHECKBUTTON_ID_BD_INFINITE_ROCKETS,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(0),
+    GADGET_ID_BD_INFINITE_ROCKETS,             GADGET_ID_NONE,
+    &level.bd_infinite_rockets,
+    NULL, NULL,
+    "Infinite rockets",                                "Rocket launcher has infinite rockets"
+  },
+  {
+    ED_CHECKBUTTON_ID_BD_CREATURES_START_BACKWARDS,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(0),
+    GADGET_ID_BD_CREATURES_START_BACKWARDS,    GADGET_ID_NONE,
+    &level.bd_creatures_start_backwards,
+    NULL, NULL,
+    "Creatures start moving backwards",                "Creatures start in opposite direction"
+  },
+  {
+    ED_CHECKBUTTON_ID_BD_CREATURES_TURN_ON_HATCHING,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(2),
+    GADGET_ID_BD_CREATURES_TURN_ON_HATCHING,   GADGET_ID_NONE,
+    &level.bd_creatures_turn_on_hatching,
+    NULL, NULL,
+    "Creatures auto turn on hatching",         "Creatures change direction on hatching"
+  },
+  {
+    ED_CHECKBUTTON_ID_BD_GRAVITY_SWITCH_ACTIVE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(1),
+    GADGET_ID_BD_GRAVITY_SWITCH_ACTIVE,                GADGET_ID_NONE,
+    &level.bd_gravity_switch_active,
+    NULL, NULL,
+    "Gravity switch active at start",          "Gravity switch starts in active state"
+  },
+  {
+    ED_CHECKBUTTON_ID_BD_GRAVITY_AFFECTS_ALL,
+    ED_LEVEL_SETTINGS_XPOS(0),                 ED_ELEMENT_SETTINGS_YPOS(3),
+    GADGET_ID_BD_GRAVITY_AFFECTS_ALL,          GADGET_ID_NONE,
+    &level.bd_gravity_affects_all,
+    NULL, NULL,
+    "Gravity change affects everything",       "Gravity affects all falling objects"
   },
   {
     ED_CHECKBUTTON_ID_ENVELOPE_AUTOWRAP,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(1),
-    GADGET_ID_ENVELOPE_AUTOWRAP,       GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(1),
+    GADGET_ID_ENVELOPE_AUTOWRAP,               GADGET_ID_NONE,
     &level.envelope[0].autowrap,
     NULL, NULL,
-    "Auto-wrap",                       "Automatically wrap envelope text"
+    "Auto-wrap",                               "Automatically wrap envelope text"
   },
   {
     ED_CHECKBUTTON_ID_ENVELOPE_CENTERED,
-    -1,                                        ED_ELEMENT_SETTINGS_YPOS(1),
-    GADGET_ID_ENVELOPE_CENTERED,       GADGET_ID_ENVELOPE_AUTOWRAP,
+    -1,                                                ED_ELEMENT_SETTINGS_YPOS(1),
+    GADGET_ID_ENVELOPE_CENTERED,               GADGET_ID_ENVELOPE_AUTOWRAP,
     &level.envelope[0].centered,
     NULL, " ",
-    "Centered",                                "Automatically center envelope text"
+    "Centered",                                        "Automatically center envelope text"
   },
   {
     ED_CHECKBUTTON_ID_MM_LASER_RED,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(1),
-    GADGET_ID_MM_LASER_RED,            GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(1),
+    GADGET_ID_MM_LASER_RED,                    GADGET_ID_NONE,
     &level.mm_laser_red,
     "Choose color components for laser:", NULL,
-    "Red",                             "Use red color components in laser"
+    "Red",                                     "Use red color components in laser"
   },
   {
     ED_CHECKBUTTON_ID_MM_LASER_GREEN,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(2),
-    GADGET_ID_MM_LASER_GREEN,          GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(2),
+    GADGET_ID_MM_LASER_GREEN,                  GADGET_ID_NONE,
     &level.mm_laser_green,
     NULL, NULL,
-    "Green",                           "Use green color components in laser"
+    "Green",                                   "Use green color components in laser"
   },
   {
     ED_CHECKBUTTON_ID_MM_LASER_BLUE,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(3),
-    GADGET_ID_MM_LASER_BLUE,           GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(3),
+    GADGET_ID_MM_LASER_BLUE,                   GADGET_ID_NONE,
     &level.mm_laser_blue,
     NULL, NULL,
-    "Blue",                            "Use blue color components in laser"
+    "Blue",                                    "Use blue color components in laser"
   },
   {
     ED_CHECKBUTTON_ID_DF_LASER_RED,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(1),
-    GADGET_ID_DF_LASER_RED,            GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(1),
+    GADGET_ID_DF_LASER_RED,                    GADGET_ID_NONE,
     &level.df_laser_red,
     "Choose color components for laser:", NULL,
-    "Red",                             "Use red color components in laser"
+    "Red",                                     "Use red color components in laser"
   },
   {
     ED_CHECKBUTTON_ID_DF_LASER_GREEN,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(2),
-    GADGET_ID_DF_LASER_GREEN,          GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(2),
+    GADGET_ID_DF_LASER_GREEN,                  GADGET_ID_NONE,
     &level.df_laser_green,
     NULL, NULL,
-    "Green",                           "Use green color components in laser"
+    "Green",                                   "Use green color components in laser"
   },
   {
     ED_CHECKBUTTON_ID_DF_LASER_BLUE,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(3),
-    GADGET_ID_DF_LASER_BLUE,           GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(3),
+    GADGET_ID_DF_LASER_BLUE,                   GADGET_ID_NONE,
     &level.df_laser_blue,
     NULL, NULL,
-    "Blue",                            "Use blue color components in laser"
+    "Blue",                                    "Use blue color components in laser"
   },
   {
     ED_CHECKBUTTON_ID_ROTATE_MM_BALL_CONTENT,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(5),
-    GADGET_ID_ROTATE_MM_BALL_CONTENT,  GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(5),
+    GADGET_ID_ROTATE_MM_BALL_CONTENT,          GADGET_ID_NONE,
     &level.rotate_mm_ball_content,
     NULL, NULL,
-    "Randomly rotate created content", "Randomly rotate newly created content"
+    "Randomly rotate created content",         "Randomly rotate newly created content"
   },
   {
     ED_CHECKBUTTON_ID_EXPLODE_MM_BALL,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(6),
-    GADGET_ID_EXPLODE_MM_BALL,         GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(6),
+    GADGET_ID_EXPLODE_MM_BALL,                 GADGET_ID_NONE,
     &level.explode_mm_ball,
     NULL, NULL,
-    "Explode ball instead of melting", "Use explosion to release ball content"
+    "Explode ball instead of melting",         "Use explosion to release ball content"
   },
 
   // ---------- element settings: configure 1 (custom elements) ---------------
 
   {
     ED_CHECKBUTTON_ID_CUSTOM_USE_GRAPHIC,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(1),
-    GADGET_ID_CUSTOM_USE_GRAPHIC,      GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(1),
+    GADGET_ID_CUSTOM_USE_GRAPHIC,              GADGET_ID_NONE,
     &custom_element.use_gfx_element,
     NULL, NULL,
-    "Use graphic of element:",         "Use existing element graphic"
+    "Use graphic of element:",                 "Use existing element graphic"
   },
   {
     ED_CHECKBUTTON_ID_CUSTOM_USE_TEMPLATE_1,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(14),
-    GADGET_ID_CUSTOM_USE_TEMPLATE_1,   GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(14),
+    GADGET_ID_CUSTOM_USE_TEMPLATE_1,           GADGET_ID_NONE,
     &level.use_custom_template,
     NULL, NULL,
-    "Use template",                    "Use template for custom properties"
+    "Use template",                            "Use template for custom properties"
   },
   {
     ED_CHECKBUTTON_ID_CUSTOM_ACCESSIBLE,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(2),
-    GADGET_ID_CUSTOM_ACCESSIBLE,       GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(2),
+    GADGET_ID_CUSTOM_ACCESSIBLE,               GADGET_ID_NONE,
     &custom_element_properties[EP_ACCESSIBLE],
     NULL, NULL,
-    NULL,                              "Player can walk to or pass this field"
+    NULL,                                      "Player can walk to or pass this field"
   },
   {
     ED_CHECKBUTTON_ID_CUSTOM_GRAV_REACHABLE,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(9),
-    GADGET_ID_CUSTOM_GRAV_REACHABLE,   GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(9),
+    GADGET_ID_CUSTOM_GRAV_REACHABLE,           GADGET_ID_NONE,
     &custom_element_properties[EP_GRAVITY_REACHABLE],
     NULL, NULL,
-    "Reachable despite gravity",       "Player can walk/dig despite gravity"
+    "Reachable despite gravity",               "Player can walk/dig despite gravity"
   },
   {
     ED_CHECKBUTTON_ID_CUSTOM_USE_LAST_VALUE,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(11),
-    GADGET_ID_CUSTOM_USE_LAST_VALUE,   GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(11),
+    GADGET_ID_CUSTOM_USE_LAST_VALUE,           GADGET_ID_NONE,
     &custom_element.use_last_ce_value,
     NULL, NULL,
-    "Use last CE value after change",  "Use last CE value after change"
+    "Use last CE value after change",          "Use last CE value after change"
   },
   {
     ED_CHECKBUTTON_ID_CUSTOM_WALK_TO_OBJECT,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(4),
-    GADGET_ID_CUSTOM_WALK_TO_OBJECT,   GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(4),
+    GADGET_ID_CUSTOM_WALK_TO_OBJECT,           GADGET_ID_NONE,
     &custom_element_properties[EP_WALK_TO_OBJECT],
     NULL, NULL,
-    NULL,                              "Player can dig/collect/push element"
+    NULL,                                      "Player can dig/collect/push element"
   },
   {
     ED_CHECKBUTTON_ID_CUSTOM_INDESTRUCTIBLE,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(8),
-    GADGET_ID_CUSTOM_INDESTRUCTIBLE,   GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(8),
+    GADGET_ID_CUSTOM_INDESTRUCTIBLE,           GADGET_ID_NONE,
     &custom_element_properties[EP_INDESTRUCTIBLE],
     NULL, NULL,
-    "Indestructible",                  "Element is indestructible"
+    "Indestructible",                          "Element is indestructible"
   },
 
   // ---------- element settings: configure 2 (custom elements) ---------------
 
   {
     ED_CHECKBUTTON_ID_CUSTOM_CAN_MOVE,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(1),
-    GADGET_ID_CUSTOM_CAN_MOVE,         GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(1),
+    GADGET_ID_CUSTOM_CAN_MOVE,                 GADGET_ID_NONE,
     &custom_element_properties[EP_CAN_MOVE],
     NULL, NULL,
-    NULL,                              "Element can move with some pattern"
+    NULL,                                      "Element can move with some pattern"
   },
   {
     ED_CHECKBUTTON_ID_CUSTOM_CAN_FALL,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(8),
-    GADGET_ID_CUSTOM_CAN_FALL,         GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(8),
+    GADGET_ID_CUSTOM_CAN_FALL,                 GADGET_ID_NONE,
     &custom_element_properties[EP_CAN_FALL],
     NULL, NULL,
-    "Can fall",                                "Element can fall down"
+    "Can fall",                                        "Element can fall down"
   },
   {
     ED_CHECKBUTTON_ID_CUSTOM_CAN_SMASH,
-    -1,                                        ED_ELEMENT_SETTINGS_YPOS(8),
-    GADGET_ID_CUSTOM_CAN_SMASH,                GADGET_ID_CUSTOM_CAN_FALL,
+    -1,                                                ED_ELEMENT_SETTINGS_YPOS(8),
+    GADGET_ID_CUSTOM_CAN_SMASH,                        GADGET_ID_CUSTOM_CAN_FALL,
     &custom_element_properties[EP_CAN_SMASH],
     NULL, " ",
-    NULL,                              "Element can smash other elements"
+    NULL,                                      "Element can smash other elements"
   },
   {
     ED_CHECKBUTTON_ID_CUSTOM_SLIPPERY,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(9),
-    GADGET_ID_CUSTOM_SLIPPERY,         GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(9),
+    GADGET_ID_CUSTOM_SLIPPERY,                 GADGET_ID_NONE,
     &custom_element_properties[EP_SLIPPERY],
     NULL, NULL,
-    NULL,                              "Other elements can fall down from it"
+    NULL,                                      "Other elements can fall down from it"
   },
   {
     ED_CHECKBUTTON_ID_CUSTOM_DEADLY,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(10),
-    GADGET_ID_CUSTOM_DEADLY,           GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(10),
+    GADGET_ID_CUSTOM_DEADLY,                   GADGET_ID_NONE,
     &custom_element_properties[EP_DEADLY],
     NULL, NULL,
-    NULL,                              "Element can kill the player"
+    NULL,                                      "Element can kill the player"
   },
   {
     ED_CHECKBUTTON_ID_CUSTOM_CAN_EXPLODE,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(11),
-    GADGET_ID_CUSTOM_CAN_EXPLODE,      GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(11),
+    GADGET_ID_CUSTOM_CAN_EXPLODE,              GADGET_ID_NONE,
     &custom_element_properties[EP_CAN_EXPLODE],
     NULL, NULL,
-    NULL,                              "Element can explode"
+    NULL,                                      "Element can explode"
   },
   {
     ED_CHECKBUTTON_ID_CUSTOM_EXPLODE_FIRE,
-    ED_ELEMENT_SETTINGS_XPOS(1),       ED_ELEMENT_SETTINGS_YPOS(12),
-    GADGET_ID_CUSTOM_EXPLODE_FIRE,     GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(1),               ED_ELEMENT_SETTINGS_YPOS(12),
+    GADGET_ID_CUSTOM_EXPLODE_FIRE,             GADGET_ID_NONE,
     &custom_element_properties[EP_EXPLODES_BY_FIRE],
     NULL, NULL,
-    "By fire",                         "Element can explode by fire/explosion"
+    "By fire",                                 "Element can explode by fire/explosion"
   },
   {
     ED_CHECKBUTTON_ID_CUSTOM_EXPLODE_SMASH,
-    -1,                                        ED_ELEMENT_SETTINGS_YPOS(12),
-    GADGET_ID_CUSTOM_EXPLODE_SMASH,    GADGET_ID_CUSTOM_EXPLODE_FIRE,
+    -1,                                                ED_ELEMENT_SETTINGS_YPOS(12),
+    GADGET_ID_CUSTOM_EXPLODE_SMASH,            GADGET_ID_CUSTOM_EXPLODE_FIRE,
     &custom_element_properties[EP_EXPLODES_SMASHED],
     NULL, " ",
-    "Smashed",                         "Element can explode when smashed"
+    "Smashed",                                 "Element can explode when smashed"
   },
   {
     ED_CHECKBUTTON_ID_CUSTOM_EXPLODE_IMPACT,
-    -1,                                        ED_ELEMENT_SETTINGS_YPOS(12),
-    GADGET_ID_CUSTOM_EXPLODE_IMPACT,   GADGET_ID_CUSTOM_EXPLODE_SMASH,
+    -1,                                                ED_ELEMENT_SETTINGS_YPOS(12),
+    GADGET_ID_CUSTOM_EXPLODE_IMPACT,           GADGET_ID_CUSTOM_EXPLODE_SMASH,
     &custom_element_properties[EP_EXPLODES_IMPACT],
     NULL, " ",
-    "Impact",                          "Element can explode on impact"
+    "Impact",                                  "Element can explode on impact"
   },
 
   // ---------- element settings: advanced (custom elements) ------------------
 
   {
     ED_CHECKBUTTON_ID_CUSTOM_CAN_CHANGE,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(1),
-    GADGET_ID_CUSTOM_CAN_CHANGE,       GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(1),
+    GADGET_ID_CUSTOM_CAN_CHANGE,               GADGET_ID_NONE,
     &custom_element_change.can_change,
     NULL, NULL,
-    "Element changes to:",             "Change element on specified condition"
+    "Element changes to:",                     "Change element on specified condition"
   },
   {
     ED_CHECKBUTTON_ID_CHANGE_DELAY,
-    ED_ELEMENT_SETTINGS_XPOS(1),       ED_ELEMENT_SETTINGS_YPOS(2),
-    GADGET_ID_CHANGE_DELAY,            GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(1),               ED_ELEMENT_SETTINGS_YPOS(2),
+    GADGET_ID_CHANGE_DELAY,                    GADGET_ID_NONE,
     &custom_element_change_events[CE_DELAY],
     NULL, NULL,
-    NULL,                              "Element changes after delay"
+    NULL,                                      "Element changes after delay"
   },
   {
     ED_CHECKBUTTON_ID_CHANGE_BY_DIRECT_ACT,
-    ED_ELEMENT_SETTINGS_XPOS(1),       ED_ELEMENT_SETTINGS_YPOS(4),
-    GADGET_ID_CHANGE_BY_DIRECT_ACT,    GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(1),               ED_ELEMENT_SETTINGS_YPOS(4),
+    GADGET_ID_CHANGE_BY_DIRECT_ACT,            GADGET_ID_NONE,
     &custom_element_change_events[CE_BY_DIRECT_ACTION],
     NULL, NULL,
-    NULL,                              "Element changes by direct action"
+    NULL,                                      "Element changes by direct action"
   },
   {
     ED_CHECKBUTTON_ID_CHANGE_BY_OTHER_ACT,
-    ED_ELEMENT_SETTINGS_XPOS(1),       ED_ELEMENT_SETTINGS_YPOS(5),
-    GADGET_ID_CHANGE_BY_OTHER_ACT,     GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(1),               ED_ELEMENT_SETTINGS_YPOS(5),
+    GADGET_ID_CHANGE_BY_OTHER_ACT,             GADGET_ID_NONE,
     &custom_element_change_events[CE_BY_OTHER_ACTION],
     NULL, NULL,
-    NULL,                              "Element changes by other element"
+    NULL,                                      "Element changes by other element"
   },
   {
     ED_CHECKBUTTON_ID_CHANGE_USE_EXPLOSION,
-    ED_ELEMENT_SETTINGS_XPOS(1),       ED_ELEMENT_SETTINGS_YPOS(8),
-    GADGET_ID_CHANGE_USE_EXPLOSION,    GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(1),               ED_ELEMENT_SETTINGS_YPOS(8),
+    GADGET_ID_CHANGE_USE_EXPLOSION,            GADGET_ID_NONE,
     &custom_element_change.explode,
     NULL, NULL,
-    "Explode instead of change",       "Element explodes instead of change"
+    "Explode instead of change",               "Element explodes instead of change"
   },
   {
     ED_CHECKBUTTON_ID_CHANGE_USE_CONTENT,
-    ED_ELEMENT_SETTINGS_XPOS(1),       ED_ELEMENT_SETTINGS_YPOS(9),
-    GADGET_ID_CHANGE_USE_CONTENT,      GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(1),               ED_ELEMENT_SETTINGS_YPOS(9),
+    GADGET_ID_CHANGE_USE_CONTENT,              GADGET_ID_NONE,
     &custom_element_change.use_target_content,
     NULL, NULL,
-    "Use extended change target:",     "Element changes to more elements"
+    "Use extended change target:",             "Element changes to more elements"
   },
   {
     ED_CHECKBUTTON_ID_CHANGE_ONLY_COMPLETE,
-    ED_ELEMENT_SETTINGS_XPOS(2),       ED_ELEMENT_SETTINGS_YPOS(11),
-    GADGET_ID_CHANGE_ONLY_COMPLETE,    GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(2),               ED_ELEMENT_SETTINGS_YPOS(11),
+    GADGET_ID_CHANGE_ONLY_COMPLETE,            GADGET_ID_NONE,
     &custom_element_change.only_if_complete,
     NULL, NULL,
-    "Replace all or nothing",          "Only replace when all can be changed"
+    "Replace all or nothing",                  "Only replace when all can be changed"
   },
   {
     ED_CHECKBUTTON_ID_CHANGE_USE_RANDOM,
-    ED_ELEMENT_SETTINGS_XPOS(2),       ED_ELEMENT_SETTINGS_YPOS(12),
-    GADGET_ID_CHANGE_USE_RANDOM,       GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(2),               ED_ELEMENT_SETTINGS_YPOS(12),
+    GADGET_ID_CHANGE_USE_RANDOM,               GADGET_ID_NONE,
     &custom_element_change.use_random_replace,
     NULL, NULL,
-    NULL,                              "Use percentage for random replace"
+    NULL,                                      "Use percentage for random replace"
   },
   {
     ED_CHECKBUTTON_ID_CHANGE_HAS_ACTION,
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(13),
-    GADGET_ID_CHANGE_HAS_ACTION,       GADGET_ID_NONE,
+    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(13),
+    GADGET_ID_CHANGE_HAS_ACTION,               GADGET_ID_NONE,
     &custom_element_change.has_action,
     NULL, NULL,
-    NULL,                              "Execute action on specified condition"
+    NULL,                                      "Execute action on specified condition"
   },
 };
 
@@ -4115,312 +4649,563 @@ static struct
 
   {
     ED_DRAWING_ID_DRAWING_LEVEL,
-    0,                                 0,
-    0,                                 0,
-    GADGET_ID_DRAWING_LEVEL,           GADGET_ID_NONE,
+    0,                                         0,
+    0,                                         0,
+    GADGET_ID_DRAWING_LEVEL,                   GADGET_ID_NONE,
     NULL,
     -1, -1,    // these values are not constant, but can change at runtime
-    NULL, NULL, NULL, NULL,            NULL
+    NULL, NULL, NULL, NULL,                    NULL
   },
 
   // ---------- yam yam content -----------------------------------------------
 
   {
     ED_DRAWING_ID_YAMYAM_CONTENT_0,
-    ED_AREA_YAMYAM_CONTENT_XPOS,       ED_AREA_YAMYAM_CONTENT_YPOS,
-    ED_AREA_YAMYAM_CONTENT_XOFF(0),    ED_AREA_YAMYAM_CONTENT_YOFF(0),
-    GADGET_ID_YAMYAM_CONTENT_0,                GADGET_ID_NONE,
-    &level.yamyam_content[0].e[0][0],  3, 3,
-    NULL, NULL, NULL, "1",             NULL
+    ED_AREA_YAMYAM_CONTENT_XPOS,               ED_AREA_YAMYAM_CONTENT_YPOS,
+    ED_AREA_YAMYAM_CONTENT_XOFF(0),            ED_AREA_YAMYAM_CONTENT_YOFF(0),
+    GADGET_ID_YAMYAM_CONTENT_0,                        GADGET_ID_NONE,
+    &level.yamyam_content[0].e[0][0],          3, 3,
+    NULL, NULL, NULL, "1",                     NULL
   },
   {
     ED_DRAWING_ID_YAMYAM_CONTENT_1,
-    ED_AREA_YAMYAM_CONTENT_XPOS,       ED_AREA_YAMYAM_CONTENT_YPOS,
-    ED_AREA_YAMYAM_CONTENT_XOFF(1),    ED_AREA_YAMYAM_CONTENT_YOFF(1),
-    GADGET_ID_YAMYAM_CONTENT_1,                GADGET_ID_NONE,
-    &level.yamyam_content[1].e[0][0],  3, 3,
-    NULL, NULL, NULL, "2",             NULL
+    ED_AREA_YAMYAM_CONTENT_XPOS,               ED_AREA_YAMYAM_CONTENT_YPOS,
+    ED_AREA_YAMYAM_CONTENT_XOFF(1),            ED_AREA_YAMYAM_CONTENT_YOFF(1),
+    GADGET_ID_YAMYAM_CONTENT_1,                        GADGET_ID_NONE,
+    &level.yamyam_content[1].e[0][0],          3, 3,
+    NULL, NULL, NULL, "2",                     NULL
   },
   {
     ED_DRAWING_ID_YAMYAM_CONTENT_2,
-    ED_AREA_YAMYAM_CONTENT_XPOS,       ED_AREA_YAMYAM_CONTENT_YPOS,
-    ED_AREA_YAMYAM_CONTENT_XOFF(2),    ED_AREA_YAMYAM_CONTENT_YOFF(2),
-    GADGET_ID_YAMYAM_CONTENT_2,                GADGET_ID_NONE,
-    &level.yamyam_content[2].e[0][0],  3, 3,
-    NULL, NULL, NULL, "3",             NULL
+    ED_AREA_YAMYAM_CONTENT_XPOS,               ED_AREA_YAMYAM_CONTENT_YPOS,
+    ED_AREA_YAMYAM_CONTENT_XOFF(2),            ED_AREA_YAMYAM_CONTENT_YOFF(2),
+    GADGET_ID_YAMYAM_CONTENT_2,                        GADGET_ID_NONE,
+    &level.yamyam_content[2].e[0][0],          3, 3,
+    NULL, NULL, NULL, "3",                     NULL
   },
   {
     ED_DRAWING_ID_YAMYAM_CONTENT_3,
-    ED_AREA_YAMYAM_CONTENT_XPOS,       ED_AREA_YAMYAM_CONTENT_YPOS,
-    ED_AREA_YAMYAM_CONTENT_XOFF(3),    ED_AREA_YAMYAM_CONTENT_YOFF(3),
-    GADGET_ID_YAMYAM_CONTENT_3,                GADGET_ID_NONE,
-    &level.yamyam_content[3].e[0][0],  3, 3,
-    NULL, NULL, NULL, "4",             NULL
+    ED_AREA_YAMYAM_CONTENT_XPOS,               ED_AREA_YAMYAM_CONTENT_YPOS,
+    ED_AREA_YAMYAM_CONTENT_XOFF(3),            ED_AREA_YAMYAM_CONTENT_YOFF(3),
+    GADGET_ID_YAMYAM_CONTENT_3,                        GADGET_ID_NONE,
+    &level.yamyam_content[3].e[0][0],          3, 3,
+    NULL, NULL, NULL, "4",                     NULL
   },
   {
     ED_DRAWING_ID_YAMYAM_CONTENT_4,
-    ED_AREA_YAMYAM_CONTENT_XPOS,       ED_AREA_YAMYAM_CONTENT_YPOS,
-    ED_AREA_YAMYAM_CONTENT_XOFF(4),    ED_AREA_YAMYAM_CONTENT_YOFF(4),
-    GADGET_ID_YAMYAM_CONTENT_4,                GADGET_ID_NONE,
-    &level.yamyam_content[4].e[0][0],  3, 3,
-    NULL, NULL, NULL, "5",             NULL
+    ED_AREA_YAMYAM_CONTENT_XPOS,               ED_AREA_YAMYAM_CONTENT_YPOS,
+    ED_AREA_YAMYAM_CONTENT_XOFF(4),            ED_AREA_YAMYAM_CONTENT_YOFF(4),
+    GADGET_ID_YAMYAM_CONTENT_4,                        GADGET_ID_NONE,
+    &level.yamyam_content[4].e[0][0],          3, 3,
+    NULL, NULL, NULL, "5",                     NULL
   },
   {
     ED_DRAWING_ID_YAMYAM_CONTENT_5,
-    ED_AREA_YAMYAM_CONTENT_XPOS,       ED_AREA_YAMYAM_CONTENT_YPOS,
-    ED_AREA_YAMYAM_CONTENT_XOFF(5),    ED_AREA_YAMYAM_CONTENT_YOFF(5),
-    GADGET_ID_YAMYAM_CONTENT_5,                GADGET_ID_NONE,
-    &level.yamyam_content[5].e[0][0],  3, 3,
-    NULL, NULL, NULL, "6",             NULL
+    ED_AREA_YAMYAM_CONTENT_XPOS,               ED_AREA_YAMYAM_CONTENT_YPOS,
+    ED_AREA_YAMYAM_CONTENT_XOFF(5),            ED_AREA_YAMYAM_CONTENT_YOFF(5),
+    GADGET_ID_YAMYAM_CONTENT_5,                        GADGET_ID_NONE,
+    &level.yamyam_content[5].e[0][0],          3, 3,
+    NULL, NULL, NULL, "6",                     NULL
   },
   {
     ED_DRAWING_ID_YAMYAM_CONTENT_6,
-    ED_AREA_YAMYAM_CONTENT_XPOS,       ED_AREA_YAMYAM_CONTENT_YPOS,
-    ED_AREA_YAMYAM_CONTENT_XOFF(6),    ED_AREA_YAMYAM_CONTENT_YOFF(6),
-    GADGET_ID_YAMYAM_CONTENT_6,                GADGET_ID_NONE,
-    &level.yamyam_content[6].e[0][0],  3, 3,
-    NULL, NULL, NULL, "7",             NULL
+    ED_AREA_YAMYAM_CONTENT_XPOS,               ED_AREA_YAMYAM_CONTENT_YPOS,
+    ED_AREA_YAMYAM_CONTENT_XOFF(6),            ED_AREA_YAMYAM_CONTENT_YOFF(6),
+    GADGET_ID_YAMYAM_CONTENT_6,                        GADGET_ID_NONE,
+    &level.yamyam_content[6].e[0][0],          3, 3,
+    NULL, NULL, NULL, "7",                     NULL
   },
   {
     ED_DRAWING_ID_YAMYAM_CONTENT_7,
-    ED_AREA_YAMYAM_CONTENT_XPOS,       ED_AREA_YAMYAM_CONTENT_YPOS,
-    ED_AREA_YAMYAM_CONTENT_XOFF(7),    ED_AREA_YAMYAM_CONTENT_YOFF(7),
-    GADGET_ID_YAMYAM_CONTENT_7,                GADGET_ID_NONE,
-    &level.yamyam_content[7].e[0][0],  3, 3,
-    NULL, NULL, NULL, "8",             NULL
+    ED_AREA_YAMYAM_CONTENT_XPOS,               ED_AREA_YAMYAM_CONTENT_YPOS,
+    ED_AREA_YAMYAM_CONTENT_XOFF(7),            ED_AREA_YAMYAM_CONTENT_YOFF(7),
+    GADGET_ID_YAMYAM_CONTENT_7,                        GADGET_ID_NONE,
+    &level.yamyam_content[7].e[0][0],          3, 3,
+    NULL, NULL, NULL, "8",                     NULL
   },
 
   // ---------- magic ball content --------------------------------------------
 
   {
     ED_DRAWING_ID_MAGIC_BALL_CONTENT_0,
-    ED_AREA_MAGIC_BALL_CONTENT_XPOS,   ED_AREA_MAGIC_BALL_CONTENT_YPOS,
-    ED_AREA_MAGIC_BALL_CONTENT_XOFF(0),        ED_AREA_MAGIC_BALL_CONTENT_YOFF(0),
-    GADGET_ID_MAGIC_BALL_CONTENT_0,    GADGET_ID_NONE,
-    &level.ball_content[0].e[0][0],    3, 3,
-    NULL, NULL, NULL, "1",             NULL
+    ED_AREA_MAGIC_BALL_CONTENT_XPOS,           ED_AREA_MAGIC_BALL_CONTENT_YPOS,
+    ED_AREA_MAGIC_BALL_CONTENT_XOFF(0),                ED_AREA_MAGIC_BALL_CONTENT_YOFF(0),
+    GADGET_ID_MAGIC_BALL_CONTENT_0,            GADGET_ID_NONE,
+    &level.ball_content[0].e[0][0],            3, 3,
+    NULL, NULL, NULL, "1",                     NULL
   },
   {
     ED_DRAWING_ID_MAGIC_BALL_CONTENT_1,
-    ED_AREA_MAGIC_BALL_CONTENT_XPOS,   ED_AREA_MAGIC_BALL_CONTENT_YPOS,
-    ED_AREA_MAGIC_BALL_CONTENT_XOFF(1),        ED_AREA_MAGIC_BALL_CONTENT_YOFF(1),
-    GADGET_ID_MAGIC_BALL_CONTENT_1,    GADGET_ID_NONE,
-    &level.ball_content[1].e[0][0],    3, 3,
-    NULL, NULL, NULL, "2",             NULL
+    ED_AREA_MAGIC_BALL_CONTENT_XPOS,           ED_AREA_MAGIC_BALL_CONTENT_YPOS,
+    ED_AREA_MAGIC_BALL_CONTENT_XOFF(1),                ED_AREA_MAGIC_BALL_CONTENT_YOFF(1),
+    GADGET_ID_MAGIC_BALL_CONTENT_1,            GADGET_ID_NONE,
+    &level.ball_content[1].e[0][0],            3, 3,
+    NULL, NULL, NULL, "2",                     NULL
   },
   {
     ED_DRAWING_ID_MAGIC_BALL_CONTENT_2,
-    ED_AREA_MAGIC_BALL_CONTENT_XPOS,   ED_AREA_MAGIC_BALL_CONTENT_YPOS,
-    ED_AREA_MAGIC_BALL_CONTENT_XOFF(2),        ED_AREA_MAGIC_BALL_CONTENT_YOFF(2),
-    GADGET_ID_MAGIC_BALL_CONTENT_2,    GADGET_ID_NONE,
-    &level.ball_content[2].e[0][0],    3, 3,
-    NULL, NULL, NULL, "3",             NULL
+    ED_AREA_MAGIC_BALL_CONTENT_XPOS,           ED_AREA_MAGIC_BALL_CONTENT_YPOS,
+    ED_AREA_MAGIC_BALL_CONTENT_XOFF(2),                ED_AREA_MAGIC_BALL_CONTENT_YOFF(2),
+    GADGET_ID_MAGIC_BALL_CONTENT_2,            GADGET_ID_NONE,
+    &level.ball_content[2].e[0][0],            3, 3,
+    NULL, NULL, NULL, "3",                     NULL
   },
   {
     ED_DRAWING_ID_MAGIC_BALL_CONTENT_3,
-    ED_AREA_MAGIC_BALL_CONTENT_XPOS,   ED_AREA_MAGIC_BALL_CONTENT_YPOS,
-    ED_AREA_MAGIC_BALL_CONTENT_XOFF(3),        ED_AREA_MAGIC_BALL_CONTENT_YOFF(3),
-    GADGET_ID_MAGIC_BALL_CONTENT_3,    GADGET_ID_NONE,
-    &level.ball_content[3].e[0][0],    3, 3,
-    NULL, NULL, NULL, "4",             NULL
+    ED_AREA_MAGIC_BALL_CONTENT_XPOS,           ED_AREA_MAGIC_BALL_CONTENT_YPOS,
+    ED_AREA_MAGIC_BALL_CONTENT_XOFF(3),                ED_AREA_MAGIC_BALL_CONTENT_YOFF(3),
+    GADGET_ID_MAGIC_BALL_CONTENT_3,            GADGET_ID_NONE,
+    &level.ball_content[3].e[0][0],            3, 3,
+    NULL, NULL, NULL, "4",                     NULL
   },
   {
     ED_DRAWING_ID_MAGIC_BALL_CONTENT_4,
-    ED_AREA_MAGIC_BALL_CONTENT_XPOS,   ED_AREA_MAGIC_BALL_CONTENT_YPOS,
-    ED_AREA_MAGIC_BALL_CONTENT_XOFF(4),        ED_AREA_MAGIC_BALL_CONTENT_YOFF(4),
-    GADGET_ID_MAGIC_BALL_CONTENT_4,    GADGET_ID_NONE,
-    &level.ball_content[4].e[0][0],    3, 3,
-    NULL, NULL, NULL, "5",             NULL
+    ED_AREA_MAGIC_BALL_CONTENT_XPOS,           ED_AREA_MAGIC_BALL_CONTENT_YPOS,
+    ED_AREA_MAGIC_BALL_CONTENT_XOFF(4),                ED_AREA_MAGIC_BALL_CONTENT_YOFF(4),
+    GADGET_ID_MAGIC_BALL_CONTENT_4,            GADGET_ID_NONE,
+    &level.ball_content[4].e[0][0],            3, 3,
+    NULL, NULL, NULL, "5",                     NULL
   },
   {
     ED_DRAWING_ID_MAGIC_BALL_CONTENT_5,
-    ED_AREA_MAGIC_BALL_CONTENT_XPOS,   ED_AREA_MAGIC_BALL_CONTENT_YPOS,
-    ED_AREA_MAGIC_BALL_CONTENT_XOFF(5),        ED_AREA_MAGIC_BALL_CONTENT_YOFF(5),
-    GADGET_ID_MAGIC_BALL_CONTENT_5,    GADGET_ID_NONE,
-    &level.ball_content[5].e[0][0],    3, 3,
-    NULL, NULL, NULL, "6",             NULL
+    ED_AREA_MAGIC_BALL_CONTENT_XPOS,           ED_AREA_MAGIC_BALL_CONTENT_YPOS,
+    ED_AREA_MAGIC_BALL_CONTENT_XOFF(5),                ED_AREA_MAGIC_BALL_CONTENT_YOFF(5),
+    GADGET_ID_MAGIC_BALL_CONTENT_5,            GADGET_ID_NONE,
+    &level.ball_content[5].e[0][0],            3, 3,
+    NULL, NULL, NULL, "6",                     NULL
   },
   {
     ED_DRAWING_ID_MAGIC_BALL_CONTENT_6,
-    ED_AREA_MAGIC_BALL_CONTENT_XPOS,   ED_AREA_MAGIC_BALL_CONTENT_YPOS,
-    ED_AREA_MAGIC_BALL_CONTENT_XOFF(6),        ED_AREA_MAGIC_BALL_CONTENT_YOFF(6),
-    GADGET_ID_MAGIC_BALL_CONTENT_6,    GADGET_ID_NONE,
-    &level.ball_content[6].e[0][0],    3, 3,
-    NULL, NULL, NULL, "7",             NULL
+    ED_AREA_MAGIC_BALL_CONTENT_XPOS,           ED_AREA_MAGIC_BALL_CONTENT_YPOS,
+    ED_AREA_MAGIC_BALL_CONTENT_XOFF(6),                ED_AREA_MAGIC_BALL_CONTENT_YOFF(6),
+    GADGET_ID_MAGIC_BALL_CONTENT_6,            GADGET_ID_NONE,
+    &level.ball_content[6].e[0][0],            3, 3,
+    NULL, NULL, NULL, "7",                     NULL
   },
   {
     ED_DRAWING_ID_MAGIC_BALL_CONTENT_7,
-    ED_AREA_MAGIC_BALL_CONTENT_XPOS,   ED_AREA_MAGIC_BALL_CONTENT_YPOS,
-    ED_AREA_MAGIC_BALL_CONTENT_XOFF(7),        ED_AREA_MAGIC_BALL_CONTENT_YOFF(7),
-    GADGET_ID_MAGIC_BALL_CONTENT_7,    GADGET_ID_NONE,
-    &level.ball_content[7].e[0][0],    3, 3,
-    NULL, NULL, NULL, "8",             NULL
+    ED_AREA_MAGIC_BALL_CONTENT_XPOS,           ED_AREA_MAGIC_BALL_CONTENT_YPOS,
+    ED_AREA_MAGIC_BALL_CONTENT_XOFF(7),                ED_AREA_MAGIC_BALL_CONTENT_YOFF(7),
+    GADGET_ID_MAGIC_BALL_CONTENT_7,            GADGET_ID_NONE,
+    &level.ball_content[7].e[0][0],            3, 3,
+    NULL, NULL, NULL, "8",                     NULL
   },
 
   // ---------- android content -----------------------------------------------
 
   {
     ED_DRAWING_ID_ANDROID_CONTENT,
-    ED_AREA_1X1_SETTINGS_XPOS(0),      ED_AREA_1X1_SETTINGS_YPOS(6),
-    ED_AREA_1X1_SETTINGS_XOFF,         ED_AREA_1X1_SETTINGS_YOFF,
-    GADGET_ID_ANDROID_CONTENT,         GADGET_ID_NONE,
-    &level.android_clone_element[0],   MAX_ANDROID_ELEMENTS, 1,
-    NULL, NULL, "Elements:", NULL,     "Elements android can clone"
+    ED_AREA_1X1_SETTINGS_XPOS(0),              ED_AREA_1X1_SETTINGS_YPOS(6),
+    ED_AREA_1X1_SETTINGS_XOFF,                 ED_AREA_1X1_SETTINGS_YOFF,
+    GADGET_ID_ANDROID_CONTENT,                 GADGET_ID_NONE,
+    &level.android_clone_element[0],           MAX_ANDROID_ELEMENTS, 1,
+    NULL, NULL, "Elements:", NULL,             "Elements android can clone"
   },
 
   // ---------- amoeba content ------------------------------------------------
 
   {
     ED_DRAWING_ID_AMOEBA_CONTENT,
-    ED_AREA_1X1_SETTINGS_XPOS(0),      ED_AREA_1X1_SETTINGS_YPOS(3),
-    ED_AREA_1X1_SETTINGS_XOFF,         ED_AREA_1X1_SETTINGS_YOFF,
-    GADGET_ID_AMOEBA_CONTENT,          GADGET_ID_NONE,
-    &level.amoeba_content,             1, 1,
-    "Content:", NULL, NULL, NULL,      "Amoeba content"
+    ED_AREA_1X1_SETTINGS_XPOS(0),              ED_AREA_1X1_SETTINGS_YPOS(3),
+    ED_AREA_1X1_SETTINGS_XOFF,                 ED_AREA_1X1_SETTINGS_YOFF,
+    GADGET_ID_AMOEBA_CONTENT,                  GADGET_ID_NONE,
+    &level.amoeba_content,                     1, 1,
+    "Content:", NULL, NULL, NULL,              "Amoeba content"
   },
 
   // ---------- BD snap element -----------------------------------------------
 
   {
     ED_DRAWING_ID_BD_SNAP_ELEMENT,
-    ED_AREA_1X1_SETTINGS_XPOS(0),      ED_AREA_1X1_SETTINGS_YPOS(5),
-    ED_AREA_1X1_SETTINGS_XOFF,         ED_AREA_1X1_SETTINGS_YOFF,
-    GADGET_ID_BD_SNAP_ELEMENT,         GADGET_ID_NONE,
-    &level.bd_snap_element,            1, 1,
-    "Snap element:", NULL, NULL, NULL, "Element created when snapping"
+    ED_AREA_1X1_SETTINGS_XPOS(0),              ED_AREA_1X1_SETTINGS_YPOS(5),
+    ED_AREA_1X1_SETTINGS_XOFF,                 ED_AREA_1X1_SETTINGS_YOFF,
+    GADGET_ID_BD_SNAP_ELEMENT,                 GADGET_ID_NONE,
+    &level.bd_snap_element,                    1, 1,
+    "Snap element:", NULL, NULL, NULL,         "Element created when snapping"
+  },
+
+  // ---------- BD magic wall elements ----------------------------------------
+
+  {
+    ED_DRAWING_ID_BD_MAGIC_WALL_DIAMOND_TO,
+    ED_AREA_1X1_SETTINGS_XPOS(0),              ED_AREA_1X1_SETTINGS_YPOS(6),
+    ED_AREA_1X1_SETTINGS_XOFF,                 ED_AREA_1X1_SETTINGS_YOFF,
+    GADGET_ID_BD_MAGIC_WALL_DIAMOND_TO,                GADGET_ID_NONE,
+    &level.bd_magic_wall_diamond_to,           1, 1,
+    "Changes diamonds to:", NULL, NULL, NULL,  "Element to turn diamonds to"
+  },
+  {
+    ED_DRAWING_ID_BD_MAGIC_WALL_ROCK_TO,
+    ED_AREA_1X1_SETTINGS_XPOS(0),              ED_AREA_1X1_SETTINGS_YPOS(7),
+    ED_AREA_1X1_SETTINGS_XOFF,                 ED_AREA_1X1_SETTINGS_YOFF,
+    GADGET_ID_BD_MAGIC_WALL_ROCK_TO,           GADGET_ID_NONE,
+    &level.bd_magic_wall_rock_to,              1, 1,
+    "Changes rocks to:", NULL, NULL, NULL,     "Element to turn rocks to"
+  },
+  {
+    ED_DRAWING_ID_BD_MAGIC_WALL_MEGA_ROCK_TO,
+    ED_AREA_1X1_SETTINGS_XPOS(0),              ED_AREA_1X1_SETTINGS_YPOS(8),
+    ED_AREA_1X1_SETTINGS_XOFF,                 ED_AREA_1X1_SETTINGS_YOFF,
+    GADGET_ID_BD_MAGIC_WALL_MEGA_ROCK_TO,      GADGET_ID_NONE,
+    &level.bd_magic_wall_mega_rock_to,         1, 1,
+    "Changes mega rocks to:", NULL, NULL, NULL,        "Element to turn mega rocks to"
+  },
+  {
+    ED_DRAWING_ID_BD_MAGIC_WALL_NUT_TO,
+    ED_AREA_1X1_SETTINGS_XPOS(0),              ED_AREA_1X1_SETTINGS_YPOS(9),
+    ED_AREA_1X1_SETTINGS_XOFF,                 ED_AREA_1X1_SETTINGS_YOFF,
+    GADGET_ID_BD_MAGIC_WALL_NUT_TO,            GADGET_ID_NONE,
+    &level.bd_magic_wall_nut_to,               1, 1,
+    "Changes nuts to:", NULL, NULL, NULL,      "Element to turn nuts to"
+  },
+  {
+    ED_DRAWING_ID_BD_MAGIC_WALL_NITRO_PACK_TO,
+    ED_AREA_1X1_SETTINGS_XPOS(0),              ED_AREA_1X1_SETTINGS_YPOS(10),
+    ED_AREA_1X1_SETTINGS_XOFF,                 ED_AREA_1X1_SETTINGS_YOFF,
+    GADGET_ID_BD_MAGIC_WALL_NITRO_PACK_TO,     GADGET_ID_NONE,
+    &level.bd_magic_wall_nitro_pack_to,                1, 1,
+    "Changes nitro packs to:", NULL, NULL, NULL, "Element to turn nitro packs to"
+  },
+  {
+    ED_DRAWING_ID_BD_MAGIC_WALL_FLYING_DIAMOND_TO,
+    ED_AREA_1X1_SETTINGS_XPOS(0),              ED_AREA_1X1_SETTINGS_YPOS(11),
+    ED_AREA_1X1_SETTINGS_XOFF,                 ED_AREA_1X1_SETTINGS_YOFF,
+    GADGET_ID_BD_MAGIC_WALL_FLYING_DIAMOND_TO, GADGET_ID_NONE,
+    &level.bd_magic_wall_flying_diamond_to,    1, 1,
+    "Changes flying diamonds to:", NULL, NULL, NULL, "Element to turn flying diamonds to"
+  },
+  {
+    ED_DRAWING_ID_BD_MAGIC_WALL_FLYING_ROCK_TO,
+    ED_AREA_1X1_SETTINGS_XPOS(0),              ED_AREA_1X1_SETTINGS_YPOS(12),
+    ED_AREA_1X1_SETTINGS_XOFF,                 ED_AREA_1X1_SETTINGS_YOFF,
+    GADGET_ID_BD_MAGIC_WALL_FLYING_ROCK_TO,    GADGET_ID_NONE,
+    &level.bd_magic_wall_flying_rock_to,       1, 1,
+    "Changes flying rocks to:", NULL, NULL, NULL, "Element to turn flying rocks to"
   },
 
   // ---------- BD amoeba content ---------------------------------------------
 
   {
     ED_DRAWING_ID_BD_AMOEBA_CONTENT_TOO_BIG,
-    ED_AREA_1X1_SETTINGS_XPOS(0),      ED_AREA_1X1_SETTINGS_YPOS(7),
-    ED_AREA_1X1_SETTINGS_XOFF,         ED_AREA_1X1_SETTINGS_YOFF,
-    GADGET_ID_BD_AMOEBA_CONTENT_TOO_BIG, GADGET_ID_NONE,
-    &level.bd_amoeba_content_too_big,  1, 1,
-    "If too big, changes to:", NULL, NULL, NULL,       "BD amoeba content if too big"
+    ED_AREA_1X1_SETTINGS_XPOS(0),              ED_AREA_1X1_SETTINGS_YPOS(7),
+    ED_AREA_1X1_SETTINGS_XOFF,                 ED_AREA_1X1_SETTINGS_YOFF,
+    GADGET_ID_BD_AMOEBA_CONTENT_TOO_BIG,       GADGET_ID_NONE,
+    &level.bd_amoeba_content_too_big,          1, 1,
+    "If too big, changes to:", NULL, NULL, NULL, "BD amoeba content if too big"
   },
   {
     ED_DRAWING_ID_BD_AMOEBA_CONTENT_ENCLOSED,
-    ED_AREA_1X1_SETTINGS_XPOS(0),      ED_AREA_1X1_SETTINGS_YPOS(8),
-    ED_AREA_1X1_SETTINGS_XOFF,         ED_AREA_1X1_SETTINGS_YOFF,
-    GADGET_ID_BD_AMOEBA_CONTENT_ENCLOSED, GADGET_ID_NONE,
-    &level.bd_amoeba_content_enclosed, 1, 1,
-    "If enclosed, changes to:", NULL, NULL, NULL,      "BD amoeba content if enclosed"
+    ED_AREA_1X1_SETTINGS_XPOS(0),              ED_AREA_1X1_SETTINGS_YPOS(8),
+    ED_AREA_1X1_SETTINGS_XOFF,                 ED_AREA_1X1_SETTINGS_YOFF,
+    GADGET_ID_BD_AMOEBA_CONTENT_ENCLOSED,      GADGET_ID_NONE,
+    &level.bd_amoeba_content_enclosed,         1, 1,
+    "If enclosed, changes to:", NULL, NULL, NULL, "BD amoeba content if enclosed"
   },
 
   // ---------- BD amoeba 2 content -------------------------------------------
 
   {
     ED_DRAWING_ID_BD_AMOEBA_2_CONTENT_TOO_BIG,
-    ED_AREA_1X1_SETTINGS_XPOS(0),      ED_AREA_1X1_SETTINGS_YPOS(7),
-    ED_AREA_1X1_SETTINGS_XOFF,         ED_AREA_1X1_SETTINGS_YOFF,
-    GADGET_ID_BD_AMOEBA_2_CONTENT_TOO_BIG, GADGET_ID_NONE,
-    &level.bd_amoeba_2_content_too_big,        1, 1,
-    "If too big, changes to:", NULL, NULL, NULL,       "BD amoeba 2 content if too big"
+    ED_AREA_1X1_SETTINGS_XPOS(0),              ED_AREA_1X1_SETTINGS_YPOS(7),
+    ED_AREA_1X1_SETTINGS_XOFF,                 ED_AREA_1X1_SETTINGS_YOFF,
+    GADGET_ID_BD_AMOEBA_2_CONTENT_TOO_BIG,     GADGET_ID_NONE,
+    &level.bd_amoeba_2_content_too_big,                1, 1,
+    "If too big, changes to:", NULL, NULL, NULL, "BD amoeba 2 content if too big"
   },
   {
     ED_DRAWING_ID_BD_AMOEBA_2_CONTENT_ENCLOSED,
-    ED_AREA_1X1_SETTINGS_XPOS(0),      ED_AREA_1X1_SETTINGS_YPOS(8),
-    ED_AREA_1X1_SETTINGS_XOFF,         ED_AREA_1X1_SETTINGS_YOFF,
-    GADGET_ID_BD_AMOEBA_2_CONTENT_ENCLOSED, GADGET_ID_NONE,
+    ED_AREA_1X1_SETTINGS_XPOS(0),              ED_AREA_1X1_SETTINGS_YPOS(8),
+    ED_AREA_1X1_SETTINGS_XOFF,                 ED_AREA_1X1_SETTINGS_YOFF,
+    GADGET_ID_BD_AMOEBA_2_CONTENT_ENCLOSED,    GADGET_ID_NONE,
     &level.bd_amoeba_2_content_enclosed,       1, 1,
-    "If enclosed, changes to:", NULL, NULL, NULL,      "BD amoeba 2 content if enclosed"
+    "If enclosed, changes to:", NULL, NULL, NULL, "BD amoeba 2 content if enclosed"
   },
   {
     ED_DRAWING_ID_BD_AMOEBA_2_CONTENT_EXPLODING,
-    ED_AREA_1X1_SETTINGS_XPOS(0),      ED_AREA_1X1_SETTINGS_YPOS(10),
-    ED_AREA_1X1_SETTINGS_XOFF,         ED_AREA_1X1_SETTINGS_YOFF,
-    GADGET_ID_BD_AMOEBA_2_CONTENT_EXPLODING, GADGET_ID_NONE,
+    ED_AREA_1X1_SETTINGS_XPOS(0),              ED_AREA_1X1_SETTINGS_YPOS(10),
+    ED_AREA_1X1_SETTINGS_XOFF,                 ED_AREA_1X1_SETTINGS_YOFF,
+    GADGET_ID_BD_AMOEBA_2_CONTENT_EXPLODING,   GADGET_ID_NONE,
     &level.bd_amoeba_2_content_exploding,      1, 1,
-    "If exploding, changes to:", NULL, NULL, NULL,     "BD amoeba 2 content if exploding"
+    "If exploding, changes to:", NULL, NULL, NULL, "BD amoeba 2 content if exploding"
   },
   {
     ED_DRAWING_ID_BD_AMOEBA_2_CONTENT_LOOKS_LIKE,
-    ED_AREA_1X1_SETTINGS_XPOS(0),      ED_AREA_1X1_SETTINGS_YPOS(11),
-    ED_AREA_1X1_SETTINGS_XOFF,         ED_AREA_1X1_SETTINGS_YOFF,
+    ED_AREA_1X1_SETTINGS_XPOS(0),              ED_AREA_1X1_SETTINGS_YPOS(11),
+    ED_AREA_1X1_SETTINGS_XOFF,                 ED_AREA_1X1_SETTINGS_YOFF,
     GADGET_ID_BD_AMOEBA_2_CONTENT_LOOKS_LIKE,  GADGET_ID_NONE,
     &level.bd_amoeba_2_content_looks_like,     1, 1,
-    "Use graphic of element:", NULL, NULL, NULL,       "BD amoeba 2 looks like this element"
+    "Use graphic of element:", NULL, NULL, NULL, "BD amoeba 2 looks like this element"
+  },
+  {
+    ED_DRAWING_ID_BD_SLIME_EATS_ELEMENT_1,
+    ED_AREA_1X1_SETTINGS_XPOS(0),              ED_AREA_1X1_SETTINGS_YPOS(5),
+    ED_AREA_1X1_SETTINGS_XOFF,                 ED_AREA_1X1_SETTINGS_YOFF,
+    GADGET_ID_BD_SLIME_EATS_ELEMENT_1,         GADGET_ID_NONE,
+    &level.bd_slime_eats_element_1,            1, 1,
+    "Can eat:", NULL, NULL, NULL,              "Element that can be eaten"
+  },
+  {
+    ED_DRAWING_ID_BD_SLIME_CONVERTS_TO_ELEMENT_1,
+    ED_AREA_1X1_SETTINGS_XPOS(0),              ED_AREA_1X1_SETTINGS_YPOS(5),
+    ED_AREA_1X1_SETTINGS_XOFF,                 ED_AREA_1X1_SETTINGS_YOFF,
+    GADGET_ID_BD_SLIME_CONVERTS_TO_ELEMENT_1,  GADGET_ID_BD_SLIME_EATS_ELEMENT_1,
+    &level.bd_slime_converts_to_element_1,     1, 1,
+    " and convert to:", NULL, NULL, NULL,      "Eaten element is converted to"
+  },
+  {
+    ED_DRAWING_ID_BD_SLIME_EATS_ELEMENT_2,
+    ED_AREA_1X1_SETTINGS_XPOS(0),              ED_AREA_1X1_SETTINGS_YPOS(6),
+    ED_AREA_1X1_SETTINGS_XOFF,                 ED_AREA_1X1_SETTINGS_YOFF,
+    GADGET_ID_BD_SLIME_EATS_ELEMENT_2,         GADGET_ID_NONE,
+    &level.bd_slime_eats_element_2,            1, 1,
+    "Can eat:", NULL, NULL, NULL,              "Element that can be eaten"
+  },
+  {
+    ED_DRAWING_ID_BD_SLIME_CONVERTS_TO_ELEMENT_2,
+    ED_AREA_1X1_SETTINGS_XPOS(0),              ED_AREA_1X1_SETTINGS_YPOS(6),
+    ED_AREA_1X1_SETTINGS_XOFF,                 ED_AREA_1X1_SETTINGS_YOFF,
+    GADGET_ID_BD_SLIME_CONVERTS_TO_ELEMENT_2,  GADGET_ID_BD_SLIME_EATS_ELEMENT_2,
+    &level.bd_slime_converts_to_element_2,     1, 1,
+    " and convert to:", NULL, NULL, NULL,      "Eaten element is converted to"
+  },
+  {
+    ED_DRAWING_ID_BD_SLIME_EATS_ELEMENT_3,
+    ED_AREA_1X1_SETTINGS_XPOS(0),              ED_AREA_1X1_SETTINGS_YPOS(7),
+    ED_AREA_1X1_SETTINGS_XOFF,                 ED_AREA_1X1_SETTINGS_YOFF,
+    GADGET_ID_BD_SLIME_EATS_ELEMENT_3,         GADGET_ID_NONE,
+    &level.bd_slime_eats_element_3,            1, 1,
+    "Can eat:", NULL, NULL, NULL,              "Element that can be eaten"
+  },
+  {
+    ED_DRAWING_ID_BD_SLIME_CONVERTS_TO_ELEMENT_3,
+    ED_AREA_1X1_SETTINGS_XPOS(0),              ED_AREA_1X1_SETTINGS_YPOS(7),
+    ED_AREA_1X1_SETTINGS_XOFF,                 ED_AREA_1X1_SETTINGS_YOFF,
+    GADGET_ID_BD_SLIME_CONVERTS_TO_ELEMENT_3,  GADGET_ID_BD_SLIME_EATS_ELEMENT_3,
+    &level.bd_slime_converts_to_element_3,     1, 1,
+    " and convert to:", NULL, NULL, NULL,      "Eaten element is converted to"
   },
   {
     ED_DRAWING_ID_BD_ACID_EATS_ELEMENT,
-    ED_AREA_1X1_SETTINGS_XPOS(0),      ED_AREA_1X1_SETTINGS_YPOS(1),
-    ED_AREA_1X1_SETTINGS_XOFF,         ED_AREA_1X1_SETTINGS_YOFF,
-    GADGET_ID_BD_ACID_EATS_ELEMENT,    GADGET_ID_NONE,
-    &level.bd_acid_eats_element,       1, 1,
+    ED_AREA_1X1_SETTINGS_XPOS(0),              ED_AREA_1X1_SETTINGS_YPOS(1),
+    ED_AREA_1X1_SETTINGS_XOFF,                 ED_AREA_1X1_SETTINGS_YOFF,
+    GADGET_ID_BD_ACID_EATS_ELEMENT,            GADGET_ID_NONE,
+    &level.bd_acid_eats_element,               1, 1,
     "Can eat:", NULL, NULL, NULL,              "Eats this element when spreading"
   },
   {
     ED_DRAWING_ID_BD_ACID_TURNS_TO_ELEMENT,
-    ED_AREA_1X1_SETTINGS_XPOS(0),      ED_AREA_1X1_SETTINGS_YPOS(3),
-    ED_AREA_1X1_SETTINGS_XOFF,         ED_AREA_1X1_SETTINGS_YOFF,
-    GADGET_ID_BD_ACID_TURNS_TO_ELEMENT,        GADGET_ID_NONE,
-    &level.bd_acid_turns_to_element,   1, 1,
+    ED_AREA_1X1_SETTINGS_XPOS(0),              ED_AREA_1X1_SETTINGS_YPOS(3),
+    ED_AREA_1X1_SETTINGS_XOFF,                 ED_AREA_1X1_SETTINGS_YOFF,
+    GADGET_ID_BD_ACID_TURNS_TO_ELEMENT,                GADGET_ID_NONE,
+    &level.bd_acid_turns_to_element,           1, 1,
     "Can leave behind:", NULL, NULL, NULL,     "Turns to this element after spreading"
   },
   {
     ED_DRAWING_ID_BD_BITER_EATS_ELEMENT,
-    ED_AREA_1X1_SETTINGS_XPOS(0),      ED_AREA_1X1_SETTINGS_YPOS(2),
-    ED_AREA_1X1_SETTINGS_XOFF,         ED_AREA_1X1_SETTINGS_YOFF,
-    GADGET_ID_BD_BITER_EATS_ELEMENT,   GADGET_ID_NONE,
-    &level.bd_biter_eats_element,      1, 1,
-    "Can eat:", NULL, NULL, NULL,      "Eats this element when moving"
+    ED_AREA_1X1_SETTINGS_XPOS(0),              ED_AREA_1X1_SETTINGS_YPOS(2),
+    ED_AREA_1X1_SETTINGS_XOFF,                 ED_AREA_1X1_SETTINGS_YOFF,
+    GADGET_ID_BD_BITER_EATS_ELEMENT,           GADGET_ID_NONE,
+    &level.bd_biter_eats_element,              1, 1,
+    "Can eat:", NULL, NULL, NULL,              "Eats this element when moving"
+  },
+  {
+    ED_DRAWING_ID_BD_BLADDER_CONVERTS_BY_ELEMENT,
+    ED_AREA_1X1_SETTINGS_XPOS(0),              ED_AREA_1X1_SETTINGS_YPOS(1),
+    ED_AREA_1X1_SETTINGS_XOFF,                 ED_AREA_1X1_SETTINGS_YOFF,
+    GADGET_ID_BD_BLADDER_CONVERTS_BY_ELEMENT,  GADGET_ID_NONE,
+    &level.bd_bladder_converts_by_element,     1, 1,
+    "Turns to clock by touching:", NULL, NULL, NULL, "Turns to clock by touching element"
+  },
+  {
+    ED_DRAWING_ID_BD_NUT_CONTENT,
+    ED_AREA_1X1_SETTINGS_XPOS(0),              ED_AREA_1X1_SETTINGS_YPOS(1),
+    ED_AREA_1X1_SETTINGS_XOFF,                 ED_AREA_1X1_SETTINGS_YOFF,
+    GADGET_ID_BD_NUT_CONTENT,                  GADGET_ID_NONE,
+    &level.bd_nut_content,                     1, 1,
+    "When breaking, changes to:", NULL, NULL, NULL, "Element created when breaking nut"
+  },
+  {
+    ED_DRAWING_ID_BD_EXPANDING_WALL_LOOKS_LIKE,
+    ED_AREA_1X1_SETTINGS_XPOS(0),              ED_AREA_1X1_SETTINGS_YPOS(1),
+    ED_AREA_1X1_SETTINGS_XOFF,                 ED_AREA_1X1_SETTINGS_YOFF,
+    GADGET_ID_BD_EXPANDING_WALL_LOOKS_LIKE,    GADGET_ID_NONE,
+    &level.bd_expanding_wall_looks_like,       1, 1,
+    "Use graphic of element:", NULL, NULL, NULL, "Expanding wall looks like this element"
+  },
+  {
+    ED_DRAWING_ID_BD_SAND_LOOKS_LIKE,
+    ED_AREA_1X1_SETTINGS_XPOS(0),              ED_AREA_1X1_SETTINGS_YPOS(0),
+    ED_AREA_1X1_SETTINGS_XOFF,                 ED_AREA_1X1_SETTINGS_YOFF,
+    GADGET_ID_BD_SAND_LOOKS_LIKE,              GADGET_ID_NONE,
+    &level.bd_sand_looks_like,                 1, 1,
+    "Use graphic of element:", NULL, NULL, NULL, "Sand looks like this element"
+  },
+  {
+    ED_DRAWING_ID_BD_ROCK_TURNS_TO_ON_FALLING,
+    ED_AREA_1X1_SETTINGS_XPOS(0),              ED_AREA_1X1_SETTINGS_YPOS(2),
+    ED_AREA_1X1_SETTINGS_XOFF,                 ED_AREA_1X1_SETTINGS_YOFF,
+    GADGET_ID_BD_ROCK_TURNS_TO_ON_FALLING,     GADGET_ID_NONE,
+    &level.bd_rock_turns_to_on_falling,                1, 1,
+    "Turns to when falling:", NULL, NULL, NULL,        "Changes to this when falling starts"
+  },
+  {
+    ED_DRAWING_ID_BD_ROCK_TURNS_TO_ON_IMPACT,
+    ED_AREA_1X1_SETTINGS_XPOS(0),              ED_AREA_1X1_SETTINGS_YPOS(3),
+    ED_AREA_1X1_SETTINGS_XOFF,                 ED_AREA_1X1_SETTINGS_YOFF,
+    GADGET_ID_BD_ROCK_TURNS_TO_ON_IMPACT,      GADGET_ID_NONE,
+    &level.bd_rock_turns_to_on_impact,         1, 1,
+    "Turns to on impact:", NULL, NULL, NULL,   "Changes to this when falling stops"
+  },
+  {
+    ED_DRAWING_ID_BD_DIAMOND_TURNS_TO_ON_FALLING,
+    ED_AREA_1X1_SETTINGS_XPOS(0),              ED_AREA_1X1_SETTINGS_YPOS(2),
+    ED_AREA_1X1_SETTINGS_XOFF,                 ED_AREA_1X1_SETTINGS_YOFF,
+    GADGET_ID_BD_DIAMOND_TURNS_TO_ON_FALLING,  GADGET_ID_NONE,
+    &level.bd_diamond_turns_to_on_falling,     1, 1,
+    "Turns to when falling:", NULL, NULL, NULL,        "Changes to this when falling starts"
+  },
+  {
+    ED_DRAWING_ID_BD_DIAMOND_TURNS_TO_ON_IMPACT,
+    ED_AREA_1X1_SETTINGS_XPOS(0),              ED_AREA_1X1_SETTINGS_YPOS(3),
+    ED_AREA_1X1_SETTINGS_XOFF,                 ED_AREA_1X1_SETTINGS_YOFF,
+    GADGET_ID_BD_DIAMOND_TURNS_TO_ON_IMPACT,   GADGET_ID_NONE,
+    &level.bd_diamond_turns_to_on_impact,      1, 1,
+    "Turns to on impact:", NULL, NULL, NULL,   "Changes to this when falling stops"
+  },
+  {
+    ED_DRAWING_ID_BD_FIREFLY_EXPLODES_TO,
+    ED_AREA_1X1_SETTINGS_XPOS(0),              ED_AREA_1X1_SETTINGS_YPOS(0),
+    ED_AREA_1X1_SETTINGS_XOFF,                 ED_AREA_1X1_SETTINGS_YOFF,
+    GADGET_ID_BD_FIREFLY_EXPLODES_TO,          GADGET_ID_NONE,
+    &level.bd_firefly_explodes_to,             1, 1,
+    "Explodes to:", NULL, NULL, NULL,          "Changes to this when exploding"
+  },
+  {
+    ED_DRAWING_ID_BD_FIREFLY_2_EXPLODES_TO,
+    ED_AREA_1X1_SETTINGS_XPOS(0),              ED_AREA_1X1_SETTINGS_YPOS(0),
+    ED_AREA_1X1_SETTINGS_XOFF,                 ED_AREA_1X1_SETTINGS_YOFF,
+    GADGET_ID_BD_FIREFLY_2_EXPLODES_TO,                GADGET_ID_NONE,
+    &level.bd_firefly_2_explodes_to,           1, 1,
+    "Explodes to:", NULL, NULL, NULL,          "Changes to this when exploding"
+  },
+  {
+    ED_DRAWING_ID_BD_BUTTERFLY_EXPLODES_TO,
+    ED_AREA_1X1_SETTINGS_XPOS(0),              ED_AREA_1X1_SETTINGS_YPOS(0),
+    ED_AREA_1X1_SETTINGS_XOFF,                 ED_AREA_1X1_SETTINGS_YOFF,
+    GADGET_ID_BD_BUTTERFLY_EXPLODES_TO,                GADGET_ID_NONE,
+    &level.bd_butterfly_explodes_to,           1, 1,
+    "Explodes to:", NULL, NULL, NULL,          "Changes to this when exploding"
+  },
+  {
+    ED_DRAWING_ID_BD_BUTTERFLY_2_EXPLODES_TO,
+    ED_AREA_1X1_SETTINGS_XPOS(0),              ED_AREA_1X1_SETTINGS_YPOS(0),
+    ED_AREA_1X1_SETTINGS_XOFF,                 ED_AREA_1X1_SETTINGS_YOFF,
+    GADGET_ID_BD_BUTTERFLY_2_EXPLODES_TO,      GADGET_ID_NONE,
+    &level.bd_butterfly_2_explodes_to,         1, 1,
+    "Explodes to:", NULL, NULL, NULL,          "Changes to this when exploding"
+  },
+  {
+    ED_DRAWING_ID_BD_STONEFLY_EXPLODES_TO,
+    ED_AREA_1X1_SETTINGS_XPOS(0),              ED_AREA_1X1_SETTINGS_YPOS(0),
+    ED_AREA_1X1_SETTINGS_XOFF,                 ED_AREA_1X1_SETTINGS_YOFF,
+    GADGET_ID_BD_STONEFLY_EXPLODES_TO,         GADGET_ID_NONE,
+    &level.bd_stonefly_explodes_to,            1, 1,
+    "Explodes to:", NULL, NULL, NULL,          "Changes to this when exploding"
+  },
+  {
+    ED_DRAWING_ID_BD_DRAGONFLY_EXPLODES_TO,
+    ED_AREA_1X1_SETTINGS_XPOS(0),              ED_AREA_1X1_SETTINGS_YPOS(0),
+    ED_AREA_1X1_SETTINGS_XOFF,                 ED_AREA_1X1_SETTINGS_YOFF,
+    GADGET_ID_BD_DRAGONFLY_EXPLODES_TO,                GADGET_ID_NONE,
+    &level.bd_dragonfly_explodes_to,           1, 1,
+    "Explodes to:", NULL, NULL, NULL,          "Changes to this when exploding"
+  },
+  {
+    ED_DRAWING_ID_BD_DIAMOND_BIRTH_TURNS_TO,
+    ED_AREA_1X1_SETTINGS_XPOS(0),              ED_AREA_1X1_SETTINGS_YPOS(1),
+    ED_AREA_1X1_SETTINGS_XOFF,                 ED_AREA_1X1_SETTINGS_YOFF,
+    GADGET_ID_BD_DIAMOND_BIRTH_TURNS_TO,       GADGET_ID_NONE,
+    &level.bd_diamond_birth_turns_to,          1, 1,
+    "Explosion ends in:", NULL, NULL, NULL,    "Changes to this after explosion"
+  },
+  {
+    ED_DRAWING_ID_BD_BOMB_EXPLOSION_TURNS_TO,
+    ED_AREA_1X1_SETTINGS_XPOS(0),              ED_AREA_1X1_SETTINGS_YPOS(0),
+    ED_AREA_1X1_SETTINGS_XOFF,                 ED_AREA_1X1_SETTINGS_YOFF,
+    GADGET_ID_BD_BOMB_EXPLOSION_TURNS_TO,      GADGET_ID_NONE,
+    &level.bd_bomb_explosion_turns_to,         1, 1,
+    "Explosion ends in:", NULL, NULL, NULL,    "Changes to this after explosion"
+  },
+  {
+    ED_DRAWING_ID_BD_NITRO_EXPLOSION_TURNS_TO,
+    ED_AREA_1X1_SETTINGS_XPOS(0),              ED_AREA_1X1_SETTINGS_YPOS(0),
+    ED_AREA_1X1_SETTINGS_XOFF,                 ED_AREA_1X1_SETTINGS_YOFF,
+    GADGET_ID_BD_NITRO_EXPLOSION_TURNS_TO,     GADGET_ID_NONE,
+    &level.bd_nitro_explosion_turns_to,                1, 1,
+    "Explosion ends in:", NULL, NULL, NULL,    "Changes to this after explosion"
+  },
+  {
+    ED_DRAWING_ID_BD_EXPLOSION_TURNS_TO,
+    ED_AREA_1X1_SETTINGS_XPOS(0),              ED_AREA_1X1_SETTINGS_YPOS(1),
+    ED_AREA_1X1_SETTINGS_XOFF,                 ED_AREA_1X1_SETTINGS_YOFF,
+    GADGET_ID_BD_EXPLOSION_TURNS_TO,           GADGET_ID_NONE,
+    &level.bd_explosion_turns_to,              1, 1,
+    "Explosion ends in:", NULL, NULL, NULL,    "Changes to this after explosion"
   },
 
   // ---------- level start element -------------------------------------------
 
   {
     ED_DRAWING_ID_START_ELEMENT,
-    -1,                                        ED_AREA_1X1_SETTINGS_YPOS(10),
-    0,                                 ED_AREA_1X1_SETTINGS_YOFF,
-    GADGET_ID_START_ELEMENT,           GADGET_ID_USE_START_ELEMENT,
-    &level.start_element[0],           1, 1,
-    NULL, NULL, NULL, NULL,            "Level start element"
+    -1,                                                ED_AREA_1X1_SETTINGS_YPOS(10),
+    0,                                         ED_AREA_1X1_SETTINGS_YOFF,
+    GADGET_ID_START_ELEMENT,                   GADGET_ID_USE_START_ELEMENT,
+    &level.start_element[0],                   1, 1,
+    NULL, NULL, NULL, NULL,                    "Level start element"
   },
 
   // ---------- player artwork element ----------------------------------------
 
   {
     ED_DRAWING_ID_ARTWORK_ELEMENT,
-    -1,                                        ED_AREA_1X1_SETTINGS_YPOS(11),
-    0,                                 ED_AREA_1X1_SETTINGS_YOFF,
-    GADGET_ID_ARTWORK_ELEMENT,         GADGET_ID_USE_ARTWORK_ELEMENT,
-    &level.artwork_element[0],         1, 1,
-    NULL, NULL, NULL, NULL,            "Element for player artwork"
+    -1,                                                ED_AREA_1X1_SETTINGS_YPOS(11),
+    0,                                         ED_AREA_1X1_SETTINGS_YOFF,
+    GADGET_ID_ARTWORK_ELEMENT,                 GADGET_ID_USE_ARTWORK_ELEMENT,
+    &level.artwork_element[0],                 1, 1,
+    NULL, NULL, NULL, NULL,                    "Element for player artwork"
   },
 
   // ---------- player explosion element --------------------------------------
 
   {
     ED_DRAWING_ID_EXPLOSION_ELEMENT,
-    -1,                                        ED_AREA_1X1_SETTINGS_YPOS(12),
-    0,                                 ED_AREA_1X1_SETTINGS_YOFF,
-    GADGET_ID_EXPLOSION_ELEMENT,       GADGET_ID_USE_EXPLOSION_ELEMENT,
-    &level.explosion_element[0],       1, 1,
-    NULL, NULL, NULL, NULL,            "Element for player explosion"
+    -1,                                                ED_AREA_1X1_SETTINGS_YPOS(12),
+    0,                                         ED_AREA_1X1_SETTINGS_YOFF,
+    GADGET_ID_EXPLOSION_ELEMENT,               GADGET_ID_USE_EXPLOSION_ELEMENT,
+    &level.explosion_element[0],               1, 1,
+    NULL, NULL, NULL, NULL,                    "Element for player explosion"
   },
 
   // ---------- player initial inventory --------------------------------------
 
   {
     ED_DRAWING_ID_INVENTORY_CONTENT,
-    -1,                                        ED_AREA_1X1_SETTINGS_YPOS(1),
-    0,                                 ED_AREA_1X1_SETTINGS_YOFF,
-    GADGET_ID_INVENTORY_CONTENT,       GADGET_ID_USE_INITIAL_INVENTORY,
-    &level.initial_inventory_content[0][0], MAX_INITIAL_INVENTORY_SIZE, 1,
-    NULL, NULL, NULL, NULL,            "Content for initial inventory"
+    -1,                                                ED_AREA_1X1_SETTINGS_YPOS(1),
+    0,                                         ED_AREA_1X1_SETTINGS_YOFF,
+    GADGET_ID_INVENTORY_CONTENT,               GADGET_ID_USE_INITIAL_INVENTORY,
+    &level.initial_inventory_content[0][0],    MAX_INITIAL_INVENTORY_SIZE, 1,
+    NULL, NULL, NULL, NULL,                    "Content for initial inventory"
   },
 
   // ---------- gray ball content -----------------------------------------
 
   {
     ED_DRAWING_ID_MM_BALL_CONTENT,
-    ED_AREA_1X1_SETTINGS_XPOS(0),      ED_AREA_1X1_SETTINGS_YPOS(2),
-    ED_AREA_1X1_SETTINGS_XOFF,         ED_AREA_1X1_SETTINGS_YOFF,
-    GADGET_ID_MM_BALL_CONTENT,         GADGET_ID_NONE,
-    &level.mm_ball_content[0],         MAX_MM_BALL_CONTENTS, 1,
-    "Content:", NULL, NULL, NULL,      "Content for gray ball"
+    ED_AREA_1X1_SETTINGS_XPOS(0),              ED_AREA_1X1_SETTINGS_YPOS(2),
+    ED_AREA_1X1_SETTINGS_XOFF,                 ED_AREA_1X1_SETTINGS_YOFF,
+    GADGET_ID_MM_BALL_CONTENT,                 GADGET_ID_NONE,
+    &level.mm_ball_content[0],                 MAX_MM_BALL_CONTENTS, 1,
+    "Content:", NULL, NULL, NULL,              "Content for gray ball"
   },
 
   // ---------- element settings: configure 1 (custom elements) ---------------
@@ -4429,11 +5214,11 @@ static struct
 
   {
     ED_DRAWING_ID_CUSTOM_GRAPHIC,
-    -1,                                        ED_AREA_1X1_SETTINGS_YPOS(1),
-    0,                                 ED_AREA_1X1_SETTINGS_YOFF,
-    GADGET_ID_CUSTOM_GRAPHIC,          GADGET_ID_CUSTOM_USE_GRAPHIC,
-    &custom_element.gfx_element_initial, 1, 1,
-    NULL, NULL, NULL, NULL,            "Custom graphic element"
+    -1,                                                ED_AREA_1X1_SETTINGS_YPOS(1),
+    0,                                         ED_AREA_1X1_SETTINGS_YOFF,
+    GADGET_ID_CUSTOM_GRAPHIC,                  GADGET_ID_CUSTOM_USE_GRAPHIC,
+    &custom_element.gfx_element_initial,       1, 1,
+    NULL, NULL, NULL, NULL,                    "Custom graphic element"
   },
 
   // ---------- element settings: configure 2 (custom elements) ---------------
@@ -4442,30 +5227,30 @@ static struct
 
   {
     ED_DRAWING_ID_CUSTOM_CONTENT,
-    -1,                                        ED_AREA_3X3_SETTINGS_YPOS(11),
-    0,                                 ED_AREA_3X3_SETTINGS_YOFF,
-    GADGET_ID_CUSTOM_CONTENT,          GADGET_ID_NONE, // align three rows
-    &custom_element.content.e[0][0],   3, 3,
-    "Content:", NULL, NULL, NULL,      NULL
+    -1,                                                ED_AREA_3X3_SETTINGS_YPOS(11),
+    0,                                         ED_AREA_3X3_SETTINGS_YOFF,
+    GADGET_ID_CUSTOM_CONTENT,                  GADGET_ID_NONE,         // align three rows
+    &custom_element.content.e[0][0],           3, 3,
+    "Content:", NULL, NULL, NULL,              NULL
   },
 
   // ---------- custom enter and leave element (when moving) ------------------
 
   {
     ED_DRAWING_ID_CUSTOM_MOVE_ENTER,
-    ED_AREA_1X1_SETTINGS_XPOS(1),      ED_AREA_1X1_SETTINGS_YPOS(3),
-    ED_AREA_1X1_SETTINGS_XOFF,         ED_AREA_1X1_SETTINGS_YOFF,
-    GADGET_ID_CUSTOM_MOVE_ENTER,       GADGET_ID_NONE,
-    &custom_element.move_enter_element,        1, 1,
-    "Can dig:", " ", NULL, NULL,       "Element that can be digged/collected"
+    ED_AREA_1X1_SETTINGS_XPOS(1),              ED_AREA_1X1_SETTINGS_YPOS(3),
+    ED_AREA_1X1_SETTINGS_XOFF,                 ED_AREA_1X1_SETTINGS_YOFF,
+    GADGET_ID_CUSTOM_MOVE_ENTER,               GADGET_ID_NONE,
+    &custom_element.move_enter_element,                1, 1,
+    "Can dig:", " ", NULL, NULL,               "Element that can be digged/collected"
   },
   {
     ED_DRAWING_ID_CUSTOM_MOVE_LEAVE,
-    -1,                                        ED_AREA_1X1_SETTINGS_YPOS(3),
-    0,                                 ED_AREA_1X1_SETTINGS_YOFF,
-    GADGET_ID_CUSTOM_MOVE_LEAVE,       GADGET_ID_CUSTOM_MOVE_LEAVE_TYPE,
-    &custom_element.move_leave_element,        1, 1,
-    NULL, NULL, NULL, NULL,            "Element that will be left behind"
+    -1,                                                ED_AREA_1X1_SETTINGS_YPOS(3),
+    0,                                         ED_AREA_1X1_SETTINGS_YOFF,
+    GADGET_ID_CUSTOM_MOVE_LEAVE,               GADGET_ID_CUSTOM_MOVE_LEAVE_TYPE,
+    &custom_element.move_leave_element,                1, 1,
+    NULL, NULL, NULL, NULL,                    "Element that will be left behind"
   },
 
   // ---------- element settings: advanced (custom elements) ------------------
@@ -4474,66 +5259,66 @@ static struct
 
   {
     ED_DRAWING_ID_CUSTOM_CHANGE_TARGET,
-    -1,                                        ED_AREA_1X1_SETTINGS_YPOS(1),
-    0,                                 ED_AREA_1X1_SETTINGS_YOFF,
-    GADGET_ID_CUSTOM_CHANGE_TARGET,    GADGET_ID_CUSTOM_CAN_CHANGE,
-    &custom_element_change.target_element, 1, 1,
-    NULL, "after/when:", NULL, NULL,   "New target element after change"
+    -1,                                                ED_AREA_1X1_SETTINGS_YPOS(1),
+    0,                                         ED_AREA_1X1_SETTINGS_YOFF,
+    GADGET_ID_CUSTOM_CHANGE_TARGET,            GADGET_ID_CUSTOM_CAN_CHANGE,
+    &custom_element_change.target_element,     1, 1,
+    NULL, "after/when:", NULL, NULL,           "New target element after change"
   },
 
   // ---------- custom change content (extended change target) ----------------
 
   {
     ED_DRAWING_ID_CUSTOM_CHANGE_CONTENT,
-    -1,                                        ED_AREA_3X3_SETTINGS_YPOS(9),
-    0,                                 ED_AREA_3X3_SETTINGS_YOFF,
-    GADGET_ID_CUSTOM_CHANGE_CONTENT,   GADGET_ID_NONE, // align three rows
+    -1,                                                ED_AREA_3X3_SETTINGS_YPOS(9),
+    0,                                         ED_AREA_3X3_SETTINGS_YOFF,
+    GADGET_ID_CUSTOM_CHANGE_CONTENT,           GADGET_ID_NONE,         // align three rows
     &custom_element_change.target_content.e[0][0], 3, 3,
-    NULL, NULL, NULL, NULL,            "New extended elements after change"
+    NULL, NULL, NULL, NULL,                    "New extended elements after change"
   },
 
   // ---------- custom change trigger (element causing change) ----------------
 
   {
     ED_DRAWING_ID_CUSTOM_CHANGE_TRIGGER,
-    -1,                                        ED_AREA_1X1_SETTINGS_YPOS(5),
-    0,                                 ED_AREA_1X1_SETTINGS_YOFF,
-    GADGET_ID_CUSTOM_CHANGE_TRIGGER,   GADGET_ID_CHANGE_OTHER_ACTION,
+    -1,                                                ED_AREA_1X1_SETTINGS_YPOS(5),
+    0,                                         ED_AREA_1X1_SETTINGS_YOFF,
+    GADGET_ID_CUSTOM_CHANGE_TRIGGER,           GADGET_ID_CHANGE_OTHER_ACTION,
     &custom_element_change.initial_trigger_element, 1, 1,
-    NULL, NULL, NULL, NULL,            "Other element triggering change"
+    NULL, NULL, NULL, NULL,                    "Other element triggering change"
   },
 
   // ---------- custom change action (element used for action) ----------------
 
   {
     ED_DRAWING_ID_CUSTOM_CHANGE_ACTION,
-    -1,                                        ED_AREA_1X1_SETTINGS_YPOS(13),
-    0,                                 ED_AREA_1X1_SETTINGS_YOFF,
-    GADGET_ID_CUSTOM_CHANGE_ACTION,    GADGET_ID_ACTION_ARG,
-    &custom_element_change.action_element, 1, 1,
-    NULL, NULL, NULL, NULL,            "Element used as action parameter"
+    -1,                                                ED_AREA_1X1_SETTINGS_YPOS(13),
+    0,                                         ED_AREA_1X1_SETTINGS_YOFF,
+    GADGET_ID_CUSTOM_CHANGE_ACTION,            GADGET_ID_ACTION_ARG,
+    &custom_element_change.action_element,     1, 1,
+    NULL, NULL, NULL, NULL,                    "Element used as action parameter"
   },
 
   // ---------- group element content -----------------------------------------
 
   {
     ED_DRAWING_ID_GROUP_CONTENT,
-    ED_AREA_1X1_SETTINGS_XPOS(0),      ED_AREA_1X1_SETTINGS_YPOS(2),
-    ED_AREA_1X1_SETTINGS_XOFF,         ED_AREA_1X1_SETTINGS_YOFF,
-    GADGET_ID_GROUP_CONTENT,           GADGET_ID_NONE,
-    &group_element_info.element[0],    MAX_ELEMENTS_IN_GROUP, 1,
-    "Content:", NULL, NULL, NULL,      NULL
+    ED_AREA_1X1_SETTINGS_XPOS(0),              ED_AREA_1X1_SETTINGS_YPOS(2),
+    ED_AREA_1X1_SETTINGS_XOFF,                 ED_AREA_1X1_SETTINGS_YOFF,
+    GADGET_ID_GROUP_CONTENT,                   GADGET_ID_NONE,
+    &group_element_info.element[0],            MAX_ELEMENTS_IN_GROUP, 1,
+    "Content:", NULL, NULL, NULL,              NULL
   },
 
   // ---------- random background (for random painting) -----------------------
 
   {
     ED_DRAWING_ID_RANDOM_BACKGROUND,
-    -1,                                        ED_AREA_1X1_LSETTINGS_YPOS(1),
-    0,                                 ED_AREA_1X1_LSETTINGS_YOFF,
-    GADGET_ID_RANDOM_BACKGROUND,       GADGET_ID_RANDOM_RESTRICTED,
-    &random_placement_background_element, 1, 1,
-    NULL, NULL, NULL, NULL,            "Random placement background"
+    -1,                                                ED_AREA_1X1_LSETTINGS_YPOS(1),
+    0,                                         ED_AREA_1X1_LSETTINGS_YOFF,
+    GADGET_ID_RANDOM_BACKGROUND,               GADGET_ID_RANDOM_RESTRICTED,
+    &random_placement_background_element,      1, 1,
+    NULL, NULL, NULL, NULL,                    "Random placement background"
   },
 };
 
@@ -4614,6 +5399,7 @@ static boolean getDrawModeHiRes(void);
 static int getTabulatorBarWidth(void);
 static int getTabulatorBarHeight(void);
 static Pixel getTabulatorBarColor(void);
+static void getEditorGraphicAndFrame(int, int *, int *, boolean);
 static int numHiresTiles(int);
 
 static int num_editor_gadgets = 0;     // dynamically determined
@@ -4635,6 +5421,7 @@ static int redo_buffer_steps = 0;
 
 static int edit_mode;
 static int edit_mode_levelconfig;
+static int edit_mode_engineconfig;
 static int edit_mode_properties;
 
 static int element_shift = 0;
@@ -4704,9 +5491,9 @@ static int editor_el_boulderdash_native[] =
   EL_BD_ROCK,
   EL_BD_DIAMOND,
 
+  EL_BD_INBOX,
   EL_BD_STEELWALL,
   EL_BD_WALL,
-  EL_BD_SAND_2,
   EL_BD_MAGIC_WALL,
 
   EL_BD_AMOEBA,
@@ -4719,7 +5506,7 @@ static int editor_el_boulderdash_native[] =
   EL_BD_BUTTERFLY_RIGHT,
   EL_BD_FIREFLY_RIGHT,
 
-  EL_BD_INBOX,
+  EL_BD_SAND_2,
   EL_BD_BUTTERFLY_DOWN,
   EL_BD_FIREFLY_DOWN,
   EL_BD_EXIT_OPEN,
@@ -4807,7 +5594,7 @@ static int editor_el_boulderdash_native[] =
   EL_BD_EXPANDABLE_WALL_HORIZONTAL,
   EL_BD_EXPANDABLE_WALL_VERTICAL,
   EL_BD_EXPANDABLE_WALL_ANY,
-  EL_BD_EXPANDABLE_WALL_SWITCH_HORIZONTAL,
+  EL_BD_EXPANDABLE_WALL_SWITCH,
 
   EL_BD_EXPANDABLE_STEELWALL_HORIZONTAL,
   EL_BD_EXPANDABLE_STEELWALL_VERTICAL,
@@ -4822,7 +5609,7 @@ static int editor_el_boulderdash_native[] =
   EL_BD_CONVEYOR_LEFT,
   EL_BD_CONVEYOR_RIGHT,
   EL_BD_CONVEYOR_SWITCH,
-  EL_BD_CONVEYOR_DIR_SWITCH_RIGHT,
+  EL_BD_CONVEYOR_DIR_SWITCH,
 
   EL_BD_CLOCK,
   EL_BD_TIME_PENALTY,
@@ -4849,21 +5636,161 @@ static int editor_el_boulderdash_native[] =
   EL_BD_WALL_KEY_3,
   EL_BD_WALL_DIAMOND,
 
+  EL_BD_POT,
   EL_BD_GRAVITY_SWITCH,
   EL_BD_PNEUMATIC_HAMMER,
   EL_BD_TELEPORTER,
-  EL_BD_POT,
 
   EL_BD_PLAYER,
   EL_BD_PLAYER_WITH_BOMB,
+  EL_BD_PLAYER_WITH_ROCKET_LAUNCHER,
+  EL_BD_ROCKET_LAUNCHER,
+
   EL_BD_PLAYER_GLUED,
   EL_BD_PLAYER_STIRRING,
+  EL_EMPTY,
+  EL_EMPTY,
 };
 static int *editor_hl_boulderdash_native_ptr = editor_hl_boulderdash_native;
 static int *editor_el_boulderdash_native_ptr = editor_el_boulderdash_native;
 static int num_editor_hl_boulderdash_native = ARRAY_SIZE(editor_hl_boulderdash_native);
 static int num_editor_el_boulderdash_native = ARRAY_SIZE(editor_el_boulderdash_native);
 
+static int editor_hl_boulderdash_effects[] =
+{
+  EL_INTERNAL_CASCADE_BD_EFFECTS_ACTIVE,
+  EL_CHAR('B'),
+  EL_CHAR('D'),
+  EL_CHAR('E'),
+};
+
+static int editor_el_boulderdash_effects[] =
+{
+  EL_BD_DIAMOND_FALLING,
+  EL_BD_ROCK_FALLING,
+  EL_BD_MEGA_ROCK_FALLING,
+  EL_BD_FLYING_DIAMOND_FLYING,
+
+  EL_BD_FALLING_WALL_FALLING,
+  EL_BD_NITRO_PACK_FALLING,
+  EL_BD_NUT_FALLING,
+  EL_BD_FLYING_ROCK_FLYING,
+
+  EL_BD_PLAYER_GROWING_1,
+  EL_BD_PLAYER_GROWING_2,
+  EL_BD_PLAYER_GROWING_3,
+  EL_BD_PLAYER,
+
+  EL_BD_PLAYER_WITH_BOMB,
+  EL_BD_PLAYER_STIRRING,
+  EL_BD_EXIT_OPEN,
+  EL_BD_INVISIBLE_EXIT_OPEN,
+
+  EL_BD_BLADDER_1,
+  EL_BD_BLADDER_2,
+  EL_BD_BLADDER_3,
+  EL_BD_BLADDER_4,
+
+  EL_BD_BLADDER_5,
+  EL_BD_BLADDER_6,
+  EL_BD_BLADDER_7,
+  EL_BD_BLADDER_8,
+
+  EL_BD_SAND_2,
+  EL_BD_COW_ENCLOSED_1,
+  EL_BD_COW_ENCLOSED_2,
+  EL_BD_COW_ENCLOSED_3,
+
+  EL_BD_COW_ENCLOSED_4,
+  EL_BD_COW_ENCLOSED_5,
+  EL_BD_COW_ENCLOSED_6,
+  EL_BD_COW_ENCLOSED_7,
+
+  EL_BD_WATER_1,
+  EL_BD_WATER_2,
+  EL_BD_WATER_3,
+  EL_BD_WATER_4,
+
+  EL_BD_WATER_5,
+  EL_BD_WATER_6,
+  EL_BD_WATER_7,
+  EL_BD_WATER_8,
+
+  EL_BD_WATER_9,
+  EL_BD_WATER_10,
+  EL_BD_WATER_11,
+  EL_BD_WATER_12,
+
+  EL_BD_WATER_13,
+  EL_BD_WATER_14,
+  EL_BD_WATER_15,
+  EL_BD_WATER_16,
+
+  EL_BD_BOMB_TICKING_1,
+  EL_BD_BOMB_TICKING_2,
+  EL_BD_BOMB_TICKING_3,
+  EL_BD_BOMB_TICKING_4,
+
+  EL_BD_BOMB_TICKING_5,
+  EL_BD_BOMB_TICKING_6,
+  EL_BD_BOMB_TICKING_7,
+  EL_EMPTY,
+
+  EL_BD_BOMB_EXPLODING_1,
+  EL_BD_BOMB_EXPLODING_2,
+  EL_BD_BOMB_EXPLODING_3,
+  EL_BD_BOMB_EXPLODING_4,
+
+  EL_BD_NUT_BREAKING_1,
+  EL_BD_NUT_BREAKING_2,
+  EL_BD_NUT_BREAKING_3,
+  EL_BD_NUT_BREAKING_4,
+
+  EL_BD_EXPLODING_1,
+  EL_BD_EXPLODING_2,
+  EL_BD_EXPLODING_3,
+  EL_BD_EXPLODING_4,
+
+  EL_BD_EXPLODING_5,
+  EL_BD_TIME_PENALTY,
+  EL_BD_DIAMOND_GROWING_1,
+  EL_BD_DIAMOND_GROWING_2,
+
+  EL_BD_DIAMOND_GROWING_3,
+  EL_BD_DIAMOND_GROWING_4,
+  EL_BD_DIAMOND_GROWING_5,
+  EL_BD_NITRO_PACK_EXPLODING,
+
+  EL_BD_NITRO_PACK_EXPLODING_1,
+  EL_BD_NITRO_PACK_EXPLODING_2,
+  EL_BD_NITRO_PACK_EXPLODING_3,
+  EL_BD_NITRO_PACK_EXPLODING_4,
+
+  EL_BD_ROCK_GROWING_1,
+  EL_BD_ROCK_GROWING_2,
+  EL_BD_ROCK_GROWING_3,
+  EL_BD_ROCK_GROWING_4,
+
+  EL_BD_STEELWALL_GROWING_1,
+  EL_BD_STEELWALL_GROWING_2,
+  EL_BD_STEELWALL_GROWING_3,
+  EL_BD_STEELWALL_GROWING_4,
+
+  EL_BD_CLOCK_GROWING_1,
+  EL_BD_CLOCK_GROWING_2,
+  EL_BD_CLOCK_GROWING_3,
+  EL_BD_CLOCK_GROWING_4,
+
+  EL_BD_GHOST_EXPLODING_1,
+  EL_BD_GHOST_EXPLODING_2,
+  EL_BD_GHOST_EXPLODING_3,
+  EL_BD_GHOST_EXPLODING_4,
+};
+static int *editor_hl_boulderdash_effects_ptr = editor_hl_boulderdash_effects;
+static int *editor_el_boulderdash_effects_ptr = editor_el_boulderdash_effects;
+static int num_editor_hl_boulderdash_effects = ARRAY_SIZE(editor_hl_boulderdash_effects);
+static int num_editor_el_boulderdash_effects = ARRAY_SIZE(editor_el_boulderdash_effects);
+
 static int editor_hl_emerald_mine[] =
 {
   EL_INTERNAL_CASCADE_EM_ACTIVE,
@@ -6275,6 +7202,7 @@ static boolean setup_editor_cascade_never = FALSE;
 static boolean setup_editor_el_players                 = TRUE;
 static boolean setup_editor_el_boulderdash             = TRUE;
 static boolean setup_editor_el_boulderdash_native      = TRUE;
+static boolean setup_editor_el_boulderdash_effects     = TRUE;
 static boolean setup_editor_el_emerald_mine            = TRUE;
 static boolean setup_editor_el_emerald_mine_club       = TRUE;
 static boolean setup_editor_el_more                    = TRUE;
@@ -6327,6 +7255,12 @@ editor_elements_info[] =
     &editor_hl_boulderdash_native_ptr, &num_editor_hl_boulderdash_native,
     &editor_el_boulderdash_native_ptr, &num_editor_el_boulderdash_native
   },
+  {
+    &setup_editor_el_boulderdash_effects,
+    &setup.editor_cascade.el_bd_effects,
+    &editor_hl_boulderdash_effects_ptr,        &num_editor_hl_boulderdash_effects,
+    &editor_el_boulderdash_effects_ptr,        &num_editor_el_boulderdash_effects
+  },
   {
     &setup_editor_el_emerald_mine,
     &setup.editor_cascade.el_em,
@@ -6627,6 +7561,7 @@ static void ReinitializeElementList_EnableSections(void)
   setup_editor_el_players              = TRUE;
   setup_editor_el_boulderdash          = TRUE;
   setup_editor_el_boulderdash_native   = TRUE;
+  setup_editor_el_boulderdash_effects  = TRUE;
   setup_editor_el_emerald_mine         = TRUE;
   setup_editor_el_emerald_mine_club    = TRUE;
   setup_editor_el_more                 = TRUE;
@@ -6650,6 +7585,7 @@ static void ReinitializeElementList_EnableSections(void)
     setup_editor_el_players            = FALSE;
     setup_editor_el_boulderdash                = FALSE;
     setup_editor_el_boulderdash_native = FALSE;
+    setup_editor_el_boulderdash_effects        = FALSE;
     setup_editor_el_emerald_mine       = FALSE;
     setup_editor_el_emerald_mine_club  = FALSE;
     setup_editor_el_more               = FALSE;
@@ -6681,6 +7617,7 @@ static void ReinitializeElementList_EnableSections(void)
   if (level.game_engine_type == GAME_ENGINE_TYPE_RND)
   {
     setup_editor_el_boulderdash_native = FALSE;
+    setup_editor_el_boulderdash_effects        = FALSE;
     setup_editor_el_mirror_magic       = FALSE;
     setup_editor_el_deflektor          = FALSE;
   }
@@ -6706,6 +7643,7 @@ static void ReinitializeElementList_EnableSections(void)
   {
     setup_editor_el_boulderdash                = FALSE;
     setup_editor_el_boulderdash_native = FALSE;
+    setup_editor_el_boulderdash_effects        = FALSE;
     setup_editor_el_more               = FALSE;
     setup_editor_el_sokoban            = FALSE;
     setup_editor_el_supaplex           = FALSE;
@@ -6722,6 +7660,7 @@ static void ReinitializeElementList_EnableSections(void)
     setup_editor_el_players            = FALSE;
     setup_editor_el_boulderdash                = FALSE;
     setup_editor_el_boulderdash_native = FALSE;
+    setup_editor_el_boulderdash_effects        = FALSE;
     setup_editor_el_emerald_mine       = FALSE;
     setup_editor_el_emerald_mine_club  = FALSE;
     setup_editor_el_more               = FALSE;
@@ -6740,6 +7679,7 @@ static void ReinitializeElementList_EnableSections(void)
     setup_editor_el_players            = FALSE;
     setup_editor_el_boulderdash                = FALSE;
     setup_editor_el_boulderdash_native = FALSE;
+    setup_editor_el_boulderdash_effects        = FALSE;
     setup_editor_el_emerald_mine       = FALSE;
     setup_editor_el_emerald_mine_club  = FALSE;
     setup_editor_el_more               = FALSE;
@@ -7109,12 +8049,22 @@ static void DrawDrawingArea(int id)
   int area_ysize = drawingarea_info[id].area_ysize;
   int tilesize = ED_DRAWINGAREA_TILE_SIZE;
 
-  for (x = 0; x < area_xsize; x++)
-    for (y = 0; y < area_ysize; y++)
+  for (x = 0; x < area_xsize; x++)
+  {
+    for (y = 0; y < area_ysize; y++)
+    {
+      int element = value[x * area_ysize + y];
+      int graphic;
+      int frame;
+
+      getEditorGraphicAndFrame(element, &graphic, &frame, TRUE);
+
       DrawSizedGraphicExt(drawto,
                          gi->x + x * tilesize,
                          gi->y + y * tilesize,
-                         el2edimg(value[x * area_ysize + y]), 0, tilesize);
+                         graphic, frame, tilesize);
+    }
+  }
 }
 
 static void ScrollEditorLevel(int from_x, int from_y, int scroll)
@@ -7148,10 +8098,31 @@ static void ScrollEditorLevel(int from_x, int from_y, int scroll)
   BackToFront();
 }
 
+static void getEditorGraphicAndFrame(int element, int *graphic, int *frame, boolean use_editor_gfx)
+{
+  if (use_editor_gfx)
+  {
+    el2edimg_with_frame(element, graphic, frame);
+  }
+  else
+  {
+    *graphic = el2img(element);
+    *frame = (ANIM_MODE(*graphic) == ANIM_CE_VALUE ?
+             custom_element.ce_value_fixed_initial :
+             ANIM_MODE(*graphic) == ANIM_CE_SCORE ?
+             custom_element.collect_score_initial : FrameCounter);
+  }
+}
+
 static void getEditorGraphicSource(int element, int tile_size, Bitmap **bitmap,
                                   int *x, int *y)
 {
-  getSizedGraphicSource(el2edimg(element), 0, tile_size, bitmap, x, y);
+  int graphic;
+  int frame;
+
+  getEditorGraphicAndFrame(element, &graphic, &frame, TRUE);
+
+  getSizedGraphicSource(graphic, frame, tile_size, bitmap, x, y);
 }
 
 static void CreateControlButtons(void)
@@ -7669,7 +8640,11 @@ static void CreateTextInputGadgets(void)
       y = ED_SETTINGS_Y(textinput_info[i].y);
     }
 
-    sprintf(infotext, "Enter %s", textinput_info[i].infotext);
+    // determine horizontal offset for leading text
+    if (textinput_info[i].text_left != NULL)
+      x += getTextWidthForGadget(textinput_info[i].text_left);
+
+    sprintf(infotext, "%s", textinput_info[i].infotext);
     infotext[max_infotext_len] = '\0';
 
     gi = CreateGadget(GDI_CUSTOM_ID, id,
@@ -7844,6 +8819,7 @@ static void CreateTextbuttonGadgets(void)
     int type_id = textbutton_info[i].gadget_type_id;
     int is_tab_button =
       ((id >= GADGET_ID_LEVELCONFIG_LEVEL && id <= GADGET_ID_LEVELCONFIG_ENGINE) ||
+       (id >= GADGET_ID_ENGINECONFIG_CONFIG && id <= GADGET_ID_ENGINECONFIG_COLORS) ||
        (id >= GADGET_ID_PROPERTIES_INFO && id <= GADGET_ID_PROPERTIES_CHANGE));
     int graphic =
       (is_tab_button ? IMG_EDITOR_TABBUTTON : IMG_EDITOR_TEXTBUTTON);
@@ -8419,12 +9395,23 @@ static void MapTextInputGadget(int id)
   int font_nr = FONT_TEXT_1;
   int font_height = getFontHeight(font_nr);
   struct GadgetInfo *gi = level_editor_gadget[textinput_info[id].gadget_id];
+  int xoffset_left = getTextWidthForGadget(textinput_info[id].text_left);
+  int xoffset_right = ED_GADGET_TEXT_DISTANCE;
   int yoffset_above = font_height + ED_GADGET_LINE_DISTANCE;
-  int x_above = ED_SETTINGS_X(textinput_info[id].x);
-  int y_above = ED_SETTINGS_Y(textinput_info[id].y) - yoffset_above;
+  int yoffset = (gi->height - font_height) / 2;
+  int x_left = gi->x - xoffset_left;
+  int x_right = gi->x + gi->width + xoffset_right;
+  int y_above = gi->y - yoffset_above;
+  int y = gi->y + yoffset;
 
   if (textinput_info[id].text_above)
-    DrawTextS(x_above, y_above, font_nr, textinput_info[id].text_above);
+    DrawText(x_left, y_above, textinput_info[id].text_above, font_nr);
+
+  if (textinput_info[id].text_left)
+    DrawText(x_left, y, textinput_info[id].text_left, font_nr);
+
+  if (textinput_info[id].text_right)
+    DrawText(x_right, y, textinput_info[id].text_right, font_nr);
 
   ModifyGadget(gi, GDI_TEXT_VALUE, textinput_info[id].value, GDI_END);
 
@@ -8464,11 +9451,10 @@ static void MapSelectboxGadget(int id)
   int x_left = gi->x - xoffset_left;
   int x_right = gi->x + gi->width + xoffset_right;
   int y_above = gi->y - yoffset_above;
-  int x = gi->x;
   int y = gi->y + yoffset;
 
   if (selectbox_info[id].text_above)
-    DrawText(x, y_above, selectbox_info[id].text_above, font_nr);
+    DrawText(x_left, y_above, selectbox_info[id].text_above, font_nr);
 
   if (selectbox_info[id].text_left)
     DrawText(x_left, y, selectbox_info[id].text_left, font_nr);
@@ -9600,30 +10586,10 @@ static void InitDrawingElements(void)
   if (level.game_engine_type == game_engine_type_last)
     return;
 
-  if (level.game_engine_type == GAME_ENGINE_TYPE_BD)
-  {
-    new_element1 = EL_BD_WALL;
-    new_element2 = EL_EMPTY;
-    new_element3 = EL_BD_SAND;
-  }
-  else if (level.game_engine_type == GAME_ENGINE_TYPE_SP)
-  {
-    new_element1 = EL_SP_CHIP_SINGLE;
-    new_element2 = EL_EMPTY;
-    new_element3 = EL_SP_BASE;
-  }
-  else if (level.game_engine_type == GAME_ENGINE_TYPE_MM)
-  {
-    new_element1 = EL_MM_MIRROR_START;
-    new_element2 = EL_EMPTY;
-    new_element3 = EL_MM_WOODEN_WALL;
-  }
-  else
-  {
-    new_element1 = EL_WALL;
-    new_element2 = EL_EMPTY;
-    new_element3 = EL_SAND;
-  }
+  // select drawing elements according to game engine type
+  new_element1 = getDrawingElement(EL_WALL);
+  new_element2 = getDrawingElement(EL_EMPTY);
+  new_element3 = getDrawingElement(EL_SAND);
 
   game_engine_type_last = level.game_engine_type;
 }
@@ -9761,6 +10727,7 @@ void DrawLevelEd(void)
   {
     edit_mode = ED_MODE_DRAWING;
     edit_mode_levelconfig = ED_MODE_LEVELCONFIG_LEVEL;
+    edit_mode_engineconfig = ED_MODE_ENGINECONFIG_CONFIG;
     edit_mode_properties = ED_MODE_PROPERTIES_INFO;
 
     ResetUndoBuffer();
@@ -10151,6 +11118,39 @@ static Pixel getTabulatorBarColor(void)
   return GetPixel(gd->bitmap, gd_x, gd_y);
 }
 
+static void DrawEngineConfigTabulatorGadgets(void)
+{
+  struct GadgetInfo *gd_gi1 = level_editor_gadget[GADGET_ID_ENGINECONFIG_CONFIG];
+  Pixel tab_color = getTabulatorBarColor();
+  int id_first = ED_TEXTBUTTON_ID_ENGINECONFIG_CONFIG;
+  int id_last  = ED_TEXTBUTTON_ID_ENGINECONFIG_COLORS;
+  int i;
+
+  for (i = id_first; i <= id_last; i++)
+  {
+    int gadget_id = textbutton_info[i].gadget_id;
+    struct GadgetInfo *gi = level_editor_gadget[gadget_id];
+    boolean active = (i != edit_mode_engineconfig);
+
+    // draw background line below tabulator button
+    ClearRectangleOnBackground(drawto, gi->x, gi->y + gi->height, gi->width, 1);
+
+    // draw solid line below inactive tabulator buttons
+    if (!active && tab_color != BLACK_PIXEL)   // black => transparent
+      FillRectangle(drawto, gi->x, gi->y + gi->height, gi->width,
+                   ED_GADGET_TINY_DISTANCE, tab_color);
+
+    ModifyGadget(gi, GDI_ACTIVE, active, GDI_END);
+    MapTextbuttonGadget(i);
+  }
+
+  // draw little border line below tabulator buttons
+  if (tab_color != BLACK_PIXEL)                        // black => transparent
+    FillRectangle(drawto, gd_gi1->x, gd_gi1->y + gd_gi1->height +
+                 ED_GADGET_TINY_DISTANCE,
+                 getTabulatorBarWidth(), getTabulatorBarHeight(), tab_color);
+}
+
 static void DrawLevelConfigTabulatorGadgets(void)
 {
   struct GadgetInfo *gd_gi1 = level_editor_gadget[GADGET_ID_LEVELCONFIG_LEVEL];
@@ -10186,6 +11186,10 @@ static void DrawLevelConfigTabulatorGadgets(void)
     FillRectangle(drawto, gd_gi1->x, gd_gi1->y + gd_gi1->height +
                  ED_GADGET_TINY_DISTANCE,
                  getTabulatorBarWidth(), getTabulatorBarHeight(), tab_color);
+
+  // draw second row of engine related tabulators when using native BD engine
+  if (edit_mode_levelconfig == ED_MODE_LEVELCONFIG_ENGINE)
+    DrawEngineConfigTabulatorGadgets();
 }
 
 static void DrawPropertiesTabulatorGadgets(void)
@@ -10359,7 +11363,7 @@ static void DrawLevelConfigEditor(void)
   MapTextbuttonGadget(ED_TEXTBUTTON_ID_SAVE_AS_TEMPLATE_2);
 }
 
-static void DrawLevelConfigEngine(void)
+static void DrawEngineConfigConfig(void)
 {
   int i;
 
@@ -10384,6 +11388,145 @@ static void DrawLevelConfigEngine(void)
     MapSelectboxGadget(i);
 }
 
+static int GetCommonColorType_BD(void)
+{
+  int bd_color_type = *bd_color[0] >> 24;
+  int i;
+
+  // check if all colors have the same color type
+  for (i = 1; i < MAX_BD_COLORS; i++)
+    if ((*bd_color[i] >> 24) != bd_color_type)
+      return GD_COLOR_TYPE_RGB;
+
+  return bd_color_type;
+}
+
+void SetDefaultLevelColorType_BD(void)
+{
+  bd_color_type_default = GetCommonColorType_BD();
+
+  level.bd_color_type = bd_color_type_default;
+}
+
+void SetDefaultLevelColors_BD(void)
+{
+  int i;
+
+  for (i = 0; i < MAX_BD_COLORS; i++)
+    bd_color_default[i] = *bd_color[i];
+}
+
+void SetRandomLevelColors_BD(int bd_color_type)
+{
+  struct LevelInfo_BD *level_bd = level.native_bd_level;
+  GdCave *cave = level_bd->cave;
+
+  // create random cave colors
+  gd_cave_set_random_colors(cave, bd_color_type);
+
+  // copy colors to level editor
+  level.bd_color_b = cave->colorb;
+  level.bd_color_0 = cave->color0;
+  level.bd_color_1 = cave->color1;
+  level.bd_color_2 = cave->color2;
+  level.bd_color_3 = cave->color3;
+  level.bd_color_4 = cave->color4;
+  level.bd_color_5 = cave->color5;
+}
+
+static void DrawColorBox_BD(int nr)
+{
+  int id = ED_SELECTBOX_ID_COLORS_FIRST + nr;
+  struct GadgetInfo *gi = level_editor_gadget[selectbox_info[id].gadget_id];
+  int graphic = IMG_EDITOR_CHECKBOX;
+  struct GraphicInfo *gd = &graphic_info[graphic];
+  int offset = ED_GADGET_TEXT_DISTANCE;
+  int x1 = gi->x - offset - gd->width;
+  int y1 = gi->y;
+  int x2 = x1 + offset;
+  int y2 = y1 + offset;
+  int xsize1 = gd->width;
+  int ysize1 = gd->height;
+  int xsize2 = xsize1 - 2 * offset;
+  int ysize2 = ysize1 - 2 * offset;
+  int bd_color_x = *bd_color[nr];
+  int r = gd_color_get_r(bd_color_x);
+  int g = gd_color_get_g(bd_color_x);
+  int b = gd_color_get_b(bd_color_x);
+  Pixel color = SDL_MapRGB(drawto->surface->format, r, g, b);
+
+  BlitBitmap(gd->bitmap, drawto, gd->src_x, gd->src_y, xsize1, ysize1, x1, y1);
+  FillRectangle(drawto, x2, y2, xsize2, ysize2, color);
+}
+
+static void DrawEngineConfigColors(void)
+{
+  int i;
+
+  if (bd_color_type_changed)
+  {
+    if (level.bd_color_type != GD_COLOR_TYPE_RGB && level.bd_color_type != GetCommonColorType_BD())
+    {
+      // color type switched to non-RGB colors, but using different color type => reset colors
+
+      if (level.bd_color_type == bd_color_type_default)
+      {
+       // color type switched to same color type as default colors => reset to defaults
+       for (i = 0; i < MAX_BD_COLORS; i++)
+         *bd_color[i] = bd_color_default[i];
+      }
+      else
+      {
+       // color type switched to different color type as default colors => use random colors
+       SetRandomLevelColors_BD(level.bd_color_type);
+      }
+    }
+
+    bd_color_type_changed = FALSE;
+  }
+
+  // copy level colors to either C64-style color index or color text
+  for (i = 0; i < MAX_BD_COLORS; i++)
+  {
+    int bd_color_x = (level.bd_color_type == GD_COLOR_TYPE_C64 ? *bd_color[i] & 0x0f :
+                     level.bd_color_type == GD_COLOR_TYPE_RGB ? gd_color_get_rgb(*bd_color[i]) :
+                     *bd_color[i]);
+
+    if (level.bd_color_type == GD_COLOR_TYPE_C64)
+      bd_color_c64[i] = bd_color_x;
+    else
+      snprintf(bd_color_text[i], sizeof(bd_color_text[i]), "%s", gd_color_get_string(bd_color_x));
+  }
+
+  MapSelectboxGadget(ED_SELECTBOX_ID_BD_COLOR_TYPE);
+
+  if (level.bd_color_type == GD_COLOR_TYPE_C64)
+  {
+    // draw selectbox gadgets
+    for (i = ED_SELECTBOX_ID_COLORS_FIRST; i <= ED_SELECTBOX_ID_COLORS_LAST; i++)
+      MapSelectboxGadget(i);
+  }
+  else
+  {
+    // draw text input gadgets
+    for (i = ED_TEXTINPUT_ID_COLORS_FIRST; i <= ED_TEXTINPUT_ID_COLORS_LAST; i++)
+      MapTextInputGadget(i);
+  }
+
+  for (i = 0; i < MAX_BD_COLORS; i++)
+    DrawColorBox_BD(i);
+
+  MapTextbuttonGadget(ED_TEXTBUTTON_ID_BD_SET_RANDOM_COLORS);
+}
+
+static void DrawLevelConfigEngine(void)
+{
+  if (edit_mode_engineconfig == ED_MODE_ENGINECONFIG_CONFIG)
+    DrawEngineConfigConfig();
+  else if (edit_mode_engineconfig == ED_MODE_ENGINECONFIG_COLORS)
+    DrawEngineConfigColors();
+}
+
 static void DrawLevelConfigWindow(void)
 {
   char *text = "Global Settings";
@@ -10394,6 +11537,11 @@ static void DrawLevelConfigWindow(void)
 
   stick_element_properties_window = FALSE;
 
+  // make sure that previous level config edit mode exists for this level
+  if (edit_mode_levelconfig == ED_MODE_LEVELCONFIG_ENGINE &&
+      level.game_engine_type != GAME_ENGINE_TYPE_BD)
+    edit_mode_levelconfig = ED_MODE_LEVELCONFIG_LEVEL;
+
   SetAutomaticNumberOfGemsNeeded();
 
   UnmapLevelEditorFieldGadgets();
@@ -10819,33 +11967,38 @@ static void DrawPropertiesInfo(void)
 
   ypos += 2 * MAX(font1_height, font2_height);
 
-  // ----- print standard properties of this element
+  // ----- print standard properties of this element (only for certain game engines)
 
-  DrawTextS(xpos, ypos, font1_nr, properties_text);
+  if (level.game_engine_type == GAME_ENGINE_TYPE_RND ||
+      level.game_engine_type == GAME_ENGINE_TYPE_EM ||
+      level.game_engine_type == GAME_ENGINE_TYPE_SP)
+  {
+    DrawTextS(xpos, ypos, font1_nr, properties_text);
 
-  ypos += line1_height;
+    ypos += line1_height;
 
-  for (i = 0; properties[i].value != -1; i++)
-  {
-    if (!HAS_PROPERTY(properties_element, properties[i].value))
-      continue;
+    for (i = 0; properties[i].value != -1; i++)
+    {
+      if (!HAS_PROPERTY(properties_element, properties[i].value))
+       continue;
 
-    DrawTextS(xpos, ypos, font2_nr, properties[i].text);
+      DrawTextS(xpos, ypos, font2_nr, properties[i].text);
 
-    ypos += font2_height;
+      ypos += font2_height;
 
-    num_standard_properties++;
-  }
+      num_standard_properties++;
+    }
 
-  if (num_standard_properties == 0)
-  {
-    DrawTextS(xpos + properties_text_len, ypos - line1_height + font2_yoffset,
-             font2_nr, none_text);
+    if (num_standard_properties == 0)
+    {
+      DrawTextS(xpos + properties_text_len, ypos - line1_height + font2_yoffset,
+               font2_nr, none_text);
 
-    ypos -= (line1_height - font1_height);
-  }
+      ypos -= (line1_height - font1_height);
+    }
 
-  ypos += MAX(font1_height, font2_height);
+    ypos += MAX(font1_height, font2_height);
+  }
 
   // ----- print special description of this element
 
@@ -10857,36 +12010,43 @@ static void DrawPropertiesInfo(void)
     PrintInfoText(no_description_text, font1_nr, xpos, ypos - line1_height);
 }
 
-#define TEXT_COLLECTING                "Score for collecting"
-#define TEXT_COLLECTING_EXTRA  "Score for extra diamonds"
-#define TEXT_SMASHING          "Score for smashing"
-#define TEXT_SLURPING          "Score for slurping robot"
-#define TEXT_CRACKING          "Score for cracking"
-#define TEXT_AMOEBA_SPEED      "Speed of amoeba growth"
-#define TEXT_AMOEBA_THRESHOED  "Size for turning to rocks"
-#define TEXT_AMOEBA_SLOW_TIME  "Slow growth time (seconds)"
-#define TEXT_AMOEBA_SLOW_RATE  "Slow growth rate (percent)"
-#define TEXT_AMOEBA_FAST_RATE  "Fast growth rate (percent)"
-#define TEXT_DURATION          "Duration when activated"
-#define TEXT_DELAY_ON          "Delay before activating"
-#define TEXT_DELAY_OFF         "Delay before deactivating"
-#define TEXT_DELAY_CHANGING    "Delay before changing"
-#define TEXT_DELAY_EXPLODING   "Delay before exploding"
-#define TEXT_DELAY_MOVING      "Delay before moving"
-#define TEXT_BALL_DELAY                "Element generation delay"
-#define TEXT_MOVE_SPEED                "Speed of android moving"
-#define TEXT_CLONE_SPEED       "Speed of android cloning"
-#define TEXT_GAME_OF_LIFE_1    "Min neighbours to survive"
-#define TEXT_GAME_OF_LIFE_2    "Max neighbours to survive"
-#define TEXT_GAME_OF_LIFE_3    "Min neighbours to create"
-#define TEXT_GAME_OF_LIFE_4    "Max neighbours to create"
-#define TEXT_TIME_BONUS                "Extra time to solve level"
-#define TEXT_TIME_PENALTY      "Time penalty if destroyed"
-#define TEXT_PERMEABILITY_RATE "slime permeability rate"
-#define TEXT_PERMEABILITY_BITS "slime permeability bits"
-#define TEXT_RANDOM_SEED       "slime random number seed"
-#define TEXT_ACID_SPREAD_RATE  "Spread rate (percent)"
-#define TEXT_BITER_MOVE_DELAY  "Move delay (BD frames)"
+#define TEXT_COLLECTING                        "Score for collecting"
+#define TEXT_COLLECTING_EXTRA          "Score for extra diamonds"
+#define TEXT_SMASHING                  "Score for smashing"
+#define TEXT_SLURPING                  "Score for slurping robot"
+#define TEXT_CRACKING                  "Score for cracking"
+#define TEXT_AMOEBA_SPEED              "Speed of amoeba growth"
+#define TEXT_AMOEBA_THRESHOED          "Size for turning to rocks"
+#define TEXT_AMOEBA_SLOW_TIME          "Slow growth time (seconds)"
+#define TEXT_AMOEBA_SLOW_RATE          "Slow growth rate (percent)"
+#define TEXT_AMOEBA_FAST_RATE          "Fast growth rate (percent)"
+#define TEXT_DURATION                  "Duration when activated"
+#define TEXT_DELAY_ON                  "Delay before activating"
+#define TEXT_DELAY_OFF                 "Delay before deactivating"
+#define TEXT_DELAY_CHANGING            "Delay before changing"
+#define TEXT_DELAY_EXPLODING           "Delay before exploding"
+#define TEXT_DELAY_MOVING              "Delay before moving"
+#define TEXT_BALL_DELAY                        "Element generation delay"
+#define TEXT_MOVE_SPEED                        "Speed of android moving"
+#define TEXT_CLONE_SPEED               "Speed of android cloning"
+#define TEXT_GAME_OF_LIFE_1            "Min neighbours to survive"
+#define TEXT_GAME_OF_LIFE_2            "Max neighbours to survive"
+#define TEXT_GAME_OF_LIFE_3            "Min neighbours to create"
+#define TEXT_GAME_OF_LIFE_4            "Max neighbours to create"
+#define TEXT_TIME_BONUS                        "Extra time to solve level"
+#define TEXT_TIME_PENALTY              "Time penalty if destroyed"
+#define TEXT_PERMEABILITY_RATE         "slime permeability rate"
+#define TEXT_PERMEABILITY_BITS         "slime permeability bits"
+#define TEXT_RANDOM_SEED               "slime random number seed"
+#define TEXT_ACID_SPREAD_RATE          "Spread rate (percent)"
+#define TEXT_BITER_MOVE_DELAY          "Move delay (BD frames)"
+#define TEXT_REPLICATION_DELAY         "Create delay (BD frames)"
+#define TEXT_HAMMER_BREAK_DELAY                "Delay for breaking walls"
+#define TEXT_HAMMER_REAPPEAR_DELAY     "Delay for reappearing walls"
+#define TEXT_SKELETONS_NEEDED          "Skeletons needed to use pot"
+#define TEXT_SKELETONS_WORTH           "Counts as this many diamonds"
+#define TEXT_AUTO_TURN_DELAY           "Creatures auto turn delay"
+#define TEXT_GRAVITY_DELAY             "Gravity switch change delay"
 
 static struct
 {
@@ -11021,6 +12181,21 @@ static struct
                                0, 3                                                            },
   { EL_BD_BITER_DOWN,          &level.bd_biter_move_delay,             TEXT_BITER_MOVE_DELAY,
                                0, 3                                                            },
+  { EL_BD_REPLICATOR,          &level.bd_replicator_create_delay,      TEXT_REPLICATION_DELAY,
+                               0, 100                                                          },
+  { EL_BD_PNEUMATIC_HAMMER,    &level.bd_hammer_walls_break_delay,     TEXT_HAMMER_BREAK_DELAY,
+                               1, 100                                                          },
+  { EL_BD_PNEUMATIC_HAMMER,    &level.bd_hammer_walls_reappear_delay,  TEXT_HAMMER_REAPPEAR_DELAY,
+                               1, 200                                                          },
+  { EL_BD_POT,                 &level.bd_num_skeletons_needed_for_pot, TEXT_SKELETONS_NEEDED,
+                               0, 50                                                           },
+  { EL_BD_SKELETON,            &level.bd_num_skeletons_needed_for_pot, TEXT_SKELETONS_NEEDED,
+                               0, 50                                                           },
+  { EL_BD_SKELETON,            &level.bd_skeleton_worth_num_diamonds,  TEXT_SKELETONS_WORTH,
+                               0, 10                                                           },
+  { EL_BD_CREATURE_SWITCH,     &level.bd_creatures_auto_turn_delay,    TEXT_AUTO_TURN_DELAY    },
+  { EL_BD_GRAVITY_SWITCH,      &level.bd_gravity_switch_delay,         TEXT_GRAVITY_DELAY,
+                               1, 60                                                           },
   { EL_EXTRA_TIME,             &level.extra_time,                      TEXT_TIME_BONUS         },
   { EL_TIME_ORB_FULL,          &level.time_orb_time,                   TEXT_TIME_BONUS         },
   { EL_GAME_OF_LIFE,           &level.game_of_life[0],                 TEXT_GAME_OF_LIFE_1,0,8 },
@@ -11073,15 +12248,31 @@ static boolean checkPropertiesConfig(int element)
       IS_DF_LASER(element) ||
       IS_PLAYER_ELEMENT(element) ||
       IS_BD_PLAYER_ELEMENT(element) ||
+      IS_BD_FIREFLY(properties_element) ||
+      IS_BD_FIREFLY_2(properties_element) ||
+      IS_BD_BUTTERFLY(properties_element) ||
+      IS_BD_BUTTERFLY_2(properties_element) ||
+      IS_BD_STONEFLY(properties_element) ||
+      IS_BD_DRAGONFLY(properties_element) ||
+      IS_BD_EXPANDABLE_WALL(properties_element) ||
+      IS_BD_EXPANDABLE_STEELWALL(properties_element) ||
+      IS_BD_CONVEYOR_BELT(properties_element) ||
+      IS_BD_CONVEYOR_BELT_SWITCH(properties_element) ||
       IS_SOKOBAN_OBJECT_OR_FIELD(element) ||
       HAS_EDITOR_CONTENT(element) ||
       CAN_GROW(element) ||
       COULD_MOVE_INTO_ACID(element) ||
       MAYBE_DONT_COLLIDE_WITH(element) ||
+      element == EL_BD_SAND ||
       element == EL_BD_ROCK ||
       element == EL_BD_MEGA_ROCK ||
+      element == EL_BD_BOMB ||
+      element == EL_BD_ROCKET_LAUNCHER ||
+      element == EL_BD_NITRO_PACK ||
       element == EL_BD_SWEET ||
-      element == EL_BD_VOODOO_DOLL)
+      element == EL_BD_VOODOO_DOLL ||
+      element == EL_BD_WATER ||
+      element == EL_BD_GRAVITY_SWITCH)
   {
     return TRUE;
   }
@@ -11188,6 +12379,14 @@ static void DrawPropertiesConfig(void)
        level.game_engine_type != GAME_ENGINE_TYPE_BD)
       continue;
 
+    // special case: score for smashing only available in R'n'D game engine
+    if ((IS_BD_FIREFLY(elements_with_counter[i].element) ||
+        IS_BD_BUTTERFLY(elements_with_counter[i].element)) &&
+       (elements_with_counter[i].value == &level.score[SC_BUG] ||
+        elements_with_counter[i].value == &level.score[SC_SPACESHIP]) &&
+       level.game_engine_type == GAME_ENGINE_TYPE_BD)
+      continue;
+
     // special case: some amoeba counters only available in R'n'D game engine
     if (elements_with_counter[i].element == EL_BD_AMOEBA &&
        elements_with_counter[i].value == &level.amoeba_speed &&
@@ -11204,14 +12403,25 @@ static void DrawPropertiesConfig(void)
                               (properties_element == EL_BD_VOODOO_DOLL     ? 4 : 0) +
                               (properties_element == EL_BD_SLIME           ? 1 : 0) +
                               (properties_element == EL_BD_ACID            ? 1 : 0) +
+                              (properties_element == EL_BD_REPLICATOR      ? 1 : 0) +
+                              (properties_element == EL_BD_CREATURE_SWITCH ? 1 : 0) +
+                              (properties_element == EL_BD_GRAVITY_SWITCH  ? 2 : 0) +
                               (properties_element == EL_EMC_MAGIC_BALL     ? 2 : 0) +
                               num_element_counters);
 
+    // special case: set magic wall counter for BD game engine separately
+    if (properties_element == EL_BD_MAGIC_WALL && level.game_engine_type == GAME_ENGINE_TYPE_BD)
+      counterbutton_info[counter_id].y = ED_ELEMENT_SETTINGS_YPOS(1);
+
     // special case: set amoeba counters for BD game engine separately
     if ((properties_element == EL_BD_AMOEBA && level.game_engine_type == GAME_ENGINE_TYPE_BD) ||
        (properties_element == EL_BD_AMOEBA_2))
       counterbutton_info[counter_id].y = ED_ELEMENT_SETTINGS_YPOS(3 + num_element_counters);
 
+    // special case: set position for delay counter for reappearing hammered walls
+    if (properties_element == EL_BD_PNEUMATIC_HAMMER && num_element_counters > 0)
+      counterbutton_info[counter_id].y += 1;
+
     counterbutton_info[counter_id].value      = elements_with_counter[i].value;
     counterbutton_info[counter_id].text_right = elements_with_counter[i].text;
     counterbutton_info[counter_id].min_value  = elements_with_counter[i].min_value;
@@ -11228,6 +12438,25 @@ static void DrawPropertiesConfig(void)
       break;
   }
 
+  if (properties_element == EL_BD_MAGIC_WALL && level.game_engine_type == GAME_ENGINE_TYPE_BD)
+  {
+    // draw stickybutton gadget
+    MapCheckbuttonGadget(ED_CHECKBUTTON_ID_STICK_ELEMENT);
+
+    MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_MAGIC_WALL_ZERO_INFINITE);
+    MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_MAGIC_WALL_WAIT_HATCHING);
+    MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_MAGIC_WALL_STOPS_AMOEBA);
+    MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_MAGIC_WALL_BREAK_SCAN);
+
+    MapDrawingArea(ED_DRAWING_ID_BD_MAGIC_WALL_DIAMOND_TO);
+    MapDrawingArea(ED_DRAWING_ID_BD_MAGIC_WALL_ROCK_TO);
+    MapDrawingArea(ED_DRAWING_ID_BD_MAGIC_WALL_MEGA_ROCK_TO);
+    MapDrawingArea(ED_DRAWING_ID_BD_MAGIC_WALL_NUT_TO);
+    MapDrawingArea(ED_DRAWING_ID_BD_MAGIC_WALL_NITRO_PACK_TO);
+    MapDrawingArea(ED_DRAWING_ID_BD_MAGIC_WALL_FLYING_DIAMOND_TO);
+    MapDrawingArea(ED_DRAWING_ID_BD_MAGIC_WALL_FLYING_ROCK_TO);
+  }
+
   if (HAS_EDITOR_CONTENT(properties_element))
   {
     // draw stickybutton gadget
@@ -11253,7 +12482,9 @@ static void DrawPropertiesConfig(void)
       MapDrawingArea(ED_DRAWING_ID_BD_AMOEBA_2_CONTENT_LOOKS_LIKE);
     }
     else if (IS_AMOEBOID(properties_element))
+    {
       MapDrawingArea(ED_DRAWING_ID_AMOEBA_CONTENT);
+    }
     else if (properties_element == EL_BD_ACID)
     {
       MapDrawingArea(ED_DRAWING_ID_BD_ACID_EATS_ELEMENT);
@@ -11263,12 +12494,18 @@ static void DrawPropertiesConfig(void)
     {
       MapDrawingArea(ED_DRAWING_ID_BD_BITER_EATS_ELEMENT);
     }
+    else if (properties_element == EL_BD_BLADDER)
+    {
+      MapDrawingArea(ED_DRAWING_ID_BD_BLADDER_CONVERTS_BY_ELEMENT);
+    }
     else if (properties_element == EL_YAMYAM ||
             properties_element == EL_YAMYAM_LEFT ||
             properties_element == EL_YAMYAM_RIGHT ||
             properties_element == EL_YAMYAM_UP ||
             properties_element == EL_YAMYAM_DOWN)
+    {
       DrawYamYamContentAreas();
+    }
     else if (properties_element == EL_EMC_MAGIC_BALL)
     {
       DrawMagicBallContentAreas();
@@ -11277,7 +12514,9 @@ static void DrawPropertiesConfig(void)
       MapCheckbuttonGadget(ED_CHECKBUTTON_ID_INITIAL_BALL_ACTIVE);
     }
     else if (properties_element == EL_EMC_ANDROID)
+    {
       DrawAndroidElementArea();
+    }
     else if (properties_element == EL_MM_GRAY_BALL)
     {
       MapCounterButtons(ED_COUNTER_ID_MM_BALL_CONTENT);
@@ -11384,6 +12623,11 @@ static void DrawPropertiesConfig(void)
     MapDrawingArea(ED_DRAWING_ID_BD_SNAP_ELEMENT);
   }
 
+  if (properties_element == EL_BD_SAND)
+  {
+    MapDrawingArea(ED_DRAWING_ID_BD_SAND_LOOKS_LIKE);
+  }
+
   if (properties_element == EL_BD_ROCK && level.game_engine_type == GAME_ENGINE_TYPE_BD)
   {
     counterbutton_info[ED_COUNTER_ID_BD_PUSHING_PROB].y =
@@ -11393,6 +12637,56 @@ static void DrawPropertiesConfig(void)
 
     MapCounterButtons(ED_COUNTER_ID_BD_PUSHING_PROB);
     MapCounterButtons(ED_COUNTER_ID_BD_PUSHING_PROB_WITH_SWEET);
+
+    MapDrawingArea(ED_DRAWING_ID_BD_ROCK_TURNS_TO_ON_FALLING);
+    MapDrawingArea(ED_DRAWING_ID_BD_ROCK_TURNS_TO_ON_IMPACT);
+  }
+
+  if (properties_element == EL_BD_DIAMOND && level.game_engine_type == GAME_ENGINE_TYPE_BD)
+  {
+    MapDrawingArea(ED_DRAWING_ID_BD_DIAMOND_TURNS_TO_ON_FALLING);
+    MapDrawingArea(ED_DRAWING_ID_BD_DIAMOND_TURNS_TO_ON_IMPACT);
+  }
+
+  if (level.game_engine_type == GAME_ENGINE_TYPE_BD)
+  {
+    if (IS_BD_FIREFLY(properties_element))
+    {
+      MapDrawingArea(ED_DRAWING_ID_BD_FIREFLY_EXPLODES_TO);
+      MapDrawingArea(ED_DRAWING_ID_BD_EXPLOSION_TURNS_TO);
+    }
+    else if (IS_BD_FIREFLY_2(properties_element))
+    {
+      MapDrawingArea(ED_DRAWING_ID_BD_FIREFLY_2_EXPLODES_TO);
+      MapDrawingArea(ED_DRAWING_ID_BD_EXPLOSION_TURNS_TO);
+    }
+    else if (IS_BD_BUTTERFLY(properties_element))
+    {
+      MapDrawingArea(ED_DRAWING_ID_BD_BUTTERFLY_EXPLODES_TO);
+      MapDrawingArea(ED_DRAWING_ID_BD_DIAMOND_BIRTH_TURNS_TO);
+    }
+    else if (IS_BD_BUTTERFLY_2(properties_element))
+    {
+      MapDrawingArea(ED_DRAWING_ID_BD_BUTTERFLY_2_EXPLODES_TO);
+      MapDrawingArea(ED_DRAWING_ID_BD_DIAMOND_BIRTH_TURNS_TO);
+    }
+    else if (IS_BD_STONEFLY(properties_element))
+    {
+      MapDrawingArea(ED_DRAWING_ID_BD_STONEFLY_EXPLODES_TO);
+    }
+    else if (IS_BD_DRAGONFLY(properties_element))
+    {
+      MapDrawingArea(ED_DRAWING_ID_BD_DRAGONFLY_EXPLODES_TO);
+      MapDrawingArea(ED_DRAWING_ID_BD_EXPLOSION_TURNS_TO);
+    }
+    else if (properties_element == EL_BD_BOMB)
+    {
+      MapDrawingArea(ED_DRAWING_ID_BD_BOMB_EXPLOSION_TURNS_TO);
+    }
+    else if (properties_element == EL_BD_NITRO_PACK)
+    {
+      MapDrawingArea(ED_DRAWING_ID_BD_NITRO_EXPLOSION_TURNS_TO);
+    }
   }
 
   if (properties_element == EL_BD_MEGA_ROCK ||
@@ -11418,12 +12712,68 @@ static void DrawPropertiesConfig(void)
   if (properties_element == EL_BD_SLIME)
   {
     MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_SLIME_IS_PREDICTABLE);
+
+    MapDrawingArea(ED_DRAWING_ID_BD_SLIME_EATS_ELEMENT_1);
+    MapDrawingArea(ED_DRAWING_ID_BD_SLIME_CONVERTS_TO_ELEMENT_1);
+    MapDrawingArea(ED_DRAWING_ID_BD_SLIME_EATS_ELEMENT_2);
+    MapDrawingArea(ED_DRAWING_ID_BD_SLIME_CONVERTS_TO_ELEMENT_2);
+    MapDrawingArea(ED_DRAWING_ID_BD_SLIME_EATS_ELEMENT_3);
+    MapDrawingArea(ED_DRAWING_ID_BD_SLIME_CONVERTS_TO_ELEMENT_3);
   }
 
-  if (properties_element == EL_BD_MAGIC_WALL)
+  if (IS_BD_EXPANDABLE_WALL(properties_element) ||
+      IS_BD_EXPANDABLE_STEELWALL(properties_element))
   {
-    MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_MAGIC_WALL_WAIT_HATCHING);
-    MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_MAGIC_WALL_STOPS_AMOEBA);
+    MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_CHANGE_EXPANDING_WALL);
+
+    if (IS_BD_EXPANDABLE_WALL(properties_element))
+      MapDrawingArea(ED_DRAWING_ID_BD_EXPANDING_WALL_LOOKS_LIKE);
+  }
+
+  if (properties_element == EL_BD_REPLICATOR)
+  {
+    MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_REPLICATORS_ACTIVE);
+  }
+
+  if (IS_BD_CONVEYOR_BELT(properties_element) ||
+      IS_BD_CONVEYOR_BELT_SWITCH(properties_element))
+  {
+    MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_CONVEYOR_BELTS_ACTIVE);
+    MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_CONVEYOR_BELTS_CHANGED);
+  }
+
+  if (properties_element == EL_BD_WATER)
+  {
+    MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_WATER_CANNOT_FLOW_DOWN);
+  }
+
+  if (properties_element == EL_BD_PNEUMATIC_HAMMER)
+  {
+    MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_HAMMER_WALLS_REAPPEAR);
+  }
+
+  if (properties_element == EL_BD_ROCKET_LAUNCHER)
+  {
+    MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_INFINITE_ROCKETS);
+  }
+
+  if (properties_element == EL_BD_CREATURE_SWITCH)
+  {
+    MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_CREATURES_START_BACKWARDS);
+    MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_CREATURES_TURN_ON_HATCHING);
+  }
+
+  if (properties_element == EL_BD_GRAVITY_SWITCH)
+  {
+    MapSelectboxGadget(ED_SELECTBOX_ID_BD_GRAVITY_DIRECTION);
+
+    MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_GRAVITY_SWITCH_ACTIVE);
+    MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_GRAVITY_AFFECTS_ALL);
+  }
+
+  if (properties_element == EL_BD_NUT)
+  {
+    MapDrawingArea(ED_DRAWING_ID_BD_NUT_CONTENT);
   }
 
   // special case: slippery walls option for gems only available in R'n'D game engine
@@ -11433,7 +12783,8 @@ static void DrawPropertiesConfig(void)
   if (properties_element == EL_EM_DYNAMITE)
     MapCheckbuttonGadget(ED_CHECKBUTTON_ID_EM_EXPLODES_BY_FIRE);
 
-  if (COULD_MOVE_INTO_ACID(properties_element) &&
+  if (level.game_engine_type == GAME_ENGINE_TYPE_RND &&
+      COULD_MOVE_INTO_ACID(properties_element) &&
       !IS_PLAYER_ELEMENT(properties_element) &&
       (!IS_CUSTOM_ELEMENT(properties_element) ||
        edit_mode_properties == ED_MODE_PROPERTIES_CONFIG_2))
@@ -11708,13 +13059,21 @@ static void DrawPropertiesChange(void)
 
 static void DrawEditorElementAnimation(int x, int y)
 {
-  int graphic = el2img(properties_element);
-  int frame = (ANIM_MODE(graphic) == ANIM_CE_VALUE ?
-              custom_element.ce_value_fixed_initial :
-              ANIM_MODE(graphic) == ANIM_CE_SCORE ?
-              custom_element.collect_score_initial : FrameCounter);
+  int graphic;
+  int frame;
+
+  if (IS_BD_RUNTIME_ELEMENT(properties_element))
+  {
+    getEditorGraphicAndFrame(properties_element, &graphic, &frame, TRUE);
+
+    DrawFixedGraphicExt(drawto, x, y, graphic, frame);
+  }
+  else
+  {
+    getEditorGraphicAndFrame(properties_element, &graphic, &frame, FALSE);
 
-  DrawFixedGraphicAnimationExt(drawto, x, y, graphic, frame, NO_MASKING);
+    DrawFixedGraphicAnimationExt(drawto, x, y, graphic, frame, NO_MASKING);
+  }
 }
 
 static void DrawEditorElementName(int x, int y, int font_nr)
@@ -14987,6 +16346,15 @@ static void HandleTextInputGadgets(struct GadgetInfo *gi)
 
     ModifyEditorElementList(); // update changed button info text
   }
+  else if (type_id >= ED_TEXTINPUT_ID_COLORS_FIRST &&
+          type_id <= ED_TEXTINPUT_ID_COLORS_LAST)
+  {
+    int pos = type_id - ED_TEXTINPUT_ID_COLORS_FIRST;
+
+    *bd_color[pos] = gd_color_get_from_string(bd_color_text[pos]);
+
+    DrawColorBox_BD(pos);
+  }
 
   // do not mark level as modified for certain non-level-changing gadgets
   if (type_id >= ED_TEXTINPUT_ID_LEVELSET_FIRST &&
@@ -15056,6 +16424,37 @@ static void HandleSelectboxGadgets(struct GadgetInfo *gi)
     // update BD cycle delay counter gadgets depending on BD scheduling type
     DrawLevelConfigWindow();
   }
+  else if (type_id == ED_SELECTBOX_ID_BD_COLOR_TYPE)
+  {
+    bd_color_type_changed = TRUE;
+
+    if (level.bd_color_type != GD_COLOR_TYPE_RGB && level.bd_color_type != GetCommonColorType_BD())
+    {
+      // color type switched to non-RGB colors, but using different color type => reset colors
+      char *message = (level.bd_color_type == bd_color_type_default ?
+                      "This will reset colors to defaults! Continue?" :
+                      "This will reset colors to random colors! Continue?");
+
+      if (!Request(message, REQ_ASK))
+      {
+       // keep current RGB colors
+       level.bd_color_type = GD_COLOR_TYPE_RGB;
+       bd_color_type_changed = FALSE;
+      }
+    }
+
+    // update BD color palette gadgets depending on BD color type
+    DrawLevelConfigWindow();
+  }
+  else if (type_id >= ED_SELECTBOX_ID_COLORS_FIRST &&
+          type_id <= ED_SELECTBOX_ID_COLORS_LAST)
+  {
+    int pos = type_id - ED_SELECTBOX_ID_COLORS_FIRST;
+
+    *bd_color[pos] = gd_c64_color(bd_color_c64[pos]);
+
+    DrawColorBox_BD(pos);
+  }
 
   // do not mark level as modified for certain non-level-changing gadgets
   if (type_id == ED_SELECTBOX_ID_LEVELSET_SAVE_MODE ||
@@ -15077,6 +16476,13 @@ static void HandleTextbuttonGadgets(struct GadgetInfo *gi)
 
     DrawLevelConfigWindow();
   }
+  else if (type_id >= ED_TAB_BUTTON_ID_ENGINECONFIG_FIRST &&
+          type_id <= ED_TAB_BUTTON_ID_ENGINECONFIG_LAST)
+  {
+    edit_mode_engineconfig = gi->custom_type_id;
+
+    DrawLevelConfigWindow();
+  }
   else if (type_id >= ED_TAB_BUTTON_ID_PROPERTIES_FIRST &&
           type_id <= ED_TAB_BUTTON_ID_PROPERTIES_LAST)
   {
@@ -15211,6 +16617,13 @@ static void HandleTextbuttonGadgets(struct GadgetInfo *gi)
 
     level.changed = TRUE;
   }
+  else if (type_id == ED_TEXTBUTTON_ID_BD_SET_RANDOM_COLORS)
+  {
+    SetRandomLevelColors_BD(level.bd_color_type);
+
+    // update BD color palette gadgets after setting random colors
+    DrawLevelConfigWindow();
+  }
 }
 
 static void HandleGraphicbuttonGadgets(struct GadgetInfo *gi)