Merge branch 'master' into releases
[rocksndiamonds.git] / src / editor.c
index 2558453cb90993605a73d3686c939d5b40086a2a..8c1302cc0232b150bc5c004b6bccd13bbd16df36 100644 (file)
 #define GADGET_ID_CHANGE_PLAYER                (GADGET_ID_SELECTBOX_FIRST + 19)
 #define GADGET_ID_CHANGE_PAGE          (GADGET_ID_SELECTBOX_FIRST + 20)
 #define GADGET_ID_CHANGE_REPLACE_WHEN  (GADGET_ID_SELECTBOX_FIRST + 21)
-#define GADGET_ID_ACTION_TYPE          (GADGET_ID_SELECTBOX_FIRST + 22)
-#define GADGET_ID_ACTION_MODE          (GADGET_ID_SELECTBOX_FIRST + 23)
-#define GADGET_ID_ACTION_ARG           (GADGET_ID_SELECTBOX_FIRST + 24)
-#define GADGET_ID_SELECT_CHANGE_PAGE   (GADGET_ID_SELECTBOX_FIRST + 25)
-#define GADGET_ID_GROUP_CHOICE_MODE    (GADGET_ID_SELECTBOX_FIRST + 26)
+#define GADGET_ID_SELECT_CHANGE_PAGE   (GADGET_ID_SELECTBOX_FIRST + 22)
+#define GADGET_ID_GROUP_CHOICE_MODE    (GADGET_ID_SELECTBOX_FIRST + 23)
 
 /* textbutton identifiers */
-#define GADGET_ID_TEXTBUTTON_FIRST     (GADGET_ID_SELECTBOX_FIRST + 27)
+#define GADGET_ID_TEXTBUTTON_FIRST     (GADGET_ID_SELECTBOX_FIRST + 24)
 
 #define GADGET_ID_PROPERTIES_INFO      (GADGET_ID_TEXTBUTTON_FIRST + 0)
 #define GADGET_ID_PROPERTIES_CONFIG    (GADGET_ID_TEXTBUTTON_FIRST + 1)
 #define GADGET_ID_CHANGE_USE_EXPLOSION (GADGET_ID_CHECKBUTTON_FIRST + 33)
 #define GADGET_ID_CHANGE_ONLY_COMPLETE (GADGET_ID_CHECKBUTTON_FIRST + 34)
 #define GADGET_ID_CHANGE_USE_RANDOM    (GADGET_ID_CHECKBUTTON_FIRST + 35)
-#define GADGET_ID_CHANGE_HAS_ACTION    (GADGET_ID_CHECKBUTTON_FIRST + 36)
-#define GADGET_ID_CHANGE_DELAY         (GADGET_ID_CHECKBUTTON_FIRST + 37)
-#define GADGET_ID_CHANGE_BY_DIRECT_ACT (GADGET_ID_CHECKBUTTON_FIRST + 38)
-#define GADGET_ID_CHANGE_BY_OTHER_ACT  (GADGET_ID_CHECKBUTTON_FIRST + 39)
+#define GADGET_ID_CHANGE_DELAY         (GADGET_ID_CHECKBUTTON_FIRST + 36)
+#define GADGET_ID_CHANGE_BY_DIRECT_ACT (GADGET_ID_CHECKBUTTON_FIRST + 37)
+#define GADGET_ID_CHANGE_BY_OTHER_ACT  (GADGET_ID_CHECKBUTTON_FIRST + 38)
 
 /* gadgets for buttons in element list */
-#define GADGET_ID_ELEMENTLIST_FIRST    (GADGET_ID_CHECKBUTTON_FIRST + 40)
+#define GADGET_ID_ELEMENTLIST_FIRST    (GADGET_ID_CHECKBUTTON_FIRST + 39)
 #define GADGET_ID_ELEMENTLIST_LAST     (GADGET_ID_ELEMENTLIST_FIRST +  \
                                        ED_NUM_ELEMENTLIST_BUTTONS - 1)
 
 #define ED_SELECTBOX_ID_CHANGE_PLAYER          19
 #define ED_SELECTBOX_ID_CHANGE_PAGE            20
 #define ED_SELECTBOX_ID_CHANGE_REPLACE_WHEN    21
