added support for intermission levels in BD engine to level editor
[rocksndiamonds.git] / src / editor.c
index f02252c5cc98a1aef3d3a48a7bf84d2c6b62760f..eae4514e8b4e22e2dac2f06f251607366550a198 100644 (file)
@@ -606,6 +606,7 @@ enum
   GADGET_ID_LEVELCONFIG_LEVEL,
   GADGET_ID_LEVELCONFIG_LEVELSET,
   GADGET_ID_LEVELCONFIG_EDITOR,
+  GADGET_ID_LEVELCONFIG_ENGINE,
   GADGET_ID_PROPERTIES_INFO,
   GADGET_ID_PROPERTIES_CONFIG,
   GADGET_ID_PROPERTIES_CONFIG_1,
@@ -648,6 +649,7 @@ enum
   GADGET_ID_RANDOM_PERCENTAGE,
   GADGET_ID_RANDOM_QUANTITY,
   GADGET_ID_RANDOM_RESTRICTED,
+  GADGET_ID_BD_INTERMISSION,
   GADGET_ID_STICK_ELEMENT,
   GADGET_ID_EM_SLIPPERY_GEMS,
   GADGET_ID_EM_EXPLODES_BY_FIRE,
@@ -917,6 +919,7 @@ enum
   ED_TEXTBUTTON_ID_LEVELCONFIG_LEVEL,
   ED_TEXTBUTTON_ID_LEVELCONFIG_LEVELSET,
   ED_TEXTBUTTON_ID_LEVELCONFIG_EDITOR,
+  ED_TEXTBUTTON_ID_LEVELCONFIG_ENGINE,
   ED_TEXTBUTTON_ID_PROPERTIES_INFO,
   ED_TEXTBUTTON_ID_PROPERTIES_CONFIG,
   ED_TEXTBUTTON_ID_PROPERTIES_CONFIG_1,
@@ -932,7 +935,7 @@ enum
 };
 
 #define ED_TAB_BUTTON_ID_LEVELCONFIG_FIRST ED_TEXTBUTTON_ID_LEVELCONFIG_LEVEL
-#define ED_TAB_BUTTON_ID_LEVELCONFIG_LAST  ED_TEXTBUTTON_ID_LEVELCONFIG_EDITOR
+#define ED_TAB_BUTTON_ID_LEVELCONFIG_LAST  ED_TEXTBUTTON_ID_LEVELCONFIG_ENGINE
 
 #define ED_TAB_BUTTON_ID_PROPERTIES_FIRST ED_TEXTBUTTON_ID_PROPERTIES_INFO
 #define ED_TAB_BUTTON_ID_PROPERTIES_LAST  ED_TEXTBUTTON_ID_PROPERTIES_CHANGE
@@ -964,6 +967,7 @@ enum
   ED_CHECKBUTTON_ID_RANDOM_RESTRICTED,
   ED_CHECKBUTTON_ID_CUSTOM_USE_TEMPLATE_3,
   ED_CHECKBUTTON_ID_CUSTOM_USE_TEMPLATE_2,
+  ED_CHECKBUTTON_ID_BD_INTERMISSION,
   ED_CHECKBUTTON_ID_STICK_ELEMENT,
   ED_CHECKBUTTON_ID_EM_SLIPPERY_GEMS,
   ED_CHECKBUTTON_ID_EM_EXPLODES_BY_FIRE,
@@ -1044,6 +1048,9 @@ enum
 #define ED_CHECKBUTTON_ID_EDITOR_FIRST ED_CHECKBUTTON_ID_RANDOM_RESTRICTED
 #define ED_CHECKBUTTON_ID_EDITOR_LAST  ED_CHECKBUTTON_ID_CUSTOM_USE_TEMPLATE_2
 
