rnd-20041001-1-src
[rocksndiamonds.git] / src / editor.c
index de334bb5241a7d9966b7deb138afdd1f8a24c4a5..c33f98736a21eb974b92ac2cdaa5c114893982e1 100644 (file)
 #define GADGET_ID_SELECTBOX_FIRST      (GADGET_ID_TEXT_AREA_FIRST + 1)
 
 #define GADGET_ID_TIME_OR_STEPS                (GADGET_ID_SELECTBOX_FIRST + 0)
-#define GADGET_ID_CUSTOM_WALK_TO_ACTION        (GADGET_ID_SELECTBOX_FIRST + 1)
-#define GADGET_ID_CUSTOM_EXPLOSION_TYPE        (GADGET_ID_SELECTBOX_FIRST + 2)
-#define GADGET_ID_CUSTOM_DEADLINESS    (GADGET_ID_SELECTBOX_FIRST + 3)
-#define GADGET_ID_CUSTOM_MOVE_PATTERN  (GADGET_ID_SELECTBOX_FIRST + 4)
-#define GADGET_ID_CUSTOM_MOVE_DIRECTION        (GADGET_ID_SELECTBOX_FIRST + 5)
-#define GADGET_ID_CUSTOM_MOVE_STEPSIZE (GADGET_ID_SELECTBOX_FIRST + 6)
-#define GADGET_ID_CUSTOM_MOVE_LEAVE_TYPE (GADGET_ID_SELECTBOX_FIRST + 7)
-#define GADGET_ID_CUSTOM_SMASH_TARGETS (GADGET_ID_SELECTBOX_FIRST + 8)
-#define GADGET_ID_CUSTOM_SLIPPERY_TYPE (GADGET_ID_SELECTBOX_FIRST + 9)
-#define GADGET_ID_CUSTOM_ACCESS_TYPE   (GADGET_ID_SELECTBOX_FIRST + 10)
-#define GADGET_ID_CUSTOM_ACCESS_LAYER  (GADGET_ID_SELECTBOX_FIRST + 11)
-#define GADGET_ID_CUSTOM_ACCESS_PROTECTED (GADGET_ID_SELECTBOX_FIRST + 12)
-#define GADGET_ID_CUSTOM_ACCESS_DIRECTION (GADGET_ID_SELECTBOX_FIRST + 13)
-#define GADGET_ID_CHANGE_TIME_UNITS    (GADGET_ID_SELECTBOX_FIRST + 14)
-#define GADGET_ID_CHANGE_DIRECT_ACTION (GADGET_ID_SELECTBOX_FIRST + 15)
-#define GADGET_ID_CHANGE_OTHER_ACTION  (GADGET_ID_SELECTBOX_FIRST + 16)
-#define GADGET_ID_CHANGE_SIDE          (GADGET_ID_SELECTBOX_FIRST + 17)
-#define GADGET_ID_CHANGE_PLAYER                (GADGET_ID_SELECTBOX_FIRST + 18)
-#define GADGET_ID_CHANGE_PAGE          (GADGET_ID_SELECTBOX_FIRST + 19)
-#define GADGET_ID_CHANGE_REPLACE_WHEN  (GADGET_ID_SELECTBOX_FIRST + 20)
-#define GADGET_ID_SELECT_CHANGE_PAGE   (GADGET_ID_SELECTBOX_FIRST + 21)
-#define GADGET_ID_GROUP_CHOICE_MODE    (GADGET_ID_SELECTBOX_FIRST + 22)
+#define GADGET_ID_GAME_ENGINE_TYPE     (GADGET_ID_SELECTBOX_FIRST + 1)
+#define GADGET_ID_CUSTOM_WALK_TO_ACTION        (GADGET_ID_SELECTBOX_FIRST + 2)
+#define GADGET_ID_CUSTOM_EXPLOSION_TYPE        (GADGET_ID_SELECTBOX_FIRST + 3)
+#define GADGET_ID_CUSTOM_DEADLINESS    (GADGET_ID_SELECTBOX_FIRST + 4)
+#define GADGET_ID_CUSTOM_MOVE_PATTERN  (GADGET_ID_SELECTBOX_FIRST + 5)
+#define GADGET_ID_CUSTOM_MOVE_DIRECTION        (GADGET_ID_SELECTBOX_FIRST + 6)
+#define GADGET_ID_CUSTOM_MOVE_STEPSIZE (GADGET_ID_SELECTBOX_FIRST + 7)
+#define GADGET_ID_CUSTOM_MOVE_LEAVE_TYPE (GADGET_ID_SELECTBOX_FIRST + 8)
+#define GADGET_ID_CUSTOM_SMASH_TARGETS (GADGET_ID_SELECTBOX_FIRST + 9)
+#define GADGET_ID_CUSTOM_SLIPPERY_TYPE (GADGET_ID_SELECTBOX_FIRST + 10)
+#define GADGET_ID_CUSTOM_ACCESS_TYPE   (GADGET_ID_SELECTBOX_FIRST + 11)
+#define GADGET_ID_CUSTOM_ACCESS_LAYER  (GADGET_ID_SELECTBOX_FIRST + 12)
+#define GADGET_ID_CUSTOM_ACCESS_PROTECTED (GADGET_ID_SELECTBOX_FIRST + 13)
+#define GADGET_ID_CUSTOM_ACCESS_DIRECTION (GADGET_ID_SELECTBOX_FIRST + 14)
+#define GADGET_ID_CHANGE_TIME_UNITS    (GADGET_ID_SELECTBOX_FIRST + 15)
+#define GADGET_ID_CHANGE_DIRECT_ACTION (GADGET_ID_SELECTBOX_FIRST + 16)
+#define GADGET_ID_CHANGE_OTHER_ACTION  (GADGET_ID_SELECTBOX_FIRST + 17)
+#define GADGET_ID_CHANGE_SIDE          (GADGET_ID_SELECTBOX_FIRST + 18)
+#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_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 + 23)
+#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)
 
 /* values for selectbox gadgets */
 #define ED_SELECTBOX_ID_TIME_OR_STEPS          0
