rnd-20040313-1-src
[rocksndiamonds.git] / src / editor.c
index 40181b77eeaa83a82c46dcf1b9e9b0df32d4029d..af251d33341060df607549939c1b98f0e5dd9813 100644 (file)
                                         ED_GADGET_DISTANCE)
 /* extended custom change target */
 #define ED_AREA_ELEM_CONTENT6_XPOS     (29 * MINI_TILEX)
-#define ED_AREA_ELEM_CONTENT6_YPOS     (ED_SETTINGS_YPOS(9) + \
+#define ED_AREA_ELEM_CONTENT6_YPOS     (ED_SETTINGS_YPOS(10) + \
                                         ED_GADGET_DISTANCE - MINI_TILEY)
 /* group element content */
 #define ED_AREA_GROUP_CONTENT_XPOS     ED_SETTINGS_XPOS(0)
 /* selectbox identifiers */
 #define GADGET_ID_SELECTBOX_FIRST      (GADGET_ID_TEXT_AREA_FIRST + 1)
 
-#define GADGET_ID_CUSTOM_WALK_TO_ACTION        (GADGET_ID_SELECTBOX_FIRST + 0)
-#define GADGET_ID_CUSTOM_CONSISTENCY   (GADGET_ID_SELECTBOX_FIRST + 1)
-#define GADGET_ID_CUSTOM_DEADLINESS    (GADGET_ID_SELECTBOX_FIRST + 2)
-#define GADGET_ID_CUSTOM_MOVE_PATTERN  (GADGET_ID_SELECTBOX_FIRST + 3)
-#define GADGET_ID_CUSTOM_MOVE_DIRECTION        (GADGET_ID_SELECTBOX_FIRST + 4)
-#define GADGET_ID_CUSTOM_MOVE_STEPSIZE (GADGET_ID_SELECTBOX_FIRST + 5)
-#define GADGET_ID_CUSTOM_MOVE_LEAVE_TYPE (GADGET_ID_SELECTBOX_FIRST + 6)
-#define GADGET_ID_CUSTOM_SMASH_TARGETS (GADGET_ID_SELECTBOX_FIRST + 7)
-#define GADGET_ID_CUSTOM_SLIPPERY_TYPE (GADGET_ID_SELECTBOX_FIRST + 8)
-#define GADGET_ID_CUSTOM_ACCESS_TYPE   (GADGET_ID_SELECTBOX_FIRST + 9)
-#define GADGET_ID_CUSTOM_ACCESS_LAYER  (GADGET_ID_SELECTBOX_FIRST + 10)
-#define GADGET_ID_CUSTOM_ACCESS_PROTECTED (GADGET_ID_SELECTBOX_FIRST + 11)
-#define GADGET_ID_CUSTOM_ACCESS_DIRECTION (GADGET_ID_SELECTBOX_FIRST + 12)
-#define GADGET_ID_CHANGE_TIME_UNITS    (GADGET_ID_SELECTBOX_FIRST + 13)
-#define GADGET_ID_CHANGE_DIRECT_ACTION (GADGET_ID_SELECTBOX_FIRST + 14)
-#define GADGET_ID_CHANGE_OTHER_ACTION  (GADGET_ID_SELECTBOX_FIRST + 15)
-#define GADGET_ID_CHANGE_SIDES         (GADGET_ID_SELECTBOX_FIRST + 16)
-#define GADGET_ID_CHANGE_POWER         (GADGET_ID_SELECTBOX_FIRST + 17)
-#define GADGET_ID_SELECT_CHANGE_PAGE   (GADGET_ID_SELECTBOX_FIRST + 18)
-#define GADGET_ID_GROUP_CHOICE_MODE    (GADGET_ID_SELECTBOX_FIRST + 19)
+#define GADGET_ID_TIME_OR_STEPS                (GADGET_ID_SELECTBOX_FIRST + 0)
+#define GADGET_ID_CUSTOM_WALK_TO_ACTION        (GADGET_ID_SELECTBOX_FIRST + 1)
+#define GADGET_ID_CUSTOM_CONSISTENCY   (GADGET_ID_SELECTBOX_FIRST + 2)
+#define GADGET_ID_CUSTOM_DEADLINESS    (GADGET_ID_SELECTBOX_FIRST + 3)
+#define GADGET_ID_CUSTOM_MOVE_PATTERN  (GADGET_ID_SELECTBOX_FIRST + 4)
+#define GADGET_ID_CUSTOM_MOVE_DIRECTION        (GADGET_ID_SELECTBOX_FIRST + 5)
+#define GADGET_ID_CUSTOM_MOVE_STEPSIZE (GADGET_ID_SELECTBOX_FIRST + 6)
+#define GADGET_ID_CUSTOM_MOVE_LEAVE_TYPE (GADGET_ID_SELECTBOX_FIRST + 7)
+#define GADGET_ID_CUSTOM_SMASH_TARGETS (GADGET_ID_SELECTBOX_FIRST + 8)
+#define GADGET_ID_CUSTOM_SLIPPERY_TYPE (GADGET_ID_SELECTBOX_FIRST + 9)
+#define GADGET_ID_CUSTOM_ACCESS_TYPE   (GADGET_ID_SELECTBOX_FIRST + 10)
+#define GADGET_ID_CUSTOM_ACCESS_LAYER  (GADGET_ID_SELECTBOX_FIRST + 11)
+#define GADGET_ID_CUSTOM_ACCESS_PROTECTED (GADGET_ID_SELECTBOX_FIRST + 12)
+#define GADGET_ID_CUSTOM_ACCESS_DIRECTION (GADGET_ID_SELECTBOX_FIRST + 13)
+#define GADGET_ID_CHANGE_TIME_UNITS    (GADGET_ID_SELECTBOX_FIRST + 14)
+#define GADGET_ID_CHANGE_DIRECT_ACTION (GADGET_ID_SELECTBOX_FIRST + 15)
+#define GADGET_ID_CHANGE_OTHER_ACTION  (GADGET_ID_SELECTBOX_FIRST + 16)
+#define GADGET_ID_CHANGE_SIDE          (GADGET_ID_SELECTBOX_FIRST + 17)
+#define GADGET_ID_CHANGE_PLAYER                (GADGET_ID_SELECTBOX_FIRST + 18)
+#define GADGET_ID_CHANGE_PAGE          (GADGET_ID_SELECTBOX_FIRST + 19)
+#define GADGET_ID_CHANGE_POWER         (GADGET_ID_SELECTBOX_FIRST + 20)
+#define GADGET_ID_SELECT_CHANGE_PAGE   (GADGET_ID_SELECTBOX_FIRST + 21)
+#define GADGET_ID_GROUP_CHOICE_MODE    (GADGET_ID_SELECTBOX_FIRST + 22)
 
 /* textbutton identifiers */
