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