rnd-20040222-1-src
[rocksndiamonds.git] / src / editor.c
index bdff29f01e88097583051181d39f2334911fcfcb..199da58e31b098767a660ab174bf4f8556c26283 100644 (file)
 #define ED_SETTINGS_YOFFSET            (3 * MINI_TILEY / 2)
 
 #define ED_SETTINGS_XPOS(n)            (ED_SETTINGS_XSTART + \
-                                        n * ED_SETTINGS_XOFFSET)
+                                        (n) * ED_SETTINGS_XOFFSET)
 #define ED_SETTINGS_YPOS(n)            (ED_SETTINGS_YSTART + \
-                                        n * ED_SETTINGS_YOFFSET)
+                                        (n) * ED_SETTINGS_YOFFSET)
 
 #define ED_SETTINGS1_YPOS              MINI_TILEY
 #define ED_SETTINGS2_XPOS              MINI_TILEX
 #define ED_COUNTER_YSTART              (ED_SETTINGS1_YPOS + 2 * TILEY)
 #define ED_COUNTER_YDISTANCE           (3 * MINI_TILEY)
 #define ED_COUNTER_YPOS(n)             (ED_COUNTER_YSTART + \
-                                        n * ED_COUNTER_YDISTANCE)
+                                        (n) * ED_COUNTER_YDISTANCE)
 #define ED_COUNTER2_YPOS(n)            (ED_COUNTER_YSTART + \
-                                        n * ED_COUNTER_YDISTANCE - 2)
+                                        (n) * ED_COUNTER_YDISTANCE - 2)
 
 /* values for element content drawing areas */
 /* amoeba content */
-#define ED_AREA_ELEM_CONTENT_XPOS      ( 2 * MINI_TILEX)
-#define ED_AREA_ELEM_CONTENT_YPOS      (22 * MINI_TILEY)
+#define ED_AREA_AMOEBA_CONTENT_XPOS    ED_SETTINGS_XPOS(0)
+#define ED_AREA_AMOEBA_CONTENT_YPOS    (ED_SETTINGS_YPOS(2) + \
+                                        ED_GADGET_DISTANCE)
 
 /* yamyam content */
-#define ED_AREA_YAMYAM_CONTENT_XPOS(n) (ED_AREA_ELEM_CONTENT_XPOS + \
-                                        5 * (n % 4) * MINI_TILEX)
-#define ED_AREA_YAMYAM_CONTENT_YPOS(n) (ED_AREA_ELEM_CONTENT_YPOS + \
-                                        6 * (n / 4) * MINI_TILEY)
+#define ED_AREA_YAMYAM_CONTENT_XPOS(n) (2 * MINI_TILEX + \
+                                        5 * ((n) % 4) * MINI_TILEX)
+#define ED_AREA_YAMYAM_CONTENT_YPOS(n) (17 * MINI_TILEY + \
+                                        6 * ((n) / 4) * MINI_TILEY)
 
 /* custom change target */
-#define ED_AREA_ELEM_CONTENT2_YPOS     (ED_SETTINGS_YPOS(2) + \
+#define ED_AREA_ELEM_CONTENT2_YPOS     (ED_SETTINGS_YPOS(1) + \
                                         ED_GADGET_DISTANCE)
 /* optional custom graphic */
 #define ED_AREA_ELEM_CONTENT3_YPOS     (ED_SETTINGS_YPOS(1) + \
                                         ED_GADGET_DISTANCE)
 /* custom element content */
 #define ED_AREA_ELEM_CONTENT4_XPOS     (29 * MINI_TILEX)
-#define ED_AREA_ELEM_CONTENT4_YPOS     (ED_SETTINGS_YPOS(13) + \
+#define ED_AREA_ELEM_CONTENT4_YPOS     (ED_SETTINGS_YPOS(2) + \
                                         ED_GADGET_DISTANCE - MINI_TILEY)
 /* movement enter/leave element */
 #define ED_AREA_ELEM_CONTENT4a_XPOS    (29 * MINI_TILEX)
-#define ED_AREA_ELEM_CONTENT4a_YPOS    (ED_SETTINGS_YPOS(7) + \
+#define ED_AREA_ELEM_CONTENT4a_YPOS    (ED_SETTINGS_YPOS(10) + \
                                         ED_GADGET_DISTANCE)
 #define ED_AREA_ELEM_CONTENT4b_XPOS    (29 * MINI_TILEX)
-#define ED_AREA_ELEM_CONTENT4b_YPOS    (ED_SETTINGS_YPOS(7) + \
+#define ED_AREA_ELEM_CONTENT4b_YPOS    (ED_SETTINGS_YPOS(10) + \
                                         ED_GADGET_DISTANCE)
 /* custom change trigger element */
-#define ED_AREA_ELEM_CONTENT5_YPOS     (ED_SETTINGS_YPOS(6) + \
+#define ED_AREA_ELEM_CONTENT5_YPOS     (ED_SETTINGS_YPOS(5) + \
                                         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(10) + \
+#define ED_AREA_ELEM_CONTENT6_YPOS     (ED_SETTINGS_YPOS(9) + \
                                         ED_GADGET_DISTANCE - MINI_TILEY)
 /* group element content */
 #define ED_AREA_GROUP_CONTENT_XPOS     ED_SETTINGS_XPOS(0)
+#if 1
+#define ED_AREA_GROUP_CONTENT_YPOS     (ED_SETTINGS_YPOS(4) + \
+                                        ED_GADGET_DISTANCE)
+#else
 #define ED_AREA_GROUP_CONTENT_YPOS     (22 * MINI_TILEY)
+#endif
 
 /* values for random placement background drawing area */
 #define ED_AREA_RANDOM_BACKGROUND_YPOS (31 * MINI_TILEY)
 #define GADGET_ID_MOVE_DELAY_RND_DOWN  (GADGET_ID_COUNTER_FIRST + 48)
 #define GADGET_ID_MOVE_DELAY_RND_TEXT  (GADGET_ID_COUNTER_FIRST + 49)
 #define GADGET_ID_MOVE_DELAY_RND_UP    (GADGET_ID_COUNTER_FIRST + 50)
-#define GADGET_ID_CHANGE_DELAY_FIX_DOWN        (GADGET_ID_COUNTER_FIRST + 51)
-#define GADGET_ID_CHANGE_DELAY_FIX_TEXT        (GADGET_ID_COUNTER_FIRST + 52)
-#define GADGET_ID_CHANGE_DELAY_FIX_UP  (GADGET_ID_COUNTER_FIRST + 53)
-#define GADGET_ID_CHANGE_DELAY_RND_DOWN        (GADGET_ID_COUNTER_FIRST + 54)
-#define GADGET_ID_CHANGE_DELAY_RND_TEXT        (GADGET_ID_COUNTER_FIRST + 55)
-#define GADGET_ID_CHANGE_DELAY_RND_UP  (GADGET_ID_COUNTER_FIRST + 56)
-#define GADGET_ID_CHANGE_CONT_RND_DOWN (GADGET_ID_COUNTER_FIRST + 57)
-#define GADGET_ID_CHANGE_CONT_RND_TEXT (GADGET_ID_COUNTER_FIRST + 58)
-#define GADGET_ID_CHANGE_CONT_RND_UP   (GADGET_ID_COUNTER_FIRST + 59)
-#define GADGET_ID_GROUP_CONTENT_DOWN   (GADGET_ID_COUNTER_FIRST + 60)
-#define GADGET_ID_GROUP_CONTENT_TEXT   (GADGET_ID_COUNTER_FIRST + 61)
-#define GADGET_ID_GROUP_CONTENT_UP     (GADGET_ID_COUNTER_FIRST + 62)
+#define GADGET_ID_EXPLOSION_DELAY_DOWN (GADGET_ID_COUNTER_FIRST + 51)
+#define GADGET_ID_EXPLOSION_DELAY_TEXT (GADGET_ID_COUNTER_FIRST + 52)
+#define GADGET_ID_EXPLOSION_DELAY_UP   (GADGET_ID_COUNTER_FIRST + 53)
+#define GADGET_ID_IGNITION_DELAY_DOWN  (GADGET_ID_COUNTER_FIRST + 54)
+#define GADGET_ID_IGNITION_DELAY_TEXT  (GADGET_ID_COUNTER_FIRST + 55)
+#define GADGET_ID_IGNITION_DELAY_UP    (GADGET_ID_COUNTER_FIRST + 56)
+#define GADGET_ID_CHANGE_DELAY_FIX_DOWN        (GADGET_ID_COUNTER_FIRST + 57)
+#define GADGET_ID_CHANGE_DELAY_FIX_TEXT        (GADGET_ID_COUNTER_FIRST + 58)
+#define GADGET_ID_CHANGE_DELAY_FIX_UP  (GADGET_ID_COUNTER_FIRST + 59)
+#define GADGET_ID_CHANGE_DELAY_RND_DOWN        (GADGET_ID_COUNTER_FIRST + 60)
+#define GADGET_ID_CHANGE_DELAY_RND_TEXT        (GADGET_ID_COUNTER_FIRST + 61)
+#define GADGET_ID_CHANGE_DELAY_RND_UP  (GADGET_ID_COUNTER_FIRST + 62)
+#define GADGET_ID_CHANGE_CONT_RND_DOWN (GADGET_ID_COUNTER_FIRST + 63)
+#define GADGET_ID_CHANGE_CONT_RND_TEXT (GADGET_ID_COUNTER_FIRST + 64)
+#define GADGET_ID_CHANGE_CONT_RND_UP   (GADGET_ID_COUNTER_FIRST + 65)
+#define GADGET_ID_GROUP_CONTENT_DOWN   (GADGET_ID_COUNTER_FIRST + 66)
+#define GADGET_ID_GROUP_CONTENT_TEXT   (GADGET_ID_COUNTER_FIRST + 67)
+#define GADGET_ID_GROUP_CONTENT_UP     (GADGET_ID_COUNTER_FIRST + 68)
 
 /* drawing area identifiers */
-#define GADGET_ID_DRAWING_AREA_FIRST   (GADGET_ID_COUNTER_FIRST + 63)
+#define GADGET_ID_DRAWING_AREA_FIRST   (GADGET_ID_COUNTER_FIRST + 69)
 
 #define GADGET_ID_DRAWING_LEVEL                (GADGET_ID_DRAWING_AREA_FIRST + 0)
 #define GADGET_ID_ELEMENT_CONTENT_0    (GADGET_ID_DRAWING_AREA_FIRST + 1)
 #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_CHANGE_TIME_UNITS    (GADGET_ID_SELECTBOX_FIRST + 11)
-#define GADGET_ID_CHANGE_DIRECT_ACTION (GADGET_ID_SELECTBOX_FIRST + 12)
-#define GADGET_ID_CHANGE_OTHER_ACTION  (GADGET_ID_SELECTBOX_FIRST + 13)
-#define GADGET_ID_CHANGE_SIDES         (GADGET_ID_SELECTBOX_FIRST + 14)
-#define GADGET_ID_CHANGE_POWER         (GADGET_ID_SELECTBOX_FIRST + 15)
-#define GADGET_ID_SELECT_CHANGE_PAGE   (GADGET_ID_SELECTBOX_FIRST + 16)
+#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)
 
 /* textbutton identifiers */
-#define GADGET_ID_TEXTBUTTON_FIRST     (GADGET_ID_SELECTBOX_FIRST + 17)
+#define GADGET_ID_TEXTBUTTON_FIRST     (GADGET_ID_SELECTBOX_FIRST + 20)
 
 #define GADGET_ID_PROPERTIES_INFO      (GADGET_ID_TEXTBUTTON_FIRST + 0)
 #define GADGET_ID_PROPERTIES_CONFIG    (GADGET_ID_TEXTBUTTON_FIRST + 1)
-#define GADGET_ID_PROPERTIES_ADVANCED  (GADGET_ID_TEXTBUTTON_FIRST + 2)
-#define GADGET_ID_SAVE_AS_TEMPLATE     (GADGET_ID_TEXTBUTTON_FIRST + 3)
-#define GADGET_ID_ADD_CHANGE_PAGE      (GADGET_ID_TEXTBUTTON_FIRST + 4)
-#define GADGET_ID_DEL_CHANGE_PAGE      (GADGET_ID_TEXTBUTTON_FIRST + 5)
+#define GADGET_ID_PROPERTIES_CONFIG_1  (GADGET_ID_TEXTBUTTON_FIRST + 2)
+#define GADGET_ID_PROPERTIES_CONFIG_2  (GADGET_ID_TEXTBUTTON_FIRST + 3)
+#define GADGET_ID_PROPERTIES_CHANGE    (GADGET_ID_TEXTBUTTON_FIRST + 4)
+#define GADGET_ID_SAVE_AS_TEMPLATE     (GADGET_ID_TEXTBUTTON_FIRST + 5)
+#define GADGET_ID_ADD_CHANGE_PAGE      (GADGET_ID_TEXTBUTTON_FIRST + 6)
+#define GADGET_ID_DEL_CHANGE_PAGE      (GADGET_ID_TEXTBUTTON_FIRST + 7)
 
 /* graphicbutton identifiers */
-#define GADGET_ID_GRAPHICBUTTON_FIRST  (GADGET_ID_TEXTBUTTON_FIRST + 6)
+#define GADGET_ID_GRAPHICBUTTON_FIRST  (GADGET_ID_TEXTBUTTON_FIRST + 8)
 
 #define GADGET_ID_PREV_CHANGE_PAGE     (GADGET_ID_GRAPHICBUTTON_FIRST + 0)
 #define GADGET_ID_NEXT_CHANGE_PAGE     (GADGET_ID_GRAPHICBUTTON_FIRST + 1)
 #define GADGET_ID_SCROLL_LIST_DOWN     (GADGET_ID_SCROLLING_LIST_FIRST + 1)
 #define GADGET_ID_SCROLL_LIST_VERTICAL (GADGET_ID_SCROLLING_LIST_FIRST + 2)
 
