Decompiled source of P03 Sigilarium v1.0.9
Infiniscryption.P03SigilLibrary.dll
Decompiled 3 weeks ago
The result has been truncated due to the large size, download it to view full contents!
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 DigitalRuby.LightningBolt; using DiskCardGame; using GBC; using HarmonyLib; using Infiniscryption.P03SigilLibrary.Helpers; using Infiniscryption.P03SigilLibrary.Sigils; using Infiniscryption.Spells.Patchers; using Infiniscryption.Spells.Sigils; using InscryptionAPI.Card; using InscryptionAPI.Guid; using InscryptionAPI.Helpers; using InscryptionAPI.Helpers.Extensions; using InscryptionAPI.Resource; using InscryptionAPI.Saves; using InscryptionAPI.Slots; using InscryptionAPI.Sound; using InscryptionAPI.Triggers; using InscryptionCommunityPatch.Card; using Pixelplacement; using Sirenix.Serialization.Utilities; using Sirenix.Utilities; using UnityEngine; using UnityEngine.SceneManagement; [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("Infiniscryption.P03SigilLibrary")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyDescription("P03 Sigil Library")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("Infiniscryption.P03SigilLibrary")] [assembly: AssemblyTitle("Infiniscryption.P03SigilLibrary")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] namespace Infiniscryption.P03KayceeRun.Cards { public class ConduitSpawnUrchin : ConduitSpawn { public override Ability Ability => AbilityID; public static Ability AbilityID { get; private set; } static ConduitSpawnUrchin() { //IL_0082: Unknown result type (might be due to invalid IL or missing references) AbilityInfo val = ScriptableObject.CreateInstance<AbilityInfo>(); val.rulebookName = "Urchin Spawn Conduit"; val.rulebookDescription = "Empty spaces within a circuit completed by [creature] spawn Urchin Cells at the end of the owner's turn."; val.canStack = true; val.powerLevel = 3; val.opponentUsable = false; val.passive = false; val.conduit = true; val.metaCategories = new List<AbilityMetaCategory> { (AbilityMetaCategory)2 }; AbilityID = AbilityManager.Add("zorro.inscryption.infiniscryption.p03sigillibrary", val, typeof(ConduitSpawnUrchin), (Texture)(object)TextureHelper.GetImageAsTexture("ability_conduit_urchin.png", typeof(ConduitSpawnUrchin).Assembly, (FilterMode)0)).Id; } public override string GetSpawnCardId() { return "P03SIG_UrchinCell"; } } } namespace Infiniscryption.P03SigilLibrary { public static class AbilityDocumentation { public class AbilityDocInfo { public AbilityInfo info { get; set; } public string imageB64 { get; set; } public Type behaviour { get; set; } } public const string ROOT_PATH = "https://github.com/Cosmiscient/P03KayceeMod-Main/blob/main/P03SigilLibrary/assets/"; private static List<AbilityDocInfo> AllAbilities = new List<AbilityDocInfo>(); public static void CaptureAbilityInfoForDocumentation(string guid, AbilityInfo info, Type behavior, Texture tex) { if (guid.Equals("zorro.inscryption.infiniscryption.p03sigillibrary")) { try { AllAbilities.Add(new AbilityDocInfo { info = info, behaviour = behavior, imageB64 = Convert.ToBase64String(ImageConversion.EncodeToPNG((Texture2D)(object)((tex is Texture2D) ? tex : null))) }); } catch { AllAbilities.Add(new AbilityDocInfo { info = info, behaviour = behavior, imageB64 = Convert.ToBase64String(ImageConversion.EncodeToPNG(TextureHelper.DuplicateTexture((Texture2D)(object)((tex is Texture2D) ? tex : null)))) }); } } } internal static void GenerateDocumentation() { //IL_0058: Unknown result type (might be due to invalid IL or missing references) string text = "|Icon|Name|Rulebook Description|\n"; text += "|---|---|---|---|\n"; foreach (AbilityDocInfo item in AllAbilities.OrderBy((AbilityDocInfo adi) => adi.info.rulebookName)) { FullAbility val = AbilityExtensions.AbilityByID((IEnumerable<FullAbility>)AbilityManager.AllAbilities, item.info.ability); text = text + "|[[https://github.com/Cosmiscient/P03KayceeMod-Main/blob/main/P03SigilLibrary/assets/" + ((Object)val.Texture).name + ".png]]"; text = text + "|" + item.info.rulebookName; text = text + "|" + item.info.rulebookDescription; text += "|\n"; } if (!Directory.Exists("cardexports")) { Directory.CreateDirectory("cardexports"); } File.WriteAllText("cardexports/sigil_library.md", text); } } [HarmonyPatch] internal static class BugFixes { [HarmonyPatch(typeof(ItemsUtil), "GetRandomUnlockedConsumable")] private static bool AccountForMultipleActs(int randomSeed, ref ConsumableItemData __result) { //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) AbilityMetaCategory cat = (AbilityMetaCategory)((!SaveManager.SaveFile.IsPart1) ? (SaveManager.SaveFile.IsPart3 ? 2 : (SaveManager.SaveFile.IsGrimora ? 5 : 6)) : 0); List<ConsumableItemData> list = (((int)cat == 0) ? ItemsUtil.GetUnlockedConsumables() : new List<ConsumableItemData>(ItemsUtil.AllConsumables)); if (list.Any((ConsumableItemData cid) => !cid.notRandomlyGiven)) { list.RemoveAll((ConsumableItemData cid) => cid.notRandomlyGiven); } if (list.Any((ConsumableItemData cid) => cid.rulebookCategory == cat)) { list.RemoveAll((ConsumableItemData cid) => cid.rulebookCategory != cat); } __result = list[SeededRandom.Range(0, list.Count, randomSeed)]; return false; } [HarmonyPatch(typeof(PlayableCard), "AddTemporaryMod")] [HarmonyPrefix] [HarmonyPriority(700)] private static void ProperlyRemoveSingletonTempMods(PlayableCard __instance, CardModificationInfo mod) { //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_006b: Unknown result type (might be due to invalid IL or missing references) //IL_0074: Unknown result type (might be due to invalid IL or missing references) if (string.IsNullOrEmpty(mod.singletonId)) { return; } CardModificationInfo val = __instance.temporaryMods.Find((CardModificationInfo x) => string.Equals(x.singletonId, mod.singletonId)); if (val == null) { return; } __instance.temporaryMods.Remove(val); foreach (Ability ability in val.abilities) { __instance.TriggerHandler.RemoveAbility(ability); } } [HarmonyPatch(typeof(CardDisplayer3D), "DisplayInfo")] [HarmonyPrefix] private static void AlwaysClearThePrefabPortrait(CardDisplayer3D __instance, PlayableCard playableCard) { if (!((Object)(object)playableCard != (Object)null)) { return; } CardInfo info = ((CardDisplayer)__instance).info; if (((info != null) ? new bool?(info.HasAbility((Ability)61)) : null).GetValueOrDefault(false) && ((Object)(object)((CardDisplayer)__instance).info.animatedPortrait != (Object)null || (Object)(object)((CardDisplayer)__instance).info.evolveParams?.evolution?.animatedPortrait != (Object)null)) { if ((Object)(object)__instance.instantiatedPortraitObj != (Object)null) { Object.Destroy((Object)(object)__instance.instantiatedPortraitObj); } __instance.portraitPrefab = null; } } [HarmonyPatch(typeof(Card), "SetInfo")] [HarmonyPrefix] private static void RemoveApperanceBehavioursBeforeSettingInfo(Card __instance, CardInfo info) { //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_004e: 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_011c: Expected O, but got Unknown if (!((Object)(object)__instance.Info != (Object)null) || ((Object)__instance.Info).name.Equals(((Object)info).name)) { return; } foreach (Appearance item2 in __instance.Info.appearanceBehaviour) { Appearance current = item2; Type type = CustomType.GetType("DiskCardGame", ((object)(Appearance)(ref current)).ToString()); Component component = ((Component)__instance).gameObject.GetComponent(type); if ((Object)(object)component != (Object)null) { CardAppearanceBehaviour val = (CardAppearanceBehaviour)(object)((component is CardAppearanceBehaviour) ? component : null); if (val != null) { val.ResetAppearance(); } Object.DestroyImmediate((Object)(object)component); } } CardAnimationController anim = __instance.Anim; DiskCardAnimationController val2 = (DiskCardAnimationController)(object)((anim is DiskCardAnimationController) ? anim : null); if (val2 != null && (Object)(object)val2.holoPortraitParent != (Object)null) { List<Transform> list = new List<Transform>(); foreach (Transform item3 in val2.holoPortraitParent) { Transform item = item3; list.Add(item); } foreach (Transform item4 in list) { Object.DestroyImmediate((Object)(object)((Component)item4).gameObject); } ((Component)val2.holoPortraitParent).gameObject.SetActive(false); } CardRenderCamera instance = Singleton<CardRenderCamera>.Instance; if (instance != null) { instance.StopLiveRenderCard(__instance.StatsLayer); } } [HarmonyPatch(typeof(LifeManager), "ShowDamageSequence")] [HarmonyPostfix] private static IEnumerator ShowDamageSequenceSkipIfLifeLossConditionMet(IEnumerator sequence) { if (!Singleton<TurnManager>.Instance.LifeLossConditionsMet()) { yield return sequence; } } [HarmonyPatch(typeof(CardAbilityIcons), "SetIconFlipped")] [HarmonyPostfix] private static void FlipLatchedAbility(ref CardAbilityIcons __instance, Ability ability, bool flipped) { //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)__instance.latchIcon != (Object)null && __instance.latchIcon.Ability == ability) { __instance.latchIcon.SetFlippedX(flipped); } } [HarmonyPatch(typeof(CombatPhaseManager), "SlotAttackSlot")] [HarmonyPrefix] [HarmonyBefore(new string[] { "ATS" })] private static bool StopSequenceIfAttackerIsNull(CardSlot attackingSlot) { return (Object)(object)attackingSlot != (Object)null; } [HarmonyPatch(typeof(PlayableCard), "GetPassiveAttackBuffs")] [HarmonyPostfix] private static void GemifyBuffWithTempMods(PlayableCard __instance, ref int __result) { if (!CardExtensions.IsGemified(__instance) || ((Card)__instance).Info.Gemified) { return; } if (__instance.OpponentCard) { OpponentGemsManager instance = Singleton<OpponentGemsManager>.Instance; if (((instance != null) ? new bool?(instance.HasGem((GemType)1)) : null).GetValueOrDefault()) { __result++; } } else { ResourcesManager instance2 = Singleton<ResourcesManager>.Instance; if (((instance2 != null) ? new bool?(instance2.HasGem((GemType)1)) : null).GetValueOrDefault()) { __result++; } } } [HarmonyPatch(typeof(PlayableCard), "GetPassiveHealthBuffs")] [HarmonyPostfix] private static void GemifyHealthBuffWithTempMods(PlayableCard __instance, ref int __result) { if (!CardExtensions.IsGemified(__instance) || ((Card)__instance).Info.Gemified) { return; } if (__instance.OpponentCard) { OpponentGemsManager instance = Singleton<OpponentGemsManager>.Instance; if (((instance != null) ? new bool?(instance.HasGem((GemType)0)) : null).GetValueOrDefault()) { __result += 2; } } else { ResourcesManager instance2 = Singleton<ResourcesManager>.Instance; if (((instance2 != null) ? new bool?(instance2.HasGem((GemType)0)) : null).GetValueOrDefault()) { __result += 2; } } } [HarmonyPatch(typeof(RenderStatsLayer), "RenderCard")] [HarmonyPrefix] private static void AllowGemifyToWorkWithTempMods(ref RenderStatsLayer __instance, CardRenderInfo info) { //IL_0115: 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_0136: Unknown result type (might be due to invalid IL or missing references) //IL_013b: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Unknown result type (might be due to invalid IL or missing references) //IL_00b6: Unknown result type (might be due to invalid IL or missing references) //IL_00f0: Unknown result type (might be due to invalid IL or missing references) //IL_00f5: Unknown result type (might be due to invalid IL or missing references) RenderStatsLayer obj = __instance; DiskRenderStatsLayer val = (DiskRenderStatsLayer)(object)((obj is DiskRenderStatsLayer) ? obj : null); if (val == null) { return; } PlayableCard playableCard = __instance.PlayableCard; if ((Object)(object)playableCard == (Object)null || !CardExtensions.IsGemified(playableCard)) { return; } val.gemSquares.ForEach(delegate(GameObject o) { o.SetActive(true); }); if (playableCard.OpponentCard) { OpponentGemsManager instance = Singleton<OpponentGemsManager>.Instance; if (((instance != null) ? new bool?(instance.HasGem((GemType)1)) : null).GetValueOrDefault()) { info.attackTextColor = GameColors.Instance.gold; } OpponentGemsManager instance2 = Singleton<OpponentGemsManager>.Instance; if (((instance2 != null) ? new bool?(instance2.HasGem((GemType)0)) : null).GetValueOrDefault()) { info.attackTextColor = GameColors.Instance.brightLimeGreen; } } else { if (Singleton<ResourcesManager>.Instance.HasGem((GemType)1)) { info.attackTextColor = GameColors.Instance.gold; } if (Singleton<ResourcesManager>.Instance.HasGem((GemType)0)) { info.attackTextColor = GameColors.Instance.brightLimeGreen; } } } [HarmonyPatch(typeof(BoardStateEvaluator), "EvaluateBoardState")] [HarmonyPostfix] private static void FixCellEvaluation(BoardState state, ref int __result) { if (!SaveFile.IsAscension) { return; } foreach (SlotState opponentSlot in state.opponentSlots) { if (opponentSlot.card != null && opponentSlot.card.info.HasCellAbility()) { float num = (float)(state.opponentSlots.Count - 1) / 2f; float num2 = Mathf.Abs(num - (float)state.opponentSlots.IndexOf(opponentSlot)); __result -= 2 * Mathf.RoundToInt(num - num2); } } } } internal static class Cards { static Cards() { //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0074: Expected I4, but got Unknown //IL_00e1: Unknown result type (might be due to invalid IL or missing references) //IL_00e7: Expected I4, but got Unknown //IL_0154: Unknown result type (might be due to invalid IL or missing references) //IL_015a: Expected I4, but got Unknown //IL_01c7: Unknown result type (might be due to invalid IL or missing references) //IL_01cd: Expected I4, but got Unknown //IL_023a: Unknown result type (might be due to invalid IL or missing references) //IL_0240: Expected I4, but got Unknown //IL_02ad: Unknown result type (might be due to invalid IL or missing references) //IL_02b3: Expected I4, but got Unknown //IL_0433: Unknown result type (might be due to invalid IL or missing references) //IL_0439: Expected I4, but got Unknown CardInfo obj = CardExtensions.SetPortrait(CardManager.New("P03SIG", "UrchinCell", "Urch1n Cell", 0, 1, (string)null), TextureHelper.GetImageAsTexture("portrait_urchin_cell.png", typeof(Cards).Assembly, (FilterMode)0), (FilterMode?)null); int? num = 2; CardExtensions.AddAbilities(CardExtensions.SetCardTemple(CardExtensions.SetCost(obj, (int?)0, (int?)0, num, (List<GemType>)null), (CardTemple)2), (Ability[])(object)new Ability[2] { (Ability)15, (Ability)(int)CellDeSubmerge.AbilityID }); CardInfo obj2 = CardExtensions.SetPortrait(CardManager.New("P03SIG", "CHARGE", "Charge!", 0, 0, (string)null), TextureHelper.GetImageAsTexture("portrait_charge.png", typeof(Cards).Assembly, (FilterMode)0), (FilterMode?)null); num = 0; CardExtensions.AddAbilities(CardHelpers.SetInstaGlobalSpell(CardExtensions.SetCost(obj2, (int?)0, (int?)0, num, (List<GemType>)null)), (Ability[])(object)new Ability[1] { (Ability)(int)RefillBattery.AbilityID }); CardInfo obj3 = CardExtensions.SetPortrait(CardManager.New("P03SIG", "FORCED_UPGRADE", "Upgrade!", 0, 0, (string)null), TextureHelper.GetImageAsTexture("portrait_forced_upgrade.png", typeof(Cards).Assembly, (FilterMode)0), (FilterMode?)null); num = 2; CardExtensions.AddAbilities(CardHelpers.SetTargetedSpell(CardExtensions.SetCost(obj3, (int?)0, (int?)0, num, (List<GemType>)null)), (Ability[])(object)new Ability[1] { (Ability)(int)ForcedUpgrade.AbilityID }); CardInfo obj4 = CardExtensions.SetPortrait(CardManager.New("P03SIG", "ZAP", "Zap!", 0, 0, (string)null), TextureHelper.GetImageAsTexture("portrait_zap.png", typeof(Cards).Assembly, (FilterMode)0), (FilterMode?)null); num = 2; CardExtensions.AddAbilities(CardHelpers.SetTargetedSpell(CardExtensions.SetCost(obj4, (int?)0, (int?)0, num, (List<GemType>)null)), (Ability[])(object)new Ability[1] { (Ability)(int)Zap.AbilityID }); CardInfo obj5 = CardExtensions.SetPortrait(CardManager.New("P03SIG", "BLAST", "Blast!", 0, 0, (string)null), TextureHelper.GetImageAsTexture("portrait_blast.png", typeof(Cards).Assembly, (FilterMode)0), (FilterMode?)null); num = 2; CardExtensions.AddAbilities(CardHelpers.SetTargetedSpell(CardExtensions.SetCost(obj5, (int?)0, (int?)0, num, (List<GemType>)null)), (Ability[])(object)new Ability[1] { (Ability)(int)CatchFire.AbilityID }); CardInfo obj6 = CardExtensions.SetPortrait(CardManager.New("P03SIG", "DEFEND", "Defend!", 0, 0, (string)null), TextureHelper.GetImageAsTexture("portrait_defend.png", typeof(Cards).Assembly, (FilterMode)0), (FilterMode?)null); num = 2; CardExtensions.AddAbilities(CardHelpers.SetTargetedSpell(CardExtensions.SetCost(obj6, (int?)0, (int?)0, num, (List<GemType>)null)), (Ability[])(object)new Ability[1] { (Ability)(int)GainShield.AbilityID }); CardInfo obj7 = CardExtensions.SetPortrait(CardManager.New("P03SIG", "EMPTY_PILE_OF_SCRAP", "Junk", 0, 1, (string)null), TextureHelper.GetImageAsTexture("portrait_scrappile.png", typeof(Cards).Assembly, (FilterMode)0), (FilterMode?)null); num = 1; CardExtensions.SetCardTemple(CardExtensions.SetCost(obj7, (int?)0, (int?)0, num, (List<GemType>)null), (CardTemple)2); CardInfo obj8 = CardExtensions.SetPixelPortrait(CardExtensions.SetPortrait(CardManager.New("P03SIG", "Salmon", "S4LM0N", 0, 1, (string)null), TextureHelper.GetImageAsTexture("portrait_salmon.png", typeof(Cards).Assembly, (FilterMode)0), (FilterMode?)null), TextureHelper.GetImageAsTexture("pixelportrait_salmon.png", typeof(Cards).Assembly, (FilterMode)0), (FilterMode?)null); num = 1; CardExtensions.SetEvolve(CardExtensions.SetCardTemple(CardExtensions.SetCost(obj8, (int?)0, (int?)0, num, (List<GemType>)null), (CardTemple)2), "Angler_Fish_More", 1, (IEnumerable<CardModificationInfo>)null); CardExtensions.SetEvolve(CardExtensions.CardByName((IEnumerable<CardInfo>)CardManager.BaseGameCards, "Angler_Fish_More"), "Angler_Fish_Good", 1, (IEnumerable<CardModificationInfo>)null); CardInfo obj9 = CardExtensions.SetPortrait(CardManager.New("P03SIG", "SEED", "Seed", 0, 1, (string)null), TextureHelper.GetImageAsTexture("portrait_seed.png", typeof(Cards).Assembly, (FilterMode)0), (FilterMode?)null); num = 1; CardExtensions.AddSpecialAbilities(CardExtensions.SetCardTemple(CardExtensions.SetCost(obj9, (int?)0, (int?)0, num, (List<GemType>)null), (CardTemple)2), (SpecialTriggeredAbility[])(object)new SpecialTriggeredAbility[1] { (SpecialTriggeredAbility)(int)SeedBehaviour.AbilityID }); CardManager.ModifyCardList += delegate(List<CardInfo> cards) { //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Expected I4, but got Unknown //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Expected I4, but got Unknown //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Expected I4, but got Unknown //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Expected I4, but got Unknown CardExtensions.AddMetaCategories(CardExtensions.CardByName((IEnumerable<CardInfo>)cards, "CXformerWolf"), (CardMetaCategory[])(object)new CardMetaCategory[1] { (CardMetaCategory)(int)SummonFamiliar.BeastFamiliars }); CardExtensions.AddMetaCategories(CardExtensions.CardByName((IEnumerable<CardInfo>)cards, "CXformerElk"), (CardMetaCategory[])(object)new CardMetaCategory[1] { (CardMetaCategory)(int)SummonFamiliar.BeastFamiliars }); CardExtensions.AddMetaCategories(CardExtensions.CardByName((IEnumerable<CardInfo>)cards, "CXformerRaven"), (CardMetaCategory[])(object)new CardMetaCategory[1] { (CardMetaCategory)(int)SummonFamiliar.BeastFamiliars }); CardExtensions.AddMetaCategories(CardExtensions.CardByName((IEnumerable<CardInfo>)cards, "CXformerAdder"), (CardMetaCategory[])(object)new CardMetaCategory[1] { (CardMetaCategory)(int)SummonFamiliar.BeastFamiliars }); return cards; }; } } [BepInPlugin("zorro.inscryption.infiniscryption.p03sigillibrary", "Infiniscryption P03 in Kaycee's Mod - Sigil Library", "1.0")] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] public class P03SigilLibraryPlugin : BaseUnityPlugin { public const string PluginGuid = "zorro.inscryption.infiniscryption.p03sigillibrary"; public const string PluginName = "Infiniscryption P03 in Kaycee's Mod - Sigil Library"; public const string PluginVersion = "1.0"; public const string CardPrefix = "P03SIG"; internal static P03SigilLibraryPlugin Instance; internal static ManualLogSource Log; internal static bool Initialized; public static int RandomSeed { get { int num = ((AscensionSaveData.Data != null) ? AscensionSaveData.Data.currentRunSeed : 0); try { int num2 = num; TurnManager instance = Singleton<TurnManager>.Instance; num = num2 + 10 * ((instance == null) ? 1 : instance.TurnNumber); int num3 = num; LifeManager instance2 = Singleton<LifeManager>.Instance; num = num3 + 100 * ((instance2 == null) ? 1 : instance2.OpponentDamage); int num4 = num; LifeManager instance3 = Singleton<LifeManager>.Instance; num = num4 + 1000 * ((instance3 == null) ? 1 : instance3.PlayerDamage); int num5 = num; TurnManager instance4 = Singleton<TurnManager>.Instance; num = num5 + ((instance4 == null || instance4.IsPlayerTurn) ? 55 : 121); if (Part3SaveData.Data != null && Part3SaveData.Data.deck != null && Part3SaveData.Data.deck.cardIdModInfos != null) { num += 10000 * Part3SaveData.Data.deck.cardIdModInfos.Select((KeyValuePair<string, List<CardModificationInfo>> kvp) => (kvp.Value?.Count).GetValueOrDefault(0)).Sum(); } num += ((Part3SaveData.Data != null && Part3SaveData.Data.playerPos != null) ? Part3SaveData.Data.playerPos.gridX : 0); num += ((Part3SaveData.Data != null && Part3SaveData.Data.playerPos != null) ? (100000 * Part3SaveData.Data.playerPos.gridY) : 0); int num6 = num; BoardManager instance5 = Singleton<BoardManager>.Instance; num = num6 + 11111 * ((instance5 != null) ? instance5.PlayerSlotsCopy[0].Index : 2); return num; } catch { return num; } } } private void Awake() { //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Expected O, but got Unknown //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_0074: Expected O, but got Unknown Instance = this; Log = ((BaseUnityPlugin)this).Logger; Harmony val = new Harmony("zorro.inscryption.infiniscryption.p03sigillibrary"); MethodInfo method = typeof(AbilityManager).GetMethod("Add", BindingFlags.Static | BindingFlags.Public); MethodInfo method2 = typeof(AbilityDocumentation).GetMethod("CaptureAbilityInfoForDocumentation", BindingFlags.Static | BindingFlags.Public); ((BaseUnityPlugin)this).Logger.LogDebug((object)$"Deck editor fixer: Target Method {method}, Patch method {method2}"); val.Patch((MethodBase)method, new HarmonyMethod(method2), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); val.PatchAll(); Type[] types = typeof(P03SigilLibraryPlugin).Assembly.GetTypes(); foreach (Type type in types) { try { RuntimeHelpers.RunClassConstructor(type.TypeHandle); } catch (TypeLoadException ex) { Log.LogWarning((object)"Failed to force load static constructor!"); Log.LogWarning((object)ex); } } Initialized = true; AbilityDocumentation.GenerateDocumentation(); ((BaseUnityPlugin)this).Logger.LogInfo((object)"Plugin Infiniscryption P03 in Kaycee's Mod - Sigil Library is loaded and ready for action!"); } private void OnDestroy() { AudioHelper.FlushAudioClipCache(); AssetBundleManager.CleanUp(); } public void OnSceneLoaded(Scene scene, LoadSceneMode mode) { CardManager.SyncCardList(); AbilityManager.SyncAbilityList(); } } } namespace Infiniscryption.P03SigilLibrary.Sigils { [HarmonyPatch] public static class AbilityIconBehaviours { public const string CELL_INVERSE = "InverseCell"; public const string ORANGE_CELL = "FromOrange"; public const string GREEN_CELL = "FromGreen"; public const string BLUE_CELL = "FromBlue"; public const string GEM_CELL = "FromGem"; public const string ORANGE_CELL_INVERSE = "FromOrangeInverse"; public const string GREEN_CELL_INVERSE = "FromEmeraldInverse"; public const string BLUE_CELL_INVERSE = "FromSapphireInverse"; public const string GEM_CELL_INVERSE = "FromGemInverse"; public const string ACTIVE_WHEN_FUELED = "ActiveWhenFueled"; private static readonly List<Appearance> GemReRenderAppearances = new List<Appearance>(); internal static readonly HashSet<string> DynamicAbilityCardModIds = new HashSet<string>(); private static Ability[] _gemReRenderAbilities; private static Ability[] GemReRenderAbilities { get { if (_gemReRenderAbilities == null) { _gemReRenderAbilities = (from ai in AbilityManager.AllAbilityInfos where ai.IsGemReRender() select ai.ability).ToArray(); } return _gemReRenderAbilities; } } public static void AddGemReRenderAppearance(Appearance id) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) GemReRenderAppearances.Add(id); } public static bool IsGemReRender(this AbilityInfo info) { return AbilityExtensions.GetExtendedPropertyAsBool(info, "FromOrange").GetValueOrDefault() || AbilityExtensions.GetExtendedPropertyAsBool(info, "FromGreen").GetValueOrDefault() || AbilityExtensions.GetExtendedPropertyAsBool(info, "FromBlue").GetValueOrDefault() || AbilityExtensions.GetExtendedPropertyAsBool(info, "FromGem").GetValueOrDefault() || AbilityExtensions.GetExtendedPropertyAsBool(info, "FromOrangeInverse").GetValueOrDefault() || AbilityExtensions.GetExtendedPropertyAsBool(info, "FromEmeraldInverse").GetValueOrDefault() || AbilityExtensions.GetExtendedPropertyAsBool(info, "FromSapphireInverse").GetValueOrDefault() || AbilityExtensions.GetExtendedPropertyAsBool(info, "FromGemInverse").GetValueOrDefault(); } [HarmonyPatch(typeof(CardAbilityIcons), "SetColorOfDefaultIcons")] [HarmonyPostfix] private static void HandleAllColorationOfAbilities(ref CardAbilityIcons __instance, Color color, bool inConduitCircuit) { //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_00ac: Unknown result type (might be due to invalid IL or missing references) //IL_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_00f2: Unknown result type (might be due to invalid IL or missing references) //IL_00d2: Unknown result type (might be due to invalid IL or missing references) //IL_00cd: Unknown result type (might be due to invalid IL or missing references) if (!SaveManager.SaveFile.IsPart3) { return; } List<GameObject> defaultIconGroups = __instance.defaultIconGroups; foreach (GameObject item in defaultIconGroups) { if (!item.activeSelf) { continue; } AbilityIconInteractable[] componentsInChildren = item.GetComponentsInChildren<AbilityIconInteractable>(); foreach (AbilityIconInteractable val in componentsInChildren) { AbilityInfo info = AbilitiesUtil.GetInfo(val.Ability); if (info.activated) { val.SetColor(Color.white); } else if (AbilityExtensions.GetExtendedPropertyAsBool(info, "InverseCell").GetValueOrDefault()) { val.SetColor(inConduitCircuit ? info.colorOverride : color); } else if (info.conduitCell) { val.SetColor((!inConduitCircuit) ? info.colorOverride : color); } else if (info.hasColorOverride) { val.SetColor(info.colorOverride); } } } } [HarmonyPatch(typeof(CardDisplayer3D), "DisplayAbilityIcons")] [HarmonyPostfix] private static void RecolorGemIcons(CardDisplayer3D __instance, PlayableCard playableCard, CardRenderInfo renderInfo) { //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_0094: Unknown result type (might be due to invalid IL or missing references) //IL_00df: Unknown result type (might be due to invalid IL or missing references) //IL_00d6: Unknown result type (might be due to invalid IL or missing references) //IL_0121: Unknown result type (might be due to invalid IL or missing references) //IL_0118: Unknown result type (might be due to invalid IL or missing references) //IL_0163: Unknown result type (might be due to invalid IL or missing references) //IL_015a: Unknown result type (might be due to invalid IL or missing references) //IL_01a5: Unknown result type (might be due to invalid IL or missing references) //IL_019c: Unknown result type (might be due to invalid IL or missing references) //IL_01e7: Unknown result type (might be due to invalid IL or missing references) //IL_01de: Unknown result type (might be due to invalid IL or missing references) //IL_0240: Unknown result type (might be due to invalid IL or missing references) //IL_0237: Unknown result type (might be due to invalid IL or missing references) if (!SaveManager.SaveFile.IsPart3) { return; } List<GameObject> defaultIconGroups = __instance.AbilityIcons.defaultIconGroups; foreach (GameObject item in defaultIconGroups) { if (!item.activeSelf) { continue; } AbilityIconInteractable[] componentsInChildren = item.GetComponentsInChildren<AbilityIconInteractable>(); foreach (AbilityIconInteractable val in componentsInChildren) { AbilityInfo info = AbilitiesUtil.GetInfo(val.Ability); if (AbilityExtensions.GetExtendedPropertyAsBool(info, "FromGreen").GetValueOrDefault()) { val.SetColor((!playableCard.EligibleForGemBonus((GemType)0)) ? info.colorOverride : renderInfo.defaultAbilityColor); } else if (AbilityExtensions.GetExtendedPropertyAsBool(info, "FromOrange").GetValueOrDefault()) { val.SetColor((!playableCard.EligibleForGemBonus((GemType)1)) ? info.colorOverride : renderInfo.defaultAbilityColor); } else if (AbilityExtensions.GetExtendedPropertyAsBool(info, "FromBlue").GetValueOrDefault()) { val.SetColor((!playableCard.EligibleForGemBonus((GemType)2)) ? info.colorOverride : renderInfo.defaultAbilityColor); } else if (AbilityExtensions.GetExtendedPropertyAsBool(info, "FromEmeraldInverse").GetValueOrDefault()) { val.SetColor(playableCard.EligibleForGemBonus((GemType)0) ? info.colorOverride : renderInfo.defaultAbilityColor); } else if (AbilityExtensions.GetExtendedPropertyAsBool(info, "FromOrangeInverse").GetValueOrDefault()) { val.SetColor(playableCard.EligibleForGemBonus((GemType)1) ? info.colorOverride : renderInfo.defaultAbilityColor); } else if (AbilityExtensions.GetExtendedPropertyAsBool(info, "FromSapphireInverse").GetValueOrDefault()) { val.SetColor(playableCard.EligibleForGemBonus((GemType)2) ? info.colorOverride : renderInfo.defaultAbilityColor); } else if (AbilityExtensions.GetExtendedPropertyAsBool(info, "ActiveWhenFueled").GetValueOrDefault()) { val.SetColor((((Card)(object)playableCard).GetCurrentFuel() <= 0) ? info.colorOverride : renderInfo.defaultAbilityColor); } } } } [HarmonyPatch(typeof(CardDisplayer3D), "DisplayAbilityIcons")] [HarmonyPostfix] private static void ColorizeConduitAbilities(CardDisplayer3D __instance, PlayableCard playableCard) { //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_00cd: Unknown result type (might be due to invalid IL or missing references) //IL_0109: Unknown result type (might be due to invalid IL or missing references) if (!SaveManager.SaveFile.IsPart3 || (Object)(object)__instance.AbilityIcons == (Object)null || (Object)(object)playableCard == (Object)null || playableCard.TemporaryMods == null) { return; } foreach (CardModificationInfo temporaryMod in playableCard.TemporaryMods) { if (temporaryMod == null || string.IsNullOrEmpty(temporaryMod.singletonId) || temporaryMod.abilities == null || !DynamicAbilityCardModIds.Contains(temporaryMod.singletonId)) { continue; } foreach (Ability ability in temporaryMod.abilities) { if (!((Card)playableCard).Info.HasAbility(ability)) { AbilityIconInteractable? obj = __instance.AbilityIcons.abilityIcons.Find((AbilityIconInteractable a) => a.Ability == ability); if (obj != null) { obj.SetColor(GameColors.Instance.brightGold); } } } } } private static void ReRenderCards() { if (!GameFlowManager.IsCardBattle) { return; } foreach (CardSlot item in Singleton<BoardManager>.Instance.AllSlotsCopy) { if ((Object)(object)item.Card != (Object)null && (CardExtensions.HasAnyOfAbilities(item.Card, GemReRenderAbilities) || ((Card)item.Card).Info.appearanceBehaviour.Any((Appearance a) => GemReRenderAppearances.Contains(a)))) { ((Card)item.Card).RenderCard(); item.Card.UpdateFaceUpOnBoardEffects(); } } foreach (PlayableCard item2 in Singleton<PlayerHand>.Instance.cardsInHand) { if (CardExtensions.HasAnyOfAbilities(item2, GemReRenderAbilities) || ((Card)item2).Info.appearanceBehaviour.Any((Appearance a) => GemReRenderAppearances.Contains(a))) { ((Card)item2).RenderCard(); } } } [HarmonyPatch(typeof(ResourcesManager), "AddGem")] [HarmonyPostfix] private static IEnumerator GemsAddSwitch(IEnumerator sequence) { yield return sequence; if (SaveManager.SaveFile.IsPart3) { ReRenderCards(); } } [HarmonyPatch(typeof(ResourcesManager), "LoseGem")] [HarmonyPostfix] private static IEnumerator GemsRemoveSwitch(IEnumerator sequence) { yield return sequence; if (SaveManager.SaveFile.IsPart3) { ReRenderCards(); } } [HarmonyPatch(typeof(ResourcesManager), "ForceGemsUpdate")] [HarmonyPostfix] private static void GemsForceSwitch() { if (SaveManager.SaveFile.IsPart3) { ReRenderCards(); } } } public class AbsorbShield : AbilityBehaviour { public static Ability AbilityID { get; private set; } public override Ability Ability => AbilityID; static AbsorbShield() { //IL_00ad: Unknown result type (might be due to invalid IL or missing references) AbilityInfo val = ScriptableObject.CreateInstance<AbilityInfo>(); val.rulebookName = "Shield Absorption"; val.rulebookDescription = "When [creature] is played, all creatures lose their shields. This creature gains 1 attack for each shield lost this way."; val.canStack = false; val.powerLevel = 2; val.opponentUsable = true; val.passive = false; val.metaCategories = new List<AbilityMetaCategory> { (AbilityMetaCategory)2, (AbilityMetaCategory)3 }; AbilityExtensions.SetPixelAbilityIcon(val, TextureHelper.GetImageAsTexture("pixelability_shield_vampire.png", typeof(AbsorbShield).Assembly, (FilterMode)0), (FilterMode?)null); AbilityID = AbilityManager.Add("zorro.inscryption.infiniscryption.p03sigillibrary", val, typeof(AbsorbShield), (Texture)(object)TextureHelper.GetImageAsTexture("ability_shield_vampire.png", typeof(AbsorbShield).Assembly, (FilterMode)0)).Id; } public override bool RespondsToResolveOnBoard() { return true; } public override IEnumerator OnResolveOnBoard() { ((Card)((AbilityBehaviour)this).Card).Anim.StrongNegationEffect(); int shields = 0; foreach (CardSlot slot in Singleton<BoardManager>.Instance.AllSlotsCopy) { while ((Object)(object)slot.Card != (Object)null && slot.Card.HasShield()) { yield return slot.Card.TakeDamage(1, (PlayableCard)null); shields++; } } if (shields > 0) { ((AbilityBehaviour)this).Card.AddTemporaryMod(new CardModificationInfo(shields, 0)); } } } public class AcceleratedLifecycle : ActivatedAbilityBehaviour { internal static List<CardSlot> BuffedSlots; private bool ActivatedThisTurn = false; public override Ability Ability => AbilityID; public static Ability AbilityID { get; private set; } public override int EnergyCost => 1; static AcceleratedLifecycle() { //IL_008c: Unknown result type (might be due to invalid IL or missing references) BuffedSlots = new List<CardSlot>(); AbilityInfo val = ScriptableObject.CreateInstance<AbilityInfo>(); val.rulebookName = "Rapid Recycle"; val.rulebookDescription = "Pay 1 Energy to choose another card you control to die and immediately respawn. You may only activate this ability once per turn."; val.canStack = false; val.powerLevel = 3; val.opponentUsable = true; val.activated = true; val.passive = false; val.metaCategories = new List<AbilityMetaCategory> { (AbilityMetaCategory)2 }; AbilityID = AbilityManager.Add("zorro.inscryption.infiniscryption.p03sigillibrary", val, typeof(AcceleratedLifecycle), (Texture)(object)TextureHelper.GetImageAsTexture("ability_lifecycle.png", typeof(AcceleratedLifecycle).Assembly, (FilterMode)0)).Id; } public override bool RespondsToUpkeep(bool playerUpkeep) { return true; } private int OpponentRecyclePriority(CardSlot slot) { //IL_0071: Unknown result type (might be due to invalid IL or missing references) try { if (!Object.op_Implicit((Object)(object)slot.Card)) { return 0; } if ((Object)(object)slot.Card == (Object)(object)((AbilityBehaviour)this).Card) { return 0; } if (CardExtensions.AllAbilities(slot.Card).Any((Ability ab) => AbilityExtensions.AbilityByID((IEnumerable<FullAbility>)AbilityManager.AllAbilities, ab).AbilityBehavior.IsSubclassOf(typeof(Latch)))) { return slot.Card.HasAbility(LatchDeathLatch.AbilityID) ? 20 : (slot.Card.HasAbility((Ability)57) ? 15 : 10); } if (slot.Card.HasAbility((Ability)52)) { int num = 0; foreach (CardSlot adjacentSlot in Singleton<BoardManager>.Instance.GetAdjacentSlots(slot)) { if ((Object)(object)adjacentSlot == (Object)(object)((AbilityBehaviour)this).Card.slot) { return 0; } if ((Object)(object)adjacentSlot.Card != (Object)null) { num -= adjacentSlot.Card.PowerLevel; } } CardSlot val = CardExtensions.OpposingSlot(slot.Card); if ((Object)(object)val.Card != (Object)null) { num += val.Card.PowerLevel; } return num; } return 0; } catch { return 0; } } public override IEnumerator OnUpkeep(bool playerUpkeep) { if (playerUpkeep && !((AbilityBehaviour)this).Card.OpponentCard) { ActivatedThisTurn = false; } else if (!playerUpkeep && ((AbilityBehaviour)this).Card.OpponentCard) { List<CardSlot> possibles = Singleton<BoardManager>.Instance.OpponentSlotsCopy; possibles.Sort((CardSlot a, CardSlot b) => OpponentRecyclePriority(b) - OpponentRecyclePriority(a)); if (OpponentRecyclePriority(possibles[0]) > 0) { Singleton<ViewManager>.Instance.SwitchToView((View)4, false, false); yield return (object)new WaitForSeconds(0.2f); yield return RecycleCard(possibles[0]); } } } public override bool CanActivate() { return GetValidTargets().Count > 0 && !ActivatedThisTurn; } private List<CardSlot> GetValidTargets() { List<CardSlot> list = new List<CardSlot>(); foreach (CardSlot slot in Singleton<BoardManager>.Instance.GetSlots(!((AbilityBehaviour)this).Card.OpponentCard)) { if ((Object)(object)slot.Card != (Object)null && (Object)(object)slot.Card != (Object)(object)((AbilityBehaviour)this).Card) { list.Add(slot); } } return list; } private IEnumerator RecycleCard(CardSlot target) { ((Card)((AbilityBehaviour)this).Card).Anim.StrongNegationEffect(); AudioController.Instance.PlaySound3D("angel_reveal", (MixerGroup)4, ((Component)((AbilityBehaviour)this).Card.Slot).gameObject.transform.position, 1f, 0f, new Pitch((Variation)0), (Repetition)null, (Randomization)null, (Distortion)null, false); yield return (object)new WaitForSeconds(1f); CardInfo targetInfo = ((Card)target.Card).Info; yield return target.Card.Die(false, (PlayableCard)null, true); yield return Singleton<BoardManager>.Instance.CreateCardInSlot(targetInfo, target, 0.1f, true); ActivatedThisTurn = true; Singleton<ViewManager>.Instance.SwitchToView((View)1, false, false); } public override IEnumerator Activate() { Singleton<ViewManager>.Instance.SwitchToView((View)4, false, false); yield return (object)new WaitForSeconds(0.2f); yield return Singleton<BoardManager>.Instance.ChooseSlot(GetValidTargets(), true); if ((Object)(object)Singleton<BoardManager>.Instance.LastSelectedSlot == (Object)null) { Singleton<ViewManager>.Instance.SwitchToView((View)1, false, false); yield break; } ActivatedThisTurn = true; yield return RecycleCard(Singleton<BoardManager>.Instance.LastSelectedSlot); } } public class ActivatedBuffTeam : FuelActivatedAbilityBehaviour, IPassiveAttackBuff { public static Ability AbilityID { get; private set; } public override Ability Ability => AbilityID; public override int FuelCost => 1; static ActivatedBuffTeam() { //IL_0082: Unknown result type (might be due to invalid IL or missing references) AbilityInfo val = ScriptableObject.CreateInstance<AbilityInfo>(); val.rulebookName = "Supercharge"; val.rulebookDescription = "Friendly cards gain 1 power until the end of the turn. This ability can only be activated once per turn."; val.canStack = false; val.powerLevel = 1; val.opponentUsable = true; val.passive = false; val.activated = true; val.metaCategories = new List<AbilityMetaCategory> { (AbilityMetaCategory)2 }; AbilityID = AbilityManager.Add("zorro.inscryption.infiniscryption.p03sigillibrary", val, typeof(ActivatedBuffTeam), (Texture)(object)TextureHelper.GetImageAsTexture("ability_activated_gain_power.png", typeof(ActivatedBuffTeam).Assembly, (FilterMode)0)).Id; } public override bool RespondsToOtherCardResolve(PlayableCard otherCard) { return (Object)(object)otherCard == (Object)(object)((AbilityBehaviour)this).Card && ((AbilityBehaviour)this).Card.OpponentCard; } public override IEnumerator OnOtherCardResolve(PlayableCard otherCard) { yield return ((TriggerReceiver)this).OnActivatedAbility(); } public override IEnumerator ActivateAfterSpendFuel() { yield return ((AbilityBehaviour)this).LearnAbility(0.1f); } public int GetPassiveAttackBuff(PlayableCard target) { return (base.hasActivatedThisTurn && CardExtensions.IsPlayerCard(target) == CardExtensions.IsPlayerCard(((AbilityBehaviour)this).Card)) ? 1 : 0; } } public class ActivatedCopySigils : ActivatedAbilityBehaviour { public const string SINGLETON_ID = "COPY_PASTE_SIGILS"; private CardSlot SelectedCopyFromSlot = null; public static Ability AbilityID { get; private set; } public override Ability Ability => AbilityID; public override int EnergyCost => 3; private List<CardSlot> CopyFromSlots => (from s in BoardManagerExtensions.GetSlotsCopy(Singleton<BoardManager>.Instance, CardExtensions.IsPlayerCard(((AbilityBehaviour)this).Card)) where (Object)(object)s.Card != (Object)null && CardExtensions.AllAbilities(s.Card).Count > 0 select s).ToList(); private List<CardSlot> CopyToSlots => (from s in BoardManagerExtensions.GetSlotsCopy(Singleton<BoardManager>.Instance, CardExtensions.IsPlayerCard(((AbilityBehaviour)this).Card)) where (Object)(object)s.Card != (Object)null && (Object)(object)s != (Object)(object)SelectedCopyFromSlot select s).ToList(); public override bool CanActivate() { return (from s in BoardManagerExtensions.GetSlotsCopy(Singleton<BoardManager>.Instance, CardExtensions.IsPlayerCard(((AbilityBehaviour)this).Card)) where (Object)(object)s.Card != (Object)null select s).Count() >= 2; } static ActivatedCopySigils() { //IL_0082: Unknown result type (might be due to invalid IL or missing references) AbilityInfo val = ScriptableObject.CreateInstance<AbilityInfo>(); val.rulebookName = "Copy and Paste"; val.rulebookDescription = "The controller of [creature] chooses two cards they control. The second card's sigils are replaced with the sigils of the first."; val.canStack = false; val.powerLevel = 1; val.opponentUsable = false; val.passive = false; val.activated = true; val.metaCategories = new List<AbilityMetaCategory> { (AbilityMetaCategory)2 }; AbilityID = AbilityManager.Add("zorro.inscryption.infiniscryption.p03sigillibrary", val, typeof(ActivatedCopySigils), (Texture)(object)TextureHelper.GetImageAsTexture("ability_activated_copy_sigils.png", typeof(ActivatedCopySigils).Assembly, (FilterMode)0)).Id; } private int EvaluateCopyFromSlot(CardSlot slot) { if ((Object)(object)slot.Card == (Object)null) { return 0; } return (from a in CardExtensions.AllAbilities(slot.Card) select AbilitiesUtil.GetInfo(a).powerLevel).Sum(); } private int EvaluateCopyToSlot(CardSlot slot) { if ((Object)(object)slot.Card == (Object)null) { return -10000; } return -(from a in CardExtensions.AllAbilities(slot.Card) select AbilitiesUtil.GetInfo(a).powerLevel).Sum(); } private IEnumerator OnSelectCopyFromSlot(CardSlot slot) { SelectedCopyFromSlot = slot; ((Card)slot.Card).Anim.StrongNegationEffect(); yield break; } private IEnumerator OnSelectCopyToSlot(CardSlot slot) { if ((Object)(object)slot.Card == (Object)null) { yield break; } List<Ability> targetAbilities = new List<Ability>(((Card)slot.Card).Info.Abilities); foreach (CardModificationInfo mod in slot.Card.TemporaryMods.Where((CardModificationInfo m) => !m.IsContinousEffectMod() && m.abilities != null)) { targetAbilities.AddRange(mod.abilities); } CardModificationInfo newAbilityMod = slot.Card.GetOrCreateSingletonTempMod("COPY_PASTE_SIGILS"); newAbilityMod.abilities = new List<Ability>(CardExtensions.AllAbilities(SelectedCopyFromSlot.Card)); newAbilityMod.negateAbilities = targetAbilities.Where((Ability a) => !newAbilityMod.abilities.Contains(a)).ToList(); ((Card)slot.Card).Anim.StrongNegationEffect(); slot.Card.AddTemporaryMod(newAbilityMod); } public override IEnumerator Activate() { yield return ((AbilityBehaviour)this).PreSuccessfulTriggerSequence(); yield return ((AbilityBehaviour)(object)this).CardChooseSlotSequence(OnSelectCopyFromSlot, CopyFromSlots, EvaluateCopyFromSlot, "Choose a card to copy sigils from", aimWeapon: false, (CursorType)4); yield return (object)new WaitForSeconds(0.2f); yield return ((AbilityBehaviour)(object)this).CardChooseSlotSequence(OnSelectCopyToSlot, CopyToSlots, EvaluateCopyToSlot, "Choose a card to paste sigils onto", aimWeapon: false, (CursorType)2); yield return ((AbilityBehaviour)this).LearnAbility(0.2f); } } public class ActivatedDrawBlast : FuelActivatedAbilityBehaviour { public static Ability AbilityID { get; private set; } public override Ability Ability => AbilityID; public override int FuelCost => 1; static ActivatedDrawBlast() { //IL_0082: Unknown result type (might be due to invalid IL or missing references) AbilityInfo val = ScriptableObject.CreateInstance<AbilityInfo>(); val.rulebookName = "Cannon Fire"; val.rulebookDescription = "Create a Blast! card in hand. Blast! is defined as a spell that costs 2 energy and sets the target on fire."; val.canStack = false; val.powerLevel = 1; val.opponentUsable = false; val.passive = false; val.activated = true; val.metaCategories = new List<AbilityMetaCategory> { (AbilityMetaCategory)2 }; AbilityID = AbilityManager.Add("zorro.inscryption.infiniscryption.p03sigillibrary", val, typeof(ActivatedDrawBlast), (Texture)(object)TextureHelper.GetImageAsTexture("ability_activated_draw_blast.png", typeof(ActivatedDrawBlast).Assembly, (FilterMode)0)).Id; } public override IEnumerator ActivateAfterSpendFuel() { yield return ((AbilityBehaviour)this).PreSuccessfulTriggerSequence(); if ((int)Singleton<ViewManager>.Instance.CurrentView != 1) { yield return (object)new WaitForSeconds(0.2f); Singleton<ViewManager>.Instance.SwitchToView((View)1, false, false); yield return (object)new WaitForSeconds(0.2f); } yield return Singleton<CardSpawner>.Instance.SpawnCardToHand(CardLoader.GetCardByName("P03SIG_BLAST"), (List<CardModificationInfo>)null, 0.25f, (Action<PlayableCard>)null); yield return (object)new WaitForSeconds(0.45f); yield return ((AbilityBehaviour)this).LearnAbility(0.1f); } } public class ActivatedDrawCharge : ActivatedAbilityBehaviour { public const int ENERGY_COST = 2; public override Ability Ability => AbilityID; public static Ability AbilityID { get; private set; } public override int EnergyCost => 2; static ActivatedDrawCharge() { //IL_00bf: Unknown result type (might be due to invalid IL or missing references) AbilityInfo val = ScriptableObject.CreateInstance<AbilityInfo>(); val.rulebookName = "Recharge Reserves"; val.rulebookDescription = $"Pay {2} Energy to create a Charge in your hand. Charge is defined as a spell that refills 1 Energy when played."; val.canStack = false; val.powerLevel = 1; val.opponentUsable = false; val.activated = true; val.passive = false; val.metaCategories = new List<AbilityMetaCategory> { (AbilityMetaCategory)2, (AbilityMetaCategory)3 }; AbilityExtensions.SetPixelAbilityIcon(val, TextureHelper.GetImageAsTexture("pixelability_activated_drawcharge.png", typeof(ActivatedDrawCharge).Assembly, (FilterMode)0), (FilterMode?)null); AbilityID = AbilityManager.Add("zorro.inscryption.infiniscryption.p03sigillibrary", val, typeof(ActivatedDrawCharge), (Texture)(object)TextureHelper.GetImageAsTexture("ability_store_charge.png", typeof(ActivatedDrawCharge).Assembly, (FilterMode)0)).Id; } public override IEnumerator Activate() { ((Card)((AbilityBehaviour)this).Card).Anim.StrongNegationEffect(); if ((int)Singleton<ViewManager>.Instance.CurrentView != 1) { yield return (object)new WaitForSeconds(0.2f); Singleton<ViewManager>.Instance.SwitchToView((View)1, false, false); yield return (object)new WaitForSeconds(0.2f); } yield return Singleton<CardSpawner>.Instance.SpawnCardToHand(CardLoader.GetCardByName("P03SIG_CHARGE"), (List<CardModificationInfo>)null, 0.25f, (Action<PlayableCard>)null); yield return (object)new WaitForSeconds(0.25f); yield return ((AbilityBehaviour)this).LearnAbility(0f); } } public class ActivatedDrawDefend : ActivatedAbilityBehaviour { private bool hasActivatedThisTurn = false; public static Ability AbilityID { get; private set; } public override Ability Ability => AbilityID; public override int EnergyCost => 2; public override bool CanActivate() { return !hasActivatedThisTurn; } static ActivatedDrawDefend() { //IL_0082: Unknown result type (might be due to invalid IL or missing references) AbilityInfo val = ScriptableObject.CreateInstance<AbilityInfo>(); val.rulebookName = "Holo Weaver"; val.rulebookDescription = "Once per turn, create a Defend! card in hand. Defend! is defined as a spell that costs 2 energy and gives the target a shield."; val.canStack = false; val.powerLevel = 1; val.opponentUsable = false; val.passive = false; val.activated = true; val.metaCategories = new List<AbilityMetaCategory> { (AbilityMetaCategory)2 }; AbilityID = AbilityManager.Add("zorro.inscryption.infiniscryption.p03sigillibrary", val, typeof(ActivatedDrawDefend), (Texture)(object)TextureHelper.GetImageAsTexture("ability_activated_draw_defend.png", typeof(ActivatedDrawDefend).Assembly, (FilterMode)0)).Id; } public override bool RespondsToUpkeep(bool playerUpkeep) { return playerUpkeep == CardExtensions.IsPlayerCard(((AbilityBehaviour)this).Card); } public override IEnumerator OnUpkeep(bool playerUpkeep) { hasActivatedThisTurn = false; yield break; } public override IEnumerator Activate() { hasActivatedThisTurn = true; yield return ((AbilityBehaviour)this).PreSuccessfulTriggerSequence(); if ((int)Singleton<ViewManager>.Instance.CurrentView != 1) { yield return (object)new WaitForSeconds(0.2f); Singleton<ViewManager>.Instance.SwitchToView((View)1, false, false); yield return (object)new WaitForSeconds(0.2f); } yield return Singleton<CardSpawner>.Instance.SpawnCardToHand(CardLoader.GetCardByName("P03SIG_DEFEND"), (List<CardModificationInfo>)null, 0.25f, (Action<PlayableCard>)null); yield return (object)new WaitForSeconds(0.45f); yield return ((AbilityBehaviour)this).LearnAbility(0.1f); } } public class ActivatedGainBattery : ActivatedAbilityBehaviour { public static Ability AbilityID { get; private set; } public override Ability Ability => AbilityID; public override int BonesCost => 2; public override bool CanActivate() { return Singleton<ResourcesManager>.Instance.PlayerMaxEnergy < 6 || Singleton<ResourcesManager>.Instance.PlayerEnergy < Singleton<ResourcesManager>.Instance.PlayerMaxEnergy; } static ActivatedGainBattery() { //IL_0082: Unknown result type (might be due to invalid IL or missing references) AbilityInfo val = ScriptableObject.CreateInstance<AbilityInfo>(); val.rulebookName = "Fossil Fuel"; val.rulebookDescription = "Provides an additional energy cell."; val.canStack = false; val.powerLevel = 1; val.opponentUsable = false; val.passive = false; val.activated = true; val.metaCategories = new List<AbilityMetaCategory> { (AbilityMetaCategory)2 }; AbilityID = AbilityManager.Add("zorro.inscryption.infiniscryption.p03sigillibrary", val, typeof(ActivatedGainBattery), (Texture)(object)TextureHelper.GetImageAsTexture("ability_activated_gain_battery.png", typeof(ActivatedGainBattery).Assembly, (FilterMode)0)).Id; } public override IEnumerator Activate() { yield return ((AbilityBehaviour)this).PreSuccessfulTriggerSequence(); if (Singleton<ResourcesManager>.Instance is Part3ResourcesManager) { yield return (object)new WaitForSeconds(0.2f); Singleton<ViewManager>.Instance.SwitchToView((View)1, false, false); yield return (object)new WaitForSeconds(0.2f); } yield return Singleton<ResourcesManager>.Instance.AddMaxEnergy(1); yield return Singleton<ResourcesManager>.Instance.AddEnergy(1); if (Singleton<ResourcesManager>.Instance is Part3ResourcesManager) { yield return (object)new WaitForSeconds(0.3f); } yield return ((AbilityBehaviour)this).LearnAbility(0.2f); } } public class ActivatedGainPower : ActivatedAbilityBehaviour { public const int ENERGY_COST = 4; public override Ability Ability => AbilityID; public static Ability AbilityID { get; private set; } public override int EnergyCost => 4; static ActivatedGainPower() { //IL_008d: Unknown result type (might be due to invalid IL or missing references) AbilityInfo val = ScriptableObject.CreateInstance<AbilityInfo>(); val.rulebookName = "Overcharge"; val.rulebookDescription = $"Pay {4} Energy to increase the Power of this card by 1."; val.canStack = false; val.powerLevel = 1; val.opponentUsable = false; val.activated = true; val.passive = false; val.metaCategories = new List<AbilityMetaCategory> { (AbilityMetaCategory)2 }; AbilityID = AbilityManager.Add("zorro.inscryption.infiniscryption.p03sigillibrary", val, typeof(ActivatedGainPower), (Texture)(object)TextureHelper.GetImageAsTexture("ability_activatedexpensivepowerup.png", typeof(TakeDamageSigil).Assembly, (FilterMode)0)).Id; } public override IEnumerator Activate() { CardModificationInfo cardModificationInfo = ((AbilityBehaviour)this).Card.TemporaryMods.Find((CardModificationInfo x) => x.singletonId == "statsUp"); if (cardModificationInfo == null) { cardModificationInfo = new CardModificationInfo { singletonId = "statsUp" }; ((AbilityBehaviour)this).Card.AddTemporaryMod(cardModificationInfo); } CardModificationInfo obj = cardModificationInfo; obj.attackAdjustment++; ((AbilityBehaviour)this).Card.OnStatsChanged(); yield return (object)new WaitForSeconds(0.25f); } } [HarmonyPatch] public class ActivatedGainPowerCharge : ActivatedAbilityBehaviour { private static readonly List<Texture2D> PowerupIcons; public override Ability Ability => AbilityID; public static Ability AbilityID { get; private set; } public override int EnergyCost => Mathf.Min(((AbilityBehaviour)this).Card.NonPassiveAttack() + 2, 6); static ActivatedGainPowerCharge() { //IL_0175: Unknown result type (might be due to invalid IL or missing references) PowerupIcons = new List<Texture2D> { TextureHelper.GetImageAsTexture("ability_activated_powerup_0.png", typeof(ActivatedGainPowerCharge).Assembly, (FilterMode)0), TextureHelper.GetImageAsTexture("ability_activated_powerup_1.png", typeof(ActivatedGainPowerCharge).Assembly, (FilterMode)0), TextureHelper.GetImageAsTexture("ability_activated_powerup_2.png", typeof(ActivatedGainPowerCharge).Assembly, (FilterMode)0), TextureHelper.GetImageAsTexture("ability_activated_powerup_3.png", typeof(ActivatedGainPowerCharge).Assembly, (FilterMode)0), TextureHelper.GetImageAsTexture("ability_activated_powerup_4.png", typeof(ActivatedGainPowerCharge).Assembly, (FilterMode)0), TextureHelper.GetImageAsTexture("ability_activated_powerup_5.png", typeof(ActivatedGainPowerCharge).Assembly, (FilterMode)0), TextureHelper.GetImageAsTexture("ability_activated_powerup_6.png", typeof(ActivatedGainPowerCharge).Assembly, (FilterMode)0) }; AbilityInfo val = ScriptableObject.CreateInstance<AbilityInfo>(); val.rulebookName = "Enrage"; val.rulebookDescription = "Pay Energy equal to the Power of this card plus 2 to increase the Power of this card by 1."; val.canStack = false; val.powerLevel = 1; val.opponentUsable = false; val.activated = true; val.passive = false; val.metaCategories = new List<AbilityMetaCategory> { (AbilityMetaCategory)2 }; AbilityID = AbilityManager.Add("zorro.inscryption.infiniscryption.p03sigillibrary", val, typeof(ActivatedGainPowerCharge), (Texture)(object)TextureHelper.GetImageAsTexture("ability_activated_powerup_2.png", typeof(TakeDamageSigil).Assembly, (FilterMode)0)).Id; } public override IEnumerator Activate() { CardModificationInfo cardModificationInfo = ((AbilityBehaviour)this).Card.GetOrCreateSingletonTempMod("statsUp"); cardModificationInfo.attackAdjustment++; ((AbilityBehaviour)this).Card.AddTemporaryMod(cardModificationInfo); ((Card)((AbilityBehaviour)this).Card).RenderInfo.OverrideAbilityIcon(AbilityID, (Texture)(object)PowerupIcons[((ActivatedAbilityBehaviour)this).EnergyCost]); ((Card)((AbilityBehaviour)this).Card).RenderCard(); yield return (object)new WaitForSeconds(0.25f); } [HarmonyPatch(typeof(AbilityIconInteractable), "LoadIcon")] [HarmonyPrefix] private static bool LoadMissileStrikeIcons(CardInfo info, AbilityInfo ability, ref Texture __result) { //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 (ability.ability != AbilityID) { return true; } int num = CardExtensions.GetPlayableCard(info)?.NonPassiveAttack() ?? info.Attack; int index = Mathf.Min(num + 2, 6); __result = (Texture)(object)PowerupIcons[index]; return false; } } [HarmonyPatch] public class ActivatedGainItem : ActivatedAbilityBehaviour { private static readonly List<Texture2D> Icons; public const string ACTIVATION_KEY = "NumberOfActivationsRemaining"; public static Ability AbilityID { get; private set; } public override Ability Ability => AbilityID; public override int EnergyCost => 6; private static bool IsCountMod(CardModificationInfo m) { return !string.IsNullOrEmpty(m.singletonId) && m.singletonId.Equals("NumberOfActivationsRemaining"); } private static int GetNumberOfActivationsRemaining(CardInfo info) { //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Expected O, but got Unknown CardModificationInfo val = ((IEnumerable<CardModificationInfo>)info.mods).FirstOrDefault((Func<CardModificationInfo, bool>)IsCountMod); if (val == null) { val = new CardModificationInfo(); val.singletonId = "NumberOfActivationsRemaining"; CardModificationInfoExtensions.SetExtendedProperty(val, "NumberOfActivationsRemaining", (object)AscensionSaveData.Data.currentRun.MaxConsumables, false); SaveManager.SaveFile.CurrentDeck.ModifyCard(info, val); } return CardModificationInfoExtensions.GetExtendedPropertyAsInt(val, "NumberOfActivationsRemaining") ?? (-1); } public override bool CanActivate() { return (from s in Singleton<ItemsManager>.Instance.consumableSlots where !(s is HammerItemSlot) where (Object)(object)((ItemSlot)s).Item != (Object)null select s).Count() < AscensionSaveData.Data.currentRun.MaxConsumables && GetNumberOfActivationsRemaining(((Card)((AbilityBehaviour)this).Card).Info) > 0; } static ActivatedGainItem() { //IL_00f1: Unknown result type (might be due to invalid IL or missing references) Icons = new List<Texture2D> { TextureHelper.GetImageAsTexture("ability_activatedgainconsumable_1.png", typeof(ActivatedGainPowerCharge).Assembly, (FilterMode)0), TextureHelper.GetImageAsTexture("ability_activatedgainconsumable_2.png", typeof(ActivatedGainPowerCharge).Assembly, (FilterMode)0), TextureHelper.GetImageAsTexture("ability_activatedgainconsumable_3.png", typeof(ActivatedGainPowerCharge).Assembly, (FilterMode)0) }; AbilityInfo val = ScriptableObject.CreateInstance<AbilityInfo>(); val.rulebookName = "Dispenser"; val.rulebookDescription = "Gain a random item."; val.canStack = false; val.powerLevel = 1; val.opponentUsable = false; val.passive = false; val.activated = true; val.metaCategories = new List<AbilityMetaCategory> { (AbilityMetaCategory)2 }; AbilityID = AbilityManager.Add("zorro.inscryption.infiniscryption.p03sigillibrary", val, typeof(ActivatedGainItem), (Texture)(object)TextureHelper.GetImageAsTexture("ability_activatedgainconsumable.png", typeof(ActivatedGainItem).Assembly, (FilterMode)0)).Id; } private void ReduceCount() { //IL_0043: Unknown result type (might be due to invalid IL or missing references) int numberOfActivationsRemaining = GetNumberOfActivationsRemaining(((Card)((AbilityBehaviour)this).Card).Info); CardModificationInfo val = ((IEnumerable<CardModificationInfo>)((Card)((AbilityBehaviour)this).Card).Info.Mods).FirstOrDefault((Func<CardModificationInfo, bool>)IsCountMod); if (numberOfActivationsRemaining == 1) { val.negateAbilities = new List<Ability> { AbilityID }; } else { CardModificationInfoExtensions.SetExtendedProperty(val, "NumberOfActivationsRemaining", (object)(numberOfActivationsRemaining - 1), false); } SaveManager.SaveFile.CurrentDeck.ModifyCard(((Card)((AbilityBehaviour)this).Card).Info, val); ((Card)((AbilityBehaviour)this).Card).RenderCard(); } public override IEnumerator Activate() { yield return ((AbilityBehaviour)this).PreSuccessfulTriggerSequence(); yield return (object)new WaitForSeconds(0.2f); Singleton<ViewManager>.Instance.SwitchToView((View)1, false, false); yield return (object)new WaitForSeconds(0.25f); string item = ((Object)ItemsUtil.GetRandomUnlockedConsumable(P03SigilLibraryPlugin.RandomSeed)).name; foreach (ConsumableItemSlot slot in Singleton<ItemsManager>.Instance.consumableSlots.Where((ConsumableItemSlot s) => !(s is HammerItemSlot))) { if ((Object)(object)((ItemSlot)slot).Item == (Object)null) { slot.CreateItem(item, false); Singleton<ItemsManager>.Instance.OnUpdateItems(true); Singleton<ItemsManager>.Instance.SaveDataItemsList.Add(item); yield return (object)new WaitForSeconds(0.2f); ReduceCount(); yield return ((AbilityBehaviour)this).LearnAbility(0f); yield break; } } } [HarmonyPatch(typeof(AbilityIconInteractable), "LoadIcon")] [HarmonyPrefix] private static bool LoadMissileStrikeIcons(CardInfo info, AbilityInfo ability, ref Texture __result) { //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 (ability.ability != AbilityID) { return true; } int num = GetNumberOfActivationsRemaining(info) - 1; if (num < 0) { return true; } __result = (Texture)(object)Icons[num]; return false; } } public class ActivatedStrafe : FuelActivatedAbilityBehaviour { protected bool movingLeft; public override Ability Ability => AbilityID; public static Ability AbilityID { get; private set; } public override int FuelCost => 1; static ActivatedStrafe() { //IL_0082: Unknown result type (might be due to invalid IL or missing references) AbilityInfo val = ScriptableObject.CreateInstance<AbilityInfo>(); val.rulebookName = "Drive"; val.rulebookDescription = "Pay 1 Fuel to move in the direction inscribed in this sigil."; val.canStack = false; val.powerLevel = 1; val.opponentUsable = false; val.activated = true; val.passive = false; val.metaCategories = new List<AbilityMetaCategory> { (AbilityMetaCategory)2 }; AbilityID = AbilityManager.Add("zorro.inscryption.infiniscryption.p03sigillibrary", val, typeof(ActivatedStrafe), (Texture)(object)TextureHelper.GetImageAsTexture("ability_activated_strafe_right.png", typeof(ActivatedStrafe).Assembly, (FilterMode)0)).Id; AbilityExtensions.SetCustomFlippedTexture(val, TextureHelper.GetImageAsTexture("ability_activated_strafe_left.png", typeof(ActivatedStrafe).Assembly, (FilterMode)0)); } public override IEnumerator ActivateAfterSpendFuel() { CardSlot toLeft = Singleton<BoardManager>.Instance.GetAdjacent(((AbilityBehaviour)this).Card.Slot, true); CardSlot toRight = Singleton<BoardManager>.Instance.GetAdjacent(((AbilityBehaviour)this).Card.Slot, false); Singleton<ViewManager>.Instance.SwitchToView((View)4, false, false); yield return (object)new WaitForSeconds(0.25f); yield return DoStrafe(toLeft, toRight); } protected virtual IEnumerator DoStrafe(CardSlot toLeft, CardSlot toRight) { bool canMoveLeft = (Object)(object)toLeft != (Object)null && (Object)(object)toLeft.Card == (Object)null; bool canMoveRight = (Object)(object)toRight != (Object)null && (Object)(object)toRight.Card == (Object)null; if (movingLeft && !canMoveLeft) { movingLeft = false; } if (!movingLeft && !canMoveRight) { movingLeft = true; } CardSlot destination = (movingLeft ? toLeft : toRight); bool destinationValid = (movingLeft ? canMoveLeft : canMoveRight); yield return MoveToSlot(destination, destinationValid); if ((Object)(object)destination != (Object)null && destinationValid) { yield return ((AbilityBehaviour)this).PreSuccessfulTriggerSequence(); yield return ((AbilityBehaviour)this).LearnAbility(0f); } } protected IEnumerator MoveToSlot(CardSlot destination, bool destinationValid) { ((Card)((AbilityBehaviour)this).Card).RenderInfo.SetAbilityFlipped(((AbilityBehaviour)this).Ability, movingLeft); ((Card)((AbilityBehaviour)this).Card).RenderInfo.flippedPortrait = movingLeft && ((Card)((AbilityBehaviour)this).Card).Info.flipPortraitForStrafe; ((Card)((AbilityBehaviour)this).Card).RenderCard(); if ((Object)(object)destination != (Object)null && destinationValid) { yield return Singleton<BoardManager>.Instance.AssignCardToSlot(((AbilityBehaviour)this).Card, destination, 0.1f, (Action)null, true); yield return (object)new WaitForSeconds(0.25f); } else { ((Card)((AbilityBehaviour)this).Card).Anim.StrongNegationEffect(); yield return (object)new WaitForSeconds(0.15f); } } } public class ActivatedStrafeSelf : ActivatedAbilityBehaviour { public static Ability AbilityID { get; private set; } public override Ability Ability => AbilityID; public override int EnergyCost => 1; public override bool CanActivate() { return (from s in CardSlotExtensions.GetAdjacentSlots(((AbilityBehaviour)this).Card.Slot, true) where (Object)(object)s.Card == (Object)null select s).Count() > 0; } static ActivatedStrafeSelf() { //IL_0082: Unknown result type (might be due to invalid IL or missing references) AbilityInfo val = ScriptableObject.CreateInstance<AbilityInfo>(); val.rulebookName = "D-Pad"; val.rulebookDescription = "Move to an adjacent empty lane."; val.canStack = false; val.powerLevel = 1; val.opponentUsable = false; val.passive = false; val.activated = true; val.metaCategories = new List<AbilityMetaCategory> { (AbilityMetaCategory)2 }; AbilityID = AbilityManager.Add("zorro.inscryption.infiniscryption.p03sigillibrary", val, typeof(ActivatedStrafeSelf), (Texture)(object)TextureHelper.GetImageAsTexture("ability_activated_strafe.png", typeof(ActivatedStrafeSelf).Assembly, (FilterMode)0)).Id; } public override IEnumerator Activate() { List<CardSlot> validSlots = (from s in CardSlotExtensions.GetAdjacentSlots(((AbilityBehaviour)this).Card.Slot, true) where (Object)(object)s.Card == (Object)null select s).ToList(); if (validSlots.Count == 1) { yield return Singleton<BoardManager>.Instance.AssignCardToSlot(((AbilityBehaviour)this).Card, validSlots[0], 0.1f, (Action)null, false); yield return (object)new WaitForSeconds(0.15f); yield break; } Singleton<ViewManager>.Instance.SwitchToView((View)4, false, true); yield return (object)new WaitForSeconds(0.25f); Vector3 a = (((AbilityBehaviour)this).Card.Slot.IsPlayerSlot ? Vector3.forward : Vector3.back); a *= 0.5f; Tween.Position(((Component)((AbilityBehaviour)this).Card).transform, ((Component)((AbilityBehaviour)this).Card).transform.position + a * 2f + Vector3.up * 0.25f, 0.15f, 0f, Tween.EaseOut, (LoopType)0, (Action)null, (Action)null, true); List<CardSlot> allslots = Singleton<BoardManager>.Instance.PlayerSlotsCopy; CardSlot selectedSlot = null; yield return Singleton<BoardManager>.Instance.ChooseTarget(allslots, validSlots, (Action<CardSlot>)delegate(CardSlot s) { selectedSlot = s; }, (Action<CardSlot>)delegate { ((Card)((AbilityBehaviour)this).Card).Anim.StrongNegationEffect(); }, (Action<CardSlot>)null, (Func<bool>)(() => false), (CursorType)16); if ((Object)(object)selectedSlot != (Object)null) { yield return Singleton<BoardManager>.Instance.AssignCardToSlot(((AbilityBehaviour)this).Card, selectedSlot, 0.1f, (Action)null, false); } Singleton<ViewManager>.Instance.Controller.LockState = (ViewLockState)0; } } [HarmonyPatch] public class ActivatedSubmerge : FuelActivatedAbilityBehaviour { private const string TEMPORARY_MOD_ID = "ACTIVATED_SUBMERGE_MOD"; public static Ability AbilityID { get; private set; } public override Ability Ability => AbilityID; public override int FuelCost => 1; static ActivatedSubmerge() { //IL_0082: Unknown result type (might be due to invalid IL or missing references) AbilityInfo val = ScriptableObject.CreateInstance<AbilityInfo>(); val.rulebookName = "Submerge"; val.rulebookDescription = "Submerge during the opponent's turn. While submerged, opposing creatures attack its owner directly."; val.canStack = false; val.powerLevel = 1; val.opponentUsable = true; val.passive = false; val.activated = true; val.metaCategories = new List<AbilityMetaCategory> { (AbilityMetaCategory)2 }; AbilityID = AbilityManager.Add("zorro.inscryption.infiniscryption.p03sigillibrary", val, typeof(ActivatedSubmerge), (Texture)(object)TextureHelper.GetImageAsTexture("ability_activated_submerge.png", typeof(ActivatedSubmerge).Assembly, (FilterMode)0)).Id; } public override IEnumerator ActivateAfterSpendFuel() { CardModificationInfo mod2 = ((IEnumerable<CardModificationInfo>)((AbilityBehaviour)this).Card.TemporaryMods).FirstOrDefault((Func<CardModificationInfo, bool>)((CardModificationInfo m) => m.singletonId != null && m.singletonId.Equals("ACTIVATED_SUBMERGE_MOD"))); if (mod2 == null) { mod2 = new CardModificationInfo((Ability)13); mod2.singletonId = "ACTIVATED_SUBMERGE_MOD"; ((AbilityBehaviour)this).Card.Status.hiddenAbilities.Add(AbilityID); ((AbilityBehaviour)this).Card.AddTemporaryMod(mod2); } yield break; } [HarmonyPatch(typeof(Submerge), "OnUpkeep")] [HarmonyPostfix] private static IEnumerator ResolveActivatedSubmerge(IEnumerator sequence, Submerge __instance) { yield return sequence; CardModificationInfo mod = ((IEnumerable<CardModificationInfo>)((AbilityBehaviour)__instance).Card.TemporaryMods).FirstOrDefault((Func<CardModificationInfo, bool>)((CardModificationInfo m) => m.singletonId != null && m.singletonId.Equals("ACTIVATED_SUBMERGE_MOD"))); if (mod != null) { ((AbilityBehaviour)__instance).Card.Status.hiddenAbilities.Remove(AbilityID); ((AbilityBehaviour)__instance).Card.RemoveTemporaryMod(mod, true); } } } public class ActivatedTemporaryControl : FuelActivatedAbilityBehaviour { public static Ability AbilityID { get; private set; } public override Ability Ability => AbilityID; public override int FuelCost => 1; private List<CardSlot> ValidOpposingSlots => (from s in BoardManagerExtensions.GetSlotsCopy(Singleton<BoardManager>.Instance, !CardExtensions.IsPlayerCard(((AbilityBehaviour)this).Card)) where (Object)(object)s.Card != (Object)null && ((Object)(object)CardExtensions.OpposingCard(s.Card) == (Object)null || (((AbilityBehaviour)this).Card.OpponentCard && (Object)(object)CardExtensions.OpposingCard(s.Card) != (Object)(object)((AbilityBehaviour)this).Card)) select s).ToList(); public override bool CanActivate() { return ValidOpposingSlots.Count > 0 && base.CanActivate(); } static ActivatedTemporaryControl() { //IL_0082: Unknown result type (might be due to invalid IL or missing references) AbilityInfo val = ScriptableObject.CreateInstance<AbilityInfo>(); val.rulebookName = "Tow Hook"; val.rulebookDescription = "Tow an opposing creature to your side of the board until end of turn. Creatures being towed cannot be hammered."; val.canStack = false; val.powerLevel = 2; val.opponentUsable = true; val.passive = false; val.activated = true; val.metaCategories = new List<AbilityMetaCategory> { (AbilityMetaCategory)2 }; AbilityID = AbilityManager.Add("zorro.inscryption.infiniscryption.p03sigillibrary", val, typeof(ActivatedTemporaryControl), (Texture)(object)TextureHelper.GetImageAsTexture("ability_activated_fishhook.png", typeof(ActivatedTemporaryControl).Assembly, (FilterMode)0)).Id; } private int EvaluateSlot(CardSlot slot) { PlayableCard card = slot.Card; return (card != null) ? card.PowerLevel : 0; } private IEnumerator OnSelectSlot(CardSlot slot) { yield return TemporaryControl.GainTemporaryControl(slot.Card); } public override IEnumerator ActivateAfterSpendFuel() { yield return ((AbilityBehaviour)this).PreSuccessfulTriggerSequence(); yield return CardEffectsHelper.CardChooseSlotSequence(aimWeapon: CardExtensions.GetExtendedPropertyAsBool(((Card)((AbilityBehaviour)this).Card).Info, "WeaponTowHook").GetValueOrDefault(), behaviour: (AbilityBehaviour)(object)this, slotSelectedCallback: OnSelectSlot, validSlots: ValidOpposingSlots, aiSlotEvaluator: EvaluateSlot, dialogue: null, cursor: (CursorType)19); yield return ((AbilityBehaviour)this).LearnAbility(0.2f); } } public class ActivateEverything : AbilityBehaviour { public static Ability AbilityID { get; private set; } public override Ability Ability => AbilityID; static ActivateEverything() { //IL_007b: Unknown result type (might be due to invalid IL or missing references) AbilityInfo val = ScriptableObject.CreateInstance<AbilityInfo>(); val.rulebookName = "Button Pusher"; val.rulebookDescription = "When [creature] is played, all activated sigils and sigils that trigger on play or on death are activated."; val.canStack = false; val.powerLevel = 2; val.opponentUsable = true; val.passive = false; val.metaCategories = new List<AbilityMetaCategory> { (AbilityMetaCategory)2 }; AbilityID = AbilityManager.Add("zorro.inscryption.infiniscryption.p03sigillibrary", val, typeof(ActivateEverything), (Texture)(object)TextureHelper.GetImageAsTexture("ability_activate_everything.png", typeof(ActivateEverything).Assembly, (FilterMode)0)).Id; } public override bool RespondsToResolveOnBoard() { return true; } public override IEnumerator OnResolveOnBoard() { List<CardSlot> slots = BoardManagerExtensions.GetSlotsCopy(Singleton<BoardManager>.Instance, CardExtensions.IsPlayerCard(((AbilityBehaviour)this).Card)).Concat(BoardManagerExtensions.GetSlotsCopy(Singleton<BoardManager>.Instance, !CardExtensions.IsPlayerCard(((AbilityBehaviour)this).Card))).ToList(); foreach (CardSlot slot2 in slots) { if ((Object)(object)slot2.Card != (Object)null && !slot2.Card.Dead) { yield return slot2.Card.TriggerHandler.OnTrigger((Trigger)3, Array.Empty<object>()); } } foreach (CardSlot slot3 in slots) { if (!((Object)(object)slot3.Card != (Object)null) || slot3.Card.Dead) { continue; } foreach (Ability ability in CardExtensions.AllAbilities(slot3.Card)) { AbilityInfo info = AbilitiesUtil.GetInfo(ability); if (info.activated) { yield return slot3.Card.TriggerHandler.OnTrigger((Trigger)18, new object[1] { ability }); } } } foreach (CardSlot slot4 in slots) { if ((Object)(object)slot4.Card != (Object)null && !slot4.Card.Dead) { yield return slot4.Card.TriggerHandler.OnTrigger((Trigger)15, new object[1] { false }); } } foreach (CardSlot slot in slots) { if ((Object)(object)slot.Card != (Object)null && !slot.Card.Dead) { yield return slot.Card.TriggerHandler.OnTrigger((Trigger)12, new object[2] { false, null }); } } } } [HarmonyPatch] public class BatteryPower : VariableStatBehaviour { public static SpecialStatIcon AbilityID { get; private set; } public override SpecialStatIcon IconType => AbilityID; public static int EnergySpent { get; private set; } static BatteryPower() { //IL_006a: Unknown result type (might be due to invalid IL or missing references) StatIconInfo val = StatIconManager.New("zorro.inscryption.infiniscryption.p03sigillibrary", "Energy Power", "The value represented with this sigil will be equal to the number of times the player has spent energy this turn.", typeof(BatteryPower)); val.appliesToAttack = true; val.appliesToHealth = false; AbilityExtensions.AddMetaCategories(val, (AbilityMetaCategory[])(object)new AbilityMetaCategory[1] { (AbilityMetaCategory)2 }); AbilityExtensions.SetIcon(val, TextureHelper.GetImageAsTexture("battery_stat_icon.png", typeof(BatteryPower).Assembly, (FilterMode)0), (FilterMode?)null); AbilityID = val.iconType; } [HarmonyPatch(typeof(ResourcesManager), "SpendEnergy")] [HarmonyPrefix] private static void IncrementSpendCounter(int amount) { if (amount > 0) { EnergySpent++; } } [HarmonyPatch(typeof(TurnManager), "DoUpkeepPhase")] [HarmonyPrefix] private static void ResetSpendCounter(bool playerUpkeep) { if (playerUpkeep) { EnergySpent = 0; } } public override int[] GetStatValues() { return new int[2] { EnergySpent, 0 }; } } public class BrittleGainsUndying : CardsWithAbilityHaveAbility { public static Ability AbilityID { get; private set; } public override Ability Ability => AbilityID; public override Ability RequiredAbility => (Ability)35; public override Ability GainedAbility => (Ability)14; static BrittleGainsUndying() { //IL_007b: Unknown result type (might be due to invalid IL or missing references) AbilityInfo val = ScriptableObject.CreateInstance<AbilityInfo>(); val.rulebookName = "Brittle Lord"; val.rulebookDescription = "As long as [creature] is alive, cards with Brittle have Unkillable."; val.canStack = false; val.powerLevel = 1; val.opponentUsable = false; val.passive = false; val.metaCategories = new List<AbilityMetaCategory> { (AbilityMetaCategory)2 }; AbilityID = AbilityManager.Add("zorro.inscryption.infiniscryption.p03sigillibrary", val, typeof(BrittleGainsUndying), (Texture)(object)TextureHelper.GetImageAsTexture("ability_brittle_gains_deathless.png", typeof(BrittleGainsUndying).Assembly, (FilterMode)0)).Id; } } [HarmonyPatch] public class BuckWildRework : AbilityBehaviour { public override Ability Ability => AbilityID; public static Ability AbilityID { get; private set; } static BuckWildRework() { //IL_0083: Unknown result type (might be due to invalid IL or missing references) AbilityInfo val = ScriptableObject.CreateInstance<AbilityInfo>(); val.rulebookName = "Buck Wild"; val.rulebookDescription = "Upon taking damage, this card will charge into the opposing slot, killing anything in its way."; val.canStack = false; val.powerLevel = 1; val.opponentUsable = false; val.passive = false; val.metaCategories = new List<AbilityMetaCategory> { (AbilityMetaCategory)2, (AbilityMetaCategory)3 }; AbilityID = AbilityManager.Add("zorro.inscryption.infiniscryption.p03sigillibrary", val, typeof(BuckWildRework), (Texture)(object)TextureHelper.GetImageAsTexture("ability_buckwild.png", typeof(BuckWildRework).Assembly, (FilterMode)0)).Id; } public override bool RespondsToTakeDamage(PlayableCard source) { return (Object)(object)source != (Object)null && !((AbilityBehaviour)this).Card.Dead && ((AbilityBehaviour)this).Card.Health > 0; } public override IEnumerator OnTakeDamage(PlayableCard source) { CardSlot opposingSlot = ((AbilityBehaviour)this).Card.Slot.opposingSlot; int sanityCount = 0; while ((Object)(object)opposingSlot.Card != (Object)null && !opposingSlot.Card.Dead && sanityCount < 10) { ((Card)((AbilityBehaviour)this).Card).Anim.StrongNegationEffect(); yield return (object)new WaitForSeconds(0.2f); yield return opposingSlot.Card.Die(false, ((AbilityBehaviour)this).Card, true); sanityCount++; } if (!((AbilityBehaviour)this).Card.Dead && ((AbilityBehaviour)this).Card.Health >= 0 && !((Object)(object)opposingSlot.Card != (Object)null)) { yield return (object)new WaitForSeconds(0.25f); ((AbilityBehaviour)this).Card.SetIsOpponentCard(!((AbilityBehaviour)this).Card.OpponentCard); Transform transform = ((Component)((AbilityBehaviour)this).Card).transform; transform.eulerAngles += new Vector3(0f, 0f, -180f); yield return Singleton<BoardManager>.Instance.AssignCardToSlot(((AbilityBehaviour)this).Card, CardExtensions.OpposingSlot(((AbilityBehaviour)this).Card), 0.25f, (Action)null, true); Debug.Log((object)((Component)((AbilityBehaviour)this).Card).transform.eulerAngles); Debug.Log((object)((Component)((AbilityBehaviour)this).Card).transform.rotation); yield return (object)new WaitForSeconds(0.5f); } } } [HarmonyPatch] public class BurntOut : AbilityBehaviour { private CardSlot oldSlot = null; public static Ability AbilityID { get; private set; } public override Ability Ability => AbilityID; static BurntOut() { //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Unknown result type (might be due to invalid IL or missing references) AbilityInfo val = ScriptableObject.CreateInstance<AbilityInfo>(); val.rulebookName = "Burnt Out"; val.rulebookDescription = "When [creature] dies, it sets the land on fire for three turns."; val.canStack = false; val.powerLevel = -1; val.opponentUsable = false; val.passive = false; val.metaCategories = new List<AbilityMetaCategory> { (AbilityMetaCategory)2, BurningSlotBase.FlamingAbility }; AbilityExtensions.SetPixelAbilityIcon(val, TextureHelper.GetImageAsTexture("pixelability_burnt_out.png", typeof(Molotov).Assembly, (FilterMode)0), (FilterMode?)null); AbilityID = AbilityManager.Add("zorro.inscryption.infiniscryption.p03sigillibrary", val, typeof(BurntOut), (Texture)(object)TextureHelper.GetImageAsTexture("ability_burnt_out.png", typeof(Molotov).Assembly, (FilterMode)0)).Id; } public override bool RespondsToPreDeathAnimation(bool wasSacrifice) { return ((AbilityBehaviour)this).Card.OnBoard; } public override IEnumerator OnPreDeathAnimation(bool wasSacrifice) { oldSlot = ((AbilityBehaviour)this).Card.Slot; yield break; } public override bool RespondsToDie(bool wasSacrifice, PlayableCard killer) { return true; } public override IEnumerator OnDie(bool wasSacrifice, PlayableCard killer) { if (!((Object)(object)oldSlot != (Object)null)) { yield break; } if (Singleton<BoardManager>.Instance is BoardManager3D) { AudioController.Instance.PlaySound3D("molotov", (MixerGroup)4, ((Component)oldSlot).transform.position, 0.7f, 0f, (Pitch)null, (Repetition)null, (Randomization)null, (Distortion)null, false); } GameObject fireball = Object.Instantiate<GameObject>(AssetBundleManager.Prefabs["Fire_Ball"], ((Component)oldSlot).transform); CustomCoroutine.WaitThenExecute(3f, (Action)delegate { if ((Object)(object)fireball != (Object)null) { Object.Destroy((Object)(object)fireball); } }, false); yield return (object)new WaitForSeconds(1f); yield return SlotModificationExtensions.SetSlotModification(oldSlot, BurningSlotBase.GetFireLevel(2, oldSlot)); yield return (object)new WaitForSeconds(0.25f); } } public abstract class CardsWithAbilityHaveAbility : AbilityBehaviour { protected CardsWithAbilityHaveAbilityManager.Rule __rule = null; public abstract Ability RequiredAbility { get; } public virtual Trait RequiredTrait => (Trait)0; public abstract Ability GainedAbility { get; } public virtual List<Ability> AdditionalGainedAbilities => null; public virtual bool AppliesToOpposing => false; public virtual bool AppliesToFriendly => true; internal virtual CardsWithAbilityHaveAbilityManager.Rule Rule { get { //IL_0019: 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_0025: Unknown result type (might be due to invalid IL or missing references) if (__rule != null) { return __rule; } __rule = new CardsWithAbilityHaveAbilityManager.Rule(RequiredAbility, RequiredTrait, GainedAbility, AdditionalGainedAbilities); return __rule; } } } public class CatchFire : AbilityBehaviour { public static Ability AbilityID { get; private set; } public override Ability Ability => AbilityID; static CatchFire() { //IL_007b: Unknown result type (might be due to invalid IL or missing references) AbilityInfo val = ScriptableObject.CreateInstance<AbilityInfo>(); val.rulebookName = "Catch Fire"; val.rulebookDescription = "When [creature] targets a slot, the target is set on fire."; val.canStack = false; val.powerLevel = 1; val.opponentUsable = false; val.passive = false; val.metaCategories = new List<AbilityMetaCategory> { (AbilityMetaCategory)2 }; AbilityID = AbilityManager.Add("zorro.inscryption.infiniscryption.p03sigillibrary", val, typeof(CatchFire), (Texture)(object)TextureHelper.GetImageAsTexture("ability_gain_fire.png", typeof(CatchFire).Assembly, (FilterMode)0)).Id; } public override bool RespondsToSlotTargetedForAttack(CardSlot slot, PlayableCard attacker) { return (Object)(object)slot.Card != (Object)null && CardSlotExtensions.IsOpponentSlot(slot) == ((AbilityBehaviour)this).Card.OpponentCard; } public override IEnumerator OnSlotTargetedForAttack(CardSlot slot, PlayableCard attacker) { yield return BurningSlotBase.SetSlotOnFireBasic(2, slot, Singleton<BoardManager>.Instance.PlayerSlotsCopy[0]); yield return (object)new WaitForSeconds(0.1f); yield return ((AbilityBehaviour)this).LearnAbility(0f); } } [HarmonyPatch] public class CellDeEvolve : Evolve { public override Ability Ability => AbilityID; public static Ability AbilityID { get; private set; } static CellDeEvolve() { //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: Unknown result type (might be due to invalid IL or missing references) AbilityInfo val = ScriptableObject.CreateInstance<AbilityInfo>(); val.rulebookName = "Transforms When Unpowered"; val.rulebookDescription = "If [creature] is NOT within a circuit at the beginning of the turn, it will transform back into its original form."; val.canStack = false; val.powerLevel = 0; val.opponentUsable = true; AbilityExtensions.SetExtendedProperty(val, "InverseCell", (object)true).conduitCell = true; val.passive = false; val.hasColorOverride = true; val.colorOverride = AbilityExtensions.AbilityByID((IEnumerable<FullAbility>)AbilityManager.BaseGameAbilities, (Ability)85).Info.colorOverride; val.metaCategories = new List<AbilityMetaCategory> { (AbilityMetaCategory)2 }; AbilityID = AbilityManager.Add("zorro.inscryption.infiniscryption.p03sigillibrary", val, typeof(CellDeEvolve), (Texture)(object)TextureHelper.GetImageAsTexture("ability_celldevolve.png", typeof(CellDeEvolve).Assembly, (FilterMode)0)).Id; } public override bool RespondsToUpkeep(bool playerUpkeep) { return ((Evolve)this).RespondsToUpkeep(playerUpkeep) && !Singleton<ConduitCircuitManager>.Instance.SlotIsWithinCircuit(((AbilityBehaviour)this).Card.Slot); } } [HarmonyPatch] public class CellDeSubmerge : Submerge { public override Ability Ability => AbilityID; public static Ability AbilityID { get; private set; } static CellDeSubmerge() { //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: Unknown result type (might be due to invalid IL or missing references) AbilityInfo val = ScriptableObject.CreateInstance<AbilityInfo>(); val.rulebookName = "Waterborne When Unpowered"; val.rulebookDescription = "If [creature] is NOT within a circuit it submerges itself during its opponent's turn. While submerged, opposing creatures attack its owner directly."; val.canStack = false; val.powerLevel = 0; val.opponentUsable = true; AbilityExtensions.SetExtendedProperty(val, "InverseCell", (object)true).conduitCell = true; val.passive = false; val.hasColorOverride = true; val.colorOverride = AbilityExtensions.AbilityByID((IEnumerable<FullAbility>)AbilityManager.BaseGameAbilities, (Ability)85).Info.colorOverride; val.metaCategories = new List<AbilityMetaCategory> { (AbilityMetaCategory)2 }; AbilityID = AbilityManager.Add("zorro.inscryption.infiniscryption.p03sigillibrary", val, typeof(CellDeSubmerge), (Texture)(object)TextureHelper.GetImageAsTexture("ability_celldesubmerge.png", typeof(CellDeSubmerge).Assembly, (FilterMode)0)).Id; } public override bool RespondsToTurnEnd(bool playerTurnEnd) { return ((Submerge)this).RespondsToTurnEnd(playerTurnEnd) && !Singleton<ConduitCircuitManager>.Instance.SlotIsWithinCircuit(((AbilityBehaviour)this).Card.Slot); } } [HarmonyPatch] public class CellDrawZapUpkeep : AbilityBehaviour { public override Ability Ability => AbilityID; public static Ability AbilityID { get; private set; } static CellDrawZapUpkeep() { //IL_0059: 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_00a5: Unknown result type (might be due to invalid IL or missing references) AbilityInfo val = ScriptableObject.CreateInstance<AbilityInfo>(); val.rulebookName = "Short Circuit"; val.rulebookDescription = "If [creature] is within a circuit at the beginning of the turn, create a Zap! in your hand. Zap! is defined as a spell that costs 2 energy and deals 1 damage to any target."; val.canStack = false; val.powerLevel = 1; val.opponentUsable = false; val.conduitCell = true; val.passive = false; val.hasColorOverride = true; val.colorOverride = AbilityExtensions.AbilityByID((IEnumerable<FullAbility>)AbilityManager.BaseGameAbilities, (Ability)85).Info.colorOverride; val.metaCategories = new List<AbilityMetaCategory> { (AbilityMetaCategory)2 }; AbilityID = AbilityManager.Add("zorro.inscryption.infiniscryption.p03sigillibrary", val, typeof(CellDrawZapUpkeep), (Texture)(object)TextureHelper.GetImageAsTexture("ability_celldrawzap.png", typeof(CellDrawZapUpkeep).Assembly, (FilterMode)0)).Id; } public override bool RespondsToUpkeep(bool playerUpkeep) { return playerUpkeep != ((AbilityBehaviour)this).Card.OpponentCard && Singleton<ConduitCircuitManager>.Instance.SlotIsWithinCircuit(((AbilityBehaviour)this).Card.Slot); } public override IEnumerator OnUpkeep(bool playerUpkeep) { yield return ((AbilityBehaviour)this).PreSuccessfulTriggerSequence(); if ((int)Singleton<ViewManager>.Instance.CurrentView != 1) { yield return (object)new WaitForSeconds(0.2f); Singleton<ViewManager>.Instance.SwitchToView((View)1, false, false); yield return (object)new WaitForSeconds(0.2f); } yield return Singleton<CardSpawner>.Instance.SpawnCardToHand(CardLoader.GetCardByName("P03SIG_ZAP"), (List<CardModificationInfo>)null, 0.25f, (Action<PlayableCard>)null); yield return (object)new WaitForSeconds(0.45f); yield return ((AbilityBehaviour)this).LearnAbility(0.1f); } } [HarmonyPatch] public class CellEvolve : Evolve { public override Ability Ability => AbilityID; public static Ability AbilityID { get; private set; } static CellEvolve() { //IL_0059: 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_00cf: Unknown result type (might be due to invalid IL or missing references) AbilityInfo val = ScriptableObject.CreateInstance<AbilityInfo>(); val.rulebookName = "Transforms When Powered"; val.rulebookDescription = "If [creature] is within a circuit at the beginning of the turn, it will transform into a stronger form."; val.canStack = false; val.powerLevel = 1; val.opponentUsable = true; val.conduitCell = true; val.passive = false; val.hasColorOverride = true; val.colorOverride = AbilityExtensions.AbilityByID((IEnumerable<FullAbility>)AbilityManager.BaseGameAbilities, (Ability)85).Info.colorOverride; val.metaCategories = new List<AbilityMetaCategory> { (AbilityMetaCategory)2 }; AbilityExtensions.SetPixelAbilityIcon(val, TextureHelper.GetImageAsTexture("pixelability_cell_evolve.png", typeof(CellEvolve).Assembly, (FilterMode)0), (FilterMode?)null); AbilityID = AbilityManager.Add("zorro.inscryption.infiniscryption.p03sigillibrary", val, typeof(CellEvolve), (Texture)(object)TextureHelper.GetImageAsTexture("ability_cellevolve.png", typeof(CellEvolve).Assembly, (FilterMode)0)).Id; } public override bool RespondsToUpkeep(bool playerUpkeep) { return ((Evolve)this).RespondsToUpkeep(playerUpkeep) && Singleton<ConduitCircuitManager>.Instance.SlotIsWithinCircuit(((AbilityBehaviour)this).Card.Slot); } public override CardInfo GetTransformCardInfo() { //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Expected O, but got Unknown //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Expected O, but got Unknown CardInfo transformCardInfo = ((Evolve)this).GetTransformCardInfo(); if (!transformCardInfo.HasAbility(CellDeEvolve.AbilityID)) { CardModificationInfo val = new CardModificationInfo(CellDeEvolve.AbilityID); val.fromEvolve = true; val.nonCopyable = true; val.negateAbilities.Add(AbilityID); transformCardInfo.mods.Add(val); EvolveParams val2 = new EvolveParams(); ref CardInfo evolution = ref val2.evolution; object obj = ((Card)((AbilityBehaviour)this).Card).Info.Clone(); evolution = (CardInfo)((obj is CardInfo) ? obj : null); val2.turnsToEvolve = 1; transformCardInfo.evolveParams = val2; } return transformCardInfo; } } public class CellExplodonate : Explodonate, IOnBellRung { public override Ability Ability => AbilityID; public new static Ability AbilityID { get; private set; } private bool ShouldExplode => ((AbilityBehaviour)this).Card.OnBoard && Singleton<ConduitCircuitManager>.Instance.SlotIsWithinCircuit(((AbilityBehaviour)this).Card.Slot); static CellExplodonate() { //IL_0059: 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_00d7: Unknown result type (might be due to invalid IL or missing references) AbilityInfo val = ScriptableObject.CreateInstance<AbilityInfo>(); val.rulebookName = "Explodonate When Powered"; val.rulebookDescription = "If [creature] is within a circuit, it detonates itself and all five adjacent spaces."; val.canStack = false; val.powerLevel = 1; val.opponentUsable = true; val.conduitCell = true; val.passive = false; val.hasColorOverride = true; val.colorOverride = AbilityExtensions.AbilityByID((IEnumerable<FullAbility>)AbilityManager.BaseGameAbilities, (Ability)85).Info.colorOverride; val.metaCategories = new List<AbilityMetaCategory> { (AbilityMetaCategory)2, (AbilityMetaCategory)3 }; AbilityExtensions.SetPixelAbilityIcon(val, TextureHelper.GetImageAsTexture("pixelability_cellexplodeondeath.png", typeof(CellExplodonate).Assembly, (FilterMode)0), (FilterMode?)null); AbilityID = AbilityManager.Add("zorro.inscryption.infiniscryption.p03sigillibrary", val, typeof(CellExplodonate), (Texture)(object)TextureHelper.GetImageAsTexture("ability_explodewhenpowered.png", typeof(CellExplodonate).Assembly, (FilterMode)0)).Id; } public override bool RespondsToPreDeathAnimation(bool wasSacrifice) { return ShouldExplode && base.RespondsToPreDeathAnimation(wasSacrifice); } public override bool RespondsToResolveOnBoard() { return ShouldExplode; } public override bool RespondsToOtherCardResolve(PlayableCard otherCard) { return ShouldExplode; } public override bool RespondsToOtherCardAssignedToSlot(PlayableCard otherCard) { return ShouldExplode; } public bool RespondsToBellRung(bool playerCombatP