cleanup of setup value fonts on setup screens
[rocksndiamonds.git] / src / files.c
index 83700121df91151b3f37b0c3c9d5a04a0b9263d0..25943b63f123b597870bcc4a56141b6d48997023 100644 (file)
@@ -307,12 +307,7 @@ static struct LevelFileConfigInfo chunk_config_INFO[] =
   },
   {
     -1,                                        -1,
-    TYPE_BOOLEAN,                      CONF_VALUE_8_BIT(23),
-    &li.bd_gravity_affects_all,                TRUE
-  },
-  {
-    -1,                                        -1,
-    TYPE_INTEGER,                      CONF_VALUE_8_BIT(24),
+    TYPE_INTEGER,                      CONF_VALUE_8_BIT(23),
     &li.bd_cave_random_seed_c64,       0
   },
 
@@ -639,11 +634,98 @@ static struct LevelFileConfigInfo chunk_config_ELEM[] =
     &li.bd_snap_element,               EL_EMPTY
   },
 
+  {
+    EL_BD_SAND,                                -1,
+    TYPE_ELEMENT,                      CONF_VALUE_16_BIT(1),
+    &li.bd_sand_looks_like,            EL_BD_SAND
+  },
+
+  {
+    EL_BD_ROCK,                                -1,
+    TYPE_ELEMENT,                      CONF_VALUE_16_BIT(1),
+    &li.bd_rock_turns_to_on_falling,   EL_BD_ROCK_FALLING
+  },
+  {
+    EL_BD_ROCK,                                -1,
+    TYPE_ELEMENT,                      CONF_VALUE_16_BIT(2),
+    &li.bd_rock_turns_to_on_impact,    EL_BD_ROCK
+  },
+
   {
     EL_BD_DIAMOND,                     -1,
     TYPE_INTEGER,                      CONF_VALUE_16_BIT(1),
     &li.score[SC_DIAMOND_EXTRA],       20
   },
+  {
+    EL_BD_DIAMOND,                     -1,
+    TYPE_ELEMENT,                      CONF_VALUE_16_BIT(2),
+    &li.bd_diamond_turns_to_on_falling,        EL_BD_DIAMOND_FALLING
+  },
+  {
+    EL_BD_DIAMOND,                     -1,
+    TYPE_ELEMENT,                      CONF_VALUE_16_BIT(3),
+    &li.bd_diamond_turns_to_on_impact, EL_BD_DIAMOND
+  },
+
+  {
+    EL_BD_FIREFLY,                     -1,
+    TYPE_ELEMENT,                      CONF_VALUE_16_BIT(1),
+    &li.bd_firefly_explodes_to,                EL_BD_EXPLODING_1
+  },
+
+  {
+    EL_BD_FIREFLY_2,                   -1,
+    TYPE_ELEMENT,                      CONF_VALUE_16_BIT(1),
+    &li.bd_firefly_2_explodes_to,      EL_BD_EXPLODING_1
+  },
+
+  {
+    EL_BD_BUTTERFLY,                   -1,
+    TYPE_ELEMENT,                      CONF_VALUE_16_BIT(1),
+    &li.bd_butterfly_explodes_to,      EL_BD_DIAMOND_GROWING_1
+  },
+
+  {
+    EL_BD_BUTTERFLY_2,                 -1,
+    TYPE_ELEMENT,                      CONF_VALUE_16_BIT(1),
+    &li.bd_butterfly_2_explodes_to,    EL_BD_DIAMOND_GROWING_1
+  },
+
+  {
+    EL_BD_STONEFLY,                    -1,
+    TYPE_ELEMENT,                      CONF_VALUE_16_BIT(1),
+    &li.bd_stonefly_explodes_to,       EL_BD_ROCK_GROWING_1
+  },
+
+  {
+    EL_BD_DRAGONFLY,                   -1,
+    TYPE_ELEMENT,                      CONF_VALUE_16_BIT(1),
+    &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,
@@ -655,6 +737,11 @@ 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_ELEMENT,                      CONF_VALUE_16_BIT(1),
@@ -868,6 +955,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),
@@ -896,9 +989,24 @@ static struct LevelFileConfigInfo chunk_config_ELEM[] =
   },
 
   {
-    EL_BD_SAND,                                -1,
-    TYPE_ELEMENT,                      CONF_VALUE_16_BIT(1),
-    &li.bd_sand_looks_like,            EL_BD_SAND
+    EL_BD_GRAVITY_SWITCH,              -1,
+    TYPE_INTEGER,                      CONF_VALUE_8_BIT(1),
+    &li.bd_gravity_direction,          GD_MV_DOWN
+  },
+  {
+    EL_BD_GRAVITY_SWITCH,              -1,
+    TYPE_BOOLEAN,                      CONF_VALUE_8_BIT(2),
+    &li.bd_gravity_switch_active,      FALSE
+  },
+  {
+    EL_BD_GRAVITY_SWITCH,              -1,
+    TYPE_INTEGER,                      CONF_VALUE_8_BIT(3),
+    &li.bd_gravity_switch_delay,       10
+  },
+  {
+    EL_BD_GRAVITY_SWITCH,              -1,
+    TYPE_BOOLEAN,                      CONF_VALUE_8_BIT(4),
+    &li.bd_gravity_affects_all,                TRUE
   },
 
   // (the following values are related to various game elements)
