X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Ffiles.c;h=5d191f027233d559a855fb16b5d50b00a2d19e25;hb=cc87512c58b885ea16697b0017201c900fce8428;hp=bd631a46fb31f38fb395d7d83246f33da60932c0;hpb=a1658d14b0ff3ddb46cc075aba1dddf7d01c6442;p=rocksndiamonds.git diff --git a/src/files.c b/src/files.c index bd631a46..5d191f02 100644 --- a/src/files.c +++ b/src/files.c @@ -926,6 +926,11 @@ static struct LevelFileConfigInfo chunk_config_ELEM[] = TYPE_BOOLEAN, CONF_VALUE_8_BIT(1), &li.rotate_mm_ball_content, TRUE }, + { + EL_MM_GRAY_BALL, -1, + TYPE_BOOLEAN, CONF_VALUE_8_BIT(2), + &li.explode_mm_ball, FALSE + }, { EL_MM_STEEL_BLOCK, -1, @@ -3708,6 +3713,7 @@ static void CopyNativeLevel_RND_to_EM(struct LevelInfo *level) cav->lenses_time = level->lenses_time; cav->magnify_time = level->magnify_time; + cav->wind_time = 9999; cav->wind_direction = map_direction_RND_to_EM(level->wind_direction_initial); @@ -4192,6 +4198,7 @@ static void CopyNativeLevel_RND_to_MM(struct LevelInfo *level) level_mm->num_ball_contents = level->num_mm_ball_contents; level_mm->ball_choice_mode = level->mm_ball_choice_mode; level_mm->rotate_ball_content = level->rotate_mm_ball_content; + level_mm->explode_ball = level->explode_mm_ball; for (i = 0; i < level->num_mm_ball_contents; i++) level_mm->ball_content[i] = @@ -4244,6 +4251,7 @@ static void CopyNativeLevel_MM_to_RND(struct LevelInfo *level) level->num_mm_ball_contents = level_mm->num_ball_contents; level->mm_ball_choice_mode = level_mm->ball_choice_mode; level->rotate_mm_ball_content = level_mm->rotate_ball_content; + level->explode_mm_ball = level_mm->explode_ball; for (i = 0; i < level->num_mm_ball_contents; i++) level->mm_ball_content[i] = @@ -12926,16 +12934,29 @@ static boolean sound_info_listed(struct MusicFileInfo *list, char *basename) return music_info_listed_ext(list, basename, TRUE); } +static boolean checkLevelSetHasMusic_NoConf(void) +{ + int i; + + for (i = leveldir_current->first_level; + i <= leveldir_current->last_level; i++) + if (levelset.music[level_nr] == MUS_UNDEFINED) + return TRUE; + + return FALSE; +} + void LoadMusicInfo(void) { char *music_directory = getCustomMusicDirectory_NoConf(); int num_music = getMusicListSize(); int num_music_noconf = 0; int num_sounds = getSoundListSize(); - Directory *dir; + Directory *dir = NULL; DirectoryEntry *dir_entry; struct FileInfo *music, *sound; struct MusicFileInfo *next, **new; + boolean read_music_from_directory = TRUE; int i; while (music_file_info != NULL) @@ -12984,14 +13005,26 @@ void LoadMusicInfo(void) } } - if ((dir = openDirectory(music_directory)) == NULL) + // if all levels have game music configured, do not read music from directory + if (!checkLevelSetHasMusic_NoConf()) + { + read_music_from_directory = FALSE; + } + else if (music_directory == NULL) + { + Warn("cannot find music directory with unconfigured music"); + + read_music_from_directory = FALSE; + } + else if ((dir = openDirectory(music_directory)) == NULL) { Warn("cannot read music directory '%s'", music_directory); - return; + read_music_from_directory = FALSE; } - while ((dir_entry = readDirectory(dir)) != NULL) // loop all entries + while (read_music_from_directory && + (dir_entry = readDirectory(dir)) != NULL) // loop all entries { char *basename = dir_entry->basename; boolean music_already_used = FALSE; @@ -13029,7 +13062,8 @@ void LoadMusicInfo(void) num_music_noconf++; } - closeDirectory(dir); + if (dir != NULL) + closeDirectory(dir); for (i = 0; i < num_sounds; i++) {