rnd-20030902-B-src
authorHolger Schemel <info@artsoft.org>
Tue, 2 Sep 2003 19:28:43 +0000 (21:28 +0200)
committerHolger Schemel <info@artsoft.org>
Sat, 30 Aug 2014 08:43:38 +0000 (10:43 +0200)
src/conftime.h
src/editor.c
src/files.c
src/game.c
src/main.h

index e8d827758ad31ff0789124fa1fa1bc3e4d8986a2..a055fc9d2b24210775ab782f1e397992ff73dd4b 100644 (file)
@@ -1 +1 @@
-#define COMPILE_DATE_STRING "[2003-09-01 23:03]"
+#define COMPILE_DATE_STRING "[2003-09-02 21:26]"
index 636e21dc3297ee15e67979aba4072c06a2c8f9d3..5e657368d04a413c88d26d4cbcbb4e7727d416bb 100644 (file)
 #define ED_AREA_ELEM_CONTENT4_YPOS     (ED_SETTINGS_YPOS(12) + \
                                         ED_GADGET_DISTANCE - MINI_TILEY)
 /* custom change trigger element */
-#define ED_AREA_ELEM_CONTENT5_YPOS     (ED_SETTINGS_YPOS(7) + \
+#define ED_AREA_ELEM_CONTENT5_YPOS     (ED_SETTINGS_YPOS(6) + \
                                         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)
 
 /* values for random placement background drawing area */
 #define GADGET_ID_CUSTOM_ACCESS_TYPE   (GADGET_ID_SELECTBOX_FIRST + 8)
 #define GADGET_ID_CUSTOM_ACCESS_LAYER  (GADGET_ID_SELECTBOX_FIRST + 9)
 #define GADGET_ID_CHANGE_TIME_UNITS    (GADGET_ID_SELECTBOX_FIRST + 10)
-#define GADGET_ID_CHANGE_PLAYER_ACTION (GADGET_ID_SELECTBOX_FIRST + 11)
-#define GADGET_ID_CHANGE_COLLIDE_ACTION        (GADGET_ID_SELECTBOX_FIRST + 12)
-#define GADGET_ID_CHANGE_OTHER_ACTION  (GADGET_ID_SELECTBOX_FIRST + 13)
-#define GADGET_ID_CHANGE_POWER         (GADGET_ID_SELECTBOX_FIRST + 14)
-#define GADGET_ID_SELECT_CHANGE_PAGE   (GADGET_ID_SELECTBOX_FIRST + 15)
+#define GADGET_ID_CHANGE_DIRECT_ACTION (GADGET_ID_SELECTBOX_FIRST + 11)
+#define GADGET_ID_CHANGE_OTHER_ACTION  (GADGET_ID_SELECTBOX_FIRST + 12)
+#define GADGET_ID_CHANGE_POWER         (GADGET_ID_SELECTBOX_FIRST + 13)
+#define GADGET_ID_SELECT_CHANGE_PAGE   (GADGET_ID_SELECTBOX_FIRST + 14)
 
 /* textbutton identifiers */
-#define GADGET_ID_TEXTBUTTON_FIRST     (GADGET_ID_SELECTBOX_FIRST + 16)
+#define GADGET_ID_TEXTBUTTON_FIRST     (GADGET_ID_SELECTBOX_FIRST + 15)
 
 #define GADGET_ID_PROPERTIES_INFO      (GADGET_ID_TEXTBUTTON_FIRST + 0)
 #define GADGET_ID_PROPERTIES_CONFIG    (GADGET_ID_TEXTBUTTON_FIRST + 1)
 #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_PLAYER     (GADGET_ID_CHECKBUTTON_FIRST + 26)
-#define GADGET_ID_CHANGE_BY_COLLISION  (GADGET_ID_CHECKBUTTON_FIRST + 27)
-#define GADGET_ID_CHANGE_BY_OTHER      (GADGET_ID_CHECKBUTTON_FIRST + 28)
+#define GADGET_ID_CHANGE_BY_DIRECT_ACT (GADGET_ID_CHECKBUTTON_FIRST + 26)
+#define GADGET_ID_CHANGE_BY_OTHER_ACT  (GADGET_ID_CHECKBUTTON_FIRST + 27)
 
 /* gadgets for buttons in element list */