-/* checkbuttons for level/element properties */
+/* checkbuttons/radiobuttons for level/element properties */
 #define GADGET_ID_CHECKBUTTON_FIRST    (GADGET_ID_SCROLLING_LIST_FIRST + 3)
 
 #define GADGET_ID_RANDOM_PERCENTAGE    (GADGET_ID_CHECKBUTTON_FIRST + 0)
 #define GADGET_ID_GRAVITY              (GADGET_ID_CHECKBUTTON_FIRST + 4)
 #define GADGET_ID_STICK_ELEMENT                (GADGET_ID_CHECKBUTTON_FIRST + 5)
 #define GADGET_ID_EM_SLIPPERY_GEMS     (GADGET_ID_CHECKBUTTON_FIRST + 6)
-#define GADGET_ID_CUSTOM_EXPLODE_RESULT        (GADGET_ID_CHECKBUTTON_FIRST + 7)
-#define GADGET_ID_CUSTOM_EXPLODE_FIRE  (GADGET_ID_CHECKBUTTON_FIRST + 8)
-#define GADGET_ID_CUSTOM_EXPLODE_SMASH (GADGET_ID_CHECKBUTTON_FIRST + 9)
-#define GADGET_ID_CUSTOM_EXPLODE_IMPACT        (GADGET_ID_CHECKBUTTON_FIRST + 10)
-#define GADGET_ID_CUSTOM_WALK_TO_OBJECT        (GADGET_ID_CHECKBUTTON_FIRST + 11)
-#define GADGET_ID_CUSTOM_DEADLY                (GADGET_ID_CHECKBUTTON_FIRST + 12)
-#define GADGET_ID_CUSTOM_CAN_MOVE      (GADGET_ID_CHECKBUTTON_FIRST + 13)
-#define GADGET_ID_CUSTOM_CAN_FALL      (GADGET_ID_CHECKBUTTON_FIRST + 14)
-#define GADGET_ID_CUSTOM_CAN_SMASH     (GADGET_ID_CHECKBUTTON_FIRST + 15)
-#define GADGET_ID_CUSTOM_SLIPPERY      (GADGET_ID_CHECKBUTTON_FIRST + 16)
-#define GADGET_ID_CUSTOM_ACCESSIBLE    (GADGET_ID_CHECKBUTTON_FIRST + 17)
-#define GADGET_ID_CUSTOM_USE_GRAPHIC   (GADGET_ID_CHECKBUTTON_FIRST + 18)
-#define GADGET_ID_CUSTOM_USE_TEMPLATE  (GADGET_ID_CHECKBUTTON_FIRST + 19)
-#define GADGET_ID_CUSTOM_CAN_CHANGE    (GADGET_ID_CHECKBUTTON_FIRST + 20)
-#define GADGET_ID_CHANGE_USE_CONTENT   (GADGET_ID_CHECKBUTTON_FIRST + 21)
-#define GADGET_ID_CHANGE_USE_EXPLOSION (GADGET_ID_CHECKBUTTON_FIRST + 22)
-#define GADGET_ID_CHANGE_ONLY_COMPLETE (GADGET_ID_CHECKBUTTON_FIRST + 23)
-#define GADGET_ID_CHANGE_USE_RANDOM    (GADGET_ID_CHECKBUTTON_FIRST + 24)
-#define GADGET_ID_CHANGE_DELAY         (GADGET_ID_CHECKBUTTON_FIRST + 25)
-#define GADGET_ID_CHANGE_BY_DIRECT_ACT (GADGET_ID_CHECKBUTTON_FIRST + 26)
-#define GADGET_ID_CHANGE_BY_OTHER_ACT  (GADGET_ID_CHECKBUTTON_FIRST + 27)
+#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)
 
 /* gadgets for buttons in element list */
-#define GADGET_ID_ELEMENTLIST_FIRST    (GADGET_ID_CHECKBUTTON_FIRST + 28)
+#define GADGET_ID_ELEMENTLIST_FIRST    (GADGET_ID_CHECKBUTTON_FIRST + 32)
 #define GADGET_ID_ELEMENTLIST_LAST     (GADGET_ID_ELEMENTLIST_FIRST +  \
                                        ED_NUM_ELEMENTLIST_BUTTONS - 1)
 
 #define ED_COUNTER_ID_PUSH_DELAY_RND   14
 #define ED_COUNTER_ID_MOVE_DELAY_FIX   15
 #define ED_COUNTER_ID_MOVE_DELAY_RND   16
-#define ED_COUNTER_ID_GROUP_CONTENT    17
-#define ED_COUNTER_ID_CHANGE_DELAY_FIX 18
-#define ED_COUNTER_ID_CHANGE_DELAY_RND 19
-#define ED_COUNTER_ID_CHANGE_CONT_RND  20
+#define ED_COUNTER_ID_EXPLOSION_DELAY  17
+#define ED_COUNTER_ID_IGNITION_DELAY   18
+#define ED_COUNTER_ID_GROUP_CONTENT    19
+#define ED_COUNTER_ID_CHANGE_DELAY_FIX 20
+#define ED_COUNTER_ID_CHANGE_DELAY_RND 21
+#define ED_COUNTER_ID_CHANGE_CONT_RND  22
 
-#define ED_NUM_COUNTERBUTTONS          21
+#define ED_NUM_COUNTERBUTTONS          23
 
 #define ED_COUNTER_ID_LEVEL_FIRST      ED_COUNTER_ID_LEVEL_XSIZE
 #define ED_COUNTER_ID_LEVEL_LAST       ED_COUNTER_ID_LEVEL_RANDOM
 
-#define ED_COUNTER_ID_CUSTOM_FIRST     ED_COUNTER_ID_CUSTOM_SCORE
-#define ED_COUNTER_ID_CUSTOM_LAST      ED_COUNTER_ID_MOVE_DELAY_RND
+#define ED_COUNTER_ID_CUSTOM1_FIRST    ED_COUNTER_ID_CUSTOM_SCORE
+#define ED_COUNTER_ID_CUSTOM1_LAST     ED_COUNTER_ID_MOVE_DELAY_RND
+#define ED_COUNTER_ID_CUSTOM2_FIRST    ED_COUNTER_ID_EXPLOSION_DELAY
+#define ED_COUNTER_ID_CUSTOM2_LAST     ED_COUNTER_ID_IGNITION_DELAY
+#define ED_COUNTER_ID_CUSTOM_FIRST     ED_COUNTER_ID_CUSTOM1_FIRST
+#define ED_COUNTER_ID_CUSTOM_LAST      ED_COUNTER_ID_CUSTOM2_LAST
 
 #define ED_COUNTER_ID_CHANGE_FIRST     ED_COUNTER_ID_CHANGE_DELAY_FIX
 #define ED_COUNTER_ID_CHANGE_LAST      ED_COUNTER_ID_CHANGE_CONT_RND
 /* 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_WALK_TO_ACTION  2
-#define ED_SELECTBOX_ID_CUSTOM_MOVE_PATTERN    3
-#define ED_SELECTBOX_ID_CUSTOM_MOVE_DIRECTION  4
-#define ED_SELECTBOX_ID_CUSTOM_MOVE_STEPSIZE   5
-#define ED_SELECTBOX_ID_CUSTOM_MOVE_LEAVE_TYPE 6
-#define ED_SELECTBOX_ID_CUSTOM_SMASH_TARGETS   7
-#define ED_SELECTBOX_ID_CUSTOM_SLIPPERY_TYPE   8
-#define ED_SELECTBOX_ID_CUSTOM_DEADLINESS      9
-#define ED_SELECTBOX_ID_CUSTOM_CONSISTENCY     10
-#define ED_SELECTBOX_ID_CHANGE_TIME_UNITS      11
-#define ED_SELECTBOX_ID_CHANGE_DIRECT_ACTION   12
-#define ED_SELECTBOX_ID_CHANGE_OTHER_ACTION    13
-#define ED_SELECTBOX_ID_CHANGE_SIDES           14
-#define ED_SELECTBOX_ID_CHANGE_POWER           15
-#define ED_SELECTBOX_ID_SELECT_CHANGE_PAGE     16
-
-#define ED_NUM_SELECTBOX                       17
-
-#define ED_SELECTBOX_ID_CUSTOM_FIRST   ED_SELECTBOX_ID_CUSTOM_ACCESS_TYPE
-#define ED_SELECTBOX_ID_CUSTOM_LAST    ED_SELECTBOX_ID_CUSTOM_CONSISTENCY
+#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_CUSTOM1_FIRST  ED_SELECTBOX_ID_CUSTOM_ACCESS_TYPE
+#define ED_SELECTBOX_ID_CUSTOM1_LAST   ED_SELECTBOX_ID_CUSTOM_SLIPPERY_TYPE
+#define ED_SELECTBOX_ID_CUSTOM2_FIRST  ED_SELECTBOX_ID_CUSTOM_DEADLINESS
+#define ED_SELECTBOX_ID_CUSTOM2_LAST   ED_SELECTBOX_ID_CUSTOM_CONSISTENCY
+#define ED_SELECTBOX_ID_CUSTOM_FIRST   ED_SELECTBOX_ID_CUSTOM1_FIRST
+#define ED_SELECTBOX_ID_CUSTOM_LAST    ED_SELECTBOX_ID_CUSTOM2_LAST
 
 #define ED_SELECTBOX_ID_CHANGE_FIRST   ED_SELECTBOX_ID_CHANGE_TIME_UNITS
 #define ED_SELECTBOX_ID_CHANGE_LAST    ED_SELECTBOX_ID_SELECT_CHANGE_PAGE
 /* values for textbutton gadgets */
 #define ED_TEXTBUTTON_ID_PROPERTIES_INFO       0
 #define ED_TEXTBUTTON_ID_PROPERTIES_CONFIG     1
-#define ED_TEXTBUTTON_ID_PROPERTIES_ADVANCED   2
-#define ED_TEXTBUTTON_ID_SAVE_AS_TEMPLATE      3
-#define ED_TEXTBUTTON_ID_ADD_CHANGE_PAGE       4
-#define ED_TEXTBUTTON_ID_DEL_CHANGE_PAGE       5
+#define ED_TEXTBUTTON_ID_PROPERTIES_CONFIG_1   2
+#define ED_TEXTBUTTON_ID_PROPERTIES_CONFIG_2   3
+#define ED_TEXTBUTTON_ID_PROPERTIES_CHANGE     4
+#define ED_TEXTBUTTON_ID_SAVE_AS_TEMPLATE      5
+#define ED_TEXTBUTTON_ID_ADD_CHANGE_PAGE       6
+#define ED_TEXTBUTTON_ID_DEL_CHANGE_PAGE       7
 
-#define ED_NUM_TEXTBUTTONS                     6
+#define ED_NUM_TEXTBUTTONS                     8
 
 #define ED_TEXTBUTTON_ID_PROPERTIES_FIRST ED_TEXTBUTTON_ID_PROPERTIES_INFO
-#define ED_TEXTBUTTON_ID_PROPERTIES_LAST  ED_TEXTBUTTON_ID_PROPERTIES_ADVANCED
+#define ED_TEXTBUTTON_ID_PROPERTIES_LAST  ED_TEXTBUTTON_ID_PROPERTIES_CHANGE
 
-#define ED_TEXTBUTTON_ID_CHANGE_FIRST  ED_TEXTBUTTON_ID_SAVE_AS_TEMPLATE
+#define ED_TEXTBUTTON_ID_CHANGE_FIRST  ED_TEXTBUTTON_ID_ADD_CHANGE_PAGE
 #define ED_TEXTBUTTON_ID_CHANGE_LAST   ED_TEXTBUTTON_ID_DEL_CHANGE_PAGE
 
 /* values for graphicbutton gadgets */
 #define ED_CHECKBUTTON_ID_RANDOM_RESTRICTED    2
 #define ED_CHECKBUTTON_ID_STICK_ELEMENT                3
 #define ED_CHECKBUTTON_ID_EM_SLIPPERY_GEMS     4
-#define ED_CHECKBUTTON_ID_CUSTOM_ACCESSIBLE    5
-#define ED_CHECKBUTTON_ID_CUSTOM_WALK_TO_OBJECT        6
-#define ED_CHECKBUTTON_ID_CUSTOM_CAN_MOVE      7
-#define ED_CHECKBUTTON_ID_CUSTOM_CAN_FALL      8
-#define ED_CHECKBUTTON_ID_CUSTOM_CAN_SMASH     9
-#define ED_CHECKBUTTON_ID_CUSTOM_SLIPPERY      10
-#define ED_CHECKBUTTON_ID_CUSTOM_DEADLY                11
-#define ED_CHECKBUTTON_ID_CUSTOM_EXPLODE_RESULT        12
-#define ED_CHECKBUTTON_ID_CUSTOM_EXPLODE_FIRE  13
-#define ED_CHECKBUTTON_ID_CUSTOM_EXPLODE_SMASH 14
-#define ED_CHECKBUTTON_ID_CUSTOM_EXPLODE_IMPACT        15
-#define ED_CHECKBUTTON_ID_CUSTOM_USE_GRAPHIC   16
-#define ED_CHECKBUTTON_ID_CUSTOM_CAN_CHANGE    17
-#define ED_CHECKBUTTON_ID_CHANGE_DELAY         18
-#define ED_CHECKBUTTON_ID_CHANGE_BY_DIRECT_ACT 19
-#define ED_CHECKBUTTON_ID_CHANGE_BY_OTHER_ACT  20
-#define ED_CHECKBUTTON_ID_CHANGE_USE_EXPLOSION 21
-#define ED_CHECKBUTTON_ID_CHANGE_USE_CONTENT   22
-#define ED_CHECKBUTTON_ID_CHANGE_ONLY_COMPLETE 23
-#define ED_CHECKBUTTON_ID_CHANGE_USE_RANDOM    24
-#define ED_CHECKBUTTON_ID_CUSTOM_USE_TEMPLATE  25
-
-#define ED_NUM_CHECKBUTTONS                    26
+#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_LEVEL_FIRST  ED_CHECKBUTTON_ID_DOUBLE_SPEED
 #define ED_CHECKBUTTON_ID_LEVEL_LAST   ED_CHECKBUTTON_ID_RANDOM_RESTRICTED
 
