Decompiled source of CevinsGrimmyExpansion v0.0.5

plugins/CevinsGrimoraExpansion.dll

Decompiled 6 months ago
using System;
using System.Collections;
using System.Collections.Generic;
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.Logging;
using CevinsGrimoraExpansion.Stats;
using DiskCardGame;
using GrimoraMod;
using HarmonyLib;
using InscryptionAPI.Card;
using InscryptionAPI.Helpers;
using InscryptionAPI.Saves;
using Pixelplacement;
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 = "")]
[assembly: AssemblyCompany("CevinsGrimoraExpansion")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("CevinsGrimoraExpansion")]
[assembly: AssemblyTitle("CevinsGrimoraExpansion")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
public static class Tools
{
	public static Assembly _assembly;

	public static GameObject Particle;

	public static Assembly CurrentAssembly => _assembly ?? (_assembly = Assembly.GetExecutingAssembly());

	public static Texture2D LoadTexture(string name)
	{
		if (name == null)
		{
			return null;
		}
		return TextureHelper.GetImageAsTexture(name + (name.EndsWith(".png") ? "" : ".png"), CurrentAssembly, (FilterMode)0);
	}

	public static Sprite ConvertToSprite(Texture2D texture)
	{
		//IL_001a: Unknown result type (might be due to invalid IL or missing references)
		//IL_001f: Unknown result type (might be due to invalid IL or missing references)
		return Sprite.Create(texture, new Rect(0f, 0f, (float)((Texture)texture).width, (float)((Texture)texture).height), Vector2.zero);
	}

	public static Sprite ConvertToStarterDeckSprite(Texture2D texture)
	{
		//IL_001e: 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)
		((Texture)texture).filterMode = (FilterMode)0;
		Sprite val = Sprite.Create(texture, new Rect(0f, 0f, 35f, 44f), new Vector2(0.5f, 0.5f));
		((Object)val).name = ((Object)texture).name;
		return val;
	}

	public static int GetActAsInt()
	{
		if (SaveManager.SaveFile.IsPart1)
		{
			return 1;
		}
		if (SaveManager.SaveFile.IsPart2)
		{
			return 2;
		}
		if (SaveManager.SaveFile.IsPart3)
		{
			return 3;
		}
		if (SaveManager.SaveFile.IsGrimora)
		{
			return 4;
		}
		if (SaveManager.SaveFile.IsMagnificus)
		{
			return 5;
		}
		return 0;
	}

	public static void SpawnParticlesOnCard(this PlayableCard target, Texture2D tex, float yOffset = 0f)
	{
		//IL_0079: Unknown result type (might be due to invalid IL or missing references)
		//IL_007e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0093: Unknown result type (might be due to invalid IL or missing references)
		//IL_0098: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a5: Expected O, but got Unknown
		//IL_00a8: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ad: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ba: Unknown result type (might be due to invalid IL or missing references)
		//IL_00bf: 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_0115: Unknown result type (might be due to invalid IL or missing references)
		//IL_0132: Unknown result type (might be due to invalid IL or missing references)
		//IL_014b: Unknown result type (might be due to invalid IL or missing references)
		//IL_015c: Unknown result type (might be due to invalid IL or missing references)
		//IL_016f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0179: Unknown result type (might be due to invalid IL or missing references)
		if (!Object.op_Implicit((Object)(object)((Card)target).Anim) || !(((Card)target).Anim is PaperCardAnimationController))
		{
			return;
		}
		CardAnimationController anim = ((Card)target).Anim;
		PaperCardAnimationController val = (PaperCardAnimationController)(object)((anim is PaperCardAnimationController) ? anim : null);
		if (Object.op_Implicit((Object)(object)val.deathParticles))
		{
			GameObject val2 = Object.Instantiate<GameObject>(val.deathParticles);
			ParticleSystem component = val2.GetComponent<ParticleSystem>();
			if (Object.op_Implicit((Object)(object)component))
			{
				MainModule main = component.main;
				((Renderer)((Component)component).GetComponent<ParticleSystemRenderer>()).material = new Material(((Renderer)((Component)component).GetComponent<ParticleSystemRenderer>()).material)
				{
					mainTexture = (Texture)(object)tex
				};
				EmissionModule emission = component.emission;
				((EmissionModule)(ref emission)).enabled = true;
				((MainModule)(ref main)).startColor = new MinMaxGradient(Color.white);
				val2.SetActive(true);
				val2.transform.SetParent(((Component)val).transform);
				val2.transform.position = val.deathParticles.transform.position;
				val2.transform.localScale = val.deathParticles.transform.localScale;
				val2.transform.rotation = val.deathParticles.transform.rotation;
				((Component)component).transform.position = new Vector3(((Component)component).transform.position.x, ((Component)component).transform.position.y + yOffset, ((Component)component).transform.position.z);
				Object.Destroy((Object)(object)val2, 6f);
			}
		}
	}
}
namespace CevinsGrimoraExpansion
{
	public class BoneStrafe : Strafe
	{
		public int Bonecollector = 0;

		public static Ability ability;

		public override Ability Ability => ability;

		public override IEnumerator PostSuccessfulMoveSequence(CardSlot cardSlot)
		{
			if (Bonecollector != 3)
			{
				Bonecollector++;
			}
			else if (Bonecollector == 3)
			{
				yield return ((AbilityBehaviour)this).Card.TakeDamage(9999, (PlayableCard)null);
				yield return (object)new WaitForSeconds(1f);
				yield return Singleton<BoardManager>.Instance.CreateCardInSlot(CardRelatedExtension.GetCardInfo("arackulele.inscryption.grimoramod_BuildSkeleton"), cardSlot, 0.1f, true);
				Bonecollector = 0;
			}
		}
	}
	public class DrawCardOnKill : AbilityBehaviour
	{
		public static Ability ability;

		public override Ability Ability => ability;

		public override bool RespondsToOtherCardDie(PlayableCard card, CardSlot deathSlot, bool fromCombat, PlayableCard killer)
		{
			return true;
		}

		public override IEnumerator OnOtherCardDie(PlayableCard card, CardSlot deathSlot, bool fromCombat, PlayableCard killer)
		{
			if (Singleton<CardDrawPiles>.Instance.DeckData.Any() && (Object)(object)killer == (Object)(object)((AbilityBehaviour)this).Card)
			{
				Singleton<ViewManager>.Instance.SwitchToView((View)0, false, false);
				Singleton<ViewManager>.Instance.Controller.LockState = (ViewLockState)1;
				yield return Singleton<CardDrawPiles>.Instance.DrawCardFromDeck((CardInfo)null, (Action<PlayableCard>)null);
				yield return (object)new WaitForSeconds(1.2f);
				Singleton<ViewManager>.Instance.SwitchToView((View)0, false, false);
				Singleton<ViewManager>.Instance.Controller.LockState = (ViewLockState)0;
			}
		}
	}
	public class DrawDeckAndSide : AbilityBehaviour
	{
		public static Ability ability;

		public override Ability Ability => ability;

		public override bool RespondsToResolveOnBoard()
		{
			return true;
		}

		public override IEnumerator OnResolveOnBoard()
		{
			if (Singleton<CardDrawPiles>.Instance.DeckData.Any() && CardDrawPiles3D.Instance.SideDeckData.Any())
			{
				Singleton<ViewManager>.Instance.SwitchToView((View)0, false, false);
				Singleton<ViewManager>.Instance.Controller.LockState = (ViewLockState)1;
				yield return Singleton<CardDrawPiles>.Instance.DrawCardFromDeck((CardInfo)null, (Action<PlayableCard>)null);
				CardDrawPiles3D.Instance.SidePile.Draw();
				yield return CardDrawPiles3D.Instance.DrawFromSidePile();
				yield return (object)new WaitForSeconds(1.2f);
				Singleton<ViewManager>.Instance.SwitchToView((View)0, false, false);
				Singleton<ViewManager>.Instance.Controller.LockState = (ViewLockState)0;
			}
			else if (Singleton<CardDrawPiles>.Instance.DeckData.Any() && !CardDrawPiles3D.Instance.SideDeckData.Any())
			{
				Singleton<ViewManager>.Instance.SwitchToView((View)0, false, false);
				Singleton<ViewManager>.Instance.Controller.LockState = (ViewLockState)1;
				yield return Singleton<CardDrawPiles>.Instance.DrawCardFromDeck((CardInfo)null, (Action<PlayableCard>)null);
				yield return (object)new WaitForSeconds(1.2f);
				Singleton<ViewManager>.Instance.SwitchToView((View)0, false, false);
				Singleton<ViewManager>.Instance.Controller.LockState = (ViewLockState)0;
			}
			else if (!Singleton<CardDrawPiles>.Instance.DeckData.Any() && CardDrawPiles3D.Instance.SideDeckData.Any())
			{
				Singleton<ViewManager>.Instance.SwitchToView((View)0, false, false);
				Singleton<ViewManager>.Instance.Controller.LockState = (ViewLockState)1;
				CardDrawPiles3D.Instance.SidePile.Draw();
				yield return CardDrawPiles3D.Instance.DrawFromSidePile();
				yield return (object)new WaitForSeconds(1.2f);
				Singleton<ViewManager>.Instance.SwitchToView((View)0, false, false);
				Singleton<ViewManager>.Instance.Controller.LockState = (ViewLockState)0;
			}
		}
	}
	public class DruidAbility : AbilityBehaviour
	{
		public static Ability ability;

		public override Ability Ability => ability;

		public override bool RespondsToResolveOnBoard()
		{
			return true;
		}

		public override IEnumerator OnResolveOnBoard()
		{
			foreach (CardSlot slot in ((BoardManager)Singleton<BoardManager3D>.Instance).AllSlotsCopy)
			{
				if (!((Object)(object)slot.Card == (Object)null))
				{
					continue;
				}
				CardModificationInfo info = new CardModificationInfo();
				foreach (Ability ability in ((Card)((AbilityBehaviour)this).Card).Info.abilities)
				{
					info.abilities.Add(ability);
				}
				info.abilities.Remove(DruidAbility.ability);
				yield return ((AbilityBehaviour)this).PreSuccessfulTriggerSequence();
				yield return (object)new WaitForSeconds(0.1f);
				yield return Singleton<BoardManager>.Instance.CreateCardInSlot(CardLoader.GetCardByName("arackulele.inscryption.grimoramod_DeadTree"), slot, 0.15f, true);
				slot.Card.AddTemporaryMod(info);
				foreach (CardModificationInfo info2 in ((AbilityBehaviour)this).Card.TemporaryMods)
				{
					slot.Card.AddTemporaryMod(info2);
				}
				yield return (object)new WaitForSeconds(0.3f);
				yield return ((AbilityBehaviour)this).LearnAbility(0.1f);
			}
		}
	}
	public class EvilHag : ActivatedAbilityBehaviour
	{
		public static Ability ability;

		public static GameObject target;

		private CardSlot recentlySelected;

		private GameObject instanceTarget;

		public override Ability Ability => ability;

		public override int EnergyCost => 3;

		public override IEnumerator Activate()
		{
			if ((Object)(object)target == (Object)null)
			{
				target = ResourceBank.Get<GameObject>("Prefabs/Cards/SpecificCardModels/CannonTargetIcon");
			}
			Singleton<ViewManager>.Instance.Controller.SwitchToControlMode(Singleton<BoardManager>.Instance.ChoosingSlotViewMode, false);
			Singleton<ViewManager>.Instance.Controller.LockState = (ViewLockState)1;
			Singleton<InteractionCursor>.Instance.ForceCursorType((CursorType)16);
			BoardManager instance = Singleton<BoardManager>.Instance;
			List<CardSlot> playerSlots = Singleton<BoardManager>.Instance.OpponentSlotsCopy;
			List<CardSlot> playerSlotsWithCards = Singleton<BoardManager>.Instance.OpponentSlotsCopy.FindAll((CardSlot x) => (Object)(object)x.Card != (Object)null);
			yield return instance.ChooseTarget(playerSlots, playerSlotsWithCards, (Action<CardSlot>)CardSelected, (Action<CardSlot>)InvalidTargetSelected, (Action<CardSlot>)CursotEnteredSlot, (Func<bool>)(() => false), (CursorType)16);
			if ((Object)(object)instanceTarget != (Object)null && Tools.GetActAsInt() == 1)
			{
				Tween.LocalScale(instanceTarget.transform, Vector3.zero, 0.1f, 0f, Tween.EaseIn, (LoopType)0, (Action)null, (Action)delegate
				{
					Object.Destroy((Object)(object)instanceTarget);
				}, true);
			}
			if ((Object)(object)recentlySelected != (Object)null)
			{
				if (((Object)(object)recentlySelected.Card != (Object)null && ((Card)recentlySelected.Card).Info.BonesCost > 3) || ((Object)(object)recentlySelected.Card != (Object)null && ((Card)recentlySelected.Card).Info.EnergyCost > 3))
				{
					yield return recentlySelected.Card.Die(false, (PlayableCard)null, true);
					Object.Destroy((Object)(object)instanceTarget);
				}
				else if ((Object)(object)recentlySelected.Card != (Object)null)
				{
					yield return recentlySelected.Card.TakeDamage(1, (PlayableCard)null);
					Object.Destroy((Object)(object)instanceTarget);
				}
			}
			Singleton<InteractionCursor>.Instance.ClearForcedCursorType();
			Singleton<ViewManager>.Instance.Controller.SwitchToControlMode(Singleton<BoardManager>.Instance.DefaultViewMode, false);
			Singleton<ViewManager>.Instance.Controller.LockState = (ViewLockState)0;
		}

		private void CardSelected(CardSlot slot)
		{
			recentlySelected = slot;
		}

		private void InvalidTargetSelected(CardSlot slot)
		{
		}

		private void CursotEnteredSlot(CardSlot slot)
		{
			//IL_007f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0090: Unknown result type (might be due to invalid IL or missing references)
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			if ((Object)(object)instanceTarget != (Object)null)
			{
				GameObject inst = instanceTarget;
				Tween.LocalScale(inst.transform, Vector3.zero, 0.1f, 0f, Tween.EaseIn, (LoopType)0, (Action)null, (Action)delegate
				{
					Object.Destroy((Object)(object)inst);
				}, true);
			}
			GameObject val = Object.Instantiate<GameObject>(target, ((Component)slot).transform);
			val.transform.localPosition = new Vector3(0f, 0.25f, 0f);
			val.transform.localRotation = Quaternion.identity;
			instanceTarget = val;
		}
	}
	public class GemRevive : AbilityBehaviour
	{
		public static Ability ability;

		public static List<Ability> MoxAbilitiesForNecro = new List<Ability>
		{
			(Ability)43,
			(Ability)42,
			(Ability)40,
			(Ability)39,
			(Ability)37,
			(Ability)38,
			(Ability)64,
			ShieldSkeletons.ability,
			RandomMoxAbility.ability
		};

		private List<CardInfo> cardlist2 = CardLoader.GetUnlockedCards((CardMetaCategory)0, (CardTemple)1).ToList();

		private List<GemType> GemsAvailable = new List<GemType>
		{
			(GemType)0,
			(GemType)1,
			(GemType)2
		};

		public override Ability Ability => ability;

		public override IEnumerator OnOtherCardDie(PlayableCard card, CardSlot deathSlot, bool fromCombat, PlayableCard killer)
		{
			if (!((Object)((Card)card).Info).name.Contains("Skeleton") && ((AbilityBehaviour)this).Card.OnBoard)
			{
				Random RNG = new Random();
				int randomNum = RNG.Next(MoxAbilitiesForNecro.Count - 1);
				int randomNum2 = RNG.Next(cardlist2.Count - 1);
				CardInfo randomcard = cardlist2[randomNum2];
				Ability ability = MoxAbilitiesForNecro[randomNum];
				CardModificationInfo info = new CardModificationInfo();
				info.abilities.Add(ability);
				yield return ((AbilityBehaviour)this).PreSuccessfulTriggerSequence();
				yield return (object)new WaitForSeconds(0.3f);
				yield return Singleton<BoardManager>.Instance.CreateCardInSlot(randomcard, deathSlot, 0.1f, true);
				if ((Object)(object)deathSlot.Card != (Object)null)
				{
					((Card)deathSlot.Card).Anim.PlayTransformAnimation();
					deathSlot.Card.AddTemporaryMod(info);
				}
				yield return ((AbilityBehaviour)this).LearnAbility(0.5f);
			}
		}

		public override bool RespondsToOtherCardDie(PlayableCard card, CardSlot deathSlot, bool fromCombat, PlayableCard killer)
		{
			return true;
		}
	}
	public class SideHealing : AbilityBehaviour
	{
		public static Ability ability;

		public override Ability Ability => ability;

		public override bool RespondsToUpkeep(bool playerUpkeep)
		{
			return ((AbilityBehaviour)this).Card.OpponentCard != playerUpkeep;
		}

		public override IEnumerator OnUpkeep(bool playerUpkeep)
		{
			yield return ((AbilityBehaviour)this).PreSuccessfulTriggerSequence();
			foreach (CardSlot slot in Singleton<BoardManager>.Instance.GetAdjacentSlots(((AbilityBehaviour)this).Card.Slot))
			{
				if (slot.Card.Status.damageTaken > 0 && (Object)(object)slot.Card != (Object)null)
				{
					slot.Card.HealDamage(1);
				}
			}
			yield return ((AbilityBehaviour)this).LearnAbility(0.25f);
		}
	}
	public class Hooker : AbilityBehaviour
	{
		public static Ability ability;

		public override Ability Ability => ability;

		public override IEnumerator OnResolveOnBoard()
		{
			if ((Object)(object)CardExtensions.OpposingSlot(((AbilityBehaviour)this).Card).Card != (Object)null && !((Card)CardExtensions.OpposingSlot(((AbilityBehaviour)this).Card).Card).Info.traits.Contains((Trait)16))
			{
				yield return ((AbilityBehaviour)this).PreSuccessfulTriggerSequence();
				yield return ((AbilityBehaviour)this).Card.Die(false, (PlayableCard)null, true);
				yield return (object)new WaitForSeconds(0.51f);
				PlayableCard targetCard = ((AbilityBehaviour)this).Card.slot.opposingSlot.Card;
				targetCard.SetIsOpponentCard(false);
				Transform transform = ((Component)targetCard).transform;
				transform.eulerAngles += new Vector3(0f, 0f, -180f);
				yield return Singleton<BoardManager>.Instance.AssignCardToSlot(targetCard, ((AbilityBehaviour)this).Card.slot, 0.33f, (Action)null, true);
				if (((Card)targetCard).FaceDown)
				{
					((Card)targetCard).SetFaceDown(false, false);
					targetCard.UpdateFaceUpOnBoardEffects();
				}
				yield return (object)new WaitForSeconds(0.66f);
				if (targetCard.Status != null && targetCard.Status.anglerHooked)
				{
					AchievementManager.Unlock((Achievement)16);
				}
				yield return ((AbilityBehaviour)this).LearnAbility(0.25f);
			}
			else
			{
				yield return Singleton<TextDisplayer>.Instance.ShowUntilInput("But there was no Target!", -2.5f, 0.5f, (Emotion)0, (LetterAnimation)0, (Speaker)0, (string[])null, true);
			}
		}

		public override bool RespondsToResolveOnBoard()
		{
			return ((AbilityBehaviour)this).Card.OnBoard && Object.op_Implicit((Object)(object)((AbilityBehaviour)this).Card.slot) && Object.op_Implicit((Object)(object)((AbilityBehaviour)this).Card.slot.opposingSlot) && Object.op_Implicit((Object)(object)((AbilityBehaviour)this).Card.slot.opposingSlot.Card) && !CardExtensions.HasTrait(((AbilityBehaviour)this).Card.slot.opposingSlot.Card, (Trait)14);
		}
	}
	public class IceStrafe : Strafe
	{
		public static Ability ability;

		public override Ability Ability => ability;

		public override IEnumerator PostSuccessfulMoveSequence(CardSlot cardSlot)
		{
			PlayableCard val2 = (cardSlot.Card = null);
			if (Object.op_Implicit((Object)(object)val2))
			{
				yield return Singleton<BoardManager>.Instance.CreateCardInSlot(CardRelatedExtension.GetCardInfo("arackulele.inscryption.grimoramod_FrostSpiritIce"), cardSlot, 0.1f, true);
			}
		}
	}
	public class MeteorStrike : AbilityBehaviour
	{
		public static Ability ability;

		public override Ability Ability => ability;

		public override bool RespondsToResolveOnBoard()
		{
			return true;
		}

		public override IEnumerator OnResolveOnBoard()
		{
			if (((Card)((AbilityBehaviour)this).Card).Info.traits.Contains((Trait)14) || ((Card)((AbilityBehaviour)this).Card).Info.traits.Contains((Trait)12))
			{
				yield break;
			}
			foreach (CardSlot slot in Singleton<BoardManager>.Instance.OpponentSlotsCopy)
			{
				if ((Object)(object)slot.Card != (Object)null)
				{
					yield return slot.Card.TakeDamage(2, (PlayableCard)null);
				}
			}
		}
	}
	public class Mitosis : AbilityBehaviour
	{
		public static Ability ability;

		public override Ability Ability => ability;

		public override IEnumerator OnDie(bool wasSacrifice, PlayableCard killer)
		{
			yield return ((AbilityBehaviour)this).PreSuccessfulTriggerSequence();
			yield return (object)new WaitForSeconds(0.3f);
			string text = "arackulele.inscryption.grimoramod_Zombosis";
			if (((Card)((AbilityBehaviour)this).Card).Info.iceCubeParams != null && (Object)(object)((Card)((AbilityBehaviour)this).Card).Info.iceCubeParams.creatureWithin != (Object)null)
			{
				text = ((Object)((Card)((AbilityBehaviour)this).Card).Info.iceCubeParams.creatureWithin).name;
			}
			yield return Singleton<BoardManager>.Instance.CreateCardInSlot(CardLoader.GetCardByName(text), ((AbilityBehaviour)this).Card.Slot, 0.15f, true);
			yield return ((AbilityBehaviour)this).LearnAbility(0.5f);
		}

		public override bool RespondsToDie(bool wasSacrifice, PlayableCard killer)
		{
			return true;
		}
	}
	public class MoxConstructor : ActivatedAbilityBehaviour
	{
		public static Ability ability;

		public static List<Ability> AbiltyList = new List<Ability>
		{
			(Ability)44,
			(Ability)104,
			(Ability)14,
			(Ability)33,
			DrawCardOnKill.ability,
			IceStrafe.ability
		};

		public static GameObject target;

		private CardSlot recentlySelected;

		private GameObject instanceTarget;

		public override Ability Ability => ability;

		public override int EnergyCost => 3;

		public override IEnumerator Activate()
		{
			if ((Object)(object)target == (Object)null)
			{
				target = ResourceBank.Get<GameObject>("Prefabs/Cards/SpecificCardModels/CannonTargetIcon");
			}
			Singleton<ViewManager>.Instance.Controller.SwitchToControlMode(Singleton<BoardManager>.Instance.ChoosingSlotViewMode, false);
			Singleton<ViewManager>.Instance.Controller.LockState = (ViewLockState)1;
			Singleton<InteractionCursor>.Instance.ForceCursorType((CursorType)16);
			BoardManager instance = Singleton<BoardManager>.Instance;
			List<CardSlot> playerSlots = Singleton<BoardManager>.Instance.PlayerSlotsCopy;
			List<CardSlot> playerSlotsWithCards = Singleton<BoardManager>.Instance.PlayerSlotsCopy.FindAll((CardSlot x) => ((Object)(object)x.Card != (Object)null && ((Card)x.Card).Info.Abilities.Contains((Ability)39) && !((Object)((Card)x.Card).Info).name.Contains(((Object)((Card)((AbilityBehaviour)this).Card).Info).name)) || ((Object)(object)x.Card != (Object)null && ((Card)x.Card).Info.Abilities.Contains((Ability)37) && !((Object)((Card)x.Card).Info).name.Contains(((Object)((Card)((AbilityBehaviour)this).Card).Info).name)) || ((Object)(object)x.Card != (Object)null && ((Card)x.Card).Info.Abilities.Contains((Ability)38) && !((Object)((Card)x.Card).Info).name.Contains(((Object)((Card)((AbilityBehaviour)this).Card).Info).name)) || ((Object)(object)x.Card != (Object)null && ((Card)x.Card).Info.Abilities.Contains((Ability)44) && !((Object)((Card)x.Card).Info).name.Contains(((Object)((Card)((AbilityBehaviour)this).Card).Info).name)));
			yield return instance.ChooseTarget(playerSlots, playerSlotsWithCards, (Action<CardSlot>)CardSelected, (Action<CardSlot>)InvalidTargetSelected, (Action<CardSlot>)CursotEnteredSlot, (Func<bool>)(() => false), (CursorType)16);
			if ((Object)(object)instanceTarget != (Object)null && Tools.GetActAsInt() == 1)
			{
				Tween.LocalScale(instanceTarget.transform, Vector3.zero, 0.1f, 0f, Tween.EaseIn, (LoopType)0, (Action)null, (Action)delegate
				{
					Object.Destroy((Object)(object)instanceTarget);
				}, true);
			}
			if ((Object)(object)recentlySelected != (Object)null)
			{
				if ((Object)(object)recentlySelected.Card != (Object)null && ((Card)recentlySelected.Card).Info.Abilities.Contains((Ability)39))
				{
					Random RNG = new Random();
					int randomNum = RNG.Next(AbiltyList.Count - 1);
					CardModificationInfo info2 = new CardModificationInfo();
					info2.abilities.Add(AbiltyList[randomNum]);
					((Card)((AbilityBehaviour)this).Card).Anim.PlayTransformAnimation();
					((AbilityBehaviour)this).Card.AddTemporaryMod(info2);
					yield return recentlySelected.Card.Die(false, (PlayableCard)null, true);
					Object.Destroy((Object)(object)instanceTarget);
				}
				if ((Object)(object)recentlySelected.Card != (Object)null && ((Card)recentlySelected.Card).Info.Abilities.Contains((Ability)38))
				{
					CardModificationInfo info3 = new CardModificationInfo(1, 0);
					((Card)((AbilityBehaviour)this).Card).Anim.PlayTransformAnimation();
					((AbilityBehaviour)this).Card.AddTemporaryMod(info3);
					yield return recentlySelected.Card.Die(false, (PlayableCard)null, true);
					Object.Destroy((Object)(object)instanceTarget);
				}
				if ((Object)(object)recentlySelected.Card != (Object)null && ((Card)recentlySelected.Card).Info.Abilities.Contains((Ability)37))
				{
					CardModificationInfo info = new CardModificationInfo(0, 1);
					((Card)((AbilityBehaviour)this).Card).Anim.PlayTransformAnimation();
					((AbilityBehaviour)this).Card.AddTemporaryMod(info);
					yield return recentlySelected.Card.Die(false, (PlayableCard)null, true);
					Object.Destroy((Object)(object)instanceTarget);
				}
			}
			Singleton<InteractionCursor>.Instance.ClearForcedCursorType();
			Singleton<ViewManager>.Instance.Controller.SwitchToControlMode(Singleton<BoardManager>.Instance.DefaultViewMode, false);
			Singleton<ViewManager>.Instance.Controller.LockState = (ViewLockState)0;
		}

		private void CardSelected(CardSlot slot)
		{
			recentlySelected = slot;
		}

		private void InvalidTargetSelected(CardSlot slot)
		{
		}

		private void CursotEnteredSlot(CardSlot slot)
		{
			//IL_007f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0090: Unknown result type (might be due to invalid IL or missing references)
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			if ((Object)(object)instanceTarget != (Object)null)
			{
				GameObject inst = instanceTarget;
				Tween.LocalScale(inst.transform, Vector3.zero, 0.1f, 0f, Tween.EaseIn, (LoopType)0, (Action)null, (Action)delegate
				{
					Object.Destroy((Object)(object)inst);
				}, true);
			}
			GameObject val = Object.Instantiate<GameObject>(target, ((Component)slot).transform);
			val.transform.localPosition = new Vector3(0f, 0.25f, 0f);
			val.transform.localRotation = Quaternion.identity;
			instanceTarget = val;
		}
	}
	public class RageAbility : AbilityBehaviour
	{
		public static Ability ability;

		public override Ability Ability => ability;

		public override bool RespondsToTakeDamage(PlayableCard source)
		{
			return true;
		}

		public override IEnumerator OnTakeDamage(PlayableCard source)
		{
			yield return ((AbilityBehaviour)this).PreSuccessfulTriggerSequence();
			((Card)((AbilityBehaviour)this).Card).Anim.PlayTransformAnimation();
			((AbilityBehaviour)this).Card.temporaryMods.Add(new CardModificationInfo(1, 0));
			yield return ((AbilityBehaviour)this).LearnAbility(0.1f);
		}
	}
	public class RandomMoxAbility : AbilityBehaviour
	{
		public static Ability ability;

		public override Ability Ability => ability;

		public override bool RespondsToDrawn()
		{
			return true;
		}

		public override IEnumerator OnDrawn()
		{
			PlayerHand instance = Singleton<PlayerHand>.Instance;
			((PlayerHand3D)((instance is PlayerHand3D) ? instance : null)).MoveCardAboveHand(((AbilityBehaviour)this).Card);
			yield return ((AbilityBehaviour)this).Card.FlipInHand((Action)AddMod);
			yield return ((AbilityBehaviour)this).LearnAbility(0.5f);
		}

		private void AddMod()
		{
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			//IL_0051: Unknown result type (might be due to invalid IL or missing references)
			//IL_0056: Unknown result type (might be due to invalid IL or missing references)
			//IL_0057: Unknown result type (might be due to invalid IL or missing references)
			//IL_0058: Unknown result type (might be due to invalid IL or missing references)
			//IL_005e: Expected O, but got Unknown
			((AbilityBehaviour)this).Card.Status.hiddenAbilities.Add(((AbilityBehaviour)this).Ability);
			List<Ability> list = new List<Ability>
			{
				(Ability)39,
				(Ability)37,
				(Ability)38
			};
			Random random = new Random();
			Ability val = list[random.Next(list.Count)];
			CardModificationInfo val2 = new CardModificationInfo(val);
			CardModificationInfo val3 = ((AbilityBehaviour)this).Card.TemporaryMods.Find((CardModificationInfo x) => x.HasAbility(((AbilityBehaviour)this).Ability));
			if (val3 == null)
			{
				val3 = ((Card)((AbilityBehaviour)this).Card).Info.Mods.Find((CardModificationInfo x) => x.HasAbility(((AbilityBehaviour)this).Ability));
			}
			if (val3 != null)
			{
				val2.fromTotem = val3.fromTotem;
				val2.fromCardMerge = val3.fromCardMerge;
			}
			((AbilityBehaviour)this).Card.AddTemporaryMod(val2);
		}
	}
	public class SatanCircle : AbilityBehaviour
	{
		public static Ability ability;

		public override Ability Ability => ability;

		public override bool RespondsToResolveOnBoard()
		{
			return (Object)(object)Singleton<ConduitCircuitManager>.Instance == (Object)null;
		}

		public override IEnumerator OnResolveOnBoard()
		{
			TryCreateConduitManager();
			yield break;
		}

		protected void TryCreateConduitManager()
		{
			if ((Object)(object)Singleton<ConduitCircuitManager>.Instance == (Object)null)
			{
				((Component)Singleton<BoardManager>.Instance).gameObject.AddComponent<ConduitCircuitManager>();
			}
		}
	}
	public class SatanCircleSpawner : SatanCircle
	{
		public override Ability Ability => SatanCircle.ability;

		public override IEnumerator OnTurnEnd(bool playerTurnEnd)
		{
			List<CardInfo> cardlist = new List<CardInfo>
			{
				CardLoader.GetCardByName("GrimmificcusSkeletonGreen"),
				CardLoader.GetCardByName("GrimmificcusSkeletonOrange"),
				CardLoader.GetCardByName("GrimmificcusSkeletonBlue"),
				CardLoader.GetCardByName("Skeleton"),
				CardLoader.GetCardByName("Zombie")
			};
			Random random = new Random();
			CardInfo randomcard = cardlist[random.Next(cardlist.Count)];
			List<CardSlot> slots = Singleton<BoardManager>.Instance.AllSlots;
			CardSlot randomslot = slots[random.Next(slots.Count)];
			bool successfulTriggerShown = false;
			List<CardSlot> list = (((AbilityBehaviour)this).Card.OpponentCard ? Singleton<BoardManager>.Instance.OpponentSlotsCopy : Singleton<BoardManager>.Instance.PlayerSlotsCopy);
			foreach (CardSlot slot in list)
			{
				if ((Object)(object)slot.Card == (Object)null && Singleton<ConduitCircuitManager>.Instance.GetConduitsForSlot(slot).Contains(((AbilityBehaviour)this).Card))
				{
					Singleton<ViewManager>.Instance.SwitchToView((View)4, false, false);
					yield return (object)new WaitForSeconds(0.05f);
					if (!successfulTriggerShown)
					{
						yield return ((AbilityBehaviour)this).PreSuccessfulTriggerSequence();
					}
					successfulTriggerShown = true;
					yield return Singleton<BoardManager>.Instance.CreateCardInSlot(randomcard, randomslot, 0.15f, true);
					yield return ((AbilityBehaviour)this).LearnAbility(0.5f);
				}
			}
			yield return (object)new WaitForSeconds(0.2f);
		}
	}
	public class SealBreak : AbilityBehaviour
	{
		public static Ability ability;

		public override Ability Ability => ability;

		public override IEnumerator OnDie(bool wasSacrifice, PlayableCard killer)
		{
			yield return ((AbilityBehaviour)this).PreSuccessfulTriggerSequence();
			yield return (object)new WaitForSeconds(0.3f);
			yield return Singleton<BoardManager>.Instance.CreateCardInSlot(CardLoader.GetCardByName("arackulele.inscryption.grimoramod_TrueOuroboros"), ((AbilityBehaviour)this).Card.Slot, 0.15f, true);
			yield return ((AbilityBehaviour)this).LearnAbility(0.5f);
		}

		public override bool RespondsToDie(bool wasSacrifice, PlayableCard killer)
		{
			return true;
		}
	}
	public class ShieldSkeletons : AbilityBehaviour
	{
		public static Ability ability;

		public override Ability Ability => ability;

		public override bool RespondsToResolveOnBoard()
		{
			return true;
		}

		public override IEnumerator OnResolveOnBoard()
		{
			List<CardSlot> list = (((AbilityBehaviour)this).Card.OpponentCard ? Singleton<BoardManager>.Instance.OpponentSlotsCopy : Singleton<BoardManager>.Instance.PlayerSlotsCopy);
			List<CardSlot> validSlots = list.FindAll((CardSlot x) => (Object)(object)x.Card != (Object)null && ((Card)x.Card).Info.HasAbility((Ability)43));
			if (validSlots.Count > 0)
			{
				yield return (object)new WaitForSeconds(0.25f);
				((Card)((AbilityBehaviour)this).Card).Anim.LightNegationEffect();
				yield return (object)new WaitForSeconds(0.1f);
				List<PlayableCard> validCards = new List<PlayableCard>();
				validSlots.ForEach(delegate(CardSlot x)
				{
					validCards.Add(x.Card);
				});
				ShieldGeneratorItem.AddShieldsToCards(validCards, validSlots);
				yield return (object)new WaitForSeconds(0.25f);
				yield return ((AbilityBehaviour)this).LearnAbility(0f);
			}
		}
	}
	public class GrimoraMoxModule : MonoBehaviour
	{
		public GameObject MoxModule;

		public GameObject GreenMox;

		public GameObject BlueMox;

		public GameObject OrangeMox;

		public ParticleSystem GreenSpark;

		public ParticleSystem GreenArm;

		public ParticleSystem BlueSpark;

		public ParticleSystem BlueArm;

		public ParticleSystem OrangeSpark;

		public ParticleSystem OrangeArm;

		public Material GreenMat;

		public Material GreenRockMat;

		public bool GreenEnabled = false;

		public Material BlueMat;

		public Material BlueRockMat;

		public bool BlueEnabled = false;

		public Material OrangeMat;

		public Material OrangeRockMat;

		public bool OrangeEnabled = false;

		public bool addedMats = false;

		public void Start()
		{
		}

		public void FixedUpdate()
		{
			if (!addedMats)
			{
				MoxModule = ((Component)((Component)this).gameObject.transform.Find("MoxModule")).gameObject;
				GreenMox = ((Component)MoxModule.transform.Find("GreenMoxModule").Find("GreenMox")).gameObject;
				BlueMox = ((Component)MoxModule.transform.Find("BlueMoxModule").Find("BlueMox")).gameObject;
				OrangeMox = ((Component)MoxModule.transform.Find("OrangeMoxModule").Find("OrangeMox")).gameObject;
				GreenMat = ((Renderer)((Component)GreenMox.transform.Find("GemGreen")).gameObject.GetComponent<MeshRenderer>()).material;
				GreenRockMat = ((Renderer)((Component)GreenMox.transform.Find("GemGreenRock")).gameObject.GetComponent<MeshRenderer>()).material;
				BlueMat = ((Renderer)((Component)BlueMox.transform.Find("GemBlue")).gameObject.GetComponent<MeshRenderer>()).material;
				BlueRockMat = ((Renderer)((Component)BlueMox.transform.Find("GemBlueRock")).gameObject.GetComponent<MeshRenderer>()).material;
				OrangeMat = ((Renderer)((Component)OrangeMox.transform.Find("GemOrange")).gameObject.GetComponent<MeshRenderer>()).material;
				OrangeRockMat = ((Renderer)((Component)OrangeMox.transform.Find("GemOrangeRock")).gameObject.GetComponent<MeshRenderer>()).material;
				GreenSpark = ((Component)MoxModule.transform.Find("GreenMoxModule").Find("SparkGreen")).gameObject.GetComponent<ParticleSystem>();
				GreenArm = ((Component)MoxModule.transform.Find("GreenMoxModule").Find("ArmGreen")).gameObject.GetComponent<ParticleSystem>();
				BlueSpark = ((Component)MoxModule.transform.Find("BlueMoxModule").Find("SparkBlue")).gameObject.GetComponent<ParticleSystem>();
				BlueArm = ((Component)MoxModule.transform.Find("BlueMoxModule").Find("ArmBlue")).gameObject.GetComponent<ParticleSystem>();
				OrangeSpark = ((Component)MoxModule.transform.Find("OrangeMoxModule").Find("SparkOrange")).gameObject.GetComponent<ParticleSystem>();
				OrangeArm = ((Component)MoxModule.transform.Find("OrangeMoxModule").Find("ArmOrange")).gameObject.GetComponent<ParticleSystem>();
				GreenMat.DisableKeyword("_EMISSION");
				GreenRockMat.DisableKeyword("_EMISSION");
				BlueMat.DisableKeyword("_EMISSION");
				BlueRockMat.DisableKeyword("_EMISSION");
				OrangeMat.DisableKeyword("_EMISSION");
				OrangeRockMat.DisableKeyword("_EMISSION");
				addedMats = true;
			}
			if (Singleton<ResourcesManager>.Instance.HasGem((GemType)0))
			{
				if (!GreenEnabled)
				{
					GreenMat.EnableKeyword("_EMISSION");
					GreenRockMat.EnableKeyword("_EMISSION");
					GreenSpark.Play();
					GreenArm.Play();
					GreenEnabled = true;
				}
			}
			else if (GreenEnabled)
			{
				GreenMat.DisableKeyword("_EMISSION");
				GreenRockMat.DisableKeyword("_EMISSION");
				GreenSpark.Stop();
				GreenArm.Stop();
				GreenEnabled = false;
			}
			if (Singleton<ResourcesManager>.Instance.HasGem((GemType)2))
			{
				if (!BlueEnabled)
				{
					BlueMat.EnableKeyword("_EMISSION");
					BlueRockMat.EnableKeyword("_EMISSION");
					BlueSpark.Play();
					BlueArm.Play();
					BlueEnabled = true;
				}
			}
			else if (BlueEnabled)
			{
				BlueMat.DisableKeyword("_EMISSION");
				BlueRockMat.DisableKeyword("_EMISSION");
				BlueSpark.Stop();
				BlueArm.Stop();
				BlueEnabled = false;
			}
			if (Singleton<ResourcesManager>.Instance.HasGem((GemType)1))
			{
				if (!OrangeEnabled)
				{
					OrangeMat.EnableKeyword("_EMISSION");
					OrangeRockMat.EnableKeyword("_EMISSION");
					OrangeSpark.Play();
					OrangeArm.Play();
					OrangeEnabled = true;
				}
			}
			else if (OrangeEnabled)
			{
				OrangeMat.DisableKeyword("_EMISSION");
				OrangeRockMat.DisableKeyword("_EMISSION");
				OrangeSpark.Stop();
				OrangeArm.Stop();
				OrangeEnabled = false;
			}
		}
	}
	[BepInPlugin("Cevin_2006.Inscryption.CevinsGrimoraExpansion", "CevinsGrimoraExpansion", "0.0.2")]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	public class Plugin : BaseUnityPlugin
	{
		public class CustomAppearences
		{
			public static Appearance GreenOrangeEmission;

			public static Appearance OrangeBlueEmission;

			public static Appearance BlueGreenEmission;

			public static Appearance TriEmission;

			public static Appearance MoxCardback;

			public static void Addappearences()
			{
				//IL_001a: Unknown result type (might be due to invalid IL or missing references)
				//IL_001f: Unknown result type (might be due to invalid IL or missing references)
				//IL_003d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0042: Unknown result type (might be due to invalid IL or missing references)
				//IL_0060: Unknown result type (might be due to invalid IL or missing references)
				//IL_0065: 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_0088: Unknown result type (might be due to invalid IL or missing references)
				//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
				//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
				GreenOrangeEmission = CardAppearanceBehaviourManager.Add("Cevin_2006.Inscryption.CevinsGrimoraExpansion", "GreenOrangeEmission", typeof(GreenOrangeGlow)).Id;
				OrangeBlueEmission = CardAppearanceBehaviourManager.Add("Cevin_2006.Inscryption.CevinsGrimoraExpansion", "OrangeBlueEmission", typeof(OrangeBlueGlow)).Id;
				BlueGreenEmission = CardAppearanceBehaviourManager.Add("Cevin_2006.Inscryption.CevinsGrimoraExpansion", "BlueGreenEmission", typeof(BlueGreenGlow)).Id;
				TriEmission = CardAppearanceBehaviourManager.Add("Cevin_2006.Inscryption.CevinsGrimoraExpansion", "TriEmission", typeof(TriMoxGlow)).Id;
				MoxCardback = CardAppearanceBehaviourManager.Add("Cevin_2006.Inscryption.CevinsGrimoraExpansion", "MoxCardback", typeof(MoxCardback)).Id;
			}
		}

		public class MoxCardback : CardAppearanceBehaviour
		{
			public override void ApplyAppearance()
			{
				if (((CardAppearanceBehaviour)this).Card.Info.metaCategories.Contains((CardMetaCategory)3))
				{
					((CardAppearanceBehaviour)this).Card.renderInfo.baseTextureOverride = (Texture)(object)Tools.LoadTexture("MoxGraveStoneRare");
				}
				else
				{
					((CardAppearanceBehaviour)this).Card.renderInfo.baseTextureOverride = (Texture)(object)Tools.LoadTexture("MoxGraveStone");
				}
			}
		}

		public class GreenOrangeGlow : CardAppearanceBehaviour
		{
			public override void ApplyAppearance()
			{
				//IL_0022: Unknown result type (might be due to invalid IL or missing references)
				((CardAppearanceBehaviour)this).Card.renderInfo.forceEmissivePortrait = true;
				((CardAppearanceBehaviour)this).Card.StatsLayer.SetEmissionColor(GameColors.Instance.darkLimeGreen);
				TweenGreenToOrange();
			}

			private void TweenGreenToOrange()
			{
				//IL_001b: Unknown result type (might be due to invalid IL or missing references)
				Tween.ShaderColor(((CardAppearanceBehaviour)this).Card.StatsLayer.Material, "_EmissionColor", GameColors.Instance.darkLimeGreen, 0.5f, 0f, Tween.EaseInOut, (LoopType)0, (Action)null, (Action)TweenOrangeToGreen, true);
			}

			private void TweenOrangeToGreen()
			{
				//IL_001b: Unknown result type (might be due to invalid IL or missing references)
				Tween.ShaderColor(((CardAppearanceBehaviour)this).Card.StatsLayer.Material, "_EmissionColor", GameColors.Instance.brightRed, 0.5f, 0f, Tween.EaseInOut, (LoopType)0, (Action)null, (Action)TweenGreenToOrange, true);
			}

			public override void ResetAppearance()
			{
				//IL_0022: Unknown result type (might be due to invalid IL or missing references)
				((CardAppearanceBehaviour)this).Card.RenderInfo.forceEmissivePortrait = false;
				((CardAppearanceBehaviour)this).Card.StatsLayer.SetEmissionColor(GameColors.instance.glowSeafoam);
				Tween.Stop(((Object)((CardAppearanceBehaviour)this).Card.StatsLayer.Material).GetInstanceID());
			}
		}

		public class OrangeBlueGlow : CardAppearanceBehaviour
		{
			public override void ApplyAppearance()
			{
				//IL_0022: Unknown result type (might be due to invalid IL or missing references)
				((CardAppearanceBehaviour)this).Card.renderInfo.forceEmissivePortrait = true;
				((CardAppearanceBehaviour)this).Card.StatsLayer.SetEmissionColor(GameColors.Instance.brightRed);
				TweenOrangeToBlue();
			}

			private void TweenOrangeToBlue()
			{
				//IL_001b: Unknown result type (might be due to invalid IL or missing references)
				Tween.ShaderColor(((CardAppearanceBehaviour)this).Card.StatsLayer.Material, "_EmissionColor", GameColors.Instance.brightRed, 0.5f, 0f, Tween.EaseInOut, (LoopType)0, (Action)null, (Action)TweenBlueToOrange, true);
			}

			private void TweenBlueToOrange()
			{
				//IL_001b: Unknown result type (might be due to invalid IL or missing references)
				Tween.ShaderColor(((CardAppearanceBehaviour)this).Card.StatsLayer.Material, "_EmissionColor", GameColors.Instance.blue, 0.5f, 0f, Tween.EaseInOut, (LoopType)0, (Action)null, (Action)TweenOrangeToBlue, true);
			}

			public override void ResetAppearance()
			{
				//IL_0022: Unknown result type (might be due to invalid IL or missing references)
				((CardAppearanceBehaviour)this).Card.RenderInfo.forceEmissivePortrait = false;
				((CardAppearanceBehaviour)this).Card.StatsLayer.SetEmissionColor(GameColors.instance.glowSeafoam);
				Tween.Stop(((Object)((CardAppearanceBehaviour)this).Card.StatsLayer.Material).GetInstanceID());
			}
		}

		public class BlueGreenGlow : CardAppearanceBehaviour
		{
			public override void ApplyAppearance()
			{
				//IL_0076: Unknown result type (might be due to invalid IL or missing references)
				if (((CardAppearanceBehaviour)this).Card.Info.metaCategories.Contains((CardMetaCategory)3))
				{
					((CardAppearanceBehaviour)this).Card.renderInfo.baseTextureOverride = (Texture)(object)Tools.LoadTexture("MoxGraveStoneRare");
				}
				else
				{
					((CardAppearanceBehaviour)this).Card.renderInfo.baseTextureOverride = (Texture)(object)Tools.LoadTexture("MoxGraveStone");
				}
				((CardAppearanceBehaviour)this).Card.renderInfo.forceEmissivePortrait = true;
				((CardAppearanceBehaviour)this).Card.StatsLayer.SetEmissionColor(GameColors.Instance.blue);
				TweenBlueToGreen();
			}

			private void TweenBlueToGreen()
			{
				//IL_001b: Unknown result type (might be due to invalid IL or missing references)
				Tween.ShaderColor(((CardAppearanceBehaviour)this).Card.StatsLayer.Material, "_EmissionColor", GameColors.Instance.blue, 0.5f, 0f, Tween.EaseInOut, (LoopType)0, (Action)null, (Action)TweenGreenToBlue, true);
			}

			private void TweenGreenToBlue()
			{
				//IL_001b: Unknown result type (might be due to invalid IL or missing references)
				Tween.ShaderColor(((CardAppearanceBehaviour)this).Card.StatsLayer.Material, "_EmissionColor", GameColors.Instance.darkLimeGreen, 0.5f, 0f, Tween.EaseInOut, (LoopType)0, (Action)null, (Action)TweenBlueToGreen, true);
			}

			public override void ResetAppearance()
			{
				//IL_0076: Unknown result type (might be due to invalid IL or missing references)
				if (((CardAppearanceBehaviour)this).Card.Info.metaCategories.Contains((CardMetaCategory)3))
				{
					((CardAppearanceBehaviour)this).Card.renderInfo.baseTextureOverride = (Texture)(object)Tools.LoadTexture("MoxGraveStoneRare");
				}
				else
				{
					((CardAppearanceBehaviour)this).Card.renderInfo.baseTextureOverride = (Texture)(object)Tools.LoadTexture("MoxGraveStone");
				}
				((CardAppearanceBehaviour)this).Card.RenderInfo.forceEmissivePortrait = false;
				((CardAppearanceBehaviour)this).Card.StatsLayer.SetEmissionColor(GameColors.instance.glowSeafoam);
				Tween.Stop(((Object)((CardAppearanceBehaviour)this).Card.StatsLayer.Material).GetInstanceID());
			}
		}

		public class TriMoxGlow : CardAppearanceBehaviour
		{
			public override void ApplyAppearance()
			{
				//IL_0022: Unknown result type (might be due to invalid IL or missing references)
				((CardAppearanceBehaviour)this).Card.renderInfo.forceEmissivePortrait = true;
				((CardAppearanceBehaviour)this).Card.StatsLayer.SetEmissionColor(GameColors.Instance.brightRed);
				TriMox();
			}

			private void TriMox()
			{
				//IL_001b: Unknown result type (might be due to invalid IL or missing references)
				Tween.ShaderColor(((CardAppearanceBehaviour)this).Card.StatsLayer.Material, "_EmissionColor", GameColors.Instance.blue, 0.5f, 0f, Tween.EaseInOut, (LoopType)0, (Action)null, (Action)TriMox2, true);
			}

			private void TriMox2()
			{
				//IL_001b: Unknown result type (might be due to invalid IL or missing references)
				Tween.ShaderColor(((CardAppearanceBehaviour)this).Card.StatsLayer.Material, "_EmissionColor", GameColors.Instance.darkLimeGreen, 0.5f, 0f, Tween.EaseInOut, (LoopType)0, (Action)null, (Action)TriMox3, true);
			}

			private void TriMox3()
			{
				//IL_001b: Unknown result type (might be due to invalid IL or missing references)
				Tween.ShaderColor(((CardAppearanceBehaviour)this).Card.StatsLayer.Material, "_EmissionColor", GameColors.Instance.brightRed, 0.5f, 0f, Tween.EaseInOut, (LoopType)0, (Action)null, (Action)TriMox, true);
			}

			public override void ResetAppearance()
			{
				//IL_0022: Unknown result type (might be due to invalid IL or missing references)
				((CardAppearanceBehaviour)this).Card.RenderInfo.forceEmissivePortrait = false;
				((CardAppearanceBehaviour)this).Card.StatsLayer.SetEmissionColor(GameColors.instance.glowSeafoam);
				Tween.Stop(((Object)((CardAppearanceBehaviour)this).Card.StatsLayer.Material).GetInstanceID());
			}
		}

		public class Patches
		{
			[HarmonyPatch(typeof(RareCardBackground), "ApplyAppearance")]
			public class CardAppearanceBehaviourPatch
			{
				[HarmonyPrefix]
				public static bool CorrectBehaviourForGrimora(ref RareCardBackground __instance)
				{
					//IL_0023: Unknown result type (might be due to invalid IL or missing references)
					//IL_00ad: Unknown result type (might be due to invalid IL or missing references)
					//IL_00b2: Unknown result type (might be due to invalid IL or missing references)
					if (GrimoraSaveUtil.IsNotGrimoraModRun)
					{
						return true;
					}
					if (((CardAppearanceBehaviour)__instance).Card.Info.appearanceBehaviour.Contains(CustomAppearences.MoxCardback))
					{
						GravestoneRenderStatsLayer componentInChildren = ((Component)((CardAppearanceBehaviour)__instance).Card).GetComponentInChildren<GravestoneRenderStatsLayer>();
						if ((Object)(object)componentInChildren != (Object)null)
						{
							if (((CardAppearanceBehaviour)__instance).Card.Info.metaCategories.Contains((CardMetaCategory)3))
							{
								UnityObjectExtensions.SetAlbedoTexture(((RenderStatsLayer)componentInChildren).Material, (Texture)(object)Tools.LoadTexture("MoxGraveStoneRare"));
							}
							else
							{
								UnityObjectExtensions.SetAlbedoTexture(((RenderStatsLayer)componentInChildren).Material, (Texture)(object)Tools.LoadTexture("MoxGraveStone"));
							}
						}
						return false;
					}
					((CardAppearanceBehaviour)__instance).Card.renderInfo.defaultAbilityColor = Color.black;
					return true;
				}
			}

			[HarmonyPatch(typeof(GravestoneRenderStatsLayer), "RenderCard")]
			public static class MoxColoredEmissionsPatch
			{
				[HarmonyPostfix]
				public static void PrefixRessourceManager(GravestoneRenderStatsLayer __instance, ref CardRenderInfo info)
				{
					//IL_001f: Unknown result type (might be due to invalid IL or missing references)
					//IL_006d: Unknown result type (might be due to invalid IL or missing references)
					//IL_00b8: Unknown result type (might be due to invalid IL or missing references)
					if (info.baseInfo.Abilities.Contains((Ability)38))
					{
						((RenderStatsLayer)__instance).SetEmissionColor(GameColors.Instance.orange);
						CardExtensions.AddTraits(info.baseInfo, (Trait[])(object)new Trait[1] { (Trait)17 });
						((ManagedBehaviourBase)__instance).Update();
					}
					else if (info.baseInfo.Abilities.Contains((Ability)39))
					{
						((RenderStatsLayer)__instance).SetEmissionColor(GameColors.Instance.blue);
						CardExtensions.AddTraits(info.baseInfo, (Trait[])(object)new Trait[1] { (Trait)17 });
						((ManagedBehaviourBase)__instance).Update();
					}
					else if (info.baseInfo.Abilities.Contains((Ability)37))
					{
						((RenderStatsLayer)__instance).SetEmissionColor(GameColors.Instance.limeGreen);
						CardExtensions.AddTraits(info.baseInfo, (Trait[])(object)new Trait[1] { (Trait)17 });
						((ManagedBehaviourBase)__instance).Update();
					}
				}
			}

			[HarmonyPatch(typeof(GrimoraGameFlowManager), "SceneSpecificInitialization")]
			public static class OnGameFlowManager_patch
			{
				[HarmonyPrefix]
				public static void Prefix()
				{
					//IL_0006: Unknown result type (might be due to invalid IL or missing references)
					//IL_0010: Expected O, but got Unknown
					//IL_0015: Unknown result type (might be due to invalid IL or missing references)
					//IL_001f: Expected O, but got Unknown
					//IL_0038: Unknown result type (might be due to invalid IL or missing references)
					//IL_004c: Unknown result type (might be due to invalid IL or missing references)
					//IL_007a: Unknown result type (might be due to invalid IL or missing references)
					//IL_008e: Unknown result type (might be due to invalid IL or missing references)
					//IL_00bc: Unknown result type (might be due to invalid IL or missing references)
					//IL_00d0: Unknown result type (might be due to invalid IL or missing references)
					//IL_011a: Unknown result type (might be due to invalid IL or missing references)
					//IL_012e: Unknown result type (might be due to invalid IL or missing references)
					//IL_0164: Unknown result type (might be due to invalid IL or missing references)
					//IL_0178: Unknown result type (might be due to invalid IL or missing references)
					//IL_01b8: Unknown result type (might be due to invalid IL or missing references)
					//IL_01cc: 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_0255: Unknown result type (might be due to invalid IL or missing references)
					//IL_027b: Unknown result type (might be due to invalid IL or missing references)
					//IL_02b2: Unknown result type (might be due to invalid IL or missing references)
					//IL_02d3: Unknown result type (might be due to invalid IL or missing references)
					//IL_030a: Unknown result type (might be due to invalid IL or missing references)
					//IL_032b: Unknown result type (might be due to invalid IL or missing references)
					//IL_033b: Unknown result type (might be due to invalid IL or missing references)
					//IL_0342: Expected O, but got Unknown
					//IL_0358: Unknown result type (might be due to invalid IL or missing references)
					//IL_0379: Unknown result type (might be due to invalid IL or missing references)
					//IL_039a: Unknown result type (might be due to invalid IL or missing references)
					//IL_03bc: Unknown result type (might be due to invalid IL or missing references)
					//IL_03c3: Expected O, but got Unknown
					//IL_03d9: Unknown result type (might be due to invalid IL or missing references)
					//IL_03fa: Unknown result type (might be due to invalid IL or missing references)
					//IL_041b: Unknown result type (might be due to invalid IL or missing references)
					//IL_043d: Unknown result type (might be due to invalid IL or missing references)
					//IL_0444: Expected O, but got Unknown
					//IL_045a: Unknown result type (might be due to invalid IL or missing references)
					//IL_047b: Unknown result type (might be due to invalid IL or missing references)
					//IL_049c: Unknown result type (might be due to invalid IL or missing references)
					//IL_04ea: Unknown result type (might be due to invalid IL or missing references)
					Parent = new GameObject("Parent");
					MagParent = new GameObject("MagParent");
					GameObject val = Object.Instantiate<GameObject>(ResourceBank.Get<GameObject>("Art/Assets3D/WizardBattle/PracticeMage/ArcheryTarget"), new Vector3(38.2154f, 1.5766f, -43.2963f), Quaternion.Euler(0f, 320f, 0f), Parent.transform);
					GameObject val2 = Object.Instantiate<GameObject>(ResourceBank.Get<GameObject>("Prefabs/FinaleMagnificus/MarbleColumn"), new Vector3(-3.9745f, 4.7718f, 5.44f), Quaternion.Euler(0f, 240f, 0f), Parent.transform);
					GameObject val3 = Object.Instantiate<GameObject>(ResourceBank.Get<GameObject>("Prefabs/CabinIndoors/GooWizardBottle"), new Vector3(4.7481f, 5.0057f, 1.6509f), Quaternion.Euler(0f, 300f, 0f), Parent.transform);
					val3.SetActive(true);
					((Object)val3).name = "GooBottle";
					val3.SetActive(false);
					GameObject val4 = Object.Instantiate<GameObject>(ResourceBank.Get<GameObject>("Prefabs/FactoryIndoors/Gooplane3D/GooOrbSpawner"), new Vector3(0.1001f, 1.2882f, 5.2255f), Quaternion.Euler(0f, 300f, 0f), Parent.transform);
					val4.SetActive(true);
					GameObject val5 = Object.Instantiate<GameObject>(ResourceBank.Get<GameObject>("Prefabs/FactoryIndoors/Gooplane3D/GooOrbSpawner"), new Vector3(0.1001f, 1.2882f, 5.2255f), Quaternion.Euler(0f, 300f, 0f), Parent.transform);
					val5.SetActive(true);
					val4.SetActive(true);
					GameObject val6 = Object.Instantiate<GameObject>(ResourceBank.Get<GameObject>("Prefabs/Opponents/Magnificus/MagnificusAnim"), new Vector3(3.3819f, 1.2882f, 5.3819f), Quaternion.Euler(0f, 195.4337f, 1.1182f), MagParent.transform);
					val6.SetActive(true);
					((Object)val6).name = "Magnificus";
					val.SetActive(true);
					val2.SetActive(true);
					GameObject val7 = Object.Instantiate<GameObject>(MoxBundle.LoadAsset<GameObject>("DirtyGemEmerald"));
					val7.transform.localScale = new Vector3(0.09f, 0.09f, 0.09f);
					val7.transform.position = new Vector3(37.8863f, 2.3039f, -12.9416f);
					val7.transform.rotation = new Quaternion(7.7037f, 180.329f, 0f, 0f);
					GameObject val8 = Object.Instantiate<GameObject>(MoxBundle.LoadAsset<GameObject>("DirtyGemRuby"));
					val8.transform.localScale = new Vector3(0.09f, 0.09f, 0.09f);
					val8.transform.position = new Vector3(-47.0881f, 2.2675f, -39.9891f);
					GameObject val9 = Object.Instantiate<GameObject>(MoxBundle.LoadAsset<GameObject>("DirtyGemSapphire"));
					val9.transform.localScale = new Vector3(0.1f, 0.1f, 0.1f);
					val9.transform.position = new Vector3(-43.9718f, 3.373f, 29.0674f);
					GameObject val10 = new GameObject("GooParent2");
					val10.transform.position = new Vector3(-75.84f, 7.76f, -26f);
					val10.transform.localScale = new Vector3(5f, 5f, 5f);
					val10.transform.rotation = Quaternion.Euler(0f, 180f, 0f);
					Object.Instantiate<GameObject>(GooWizard, val10.transform);
					GameObject val11 = new GameObject("LonelyParent2");
					val11.transform.position = new Vector3(30.25f, 7.4691f, 65.6364f);
					val11.transform.localScale = new Vector3(3f, 3f, 3f);
					val11.transform.rotation = Quaternion.Euler(0f, 180f, 0f);
					Object.Instantiate<GameObject>(LonelyWizard, val11.transform);
					GameObject val12 = new GameObject("PikeParent2");
					val12.transform.position = new Vector3(39.21f, 2.45f, -40f);
					val12.transform.localScale = new Vector3(5f, 5f, 5f);
					val12.transform.rotation = Quaternion.Euler(0f, 0f, 0f);
					Object.Instantiate<GameObject>(PikeWizard, val12.transform);
					GameObject val13 = Object.Instantiate<GameObject>(GrimoraMoxDrone, GameObject.Find("GameTable").transform);
					val13.transform.position = new Vector3(0.5295f, 0.8758f, 22.4786f);
					((Object)val13).name = "TrueMoxModule";
					val13.AddComponent<GrimoraMoxModule>();
				}
			}

			[HarmonyPatch(typeof(Part1BossOpponent), "IntroSequence")]
			public class IntroPatches
			{
				[HarmonyPostfix]
				public static IEnumerator KayceeIntroPatch(IEnumerator enumerator, EncounterData encounter, Part1BossOpponent __instance)
				{
					GameObject GrimgorMox = ((Component)GameObject.Find("GameTable").transform.Find("TrueMoxModule")).gameObject;
					Tween.Position(GrimgorMox.transform, new Vector3(0.5295f, 4.3372f, 22.4786f), 3f, 0f, (AnimationCurve)null, (LoopType)0, (Action)null, (Action)null, true);
					if (Singleton<TurnManager>.Instance.SpecialSequencer is GrimoraModKayceeBossSequencer && Singleton<TurnManager>.Instance.SpecialSequencer != null)
					{
						GameObject GooParent = new GameObject("GooParent");
						GooParent.transform.position = new Vector3(4.131f, 3.4737f, 4.7837f);
						GooParent.transform.localScale = new Vector3(3f, 3f, 3f);
						GooParent.transform.rotation = Quaternion.Euler(0f, 294.6954f, 1.1182f);
						Tween.Position(MagParent.transform, new Vector3(3.3819f, -1.2882f, 5.3819f), 1f, 0f, (AnimationCurve)null, (LoopType)0, (Action)null, (Action)null, true);
						new WaitForSeconds(1f);
						Object.Instantiate<GameObject>(GooWizard, GooParent.transform);
						GameObject background2 = Object.Instantiate<GameObject>(MoxBundle.LoadAsset<GameObject>("StarSurrounding"));
						Object.Instantiate<GameObject>(MoxBundle.LoadAsset<GameObject>("MoxGreen"), background2.transform);
						Tween.Position(GooParent.transform, new Vector3(3.4982f, 6.54f, 5.6f), 1f, 0f, (AnimationCurve)null, (LoopType)0, (Action)null, (Action)null, true);
						yield return GooSpeech();
					}
					else if (Singleton<TurnManager>.Instance.SpecialSequencer is GrimoraModSawyerBossSequencer && Singleton<TurnManager>.Instance.SpecialSequencer != null)
					{
						GameObject LonelyParent = new GameObject("LonelyParent");
						LonelyParent.transform.position = new Vector3(4.131f, 3.4737f, 4.7837f);
						LonelyParent.transform.localScale = new Vector3(2f, 2f, 2f);
						LonelyParent.transform.rotation = Quaternion.Euler(0f, 190f, 1.1182f);
						Tween.Position(MagParent.transform, new Vector3(3.3819f, -1.2882f, 5.3819f), 1f, 0f, (AnimationCurve)null, (LoopType)0, (Action)null, (Action)null, true);
						new WaitForSeconds(1f);
						Object.Instantiate<GameObject>(LonelyWizard, LonelyParent.transform);
						GameObject background3 = Object.Instantiate<GameObject>(MoxBundle.LoadAsset<GameObject>("StarSurrounding"));
						Object.Instantiate<GameObject>(MoxBundle.LoadAsset<GameObject>("MoxBlue"), background3.transform);
						Tween.Position(LonelyParent.transform, new Vector3(2.9382f, 6.2418f, 4.5745f), 1f, 0f, (AnimationCurve)null, (LoopType)0, (Action)null, (Action)null, true);
						yield return LonelySpeech();
					}
					else if (Singleton<TurnManager>.Instance.SpecialSequencer is GrimoraModRoyalBossSequencer && Singleton<TurnManager>.Instance.SpecialSequencer != null)
					{
						GameObject PikeParent = new GameObject("PikeParent");
						PikeParent.transform.position = new Vector3(4.131f, 1.4737f, 4.7837f);
						PikeParent.transform.localScale = new Vector3(3f, 3f, 3f);
						PikeParent.transform.rotation = Quaternion.Euler(0f, 294.6954f, 1.1182f);
						Tween.Position(MagParent.transform, new Vector3(2.5982f, 3.7855f, 3.1764f), 1f, 0f, (AnimationCurve)null, (LoopType)0, (Action)null, (Action)null, true);
						new WaitForSeconds(1f);
						Object.Instantiate<GameObject>(PikeWizard, PikeParent.transform);
						GameObject background = Object.Instantiate<GameObject>(MoxBundle.LoadAsset<GameObject>("StarSurrounding"));
						Object.Instantiate<GameObject>(MoxBundle.LoadAsset<GameObject>("MoxRed"), background.transform);
						Tween.Position(PikeParent.transform, new Vector3(3.0946f, 4.0127f, 2.7982f), 1f, 0f, (AnimationCurve)null, (LoopType)0, (Action)null, (Action)null, true);
						yield return PikeSpeech();
					}
					yield return enumerator;
				}

				public static IEnumerator GooSpeech()
				{
					yield return Singleton<TextDisplayer>.Instance.ShowUntilInput(StringExtensions.LimeGreen("Master, I will not disappoint you!") ?? "", -2.5f, 0.5f, (Emotion)3, (LetterAnimation)0, (Speaker)17, (string[])null, true);
					yield return (object)new WaitForSeconds(2f);
				}

				public static IEnumerator LonelySpeech()
				{
					yield return Singleton<TextDisplayer>.Instance.ShowUntilInput(StringExtensions.Blue("Amazing! Finally some   S T I M U L A T I O N") ?? "", -2.5f, 0.5f, (Emotion)3, (LetterAnimation)0, (Speaker)17, (string[])null, true);
					yield return (object)new WaitForSeconds(2f);
				}

				public static IEnumerator PikeSpeech()
				{
					yield return Singleton<TextDisplayer>.Instance.ShowUntilInput(StringExtensions.Orange("Hmph! You wouldn't know how to fight if your life- wait... Uh... ship depended on it!") ?? "", -2.5f, 0.5f, (Emotion)3, (LetterAnimation)0, (Speaker)17, (string[])null, true);
					yield return (object)new WaitForSeconds(2f);
				}
			}

			[HarmonyPatch(typeof(Part1BossOpponent), "LifeLostSequence")]
			public class KayceeOutroPatches
			{
				[HarmonyPostfix]
				public static IEnumerator KayceeOutroPatch(IEnumerator enumerator, Part1BossOpponent __instance)
				{
					if (((Opponent)__instance).NumLives <= 0)
					{
						GameObject GrimgorMox = ((Component)GameObject.Find("GameTable").transform.Find("TrueMoxModule")).gameObject;
						Tween.Position(GrimgorMox.transform, new Vector3(0.5295f, 0.8758f, 22.4786f), 1.5f, 0f, (AnimationCurve)null, (LoopType)0, (Action)null, (Action)null, true);
					}
					if (UnityObjectExtensions.IsNotNull((object)GameObject.Find("GooParent")) && ((Opponent)__instance).NumLives <= 0)
					{
						GameObject GooParent = GameObject.Find("GooParent");
						GameObject background2 = GameObject.Find("StarSurrounding(Clone)");
						yield return Singleton<TextDisplayer>.Instance.ShowUntilInput(StringExtensions.LimeGreen("Master, I have disappointed you! :(") ?? "", -2.5f, 0.5f, (Emotion)3, (LetterAnimation)0, (Speaker)17, (string[])null, true);
						Tween.Position(GooParent.transform, new Vector3(3.3819f, 1.2882f, 10f), 1f, 0f, (AnimationCurve)null, (LoopType)0, (Action)null, (Action)null, true);
						new WaitForSeconds(1f);
						Object.Destroy((Object)(object)background2);
						Object.Destroy((Object)(object)GooParent);
						Tween.Position(MagParent.transform, new Vector3(0f, 0f, 0f), 1f, 0f, (AnimationCurve)null, (LoopType)0, (Action)null, (Action)null, true);
					}
					else if (UnityObjectExtensions.IsNotNull((object)GameObject.Find("LonelyParent")) && ((Opponent)__instance).NumLives <= 0)
					{
						GameObject LonelyParent = GameObject.Find("LonelyParent");
						GameObject background3 = GameObject.Find("StarSurrounding(Clone)");
						yield return Singleton<TextDisplayer>.Instance.ShowUntilInput(StringExtensions.Blue("Do I Really have to go back to the Dark void???") ?? "", -2.5f, 0.5f, (Emotion)3, (LetterAnimation)0, (Speaker)17, (string[])null, true);
						Tween.Position(LonelyParent.transform, new Vector3(3.3819f, 1.2882f, 10f), 1f, 0f, (AnimationCurve)null, (LoopType)0, (Action)null, (Action)null, true);
						new WaitForSeconds(1f);
						Object.Destroy((Object)(object)background3);
						Object.Destroy((Object)(object)LonelyParent);
						Tween.Position(MagParent.transform, new Vector3(0f, 0f, 0f), 1f, 0f, (AnimationCurve)null, (LoopType)0, (Action)null, (Action)null, true);
					}
					else if (UnityObjectExtensions.IsNotNull((object)GameObject.Find("PikeParent")) && ((Opponent)__instance).NumLives <= 0)
					{
						GameObject PikeParent = GameObject.Find("PikeParent");
						GameObject background = GameObject.Find("StarSurrounding(Clone)");
						yield return Singleton<TextDisplayer>.Instance.ShowUntilInput(StringExtensions.Orange("Hmph! You have shown that you are stronger than me!") ?? "", -2.5f, 0.5f, (Emotion)3, (LetterAnimation)0, (Speaker)17, (string[])null, true);
						Tween.Position(PikeParent.transform, new Vector3(3.3819f, 1.2882f, 10f), 1f, 0f, (AnimationCurve)null, (LoopType)0, (Action)null, (Action)null, true);
						new WaitForSeconds(1f);
						Object.Destroy((Object)(object)background);
						Object.Destroy((Object)(object)PikeParent);
						Tween.Position(MagParent.transform, new Vector3(0f, 0f, 0f), 1f, 0f, (AnimationCurve)null, (LoopType)0, (Action)null, (Action)null, true);
					}
					yield return enumerator;
				}
			}

			[HarmonyPatch(typeof(Opponent), "IntroSequence")]
			public class IntroPatch
			{
				[HarmonyPostfix]
				public static void IntroPatchy(Opponent __instance)
				{
					//IL_0035: Unknown result type (might be due to invalid IL or missing references)
					GameObject gameObject = ((Component)GameObject.Find("GameTable").transform.Find("TrueMoxModule")).gameObject;
					Tween.Position(gameObject.transform, new Vector3(0.5295f, 4.3372f, 22.4786f), 3f, 0f, (AnimationCurve)null, (LoopType)0, (Action)null, (Action)null, true);
				}
			}

			[HarmonyPatch(typeof(Opponent), "OutroSequence")]
			public class Outropatch
			{
				[HarmonyPostfix]
				public static void Outropatchy(Opponent __instance)
				{
					//IL_0046: Unknown result type (might be due to invalid IL or missing references)
					if (__instance.NumLives <= 0)
					{
						GameObject gameObject = ((Component)GameObject.Find("GameTable").transform.Find("TrueMoxModule")).gameObject;
						Tween.Position(gameObject.transform, new Vector3(0.5295f, 0.8758f, 22.4786f), 1.5f, 0f, (AnimationCurve)null, (LoopType)0, (Action)null, (Action)null, true);
					}
				}
			}

			public static GameObject Parent;

			public static GameObject MagParent;

			[HarmonyPostfix]
			[HarmonyPatch(typeof(Opponent), "SpawnOpponent")]
			public static void AddToEncounter(ref Opponent __result)
			{
				//IL_015c: Unknown result type (might be due to invalid IL or missing references)
				if (GrimoraSaveUtil.IsNotGrimoraModRun)
				{
					return;
				}
				List<CardInfo> list = new List<CardInfo>
				{
					CardLoader.GetCardByName("Grimmificcus_TriangleTemple"),
					CardLoader.GetCardByName("Grimmificcus_TriangleUnit"),
					CardLoader.GetCardByName("Grimmificcus_SkeletonGreen"),
					CardLoader.GetCardByName("Grimmificcus_GreenSkelly"),
					CardLoader.GetCardByName("Grimmificcus_Druid"),
					CardLoader.GetCardByName("Grimmificcus_Druid")
				};
				List<CardInfo> list2 = new List<CardInfo>
				{
					CardLoader.GetCardByName("Grimmificcus_DiamondTemple"),
					CardLoader.GetCardByName("Grimmificcus_DiamondUnit"),
					CardLoader.GetCardByName("Grimmificcus_SkeletonOrange"),
					CardLoader.GetCardByName("Grimmificcus_OrangeSkelly"),
					CardLoader.GetCardByName("Grimmificcus_RageMage"),
					CardLoader.GetCardByName("Grimmificcus_RageMage")
				};
				List<CardInfo> list3 = new List<CardInfo>
				{
					CardLoader.GetCardByName("Grimmificcus_CircleTemple"),
					CardLoader.GetCardByName("Grimmificcus_CircleUnit"),
					CardLoader.GetCardByName("Grimmificcus_SkeletonBlue"),
					CardLoader.GetCardByName("Grimmificcus_BlueSkelly"),
					CardLoader.GetCardByName("Grimmificcus_MorphMage"),
					CardLoader.GetCardByName("Grimmificcus_MorphMage")
				};
				List<CardInfo> list4 = new List<CardInfo>();
				list4 = (from x in CardLoader.GetUnlockedCards(GrimoraPlugin.GrimoraChoiceNode, (CardTemple)1)
					where ((Object)x).name.Contains("Grimmificcus")
					select x).ToList();
				if (((Object)__result.Blueprint).name.Contains("Kaycee"))
				{
					foreach (List<CardInfo> item in __result.TurnPlan)
					{
						for (int i = 0; i < item.Count; i++)
						{
							if ((Object)(object)item[i] != (Object)null && Random.Range(0, 2) == 0)
							{
								item[i] = list[Random.Range(0, list.Count - 1)];
							}
						}
					}
					return;
				}
				if (((Object)__result.Blueprint).name.Contains("Sawyer"))
				{
					foreach (List<CardInfo> item2 in __result.TurnPlan)
					{
						for (int j = 0; j < item2.Count; j++)
						{
							if ((Object)(object)item2[j] != (Object)null && Random.Range(0, 2) == 0)
							{
								item2[j] = list3[Random.Range(0, list3.Count - 1)];
							}
						}
					}
					return;
				}
				if (((Object)__result.Blueprint).name.Contains("Royal"))
				{
					foreach (List<CardInfo> item3 in __result.TurnPlan)
					{
						for (int k = 0; k < item3.Count; k++)
						{
							if ((Object)(object)item3[k] != (Object)null && Random.Range(0, 2) == 0)
							{
								item3[k] = list2[Random.Range(0, list2.Count - 1)];
							}
						}
					}
					return;
				}
				foreach (List<CardInfo> item4 in __result.TurnPlan)
				{
					for (int l = 0; l < item4.Count; l++)
					{
						if ((Object)(object)item4[l] != (Object)null && Random.Range(0, 2) == 0)
						{
							item4[l] = list4[Random.Range(0, list4.Count - 1)];
						}
					}
				}
			}
		}

		internal const string PluginGuid = "Cevin_2006.Inscryption.CevinsGrimoraExpansion";

		internal const string PluginName = "CevinsGrimoraExpansion";

		internal const string PluginVersion = "0.0.2";

		public const string modPrefix = "Grimmificcus";

		public const string modPrefix2 = "arackulele.inscryption.grimoramod";

		public static ManualLogSource log;

		public static AssetBundle MoxBundle;

		public static GameObject LonelyWizard;

		public static GameObject GooWizard;

		public static GameObject PikeWizard;

		public static GameObject GrimoraMoxDrone;

		public static GameObject RessourceManager;

		public static List<AudioClip> addedSfx = new List<AudioClip>();

		public static List<AudioClip> addedLoops = new List<AudioClip>();

		internal void _AddCards()
		{
			List<string> list = new List<string>();
			List<MethodInfo> list2 = typeof(Plugin).GetMethods().ToList().FindAll((MethodInfo method) => method.Name.Contains("Add") && !method.Name.Contains("Ability") && !method.Name.Contains("StatIcon") && !method.Name.Contains("appearences"));
			foreach (MethodInfo item in list2)
			{
				if (!item.Name.Contains("Skeleton1") || !item.Name.Contains("Skeleton2") || !item.Name.Contains("Skeleton3"))
				{
					item.Invoke(this, new object[0]);
					list.Add(item.Name.Replace("Add", ""));
				}
			}
			((BaseUnityPlugin)this).Logger.LogMessage((object)$"Cevin's Expansion added {list.Count} cards");
			((BaseUnityPlugin)this).Logger.LogMessage((object)(string.Join(" ; ", list) ?? ""));
		}

		internal void _AddAbilities()
		{
			List<string> list = new List<string>();
			List<MethodInfo> list2 = typeof(Plugin).GetMethods().ToList().FindAll((MethodInfo method) => method.Name.Contains("Add") && (method.Name.Contains("Ability") || method.Name.Contains("StatIcon")));
			foreach (MethodInfo item in list2)
			{
				item.Invoke(this, new object[0]);
				list.Add(item.Name.Replace("Add", "").Replace("Ability", ""));
			}
			((BaseUnityPlugin)this).Logger.LogMessage((object)$"Cevin's Expansion added {list.Count} abilities");
			((BaseUnityPlugin)this).Logger.LogMessage((object)(string.Join(" ; ", list) ?? ""));
		}

		private void Awake()
		{
			//IL_00c1: Unknown result type (might be due to invalid IL or missing references)
			using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("CevinsGrimoraExpansion.Ressources.moxbundle"))
			{
				MoxBundle = AssetBundle.LoadFromStream(stream);
				addedLoops = new List<AudioClip>
				{
					MoxBundle.LoadAsset<AudioClip>("MagnificusTheme"),
					MoxBundle.LoadAsset<AudioClip>("MoxBattle")
				};
				LonelyWizard = MoxBundle.LoadAsset<GameObject>("LonelyWizardPrefab");
				GooWizard = MoxBundle.LoadAsset<GameObject>("GoobertPrefab");
				PikeWizard = MoxBundle.LoadAsset<GameObject>("PikeMagePrefab");
				GrimoraMoxDrone = MoxBundle.LoadAsset<GameObject>("TrueMoxModule");
			}
			log = ((BaseUnityPlugin)this).Logger;
			new Harmony("Cevin_2006.Inscryption.CevinsGrimoraExpansion").PatchAll();
			CustomAppearences.Addappearences();
			AddSpecialEmptyStatIcon();
			_AddAbilities();
			_AddCards();
			AddStarterDecks();
		}

		private void FixedUpdate()
		{
			//IL_0135: 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)
			//IL_014b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0152: Expected O, but got Unknown
			//IL_0168: Unknown result type (might be due to invalid IL or missing references)
			//IL_019f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0215: Unknown result type (might be due to invalid IL or missing references)
			//IL_021c: Expected O, but got Unknown
			//IL_0232: Unknown result type (might be due to invalid IL or missing references)
			//IL_0272: Unknown result type (might be due to invalid IL or missing references)
			if (ModdedSaveManager.RunState.GetValueAsObject<List<GemType>>("Cevin_2006.Inscryption.CevinsGrimoraExpansion", "GrimoraSideDeck") == null)
			{
				List<GemType> list = new List<GemType>
				{
					(GemType)2,
					(GemType)2,
					(GemType)2,
					(GemType)1,
					(GemType)1,
					(GemType)1,
					(GemType)0,
					(GemType)0,
					(GemType)0,
					(GemType)0
				};
				ModdedSaveManager.RunState.SetValueAsObject<List<GemType>>("Cevin_2006.Inscryption.CevinsGrimoraExpansion", "GrimoraSideDeck", list);
				log.LogInfo((object)list);
				log.LogInfo((object)ModdedSaveManager.RunState.GetValueAsObject<List<GemType>>("Cevin_2006.Inscryption.CevinsGrimoraExpansion", "GrimoraSideDeck"));
				log.LogInfo((object)"awesome Sidedeck moment (made by Kopie)");
				SaveManager.SaveToFile(false);
			}
			if (!SceneLoader.ActiveSceneName.Contains("grimora"))
			{
				return;
			}
			DeckReviewSequencer val = Object.FindObjectOfType<DeckReviewSequencer>();
			if (!(val is SkelMoxDeckReviewSequencer))
			{
				SkelMoxDeckReviewSequencer i = ((Component)val).gameObject.AddComponent<SkelMoxDeckReviewSequencer>();
				((DeckReviewSequencer)i).cardArray = val.cardArray;
				((DeckReviewSequencer)i).defaultPosition = val.defaultPosition;
				Object.DestroyImmediate((Object)(object)val);
				GameObject val2 = new GameObject("GemSideDeckInteractable");
				val2.transform.position = new Vector3(-2f, 5f, 1f);
				GameObject val3 = Object.Instantiate<GameObject>(Resources.Load<GameObject>("prefabs\\cards\\CardPile_Grimora"));
				val3.transform.parent = val2.transform;
				val3.transform.localPosition = Vector3.zero;
				i.editSideDeck = (MainInputInteractable)(object)val3.GetComponentInChildren<CardPile>();
				val3.GetComponentInChildren<CardPile>().CanDrawFromPile = true;
				((Collider)val3.GetComponentInChildren<BoxCollider>()).enabled = true;
				((InteractableBase)i.editSideDeck).coll = (Collider)(object)val3.GetComponentInChildren<BoxCollider>();
				i.editSideDeck.CursorSelectEnded = delegate
				{
					((DeckReviewSequencer)i).OnExitDeckView();
					i.sideDeckEnter();
				};
				GameObject val4 = new GameObject("DeckInteractable");
				val4.transform.position = new Vector3(2f, 5f, 1f);
				GameObject val5 = Object.Instantiate<GameObject>(Resources.Load<GameObject>("prefabs\\cards\\CardPile_Grimora"));
				CardPile componentInChildren = val5.GetComponentInChildren<CardPile>();
				val5.transform.parent = val4.transform;
				val5.transform.localPosition = Vector3.zero;
				i.editRegularDeck = (MainInputInteractable)(object)val5.GetComponentInChildren<CardPile>();
				val5.GetComponentInChildren<CardPile>().CanDrawFromPile = true;
				((Collider)val5.GetComponentInChildren<BoxCollider>()).enabled = true;
				((InteractableBase)i.editRegularDeck).coll = (Collider)(object)val5.GetComponentInChildren<BoxCollider>();
				i.editRegularDeck.CursorSelectEnded = delegate
				{
					((DeckReviewSequencer)i).OnExitDeckView();
					i.baseEnter();
				};
			}
		}

		public void AddSpecialEmptyStatIcon()
		{
			//IL_0060: Unknown result type (might be due to invalid IL or missing references)
			//IL_0065: Unknown result type (might be due to invalid IL or missing references)
			StatIconInfo val = AbilityExtensions.SetDefaultPart1Ability(AbilityExtensions.SetIcon(StatIconManager.New("Cevin_2006.Inscryption.CevinsGrimoraExpansion", "Empty Spaced", "The value represented with this sigil is equal to the empty Spaces on its side.", typeof(EmptySpaceBehaviour)), Tools.LoadTexture("EmptySpacesStaticon"), (FilterMode?)null));
			val.appliesToAttack = true;
			val.appliesToHealth = false;
			EmptySpaceBehaviour.ESStatIconID = StatIconManager.Add("Cevin_2006.Inscryption.CevinsGrimoraExpansion", val, typeof(EmptySpaceBehaviour)).Id;
		}

		public void AddMeteoriteAbility()
		{
			//IL_005b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0060: Unknown result type (might be due to invalid IL or missing references)
			AbilityInfo val = AbilityManager.New("Cevin_2006.Inscryption.CevinsGrimoraExpansion", "Meteor Strike", "[creature] causes every other Card on the board to take 2 damage.", typeof(MeteorStrike), (Texture)(object)Tools.LoadTexture("MeteoriteSigil"));
			val.powerLevel = 3;
			val.metaCategories = new List<AbilityMetaCategory>
			{
				(AbilityMetaCategory)0,
				(AbilityMetaCategory)1
			};
			val.canStack = false;
			val.opponentUsable = true;
			MeteorStrike.ability = val.ability;
		}

		public void AddSideHealerAbility()
		{
			//IL_005b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0060: Unknown result type (might be due to invalid IL or missing references)
			AbilityInfo val = AbilityManager.New("Cevin_2006.Inscryption.CevinsGrimoraExpansion", "Healer", "[creature] will heal adjacent creatures each turn.", typeof(SideHealing), (Texture)(object)Tools.LoadTexture("SideHealingSigil"));
			val.powerLevel = 2;
			val.metaCategories = new List<AbilityMetaCategory>
			{
				(AbilityMetaCategory)0,
				(AbilityMetaCategory)1
			};
			val.canStack = false;
			val.opponentUsable = true;
			SideHealing.ability = val.ability;
		}

		public void AddIceStrafeAbility()
		{
			//IL_005b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0060: Unknown result type (might be due to invalid IL or missing references)
			AbilityInfo val = AbilityManager.New("Cevin_2006.Inscryption.CevinsGrimoraExpansion", "Iee Strafe", " if [creature] strafes, it leaves behind a big hunk o' Ice.", typeof(IceStrafe), (Texture)(object)Tools.LoadTexture("IceStrafeSigil"));
			val.powerLevel = 1;
			val.metaCategories = new List<AbilityMetaCategory>
			{
				(AbilityMetaCategory)0,
				(AbilityMetaCategory)1
			};
			val.canStack = false;
			val.opponentUsable = true;
			IceStrafe.ability = val.ability;
		}

		public void AddRandomMoxAbility()
		{
			//IL_005b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0060: Unknown result type (might be due to invalid IL or missing references)
			AbilityInfo val = AbilityManager.New("Cevin_2006.Inscryption.CevinsGrimoraExpansion", "Random Mox", "[creature] will grant a random mox upon getting drawn.", typeof(RandomMoxAbility), (Texture)(object)Tools.LoadTexture("RandomMoxSigil"));
			val.powerLevel = 3;
			val.metaCategories = new List<AbilityMetaCategory>
			{
				(AbilityMetaCategory)0,
				(AbilityMetaCategory)1
			};
			val.canStack = false;
			val.opponentUsable = true;
			RandomMoxAbility.ability = val.ability;
		}

		public void AddShieldGemDependantAbility()
		{
			//IL_005b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0060: Unknown result type (might be due to invalid IL or missing references)
			AbilityInfo val = AbilityManager.New("Cevin_2006.Inscryption.CevinsGrimoraExpansion", "Gem Protector", "[creature] will give any creature with Gem Dependant Nano Shield.", typeof(ShieldSkeletons), (Texture)(object)Tools.LoadTexture("ShieldGemDependantSigil"));
			val.powerLevel = 3;
			val.metaCategories = new List<AbilityMetaCategory>
			{
				(AbilityMetaCategory)0,
				(AbilityMetaCategory)1
			};
			val.canStack = false;
			val.opponentUsable = true;
			ShieldSkeletons.ability = val.ability;
		}

		public void AddBoneStrafeAbility()
		{
			//IL_005b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0060: Unknown result type (might be due to invalid IL or missing references)
			AbilityInfo val = AbilityManager.New("Cevin_2006.Inscryption.CevinsGrimoraExpansion", "Bone Strafe", "[creature] Strafe until it has gathered enough Bones..", typeof(BoneStrafe), (Texture)(object)Tools.LoadTexture("BoneStrafeSigil"));
			val.powerLevel = 3;
			val.metaCategories = new List<AbilityMetaCategory>
			{
				(AbilityMetaCategory)0,
				(AbilityMetaCategory)1
			};
			val.canStack = false;
			val.opponentUsable = true;
			BoneStrafe.ability = val.ability;
		}

		public void AddSatanCircleAbility()
		{
			//IL_0062: Unknown result type (might be due to invalid IL or missing references)
			//IL_0067: Unknown result type (might be due to invalid IL or missing references)
			AbilityInfo val = AbilityManager.New("Cevin_2006.Inscryption.CevinsGrimoraExpansion", "Demon Circle", "[creature] will complete a Conduit.", typeof(SatanCircle), (Texture)(object)Tools.LoadTexture("SatanicSigil"));
			val.powerLevel = 1;
			val.metaCategories = new List<AbilityMetaCategory>
			{
				(AbilityMetaCategory)0,
				(AbilityMetaCategory)1
			};
			val.canStack = false;
			val.opponentUsable = true;
			val.conduit = true;
			SatanCircle.ability = val.ability;
		}

		public void AddSatanCircleSpawnerAbility()
		{
			//IL_0062: Unknown result type (might be due to invalid IL or missing references)
			//IL_0067: Unknown result type (might be due to invalid IL or missing references)
			AbilityInfo val = AbilityManager.New("Cevin_2006.Inscryption.CevinsGrimoraExpansion", "Demon Spawner", "[creature] will spawn undead Creatures once it completes a Conduit.", typeof(SatanCircle), (Texture)(object)Tools.LoadTexture("SatanicSpawnerSigil"));
			val.powerLevel = 2;
			val.metaCategories = new List<AbilityMetaCategory>
			{
				(AbilityMetaCategory)0,
				(AbilityMetaCategory)1
			};
			val.canStack = false;
			val.opponentUsable = true;
			val.conduit = true;
			SatanCircle.ability = val.ability;
		}

		public void AddGemNecroAbility()
		{
			//IL_005b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0060: Unknown result type (might be due to invalid IL or missing references)
			AbilityInfo val = AbilityManager.New("Cevin_2006.Inscryption.CevinsGrimoraExpansion", "Necromancer", "[creature] will Necromance Creatures on recently died spaces and grant them a random Mox themed sigil.", typeof(GemRevive), (Texture)(object)Tools.LoadTexture("GemNecromancerSigil"));
			val.powerLevel = 2;
			val.metaCategories = new List<AbilityMetaCategory>
			{
				(AbilityMetaCategory)0,
				(AbilityMetaCategory)1
			};
			val.canStack = false;
			val.opponentUsable = true;
			GemRevive.ability = val.ability;
		}

		public void AddEvilHagAbility()
		{
			//IL_0062: Unknown result type (might be due to invalid IL or missing references)
			//IL_0067: Unknown result type (might be due to invalid IL or missing references)
			AbilityInfo val = AbilityManager.New("Cevin_2006.Inscryption.CevinsGrimoraExpansion", "EvilHag", "upon Activation, [creature] will choose a Slot. If a card in that slot costs less than 3 bones or souls it will die, else it will take 1 damage.", typeof(EvilHag), (Texture)(object)Tools.LoadTexture("EvilHagSigil"));
			val.powerLevel = 4;
			val.metaCategories = new List<AbilityMetaCategory>
			{
				(AbilityMetaCategory)0,
				(AbilityMetaCategory)1
			};
			val.canStack = false;
			val.activated = true;
			val.opponentUsable = true;
			EvilHag.ability = val.ability;
		}

		public void AddDrawDeckAndSideAbility()
		{
			//IL_005b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0060: Unknown result type (might be due to invalid IL or missing references)
			AbilityInfo val = AbilityManager.New("Cevin_2006.Inscryption.CevinsGrimoraExpansion", "Side & Deck Draw", "[creature] will draw a card from your main deck and side deck upon being played", typeof(DrawDeckAndSide), (Texture)(object)Tools.LoadTexture("DrawDeckAndSide"));
			val.powerLevel = 4;
			val.metaCategories = new List<AbilityMetaCategory>
			{
				(AbilityMetaCategory)0,
				(AbilityMetaCategory)1
			};
			val.canStack = false;
			val.opponentUsable = true;
			DrawDeckAndSide.ability = val.ability;
		}

		public void AddDrawCardOnKillAbility()
		{
			//IL_005b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0060: Unknown result type (might be due to invalid IL or missing references)
			AbilityInfo val = AbilityManager.New("Cevin_2006.Inscryption.CevinsGrimoraExpansion", "Drawkill", "[creature] will draw from your Main Deck when it kills a card.", typeof(DrawCardOnKill), (Texture)(object)Tools.LoadTexture("DrawDeckOnKill"));
			val.powerLevel = 2;
			val.metaCategories = new List<AbilityMetaCategory>
			{
				(AbilityMetaCategory)0,
				(AbilityMetaCategory)1
			};
			val.canStack = false;
			val.opponentUsable = true;
			DrawCardOnKill.ability = val.ability;
		}

		public void AddDruidAbility()
		{
			//IL_005b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0060: Unknown result type (might be due to invalid IL or missing references)
			AbilityInfo val = AbilityManager.New("Cevin_2006.Inscryption.CevinsGrimoraExpansion", "Druid of Death", "When [creature] is played, Dead Trees are created on every empty space. A Dead Tree is defined as 0 power, 1 health.", typeof(DruidAbility), (Texture)(object)Tools.LoadTexture("DruidAbility"));
			val.powerLevel = 2;
			val.metaCategories = new List<AbilityMetaCategory>
			{
				(AbilityMetaCategory)0,
				(AbilityMetaCategory)1
			};
			val.canStack = false;
			val.opponentUsable = true;
			DruidAbility.ability = val.ability;
		}

		public void AddRageAbility()
		{
			//IL_005b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0060: Unknown result type (might be due to invalid IL or missing references)
			AbilityInfo val = AbilityManager.New("Cevin_2006.Inscryption.CevinsGrimoraExpansion", "Rage", "[creature] will gain +1/0 uppon getting hit.", typeof(RageAbility), (Texture)(object)Tools.LoadTexture("RageAbility"));
			val.powerLevel = 2;
			val.metaCategories = new List<AbilityMetaCategory>
			{
				(AbilityMetaCategory)0,
				(AbilityMetaCategory)1
			};
			val.canStack = false;
			val.opponentUsable = true;
			RageAbility.ability = val.ability;
		}

		public void AddHookerAbility()
		{
			//IL_005b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0060: Unknown result type (might be due to invalid IL or missing references)
			AbilityInfo val = AbilityManager.New("Cevin_2006.Inscryption.CevinsGrimoraExpansion", "Hooker", "When [creature] is played, this card will die and the opposing creature will be pulled into it's space.", typeof(Hooker), (Texture)(object)Tools.LoadTexture("HookerAbility"));
			val.powerLevel = 4;
			val.metaCategories = new List<AbilityMetaCategory>
			{
				(AbilityMetaCategory)0,
				(AbilityMetaCategory)1
			};
			val.canStack = false;
			val.opponentUsable = true;
			Hooker.ability = val.ability;
		}

		public void AddMoxConstructSigil()
		{
			//IL_0062: Unknown result type (might be due to invalid IL or missing references)
			//IL_0067: Unknown result type (might be due to invalid IL or missing references)
			AbilityInfo val = AbilityManager.New("Cevin_2006.Inscryption.CevinsGrimoraExpansion", "Constructor", "Upon activation, [creature] willl choose a Card with any Gain Mox Sigil to strengthen itself. If said card has the Blue Gem [creature] will get a sigil. Orange and green raise its attack and heallth respectively.", typeof(MoxConstructor), (Texture)(object)Tools.LoadTexture("MoxConstructSigil"));
			val.powerLevel = 4;
			val.metaCategories = new List<AbilityMetaCategory>
			{
				(AbilityMetaCategory)0,
				(AbilityMetaCategory)1
			};
			val.canStack = false;
			val.opponentUsable = false;
			val.activated = true;
			MoxConstructor.ability = val.ability;
		}

		public void AddGlowTail()
		{
			//IL_0080: Unknown result type (might be due to invalid IL or missing references)
			//IL_0086: Expected I4, but got Unknown
			//IL_0093: Unknown result type (might be due to invalid IL or missing references)
			CardInfo val = CardExtensions.SetDefaultPart1Card(CardExtensions.AddMetaCategories(CardExtensions.SetEmissivePortrait(CardExtensions.SetPortrait(CardExtensions.AddAbilities(CardExtensions.SetCost(CardManager.New("Grimmificcus", "GlowTail", "Glow Tail", 1, 1, "Its glowing tail weakens the opponent"), (int?)0, (int?)2, (int?)2, (List<GemType>)null), (Ability[])(object)new Ability[1] { (Ability)83 }), Tools.LoadTexture("GlowTailLizard"), (FilterMode?)null), Tools.LoadTexture("GlowTailLizard_e"), (FilterMode?)null), (CardMetaCategory[])(object)new CardMetaCategory[3]
			{
				default(CardMetaCategory),
				(CardMetaCategory)1,
				(CardMetaCategory)(int)GrimoraPlugin.GrimoraChoiceNode
			}));
			val.temple = (CardTemple)1;
			CardManager.Add("Grimmificcus", val);
		}

		public void AddMurderOfCrows()
		{
			//IL_0080: Unknown result type (might be due to invalid IL or missing references)
			//IL_0086: Expected I4, but got Unknown
			//IL_0093: Unknown result type (might be due to invalid IL or missing references)
			CardInfo val = CardExtensions.SetDefaultPart1Card(CardExtensions.AddMetaCategories(CardExtensions.SetEmissivePortrait(CardExtensions.SetPortrait(CardExtensions.AddAbilities(CardExtensions.SetCost(CardManager.New("Grimmificcus", "MurderOfCrows", "Murder Of Crows", 1, 1, "a ton of Crows leaving nothing behind."), (int?)0, (int?)4, (int?)0, (List<GemType>)null), (Ability[])(object)new Ability[1] { (Ability)9 }), Tools.LoadTexture("MurderOfCrows"), (FilterMode?)null), Tools.LoadTexture("MurderOfCrows_e"), (FilterMode?)null), (CardMetaCategory[])(object)new CardMetaCategory[3]
			{
				default(CardMetaCategory),
				(CardMetaCategory)1,
				(CardMetaCategory)(int)GrimoraPlugin.GrimoraChoiceNode
			}));
			val.temple = (CardTemple)1;
			CardManager.Add("Grimmificcus", val);
		}

		public void AddMangledSkeleton()
		{
			//IL_0070: Unknown result type (might be due to invalid IL or missing references)
			//IL_0076: Expected I4, but got Unknown
			//IL_0083: Unknown result type (might be due to invalid IL or missing references)
			CardInfo val = CardExtensions.SetDefaultPart1Card(CardExtensions.AddMetaCategories(CardExtensions.SetEmissivePortrait(CardExtensions.SetPortrait(CardExtensions.SetCost(CardManager.New("Grimmificcus", "MangledSkeleton", "Mangled Skeleton", 1, 1, "Its twisted and deformed Body is a relentless attacker"), (int?)0, (int?)2, (int?)0, (List<GemType>)null), Tools.LoadTexture("MangledSkeleton"), (FilterMode?)null), Tools.LoadTexture("MangledSkeleton_e"), (FilterMode?)null), (CardMetaCategory[])(object)new CardMetaCategory[3]
			{
				default(CardMetaCategory),
				(CardMetaCategory)1,
				(CardMetaCategory)(int)GrimoraPlugin.GrimoraChoiceNode
			}));
			val.temple = (CardTemple)1;
			CardManager.Add("Grimmificcus", val);
		}

		public void AddFrostSpiritIce()
		{
			//IL_008b: Unknown result type (might be due to invalid IL or missing references)
			CardInfo val = CardExtensions.SetTerrain(CardExtensions.AddAppearances(CardExtensions.SetEmissivePortrait(CardExtensions.SetPortrait(CardExtensions.AddAbilities(CardExtensions.SetCost(CardManager.New("Grimmificcus", "FrostSpiritIce", "Ice", 0, 1, "Frozen Spirit leaving behind a trail of Ice, iam sure Kaycee would enjoy this ones company"), (int?)0, (int?)0, (int?)0, (List<GemType>)null), (Ability[])(object)new Ability[1] { (Ability)83 }), Tools.LoadTexture("FrostSpiritIce"), (FilterMode?)null), Tools.LoadTexture("FrostSpiritIce_e"), (FilterMode?)null), (Appearance[])(object)new Appearance[1] { (Appearance)7 }));
			val.temple = (CardTemple)1;
			CardManager.Add("Grimmificcus", val);
		}

		public void AddFrostSpirit()
		{
			//IL_003c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0042: Expected I4, but got Unknown
			//IL_0083: Unknown result type (might be due to invalid IL or missing references)
			//IL_0089: Expected I4, but got Unknown
			//IL_00a5: Unknown result type (might be due to invalid IL or missing references)
			CardInfo val = CardExtensions.SetDefaultPart1Card(CardExtensions.AddAppearances(CardExtensions.AddMetaCategories(CardExtensions.SetEmissivePortrait(CardExtensions.SetPortrait(CardExtensions.AddAbilities(CardExtensions.SetCost(CardManager.New("Grimmificcus", "FrostSpirit", "Frost Spirit", 1, 1, "Frozen Spirit leaving behind a trail of Ice, iam sure Kaycee would enjoy this ones company"), (int?)0, (int?)0, (int?)6, (List<GemType>)null), (Ability[])(object)new Ability[1] { (Ability)(int)IceStrafe.ability }), Tools.LoadTexture("FrostSpirit"), (FilterMode?)null), Tools.LoadTexture("FrostSpirit_e"), (FilterMode?)null), (CardMetaCategory[])(object)new CardMetaCategory[2]
			{
				(CardMetaCategory)3,
				(CardMetaCategory)(int)GrimoraPlugin.GrimoraChoiceNode
			}), (Appearance[])(object)new Appearance[1] { (Appearance)7 }));
			val.temple = (CardTemple)1;
			CardManager.Add("Grimmificcus", val);
		}

		public void AddEmptySpaceSkelacle()
		{
			//IL_0058: Unknown result type (might be due to invalid IL or missing references)
			//IL_005e: Expected I4, but got Unknown
			//IL_0063: Unknown result type (might be due to invalid IL or missing references)
			//IL_0075: Unknown result type (might be due to invalid IL or missing references)
			CardInfo val = CardExtensions.SetDefaultPart1Card(CardExtensions.SetStatIcon(CardExtensions.AddMetaCategories(CardExtensions.SetPortrait(CardExtensions.SetCost(CardManager.New("Grimmificcus", "EmptySkelacle", "Transient Skelacle", 0, 1, "Tentacles with no Bones!"), (int?)0, (int?)4, (int?)4, (List<GemType>)null), Tools.LoadTexture("EmptySkelacle"), (FilterMode?)null), (CardMetaCategory[])(object)new CardMetaCategory[3]
			{
				(CardMetaCategory)1,
				default(CardMetaCategory),
				(CardMetaCategory)(int)GrimoraPlugin.GrimoraChoiceNode
			}), EmptySpaceBehaviour.ESStatIconID));
			val.temple = (CardTemple)1;
			CardManager.Add("Grimmificcus", val);
		}

		public void AddSkeletonWorm()
		{
			//IL_0080: Unknown result type (might be due to invalid IL or missing references)
			//IL_0086: Expected I4, but got Unknown
			//IL_0093: Unknown result type (might be due to invalid IL or missing references)
			CardInfo val = CardExtensions.SetDefaultPart1Card(CardExtensions.AddMetaCategories(CardExtensions.AddAbilities(CardExtensions.SetEmissivePortrait(CardExtensions.SetPortrait(CardExtensions.SetCost(CardManager.New("Grimmificcus", "SkeletonWorm", "Skeleton Worm", 2, 2, "How strange, worms dont have Skeletons!"), (int?)0, (int?)4, (int?)0, (List<GemType>)null), Tools.LoadTexture("BoneShark"), (FilterMode?)null), Tools.LoadTexture("BoneShark_e"), (FilterMode?)null), (Ability[])(object)new Ability[1] { (Ability)90 }), (CardMetaCategory[])(object)new CardMetaCategory[3]
			{
				(CardMetaCategory)1,
				default(CardMetaCategory),
				(CardMetaCategory)(int)GrimoraPlugin.GrimoraChoiceNode
			}));
			val.temple = (CardTemple)1;
			CardManager.Add("Grimmificcus", val);
		}

		public void AddMeteorSkull()
		{
			//IL_006c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0072: Expected I4, but got Unknown
			//IL_0083: Unknown result type (might be due to invalid IL or missing references)
			//IL_0089: Expected I4, but got Unknown
			//IL_0096: Unknown result type (might be due to invalid IL or missing references)
			CardInfo val = CardExtensions.SetDefaultPart1Card(CardExtensions.AddMetaCategories(CardExtensions.AddAbilities(CardExtensions.SetEmissivePortrait(CardExtensions.SetPortrait(CardExtensions.SetCost(CardManager.New("Grimmificcus", "MeteorSkull", "Meteor Skull", 1, 1, "A skull crashing down at incredible Speeds"), (int?)0, (int?)3, (int?)4, (List<GemType>)null), Tools.LoadTexture("MeteoriteSkull"), (FilterMode?)null), Tools.LoadTexture("MeteoriteSkull_e"), (FilterMode?)null), (Ability[])(object)new Ability[1] { (Ability)(int)MeteorStrike.ability }), (CardMetaCategory[])(object)new CardMetaCategory[3]
			{
				(CardMetaCategory)1,
				default(CardMetaCategory),
				(CardMetaCategory)(int)GrimoraPlugin.GrimoraChoiceNode
			}));
			val.temple = (CardTemple)1;
			CardManager.Add("Grimmificcus", val);
		}

		public void AddMoxPupil()
		{
			//IL_0098: Unknown result type (might be due to invalid IL or missing references)
			//IL_009e: Expected I4, but got Unknown
			//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
			CardInfo val = CardExtensions.SetDefaultPart1Card(CardExtensions.AddMetaCategories(CardExtensions.AddAbilities(CardExtensions.SetEmissivePortrait(CardExtensions.SetPixelPortrait(CardExtensions.SetPortrait(CardExtensions.SetCost(CardManager.New("Grimmificcus", "MoxPupil", "Pupil", 1, 1, "One of his students. Most don't last long before they end up here."), (int?)0, (int?)0, (int?)0, (List<GemType>)null), Tools.LoadTexture("MoxPupil"), (FilterMode?)null), Tools.LoadTexture("MoxPupilPixel"), (FilterMode?)null), Tools.LoadTexture("MoxPupil_e"), (FilterMode?)null), (Ability[])(object)new Ability[1] { (Ability)43 }), (CardMetaCategory[])(object)new CardMetaCategory[3]
			{
				(CardMetaCategory)1,
				default(CardMetaCategory),
				(CardMetaCategory)(int)GrimoraPlugin.GrimoraChoiceNode
			}));
			val.temple = (CardTemple)1;
			CardManager.Add("Grimmificcus", val);
		}

		public void AddMoxDactyl()
		{
			//IL_00a4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00aa: Expected I4, but got Unknown
			//IL_00b7: Unknown result type (might be due to invalid IL or missing references)
			CardInfo val = CardExtensions.SetDefaultPart1Card(CardExtensions.AddMetaCategories(CardExtensions.AddAbilities(CardExtensions.SetEmissivePortrait(CardExtensions.SetPixelPortrait(CardExtensions.SetPortrait(CardExtensions.SetCost(CardManager.New("Grimmificcus", "MoxDactyl", "Moxdactyl", 2, 1, "A once extinct skeleton, brought back to life with the power of orange gems."), (int?)0, (int?)0, (int?)0, new List<GemType> { (GemType)1 }), Tools.LoadTexture("Orange"), (FilterMode?)null), Tools.LoadTexture("MoxDactylPixel"), (FilterMode?)null), Tools.LoadTexture("Orange_e"), (FilterMode?)null), (Ability[])(object)new Ability[1] { (Ability)19 }), (CardMetaCategory[])(object)new CardMetaCategory[3]
			{
				(CardMetaCategory)1,
				default(CardMetaCategory),
				(CardMetaCategory)(int)GrimoraPlugin.GrimoraChoiceNode
			}));
			val.temple = (CardTemple)1;
			CardManager.Add("Grimmificcus", val);
		}

		public void AddCircleTemple()
		{
			//IL_0088: Unknown result type (might be due to invalid IL or missing references)
			//IL_008e: Expected I4, but got Unknown
			//IL_00b0: Unknown result type (might be due to invalid IL or missing references)
			CardInfo val = CardExtensions.SetDefaultPart1Card(CardExtensions.AddAbilities(CardExtensions.AddMetaCategories(CardExtensions.SetEmissivePortrait(CardExtensions.SetPixelPortrait(CardExtensions.SetPortrait(CardExtensions.SetCost(CardManager.New("Grimmificcus", "CircleTemple", "Blue Temple", 0, 3, "Temple used to channel the power of Blue Moxes."), (int?)0, (int?)0, (int?)2, (List<GemType>)null), Tools.LoadTexture("CircleTemple"), (FilterMode?)null), Tools.LoadTexture("CircleTemplePixel"), (FilterMode?)null), Tools.LoadTexture("CircleTemple_e"), (FilterMode?)null), (CardMetaCategory[])(object)new CardMetaCategory[3]
			{
				default(CardMetaCategory),
				(CardMetaCategory)1,
				(CardMetaCategory)(int)GrimoraPlugin.GrimoraChoiceNode
			}), (Ability[])(object)new Ability[2]
			{
				(Ability)52,
				(Ability)39
			}));
			val.temple = (CardTemple)1;
			CardManager.Add("Grimmificcus", val);
		}

		public void AddDiamondTemple()
		{
			//IL_0088: Unknown result type (might be due to invalid IL or missing references)
			//IL_008e: Expected I4, but got Unknown
			//IL_00b0: Unknown result type (might be due to invalid IL or missing references)
			CardInfo val = CardExtensions.SetDefaultPart1Card(CardExtensions.AddAbilities(CardExtensions.AddMetaCategories(CardExtensions.SetEmissivePortrait(CardExtensions.SetPixelPortrait(CardExtensions.SetPortrait(CardExtensions.SetCost(CardManager.New("Grimmificcus", "DiamondTemple", "Orange Temple", 0, 3, "Temple used to channel the power of Orange Moxes."), (int?)0, (int?)3, (int?)4, (List<GemType>)null), Tools.LoadTexture("Diamon