rnd-20030707-1-src
[rocksndiamonds.git] / src / editor.c
index 4696db8b4d878a4ff764de6f5a4753f3d3951dc9..bfea8ee4ecf41ee3fd9e44f09d0a9a3989e269f6 100644 (file)
 #define GADGET_ID_CUSTOM_MOVE_DIRECTION        (GADGET_ID_SELECTBOX_FIRST + 4)
 #define GADGET_ID_CUSTOM_MOVE_STEPSIZE (GADGET_ID_SELECTBOX_FIRST + 5)
 #define GADGET_ID_CUSTOM_SMASH_TARGETS (GADGET_ID_SELECTBOX_FIRST + 6)
-#define GADGET_ID_CUSTOM_ACCESS_TYPE   (GADGET_ID_SELECTBOX_FIRST + 7)
-#define GADGET_ID_CUSTOM_ACCESS_LAYER  (GADGET_ID_SELECTBOX_FIRST + 8)
-#define GADGET_ID_CHANGE_TIME_UNITS    (GADGET_ID_SELECTBOX_FIRST + 9)
-#define GADGET_ID_CHANGE_PLAYER_ACTION (GADGET_ID_SELECTBOX_FIRST + 10)
-#define GADGET_ID_CHANGE_COLLIDE_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_CUSTOM_SLIPPERY_TYPE (GADGET_ID_SELECTBOX_FIRST + 7)
+#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)
 
 /* textbutton identifiers */
-#define GADGET_ID_TEXTBUTTON_FIRST     (GADGET_ID_SELECTBOX_FIRST + 14)
+#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 ED_SELECTBOX_ID_CUSTOM_MOVE_DIRECTION  4
 #define ED_SELECTBOX_ID_CUSTOM_MOVE_STEPSIZE   5
 #define ED_SELECTBOX_ID_CUSTOM_SMASH_TARGETS   6
-#define ED_SELECTBOX_ID_CUSTOM_ACCESS_TYPE     7
-#define ED_SELECTBOX_ID_CUSTOM_ACCESS_LAYER    8
-#define ED_SELECTBOX_ID_CHANGE_TIME_UNITS      9
-#define ED_SELECTBOX_ID_CHANGE_PLAYER_ACTION   10
-#define ED_SELECTBOX_ID_CHANGE_COLLIDE_ACTION  11
-#define ED_SELECTBOX_ID_CHANGE_OTHER_ACTION    12
-#define ED_SELECTBOX_ID_CHANGE_POWER           13
+#define ED_SELECTBOX_ID_CUSTOM_SLIPPERY_TYPE   7
+#define ED_SELECTBOX_ID_CUSTOM_ACCESS_TYPE     8
+#define ED_SELECTBOX_ID_CUSTOM_ACCESS_LAYER    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_NUM_SELECTBOX                       14
+#define ED_NUM_SELECTBOX                       15
 
 #define ED_SELECTBOX_ID_CUSTOM_FIRST   ED_SELECTBOX_ID_CUSTOM_WALK_TO_ACTION
 #define ED_SELECTBOX_ID_CUSTOM_LAST    ED_SELECTBOX_ID_CUSTOM_ACCESS_LAYER
@@ -962,6 +964,16 @@ static struct ValueTextInfo options_smash_targets[] =
   { -1,                                NULL                            }
 };
 
+static struct ValueTextInfo options_slippery_type[] =
+{
+  { SLIPPERY_ANY_RANDOM,       "random"                        },
+  { SLIPPERY_ANY_LEFT_RIGHT,   "left, right"                   },
+  { SLIPPERY_ANY_RIGHT_LEFT,   "right, left"                   },
+  { SLIPPERY_ONLY_LEFT,                "only left"                     },
+  { SLIPPERY_ONLY_RIGHT,       "only right"                    },
+  { -1,                                NULL                            }
+};
+
 static struct ValueTextInfo options_deadliness[] =
 {
   { EP_DONT_RUN_INTO,          "running into"                  },
@@ -1088,6 +1100,14 @@ static struct
     &custom_element.smash_targets,
     "can smash", NULL, "elements that can be smashed"
   },
+  {
+    ED_SETTINGS_XPOS(1),               ED_SETTINGS_YPOS(10),
+    GADGET_ID_CUSTOM_SLIPPERY_TYPE,
+    -1,
+    options_slippery_type,
+    &custom_element.slippery_type,
+    "slippery", NULL, "where other elements fall down"
+  },
   {
     ED_SETTINGS_XPOS(1),               ED_SETTINGS_YPOS(11),
     GADGET_ID_CUSTOM_DEADLINESS,
@@ -1367,7 +1387,7 @@ static struct
     ED_SETTINGS_XPOS(0),               ED_SETTINGS_YPOS(10),
     GADGET_ID_CUSTOM_SLIPPERY,
     &custom_element_properties[EP_SLIPPERY],
-    "slippery",                                "other elements can fall down from it"
+    NULL,                              "other elements can fall down from it"
   },
   {
     ED_SETTINGS_XPOS(0),               ED_SETTINGS_YPOS(11),
@@ -2384,10 +2404,10 @@ static char *getElementInfoText(int element)
 
   if (element < NUM_FILE_ELEMENTS)
   {
-    if (element_info[element].custom_description != NULL)
-      info_text = element_info[element].custom_description;
-    else if (strlen(element_info[element].description) > 0)
+    if (strlen(element_info[element].description) > 0)
       info_text = element_info[element].description;
+    else if (element_info[element].custom_description != NULL)
+      info_text = element_info[element].custom_description;
     else if (element_info[element].editor_description != NULL)
       info_text = element_info[element].editor_description;
   }
@@ -5926,7 +5946,11 @@ static void HandleTextInputGadgets(struct GadgetInfo *gi)
   strcpy(textinput_info[type_id].value, gi->text.value);
 
   if (type_id == ED_TEXTINPUT_ID_ELEMENT_NAME)
+  {
     CopyCustomElementPropertiesToGame(properties_element);
+
+    ModifyEditorElementList(); /* update changed button info text */
+  }
 }
 
 static void HandleSelectboxGadgets(struct GadgetInfo *gi)