using System.Collections.Generic; namespace Harmony.BackgroundMusicPatches { public class MenuMusic { public static AudioType MyMusicType = AudioType.OGGVORBIS; public static List musicLeft = new List(); [HarmonyPatch(typeof(BackgroundMusicMono))] [HarmonyPatch("Start")] public class StartPatch { public static bool Prefix(BackgroundMusicMono __instance ) { AudioListener[] objectsOfType = UnityEngine.Object.FindObjectsOfType(); for (int index = 0; index < objectsOfType.Length; ++index) { if (objectsOfType[index].enabled) { __instance.transform.position = objectsOfType[index].transform.position; break; } } AudioListener.volume = Mathf.Min(GamePrefs.GetFloat(EnumGamePrefs.OptionsOverallAudioVolumeLevel), 1f); RebirthVariables.audioSource = __instance.gameObject.AddComponent(); RebirthVariables.audioSource.volume = RebirthVariables.currentVolume = 0.01f; RebirthVariables.audioSource.clip = GameManager.Instance.BackgroundMusicClip; RebirthVariables.audioSource.loop = true; RebirthVariables.audioSource.Play(); return false; } } [HarmonyPatch(typeof(BackgroundMusicMono), "Update")] public class Update { private static bool Prefix(BackgroundMusicMono __instance) { if (GameManager.Instance == null) { return true; } //Log.Out("BackgroundMusicPatches-Update RebirthVariables.audioSource.clip.name: " + RebirthVariables.audioSource.clip.name); //Log.Out("BackgroundMusicPatches-Update RebirthVariables.audioSource.isPlaying: " + RebirthVariables.audioSource.isPlaying); if (RebirthVariables.audioSource.clip.name == "menu_music_long_lp") { //Log.Out("BackgroundMusicPatches-Update 1"); string strMusicPath = ""; RebirthVariables.audioClip = new AudioClip[23]; for (int i = 1; i <= 23; i++) { //Log.Out("BackgroundMusicPatches-Update 1a, i: " + i); musicLeft.Add(i); strMusicPath = "#@modfolder(zzz_REBIRTH__Utils):Resources/FR_Music.unity3d?Menu" + i; RebirthVariables.audioClip[i - 1] = DataLoader.LoadAsset(strMusicPath); } strMusicPath = "#@modfolder(zzz_REBIRTH__Utils):Resources/FR_Music.unity3d?Scratch"; AudioClip audioClip = DataLoader.LoadAsset(strMusicPath); RebirthVariables.audioSource.loop = false; if (audioClip != null) { RebirthVariables.audioSource.Stop(); RebirthVariables.audioSource.clip = audioClip; RebirthVariables.audioSource.PlayOneShot(audioClip); } return false; } else if (RebirthVariables.audioSource.clip.name == "Scratch" && RebirthVariables.audioSource.isPlaying == false) { //Log.Out("BackgroundMusicPatches-Update 2"); int num = UnityEngine.Random.Range(1, 10); string strMusicPath = "#@modfolder(zzz_REBIRTH__Utils):Resources/FR_Music.unity3d?Rekt" + num; AudioClip audioClip = DataLoader.LoadAsset(strMusicPath); RebirthVariables.audioSource.loop = false; if (audioClip != null) { RebirthVariables.audioSource.clip = audioClip; RebirthVariables.audioSource.PlayOneShot(audioClip); } return false; } else if (RebirthVariables.audioSource.clip.name.Contains("Rekt") && RebirthVariables.audioSource.isPlaying == false && !RebirthVariables.audioClipLoaded) { //Log.Out("BackgroundMusicPatches-Update 3a, musicLeft.Count: " + musicLeft.Count); //RebirthVariables.audioClip = new AudioClip[23]; if (musicLeft.Count == 0) { for (int i = 1; i <= 23; i++) { //Log.Out("BackgroundMusicPatches-Update 3a, i: " + i); musicLeft.Add(i); string strMusicPath = "#@modfolder(zzz_REBIRTH__Utils):Resources/FR_Music.unity3d?Menu" + i; RebirthVariables.audioClip[i - 1] = DataLoader.LoadAsset(strMusicPath); } } //Log.Out("BackgroundMusicPatches-Update 3b, musicLeft.Count: " + musicLeft.Count); int num = UnityEngine.Random.Range(1, musicLeft.Count); RebirthVariables.songIndex = musicLeft[num]; musicLeft.Remove(RebirthVariables.songIndex); if (RebirthVariables.audioClip[RebirthVariables.songIndex - 1] != null) { //Log.Out("BackgroundMusicPatches-Update 3c"); RebirthVariables.audioSource.loop = false; RebirthVariables.secondsToFadeIn = 1f; RebirthVariables.secondsToFadeOut = 10f; RebirthVariables.audioSource.clip = RebirthVariables.audioClip[RebirthVariables.songIndex - 1]; RebirthVariables.controlOption = MusicControlOption.FadeIn; RebirthVariables.audioSource.Play(); } RebirthVariables.audioClipLoaded = true; } else if (RebirthVariables.audioSource.clip.name.Contains("Menu") && RebirthVariables.audioSource.volume > 0 && RebirthVariables.audioSource.isPlaying == false && RebirthVariables.musicMode == -1) { //Log.Out("BackgroundMusicPatches-Update 4, musicLeft.Count: " + musicLeft.Count); if (musicLeft.Count == 0) { for (int i = 1; i <= 23; i++) { musicLeft.Add(i); } } int num = UnityEngine.Random.Range(0, musicLeft.Count - 1); //Log.Out("BackgroundMusicPatches-Update num: " + num); RebirthVariables.songIndex = musicLeft[num]; //Log.Out("BackgroundMusicPatches-Update RebirthVariables.songIndex: " + RebirthVariables.songIndex); musicLeft.Remove(RebirthVariables.songIndex); if (RebirthVariables.audioClip[RebirthVariables.songIndex - 1] != null) { RebirthVariables.audioSource.loop = false; RebirthVariables.secondsToFadeIn = 1f; RebirthVariables.secondsToFadeOut = 10f; RebirthVariables.audioSource.clip = RebirthVariables.audioClip[RebirthVariables.songIndex - 1]; RebirthVariables.controlOption = MusicControlOption.FadeIn; RebirthVariables.audioSource.Play(); } } else if (RebirthVariables.audioSource.clip.name.Contains("Menu") && RebirthVariables.audioSource.volume > 0 && RebirthVariables.audioSource.isPlaying == false && RebirthVariables.musicMode == 1) { //Log.Out("BackgroundMusicPatches-Update 5, musicLeft.Count: " + musicLeft.Count); EntityPlayerLocal primaryPlayer = GameManager.Instance.World.GetPrimaryPlayer(); if (primaryPlayer != null) { if (musicLeft.Count == 0) { for (int i = 1; i <= 23; i++) { ProgressionValue progressionValue = primaryPlayer.Progression.GetProgressionValue("FuriousRamsayAchievementCassette" + i); if (progressionValue != null && progressionValue.Level > 0) { musicLeft.Add(i); } } } RebirthVariables.songIndex = -1; if (musicLeft.Count > 0) { int num = UnityEngine.Random.Range(0, musicLeft.Count - 1); //Log.Out("BackgroundMusicPatches-Update num: " + num); RebirthVariables.songIndex = musicLeft[num]; //Log.Out("BackgroundMusicPatches-Update RebirthVariables.songIndex: " + RebirthVariables.songIndex); musicLeft.Remove(RebirthVariables.songIndex); if (RebirthVariables.audioClip[RebirthVariables.songIndex - 1] != null) { RebirthVariables.audioSource.loop = false; RebirthVariables.secondsToFadeIn = 1f; RebirthVariables.secondsToFadeOut = 10f; RebirthVariables.audioSource.clip = RebirthVariables.audioClip[RebirthVariables.songIndex - 1]; RebirthVariables.controlOption = MusicControlOption.FadeIn; RebirthVariables.audioSource.Play(); } } } } //Log.Out("BackgroundMusicPatches-Update RebirthVariables.musicMode: " + RebirthVariables.musicMode); if (GameStats.GetInt(EnumGameStats.GameState) == 1 && !GameManager.Instance.IsPaused()) { if (RebirthVariables.musicMode == 3 && RebirthVariables.audioSource.isPlaying) { //Log.Out("BackgroundMusicPatches-Update 6"); RebirthVariables.audioSource.Stop(); RebirthVariables.musicMode = -1; musicLeft.Clear(); } else if (RebirthVariables.musicMode == 4 && RebirthVariables.audioSource.isPlaying) { //Log.Out("BackgroundMusicPatches-Update 7, BEFORE RebirthVariables.musicVolume: " + RebirthVariables.musicVolume); RebirthVariables.musicVolume += 0.02f; if (RebirthVariables.musicVolume > 1f) { RebirthVariables.musicVolume = 1f; } //Log.Out("BackgroundMusicPatches-Update 7, AFTER RebirthVariables.musicVolume: " + RebirthVariables.musicVolume); RebirthVariables.musicMode = 1; } else if (RebirthVariables.musicMode == 5 && RebirthVariables.audioSource.isPlaying) { //Log.Out("BackgroundMusicPatches-Update 8, BEFORE RebirthVariables.musicVolume: " + RebirthVariables.musicVolume); RebirthVariables.musicVolume -= 0.02f; if (RebirthVariables.musicVolume < 0f) { RebirthVariables.musicVolume = 0f; } //Log.Out("BackgroundMusicPatches-Update 8, AFTER RebirthVariables.musicVolume: " + RebirthVariables.musicVolume); RebirthVariables.musicMode = 1; } else if (RebirthVariables.musicMode == 2 && RebirthVariables.audioSource.isPlaying) { //Log.Out("BackgroundMusicPatches-Update 9"); RebirthVariables.audioSource.Stop(); EntityPlayerLocal primaryPlayer = GameManager.Instance.World.GetPrimaryPlayer(); if (primaryPlayer != null) { if (musicLeft.Count == 0) { for (int i = 1; i <= 23; i++) { ProgressionValue progressionValue = primaryPlayer.Progression.GetProgressionValue("FuriousRamsayAchievementCassette" + i); if (progressionValue != null && progressionValue.Level > 0) { musicLeft.Add(i); } } } RebirthVariables.songIndex = -1; //Log.Out("BackgroundMusicPatches-Update musicLeft.Count: " + musicLeft.Count); if (musicLeft.Count > 0) { /*for (int i = 0; i <= musicLeft.Count - 1; i++) { //Log.Out("BackgroundMusicPatches-Update BEFORE musicLeft[" + i + "]: " + musicLeft[i]); }*/ int num = UnityEngine.Random.Range(0, musicLeft.Count - 1); //Log.Out("BackgroundMusicPatches-Update num: " + num); RebirthVariables.songIndex = musicLeft[num]; //Log.Out("BackgroundMusicPatches-Update RebirthVariables.songIndex: " + RebirthVariables.songIndex); musicLeft.Remove(RebirthVariables.songIndex); /*if (musicLeft.Count > 0) { for (int i = 0; i <= musicLeft.Count - 1; i++) { //Log.Out("BackgroundMusicPatches-Update AFTER musicLeft[" + i + "]: " + musicLeft[i]); } }*/ if (RebirthVariables.audioClip[RebirthVariables.songIndex - 1] != null) { RebirthVariables.audioSource.loop = false; RebirthVariables.secondsToFadeIn = 1f; RebirthVariables.secondsToFadeOut = 10f; RebirthVariables.audioSource.clip = RebirthVariables.audioClip[RebirthVariables.songIndex - 1]; //Log.Out("BackgroundMusicPatches-Update RebirthVariables.audioSource.clip.name: " + RebirthVariables.audioSource.clip.name); RebirthVariables.controlOption = MusicControlOption.FadeIn; RebirthVariables.audioSource.Play(); } } RebirthVariables.musicMode = 1; } } else if (RebirthVariables.musicMode == 1 && !RebirthVariables.audioSource.isPlaying) { //Log.Out("BackgroundMusicPatches-Update 10"); EntityPlayerLocal primaryPlayer = GameManager.Instance.World.GetPrimaryPlayer(); //Log.Out("BackgroundMusicPatches-Update BEFORE musicLeft.Count: " + musicLeft.Count); musicLeft.Clear(); //Log.Out("BackgroundMusicPatches-Update AFTER musicLeft.Count: " + musicLeft.Count); if (primaryPlayer != null) { //Log.Out("BackgroundMusicPatches-Update 10a"); if (musicLeft.Count == 0) { //Log.Out("BackgroundMusicPatches-Update 10b"); for (int i = 1; i <= 23; i++) { ProgressionValue progressionValue = primaryPlayer.Progression.GetProgressionValue("FuriousRamsayAchievementCassette" + i); if (progressionValue != null && progressionValue.Level > 0) { //Log.Out("BackgroundMusicPatches-Update 10c, i: " + i); musicLeft.Add(i); } } } RebirthVariables.songIndex = -1; if (musicLeft.Count > 0) { //Log.Out("BackgroundMusicPatches-Update 10d, musicLeft.Count: " + musicLeft.Count); int num = UnityEngine.Random.Range(0, musicLeft.Count - 1); //Log.Out("BackgroundMusicPatches-Update num: " + num); RebirthVariables.songIndex = musicLeft[num]; //Log.Out("BackgroundMusicPatches-Update RebirthVariables.songIndex: " + RebirthVariables.songIndex); musicLeft.Remove(RebirthVariables.songIndex); //Log.Out("BackgroundMusicPatches-Update 6a, RebirthVariables.songIndex: " + RebirthVariables.songIndex); if (RebirthVariables.audioClip[RebirthVariables.songIndex - 1] != null) { //Log.Out("BackgroundMusicPatches-Update 6b, SONG FOUND"); RebirthVariables.audioSource.loop = false; RebirthVariables.secondsToFadeIn = 1f; RebirthVariables.secondsToFadeOut = 10f; RebirthVariables.audioSource.clip = RebirthVariables.audioClip[RebirthVariables.songIndex - 1]; RebirthVariables.controlOption = MusicControlOption.FadeIn; RebirthVariables.audioSource.Play(); } } } } else if (RebirthVariables.musicMode == 0 && RebirthVariables.audioSource.isPlaying) { //Log.Out("BackgroundMusicPatches-Update 11"); RebirthVariables.secondsToFadeOut = 1f; RebirthVariables.controlOption = MusicControlOption.FadeOut; } else { if (RebirthVariables.audioSource.isPlaying && RebirthVariables.musicMode == -1) { //Log.Out("BackgroundMusicPatches-Update 12"); RebirthVariables.secondsToFadeOut = 10f; RebirthVariables.controlOption = MusicControlOption.FadeOut; } } } if (RebirthVariables.controlOption == MusicControlOption.FadeIn) { //Log.Out("BackgroundMusicPatches-Update 13, RebirthVariables.currentVolume: " + RebirthVariables.currentVolume); //Log.Out("BackgroundMusicPatches-Update 13, musicLeft: " + musicLeft.Count); if (RebirthVariables.currentVolume < 1f) { RebirthVariables.currentVolume += Time.deltaTime / RebirthVariables.secondsToFadeIn; } } else if (RebirthVariables.controlOption == MusicControlOption.FadeOut && RebirthVariables.currentVolume > 0f) { //Log.Out("BackgroundMusicPatches-Update 14"); RebirthVariables.currentVolume -= Time.deltaTime / RebirthVariables.secondsToFadeOut; } RebirthVariables.currentVolume = Mathf.Clamp01(RebirthVariables.currentVolume); float volume = Mathf.Clamp01(GamePrefs.GetFloat(EnumGamePrefs.OptionsMenuMusicVolumeLevel) * RebirthVariables.currentVolume); //if (volume == 0f && RebirthVariables.musicMode == 1) if (RebirthVariables.musicMode == 1) { volume = Mathf.Clamp01(RebirthVariables.musicVolume) * RebirthVariables.currentVolume; } //Log.Out("BackgroundMusicPatches-Update volume: " + volume); RebirthVariables.audioSource.volume = volume; // Mathf.Clamp01(GamePrefs.GetFloat(EnumGamePrefs.OptionsMenuMusicVolumeLevel) * RebirthVariables.currentVolume); if (RebirthVariables.audioSource.isPlaying && RebirthVariables.audioSource.volume <= 0f && RebirthVariables.musicMode != 1) { //Log.Out("BackgroundMusicPatches-Update STOP"); RebirthVariables.audioSource.Stop(); return false; } if (!RebirthVariables.audioSource.isPlaying && RebirthVariables.audioSource.volume > 0f) { //Log.Out("BackgroundMusicPatches-Update 15, RebirthVariables.musicMode: " + RebirthVariables.musicMode); if (RebirthVariables.musicMode == 1) { //Log.Out("BackgroundMusicPatches-Update 15a"); if (RebirthVariables.songIndex > -1) { //Log.Out("BackgroundMusicPatches-Update 15b"); RebirthVariables.audioSource.Play(); } else { //Log.Out("BackgroundMusicPatches-Update 15c"); RebirthVariables.musicMode = 0; } } else { //Log.Out("BackgroundMusicPatches-Update 15d"); if (RebirthVariables.musicMode == 3) { RebirthVariables.musicMode = -1; RebirthVariables.songIndex = -1; musicLeft.Clear(); return false; } RebirthVariables.audioSource.Play(); } } return false; } private static List musicLeft = new List(); } } }