]> git.jsancho.org Git - lugaru.git/blobdiff - Source/GameInitDispose.cpp
Cleaned up some things that don't compile on Mac OS X.
[lugaru.git] / Source / GameInitDispose.cpp
index f1091c0d1cd5c65b7f10263b6f7af3534fe2b8f6..4bf7964fc29b944b52ca1efd2ccd6b82ddbcd701 100644 (file)
@@ -89,7 +89,7 @@ extern float accountcampaigntime[10];
 extern int accountcampaignchoicesmade[10];
 extern int accountcampaignchoices[10][5000];
 
-extern FSOUND_STREAM * strm[10];
+extern FSOUND_STREAM * strm[20];
 
 extern "C"     void PlaySoundEx(int channel, FSOUND_SAMPLE *sptr, FSOUND_DSPUNIT *dsp, signed char startpaused);
 extern "C" void PlayStreamEx(int chan, FSOUND_STREAM *sptr, FSOUND_DSPUNIT *dsp, signed char startpaused);
@@ -169,6 +169,9 @@ void Game::Dispose()
 
        FSOUND_StopSound(FSOUND_ALL);
 
+// this is causing problems on Linux, but we'll force an _exit() a little
+//  later in the shutdown process.  --ryan.
+#if !PLATFORM_LINUX
 #define streamcount 20
 #define samplecount 100
 
@@ -188,6 +191,7 @@ void Game::Dispose()
                free(texture.data);
        }
        texture.data = 0;
+#endif
 }
 
 
@@ -1191,7 +1195,40 @@ void Game::InitGame()
 
        LOG("Initializing sound system...");
 
+    int output = -1;
+
+    #if PLATFORM_LINUX
+    extern bool cmdline(const char *cmd);
+    unsigned char rc = 0;
+    output = FSOUND_OUTPUT_ALSA;  // Try alsa first...
+    if (cmdline("forceoss"))      //  ...but let user override that.
+        output = FSOUND_OUTPUT_OSS;
+    else if (cmdline("nosound"))
+        output = FSOUND_OUTPUT_NOSOUND;
+
+    FSOUND_SetOutput(output);
+       if ((rc = FSOUND_Init(44100, 32, 0)) == FALSE)
+    {
+        // if we tried ALSA and failed, fall back to OSS.
+        if ( (output == FSOUND_OUTPUT_ALSA) && (!cmdline("forcealsa")) )
+        {
+            FSOUND_Close();
+            output = FSOUND_OUTPUT_OSS;
+            FSOUND_SetOutput(output);
+               rc = FSOUND_Init(44100, 32, 0);
+        }
+    }
+
+    if (rc == FALSE)
+    {
+        FSOUND_Close();
+        output = FSOUND_OUTPUT_NOSOUND;  // we tried! just do silence.
+        FSOUND_SetOutput(output);
+           rc = FSOUND_Init(44100, 32, 0);
+    }
+    #else
        FSOUND_Init(44100, 32, 0);
+    #endif
 
        FSOUND_SetSFXMasterVolume((int)(volume*255));