{
-1, -1,
TYPE_BOOLEAN, CONF_VALUE_8_BIT(21),
- &li.bd_wraparound_objects, FALSE
- },
- {
- -1, -1,
- TYPE_BOOLEAN, CONF_VALUE_8_BIT(22),
&li.bd_scan_first_and_last_row, TRUE
},
{
-1, -1,
- TYPE_BOOLEAN, CONF_VALUE_8_BIT(23),
+ TYPE_BOOLEAN, CONF_VALUE_8_BIT(22),
&li.bd_short_explosions, TRUE
},
{
-1, -1,
- TYPE_BOOLEAN, CONF_VALUE_8_BIT(24),
+ TYPE_BOOLEAN, CONF_VALUE_8_BIT(23),
&li.bd_gravity_affects_all, TRUE
},
},
// (these values are only valid for BD style levels)
+ // (some values for BD style amoeba following below)
{
EL_BD_PLAYER, -1,
TYPE_BOOLEAN, CONF_VALUE_8_BIT(1),
&li.score[SC_DIAMOND_EXTRA], 20
},
+ {
+ EL_BD_MAGIC_WALL, -1,
+ TYPE_BOOLEAN, CONF_VALUE_8_BIT(1),
+ &li.bd_magic_wall_wait_hatching, FALSE
+ },
+ {
+ EL_BD_MAGIC_WALL, -1,
+ TYPE_BOOLEAN, CONF_VALUE_8_BIT(2),
+ &li.bd_magic_wall_stops_amoeba, TRUE
+ },
+
// (the following values are related to various game elements)
{
&li.score[SC_CRYSTAL], 10
},
+ // (amoeba values used by R'n'D game engine only)
{
EL_BD_AMOEBA, -1,
TYPE_ELEMENT, CONF_VALUE_16_BIT(1),
TYPE_BOOLEAN, CONF_VALUE_8_BIT(1),
&li.grow_into_diggable, TRUE
},
+ // (amoeba values used by BD game engine only)
+ {
+ EL_BD_AMOEBA, -1,
+ TYPE_BOOLEAN, CONF_VALUE_8_BIT(2),
+ &li.bd_amoeba_wait_for_hatching, FALSE
+ },
+ {
+ EL_BD_AMOEBA, -1,
+ TYPE_BOOLEAN, CONF_VALUE_8_BIT(3),
+ &li.bd_amoeba_start_immediately, TRUE
+ },
+ {
+ EL_BD_AMOEBA, -1,
+ TYPE_BOOLEAN, CONF_VALUE_8_BIT(4),
+ &li.bd_amoeba_2_explode_by_amoeba, TRUE
+ },
+ {
+ EL_BD_AMOEBA, -1,
+ TYPE_INTEGER, CONF_VALUE_16_BIT(3),
+ &li.bd_amoeba_threshold_too_big, 200
+ },
+ {
+ EL_BD_AMOEBA, -1,
+ TYPE_INTEGER, CONF_VALUE_16_BIT(4),
+ &li.bd_amoeba_slow_growth_time, 200
+ },
+ {
+ EL_BD_AMOEBA, -1,
+ TYPE_INTEGER, CONF_VALUE_8_BIT(5),
+ &li.bd_amoeba_slow_growth_rate, 3
+ },
+ {
+ EL_BD_AMOEBA, -1,
+ TYPE_INTEGER, CONF_VALUE_8_BIT(6),
+ &li.bd_amoeba_fast_growth_rate, 25
+ },
+ {
+ EL_BD_AMOEBA, -1,
+ TYPE_ELEMENT, CONF_VALUE_16_BIT(5),
+ &li.bd_amoeba_content_too_big, EL_BD_ROCK
+ },
+ {
+ EL_BD_AMOEBA, -1,
+ TYPE_ELEMENT, CONF_VALUE_16_BIT(6),
+ &li.bd_amoeba_content_enclosed, EL_BD_DIAMOND
+ },
+
+ {
+ EL_BD_AMOEBA_2, -1,
+ TYPE_INTEGER, CONF_VALUE_16_BIT(3),
+ &li.bd_amoeba_2_threshold_too_big, 200
+ },
+ {
+ EL_BD_AMOEBA_2, -1,
+ TYPE_INTEGER, CONF_VALUE_16_BIT(4),
+ &li.bd_amoeba_2_slow_growth_time, 200
+ },
+ {
+ EL_BD_AMOEBA_2, -1,
+ TYPE_INTEGER, CONF_VALUE_8_BIT(5),
+ &li.bd_amoeba_2_slow_growth_rate, 3
+ },
+ {
+ EL_BD_AMOEBA_2, -1,
+ TYPE_INTEGER, CONF_VALUE_8_BIT(6),
+ &li.bd_amoeba_2_fast_growth_rate, 25
+ },
+ {
+ EL_BD_AMOEBA_2, -1,
+ TYPE_ELEMENT, CONF_VALUE_16_BIT(5),
+ &li.bd_amoeba_2_content_too_big, EL_BD_ROCK
+ },
+ {
+ EL_BD_AMOEBA_2, -1,
+ TYPE_ELEMENT, CONF_VALUE_16_BIT(6),
+ &li.bd_amoeba_2_content_enclosed, EL_BD_DIAMOND
+ },
+ {
+ EL_BD_AMOEBA_2, -1,
+ TYPE_ELEMENT, CONF_VALUE_16_BIT(7),
+ &li.bd_amoeba_2_content_exploding, EL_EMPTY
+ },
+ {
+ EL_BD_AMOEBA_2, -1,
+ TYPE_ELEMENT, CONF_VALUE_16_BIT(8),
+ &li.bd_amoeba_2_content_looks_like, EL_BD_AMOEBA_2
+ },
{
EL_YAMYAM, -1,
GdCave *cave = NULL; // will be changed below
int cave_w = MIN(level->fieldx, MAX_PLAYFIELD_WIDTH);
int cave_h = MIN(level->fieldy, MAX_PLAYFIELD_HEIGHT);
- int i, x, y;
+ int x, y;
setLevelInfoToDefaults_BD_Ext(cave_w, cave_h);
// cave and map newly allocated when set to defaults above
cave = level_bd->cave;
- for (i = 0; i < 5; i++)
- {
- // level settings
- cave->level_time[i] = level->time;
- cave->level_diamonds[i] = level->gems_needed;
- cave->level_magic_wall_time[i] = level->time_magic_wall;
+ // level type
+ cave->intermission = level->bd_intermission;
- // game timing
- 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;
+ // level settings
+ cave->level_time[0] = level->time;
+ cave->level_diamonds[0] = level->gems_needed;
- // scores
- cave->level_timevalue[i] = level->score[SC_TIME_BONUS];
- }
+ // game timing
+ cave->scheduling = level->bd_scheduling_type;
+ cave->pal_timing = level->bd_pal_timing;
+ cave->level_speed[0] = level->bd_cycle_delay_ms;
+ cave->level_ckdelay[0] = level->bd_cycle_delay_c64;
+ cave->level_hatching_delay_frame[0] = level->bd_hatching_delay_cycles;
+ cave->level_hatching_delay_time[0] = level->bd_hatching_delay_seconds;
// scores
+ cave->level_timevalue[0] = level->score[SC_TIME_BONUS];
cave->diamond_value = level->score[SC_EMERALD];
cave->extra_diamond_value = level->score[SC_DIAMOND_EXTRA];
- // game timing
- cave->scheduling = level->bd_scheduling_type;
- cave->pal_timing = level->bd_pal_timing;
-
// compatibility settings
cave->lineshift = level->bd_line_shifting_borders;
- cave->wraparound_objects = level->bd_wraparound_objects;
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;
- // level type
- cave->intermission = level->bd_intermission;
-
// player properties
cave->diagonal_movements = level->bd_diagonal_movements;
cave->active_is_first_found = level->bd_topmost_player_active;
cave->pushing_stone_prob_sweet = level->bd_pushing_prob_with_sweet * 10000;
cave->mega_stones_pushable_with_sweet = level->bd_push_mega_rock_with_sweet;
+ // element properties
+ cave->level_magic_wall_time[0] = level->time_magic_wall;
+ cave->magic_timer_wait_for_hatching = level->bd_magic_wall_wait_hatching;
+ cave->magic_wall_stops_amoeba = level->bd_magic_wall_stops_amoeba;
+ cave->amoeba_timer_wait_for_hatching = level->bd_amoeba_wait_for_hatching;
+ cave->amoeba_timer_started_immediately= level->bd_amoeba_start_immediately;
+ cave->amoeba_2_explodes_by_amoeba = level->bd_amoeba_2_explode_by_amoeba;
+ cave->level_amoeba_threshold[0] = level->bd_amoeba_threshold_too_big;
+ cave->level_amoeba_time[0] = level->bd_amoeba_slow_growth_time;
+ cave->amoeba_growth_prob = level->bd_amoeba_slow_growth_rate * 10000;
+ cave->amoeba_fast_growth_prob = level->bd_amoeba_fast_growth_rate * 10000;
+ cave->level_amoeba_2_threshold[0] = level->bd_amoeba_2_threshold_too_big;
+ cave->level_amoeba_2_time[0] = level->bd_amoeba_2_slow_growth_time;
+ cave->amoeba_2_growth_prob = level->bd_amoeba_2_slow_growth_rate * 10000;
+ cave->amoeba_2_fast_growth_prob = level->bd_amoeba_2_fast_growth_rate * 10000;
+
+ cave->amoeba_too_big_effect = map_element_RND_to_BD(level->bd_amoeba_content_too_big);
+ cave->amoeba_enclosed_effect = map_element_RND_to_BD(level->bd_amoeba_content_enclosed);
+ cave->amoeba_2_too_big_effect = map_element_RND_to_BD(level->bd_amoeba_2_content_too_big);
+ cave->amoeba_2_enclosed_effect = map_element_RND_to_BD(level->bd_amoeba_2_content_enclosed);
+ cave->amoeba_2_explosion_effect = map_element_RND_to_BD(level->bd_amoeba_2_content_exploding);
+ cave->amoeba_2_looks_like = map_element_RND_to_BD(level->bd_amoeba_2_content_looks_like);
+
// level name
strncpy(cave->name, level->name, sizeof(GdString));
cave->name[sizeof(GdString) - 1] = '\0';
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];
- level->time_magic_wall = cave->level_magic_wall_time[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->score[SC_EMERALD] = cave->diamond_value;
level->score[SC_DIAMOND_EXTRA] = cave->extra_diamond_value;
- // game timing
- level->bd_scheduling_type = cave->scheduling;
- level->bd_pal_timing = cave->pal_timing;
-
// compatibility settings
level->bd_line_shifting_borders = cave->lineshift;
- level->bd_wraparound_objects = cave->wraparound_objects;
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;
- // level type
- level->bd_intermission = cave->intermission;
-
// player properties
level->bd_diagonal_movements = cave->diagonal_movements;
level->bd_topmost_player_active = cave->active_is_first_found;
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->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);