-#define GADGET_ID_ELEMENTLIST_FIRST    (GADGET_ID_CHECKBUTTON_FIRST + 29)
+#define GADGET_ID_ELEMENTLIST_FIRST    (GADGET_ID_CHECKBUTTON_FIRST + 28)
 #define GADGET_ID_ELEMENTLIST_LAST     (GADGET_ID_ELEMENTLIST_FIRST +  \
                                        ED_NUM_ELEMENTLIST_BUTTONS - 1)
 
 #define ED_SELECTBOX_ID_CUSTOM_DEADLINESS      8
 #define ED_SELECTBOX_ID_CUSTOM_CONSISTENCY     9
 #define ED_SELECTBOX_ID_CHANGE_TIME_UNITS      10
-#define ED_SELECTBOX_ID_CHANGE_PLAYER_ACTION   11
-#define ED_SELECTBOX_ID_CHANGE_COLLIDE_ACTION  12
-#define ED_SELECTBOX_ID_CHANGE_OTHER_ACTION    13
-#define ED_SELECTBOX_ID_CHANGE_POWER           14
-#define ED_SELECTBOX_ID_SELECT_CHANGE_PAGE     15
+#define ED_SELECTBOX_ID_CHANGE_DIRECT_ACTION   11
+#define ED_SELECTBOX_ID_CHANGE_OTHER_ACTION    12
+#define ED_SELECTBOX_ID_CHANGE_POWER           13
+#define ED_SELECTBOX_ID_SELECT_CHANGE_PAGE     14
 
-#define ED_NUM_SELECTBOX                       16
+#define ED_NUM_SELECTBOX                       15
 
 #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_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_PLAYER     19
-#define ED_CHECKBUTTON_ID_CHANGE_BY_COLLISION  20
-#define ED_CHECKBUTTON_ID_CHANGE_BY_OTHER      21
-#define ED_CHECKBUTTON_ID_CHANGE_USE_EXPLOSION 22
-#define ED_CHECKBUTTON_ID_CHANGE_USE_CONTENT   23
-#define ED_CHECKBUTTON_ID_CHANGE_ONLY_COMPLETE 24
-#define ED_CHECKBUTTON_ID_CHANGE_USE_RANDOM    25
-#define ED_CHECKBUTTON_ID_CUSTOM_USE_TEMPLATE  26
+#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                    27
+#define ED_NUM_CHECKBUTTONS                    26
 
 #define ED_CHECKBUTTON_ID_LEVEL_FIRST  ED_CHECKBUTTON_ID_DOUBLE_SPEED
 #define ED_CHECKBUTTON_ID_LEVEL_LAST   ED_CHECKBUTTON_ID_RANDOM_RESTRICTED
@@ -944,7 +940,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,
@@ -1108,41 +1104,36 @@ static struct ValueTextInfo options_time_units[] =
   { -1,                                NULL                            }
 };
 