-#define ED_SELECTBOX_ID_ACTION_TYPE            22
-#define ED_SELECTBOX_ID_ACTION_MODE            23
-#define ED_SELECTBOX_ID_ACTION_ARG             24
-#define ED_SELECTBOX_ID_SELECT_CHANGE_PAGE     25
-#define ED_SELECTBOX_ID_GROUP_CHOICE_MODE      26
+#define ED_SELECTBOX_ID_SELECT_CHANGE_PAGE     22
+#define ED_SELECTBOX_ID_GROUP_CHOICE_MODE      23
 
-#define ED_NUM_SELECTBOX                       27
+#define ED_NUM_SELECTBOX                       24
 
 #define ED_SELECTBOX_ID_LEVEL_FIRST    ED_SELECTBOX_ID_TIME_OR_STEPS
 #define ED_SELECTBOX_ID_LEVEL_LAST     ED_SELECTBOX_ID_GAME_ENGINE_TYPE
 #define ED_CHECKBUTTON_ID_CHANGE_USE_CONTENT   34
 #define ED_CHECKBUTTON_ID_CHANGE_ONLY_COMPLETE 35
 #define ED_CHECKBUTTON_ID_CHANGE_USE_RANDOM    36
-#define ED_CHECKBUTTON_ID_CHANGE_HAS_ACTION    37
 
-#define ED_NUM_CHECKBUTTONS                    38
+#define ED_NUM_CHECKBUTTONS                    37
 
 #define ED_CHECKBUTTON_ID_LEVEL_FIRST  ED_CHECKBUTTON_ID_INITIAL_GRAVITY
 #define ED_CHECKBUTTON_ID_LEVEL_LAST   ED_CHECKBUTTON_ID_RANDOM_RESTRICTED
 #define ED_CHECKBUTTON_ID_CUSTOM_LAST  ED_CHECKBUTTON_ID_CUSTOM2_LAST
 
 #define ED_CHECKBUTTON_ID_CHANGE_FIRST ED_CHECKBUTTON_ID_CUSTOM_CAN_CHANGE
-#define ED_CHECKBUTTON_ID_CHANGE_LAST  ED_CHECKBUTTON_ID_CHANGE_HAS_ACTION
+#define ED_CHECKBUTTON_ID_CHANGE_LAST  ED_CHECKBUTTON_ID_CHANGE_USE_RANDOM
 
 /* values for radiobutton gadgets */
 #define ED_RADIOBUTTON_ID_PERCENTAGE   0
 
 /* values for elements with count for collecting */
 #define MIN_COLLECT_COUNT              0
-#define MAX_COLLECT_COUNT              255
+#define MAX_COLLECT_COUNT              100
 
 /* values for random placement */
 #define RANDOM_USE_PERCENTAGE          0
@@ -1433,7 +1425,6 @@ static struct ValueTextInfo options_change_direct_action[] =
 
   { CE_IMPACT,                 "impact (on something)"         },
   { CE_SMASHED,                        "smashed (from above)"          },
-  { CE_COUNT_AT_ZERO,          "CE count at zero"              },
 
   { -1,                                NULL                            }
 };
@@ -1456,7 +1447,6 @@ static struct ValueTextInfo options_change_other_action[] =
   { CE_SWITCH_OF_X,            "switch of"                     },
   { CE_CHANGE_OF_X,            "change by page of"             },
   { CE_EXPLOSION_OF_X,         "explosion of"                  },
-  { CE_COUNT_AT_ZERO_OF_X,     "CE count at zero of"           },
 
   { -1,                                NULL                            }
 };
@@ -1536,79 +1526,6 @@ static struct ValueTextInfo options_change_replace_when[] =
   { -1,                                NULL                            }
 };
 
