Decompiled source of ULTRADistortion v1.0.2

plugins/ultradistortion.dll

Decompiled a month ago
using System;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using BepInEx.Logging;
using HarmonyLib;
using PluginConfig.API;
using PluginConfig.API.Fields;
using UnityEngine;
using UnityEngine.SceneManagement;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyTitle("ultradistortion")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("ultradistortion")]
[assembly: AssemblyCopyright("Copyright ©  2024")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("4ebdf745-dbb2-45b8-bab5-77e6d26d51ed")]
[assembly: AssemblyFileVersion("1.0.1.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: AssemblyVersion("1.0.1.0")]
namespace ultradistortion;

public static class TransformExtensions
{
	public static Transform ForceGetChild(this Transform t, int index)
	{
		try
		{
			Transform[] array = (from t1 in ((Component)t).GetComponentsInChildren<Transform>(true)
				where (Object)(object)t1.parent == (Object)(object)t
				select t1).ToArray();
			return array[index];
		}
		catch (Exception)
		{
			return null;
		}
	}
}
public static class a
{
	public static PluginConfiguratorIntegrator integrator = new PluginConfiguratorIntegrator();

	public static void CallPluginConfigurator()
	{
		if (!integrator.PluginConfigulatorIntegration())
		{
			Plugin.log.LogError((object)"[ERROR] Failed to Initialize config manager!");
		}
	}
}
[BepInPlugin("susinopo.ULTRADistortion", "ULTRADistortion", "1.0.2")]
public class Plugin : BaseUnityPlugin
{
	public static ManualLogSource log = Logger.CreateLogSource("ULTRADistortion");

	public static ConfigEntry<float> audiodistortionlevel;

	public static ConfigEntry<bool> onlymusic;

	public static float audioIntensityValue = 1f;

	public static bool isOnlyMusicValue = false;

	public static bool isthereconfigManager;

	private const string Guid = "susinopo.ULTRADistortion";

	private const string InternalName = "ULTRADistortion";

	private const string InternalVersion = "1.0.2";

	public void SetConfig()
	{
		audioIntensityValue = audiodistortionlevel.Value;
		isOnlyMusicValue = onlymusic.Value;
	}

	private void Start()
	{
		//IL_0098: Unknown result type (might be due to invalid IL or missing references)
		//IL_009e: Expected O, but got Unknown
		log.LogInfo((object)"UltraDistortion Loading... | Version v.1.0.2");
		if (isthereconfigManager = Chainloader.PluginInfos.ContainsKey("com.eternalUnion.pluginConfigurator"))
		{
			log.LogInfo((object)"PluginConfigurator Detected!");
			a.CallPluginConfigurator();
		}
		else
		{
			audiodistortionlevel = ((BaseUnityPlugin)this).Config.Bind<float>("Audio", "AudioDistortionLevel", 0.5f, "Intensity. a.k.a Earrape Amount");
			onlymusic = ((BaseUnityPlugin)this).Config.Bind<bool>("Audio", "OnlyMusic", false, "Only music to be distorted.");
			SetConfig();
		}
		try
		{
			Harmony val = new Harmony("ULTRADistortion");
			val.PatchAll();
		}
		catch (Exception ex)
		{
			((BaseUnityPlugin)this).Logger.LogFatal((object)"ERROR ERROR ERROR");
			((BaseUnityPlugin)this).Logger.LogFatal((object)ex.ToString());
		}
	}

	public static void DistortApply(AudioSource aus)
	{
		float distortionLevel = (isOnlyMusicValue ? audioIntensityValue : 0f);
		if ((Object)(object)aus != (Object)null)
		{
			if ((Object)(object)((Component)aus).GetComponent<GetMusicVolume>() != (Object)null)
			{
				Object.Destroy((Object)(object)((Component)aus).GetComponent<GetMusicVolume>());
			}
			if ((Object)(object)((Component)aus).GetComponent<AudioDistortionFilter>() == (Object)null)
			{
				AudioDistortionFilter val = ((Component)aus).gameObject.AddComponent<AudioDistortionFilter>();
				val.distortionLevel = distortionLevel;
			}
			else
			{
				((Component)aus).GetComponent<AudioDistortionFilter>().distortionLevel = distortionLevel;
			}
		}
	}

	public static void EarRapeApply(GameObject[] rootObjects)
	{
		log.LogDebug((object)"Current Config Value");
		log.LogDebug((object)("OnlyMusic: " + isOnlyMusicValue));
		log.LogDebug((object)("Intensity: " + audioIntensityValue));
		string currentScene = SceneHelper.CurrentScene;
		log.LogDebug((object)("CurrentScene: |" + currentScene + "|"));
		foreach (GameObject val in rootObjects)
		{
			if (isOnlyMusicValue)
			{
				MusicDistort(val, currentScene);
			}
			AudioListener componentInChildren = val.GetComponentInChildren<AudioListener>();
			try
			{
				if ((Object)(object)componentInChildren != (Object)null)
				{
					float distortionLevel = audioIntensityValue;
					if (isOnlyMusicValue)
					{
						distortionLevel = 0f;
					}
					if ((Object)(object)((Component)componentInChildren).GetComponent<AudioDistortionFilter>() == (Object)null)
					{
						AudioDistortionFilter val2 = ((Component)componentInChildren).gameObject.AddComponent<AudioDistortionFilter>();
						val2.distortionLevel = distortionLevel;
					}
					else
					{
						((Component)componentInChildren).GetComponent<AudioDistortionFilter>().distortionLevel = distortionLevel;
					}
				}
			}
			catch (Exception ex)
			{
				log.LogError((object)("Failed to Add AudioDistortionFilter!" + ex.Message));
			}
		}
	}

	private static void MusicDistort(GameObject obj, string scenename)
	{
		try
		{
			if (scenename == "" || scenename == "Bootstrap" || scenename == "Intro")
			{
				return;
			}
			if (((Object)obj).name == "Beats")
			{
				AudioSource[] componentsInChildren = obj.GetComponentsInChildren<AudioSource>(true);
				if (componentsInChildren != null)
				{
					AudioSource[] array = componentsInChildren;
					foreach (AudioSource aus in array)
					{
						DistortApply(aus);
					}
				}
			}
			if (scenename != null)
			{
				if (scenename.Contains("Main Menu"))
				{
					if (((Object)obj).name == "Music" || ((Object)obj).name.Contains("Seasonal"))
					{
						AudioSource[] componentsInChildren2 = obj.GetComponentsInChildren<AudioSource>(true);
						AudioSource[] array2 = componentsInChildren2;
						foreach (AudioSource val in array2)
						{
							if ((Object)(object)val != (Object)null)
							{
								DistortApply(val);
							}
						}
					}
				}
				else
				{
					string text = scenename;
					if (text.Contains("2-S"))
					{
						if (((Object)obj).name == "Canvas")
						{
							Transform val2 = obj.transform.ForceGetChild(2)?.ForceGetChild(0);
							if ((Object)(object)val2 != (Object)null)
							{
								AudioSource[] componentsInChildren3 = ((Component)val2).GetComponentsInChildren<AudioSource>(true);
								AudioSource[] array3 = componentsInChildren3;
								foreach (AudioSource val3 in array3)
								{
									if ((Object)(object)val3 == (Object)null)
									{
										break;
									}
									if (((Object)((Component)val3).gameObject).name.Contains("Music"))
									{
										DistortApply(val3);
									}
								}
							}
						}
					}
					else
					{
						string text2 = scenename;
						if (text2.Contains("4-S"))
						{
							if (((Object)obj).name == "Music")
							{
								AudioSource[] componentsInChildren4 = obj.GetComponentsInChildren<AudioSource>(true);
								AudioSource[] array4 = componentsInChildren4;
								foreach (AudioSource aus2 in array4)
								{
									DistortApply(aus2);
								}
							}
						}
						else
						{
							string text3 = scenename;
							if (text3.Contains("5-S"))
							{
								if (((Object)obj).name == "Time of Day")
								{
									AudioSource[] componentsInChildren5 = obj.GetComponentsInChildren<AudioSource>(true);
									AudioSource[] array5 = componentsInChildren5;
									foreach (AudioSource val4 in array5)
									{
										if (((Object)((Component)val4).gameObject).name.Contains("Jingle") || ((Object)((Component)val4).gameObject).name == "Music")
										{
											DistortApply(val4);
										}
									}
								}
								else if (((Object)obj).name == "Exit Lobby Interior")
								{
									AudioSource[] componentsInChildren6 = obj.GetComponentsInChildren<AudioSource>(true);
									AudioSource[] array6 = componentsInChildren6;
									foreach (AudioSource val5 in array6)
									{
										if (((Object)((Component)val5).transform.parent).name.Contains("Screen"))
										{
											DistortApply(val5);
										}
									}
								}
							}
							else
							{
								string text4 = scenename;
								if (text4.Contains("6-2"))
								{
									if (((Object)obj).name == "IntroSounds" || ((Object)obj).name == "BossMusic")
									{
										AudioSource[] componentsInChildren7 = obj.GetComponentsInChildren<AudioSource>(true);
										AudioSource[] array7 = componentsInChildren7;
										foreach (AudioSource val6 in array7)
										{
											if (!((Object)((Component)val6).gameObject).name.Contains("Speech"))
											{
												DistortApply(val6);
											}
										}
									}
								}
								else
								{
									string text5 = scenename;
									if (text5.Contains("7-S"))
									{
										if (((Object)obj).name == "Music")
										{
											AudioSource component = obj.GetComponent<AudioSource>();
											DistortApply(component);
										}
									}
									else
									{
										string text6 = scenename;
										if (text6.Contains("8-2"))
										{
											if ((((Object)obj).name.Contains("Intro") && ((Object)obj).name.Contains("Music")) || ((Object)obj).name == "Boss Music")
											{
												AudioSource[] componentsInChildren8 = obj.GetComponentsInChildren<AudioSource>(true);
												AudioSource[] array8 = componentsInChildren8;
												foreach (AudioSource aus3 in array8)
												{
													DistortApply(aus3);
												}
											}
											if (((Object)obj).name == "Exteriors")
											{
												AudioSource[] componentsInChildren9 = obj.GetComponentsInChildren<AudioSource>(true);
												AudioSource[] array9 = componentsInChildren9;
												foreach (AudioSource val7 in array9)
												{
													if (((Object)val7).name == "Undernap")
													{
														DistortApply(val7);
													}
												}
											}
										}
										else
										{
											string text7 = scenename;
											if (text7.Contains("8-3"))
											{
												if (((Object)obj).name.Contains("IntroMusic") || ((Object)obj).name == "Space")
												{
													AudioSource[] componentsInChildren10 = obj.GetComponentsInChildren<AudioSource>(true);
													AudioSource[] array10 = componentsInChildren10;
													foreach (AudioSource val8 in array10)
													{
														if ((Object)(object)((Component)val8).transform.parent == (Object)null || ((Object)((Component)val8).gameObject).name.ToLower().Contains("romusic") || ((Object)((Component)val8).transform.parent).name.Contains("Music"))
														{
															DistortApply(val8);
														}
													}
												}
												if (((Object)obj).name == "Pre-Space")
												{
													Transform[] componentsInChildren11 = ((Component)obj.transform.GetChild(1)).GetComponentsInChildren<Transform>(true);
													Transform[] array11 = componentsInChildren11;
													foreach (Transform val9 in array11)
													{
														if (((Object)val9).name.Contains("Starts"))
														{
															continue;
														}
														AudioSource[] componentsInChildren12 = ((Component)val9).GetComponentsInChildren<AudioSource>(true);
														AudioSource[] array12 = componentsInChildren12;
														foreach (AudioSource val10 in array12)
														{
															if (((Object)((Component)val10).gameObject).name.Contains("Music"))
															{
																DistortApply(val10);
															}
														}
													}
												}
											}
											else
											{
												string text8 = scenename;
												if (text8.Contains("8-4"))
												{
													if (((Object)obj).name.Contains("Music") || ((Object)obj).name.Contains("Intro") || ((Object)obj).name.Contains("The End"))
													{
														AudioSource[] componentsInChildren13 = obj.GetComponentsInChildren<AudioSource>(true);
														AudioSource[] array13 = componentsInChildren13;
														foreach (AudioSource val11 in array13)
														{
															if (((Object)((Component)val11).gameObject).name.Contains("Music") || ((Object)((Component)val11).gameObject).name.Contains("Drone") || ((Object)((Component)val11).gameObject).name.Contains("Spot Light") || ((Object)((Component)val11).gameObject).name.Contains("Impact"))
															{
																DistortApply(val11);
															}
														}
													}
												}
												else
												{
													string text9 = scenename;
													if (text9.Contains("P-1"))
													{
														if (((Object)obj).name.ToLower().Contains("music"))
														{
															AudioSource[] componentsInChildren14 = obj.GetComponentsInChildren<AudioSource>(true);
															AudioSource[] array14 = componentsInChildren14;
															foreach (AudioSource aus4 in array14)
															{
																DistortApply(aus4);
															}
														}
													}
													else
													{
														string text10 = scenename;
														if (text10.Contains("P-2"))
														{
															if (((Object)obj).name == "BossMusics")
															{
																AudioSource[] componentsInChildren15 = obj.GetComponentsInChildren<AudioSource>(true);
																AudioSource[] array15 = componentsInChildren15;
																foreach (AudioSource aus5 in array15)
																{
																	DistortApply(aus5);
																}
															}
															if (((Object)obj).name == "Rain" && obj.transform.childCount >= 5)
															{
																AudioSource[] componentsInChildren16 = ((Component)obj.transform.GetChild(5)).GetComponentsInChildren<AudioSource>(true);
																AudioSource[] array16 = componentsInChildren16;
																foreach (AudioSource aus6 in array16)
																{
																	DistortApply(aus6);
																}
															}
														}
														else
														{
															string text11 = scenename;
															if (text11.Contains("Intermission"))
															{
																if (((Object)obj).name == "Canvas")
																{
																	AudioSource[] componentsInChildren17 = obj.GetComponentsInChildren<AudioSource>(true);
																	AudioSource[] array17 = componentsInChildren17;
																	foreach (AudioSource val12 in array17)
																	{
																		if (((Object)((Component)val12).gameObject).name.Contains("Music"))
																		{
																			DistortApply(val12);
																		}
																	}
																}
															}
															else
															{
																string text12 = scenename;
																if (text12.Contains("Endless"))
																{
																	if (((Object)obj).name == "Everything")
																	{
																		AudioSource[] componentsInChildren18 = obj.GetComponentsInChildren<AudioSource>(true);
																		AudioSource[] array18 = componentsInChildren18;
																		foreach (AudioSource aus7 in array18)
																		{
																			DistortApply(aus7);
																		}
																	}
																}
																else
																{
																	string text13 = scenename;
																	if (text13.Contains("CreditsMuseum2") && (((Object)obj).name == "Music" || ((Object)obj).name == "__Room_Theater"))
																	{
																		AudioSource[] componentsInChildren19 = obj.GetComponentsInChildren<AudioSource>(true);
																		AudioSource[] array19 = componentsInChildren19;
																		foreach (AudioSource val13 in array19)
																		{
																			if (((Object)((Component)val13).gameObject).name.Contains("Music Player") || ((Object)((Component)val13).gameObject).name.Contains("VideoAudioSource"))
																			{
																				DistortApply(val13);
																			}
																		}
																	}
																}
															}
														}
													}
												}
											}
										}
									}
								}
							}
						}
					}
				}
			}
			MusicManager componentInChildren = obj.GetComponentInChildren<MusicManager>(true);
			AudioSource[] array20 = ((componentInChildren != null) ? ((Component)componentInChildren).GetComponentsInChildren<AudioSource>(true) : null);
			if (array20 != null)
			{
				AudioSource[] array21 = array20;
				foreach (AudioSource aus8 in array21)
				{
					DistortApply(aus8);
				}
			}
		}
		catch (Exception ex)
		{
			log.LogError((object)"Failed to Apply Distortion to Music! ");
			log.LogError((object)ex.Message);
		}
	}
}
[HarmonyPatch(typeof(SceneHelper), "OnSceneLoaded")]
public class OSLpatch
{
	[HarmonyPostfix]
	public static void Postfix()
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0006: Unknown result type (might be due to invalid IL or missing references)
		Scene activeScene = SceneManager.GetActiveScene();
		GameObject[] rootGameObjects = ((Scene)(ref activeScene)).GetRootGameObjects();
		if (Plugin.isthereconfigManager)
		{
			Plugin.audioIntensityValue = PluginConfiguratorIntegrator.intensityField.value;
			Plugin.isOnlyMusicValue = PluginConfiguratorIntegrator.isMusicOnlyField.value;
		}
		Plugin.EarRapeApply(rootGameObjects);
	}
}
[HarmonyPatch(typeof(AudioCopyVolumeAndTime), "Update")]
public class ACVATpatch
{
	[HarmonyPostfix]
	public static void Postfix(AudioCopyVolumeAndTime __instance, AudioSource ___aud)
	{
		if ((Object)(object)((Component)__instance).GetComponent<AudioSource>() != (Object)null && (Object)(object)((Component)__instance.target).GetComponent<AudioDistortionFilter>() != (Object)null)
		{
			if ((Object)(object)((Component)___aud).GetComponent<AudioDistortionFilter>() == (Object)null)
			{
				AudioDistortionFilter val = ((Component)___aud).gameObject.AddComponent<AudioDistortionFilter>();
				val.distortionLevel = (Plugin.isOnlyMusicValue ? Plugin.audioIntensityValue : 0f);
			}
			((Component)___aud).GetComponent<AudioDistortionFilter>().distortionLevel = (Plugin.isOnlyMusicValue ? Plugin.audioIntensityValue : 0f);
		}
	}
}
public class PluginConfiguratorIntegrator
{
	public static BoolField isMusicOnlyField;

	public static FloatSliderField intensityField;

	private PluginConfigurator config;

	public bool PluginConfigulatorIntegration()
	{
		//IL_0039: Unknown result type (might be due to invalid IL or missing references)
		//IL_0043: Expected O, but got Unknown
		//IL_006f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0079: Expected O, but got Unknown
		//IL_0085: Unknown result type (might be due to invalid IL or missing references)
		//IL_008f: Expected O, but got Unknown
		//IL_009c: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a6: Expected O, but got Unknown
		//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
		if (Plugin.isthereconfigManager)
		{
			config = PluginConfigurator.Create("UltraDistortion", "ultra_distortion");
			isMusicOnlyField = new BoolField(config.rootPanel, "OnlyMusic", "enabler", false);
			intensityField = new FloatSliderField(config.rootPanel, "AudioDistortionLevel (Earrape Amount)", "intensity", new Tuple<float, float>(0f, 1f), 1f, 3, true, true);
			isMusicOnlyField.onValueChange += (BoolValueChangeEventDelegate)delegate(BoolValueChangeEvent evt)
			{
				Config_postConfigChange(null, evt.value);
			};
			intensityField.postValueChangeEvent += (PostFloatSliderValueChangeEvent)delegate(float value, Tuple<float, float> bounds)
			{
				Config_postConfigChange(value);
			};
			Scene activeScene = SceneManager.GetActiveScene();
			GameObject[] rootGameObjects = ((Scene)(ref activeScene)).GetRootGameObjects();
			Plugin.EarRapeApply(rootGameObjects);
			return true;
		}
		return false;
	}

	private void Config_postConfigChange(float? a = null, bool? b = null)
	{
		//IL_0053: Unknown result type (might be due to invalid IL or missing references)
		//IL_0058: Unknown result type (might be due to invalid IL or missing references)
		Plugin.audioIntensityValue = ((!a.HasValue) ? intensityField.value : a.Value);
		Plugin.isOnlyMusicValue = ((!b.HasValue) ? isMusicOnlyField.value : b.Value);
		Plugin.log.LogDebug((object)"Attempting to apply config value.");
		Scene activeScene = SceneManager.GetActiveScene();
		GameObject[] rootGameObjects = ((Scene)(ref activeScene)).GetRootGameObjects();
		Plugin.EarRapeApply(rootGameObjects);
	}
}