-static struct ValueTextInfo options_change_player_action[] =
+static struct ValueTextInfo options_change_direct_action[] =
 {
-  { CE_TOUCHED_BY_PLAYER,      "touched"                       },
-  { CE_PRESSED_BY_PLAYER,      "pressed"                       },
-  { CE_PUSHED_BY_PLAYER,       "pushed"                        },
-  { CE_DROPPED_BY_PLAYER,      "dropped"                       },
-  { -1,                                NULL                            }
-};
-
-static struct ValueTextInfo options_change_collide_action[] =
-{
-  { CE_COLLISION,              "on collision"                  },
-  { CE_IMPACT,                 "on impact"                     },
-  { CE_SMASHED,                        "when smashed"                  },
+  { CE_TOUCHED_BY_PLAYER,      "player touches it"             },
+  { CE_PRESSED_BY_PLAYER,      "player presses it"             },
+  { CE_PUSHED_BY_PLAYER,       "player pushes it"              },
+  { CE_DROPPED_BY_PLAYER,      "player drops it"               },
+  { CE_COLLISION,              "collision"                     },
+  { CE_IMPACT,                 "impact"                        },
+  { CE_SMASHED,                        "smashed"                       },
   { -1,                                NULL                            }
 };
 
 static struct ValueTextInfo options_change_other_action[] =
 {
-  { CE_OTHER_IS_TOUCHING,      "touching"                      },
-  { CE_OTHER_IS_CHANGING,      "change of"                     },
-  { CE_OTHER_IS_EXPLODING,     "explosion of"                  },
   { CE_OTHER_GETS_TOUCHED,     "player touches"                },
   { CE_OTHER_GETS_PRESSED,     "player presses"                },
   { CE_OTHER_GETS_PUSHED,      "player pushes"                 },
   { CE_OTHER_GETS_COLLECTED,   "player collects"               },
   { CE_OTHER_GETS_DROPPED,     "player drops"                  },
+  { CE_OTHER_IS_TOUCHING,      "it touches"                    },
+  { CE_OTHER_IS_CHANGING,      "change of"                     },
+  { CE_OTHER_IS_EXPLODING,     "explosion of"                  },
   { -1,                                NULL                            }
 };
 
 static struct ValueTextInfo options_change_power[] =
 {
-  { CP_NON_DESTRUCTIVE,                "non-destructive"               },
-  { CP_HALF_DESTRUCTIVE,       "half-destructive"              },
-  { CP_FULL_DESTRUCTIVE,       "full-destructive"              },
+  { CP_NON_DESTRUCTIVE,                "empty"                         },
+  { CP_HALF_DESTRUCTIVE,       "diggable"                      },
+  { CP_FULL_DESTRUCTIVE,       "destructible"                  },
   { -1,                                NULL                            }
 };
 
@@ -1171,7 +1162,7 @@ static struct
     -1,
     options_access_type,
     &custom_element.access_type,
-    "player can", NULL, "type of access to this field"
+    "player can", NULL,                        "type of access to this field"
   },
   {
     -1,                                        ED_SETTINGS_YPOS(1),
@@ -1179,7 +1170,7 @@ static struct
     -1,
     options_access_layer,
     &custom_element.access_layer,
-    NULL, NULL, "layer of access for this field"
+    NULL, NULL,                                "layer of access for this field"
   },
   {
     ED_SETTINGS_XPOS(1),               ED_SETTINGS_YPOS(2),
@@ -1187,7 +1178,7 @@ static struct
     -1,
     options_walk_to_action,
     &custom_element.walk_to_action,
-    NULL, NULL, "diggable/collectible/pushable"
+    NULL, NULL,                                "diggable/collectible/pushable"
   },
   {
     ED_SETTINGS_XPOS(1),               ED_SETTINGS_YPOS(5),
@@ -1195,7 +1186,7 @@ static struct
     -1,
     options_move_pattern,
     &custom_element.move_pattern,
-    "can move", NULL, "element move direction"
+    "can move", NULL,                  "element move direction"
   },
   {
     ED_SETTINGS_XPOS(1),               ED_SETTINGS_YPOS(6),
@@ -1203,7 +1194,7 @@ static struct
     -1,
     options_move_direction,
     &custom_element.move_direction_initial,
-    "starts moving", NULL, "initial element move direction"
+    "starts moving", NULL,             "initial element move direction"
   },
   {
     ED_SETTINGS_XPOS(1),               ED_SETTINGS_YPOS(8),
@@ -1211,7 +1202,7 @@ static struct
     -1,
     options_move_stepsize,
     &custom_element.move_stepsize,
-    "move/fall speed", NULL, "speed of element movement"
+    "move/fall speed", NULL,           "speed of element movement"
   },
   {
     -1,                                        ED_SETTINGS_YPOS(9),
@@ -1219,7 +1210,7 @@ static struct
     -1,
     options_smash_targets,
     &custom_element.smash_targets,
-    "can smash", NULL, "elements that can be smashed"
+    "can smash", NULL,                 "elements that can be smashed"
   },
   {
     ED_SETTINGS_XPOS(1),               ED_SETTINGS_YPOS(10),
@@ -1227,7 +1218,7 @@ static struct
     -1,
     options_slippery_type,
     &custom_element.slippery_type,
-    "slippery", NULL, "where other elements fall down"
+    "slippery", NULL,                  "where other elements fall down"
   },
   {
     ED_SETTINGS_XPOS(1),               ED_SETTINGS_YPOS(11),
@@ -1235,7 +1226,7 @@ static struct
     -1,
     options_deadliness,
     &custom_element.deadliness,
-    "deadly when", NULL, "deadliness of element"
+    "deadly when", NULL,               "deadliness of element"
   },
   {
     ED_SETTINGS_XPOS(1),               ED_SETTINGS_YPOS(12),
@@ -1243,7 +1234,7 @@ static struct
     -1,
     options_consistency,
     &custom_element.consistency,
-    NULL, NULL, "consistency/destructibility"
+    NULL, NULL,                                "consistency/destructibility"
   },
 
   /* ---------- element settings: advanced (custom elements) --------------- */