-#define ED_SELECTBOX_ID_CUSTOM_ACCESS_TYPE     1
-#define ED_SELECTBOX_ID_CUSTOM_ACCESS_LAYER    2
-#define ED_SELECTBOX_ID_CUSTOM_ACCESS_PROTECTED        3
-#define ED_SELECTBOX_ID_CUSTOM_ACCESS_DIRECTION        4
-#define ED_SELECTBOX_ID_CUSTOM_WALK_TO_ACTION  5
-#define ED_SELECTBOX_ID_CUSTOM_MOVE_PATTERN    6
-#define ED_SELECTBOX_ID_CUSTOM_MOVE_DIRECTION  7
-#define ED_SELECTBOX_ID_CUSTOM_MOVE_STEPSIZE   8
-#define ED_SELECTBOX_ID_CUSTOM_MOVE_LEAVE_TYPE 9
-#define ED_SELECTBOX_ID_CUSTOM_SMASH_TARGETS   10
-#define ED_SELECTBOX_ID_CUSTOM_SLIPPERY_TYPE   11
-#define ED_SELECTBOX_ID_CUSTOM_DEADLINESS      12
-#define ED_SELECTBOX_ID_CUSTOM_EXPLOSION_TYPE  13
-#define ED_SELECTBOX_ID_CHANGE_TIME_UNITS      14
-#define ED_SELECTBOX_ID_CHANGE_DIRECT_ACTION   15
-#define ED_SELECTBOX_ID_CHANGE_OTHER_ACTION    16
-#define ED_SELECTBOX_ID_CHANGE_SIDE            17
-#define ED_SELECTBOX_ID_CHANGE_PLAYER          18
-#define ED_SELECTBOX_ID_CHANGE_PAGE            19
-#define ED_SELECTBOX_ID_CHANGE_REPLACE_WHEN    20
-#define ED_SELECTBOX_ID_SELECT_CHANGE_PAGE     21
-#define ED_SELECTBOX_ID_GROUP_CHOICE_MODE      22
-
-#define ED_NUM_SELECTBOX                       23
+#define ED_SELECTBOX_ID_GAME_ENGINE_TYPE       1
+#define ED_SELECTBOX_ID_CUSTOM_ACCESS_TYPE     2
+#define ED_SELECTBOX_ID_CUSTOM_ACCESS_LAYER    3
+#define ED_SELECTBOX_ID_CUSTOM_ACCESS_PROTECTED        4
+#define ED_SELECTBOX_ID_CUSTOM_ACCESS_DIRECTION        5
+#define ED_SELECTBOX_ID_CUSTOM_WALK_TO_ACTION  6
+#define ED_SELECTBOX_ID_CUSTOM_MOVE_PATTERN    7
+#define ED_SELECTBOX_ID_CUSTOM_MOVE_DIRECTION  8
+#define ED_SELECTBOX_ID_CUSTOM_MOVE_STEPSIZE   9
+#define ED_SELECTBOX_ID_CUSTOM_MOVE_LEAVE_TYPE 10
+#define ED_SELECTBOX_ID_CUSTOM_SMASH_TARGETS   11
+#define ED_SELECTBOX_ID_CUSTOM_SLIPPERY_TYPE   12
+#define ED_SELECTBOX_ID_CUSTOM_DEADLINESS      13
+#define ED_SELECTBOX_ID_CUSTOM_EXPLOSION_TYPE  14
+#define ED_SELECTBOX_ID_CHANGE_TIME_UNITS      15
+#define ED_SELECTBOX_ID_CHANGE_DIRECT_ACTION   16
+#define ED_SELECTBOX_ID_CHANGE_OTHER_ACTION    17
+#define ED_SELECTBOX_ID_CHANGE_SIDE            18
+#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_SELECT_CHANGE_PAGE     22
+#define ED_SELECTBOX_ID_GROUP_CHOICE_MODE      23
+
+#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_TIME_OR_STEPS
+#define ED_SELECTBOX_ID_LEVEL_LAST     ED_SELECTBOX_ID_GAME_ENGINE_TYPE
 
 #define ED_SELECTBOX_ID_CUSTOM1_FIRST  ED_SELECTBOX_ID_CUSTOM_ACCESS_TYPE
 #define ED_SELECTBOX_ID_CUSTOM1_LAST   ED_SELECTBOX_ID_CUSTOM_WALK_TO_ACTION