@@ -4144,7 +4252,6 @@ static void CopyNativeLevel_RND_to_BD(struct LevelInfo *level)
   cave->lineshift                      = level->bd_line_shifting_borders;
   cave->border_scan_first_and_last     = level->bd_scan_first_and_last_row;
   cave->short_explosions               = level->bd_short_explosions;
-  cave->gravity_affects_all            = level->bd_gravity_affects_all;
 
   // player properties
   cave->diagonal_movements             = level->bd_diagonal_movements;
@@ -4162,6 +4269,7 @@ 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;
 
@@ -4230,6 +4338,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;
 
@@ -4240,6 +4350,28 @@ static void CopyNativeLevel_RND_to_BD(struct LevelInfo *level)
   cave->creatures_direction_auto_change_on_start = level->bd_creatures_turn_on_hatching;
   cave->creatures_direction_auto_change_time    = level->bd_creatures_auto_turn_delay;
 
+  cave->gravity                                = level->bd_gravity_direction;
+  cave->gravity_switch_active          = level->bd_gravity_switch_active;
+  cave->gravity_change_time            = level->bd_gravity_switch_delay;
+  cave->gravity_affects_all            = level->bd_gravity_affects_all;
+
+  cave->stone_falling_effect           = LEVEL_TO_CAVE(level->bd_rock_turns_to_on_falling);
+  cave->stone_bouncing_effect          = LEVEL_TO_CAVE(level->bd_rock_turns_to_on_impact);
+  cave->diamond_falling_effect         = LEVEL_TO_CAVE(level->bd_diamond_turns_to_on_falling);
+  cave->diamond_bouncing_effect                = LEVEL_TO_CAVE(level->bd_diamond_turns_to_on_impact);
+
+  cave->firefly_explode_to             = LEVEL_TO_CAVE(level->bd_firefly_explodes_to);
+  cave->alt_firefly_explode_to         = LEVEL_TO_CAVE(level->bd_firefly_2_explodes_to);
+  cave->butterfly_explode_to           = LEVEL_TO_CAVE(level->bd_butterfly_explodes_to);
+  cave->alt_butterfly_explode_to       = LEVEL_TO_CAVE(level->bd_butterfly_2_explodes_to);
+  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);
+
   // level name
   strncpy(cave->name, level->name, sizeof(GdString));
   cave->name[sizeof(GdString) - 1] = '\0';
@@ -4284,7 +4416,6 @@ static void CopyNativeLevel_BD_to_RND(struct LevelInfo *level)
   level->bd_line_shifting_borders      = cave->lineshift;
   level->bd_scan_first_and_last_row    = cave->border_scan_first_and_last;
   level->bd_short_explosions           = cave->short_explosions;
-  level->bd_gravity_affects_all                = cave->gravity_affects_all;
 
   // player properties
   level->bd_diagonal_movements         = cave->diagonal_movements;
@@ -4302,6 +4433,7 @@ 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;
 
@@ -4370,6 +4502,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;
 
@@ -4380,6 +4514,28 @@ static void CopyNativeLevel_BD_to_RND(struct LevelInfo *level)
   level->bd_creatures_turn_on_hatching = cave->creatures_direction_auto_change_on_start;
   level->bd_creatures_auto_turn_delay  = cave->creatures_direction_auto_change_time;
 
+  level->bd_gravity_direction          = cave->gravity;
+  level->bd_gravity_switch_active      = cave->gravity_switch_active;
+  level->bd_gravity_switch_delay       = cave->gravity_change_time;
+  level->bd_gravity_affects_all                = cave->gravity_affects_all;
+
+  level->bd_rock_turns_to_on_falling   = CAVE_TO_LEVEL(cave->stone_falling_effect);
+  level->bd_rock_turns_to_on_impact    = CAVE_TO_LEVEL(cave->stone_bouncing_effect);
+  level->bd_diamond_turns_to_on_falling        = CAVE_TO_LEVEL(cave->diamond_falling_effect);
+  level->bd_diamond_turns_to_on_impact = CAVE_TO_LEVEL(cave->diamond_bouncing_effect);
+
+  level->bd_firefly_explodes_to                = CAVE_TO_LEVEL(cave->firefly_explode_to);
+  level->bd_firefly_2_explodes_to      = CAVE_TO_LEVEL(cave->alt_firefly_explode_to);
+  level->bd_butterfly_explodes_to      = CAVE_TO_LEVEL(cave->butterfly_explode_to);
+  level->bd_butterfly_2_explodes_to    = CAVE_TO_LEVEL(cave->alt_butterfly_explode_to);
+  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 name
   char *cave_name = getStringPrint("%s / %d", cave->name, bd_level_nr + 1);
 
@@ -4458,6 +4614,9 @@ static void CopyNativeTape_BD_to_RND(struct LevelInfo *level)
   }
 
   TapeHaltRecording();
+
+  if (!replay->success)
+    Warn("BD replay is marked as not successful");
 }