Decompiled source of Supercharged Tarots v1.0.2

plugins/SuperchargedTarots/SuperchargedTarots.dll

Decompiled 4 months ago
using System;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using COTL_API.CustomTarotCard;
using HarmonyLib;
using Lamb.UI;
using Microsoft.CodeAnalysis;
using SuperchargedTarots.Tarots;
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("SuperchargedTarots")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("SuperchargedTarots")]
[assembly: AssemblyTitle("SuperchargedTarots")]
[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.Module, AllowMultiple = false, Inherited = false)]
	internal sealed class RefSafetyRulesAttribute : Attribute
	{
		public readonly int Version;

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
namespace SuperchargedTarots
{
	[BepInPlugin("InfernoDragon0.cotl.SuperchargedTarots", "SuperchargedTarots", "1.0.2")]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[HarmonyPatch]
	public class Plugin : BaseUnityPlugin
	{
		public const string PluginGuid = "InfernoDragon0.cotl.SuperchargedTarots";

		public const string PluginName = "SuperchargedTarots";

		public const string PluginVer = "1.0.2";

		internal static ManualLogSource Log;

		internal static readonly Harmony Harmony = new Harmony("InfernoDragon0.cotl.SuperchargedTarots");

		internal static string PluginPath;

		public static Card perfectCurseX;

		public static Card speedX;

		public static Card speedRunX;

		public static Card heartsX;

		public static Card damageX;

		public static Card curseDamageX;

		public static Card sunX;

		public static Card critX;

		public static Card ammoX;

		public static Card relicChargeX;

		public static Card blunderBusterX;

		public static Card gunslingerX;

		public static Card resilientGunnerX;

		public static Card multishotX;

		internal static ConfigEntry<float> ammoConfig;

		internal static ConfigEntry<float> curseDamageConfig;

		internal static ConfigEntry<float> damageConfig;

		internal static ConfigEntry<float> heartsConfig;

		internal static ConfigEntry<float> relicChargeConfig;

		internal static ConfigEntry<float> speedConfig;

		internal static ConfigEntry<float> speedRunConfig;

		internal static ConfigEntry<float> sunConfig;

		internal static ConfigEntry<float> moonConfig;

		internal static ConfigEntry<bool> shouldAddCardConfig;

		private void Awake()
		{
			//IL_018a: Unknown result type (might be due to invalid IL or missing references)
			//IL_018f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0199: Unknown result type (might be due to invalid IL or missing references)
			//IL_019e: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a8: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ad: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b7: Unknown result type (might be due to invalid IL or missing references)
			//IL_01bc: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01cb: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d5: Unknown result type (might be due to invalid IL or missing references)
			//IL_01da: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e4: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e9: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f3: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f8: Unknown result type (might be due to invalid IL or missing references)
			//IL_0202: Unknown result type (might be due to invalid IL or missing references)
			//IL_0207: Unknown result type (might be due to invalid IL or missing references)
			//IL_0211: Unknown result type (might be due to invalid IL or missing references)
			//IL_0216: Unknown result type (might be due to invalid IL or missing references)
			//IL_0220: Unknown result type (might be due to invalid IL or missing references)
			//IL_0225: Unknown result type (might be due to invalid IL or missing references)
			//IL_022f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0234: Unknown result type (might be due to invalid IL or missing references)
			//IL_023e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0243: Unknown result type (might be due to invalid IL or missing references)
			//IL_024d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0252: Unknown result type (might be due to invalid IL or missing references)
			Log = ((BaseUnityPlugin)this).Logger;
			PluginPath = Path.GetDirectoryName(((BaseUnityPlugin)this).Info.Location);
			ammoConfig = ((BaseUnityPlugin)this).Config.Bind<float>("SuperchargedTarots", "Ammo", 66f, "Fervor Use Discount (higher the lesser, but dont go over 100)");
			curseDamageConfig = ((BaseUnityPlugin)this).Config.Bind<float>("SuperchargedTarots", "CurseDamage", 3f, "Curse Damage Multiplier");
			damageConfig = ((BaseUnityPlugin)this).Config.Bind<float>("SuperchargedTarots", "Damage", 1f, "Damage Multiplier");
			heartsConfig = ((BaseUnityPlugin)this).Config.Bind<float>("SuperchargedTarots", "Hearts", 20f, "Black Hearts, 2 per full heart");
			relicChargeConfig = ((BaseUnityPlugin)this).Config.Bind<float>("SuperchargedTarots", "RelicCharge", 30f, "Relic Charge Multiplier");
			speedConfig = ((BaseUnityPlugin)this).Config.Bind<float>("SuperchargedTarots", "AttackSpeed", 5f, "Attack Speed Multiplier");
			speedRunConfig = ((BaseUnityPlugin)this).Config.Bind<float>("SuperchargedTarots", "SpeedRun", 3f, "Move Speed Multiplier (should not go over 10, or you will move too fast)");
			sunConfig = ((BaseUnityPlugin)this).Config.Bind<float>("SuperchargedTarots", "Sun", 2f, "Sun Damage Multiplier");
			moonConfig = ((BaseUnityPlugin)this).Config.Bind<float>("SuperchargedTarots", "Moon", 3f, "Moon Damage Multiplier");
			shouldAddCardConfig = ((BaseUnityPlugin)this).Config.Bind<bool>("SuperchargedTarots", "AddCards", false, "Set to true if tarots are not being added when collecting them. (Fix for double tarot bug)");
			ammoX = CustomTarotCardManager.Add((CustomTarotCard)(object)new Tarot_AmmoX());
			critX = CustomTarotCardManager.Add((CustomTarotCard)(object)new Tarot_CritX());
			curseDamageX = CustomTarotCardManager.Add((CustomTarotCard)(object)new Tarot_CurseDamageX());
			damageX = CustomTarotCardManager.Add((CustomTarotCard)(object)new Tarot_DamageX());
			heartsX = CustomTarotCardManager.Add((CustomTarotCard)(object)new Tarot_HeartsX());
			speedX = CustomTarotCardManager.Add((CustomTarotCard)(object)new Tarot_SpeedX());
			speedRunX = CustomTarotCardManager.Add((CustomTarotCard)(object)new Tarot_SpeedRunX());
			sunX = CustomTarotCardManager.Add((CustomTarotCard)(object)new Tarot_SunX());
			perfectCurseX = CustomTarotCardManager.Add((CustomTarotCard)(object)new Tarot_PerfectCurseX());
			relicChargeX = CustomTarotCardManager.Add((CustomTarotCard)(object)new Tarot_RelicChargeX());
			blunderBusterX = CustomTarotCardManager.Add((CustomTarotCard)(object)new Tarot_BlunderBusterX());
			gunslingerX = CustomTarotCardManager.Add((CustomTarotCard)(object)new Tarot_GunslingerX());
			resilientGunnerX = CustomTarotCardManager.Add((CustomTarotCard)(object)new Tarot_ResilientGunnerX());
			multishotX = CustomTarotCardManager.Add((CustomTarotCard)(object)new Tarot_MultishotX());
		}

		private void OnEnable()
		{
			Harmony.PatchAll();
			((BaseUnityPlugin)this).Logger.LogInfo((object)"Loaded SuperchargedTarots!");
		}

		private void OnDisable()
		{
			Harmony.UnpatchSelf();
			((BaseUnityPlugin)this).Logger.LogInfo((object)"Unloaded SuperchargedTarots!");
		}
	}
}
namespace SuperchargedTarots.Tarots
{
	internal class Tarot_AmmoX : CustomTarotCard
	{
		public override string InternalName => "TAROT_AMMO_X";

		public override string Skin => "Trinkets/AmmoEfficient";

		public override string LocalisedName(int upgradeIndex)
		{
			return "<color=\"red\">Shadow Quiver</color>";
		}

		public override string LocalisedLore()
		{
			return "<color=\"yellow\">[Supercharged Series]</color>";
		}

		public override string LocalisedDescription(int upgradeIndex)
		{
			return "Near Infinite Curse Casting.";
		}

		public override float GetAmmoEfficiency(TarotCard card)
		{
			return Plugin.ammoConfig.Value;
		}
	}
	internal class Tarot_BlunderBusterX : CustomTarotCard
	{
		public override string InternalName => "TAROT_BLUNDERBUSTER_X";

		public override string Skin => "Trinkets/EyeOfWeakness";

		public override string LocalisedName(int upgradeIndex)
		{
			return "<color=\"red\">Blunder Buster</color>";
		}

		public override string LocalisedLore()
		{
			return "<color=\"yellow\">[Supercharged Series]</color>";
		}

		public override string LocalisedDescription(int upgradeIndex)
		{
			return "Infinite Ammo for Blunderbuss.";
		}
	}
	internal class Tarot_CritX : CustomTarotCard
	{
		public override string InternalName => "TAROT_CRIT_X";

		public override string Skin => "Trinkets/EyeOfWeakness";

		public override string LocalisedName(int upgradeIndex)
		{
			return "<color=\"red\">Deadeye</color>";
		}

		public override string LocalisedLore()
		{
			return "<color=\"yellow\">[Supercharged Series]</color>";
		}

		public override string LocalisedDescription(int upgradeIndex)
		{
			return "Always Crit.";
		}

		public override float GetWeaponCritChanceIncrease(TarotCard card)
		{
			return 1f;
		}
	}
	internal class Tarot_CurseDamageX : CustomTarotCard
	{
		public override string InternalName => "TAROT_CURSEDAMAGE_X";

		public override string Skin => "Trinkets/Potion";

		public override string LocalisedName(int upgradeIndex)
		{
			return "<color=\"red\">Supernova</color>";
		}

		public override string LocalisedLore()
		{
			return "<color=\"yellow\">[Supercharged Series]</color>";
		}

		public override string LocalisedDescription(int upgradeIndex)
		{
			return Plugin.curseDamageConfig.Value + "x more Curse Damage.";
		}

		public override float GetCurseDamageMultiplerIncrease(TarotCard card)
		{
			return Plugin.curseDamageConfig.Value;
		}
	}
	internal class Tarot_DamageX : CustomTarotCard
	{
		public override string InternalName => "TAROT_DAMAGE_X";

		public override string Skin => "Trinkets/IncreasedDamage";

		public override string LocalisedName(int upgradeIndex)
		{
			return "<color=\"red\">Ruinous Strike</color>";
		}

		public override string LocalisedLore()
		{
			return "<color=\"yellow\">[Supercharged Series]</color>";
		}

		public override string LocalisedDescription(int upgradeIndex)
		{
			return Plugin.damageConfig.Value + "x more Damage.";
		}

		public override float GetWeaponDamageMultiplerIncrease(TarotCard card)
		{
			return Plugin.damageConfig.Value;
		}
	}
	internal class Tarot_GunslingerX : CustomTarotCard
	{
		public override string InternalName => "TAROT_GUNSLINGER_X";

		public override string Skin => "Trinkets/EyeOfWeakness";

		public override string LocalisedName(int upgradeIndex)
		{
			return "<color=\"red\">The Gunslinger</color>";
		}

		public override string LocalisedLore()
		{
			return "<color=\"yellow\">[Supercharged Series]</color>";
		}

		public override string LocalisedDescription(int upgradeIndex)
		{
			return "All weapon choices are now Blunderbuss only.";
		}
	}
	internal class Tarot_HeartsX : CustomTarotCard
	{
		public override string InternalName => "TAROT_HEARTS_X";

		public override string Skin => "Trinkets/DiseasedHeart";

		public override string LocalisedName(int upgradeIndex)
		{
			return "<color=\"red\">Ace of Hearts</color>";
		}

		public override string LocalisedLore()
		{
			return "<color=\"yellow\">[Supercharged Series]</color>";
		}

		public override string LocalisedDescription(int upgradeIndex)
		{
			return "Grants you " + Plugin.heartsConfig.Value + " Black Hearts";
		}

		public override void ApplyInstantEffects(TarotCard card)
		{
			//IL_0031: Unknown result type (might be due to invalid IL or missing references)
			//IL_0036: Unknown result type (might be due to invalid IL or missing references)
			//IL_003c: Unknown result type (might be due to invalid IL or missing references)
			HealthPlayer component = ((Component)PlayerFarming.Instance).GetComponent<HealthPlayer>();
			((Health)component).BlackHearts = ((Health)component).BlackHearts + Plugin.heartsConfig.Value;
			Vector3 position = PlayerFarming.Instance.CameraBone.transform.position;
			BiomeConstants.Instance.EmitHeartPickUpVFX(position, 0f, "red", "burst_big", true);
		}
	}
	internal class Tarot_MultishotX : CustomTarotCard
	{
		public override string InternalName => "TAROT_MULTISHOT_X";

		public override string Skin => "Trinkets/EyeOfWeakness";

		public override string LocalisedName(int upgradeIndex)
		{
			return "<color=\"red\">Multishot</color>";
		}

		public override string LocalisedLore()
		{
			return "<color=\"yellow\">[Supercharged Series]</color>";
		}

		public override string LocalisedDescription(int upgradeIndex)
		{
			return "Blunderbuss attacks will shoot in all 4 directions.";
		}
	}
	public class Tarot_PerfectCurseX : CustomTarotCard
	{
		public override string InternalName => "TAROT_PERFECT_CURSE_X";

		public override string Skin => "Trinkets/AmmoEfficient";

		public override string LocalisedName(int upgradeIndex)
		{
			return "<color=\"red\">Curse Perfected</color>";
		}

		public override string LocalisedLore()
		{
			return "<color=\"yellow\">[Supercharged Series]</color>";
		}

		public override string LocalisedDescription(int upgradeIndex)
		{
			return "Always Perfect Curse Casting.";
		}
	}
	internal class Tarot_RelicChargeX : CustomTarotCard
	{
		public override string InternalName => "TAROT_RELICCHARGE_X";

		public override string Skin => "Trinkets/DecreaseRelicCharge";

		public override string LocalisedName(int upgradeIndex)
		{
			return "<color=\"red\">Relic Overdrive</color>";
		}

		public override string LocalisedLore()
		{
			return "<color=\"yellow\">[Supercharged Series]</color>";
		}

		public override string LocalisedDescription(int upgradeIndex)
		{
			return Plugin.relicChargeConfig.Value + "x Relic Charge Speed.";
		}

		public override float GetRelicChargeMultiplier(TarotCard card)
		{
			return Plugin.relicChargeConfig.Value;
		}
	}
	internal class Tarot_ResilientGunnerX : CustomTarotCard
	{
		public override string InternalName => "TAROT_RESILIENTGUNNER_X";

		public override string Skin => "Trinkets/EyeOfWeakness";

		public override string LocalisedName(int upgradeIndex)
		{
			return "<color=\"red\">Resilient Gunner</color>";
		}

		public override string LocalisedLore()
		{
			return "<color=\"yellow\">[Supercharged Series]</color>";
		}

		public override string LocalisedDescription(int upgradeIndex)
		{
			return "No Recoil when using Blunderbuss.";
		}
	}
	internal class Tarot_SpeedRunX : CustomTarotCard
	{
		public override string InternalName => "TAROT_SPEEDRUN_X";

		public override string Skin => "Trinkets/MovementSpeed";

		public override string LocalisedName(int upgradeIndex)
		{
			return "<color=\"red\">Speedrunner</color>";
		}

		public override string LocalisedLore()
		{
			return "<color=\"yellow\">[Supercharged Series]</color>";
		}

		public override string LocalisedDescription(int upgradeIndex)
		{
			return Plugin.speedRunConfig.Value + "x Movement Speed.";
		}

		public override float GetMovementSpeedMultiplier(TarotCard card)
		{
			return Plugin.speedRunConfig.Value;
		}
	}
	internal class Tarot_SpeedX : CustomTarotCard
	{
		public override string InternalName => "TAROT_SPEED_X";

		public override string Skin => "Trinkets/AttackRate";

		public override string LocalisedName(int upgradeIndex)
		{
			return "<color=\"red\">Sonic Surge</color>";
		}

		public override string LocalisedLore()
		{
			return "<color=\"yellow\">[Supercharged Series]</color>";
		}

		public override string LocalisedDescription(int upgradeIndex)
		{
			return Plugin.speedConfig.Value + "x Attack Speed.";
		}

		public override float GetAttackRateMultiplier(TarotCard card)
		{
			return Plugin.speedConfig.Value;
		}
	}
	internal class Tarot_SunX : CustomTarotCard
	{
		public override string InternalName => "TAROT_SUN_X";

		public override string Skin => "Trinkets/Sun";

		public override string LocalisedName(int upgradeIndex)
		{
			return "<color=\"red\">The Solunar Eclipse</color>";
		}

		public override string LocalisedLore()
		{
			return "<color=\"yellow\">[Supercharged Series]</color>";
		}

		public override string LocalisedDescription(int upgradeIndex)
		{
			return Plugin.sunConfig.Value + "x Damage during the day, " + Plugin.moonConfig.Value + "x Damage during the night.";
		}

		public override float GetWeaponDamageMultiplerIncrease(TarotCard card)
		{
			return (!TimeManager.IsDay) ? Plugin.moonConfig.Value : Plugin.sunConfig.Value;
		}
	}
}
namespace SuperchargedTarots.Patches
{
	[HarmonyPatch]
	internal class AmmoPatch
	{
		[HarmonyPatch(/*Could not decode attribute arguments.*/)]
		[HarmonyPrefix]
		public static bool PlayerSpells_AmmoCost(PlayerSpells __instance, ref int __result)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			if (TrinketManager.HasTrinket(Plugin.ammoX))
			{
				__result = 1;
				return false;
			}
			return true;
		}

		[HarmonyPatch(typeof(BlunderAmmo), "UseAmmo")]
		[HarmonyPrefix]
		public static bool BlunderAmmo_UseAmmo(BlunderAmmo __instance, ref bool __result)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			if (TrinketManager.HasTrinket(Plugin.blunderBusterX))
			{
				__result = true;
				return false;
			}
			return true;
		}

		[HarmonyPatch(typeof(Interaction_WeaponSelectionPodium), "SetWeapon")]
		[HarmonyPrefix]
		public static bool Interaction_WeaponSelectionPodium_SetWeapon(Interaction_WeaponSelectionPodium __instance)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_001e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0023: Unknown result type (might be due to invalid IL or missing references)
			if (TrinketManager.HasTrinket(Plugin.gunslingerX))
			{
				__instance.TypeOfWeapon = (EquipmentType)450;
				__instance.PrevEquipment = __instance.TypeOfWeapon;
				__instance.WeaponLevel = DataManager.Instance.CurrentRunWeaponLevel + 1;
				return false;
			}
			return true;
		}

		[HarmonyPatch(typeof(PlayerWeapon), "DoBlunderbussAttack")]
		[HarmonyPostfix]
		public static void PlayerWeapon_DoBlunderbussAttack(PlayerWeapon __instance, AttackTypes attackType, ref bool __result)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ad: Unknown result type (might be due to invalid IL or missing references)
			//IL_005b: Unknown result type (might be due to invalid IL or missing references)
			//IL_00eb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fd: Unknown result type (might be due to invalid IL or missing references)
			//IL_010a: Unknown result type (might be due to invalid IL or missing references)
			//IL_012d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0120: Unknown result type (might be due to invalid IL or missing references)
			//IL_017b: Unknown result type (might be due to invalid IL or missing references)
			//IL_017c: Unknown result type (might be due to invalid IL or missing references)
			//IL_018f: Unknown result type (might be due to invalid IL or missing references)
			if (TrinketManager.HasTrinket(Plugin.multishotX))
			{
				Plugin.Log.LogInfo((object)"shooting 4 directions");
				for (int i = 0; i < 3; i++)
				{
					float num = __instance.state.facingAngle + (float)((i + 1) * 90);
					Swipe component = ((Component)Object.Instantiate<Swipe>(__instance.blunderAmmo.swipe)).GetComponent<Swipe>();
					Vector3 val = ((Component)__instance).transform.position + new Vector3(__instance.CurrentWeapon.WeaponData.Combos[__instance.CurrentCombo].RangeRadius * __instance.CurrentWeapon.RangeMultiplier * Mathf.Cos(__instance.state.facingAngle * (MathF.PI / 180f)), __instance.CurrentWeapon.WeaponData.Combos[__instance.CurrentCombo].RangeRadius * __instance.CurrentWeapon.RangeMultiplier * Mathf.Sin(__instance.state.facingAngle * (MathF.PI / 180f)), -0.5f);
					AttackFlags val2 = (__instance.additionalBlunderbussFlags = (AttackFlags)0);
					component.destroyAfterDuration = true;
					component.Init(val, num, __instance.overrideTeam.HasValue ? __instance.overrideTeam.Value : __instance.health.team, __instance.health, (Action<Health, AttackTypes>)__instance.BlunderBussEnemyCallBack, __instance.CurrentWeapon.WeaponData.Combos[__instance.CurrentCombo].RangeRadius * __instance.CurrentWeapon.RangeMultiplier, 0f, __instance.GetCritChance(), attackType, val2);
					((Component)component).gameObject.transform.localScale = Vector3.one;
				}
			}
			if (TrinketManager.HasTrinket(Plugin.gunslingerX))
			{
				__result = false;
			}
		}
	}
	[HarmonyPatch]
	internal class PerfectCastPatch
	{
		[HarmonyPatch(typeof(UITarotChoiceOverlayController), "Show")]
		[HarmonyPrefix]
		public static bool UITarotChoiceOverlayController_Show(UITarotChoiceOverlayController __instance, TarotCard card1, TarotCard card2, bool instant)
		{
			DataManager.Instance.PlayerRunTrinkets.Remove(card1);
			DataManager.Instance.PlayerRunTrinkets.Remove(card2);
			Plugin.Log.LogInfo((object)("Removing " + ((object)(Card)(ref card1.CardType)).ToString() + " and " + ((object)(Card)(ref card2.CardType)).ToString()));
			__instance._card1 = GetCard();
			__instance._card2 = GetCard(customFirst: false);
			__instance._uiCard1.Play(__instance._card1);
			__instance._uiCard2.Play(__instance._card2);
			UITarotChoiceOverlayController obj = __instance;
			obj.OnTarotCardSelected = (Action<TarotCard>)Delegate.Combine(obj.OnTarotCardSelected, (Action<TarotCard>)delegate(TarotCard card)
			{
				DataManager.Instance.PlayerRunTrinkets.Remove((card == __instance._card1) ? __instance._card2 : __instance._card1);
				Plugin.Log.LogInfo((object)("keeping " + ((object)(Card)(ref card.CardType)).ToString()));
			});
			((UIMenuBase)__instance).Show(instant);
			return false;
		}

		private static TarotCard GetCard(bool customFirst = true)
		{
			//IL_0025: Unknown result type (might be due to invalid IL or missing references)
			//IL_002a: Unknown result type (might be due to invalid IL or missing references)
			//IL_002b: Unknown result type (might be due to invalid IL or missing references)
			//IL_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0033: Expected O, but got Unknown
			//IL_008e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0094: Unknown result type (might be due to invalid IL or missing references)
			//IL_010c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0112: Expected O, but got Unknown
			TarotCard val = null;
			bool flag = false;
			if (customFirst)
			{
				Card val2 = CustomTarotCardManager.CustomTarotCardList.Keys.ElementAt(Random.Range(0, CustomTarotCardManager.CustomTarotCardList.Count));
				val = new TarotCard(val2, 0);
				Plugin.Log.LogInfo((object)("Before contain card " + DataManager.Instance.PlayerRunTrinkets.Contains(val)));
			}
			foreach (TarotCard playerRunTrinket in DataManager.Instance.PlayerRunTrinkets)
			{
				if (val == null)
				{
					break;
				}
				if (playerRunTrinket.CardType == val.CardType)
				{
					Plugin.Log.LogInfo((object)"custom already taken");
					flag = true;
				}
			}
			if (flag || val == null)
			{
				if (!DataManager.Instance.FirstTarot && TarotCards.DrawRandomCard() != null)
				{
					DataManager.Instance.FirstTarot = true;
					val = new TarotCard((Card)3, 0);
				}
				else
				{
					val = TarotCards.DrawRandomCard();
				}
			}
			if (val != null && Plugin.shouldAddCardConfig.Value)
			{
				DataManager.Instance.PlayerRunTrinkets.Add(val);
				Plugin.Log.LogInfo((object)("Adding (another) " + ((object)(Card)(ref val.CardType)).ToString()));
			}
			return val;
		}

		[HarmonyPatch(typeof(PlayerFarming), "CorrectProjectileChargeRelease")]
		[HarmonyPrefix]
		public static bool PlayerFarming_CorrectProjectileChargeRelease(ref bool __result)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			if (TrinketManager.HasTrinket(Plugin.perfectCurseX))
			{
				Plugin.Log.LogInfo((object)"Performing perfect cast");
				__result = true;
				return false;
			}
			return true;
		}
	}
}