rnd-20031124-1-src
[rocksndiamonds.git] / src / libgame / sound.c
index 8b01135fea198c280f2a42e600ce668bbdf12b20..8fb94919cff281bdc887a241aecf1225ab9f076c 100644 (file)
@@ -870,7 +870,7 @@ static void Mixer_InsertSound(SoundControl snd_ctrl)
   }
   else
   {
-    if (snd_ctrl.nr >= num_sounds)
+    if (snd_ctrl.nr < 0 || snd_ctrl.nr >= num_sounds)
       return;
 
     snd_info = getSoundInfoEntryFromSoundID(snd_ctrl.nr);
@@ -1866,6 +1866,20 @@ static void *Load_MOD(char *filename)
 #endif
 }
 
+static void *Load_WAV_or_MOD(char *filename)
+{
+  char *basename = strrchr(filename, '/');
+
+  basename = (basename != NULL ? basename + 1 : filename);
+
+  if (FileIsSound(basename))
+    return Load_WAV(filename);
+  else if (FileIsMusic(basename))
+    return Load_MOD(filename);
+  else
+    return NULL;
+}
+
 void LoadCustomMusic_NoConf(void)
 {
   static boolean draw_init_text = TRUE;                /* only draw at startup */
@@ -1910,10 +1924,6 @@ void LoadCustomMusic_NoConf(void)
     {
       struct FileInfo *music = getMusicListEntry(i);
 
-#if 0
-      printf("::: -> '%s'\n", music->filename);
-#endif
-
       if (strcmp(basename, music->filename) == 0)
       {
        music_already_used = TRUE;
@@ -1926,8 +1936,7 @@ void LoadCustomMusic_NoConf(void)
 
 #if 0
     if (FileIsSound(basename) || FileIsMusic(basename))
-      printf("DEBUG: loading music '%s' ... [%d]\n",
-            basename, music_already_used);
+      printf("DEBUG: loading music '%s' ...\n", basename);
 #endif
 
     if (draw_init_text)
@@ -2183,7 +2192,7 @@ void InitMusicList(struct ConfigInfo *config_list, int num_file_list_entries,
 
   /* ---------- initialize artwork loading/freeing functions ---------- */
 
-  music_info->load_artwork = Load_MOD;
+  music_info->load_artwork = Load_WAV_or_MOD;
   music_info->free_artwork = FreeMusic;
 }