+ GdCave *cave = level_bd->cave;
+ int bd_level_nr = level_bd->level_nr;
+ int x, y;
+
+ level->fieldx = MIN(cave->w, MAX_LEV_FIELDX);
+ level->fieldy = MIN(cave->h, MAX_LEV_FIELDY);
+
+ // level type
+ level->bd_intermission = cave->intermission;
+
+ // level settings
+ level->time = cave->level_time[bd_level_nr];
+ level->gems_needed = cave->level_diamonds[bd_level_nr];
+
+ // game timing
+ level->bd_scheduling_type = cave->scheduling;
+ level->bd_pal_timing = cave->pal_timing;
+ 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];
+
+ // scores
+ 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;
+
+ // compatibility settings
+ 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;
+ level->bd_topmost_player_active = cave->active_is_first_found;
+ level->bd_pushing_prob = cave->pushing_stone_prob / 10000;
+ level->bd_pushing_prob_with_sweet = cave->pushing_stone_prob_sweet / 10000;
+ level->bd_push_mega_rock_with_sweet = cave->mega_stones_pushable_with_sweet;
+
+ // element properties
+ level->bd_clock_extra_time = cave->level_bonus_time[0];
+ level->time_magic_wall = cave->level_magic_wall_time[bd_level_nr];
+ 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_amoeba_wait_for_hatching = cave->amoeba_timer_wait_for_hatching;
+ level->bd_amoeba_start_immediately = cave->amoeba_timer_started_immediately;
+ level->bd_amoeba_2_explode_by_amoeba = cave->amoeba_2_explodes_by_amoeba;
+ level->bd_amoeba_threshold_too_big = cave->level_amoeba_threshold[0];
+ level->bd_amoeba_slow_growth_time = cave->level_amoeba_time[0];
+ level->bd_amoeba_slow_growth_rate = cave->amoeba_growth_prob / 10000;
+ level->bd_amoeba_fast_growth_rate = cave->amoeba_fast_growth_prob / 10000;
+ level->bd_amoeba_2_threshold_too_big = cave->level_amoeba_2_threshold[0];
+ level->bd_amoeba_2_slow_growth_time = cave->level_amoeba_2_time[0];
+ level->bd_amoeba_2_slow_growth_rate = cave->amoeba_2_growth_prob / 10000;
+ level->bd_amoeba_2_fast_growth_rate = cave->amoeba_2_fast_growth_prob / 10000;
+
+ level->bd_amoeba_content_too_big = map_element_BD_to_RND(cave->amoeba_too_big_effect);
+ level->bd_amoeba_content_enclosed = map_element_BD_to_RND(cave->amoeba_enclosed_effect);
+ level->bd_amoeba_2_content_too_big = map_element_BD_to_RND(cave->amoeba_2_too_big_effect);
+ level->bd_amoeba_2_content_enclosed = map_element_BD_to_RND(cave->amoeba_2_enclosed_effect);
+ level->bd_amoeba_2_content_exploding = map_element_BD_to_RND(cave->amoeba_2_explosion_effect);
+ level->bd_amoeba_2_content_looks_like = map_element_BD_to_RND(cave->amoeba_2_looks_like);
+
+ // level name
+ 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';
+
+ // playfield elements
+ 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]);