-#define ED_CHECKBUTTON_ID_CUSTOM_FIRST ED_CHECKBUTTON_ID_CUSTOM_ACCESSIBLE
-#define ED_CHECKBUTTON_ID_CUSTOM_LAST  ED_CHECKBUTTON_ID_CUSTOM_EXPLODE_IMPACT
+#define ED_CHECKBUTTON_ID_CUSTOM1_FIRST        ED_CHECKBUTTON_ID_CUSTOM_USE_GRAPHIC
+#define ED_CHECKBUTTON_ID_CUSTOM1_LAST ED_CHECKBUTTON_ID_CUSTOM_SLIPPERY
+#define ED_CHECKBUTTON_ID_CUSTOM2_FIRST        ED_CHECKBUTTON_ID_CUSTOM_DEADLY
+#define ED_CHECKBUTTON_ID_CUSTOM2_LAST ED_CHECKBUTTON_ID_CUSTOM_EXPLODE_IMPACT
+#define ED_CHECKBUTTON_ID_CUSTOM_FIRST ED_CHECKBUTTON_ID_CUSTOM1_FIRST
+#define ED_CHECKBUTTON_ID_CUSTOM_LAST  ED_CHECKBUTTON_ID_CUSTOM2_LAST
 
-#define ED_CHECKBUTTON_ID_CHANGE_FIRST ED_CHECKBUTTON_ID_CUSTOM_USE_GRAPHIC
-#define ED_CHECKBUTTON_ID_CHANGE_LAST  ED_CHECKBUTTON_ID_CUSTOM_USE_TEMPLATE
+#define ED_CHECKBUTTON_ID_CHANGE_FIRST ED_CHECKBUTTON_ID_CUSTOM_CAN_CHANGE
+#define ED_CHECKBUTTON_ID_CHANGE_LAST  ED_CHECKBUTTON_ID_CHANGE_USE_RANDOM
 
 /* values for radiobutton gadgets */
 #define ED_RADIOBUTTON_ID_PERCENTAGE   0
 /* 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
-#define ED_MODE_PROPERTIES_ADVANCED    ED_TEXTBUTTON_ID_PROPERTIES_ADVANCED
+#define ED_MODE_PROPERTIES_CONFIG_1    ED_TEXTBUTTON_ID_PROPERTIES_CONFIG_1
+#define ED_MODE_PROPERTIES_CONFIG_2    ED_TEXTBUTTON_ID_PROPERTIES_CONFIG_2
+#define ED_MODE_PROPERTIES_CHANGE      ED_TEXTBUTTON_ID_PROPERTIES_CHANGE
 
 /* how many steps can be cancelled */
 #define NUM_UNDO_STEPS                 (10 + 1)
@@ -901,7 +947,7 @@ static struct
     NULL,                              NULL, NULL
   },
   {
-    ED_SETTINGS_XPOS(0),               ED_SETTINGS_YPOS(6),
+    ED_SETTINGS_XPOS(0),               ED_SETTINGS_YPOS(3),
     MIN_ELEMENT_CONTENTS,              MAX_ELEMENT_CONTENTS,
     GADGET_ID_ELEMENT_CONTENT_DOWN,    GADGET_ID_ELEMENT_CONTENT_UP,
     GADGET_ID_ELEMENT_CONTENT_TEXT,    GADGET_ID_NONE,
@@ -925,10 +971,10 @@ static struct
     NULL,                              " ", "height",
   },
 
-  /* ---------- element settings: configure (custom elements) -------------- */
+  /* ---------- element settings: configure 1 (custom elements) ------------ */
 
   {
-    ED_SETTINGS_XPOS(1),               ED_SETTINGS_YPOS(3),
+    ED_SETTINGS_XPOS(1),               ED_SETTINGS_YPOS(6),
     MIN_SCORE,                         MAX_SCORE,
     GADGET_ID_CUSTOM_SCORE_DOWN,       GADGET_ID_CUSTOM_SCORE_UP,
     GADGET_ID_CUSTOM_SCORE_TEXT,       GADGET_ID_NONE,
@@ -936,7 +982,7 @@ static struct
     NULL,                              "score", " "
   },
   {
-    -1,                                        ED_SETTINGS_YPOS(3),
+    -1,                                        ED_SETTINGS_YPOS(6),
     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,
@@ -944,7 +990,7 @@ static struct
     NULL,                              "count", NULL
   },
   {
-    ED_SETTINGS_XPOS(1),               ED_SETTINGS_YPOS(4),
+    ED_SETTINGS_XPOS(1),               ED_SETTINGS_YPOS(7),
     0,                                 999,
     GADGET_ID_PUSH_DELAY_FIX_DOWN,     GADGET_ID_PUSH_DELAY_FIX_UP,
     GADGET_ID_PUSH_DELAY_FIX_TEXT,     GADGET_ID_NONE,
@@ -952,7 +998,7 @@ static struct
     NULL,                              "push delay", NULL
   },
   {
-    -1,                                        ED_SETTINGS_YPOS(4),
+    -1,                                        ED_SETTINGS_YPOS(7),
     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,
@@ -960,7 +1006,7 @@ static struct
     NULL,                              "+random", NULL
   },
   {
-    ED_SETTINGS_XPOS(1),               ED_SETTINGS_YPOS(9),
+    ED_SETTINGS_XPOS(1),               ED_SETTINGS_YPOS(12),
     0,                                 999,
     GADGET_ID_MOVE_DELAY_FIX_DOWN,     GADGET_ID_MOVE_DELAY_FIX_UP,
     GADGET_ID_MOVE_DELAY_FIX_TEXT,     GADGET_ID_NONE,
@@ -968,7 +1014,7 @@ static struct
     NULL,                              "move delay", NULL
   },
   {
-    -1,                                        ED_SETTINGS_YPOS(9),
+    -1,                                        ED_SETTINGS_YPOS(12),
     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,
@@ -976,10 +1022,29 @@ static struct
     NULL,                              "+random", NULL
   },
 
+  /* ---------- element settings: configure 2 (custom elements) ------------ */
+
+  {
+    ED_SETTINGS_XPOS(1),               ED_SETTINGS_YPOS(4),
+    0,                                 255,
+    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
+  },
+  {
+    ED_SETTINGS_XPOS(1),               ED_SETTINGS_YPOS(5),
+    0,                                 255,
+    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)"
+  },
+
   /* ---------- element settings: configure (group elements) --------------- */
 
   {
-    ED_SETTINGS_XPOS(0),               ED_SETTINGS_YPOS(6),
+    ED_SETTINGS_XPOS(0),               ED_SETTINGS_YPOS(5),
     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,
@@ -990,7 +1055,7 @@ static struct
   /* ---------- element settings: advanced (custom elements) --------------- */
 
   {
-    ED_SETTINGS_XPOS(2),               ED_SETTINGS_YPOS(3),
+    ED_SETTINGS_XPOS(2),               ED_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,
@@ -998,7 +1063,7 @@ static struct
     NULL,                              "delay", NULL,
   },
   {
-    -1,                                        ED_SETTINGS_YPOS(3),
+    -1,                                        ED_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,
@@ -1006,7 +1071,7 @@ static struct
     NULL,                              "+random", NULL
   },
   {
-    ED_SETTINGS_XPOS(3),               ED_SETTINGS_YPOS(12),
+    ED_SETTINGS_XPOS(3),               ED_SETTINGS_YPOS(11),
     0,                                 100,
     GADGET_ID_CHANGE_CONT_RND_DOWN,    GADGET_ID_CHANGE_CONT_RND_UP,
     GADGET_ID_CHANGE_CONT_RND_TEXT,    GADGET_ID_NONE,
@@ -1039,7 +1104,7 @@ static struct
     "Author:", "Author"
   },
   {
-    5 * MINI_TILEX,                    5 * MINI_TILEY - ED_BORDER_SIZE,
+    5 * MINI_TILEX - 2,                        5 * MINI_TILEY - ED_BORDER_SIZE + 1,
     GADGET_ID_ELEMENT_NAME,
     MAX_ELEMENT_NAME_LEN - 2,          /* currently 2 chars less editable */
     custom_element.description,
@@ -1067,8 +1132,8 @@ static struct
 
 static struct ValueTextInfo options_access_type[] =
 {
-  { EP_WALKABLE,               "walk"                          },
-  { EP_PASSABLE,               "pass"                          },
+  { EP_WALKABLE,               "walkable"                      },
+  { EP_PASSABLE,               "passable"                      },
   { -1,                                NULL                            }
 };
 
@@ -1080,6 +1145,33 @@ static struct ValueTextInfo options_access_layer[] =
   { -1,                                NULL                            }
 };
 
+static struct ValueTextInfo options_access_protected[] =
+{
+  { 0,                         "unprotected"                   },
+  { 1,                         "protected"                     },
+  { -1,                                NULL                            }
+};
+
+static struct ValueTextInfo options_access_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"                      },
@@ -1109,22 +1201,20 @@ static struct ValueTextInfo options_move_pattern[] =
   { MV_TURNING_RANDOM,         "turning random"                },
   { MV_WHEN_PUSHED,            "when pushed"                   },
   { MV_WHEN_DROPPED,           "when dropped"                  },
-#if 1
   { MV_MAZE_RUNNER,            "maze runner style"             },
   { MV_MAZE_HUNTER,            "maze hunter style"             },
-#endif
   { -1,                                NULL                            }
 };
 
 static struct ValueTextInfo options_move_direction[] =
 {
-  { MV_AUTOMATIC,              "automatic"                     },
-  { MV_LEFT,                   "left"                          },
-  { MV_RIGHT,                  "right"                         },
-  { MV_UP,                     "up"                            },
-  { MV_DOWN,                   "down"                          },
-  { MV_RANDOM,                 "random"                        },
-  { MV_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                            }
 };
 
@@ -1141,7 +1231,7 @@ static struct ValueTextInfo options_move_stepsize[] =
 static struct ValueTextInfo options_move_leave_type[] =
 {
   { LEAVE_TYPE_UNLIMITED,      "leave behind"                  },
-  { LEAVE_TYPE_LIMITED,                "change to"                     },
+  { LEAVE_TYPE_LIMITED,                "change it to"                  },
   { -1,                                NULL                            }
 };
 
