fixed undefined caveset data when using non-native BD engine levels
authorHolger Schemel <holger.schemel@virtion.de>
Mon, 6 Jan 2025 19:16:42 +0000 (20:16 +0100)
committerHolger Schemel <holger.schemel@virtion.de>
Mon, 6 Jan 2025 19:16:54 +0000 (20:16 +0100)
src/game_bd/main_bd.c

index b23cbe987d50cf5810050fe85ce3052b90290570..5156b3921a862de2e77763d2d8e216551318b370 100644 (file)
@@ -56,11 +56,18 @@ void bd_close_all(void)
 
 void setLevelInfoToDefaults_BD_Ext(int width, int height)
 {
+  static GdCavesetData *caveset = NULL;                // used if no native cave loaded
   GdCave *cave = native_bd_level.cave;
 
+  if (caveset != NULL)
+    gd_caveset_data_free(caveset);
+
   if (cave != NULL)
     gd_cave_free(cave);
 
+  // get empty caveset, using default values
+  caveset = gd_caveset_data_new();
+
   // get empty cave, using default values
   cave = gd_cave_new();
 
@@ -81,7 +88,7 @@ void setLevelInfoToDefaults_BD_Ext(int width, int height)
   cave->selectable = TRUE;
   cave->intermission = FALSE;
 
-  native_bd_level.caveset = NULL;
+  native_bd_level.caveset = caveset;
   native_bd_level.cave = cave;
   native_bd_level.replay = NULL;
 
@@ -157,6 +164,7 @@ boolean LoadNativeLevel_BD(char *filename, int level_pos, boolean level_info_onl
   // set better initial cave speed (to set better native replay tape length)
   set_initial_cave_speed(native_bd_level.cave);
 
+  // caveset data for native levels managed separately -- do not free it!
   native_bd_level.caveset = gd_caveset_data;
   native_bd_level.loaded_from_caveset = TRUE;