-#define GADGET_ID_TEXTBUTTON_FIRST     (GADGET_ID_SELECTBOX_FIRST + 20)
+#define GADGET_ID_TEXTBUTTON_FIRST     (GADGET_ID_SELECTBOX_FIRST + 23)
 
 #define GADGET_ID_PROPERTIES_INFO      (GADGET_ID_TEXTBUTTON_FIRST + 0)
 #define GADGET_ID_PROPERTIES_CONFIG    (GADGET_ID_TEXTBUTTON_FIRST + 1)
 #define GADGET_ID_USE_SPRING_BUG       (GADGET_ID_CHECKBUTTON_FIRST + 7)
 #define GADGET_ID_BLOCK_LAST_FIELD     (GADGET_ID_CHECKBUTTON_FIRST + 8)
 #define GADGET_ID_SP_BLOCK_LAST_FIELD  (GADGET_ID_CHECKBUTTON_FIRST + 9)
-#define GADGET_ID_CAN_MOVE_INTO_ACID   (GADGET_ID_CHECKBUTTON_FIRST + 10)
-#define GADGET_ID_CUSTOM_EXPLODE_RESULT        (GADGET_ID_CHECKBUTTON_FIRST + 11)
-#define GADGET_ID_CUSTOM_EXPLODE_FIRE  (GADGET_ID_CHECKBUTTON_FIRST + 12)
-#define GADGET_ID_CUSTOM_EXPLODE_SMASH (GADGET_ID_CHECKBUTTON_FIRST + 13)
-#define GADGET_ID_CUSTOM_EXPLODE_IMPACT        (GADGET_ID_CHECKBUTTON_FIRST + 14)
-#define GADGET_ID_CUSTOM_WALK_TO_OBJECT        (GADGET_ID_CHECKBUTTON_FIRST + 15)
-#define GADGET_ID_CUSTOM_DEADLY                (GADGET_ID_CHECKBUTTON_FIRST + 16)
-#define GADGET_ID_CUSTOM_CAN_MOVE      (GADGET_ID_CHECKBUTTON_FIRST + 17)
-#define GADGET_ID_CUSTOM_CAN_FALL      (GADGET_ID_CHECKBUTTON_FIRST + 18)
-#define GADGET_ID_CUSTOM_CAN_SMASH     (GADGET_ID_CHECKBUTTON_FIRST + 19)
-#define GADGET_ID_CUSTOM_SLIPPERY      (GADGET_ID_CHECKBUTTON_FIRST + 20)
-#define GADGET_ID_CUSTOM_ACCESSIBLE    (GADGET_ID_CHECKBUTTON_FIRST + 21)
-#define GADGET_ID_CUSTOM_USE_GRAPHIC   (GADGET_ID_CHECKBUTTON_FIRST + 22)
-#define GADGET_ID_CUSTOM_USE_TEMPLATE  (GADGET_ID_CHECKBUTTON_FIRST + 23)
-#define GADGET_ID_CUSTOM_CAN_CHANGE    (GADGET_ID_CHECKBUTTON_FIRST + 24)
-#define GADGET_ID_CHANGE_USE_CONTENT   (GADGET_ID_CHECKBUTTON_FIRST + 25)
-#define GADGET_ID_CHANGE_USE_EXPLOSION (GADGET_ID_CHECKBUTTON_FIRST + 26)
-#define GADGET_ID_CHANGE_ONLY_COMPLETE (GADGET_ID_CHECKBUTTON_FIRST + 27)
-#define GADGET_ID_CHANGE_USE_RANDOM    (GADGET_ID_CHECKBUTTON_FIRST + 28)
-#define GADGET_ID_CHANGE_DELAY         (GADGET_ID_CHECKBUTTON_FIRST + 29)
-#define GADGET_ID_CHANGE_BY_DIRECT_ACT (GADGET_ID_CHECKBUTTON_FIRST + 30)
-#define GADGET_ID_CHANGE_BY_OTHER_ACT  (GADGET_ID_CHECKBUTTON_FIRST + 31)
+#define GADGET_ID_CAN_FALL_INTO_ACID   (GADGET_ID_CHECKBUTTON_FIRST + 10)
+#define GADGET_ID_CAN_MOVE_INTO_ACID   (GADGET_ID_CHECKBUTTON_FIRST + 11)
+#define GADGET_ID_DONT_COLLIDE_WITH    (GADGET_ID_CHECKBUTTON_FIRST + 12)
+#define GADGET_ID_CUSTOM_EXPLODE_RESULT        (GADGET_ID_CHECKBUTTON_FIRST + 13)
+#define GADGET_ID_CUSTOM_EXPLODE_FIRE  (GADGET_ID_CHECKBUTTON_FIRST + 14)
+#define GADGET_ID_CUSTOM_EXPLODE_SMASH (GADGET_ID_CHECKBUTTON_FIRST + 15)
+#define GADGET_ID_CUSTOM_EXPLODE_IMPACT        (GADGET_ID_CHECKBUTTON_FIRST + 16)
+#define GADGET_ID_CUSTOM_WALK_TO_OBJECT        (GADGET_ID_CHECKBUTTON_FIRST + 17)
+#define GADGET_ID_CUSTOM_DEADLY                (GADGET_ID_CHECKBUTTON_FIRST + 18)
+#define GADGET_ID_CUSTOM_CAN_MOVE      (GADGET_ID_CHECKBUTTON_FIRST + 19)
+#define GADGET_ID_CUSTOM_CAN_FALL      (GADGET_ID_CHECKBUTTON_FIRST + 20)
+#define GADGET_ID_CUSTOM_CAN_SMASH     (GADGET_ID_CHECKBUTTON_FIRST + 21)
+#define GADGET_ID_CUSTOM_SLIPPERY      (GADGET_ID_CHECKBUTTON_FIRST + 22)
+#define GADGET_ID_CUSTOM_ACCESSIBLE    (GADGET_ID_CHECKBUTTON_FIRST + 23)
+#define GADGET_ID_CUSTOM_USE_GRAPHIC   (GADGET_ID_CHECKBUTTON_FIRST + 24)
+#define GADGET_ID_CUSTOM_USE_TEMPLATE  (GADGET_ID_CHECKBUTTON_FIRST + 25)
+#define GADGET_ID_CUSTOM_CAN_CHANGE    (GADGET_ID_CHECKBUTTON_FIRST + 26)
+#define GADGET_ID_CHANGE_USE_CONTENT   (GADGET_ID_CHECKBUTTON_FIRST + 27)
+#define GADGET_ID_CHANGE_USE_EXPLOSION (GADGET_ID_CHECKBUTTON_FIRST + 28)
+#define GADGET_ID_CHANGE_ONLY_COMPLETE (GADGET_ID_CHECKBUTTON_FIRST + 29)
+#define GADGET_ID_CHANGE_USE_RANDOM    (GADGET_ID_CHECKBUTTON_FIRST + 30)
+#define GADGET_ID_CHANGE_DELAY         (GADGET_ID_CHECKBUTTON_FIRST + 31)
+#define GADGET_ID_CHANGE_BY_DIRECT_ACT (GADGET_ID_CHECKBUTTON_FIRST + 32)
+#define GADGET_ID_CHANGE_BY_OTHER_ACT  (GADGET_ID_CHECKBUTTON_FIRST + 33)
 
 /* gadgets for buttons in element list */