@@ -1174,6 +1176,14 @@ static struct ValueTextInfo options_time_or_steps[] =
   { -1,                                NULL                            }
 };
 
+static struct ValueTextInfo options_game_engine_type[] =
+{
+  { GAME_ENGINE_TYPE_RND,      "RND"                           },
+  { GAME_ENGINE_TYPE_EM,       "EM"                            },
+
+  { -1,                                NULL                            }
+};
+
 static struct ValueTextInfo options_access_type[] =
 {
   { EP_WALKABLE,               "walkable"                      },
@@ -1358,9 +1368,11 @@ static struct ValueTextInfo options_change_direct_action[] =
 #else
   { CE_HITTING_SOMETHING,      "collision"                     },
 #endif
-#if 1
+
+#if 0
   { CE_BLOCKED,                        "blocked"                       },
 #endif
+
   { CE_IMPACT,                 "impact (on something)"         },
   { CE_SMASHED,                        "smashed (from above)"          },
 
@@ -1502,6 +1514,14 @@ static struct
     &level.use_step_counter,
     NULL, "(0 => no limit)",           "time or step limit"
   },
+  {
+    ED_SETTINGS_XPOS(0),               ED_COUNTER_YPOS(6) + 8,
+    GADGET_ID_GAME_ENGINE_TYPE,                GADGET_ID_NONE,
+    -1,
+    options_game_engine_type,
+    &level.game_engine_type,
+    "game engine:", NULL,              "game engine"
+  },
 
   /* ---------- element settings: configure 1 (custom elements) ----------- */
 
@@ -2039,6 +2059,8 @@ static struct
     ED_SETTINGS_XPOS(0),               ED_SETTINGS_YPOS(1),
     GADGET_ID_CUSTOM_USE_GRAPHIC,      GADGET_ID_NONE,
     &custom_element.use_gfx_element,
+
+    /* !!! add separate "use existing element sound" !!! */
 #if 0
     NULL, "use graphic/sound of element:", "use existing graphic and sound"
 #else
@@ -2573,6 +2595,105 @@ static int *editor_el_emerald_mine_ptr = editor_el_emerald_mine;
 static int num_editor_hl_emerald_mine=SIZEOF_ARRAY_INT(editor_hl_emerald_mine);
 static int num_editor_el_emerald_mine=SIZEOF_ARRAY_INT(editor_el_emerald_mine);
 