@@ -1256,6 +1346,16 @@ static struct ValueTextInfo options_change_page[MAX_CHANGE_PAGES + 1] =
   { -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"                    },
+  { -1,                                NULL                            }
+};
+
 static struct
 {
   int x, y;
@@ -1267,18 +1367,18 @@ static struct
   char *text_left, *text_right, *infotext;
 } selectbox_info[ED_NUM_SELECTBOX] =
 {
-  /* ---------- element settings: configure (custom elements) ------------- */
+  /* ---------- element settings: configure 1 (custom elements) ----------- */
 
   {
-    ED_SETTINGS_XPOS(1),               ED_SETTINGS_YPOS(1),
+    ED_SETTINGS_XPOS(1),               ED_SETTINGS_YPOS(3),
     GADGET_ID_CUSTOM_ACCESS_TYPE,      GADGET_ID_NONE,
     -1,
     options_access_type,
     &custom_element.access_type,
-    "player can", NULL,                        "type of access to this field"
+    NULL, NULL,                                "type of access to this field"
   },
   {
-    -1,                                        ED_SETTINGS_YPOS(1),
+    -1,                                        ED_SETTINGS_YPOS(3),
     GADGET_ID_CUSTOM_ACCESS_LAYER,     GADGET_ID_CUSTOM_ACCESS_TYPE,
     -1,
     options_access_layer,
@@ -1286,7 +1386,23 @@ static struct
     NULL, NULL,                                "layer of access for this field"
   },
   {
-    ED_SETTINGS_XPOS(1),               ED_SETTINGS_YPOS(2),
+    -1,                                        ED_SETTINGS_YPOS(3),
+    GADGET_ID_CUSTOM_ACCESS_PROTECTED, GADGET_ID_CUSTOM_ACCESS_LAYER,
+    -1,
+    options_access_protected,
+    &custom_element.access_protected,
+    NULL, NULL,                                "protected access for this field"
+  },
+  {
+    ED_SETTINGS_XPOS(1),               ED_SETTINGS_YPOS(4),
+    GADGET_ID_CUSTOM_ACCESS_DIRECTION, GADGET_ID_NONE,
+    -1,
+    options_access_direction,
+    &custom_element.access_direction,
+    "from", NULL,                      "access direction for this field"
+  },
+  {
+    ED_SETTINGS_XPOS(1),               ED_SETTINGS_YPOS(5),
     GADGET_ID_CUSTOM_WALK_TO_ACTION,   GADGET_ID_NONE,
     -1,
     options_walk_to_action,
@@ -1294,7 +1410,7 @@ static struct
     NULL, NULL,                                "diggable/collectible/pushable"
   },
   {
-    ED_SETTINGS_XPOS(1),               ED_SETTINGS_YPOS(5),
+    ED_SETTINGS_XPOS(1),               ED_SETTINGS_YPOS(8),
     GADGET_ID_CUSTOM_MOVE_PATTERN,     GADGET_ID_NONE,
     -1,
     options_move_pattern,
@@ -1302,7 +1418,7 @@ static struct
     "can move", NULL,                  "element move direction"
   },
   {
-    ED_SETTINGS_XPOS(1),               ED_SETTINGS_YPOS(6),
+    ED_SETTINGS_XPOS(1),               ED_SETTINGS_YPOS(9),
     GADGET_ID_CUSTOM_MOVE_DIRECTION,   GADGET_ID_NONE,
     -1,
     options_move_direction,
@@ -1310,7 +1426,7 @@ static struct
     "starts moving", NULL,             "initial element move direction"
   },
   {
-    ED_SETTINGS_XPOS(1),               ED_SETTINGS_YPOS(8),
+    ED_SETTINGS_XPOS(1),               ED_SETTINGS_YPOS(11),
     GADGET_ID_CUSTOM_MOVE_STEPSIZE,    GADGET_ID_NONE,
     -1,
     options_move_stepsize,
@@ -1318,7 +1434,7 @@ static struct
     "move/fall speed", NULL,           "speed of element movement"
   },
   {
-    ED_SETTINGS_XPOS(1),               ED_SETTINGS_YPOS(7),
+    ED_SETTINGS_XPOS(1),               ED_SETTINGS_YPOS(10),
     GADGET_ID_CUSTOM_MOVE_LEAVE_TYPE,  GADGET_ID_NONE,
     -1,
     options_move_leave_type,
@@ -1326,7 +1442,7 @@ static struct
     "can dig:    can", ":",            "leave behind or change element"
   },
   {
-    -1,                                        ED_SETTINGS_YPOS(10),
+    -1,                                        ED_SETTINGS_YPOS(13),
     GADGET_ID_CUSTOM_SMASH_TARGETS,    GADGET_ID_CUSTOM_CAN_SMASH,
     -1,
     options_smash_targets,
@@ -1334,15 +1450,18 @@ static struct
     "can smash", NULL,                 "elements that can be smashed"
   },
   {
-    ED_SETTINGS_XPOS(1),               ED_SETTINGS_YPOS(11),
+    ED_SETTINGS_XPOS(1),               ED_SETTINGS_YPOS(14),
     GADGET_ID_CUSTOM_SLIPPERY_TYPE,    GADGET_ID_NONE,
     -1,
     options_slippery_type,
     &custom_element.slippery_type,
     "slippery", NULL,                  "where other elements fall down"
   },
+
+  /* ---------- element settings: configure 2 (custom elements) ----------- */
+
   {
-    ED_SETTINGS_XPOS(1),               ED_SETTINGS_YPOS(12),
+    ED_SETTINGS_XPOS(1),               ED_SETTINGS_YPOS(1),
     GADGET_ID_CUSTOM_DEADLINESS,       GADGET_ID_NONE,
     -1,
     options_deadliness,
@@ -1350,7 +1469,7 @@ static struct
     "deadly when", NULL,               "deadliness of element"
   },
   {
-    ED_SETTINGS_XPOS(1),               ED_SETTINGS_YPOS(13),
+    ED_SETTINGS_XPOS(1),               ED_SETTINGS_YPOS(2),
     GADGET_ID_CUSTOM_CONSISTENCY,      GADGET_ID_NONE,
     -1,
     options_consistency,
@@ -1361,7 +1480,7 @@ static struct
   /* ---------- element settings: advanced (custom elements) --------------- */
 
   {
-    ED_SETTINGS_XPOS(2),               ED_SETTINGS_YPOS(4),
+    ED_SETTINGS_XPOS(2),               ED_SETTINGS_YPOS(3),
     GADGET_ID_CHANGE_TIME_UNITS,       GADGET_ID_NONE,
     -1,
     options_time_units,
@@ -1369,7 +1488,7 @@ static struct
     "delay time given in", NULL,       "delay time units for change"
   },
   {
-    ED_SETTINGS_XPOS(2),               ED_SETTINGS_YPOS(5),
+    ED_SETTINGS_XPOS(2),               ED_SETTINGS_YPOS(4),
     GADGET_ID_CHANGE_DIRECT_ACTION,    GADGET_ID_NONE,
     -1,
     options_change_direct_action,
@@ -1377,7 +1496,7 @@ static struct
     NULL, NULL,                                "type of direct action"
   },
   {
-    ED_SETTINGS_XPOS(2),               ED_SETTINGS_YPOS(6),
+    ED_SETTINGS_XPOS(2),               ED_SETTINGS_YPOS(5),
     GADGET_ID_CHANGE_OTHER_ACTION,     GADGET_ID_NONE,
     -1,
     options_change_other_action,
@@ -1385,7 +1504,7 @@ static struct
     NULL, "element:",                  "type of other element action"
   },
   {
-    ED_SETTINGS_XPOS(2),               ED_SETTINGS_YPOS(7),
+    ED_SETTINGS_XPOS(2),               ED_SETTINGS_YPOS(6),
     GADGET_ID_CHANGE_SIDES,            GADGET_ID_NONE,
     -1,
     options_change_sides,
@@ -1393,7 +1512,7 @@ static struct
     "... at", NULL,                    "element side that causes change"
   },
   {
-    ED_SETTINGS_XPOS(2),               ED_SETTINGS_YPOS(10),
+    ED_SETTINGS_XPOS(2),               ED_SETTINGS_YPOS(9),
     GADGET_ID_CHANGE_POWER,            GADGET_ID_NONE,
     -1,
     options_change_power,
@@ -1401,12 +1520,23 @@ static struct
     "replace when", NULL,              "which elements can be replaced"
   },
   {
-    ED_SETTINGS_XPOS(1),               ED_SETTINGS_YPOS(14),
+    ED_SETTINGS_XPOS(1),               ED_SETTINGS_YPOS(13),
     GADGET_ID_SELECT_CHANGE_PAGE,      GADGET_ID_NONE,
     3,
     options_change_page,
     &custom_element.current_change_page,
-    NULL, NULL,                                "element config page"
+    NULL, NULL,                                "element change page"
+  },
+
+  /* ---------- element settings: configure (group elements) --------------- */
+
+  {
+    ED_SETTINGS_XPOS(0),               ED_SETTINGS_YPOS(6),
+    GADGET_ID_GROUP_CHOICE_MODE,       GADGET_ID_NONE,
+    -1,
+    options_group_choice_mode,
+    &group_element_info.choice_mode,
+    "choice type:", NULL,              "type of group element choice"
   },
 };
 
@@ -1420,6 +1550,38 @@ static struct
   char *text_left, *text_right, *infotext;
 } textbutton_info[ED_NUM_TEXTBUTTONS] =
 {
+#if 1
+  {
+    ED_SETTINGS_XPOS(0),               ED_COUNTER_YPOS(1),
+    GADGET_ID_PROPERTIES_INFO,         GADGET_ID_NONE,
+    8,                                 "Info",                 
+    NULL, NULL,                                "Show information about element"
+  },
+  {
+    ED_SETTINGS_XPOS(0) + 124,         ED_COUNTER_YPOS(1),
+    GADGET_ID_PROPERTIES_CONFIG,       GADGET_ID_NONE,
+    8,                                 "Config",
+    NULL, NULL,                                "Configure element properties"
+  },
+  {
+    ED_SETTINGS_XPOS(0) + 124,         ED_COUNTER_YPOS(1),
+    GADGET_ID_PROPERTIES_CONFIG_1,     GADGET_ID_NONE,
+    8,                                 "Config 1",
+    NULL, NULL,                                "Configure custom element properties"
+  },
+  {
+    ED_SETTINGS_XPOS(0) + 248,         ED_COUNTER_YPOS(1),
+    GADGET_ID_PROPERTIES_CONFIG_2,     GADGET_ID_NONE,
+    8,                                 "Config 2",
+    NULL, NULL,                                "Configure custom element properties"
+  },
+  {
+    ED_SETTINGS_XPOS(0) + 372,         ED_COUNTER_YPOS(1),
+    GADGET_ID_PROPERTIES_CHANGE,       GADGET_ID_NONE,
+    8,                                 "Change",
+    NULL, NULL,                                "Custom element change configuration"
+  },
+#else
   {
     ED_SETTINGS_XPOS(0),               ED_COUNTER_YPOS(1),
     GADGET_ID_PROPERTIES_INFO,         GADGET_ID_NONE,
@@ -1434,27 +1596,28 @@ static struct
   },
   {
     ED_SETTINGS_XPOS(0) + 332,         ED_COUNTER_YPOS(1),
-    GADGET_ID_PROPERTIES_ADVANCED,     GADGET_ID_NONE,
+    GADGET_ID_PROPERTIES_CHANGE,       GADGET_ID_NONE,
     11,                                        "Advanced",
     NULL, NULL,                                "Advanced element configuration"
   },
+#endif
   {
-    -1,                                        ED_SETTINGS_YPOS(13),
+    -1,                                        ED_SETTINGS_YPOS(2),
     GADGET_ID_SAVE_AS_TEMPLATE,                GADGET_ID_CUSTOM_USE_TEMPLATE,
-    -1,                                        "Save as template",
-    " ", NULL,                         "Save current settings as new template"
+    -1,                                        "Save",
+    " ", "As Template",                        "Save current settings as new template"
   },
   {
-    -1,                                        ED_SETTINGS_YPOS(14),
+    -1,                                        ED_SETTINGS_YPOS(13),
     GADGET_ID_ADD_CHANGE_PAGE,         GADGET_ID_NEXT_CHANGE_PAGE,
     -1,                                        "New",
-    " ", NULL,                         "Add new config page"
+    " ", NULL,                         "Add new change page"
   },
   {
-    -1,                                        ED_SETTINGS_YPOS(14),
+    -1,                                        ED_SETTINGS_YPOS(13),
     GADGET_ID_DEL_CHANGE_PAGE,         GADGET_ID_ADD_CHANGE_PAGE,
     -1,                                        "Delete",
-    NULL, NULL,                                "Delete current config page"
+    NULL, NULL,                                "Delete current change page"
   },
 };
 
@@ -1470,17 +1633,17 @@ static struct
 {
   {
     ED_BUTTON_MINUS_XPOS,              ED_BUTTON_COUNT_YPOS,
-    ED_SETTINGS_XPOS(0),               ED_SETTINGS_YPOS(14),
+    ED_SETTINGS_XPOS(0),               ED_SETTINGS_YPOS(13),
     ED_BUTTON_COUNT_XSIZE,             ED_BUTTON_COUNT_YSIZE,
     GADGET_ID_PREV_CHANGE_PAGE,                GADGET_ID_NONE,
-    NULL, NULL,                                "select previous config page"
+    NULL, NULL,                                "select previous change page"
   },
   {
     ED_BUTTON_PLUS_XPOS,               ED_BUTTON_COUNT_YPOS,
-    -1,                                        ED_SETTINGS_YPOS(14),
+    -1,                                        ED_SETTINGS_YPOS(13),
     ED_BUTTON_COUNT_XSIZE,             ED_BUTTON_COUNT_YSIZE,
     GADGET_ID_NEXT_CHANGE_PAGE,                GADGET_ID_SELECT_CHANGE_PAGE,
-    NULL, "config page",               "select next config page"
+    NULL, "change page",               "select next change page"
   },
 };
 
@@ -1627,84 +1790,127 @@ static struct
   /* ---------- element settings: configure (various elements) ------------- */
 
   {
-    ED_SETTINGS_XPOS(0),               0,      /* set at runtime */
+    ED_SETTINGS_XPOS(0),               ED_SETTINGS_YPOS(0),
     GADGET_ID_STICK_ELEMENT,           GADGET_ID_NONE,
     &stick_element_properties_window,
     NULL,
     "stick this screen to edit content","stick this screen to edit content"
   },
   {
-    ED_SETTINGS_XPOS(0),               ED_COUNTER_YPOS(4),
+    ED_SETTINGS_XPOS(0),               ED_SETTINGS_YPOS(1),
     GADGET_ID_EM_SLIPPERY_GEMS,                GADGET_ID_NONE,
     &level.em_slippery_gems,
     NULL,
     "slip down from certain flat walls","use EM style slipping behaviour"
   },
+  {
+    ED_SETTINGS_XPOS(0),               ED_SETTINGS_YPOS(0),
+    GADGET_ID_USE_SPRING_BUG,          GADGET_ID_NONE,
+    &level.use_spring_bug,
+    NULL,
+    "use spring pushing bug",          "use odd spring pushing behaviour"
+  },
+  {
+    ED_SETTINGS_XPOS(0),               ED_SETTINGS_YPOS(0),
+    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),
+    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_MOVE_INTO_ACID,      GADGET_ID_NONE,
+    &custom_element_properties[EP_CAN_MOVE_INTO_ACID],
+    NULL,
+    "can move into acid",              "element can move into acid pool"
+  },
 