-#define GADGET_ID_ELEMENTLIST_FIRST    (GADGET_ID_CHECKBUTTON_FIRST + 32)
+#define GADGET_ID_ELEMENTLIST_FIRST    (GADGET_ID_CHECKBUTTON_FIRST + 34)
 #define GADGET_ID_ELEMENTLIST_LAST     (GADGET_ID_ELEMENTLIST_FIRST +  \
                                        ED_NUM_ELEMENTLIST_BUTTONS - 1)
 
 #define ED_TEXTAREA_ID_LEVEL_LAST      ED_TEXTAREA_ID_ENVELOPE
 
 /* values for selectbox gadgets */
-#define ED_SELECTBOX_ID_CUSTOM_ACCESS_TYPE     0
-#define ED_SELECTBOX_ID_CUSTOM_ACCESS_LAYER    1
-#define ED_SELECTBOX_ID_CUSTOM_ACCESS_PROTECTED        2
-#define ED_SELECTBOX_ID_CUSTOM_ACCESS_DIRECTION        3
-#define ED_SELECTBOX_ID_CUSTOM_WALK_TO_ACTION  4
-#define ED_SELECTBOX_ID_CUSTOM_MOVE_PATTERN    5
-#define ED_SELECTBOX_ID_CUSTOM_MOVE_DIRECTION  6
-#define ED_SELECTBOX_ID_CUSTOM_MOVE_STEPSIZE   7
-#define ED_SELECTBOX_ID_CUSTOM_MOVE_LEAVE_TYPE 8
-#define ED_SELECTBOX_ID_CUSTOM_SMASH_TARGETS   9
-#define ED_SELECTBOX_ID_CUSTOM_SLIPPERY_TYPE   10
-#define ED_SELECTBOX_ID_CUSTOM_DEADLINESS      11
-#define ED_SELECTBOX_ID_CUSTOM_CONSISTENCY     12
-#define ED_SELECTBOX_ID_CHANGE_TIME_UNITS      13
-#define ED_SELECTBOX_ID_CHANGE_DIRECT_ACTION   14
-#define ED_SELECTBOX_ID_CHANGE_OTHER_ACTION    15
-#define ED_SELECTBOX_ID_CHANGE_SIDES           16
-#define ED_SELECTBOX_ID_CHANGE_POWER           17
-#define ED_SELECTBOX_ID_SELECT_CHANGE_PAGE     18
-#define ED_SELECTBOX_ID_GROUP_CHOICE_MODE      19
-
-#define ED_NUM_SELECTBOX                       20
+#define ED_SELECTBOX_ID_TIME_OR_STEPS          0
+#define ED_SELECTBOX_ID_CUSTOM_ACCESS_TYPE     1
+#define ED_SELECTBOX_ID_CUSTOM_ACCESS_LAYER    2
+#define ED_SELECTBOX_ID_CUSTOM_ACCESS_PROTECTED        3
+#define ED_SELECTBOX_ID_CUSTOM_ACCESS_DIRECTION        4
+#define ED_SELECTBOX_ID_CUSTOM_WALK_TO_ACTION  5
+#define ED_SELECTBOX_ID_CUSTOM_MOVE_PATTERN    6
+#define ED_SELECTBOX_ID_CUSTOM_MOVE_DIRECTION  7
+#define ED_SELECTBOX_ID_CUSTOM_MOVE_STEPSIZE   8
+#define ED_SELECTBOX_ID_CUSTOM_MOVE_LEAVE_TYPE 9
+#define ED_SELECTBOX_ID_CUSTOM_SMASH_TARGETS   10
+#define ED_SELECTBOX_ID_CUSTOM_SLIPPERY_TYPE   11
+#define ED_SELECTBOX_ID_CUSTOM_DEADLINESS      12
+#define ED_SELECTBOX_ID_CUSTOM_CONSISTENCY     13
+#define ED_SELECTBOX_ID_CHANGE_TIME_UNITS      14
+#define ED_SELECTBOX_ID_CHANGE_DIRECT_ACTION   15
+#define ED_SELECTBOX_ID_CHANGE_OTHER_ACTION    16
+#define ED_SELECTBOX_ID_CHANGE_SIDE            17
+#define ED_SELECTBOX_ID_CHANGE_PLAYER          18
+#define ED_SELECTBOX_ID_CHANGE_PAGE            19
+#define ED_SELECTBOX_ID_CHANGE_POWER           20
+#define ED_SELECTBOX_ID_SELECT_CHANGE_PAGE     21
+#define ED_SELECTBOX_ID_GROUP_CHOICE_MODE      22
+
+#define ED_NUM_SELECTBOX                       23
+
+#define ED_SELECTBOX_ID_LEVEL_FIRST    ED_SELECTBOX_ID_TIME_OR_STEPS
+#define ED_SELECTBOX_ID_LEVEL_LAST     ED_SELECTBOX_ID_TIME_OR_STEPS
 
 #define ED_SELECTBOX_ID_CUSTOM1_FIRST  ED_SELECTBOX_ID_CUSTOM_ACCESS_TYPE
 #define ED_SELECTBOX_ID_CUSTOM1_LAST   ED_SELECTBOX_ID_CUSTOM_SLIPPERY_TYPE
 #define ED_CHECKBUTTON_ID_USE_SPRING_BUG       5
 #define ED_CHECKBUTTON_ID_BLOCK_LAST_FIELD     6
 #define ED_CHECKBUTTON_ID_SP_BLOCK_LAST_FIELD  7
