X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Ffiles.c;h=2842d1d4fa1eea88deee454ed6b5ba40b5ca2859;hb=18a8fd0a1f4a2999c0cdff4423a584be49ff868a;hp=433f68134896aac251a6ea338c3f831509e7dc5c;hpb=395ed3b7853b446fa77768786eae09b215731570;p=rocksndiamonds.git diff --git a/src/files.c b/src/files.c index 433f6813..2842d1d4 100644 --- a/src/files.c +++ b/src/files.c @@ -273,6 +273,72 @@ static struct LevelFileConfigInfo chunk_config_INFO[] = &li.rate_time_over_score, FALSE }, + { + -1, -1, + TYPE_BOOLEAN, CONF_VALUE_8_BIT(14), + &li.bd_intermission, FALSE + }, + + { + -1, -1, + TYPE_INTEGER, CONF_VALUE_8_BIT(15), + &li.bd_scheduling_type, GD_SCHEDULING_MILLISECONDS + }, + + { + -1, -1, + TYPE_BOOLEAN, CONF_VALUE_8_BIT(16), + &li.bd_pal_timing, FALSE + }, + + { + -1, -1, + TYPE_INTEGER, CONF_VALUE_16_BIT(6), + &li.bd_cycle_delay_ms, 200 + }, + + { + -1, -1, + TYPE_INTEGER, CONF_VALUE_8_BIT(17), + &li.bd_cycle_delay_c64, 0 + }, + + { + -1, -1, + TYPE_INTEGER, CONF_VALUE_8_BIT(18), + &li.bd_hatching_delay_cycles, 21 + }, + + { + -1, -1, + TYPE_INTEGER, CONF_VALUE_8_BIT(19), + &li.bd_hatching_delay_seconds, 2 + }, + + { + -1, -1, + TYPE_BOOLEAN, CONF_VALUE_8_BIT(20), + &li.bd_line_shifting_borders, FALSE + }, + + { + -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), + &li.bd_short_explosions, TRUE + }, + { -1, -1, -1, -1, @@ -563,6 +629,21 @@ static struct LevelFileConfigInfo chunk_config_ELEM[] = &li.initial_inventory_size[3], 1, MAX_INITIAL_INVENTORY_SIZE }, + // (these values are only valid for BD style levels) + { + EL_BD_PLAYER, -1, + TYPE_BOOLEAN, CONF_VALUE_8_BIT(1), + &li.bd_diagonal_movements, FALSE + }, + + { + EL_BD_DIAMOND, -1, + TYPE_INTEGER, CONF_VALUE_16_BIT(1), + &li.score[SC_DIAMOND_EXTRA], 20 + }, + + // (the following values are related to various game elements) + { EL_EMERALD, -1, TYPE_INTEGER, CONF_VALUE_16_BIT(1), @@ -943,14 +1024,6 @@ static struct LevelFileConfigInfo chunk_config_ELEM[] = &li.score[SC_ELEM_BONUS], 10 }, - // ---------- unused values ------------------------------------------------- - - { - EL_UNKNOWN, SAVE_CONF_NEVER, - TYPE_INTEGER, CONF_VALUE_16_BIT(1), - &li.score[SC_UNKNOWN_15], 10 - }, - { -1, -1, -1, -1, @@ -3702,13 +3775,27 @@ static void CopyNativeLevel_RND_to_BD(struct LevelInfo *level) cave->level_time[i] = level->time; cave->level_diamonds[i] = level->gems_needed; cave->level_magic_wall_time[i] = level->time_magic_wall; + + 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; + cave->level_timevalue[i] = level->score[SC_TIME_BONUS]; } - cave->diamond_value = level->score[SC_DIAMOND]; - cave->extra_diamond_value = level->score[SC_DIAMOND]; + cave->diamond_value = level->score[SC_EMERALD]; + cave->extra_diamond_value = level->score[SC_DIAMOND_EXTRA]; - cave->level_speed[0] = 160; // set cave speed + cave->scheduling = level->bd_scheduling_type; + cave->pal_timing = level->bd_pal_timing; + cave->intermission = level->bd_intermission; + cave->diagonal_movements = level->bd_diagonal_movements; + + 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; strncpy(cave->name, level->name, sizeof(GdString)); cave->name[sizeof(GdString) - 1] = '\0'; @@ -3728,19 +3815,39 @@ static void CopyNativeLevel_BD_to_RND(struct LevelInfo *level) level->fieldx = MIN(cave->w, MAX_LEV_FIELDX); level->fieldy = MIN(cave->h, MAX_LEV_FIELDY); - 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]; + 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]; + + 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]; - level->score[SC_TIME_BONUS] = cave->level_timevalue[bd_level_nr]; - level->score[SC_DIAMOND] = cave->diamond_value; + 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; - strncpy(level->name, cave->name, MAX_LEVEL_NAME_LEN); + level->bd_scheduling_type = cave->scheduling; + level->bd_pal_timing = cave->pal_timing; + level->bd_intermission = cave->intermission; + level->bd_diagonal_movements = cave->diagonal_movements; + + 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; + + 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'; 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]); + + checked_free(cave_name); } static void setTapeInfoToDefaults(void);