+#define ED_CHECKBUTTON_ID_ENGINE_FIRST ED_CHECKBUTTON_ID_BD_INTERMISSION
+#define ED_CHECKBUTTON_ID_ENGINE_LAST  ED_CHECKBUTTON_ID_BD_INTERMISSION
+
 #define ED_CHECKBUTTON_ID_CUSTOM1_FIRST        ED_CHECKBUTTON_ID_CUSTOM_USE_GRAPHIC
 #define ED_CHECKBUTTON_ID_CUSTOM1_LAST ED_CHECKBUTTON_ID_CUSTOM_INDESTRUCTIBLE
 #define ED_CHECKBUTTON_ID_CUSTOM2_FIRST        ED_CHECKBUTTON_ID_CUSTOM_CAN_MOVE
@@ -1136,6 +1143,7 @@ enum
 #define ED_MODE_LEVELCONFIG_LEVEL      ED_TEXTBUTTON_ID_LEVELCONFIG_LEVEL
 #define ED_MODE_LEVELCONFIG_LEVELSET   ED_TEXTBUTTON_ID_LEVELCONFIG_LEVELSET
 #define ED_MODE_LEVELCONFIG_EDITOR     ED_TEXTBUTTON_ID_LEVELCONFIG_EDITOR
+#define ED_MODE_LEVELCONFIG_ENGINE     ED_TEXTBUTTON_ID_LEVELCONFIG_ENGINE
 
 // sub-screens in the element properties section
 #define ED_MODE_PROPERTIES_INFO                ED_TEXTBUTTON_ID_PROPERTIES_INFO
@@ -2918,6 +2926,13 @@ static struct
     8,                                 "Editor",
     NULL, NULL, NULL,                  "Configure editor settings"
   },
+  {
+    ED_TEXTBUTTON_ID_LEVELCONFIG_ENGINE,
+    -1,                                        -1,
+    GADGET_ID_LEVELCONFIG_ENGINE,      GADGET_ID_LEVELCONFIG_EDITOR,
+    8,                                 "Engine",
+    NULL, NULL, NULL,                  "Configure engine settings"
+  },
 
   // ---------- element settings (tabs) ---------------------------------------
 
@@ -3231,6 +3246,14 @@ static struct
     NULL, NULL,
     "use template for custom elements",        "use template for custom properties"
   },
+  {
+    ED_CHECKBUTTON_ID_BD_INTERMISSION,
+    ED_LEVEL_SETTINGS_XPOS(0),         ED_LEVEL_SETTINGS_YPOS(0),
+    GADGET_ID_BD_INTERMISSION,         GADGET_ID_NONE,
+    &level.bd_intermission,
+    "Boulder Dash game engine settings:", NULL,
+    "intermission",                    "level is an intermission level"
+  },
 
   // ---------- element settings: configure (various elements) ----------------
 
@@ -7460,7 +7483,7 @@ static void CreateTextbuttonGadgets(void)
     int id = textbutton_info[i].gadget_id;
     int type_id = textbutton_info[i].gadget_type_id;
     int is_tab_button =
-      ((id >= GADGET_ID_LEVELCONFIG_LEVEL && id <= GADGET_ID_LEVELCONFIG_EDITOR) ||
+      ((id >= GADGET_ID_LEVELCONFIG_LEVEL && id <= GADGET_ID_LEVELCONFIG_ENGINE) ||
        (id >= GADGET_ID_PROPERTIES_INFO && id <= GADGET_ID_PROPERTIES_CHANGE));
     int graphic =
       (is_tab_button ? IMG_EDITOR_TABBUTTON : IMG_EDITOR_TEXTBUTTON);
@@ -8228,7 +8251,7 @@ static void MapMainDrawingArea(void)
     no_vertical_scrollbar   = (lev_fieldy <= ed_fieldy);
   }
 