-#define ED_CHECKBUTTON_ID_CAN_MOVE_INTO_ACID   8
-#define ED_CHECKBUTTON_ID_CUSTOM_USE_GRAPHIC   9
-#define ED_CHECKBUTTON_ID_CUSTOM_USE_TEMPLATE  10
-#define ED_CHECKBUTTON_ID_CUSTOM_ACCESSIBLE    11
-#define ED_CHECKBUTTON_ID_CUSTOM_WALK_TO_OBJECT        12
-#define ED_CHECKBUTTON_ID_CUSTOM_CAN_MOVE      13
-#define ED_CHECKBUTTON_ID_CUSTOM_CAN_FALL      14
-#define ED_CHECKBUTTON_ID_CUSTOM_CAN_SMASH     15
-#define ED_CHECKBUTTON_ID_CUSTOM_SLIPPERY      16
-#define ED_CHECKBUTTON_ID_CUSTOM_DEADLY                17
-#define ED_CHECKBUTTON_ID_CUSTOM_EXPLODE_RESULT        18
-#define ED_CHECKBUTTON_ID_CUSTOM_EXPLODE_FIRE  19
-#define ED_CHECKBUTTON_ID_CUSTOM_EXPLODE_SMASH 20
-#define ED_CHECKBUTTON_ID_CUSTOM_EXPLODE_IMPACT        21
-#define ED_CHECKBUTTON_ID_CUSTOM_CAN_CHANGE    22
-#define ED_CHECKBUTTON_ID_CHANGE_DELAY         23
-#define ED_CHECKBUTTON_ID_CHANGE_BY_DIRECT_ACT 24
-#define ED_CHECKBUTTON_ID_CHANGE_BY_OTHER_ACT  25
-#define ED_CHECKBUTTON_ID_CHANGE_USE_EXPLOSION 26
-#define ED_CHECKBUTTON_ID_CHANGE_USE_CONTENT   27
-#define ED_CHECKBUTTON_ID_CHANGE_ONLY_COMPLETE 28
-#define ED_CHECKBUTTON_ID_CHANGE_USE_RANDOM    29
-
-#define ED_NUM_CHECKBUTTONS                    30
+#define ED_CHECKBUTTON_ID_CAN_FALL_INTO_ACID   8
+#define ED_CHECKBUTTON_ID_CAN_MOVE_INTO_ACID   9
+#define ED_CHECKBUTTON_ID_DONT_COLLIDE_WITH    10
+#define ED_CHECKBUTTON_ID_CUSTOM_USE_GRAPHIC   11
+#define ED_CHECKBUTTON_ID_CUSTOM_USE_TEMPLATE  12
+#define ED_CHECKBUTTON_ID_CUSTOM_ACCESSIBLE    13
+#define ED_CHECKBUTTON_ID_CUSTOM_WALK_TO_OBJECT        14
+#define ED_CHECKBUTTON_ID_CUSTOM_CAN_MOVE      15
+#define ED_CHECKBUTTON_ID_CUSTOM_CAN_FALL      16
+#define ED_CHECKBUTTON_ID_CUSTOM_CAN_SMASH     17
+#define ED_CHECKBUTTON_ID_CUSTOM_SLIPPERY      18
+#define ED_CHECKBUTTON_ID_CUSTOM_DEADLY                19
+#define ED_CHECKBUTTON_ID_CUSTOM_EXPLODE_RESULT        20
+#define ED_CHECKBUTTON_ID_CUSTOM_EXPLODE_FIRE  21
+#define ED_CHECKBUTTON_ID_CUSTOM_EXPLODE_SMASH 22
+#define ED_CHECKBUTTON_ID_CUSTOM_EXPLODE_IMPACT        23
+#define ED_CHECKBUTTON_ID_CUSTOM_CAN_CHANGE    24
+#define ED_CHECKBUTTON_ID_CHANGE_DELAY         25
+#define ED_CHECKBUTTON_ID_CHANGE_BY_DIRECT_ACT 26
+#define ED_CHECKBUTTON_ID_CHANGE_BY_OTHER_ACT  27
+#define ED_CHECKBUTTON_ID_CHANGE_USE_EXPLOSION 28
+#define ED_CHECKBUTTON_ID_CHANGE_USE_CONTENT   29
+#define ED_CHECKBUTTON_ID_CHANGE_ONLY_COMPLETE 30
+#define ED_CHECKBUTTON_ID_CHANGE_USE_RANDOM    31
+
+#define ED_NUM_CHECKBUTTONS                    32
 
 #define ED_CHECKBUTTON_ID_LEVEL_FIRST  ED_CHECKBUTTON_ID_DOUBLE_SPEED
 #define ED_CHECKBUTTON_ID_LEVEL_LAST   ED_CHECKBUTTON_ID_RANDOM_RESTRICTED
@@ -909,7 +922,7 @@ static struct
     GADGET_ID_LEVEL_GEMSLIMIT_DOWN,    GADGET_ID_LEVEL_GEMSLIMIT_UP,
     GADGET_ID_LEVEL_GEMSLIMIT_TEXT,    GADGET_ID_NONE,
     &level.gems_needed,
-    "number of emeralds to collect:",  NULL, NULL
+    "number of gems to collect:",      NULL, NULL
   },
   {
     ED_SETTINGS_XPOS(0),               ED_COUNTER_YPOS(4),
@@ -917,7 +930,7 @@ static struct
     GADGET_ID_LEVEL_TIMELIMIT_DOWN,    GADGET_ID_LEVEL_TIMELIMIT_UP,
     GADGET_ID_LEVEL_TIMELIMIT_TEXT,    GADGET_ID_NONE,
     &level.time,
-    "time available to solve level:",  NULL, "(0 => no time limit)"
+    "time or step limit to solve level:", NULL, NULL
   },
   {
     ED_SETTINGS_XPOS(0),               ED_COUNTER_YPOS(5),
@@ -925,7 +938,7 @@ static struct
     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 each 10 seconds left:", NULL, NULL
+    "score for each 10 sec/steps left:", NULL, NULL
   },
   {
     ED_SETTINGS_XPOS(0),               ED_COUNTER2_YPOS(8),
@@ -1071,7 +1084,7 @@ static struct
     NULL,                              "+random", NULL
   },
   {
-    ED_SETTINGS_XPOS(3),               ED_SETTINGS_YPOS(11),
+    ED_SETTINGS_XPOS(3),               ED_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,
@@ -1130,10 +1143,19 @@ static struct
   }
 };
 
