diff --git a/Assets/Scripts/AudioManager.cs b/Assets/Scripts/AudioManager.cs index f27abc9..212e318 100644 --- a/Assets/Scripts/AudioManager.cs +++ b/Assets/Scripts/AudioManager.cs @@ -54,22 +54,22 @@ public class AudioManager : MonoBehaviour result = fmodSystem.init(MaxChannels, FMOD.INITFLAGS.NORMAL, IntPtr.Zero); CheckFmodResult(result, "FMOD.System.init"); } + + void OnDestroy() + { + CloseFmod(); + } private void CheckFmodResult(FMOD.RESULT result, string cause) { if (result != FMOD.RESULT.OK) { - if (fmodSystem.hasHandle()) - { - fmodSystem.close(); - fmodSystem.release(); - fmodSystem.clearHandle(); - } + CloseFmod(); throw new Exception($"[FMOD] Initialization failed : {cause} : {result.ToString()} : {FMOD.Error.String(result)}"); } } - private void OnDestroy() + private void CloseFmod() { if (fmodSystem.hasHandle()) { diff --git a/Assets/Scripts/UniQuake.cs b/Assets/Scripts/UniQuake.cs index 367882f..b617ebb 100644 --- a/Assets/Scripts/UniQuake.cs +++ b/Assets/Scripts/UniQuake.cs @@ -169,6 +169,14 @@ public class UniQuake: MonoBehaviour private void LoadLibrary() { string dllFile = Path.Combine(Application.dataPath, DllPath); + + // Experimental code to allow running multiple instances of Quake next to each other + // string dllName = Path.GetFileNameWithoutExtension(dllFile); + // string dllExt = Path.GetExtension(dllFile); + // string dllCopy = Path.Combine(Application.persistentDataPath, $"{dllName}{GetInstanceID()}{dllExt}"); + // File.Copy(dllFile, dllCopy, true); + // dllFile = dllCopy; + libraryHandle = SystemLibrary.LoadLibrary(dllFile); if (libraryHandle == IntPtr.Zero) { diff --git a/engine/Quake/bgmusic.c b/engine/Quake/bgmusic.c index 3e9042f..ec638d5 100644 --- a/engine/Quake/bgmusic.c +++ b/engine/Quake/bgmusic.c @@ -141,6 +141,12 @@ static qboolean BGM_PlayStream(const char *filename) FMOD_CREATESOUNDEXINFO exinfo; FMOD_RESULT result; + if (!fmod_system || !bgm_channelGroup) + { + Con_Printf("FMOD System not initialized, cannot play BGM\n"); + return false; + } + len = COM_FOpenFile(filename, &f, NULL); fclose(f); if (len < 1) diff --git a/engine/Quake/host_cmd.c b/engine/Quake/host_cmd.c index 70cc0d8..c7dae53 100644 --- a/engine/Quake/host_cmd.c +++ b/engine/Quake/host_cmd.c @@ -2230,13 +2230,6 @@ void Host_Startdemos_f (void) if (!sv.active && cls.demonum != -1 && !cls.demoplayback) { cls.demonum = 0; - if (!fitzmode) - { /* QuakeSpasm customization: */ - /* go straight to menu, no CL_NextDemo */ - cls.demonum = -1; - Cbuf_InsertText("menu_main\n"); - return; - } CL_NextDemo (); } else