-static struct ValueTextInfo options_action_type[] =
-{
-  { CA_NO_ACTION,              "no action"                     },
-  { CA_EXIT_PLAYER,            "exit player"                   },
-  { CA_KILL_PLAYER,            "kill player"                   },
-  { CA_RESTART_LEVEL,          "restart level"                 },
-  { CA_SHOW_ENVELOPE,          "show envelope"                 },
-  { CA_ADD_KEY,                        "add key"                       },
-  { CA_DEL_KEY,                        "remove key"                    },
-  { CA_SET_PLAYER_SPEED,       "set player speed"              },
-  { CA_SET_GEMS,               "set gems"                      },
-  { CA_SET_TIME,               "set time"                      },
-  { CA_SET_SCORE,              "set score"                     },
-  { CA_SET_CE_SCORE,           "set CE score"                  },
-  { CA_SET_CE_COUNT,           "set CE count"                  },
-  { CA_SET_DYNABOMB_NUMBER,    "set bomb number"               },
-  { CA_SET_DYNABOMB_SIZE,      "set bomb size"                 },
-  { CA_SET_DYNABOMB_POWER,     "set bomb power"                },
-  { CA_TOGGLE_PLAYER_GRAVITY,  "toggle gravity"                },
-  { CA_ENABLE_PLAYER_GRAVITY,  "enable gravity"                },
-  { CA_DISABLE_PLAYER_GRAVITY, "disable gravity"               },
-
-  { -1,                                NULL                            }
-};
-
-static struct ValueTextInfo options_action_mode[] =
-{
-  { CA_MODE_UNDEFINED,         " "                             },
-  { CA_MODE_ADD,               "+"                             },
-  { CA_MODE_SUBTRACT,          "-"                             },
-  { CA_MODE_MULTIPLY,          "*"                             },
-  { CA_MODE_DIVIDE,            "/"                             },
-  { CA_MODE_SET,               "="                             },
-
-  { -1,                                NULL                            }
-};
-
-static struct ValueTextInfo options_action_arg[] =
-{
-  { CA_ARG_PLAYER_HEADLINE,    "[player]"                      },
-  { CA_ARG_PLAYER_1,           "1"                             },
-  { CA_ARG_PLAYER_2,           "2"                             },
-  { CA_ARG_PLAYER_3,           "3"                             },
-  { CA_ARG_PLAYER_4,           "4"                             },
-  { CA_ARG_PLAYER_ANY,         "any"                           },
-  { CA_ARG_PLAYER_TRIGGER,     "trigger"                       },
-  { CA_ARG_UNDEFINED,          " "                             },
-  { CA_ARG_NUMBER_HEADLINE,    "[number]"                      },
-  { CA_ARG_0,                  "0"                             },
-  { CA_ARG_1,                  "1"                             },
-  { CA_ARG_2,                  "2"                             },
-  { CA_ARG_3,                  "3"                             },
-  { CA_ARG_4,                  "4"                             },
-  { CA_ARG_5,                  "5"                             },
-  { CA_ARG_10,                 "10"                            },
-  { CA_ARG_100,                        "100"                           },
-  { CA_ARG_1000,               "1000"                          },
-  { CA_ARG_UNDEFINED,          " "                             },
-  { CA_ARG_NUMBER_MIN,         "min"                           },
-  { CA_ARG_NUMBER_MAX,         "max"                           },
-  { CA_ARG_NUMBER_NORMAL,      "normal"                        },
-  { CA_ARG_NUMBER_RESET,       "reset"                         },
-  { CA_ARG_NUMBER_CE_SCORE,    "CE score"                      },
-  { CA_ARG_NUMBER_CE_COUNT,    "CE count"                      },
-  { CA_ARG_NUMBER_CE_DELAY,    "CE delay"                      },
-  { CA_ARG_UNDEFINED,          " "                             },
-  { CA_ARG_ELEMENT_HEADLINE,   "[element]"                     },
-  { CA_ARG_ELEMENT_TARGET,     "target"                        },
-  { CA_ARG_ELEMENT_TRIGGER,    "trigger"                       },
-
-  { -1,                                NULL                            }
-};
-
 static char options_change_page_strings[MAX_CHANGE_PAGES][10];
 static struct ValueTextInfo options_change_page[MAX_CHANGE_PAGES + 1] =
 {
@@ -1824,30 +1741,6 @@ static struct
     &custom_element_change.replace_when,
     "replace when", NULL,              "which elements can be replaced"
   },
