diff --git a/Mage.Sets/src/mage/cards/k/KrothussLordOfTheDeep.java b/Mage.Sets/src/mage/cards/k/KrothussLordOfTheDeep.java new file mode 100644 index 00000000000..9ded7f481de --- /dev/null +++ b/Mage.Sets/src/mage/cards/k/KrothussLordOfTheDeep.java @@ -0,0 +1,95 @@ +package mage.cards.k; + +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.AttacksTriggeredAbility; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.CreateTokenCopyTargetEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.SubType; +import mage.constants.SuperType; +import mage.filter.FilterPermanent; +import mage.filter.common.FilterAttackingCreature; +import mage.filter.predicate.mageobject.AnotherPredicate; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.target.TargetPermanent; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class KrothussLordOfTheDeep extends CardImpl { + + private static final FilterPermanent filter = new FilterAttackingCreature("another attacking creature"); + + static { + filter.add(AnotherPredicate.instance); + } + + public KrothussLordOfTheDeep(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, ""); + + this.addSuperType(SuperType.LEGENDARY); + this.subtype.add(SubType.KRAKEN); + this.subtype.add(SubType.HORROR); + this.power = new MageInt(3); + this.toughness = new MageInt(5); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + + // Whenever Krothuss, Lord of the Deep attacks, create a tapped and attacking token that's a copy of another target attacking creature. If that creature is a Kraken, Leviathan, Octopus, or Serpent, create two of those tokens instead. + Ability ability = new AttacksTriggeredAbility(new KrothussLordOfTheDeepEffect()); + ability.addTarget(new TargetPermanent(filter)); + this.addAbility(ability); + } + + private KrothussLordOfTheDeep(final KrothussLordOfTheDeep card) { + super(card); + } + + @Override + public KrothussLordOfTheDeep copy() { + return new KrothussLordOfTheDeep(this); + } +} + +class KrothussLordOfTheDeepEffect extends OneShotEffect { + + KrothussLordOfTheDeepEffect() { + super(Outcome.Benefit); + staticText = "create a tapped and attacking token that's a copy of another target attacking creature. " + + "If that creature is a Kraken, Leviathan, Octopus, or Serpent, create two of those tokens instead"; + } + + private KrothussLordOfTheDeepEffect(final KrothussLordOfTheDeepEffect effect) { + super(effect); + } + + @Override + public KrothussLordOfTheDeepEffect copy() { + return new KrothussLordOfTheDeepEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Permanent permanent = game.getPermanent(source.getFirstTarget()); + if (permanent == null) { + return false; + } + int count = permanent.hasSubtype(SubType.KRAKEN, game) + || permanent.hasSubtype(SubType.LEVIATHAN, game) + || permanent.hasSubtype(SubType.OCTOPUS, game) + || permanent.hasSubtype(SubType.SERPENT, game) ? 2 : 1; + return new CreateTokenCopyTargetEffect( + null, null, + false, count, true, true + ).apply(game, source); + } +} diff --git a/Mage.Sets/src/mage/cards/r/RunoStromkirk.java b/Mage.Sets/src/mage/cards/r/RunoStromkirk.java new file mode 100644 index 00000000000..66f9927c515 --- /dev/null +++ b/Mage.Sets/src/mage/cards/r/RunoStromkirk.java @@ -0,0 +1,105 @@ +package mage.cards.r; + +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.PutOnLibraryTargetEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.abilities.keyword.TransformAbility; +import mage.cards.Card; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.cards.CardsImpl; +import mage.constants.*; +import mage.filter.StaticFilters; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.players.Player; +import mage.target.common.TargetCardInYourGraveyard; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class RunoStromkirk extends CardImpl { + + public RunoStromkirk(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}{B}"); + + this.addSuperType(SuperType.LEGENDARY); + this.subtype.add(SubType.VAMPIRE); + this.subtype.add(SubType.CLERIC); + this.power = new MageInt(1); + this.toughness = new MageInt(4); + this.secondSideCardClazz = mage.cards.k.KrothussLordOfTheDeep.class; + + // Flying + this.addAbility(FlyingAbility.getInstance()); + + // When Runo Stromkirk enters the battlefield, put up to one target creature card from your graveyard on top of your library. + Ability ability = new EntersBattlefieldTriggeredAbility(new PutOnLibraryTargetEffect(true)); + ability.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD)); + this.addAbility(ability); + + // At the beginning of your upkeep, look at the top card of your library. You may reveal that card. If a creature card with mana value 6 or greater is revealed this way, transform Runo Stromkirk. + this.addAbility(new TransformAbility()); + this.addAbility(new BeginningOfUpkeepTriggeredAbility( + new RunoStromkirkEffect(), TargetController.YOU, false + )); + } + + private RunoStromkirk(final RunoStromkirk card) { + super(card); + } + + @Override + public RunoStromkirk copy() { + return new RunoStromkirk(this); + } +} + +class RunoStromkirkEffect extends OneShotEffect { + + RunoStromkirkEffect() { + super(Outcome.Benefit); + staticText = "look at the top card of your library. You may reveal that card. " + + "If a creature card with mana value 6 or greater is revealed this way, transform {this}"; + } + + private RunoStromkirkEffect(final RunoStromkirkEffect effect) { + super(effect); + } + + @Override + public RunoStromkirkEffect copy() { + return new RunoStromkirkEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player player = game.getPlayer(source.getControllerId()); + if (player == null) { + return false; + } + Card card = player.getLibrary().getFromTop(game); + if (card == null) { + return false; + } + player.lookAtCards(null, card, game); + if (!player.chooseUse(outcome, "Reveal " + card.getName() + '?', source, game)) { + return true; + } + player.revealCards(source, new CardsImpl(card), game); + if (!card.isCreature(game) || card.getManaValue() < 6) { + return true; + } + Permanent permanent = source.getSourcePermanentIfItStillExists(game); + if (permanent != null) { + permanent.transform(source, game); + } + return true; + } +} diff --git a/Mage.Sets/src/mage/sets/InnistradCrimsonVow.java b/Mage.Sets/src/mage/sets/InnistradCrimsonVow.java index a1ffc0403ea..9e7f359a878 100644 --- a/Mage.Sets/src/mage/sets/InnistradCrimsonVow.java +++ b/Mage.Sets/src/mage/sets/InnistradCrimsonVow.java @@ -185,6 +185,7 @@ public final class InnistradCrimsonVow extends ExpansionSet { cards.add(new SetCardInfo("Kessig Flamebreather", 164, Rarity.COMMON, mage.cards.k.KessigFlamebreather.class)); cards.add(new SetCardInfo("Kessig Wolfrider", 165, Rarity.RARE, mage.cards.k.KessigWolfrider.class)); cards.add(new SetCardInfo("Kindly Ancestor", 22, Rarity.COMMON, mage.cards.k.KindlyAncestor.class)); + cards.add(new SetCardInfo("Krothuss, Lord of the Deep", 246, Rarity.RARE, mage.cards.k.KrothussLordOfTheDeep.class)); cards.add(new SetCardInfo("Lacerate Flesh", 166, Rarity.COMMON, mage.cards.l.LacerateFlesh.class)); cards.add(new SetCardInfo("Laid to Rest", 207, Rarity.UNCOMMON, mage.cards.l.LaidToRest.class)); cards.add(new SetCardInfo("Lambholt Raconteur", 167, Rarity.UNCOMMON, mage.cards.l.LambholtRaconteur.class)); @@ -244,6 +245,7 @@ public final class InnistradCrimsonVow extends ExpansionSet { cards.add(new SetCardInfo("Riphook Raider", 203, Rarity.COMMON, mage.cards.r.RiphookRaider.class)); cards.add(new SetCardInfo("Rot-Tide Gargantua", 129, Rarity.COMMON, mage.cards.r.RotTideGargantua.class)); cards.add(new SetCardInfo("Runebound Wolf", 176, Rarity.UNCOMMON, mage.cards.r.RuneboundWolf.class)); + cards.add(new SetCardInfo("Runo Stromkirk", 246, Rarity.RARE, mage.cards.r.RunoStromkirk.class)); cards.add(new SetCardInfo("Rural Recruit", 216, Rarity.COMMON, mage.cards.r.RuralRecruit.class)); cards.add(new SetCardInfo("Sanctify", 33, Rarity.COMMON, mage.cards.s.Sanctify.class)); cards.add(new SetCardInfo("Sanguine Statuette", 177, Rarity.UNCOMMON, mage.cards.s.SanguineStatuette.class));