using System; using System.Collections; using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using DiskCardGame; using HarmonyLib; using InscryptionAPI.Ascension; using InscryptionAPI.Guid; 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.0", FrameworkDisplayName = ".NET Standard 2.0")] [assembly: AssemblyCompany("TwiceAbandoned")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+e99bf2cc744845fb08f35cd4d9d552d56c0a9603")] [assembly: AssemblyProduct("TwiceAbandoned")] [assembly: AssemblyTitle("TwiceAbandoned")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [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 TwiceAbandoned { [BepInPlugin("chytridi05.inscryption.twiceabandoned", "TwiceAbandoned", "0.0.1")] [BepInDependency(/*Could not decode attribute arguments.*/)] [HarmonyPatch] public class GBCPlugin : BaseUnityPlugin { public const string GUID = "chytridi05.inscryption.twiceabandoned"; public const string NAME = "TwiceAbandoned"; public const string VERSION = "0.0.1"; internal static bool AlwaysActive; private static readonly Harmony harmony = new Harmony("chytridi05.inscryption.twiceabandoned"); private static readonly AscensionChallenge challenge = GuidManager.GetEnumValue("chytridi05.inscryption.twiceabandoned", "Coward’s Hand"); private const string ASCENSION_PATH = "art/ui/ascension"; private void Awake() { AlwaysActive = ((BaseUnityPlugin)this).Config.Bind("Ascension", "Always Active", false, "Toggle whether the challenge should be always active, or in the challenge page.").Value; harmony.PatchAll(Assembly.GetExecutingAssembly()); if (!AlwaysActive) { LoadChallenge(); } ((BaseUnityPlugin)this).Logger.LogInfo((object)"Loaded TwiceAbandoned 0.0.1"); } private void OnDestroy() { harmony.UnpatchSelf(); } private void LoadChallenge() { AscensionChallengeInfo val = ScriptableObject.CreateInstance(); val.pointValue = 10; val.title = "Coward’s Hand"; val.description = "Begin each run as though you had abandoned twice. Your Rabbit Pelts are replaced by an Opossum and a Ring Worm."; val.iconSprite = ResourceBank.Get(Path.Combine("art/ui/ascension", "ascensionicon_nohook")); val.activatedSprite = ResourceBank.Get(Path.Combine("art/ui/ascension", "ascensionicon_activated_nohook")); ChallengeManager.Add("chytridi05.inscryption.twiceabandoned", val, 0, false); } [HarmonyPostfix] [HarmonyPatch(typeof(AscensionSaveData), "NewRun")] private static void NewRun(RunState ___currentRun, int ___numRunsSinceReachedFirstBoss) { //IL_000d: Unknown result type (might be due to invalid IL or missing references) if (AlwaysActive || AscensionSaveData.Data.ChallengeIsActive(challenge)) { switch (___numRunsSinceReachedFirstBoss) { case 0: ((CardCollectionInfo)___currentRun.playerDeck).RemoveCardByName("PeltHare"); ((CardCollectionInfo)___currentRun.playerDeck).RemoveCardByName("PeltHare"); ((CardCollectionInfo)___currentRun.playerDeck).AddCard(CardLoader.GetCardByName("Opossum")); ((CardCollectionInfo)___currentRun.playerDeck).AddCard(CardLoader.GetCardByName("RingWorm")); break; case 1: ((CardCollectionInfo)___currentRun.playerDeck).RemoveCardByName("Opossum"); ((CardCollectionInfo)___currentRun.playerDeck).RemoveCardByName("PeltHare"); ((CardCollectionInfo)___currentRun.playerDeck).AddCard(CardLoader.GetCardByName("Opossum")); ((CardCollectionInfo)___currentRun.playerDeck).AddCard(CardLoader.GetCardByName("RingWorm")); break; } } } [HarmonyPostfix] [HarmonyPatch(typeof(MapGenerator), "ForceFirstNodeTraderForAscension")] private static void ForceFirstNodeTraderForAscension(ref bool __result) { //IL_000d: Unknown result type (might be due to invalid IL or missing references) if (AlwaysActive || AscensionSaveData.Data.ChallengeIsActive(challenge)) { __result = false; } } [HarmonyPostfix] [HarmonyPatch(typeof(RunIntroSequencer), "RunIntroSequence")] private static IEnumerator RunIntroSequence(IEnumerator original) { if (AlwaysActive || AscensionSaveData.Data.ChallengeIsActive(challenge)) { int numRunsSinceReachedFirstBoss = AscensionSaveData.Data.numRunsSinceReachedFirstBoss; AscensionSaveData.Data.numRunsSinceReachedFirstBoss = 0; try { yield return original; yield break; } finally { AscensionSaveData.Data.numRunsSinceReachedFirstBoss = numRunsSinceReachedFirstBoss; } } yield return original; } } }