@@ -1254,47 +1245,39 @@ static struct
     -1,
     options_time_units,
     &custom_element_change.delay_frames,
-    "delay time given in", NULL, "delay time units for change"
+    "delay time given in", NULL,       "delay time units for change"
   },
   {
     ED_SETTINGS_XPOS(2),               ED_SETTINGS_YPOS(5),
-    GADGET_ID_CHANGE_PLAYER_ACTION,    GADGET_ID_NONE,
+    GADGET_ID_CHANGE_DIRECT_ACTION,    GADGET_ID_NONE,
     -1,
-    options_change_player_action,
-    &custom_element_change.player_action,
-    NULL, "by player", "type of player contact"
+    options_change_direct_action,
+    &custom_element_change.direct_action,
+    NULL, NULL,                                "type of direct action"
   },
   {
     ED_SETTINGS_XPOS(2),               ED_SETTINGS_YPOS(6),
-    GADGET_ID_CHANGE_COLLIDE_ACTION,   GADGET_ID_NONE,
-    -1,
-    options_change_collide_action,
-    &custom_element_change.collide_action,
-    NULL, NULL, "change after impact or smash"
-  },
-  {
-    ED_SETTINGS_XPOS(2),               ED_SETTINGS_YPOS(7),
     GADGET_ID_CHANGE_OTHER_ACTION,     GADGET_ID_NONE,
     -1,
     options_change_other_action,
     &custom_element_change.other_action,
-    NULL, "element:", "type of other element action"
+    NULL, "element:",                  "type of other element action"
   },
   {
-    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,
     &custom_element_change.power,
-    "power:", NULL, "power of extended change"
+    "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 config page"
   },
 };
 