-  /* ---------- element settings: configure (custom elements) ------------- */
+  /* ---------- element settings: configure 1 (custom elements) ----------- */
 
   {
     ED_SETTINGS_XPOS(0),               ED_SETTINGS_YPOS(1),
+    GADGET_ID_CUSTOM_USE_GRAPHIC,      GADGET_ID_NONE,
+    &custom_element.use_gfx_element,
+    NULL, "use graphic of element:",   "use graphic for custom element"
+  },
+  {
+    ED_SETTINGS_XPOS(0),               ED_SETTINGS_YPOS(2),
+    GADGET_ID_CUSTOM_USE_TEMPLATE,     GADGET_ID_NONE,
+    &level.use_custom_template,
+    NULL, "use template",              "use template for custom properties"
+  },
+  {
+    ED_SETTINGS_XPOS(0),               ED_SETTINGS_YPOS(3),
     GADGET_ID_CUSTOM_ACCESSIBLE,       GADGET_ID_NONE,
     &custom_element_properties[EP_ACCESSIBLE],
     NULL, NULL,                                "player can walk to or pass this field"
   },
   {
-    ED_SETTINGS_XPOS(0),               ED_SETTINGS_YPOS(2),
+    ED_SETTINGS_XPOS(0),               ED_SETTINGS_YPOS(5),
     GADGET_ID_CUSTOM_WALK_TO_OBJECT,   GADGET_ID_NONE,
     &custom_element_properties[EP_WALK_TO_OBJECT],
     NULL, NULL,                                "player can dig/collect/push element"
   },
   {
-    ED_SETTINGS_XPOS(0),               ED_SETTINGS_YPOS(5),
+    ED_SETTINGS_XPOS(0),               ED_SETTINGS_YPOS(8),
     GADGET_ID_CUSTOM_CAN_MOVE,         GADGET_ID_NONE,
     &custom_element_properties[EP_CAN_MOVE],
     NULL, NULL,                                "element can move in some direction"
   },
   {
-    ED_SETTINGS_XPOS(0),               ED_SETTINGS_YPOS(10),
+    ED_SETTINGS_XPOS(0),               ED_SETTINGS_YPOS(13),
     GADGET_ID_CUSTOM_CAN_FALL,         GADGET_ID_NONE,
     &custom_element_properties[EP_CAN_FALL],
     NULL, "can fall",                  "element can fall down"
   },
   {
-    -1,                                        ED_SETTINGS_YPOS(10),
+    -1,                                        ED_SETTINGS_YPOS(13),
     GADGET_ID_CUSTOM_CAN_SMASH,                GADGET_ID_CUSTOM_CAN_FALL,
     &custom_element_properties[EP_CAN_SMASH],
     " ", NULL,                         "element can smash other elements"
   },
   {
-    ED_SETTINGS_XPOS(0),               ED_SETTINGS_YPOS(11),
+    ED_SETTINGS_XPOS(0),               ED_SETTINGS_YPOS(14),
     GADGET_ID_CUSTOM_SLIPPERY,         GADGET_ID_NONE,
     &custom_element_properties[EP_SLIPPERY],
     NULL, NULL,                                "other elements can fall down from it"
   },
+
+  /* ---------- element settings: configure 2 (custom elements) ----------- */
+
   {
-    ED_SETTINGS_XPOS(0),               ED_SETTINGS_YPOS(12),
+    ED_SETTINGS_XPOS(0),               ED_SETTINGS_YPOS(1),
     GADGET_ID_CUSTOM_DEADLY,           GADGET_ID_NONE,
     &custom_element_properties[EP_DEADLY],
     NULL, NULL,                                "element can kill the player"
   },
   {
-    ED_SETTINGS_XPOS(0),               ED_SETTINGS_YPOS(13),
+    ED_SETTINGS_XPOS(0),               ED_SETTINGS_YPOS(2),
     GADGET_ID_CUSTOM_EXPLODE_RESULT,   GADGET_ID_NONE,
     &custom_element_properties[EP_EXPLODE_RESULT],
     NULL, NULL,                                "set consistency/destructibility"
   },
   {
-    ED_SETTINGS_XPOS(1),               ED_SETTINGS_YPOS(14),
+    ED_SETTINGS_XPOS(1),               ED_SETTINGS_YPOS(3),
     GADGET_ID_CUSTOM_EXPLODE_FIRE,     GADGET_ID_NONE,
     &custom_element.can_explode_by_fire,
     NULL, "by fire",                   "element can explode by fire/explosion"
   },
   {
-    -1,                                        ED_SETTINGS_YPOS(14),
+    -1,                                        ED_SETTINGS_YPOS(3),
     GADGET_ID_CUSTOM_EXPLODE_SMASH,    GADGET_ID_CUSTOM_EXPLODE_FIRE,
     &custom_element.can_explode_smashed,
     " ", "smashed",                    "element can explode when smashed"
   },
   {
-    -1,                                        ED_SETTINGS_YPOS(14),
+    -1,                                        ED_SETTINGS_YPOS(3),
     GADGET_ID_CUSTOM_EXPLODE_IMPACT,   GADGET_ID_CUSTOM_EXPLODE_SMASH,
     &custom_element.can_explode_impact,
     " ", "impact",                     "element can explode on impact"
@@ -1714,64 +1920,52 @@ static struct
 
   {
     ED_SETTINGS_XPOS(0),               ED_SETTINGS_YPOS(1),
-    GADGET_ID_CUSTOM_USE_GRAPHIC,      GADGET_ID_NONE,
-    &custom_element.use_gfx_element,
-    NULL, "use graphic of element:",   "use graphic for custom element"
-  },
-  {
-    ED_SETTINGS_XPOS(0),               ED_SETTINGS_YPOS(2),
     GADGET_ID_CUSTOM_CAN_CHANGE,       GADGET_ID_NONE,
     &custom_element_change.can_change,
     NULL, "element changes to:",       "element can change to other element"
   },
   {
-    ED_SETTINGS_XPOS(1),               ED_SETTINGS_YPOS(3),
+    ED_SETTINGS_XPOS(1),               ED_SETTINGS_YPOS(2),
     GADGET_ID_CHANGE_DELAY,            GADGET_ID_NONE,
     &custom_element_change_events[CE_DELAY],
     NULL, NULL,                                "element changes after delay"
   },
   {
-    ED_SETTINGS_XPOS(1),               ED_SETTINGS_YPOS(5),
+    ED_SETTINGS_XPOS(1),               ED_SETTINGS_YPOS(4),
     GADGET_ID_CHANGE_BY_DIRECT_ACT,    GADGET_ID_NONE,
     &custom_element_change_events[CE_BY_DIRECT_ACTION],
     NULL, NULL,                                "element changes by direct action"
   },
   {
-    ED_SETTINGS_XPOS(1),               ED_SETTINGS_YPOS(6),
+    ED_SETTINGS_XPOS(1),               ED_SETTINGS_YPOS(5),
     GADGET_ID_CHANGE_BY_OTHER_ACT,     GADGET_ID_NONE,
     &custom_element_change_events[CE_BY_OTHER_ACTION],
     NULL, NULL,                                "element changes by other element"
   },
   {
-    ED_SETTINGS_XPOS(1),               ED_SETTINGS_YPOS(8),
+    ED_SETTINGS_XPOS(1),               ED_SETTINGS_YPOS(7),
     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(9),
+    ED_SETTINGS_XPOS(1),               ED_SETTINGS_YPOS(8),
     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(11),
+    ED_SETTINGS_XPOS(2),               ED_SETTINGS_YPOS(10),
     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(12),
+    ED_SETTINGS_XPOS(2),               ED_SETTINGS_YPOS(11),
     GADGET_ID_CHANGE_USE_RANDOM,       GADGET_ID_NONE,
     &custom_element_change.use_random_change,
     NULL, NULL,                                "use percentage for random replace"
   },
-  {
-    ED_SETTINGS_XPOS(0),               ED_SETTINGS_YPOS(13),
-    GADGET_ID_CUSTOM_USE_TEMPLATE,     GADGET_ID_NONE,
-    &level.use_custom_template,
-    NULL, "use template",              "use template for custom properties"
-  },
 };
 
 static struct
@@ -1846,10 +2040,10 @@ static struct
   /* ---------- amoeba content --------------------------------------------- */
 
   {
-    ED_AREA_ELEM_CONTENT_XPOS,         ED_AREA_ELEM_CONTENT_YPOS,
+    ED_AREA_AMOEBA_CONTENT_XPOS,       ED_AREA_AMOEBA_CONTENT_YPOS,
     1, 1,
     GADGET_ID_AMOEBA_CONTENT,          GADGET_ID_NONE,
-    NULL, "content of amoeba",         NULL
+    "content:", NULL,                  NULL
   },
 
   /* ---------- custom graphic --------------------------------------------- */
@@ -1967,7 +2161,7 @@ static void DrawDrawingWindow();
 static void DrawLevelInfoWindow();
 static void DrawPropertiesWindow();
 static void UpdateCustomElementGraphicGadgets();
-static boolean checkPropertiesConfig();
+static boolean checkPropertiesConfig(int);
 static void CopyLevelToUndoBuffer(int);
 static void HandleDrawingAreas(struct GadgetInfo *);
 static void HandleCounterButtons(struct GadgetInfo *);
@@ -3184,6 +3378,205 @@ editor_elements_info[] =
   }
 };
 
