small text and comment changes
[rocksndiamonds.git] / src / files.c
index 71c2c52d857b98200f7c427db7daeedfc56ace6a..3e9f7fa2b8f607a5c1c6a1663c1558fc9595590d 100644 (file)
@@ -19,6 +19,7 @@
 #include "files.h"
 #include "init.h"
 #include "screens.h"
+#include "editor.h"
 #include "tools.h"
 #include "tape.h"
 #include "config.h"
@@ -310,6 +311,41 @@ static struct LevelFileConfigInfo chunk_config_INFO[] =
     TYPE_INTEGER,                      CONF_VALUE_8_BIT(23),
     &li.bd_cave_random_seed_c64,       0
   },
+  {
+    -1,                                        -1,
+    TYPE_INTEGER,                      CONF_VALUE_32_BIT(3),
+    &li.bd_color_b,                    GD_C64_COLOR(0)
+  },
+  {
+    -1,                                        -1,
+    TYPE_INTEGER,                      CONF_VALUE_32_BIT(4),
+    &li.bd_color_0,                    GD_C64_COLOR(0)
+  },
+  {
+    -1,                                        -1,
+    TYPE_INTEGER,                      CONF_VALUE_32_BIT(5),
+    &li.bd_color_1,                    GD_C64_COLOR(8)
+  },
+  {
+    -1,                                        -1,
+    TYPE_INTEGER,                      CONF_VALUE_32_BIT(6),
+    &li.bd_color_2,                    GD_C64_COLOR(11)
+  },
+  {
+    -1,                                        -1,
+    TYPE_INTEGER,                      CONF_VALUE_32_BIT(7),
+    &li.bd_color_3,                    GD_C64_COLOR(1)
+  },
+  {
+    -1,                                        -1,
+    TYPE_INTEGER,                      CONF_VALUE_32_BIT(8),
+    &li.bd_color_4,                    GD_C64_COLOR(5)
+  },
+  {
+    -1,                                        -1,
+    TYPE_INTEGER,                      CONF_VALUE_32_BIT(9),
+    &li.bd_color_5,                    GD_C64_COLOR(6)
+  },
 
   {
     -1,                                        -1,
@@ -703,6 +739,30 @@ static struct LevelFileConfigInfo chunk_config_ELEM[] =
     &li.bd_dragonfly_explodes_to,      EL_BD_EXPLODING_1
   },
 
+  {
+    EL_BD_DIAMOND_GROWING_5,           -1,
+    TYPE_ELEMENT,                      CONF_VALUE_16_BIT(1),
+    &li.bd_diamond_birth_turns_to,     EL_BD_DIAMOND
+  },
+
+  {
+    EL_BD_BOMB_EXPLODING_4,            -1,
+    TYPE_ELEMENT,                      CONF_VALUE_16_BIT(1),
+    &li.bd_bomb_explosion_turns_to,    EL_BD_WALL
+  },
+
+  {
+    EL_BD_NITRO_PACK_EXPLODING_4,      -1,
+    TYPE_ELEMENT,                      CONF_VALUE_16_BIT(1),
+    &li.bd_nitro_explosion_turns_to,   EL_EMPTY
+  },
+
+  {
+    EL_BD_EXPLODING_5,                 -1,
+    TYPE_ELEMENT,                      CONF_VALUE_16_BIT(1),
+    &li.bd_explosion_turns_to,         EL_EMPTY
+  },
+
   {
     EL_BD_MAGIC_WALL,                  -1,
     TYPE_BOOLEAN,                      CONF_VALUE_8_BIT(1),
@@ -713,6 +773,16 @@ static struct LevelFileConfigInfo chunk_config_ELEM[] =
     TYPE_BOOLEAN,                      CONF_VALUE_8_BIT(2),
     &li.bd_magic_wall_stops_amoeba,    TRUE
   },
+  {
+    EL_BD_MAGIC_WALL,                  -1,
+    TYPE_BOOLEAN,                      CONF_VALUE_8_BIT(3),
+    &li.bd_magic_wall_zero_infinite,   TRUE
+  },
+  {
+    EL_BD_MAGIC_WALL,                  -1,
+    TYPE_BOOLEAN,                      CONF_VALUE_8_BIT(4),
+    &li.bd_magic_wall_break_scan,      FALSE
+  },
   {
     EL_BD_MAGIC_WALL,                  -1,
     TYPE_ELEMENT,                      CONF_VALUE_16_BIT(1),
@@ -926,6 +996,12 @@ static struct LevelFileConfigInfo chunk_config_ELEM[] =
     &li.bd_hammer_walls_reappear_delay,        100
   },
 