+static struct ValueTextInfo options_time_or_steps[] =
+{
+  { 0,                         "seconds"                       },
+  { 1,                         "steps"                         },
+
+  { -1,                                NULL                            }
+};
+
 static struct ValueTextInfo options_access_type[] =
 {
   { EP_WALKABLE,               "walkable"                      },
   { EP_PASSABLE,               "passable"                      },
+
   { -1,                                NULL                            }
 };
 
@@ -1142,6 +1164,7 @@ static struct ValueTextInfo options_access_layer[] =
   { EP_ACCESSIBLE_OVER,                "over"                          },
   { EP_ACCESSIBLE_INSIDE,      "inside"                        },
   { EP_ACCESSIBLE_UNDER,       "under"                         },
+
   { -1,                                NULL                            }
 };
 
@@ -1149,6 +1172,7 @@ static struct ValueTextInfo options_access_protected[] =
 {
   { 0,                         "unprotected"                   },
   { 1,                         "protected"                     },
+
   { -1,                                NULL                            }
 };
 
@@ -1169,6 +1193,7 @@ static struct ValueTextInfo options_access_direction[] =
   { MV_VERTICAL   | MV_LEFT,   "vertical + left"               },
   { MV_VERTICAL   | MV_RIGHT,  "vertical + right"              },
   { MV_ALL_DIRECTIONS,         "all directions"                },
+
   { -1,                                NULL                            }
 };
 
@@ -1178,6 +1203,7 @@ static struct ValueTextInfo options_walk_to_action[] =
   { EP_COLLECTIBLE_ONLY,       "collectible"                   },
   { EP_DROPPABLE,              "collectible & droppable"       },
   { EP_PUSHABLE,               "pushable"                      },
+
   { -1,                                NULL                            }
 };
 
@@ -1203,6 +1229,7 @@ static struct ValueTextInfo options_move_pattern[] =
   { MV_WHEN_DROPPED,           "when dropped"                  },
   { MV_MAZE_RUNNER,            "maze runner style"             },
   { MV_MAZE_HUNTER,            "maze hunter style"             },
+
   { -1,                                NULL                            }
 };
 
@@ -1215,6 +1242,7 @@ static struct ValueTextInfo options_move_direction[] =
   { MV_START_DOWN,             "down"                          },
   { MV_START_RANDOM,           "random"                        },
   { MV_START_PREVIOUS,         "previous"                      },
+
   { -1,                                NULL                            }
 };
 
@@ -1225,6 +1253,7 @@ static struct ValueTextInfo options_move_stepsize[] =
   { 4,                         "normal"                        },
   { 8,                         "fast"                          },
   { 16,                                "very fast"                     },
+
   { -1,                                NULL                            }
 };
 
@@ -1232,6 +1261,7 @@ static struct ValueTextInfo options_move_leave_type[] =
 {
   { LEAVE_TYPE_UNLIMITED,      "leave behind"                  },
   { LEAVE_TYPE_LIMITED,                "change it to"                  },
+
   { -1,                                NULL                            }
 };
 
@@ -1242,6 +1272,7 @@ static struct ValueTextInfo options_smash_targets[] =
   { EP_CAN_SMASH_ENEMIES,      "enemies"                       },
 #endif
   { EP_CAN_SMASH_EVERYTHING,   "everything"                    },
+
   { -1,                                NULL                            }
 };
 
@@ -1252,6 +1283,7 @@ static struct ValueTextInfo options_slippery_type[] =
   { SLIPPERY_ANY_RIGHT_LEFT,   "right, left"                   },
   { SLIPPERY_ONLY_LEFT,                "only left"                     },
   { SLIPPERY_ONLY_RIGHT,       "only right"                    },
+
   { -1,                                NULL                            }
 };
 
@@ -1260,6 +1292,7 @@ static struct ValueTextInfo options_deadliness[] =
   { EP_DONT_RUN_INTO,          "running into"                  },
   { EP_DONT_COLLIDE_WITH,      "colliding with"                },
   { EP_DONT_TOUCH,             "touching"                      },
+
   { -1,                                NULL                            }
 };
 
@@ -1269,6 +1302,7 @@ static struct ValueTextInfo options_consistency[] =
   { EP_CAN_EXPLODE_DYNA,       "can explode 3+3"               },
   { EP_CAN_EXPLODE_1X1,                "can explode 1x1"               },
   { EP_INDESTRUCTIBLE,         "indestructible"                },
+
   { -1,                                NULL                            }
 };
 
@@ -1276,6 +1310,7 @@ static struct ValueTextInfo options_time_units[] =
 {
   { 1,                         "frames"                        },
   { FRAMES_PER_SECOND,         "seconds"                       },
+
   { -1,                                NULL                            }
 };
 
@@ -1296,6 +1331,7 @@ static struct ValueTextInfo options_change_direct_action[] =
 #endif
   { CE_IMPACT,                 "impact (on something)"         },
   { CE_SMASHED,                        "smashed (from above)"          },
+
   { -1,                                NULL                            }
 };
 
@@ -1315,20 +1351,72 @@ static struct ValueTextInfo options_change_other_action[] =
   { CE_OTHER_GETS_HIT,         "hit by ..."                    },
 #endif
   { CE_OTHER_IS_SWITCHING,     "switch of ..."                 },
-  { CE_OTHER_IS_CHANGING,      "change of"                     },
+  { CE_OTHER_IS_CHANGING,      "change by page of"             },
   { CE_OTHER_IS_EXPLODING,     "explosion of"                  },
+
   { -1,                                NULL                            }
 };
 