+static struct
+{
+  short element;
+  short element_mapped;
+}
+forum_sketch_element_mapping[] =
+{
+  { EL_WALL_SLIPPERY,                  EL_WALL                 },
+  { EL_EXPANDABLE_WALL,                        EL_WALL                 },
+  { EL_EXPANDABLE_WALL_HORIZONTAL,     EL_WALL                 },
+  { EL_EXPANDABLE_WALL_VERTICAL,       EL_WALL                 },
+  { EL_EXPANDABLE_WALL_ANY,            EL_WALL                 },
+  { EL_WALL_EMERALD,                   EL_WALL                 },
+  { EL_WALL_DIAMOND,                   EL_WALL                 },
+  { EL_WALL_BD_DIAMOND,                        EL_WALL                 },
+  { EL_WALL_EMERALD_YELLOW,            EL_WALL                 },
+  { EL_WALL_EMERALD_RED,               EL_WALL                 },
+  { EL_WALL_EMERALD_PURPLE,            EL_WALL                 },
+  { EL_ACID_POOL_TOPLEFT,              EL_WALL                 },
+  { EL_ACID_POOL_TOPRIGHT,             EL_WALL                 },
+  { EL_ACID_POOL_BOTTOMLEFT,           EL_WALL                 },
+  { EL_ACID_POOL_BOTTOM,               EL_WALL                 },
+  { EL_ACID_POOL_BOTTOMRIGHT,          EL_WALL                 },
+  { EL_BD_WALL,                                EL_WALL                 },
+
+  { EL_BD_ROCK,                                EL_ROCK                 },
+
+  { EL_SP_ZONK,                                EL_ROCK                 },
+  { EL_SP_BASE,                                EL_SAND                 },
+  { EL_SP_MURPHY,                      EL_PLAYER_1             },
+  { EL_SP_INFOTRON,                    EL_EMERALD              },
+  { EL_SP_HARDWARE_GRAY,               EL_STEELWALL            },
+  { EL_SP_EXIT_CLOSED,                 EL_EXIT_OPEN            },
+  { EL_SP_DISK_ORANGE,                 EL_BOMB                 },
+  { EL_SP_DISK_RED,                    EL_BOMB                 },
+  { EL_SP_DISK_YELLOW,                 EL_BOMB                 },
+  { EL_SP_PORT_RIGHT,                  EL_GATE_1_GRAY          },
+  { EL_SP_PORT_DOWN,                   EL_GATE_1_GRAY          },
+  { EL_SP_PORT_LEFT,                   EL_GATE_1_GRAY          },
+  { EL_SP_PORT_UP,                     EL_GATE_1_GRAY          },
+  { EL_SP_GRAVITY_PORT_RIGHT,          EL_GATE_1_GRAY          },
+  { EL_SP_GRAVITY_PORT_DOWN,           EL_GATE_1_GRAY          },
+  { EL_SP_GRAVITY_PORT_LEFT,           EL_GATE_1_GRAY          },
+  { EL_SP_GRAVITY_PORT_UP,             EL_GATE_1_GRAY          },
+  { EL_SP_PORT_VERTICAL,               EL_GATE_1_GRAY          },
+  { EL_SP_PORT_HORIZONTAL,             EL_GATE_1_GRAY          },
+  { EL_SP_PORT_ANY,                    EL_GATE_1_GRAY          },
+  { EL_SP_SNIKSNAK,                    EL_BUG                  },
+  { EL_SP_ELECTRON,                    EL_SPACESHIP            },
+  { EL_SP_CHIP_SINGLE,                 EL_WALL                 },
+  { EL_SP_CHIP_LEFT,                   EL_WALL                 },
+  { EL_SP_CHIP_RIGHT,                  EL_WALL                 },
+  { EL_SP_CHIP_TOP,                    EL_WALL                 },
+  { EL_SP_CHIP_BOTTOM,                 EL_WALL                 },
+  { EL_SP_HARDWARE_BASE_1,             EL_STEELWALL            },
+  { EL_SP_HARDWARE_GREEN,              EL_STEELWALL            },
+  { EL_SP_HARDWARE_BLUE,               EL_STEELWALL            },
+  { EL_SP_HARDWARE_RED,                        EL_STEELWALL            },
+  { EL_SP_HARDWARE_YELLOW,             EL_STEELWALL            },
+  { EL_SP_HARDWARE_BASE_2,             EL_STEELWALL            },
+  { EL_SP_HARDWARE_BASE_3,             EL_STEELWALL            },
+  { EL_SP_HARDWARE_BASE_3,             EL_STEELWALL            },
+  { EL_SP_HARDWARE_BASE_4,             EL_STEELWALL            },
+  { EL_SP_HARDWARE_BASE_5,             EL_STEELWALL            },
+  { EL_SP_HARDWARE_BASE_6,             EL_STEELWALL            },
+
+  { EL_STEELWALL_SLIPPERY,             EL_STEELWALL            },
+
+  { EL_EXIT_CLOSED,                    EL_EXIT_OPEN            },
+
+  { EL_DIAMOND,                                EL_EMERALD              },
+  { EL_BD_DIAMOND,                     EL_EMERALD              },
+  { EL_EMERALD_YELLOW,                 EL_EMERALD              },
+  { EL_EMERALD_RED,                    EL_EMERALD              },
+  { EL_EMERALD_PURPLE,                 EL_EMERALD              },
+
+  { EL_AMOEBA_DEAD,                    EL_AMOEBA               },
+  { EL_AMOEBA_DROP,                    EL_AMOEBA               },
+  { EL_AMOEBA_WET,                     EL_AMOEBA               },
+  { EL_AMOEBA_DRY,                     EL_AMOEBA               },
+  { EL_AMOEBA_FULL,                    EL_AMOEBA               },
+  { EL_BD_AMOEBA,                      EL_AMOEBA               },
+  { EL_AMOEBA_TO_DIAMOND,              EL_AMOEBA               },
+
+  { EL_DYNAMITE_ACTIVE,                        EL_DYNAMITE             },
+
+  { EL_GATE_2_GRAY,                    EL_GATE_1_GRAY          },
+  { EL_GATE_3_GRAY,                    EL_GATE_1_GRAY          },
+  { EL_GATE_4_GRAY,                    EL_GATE_1_GRAY          },
+
+  { EL_EM_KEY_1,                       EL_KEY_1                },
+  { EL_EM_KEY_2,                       EL_KEY_2                },
+  { EL_EM_KEY_3,                       EL_KEY_3                },
+  { EL_EM_KEY_4,                       EL_KEY_4                },
+
+  { EL_EM_GATE_1,                      EL_GATE_1               },
+  { EL_EM_GATE_2,                      EL_GATE_2               },
+  { EL_EM_GATE_3,                      EL_GATE_3               },
+  { EL_EM_GATE_4,                      EL_GATE_4               },
+
+  { EL_EM_GATE_1_GRAY,                 EL_GATE_1_GRAY          },
+  { EL_EM_GATE_2_GRAY,                 EL_GATE_1_GRAY          },
+  { EL_EM_GATE_3_GRAY,                 EL_GATE_1_GRAY          },
+  { EL_EM_GATE_4_GRAY,                 EL_GATE_1_GRAY          },
+
+  { EL_INVISIBLE_SAND,                 EL_EMPTY                },
+  { EL_INVISIBLE_WALL,                 EL_EMPTY                },
+  { EL_INVISIBLE_STEELWALL,            EL_EMPTY                },
+
+  { EL_PACMAN,                         EL_YAMYAM               },
+  { EL_DARK_YAMYAM,                    EL_YAMYAM               },
+
+  { EL_BD_MAGIC_WALL,                  EL_MAGIC_WALL           },
+
+  { EL_DYNABOMB_INCREASE_NUMBER,       EL_BOMB                 },
+  { EL_DYNABOMB_INCREASE_SIZE,         EL_BOMB                 },
+  { EL_DYNABOMB_INCREASE_POWER,                EL_BOMB                 },
+  { EL_BLACK_ORB,                      EL_BOMB                 },
+  { EL_DX_SUPABOMB,                    EL_BOMB                 },
+
+  { EL_SOKOBAN_OBJECT,                 EL_KEY_1                },
+  { EL_SOKOBAN_FIELD_EMPTY,            EL_GATE_1_GRAY          },
+  { EL_SOKOBAN_FIELD_FULL,             EL_GATE_1               },
+  { EL_SOKOBAN_FIELD_PLAYER,           EL_PLAYER_1             },
+
+  { EL_BD_BUTTERFLY_RIGHT,             EL_BD_BUTTERFLY         },
+  { EL_BD_BUTTERFLY_UP,                        EL_BD_BUTTERFLY         },
+  { EL_BD_BUTTERFLY_LEFT,              EL_BD_BUTTERFLY         },
+  { EL_BD_BUTTERFLY_DOWN,              EL_BD_BUTTERFLY         },
+
+  { EL_BD_FIREFLY_RIGHT,               EL_BD_FIREFLY           },
+  { EL_BD_FIREFLY_UP,                  EL_BD_FIREFLY           },
+  { EL_BD_FIREFLY_LEFT,                        EL_BD_FIREFLY           },
+  { EL_BD_FIREFLY_DOWN,                        EL_BD_FIREFLY           },
+
+  { EL_PLAYER_2,                       EL_PLAYER_1             },
+  { EL_PLAYER_3,                       EL_PLAYER_1             },
+  { EL_PLAYER_4,                       EL_PLAYER_1             },
+
+  { EL_BUG_RIGHT,                      EL_BUG                  },
+  { EL_BUG_UP,                         EL_BUG                  },
+  { EL_BUG_LEFT,                       EL_BUG                  },
+  { EL_BUG_DOWN,                       EL_BUG                  },
+
+  { EL_SPACESHIP_RIGHT,                        EL_SPACESHIP            },
+  { EL_SPACESHIP_UP,                   EL_SPACESHIP            },
+  { EL_SPACESHIP_LEFT,                 EL_SPACESHIP            },
+  { EL_SPACESHIP_DOWN,                 EL_SPACESHIP            },
+
+  { EL_PACMAN_RIGHT,                   EL_YAMYAM               },
+  { EL_PACMAN_UP,                      EL_YAMYAM               },
+  { EL_PACMAN_LEFT,                    EL_YAMYAM               },
+  { EL_PACMAN_DOWN,                    EL_YAMYAM               },
+
+  { -1,                                        -1                      }
+};
+
+static struct
+{
+  short element;
+  char *element_string;
+}
+forum_sketch_element_strings[] =
+{
+  { EL_PLAYER_1,               "p" },
+  { EL_EMPTY,                  "_" },
+  { EL_SAND,                   "s" },
+  { EL_ROCK,                   "b" },
+  { EL_EMERALD,                        "e" },
+  { EL_BUG,                    "u" },
+  { EL_SPACESHIP,              "h" },
+  { EL_BD_FIREFLY,             "f" },
+  { EL_BD_BUTTERFLY,           "b" },
+  { EL_AMOEBA,                 "a" },
+  { EL_YAMYAM,                 "y" },
+  { EL_WALL,                   "w" },
+  { EL_STEELWALL,              "t" },
+  { EL_MAGIC_WALL,             "m" },
+  { EL_EXIT_OPEN,              "x" },
+  { EL_DYNAMITE,               "d" },
+  { EL_KEY_1,                  "1" },
+  { EL_KEY_2,                  "2" },
+  { EL_KEY_3,                  "3" },
+  { EL_KEY_4,                  "4" },
+  { EL_GATE_1,                 "5" },
+  { EL_GATE_2,                 "6" },
+  { EL_GATE_3,                 "7" },
+  { EL_GATE_4,                 "8" },
+  { EL_GATE_1_GRAY,            "9" },
+  { EL_BOMB,                   "@" },
+  { EL_ROBOT,                  "r" },
+  { EL_ROBOT_WHEEL,            "0" },
+  { EL_NUT,                    "n" },
+  { EL_CUSTOM_1,               "c" },
+  { EL_CHAR_QUESTION,          "?" },
+
+  { -1,                                NULL }
+};
+
 
 /*
   -----------------------------------------------------------------------------
@@ -4116,7 +4509,7 @@ static void CreateTextbuttonGadgets()
 
     event_mask = GD_EVENT_RELEASED;
 
-    if (id >= GADGET_ID_PROPERTIES_INFO && id <= GADGET_ID_PROPERTIES_ADVANCED)
+    if (id >= GADGET_ID_PROPERTIES_INFO && id <= GADGET_ID_PROPERTIES_CHANGE)
     {
       gd_x1 = DOOR_GFX_PAGEX4 + ED_TEXTBUTTON_TAB_XPOS;
       gd_x2 = DOOR_GFX_PAGEX3 + ED_TEXTBUTTON_TAB_XPOS;
@@ -4461,8 +4854,10 @@ void FreeLevelEditorGadgets()
 static void MapCounterButtons(int id)
 {
   int gadget_id_down = counterbutton_info[id].gadget_id_down;
+  int gadget_id_text = counterbutton_info[id].gadget_id_text;
   int gadget_id_up   = counterbutton_info[id].gadget_id_up;
   struct GadgetInfo *gi_down = level_editor_gadget[gadget_id_down];
+  struct GadgetInfo *gi_text = level_editor_gadget[gadget_id_text];
   struct GadgetInfo *gi_up   = level_editor_gadget[gadget_id_up];
 #if 0
   char infotext[MAX_OUTPUT_LINESIZE + 1];
@@ -4480,9 +4875,19 @@ static void MapCounterButtons(int id)
   int x_right = gi_up->x + gi_up->width + xoffset_right;
   int y_above = gi_down->y - yoffset_above;
   int x = gi_down->x;
-  int y = gi_up->y + yoffset;
+  int y;       /* set after gadget position was modified */
 #endif
 
+  /* set position for "score" counter gadget */
+  if (id == ED_COUNTER_ID_ELEMENT_SCORE)
+  {
+    ModifyGadget(gi_down, GDI_Y, SY + counterbutton_info[id].y, GDI_END);
+    ModifyGadget(gi_text, GDI_Y, SY + counterbutton_info[id].y, GDI_END);
+    ModifyGadget(gi_up,   GDI_Y, SY + counterbutton_info[id].y, GDI_END);
+  }
+
+  y = gi_up->y + yoffset;
+
   if (counterbutton_info[id].text_above)
     DrawText(x, y_above, counterbutton_info[id].text_above, FONT_TEXT_1);
 
@@ -4494,9 +4899,9 @@ static void MapCounterButtons(int id)
 
   ModifyEditorCounter(id, *counterbutton_info[id].value);
 
-  MapGadget(level_editor_gadget[counterbutton_info[id].gadget_id_down]);
-  MapGadget(level_editor_gadget[counterbutton_info[id].gadget_id_text]);
-  MapGadget(level_editor_gadget[counterbutton_info[id].gadget_id_up]);
+  MapGadget(gi_down);
+  MapGadget(gi_text);
+  MapGadget(gi_up);
 }
 
 static void MapControlButtons()
@@ -4683,11 +5088,13 @@ static void MapCheckbuttonGadget(int id)
   int yoffset = ED_BORDER_SIZE;
   int x_left = gi->x - xoffset_left;
   int x_right = gi->x + gi->width + xoffset_right;
-  int y = gi->y + yoffset;
+  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)
+    ModifyGadget(gi, GDI_Y, SY + checkbutton_info[id].y, GDI_END);
 
-  /* special case needed for "sticky" gadget */
-  ModifyGadget(gi, GDI_CHECKED, *checkbutton_info[id].value,
-              GDI_Y, SY + checkbutton_info[id].y, GDI_END);
   y = gi->y + yoffset;
 
   if (checkbutton_info[id].text_left)
@@ -4696,6 +5103,8 @@ static void MapCheckbuttonGadget(int id)
   if (checkbutton_info[id].text_right)
     DrawText(x_right, y, checkbutton_info[id].text_right, FONT_TEXT_1);
 
+  ModifyGadget(gi, GDI_CHECKED, *checkbutton_info[id].value, GDI_END);
+
   MapGadget(gi);
 }
 
@@ -5147,6 +5556,8 @@ static void CopyCustomElementPropertiesToEditor(int element)
      IS_ACCESSIBLE_INSIDE(element) ? EP_ACCESSIBLE_INSIDE :
      IS_ACCESSIBLE_UNDER(element) ? EP_ACCESSIBLE_UNDER :
      custom_element.access_layer);
+  custom_element.access_protected =
+    (IS_PROTECTED(element) ? 1 : 0);
   custom_element_properties[EP_ACCESSIBLE] =
     (IS_ACCESSIBLE_OVER(element) ||
      IS_ACCESSIBLE_INSIDE(element) ||
@@ -5250,12 +5661,34 @@ static void CopyGroupElementPropertiesToEditor(int element)
   custom_element = element_info[element];      /* needed for description */
 }
 
+static void CopyClassicElementPropertiesToEditor(int element)
+{
+#if 1
+  if (COULD_MOVE_INTO_ACID(element))
+    custom_element_properties[EP_CAN_MOVE_INTO_ACID] =
+      getMoveIntoAcidProperty(&level, element);
+
+#else
+
+  if (COULD_MOVE_INTO_ACID(element))
+  {
+    int bit_nr = get_special_property_bit(element, EP_CAN_MOVE_INTO_ACID);
+
+    if (bit_nr > -1)
+      custom_element_properties[EP_CAN_MOVE_INTO_ACID] =
+       ((level.can_move_into_acid & (1 << bit_nr)) != 0);
+  }
+#endif
+}
+
 static void CopyElementPropertiesToEditor(int element)
 {
   if (IS_CUSTOM_ELEMENT(element))
     CopyCustomElementPropertiesToEditor(element);
   else if (IS_GROUP_ELEMENT(element))
     CopyGroupElementPropertiesToEditor(element);
+  else
+    CopyClassicElementPropertiesToEditor(element);
 }
 
 static void CopyCustomElementPropertiesToGame(int element)
@@ -5299,6 +5732,9 @@ static void CopyCustomElementPropertiesToGame(int element)
                           (custom_element.access_layer - EP_ACCESSIBLE_OVER));
   custom_element_properties[access_type_and_layer] =
     custom_element_properties[EP_ACCESSIBLE];
+  custom_element_properties[EP_PROTECTED] =
+    (custom_element.access_protected != 0 &&
+     custom_element_properties[EP_ACCESSIBLE]);
 
   /* set walk-to-object property from checkbox and selectbox */
   custom_element_properties[EP_DIGGABLE] = FALSE;
@@ -5401,12 +5837,38 @@ static void CopyGroupElementPropertiesToGame(int element)
   element_info[element].modified_settings = TRUE;
 }
 