+  {
+    EL_BD_ROCKET_LAUNCHER,             -1,
+    TYPE_BOOLEAN,                      CONF_VALUE_8_BIT(1),
+    &li.bd_infinite_rockets,           FALSE
+  },
+
   {
     EL_BD_SKELETON,                    -1,
     TYPE_INTEGER,                      CONF_VALUE_8_BIT(1),
@@ -2306,6 +2382,13 @@ static void setLevelInfoToDefaults_Level(struct LevelInfo *level)
   // detect custom elements when loading them
   level->file_has_custom_elements = FALSE;
 
+  // set random colors for BD style levels according to preferred color type
+  SetRandomLevelColors_BD(setup.bd_default_color_type);
+
+  // set default color type and colors for BD style level colors
+  SetDefaultLevelColorType_BD();
+  SetDefaultLevelColors_BD();
+
   // set all bug compatibility flags to "false" => do not emulate this bug
   level->use_action_after_change_bug = FALSE;
 
@@ -4234,8 +4317,10 @@ static void CopyNativeLevel_RND_to_BD(struct LevelInfo *level)
   cave->voodoo_disappear_in_explosion  = level->bd_voodoo_vanish_by_explosion;
   cave->level_penalty_time[0]          = level->bd_voodoo_penalty_time;
   cave->level_magic_wall_time[0]       = level->time_magic_wall;
+  cave->magic_timer_zero_is_infinite   = level->bd_magic_wall_zero_infinite;
   cave->magic_timer_wait_for_hatching  = level->bd_magic_wall_wait_hatching;
   cave->magic_wall_stops_amoeba                = level->bd_magic_wall_stops_amoeba;
+  cave->magic_wall_breakscan           = level->bd_magic_wall_break_scan;
 
   cave->magic_diamond_to               = LEVEL_TO_CAVE(level->bd_magic_wall_diamond_to);
   cave->magic_stone_to                 = LEVEL_TO_CAVE(level->bd_magic_wall_rock_to);
@@ -4302,6 +4387,8 @@ static void CopyNativeLevel_RND_to_BD(struct LevelInfo *level)
   cave->hammered_walls_reappear                = level->bd_hammer_walls_reappear;
   cave->hammered_wall_reappear_frame   = level->bd_hammer_walls_reappear_delay;
 
+  cave->infinite_rockets               = level->bd_infinite_rockets;
+
   cave->skeletons_needed_for_pot       = level->bd_num_skeletons_needed_for_pot;
   cave->skeletons_worth_diamonds       = level->bd_skeleton_worth_num_diamonds;
 
@@ -4329,6 +4416,19 @@ static void CopyNativeLevel_RND_to_BD(struct LevelInfo *level)
   cave->stonefly_explode_to            = LEVEL_TO_CAVE(level->bd_stonefly_explodes_to);
   cave->dragonfly_explode_to           = LEVEL_TO_CAVE(level->bd_dragonfly_explodes_to);
 
+  cave->diamond_birth_effect           = LEVEL_TO_CAVE(level->bd_diamond_birth_turns_to);
+  cave->bomb_explosion_effect          = LEVEL_TO_CAVE(level->bd_bomb_explosion_turns_to);
+  cave->nitro_explosion_effect         = LEVEL_TO_CAVE(level->bd_nitro_explosion_turns_to);
+  cave->explosion_effect               = LEVEL_TO_CAVE(level->bd_explosion_turns_to);
+
+  cave->colorb                         = level->bd_color_b;
+  cave->color0                         = level->bd_color_0;
+  cave->color1                         = level->bd_color_1;
+  cave->color2                         = level->bd_color_2;
+  cave->color3                         = level->bd_color_3;
+  cave->color4                         = level->bd_color_4;
+  cave->color5                         = level->bd_color_5;
+
   // level name
   strncpy(cave->name, level->name, sizeof(GdString));
   cave->name[sizeof(GdString) - 1] = '\0';
@@ -4390,8 +4490,10 @@ static void CopyNativeLevel_BD_to_RND(struct LevelInfo *level)
   level->bd_voodoo_vanish_by_explosion = cave->voodoo_disappear_in_explosion;
   level->bd_voodoo_penalty_time                = cave->level_penalty_time[bd_level_nr];
   level->time_magic_wall               = cave->level_magic_wall_time[bd_level_nr];
+  level->bd_magic_wall_zero_infinite   = cave->magic_timer_zero_is_infinite;
   level->bd_magic_wall_wait_hatching   = cave->magic_timer_wait_for_hatching;
   level->bd_magic_wall_stops_amoeba    = cave->magic_wall_stops_amoeba;
+  level->bd_magic_wall_break_scan      = cave->magic_wall_breakscan;
 
   level->bd_magic_wall_diamond_to      = CAVE_TO_LEVEL(cave->magic_diamond_to);
   level->bd_magic_wall_rock_to         = CAVE_TO_LEVEL(cave->magic_stone_to);
@@ -4458,6 +4560,8 @@ static void CopyNativeLevel_BD_to_RND(struct LevelInfo *level)
   level->bd_hammer_walls_reappear      = cave->hammered_walls_reappear;
   level->bd_hammer_walls_reappear_delay        = cave->hammered_wall_reappear_frame;
 
+  level->bd_infinite_rockets           = cave->infinite_rockets;
+
   level->bd_num_skeletons_needed_for_pot= cave->skeletons_needed_for_pot;
   level->bd_skeleton_worth_num_diamonds        = cave->skeletons_worth_diamonds;
 
@@ -4485,6 +4589,23 @@ static void CopyNativeLevel_BD_to_RND(struct LevelInfo *level)
   level->bd_stonefly_explodes_to       = CAVE_TO_LEVEL(cave->stonefly_explode_to);
   level->bd_dragonfly_explodes_to      = CAVE_TO_LEVEL(cave->dragonfly_explode_to);
 
+  level->bd_diamond_birth_turns_to     = CAVE_TO_LEVEL(cave->diamond_birth_effect);
+  level->bd_bomb_explosion_turns_to    = CAVE_TO_LEVEL(cave->bomb_explosion_effect);
+  level->bd_nitro_explosion_turns_to   = CAVE_TO_LEVEL(cave->nitro_explosion_effect);
+  level->bd_explosion_turns_to         = CAVE_TO_LEVEL(cave->explosion_effect);
+
+  level->bd_color_b                    = cave->colorb;
+  level->bd_color_0                    = cave->color0;
+  level->bd_color_1                    = cave->color1;
+  level->bd_color_2                    = cave->color2;
+  level->bd_color_3                    = cave->color3;
+  level->bd_color_4                    = cave->color4;
+  level->bd_color_5                    = cave->color5;
+
+  // set default color type and colors for BD style level colors
+  SetDefaultLevelColorType_BD();
+  SetDefaultLevelColors_BD();
+
   // level name
   char *cave_name = getStringPrint("%s / %d", cave->name, bd_level_nr + 1);
 
@@ -4563,6 +4684,9 @@ static void CopyNativeTape_BD_to_RND(struct LevelInfo *level)
   }
 
   TapeHaltRecording();
