added support for short explosions in BD engine to level editor
authorHolger Schemel <info@artsoft.org>
Mon, 11 Mar 2024 08:37:03 +0000 (09:37 +0100)
committerHolger Schemel <info@artsoft.org>
Mon, 11 Mar 2024 08:37:03 +0000 (09:37 +0100)
src/editor.c
src/files.c
src/main.h

index 1573c089a4306ca766514fa9f02e8fb4ff7372b3..6ea027d683b2702045223266fd33e2d936e6fd7d 100644 (file)
@@ -666,6 +666,7 @@ enum
   GADGET_ID_BD_PAL_TIMING,
   GADGET_ID_BD_LINE_SHIFTING_BORDERS,
   GADGET_ID_BD_SCAN_FIRST_AND_LAST_ROW,
+  GADGET_ID_BD_SHORT_EXPLOSIONS,
   GADGET_ID_STICK_ELEMENT,
   GADGET_ID_EM_SLIPPERY_GEMS,
   GADGET_ID_EM_EXPLODES_BY_FIRE,
@@ -995,6 +996,7 @@ enum
   ED_CHECKBUTTON_ID_BD_PAL_TIMING,
   ED_CHECKBUTTON_ID_BD_LINE_SHIFTING_BORDERS,
   ED_CHECKBUTTON_ID_BD_SCAN_FIRST_AND_LAST_ROW,
+  ED_CHECKBUTTON_ID_BD_SHORT_EXPLOSIONS,
   ED_CHECKBUTTON_ID_STICK_ELEMENT,
   ED_CHECKBUTTON_ID_EM_SLIPPERY_GEMS,
   ED_CHECKBUTTON_ID_EM_EXPLODES_BY_FIRE,
@@ -1076,7 +1078,7 @@ enum
 #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_SCAN_FIRST_AND_LAST_ROW
+#define ED_CHECKBUTTON_ID_ENGINE_LAST  ED_CHECKBUTTON_ID_BD_SHORT_EXPLOSIONS
 
 #define ED_CHECKBUTTON_ID_CUSTOM1_FIRST        ED_CHECKBUTTON_ID_CUSTOM_USE_GRAPHIC
 #define ED_CHECKBUTTON_ID_CUSTOM1_LAST ED_CHECKBUTTON_ID_CUSTOM_INDESTRUCTIBLE
@@ -3363,6 +3365,14 @@ static struct
     NULL, NULL,
     "scan first and last row",         "also process top/bottom border rows"
   },
+  {
+    ED_CHECKBUTTON_ID_BD_SHORT_EXPLOSIONS,
+    ED_LEVEL_SETTINGS_XPOS(0),         ED_LEVEL_SETTINGS_YPOS(8),
+    GADGET_ID_BD_SHORT_EXPLOSIONS,     GADGET_ID_NONE,
+    &level.bd_short_explosions,
+    NULL, NULL,
+    "short explosions",                        "use four game cycles for explosions"
+  },
 
   // ---------- element settings: configure (various elements) ----------------
 
index 5f1faac6c95b5384d362ce6291fb15aff747fddb..2842d1d4fa1eea88deee454ed6b5ba40b5ca2859 100644 (file)
@@ -333,6 +333,12 @@ static struct LevelFileConfigInfo chunk_config_INFO[] =
     &li.bd_scan_first_and_last_row,    TRUE
   },
 
+  {
+    -1,                                        -1,
+    TYPE_BOOLEAN,                      CONF_VALUE_8_BIT(23),
+    &li.bd_short_explosions,           TRUE
+  },
+
   {
     -1,                                        -1,
     -1,                                        -1,
@@ -3789,6 +3795,7 @@ static void CopyNativeLevel_RND_to_BD(struct LevelInfo *level)
   cave->lineshift                      = level->bd_line_shifting_borders;
   cave->wraparound_objects             = level->bd_wraparound_objects;
   cave->border_scan_first_and_last     = level->bd_scan_first_and_last_row;
+  cave->short_explosions               = level->bd_short_explosions;
 
   strncpy(cave->name, level->name, sizeof(GdString));
   cave->name[sizeof(GdString) - 1] = '\0';
@@ -3829,6 +3836,7 @@ static void CopyNativeLevel_BD_to_RND(struct LevelInfo *level)
   level->bd_line_shifting_borders      = cave->lineshift;
   level->bd_wraparound_objects         = cave->wraparound_objects;
   level->bd_scan_first_and_last_row    = cave->border_scan_first_and_last;
+  level->bd_short_explosions           = cave->short_explosions;
 
   char *cave_name = getStringPrint("%s / %d", cave->name, bd_level_nr + 1);
 
index 59dfc59ea57c3e1e3efb33e23893c999ab831541..07eabfb9321728cefff04f136be3729b02b70cfb 100644 (file)
@@ -3489,6 +3489,7 @@ struct LevelInfo
   boolean bd_line_shifting_borders;    // BD engine uses line-shifting wrap-around
   boolean bd_wraparound_objects;       // BD cave object rendering uses wrap-around
   boolean bd_scan_first_and_last_row;  // BD engine scans top and bottom border rows
+  boolean bd_short_explosions;         // BD engine uses four game cycles for explosions
   boolean bd_intermission;             // BD level is intermission
   boolean bd_diagonal_movements;       // BD style diagonal movements
   boolean em_slippery_gems;            // EM style "gems slip from wall" behaviour