using System; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using HarmonyLib; using InscryptionWarning.Patches; using Microsoft.CodeAnalysis; using UnityEngine; using UnityEngine.UI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("InscryptionWarning")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("0.1.0.0")] [assembly: AssemblyInformationalVersion("0.1.0+960ddc910412d52b01632943df5e93b742dfa8cb")] [assembly: AssemblyProduct("InscryptionWarning")] [assembly: AssemblyTitle("InscryptionWarning")] [assembly: AssemblyVersion("0.1.0.0")] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [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] [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] [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 InscryptionWarning { [BepInPlugin("InscryptionWarning", "InscryptionWarning", "0.1.0")] public class Plugin : BaseUnityPlugin { internal static ManualLogSource Logger = new ManualLogSource("InscryptionWarning"); public void Awake() { //IL_002a: Unknown result type (might be due to invalid IL or missing references) Logger = ((BaseUnityPlugin)this).Logger; Logger.LogInfo((object)"Plugin InscryptionWarning is loaded!"); MapHintPatch.Init(((BaseUnityPlugin)this).Config); new Harmony("InscryptionWarning").PatchAll(); } } public static class MyPluginInfo { public const string PLUGIN_GUID = "InscryptionWarning"; public const string PLUGIN_NAME = "InscryptionWarning"; public const string PLUGIN_VERSION = "0.1.0"; } } namespace InscryptionWarning.Patches { internal static class MapHintPatch { internal enum CueStyle { Off, Diegetic, Icon, Debug } [HarmonyPatch(/*Could not decode attribute arguments.*/)] private static class TrackEventStart { private static void Postfix(FollowupConditionData data, int currentDistance) { if (data != null && data.ConditionName == "FollowupConditionInscryptionEvent") { startDistance = currentDistance; } } } [HarmonyPatch(typeof(MapNodeUI), "RefreshState")] private static class HintNode { private static void Postfix(MapNodeUI __instance, SaveManager saveManager) { GameObject orCreateOverlay = GetOrCreateOverlay(__instance); if (!ShouldShowHint(__instance, saveManager)) { orCreateOverlay.SetActive(false); return; } ApplyStyle(orCreateOverlay); orCreateOverlay.SetActive(true); } } private const string OverlayName = "InscryptionWarning_Hint"; private static ConfigEntry style; private static int? startDistance; public static void Init(ConfigFile config) { style = config.Bind("Hint", "CueStyle", CueStyle.Diegetic, "How obvious the Inscryption path hint should be on the map: Off (disabled), Diegetic (a barely-there tint on the correct node), Icon (a small visible badge), Debug (an unmissable marker)."); SelfCheck(); } internal static BranchSelection? GetHintedBranch(int startDistance, int nodeDistance, int code) { int num = nodeDistance - (startDistance + 1); if (num < 0 || num > 2) { return null; } return (BranchSelection)((((code >> 2 - num) & 1) != 0) ? 1 : 0); } private static void SelfCheck() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Invalid comparison between Unknown and I4 //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Invalid comparison between Unknown and I4 if ((int)GetHintedBranch(10, 11, 5).GetValueOrDefault() != 1 || GetHintedBranch(10, 12, 5) != (BranchSelection?)0 || (int)GetHintedBranch(10, 13, 5).GetValueOrDefault() != 1 || GetHintedBranch(10, 10, 5).HasValue || GetHintedBranch(10, 14, 5).HasValue) { throw new InvalidOperationException("MapHintPatch.GetHintedBranch self-check failed"); } } private static bool ShouldShowHint(MapNodeUI node, SaveManager saveManager) { //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) if (style.Value == CueStyle.Off || !startDistance.HasValue || (Object)(object)saveManager == (Object)null) { return false; } if (saveManager.GetInscryptionEventSuccessfullyCompleted()) { return false; } Location location = node.GetLocation(); if (location == null) { return false; } BranchSelection? hintedBranch = GetHintedBranch(startDistance.Value, location.Distance, saveManager.GetInscryptionEventPath()); if (hintedBranch.HasValue) { return (BranchSelection?)node.GetBranch() == hintedBranch; } return false; } private static GameObject GetOrCreateOverlay(MapNodeUI node) { //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Expected O, but got Unknown Transform val = ((Component)node).transform.Find("InscryptionWarning_Hint"); if ((Object)(object)val != (Object)null) { return ((Component)val).gameObject; } GameObject val2 = new GameObject("InscryptionWarning_Hint", new Type[2] { typeof(RectTransform), typeof(Image) }); val2.transform.SetParent(((Component)node).transform, false); ((Graphic)val2.GetComponent()).raycastTarget = false; return val2; } private static void ApplyStyle(GameObject overlay) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Expected O, but got Unknown //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_00ae: Unknown result type (might be due to invalid IL or missing references) //IL_00b9: Unknown result type (might be due to invalid IL or missing references) //IL_00c4: Unknown result type (might be due to invalid IL or missing references) //IL_00cf: Unknown result type (might be due to invalid IL or missing references) //IL_00ee: Unknown result type (might be due to invalid IL or missing references) //IL_00fa: Unknown result type (might be due to invalid IL or missing references) //IL_0105: Unknown result type (might be due to invalid IL or missing references) //IL_0110: Unknown result type (might be due to invalid IL or missing references) //IL_011b: Unknown result type (might be due to invalid IL or missing references) //IL_013a: Unknown result type (might be due to invalid IL or missing references) RectTransform val = (RectTransform)overlay.transform; Image component = overlay.GetComponent(); switch (style.Value) { case CueStyle.Icon: val.anchorMin = new Vector2(0.5f, 1f); val.anchorMax = new Vector2(0.5f, 1f); val.pivot = new Vector2(0.5f, 0.5f); val.sizeDelta = new Vector2(20f, 20f); val.anchoredPosition = Vector2.zero; ((Graphic)component).color = new Color(1f, 0.85f, 0.3f, 0.95f); break; case CueStyle.Debug: val.anchorMin = Vector2.zero; val.anchorMax = Vector2.one; val.offsetMin = Vector2.zero; val.offsetMax = Vector2.zero; ((Graphic)component).color = new Color(1f, 0.1f, 0.9f, 0.8f); break; default: val.anchorMin = Vector2.zero; val.anchorMax = Vector2.one; val.offsetMin = Vector2.zero; val.offsetMax = Vector2.zero; ((Graphic)component).color = new Color(1f, 0.85f, 0.3f, 0.14f); break; } } } }