-  for (i=ED_SCROLLBUTTON_ID_AREA_FIRST; i <= ED_SCROLLBUTTON_ID_AREA_LAST; i++)
+  for (i = ED_SCROLLBUTTON_ID_AREA_FIRST; i <= ED_SCROLLBUTTON_ID_AREA_LAST; i++)
   {
     if (((i == ED_SCROLLBUTTON_ID_AREA_LEFT ||
          i == ED_SCROLLBUTTON_ID_AREA_RIGHT) &&
@@ -9776,10 +9799,14 @@ static void DrawLevelConfigTabulatorGadgets(void)
 {
   struct GadgetInfo *gd_gi1 = level_editor_gadget[GADGET_ID_LEVELCONFIG_LEVEL];
   Pixel tab_color = getTabulatorBarColor();
-  int id_first = ED_TAB_BUTTON_ID_LEVELCONFIG_FIRST;
-  int id_last  = ED_TAB_BUTTON_ID_LEVELCONFIG_LAST;
+  int id_first = ED_TEXTBUTTON_ID_LEVELCONFIG_LEVEL;
+  int id_last  = ED_TEXTBUTTON_ID_LEVELCONFIG_EDITOR;
   int i;
 
+  // draw additional "engine" tabulator when using native BD engine
+  if (level.game_engine_type == GAME_ENGINE_TYPE_BD)
+    id_last = ED_TEXTBUTTON_ID_LEVELCONFIG_ENGINE;
+
   for (i = id_first; i <= id_last; i++)
   {
     int gadget_id = textbutton_info[i].gadget_id;
@@ -9962,11 +9989,11 @@ static void DrawLevelConfigEditor(void)
     MapCounterButtons(i);
 
   // draw checkbutton gadgets
-  for (i=ED_CHECKBUTTON_ID_EDITOR_FIRST; i<= ED_CHECKBUTTON_ID_EDITOR_LAST; i++)
+  for (i = ED_CHECKBUTTON_ID_EDITOR_FIRST; i <= ED_CHECKBUTTON_ID_EDITOR_LAST; i++)
     MapCheckbuttonGadget(i);
 
   // draw radiobutton gadgets
-  for (i=ED_RADIOBUTTON_ID_EDITOR_FIRST; i<= ED_RADIOBUTTON_ID_EDITOR_LAST; i++)
+  for (i = ED_RADIOBUTTON_ID_EDITOR_FIRST; i <= ED_RADIOBUTTON_ID_EDITOR_LAST; i++)
     MapRadiobuttonGadget(i);
 
   // draw drawing area
@@ -9976,6 +10003,15 @@ static void DrawLevelConfigEditor(void)
   MapTextbuttonGadget(ED_TEXTBUTTON_ID_SAVE_AS_TEMPLATE_2);
 }
 
+static void DrawLevelConfigEngine(void)
+{
+  int i;
+
+  // draw checkbutton gadgets
+  for (i = ED_CHECKBUTTON_ID_ENGINE_FIRST; i <= ED_CHECKBUTTON_ID_ENGINE_LAST; i++)
+    MapCheckbuttonGadget(i);
+}
+
 static void DrawLevelConfigWindow(void)
 {
   char *text = "Global Settings";
@@ -10003,6 +10039,8 @@ static void DrawLevelConfigWindow(void)
     DrawLevelConfigLevelSet();
   else if (edit_mode_levelconfig == ED_MODE_LEVELCONFIG_EDITOR)
     DrawLevelConfigEditor();
+  else if (edit_mode_levelconfig == ED_MODE_LEVELCONFIG_ENGINE)
+    DrawLevelConfigEngine();
 }
 
 static void DrawCustomContentArea(void)
@@ -14465,7 +14503,10 @@ static void HandleSelectboxGadgets(struct GadgetInfo *gi)
   }
   else if (type_id == ED_SELECTBOX_ID_GAME_ENGINE_TYPE)
   {
-    // update element selection list
+    // show or hide "engine" tabulator depending on game engine type
+    DrawLevelConfigWindow();
+
+    // update element selection list depending on game engine type
     ReinitializeElementList();
     ModifyEditorElementList();
   }