-  {
-    ED_ELEMENT_SETTINGS_XPOS(1),       ED_ELEMENT_SETTINGS_YPOS(13),
-    GADGET_ID_ACTION_TYPE,             GADGET_ID_NONE,
-    -1,
-    options_action_type,
-    &custom_element_change.action_type,
-    NULL, NULL,                                "action on specified condition"
-  },
-  {
-    -1,                                        ED_ELEMENT_SETTINGS_YPOS(13),
-    GADGET_ID_ACTION_MODE,             GADGET_ID_ACTION_TYPE,
-    -1,
-    options_action_mode,
-    &custom_element_change.action_mode,
-    NULL, NULL,                                "action operator"
-  },
-  {
-    -1,                                        ED_ELEMENT_SETTINGS_YPOS(13),
-    GADGET_ID_ACTION_ARG,              GADGET_ID_ACTION_MODE,
-    -1,
-    options_action_arg,
-    &custom_element_change.action_arg,
-    NULL, NULL,                                "action parameter"
-  },
   {
     ED_ELEMENT_SETTINGS_XPOS(1),       ED_ELEMENT_SETTINGS_YPOS(14),
     GADGET_ID_SELECT_CHANGE_PAGE,      GADGET_ID_NONE,
@@ -2320,7 +2213,7 @@ static struct
     ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(1),
     GADGET_ID_CUSTOM_CAN_CHANGE,       GADGET_ID_NONE,
     &custom_element_change.can_change,
-    NULL, "element changes to:",       "change element on specified condition"
+    NULL, "element changes to:",       "element can change to other element"
   },
   {
     ED_ELEMENT_SETTINGS_XPOS(1),       ED_ELEMENT_SETTINGS_YPOS(2),
@@ -2364,12 +2257,6 @@ static struct
     &custom_element_change.use_random_replace,
     NULL, NULL,                                "use percentage for random replace"
   },
-  {
-    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(13),
-    GADGET_ID_CHANGE_HAS_ACTION,       GADGET_ID_NONE,
-    &custom_element_change.has_action,
-    NULL, NULL,                                "execute action on specified condition"
-  },
 };
 
 static struct
@@ -2606,7 +2493,6 @@ static int new_element1 = EL_WALL;
 static int new_element2 = EL_EMPTY;
 static int new_element3 = EL_SAND;
 
-#define IS_VALID_BUTTON(button) (button >= 1 && button <= 3)
 #define BUTTON_ELEMENT(button) ((button) == 1 ? new_element1 : \
                                (button) == 2 ? new_element2 : \
                                (button) == 3 ? new_element3 : EL_EMPTY)
@@ -2882,14 +2768,14 @@ static int editor_el_emerald_mine_club[] =
   EL_EMC_WALL_11,
   EL_EMC_WALL_12,
 
-#if RELEASE_311
+#if RELEASE_312
   EL_EMPTY,
 #else
   EL_EMC_ANDROID,
 #endif
   EL_BALLOON,
   EL_BALLOON_SWITCH_ANY,
-#if RELEASE_311
+#if RELEASE_312
   EL_EMPTY,
 #else
   EL_BALLOON_SWITCH_NONE,
@@ -2902,7 +2788,7 @@ static int editor_el_emerald_mine_club[] =
 
   EL_EMC_GRASS,
   EL_EMC_PLANT,
-#if RELEASE_311
+#if RELEASE_312
   EL_EMPTY,
   EL_EMPTY,
 #else
@@ -2910,7 +2796,7 @@ static int editor_el_emerald_mine_club[] =
   EL_EMC_MAGNIFIER,
 #endif
 
-#if RELEASE_311
+#if RELEASE_312
   EL_EMPTY,
   EL_EMPTY,
 #else
@@ -2918,13 +2804,13 @@ static int editor_el_emerald_mine_club[] =
   EL_EMC_MAGIC_BALL_SWITCH,
 #endif
   EL_SPRING,
-#if RELEASE_311
+#if RELEASE_312
   EL_EMPTY,
 #else
   EL_EMC_SPRING_BUMPER,
 #endif
 
-#if RELEASE_311
+#if RELEASE_312
   EL_EMPTY,
 #else
   EL_EMC_DRIPPER,
