Decompiled source of The Enchiridion v0.0.6

The_Enchiridion/Joes_Enchiridion_Mod.dll

Decompiled 5 months ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using Additional.Utils;
using BepInEx;
using BepInEx.Logging;
using HarmonyLib;
using UnityEngine;
using UnityEngine.UI;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyTitle("Joes_Enchiridion_Mod")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("Joes_Enchiridion_Mod")]
[assembly: AssemblyCopyright("Copyright ©  2025")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("89d4d2a8-cc26-44ed-adbb-bfd7feeb647b")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace Joes_Enchiridion_Mod
{
	public static class InternalInfo
	{
		public const string Plugin_Name = "The Enchiridion";

		public const string Plugin_Ver = "0.0.6.0";

		public const string Plugin_UI = "thecooljoe.Enchiridion";
	}
	[BepInPlugin("thecooljoe.Enchiridion", "The Enchiridion", "0.0.6.0")]
	public class Enchiridion : BaseUnityPlugin
	{
		public static Enchiridion Instance;

		public static ManualLogSource mls;

		private readonly Harmony harmony = new Harmony("thecooljoe.Enchiridion");

		public static Texture2D Decals;

		public static AssetBundle DecalBundle;

		public static List<AudioClip> SoundFX;

		public static List<AudioClip> IntroFX;

		public static bool IntroPlayed;

		private void Awake()
		{
			mls = ((BaseUnityPlugin)this).Logger;
			if ((Object)(object)Instance == (Object)null)
			{
				Instance = this;
			}
			mls.LogInfo((object)"A WARNING:\nThe Enchiridion is the most dangerous mod in the Multiverse. Exercise EXTREME caution while using it.");
			harmony.PatchAll();
			SetupMenuAudio();
			SetupMenuImage();
		}

		public void SetupMenuAudio()
		{
			string location = ((BaseUnityPlugin)Instance).Info.Location;
			location = location.TrimEnd("Joes_Enchiridion_Mod.dll".ToCharArray());
			AssetBundle val = AssetBundle.LoadFromFile(location + "menumusicfiles");
			AssetBundle val2 = AssetBundle.LoadFromFile(location + "menuintros");
			if ((Object)(object)val2 != (Object)null)
			{
				IntroFX = val2.LoadAllAssets<AudioClip>().ToList();
			}
			else
			{
				mls.LogWarning((object)"Main Menu Intro Theme failed to load...");
			}
			if ((Object)(object)val != (Object)null)
			{
				SoundFX = val.LoadAllAssets<AudioClip>().ToList();
			}
			else
			{
				mls.LogWarning((object)"Main Menu Theme failed to load...");
			}
		}

		public void SetupMenuImage()
		{
			string location = ((BaseUnityPlugin)Instance).Info.Location;
			location = location.TrimEnd("Joes_Enchiridion_Mod.dll".ToCharArray());
			AssetBundle val = AssetBundle.LoadFromFile(location + "menudecals");
			if ((Object)(object)val != (Object)null)
			{
				Decals = val.LoadPersistentAsset<Texture2D>("EELogo.png");
			}
			else
			{
				mls.LogWarning((object)"Main Menu Logo failed to load...");
			}
		}
	}
}
namespace Joes_Enchiridion_Mod.Patches
{
	[HarmonyPatch(typeof(MenuManager), "Awake")]
	internal class MainMenuPatch
	{
		[CompilerGenerated]
		private sealed class <PlayMusicDelayed>d__1 : IEnumerator<object>, IDisposable, IEnumerator
		{
			private int <>1__state;

			private object <>2__current;

			public MenuManager __instance;

			private Random <rng>5__1;

			private int <rand1>5__2;

			object IEnumerator<object>.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			object IEnumerator.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			[DebuggerHidden]
			public <PlayMusicDelayed>d__1(int <>1__state)
			{
				this.<>1__state = <>1__state;
			}

			[DebuggerHidden]
			void IDisposable.Dispose()
			{
				<rng>5__1 = null;
				<>1__state = -2;
			}

			private bool MoveNext()
			{
				//IL_003e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0048: Expected O, but got Unknown
				switch (<>1__state)
				{
				default:
					return false;
				case 0:
					<>1__state = -1;
					if (!Enchiridion.IntroPlayed)
					{
						<>2__current = (object)new WaitForSeconds(__instance.menuMusic.length);
						<>1__state = 1;
						return true;
					}
					break;
				case 1:
					<>1__state = -1;
					Enchiridion.IntroPlayed = true;
					break;
				}
				<rng>5__1 = new Random();
				<rand1>5__2 = <rng>5__1.Next(12);
				__instance.menuMusic = Enchiridion.SoundFX[<rand1>5__2];
				__instance.MenuAudio.clip = __instance.menuMusic;
				__instance.MenuAudio.loop = true;
				__instance.MenuAudio.Play();
				return false;
			}

			bool IEnumerator.MoveNext()
			{
				//ILSpy generated this explicit interface implementation from .override directive in MoveNext
				return this.MoveNext();
			}

			[DebuggerHidden]
			void IEnumerator.Reset()
			{
				throw new NotSupportedException();
			}
		}

		[HarmonyPatch("Start")]
		[HarmonyPostfix]
		public static void NewMusic(MenuManager __instance)
		{
			//IL_0049: 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)
			//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f7: Unknown result type (might be due to invalid IL or missing references)
			if (__instance.isInitScene)
			{
				return;
			}
			if ((Object)(object)Enchiridion.Decals != (Object)null)
			{
				Sprite sprite = Sprite.Create(Enchiridion.Decals, new Rect(0f, 0f, (float)((Texture)Enchiridion.Decals).width, (float)((Texture)Enchiridion.Decals).height), new Vector2(0.5f, 0.5f));
				GameObject gameObject = ((Component)((Component)__instance).transform.parent).gameObject;
				Transform val = gameObject.transform.Find("MenuContainer/MainButtons/HeaderImage");
				if ((Object)(object)val != (Object)null)
				{
					val.localScale = new Vector3(6.15f, 5.06f, 6.15f);
					((Component)val).gameObject.GetComponent<Image>().sprite = sprite;
				}
				Transform val2 = gameObject.transform.Find("MenuContainer/LoadingScreen");
				if ((Object)(object)val2 != (Object)null)
				{
					val2.localScale = new Vector3(1.02f, 1.06f, 1.02f);
					Transform val3 = val2.Find("Image");
					if ((Object)(object)val3 != (Object)null)
					{
						((Component)val3).GetComponent<Image>().sprite = sprite;
					}
				}
			}
			if (Enchiridion.SoundFX != null && Enchiridion.IntroFX != null)
			{
				if (!Enchiridion.IntroPlayed)
				{
					Random random = new Random();
					AudioSource menuAudio = __instance.MenuAudio;
					int index = random.Next(5);
					menuAudio.Stop();
					menuAudio.loop = false;
					__instance.menuMusic = Enchiridion.IntroFX[index];
					menuAudio.Play();
				}
				((MonoBehaviour)__instance).StartCoroutine(PlayMusicDelayed(__instance));
			}
		}

		[IteratorStateMachine(typeof(<PlayMusicDelayed>d__1))]
		[HarmonyPatch]
		public static IEnumerator PlayMusicDelayed(MenuManager __instance)
		{
			//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
			return new <PlayMusicDelayed>d__1(0)
			{
				__instance = __instance
			};
		}
	}
}
namespace Additional.Utils
{
	public class BundleUtilities
	{
		public static byte[] GetResourceBytes(string filename, Assembly assembly)
		{
			string[] manifestResourceNames = assembly.GetManifestResourceNames();
			foreach (string text in manifestResourceNames)
			{
				if (!text.Contains(filename))
				{
					continue;
				}
				using Stream stream = assembly.GetManifestResourceStream(text);
				if (stream == null)
				{
					return null;
				}
				byte[] array = new byte[stream.Length];
				stream.Read(array, 0, array.Length);
				return array;
			}
			return null;
		}

		public static AssetBundle LoadBundleFromInternalAssembly(string filename, Assembly assembly)
		{
			return AssetBundle.LoadFromMemory(GetResourceBytes(filename, assembly));
		}
	}
	public static class AssetBundleExtension
	{
		public static T LoadPersistentAsset<T>(this AssetBundle bundle, string name) where T : Object
		{
			Object val = bundle.LoadAsset(name);
			if (val != (Object)null)
			{
				val.hideFlags = (HideFlags)32;
				return (T)(object)val;
			}
			return default(T);
		}
	}
}