public CeladrochCharacterCardController(Card card, TurnTakerController turnTakerController) : base(card, turnTakerController) { SpecialStringMaker.ShowTokenPool(base.CharacterCard.FindTokenPool(StormPoolIdentifier)).Condition = () => Card.IsInPlay && !Card.IsFlipped; SpecialStringMaker.ShowSpecialString(TopCardSpecialString, null, () => new[] { FindCeladrochsTopCard() }).Condition = () => Game.HasGameStarted && Card.IsInPlay && !Card.IsFlipped; SpecialStringMaker.ShowHeroTargetWithHighestHP(numberOfTargets: Game.H - 1).Condition = () => Card.IsInPlay && Card.IsFlipped; SpecialStringMaker.ShowIfElseSpecialString(() => Game.Journal.CardEntersPlayEntriesThisTurn().Any(e => e.Card.IsVillain), () => "A villain card has entered play this turn.", () => "A villain card has not entered play this turn.").Condition = () => Card.IsInPlay && Card.IsFlipped && Game.ActiveTurnTaker == TurnTaker; }
public MarkOfTheWrithingNightCardController(Card card, TurnTakerController turnTakerController) : base(card, turnTakerController) { SpecialStringMaker.ShowHeroCharacterCardWithHighestHP(); SpecialStringMaker.ShowHeroCharacterCardWithLowestHP(); SpecialStringMaker.ShowSpecialString(ShowHeroWithFewestCardsInPlay); SpecialStringMaker.ShowHeroWithMostCards(false); }
public AllergicReactionCardController(Card card, TurnTakerController turnTakerController) : base(card, turnTakerController) { SpecialStringMaker.ShowSpecialString(() => "No damage types are currently [b]monitored.[/b]", showInEffectsList: () => true).Condition = () => base.Card.IsInPlayAndHasGameText && !GetMonitoredType().HasValue; SpecialStringMaker.ShowSpecialString(() => GetMonitoredType().ToString() + " damage is currently [b]monitored.[/b]", showInEffectsList: () => true).Condition = () => base.Card.IsInPlayAndHasGameText && GetMonitoredType().HasValue; SpecialStringMaker.ShowIfElseSpecialString(() => FindCardsWhere(new LinqCardCriteria((Card c) => c.NextToLocation.Cards.Where((Card x) => x.DoKeywordsContain("antibody")).Count() > 1), visibleToCard: GetCardSource()).Count() > 0, () => "There are " + FindCardsWhere(new LinqCardCriteria((Card c) => c.NextToLocation.Cards.Where((Card x) => x.DoKeywordsContain("antibody")).Count() > 1), visibleToCard: GetCardSource()).Count().ToString() + " targets with 2 or more Antibodies.", () => "There are no targets with 2 or more Antibodies.", () => false); }
protected CeladrochCelestialCardController(Card card, TurnTakerController turnTakerController, DamageType damageType, string partnerIdentifier) : base(card, turnTakerController) { _damageType = damageType; _partnerIdentifier = partnerIdentifier; SpecialStringMaker.ShowSpecialString(CelestialImmuneStatusString).Condition = () => Card.IsInPlayAndHasGameText; }
protected StSimeonsGhostCardController(Card card, TurnTakerController turnTakerController, string[] affectedIdentifiers, bool flipIdentiferInPlayCondition = false) : base(card, turnTakerController) { this.AffectedIdentifiers = affectedIdentifiers; this.FlipIdentiferInPlayCondition = flipIdentiferInPlayCondition; base.AddThisCardControllerToList(CardControllerListType.ChangesVisibility); SpecialStringMaker.ShowSpecialString(() => BuildAffectedCardString()); }
public HydraNoxiousFireTiamatInstructionsCardController(Card card, TurnTakerController turnTakerController) : base(card, turnTakerController, "HydraInfernoTiamatCharacter", "HydraDecayTiamatCharacter", "ElementOfFire") { SpecialStringMaker.ShowSpecialString(() => "The heroes may not win the game.").Condition = () => !base.Card.IsFlipped; SpecialStringMaker.ShowNumberOfCards(new LinqCardCriteria((Card c) => c.DoKeywordsContain("head") && c.IsFlipped, "", useCardsSuffix: false, singular: "decapitated head", plural: "decapitated heads")).Condition = () => base.Card.IsFlipped; SpecialStringMaker.ShowHeroTargetWithHighestHP().Condition = () => !base.Card.IsFlipped; SpecialStringMaker.ShowHeroTargetWithHighestHP(ranking: 2).Condition = () => base.Card.IsFlipped && !FirstHeadCardController().Card.IsFlipped; SpecialStringMaker.ShowNumberOfCardsAtLocation(base.TurnTaker.Trash, new LinqCardCriteria((Card c) => c.Identifier == "AcidBreath", "acid breath")).Condition = () => base.Card.IsFlipped && FirstHeadCardController().Card.IsFlipped&& !SecondHeadCardController().Card.IsFlipped&& SecondHeadCardController().Card.IsInPlayAndNotUnderCard; }
public NarrowEscapeCardController(Card card, TurnTakerController turnTakerController) : base(card, turnTakerController) { SpecialStringMaker.ShowIfElseSpecialString(() => HasBeenSetToTrueThisTurn(OncePerTurn), () => base.Card.Title + " has already reduced damage this turn.", () => base.Card.Title + " has not yet reduced damage this turn."); SpecialStringMaker.ShowSpecialString(BuildBlockedSpecialString); SpecialStringMaker.ShowSpecialString(BuildNotBlockedSpecialString); SpecialStringMaker.ShowLowestHP(1, () => 2, new LinqCardCriteria((Card c) => c.IsHeroCharacterCard)); }
public PreciseDeflectionCardController(Card card, TurnTakerController turnTakerController) : base(card, turnTakerController) { SpecialStringMaker.ShowIfElseSpecialString(() => HasBeenSetToTrueThisTurn(PreventDamageOncePerTurn), () => base.Card.Title + " has already prevented damage this turn.", () => base.Card.Title + " has not yet prevented damage this turn.", () => true); SpecialStringMaker.ShowLocationOfCards(new LinqCardCriteria((Card c) => IsRelay(c) && c.IsInPlayAndHasGameText && c.Location.IsHero), specifyPlayAreas: true).Condition = () => NumRelaysInHeroPlayAreas() > 0; SpecialStringMaker.ShowSpecialString(() => "There are no Relay cards in hero play areas.").Condition = () => NumRelaysInHeroPlayAreas() <= 0; AllowFastCoroutinesDuringPretend = false; }
public NobilityOfDuskCardController(Card card, TurnTakerController turnTakerController) : base(card, turnTakerController) { var ss = SpecialStringMaker.ShowSpecialString(() => $"{Card.Title} can increase damage this turn."); ss.Condition = IsBuffAvailable; this.RunModifyDamageAmountSimulationForThisCard = false; }
public CryoRegulatorCardController(Card card, TurnTakerController turnTakerController) : base(card, turnTakerController) { // If in play, show current play area SpecialStringMaker.ShowLocationOfCards(new LinqCardCriteria((Card c) => c == base.Card, base.Card.Title, useCardsSuffix: false), specifyPlayAreas: true).Condition = () => base.Card.IsInPlayAndHasGameText; SpecialStringMaker.ShowSpecialString(() => base.Card.Title + " hasn't been activated since it entered play", showInEffectsList: () => base.Card.IsInPlayAndHasGameText && (!MostRecentChosen().HasValue || !activeOptions.Contains(MostRecentChosen().Value))).Condition = () => base.Card.IsInPlayAndHasGameText && (!MostRecentChosen().HasValue || !activeOptions.Contains(MostRecentChosen().Value)); SpecialStringMaker.ShowSpecialString(() => base.Card.Title + " is set to protect itself and targets in " + base.Card.Location.HighestRecursiveLocation.OwnerName + "'s play area from " + MostRecentChosen().Value.ToString() + " damage.", showInEffectsList: () => base.Card.IsInPlayAndHasGameText && MostRecentChosen().HasValue&& activeOptions.Contains(MostRecentChosen().Value)).Condition = () => base.Card.IsInPlayAndHasGameText && MostRecentChosen().HasValue&& activeOptions.Contains(MostRecentChosen().Value); }
public TorrentUtilityCardController(Card card, TurnTakerController turnTakerController) : base(card, turnTakerController) { if (base.Card.DoKeywordsContain("cluster")) { SpecialStringMaker.ShowSpecialString(() => base.Card.Title + " is already being destroyed.", () => false).Condition = () => base.Card.IsBeingDestroyed; } }
public SignalTapCardController(Card card, TurnTakerController turnTakerController) : base(card, turnTakerController) { AllowFastCoroutinesDuringPretend = false; RunModifyDamageAmountSimulationForThisCard = false; SpecialStringMaker.ShowLocationOfCards(new LinqCardCriteria((Card c) => IsRelay(c) && c.IsInPlayAndHasGameText), specifyPlayAreas: true).Condition = () => NumRelaysInPlay() > 0; SpecialStringMaker.ShowSpecialString(() => "There are no Relay cards in play.").Condition = () => NumRelaysInPlay() <= 0; SpecialStringMaker.ShowSpecialString(() => "This card is in " + base.Card.Location.GetFriendlyName() + ".").Condition = () => base.Card.IsInPlayAndHasGameText; SpecialStringMaker.ShowListOfCardsAtLocationOfCard(base.Card, new LinqCardCriteria((Card c) => c.IsTarget, "target", useCardsSuffix: false, false, "target", "targets")).Condition = () => base.Card.IsInPlayAndHasGameText; }
public TacticalRelocationCardController(Card card, TurnTakerController turnTakerController) : base(card, turnTakerController) { var query = GameController.HeroTurnTakerControllers.Select(httc => httc.HeroTurnTaker.Trash) .Where(loc => loc.Cards.Any(IsEquipmentOrOngoing)); var ss = SpecialStringMaker.ShowNumberOfCardsAtLocations(() => query, new LinqCardCriteria(c => IsEquipmentOrOngoing(c) && c.IsInTrash, "equipment or ongoing")); ss.Condition = () => GameController.HeroTurnTakerControllers.Any(httc => httc.HeroTurnTaker.Trash.Cards.Any(IsEquipmentOrOngoing)); ss = SpecialStringMaker.ShowSpecialString(() => "No hero's Trash has any equipment or ongoing cards"); ss.Condition = () => GameController.HeroTurnTakerControllers.All(httc => !httc.HeroTurnTaker.Trash.Cards.Any(IsEquipmentOrOngoing)); }
protected CeladrochPillarCardController(Card card, TurnTakerController turnTakerController, TriggerType rewardType) : base(card, turnTakerController) { _rewards = new CeladrochPillarRewards(H); _rewardType = rewardType; SpecialStringMaker.ShowSpecialString(RemainingRewardsSpecialString); SpecialStringMaker.ShowSpecialString(HpTilNextRewardSpecialString).Condition = () => _rewards.HpTillNextTrigger(Card.HitPoints.Value) > 0; //SpecialStringMaker.ShowSpecialString(() => $"DEBUG - Pending Triggers {GetCardPropertyJournalEntryInteger(PendingTriggersKey) ?? 0}"); //SpecialStringMaker.ShowSpecialString(() => $"DEBUG - Completed Triggers {GetCardPropertyJournalEntryInteger(CompletedTriggersKey) ?? 0}"); }
public BattlefieldScavengerCardController(Card card, TurnTakerController turnTakerController) : base(card, turnTakerController) { var query = GameController.HeroTurnTakerControllers.Where(httc => httc.TurnTaker.Trash.Cards.Any(c => IsEquipment(c) || c.IsOngoing)) .Select(httc => httc.TurnTaker.Trash); var ss = SpecialStringMaker.ShowNumberOfCardsAtLocations(() => query, new LinqCardCriteria(c => IsEquipment(c) || c.IsOngoing, "equipment or ongoing")); ss.Condition = () => GameController.HeroTurnTakerControllers.Any(httc => httc.TurnTaker.Trash.Cards.Any(c => IsEquipment(c) || c.IsOngoing)); ss = SpecialStringMaker.ShowSpecialString(() => "No hero has has any equipment or ongoing cards in their trash."); ss.Condition = () => GameController.HeroTurnTakerControllers.All(httc => !httc.TurnTaker.Trash.Cards.Any(c => IsEquipment(c) || c.IsOngoing)); }
public ForewarnedCardController(Card card, TurnTakerController turnTakerController) : base(card, turnTakerController) { var query = GameController.HeroTurnTakerControllers.Select(httc => httc.HeroTurnTaker) .Where(htt => htt.NumberOfCardsInHand < 3) .Select(htt => htt.Hand); var ss = SpecialStringMaker.ShowNumberOfCardsAtLocations(() => query); ss.Condition = () => GameController.HeroTurnTakerControllers.Any(HeroTurnTakerController => HeroTurnTakerController.HeroTurnTaker.NumberOfCardsInHand < 3); ss = SpecialStringMaker.ShowSpecialString(() => "No hero has fewer than 3 cards in hard"); ss.Condition = () => GameController.HeroTurnTakerControllers.All(HeroTurnTakerController => HeroTurnTakerController.HeroTurnTaker.NumberOfCardsInHand >= 3); }
public NightloreCouncilStarlightCharacterCardController(Card card, TurnTakerController turnTakerController) : base(card, turnTakerController) { SpecialStringMaker.ShowSpecialString(() => $"{terra.Title} is next to a constellation", relatedCards: () => new Card[] { terra }).Condition = () => IsNextToConstellation(terra); SpecialStringMaker.ShowSpecialString(() => $"{asheron.Title} is next to a constellation", relatedCards: () => new Card[] { asheron }).Condition = () => IsNextToConstellation(asheron); SpecialStringMaker.ShowListOfCards(new LinqCardCriteria( (Card c) => (c == terra || c == asheron || c == cryos) && c.NextToLocation.Cards.Any((Card nextTo) => nextTo.Identifier == "RetreatIntoTheNebula"), "", useCardsSuffix: false, singular: "Starlight being protected by Retreat into the Nebula", plural: "Starlights being protected by Retreat into the Nebula")) .Condition = () => FindCardsWhere(new LinqCardCriteria((Card c) => c.IsInPlayAndHasGameText && c.Identifier == "RetreatIntoTheNebula")).Any(); }
public BreakawayCharacterCardController(Card card, TurnTakerController turnTakerController) : base(card, turnTakerController) { // Display strings... // Front side: has Momentum been dealt damage this turn? SpecialStringMaker.ShowIfElseSpecialString(() => HasBeenSetToTrueThisTurn(momentumTakenDamage), () => "Momentum has already been dealt damage this turn.", () => "Momentum has not yet been dealt damage this turn.").Condition = () => !base.Card.IsFlipped; // Front side: what environment cards have dealt damage to Momentum this turn? SpecialStringMaker.ShowSpecialString(HitMomentumThisTurn).Condition = () => !base.Card.IsFlipped; // Back side: what is Momentum's current HP? What effects does that have? SpecialStringMaker.ShowSpecialString(DeadEndJobMomentumEffects).Condition = () => base.Card.IsFlipped; // Back side: has a hero card entered play this turn? SpecialStringMaker.ShowIfElseSpecialString(() => HasBeenSetToTrueThisTurn(heroCardEntered), () => "A hero card has already entered play this turn.", () => "A hero card has not yet entered play this turn.").Condition = () => base.Card.IsFlipped; // Back side: who are the 2 hero targets with the highest HP? SpecialStringMaker.ShowHeroTargetWithHighestHP(1, 2).Condition = () => base.Card.IsFlipped; // Back side, Advanced: if it's a hero turn, has Breakaway dealt damage this turn? SpecialStringMaker.ShowIfElseSpecialString(() => HasBeenSetToTrueThisTurn(dealtDamageHero), () => "Breakaway has already dealt damage this turn", () => "Breakaway has not yet dealt damage this turn", () => base.GameController.ActiveTurnTaker.IsHero).Condition = () => (base.Game.IsAdvanced && base.Card.IsFlipped); }
public static SpecialString ShowHeroWithMostCardsInTrash(this SpecialStringMaker maker, LinqCardCriteria additionalCriteria = null, Func <bool> showInEffectsList = null) { CardController _cardController; var p1 = maker.GetType().GetField(nameof(_cardController), System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); _cardController = (CardController)p1.GetValue(maker); return(maker.ShowSpecialString(delegate { IEnumerable <TurnTaker> enumerable = _cardController.GameController.FindTurnTakersWhere((TurnTaker tt) => tt.IsHero && !tt.IsIncapacitatedOrOutOfGame, _cardController.BattleZone); List <string> list = new List <string>(); int num = 0; foreach (HeroTurnTaker hero in enumerable) { IEnumerable <Card> cardsWhere = hero.GetCardsWhere((Card c) => c.IsInTrash && c.Location.OwnerTurnTaker == hero); List <Card> source = ((additionalCriteria == null) ? cardsWhere.ToList() : cardsWhere.Where(additionalCriteria.Criteria).ToList()); if (source.Count() > num) { list.RemoveAll((string htt) => true); list.Add(hero.Name); num = source.Count(); } else if (source.Count() == num) { list.Add(hero.Name); } } string text = list.Count().ToString_SingularOrPlural("Hero", "Heroes"); string text2 = " in trash"; string text3 = " cards"; if (additionalCriteria != null) { text3 = " " + additionalCriteria.GetDescription(); } return (list.Count() > 0) ? string.Format("{0} with the most{3}{2}: {1}.", text, list.ToRecursiveString(), text2, text3) : "Warning: No heroes found"; }, showInEffectsList)); }
public ConcussiveBurstCardController(Card card, TurnTakerController turnTakerController) : base(card, turnTakerController) { var ss = SpecialStringMaker.ShowSpecialString(() => $"{Card.Title} has been used this turn."); ss.Condition = () => Card.IsInPlayAndHasGameText && base.HasBeenSetToTrueThisTurn(TrackingKey); }
public SignalFlareCardController(Card card, TurnTakerController turnTakerController) : base(card, turnTakerController) { SpecialStringMaker.ShowLocationOfCards(new LinqCardCriteria((Card c) => IsRelay(c) && c.IsInPlayAndHasGameText && !c.Location.IsHero), specifyPlayAreas: true).Condition = () => NumRelaysInNonHeroPlayAreas() > 0; SpecialStringMaker.ShowSpecialString(() => "There are no Relay cards in non-hero play areas.").Condition = () => NumRelaysInNonHeroPlayAreas() <= 0; }
public IdleHandsCardController(Card card, TurnTakerController turnTakerController) : base(card, turnTakerController) { SpecialStringMaker.ShowLocationOfCards(new LinqCardCriteria((Card c) => IsRelay(c) && c.IsInPlayAndHasGameText), specifyPlayAreas: true).Condition = () => NumRelaysInPlay() > 0; SpecialStringMaker.ShowSpecialString(() => "There are no Relay cards in play.").Condition = () => NumRelaysInPlay() <= 0; }
/* * "When this card enters play, play the top card of the villain deck.", * "Destroy this card when {Celadroch} is dealt 16 damage in a single round.", * "When this card is destroyed, put all targets from the villain trash into play." */ public LingeringExhalationCardController(Card card, TurnTakerController turnTakerController) : base(card, turnTakerController) { SpecialStringMaker.ShowSpecialString(() => CharacterCard.AlternateTitleOrTitle + " has been dealt " + Journal.DealDamageEntriesThisRound().Where(j => j.TargetCard == CharacterCard).Sum(j => j.Amount) + " damage this round.").Condition = () => Card.IsInPlayAndHasGameText; SpecialStringMaker.ShowNumberOfCardsAtLocation(TurnTaker.Trash, new LinqCardCriteria(c => c.IsTarget, "target")); }
protected TheKnightCardController(Card card, TurnTakerController turnTakerController) : base(card, turnTakerController) { SpecialStringMaker.ShowSpecialString(() => $"This card is currently being used by {VigilarOwnerName()}").Condition = () => this.Card.Location.OwnerTurnTaker != this.TurnTaker && VigilarOwnerName() != null; SpecialStringMaker.ShowSpecialString(() => $"This card is currently being used by {RoninOwnerName()}").Condition = () => this.TurnTakerController.HasMultipleCharacterCards && RoninOwnerName() != null; }
public SystemCrashCardController(Card card, TurnTakerController turnTakerController) : base(card, turnTakerController) { SpecialStringMaker.ShowNumberOfCardsInPlay(new LinqCardCriteria((Card c) => IsGridVirus(c), "grid virus")); SpecialStringMaker.ShowSpecialString(() => "[b]You are in danger of being deleted![/b]").Condition = () => GetNumberOfGridVirusesInPlay() >= 4; }
/* * "At the end of the villain turn, destroy 1 hero ongoing or equipment card.", * "This card is immune to fire, lightning, cold, and toxic damage.", * "Increase damage dealt to hero targets by 1." */ public LaughingHagCardController(Card card, TurnTakerController turnTakerController) : base(card, turnTakerController) { SpecialStringMaker.ShowSpecialString(() => Card.Title + " is immune to fire, lightning, cold, and toxic damage.").Condition = () => Card.IsInPlayAndHasGameText; }
public ExposedLifeforceCardController(Card card, TurnTakerController turnTakerController) : base(card, turnTakerController) { SpecialStringMaker.ShowLocationOfCards(new LinqCardCriteria(c => c.Identifier == "Teryx", "Teryx", useCardsSuffix: false)).Condition = () => !Card.IsInPlayAndHasGameText; SpecialStringMaker.ShowSpecialString(() => $"Teryx has gained {GetAmountTeryxGainedThisRound()} HP this round.").Condition = () => Card.IsInPlayAndHasGameText && IsTeryxInPlay(); }
public MesmerPendantCardController(Card card, TurnTakerController turnTakerController) : base(card, turnTakerController) { SpecialStringMaker.ShowSpecialString(() => "This card currently does not work."); AddThisCardControllerToList(CardControllerListType.ModifiesDeckKind); }
public PastVanishCharacterCardController(Card card, TurnTakerController turnTakerController) : base(card, turnTakerController) { var ss = SpecialStringMaker.ShowSpecialString(() => "The next time a target enters play, it deals itself 1 energy damage." + (Incap2Uses() > 1 ? $" x{Incap2Uses()}" : ""), () => true); ss.Condition = () => Incap2Uses().HasValue; }
public MomentaryFugueCardController(Card card, TurnTakerController turnTakerController) : base(card, turnTakerController) { SpecialStringMaker.ShowListOfCardsAtLocation(base.TurnTaker.PlayArea, new LinqCardCriteria((Card c) => IsRelay(c), "relay")).Condition = () => NumRelaysAt(base.TurnTaker.PlayArea) > 0; SpecialStringMaker.ShowSpecialString(() => "There are no Relay cards in " + base.TurnTaker.NameRespectingVariant + "'s play area.").Condition = () => NumRelaysAt(base.TurnTaker.PlayArea) <= 0; }