using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using BepInEx;
using DiskCardGame;
using FUTSSNewCardsMod.Utils;
using HarmonyLib;
using InscryptionAPI.Ascension;
using InscryptionAPI.Card;
using InscryptionAPI.Guid;
using InscryptionAPI.Helpers;
using InscryptionAPI.Helpers.Extensions;
using InscryptionAPI.Triggers;
using Pixelplacement;
using UnityEngine;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyTitle("ForestUnderTheStarrySky")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("ForestUnderTheStarrySky")]
[assembly: AssemblyCopyright("Copyright © 2025")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("ce178e1a-8da7-40d5-a6ad-8af9c2f68bd8")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace FUTSSNewCardsMod.Utils
{
internal static class CombatBridge
{
private static MethodInfo _unlockAchievement;
private static FieldInfo _weightPrefabField;
private static MethodInfo _showCardBlocked;
private static MethodInfo _preOverkillDamage;
private static MethodInfo _postOverkillDamage;
private static MethodInfo _visualizeClearSniper;
static CombatBridge()
{
Type typeFromHandle = typeof(CombatPhaseManager);
Type type = Type.GetType("DiskCardGame.AchievementManager, Assembly-CSharp");
if (type != null)
{
_unlockAchievement = AccessTools.Method(type, "Unlock", new Type[1] { typeof(Achievement) }, (Type[])null);
}
Type type2 = Type.GetType("DiskCardGame.CombatPhaseManager3D, Assembly-CSharp");
if (type2 != null)
{
_weightPrefabField = AccessTools.Field(type2, "weightPrefab");
}
_unlockAchievement = AccessTools.Method(type, "Unlock", new Type[1] { typeof(Achievement) }, (Type[])null);
_weightPrefabField = AccessTools.Field(typeof(CombatPhaseManager3D), "weightPrefab");
_showCardBlocked = AccessTools.Method(typeFromHandle, "ShowCardBlocked", new Type[1] { typeof(PlayableCard) }, (Type[])null);
_preOverkillDamage = AccessTools.Method(typeFromHandle, "PreOverkillDamage", new Type[1] { typeof(PlayableCard) }, (Type[])null);
_postOverkillDamage = AccessTools.Method(typeFromHandle, "PostOverkillDamage", new Type[1] { typeof(PlayableCard) }, (Type[])null);
_visualizeClearSniper = AccessTools.Method(typeFromHandle, "VisualizeClearSniperAbility", Type.EmptyTypes, (Type[])null);
}
public static void UnlockAchievement(Achievement achievement)
{
//IL_001e: Unknown result type (might be due to invalid IL or missing references)
if (_unlockAchievement != null)
{
_unlockAchievement.Invoke(null, new object[1] { achievement });
}
else
{
Debug.LogWarning((object)"[CombatBridge] UnlockAchievement 方法未找到");
}
}
public static GameObject GetWeightPrefab()
{
CombatPhaseManager instance = Singleton<CombatPhaseManager>.Instance;
CombatPhaseManager3D val = (CombatPhaseManager3D)(object)((instance is CombatPhaseManager3D) ? instance : null);
if ((Object)(object)val == (Object)null || _weightPrefabField == null)
{
return null;
}
object? value = _weightPrefabField.GetValue(val);
return (GameObject)((value is GameObject) ? value : null);
}
public static IEnumerator ShowCardBlocked(PlayableCard card)
{
if (!(_showCardBlocked == null))
{
yield return _showCardBlocked.Invoke(Singleton<CombatPhaseManager>.Instance, new object[1] { card }) as IEnumerator;
}
}
public static IEnumerator PreOverkillDamage(PlayableCard queuedCard)
{
if (!(_preOverkillDamage == null))
{
yield return _preOverkillDamage.Invoke(Singleton<CombatPhaseManager>.Instance, new object[1] { queuedCard }) as IEnumerator;
}
}
public static IEnumerator PostOverkillDamage(PlayableCard queuedCard)
{
if (!(_postOverkillDamage == null))
{
yield return _postOverkillDamage.Invoke(Singleton<CombatPhaseManager>.Instance, new object[1] { queuedCard }) as IEnumerator;
}
}
public static void VisualizeClearSniperAbility()
{
if (_visualizeClearSniper != null)
{
_visualizeClearSniper.Invoke(Singleton<CombatPhaseManager>.Instance, null);
}
}
}
public class FakeCombatHandler
{
public class FakeCombatThing
{
private List<Transform> damageWeights = new List<Transform>();
public static bool isCombatPhase;
public static Ability ability;
public int DamageDealtThisPhase { get; private set; }
public IEnumerator FakeCombat(bool playerIsAttacker, SpecialBattleSequencer specialSequencer, CardSlot attacker, List<CardSlot> overrideTargets = null, int overrideDMG = -1)
{
DamageDealtThisPhase = 0;
yield return SlotAttackSequence(attacker, overrideTargets, overrideDMG);
if (DamageDealtThisPhase > 0 && !isCombatPhase)
{
yield return (object)new WaitForSeconds(0.4f);
yield return VisualizeDamageMovingToScales(playerIsAttacker);
int excessDamage = 0;
if (playerIsAttacker)
{
excessDamage = Singleton<LifeManager>.Instance.Balance + DamageDealtThisPhase - 5;
excessDamage = Mathf.Max(0, excessDamage);
}
int damage = DamageDealtThisPhase - excessDamage;
if (DamageDealtThisPhase >= 666)
{
CombatBridge.UnlockAchievement((Achievement)25);
}
if ((Object)(object)specialSequencer == (Object)null || !specialSequencer.PreventDamageAddedToScales)
{
yield return Singleton<LifeManager>.Instance.ShowDamageSequence(damage, damage, !playerIsAttacker, 0f, (GameObject)null, 0f, true);
}
if ((Object)(object)specialSequencer != (Object)null)
{
yield return specialSequencer.DamageAddedToScale(damage + excessDamage, playerIsAttacker);
}
if ((!((Object)(object)specialSequencer != (Object)null) || !specialSequencer.PreventDamageAddedToScales) && excessDamage > 0 && Singleton<TurnManager>.Instance.Opponent.NumLives == 1 && Singleton<TurnManager>.Instance.Opponent.GiveCurrencyOnDefeat)
{
yield return Singleton<TurnManager>.Instance.Opponent.TryRevokeSurrender();
RunState run = RunState.Run;
run.currency += excessDamage;
}
Singleton<ViewManager>.Instance.Controller.LockState = (ViewLockState)0;
DamageDealtThisPhase = 0;
}
}
private IEnumerator VisualizeDamageMovingToScales(bool playerIsAttacker)
{
if ((Object)(object)Singleton<LifeManager>.Instance.Scales3D != (Object)null)
{
Vector3 scalesPos = (playerIsAttacker ? Singleton<LifeManager>.Instance.Scales3D.OpponentSide : Singleton<LifeManager>.Instance.Scales3D.PlayerSide);
foreach (Transform transform in damageWeights)
{
Tween.Position(transform, scalesPos, 0.2f, 0f, Tween.EaseOut, (LoopType)0, (Action)null, (Action)null, true);
Object.Destroy((Object)(object)((Component)transform).gameObject, 0.2f);
yield return (object)new WaitForSeconds(0.02f);
}
}
else
{
foreach (Transform transform2 in damageWeights)
{
Part1Scales.DissolveWeight(((Component)transform2).gameObject);
yield return (object)new WaitForSeconds(0.02f);
}
}
yield return (object)new WaitForSeconds(0.25f);
}
public IEnumerator SpecialVisualiseAttacking(CardSlot attackingSlot, CardSlot targetSlot, int damage)
{
if (!Object.op_Implicit((Object)(object)Singleton<CombatPhaseManager>.Instance))
{
yield break;
}
if (Singleton<CombatPhaseManager>.Instance is CombatPhaseManager3D)
{
List<Transform> newWeights = new List<Transform>();
GameObject weightPrefab = CombatBridge.GetWeightPrefab();
if ((Object)(object)weightPrefab == (Object)null)
{
yield break;
}
for (int i = 0; i < Mathf.Min(20, damage); i++)
{
GameObject gameObject = Object.Instantiate<GameObject>(weightPrefab);
Vector3 vector = new Vector3(0f, 0f, attackingSlot.IsPlayerSlot ? 0.75f : (-0.75f));
gameObject.transform.position = ((Component)targetSlot).transform.position + vector + new Vector3((float)i * 0.1f, 0f, (float)i * 0.1f);
gameObject.transform.eulerAngles = Random.insideUnitSphere;
newWeights.Add(gameObject.transform);
}
damageWeights.AddRange(newWeights);
((Card)attackingSlot.Card).Anim.PlayAttackAnimation(true, targetSlot, (Action)delegate
{
//IL_006d: Unknown result type (might be due to invalid IL or missing references)
//IL_0077: Unknown result type (might be due to invalid IL or missing references)
if ((Object)(object)Singleton<TableVisualEffectsManager>.Instance != (Object)null)
{
Singleton<TableVisualEffectsManager>.Instance.ThumpTable(0.075f * (float)Mathf.Min(10, damage));
}
foreach (Transform item in newWeights)
{
if ((Object)(object)item != (Object)null)
{
((Component)item).gameObject.SetActive(true);
((Component)item).GetComponent<Rigidbody>().AddForce(Vector3.up * 4f, (ForceMode)2);
}
}
});
}
else
{
((Card)attackingSlot.Card).Anim.PlayAttackAnimation(true, targetSlot, (Action)delegate
{
});
}
}
public IEnumerator SlotAttackSlot(CardSlot attackingSlot, CardSlot opposingSlot, float waitAfter = 0f, int overrideDMG = -1)
{
yield return Singleton<GlobalTriggerHandler>.Instance.TriggerCardsOnBoard((Trigger)6, false, new object[2] { opposingSlot, attackingSlot.Card });
yield return (object)new WaitForSeconds(0.025f);
if (!((Object)(object)attackingSlot.Card != (Object)null))
{
yield break;
}
if (((Card)attackingSlot.Card).Anim.DoingAttackAnimation)
{
yield return (object)new WaitUntil((Func<bool>)(() => !((Card)attackingSlot.Card).Anim.DoingAttackAnimation));
yield return (object)new WaitForSeconds(0.25f);
}
if ((Object)(object)opposingSlot.Card != (Object)null && attackingSlot.Card.AttackIsBlocked(opposingSlot))
{
ProgressionData.SetAbilityLearned((Ability)21);
yield return CombatBridge.ShowCardBlocked(attackingSlot.Card);
}
else if (attackingSlot.Card.CanAttackDirectly(opposingSlot))
{
DamageDealtThisPhase += ((overrideDMG > -1) ? overrideDMG : attackingSlot.Card.Attack);
yield return SpecialVisualiseAttacking(attackingSlot, opposingSlot, (overrideDMG > -1) ? overrideDMG : attackingSlot.Card.Attack);
if (attackingSlot.Card.TriggerHandler.RespondsToTrigger((Trigger)20, new object[1] { (overrideDMG > -1) ? overrideDMG : attackingSlot.Card.Attack }))
{
yield return attackingSlot.Card.TriggerHandler.OnTrigger((Trigger)20, new object[1] { (overrideDMG > -1) ? overrideDMG : attackingSlot.Card.Attack });
}
}
else
{
float heightOffset = (((Object)(object)opposingSlot.Card == (Object)null) ? 0f : opposingSlot.Card.SlotHeightOffset);
if (heightOffset > 0f)
{
Tween.Position(((Component)attackingSlot.Card).transform, ((Component)attackingSlot.Card).transform.position + Vector3.up * heightOffset, 0.05f, 0f, Tween.EaseInOut, (LoopType)0, (Action)null, (Action)null, true);
}
((Card)attackingSlot.Card).Anim.PlayAttackAnimation(attackingSlot.Card.IsFlyingAttackingReach(), opposingSlot, (Action)null);
yield return (object)new WaitForSeconds(0.07f);
((Card)attackingSlot.Card).Anim.SetAnimationPaused(true);
PlayableCard attackingCard = attackingSlot.Card;
yield return Singleton<GlobalTriggerHandler>.Instance.TriggerCardsOnBoard((Trigger)7, false, new object[1] { opposingSlot.Card });
if ((Object)(object)attackingCard != (Object)null && (Object)(object)attackingCard.Slot != (Object)null)
{
attackingSlot = attackingCard.Slot;
if (attackingSlot.Card.IsFlyingAttackingReach())
{
((Card)opposingSlot.Card).Anim.PlayJumpAnimation();
yield return (object)new WaitForSeconds(0.3f);
((Card)attackingSlot.Card).Anim.PlayAttackInAirAnimation();
}
((Card)attackingSlot.Card).Anim.SetAnimationPaused(false);
yield return (object)new WaitForSeconds(0.05f);
int overkillDamage = ((overrideDMG > -1) ? (overrideDMG - opposingSlot.Card.Health) : (attackingSlot.Card.Attack - opposingSlot.Card.Health));
yield return opposingSlot.Card.TakeDamage((overrideDMG > -1) ? overrideDMG : attackingSlot.Card.Attack, attackingSlot.Card);
yield return DealOverkillDamage(overkillDamage, attackingSlot, opposingSlot);
if ((Object)(object)attackingSlot.Card != (Object)null && heightOffset > 0f)
{
yield return Singleton<BoardManager>.Instance.AssignCardToSlot(attackingSlot.Card, attackingSlot.Card.Slot, 0.1f, (Action)null, false);
}
}
}
yield return (object)new WaitForSeconds(waitAfter);
}
private IEnumerator SlotAttackSequence(CardSlot slot, List<CardSlot> overrideTargets = null, int overrideDMG = -1)
{
List<CardSlot> opposingSlots = slot.Card.GetOpposingSlots();
if (overrideTargets != null)
{
opposingSlots = overrideTargets;
}
Singleton<ViewManager>.Instance.SwitchToView(Singleton<BoardManager>.Instance.CombatView, false, false);
foreach (CardSlot opposingSlot in opposingSlots)
{
Singleton<ViewManager>.Instance.SwitchToView(Singleton<BoardManager>.Instance.CombatView, false, false);
yield return SlotAttackSlot(slot, opposingSlot, (opposingSlots.Count > 1) ? 0.1f : 0f, overrideDMG);
}
CombatBridge.VisualizeClearSniperAbility();
}
protected virtual IEnumerator DealOverkillDamage(int damage, CardSlot attackingSlot, CardSlot opposingSlot)
{
if (!((Object)(object)attackingSlot.Card != (Object)null) || !attackingSlot.IsPlayerSlot || damage <= 0)
{
yield break;
}
PlayableCard queuedCard = Singleton<BoardManager>.Instance.GetCardQueuedForSlot(opposingSlot);
if ((Object)(object)queuedCard != (Object)null)
{
yield return (object)new WaitForSeconds(0.1f);
Singleton<ViewManager>.Instance.SwitchToView(Singleton<BoardManager>.Instance.QueueView, false, false);
yield return (object)new WaitForSeconds(0.3f);
if (queuedCard.HasAbility((Ability)21))
{
yield return CombatBridge.ShowCardBlocked(attackingSlot.Card);
yield break;
}
yield return CombatBridge.PreOverkillDamage(queuedCard);
yield return queuedCard.TakeDamage(damage, attackingSlot.Card);
yield return CombatBridge.PostOverkillDamage(queuedCard);
}
}
}
public static IEnumerator DoSimpleFakeCombat(int damage, CardSlot attacker, CardSlot target)
{
bool impactFrameReached = false;
((Card)attacker.Card).Anim.PlayAttackAnimation(false, target, (Action)delegate
{
impactFrameReached = true;
});
yield return (object)new WaitUntil((Func<bool>)(() => impactFrameReached));
yield return target.Card.TakeDamage(damage, attacker.Card);
}
}
}
namespace NewCardsMod
{
[BepInPlugin("NewCards", "ForestUnderTheStarrySkyMod", "2.0.0")]
[BepInDependency(/*Could not decode attribute arguments.*/)]
public class Plugin : BaseUnityPlugin
{
[HarmonyPatch(typeof(RunIntroSequencer))]
public static class StarterDocilePatch
{
[HarmonyPostfix]
[HarmonyPatch("TryModifyStarterCards")]
public static void AddDocileToStarters()
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_0026: Unknown result type (might be due to invalid IL or missing references)
//IL_002b: Unknown result type (might be due to invalid IL or missing references)
//IL_002c: Unknown result type (might be due to invalid IL or missing references)
//IL_002e: Invalid comparison between Unknown and I4
//IL_0077: Unknown result type (might be due to invalid IL or missing references)
//IL_0087: Unknown result type (might be due to invalid IL or missing references)
//IL_0088: Unknown result type (might be due to invalid IL or missing references)
//IL_008f: Expected O, but got Unknown
if (!AscensionSaveData.Data.ChallengeIsActive(DocileStarterChallengeID))
{
return;
}
Ability enumValue = GuidManager.GetEnumValue<Ability>("nevernamed.inscryption.sigils", "Docile");
if ((int)enumValue == 0)
{
Debug.LogError((object)"Count not find NevernamedSigils Docile!");
return;
}
foreach (CardInfo card in ((CardCollectionInfo)RunState.Run.playerDeck).Cards)
{
if (!card.HasTrait((Trait)13) && !card.HasAbility(enumValue))
{
CardModificationInfo val = new CardModificationInfo(enumValue);
RunState.Run.playerDeck.ModifyCard(card, val);
}
}
}
[HarmonyPostfix]
[HarmonyPatch("RunIntroSequence")]
public static IEnumerator ShowActivationAnnouncement(IEnumerator values)
{
if (AscensionSaveData.Data.ChallengeIsActive(DocileStarterChallengeID))
{
ChallengeActivationUI.TryShowActivation(DocileStarterChallengeID);
}
yield return values;
}
}
[HarmonyPatch(typeof(RunIntroSequencer))]
public static class StarterCowardPatch
{
[HarmonyPostfix]
[HarmonyPatch("TryModifyStarterCards")]
public static void AddCowardToStarters()
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_0026: Unknown result type (might be due to invalid IL or missing references)
//IL_002b: Unknown result type (might be due to invalid IL or missing references)
//IL_002c: Unknown result type (might be due to invalid IL or missing references)
//IL_002e: Invalid comparison between Unknown and I4
//IL_0077: Unknown result type (might be due to invalid IL or missing references)
//IL_0087: Unknown result type (might be due to invalid IL or missing references)
//IL_0088: Unknown result type (might be due to invalid IL or missing references)
//IL_008f: Expected O, but got Unknown
if (!AscensionSaveData.Data.ChallengeIsActive(CowardStarterChallengeID))
{
return;
}
Ability enumValue = GuidManager.GetEnumValue<Ability>("nevernamed.inscryption.sigils", "Coward");
if ((int)enumValue == 0)
{
Debug.LogError((object)"Count not find NevernamedSigils Coward!");
return;
}
foreach (CardInfo card in ((CardCollectionInfo)RunState.Run.playerDeck).Cards)
{
if (!card.HasTrait((Trait)13) && !card.HasAbility(enumValue))
{
CardModificationInfo val = new CardModificationInfo(enumValue);
RunState.Run.playerDeck.ModifyCard(card, val);
}
}
}
[HarmonyPostfix]
[HarmonyPatch("RunIntroSequence")]
public static IEnumerator ShowActivationAnnouncement(IEnumerator values)
{
if (AscensionSaveData.Data.ChallengeIsActive(DocileStarterChallengeID))
{
ChallengeActivationUI.TryShowActivation(DocileStarterChallengeID);
}
yield return values;
}
}
[HarmonyPatch(typeof(RunIntroSequencer))]
public static class StarterEndangeredPatch
{
[HarmonyPostfix]
[HarmonyPatch("TryModifyStarterCards")]
public static void AddEndangeredToStarters()
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_0026: Unknown result type (might be due to invalid IL or missing references)
//IL_002b: Unknown result type (might be due to invalid IL or missing references)
//IL_002c: Unknown result type (might be due to invalid IL or missing references)
//IL_002e: Invalid comparison between Unknown and I4
//IL_0077: Unknown result type (might be due to invalid IL or missing references)
//IL_0087: Unknown result type (might be due to invalid IL or missing references)
//IL_0088: Unknown result type (might be due to invalid IL or missing references)
//IL_008f: Expected O, but got Unknown
if (!AscensionSaveData.Data.ChallengeIsActive(CowardStarterChallengeID))
{
return;
}
Ability enumValue = GuidManager.GetEnumValue<Ability>("nevernamed.inscryption.sigils", "Endangered");
if ((int)enumValue == 0)
{
Debug.LogError((object)"Count not find NevernamedSigils Coward!");
return;
}
foreach (CardInfo card in ((CardCollectionInfo)RunState.Run.playerDeck).Cards)
{
if (!card.HasTrait((Trait)13) && !card.HasAbility(enumValue))
{
CardModificationInfo val = new CardModificationInfo(enumValue);
RunState.Run.playerDeck.ModifyCard(card, val);
}
}
}
[HarmonyPostfix]
[HarmonyPatch("RunIntroSequence")]
public static IEnumerator ShowActivationAnnouncement(IEnumerator values)
{
if (AscensionSaveData.Data.ChallengeIsActive(DocileStarterChallengeID))
{
ChallengeActivationUI.TryShowActivation(DocileStarterChallengeID);
}
yield return values;
}
}
public static AscensionChallenge DocileStarterChallengeID;
public static AscensionChallenge CowardStarterChallengeID;
public static AscensionChallenge EndangeredStarterChallengeID;
private void Awake()
{
//IL_001e: Unknown result type (might be due to invalid IL or missing references)
//IL_0024: Expected O, but got Unknown
//IL_0041: Unknown result type (might be due to invalid IL or missing references)
//IL_0047: Expected O, but got Unknown
//IL_0064: Unknown result type (might be due to invalid IL or missing references)
//IL_006a: Expected O, but got Unknown
((BaseUnityPlugin)this).Logger.LogInfo((object)"Loaded Forest Under The Starry Sky Mod!");
addChallengeDoclieDeck();
Harmony val = new Harmony("NewCards");
val.PatchAll(typeof(StarterDocilePatch));
addChallengeCowardDeck();
Harmony val2 = new Harmony("NewCards");
val2.PatchAll(typeof(StarterCowardPatch));
addChallengeEndangeredDeck();
Harmony val3 = new Harmony("NewCards");
val3.PatchAll(typeof(StarterEndangeredPatch));
addExtremelyFastAttack();
addFanaticism();
addFortifiedArmor();
addKillingDesire();
addExtremitySprint();
addMonetaryRewards();
addImbalaneSuppression();
addRoar();
addMadCowDisease();
addUndercurrentsSurge();
addCornerSmash();
}
private void addExtremelyFastAttack()
{
//IL_006f: 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)
AbilityInfo val = AbilityExtensions.SetDefaultPart1Ability(AbilityExtensions.SetPixelAbilityIcon(AbilityManager.New("NewCards", "ExtremelyFastAttack", "When [creature] is played, will direct attack once.", typeof(ExtremelyFastAttack), "ExtremelyFastAttack.png"), TextureHelper.GetImageAsTexture("Act2_ExtremelyFastAttack.png", (FilterMode)0), (FilterMode?)(FilterMode)0));
val.canStack = false;
val.passive = false;
val.activated = false;
val.opponentUsable = true;
val.powerLevel = 4;
val.rulebookName = "Extremely Fast Attack";
ExtremelyFastAttack.ability = val.ability;
}
private void addFanaticism()
{
//IL_006f: 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)
AbilityInfo val = AbilityExtensions.SetDefaultPart1Ability(AbilityExtensions.SetPixelAbilityIcon(AbilityManager.New("NewCards", "Fanaticism", "When [creature] is killed, it will attack once.", typeof(Fanaticism), "Fanaticism.png"), TextureHelper.GetImageAsTexture("Act2_Fanaticism.png", (FilterMode)0), (FilterMode?)(FilterMode)0));
val.canStack = false;
val.passive = false;
val.activated = false;
val.opponentUsable = true;
val.powerLevel = 4;
val.rulebookName = "Fanaticism";
ExtremelyFastAttack.ability = val.ability;
}
private void addFortifiedArmor()
{
//IL_006f: 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)
AbilityInfo val = AbilityExtensions.SetDefaultPart1Ability(AbilityExtensions.SetPixelAbilityIcon(AbilityManager.New("NewCards", "FortifiedArmor", " [creature] will reduce the damage they receive by one point when they are injured.", typeof(FortifiedArmor), "FortifiedArmor.png"), TextureHelper.GetImageAsTexture("Act2_FortifiedArmor.png", (FilterMode)0), (FilterMode?)(FilterMode)0));
val.canStack = false;
val.passive = false;
val.activated = false;
val.opponentUsable = true;
val.powerLevel = 3;
val.rulebookName = "Fortified Armor";
FortifiedArmor.ability = val.ability;
}
private void addKillingDesire()
{
//IL_006f: 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)
AbilityInfo val = AbilityExtensions.SetDefaultPart1Ability(AbilityExtensions.SetPixelAbilityIcon(AbilityManager.New("NewCards", "KillingDesire", "When [creature] is kill another card, the adjacent cards gain +1 health.", typeof(KillingDesire), "KillingDesire.png"), TextureHelper.GetImageAsTexture("Act2_KillingDesire.png", (FilterMode)0), (FilterMode?)(FilterMode)0));
val.canStack = false;
val.passive = false;
val.activated = false;
val.opponentUsable = true;
val.powerLevel = 2;
val.rulebookName = "KillingDesire";
KillingDesire.ability = val.ability;
}
private void addMonetaryRewards()
{
//IL_006f: 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)
AbilityInfo val = AbilityExtensions.SetDefaultPart1Ability(AbilityExtensions.SetPixelAbilityIcon(AbilityManager.New("NewCards", "MonetaryRewards", "When [creature] killing other cards, it will add a weight to the opposing side's balance.", typeof(MonetaryRewards), "MonetaryRewards.png"), TextureHelper.GetImageAsTexture("Act2_MonetaryRewards.png", (FilterMode)0), (FilterMode?)(FilterMode)0));
val.canStack = false;
val.passive = false;
val.activated = false;
val.opponentUsable = true;
val.powerLevel = 2;
val.rulebookName = "MonetaryRewards";
ExtremitySprint.ability = val.ability;
}
private void addImbalaneSuppression()
{
//IL_006f: 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)
AbilityInfo val = AbilityExtensions.SetDefaultPart1Ability(AbilityExtensions.SetPixelAbilityIcon(AbilityManager.New("NewCards", "ImbalaneSuppression", "When [creature] is present, after the opponent's turn ends, a weight will be added to the balance of the owner; and after the enemy's turn ends, a weight will be added to the balance of the opponent.", typeof(ImbalaneSuppression), "ImbalaneSuppression.png"), TextureHelper.GetImageAsTexture("Act2_ImbalaneSuppression.png", (FilterMode)0), (FilterMode?)(FilterMode)0));
val.canStack = false;
val.passive = false;
val.activated = false;
val.opponentUsable = false;
val.powerLevel = 2;
val.rulebookName = "ImbalaneSuppression";
ExtremitySprint.ability = val.ability;
}
private void addExtremitySprint()
{
//IL_006f: 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)
AbilityInfo val = AbilityExtensions.SetDefaultPart1Ability(AbilityExtensions.SetPixelAbilityIcon(AbilityManager.New("NewCards", "ExtremitySprint", "At the end of the owner's turn, [creature] will move twice in the direction inscribed in the sigil.", typeof(ExtremitySprint), "ExtremitySprint.png"), TextureHelper.GetImageAsTexture("Act2_ExtremitySprint.png", (FilterMode)0), (FilterMode?)(FilterMode)0));
val.canStack = false;
val.passive = false;
val.activated = false;
val.opponentUsable = true;
val.powerLevel = 1;
val.rulebookName = "ExtremitySprint";
ExtremitySprint.ability = val.ability;
}
private void addRoar()
{
//IL_006f: 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)
AbilityInfo val = AbilityExtensions.SetDefaultPart1Ability(AbilityExtensions.SetPixelAbilityIcon(AbilityManager.New("NewCards", "Roar", "When [creature] is played, it reduces the all creatures on the opponent's -1 attack.", typeof(Roar), "Roar.png"), TextureHelper.GetImageAsTexture("Act2_Roar.png", (FilterMode)0), (FilterMode?)(FilterMode)0));
val.canStack = false;
val.passive = false;
val.activated = false;
val.opponentUsable = false;
val.powerLevel = 5;
val.rulebookName = "Roar";
ExtremitySprint.ability = val.ability;
}
private void addMadCowDisease()
{
//IL_006f: 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)
AbilityInfo val = AbilityExtensions.SetDefaultPart1Ability(AbilityExtensions.SetPixelAbilityIcon(AbilityManager.New("NewCards", "MadCowDisease", "When [creature] is attacked,it will swap slot with attacker.", typeof(MadCowDisease), "MadCowDisease.png"), TextureHelper.GetImageAsTexture("Act2_MadCowDisease.png", (FilterMode)0), (FilterMode?)(FilterMode)0));
val.canStack = false;
val.passive = false;
val.activated = false;
val.opponentUsable = true;
val.powerLevel = 0;
val.rulebookName = "MadCowDisease";
BloodGuzzler.ability = val.ability;
}
private void addUndercurrentsSurge()
{
//IL_006f: 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)
AbilityInfo val = AbilityExtensions.SetDefaultPart1Ability(AbilityExtensions.SetPixelAbilityIcon(AbilityManager.New("NewCards", "UndercurrentsSurge", "When [creature] is played,it will give sigil 'Waterborne' to the opposing card.", typeof(UndercurrentsSurge), "UndercurrentsSurge.png"), TextureHelper.GetImageAsTexture("Act2_UndercurrentsSurge.png", (FilterMode)0), (FilterMode?)(FilterMode)0));
val.canStack = false;
val.passive = false;
val.activated = false;
val.opponentUsable = false;
val.powerLevel = 1;
val.rulebookName = "UndercurrentsSurge";
BloodGuzzler.ability = val.ability;
}
private void addCornerSmash()
{
//IL_006f: 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)
AbilityInfo val = AbilityExtensions.SetDefaultPart1Ability(AbilityExtensions.SetPixelAbilityIcon(AbilityManager.New("NewCards", "CornerSmash", "When [creature] is moved, it will attack once.", typeof(CornerSmash), "CornerSmash.png"), TextureHelper.GetImageAsTexture("Act2_CornerSmash.png", (FilterMode)0), (FilterMode?)(FilterMode)0));
val.canStack = false;
val.passive = false;
val.activated = false;
val.opponentUsable = false;
val.powerLevel = 3;
val.rulebookName = "CornerSmash";
BloodGuzzler.ability = val.ability;
}
private void addBloodGuzzler()
{
//IL_006f: 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)
AbilityInfo val = AbilityExtensions.SetDefaultPart1Ability(AbilityExtensions.SetPixelAbilityIcon(AbilityManager.New("NewCards", "BloodGuzzler", "When [creature] deals damage, it gains 1 Health for each damage dealt.", typeof(BloodGuzzler), "BloodGuzzler.png"), TextureHelper.GetImageAsTexture("Act2_BloodGuzzler.png", (FilterMode)0), (FilterMode?)(FilterMode)0));
val.canStack = false;
val.passive = false;
val.activated = false;
val.opponentUsable = true;
val.powerLevel = 4;
val.rulebookName = "Blood Guzzler";
BloodGuzzler.ability = val.ability;
}
private void addChallengeDoclieDeck()
{
//IL_0036: Unknown result type (might be due to invalid IL or missing references)
//IL_003b: Unknown result type (might be due to invalid IL or missing references)
FullChallenge val = ChallengeManager.Add("NewCards", "Lose bestiality", "Give 'Doclie' sigil to all the cards in the starter deck.", 40, TextureHelper.GetImageAsTexture("LoseBestiality.png", (FilterMode)0), TextureHelper.GetImageAsTexture("LoseBestiality_Activated.png", (FilterMode)0), 0, false);
DocileStarterChallengeID = val.Challenge.challengeType;
}
private void addChallengeCowardDeck()
{
//IL_0036: Unknown result type (might be due to invalid IL or missing references)
//IL_003b: Unknown result type (might be due to invalid IL or missing references)
FullChallenge val = ChallengeManager.Add("NewCards", "Avoidance", "Give 'Coward' sigil to all the cards in the starter deck.", 25, TextureHelper.GetImageAsTexture("Avoidance.png", (FilterMode)0), TextureHelper.GetImageAsTexture("DefaultChallenge_activated.png", (FilterMode)0), 0, false);
CowardStarterChallengeID = val.Challenge.challengeType;
}
private void addChallengeEndangeredDeck()
{
//IL_0036: Unknown result type (might be due to invalid IL or missing references)
//IL_003b: Unknown result type (might be due to invalid IL or missing references)
FullChallenge val = ChallengeManager.Add("NewCards", "Unstable existence", "Give 'Endangered' sigil to all the cards in the starter deck.", 30, TextureHelper.GetImageAsTexture("Unstable existence.png", (FilterMode)0), TextureHelper.GetImageAsTexture("UnstableExistence_activated.png", (FilterMode)0), 0, false);
EndangeredStarterChallengeID = val.Challenge.challengeType;
}
}
public static class PluginInfo
{
public const string PLUGIN_GUID = "ForestUnderTheStarrySkyMod";
public const string PLUGIN_NAME = "ForestUnderTheStarrySkyMod";
public const string PLUGIN_VERSION = "2.0.0";
}
public class ExtremelyFastAttack : AbilityBehaviour
{
public static Ability ability;
public override Ability Ability => ability;
public override bool RespondsToResolveOnBoard()
{
return true;
}
public override IEnumerator OnResolveOnBoard()
{
yield return (object)new WaitForSeconds(0.1f);
yield return ((AbilityBehaviour)this).PreSuccessfulTriggerSequence();
yield return (object)new WaitForSeconds(0.1f);
FakeCombatHandler.FakeCombatThing fakecombat = new FakeCombatHandler.FakeCombatThing();
yield return fakecombat.FakeCombat(!((AbilityBehaviour)this).Card.OpponentCard, null, ((AbilityBehaviour)this).Card.Slot);
yield return (object)new WaitForSeconds(0.1f);
}
}
public class Fanaticism : AbilityBehaviour
{
public static Ability ability;
public override Ability Ability => ability;
public override bool RespondsToOtherCardDie(PlayableCard card, CardSlot deathSlot, bool fromCombat, PlayableCard killer)
{
return (Object)(object)((AbilityBehaviour)this).Card == (Object)(object)killer && (Object)(object)killer != (Object)null && (Object)(object)((AbilityBehaviour)this).Card != (Object)null;
}
public override IEnumerator OnOtherCardDie(PlayableCard card, CardSlot deathSlot, bool fromCombat, PlayableCard killer)
{
yield return (object)new WaitForSeconds(0.1f);
yield return ((AbilityBehaviour)this).PreSuccessfulTriggerSequence();
yield return (object)new WaitForSeconds(0.1f);
FakeCombatHandler.FakeCombatThing fakecombat = new FakeCombatHandler.FakeCombatThing();
yield return fakecombat.FakeCombat(!((AbilityBehaviour)this).Card.OpponentCard, null, ((AbilityBehaviour)this).Card.Slot);
yield return (object)new WaitForSeconds(0.1f);
}
}
public class FortifiedArmor : AbilityBehaviour, IModifyDamageTaken
{
public static Ability ability;
public override Ability Ability => ability;
public bool RespondsToModifyDamageTaken(PlayableCard target, int damage, PlayableCard attacker, int originalDamage)
{
return (Object)(object)target == (Object)(object)((AbilityBehaviour)this).Card && damage > 0;
}
public int OnModifyDamageTaken(PlayableCard target, int damage, PlayableCard attacker, int originalDamage)
{
((Card)((AbilityBehaviour)this).Card).Anim.StrongNegationEffect();
return Mathf.Max(0, damage - 1);
}
public int TriggerPriority(PlayableCard target, int damage, PlayableCard attacker)
{
return 0;
}
}
public class KillingDesire : AbilityBehaviour
{
public static Ability ability;
public override Ability Ability => ability;
public override bool RespondsToOtherCardDie(PlayableCard card, CardSlot deathSlot, bool fromCombat, PlayableCard killer)
{
return (Object)(object)killer == (Object)(object)((AbilityBehaviour)this).Card;
}
public override IEnumerator OnOtherCardDie(PlayableCard card, CardSlot deathSlot, bool fromCombat, PlayableCard killer)
{
yield return ((AbilityBehaviour)this).PreSuccessfulTriggerSequence();
CardSlot toLeft = Singleton<BoardManager>.Instance.GetAdjacent(((AbilityBehaviour)this).Card.Slot, true);
if ((Object)(object)toLeft != (Object)null && (Object)(object)toLeft.Card != (Object)null)
{
toLeft.Card.TemporaryMods.Add(new CardModificationInfo(0, 1));
}
CardSlot toRight = Singleton<BoardManager>.Instance.GetAdjacent(((AbilityBehaviour)this).Card.Slot, false);
if ((Object)(object)toRight != (Object)null && (Object)(object)toRight.Card != (Object)null)
{
toRight.Card.TemporaryMods.Add(new CardModificationInfo(0, 1));
}
((AbilityBehaviour)this).Card.TemporaryMods.Add(new CardModificationInfo(0, 1));
yield return ((AbilityBehaviour)this).LearnAbility(0.25f);
}
}
public class BloodGuzzler : AbilityBehaviour
{
public static Ability ability;
public override Ability Ability => ability;
public override bool RespondsToDealDamage(int amount, PlayableCard target)
{
return CardExtensions.NotDead(((AbilityBehaviour)this).Card) && amount > 0;
}
public override IEnumerator OnDealDamage(int amount, PlayableCard target)
{
yield return ((AbilityBehaviour)this).PreSuccessfulTriggerSequence();
((AbilityBehaviour)this).Card.AddTemporaryMod(new CardModificationInfo(0, amount));
((AbilityBehaviour)this).Card.OnStatsChanged();
((Card)((AbilityBehaviour)this).Card).Anim.StrongNegationEffect();
((Card)((AbilityBehaviour)this).Card).RenderCard();
yield return (object)new WaitForSeconds(0.25f);
yield return ((AbilityBehaviour)this).LearnAbility(0.25f);
}
}
public class ExtremitySprint : AbilityBehaviour
{
public static Ability ability;
public override Ability Ability => ability;
public override bool RespondsToTurnEnd(bool playerTurnEnd)
{
return ((AbilityBehaviour)this).Card.OpponentCard != playerTurnEnd;
}
public override bool RespondsToResolveOnBoard()
{
//IL_0055: 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)
CardExtensions.SetExtendedProperty(((Card)((AbilityBehaviour)this).Card).Info, "ExtremitySprintDirection", (object)"1");
if (((Card)((AbilityBehaviour)this).Card).RenderInfo != null && ((Card)((AbilityBehaviour)this).Card).RenderInfo.flippedAbilityIcons != null && ((Card)((AbilityBehaviour)this).Card).RenderInfo.flippedAbilityIcons.Contains(((AbilityBehaviour)this).Ability))
{
((Card)((AbilityBehaviour)this).Card).RenderInfo.flippedAbilityIcons.Remove(((AbilityBehaviour)this).Ability);
}
return false;
}
public override IEnumerator OnTurnEnd(bool playerTurnEnd)
{
yield return MoveCardOnce();
yield return (object)new WaitForSeconds(0.3f);
yield return MoveCardOnce();
}
private IEnumerator MoveCardOnce()
{
CardSlot currentSlot = ((AbilityBehaviour)this).Card.Slot;
if ((Object)(object)currentSlot == (Object)null)
{
yield break;
}
string dirStr = CardExtensions.GetExtendedProperty(((Card)((AbilityBehaviour)this).Card).Info, "ExtremitySprintDirection");
int direction = 1;
if (!string.IsNullOrEmpty(dirStr) && int.TryParse(dirStr, out var parsed))
{
direction = parsed;
}
if (direction != 1 && direction != -1)
{
direction = 1;
}
CardSlot targetSlot = ((direction == 1) ? CardSlotExtensions.GetAdjacent(currentSlot, false) : CardSlotExtensions.GetAdjacent(currentSlot, true));
if ((Object)(object)targetSlot == (Object)null || (Object)(object)targetSlot.Card != (Object)null)
{
direction *= -1;
CardExtensions.SetExtendedProperty(((Card)((AbilityBehaviour)this).Card).Info, "ExtremitySprintDirection", (object)direction.ToString());
if (((Card)((AbilityBehaviour)this).Card).RenderInfo != null)
{
if (((Card)((AbilityBehaviour)this).Card).RenderInfo.flippedAbilityIcons == null)
{
((Card)((AbilityBehaviour)this).Card).RenderInfo.flippedAbilityIcons = new List<Ability>();
}
if (direction == -1)
{
if (!((Card)((AbilityBehaviour)this).Card).RenderInfo.flippedAbilityIcons.Contains(((AbilityBehaviour)this).Ability))
{
((Card)((AbilityBehaviour)this).Card).RenderInfo.flippedAbilityIcons.Add(((AbilityBehaviour)this).Ability);
}
}
else if (((Card)((AbilityBehaviour)this).Card).RenderInfo.flippedAbilityIcons.Contains(((AbilityBehaviour)this).Ability))
{
((Card)((AbilityBehaviour)this).Card).RenderInfo.flippedAbilityIcons.Remove(((AbilityBehaviour)this).Ability);
}
}
targetSlot = ((direction == 1) ? CardSlotExtensions.GetAdjacent(currentSlot, false) : CardSlotExtensions.GetAdjacent(currentSlot, true));
}
if ((Object)(object)targetSlot != (Object)null && (Object)(object)targetSlot.Card == (Object)null)
{
yield return CardSlotExtensions.AssignCardToSlot(targetSlot, ((AbilityBehaviour)this).Card, 0.1f, (Action)null, true);
}
}
}
public class MonetaryRewards : AbilityBehaviour
{
public static Ability ability;
public override Ability Ability => ability;
public override bool RespondsToOtherCardDie(PlayableCard card, CardSlot deathSlot, bool fromCombat, PlayableCard killer)
{
return (Object)(object)killer == (Object)(object)((AbilityBehaviour)this).Card;
}
public override IEnumerator OnOtherCardDie(PlayableCard card, CardSlot deathSlot, bool fromCombat, PlayableCard killer)
{
yield return ((AbilityBehaviour)this).PreSuccessfulTriggerSequence();
yield return Singleton<LifeManager>.Instance.ShowDamageSequence(1, 1, !((AbilityBehaviour)this).Card.Slot.IsPlayerSlot, 0.25f, (GameObject)null, 0f, true);
}
}
public class ImbalaneSuppression : AbilityBehaviour
{
public static Ability ability;
public override Ability Ability => ability;
public override bool RespondsToTurnEnd(bool PlayerTurn)
{
return true;
}
public override IEnumerator OnTurnEnd(bool playerTurn)
{
yield return (object)new WaitForSeconds(0.15f);
bool damageToPlayer = !playerTurn;
yield return Singleton<LifeManager>.Instance.ShowDamageSequence(1, 1, damageToPlayer, 0.25f, (GameObject)null, 0f, true);
yield return (object)new WaitForSeconds(0.1f);
}
}
public class Roar : AbilityBehaviour
{
private Dictionary<PlayableCard, CardModificationInfo> debuffs = new Dictionary<PlayableCard, CardModificationInfo>();
public static Ability ability;
public override Ability Ability => ability;
private void ApplyDebuff(PlayableCard target)
{
//IL_0029: Unknown result type (might be due to invalid IL or missing references)
//IL_002f: Expected O, but got Unknown
if (!((Object)(object)target == (Object)null) && !target.Dead && !debuffs.ContainsKey(target))
{
CardModificationInfo val = new CardModificationInfo(-1, 0);
target.AddTemporaryMod(val);
debuffs[target] = val;
}
}
private void RemoveAllDebuffs()
{
List<PlayableCard> list = new List<PlayableCard>();
foreach (KeyValuePair<PlayableCard, CardModificationInfo> debuff in debuffs)
{
if ((Object)(object)debuff.Key != (Object)null && !debuff.Key.Dead)
{
debuff.Key.RemoveTemporaryMod(debuff.Value, true);
}
list.Add(debuff.Key);
}
foreach (PlayableCard item in list)
{
debuffs.Remove(item);
}
}
private void ApplyToAllEnemies()
{
foreach (CardSlot item in Singleton<BoardManager>.Instance.OpponentSlotsCopy)
{
if ((Object)(object)item.Card != (Object)null)
{
ApplyDebuff(item.Card);
}
}
}
public override bool RespondsToResolveOnBoard()
{
ApplyToAllEnemies();
return false;
}
public override bool RespondsToOtherCardResolve(PlayableCard other)
{
if (other.OpponentCard)
{
ApplyDebuff(other);
}
return false;
}
public override bool RespondsToDie(bool wasSacrifice, PlayableCard killer)
{
RemoveAllDebuffs();
return false;
}
public override IEnumerator OnDie(bool wasSacrifice, PlayableCard killer)
{
RemoveAllDebuffs();
yield break;
}
}
public class MadCowDisease : AbilityBehaviour
{
public static Ability ability;
public override Ability Ability => ability;
public override bool RespondsToTakeDamage(PlayableCard attacker)
{
return (Object)(object)((AbilityBehaviour)this).Card != (Object)null && (Object)(object)attacker != (Object)null && CardExtensions.NotDead(((AbilityBehaviour)this).Card) && !attacker.HasAbility((Ability)105);
}
public override IEnumerator OnTakeDamage(PlayableCard source)
{
yield return ((AbilityBehaviour)this).PreSuccessfulTriggerSequence();
CardSlot mySlot = ((AbilityBehaviour)this).Card.Slot;
CardSlot attackerSlot = source.Slot;
if (!((Object)(object)mySlot == (Object)null) && !((Object)(object)attackerSlot == (Object)null) && !source.Dead && source.OnBoard)
{
PlayableCard myCard = ((AbilityBehaviour)this).Card;
yield return CardSlotExtensions.AssignCardToSlot(attackerSlot, myCard, 0.1f, (Action)null, true);
yield return CardSlotExtensions.AssignCardToSlot(mySlot, source, 0.1f, (Action)null, true);
}
}
}
public class UndercurrentsSurge : AbilityBehaviour
{
public static Ability ability;
public override Ability Ability => ability;
public override bool RespondsToResolveOnBoard()
{
return (Object)(object)((AbilityBehaviour)this).Card != (Object)null && ((AbilityBehaviour)this).Card.OnBoard && !((AbilityBehaviour)this).Card.Dead;
}
public override IEnumerator OnResolveOnBoard()
{
yield return ((AbilityBehaviour)this).PreSuccessfulTriggerSequence();
CardSlot opposingSlot = ((AbilityBehaviour)this).Card.Slot.opposingSlot;
if (!((Object)(object)opposingSlot == (Object)null))
{
PlayableCard target = opposingSlot.Card;
if (!((Object)(object)target == (Object)null) && !target.Dead)
{
target.AddTemporaryMod(new CardModificationInfo((Ability)13));
target.OnStatsChanged();
((Card)target).RenderCard();
((Card)target).Anim.StrongNegationEffect();
}
}
}
}
public class CornerSmash : AbilityBehaviour
{
private bool hasResolved;
public static Ability ability;
public override Ability Ability => ability;
public override bool RespondsToResolveOnBoard()
{
return true;
}
public override IEnumerator OnResolveOnBoard()
{
hasResolved = true;
yield break;
}
public override bool RespondsToOtherCardAssignedToSlot(PlayableCard otherCard)
{
if (!hasResolved || (Object)(object)otherCard != (Object)(object)((AbilityBehaviour)this).Card)
{
return false;
}
if ((Object)(object)((AbilityBehaviour)this).Card == (Object)null || ((AbilityBehaviour)this).Card.Dead || (Object)(object)((AbilityBehaviour)this).Card.Slot == (Object)null)
{
return false;
}
return true;
}
public override IEnumerator OnOtherCardAssignedToSlot(PlayableCard otherCard)
{
yield return ((AbilityBehaviour)this).PreSuccessfulTriggerSequence();
FakeCombatHandler.FakeCombatThing fakeCombat = new FakeCombatHandler.FakeCombatThing();
yield return fakeCombat.FakeCombat(!((AbilityBehaviour)this).Card.OpponentCard, null, ((AbilityBehaviour)this).Card.Slot);
}
}
}