+
+  if (!replay->success)
+    Warn("BD replay is marked as not successful");
 }
 
 
@@ -10619,6 +10743,22 @@ static struct TokenInfo global_setup_tokens[] =
     TYPE_SWITCH3,
     &setup.bd_smooth_movements,                        "bd_smooth_movements"
   },
+  {
+    TYPE_INTEGER,
+    &setup.bd_palette_c64,                     "bd_palette_c64"
+  },
+  {
+    TYPE_INTEGER,
+    &setup.bd_palette_c64dtv,                  "bd_palette_c64dtv"
+  },
+  {
+    TYPE_INTEGER,
+    &setup.bd_palette_atari,                   "bd_palette_atari"
+  },
+  {
+    TYPE_INTEGER,
+    &setup.bd_default_color_type,              "bd_default_color_type"
+  },
   {
     TYPE_SWITCH,
     &setup.sp_show_border_elements,            "sp_show_border_elements"
@@ -11443,6 +11583,10 @@ static void setSetupInfoToDefaults(struct SetupInfo *si)
   si->bd_skip_hatching = FALSE;
   si->bd_scroll_delay = TRUE;
   si->bd_smooth_movements = AUTO;
+  si->bd_palette_c64 = GD_DEFAULT_PALETTE_C64;
+  si->bd_palette_c64dtv = GD_DEFAULT_PALETTE_C64DTV;
+  si->bd_palette_atari = GD_DEFAULT_PALETTE_ATARI;
+  si->bd_default_color_type = GD_DEFAULT_COLOR_TYPE;
   si->sp_show_border_elements = FALSE;
   si->small_game_graphics = FALSE;
   si->show_load_save_buttons = FALSE;