fixed some BD game elements in level editor
[rocksndiamonds.git] / src / files.c
index e0225dc2deded68ce3c9297a7ff41dbc61314deb..e6e2281694d66a945891aa0c3abcb3a55d2cf850 100644 (file)
@@ -279,6 +279,48 @@ static struct LevelFileConfigInfo chunk_config_INFO[] =
     &li.bd_intermission,               FALSE
   },
 
+  {
+    -1,                                        -1,
+    TYPE_INTEGER,                      CONF_VALUE_8_BIT(15),
+    &li.bd_scheduling_type,            GD_SCHEDULING_MILLISECONDS
+  },
+
+  {
+    -1,                                        -1,
+    TYPE_BOOLEAN,                      CONF_VALUE_8_BIT(16),
+    &li.bd_pal_timing,                 FALSE
+  },
+
+  {
+    -1,                                        -1,
+    TYPE_INTEGER,                      CONF_VALUE_16_BIT(6),
+    &li.bd_cycle_delay_ms,             200
+  },
+
+  {
+    -1,                                        -1,
+    TYPE_INTEGER,                      CONF_VALUE_8_BIT(17),
+    &li.bd_cycle_delay_c64,            0
+  },
+
+  {
+    -1,                                        -1,
+    TYPE_INTEGER,                      CONF_VALUE_8_BIT(18),
+    &li.bd_hatching_delay_cycles,      21
+  },
+
+  {
+    -1,                                        -1,
+    TYPE_INTEGER,                      CONF_VALUE_8_BIT(19),
+    &li.bd_hatching_delay_seconds,     2
+  },
+
+  {
+    -1,                                        -1,
+    TYPE_BOOLEAN,                      CONF_VALUE_8_BIT(20),
+    &li.bd_line_shifting_borders,      FALSE
+  },
+
   {
     -1,                                        -1,
     -1,                                        -1,
@@ -3715,17 +3757,25 @@ static void CopyNativeLevel_RND_to_BD(struct LevelInfo *level)
     cave->level_time[i]                        = level->time;
     cave->level_diamonds[i]            = level->gems_needed;
     cave->level_magic_wall_time[i]     = level->time_magic_wall;
+
+    cave->level_speed[i]               = level->bd_cycle_delay_ms;
+    cave->level_ckdelay[i]             = level->bd_cycle_delay_c64;
+    cave->level_hatching_delay_frame[i]        = level->bd_hatching_delay_cycles;
+    cave->level_hatching_delay_time[i] = level->bd_hatching_delay_seconds;
+
     cave->level_timevalue[i]           = level->score[SC_TIME_BONUS];
   }
 
   cave->diamond_value                  = level->score[SC_EMERALD];
   cave->extra_diamond_value            = level->score[SC_DIAMOND_EXTRA];
 
-  cave->level_speed[0]                 = 160;  // set cave speed
-
+  cave->scheduling                     = level->bd_scheduling_type;
+  cave->pal_timing                     = level->bd_pal_timing;
   cave->intermission                   = level->bd_intermission;
   cave->diagonal_movements             = level->bd_diagonal_movements;
 
+  cave->lineshift                      = level->bd_line_shifting_borders;
+
   strncpy(cave->name, level->name, sizeof(GdString));
   cave->name[sizeof(GdString) - 1] = '\0';
 
@@ -3748,19 +3798,32 @@ static void CopyNativeLevel_BD_to_RND(struct LevelInfo *level)
   level->gems_needed                   = cave->level_diamonds[bd_level_nr];
   level->time_magic_wall               = cave->level_magic_wall_time[bd_level_nr];
 
+  level->bd_cycle_delay_ms             = cave->level_speed[bd_level_nr];
+  level->bd_cycle_delay_c64            = cave->level_ckdelay[bd_level_nr];
+  level->bd_hatching_delay_cycles      = cave->level_hatching_delay_frame[bd_level_nr];
+  level->bd_hatching_delay_seconds     = cave->level_hatching_delay_time[bd_level_nr];
+
   level->score[SC_TIME_BONUS]          = cave->level_timevalue[bd_level_nr];
   level->score[SC_EMERALD]             = cave->diamond_value;
   level->score[SC_DIAMOND_EXTRA]       = cave->extra_diamond_value;
 
+  level->bd_scheduling_type            = cave->scheduling;
+  level->bd_pal_timing                 = cave->pal_timing;
   level->bd_intermission               = cave->intermission;
   level->bd_diagonal_movements         = cave->diagonal_movements;
 
-  strncpy(level->name, cave->name, MAX_LEVEL_NAME_LEN);
+  level->bd_line_shifting_borders      = cave->lineshift;
+
+  char *cave_name = getStringPrint("%s / %d", cave->name, bd_level_nr + 1);
+
+  strncpy(level->name, cave_name, MAX_LEVEL_NAME_LEN);
   level->name[MAX_LEVEL_NAME_LEN] = '\0';
 
   for (x = 0; x < level->fieldx; x++)
     for (y = 0; y < level->fieldy; y++)
       level->field[x][y] = map_element_BD_to_RND(cave->map[y][x]);
+
+  checked_free(cave_name);
 }
 
 static void setTapeInfoToDefaults(void);