]> git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - cd_shared.c
bring back the stupid Matrix4x4_Invert call as it breaks on my gcc in release builds...
[xonotic/darkplaces.git] / cd_shared.c
index ebe091dc89ac63c3c4ab6cf33213ba8691422ae8..9ab0210a531fdd4ffa692a32e0fadc4e677edc02 100644 (file)
@@ -32,7 +32,7 @@ extern void CDAudio_SysCloseDoor (void);
 extern int CDAudio_SysGetAudioDiskInfo (void);
 extern float CDAudio_SysGetVolume (void);
 extern void CDAudio_SysSetVolume (float volume);
-extern int CDAudio_SysPlay (unsigned char track);
+extern int CDAudio_SysPlay (int track);
 extern int CDAudio_SysStop (void);
 extern int CDAudio_SysPause (void);
 extern int CDAudio_SysResume (void);
@@ -43,7 +43,7 @@ extern void CDAudio_SysShutdown (void);
 
 // used by menu to ghost CD audio slider
 cvar_t cdaudioinitialized = {CVAR_READONLY,"cdaudioinitialized","0","indicates if CD Audio system is active"};
-cvar_t cdaudio = {CVAR_SAVE,"cdaudio","1","CD playing mode (0 = never access CD drive, 1 = play CD tracks if no replacement available, 2 = play fake tracks if no CD track available, 3 = play only real CD tracks)"};
+cvar_t cdaudio = {CVAR_SAVE,"cdaudio","1","CD playing mode (0 = never access CD drive, 1 = play CD tracks if no replacement available, 2 = play fake tracks if no CD track available, 3 = play only real CD tracks, 4 = play real CD tracks even instead of named fake tracks)"};
 
 static qboolean wasPlaying = false;
 static qboolean initialized = false;
@@ -187,11 +187,29 @@ void CDAudio_Play_byName (const char *trackname, qboolean looping)
 
                if(cdaudio.integer == 2) // prefer real CD track over fake
                {
-                               if(CDAudio_Play_real(track, looping, false))
-                                       goto success;
+                       if(CDAudio_Play_real(track, looping, false))
+                               goto success;
                }
        }
 
+       if(cdaudio.integer == 4) // only play real CD tracks, EVEN instead of fake tracks!
+       {
+               if(CDAudio_Play_real(track, looping, false))
+                       goto success;
+               
+               if(cdValid && maxTrack > 0)
+               {
+                       track = 1 + (rand() % maxTrack);
+                       if(CDAudio_Play_real(track, looping, true))
+                               goto success;
+               }
+               else
+               {
+                       Con_Print ("No CD in player.\n");
+               }
+               return;
+       }
+
        // Try playing a fake track (sound file) first
        if(track >= 1)
        {
@@ -208,6 +226,10 @@ void CDAudio_Play_byName (const char *trackname, qboolean looping)
                sfx = S_PrecacheSound (va("cdtracks/%s.wav", trackname), false, false);
                if (sfx == NULL || !S_IsSoundPrecached (sfx))
                        sfx = S_PrecacheSound (va("cdtracks/%s", trackname), false, false);
+               if (sfx == NULL || !S_IsSoundPrecached (sfx))
+                       sfx = S_PrecacheSound (va("%s.wav", trackname), false, false);
+               if (sfx == NULL || !S_IsSoundPrecached (sfx))
+                       sfx = S_PrecacheSound (va("%s", trackname), false, false);
        }
        if (sfx != NULL)
        {
@@ -251,7 +273,7 @@ success:
                CDAudio_Pause ();
 }
 
-void CDAudio_Play (unsigned char track, qboolean looping)
+void CDAudio_Play (int track, qboolean looping)
 {
        char buf[20];
        dpsnprintf(buf, sizeof(buf), "%d", (int) track);