+static void CopyClassicElementPropertiesToGame(int element)
+{
+#if 1
+  if (COULD_MOVE_INTO_ACID(element))
+    setMoveIntoAcidProperty(&level, element,
+                           custom_element_properties[EP_CAN_MOVE_INTO_ACID]);
+
+#else
+
+  if (COULD_MOVE_INTO_ACID(element))
+  {
+    int bit_nr = get_special_property_bit(element, EP_CAN_MOVE_INTO_ACID);
+
+    if (bit_nr > -1)
+    {
+      level.can_move_into_acid &= ~(1 << bit_nr);
+
+      if (custom_element_properties[EP_CAN_MOVE_INTO_ACID])
+       level.can_move_into_acid |= (1 << bit_nr);
+    }
+  }
+#endif
+}
+
 static void CopyElementPropertiesToGame(int element)
 {
   if (IS_CUSTOM_ELEMENT(element))
     CopyCustomElementPropertiesToGame(element);
   else if (IS_GROUP_ELEMENT(element))
     CopyGroupElementPropertiesToGame(element);
+  else
+    CopyClassicElementPropertiesToGame(element);
 }
 
 void DrawLevelEd()
@@ -5985,12 +6447,12 @@ static void DrawPropertiesTabulatorGadgets()
   Pixel tab_color = GetPixel(gd->bitmap, gd_x, gd_y);
   int id_first = ED_TEXTBUTTON_ID_PROPERTIES_INFO;
   int id_last  = ED_TEXTBUTTON_ID_PROPERTIES_CONFIG;
+  int max_tabs = 4;
   int i;
 
   /* draw additional "advanced" tabulator for custom elements */
-  if (IS_CUSTOM_ELEMENT(properties_element) ||
-      IS_GROUP_ELEMENT(properties_element))
-    id_last = ED_TEXTBUTTON_ID_PROPERTIES_ADVANCED;
+  if (IS_CUSTOM_ELEMENT(properties_element))
+    id_last = ED_TEXTBUTTON_ID_PROPERTIES_CHANGE;
 
   for (i = id_first; i <= id_last; i++)
   {
@@ -5998,6 +6460,11 @@ static void DrawPropertiesTabulatorGadgets()
     struct GadgetInfo *gi = level_editor_gadget[gadget_id];
     boolean active = (i != edit_mode_properties);
 
+    /* use "config 1" and "config 2" instead of "config" */
+    if (i == ED_TEXTBUTTON_ID_PROPERTIES_CONFIG &&
+       IS_CUSTOM_ELEMENT(properties_element))
+      continue;
+
     /* draw background line below tabulator button */
     ClearRectangleOnBackground(drawto, gi->x, gi->y + gi->height, gi->width,1);
 
@@ -6012,7 +6479,7 @@ static void DrawPropertiesTabulatorGadgets()
   /* draw little border line below tabulator buttons */
   if (tab_color != BLACK_PIXEL)                        /* black => transparent */
     FillRectangle(drawto, gd_gi->x, gd_gi->y + gd_gi->height + 1,
-                 3 * gd_gi->width + 2 * ED_GADGET_DISTANCE,
+                 max_tabs * gd_gi->width + (max_tabs -1) * ED_GADGET_DISTANCE,
                  ED_GADGET_DISTANCE, tab_color);
 }
 
@@ -6166,19 +6633,23 @@ static struct
   { EL_DIAMOND,                &level.score[SC_DIAMOND],       TEXT_COLLECTING },
   { EL_CRYSTAL,                &level.score[SC_CRYSTAL],       TEXT_COLLECTING },
   { EL_PEARL,          &level.score[SC_PEARL],         TEXT_COLLECTING },
+  { EL_BUG,            &level.score[SC_BUG],           TEXT_SMASHING   },
   { EL_BUG_RIGHT,      &level.score[SC_BUG],           TEXT_SMASHING   },
   { EL_BUG_UP,         &level.score[SC_BUG],           TEXT_SMASHING   },
   { EL_BUG_LEFT,       &level.score[SC_BUG],           TEXT_SMASHING   },
   { EL_BUG_DOWN,       &level.score[SC_BUG],           TEXT_SMASHING   },
+  { EL_BD_BUTTERFLY,   &level.score[SC_BUG],           TEXT_SMASHING   },
   { EL_BD_BUTTERFLY_RIGHT,&level.score[SC_BUG],                TEXT_SMASHING   },
   { EL_BD_BUTTERFLY_UP,   &level.score[SC_BUG],                TEXT_SMASHING   },
   { EL_BD_BUTTERFLY_LEFT, &level.score[SC_BUG],                TEXT_SMASHING   },
   { EL_BD_BUTTERFLY_DOWN, &level.score[SC_BUG],                TEXT_SMASHING   },
   { EL_SP_ELECTRON,    &level.score[SC_BUG],           TEXT_SMASHING   },
+  { EL_SPACESHIP,      &level.score[SC_SPACESHIP],     TEXT_SMASHING   },
   { EL_SPACESHIP_RIGHT,        &level.score[SC_SPACESHIP],     TEXT_SMASHING   },
   { EL_SPACESHIP_UP,   &level.score[SC_SPACESHIP],     TEXT_SMASHING   },
   { EL_SPACESHIP_LEFT, &level.score[SC_SPACESHIP],     TEXT_SMASHING   },
   { EL_SPACESHIP_DOWN, &level.score[SC_SPACESHIP],     TEXT_SMASHING   },
+  { EL_BD_FIREFLY,     &level.score[SC_SPACESHIP],     TEXT_SMASHING   },
   { EL_BD_FIREFLY_RIGHT,&level.score[SC_SPACESHIP],    TEXT_SMASHING   },
   { EL_BD_FIREFLY_UP,  &level.score[SC_SPACESHIP],     TEXT_SMASHING   },
   { EL_BD_FIREFLY_LEFT, &level.score[SC_SPACESHIP],    TEXT_SMASHING   },
@@ -6187,6 +6658,7 @@ static struct
   { EL_YAMYAM,         &level.score[SC_YAMYAM],        TEXT_SMASHING   },
   { EL_DARK_YAMYAM,    &level.score[SC_YAMYAM],        TEXT_SMASHING   },
   { EL_ROBOT,          &level.score[SC_ROBOT],         TEXT_SMASHING   },
+  { EL_PACMAN,         &level.score[SC_PACMAN],        TEXT_SMASHING   },
   { EL_PACMAN_RIGHT,   &level.score[SC_PACMAN],        TEXT_SMASHING   },
   { EL_PACMAN_UP,      &level.score[SC_PACMAN],        TEXT_SMASHING   },
   { EL_PACMAN_LEFT,    &level.score[SC_PACMAN],        TEXT_SMASHING   },
@@ -6223,19 +6695,22 @@ static struct
   { -1,                        NULL,                           NULL            }
 };
 
