diff --git a/Mage.Sets/src/mage/cards/a/AzusasManyJourneys.java b/Mage.Sets/src/mage/cards/a/AzusasManyJourneys.java new file mode 100644 index 00000000000..b62d3daf6f5 --- /dev/null +++ b/Mage.Sets/src/mage/cards/a/AzusasManyJourneys.java @@ -0,0 +1,53 @@ +package mage.cards.a; + +import java.util.UUID; + +import mage.abilities.common.SagaAbility; +import mage.abilities.effects.common.ExileSagaAndReturnTransformedEffect; +import mage.abilities.effects.common.GainLifeEffect; +import mage.abilities.effects.common.continuous.PlayAdditionalLandsControllerEffect; +import mage.abilities.keyword.TransformAbility; +import mage.constants.Duration; +import mage.constants.SagaChapter; +import mage.constants.SubType; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; + +/** + * + * @author weirddan455 + */ +public final class AzusasManyJourneys extends CardImpl { + + public AzusasManyJourneys(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{G}"); + + this.subtype.add(SubType.SAGA); + this.secondSideCardClazz = mage.cards.l.LikenessOfTheSeeker.class; + + // (As this Saga enters and after your draw step, add a lore counter.) + SagaAbility sagaAbility = new SagaAbility(this); + + // I — You may play an additional land this turn. + sagaAbility.addChapterEffect(this, SagaChapter.CHAPTER_I, new PlayAdditionalLandsControllerEffect(1, Duration.EndOfTurn)); + + // II — You gain 3 life. + sagaAbility.addChapterEffect(this, SagaChapter.CHAPTER_II, new GainLifeEffect(3)); + + // III — Exile this Saga, then return it to the battlefield transformed under your control. + this.addAbility(new TransformAbility()); + sagaAbility.addChapterEffect(this, SagaChapter.CHAPTER_III, new ExileSagaAndReturnTransformedEffect()); + + this.addAbility(sagaAbility); + } + + private AzusasManyJourneys(final AzusasManyJourneys card) { + super(card); + } + + @Override + public AzusasManyJourneys copy() { + return new AzusasManyJourneys(this); + } +} diff --git a/Mage.Sets/src/mage/cards/l/LikenessOfTheSeeker.java b/Mage.Sets/src/mage/cards/l/LikenessOfTheSeeker.java new file mode 100644 index 00000000000..a2fa4b8c3b0 --- /dev/null +++ b/Mage.Sets/src/mage/cards/l/LikenessOfTheSeeker.java @@ -0,0 +1,40 @@ +package mage.cards.l; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.BecomesBlockedSourceTriggeredAbility; +import mage.abilities.effects.common.UntapLandsEffect; +import mage.constants.SubType; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; + +/** + * + * @author weirddan455 + */ +public final class LikenessOfTheSeeker extends CardImpl { + + public LikenessOfTheSeeker(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT, CardType.CREATURE}, ""); + + this.subtype.add(SubType.HUMAN); + this.subtype.add(SubType.MONK); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + this.color.setGreen(true); + this.nightCard = true; + + // Whenever Likeness of the Seeker becomes blocked, untap up to three lands you control. + this.addAbility(new BecomesBlockedSourceTriggeredAbility(new UntapLandsEffect(3, true, true), false)); + } + + private LikenessOfTheSeeker(final LikenessOfTheSeeker card) { + super(card); + } + + @Override + public LikenessOfTheSeeker copy() { + return new LikenessOfTheSeeker(this); + } +} diff --git a/Mage.Sets/src/mage/sets/KamigawaNeonDynasty.java b/Mage.Sets/src/mage/sets/KamigawaNeonDynasty.java index 1db51b153cc..4a4b3f205ed 100644 --- a/Mage.Sets/src/mage/sets/KamigawaNeonDynasty.java +++ b/Mage.Sets/src/mage/sets/KamigawaNeonDynasty.java @@ -38,6 +38,7 @@ public final class KamigawaNeonDynasty extends ExpansionSet { cards.add(new SetCardInfo("Assassin's Ink", 87, Rarity.UNCOMMON, mage.cards.a.AssassinsInk.class)); cards.add(new SetCardInfo("Atsushi, the Blazing Sky", 134, Rarity.MYTHIC, mage.cards.a.AtsushiTheBlazingSky.class)); cards.add(new SetCardInfo("Awakened Awareness", 47, Rarity.UNCOMMON, mage.cards.a.AwakenedAwareness.class)); + cards.add(new SetCardInfo("Azusa's Many Journeys", 172, Rarity.UNCOMMON, mage.cards.a.AzusasManyJourneys.class)); cards.add(new SetCardInfo("Bamboo Grove Archer", 173, Rarity.COMMON, mage.cards.b.BambooGroveArcher.class)); cards.add(new SetCardInfo("Banishing Slash", 3, Rarity.UNCOMMON, mage.cards.b.BanishingSlash.class)); cards.add(new SetCardInfo("Befriending the Moths", 4, Rarity.COMMON, mage.cards.b.BefriendingTheMoths.class)); @@ -94,6 +95,7 @@ public final class KamigawaNeonDynasty extends ExpansionSet { cards.add(new SetCardInfo("Leech Gauntlet", 106, Rarity.UNCOMMON, mage.cards.l.LeechGauntlet.class)); cards.add(new SetCardInfo("Life of Toshiro Umezawa", 108, Rarity.UNCOMMON, mage.cards.l.LifeOfToshiroUmezawa.class)); cards.add(new SetCardInfo("Light the Way", 24, Rarity.COMMON, mage.cards.l.LightTheWay.class)); + cards.add(new SetCardInfo("Likeness of the Seeker", 172, Rarity.UNCOMMON, mage.cards.l.LikenessOfTheSeeker.class)); cards.add(new SetCardInfo("Lion Sash", 26, Rarity.RARE, mage.cards.l.LionSash.class)); cards.add(new SetCardInfo("Lizard Blades", 153, Rarity.RARE, mage.cards.l.LizardBlades.class)); cards.add(new SetCardInfo("Malicious Malfunction", 110, Rarity.UNCOMMON, mage.cards.m.MaliciousMalfunction.class)); diff --git a/Mage/src/main/java/mage/abilities/effects/common/UntapLandsEffect.java b/Mage/src/main/java/mage/abilities/effects/common/UntapLandsEffect.java index f920dc06a9e..c518b69802e 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/UntapLandsEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/UntapLandsEffect.java @@ -4,6 +4,7 @@ import java.util.UUID; import mage.abilities.Ability; import mage.abilities.effects.OneShotEffect; import mage.constants.Outcome; +import mage.constants.TargetController; import mage.filter.common.FilterLandPermanent; import mage.filter.predicate.permanent.TappedPredicate; import mage.game.Game; @@ -17,11 +18,15 @@ import mage.util.CardUtil; */ public class UntapLandsEffect extends OneShotEffect { - private static final FilterLandPermanent filter = new FilterLandPermanent("land(s) to untap"); + private static final FilterLandPermanent filterAll = new FilterLandPermanent("land(s) to untap"); + private static final FilterLandPermanent filterControlled = new FilterLandPermanent("land(s) to untap"); static { - filter.add(TappedPredicate.TAPPED); + filterAll.add(TappedPredicate.TAPPED); + filterControlled.add(TappedPredicate.TAPPED); + filterControlled.add(TargetController.YOU.getControllerPredicate()); } + private final FilterLandPermanent filter; private final int amount; private final boolean upTo; @@ -30,16 +35,22 @@ public class UntapLandsEffect extends OneShotEffect { } public UntapLandsEffect(int amount, boolean upTo) { + this(amount, upTo, false); + } + + public UntapLandsEffect(int amount, boolean upTo, boolean onlyControlled) { super(Outcome.Untap); this.amount = amount; this.upTo = upTo; - staticText = "untap " + (upTo ? "up to " : "") + CardUtil.numberToText(amount, staticText) + " lands"; + this.filter = onlyControlled ? filterControlled : filterAll; + staticText = "untap " + (upTo ? "up to " : "") + CardUtil.numberToText(amount, staticText) + " lands" + (onlyControlled ? " you control" : ""); } public UntapLandsEffect(final UntapLandsEffect effect) { super(effect); this.amount = effect.amount; this.upTo = effect.upTo; + this.filter = effect.filter; } @Override