-static struct ValueTextInfo options_change_sides[] =
+static struct ValueTextInfo options_change_trigger_side[] =
 {
-  { CH_SIDE_LEFT,              "left side"                     },
-  { CH_SIDE_RIGHT,             "right side"                    },
-  { CH_SIDE_TOP,               "top side"                      },
-  { CH_SIDE_BOTTOM,            "bottom side"                   },
-  { CH_SIDE_LEFT_RIGHT,                "left/right side"               },
-  { CH_SIDE_TOP_BOTTOM,                "top/bottom side"               },
-  { CH_SIDE_ANY,               "any 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"                           },
+
+  { -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"                           },
+
+  { -1,                                NULL                            }
+};
+
+static struct ValueTextInfo options_change_trigger_page[] =
+{
+  { (1 << 0),                  "1"                             },
+  { (1 << 1),                  "2"                             },
+  { (1 << 2),                  "3"                             },
+  { (1 << 3),                  "4"                             },
+  { (1 << 4),                  "5"                             },
+  { (1 << 5),                  "6"                             },
+  { (1 << 6),                  "7"                             },
+  { (1 << 7),                  "8"                             },
+  { (1 << 8),                  "9"                             },
+  { (1 << 9),                  "10"                            },
+  { (1 << 10),                 "11"                            },
+  { (1 << 11),                 "12"                            },
+  { (1 << 12),                 "13"                            },
+  { (1 << 13),                 "14"                            },
+  { (1 << 14),                 "15"                            },
+  { (1 << 15),                 "16"                            },
+  { (1 << 16),                 "17"                            },
+  { (1 << 17),                 "18"                            },
+  { (1 << 18),                 "19"                            },
+  { (1 << 19),                 "20"                            },
+  { (1 << 20),                 "21"                            },
+  { (1 << 21),                 "22"                            },
+  { (1 << 22),                 "23"                            },
+  { (1 << 23),                 "24"                            },
+  { (1 << 24),                 "25"                            },
+  { (1 << 25),                 "26"                            },
+  { (1 << 26),                 "27"                            },
+  { (1 << 27),                 "28"                            },
+  { (1 << 28),                 "29"                            },
+  { (1 << 29),                 "30"                            },
+  { (1 << 30),                 "31"                            },
+  { (1 << 31),                 "32"                            },
+  { CH_PAGE_ANY,               "any"                           },
+
   { -1,                                NULL                            }
 };
 
@@ -1337,6 +1425,7 @@ static struct ValueTextInfo options_change_power[] =
   { CP_NON_DESTRUCTIVE,                "empty"                         },
   { CP_HALF_DESTRUCTIVE,       "diggable"                      },
   { CP_FULL_DESTRUCTIVE,       "destructible"                  },
+
   { -1,                                NULL                            }
 };
 
@@ -1353,6 +1442,7 @@ static struct ValueTextInfo options_group_choice_mode[] =
   { ANIM_LINEAR,               "linear"                        },
   { ANIM_PINGPONG,             "pingpong"                      },
   { ANIM_PINGPONG2,            "pingpong 2"                    },
+
   { -1,                                NULL                            }
 };
 
