Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of BigEyes v1.0.0
BigEyes.dll
Decompiled a year agousing System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using System.Text; using BepInEx; using BepInEx.Configuration; 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: IgnoresAccessChecksTo("")] [assembly: AssemblyCompany("Omniscye")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("BigEyes")] [assembly: AssemblyTitle("BigEyes")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.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] [Microsoft.CodeAnalysis.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; } } [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 Empress.BigEyes { [BepInPlugin("empress.repo.bigeyes", "Big Eyes", "1.4.1")] public sealed class BigEyesPlugin : BaseUnityPlugin { public const string Guid = "empress.repo.bigeyes"; public const string Name = "Big Eyes"; public const string Version = "1.4.1"; internal static ManualLogSource LogS; internal static Harmony Harmony; internal static ConfigEntry<bool> C_Enable; internal static ConfigEntry<float> C_EyeScale; internal static ConfigEntry<int> C_ApplyDelayFrames; internal static ConfigEntry<bool> C_Debug; internal static ConfigEntry<float> C_MaxSearchSeconds; internal static ConfigEntry<bool> C_ScaleAllEyeMatches; internal static ConfigEntry<string> C_LeftEyeName; internal static ConfigEntry<string> C_RightEyeName; private void Awake() { //IL_0121: Unknown result type (might be due to invalid IL or missing references) //IL_012b: Expected O, but got Unknown LogS = ((BaseUnityPlugin)this).Logger; C_Enable = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "Enable", true, "Master enable for the mod."); C_EyeScale = ((BaseUnityPlugin)this).Config.Bind<float>("General", "EyeScale", 2f, "Uniform scale applied to eye transforms."); C_ApplyDelayFrames = ((BaseUnityPlugin)this).Config.Bind<int>("General", "ApplyDelayFrames", 1, "Frames to wait after PlayerAvatar.Start before applying changes."); C_Debug = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "DebugLogs", false, "If true, prints extra search diagnostics."); C_MaxSearchSeconds = ((BaseUnityPlugin)this).Config.Bind<float>("General", "MaxSearchSeconds", 5f, "How long to keep scanning hierarchy for targets before giving up."); C_ScaleAllEyeMatches = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "ScaleAllEyeMatches", true, "Scale every transform that looks like an eye (not just L/R)."); C_LeftEyeName = ((BaseUnityPlugin)this).Config.Bind<string>("Names", "LeftEyeName", "ANIM EYE LEFT", "Left eye Transform name (fallback)."); C_RightEyeName = ((BaseUnityPlugin)this).Config.Bind<string>("Names", "RightEyeName", "ANIM EYE RIGHT", "Right eye Transform name (fallback)."); Harmony = new Harmony("empress.repo.bigeyes"); Harmony.PatchAll(typeof(Patches)); LogS.LogInfo((object)"Big Eyes 1.4.1 loaded (eyes only)."); } private void OnDestroy() { try { Harmony harmony = Harmony; if (harmony != null) { harmony.UnpatchSelf(); } } catch (Exception ex) { LogS.LogWarning((object)("Unpatch failed: " + ex.Message)); } } } internal static class Util { [CompilerGenerated] private sealed class <EnumerateAll>d__1 : IEnumerable<Transform>, IEnumerable, IEnumerator<Transform>, IEnumerator, IDisposable { private int <>1__state; private Transform <>2__current; private int <>l__initialThreadId; private Transform root; public Transform <>3__root; private Stack<Transform> <stack>5__1; private Transform <t>5__2; private int <i>5__3; Transform IEnumerator<Transform>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <EnumerateAll>d__1(int <>1__state) { this.<>1__state = <>1__state; <>l__initialThreadId = Environment.CurrentManagedThreadId; } [DebuggerHidden] void IDisposable.Dispose() { <stack>5__1 = null; <t>5__2 = null; <>1__state = -2; } private bool MoveNext() { switch (<>1__state) { default: return false; case 0: <>1__state = -1; if ((Object)(object)root == (Object)null) { return false; } <stack>5__1 = new Stack<Transform>(); <stack>5__1.Push(root); break; case 1: <>1__state = -1; <i>5__3 = 0; while (<i>5__3 < <t>5__2.childCount) { <stack>5__1.Push(<t>5__2.GetChild(<i>5__3)); <i>5__3++; } <t>5__2 = null; break; } if (<stack>5__1.Count > 0) { <t>5__2 = <stack>5__1.Pop(); <>2__current = <t>5__2; <>1__state = 1; return true; } 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(); } [DebuggerHidden] IEnumerator<Transform> IEnumerable<Transform>.GetEnumerator() { <EnumerateAll>d__1 <EnumerateAll>d__; if (<>1__state == -2 && <>l__initialThreadId == Environment.CurrentManagedThreadId) { <>1__state = 0; <EnumerateAll>d__ = this; } else { <EnumerateAll>d__ = new <EnumerateAll>d__1(0); } <EnumerateAll>d__.root = <>3__root; return <EnumerateAll>d__; } [DebuggerHidden] IEnumerator IEnumerable.GetEnumerator() { return ((IEnumerable<Transform>)this).GetEnumerator(); } } public static string Sanitize(string s) { if (string.IsNullOrEmpty(s)) { return string.Empty; } StringBuilder stringBuilder = new StringBuilder(s.Length); foreach (char c in s) { if (char.IsLetterOrDigit(c)) { stringBuilder.Append(char.ToLowerInvariant(c)); } } return stringBuilder.ToString(); } [IteratorStateMachine(typeof(<EnumerateAll>d__1))] public static IEnumerable<Transform> EnumerateAll(Transform root) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <EnumerateAll>d__1(-2) { <>3__root = root }; } public static int Depth(Transform t) { int num = 0; Transform val = t; while ((Object)(object)val != (Object)null) { num++; val = val.parent; } return num; } public static string GetPath(Transform t) { if ((Object)(object)t == (Object)null) { return "<null>"; } Stack<string> stack = new Stack<string>(); Transform val = t; while ((Object)(object)val != (Object)null) { stack.Push(((Object)val).name); val = val.parent; } return string.Join("/", stack.ToArray()); } public static Transform PickDeepest(IList<Transform> list) { if (list == null || list.Count == 0) { return null; } Transform val = list[0]; int num = Depth(val); for (int i = 1; i < list.Count; i++) { int num2 = Depth(list[i]); if (num2 > num) { val = list[i]; num = num2; } } return val; } } [HarmonyPatch] internal static class Patches { [CompilerGenerated] private sealed class <ApplyRoutine>d__2 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public PlayerAvatar avatar; private int <delay>5__1; private float <timeout>5__2; private float <t0>5__3; private List<Transform> <eyes>5__4; private int <i>5__5; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <ApplyRoutine>d__2(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <eyes>5__4 = null; <>1__state = -2; } private bool MoveNext() { switch (<>1__state) { default: return false; case 0: <>1__state = -1; <delay>5__1 = Mathf.Max(0, BigEyesPlugin.C_ApplyDelayFrames.Value); <i>5__5 = 0; goto IL_0074; case 1: <>1__state = -1; <i>5__5++; goto IL_0074; case 2: { <>1__state = -1; break; } IL_0074: if (<i>5__5 < <delay>5__1) { <>2__current = null; <>1__state = 1; return true; } <timeout>5__2 = Mathf.Max(0.1f, BigEyesPlugin.C_MaxSearchSeconds.Value); <t0>5__3 = Time.realtimeSinceStartup; <eyes>5__4 = null; break; } if (Time.realtimeSinceStartup - <t0>5__3 < <timeout>5__2) { if (<eyes>5__4 == null || <eyes>5__4.Count == 0) { <eyes>5__4 = ResolveEyes(avatar); } if (<eyes>5__4 == null || <eyes>5__4.Count <= 0) { <>2__current = null; <>1__state = 2; return true; } } if (<eyes>5__4 != null && <eyes>5__4.Count > 0) { ScaleEyes(<eyes>5__4, BigEyesPlugin.C_EyeScale.Value); } else { BigEyesPlugin.LogS.LogWarning((object)"Eye search timed out; nothing scaled."); } Processed.Add(((Object)avatar).GetInstanceID()); 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(); } } private static readonly HashSet<int> Processed = new HashSet<int>(); [HarmonyPatch(typeof(PlayerAvatar), "Start")] [HarmonyPostfix] private static void PlayerAvatar_Start_Postfix(PlayerAvatar __instance) { if (BigEyesPlugin.C_Enable.Value && !((Object)(object)__instance == (Object)null)) { int instanceID = ((Object)__instance).GetInstanceID(); if (!Processed.Contains(instanceID)) { ((MonoBehaviour)__instance).StartCoroutine(ApplyRoutine(__instance)); } } } [IteratorStateMachine(typeof(<ApplyRoutine>d__2))] private static IEnumerator ApplyRoutine(PlayerAvatar avatar) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <ApplyRoutine>d__2(0) { avatar = avatar }; } private static List<Transform> ResolveEyes(PlayerAvatar avatar) { List<Transform> list = new List<Transform>(4); PlayerAvatarVisuals val = (((Object)(object)avatar != (Object)null) ? avatar.playerAvatarVisuals : null); if ((Object)(object)val == (Object)null && (Object)(object)avatar != (Object)null) { val = ((Component)avatar).GetComponentInChildren<PlayerAvatarVisuals>(true); } PlayerEyes val2 = null; if ((Object)(object)val != (Object)null) { val2 = (((Object)(object)val.playerEyes != (Object)null) ? val.playerEyes : ((Component)val).GetComponentInChildren<PlayerEyes>(true)); } if ((Object)(object)val2 != (Object)null) { if ((Object)(object)val2.eyeLeft != (Object)null) { list.Add(val2.eyeLeft); } if ((Object)(object)val2.eyeRight != (Object)null) { list.Add(val2.eyeRight); } if (list.Count > 0) { if (BigEyesPlugin.C_Debug.Value) { for (int i = 0; i < list.Count; i++) { BigEyesPlugin.LogS.LogInfo((object)("Eyes via PlayerEyes[" + i + "] => " + Util.GetPath(list[i]))); } } return list; } } Transform val3 = (((Object)(object)avatar != (Object)null) ? ((Component)avatar).transform : null); if ((Object)(object)val3 == (Object)null) { return list; } List<Transform> list2 = new List<Transform>(); foreach (Transform item2 in Util.EnumerateAll(val3)) { string text = Util.Sanitize(((Object)item2).name); if (text.Contains("eye")) { list2.Add(item2); } } List<Transform> list3 = new List<Transform>(); List<Transform> list4 = new List<Transform>(); for (int j = 0; j < list2.Count; j++) { string text2 = Util.Sanitize(((Object)list2[j]).name); bool flag = text2.Contains("left") || text2.EndsWith("l") || text2.Contains("_l"); bool flag2 = text2.Contains("right") || text2.EndsWith("r") || text2.Contains("_r"); if (flag && !flag2) { list3.Add(list2[j]); } else if (flag2 && !flag) { list4.Add(list2[j]); } } if (list3.Count > 0) { list.Add(Util.PickDeepest(list3)); } if (list4.Count > 0) { list.Add(Util.PickDeepest(list4)); } if (BigEyesPlugin.C_ScaleAllEyeMatches.Value) { for (int k = 0; k < list2.Count; k++) { Transform item = list2[k]; if (!list.Contains(item)) { list.Add(item); } } } if (BigEyesPlugin.C_Debug.Value) { for (int l = 0; l < list.Count; l++) { BigEyesPlugin.LogS.LogInfo((object)("Eye match[" + l + "] => " + Util.GetPath(list[l]))); } } return list; } private static void ScaleEyes(List<Transform> eyes, float scale) { //IL_002f: Unknown result type (might be due to invalid IL or missing references) float num = Mathf.Max(0.001f, scale); int num2 = 0; for (int i = 0; i < eyes.Count; i++) { Transform val = eyes[i]; if (!((Object)(object)val == (Object)null)) { val.localScale = new Vector3(num, num, num); num2++; } } BigEyesPlugin.LogS.LogInfo((object)("Scaled " + num2 + " eye transform(s) to " + num + ".")); } } } namespace BigEyes { [BepInPlugin("Omniscye.BigEyes", "BigEyes", "1.0")] public class BigEyes : BaseUnityPlugin { internal static BigEyes Instance { get; private set; } internal static ManualLogSource Logger => Instance._logger; private ManualLogSource _logger => ((BaseUnityPlugin)this).Logger; internal Harmony? Harmony { get; set; } private void Awake() { Instance = this; ((Component)this).gameObject.transform.parent = null; ((Object)((Component)this).gameObject).hideFlags = (HideFlags)61; Patch(); Logger.LogInfo((object)$"{((BaseUnityPlugin)this).Info.Metadata.GUID} v{((BaseUnityPlugin)this).Info.Metadata.Version} has loaded!"); } internal void Patch() { //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Expected O, but got Unknown //IL_0026: Expected O, but got Unknown if (Harmony == null) { Harmony val = new Harmony(((BaseUnityPlugin)this).Info.Metadata.GUID); Harmony val2 = val; Harmony = val; } Harmony.PatchAll(); } internal void Unpatch() { Harmony? harmony = Harmony; if (harmony != null) { harmony.UnpatchSelf(); } } private void Update() { } } }