@@ -6313,7 +6199,6 @@ static void CopyCustomElementPropertiesToEditor(int element)
      HAS_CHANGE_EVENT(element, CE_BLOCKED) ? CE_BLOCKED :
      HAS_CHANGE_EVENT(element, CE_IMPACT) ? CE_IMPACT :
      HAS_CHANGE_EVENT(element, CE_SMASHED) ? CE_SMASHED :
-     HAS_CHANGE_EVENT(element, CE_COUNT_AT_ZERO) ? CE_COUNT_AT_ZERO :
      custom_element_change.direct_action);
 
   /* set "change by other element action" selectbox help value */
@@ -6332,7 +6217,6 @@ static void CopyCustomElementPropertiesToEditor(int element)
      HAS_CHANGE_EVENT(element, CE_SWITCH_OF_X) ? CE_SWITCH_OF_X :
      HAS_CHANGE_EVENT(element, CE_CHANGE_OF_X) ? CE_CHANGE_OF_X :
      HAS_CHANGE_EVENT(element, CE_EXPLOSION_OF_X) ? CE_EXPLOSION_OF_X :
-     HAS_CHANGE_EVENT(element, CE_COUNT_AT_ZERO_OF_X) ? CE_COUNT_AT_ZERO_OF_X :
      custom_element_change.other_action);
 }
 
@@ -6504,7 +6388,6 @@ static void CopyCustomElementPropertiesToGame(int element)
   custom_element_change_events[CE_BLOCKED] = FALSE;
   custom_element_change_events[CE_IMPACT] = FALSE;
   custom_element_change_events[CE_SMASHED] = FALSE;
-  custom_element_change_events[CE_COUNT_AT_ZERO] = FALSE;
   custom_element_change_events[custom_element_change.direct_action] =
     custom_element_change_events[CE_BY_DIRECT_ACTION];
 
@@ -6523,7 +6406,6 @@ static void CopyCustomElementPropertiesToGame(int element)
   custom_element_change_events[CE_SWITCH_OF_X] = FALSE;
   custom_element_change_events[CE_CHANGE_OF_X] = FALSE;
   custom_element_change_events[CE_EXPLOSION_OF_X] = FALSE;
-  custom_element_change_events[CE_COUNT_AT_ZERO_OF_X] = FALSE;
   custom_element_change_events[custom_element_change.other_action] =
     custom_element_change_events[CE_BY_OTHER_ACTION];
 
@@ -8572,13 +8454,8 @@ static void HandleDrawingAreas(struct GadgetInfo *gi)
   if (!started_inside_drawing_area)
     return;
 
-#if 1
-  if (!IS_VALID_BUTTON(button) && !button_release_event)
-    return;
-#else
   if (!button && !button_release_event)
     return;
-#endif
 
   /* automatically switch to 'single item' drawing mode, if needed */
   actual_drawing_function =
@@ -9147,14 +9024,6 @@ static void HandleControlButtons(struct GadgetInfo *gi)
   int new_element = BUTTON_ELEMENT(button);
   int x, y;
 
-#if 0
-  /* MAKES PROBLEMS WITH ELEMENT LIST SCROLLBAR AND IS PROBABLY NOT NEEDED */
-  /* !!! CHECK WHAT HAPPENS WHEN MOUSE WHEEL IS USED OVER ELEMENT LIST !!! */
-
-  if (!IS_VALID_BUTTON(button))
-    return;
-#endif
-
   if (edit_mode == ED_MODE_DRAWING && drawing_function == GADGET_ID_TEXT)
     DrawLevelText(0, 0, 0, TEXT_END);
 
@@ -9462,18 +9331,13 @@ static void HandleControlButtons(struct GadgetInfo *gi)
 
        DrawCompleteVideoDisplay();
 
-       level_editor_test_game = TRUE;
-
-#if 1
-       StartGameActions(FALSE, setup.autorecord, NEW_RANDOMIZE);
-#else
        if (setup.autorecord)
          TapeStartRecording();
 
+       level_editor_test_game = TRUE;
        game_status = GAME_MODE_PLAYING;
 
        InitGame();
-#endif
       }
       break;