@@ -1327,19 +1310,19 @@ static struct
     NULL, NULL,                                "Advanced element configuration"
   },
   {
-    -1,                                        ED_SETTINGS_YPOS(13),
+    -1,                                        ED_SETTINGS_YPOS(12),
     GADGET_ID_SAVE_AS_TEMPLATE,                GADGET_ID_CUSTOM_USE_TEMPLATE,
     -1,                                        "Save as template",
     " ", NULL,                         "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"
   },
   {
-    -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"
@@ -1358,14 +1341,14 @@ 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"
   },
   {
     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"
@@ -1620,48 +1603,42 @@ static struct
   },
   {
     ED_SETTINGS_XPOS(1),               ED_SETTINGS_YPOS(5),
-    GADGET_ID_CHANGE_BY_PLAYER,                GADGET_ID_NONE,
-    &custom_element_change_events[CE_BY_PLAYER],
-    NULL, NULL,                                "element changes by player contact"
+    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),
-    GADGET_ID_CHANGE_BY_COLLISION,     GADGET_ID_NONE,
-    &custom_element_change_events[CE_BY_COLLISION],
-    NULL, NULL,                                "element changes by impact or smash"
-  },
-  {
-    ED_SETTINGS_XPOS(1),               ED_SETTINGS_YPOS(7),
-    GADGET_ID_CHANGE_BY_OTHER,         GADGET_ID_NONE,
-    &custom_element_change_events[CE_BY_OTHER],
+    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, "only use complete change",  "only use complete extended content"
   },
   {
-    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 random value for new content"
   },
   {
-    ED_SETTINGS_XPOS(0),               ED_SETTINGS_YPOS(13),
+    ED_SETTINGS_XPOS(0),               ED_SETTINGS_YPOS(12),
     GADGET_ID_CUSTOM_USE_TEMPLATE,     GADGET_ID_NONE,
     &level.use_custom_template,
     NULL, "use template",              "use template for custom properties"
@@ -4544,31 +4521,28 @@ static void CopyCustomElementPropertiesToEditor(int element)
 
   /* ---------- element settings: advanced (custom elements) --------------- */
 
-  /* set change by player selectbox help value */
-  custom_element_change.player_action =
-    (HAS_CHANGE_EVENT(element, CE_DROPPED_BY_PLAYER) ? CE_DROPPED_BY_PLAYER :
-     HAS_CHANGE_EVENT(element, CE_PUSHED_BY_PLAYER) ? CE_PUSHED_BY_PLAYER :
+  /* set "change by direct action" selectbox help value */
+  custom_element_change.direct_action =
+    (HAS_CHANGE_EVENT(element, CE_TOUCHED_BY_PLAYER) ? CE_TOUCHED_BY_PLAYER :
      HAS_CHANGE_EVENT(element, CE_PRESSED_BY_PLAYER) ? CE_PRESSED_BY_PLAYER :
-     HAS_CHANGE_EVENT(element, CE_TOUCHED_BY_PLAYER) ? CE_TOUCHED_BY_PLAYER :
-     custom_element_change.player_action);
-
-  /* set change by collision selectbox help value */
-  custom_element_change.collide_action =
-    (HAS_CHANGE_EVENT(element, CE_SMASHED) ? CE_SMASHED :
-     HAS_CHANGE_EVENT(element, CE_IMPACT) ? CE_IMPACT :
+     HAS_CHANGE_EVENT(element, CE_PUSHED_BY_PLAYER) ? CE_PUSHED_BY_PLAYER :
+     HAS_CHANGE_EVENT(element, CE_DROPPED_BY_PLAYER) ? CE_DROPPED_BY_PLAYER :
      HAS_CHANGE_EVENT(element, CE_COLLISION) ? CE_COLLISION :
-     custom_element_change.collide_action);
+     HAS_CHANGE_EVENT(element, CE_IMPACT) ? CE_IMPACT :
+     HAS_CHANGE_EVENT(element, CE_SMASHED) ? CE_SMASHED :
+     custom_element_change.direct_action);
 
-  /* set change by other element action selectbox help value */
+  /* set "change by other element action" selectbox help value */
   custom_element_change.other_action =
-    (HAS_CHANGE_EVENT(element, CE_OTHER_GETS_DROPPED) ? CE_OTHER_GETS_DROPPED :
-     HAS_CHANGE_EVENT(element, CE_OTHER_GETS_COLLECTED) ? CE_OTHER_GETS_COLLECTED :
-     HAS_CHANGE_EVENT(element, CE_OTHER_GETS_PUSHED) ? CE_OTHER_GETS_PUSHED :
-     HAS_CHANGE_EVENT(element, CE_OTHER_GETS_PRESSED) ? CE_OTHER_GETS_PRESSED :
+    (
      HAS_CHANGE_EVENT(element, CE_OTHER_GETS_TOUCHED) ? CE_OTHER_GETS_TOUCHED :
-     HAS_CHANGE_EVENT(element, CE_OTHER_IS_EXPLODING) ? CE_OTHER_IS_EXPLODING :
-     HAS_CHANGE_EVENT(element, CE_OTHER_IS_CHANGING) ? CE_OTHER_IS_CHANGING :
+     HAS_CHANGE_EVENT(element, CE_OTHER_GETS_PRESSED) ? CE_OTHER_GETS_PRESSED :
+     HAS_CHANGE_EVENT(element, CE_OTHER_GETS_PUSHED) ? CE_OTHER_GETS_PUSHED :
+     HAS_CHANGE_EVENT(element, CE_OTHER_GETS_COLLECTED) ? CE_OTHER_GETS_COLLECTED :
+     HAS_CHANGE_EVENT(element, CE_OTHER_GETS_DROPPED) ? CE_OTHER_GETS_DROPPED :
      HAS_CHANGE_EVENT(element, CE_OTHER_IS_TOUCHING) ? CE_OTHER_IS_TOUCHING :
+     HAS_CHANGE_EVENT(element, CE_OTHER_IS_CHANGING) ? CE_OTHER_IS_CHANGING :
+     HAS_CHANGE_EVENT(element, CE_OTHER_IS_EXPLODING) ? CE_OTHER_IS_EXPLODING :
      custom_element_change.other_action);
 }
 
@@ -4665,15 +4639,11 @@ static void CopyCustomElementPropertiesToGame(int element)
   custom_element_change_events[CE_PRESSED_BY_PLAYER] = FALSE;
   custom_element_change_events[CE_PUSHED_BY_PLAYER] = FALSE;
   custom_element_change_events[CE_DROPPED_BY_PLAYER] = FALSE;
-  custom_element_change_events[custom_element_change.player_action] =
-    custom_element_change_events[CE_BY_PLAYER];
-
-  /* set collision change event from checkbox and selectbox */
   custom_element_change_events[CE_COLLISION] = FALSE;
   custom_element_change_events[CE_IMPACT] = FALSE;
   custom_element_change_events[CE_SMASHED] = FALSE;
-  custom_element_change_events[custom_element_change.collide_action] =
-    custom_element_change_events[CE_BY_COLLISION];
+  custom_element_change_events[custom_element_change.direct_action] =
+    custom_element_change_events[CE_BY_DIRECT_ACTION];
 
   /* set other element action change event from checkbox and selectbox */
   custom_element_change_events[CE_OTHER_IS_TOUCHING] = FALSE;
@@ -4685,7 +4655,7 @@ static void CopyCustomElementPropertiesToGame(int element)
   custom_element_change_events[CE_OTHER_GETS_COLLECTED] = FALSE;
   custom_element_change_events[CE_OTHER_GETS_DROPPED] = FALSE;
   custom_element_change_events[custom_element_change.other_action] =
-    custom_element_change_events[CE_BY_OTHER];
+    custom_element_change_events[CE_BY_OTHER_ACTION];
 
   for (i=0; i < NUM_ELEMENT_PROPERTIES; i++)
     SET_PROPERTY(element, i, custom_element_properties[i]);
index 4ef0174af5d82563ac31646637060ea587327f72..60d37ef2ac8f1a7fb26b912c6b4a5f866925000b 100644 (file)
@@ -88,8 +88,7 @@ void setElementChangeInfoToDefaults(struct ElementChangeInfo *change)
     for(y=0; y<3; y++)
       change->content[x][y] = EL_EMPTY_SPACE;
 
-  change->player_action = 0;
-  change->collide_action = 0;
+  change->direct_action = 0;
   change->other_action = 0;
 
   change->pre_change_function = NULL;
@@ -796,8 +795,8 @@ static void LoadLevel_InitElements(struct LevelInfo *level, char *filename)
     {
       int element = EL_CUSTOM_START + i;
 
-      /* order of checking events to be mapped is important */
-      for (j=CE_BY_OTHER; j >= CE_BY_PLAYER; j--)
+      /* order of checking and copying events to be mapped is important */
+      for (j=CE_BY_OTHER_ACTION; j >= CE_BY_PLAYER; j--)
       {
        if (HAS_CHANGE_EVENT(element, j - 2))
        {
@@ -806,7 +805,7 @@ static void LoadLevel_InitElements(struct LevelInfo *level, char *filename)
        }
       }
 
-      /* order of checking events to be mapped is important */
+      /* order of checking and copying events to be mapped is important */
       for (j=CE_OTHER_GETS_COLLECTED; j >= CE_COLLISION; j--)
       {
        if (HAS_CHANGE_EVENT(element, j - 1))
@@ -818,6 +817,21 @@ static void LoadLevel_InitElements(struct LevelInfo *level, char *filename)
     }
   }
 
+  /* some custom element change events get mapped since version 3.0.3 */
+  for (i=0; i < NUM_CUSTOM_ELEMENTS; i++)
+  {
+    int element = EL_CUSTOM_START + i;
+
+    if (HAS_CHANGE_EVENT(element, CE_BY_PLAYER) ||
+       HAS_CHANGE_EVENT(element, CE_BY_COLLISION))
+    {
+      SET_CHANGE_EVENT(element, CE_BY_PLAYER, FALSE);
+      SET_CHANGE_EVENT(element, CE_BY_COLLISION, FALSE);
+
+      SET_CHANGE_EVENT(element, CE_BY_DIRECT_ACTION, TRUE);
+    }
+  }
+
   /* initialize "can_change" field for old levels with only one change page */
   if (level->game_version <= VERSION_IDENT(3,0,2))
   {
@@ -2065,9 +2079,10 @@ void SaveScore(int level_nr)
 #define SETUP_TOKEN_EDITOR_EL_DX_BOULDERDASH   6
 #define SETUP_TOKEN_EDITOR_EL_CHARS            7
 #define SETUP_TOKEN_EDITOR_EL_CUSTOM           8
-#define SETUP_TOKEN_EDITOR_EL_HEADLINES                9
+#define SETUP_TOKEN_EDITOR_EL_CUSTOM_MORE      9
+#define SETUP_TOKEN_EDITOR_EL_HEADLINES                10
 
-#define NUM_EDITOR_SETUP_TOKENS                        10
+#define NUM_EDITOR_SETUP_TOKENS                        11
 
 /* shortcut setup */
 #define SETUP_TOKEN_SHORTCUT_SAVE_GAME         0
index 91c8841ab9657c815e9cdb87359febc4adf9b0d7..2ed291e2c401fa0033692e48c5fa5da7d8b3d1a7 100644 (file)
@@ -868,7 +868,7 @@ static void InitGameEngine()
       if (!ei->change_page->can_change)
        continue;
 
-      if (ei->change_page[j].events & CH_EVENT_BIT(CE_BY_OTHER))
+      if (ei->change_page[j].events & CH_EVENT_BIT(CE_BY_OTHER_ACTION))
       {
        int trigger_element = ei->change_page[j].trigger_element;
 
@@ -879,7 +879,7 @@ static void InitGameEngine()
 #else
   /* add trigger events from element change event properties */
   for (i=0; i<MAX_NUM_ELEMENTS; i++)
-    if (HAS_CHANGE_EVENT(i, CE_BY_OTHER))
+    if (HAS_CHANGE_EVENT(i, CE_BY_OTHER_ACTION))
       trigger_events[element_info[i].change->trigger_element] |=
        element_info[i].change->events;
 #endif
index 68ad89ca303d0a240c3c656f0e3d25204e26c355..3b109635003994cd4c5138e51aaa587b361638a9 100644 (file)
 #define CE_OTHER_GETS_DROPPED  15
 
 /* values for activating change events (also stored in level file!) */
-#define CE_BY_PLAYER           16
-#define CE_BY_COLLISION                17
-#define CE_BY_OTHER            18
+#define CE_BY_PLAYER           16 /* obsolete; map'd to CE_BY_DIRECT_ACTION */
+#define CE_BY_COLLISION                17 /* obsolete; map'd to CE_BY_DIRECT_ACTION */
+#define CE_BY_OTHER_ACTION     18
+#define CE_BY_DIRECT_ACTION    19
 
-#define NUM_CHANGE_EVENTS      19
+#define NUM_CHANGE_EVENTS      20
 
 #define CE_BITMASK_DEFAULT     0
 
@@ -1266,9 +1267,8 @@ struct ElementChangeInfo
 
   /* ---------- internal values used in level editor ---------- */
 
-  int player_action;           /* touched/pressed/pushed by player */
-  int collide_action;          /* collision/impact/smashed */
-  int other_action;            /* various change actions */
+  int direct_action;           /* change triggered by actions on element */
+  int other_action;            /* change triggered by other element actions */
 };
 
 struct ElementInfo