using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Logging; using HarmonyLib; using Microsoft.CodeAnalysis; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("HarveysRepoMod")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("HarveysRepoMod")] [assembly: AssemblyTitle("HarveysRepoMod")] [assembly: AssemblyVersion("1.0.0.0")] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } } namespace HarveysRepoMod { [BepInPlugin("com.HarvDallz.repo.HarveysRepoMod", "Harvey's Repo mod", "1.0.3")] public class Plugin : BaseUnityPlugin { public static Dictionary soundMap = new Dictionary(); internal static ManualLogSource Logger { get; private set; } public static AudioClip getRandomClip(AudioClip[] list) { return list[Random.Range(0, list.Length)]; } private void Awake() { //IL_0123: Unknown result type (might be due to invalid IL or missing references) //IL_0129: Expected O, but got Unknown Logger = ((BaseUnityPlugin)this).Logger; string directoryName = Path.GetDirectoryName(((BaseUnityPlugin)this).Info.Location); directoryName = Path.Combine(directoryName, "Audio Files"); if (Directory.Exists(directoryName)) { foreach (string item in Directory.EnumerateFiles(directoryName, "*.wav")) { string text = Path.Combine(directoryName, item); if (!File.Exists(text)) { Logger.LogError((object)("Could not find audio file at: " + text)); continue; } try { string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(item); AudioClip value = CreateClipFromWav(text, fileNameWithoutExtension); Logger.LogInfo((object)("Successfully built " + fileNameWithoutExtension)); soundMap[fileNameWithoutExtension] = value; } catch (Exception ex) { Logger.LogError((object)("Failed to parse " + item + ": " + ex.Message)); } } } else { Console.WriteLine("The specified folder does not exist."); } Harmony val = new Harmony("com.HarvDallz.repo.HarveysRepoMod"); val.PatchAll(); Logger.LogInfo((object)"Harvey's Repo mod has loaded! Oh Yeah baby!"); } private AudioClip CreateClipFromWav(string filePath, string name) { byte[] array = File.ReadAllBytes(filePath); int num = array[22]; int num2 = BitConverter.ToInt32(array, 24); int num3 = 44; float[] array2 = new float[(array.Length - num3) / 2]; for (int i = 0; i < array2.Length; i++) { array2[i] = (float)BitConverter.ToInt16(array, num3 + i * 2) / 32768f; } AudioClip val = AudioClip.Create(name, array2.Length / num, num, num2, false); val.SetData(array2, 0); return val; } } [HarmonyPatch(typeof(PhoneValuable))] public class PhoneRingPatch { [HarmonyPatch("Start")] [HarmonyPostfix] private static void SwapPhoneAudioArray(PhoneValuable __instance) { AudioClip[] array = (AudioClip[])(object)new AudioClip[5] { Plugin.soundMap["mus1"], Plugin.soundMap["mus5"], Plugin.soundMap["mus6"], Plugin.soundMap["mus7"], Plugin.soundMap["mus10"] }; if (__instance.ringTone != null && array != null) { __instance.ringTone.Sounds = array; __instance.ringTone.Source.clip = Plugin.getRandomClip(array); Plugin.Logger.LogInfo((object)"Phone tracks swapped!"); } } } [HarmonyPatch(typeof(TrapGramophone))] public class GramophonePatch { [HarmonyPatch("Start")] [HarmonyPostfix] private static void SwapGramophoneAudio(TrapGramophone __instance) { AudioClip[] array = (AudioClip[])(object)new AudioClip[3] { Plugin.soundMap["mus2"], Plugin.soundMap["mus4"], Plugin.soundMap["mus8"] }; if (__instance.GramophoneMusic != null && (Object)(object)__instance.GramophoneMusic.Source != (Object)null && array != null) { __instance.GramophoneMusic.Sounds = array; __instance.GramophoneMusic.Source.clip = Plugin.getRandomClip(array); Plugin.Logger.LogInfo((object)"Gramophone music successfully swapped!"); } } } [HarmonyPatch(typeof(ShopRadio))] public class ShopRadioPatch { [HarmonyPatch("Start")] [HarmonyPostfix] private static void SwapShopRadioAudio(ShopRadio __instance) { List shopMusicClips = new List { Plugin.soundMap["mus1"], Plugin.soundMap["mus2"], Plugin.soundMap["mus3"], Plugin.soundMap["mus4"], Plugin.soundMap["mus5"], Plugin.soundMap["mus6"], Plugin.soundMap["mus7"], Plugin.soundMap["mus8"] }; if (__instance.shopMusic != null && (Object)(object)__instance.shopMusic.Source != (Object)null) { __instance.shopMusicClips = shopMusicClips; } Plugin.Logger.LogInfo((object)"Shop music successfully swapped!"); } } [HarmonyPatch(typeof(ValuableBoombox))] public class BoomboxPatch { [HarmonyPatch("Start")] [HarmonyPostfix] private static void SwapBoomboxAudio(ValuableBoombox __instance) { AudioClip[] array = (AudioClip[])(object)new AudioClip[1] { Plugin.soundMap["mus9"] }; if (__instance.soundBoomboxMusic != null && (Object)(object)__instance.soundBoomboxMusic.Source != (Object)null && array != null) { __instance.soundBoomboxMusic.Sounds = array; __instance.soundBoomboxMusic.Source.clip = Plugin.getRandomClip(array); Plugin.Logger.LogInfo((object)"Boombox music successfully swapped!"); } } } [HarmonyPatch(typeof(TrapRadio))] public class HeadmanRadioPatch { [HarmonyPatch("Start")] [HarmonyPostfix] private static void SwapHMRadioAudio(TrapRadio __instance) { AudioClip[] array = (AudioClip[])(object)new AudioClip[3] { Plugin.soundMap["mus2"], Plugin.soundMap["mus7"], Plugin.soundMap["mus8"] }; if (__instance.RadioLoop != null && (Object)(object)__instance.RadioLoop.Source != (Object)null && array != null) { __instance.RadioLoop.Sounds = array; __instance.RadioLoop.Source.clip = Plugin.getRandomClip(array); Plugin.Logger.LogInfo((object)"Radio music successfully swapped!"); } } } [HarmonyPatch(typeof(EnemyParent), "Awake")] public class MasterInstanceAudioPatch { [HarmonyPostfix] private static void OverwriteLiveEnemyInstanceSounds(EnemyParent __instance) { if ((Object)(object)__instance == (Object)null || (Object)(object)((Component)__instance).gameObject == (Object)null) { return; } EnemyTumblerAnim componentInChildren = ((Component)__instance).GetComponentInChildren(); EnemyGnomeAnim componentInChildren2 = ((Component)__instance).GetComponentInChildren(); EnemyGnome val = ((Component)__instance).GetComponentInParent() ?? ((Component)__instance).GetComponent(); EnemyBeamerAnim componentInChildren3 = ((Component)__instance).GetComponentInChildren(); if ((Object)(object)componentInChildren != (Object)null) { if (componentInChildren.sfxJump != null && Plugin.soundMap.ContainsKey("FrogJump1")) { componentInChildren.sfxJump.Sounds = (AudioClip[])(object)new AudioClip[3] { Plugin.soundMap["FrogJump1"], Plugin.soundMap["FrogJump2"], Plugin.soundMap["FrogJump3"] }; } if (componentInChildren.sfxDeath != null && Plugin.soundMap.ContainsKey("FrogDeath")) { componentInChildren.sfxDeath.Sounds = (AudioClip[])(object)new AudioClip[1] { Plugin.soundMap["FrogDeath"] }; } if (componentInChildren.sfxNotice != null && Plugin.soundMap.ContainsKey("FrogSpawn")) { componentInChildren.sfxNotice.Sounds = (AudioClip[])(object)new AudioClip[1] { Plugin.soundMap["FrogSpawn"] }; } Plugin.Logger.LogInfo((object)"[HarveysRepoMod] Live Frog instance audio redirected successfully."); } if ((Object)(object)componentInChildren2 != (Object)null) { if (componentInChildren2.soundJump != null && Plugin.soundMap.ContainsKey("gnomejump")) { componentInChildren2.soundJump.Sounds = (AudioClip[])(object)new AudioClip[1] { Plugin.soundMap["gnomejump"] }; } if (componentInChildren2.soundNotice != null && Plugin.soundMap.ContainsKey("GnomeSpotted1")) { componentInChildren2.soundNotice.Sounds = (AudioClip[])(object)new AudioClip[1] { Plugin.soundMap["GnomeSpotted1"] }; } if (componentInChildren2.soundPickaxeTell != null && Plugin.soundMap.ContainsKey("gnomepickaxetell")) { componentInChildren2.soundPickaxeTell.Sounds = (AudioClip[])(object)new AudioClip[1] { Plugin.soundMap["gnomepickaxetell"] }; } Plugin.Logger.LogInfo((object)"[HarveysRepoMod] Live Gnome Anim instance audio redirected successfully."); } if ((Object)(object)val != (Object)null) { if (val.soundDeath != null && Plugin.soundMap.ContainsKey("gnomedeath")) { val.soundDeath.Sounds = (AudioClip[])(object)new AudioClip[1] { Plugin.soundMap["gnomedeath"] }; } if (val.soundHurt != null && Plugin.soundMap.ContainsKey("gnomehurt")) { val.soundHurt.Sounds = (AudioClip[])(object)new AudioClip[1] { Plugin.soundMap["gnomehurt"] }; } Plugin.Logger.LogInfo((object)"[HarveysRepoMod] Live Gnome Logic Root instance audio redirected successfully."); } if ((Object)(object)componentInChildren3 != (Object)null) { if (componentInChildren3.soundAttackIntro != null && Plugin.soundMap.ContainsKey("clowncharge")) { componentInChildren3.soundAttackIntro.Sounds = (AudioClip[])(object)new AudioClip[1] { Plugin.soundMap["clowncharge"] }; } Plugin.Logger.LogInfo((object)"[HarveysRepoMod] Live Clown instance audio redirected successfully."); } } } }