-static boolean checkPropertiesConfig()
+static boolean checkPropertiesConfig(int element)
 {
   int i;
 
-  if (IS_GEM(properties_element) ||
-      IS_CUSTOM_ELEMENT(properties_element) ||
-      IS_GROUP_ELEMENT(properties_element) ||
-      IS_ENVELOPE(properties_element) ||
-      HAS_CONTENT(properties_element))
+  if (IS_GEM(element) ||
+      IS_CUSTOM_ELEMENT(element) ||
+      IS_GROUP_ELEMENT(element) ||
+      IS_ENVELOPE(element) ||
+      ELEM_IS_PLAYER(element) ||
+      HAS_CONTENT(element) ||
+      COULD_MOVE_INTO_ACID(element) ||
+      element == EL_SPRING)
     return TRUE;
   else
     for (i = 0; elements_with_counter[i].element != -1; i++)
-      if (elements_with_counter[i].element == properties_element)
+      if (elements_with_counter[i].element == element)
        return TRUE;
 
   return FALSE;
@@ -6245,7 +6720,7 @@ static void DrawPropertiesConfig()
 {
   int i;
 
-  if (!checkPropertiesConfig())
+  if (!checkPropertiesConfig(properties_element))
   {
     PrintInfoText("No configuration options available.", FONT_TEXT_1, 0);
 
@@ -6259,8 +6734,13 @@ static void DrawPropertiesConfig()
     {
       int counter_id = ED_COUNTER_ID_ELEMENT_SCORE;
 
+      counterbutton_info[counter_id].y =
+       ED_SETTINGS_YPOS((HAS_CONTENT(properties_element) ? 1 : 0) +
+                        (COULD_MOVE_INTO_ACID(properties_element) ? 1 : 0));
+
       counterbutton_info[counter_id].value = elements_with_counter[i].value;
       counterbutton_info[counter_id].text_right= elements_with_counter[i].text;
+
       MapCounterButtons(counter_id);
 
       break;
@@ -6270,9 +6750,7 @@ static void DrawPropertiesConfig()
   if (HAS_CONTENT(properties_element))
   {
     /* draw stickybutton gadget */
-    i = ED_CHECKBUTTON_ID_STICK_ELEMENT;
-    checkbutton_info[i].y = ED_COUNTER_YPOS(4);
-    MapCheckbuttonGadget(i);
+    MapCheckbuttonGadget(ED_CHECKBUTTON_ID_STICK_ELEMENT);
 
     if (IS_AMOEBOID(properties_element))
       MapDrawingArea(ED_DRAWING_ID_AMOEBA_CONTENT);
@@ -6280,9 +6758,28 @@ static void DrawPropertiesConfig()
       DrawElementContentAreas();
   }
 
+  if (ELEM_IS_PLAYER(properties_element))
+    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);
 
+  if (COULD_MOVE_INTO_ACID(properties_element) &&
+      (!IS_CUSTOM_ELEMENT(properties_element) ||
+       edit_mode_properties == ED_MODE_PROPERTIES_CONFIG_2))
+  {
+    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);
+
+    MapCheckbuttonGadget(ED_CHECKBUTTON_ID_CAN_MOVE_INTO_ACID);
+  }
+
+  if (properties_element == EL_SPRING)
+    MapCheckbuttonGadget(ED_CHECKBUTTON_ID_USE_SPRING_BUG);
+
   if (IS_ENVELOPE(properties_element))
   {
     int counter1_id = ED_COUNTER_ID_ENVELOPE_XSIZE;
@@ -6302,53 +6799,90 @@ static void DrawPropertiesConfig()
   if (IS_CUSTOM_ELEMENT(properties_element))
   {
     /* draw stickybutton gadget */
-    i = ED_CHECKBUTTON_ID_STICK_ELEMENT;
-    checkbutton_info[i].y = ED_SETTINGS_YPOS(0);
-    MapCheckbuttonGadget(i);
+    MapCheckbuttonGadget(ED_CHECKBUTTON_ID_STICK_ELEMENT);
 
-    /* draw checkbutton gadgets */
-    for (i =  ED_CHECKBUTTON_ID_CUSTOM_FIRST;
-        i <= ED_CHECKBUTTON_ID_CUSTOM_LAST; i++)
-      MapCheckbuttonGadget(i);
+    if (edit_mode_properties == ED_MODE_PROPERTIES_CONFIG_1)
+    {
+      /* draw checkbutton gadgets */
+      for (i =  ED_CHECKBUTTON_ID_CUSTOM1_FIRST;
+          i <= ED_CHECKBUTTON_ID_CUSTOM1_LAST; i++)
+       MapCheckbuttonGadget(i);
+
+      /* draw counter gadgets */
+      for (i =  ED_COUNTER_ID_CUSTOM1_FIRST;
+          i <= ED_COUNTER_ID_CUSTOM1_LAST; i++)
+       MapCounterButtons(i);
+
+      /* draw selectbox gadgets */
+      for (i =  ED_SELECTBOX_ID_CUSTOM1_FIRST;
+          i <= ED_SELECTBOX_ID_CUSTOM1_LAST; i++)
+       MapSelectboxGadget(i);
+
+      /* draw textbutton gadgets */
+      MapTextbuttonGadget(ED_TEXTBUTTON_ID_SAVE_AS_TEMPLATE);
+
+      /* draw text input gadgets */
+      MapTextInputGadget(ED_TEXTINPUT_ID_ELEMENT_NAME);
+
+      /* draw drawing area gadgets */
+      MapDrawingArea(ED_DRAWING_ID_CUSTOM_GRAPHIC);
+      MapDrawingArea(ED_DRAWING_ID_CUSTOM_MOVE_ENTER);
+      MapDrawingArea(ED_DRAWING_ID_CUSTOM_MOVE_LEAVE);
+    }
+    else if (edit_mode_properties == ED_MODE_PROPERTIES_CONFIG_2)
+    {
+      /* set position for special checkbutton for "can move into acid" */
 
-    /* draw counter gadgets */
-    for (i = ED_COUNTER_ID_CUSTOM_FIRST; i <= ED_COUNTER_ID_CUSTOM_LAST; i++)
-      MapCounterButtons(i);
+      /* draw checkbutton gadgets */
+      for (i =  ED_CHECKBUTTON_ID_CUSTOM2_FIRST;
+          i <= ED_CHECKBUTTON_ID_CUSTOM2_LAST; i++)
+       MapCheckbuttonGadget(i);
 
-    /* draw selectbox gadgets */
-    for (i=ED_SELECTBOX_ID_CUSTOM_FIRST; i <= ED_SELECTBOX_ID_CUSTOM_LAST; i++)
-      MapSelectboxGadget(i);
+      /* draw counter gadgets */
+      for (i =  ED_COUNTER_ID_CUSTOM2_FIRST;
+          i <= ED_COUNTER_ID_CUSTOM2_LAST; i++)
+       MapCounterButtons(i);
 
-    /* draw drawing area gadgets */
-    DrawCustomContentArea();
-    MapDrawingArea(ED_DRAWING_ID_CUSTOM_MOVE_ENTER);
-    MapDrawingArea(ED_DRAWING_ID_CUSTOM_MOVE_LEAVE);
+      /* draw selectbox gadgets */
+      for (i =  ED_SELECTBOX_ID_CUSTOM2_FIRST;
+          i <= ED_SELECTBOX_ID_CUSTOM2_LAST; i++)
+       MapSelectboxGadget(i);
 
-    /* draw text input gadgets */
-    MapTextInputGadget(ED_TEXTINPUT_ID_ELEMENT_NAME);
+      /* draw drawing area gadgets */
+      DrawCustomContentArea();
+    }
   }
   else if (IS_GROUP_ELEMENT(properties_element))
   {
     /* draw stickybutton gadget */
-    i = ED_CHECKBUTTON_ID_STICK_ELEMENT;
-    checkbutton_info[i].y = ED_SETTINGS_YPOS(0);
-    MapCheckbuttonGadget(i);
+    MapCheckbuttonGadget(ED_CHECKBUTTON_ID_STICK_ELEMENT);
+
+    /* draw checkbutton gadgets */
+    MapCheckbuttonGadget(ED_CHECKBUTTON_ID_CUSTOM_USE_GRAPHIC);
+    MapCheckbuttonGadget(ED_CHECKBUTTON_ID_CUSTOM_USE_TEMPLATE);
 
     /* draw counter gadgets */
     MapCounterButtons(ED_COUNTER_ID_GROUP_CONTENT);
 
+    /* draw selectbox gadgets */
+    MapSelectboxGadget(ED_SELECTBOX_ID_GROUP_CHOICE_MODE);
+
+    /* draw textbutton gadgets */
+    MapTextbuttonGadget(ED_TEXTBUTTON_ID_SAVE_AS_TEMPLATE);
+
     /* draw drawing area gadgets */
     DrawGroupElementArea(properties_element);
 
     /* draw text input gadgets */
     MapTextInputGadget(ED_TEXTINPUT_ID_ELEMENT_NAME);
+
+    /* draw drawing area gadgets */
+    MapDrawingArea(ED_DRAWING_ID_CUSTOM_GRAPHIC);
   }
 }
 
-static void DrawPropertiesAdvancedDrawingAreas()
+static void DrawPropertiesChangeDrawingAreas()
 {
-  MapDrawingArea(ED_DRAWING_ID_CUSTOM_GRAPHIC);
-
   if (IS_CUSTOM_ELEMENT(properties_element))
   {
     MapDrawingArea(ED_DRAWING_ID_CUSTOM_CHANGE_TARGET);
@@ -6360,54 +6894,40 @@ static void DrawPropertiesAdvancedDrawingAreas()
   redraw_mask |= REDRAW_FIELD;
 }
 
-static void DrawPropertiesAdvanced()
+static void DrawPropertiesChange()
 {
   int i;
 
   /* draw stickybutton gadget */
-  i = ED_CHECKBUTTON_ID_STICK_ELEMENT;
-  checkbutton_info[i].y = ED_SETTINGS_YPOS(0);
-  MapCheckbuttonGadget(i);
+  MapCheckbuttonGadget(ED_CHECKBUTTON_ID_STICK_ELEMENT);
 
-  if (IS_CUSTOM_ELEMENT(properties_element))
-  {
-    /* draw checkbutton gadgets */
-    for (i =  ED_CHECKBUTTON_ID_CHANGE_FIRST;
-        i <= ED_CHECKBUTTON_ID_CHANGE_LAST; i++)
+  /* draw checkbutton gadgets */
+  for (i =  ED_CHECKBUTTON_ID_CHANGE_FIRST;
+       i <= ED_CHECKBUTTON_ID_CHANGE_LAST; i++)
     MapCheckbuttonGadget(i);
 
-    /* draw counter gadgets */
-    for (i =  ED_COUNTER_ID_CHANGE_FIRST;
-        i <= ED_COUNTER_ID_CHANGE_LAST; i++)
-      MapCounterButtons(i);
+  /* draw counter gadgets */
+  for (i =  ED_COUNTER_ID_CHANGE_FIRST;
+       i <= ED_COUNTER_ID_CHANGE_LAST; i++)
+    MapCounterButtons(i);
 
-    /* draw selectbox gadgets */
-    for (i =  ED_SELECTBOX_ID_CHANGE_FIRST;
-        i <= ED_SELECTBOX_ID_CHANGE_LAST; i++)
-      MapSelectboxGadget(i);
+  /* draw selectbox gadgets */
+  for (i =  ED_SELECTBOX_ID_CHANGE_FIRST;
+       i <= ED_SELECTBOX_ID_CHANGE_LAST; i++)
+    MapSelectboxGadget(i);
 
-    /* draw textbutton gadgets */
-    for (i =  ED_TEXTBUTTON_ID_CHANGE_FIRST;
-        i <= ED_TEXTBUTTON_ID_CHANGE_LAST; i++)
-      MapTextbuttonGadget(i);
-
-    /* draw graphicbutton gadgets */
-    for (i =  ED_GRAPHICBUTTON_ID_CHANGE_FIRST;
-        i <= ED_GRAPHICBUTTON_ID_CHANGE_LAST; i++)
-      MapGraphicbuttonGadget(i);
-  }
-  else if (IS_GROUP_ELEMENT(properties_element))
-  {
-    /* draw checkbutton gadgets */
-    MapCheckbuttonGadget(ED_CHECKBUTTON_ID_CUSTOM_USE_GRAPHIC);
-    MapCheckbuttonGadget(ED_CHECKBUTTON_ID_CUSTOM_USE_TEMPLATE);
+  /* draw textbutton gadgets */
+  for (i =  ED_TEXTBUTTON_ID_CHANGE_FIRST;
+       i <= ED_TEXTBUTTON_ID_CHANGE_LAST; i++)
+    MapTextbuttonGadget(i);
 
-    /* draw textbutton gadgets */
-    MapTextbuttonGadget(ED_TEXTBUTTON_ID_SAVE_AS_TEMPLATE);
-  }
+  /* draw graphicbutton gadgets */
+  for (i =  ED_GRAPHICBUTTON_ID_CHANGE_FIRST;
+       i <= ED_GRAPHICBUTTON_ID_CHANGE_LAST; i++)
+    MapGraphicbuttonGadget(i);
 
   /* draw drawing area gadgets */
-  DrawPropertiesAdvancedDrawingAreas();
+  DrawPropertiesChangeDrawingAreas();
 }
 
 static void DrawElementName(int x, int y, int element)
@@ -6463,11 +6983,14 @@ static void DrawPropertiesWindow()
   stick_element_properties_window = FALSE;
 
   /* make sure that previous properties edit mode exists for this element */
-  if (edit_mode_properties == ED_MODE_PROPERTIES_ADVANCED &&
-      !IS_CUSTOM_ELEMENT(properties_element) &&
-      !IS_GROUP_ELEMENT(properties_element))
+  if (edit_mode_properties > ED_MODE_PROPERTIES_CONFIG &&
+      !IS_CUSTOM_ELEMENT(properties_element))
     edit_mode_properties = ED_MODE_PROPERTIES_CONFIG;
 
+  if (edit_mode_properties == ED_MODE_PROPERTIES_CONFIG &&
+      IS_CUSTOM_ELEMENT(properties_element))
+    edit_mode_properties = ED_MODE_PROPERTIES_CONFIG_1;
+
   CopyElementPropertiesToEditor(properties_element);
 
   UnmapLevelEditorWindowGadgets();
@@ -6494,27 +7017,34 @@ static void DrawPropertiesWindow()
 
   FrameCounter = 0;    /* restart animation frame counter */
 
-  DrawElementName((xstart + 3) * MINI_TILEX, (ystart + 1) * MINI_TILEY,
+  DrawElementName((xstart + 3) * MINI_TILEX + 1, (ystart + 1) * MINI_TILEY + 1,
                  properties_element);
 
   DrawPropertiesTabulatorGadgets();
 
   if (edit_mode_properties == ED_MODE_PROPERTIES_INFO)
     DrawPropertiesInfo();
-  else if (edit_mode_properties == ED_MODE_PROPERTIES_CONFIG)
+  else if (edit_mode_properties == ED_MODE_PROPERTIES_CHANGE)
+    DrawPropertiesChange();
+  else /* (edit_mode_properties == ED_MODE_PROPERTIES_CONFIG[_1|_2]) */
     DrawPropertiesConfig();
-  else /* edit_mode_properties == ED_MODE_PROPERTIES_ADVANCED */
-    DrawPropertiesAdvanced();
 }
 
 static void UpdateCustomElementGraphicGadgets()
 {
+  int i;
+
   ModifyEditorElementList();
   RedrawDrawingElements();
 
-  if (edit_mode == ED_MODE_PROPERTIES &&
-      edit_mode_properties == ED_MODE_PROPERTIES_ADVANCED)
-    DrawPropertiesAdvancedDrawingAreas();
+  /* force redraw of all mapped drawing area gadgets */
+  for (i = 0; i < ED_NUM_DRAWING_AREAS; i++)
+  {
+    struct GadgetInfo *gi = level_editor_gadget[drawingarea_info[i].gadget_id];
+
+    if (gi->mapped)
+      MapDrawingArea(i);
+  }
 }
 
 static void DrawLineElement(int sx, int sy, int element, boolean change_level)
@@ -6721,6 +7251,7 @@ static void SelectArea(int from_x, int from_y, int to_x, int to_y,
 #define CB_BRUSH_TO_CURSOR     1
 #define CB_BRUSH_TO_LEVEL      2
 #define CB_DELETE_OLD_CURSOR   3
+#define CB_DUMP_BRUSH          4
 
 static void CopyBrushExt(int from_x, int from_y, int to_x, int to_y,
                         int button, int mode)
@@ -6732,6 +7263,54 @@ static void CopyBrushExt(int from_x, int from_y, int to_x, int to_y,
   int new_element = BUTTON_ELEMENT(button);
   int x, y;
 
+  if (mode == CB_DUMP_BRUSH)
+  {
+    if (!draw_with_brush)
+    {
+      Error(ERR_WARN, "no brush selected");
+
+      return;
+    }
+
+    for (y = 0; y < brush_height; y++)
+    {
+      for (x = 0; x < brush_width; x++)
+      {
+       int element = brush_buffer[x][y];
+       int element_mapped = element;
+       char *element_string = "?";
+       int k;
+
+       for (k = 0; forum_sketch_element_mapping[k].element != -1; k++)
+       {
+         if (forum_sketch_element_mapping[k].element == element)
+         {
+           element_mapped = forum_sketch_element_mapping[k].element_mapped;
+           break;
+         }
+       }
+
+       if (IS_CUSTOM_ELEMENT(element))
+         element_mapped = EL_CUSTOM_1;
+
+       for (k = 0; forum_sketch_element_strings[k].element != -1; k++)
+       {
+         if (forum_sketch_element_strings[k].element == element_mapped)
+         {
+           element_string = forum_sketch_element_strings[k].element_string;
+           break;
+         }
+       }
+
+       printf("`%s", element_string);
+      }
+
+      printf("\n");
+    }
+
+    return;
+  }
+
   if (mode == CB_DELETE_OLD_CURSOR && !delete_old_brush)
     return;
 
@@ -6846,6 +7425,11 @@ static void DeleteBrushFromCursor()
   CopyBrushExt(0, 0, 0, 0, 0, CB_DELETE_OLD_CURSOR);
 }
 
+void DumpBrush()
+{
+  CopyBrushExt(0, 0, 0, 0, 0, CB_DUMP_BRUSH);
+}
+
 static void FloodFill(int from_x, int from_y, int fill_element)
 {
   int i,x,y;
@@ -7551,7 +8135,8 @@ static void HandleSelectboxGadgets(struct GadgetInfo *gi)
   else if ((type_id >= ED_SELECTBOX_ID_CUSTOM_FIRST &&
            type_id <= ED_SELECTBOX_ID_CUSTOM_LAST) ||
           (type_id >= ED_SELECTBOX_ID_CHANGE_FIRST &&
-           type_id <= ED_SELECTBOX_ID_CHANGE_LAST))
+           type_id <= ED_SELECTBOX_ID_CHANGE_LAST) ||
+          (type_id == ED_SELECTBOX_ID_GROUP_CHOICE_MODE))
     CopyElementPropertiesToGame(properties_element);
 }
 
@@ -7643,10 +8228,11 @@ static void HandleCheckbuttons(struct GadgetInfo *gi)
 
   *checkbutton_info[type_id].value ^= TRUE;
 
-  if ((type_id >= ED_CHECKBUTTON_ID_CUSTOM_FIRST &&
-       type_id <= ED_CHECKBUTTON_ID_CUSTOM_LAST) ||
-      (type_id >= ED_CHECKBUTTON_ID_CHANGE_FIRST &&
-       type_id <= ED_CHECKBUTTON_ID_CHANGE_LAST &&
+  if (type_id == ED_CHECKBUTTON_ID_CAN_MOVE_INTO_ACID ||
+      (((type_id >= ED_CHECKBUTTON_ID_CUSTOM_FIRST &&
+        type_id <= ED_CHECKBUTTON_ID_CUSTOM_LAST) ||
+       (type_id >= ED_CHECKBUTTON_ID_CHANGE_FIRST &&
+        type_id <= ED_CHECKBUTTON_ID_CHANGE_LAST)) &&
        type_id != ED_CHECKBUTTON_ID_CUSTOM_USE_TEMPLATE))
   {
     CopyElementPropertiesToGame(properties_element);