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);
}
}
}