diff --git a/Mage.Sets/src/mage/cards/k/KioraBestsTheSeaGod.java b/Mage.Sets/src/mage/cards/k/KioraBestsTheSeaGod.java new file mode 100644 index 00000000000..b674c2d5652 --- /dev/null +++ b/Mage.Sets/src/mage/cards/k/KioraBestsTheSeaGod.java @@ -0,0 +1,103 @@ +package mage.cards.k; + +import mage.abilities.Ability; +import mage.abilities.common.SagaAbility; +import mage.abilities.effects.Effects; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.effects.common.DontUntapInControllersNextUntapStepTargetEffect; +import mage.abilities.effects.common.TapAllTargetPlayerControlsEffect; +import mage.abilities.effects.common.UntapTargetEffect; +import mage.abilities.effects.common.continuous.GainControlTargetEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.*; +import mage.filter.FilterPermanent; +import mage.filter.StaticFilters; +import mage.game.Game; +import mage.game.permanent.token.KrakenHexproofToken; +import mage.target.TargetPermanent; +import mage.target.common.TargetOpponent; +import mage.target.targetpointer.FixedTargets; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class KioraBestsTheSeaGod extends CardImpl { + + private static final FilterPermanent filter = new FilterPermanent("permanent an opponent controls"); + + static { + filter.add(TargetController.OPPONENT.getControllerPredicate()); + } + + public KioraBestsTheSeaGod(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{5}{U}{U}"); + + this.subtype.add(SubType.SAGA); + + // (As this Saga enters and after your draw step, add a lore counter. Sacrifice after III.) + SagaAbility sagaAbility = new SagaAbility(this, SagaChapter.CHAPTER_III); + + // I — Create an 8/8 blue Kraken creature token with hexproof. + sagaAbility.addChapterEffect( + this, SagaChapter.CHAPTER_I, new CreateTokenEffect(new KrakenHexproofToken()) + ); + + // II — Tap all nonland permanents target opponent controls. They don't untap during their controller's next untap step. + sagaAbility.addChapterEffect( + this, SagaChapter.CHAPTER_II, SagaChapter.CHAPTER_II, + new Effects(new TapAllTargetPlayerControlsEffect( + StaticFilters.FILTER_PERMANENT_CREATURES + ), new KioraBestsTheSeaGodEffect()), + new TargetOpponent() + ); + + // III — Gain control of target permanent an opponent controls. Untap it. + sagaAbility.addChapterEffect( + this, SagaChapter.CHAPTER_III, SagaChapter.CHAPTER_III, + new Effects( + new GainControlTargetEffect(Duration.Custom), + new UntapTargetEffect().setText("Untap it.") + ), new TargetPermanent(filter) + ); + } + + private KioraBestsTheSeaGod(final KioraBestsTheSeaGod card) { + super(card); + } + + @Override + public KioraBestsTheSeaGod copy() { + return new KioraBestsTheSeaGod(this); + } +} + +class KioraBestsTheSeaGodEffect extends OneShotEffect { + + KioraBestsTheSeaGodEffect() { + super(Outcome.Benefit); + staticText = "They don't untap during their controller's next untap step"; + } + + private KioraBestsTheSeaGodEffect(final KioraBestsTheSeaGodEffect effect) { + super(effect); + } + + @Override + public KioraBestsTheSeaGodEffect copy() { + return new KioraBestsTheSeaGodEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + game.addEffect(new DontUntapInControllersNextUntapStepTargetEffect() + .setTargetPointer(new FixedTargets(game.getBattlefield().getAllActivePermanents( + StaticFilters.FILTER_PERMANENT_CREATURE, source.getFirstTarget(), game + ), game)), source + ); + return true; + } +} diff --git a/Mage.Sets/src/mage/sets/TherosBeyondDeath.java b/Mage.Sets/src/mage/sets/TherosBeyondDeath.java index b94afd532dc..cd163ed4d07 100644 --- a/Mage.Sets/src/mage/sets/TherosBeyondDeath.java +++ b/Mage.Sets/src/mage/sets/TherosBeyondDeath.java @@ -79,6 +79,7 @@ public final class TherosBeyondDeath extends ExpansionSet { cards.add(new SetCardInfo("Inspire Awe", 175, Rarity.COMMON, mage.cards.i.InspireAwe.class)); cards.add(new SetCardInfo("Ironscale Hydra", 296, Rarity.RARE, mage.cards.i.IronscaleHydra.class)); cards.add(new SetCardInfo("Island", 251, Rarity.LAND, mage.cards.basiclands.Island.class, FULL_ART_BFZ_VARIOUS)); + cards.add(new SetCardInfo("Kiora Bests the Sea God", 52, Rarity.MYTHIC, mage.cards.k.KioraBestsTheSeaGod.class)); cards.add(new SetCardInfo("Klothys's Design", 176, Rarity.UNCOMMON, mage.cards.k.KlothyssDesign.class)); cards.add(new SetCardInfo("Klothys, God of Destiny", 220, Rarity.MYTHIC, mage.cards.k.KlothysGodOfDestiny.class)); cards.add(new SetCardInfo("Kunoros, Hound of Athreos", 222, Rarity.RARE, mage.cards.k.KunorosHoundOfAthreos.class)); diff --git a/Mage/src/main/java/mage/game/permanent/token/KrakenHexproofToken.java b/Mage/src/main/java/mage/game/permanent/token/KrakenHexproofToken.java new file mode 100644 index 00000000000..e4d61dc9ab3 --- /dev/null +++ b/Mage/src/main/java/mage/game/permanent/token/KrakenHexproofToken.java @@ -0,0 +1,33 @@ +package mage.game.permanent.token; + +import mage.MageInt; +import mage.ObjectColor; +import mage.abilities.keyword.HexproofAbility; +import mage.constants.CardType; +import mage.constants.SubType; + +/** + * @author TheElk801 + */ + +public final class KrakenHexproofToken extends TokenImpl { + + public KrakenHexproofToken() { + super("Kraken", "8/8 blue Kraken creature token with hexproof"); + this.cardType.add(CardType.CREATURE); + this.subtype.add(SubType.KRAKEN); + this.color = ObjectColor.BLUE; + this.power = new MageInt(8); + this.toughness = new MageInt(8); + this.addAbility(HexproofAbility.getInstance()); + } + + private KrakenHexproofToken(final KrakenHexproofToken token) { + super(token); + } + + public KrakenHexproofToken copy() { + return new KrakenHexproofToken(this); + } + +} \ No newline at end of file