minor code formatting changes
[rocksndiamonds.git] / src / editor.c
index 078204481eca56814bac3a1e41b3a9aef8c13e37..1f17252a5b18cdec58d63a9460aa24824f94e8ec 100644 (file)
@@ -583,6 +583,20 @@ enum
   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,
@@ -620,6 +634,7 @@ enum
   GADGET_ID_LEVELSET_SAVE_MODE,
   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,
@@ -700,7 +715,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,
@@ -735,8 +749,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,
@@ -751,8 +767,11 @@ enum
   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,
@@ -945,6 +964,7 @@ enum
   ED_SELECTBOX_ID_LEVELSET_SAVE_MODE,
   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,
@@ -1053,7 +1073,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,
@@ -1088,8 +1107,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,
@@ -1104,8 +1125,11 @@ enum
   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,
@@ -1155,7 +1179,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
@@ -1228,6 +1252,20 @@ enum
   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,
@@ -2054,6 +2092,16 @@ static struct ValueTextInfo options_levelset_save_mode[] =
   { -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"                          },
@@ -2850,6 +2898,15 @@ static struct
     &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),
@@ -3495,14 +3552,6 @@ static struct
     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"
-  },
 
   // ---------- element settings: configure (various elements) ----------------
 
@@ -3779,8 +3828,16 @@ static struct
     "Mega rocks pushable with sweet",          "Push mega rocks after eating sweet"
   },
   {
-    ED_CHECKBUTTON_ID_BD_MAGIC_WALL_WAIT_HATCHING,
+    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(3),
     GADGET_ID_BD_MAGIC_WALL_WAIT_HATCHING,     GADGET_ID_NONE,
     &level.bd_magic_wall_wait_hatching,
     NULL, NULL,
@@ -3788,11 +3845,19 @@ static struct
   },
   {
     ED_CHECKBUTTON_ID_BD_MAGIC_WALL_STOPS_AMOEBA,
-    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(3),
+    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,
@@ -3906,6 +3971,14 @@ static struct
     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),
@@ -3916,11 +3989,27 @@ static struct
   },
   {
     ED_CHECKBUTTON_ID_BD_CREATURES_TURN_ON_HATCHING,
-    ED_ELEMENT_SETTINGS_XPOS(0),               ED_ELEMENT_SETTINGS_YPOS(1),
+    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 turn on hatching",              "Creatures change direction on hatching"
+    "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,
@@ -4408,7 +4497,7 @@ static struct
 
   {
     ED_DRAWING_ID_BD_MAGIC_WALL_DIAMOND_TO,
-    ED_AREA_1X1_SETTINGS_XPOS(0),              ED_AREA_1X1_SETTINGS_YPOS(4),
+    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,
@@ -4416,7 +4505,7 @@ static struct
   },
   {
     ED_DRAWING_ID_BD_MAGIC_WALL_ROCK_TO,
-    ED_AREA_1X1_SETTINGS_XPOS(0),              ED_AREA_1X1_SETTINGS_YPOS(5),
+    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,
@@ -4424,7 +4513,7 @@ static struct
   },
   {
     ED_DRAWING_ID_BD_MAGIC_WALL_MEGA_ROCK_TO,
-    ED_AREA_1X1_SETTINGS_XPOS(0),              ED_AREA_1X1_SETTINGS_YPOS(6),
+    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,
@@ -4432,7 +4521,7 @@ static struct
   },
   {
     ED_DRAWING_ID_BD_MAGIC_WALL_NUT_TO,
-    ED_AREA_1X1_SETTINGS_XPOS(0),              ED_AREA_1X1_SETTINGS_YPOS(7),
+    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,
@@ -4440,7 +4529,7 @@ static struct
   },
   {
     ED_DRAWING_ID_BD_MAGIC_WALL_NITRO_PACK_TO,
-    ED_AREA_1X1_SETTINGS_XPOS(0),              ED_AREA_1X1_SETTINGS_YPOS(8),
+    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,
@@ -4448,7 +4537,7 @@ static struct
   },
   {
     ED_DRAWING_ID_BD_MAGIC_WALL_FLYING_DIAMOND_TO,
-    ED_AREA_1X1_SETTINGS_XPOS(0),              ED_AREA_1X1_SETTINGS_YPOS(9),
+    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,
@@ -4456,7 +4545,7 @@ static struct
   },
   {
     ED_DRAWING_ID_BD_MAGIC_WALL_FLYING_ROCK_TO,
-    ED_AREA_1X1_SETTINGS_XPOS(0),              ED_AREA_1X1_SETTINGS_YPOS(10),
+    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,
@@ -4620,6 +4709,118 @@ static struct
     &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 -------------------------------------------
 
@@ -4958,9 +5159,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,
@@ -4973,7 +5174,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,
@@ -5110,8 +5311,13 @@ static int editor_el_boulderdash_native[] =
 
   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;
@@ -11342,6 +11548,7 @@ static void DrawPropertiesInfo(void)
 #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
 {
@@ -11489,6 +11696,8 @@ static struct
   { 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 },
@@ -11541,6 +11750,12 @@ 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) ||
@@ -11553,9 +11768,13 @@ static boolean checkPropertiesConfig(int 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_WATER)
+      element == EL_BD_WATER ||
+      element == EL_BD_GRAVITY_SWITCH)
   {
     return TRUE;
   }
@@ -11662,6 +11881,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 &&
@@ -11679,7 +11906,8 @@ static void DrawPropertiesConfig(void)
                               (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 ? 2 : 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);
 
@@ -11717,8 +11945,10 @@ static void DrawPropertiesConfig(void)
     // 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);
@@ -11754,7 +11984,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);
@@ -11773,7 +12005,9 @@ static void DrawPropertiesConfig(void)
             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();
@@ -11782,7 +12016,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);
@@ -11903,6 +12139,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 ||
@@ -11968,12 +12254,25 @@ static void DrawPropertiesConfig(void)
     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);
@@ -11986,7 +12285,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))