@@ -1367,6 +1457,17 @@ static struct
   char *text_left, *text_right, *infotext;
 } selectbox_info[ED_NUM_SELECTBOX] =
 {
+  /* ---------- level and editor settings ---------------------------------- */
+
+  {
+    -1,                                        ED_COUNTER_YPOS(4),
+    GADGET_ID_TIME_OR_STEPS,           GADGET_ID_LEVEL_TIMELIMIT_UP,
+    -1,
+    options_time_or_steps,
+    &level.use_step_counter,
+    NULL, "(0 => no limit)",           "time or step limit"
+  },
+
   /* ---------- element settings: configure 1 (custom elements) ----------- */
 
   {
@@ -1505,14 +1606,30 @@ static struct
   },
   {
     ED_SETTINGS_XPOS(2),               ED_SETTINGS_YPOS(6),
-    GADGET_ID_CHANGE_SIDES,            GADGET_ID_NONE,
+    GADGET_ID_CHANGE_SIDE            GADGET_ID_NONE,
     -1,
-    options_change_sides,
-    &custom_element_change.sides,
-    "... at", NULL,                    "element side that causes change"
+    options_change_trigger_side,
+    &custom_element_change.trigger_side,
+    "... at", "side",                  "element side that causes change"
   },
   {
-    ED_SETTINGS_XPOS(2),               ED_SETTINGS_YPOS(9),
+    ED_SETTINGS_XPOS(2),               ED_SETTINGS_YPOS(7),
+    GADGET_ID_CHANGE_PLAYER,           GADGET_ID_NONE,
+    -1,
+    options_change_trigger_player,
+    &custom_element_change.trigger_player,
+    "player:", " ",                    "player that causes change"
+  },
+  {
+    ED_SETTINGS_XPOS(2),               ED_SETTINGS_YPOS(7),
+    GADGET_ID_CHANGE_PAGE,             GADGET_ID_CHANGE_PLAYER,
+    -1,
+    options_change_trigger_page,
+    &custom_element_change.trigger_page,
+    "page:", NULL,                     "change page that causes change"
+  },
+  {
+    ED_SETTINGS_XPOS(2),               ED_SETTINGS_YPOS(10),
     GADGET_ID_CHANGE_POWER,            GADGET_ID_NONE,
     -1,
     options_change_power,
@@ -1520,7 +1637,7 @@ static struct
     "replace when", NULL,              "which elements can be replaced"
   },
   {
-    ED_SETTINGS_XPOS(1),               ED_SETTINGS_YPOS(13),
+    ED_SETTINGS_XPOS(1),               ED_SETTINGS_YPOS(14),
     GADGET_ID_SELECT_CHANGE_PAGE,      GADGET_ID_NONE,
     3,
     options_change_page,
@@ -1608,13 +1725,13 @@ static struct
     " ", "As Template",                        "Save current settings as new template"
   },
   {
-    -1,                                        ED_SETTINGS_YPOS(13),
+    -1,                                        ED_SETTINGS_YPOS(14),
     GADGET_ID_ADD_CHANGE_PAGE,         GADGET_ID_NEXT_CHANGE_PAGE,
     -1,                                        "New",
     " ", NULL,                         "Add new change page"
   },
   {
-    -1,                                        ED_SETTINGS_YPOS(13),
+    -1,                                        ED_SETTINGS_YPOS(14),
     GADGET_ID_DEL_CHANGE_PAGE,         GADGET_ID_ADD_CHANGE_PAGE,
     -1,                                        "Delete",
     NULL, NULL,                                "Delete current change page"
@@ -1633,14 +1750,14 @@ static struct
 {
   {
     ED_BUTTON_MINUS_XPOS,              ED_BUTTON_COUNT_YPOS,
-    ED_SETTINGS_XPOS(0),               ED_SETTINGS_YPOS(13),
+    ED_SETTINGS_XPOS(0),               ED_SETTINGS_YPOS(14),
     ED_BUTTON_COUNT_XSIZE,             ED_BUTTON_COUNT_YSIZE,
     GADGET_ID_PREV_CHANGE_PAGE,                GADGET_ID_NONE,
     NULL, NULL,                                "select previous change page"
   },
   {
     ED_BUTTON_PLUS_XPOS,               ED_BUTTON_COUNT_YPOS,
-    -1,                                        ED_SETTINGS_YPOS(13),
+    -1,                                        ED_SETTINGS_YPOS(14),
     ED_BUTTON_COUNT_XSIZE,             ED_BUTTON_COUNT_YSIZE,
     GADGET_ID_NEXT_CHANGE_PAGE,                GADGET_ID_SELECT_CHANGE_PAGE,
     NULL, "change page",               "select next change page"
@@ -1811,19 +1928,26 @@ static struct
     "use spring pushing bug",          "use odd spring pushing behaviour"
   },
   {
-    ED_SETTINGS_XPOS(0),               ED_SETTINGS_YPOS(0),
+    ED_SETTINGS_XPOS(0),               ED_SETTINGS_YPOS(1),
     GADGET_ID_BLOCK_LAST_FIELD,                GADGET_ID_NONE,
     &level.block_last_field,
     NULL,
     "block last field when moving",    "player blocks last field when moving"
   },
   {
-    ED_SETTINGS_XPOS(0),               ED_SETTINGS_YPOS(0),
+    ED_SETTINGS_XPOS(0),               ED_SETTINGS_YPOS(1),
     GADGET_ID_SP_BLOCK_LAST_FIELD,     GADGET_ID_NONE,
     &level.sp_block_last_field,
     NULL,
     "block last field when moving",    "player blocks last field when moving"
   },
+  {
+    ED_SETTINGS_XPOS(0),               ED_SETTINGS_YPOS(0),
+    GADGET_ID_CAN_FALL_INTO_ACID,      GADGET_ID_NONE,
+    &custom_element_properties[EP_CAN_MOVE_INTO_ACID],
+    NULL,
+    "can fall into acid (with gravity)","player can fall into acid pool"
+  },
   {
     ED_SETTINGS_XPOS(0),               ED_SETTINGS_YPOS(0),
     GADGET_ID_CAN_MOVE_INTO_ACID,      GADGET_ID_NONE,
@@ -1831,6 +1955,13 @@ static struct
     NULL,
     "can move into acid",              "element can move into acid pool"
   },
+  {
+    ED_SETTINGS_XPOS(0),               ED_SETTINGS_YPOS(1),
+    GADGET_ID_DONT_COLLIDE_WITH,       GADGET_ID_NONE,
+    &custom_element_properties[EP_DONT_COLLIDE_WITH],
+    NULL,
+    "deadly when colliding with",      "element is deadly when hitting player"
+  },
 
   /* ---------- element settings: configure 1 (custom elements) ----------- */
 
@@ -1943,25 +2074,25 @@ static struct
     NULL, NULL,                                "element changes by other element"
   },
   {
-    ED_SETTINGS_XPOS(1),               ED_SETTINGS_YPOS(7),
+    ED_SETTINGS_XPOS(1),               ED_SETTINGS_YPOS(8),
     GADGET_ID_CHANGE_USE_EXPLOSION,    GADGET_ID_NONE,
     &custom_element_change.explode,
     NULL, "explode instead of change", "element explodes instead of change"
   },
   {
-    ED_SETTINGS_XPOS(1),               ED_SETTINGS_YPOS(8),
+    ED_SETTINGS_XPOS(1),               ED_SETTINGS_YPOS(9),
     GADGET_ID_CHANGE_USE_CONTENT,      GADGET_ID_NONE,
     &custom_element_change.use_content,
     NULL, "use extended change target:","element changes to more elements"
   },
   {
-    ED_SETTINGS_XPOS(2),               ED_SETTINGS_YPOS(10),
+    ED_SETTINGS_XPOS(2),               ED_SETTINGS_YPOS(11),
     GADGET_ID_CHANGE_ONLY_COMPLETE,    GADGET_ID_NONE,
     &custom_element_change.only_complete,
     NULL, "replace all or nothing",    "only replace when all can be changed"
   },
   {
-    ED_SETTINGS_XPOS(2),               ED_SETTINGS_YPOS(11),
+    ED_SETTINGS_XPOS(2),               ED_SETTINGS_YPOS(12),
     GADGET_ID_CHANGE_USE_RANDOM,       GADGET_ID_NONE,
     &custom_element_change.use_random_change,
     NULL, NULL,                                "use percentage for random replace"
@@ -5095,8 +5226,7 @@ static void MapCheckbuttonGadget(int id)
   int y;       /* set after gadget position was modified */
 
   /* set position for "stickybutton" and "can move into acid" gadgets */
-  if (id == ED_CHECKBUTTON_ID_STICK_ELEMENT ||
-      id == ED_CHECKBUTTON_ID_CAN_MOVE_INTO_ACID)
+  if (id == ED_CHECKBUTTON_ID_CAN_MOVE_INTO_ACID)
     ModifyGadget(gi, GDI_Y, SY + checkbutton_info[id].y, GDI_END);
 
   y = gi->y + yoffset;
@@ -5411,7 +5541,7 @@ static void copy_custom_element_settings(int element_from, int element_to)
 
     change_to->can_change = change_from->can_change;
 
-    change_to->sides = change_from->sides;
+    change_to->trigger_side = change_from->trigger_side;
   }
 #endif
 
@@ -5668,10 +5798,13 @@ static void CopyGroupElementPropertiesToEditor(int element)
 static void CopyClassicElementPropertiesToEditor(int element)
 {
 #if 1
-  if (COULD_MOVE_INTO_ACID(element))
+  if (ELEM_IS_PLAYER(element) || COULD_MOVE_INTO_ACID(element))
     custom_element_properties[EP_CAN_MOVE_INTO_ACID] =
       getMoveIntoAcidProperty(&level, element);
 
+  if (MAYBE_DONT_COLLIDE_WITH(element))
+    custom_element_properties[EP_DONT_COLLIDE_WITH] =
+      getDontCollideWithProperty(&level, element);
 #else
 
   if (COULD_MOVE_INTO_ACID(element))
@@ -5680,7 +5813,7 @@ static void CopyClassicElementPropertiesToEditor(int element)
 
     if (bit_nr > -1)
       custom_element_properties[EP_CAN_MOVE_INTO_ACID] =
-       ((level.can_move_into_acid & (1 << bit_nr)) != 0);
+       ((level.can_move_into_acid_bits & (1 << bit_nr)) != 0);
   }
 #endif
 }
@@ -5844,10 +5977,13 @@ static void CopyGroupElementPropertiesToGame(int element)
 static void CopyClassicElementPropertiesToGame(int element)
 {
 #if 1
-  if (COULD_MOVE_INTO_ACID(element))
+  if (ELEM_IS_PLAYER(element) || COULD_MOVE_INTO_ACID(element))
     setMoveIntoAcidProperty(&level, element,
                            custom_element_properties[EP_CAN_MOVE_INTO_ACID]);
 
+  if (MAYBE_DONT_COLLIDE_WITH(element))
+    setDontCollideWithProperty(&level, element,
+                             custom_element_properties[EP_DONT_COLLIDE_WITH]);
 #else
 
   if (COULD_MOVE_INTO_ACID(element))
@@ -5856,10 +5992,10 @@ static void CopyClassicElementPropertiesToGame(int element)
 
     if (bit_nr > -1)
     {
-      level.can_move_into_acid &= ~(1 << bit_nr);
+      level.can_move_into_acid_bits &= ~(1 << bit_nr);
 
       if (custom_element_properties[EP_CAN_MOVE_INTO_ACID])
-       level.can_move_into_acid |= (1 << bit_nr);
+       level.can_move_into_acid_bits |= (1 << bit_nr);
     }
   }
 #endif
@@ -6169,6 +6305,10 @@ static void DrawLevelInfoWindow()
   for (i = ED_COUNTER_ID_LEVEL_FIRST; i <= ED_COUNTER_ID_LEVEL_LAST; i++)
     MapCounterButtons(i);
 
+  /* draw selectbox gadgets */
+  for (i = ED_SELECTBOX_ID_LEVEL_FIRST; i <= ED_SELECTBOX_ID_LEVEL_LAST; i++)
+    MapSelectboxGadget(i);
+
   /* draw checkbutton gadgets */
   for (i=ED_CHECKBUTTON_ID_LEVEL_FIRST; i <= ED_CHECKBUTTON_ID_LEVEL_LAST; i++)
     MapCheckbuttonGadget(i);
@@ -6710,7 +6850,7 @@ static boolean checkPropertiesConfig(int element)
       ELEM_IS_PLAYER(element) ||
       HAS_CONTENT(element) ||
       COULD_MOVE_INTO_ACID(element) ||
-      element == EL_SPRING)
+      MAYBE_DONT_COLLIDE_WITH(element))
     return TRUE;
   else
     for (i = 0; elements_with_counter[i].element != -1; i++)
