X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Ffiles.c;h=9fcc9e4054a82127d028973d69a42f78cf145a1e;hb=be208e8ebb9fbe5a97e7ed1d63aa421ac303c0bc;hp=a150f89146217d1842a5ab5c32157be031638d14;hpb=faccf2ee1a414cf7500e995edc37d68aabcb4b46;p=rocksndiamonds.git diff --git a/src/files.c b/src/files.c index a150f891..9fcc9e40 100644 --- a/src/files.c +++ b/src/files.c @@ -709,6 +709,73 @@ static struct LevelFileConfigInfo chunk_config_ELEM[] = &li.bd_slime_random_seed_c64, -1 }, + { + EL_BD_ACID, -1, + TYPE_ELEMENT, CONF_VALUE_16_BIT(1), + &li.bd_acid_eats_element, EL_BD_SAND + }, + { + EL_BD_ACID, -1, + TYPE_INTEGER, CONF_VALUE_8_BIT(1), + &li.bd_acid_spread_rate, 3 + }, + { + EL_BD_ACID, -1, + TYPE_ELEMENT, CONF_VALUE_16_BIT(2), + &li.bd_acid_turns_to_element, EL_EMPTY + }, + + { + EL_BD_BITER, -1, + TYPE_INTEGER, CONF_VALUE_8_BIT(1), + &li.bd_biter_move_delay, 0 + }, + { + EL_BD_BITER, -1, + TYPE_ELEMENT, CONF_VALUE_16_BIT(1), + &li.bd_biter_eats_element, EL_BD_DIAMOND + }, + + { + EL_BD_BLADDER, -1, + TYPE_ELEMENT, CONF_VALUE_16_BIT(1), + &li.bd_bladder_converts_by_element, EL_BD_VOODOO_DOLL + }, + + { + EL_BD_EXPANDABLE_WALL_ANY, -1, + TYPE_BOOLEAN, CONF_VALUE_8_BIT(1), + &li.bd_change_expanding_wall, FALSE + }, + + { + EL_BD_REPLICATOR, -1, + TYPE_BOOLEAN, CONF_VALUE_8_BIT(1), + &li.bd_replicators_active, TRUE + }, + { + EL_BD_REPLICATOR, -1, + TYPE_INTEGER, CONF_VALUE_8_BIT(2), + &li.bd_replicator_create_delay, 4 + }, + + { + EL_BD_CONVEYOR_LEFT, -1, + TYPE_BOOLEAN, CONF_VALUE_8_BIT(1), + &li.bd_conveyor_belts_active, TRUE + }, + { + EL_BD_CONVEYOR_LEFT, -1, + TYPE_BOOLEAN, CONF_VALUE_8_BIT(2), + &li.bd_conveyor_belts_changed, FALSE + }, + + { + EL_BD_WATER, -1, + TYPE_BOOLEAN, CONF_VALUE_8_BIT(1), + &li.bd_water_cannot_flow_down, FALSE + }, + // (the following values are related to various game elements) { @@ -3957,7 +4024,7 @@ static void CopyNativeLevel_RND_to_BD(struct LevelInfo *level) cave->pushing_stone_prob = level->bd_pushing_prob * 10000; 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; - cave->snap_element = map_element_RND_to_BD(level->bd_snap_element); + cave->snap_element = map_element_RND_to_BD_cave(level->bd_snap_element); // element properties cave->level_bonus_time[0] = level->bd_clock_extra_time; @@ -3981,12 +4048,12 @@ static void CopyNativeLevel_RND_to_BD(struct LevelInfo *level) 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); + cave->amoeba_too_big_effect = map_element_RND_to_BD_cave(level->bd_amoeba_content_too_big); + cave->amoeba_enclosed_effect = map_element_RND_to_BD_cave(level->bd_amoeba_content_enclosed); + cave->amoeba_2_too_big_effect = map_element_RND_to_BD_cave(level->bd_amoeba_2_content_too_big); + cave->amoeba_2_enclosed_effect = map_element_RND_to_BD_cave(level->bd_amoeba_2_content_enclosed); + cave->amoeba_2_explosion_effect = map_element_RND_to_BD_cave(level->bd_amoeba_2_content_exploding); + cave->amoeba_2_looks_like = map_element_RND_to_BD_cave(level->bd_amoeba_2_content_looks_like); cave->slime_predictable = level->bd_slime_is_predictable; cave->slime_correct_random = level->bd_slime_correct_random; @@ -3995,6 +4062,25 @@ static void CopyNativeLevel_RND_to_BD(struct LevelInfo *level) cave->level_slime_seed_c64[0] = level->bd_slime_random_seed_c64; cave->level_rand[0] = level->bd_cave_random_seed_c64; + cave->acid_eats_this = map_element_RND_to_BD_cave(level->bd_acid_eats_element); + cave->acid_spread_ratio = level->bd_acid_spread_rate * 10000; + cave->acid_turns_to = map_element_RND_to_BD_cave(level->bd_acid_turns_to_element); + + cave->biter_delay_frame = level->bd_biter_move_delay; + cave->biter_eat = map_element_RND_to_BD_cave(level->bd_biter_eats_element); + + cave->bladder_converts_by = map_element_RND_to_BD_cave(level->bd_bladder_converts_by_element); + + cave->expanding_wall_changed = level->bd_change_expanding_wall; + + cave->replicators_active = level->bd_replicators_active; + cave->replicator_delay_frame = level->bd_replicator_create_delay; + + cave->conveyor_belts_active = level->bd_conveyor_belts_active; + cave->conveyor_belts_direction_changed= level->bd_conveyor_belts_changed; + + cave->water_does_not_flow_down = level->bd_water_cannot_flow_down; + // level name strncpy(cave->name, level->name, sizeof(GdString)); cave->name[sizeof(GdString) - 1] = '\0'; @@ -4002,7 +4088,7 @@ static void CopyNativeLevel_RND_to_BD(struct LevelInfo *level) // playfield elements for (x = 0; x < cave->w; x++) for (y = 0; y < cave->h; y++) - cave->map[y][x] = map_element_RND_to_BD(level->field[x][y]); + cave->map[y][x] = map_element_RND_to_BD_cave(level->field[x][y]); } static void CopyNativeLevel_BD_to_RND(struct LevelInfo *level) @@ -4047,7 +4133,7 @@ static void CopyNativeLevel_BD_to_RND(struct LevelInfo *level) 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; - level->bd_snap_element = map_element_BD_to_RND(cave->snap_element); + level->bd_snap_element = map_element_BD_to_RND_cave(cave->snap_element); // element properties level->bd_clock_extra_time = cave->level_bonus_time[bd_level_nr]; @@ -4071,12 +4157,12 @@ static void CopyNativeLevel_BD_to_RND(struct LevelInfo *level) 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->bd_amoeba_content_too_big = map_element_BD_to_RND_cave(cave->amoeba_too_big_effect); + level->bd_amoeba_content_enclosed = map_element_BD_to_RND_cave(cave->amoeba_enclosed_effect); + level->bd_amoeba_2_content_too_big = map_element_BD_to_RND_cave(cave->amoeba_2_too_big_effect); + level->bd_amoeba_2_content_enclosed = map_element_BD_to_RND_cave(cave->amoeba_2_enclosed_effect); + level->bd_amoeba_2_content_exploding = map_element_BD_to_RND_cave(cave->amoeba_2_explosion_effect); + level->bd_amoeba_2_content_looks_like = map_element_BD_to_RND_cave(cave->amoeba_2_looks_like); level->bd_slime_is_predictable = cave->slime_predictable; level->bd_slime_correct_random = cave->slime_correct_random; @@ -4085,6 +4171,25 @@ static void CopyNativeLevel_BD_to_RND(struct LevelInfo *level) level->bd_slime_random_seed_c64 = cave->level_slime_seed_c64[bd_level_nr]; level->bd_cave_random_seed_c64 = cave->level_rand[bd_level_nr]; + level->bd_acid_eats_element = map_element_BD_to_RND_cave(cave->acid_eats_this); + level->bd_acid_spread_rate = cave->acid_spread_ratio / 10000; + level->bd_acid_turns_to_element = map_element_BD_to_RND_cave(cave->acid_turns_to); + + level->bd_biter_move_delay = cave->biter_delay_frame; + level->bd_biter_eats_element = map_element_BD_to_RND_cave(cave->biter_eat); + + level->bd_bladder_converts_by_element = map_element_BD_to_RND_cave(cave->bladder_converts_by); + + level->bd_change_expanding_wall = cave->expanding_wall_changed; + + level->bd_replicators_active = cave->replicators_active; + level->bd_replicator_create_delay = cave->replicator_delay_frame; + + level->bd_conveyor_belts_active = cave->conveyor_belts_active; + level->bd_conveyor_belts_changed = cave->conveyor_belts_direction_changed; + + level->bd_water_cannot_flow_down = cave->water_does_not_flow_down; + // level name char *cave_name = getStringPrint("%s / %d", cave->name, bd_level_nr + 1); @@ -4094,7 +4199,7 @@ static void CopyNativeLevel_BD_to_RND(struct LevelInfo *level) // 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]); + level->field[x][y] = map_element_BD_to_RND_cave(cave->map[y][x]); checked_free(cave_name); } @@ -10427,6 +10532,10 @@ static struct TokenInfo editor_cascade_setup_tokens[] = TYPE_SWITCH, &setup.editor_cascade.el_bd_native, "editor.cascade.el_bd_native" }, + { + TYPE_SWITCH, + &setup.editor_cascade.el_bd_effects, "editor.cascade.el_bd_effects" + }, { TYPE_SWITCH, &setup.editor_cascade.el_em, "editor.cascade.el_em" @@ -11121,6 +11230,7 @@ static void setSetupInfoToDefaults(struct SetupInfo *si) si->editor.el_boulderdash = TRUE; si->editor.el_boulderdash_native = TRUE; + si->editor.el_boulderdash_effects = TRUE; si->editor.el_emerald_mine = TRUE; si->editor.el_emerald_mine_club = TRUE; si->editor.el_more = TRUE; @@ -11295,6 +11405,7 @@ static void setSetupInfoToDefaults_EditorCascade(struct SetupInfo *si) { si->editor_cascade.el_bd = TRUE; si->editor_cascade.el_bd_native = TRUE; + si->editor_cascade.el_bd_effects = FALSE; si->editor_cascade.el_em = TRUE; si->editor_cascade.el_emc = TRUE; si->editor_cascade.el_rnd = TRUE;