Decompiled source of TwiceAbandoned v0.0.1

plugins/TwiceAbandoned.dll

Decompiled 4 days ago
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<AscensionChallenge>("chytridi05.inscryption.twiceabandoned", "Coward’s Hand");

		private const string ASCENSION_PATH = "art/ui/ascension";

		private void Awake()
		{
			AlwaysActive = ((BaseUnityPlugin)this).Config.Bind<bool>("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<AscensionChallengeInfo>();
			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<Sprite>(Path.Combine("art/ui/ascension", "ascensionicon_nohook"));
			val.activatedSprite = ResourceBank.Get<Sprite>(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;
		}
	}
}