From a5d2338c5a0f6041c4d882432027002992bfc468 Mon Sep 17 00:00:00 2001 From: ciaccona007 Date: Sun, 3 Nov 2024 18:48:48 -0500 Subject: [PATCH] [FDN] Implement Kaito, Cunning Infiltrator --- .../sources/ScryfallImageSupportTokens.java | 4 ++ .../mage/cards/k/KaitoCunningInfiltrator.java | 63 +++++++++++++++++++ Mage.Sets/src/mage/sets/Foundations.java | 1 + .../KaitoCunningInfiltratorEmblem.java | 32 ++++++++++ .../game/permanent/token/NinjaToken2.java | 28 +++++++++ Mage/src/main/resources/tokens-database.txt | 4 ++ 6 files changed, 132 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/k/KaitoCunningInfiltrator.java create mode 100644 Mage/src/main/java/mage/game/command/emblems/KaitoCunningInfiltratorEmblem.java create mode 100644 Mage/src/main/java/mage/game/permanent/token/NinjaToken2.java diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportTokens.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportTokens.java index 28d7dbf6f3f..973ea02ceac 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportTokens.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportTokens.java @@ -2457,6 +2457,10 @@ public class ScryfallImageSupportTokens { // BLC put("BLC/Raccoon", "https://api.scryfall.com/cards/tblc/29/en?format=image"); + // FDN + put("FDN/Emblem Kaito", "https://api.scryfall.com/cards/tfdn/24/en?format=image"); + put("FDN/Ninja", "https://api.scryfall.com/cards/tfdn/12/en?format=image"); + // generate supported sets supportedSets.clear(); for (String cardName : this.keySet()) { diff --git a/Mage.Sets/src/mage/cards/k/KaitoCunningInfiltrator.java b/Mage.Sets/src/mage/cards/k/KaitoCunningInfiltrator.java new file mode 100644 index 00000000000..6812f5b329f --- /dev/null +++ b/Mage.Sets/src/mage/cards/k/KaitoCunningInfiltrator.java @@ -0,0 +1,63 @@ +package mage.cards.k; + +import mage.abilities.Ability; +import mage.abilities.LoyaltyAbility; +import mage.abilities.common.DealsDamageToAPlayerAllTriggeredAbility; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.effects.common.DrawDiscardControllerEffect; +import mage.abilities.effects.common.GetEmblemEffect; +import mage.abilities.effects.common.combat.CantBeBlockedTargetEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.*; +import mage.counters.CounterType; +import mage.filter.StaticFilters; +import mage.game.command.emblems.KaitoCunningInfiltratorEmblem; +import mage.game.permanent.token.NinjaToken2; +import mage.target.common.TargetControlledCreaturePermanent; + +import java.util.UUID; + +/** + * + * @author ciaccona007 + */ +public final class KaitoCunningInfiltrator extends CardImpl { + + public KaitoCunningInfiltrator(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{1}{U}{U}"); + + this.supertype.add(SuperType.LEGENDARY); + this.subtype.add(SubType.KAITO); + this.setStartingLoyalty(3); + + // Whenever a creature you control deals combat damage to a player, put a loyalty counter on Kaito. + this.addAbility(new DealsDamageToAPlayerAllTriggeredAbility( + new AddCountersSourceEffect(CounterType.LOYALTY.createInstance()), + StaticFilters.FILTER_CONTROLLED_A_CREATURE, + false, SetTargetPointer.NONE, true + )); + + // +1: Up to one target creature you control can't be blocked this turn. Draw a card, then discard a card. + Ability plusOneAbility = new LoyaltyAbility(new CantBeBlockedTargetEffect(Duration.EndOfTurn), 1); + plusOneAbility.addEffect(new DrawDiscardControllerEffect()); + plusOneAbility.addTarget(new TargetControlledCreaturePermanent(0, 1)); + this.addAbility(plusOneAbility); + + // -2: Create a 2/1 blue Ninja creature token. + this.addAbility(new LoyaltyAbility(new CreateTokenEffect(new NinjaToken2()), -2)); + + // -9: You get an emblem with "Whenever a player casts a spell, you create a 2/1 blue Ninja creature token." + this.addAbility(new LoyaltyAbility(new GetEmblemEffect(new KaitoCunningInfiltratorEmblem()), -9)); + } + + private KaitoCunningInfiltrator(final KaitoCunningInfiltrator card) { + super(card); + } + + @Override + public KaitoCunningInfiltrator copy() { + return new KaitoCunningInfiltrator(this); + } +} diff --git a/Mage.Sets/src/mage/sets/Foundations.java b/Mage.Sets/src/mage/sets/Foundations.java index 6202dcbbd01..2068e74daf4 100644 --- a/Mage.Sets/src/mage/sets/Foundations.java +++ b/Mage.Sets/src/mage/sets/Foundations.java @@ -286,6 +286,7 @@ public final class Foundations extends ExpansionSet { cards.add(new SetCardInfo("Joust Through", 19, Rarity.UNCOMMON, mage.cards.j.JoustThrough.class)); cards.add(new SetCardInfo("Juggernaut", 255, Rarity.UNCOMMON, mage.cards.j.Juggernaut.class)); cards.add(new SetCardInfo("Jungle Hollow", 263, Rarity.COMMON, mage.cards.j.JungleHollow.class)); + cards.add(new SetCardInfo("Kaito, Cunning Infiltrator", 44, Rarity.MYTHIC, mage.cards.k.KaitoCunningInfiltrator.class)); cards.add(new SetCardInfo("Kalastria Highborn", 607, Rarity.RARE, mage.cards.k.KalastriaHighborn.class)); cards.add(new SetCardInfo("Kargan Dragonrider", 541, Rarity.COMMON, mage.cards.k.KarganDragonrider.class)); cards.add(new SetCardInfo("Kindled Fury", 542, Rarity.COMMON, mage.cards.k.KindledFury.class)); diff --git a/Mage/src/main/java/mage/game/command/emblems/KaitoCunningInfiltratorEmblem.java b/Mage/src/main/java/mage/game/command/emblems/KaitoCunningInfiltratorEmblem.java new file mode 100644 index 00000000000..06f8687d47f --- /dev/null +++ b/Mage/src/main/java/mage/game/command/emblems/KaitoCunningInfiltratorEmblem.java @@ -0,0 +1,32 @@ +package mage.game.command.emblems; + +import mage.abilities.common.SpellCastAllTriggeredAbility; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.constants.SetTargetPointer; +import mage.constants.Zone; +import mage.filter.FilterSpell; +import mage.game.command.Emblem; +import mage.game.permanent.token.NinjaToken2; + +/** + * @author ciaccona007 + */ +public class KaitoCunningInfiltratorEmblem extends Emblem { + // −9: You get an emblem with “Whenever a player casts a spell, you create a 2/1 blue Ninja creature token.” + + public KaitoCunningInfiltratorEmblem() { + super("Emblem Kaito"); + this.getAbilities().add(new SpellCastAllTriggeredAbility( + Zone.COMMAND, new CreateTokenEffect(new NinjaToken2()), new FilterSpell(), false, SetTargetPointer.NONE + )); + } + + private KaitoCunningInfiltratorEmblem(final KaitoCunningInfiltratorEmblem card) { + super(card); + } + + @Override + public KaitoCunningInfiltratorEmblem copy() { + return new KaitoCunningInfiltratorEmblem(this); + } +} diff --git a/Mage/src/main/java/mage/game/permanent/token/NinjaToken2.java b/Mage/src/main/java/mage/game/permanent/token/NinjaToken2.java new file mode 100644 index 00000000000..0d034a11655 --- /dev/null +++ b/Mage/src/main/java/mage/game/permanent/token/NinjaToken2.java @@ -0,0 +1,28 @@ +package mage.game.permanent.token; + +import mage.MageInt; +import mage.constants.CardType; +import mage.constants.SubType; + +/** + * @author ciaccona007 + */ +public final class NinjaToken2 extends TokenImpl { + + public NinjaToken2() { + super("Ninja Token", "2/1 blue Ninja creature token"); + cardType.add(CardType.CREATURE); + color.setBlue(true); + subtype.add(SubType.NINJA); + power = new MageInt(2); + toughness = new MageInt(1); + } + + private NinjaToken2(final NinjaToken2 token) { + super(token); + } + + public NinjaToken2 copy() { + return new NinjaToken2(this); + } +} diff --git a/Mage/src/main/resources/tokens-database.txt b/Mage/src/main/resources/tokens-database.txt index 3583bd93d00..4c11d03ac33 100644 --- a/Mage/src/main/resources/tokens-database.txt +++ b/Mage/src/main/resources/tokens-database.txt @@ -136,6 +136,7 @@ |Generate|EMBLEM:M3C|Emblem Vivien|||VivienReidEmblem| |Generate|EMBLEM:ACR|Emblem Capitoline Triad|||TheCapitolineTriadEmblem| |Generate|EMBLEM:BLB|Emblem Ral|||RalCracklingWitEmblem| +|Generate|EMBLEM:FDN|Emblem Kaito|||KaitoCunningInfiltratorEmblem| # ALL PLANES # Usage hints: @@ -2393,3 +2394,6 @@ # BLC |Generate|TOK:BLC|Racoon|||RaccoonToken| + +# FDN +|Generate|TOK:FDN|Ninja|||NinjaToken2|