added checking pointer
[rocksndiamonds.git] / src / files.c
index 676ebf8aa3d9db839d3921b76032c6fadd76e2f5..7d0f6f0aff81becd92c1496e02263d5bf9fe1ace 100644 (file)
@@ -12934,6 +12934,18 @@ 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();
@@ -12993,7 +13005,18 @@ 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);