+static int editor_hl_emerald_mine_club[] =
+{
+  EL_CHAR('E'),
+  EL_CHAR('M'),
+  EL_CHAR('E'),
+  EL_CHAR('-'),
+
+  EL_CHAR('R'),
+  EL_CHAR('A'),
+  EL_CHAR('L'),
+  EL_CHAR('D'),
+
+  EL_CHAR('M'),
+  EL_CHAR('I'),
+  EL_CHAR('N'),
+  EL_CHAR('E'),
+
+  EL_CHAR('C'),
+  EL_CHAR('L'),
+  EL_CHAR('U'),
+  EL_CHAR('B'),
+};
+
+static int editor_el_emerald_mine_club[] =
+{
+  EL_EMC_KEY_5,
+  EL_EMC_KEY_6,
+  EL_EMC_KEY_7,
+  EL_EMC_KEY_8,
+
+  EL_EMC_GATE_5,
+  EL_EMC_GATE_6,
+  EL_EMC_GATE_7,
+  EL_EMC_GATE_8,
+
+  EL_EMC_GATE_5_GRAY,
+  EL_EMC_GATE_6_GRAY,
+  EL_EMC_GATE_7_GRAY,
+  EL_EMC_GATE_8_GRAY,
+
+  EL_EMC_STEELWALL_1,
+  EL_EMC_STEELWALL_2,
+  EL_EMC_STEELWALL_3,
+  EL_EMC_STEELWALL_4,
+
+  EL_EMC_WALL_13,
+  EL_EMC_WALL_14,
+  EL_EMC_WALL_15,
+  EL_EMC_WALL_16,
+
+  EL_EMC_WALL_SLIPPERY_1,
+  EL_EMC_WALL_SLIPPERY_2,
+  EL_EMC_WALL_SLIPPERY_3,
+  EL_EMC_WALL_SLIPPERY_4,
+
+  EL_EMC_WALL_1,
+  EL_EMC_WALL_2,
+  EL_EMC_WALL_3,
+  EL_EMC_WALL_4,
+
+  EL_EMC_WALL_5,
+  EL_EMC_WALL_6,
+  EL_EMC_WALL_7,
+  EL_EMC_WALL_8,
+
+  EL_EMC_WALL_9,
+  EL_EMC_WALL_10,
+  EL_EMC_WALL_11,
+  EL_EMC_WALL_12,
+
+  EL_EMC_ANDROID,
+  EL_BALLOON,
+  EL_BALLOON_SWITCH_ANY,
+  EL_BALLOON_SWITCH_NONE,
+
+  EL_BALLOON_SWITCH_LEFT,
+  EL_BALLOON_SWITCH_RIGHT,
+  EL_BALLOON_SWITCH_UP,
+  EL_BALLOON_SWITCH_DOWN,
+
+  EL_EMC_GRASS,
+  EL_EMC_PLANT,
+  EL_EMC_LENSES,
+  EL_EMC_MAGNIFIER,
+
+  EL_EMC_MAGIC_BALL,
+  EL_EMC_MAGIC_BALL_SWITCH,
+  EL_SPRING,
+  EL_EMC_BUMPER,
+
+#if 0
+  EL_EMC_LEVEL_BORDER,
+#endif
+};
+static int *editor_hl_emerald_mine_club_ptr = editor_hl_emerald_mine_club;
+static int *editor_el_emerald_mine_club_ptr = editor_el_emerald_mine_club;
+static int num_editor_hl_emerald_mine_club=SIZEOF_ARRAY_INT(editor_hl_emerald_mine_club);
+static int num_editor_el_emerald_mine_club=SIZEOF_ARRAY_INT(editor_el_emerald_mine_club);
+
 static int editor_hl_more[] =
 {
   EL_CHAR('M'),
@@ -2650,13 +2771,8 @@ static int editor_el_more[] =
 
   EL_SPACESHIP,
   EL_MOLE_DOWN,
-  EL_BALLOON,
-  EL_BALLOON_SWITCH_ANY,
-
-  EL_BALLOON_SWITCH_LEFT,
-  EL_BALLOON_SWITCH_RIGHT,
-  EL_BALLOON_SWITCH_UP,
-  EL_BALLOON_SWITCH_DOWN,
+  EL_EMPTY,
+  EL_EMPTY,
 
   EL_SATELLITE,
   EL_EXPANDABLE_WALL_HORIZONTAL,
@@ -2667,16 +2783,6 @@ static int editor_el_more[] =
   EL_INVISIBLE_WALL,
   EL_SPEED_PILL,
   EL_BLACK_ORB,
-
-  EL_EMC_STEELWALL_1,
-  EL_EMC_WALL_1,
-  EL_EMC_WALL_2,
-  EL_EMC_WALL_3,
-
-  EL_EMC_WALL_4,
-  EL_EMC_WALL_5,
-  EL_EMC_WALL_6,
-  EL_EMC_WALL_7,
 };
 static int *editor_hl_more_ptr = editor_hl_more;
 static int *editor_el_more_ptr = editor_el_more;
@@ -2902,7 +3008,7 @@ static int editor_hl_dx_boulderdash[] =
 
 static int editor_el_dx_boulderdash[] =
 {
-  EL_SPRING,
+  EL_EMPTY,
   EL_TUBE_RIGHT_DOWN,
   EL_TUBE_HORIZONTAL_DOWN,
   EL_TUBE_LEFT_DOWN,
@@ -3550,6 +3656,11 @@ editor_elements_info[] =
     &editor_hl_emerald_mine_ptr,       &num_editor_hl_emerald_mine,
     &editor_el_emerald_mine_ptr,       &num_editor_el_emerald_mine
   },
+  {
+    &setup.editor.el_emerald_mine_club,
+    &editor_hl_emerald_mine_club_ptr,  &num_editor_hl_emerald_mine_club,
+    &editor_el_emerald_mine_club_ptr,  &num_editor_el_emerald_mine_club
+  },
   {
     &setup.editor.el_more,
     &editor_hl_more_ptr,               &num_editor_hl_more,
@@ -8995,6 +9106,8 @@ static void HandleControlButtons(struct GadgetInfo *gi)
        CopyPlayfield(level.field, FieldBackup);
        CopyPlayfield(Feld, level.field);
 
+       CopyNativeLevel_RND_to_Native(&level);
+
        UnmapLevelEditorGadgets();
        UndrawSpecialEditorDoor();