Decompiled source of FunnyAudio v1.0.2

FunnyAudio.dll

Decompiled 10 months ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using HarmonyLib;
using Hypick.FunnyAudio.NetcodePatcher;
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: IgnoresAccessChecksTo("")]
[assembly: AssemblyCompany("Hypick.FunnyAudio")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.2.0")]
[assembly: AssemblyInformationalVersion("1.0.2+e4b8bd42c7fa604dd332d351e1fb394cf73b06fa")]
[assembly: AssemblyProduct("FunnyAudio")]
[assembly: AssemblyTitle("Hypick.FunnyAudio")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
[module: NetcodePatchedAssembly]
internal class <Module>
{
	static <Module>()
	{
	}
}
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
	internal sealed class RefSafetyRulesAttribute : Attribute
	{
		public readonly int Version;

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
namespace Hypick
{
	[BepInPlugin("Hypick.FunnyAudio", "FunnyAudio", "1.0.2")]
	public class Plugin : BaseUnityPlugin
	{
		public static PluginConfig Config;

		private readonly Harmony _harmony = new Harmony("Hypick.FunnyAudio");

		internal static AudioClip[] BonkSFX;

		internal static AudioClip[] VineBoomSFX;

		internal static AudioClip[] YippeeSFX;

		internal static AudioClip[] AhhSFX;

		internal static AudioClip[] AngryScreechSFX;

		internal static List<AudioClip> FartsSFX = new List<AudioClip>();

		internal static List<AudioClip> MoaningsSFX = new List<AudioClip>();

		internal static List<AudioClip> NMBShotgunShoots = new List<AudioClip>();

		internal static AudioClip[] NMBShotgunReload;

		internal static AudioClip[] NMBNutCrackerAim;

		internal static AudioClip[] NMBNutCrackerDie;

		internal static AudioClip[] NMBNutCrackerHitEye;

		public static Plugin Instance { get; set; }

		public static ManualLogSource Log => ((BaseUnityPlugin)Instance).Logger;

		public Plugin()
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_0010: Expected O, but got Unknown
			Instance = this;
		}

		private void Awake()
		{
			Config = new PluginConfig(((BaseUnityPlugin)this).Config);
			Log.LogInfo((object)"Load assets...");
			LoadAssetBundle("bonk", out BonkSFX);
			LoadAssetBundle("vineboom", out VineBoomSFX);
			LoadAssetBundle("yippee", out YippeeSFX);
			LoadAssetBundle("ahh", out AhhSFX);
			LoadAssetBundle("angryscreech", out AngryScreechSFX);
			LoadListAssetBundle(new string[2] { "fart", "fartfar" }, FartsSFX);
			LoadListAssetBundle(new string[2] { "moaning", "moaningfar" }, MoaningsSFX);
			LoadListAssetBundle(new string[2] { "blast", "blast2" }, NMBShotgunShoots);
			LoadAssetBundle("reload", out NMBShotgunReload);
			LoadAssetBundle("nutcrackerturn", out NMBNutCrackerAim);
			LoadAssetBundle("nutcrackerdie", out NMBNutCrackerDie);
			LoadAssetBundle("nutcrackerhiteye", out NMBNutCrackerHitEye);
			Log.LogInfo((object)"Applying patches...");
			_harmony.PatchAll();
			Log.LogInfo((object)"Patches applied");
			((BaseUnityPlugin)this).Logger.LogInfo((object)"Hypick.FunnyAudio is fully loaded!");
		}

		private void LoadAssetBundle(string fileName, out AudioClip[] audioClips)
		{
			string filePath = GetFilePath(fileName);
			AssetBundle val = AssetBundle.LoadFromFile(filePath);
			if ((Object)(object)val == (Object)null)
			{
				Log.LogError((object)("Failed to load asset bundle from " + filePath));
				audioClips = null;
			}
			else
			{
				audioClips = val.LoadAllAssets<AudioClip>();
				Log.LogInfo((object)("Asset " + fileName + " is loaded"));
			}
		}

		private void LoadListAssetBundle(string[] fileNames, List<AudioClip> audioClips)
		{
			foreach (string text in fileNames)
			{
				string filePath = GetFilePath(text);
				AssetBundle val = AssetBundle.LoadFromFile(filePath);
				if ((Object)(object)val == (Object)null)
				{
					Log.LogError((object)("Failed to load asset bundle from " + filePath));
					continue;
				}
				audioClips.Add(val.LoadAllAssets<AudioClip>()[0]);
				Log.LogInfo((object)("Asset " + text + " is loaded"));
			}
		}

		private string GetFilePath(string fileName)
		{
			string directoryName = Path.GetDirectoryName(((BaseUnityPlugin)Instance).Info.Location);
			return Path.Combine(directoryName, fileName);
		}
	}
	public static class Categories
	{
		public const string Shovel = "Shotgun";

		public const string SpringMan = "SpringMan";

		public const string HoarderBug = "HoarderBug";

		public const string Landmine = "Landmine";

		public const string Airhorn = "Airhorn";

		public const string Shotgun = "Shotgun";

		public const string NutCracker = "NutCracker";
	}
	public class PluginConfig
	{
		public bool ShovelHitSFX { get; private set; }

		public bool SpringNoises { get; private set; }

		public bool ChitterSFX { get; private set; }

		public bool HitPlayerSFX { get; private set; }

		public bool AngryVoiceSFX { get; private set; }

		public bool MineDetonate { get; private set; }

		public bool AirhornActivate { get; private set; }

		public bool ShotgunNeedMoreBullets { get; private set; }

		public PluginConfig(ConfigFile cfg)
		{
			ShovelHitSFX = cfg.Bind<bool>("Shotgun", "ShovelHitSFX", true, "Replaces the impact sound with the Bonk sound (https://www.youtube.com/watch?v=6TP0abZdRXg)").Value;
			SpringNoises = cfg.Bind<bool>("SpringMan", "SpringNoises", true, "Replaces the sound when the spring stops with the Vine Boom sound (https://www.youtube.com/watch?v=Oc7Cin_87H4)").Value;
			ChitterSFX = cfg.Bind<bool>("HoarderBug", "ChitterSFX", true, "Replaces the chirping sound with the Yippee sound (https://www.youtube.com/watch?v=0CqEKoy-fIQ)").Value;
			HitPlayerSFX = cfg.Bind<bool>("HoarderBug", "HitPlayerSFX", true, "Replaces the impact sound with the sound Ahh (https://www.youtube.com/watch?v=09gX0WL0AmI)").Value;
			AngryVoiceSFX = cfg.Bind<bool>("HoarderBug", "AngryVoiceSFX", true, "Replaces the aggressive sound with AAAAAAGHH").Value;
			MineDetonate = cfg.Bind<bool>("Landmine", "MineDetonate", true, "Replaces the explosion sound with a POWERFUL explosion").Value;
			AirhornActivate = cfg.Bind<bool>("Airhorn", "AirhornActivate", true, "Replaces activation sound with moans").Value;
			ShotgunNeedMoreBullets = cfg.Bind<bool>("Shotgun", "ShotgunNeedMoreBullets", true, "Replaces the sounds of shooting and reloading with I NEED MORE BULLETS").Value;
		}
	}
	public static class PluginInfo
	{
		public const string PLUGIN_GUID = "Hypick.FunnyAudio";

		public const string PLUGIN_NAME = "FunnyAudio";

		public const string PLUGIN_VERSION = "1.0.2";
	}
}
namespace Hypick.Patches
{
	[HarmonyPatch(typeof(GrabbableObject))]
	internal class GrabbableObjectPatch
	{
		[HarmonyPatch("Start")]
		[HarmonyPostfix]
		private static void Start(GrabbableObject __instance)
		{
			if (Plugin.Config.AirhornActivate && (Object)(object)__instance != (Object)null && (Object)(object)((Component)__instance).GetComponent<NoisemakerProp>() != (Object)null && ((Object)__instance.itemProperties).name == "Airhorn")
			{
				((Component)__instance).GetComponent<NoisemakerProp>().noiseSFX[0] = Plugin.MoaningsSFX[0];
				((Component)__instance).GetComponent<NoisemakerProp>().noiseSFXFar[0] = Plugin.MoaningsSFX[0];
			}
		}
	}
	[HarmonyPatch(typeof(HoarderBugAI))]
	internal class HoarderBugAIPatch
	{
		[HarmonyPatch("Start")]
		[HarmonyPostfix]
		private static void Start(ref AudioClip[] ___chitterSFX, ref AudioClip ___hitPlayerSFX, ref AudioClip ___angryVoiceSFX)
		{
			___chitterSFX = (Plugin.Config.ChitterSFX ? Plugin.YippeeSFX : ___chitterSFX);
			___hitPlayerSFX = (Plugin.Config.HitPlayerSFX ? Plugin.AhhSFX[0] : ___hitPlayerSFX);
			___angryVoiceSFX = (Plugin.Config.AngryVoiceSFX ? Plugin.AngryScreechSFX[0] : ___angryVoiceSFX);
		}
	}
	[HarmonyPatch(typeof(Landmine))]
	internal class LandminePatch
	{
		[HarmonyPatch("Start")]
		[HarmonyPostfix]
		private static void Start(ref AudioClip[] ___mineDetonate, ref AudioClip[] ___mineDetonateFar)
		{
			if (Plugin.Config.MineDetonate)
			{
				___mineDetonate[0] = Plugin.FartsSFX[0];
				___mineDetonateFar[0] = Plugin.FartsSFX[1];
			}
		}
	}
	[HarmonyPatch(typeof(ShotgunItem))]
	internal class ShotgunItemPatch
	{
		[HarmonyPatch("Start")]
		[HarmonyPostfix]
		private static void Start(ref AudioClip ___gunReloadSFX)
		{
			if (Plugin.Config.ShotgunNeedMoreBullets)
			{
				___gunReloadSFX = Plugin.NMBShotgunReload[0];
			}
		}

		[HarmonyPatch("ShootGun")]
		[HarmonyPrefix]
		private static void ShootGun(ShotgunItem __instance)
		{
			if (Plugin.Config.ShotgunNeedMoreBullets)
			{
				AudioSource component = ((Component)__instance).gameObject.GetComponent<AudioSource>();
				component.PlayOneShot(Plugin.NMBShotgunShoots[Random.Range(0, Plugin.NMBShotgunShoots.Count)], 1f);
			}
		}
	}
	[HarmonyPatch(typeof(Shovel))]
	internal class ShovelPatch
	{
		[HarmonyPatch("HitShovelClientRpc")]
		[HarmonyPatch("HitShovel")]
		[HarmonyPrefix]
		private static void HitShovel(ref AudioClip[] ___hitSFX)
		{
			if (Plugin.Config.ShovelHitSFX)
			{
				___hitSFX = Plugin.BonkSFX;
			}
		}
	}
	[HarmonyPatch(typeof(SpringManAI))]
	internal class SpringManAIPatch
	{
		[HarmonyPatch("Update")]
		[HarmonyPostfix]
		private static void Update(ref AudioClip[] ___springNoises)
		{
			if (Plugin.Config.SpringNoises)
			{
				___springNoises = Plugin.VineBoomSFX;
			}
		}
	}
}
namespace System.Runtime.CompilerServices
{
	[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)]
	internal sealed class IgnoresAccessChecksToAttribute : Attribute
	{
		public IgnoresAccessChecksToAttribute(string assemblyName)
		{
		}
	}
}
namespace Hypick.FunnyAudio.NetcodePatcher
{
	[AttributeUsage(AttributeTargets.Module)]
	internal class NetcodePatchedAssemblyAttribute : Attribute
	{
	}
}