diff --git a/Mage.Sets/src/mage/cards/k/KellanPlanarTrailblazer.java b/Mage.Sets/src/mage/cards/k/KellanPlanarTrailblazer.java new file mode 100644 index 00000000000..8f8aff283d0 --- /dev/null +++ b/Mage.Sets/src/mage/cards/k/KellanPlanarTrailblazer.java @@ -0,0 +1,128 @@ +package mage.cards.k; + +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.ExileTopXMayPlayUntilEffect; +import mage.abilities.effects.common.continuous.AddCardSubTypeSourceEffect; +import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; +import mage.abilities.effects.common.continuous.SetBasePowerToughnessSourceEffect; +import mage.abilities.keyword.DoubleStrikeAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.*; +import mage.game.Game; +import mage.game.permanent.Permanent; + +import java.util.UUID; + +/** + * + * @author ciaccona007 + */ +public final class KellanPlanarTrailblazer extends CardImpl { + + public KellanPlanarTrailblazer(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{R}"); + + this.supertype.add(SuperType.LEGENDARY); + this.subtype.add(SubType.HUMAN); + this.subtype.add(SubType.FAERIE); + this.subtype.add(SubType.SCOUT); + this.power = new MageInt(2); + this.toughness = new MageInt(1); + + // {1}{R}: If Kellan is a Scout, it becomes a Human Faerie Detective and gains "Whenever Kellan deals combat damage to a player, exile the top card of your library. You may play that card this turn." + this.addAbility(new SimpleActivatedAbility( + new KellanPlanarTrailblazerDetectiveEffect(), new ManaCostsImpl<>("{1}{R}") + )); + + // {2}{R}: If Kellan is a Detective, it becomes a 3/2 Human Faerie Rogue and gains double strike. + this.addAbility(new SimpleActivatedAbility( + new KellanPlanarTrailblazerRogueEffect(), new ManaCostsImpl<>("{2}{R}") + )); + } + + private KellanPlanarTrailblazer(final KellanPlanarTrailblazer card) { + super(card); + } + + @Override + public KellanPlanarTrailblazer copy() { + return new KellanPlanarTrailblazer(this); + } +} + +class KellanPlanarTrailblazerDetectiveEffect extends OneShotEffect { + + KellanPlanarTrailblazerDetectiveEffect() { + super(Outcome.Benefit); + staticText = "if {this} is a Scout, it becomes a Human Faerie Detective and gains " + + "\"Whenever this creature deals combat damage to a player, exile the top card of your library. " + + "You may play that card this turn.\""; + } + + private KellanPlanarTrailblazerDetectiveEffect(KellanPlanarTrailblazerDetectiveEffect effect) { + super(effect); + } + + @Override + public KellanPlanarTrailblazerDetectiveEffect copy() { + return new KellanPlanarTrailblazerDetectiveEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Permanent permanent = source.getSourcePermanentIfItStillExists(game); + if (permanent == null || !permanent.hasSubtype(SubType.SCOUT, game)) { + return false; + } + game.addEffect(new AddCardSubTypeSourceEffect( + Duration.Custom, SubType.HUMAN, SubType.FAERIE, SubType.DETECTIVE + ), source); + game.addEffect(new GainAbilitySourceEffect(new DealsCombatDamageToAPlayerTriggeredAbility( + new ExileTopXMayPlayUntilEffect(1, Duration.EndOfTurn) + .withTextOptions("that card", true) + ), Duration.Custom), source); + return true; + } +} + +class KellanPlanarTrailblazerRogueEffect extends OneShotEffect { + + KellanPlanarTrailblazerRogueEffect() { + super(Outcome.Benefit); + staticText = "if {this} is a Detective, it becomes a 3/2 Human Faerie Rogue " + + "and gains double strike."; + } + + private KellanPlanarTrailblazerRogueEffect(final KellanPlanarTrailblazerRogueEffect effect) { + super(effect); + } + + @Override + public KellanPlanarTrailblazerRogueEffect copy() { + return new KellanPlanarTrailblazerRogueEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Permanent permanent = source.getSourcePermanentIfItStillExists(game); + if (permanent == null || !permanent.hasSubtype(SubType.DETECTIVE, game)) { + return false; + } + game.addEffect(new AddCardSubTypeSourceEffect( + Duration.Custom, SubType.HUMAN, SubType.FAERIE, SubType.ROGUE + ), source); + game.addEffect(new SetBasePowerToughnessSourceEffect( + 3, 2, Duration.Custom + ), source); + game.addEffect(new GainAbilitySourceEffect( + DoubleStrikeAbility.getInstance(), Duration.Custom + ), source); + return true; + } +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/Foundations.java b/Mage.Sets/src/mage/sets/Foundations.java index 2068e74daf4..5f093517726 100644 --- a/Mage.Sets/src/mage/sets/Foundations.java +++ b/Mage.Sets/src/mage/sets/Foundations.java @@ -289,6 +289,7 @@ public final class Foundations extends ExpansionSet { 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("Kellan, Planar Trailblazer", 91, Rarity.RARE, mage.cards.k.KellanPlanarTrailblazer.class)); cards.add(new SetCardInfo("Kindled Fury", 542, Rarity.COMMON, mage.cards.k.KindledFury.class)); cards.add(new SetCardInfo("Kitesail Corsair", 510, Rarity.COMMON, mage.cards.k.KitesailCorsair.class)); cards.add(new SetCardInfo("Knight of Grace", 576, Rarity.UNCOMMON, mage.cards.k.KnightOfGrace.class));