@@ -6740,6 +6880,7 @@ static void DrawPropertiesConfig()
 
       counterbutton_info[counter_id].y =
        ED_SETTINGS_YPOS((HAS_CONTENT(properties_element) ? 1 : 0) +
+                        (MAYBE_DONT_COLLIDE_WITH(properties_element) ? 1 : 0)+
                         (COULD_MOVE_INTO_ACID(properties_element) ? 1 : 0));
 
       counterbutton_info[counter_id].value = elements_with_counter[i].value;
@@ -6763,9 +6904,12 @@ static void DrawPropertiesConfig()
   }
 
   if (ELEM_IS_PLAYER(properties_element))
+  {
+    MapCheckbuttonGadget(ED_CHECKBUTTON_ID_CAN_FALL_INTO_ACID);
     MapCheckbuttonGadget(properties_element == EL_SP_MURPHY ?
                         ED_CHECKBUTTON_ID_SP_BLOCK_LAST_FIELD :
                         ED_CHECKBUTTON_ID_BLOCK_LAST_FIELD);
+  }
 
   if (IS_GEM(properties_element))
     MapCheckbuttonGadget(ED_CHECKBUTTON_ID_EM_SLIPPERY_GEMS);
@@ -6774,6 +6918,7 @@ static void DrawPropertiesConfig()
       (!IS_CUSTOM_ELEMENT(properties_element) ||
        edit_mode_properties == ED_MODE_PROPERTIES_CONFIG_2))
   {
+    /* set position for special checkbutton for "can move into acid" */
     checkbutton_info[ED_CHECKBUTTON_ID_CAN_MOVE_INTO_ACID].y =
       ED_SETTINGS_YPOS(IS_CUSTOM_ELEMENT(properties_element) ? 6 :
                       HAS_CONTENT(properties_element) ? 1 : 0);
@@ -6781,6 +6926,9 @@ static void DrawPropertiesConfig()
     MapCheckbuttonGadget(ED_CHECKBUTTON_ID_CAN_MOVE_INTO_ACID);
   }
 
+  if (MAYBE_DONT_COLLIDE_WITH(properties_element))
+    MapCheckbuttonGadget(ED_CHECKBUTTON_ID_DONT_COLLIDE_WITH);
+
   if (properties_element == EL_SPRING)
     MapCheckbuttonGadget(ED_CHECKBUTTON_ID_USE_SPRING_BUG);
 
@@ -6835,8 +6983,6 @@ static void DrawPropertiesConfig()
     }
     else if (edit_mode_properties == ED_MODE_PROPERTIES_CONFIG_2)
     {
-      /* set position for special checkbutton for "can move into acid" */
-
       /* draw checkbutton gadgets */
       for (i =  ED_CHECKBUTTON_ID_CUSTOM2_FIRST;
           i <= ED_CHECKBUTTON_ID_CUSTOM2_LAST; i++)
@@ -8244,7 +8390,9 @@ static void HandleCheckbuttons(struct GadgetInfo *gi)
 
   *checkbutton_info[type_id].value ^= TRUE;
 
-  if (type_id == ED_CHECKBUTTON_ID_CAN_MOVE_INTO_ACID ||
+  if (type_id == ED_CHECKBUTTON_ID_CAN_FALL_INTO_ACID ||
+      type_id == ED_CHECKBUTTON_ID_CAN_MOVE_INTO_ACID ||
+      type_id == ED_CHECKBUTTON_ID_DONT_COLLIDE_WITH ||
       (((type_id >= ED_CHECKBUTTON_ID_CUSTOM_FIRST &&
         type_id <= ED_CHECKBUTTON_ID_CUSTOM_LAST) ||
        (type_id >= ED_CHECKBUTTON_ID_CHANGE_FIRST &&