Decompiled source of ZephtSun v1.0.0

ZephtSun.dll

Decompiled 4 hours ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Logging;
using DiskCardGame;
using HarmonyLib;
using InscryptionAPI.Ascension;
using InscryptionAPI.Card;
using InscryptionAPI.Helpers;
using InscryptionCommunityPatch.Card;
using Microsoft.CodeAnalysis;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETStandard,Version=v2.0", FrameworkDisplayName = ".NET Standard 2.0")]
[assembly: AssemblyCompany("ZephtSun")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("ZephtSun")]
[assembly: AssemblyTitle("ZephtSun")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
	internal sealed class RefSafetyRulesAttribute : Attribute
	{
		public readonly int Version;

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
namespace ZephtSun
{
	public static class ext
	{
		public static int GetSunCost(this CardInfo info)
		{
			int? extendedPropertyAsInt = CardExtensions.GetExtendedPropertyAsInt(info, "SunCost");
			return extendedPropertyAsInt.HasValue ? extendedPropertyAsInt.Value : 0;
		}
	}
	[BepInPlugin("zepht.inscryption.ZephtSun", "PvZSunbyZepht", "1.0.0")]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	public class Plugin : BaseUnityPlugin
	{
		public class SunmakerX : AbilityBehaviour
		{
			public static Ability ability;

			public override Ability Ability => ability;

			private int SunValue
			{
				get
				{
					int result = 1;
					if (CardExtensions.GetExtendedPropertyAsInt(((Card)((AbilityBehaviour)this).Card).Info, "Sunmaker").HasValue)
					{
						result = CardExtensions.GetExtendedPropertyAsInt(((Card)((AbilityBehaviour)this).Card).Info, "Sunmaker").Value;
					}
					return result;
				}
			}

			public override bool RespondsToTurnEnd(bool playerTurnEnd)
			{
				return ((AbilityBehaviour)this).Card.OpponentCard != playerTurnEnd && !((AbilityBehaviour)this).Card.Dead;
			}

			public override IEnumerator OnTurnEnd(bool playerTurnEnd)
			{
				if (!((AbilityBehaviour)this).Card.OpponentCard)
				{
					Singleton<ViewManager>.Instance.SwitchToView((View)4, false, true);
					yield return ((AbilityBehaviour)this).PreSuccessfulTriggerSequence();
					yield return gainSunFromCard(SunValue, ((AbilityBehaviour)this).Card);
					yield return ((AbilityBehaviour)this).LearnAbility(0.1f);
					Singleton<ViewManager>.Instance.Controller.LockState = (ViewLockState)0;
				}
			}

			public override bool RespondsToDrawn()
			{
				return true;
			}

			public override IEnumerator OnDrawn()
			{
				ReRenderCard(SunValue);
				yield break;
			}

			public override bool RespondsToResolveOnBoard()
			{
				return true;
			}

			public override IEnumerator OnResolveOnBoard()
			{
				ReRenderCard(SunValue);
				yield break;
			}

			private void ReRenderCard(int num)
			{
				//IL_000c: Unknown result type (might be due to invalid IL or missing references)
				//IL_003f: Unknown result type (might be due to invalid IL or missing references)
				((Card)((AbilityBehaviour)this).Card).RenderInfo.OverrideAbilityIcon(ability, pixelSunmakerIcons[Mathf.Clamp(num, 0, pixelSunmakerIcons.Count - 1)]);
				((Card)((AbilityBehaviour)this).Card).RenderInfo.OverrideAbilityIcon(ability, sunmakerIcons[Mathf.Clamp(num, 0, sunmakerIcons.Count - 1)]);
				((Card)((AbilityBehaviour)this).Card).RenderCard();
			}
		}

		public class Sunmaker1 : AbilityBehaviour
		{
			public static Ability ability;

			public override Ability Ability => ability;

			public override bool RespondsToTurnEnd(bool playerTurnEnd)
			{
				return ((AbilityBehaviour)this).Card.OpponentCard != playerTurnEnd && !((AbilityBehaviour)this).Card.Dead;
			}

			public override IEnumerator OnTurnEnd(bool playerTurnEnd)
			{
				if (!((AbilityBehaviour)this).Card.OpponentCard)
				{
					Singleton<ViewManager>.Instance.SwitchToView((View)4, false, true);
					yield return ((AbilityBehaviour)this).PreSuccessfulTriggerSequence();
					yield return gainSunFromCard(1, ((AbilityBehaviour)this).Card);
					yield return ((AbilityBehaviour)this).LearnAbility(0.1f);
					Singleton<ViewManager>.Instance.Controller.LockState = (ViewLockState)0;
				}
			}
		}

		public class Sunmaker2 : AbilityBehaviour
		{
			public static Ability ability;

			public override Ability Ability => ability;

			public override bool RespondsToTurnEnd(bool playerTurnEnd)
			{
				return ((AbilityBehaviour)this).Card.OpponentCard != playerTurnEnd && !((AbilityBehaviour)this).Card.Dead;
			}

			public override IEnumerator OnTurnEnd(bool playerTurnEnd)
			{
				if (!((AbilityBehaviour)this).Card.OpponentCard)
				{
					Singleton<ViewManager>.Instance.SwitchToView((View)4, false, true);
					yield return ((AbilityBehaviour)this).PreSuccessfulTriggerSequence();
					yield return gainSunFromCard(2, ((AbilityBehaviour)this).Card);
					yield return ((AbilityBehaviour)this).LearnAbility(0.1f);
					Singleton<ViewManager>.Instance.Controller.LockState = (ViewLockState)0;
				}
			}
		}

		public class Sunmaker3 : AbilityBehaviour
		{
			public static Ability ability;

			public override Ability Ability => ability;

			public override bool RespondsToTurnEnd(bool playerTurnEnd)
			{
				return ((AbilityBehaviour)this).Card.OpponentCard != playerTurnEnd && !((AbilityBehaviour)this).Card.Dead;
			}

			public override IEnumerator OnTurnEnd(bool playerTurnEnd)
			{
				if (!((AbilityBehaviour)this).Card.OpponentCard)
				{
					Singleton<ViewManager>.Instance.SwitchToView((View)4, false, true);
					yield return ((AbilityBehaviour)this).PreSuccessfulTriggerSequence();
					yield return gainSunFromCard(3, ((AbilityBehaviour)this).Card);
					yield return ((AbilityBehaviour)this).LearnAbility(0.1f);
					Singleton<ViewManager>.Instance.Controller.LockState = (ViewLockState)0;
				}
			}
		}

		public class SunKill : AbilityBehaviour
		{
			public static Ability ability;

			public override Ability Ability => ability;

			private int SunValue
			{
				get
				{
					int result = 1;
					if (CardExtensions.GetExtendedPropertyAsInt(((Card)((AbilityBehaviour)this).Card).Info, "Sunmaker").HasValue)
					{
						result = CardExtensions.GetExtendedPropertyAsInt(((Card)((AbilityBehaviour)this).Card).Info, "Sunmaker").Value;
					}
					return result;
				}
			}

			public override bool RespondsToOtherCardDie(PlayableCard card, CardSlot deathSlot, bool fromCombat, PlayableCard killer)
			{
				return (Object)(object)killer != (Object)null && (Object)(object)killer == (Object)(object)((AbilityBehaviour)this).Card;
			}

			public override IEnumerator OnOtherCardDie(PlayableCard card, CardSlot deathSlot, bool fromCombat, PlayableCard killer)
			{
				Singleton<ViewManager>.Instance.SwitchToView((View)4, false, true);
				yield return ((AbilityBehaviour)this).PreSuccessfulTriggerSequence();
				yield return gainSunFromCard(SunValue, ((AbilityBehaviour)this).Card);
				yield return ((AbilityBehaviour)this).LearnAbility(0.1f);
				Singleton<ViewManager>.Instance.Controller.LockState = (ViewLockState)0;
			}
		}

		public class SunBoost : AbilityBehaviour
		{
			public static Ability ability;

			public override Ability Ability => ability;

			private int SunValue
			{
				get
				{
					int result = 1;
					if (CardExtensions.GetExtendedPropertyAsInt(((Card)((AbilityBehaviour)this).Card).Info, "Sunmaker").HasValue)
					{
						result = CardExtensions.GetExtendedPropertyAsInt(((Card)((AbilityBehaviour)this).Card).Info, "Sunmaker").Value;
					}
					return result;
				}
			}

			public override bool RespondsToResolveOnBoard()
			{
				return ((AbilityBehaviour)this).Card.OnBoard;
			}

			public override IEnumerator OnResolveOnBoard()
			{
				yield return ((AbilityBehaviour)this).PreSuccessfulTriggerSequence();
				((Card)((AbilityBehaviour)this).Card).Anim.LightNegationEffect();
				Singleton<ViewManager>.Instance.SwitchToView((View)7, false, true);
				yield return gainSunFromCard(SunValue, ((AbilityBehaviour)this).Card);
				yield return ((AbilityBehaviour)this).LearnAbility(0.1f);
				Singleton<ViewManager>.Instance.Controller.LockState = (ViewLockState)0;
			}
		}

		[HarmonyPatch(typeof(PlayableCard), "CanPlay")]
		public class CanPlay_patch
		{
			[HarmonyPostfix]
			public static void Postfix(ref bool __result, ref PlayableCard __instance)
			{
				if (((Card)__instance).Info.GetSunCost() > 0)
				{
					int sunCost = ((Card)__instance).Info.GetSunCost();
					if (sunCost > Sun)
					{
						__result = false;
					}
				}
			}
		}

		[HarmonyPatch(typeof(HintsHandler), "OnNonplayableCardClicked")]
		public class CanPlayHint_patch
		{
			[HarmonyPrefix]
			public static bool Prefix(PlayableCard card, List<PlayableCard> cardsInHand)
			{
				if (SaveManager.SaveFile.IsPart2)
				{
					HintsHandler.OnGBCNonPlayableCardPressed(card);
					return false;
				}
				if (((Card)card).Info.GetSunCost() > Sun)
				{
					SayQuick("You dont have enough sun for that one");
					return false;
				}
				return true;
			}
		}

		[HarmonyPatch(typeof(PlayerHand))]
		public class paySun_patch
		{
			[HarmonyPostfix]
			[HarmonyPatch("SelectSlotForCard")]
			public static IEnumerator Postfix(IEnumerator enumerator, PlayerHand __instance, PlayableCard card)
			{
				if (((Card)card).Info.GetSunCost() > 0)
				{
					__instance.CardsInHand.ForEach(delegate(PlayableCard x)
					{
						((InteractableBase)x).SetEnabled(false);
					});
					yield return (object)new WaitWhile((Func<bool>)(() => __instance.ChoosingSlot));
					__instance.OnSelectSlotStartedForCard(card);
					if ((Object)(object)Singleton<RuleBookController>.Instance != (Object)null)
					{
						Singleton<RuleBookController>.Instance.SetShown(false, true);
					}
					Singleton<BoardManager>.Instance.CancelledSacrifice = false;
					__instance.choosingSlotCard = card;
					if ((Object)(object)card != (Object)null && (Object)(object)((Card)card).Anim != (Object)null)
					{
						((Card)card).Anim.SetSelectedToPlay(true);
					}
					Singleton<BoardManager>.Instance.ShowCardNearBoard(card, true);
					if ((Object)(object)Singleton<TurnManager>.Instance.SpecialSequencer != (Object)null)
					{
						yield return Singleton<TurnManager>.Instance.SpecialSequencer.CardSelectedFromHand(card);
					}
					bool cardWasPlayed = false;
					bool requiresSacrifices = ((Card)card).Info.BloodCost > 0;
					if (requiresSacrifices)
					{
						List<CardSlot> validSlots = Singleton<BoardManager>.Instance.PlayerSlotsCopy.FindAll((CardSlot x) => (Object)(object)x.Card != (Object)null);
						yield return Singleton<BoardManager>.Instance.ChooseSacrificesForCard(validSlots, card);
					}
					if (!Singleton<BoardManager>.Instance.CancelledSacrifice)
					{
						List<CardSlot> validSlots2 = Singleton<BoardManager>.Instance.PlayerSlotsCopy.FindAll((CardSlot x) => (Object)(object)x.Card == (Object)null);
						yield return Singleton<BoardManager>.Instance.ChooseSlot(validSlots2, !requiresSacrifices);
						CardSlot lastSelectedSlot = Singleton<BoardManager>.Instance.LastSelectedSlot;
						if ((Object)(object)lastSelectedSlot != (Object)null)
						{
							cardWasPlayed = true;
							((Card)card).Anim.SetSelectedToPlay(false);
							yield return __instance.PlayCardOnSlot(card, lastSelectedSlot);
							if (((Card)card).Info.BonesCost > 0)
							{
								yield return Singleton<ResourcesManager>.Instance.SpendBones(((Card)card).Info.BonesCost);
							}
							if (card.EnergyCost > 0)
							{
								yield return Singleton<ResourcesManager>.Instance.SpendEnergy(card.EnergyCost);
							}
							if (((Card)card).Info.GetSunCost() > 0 && !SaveManager.SaveFile.IsPart2)
							{
								int costToPay = ((Card)card).Info.GetSunCost();
								yield return extractSun(costToPay);
							}
						}
					}
					if (!cardWasPlayed)
					{
						Singleton<BoardManager>.Instance.ShowCardNearBoard(card, false);
					}
					__instance.choosingSlotCard = null;
					if ((Object)(object)card != (Object)null && (Object)(object)((Card)card).Anim != (Object)null)
					{
						((Card)card).Anim.SetSelectedToPlay(false);
					}
					__instance.CardsInHand.ForEach(delegate(PlayableCard x)
					{
						((InteractableBase)x).SetEnabled(true);
					});
				}
				else
				{
					yield return enumerator;
				}
			}
		}

		[HarmonyPatch(/*Could not decode attribute arguments.*/)]
		public class CardInfo_CostTier_Patch
		{
			[HarmonyPostfix]
			public static void Postfix(ref int __result, ref CardInfo __instance)
			{
				__result += Mathf.CeilToInt((float)__instance.GetSunCost() / 3f);
			}
		}

		[HarmonyPatch(/*Could not decode attribute arguments.*/)]
		public class Deck_CardCanBePlayedByTurn2WithHand
		{
			[HarmonyPostfix]
			public static void Postfix(ref CardInfo card, List<CardInfo> hand, ref bool __result, ref Deck __instance)
			{
				__result = __result && card.GetSunCost() <= 2;
			}
		}

		[HarmonyPatch(typeof(TurnManager), "DoUpkeepPhase")]
		public class TurnStart_patch
		{
			[HarmonyPostfix]
			public static void Postfix(ref bool playerUpkeep)
			{
				//IL_000f: Unknown result type (might be due to invalid IL or missing references)
				if (playerUpkeep && !AscensionSaveData.Data.ChallengeIsActive(noSunChallenge.challengeType))
				{
					Log.LogInfo((object)"Sun upkeep patch initialised");
					SunCounterCard.Anim.LightNegationEffect();
					Sun++;
					UpdateSunCounter();
				}
			}
		}

		[HarmonyPatch(typeof(GameFlowManager), "TransitionTo")]
		public class Transition_To_patch
		{
			[HarmonyPrefix]
			public static void Prefix()
			{
				Sun = 2;
			}
		}

		[HarmonyPatch(typeof(CardDrawPiles), "Initialize")]
		public class Initialise_patch
		{
			[HarmonyPostfix]
			public static void Postfix()
			{
				//IL_005b: Unknown result type (might be due to invalid IL or missing references)
				//IL_0082: Unknown result type (might be due to invalid IL or missing references)
				//IL_00a9: 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_00f0: Unknown result type (might be due to invalid IL or missing references)
				Log.LogInfo((object)"Sun counter patch initialised");
				SunCounterObject = Object.Instantiate<GameObject>(Singleton<CardSpawner>.Instance.playableCardPrefab);
				UpdateSunCounter();
				SunCounterCard.Anim.StrongNegationEffect();
				Vector3 val = default(Vector3);
				((Vector3)(ref val))..ctor(1.24f, 1.05f, 5.014f);
				SunCounterObject.transform.Translate(val);
				((Vector3)(ref val))..ctor(-2.82f, -0.6f, -5.63f);
				SunCounterObject.transform.Translate(val);
				Vector3 val2 = default(Vector3);
				((Vector3)(ref val2))..ctor(-90f, 0f, 0f);
				SunCounterObject.transform.Rotate(val2);
				Vector3 val3 = default(Vector3);
				((Vector3)(ref val3))..ctor(15f, -35f, 0f);
				SunCounterObject.transform.Rotate(val3);
				SunCounterObject.transform.localScale = new Vector3(1.3f, 1.3f, 1.3f);
			}
		}

		[HarmonyPatch(typeof(CardDrawPiles), "CleanUp")]
		public class Cleanup_patch
		{
			[HarmonyPostfix]
			public static void Postfix()
			{
				Log.LogInfo((object)"Sun counter patch clean up");
				if ((Object)(object)SunCounterObject != (Object)null)
				{
					SunCounterCard.Anim.StrongNegationEffect();
					Object.Destroy((Object)(object)SunCounterObject.gameObject);
				}
			}
		}

		public class SunCounterBackground : CardAppearanceBehaviour
		{
			public static Appearance CustomAppearance;

			public override void ApplyAppearance()
			{
				//IL_001d: Unknown result type (might be due to invalid IL or missing references)
				//IL_005e: Unknown result type (might be due to invalid IL or missing references)
				//IL_005f: Unknown result type (might be due to invalid IL or missing references)
				((CardAppearanceBehaviour)this).Card.RenderInfo.baseTextureOverride = (Texture)(object)findTexture("SunCounter");
				Color nameTextColor = default(Color);
				nameTextColor.a = 1f;
				nameTextColor.r = 1f;
				nameTextColor.g = 0.5f;
				nameTextColor.b = 0f;
				((CardAppearanceBehaviour)this).Card.RenderInfo.nameTextColor = nameTextColor;
				SunCounterCard = ((CardAppearanceBehaviour)this).Card;
			}
		}

		[HarmonyPatch(typeof(CardSingleChoicesSequencer), "GetCardbackTexture")]
		public class SunCostBack_patch
		{
			[HarmonyPostfix]
			public static void Postfix(ref Texture __result, CardChoice choice)
			{
				//IL_0002: Unknown result type (might be due to invalid IL or missing references)
				//IL_0007: Unknown result type (might be due to invalid IL or missing references)
				if (choice.resourceType == SunResource)
				{
					__result = (Texture)(object)findTexture("SunCostTrial");
				}
			}
		}

		[HarmonyPatch(typeof(Part1CardChoiceGenerator), "GenerateCostChoices")]
		public class CostChoice_patch
		{
			[HarmonyPostfix]
			public static void Postfix(ref List<CardChoice> __result, int randomSeed)
			{
				//IL_0004: Unknown result type (might be due to invalid IL or missing references)
				//IL_000a: Expected O, but got Unknown
				//IL_000b: Unknown result type (might be due to invalid IL or missing references)
				//IL_0010: Unknown result type (might be due to invalid IL or missing references)
				List<CardChoice> list = __result;
				CardChoice val = new CardChoice();
				val.resourceType = SunResource;
				val.resourceAmount = 1;
				list.Add(val);
				ShuffleChoice(list);
				while (list.Count > 3)
				{
					list.RemoveAt(SeededRandom.Range(0, list.Count, randomSeed++));
				}
				if (list[0] != val && list[1] != val && list[2] != val)
				{
					list[0] = val;
					ShuffleChoice(list);
				}
				__result = list;
			}
		}

		[HarmonyPatch(typeof(CardSingleChoicesSequencer))]
		public class SunCostCreateCard_patch
		{
			[HarmonyPostfix]
			[HarmonyPatch("CostChoiceChosen")]
			public static IEnumerator Postfix(IEnumerator enumerator, CardSingleChoicesSequencer __instance, SelectableCard card)
			{
				if (card.ChoiceInfo.resourceType == SunResource)
				{
					CardInfo cardInfo = GetRandomChoosablePlantCard(SaveManager.SaveFile.GetCurrentRandomSeed());
					((Card)card).SetInfo(cardInfo);
					((Card)card).SetFaceDown(false, false);
					((Card)card).SetInteractionEnabled(false);
					yield return __instance.TutorialTextSequence(card);
					((Card)card).SetCardbackToDefault();
					yield return __instance.WaitForCardToBeTaken(card);
				}
				else
				{
					yield return enumerator;
				}
			}
		}

		public const string PluginGuid = "zepht.inscryption.ZephtSun";

		private const string PluginName = "PvZSunbyZepht";

		private const string PluginVersion = "1.0.0";

		public static int Sun;

		public static Texture[] costDecals;

		public static readonly Appearance SunCounterApp = CardAppearanceBehaviourManager.Add("zepht.inscryption.ZephtSun", "SunCounterApp", typeof(SunCounterBackground)).Id;

		public static ResourceType SunResource = (ResourceType)78;

		public static Card SunCounterCard;

		public static CardInfo SunCounterCardInfo = ScriptableObject.CreateInstance<CardInfo>();

		public static GameObject SunCounterObject;

		internal static ManualLogSource Log;

		public static Random rng = new Random();

		public static AscensionChallengeInfo noSunChallenge;

		public static Dictionary<int, Texture> sunmakerIcons;

		public static Dictionary<int, Texture> pixelSunmakerIcons;

		public static Assembly _assembly;

		public static GameObject Particle;

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

		private void Awake()
		{
			//IL_0031: Unknown result type (might be due to invalid IL or missing references)
			//IL_0037: Expected O, but got Unknown
			Log = ((BaseUnityPlugin)this).Logger;
			Log.LogInfo((object)"Loaded PvZSunbyZepht!");
			Log.LogInfo((object)"Inside Awake");
			Harmony val = new Harmony("zepht.inscryption.ZephtSun");
			val.PatchAll();
			Log.LogInfo((object)"DonePatch");
			AddSigils();
			Log.LogInfo((object)"DoneSigils");
			AddCards();
			Log.LogInfo((object)"DoneCards");
			AddChallenges();
			Log.LogInfo((object)"DoneChallenges");
		}

		private void AddChallenges()
		{
			AddNoSunChallenge();
		}

		private void AddNoSunChallenge()
		{
			noSunChallenge = FullChallenge.op_Implicit(ChallengeManager.AddSpecific("zepht.inscryption.ZephtSun", "Night time", "You will no longer get passive sun falling from the sky.", 10, findTexture("ChallengeNight"), findTexture("ChallengeNightActive"), 2, 1));
		}

		private void AddCards()
		{
			//IL_0061: Unknown result type (might be due to invalid IL or missing references)
			//IL_0067: Expected I4, but got Unknown
			//IL_0088: Unknown result type (might be due to invalid IL or missing references)
			//IL_008e: Expected I4, but got Unknown
			Part1CardCostRender.UpdateCardCost += delegate(CardInfo card, List<Texture2D> costs)
			{
				int sunCost = card.GetSunCost();
				if (sunCost > 0)
				{
					costs.Add(findTexture("SunCost" + sunCost));
				}
			};
			Texture2D val = findTexture("ZA");
			string text = "zep_pvz";
			SunCounterCardInfo = CardManager.New(text, "suncounter", "Sun: ", 0, 0, ".");
			CardExtensions.AddAppearances(SunCounterCardInfo, (Appearance[])(object)new Appearance[1] { (Appearance)(int)SunCounterApp });
			SunCounterCardInfo.hideAttackAndHealth = true;
			string text2 = "ZombieArm";
			Ability[] array = (Ability[])(object)new Ability[1] { (Ability)(int)SunBoost.ability };
			Trait[] array2 = (Trait[])(object)new Trait[0];
			Tribe[] array3 = (Tribe[])(object)new Tribe[0];
			string text3 = null;
			string text4 = "leaflitter";
			CardInfo val2 = CardManager.New(text, "debugSun", "DebugSun", 1, 1, "what");
			CardExtensions.AddAppearances(val2, Array.Empty<Appearance>());
			CardExtensions.AddMetaCategories(val2, Array.Empty<CardMetaCategory>());
			val2.defaultEvolutionName = "Debuggest";
			CardExtensions.SetExtendedProperty(val2, "Sunmaker", (object)6);
			CardExtensions.SetPortrait(val2, findTexture(text2), (FilterMode?)null);
			CardExtensions.SetEmissivePortrait(val2, findTexture(text2 + "2"), (FilterMode?)null);
			CardExtensions.AddDecal(val2, (Texture[])(object)new Texture[1] { (Texture)val });
			CardExtensions.AddAbilities(val2, array);
			CardExtensions.AddTraits(val2, array2);
			if (text3 != null)
			{
				CardExtensions.SetEvolve(val2, text + "_" + text3, 1, (IEnumerable<CardModificationInfo>)null);
			}
			CardExtensions.SetTail(val2, text + "_" + text4, (IEnumerable<CardModificationInfo>)null);
			CardExtensions.SetIceCube(val2, text + "_" + text4, (IEnumerable<CardModificationInfo>)null);
			CardExtensions.AddTribes(val2, array3);
		}

		private void AddSigils()
		{
			AddSunmakerX();
			AddSunmaker1();
			AddSunmaker2();
			AddSunmaker3();
			AddSunKill();
			AddSunBoost();
		}

		private void AddSunmakerX()
		{
			//IL_015c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0161: Unknown result type (might be due to invalid IL or missing references)
			string text = "Sunmaker";
			string name = "SunMaker";
			string description = "At the end of the owner's turn, [creature] will produce X sun, if it belongs to the player. Some cards produce more sun than others.";
			string learntext = "Every little bit counts";
			Type typeFromHandle = typeof(SunmakerX);
			bool opponentUsable = false;
			bool flips = false;
			List<AbilityMetaCategory> categories = new List<AbilityMetaCategory>
			{
				(AbilityMetaCategory)0,
				(AbilityMetaCategory)1
			};
			sunmakerIcons = new Dictionary<int, Texture>
			{
				{
					0,
					(Texture)(object)findTexture("Sunmaker")
				},
				{
					1,
					(Texture)(object)findTexture("Sunmaker1")
				},
				{
					2,
					(Texture)(object)findTexture("Sunmaker2")
				},
				{
					3,
					(Texture)(object)findTexture("Sunmaker3")
				},
				{
					4,
					(Texture)(object)findTexture("Sunmaker4")
				},
				{
					5,
					(Texture)(object)findTexture("Sunmaker5")
				}
			};
			pixelSunmakerIcons = new Dictionary<int, Texture>
			{
				{
					0,
					(Texture)(object)findTexture("Sunmaker-p")
				},
				{
					1,
					(Texture)(object)findTexture("Sunmaker1-p")
				},
				{
					2,
					(Texture)(object)findTexture("Sunmaker2-p")
				},
				{
					3,
					(Texture)(object)findTexture("Sunmaker3-p")
				},
				{
					4,
					(Texture)(object)findTexture("Sunmaker4-p")
				},
				{
					5,
					(Texture)(object)findTexture("Sunmaker5-p")
				}
			};
			AbilityInfo val = MakeNewSigil(name, description, learntext, typeFromHandle, categories, opponentUsable, flips, (Texture)(object)findTexture(text), 0, stackable: false, findTexture(text + "-p"));
			SunmakerX.ability = val.ability;
		}

		private void AddSunmaker1()
		{
			//IL_0070: 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)
			string text = "Sunmaker1";
			string name = "SunMaker 1";
			string description = "At the end of the owner's turn, [creature] will produce 1 sun, if it belongs to the player.";
			string learntext = "Every little bit counts";
			Type typeFromHandle = typeof(Sunmaker1);
			bool opponentUsable = false;
			bool flips = false;
			List<AbilityMetaCategory> categories = new List<AbilityMetaCategory>
			{
				(AbilityMetaCategory)0,
				(AbilityMetaCategory)1
			};
			AbilityInfo val = MakeNewSigil(name, description, learntext, typeFromHandle, categories, opponentUsable, flips, (Texture)(object)findTexture(text), 0, stackable: false, findTexture(text + "-p"));
			Sunmaker1.ability = val.ability;
		}

		private void AddSunmaker2()
		{
			//IL_0068: 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)
			string text = "Sunmaker2";
			string name = "SunMaker 2";
			string description = "At the end of the owner's turn, [creature] will produce 2 sun, if it belongs to the player.";
			string learntext = "If only the moon was this useful";
			Type typeFromHandle = typeof(Sunmaker2);
			bool opponentUsable = false;
			bool flips = false;
			List<AbilityMetaCategory> categories = new List<AbilityMetaCategory> { (AbilityMetaCategory)0 };
			AbilityInfo val = MakeNewSigil(name, description, learntext, typeFromHandle, categories, opponentUsable, flips, (Texture)(object)findTexture(text), 0, stackable: false, findTexture(text + "-p"));
			Sunmaker2.ability = val.ability;
		}

		private void AddSunmaker3()
		{
			//IL_0068: 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)
			string text = "Sunmaker3";
			string name = "SunMaker 3";
			string description = "At the end of the owner's turn, [creature] will produce 3 sun, if it belongs to the player.";
			string learntext = "The power of the sun, in the palm of your hand";
			Type typeFromHandle = typeof(Sunmaker3);
			bool opponentUsable = false;
			bool flips = false;
			List<AbilityMetaCategory> categories = new List<AbilityMetaCategory> { (AbilityMetaCategory)0 };
			AbilityInfo val = MakeNewSigil(name, description, learntext, typeFromHandle, categories, opponentUsable, flips, (Texture)(object)findTexture(text), 0, stackable: false, findTexture(text + "-p"));
			Sunmaker3.ability = val.ability;
		}

		private void AddSunKill()
		{
			//IL_0068: 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)
			string text = "Sunkill";
			string name = "SunKill";
			string description = "When [creature] defeats another card, the other card will drop sun.";
			string learntext = "Recycle your enemies back into nutrients";
			Type typeFromHandle = typeof(SunKill);
			bool opponentUsable = false;
			bool flips = false;
			List<AbilityMetaCategory> categories = new List<AbilityMetaCategory> { (AbilityMetaCategory)0 };
			AbilityInfo val = MakeNewSigil(name, description, learntext, typeFromHandle, categories, opponentUsable, flips, (Texture)(object)findTexture(text), 0, stackable: false, findTexture(text + "-p"));
			SunKill.ability = val.ability;
		}

		private void AddSunBoost()
		{
			//IL_0068: 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)
			string text = "Sunboost";
			string name = "SunBoost";
			string description = "When [creature] is placed on the board, the owner will gain sun.";
			string learntext = "Wise use of emergency supplies.";
			Type typeFromHandle = typeof(SunBoost);
			bool opponentUsable = false;
			bool flips = false;
			List<AbilityMetaCategory> categories = new List<AbilityMetaCategory> { (AbilityMetaCategory)0 };
			AbilityInfo val = MakeNewSigil(name, description, learntext, typeFromHandle, categories, opponentUsable, flips, (Texture)(object)findTexture(text), 0, stackable: false, findTexture(text + "-p"));
			SunBoost.ability = val.ability;
		}

		private void Update()
		{
		}

		public static IEnumerator gainSunFromCard(int SunToGain, PlayableCard card)
		{
			for (int i = 0; i < SunToGain; i++)
			{
				((Card)card).Anim.LightNegationEffect();
				Sun++;
				UpdateSunCounter();
				SunCounterCard.Anim.LightNegationEffect();
				yield return (object)new WaitForSeconds(0.2f);
			}
		}

		public static IEnumerator extractSun(int SunToLose)
		{
			for (int i = 0; i < SunToLose; i++)
			{
				Sun--;
				UpdateSunCounter();
				SunCounterCard.Anim.LightNegationEffect();
				yield return (object)new WaitForSeconds(0.05f);
			}
		}

		public static void UpdateSunCounter()
		{
			PlayableCard component = SunCounterObject.GetComponent<PlayableCard>();
			SunCounterCardInfo.displayedName = "Sun: " + Sun;
			((Card)component).SetInfo(SunCounterCardInfo);
		}

		public static CardInfo GetRandomChoosablePlantCard(int randomSeed)
		{
			List<CardInfo> list = CardLoader.RemoveDeckSingletonsIfInDeck(ScriptableObjectLoader<CardInfo>.AllData.FindAll((CardInfo x) => x.metaCategories.Contains((CardMetaCategory)0) && x.GetSunCost() > 0));
			if (list.Count == 0)
			{
				return CardLoader.Clone(CardLoader.GetCardByName("zep_pvz_puffshroom"));
			}
			return CardLoader.Clone(list[SeededRandom.Range(0, list.Count, randomSeed)]);
		}

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

		public static Sprite findStatIconSprite(string name)
		{
			if (name == null)
			{
				return null;
			}
			return TextureHelper.GetImageAsSprite(name + (name.EndsWith(".png") ? "" : ".png"), (SpriteType)3, (FilterMode)0);
		}

		public static AbilityInfo MakeNewSigil(string name, string description, string learntext, Type behaviour, List<AbilityMetaCategory> categories, bool opponentUsable, bool flips, Texture tex = null, int powerLevel = 0, bool stackable = false, Texture2D pixelTex = null, bool isConduit = false, bool isActivated = false)
		{
			//IL_0091: Unknown result type (might be due to invalid IL or missing references)
			//IL_0097: Expected O, but got Unknown
			//IL_00a8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b2: Expected O, but got Unknown
			AbilityInfo val = AbilityManager.New("zepht.inscryption.ZephtSun", name, description, behaviour, (Texture)(((Object)(object)tex != (Object)null) ? ((object)tex) : ((object)findTexture("Spudow"))));
			val.powerLevel = powerLevel;
			val.canStack = stackable;
			val.opponentUsable = opponentUsable;
			val.flipYIfOpponent = flips;
			val.metaCategories = ((categories != null) ? categories : new List<AbilityMetaCategory>());
			val.conduit = isConduit;
			val.activated = isActivated;
			if ((Object)(object)pixelTex != (Object)null)
			{
				AbilityExtensions.SetPixelAbilityIcon(val, pixelTex, (FilterMode?)null);
			}
			List<Line> list = new List<Line>();
			Line val2 = new Line();
			val2.text = learntext;
			list.Add(val2);
			val.abilityLearnedDialogue = new LineSet(list);
			return val;
		}

		public static void MakeNewStarterDeck(string title, string sprName, string cardName1, string cardName2, string cardName3)
		{
			StarterDeckInfo val = ScriptableObject.CreateInstance<StarterDeckInfo>();
			val.title = title;
			val.iconSprite = TextureHelper.ConvertTexture(findTexture(sprName), (SpriteType)9, (FilterMode)0);
			val.cards = new List<CardInfo>
			{
				CardLoader.GetCardByName(cardName1),
				CardLoader.GetCardByName(cardName2),
				CardLoader.GetCardByName(cardName3)
			};
			StarterDeckManager.Add("zepht.inscryption.ZephtSun", val, 0);
		}

		private static void Say(string text)
		{
			((MonoBehaviour)Singleton<TextDisplayer>.Instance).StartCoroutine(Singleton<TextDisplayer>.Instance.ShowUntilInput(text, 0f, 0.5f, (Emotion)0, (LetterAnimation)0, (Speaker)0, (string[])null, true));
		}

		private static void SayQuick(string text)
		{
			((MonoBehaviour)Singleton<TextDisplayer>.Instance).StartCoroutine(Singleton<TextDisplayer>.Instance.ShowThenClear(text, 2f, 0f, (Emotion)0, (LetterAnimation)0, (Speaker)0, (string[])null));
		}

		public static void ShuffleChoice(List<CardChoice> list)
		{
			int num = list.Count;
			while (num > 1)
			{
				num--;
				int index = rng.Next(num + 1);
				CardChoice value = list[index];
				list[index] = list[num];
				list[num] = value;
			}
		}

		public static CardInfo GetRandomChoosableCardWithSunCost(int randomSeed)
		{
			List<CardInfo> list = CardLoader.GetUnlockedCards((CardMetaCategory)0, (CardTemple)0).FindAll((CardInfo x) => CardExtensions.GetExtendedProperty(x, "SunCost") != null);
			if (list.Count == 0)
			{
				return null;
			}
			return CardLoader.Clone(list[SeededRandom.Range(0, list.Count, randomSeed)]);
		}
	}
	public static class PluginInfo
	{
		public const string PLUGIN_GUID = "ZephtSun";

		public const string PLUGIN_NAME = "ZephtSun";

		public const string PLUGIN_VERSION = "1.0.0";
	}
}