diff --git a/Mage.Sets/src/mage/cards/f/FangFearlessLCie.java b/Mage.Sets/src/mage/cards/f/FangFearlessLCie.java new file mode 100644 index 00000000000..cf71fd538a4 --- /dev/null +++ b/Mage.Sets/src/mage/cards/f/FangFearlessLCie.java @@ -0,0 +1,54 @@ +package mage.cards.f; + +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.CardsLeaveGraveyardTriggeredAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.abilities.effects.common.InfoEffect; +import mage.abilities.effects.common.LoseLifeSourceControllerEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; +import mage.constants.SuperType; +import mage.constants.Zone; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class FangFearlessLCie extends CardImpl { + + public FangFearlessLCie(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}"); + + this.supertype.add(SuperType.LEGENDARY); + this.subtype.add(SubType.HUMAN); + this.subtype.add(SubType.WARRIOR); + this.power = new MageInt(2); + this.toughness = new MageInt(3); + this.meldsWithClazz = mage.cards.v.VanilleCheerfulLCie.class; + this.meldsToClazz = mage.cards.r.RagnarokDivineDeliverance.class; + + // Whenever one or more cards leave your graveyard, you draw a card and you lose 1 life. This ability triggers only once each turn. + Ability ability = new CardsLeaveGraveyardTriggeredAbility(new DrawCardSourceControllerEffect(1, true)); + ability.addEffect(new LoseLifeSourceControllerEffect(1).concatBy("and")); + this.addAbility(ability); + + // (Melds with Vanille, Cheerful l'Cie.) + this.addAbility(new SimpleStaticAbility( + Zone.ALL, new InfoEffect("(Melds with Vanille, Cheerful l'Cie.)") + )); + } + + private FangFearlessLCie(final FangFearlessLCie card) { + super(card); + } + + @Override + public FangFearlessLCie copy() { + return new FangFearlessLCie(this); + } +} diff --git a/Mage.Sets/src/mage/cards/r/RagnarokDivineDeliverance.java b/Mage.Sets/src/mage/cards/r/RagnarokDivineDeliverance.java new file mode 100644 index 00000000000..d57fb8e73e3 --- /dev/null +++ b/Mage.Sets/src/mage/cards/r/RagnarokDivineDeliverance.java @@ -0,0 +1,78 @@ +package mage.cards.r; + +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.DiesSourceTriggeredAbility; +import mage.abilities.effects.common.DestroyTargetEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToBattlefieldTargetEffect; +import mage.abilities.keyword.*; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; +import mage.constants.SuperType; +import mage.filter.FilterCard; +import mage.filter.common.FilterPermanentCard; +import mage.filter.predicate.Predicates; +import mage.target.TargetPermanent; +import mage.target.common.TargetCardInYourGraveyard; +import mage.target.targetpointer.SecondTargetPointer; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class RagnarokDivineDeliverance extends CardImpl { + + private static final FilterCard filter = new FilterPermanentCard("nonlegendary permanent card from your graveyard"); + + static { + filter.add(Predicates.not(SuperType.LEGENDARY.getPredicate())); + } + + public RagnarokDivineDeliverance(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, ""); + + this.supertype.add(SuperType.LEGENDARY); + this.subtype.add(SubType.BEAST); + this.subtype.add(SubType.AVATAR); + this.power = new MageInt(7); + this.toughness = new MageInt(6); + this.color.setBlack(true); + this.color.setGreen(true); + + // Vigilance + this.addAbility(VigilanceAbility.getInstance()); + + // Menace + this.addAbility(new MenaceAbility()); + + // Trample + this.addAbility(TrampleAbility.getInstance()); + + // Reach + this.addAbility(ReachAbility.getInstance()); + + // Haste + this.addAbility(HasteAbility.getInstance()); + + // When Ragnarok dies, destroy target permanent and return target nonlegendary permanent card from your graveyard to the battlefield. + Ability ability = new DiesSourceTriggeredAbility(new DestroyTargetEffect()); + ability.addEffect(new ReturnFromGraveyardToBattlefieldTargetEffect() + .setText("and return target nonlegendary permanent card from your graveyard to the battlefield") + .setTargetPointer(new SecondTargetPointer())); + ability.addTarget(new TargetPermanent()); + ability.addTarget(new TargetCardInYourGraveyard(filter)); + this.addAbility(ability); + } + + private RagnarokDivineDeliverance(final RagnarokDivineDeliverance card) { + super(card); + } + + @Override + public RagnarokDivineDeliverance copy() { + return new RagnarokDivineDeliverance(this); + } +} diff --git a/Mage.Sets/src/mage/cards/v/VanilleCheerfulLCie.java b/Mage.Sets/src/mage/cards/v/VanilleCheerfulLCie.java new file mode 100644 index 00000000000..a3af63ac93b --- /dev/null +++ b/Mage.Sets/src/mage/cards/v/VanilleCheerfulLCie.java @@ -0,0 +1,95 @@ +package mage.cards.v; + +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.condition.Condition; +import mage.abilities.condition.common.MeldCondition; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.DoIfCostPaid; +import mage.abilities.effects.common.MeldEffect; +import mage.abilities.effects.common.MillCardsControllerEffect; +import mage.abilities.triggers.BeginningOfFirstMainTriggeredAbility; +import mage.cards.Card; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.*; +import mage.filter.StaticFilters; +import mage.game.Game; +import mage.players.Player; +import mage.target.TargetCard; +import mage.target.common.TargetCardInYourGraveyard; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class VanilleCheerfulLCie extends CardImpl { + + private static final Condition condition = new MeldCondition("Fang, Fearless l'Cie"); + + public VanilleCheerfulLCie(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{G}"); + + this.supertype.add(SuperType.LEGENDARY); + this.subtype.add(SubType.HUMAN); + this.subtype.add(SubType.CLERIC); + this.power = new MageInt(3); + this.toughness = new MageInt(2); + this.meldsWithClazz = mage.cards.f.FangFearlessLCie.class; + this.meldsToClazz = mage.cards.r.RagnarokDivineDeliverance.class; + + // When Vanille enters, mill two cards, then return a permanent card from your graveyard to your hand. + Ability ability = new EntersBattlefieldTriggeredAbility(new MillCardsControllerEffect(2)); + ability.addEffect(new VanilleCheerfulLCieEffect()); + this.addAbility(ability); + + // At the beginning of your first main phase, if you both own and control Vanille and a creature named Fang, Fearless l'Cie, you may pay {3}{B}{G}. If you do, exile them, then meld them into Ragnarok, Divine Deliverance. + this.addAbility(new BeginningOfFirstMainTriggeredAbility(new DoIfCostPaid( + new MeldEffect("Fang, Fearless l'Cie", "Ragnarok, Divine Deliverance") + .setText("exile them, then meld them into Ragnarok, Divine Deliverance"), + new ManaCostsImpl<>("{3}{B}{G}") + )).withInterveningIf(condition)); + } + + private VanilleCheerfulLCie(final VanilleCheerfulLCie card) { + super(card); + } + + @Override + public VanilleCheerfulLCie copy() { + return new VanilleCheerfulLCie(this); + } +} + +class VanilleCheerfulLCieEffect extends OneShotEffect { + + VanilleCheerfulLCieEffect() { + super(Outcome.Benefit); + staticText = ", then return a permanent card from your graveyard to your hand"; + } + + private VanilleCheerfulLCieEffect(final VanilleCheerfulLCieEffect effect) { + super(effect); + } + + @Override + public VanilleCheerfulLCieEffect copy() { + return new VanilleCheerfulLCieEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player player = game.getPlayer(source.getControllerId()); + if (player == null || player.getGraveyard().count(StaticFilters.FILTER_CARD_PERMANENT, game) < 1) { + return false; + } + TargetCard target = new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_PERMANENT); + target.withNotTarget(true); + player.choose(outcome, player.getGraveyard(), target, source, game); + Card card = game.getCard(target.getFirstTarget()); + return card != null && player.moveCards(card, Zone.HAND, source, game); + } +} diff --git a/Mage.Sets/src/mage/sets/FinalFantasy.java b/Mage.Sets/src/mage/sets/FinalFantasy.java index 55d27254307..4d79767901d 100644 --- a/Mage.Sets/src/mage/sets/FinalFantasy.java +++ b/Mage.Sets/src/mage/sets/FinalFantasy.java @@ -57,6 +57,10 @@ public final class FinalFantasy extends ExpansionSet { cards.add(new SetCardInfo("Emet-Selch, Unsundered", 394, Rarity.MYTHIC, mage.cards.e.EmetSelchUnsundered.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Emet-Selch, Unsundered", 483, Rarity.MYTHIC, mage.cards.e.EmetSelchUnsundered.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Emet-Selch, Unsundered", 539, Rarity.MYTHIC, mage.cards.e.EmetSelchUnsundered.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Fang, Fearless l'Cie", 381, Rarity.UNCOMMON, mage.cards.f.FangFearlessLCie.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Fang, Fearless l'Cie", 446, Rarity.UNCOMMON, mage.cards.f.FangFearlessLCie.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Fang, Fearless l'Cie", 526, Rarity.UNCOMMON, mage.cards.f.FangFearlessLCie.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Fang, Fearless l'Cie", 99, Rarity.UNCOMMON, mage.cards.f.FangFearlessLCie.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Forest", 306, Rarity.LAND, mage.cards.basiclands.Forest.class, FULL_ART_BFZ_VARIOUS)); cards.add(new SetCardInfo("Forest", 307, Rarity.LAND, mage.cards.basiclands.Forest.class, FULL_ART_BFZ_VARIOUS)); cards.add(new SetCardInfo("Forest", 308, Rarity.LAND, mage.cards.basiclands.Forest.class, FULL_ART_BFZ_VARIOUS)); @@ -86,6 +90,10 @@ public final class FinalFantasy extends ExpansionSet { cards.add(new SetCardInfo("Plains", 295, Rarity.LAND, mage.cards.basiclands.Plains.class, FULL_ART_BFZ_VARIOUS)); cards.add(new SetCardInfo("Plains", 296, Rarity.LAND, mage.cards.basiclands.Plains.class, FULL_ART_BFZ_VARIOUS)); cards.add(new SetCardInfo("Plains", 572, Rarity.LAND, mage.cards.basiclands.Plains.class, FULL_ART_BFZ_VARIOUS)); + cards.add(new SetCardInfo("Ragnarok, Divine Deliverance", "381b", Rarity.UNCOMMON, mage.cards.r.RagnarokDivineDeliverance.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ragnarok, Divine Deliverance", "446b", Rarity.UNCOMMON, mage.cards.r.RagnarokDivineDeliverance.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ragnarok, Divine Deliverance", "526b", Rarity.UNCOMMON, mage.cards.r.RagnarokDivineDeliverance.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ragnarok, Divine Deliverance", "99b", Rarity.UNCOMMON, mage.cards.r.RagnarokDivineDeliverance.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Sazh's Chocobo", 200, Rarity.UNCOMMON, mage.cards.s.SazhsChocobo.class)); cards.add(new SetCardInfo("Sephiroth, Planet's Heir", 505, Rarity.MYTHIC, mage.cards.s.SephirothPlanetsHeir.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Sephiroth, Planet's Heir", 553, Rarity.MYTHIC, mage.cards.s.SephirothPlanetsHeir.class, NON_FULL_USE_VARIOUS)); @@ -124,6 +132,10 @@ public final class FinalFantasy extends ExpansionSet { cards.add(new SetCardInfo("Ultimecia, Omnipotent", 513, Rarity.UNCOMMON, mage.cards.u.UltimeciaOmnipotent.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Ultimecia, Time Sorceress", 247, Rarity.UNCOMMON, mage.cards.u.UltimeciaTimeSorceress.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Ultimecia, Time Sorceress", 513, Rarity.UNCOMMON, mage.cards.u.UltimeciaTimeSorceress.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Vanille, Cheerful l'Cie", 211, Rarity.UNCOMMON, mage.cards.v.VanilleCheerfulLCie.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Vanille, Cheerful l'Cie", 392, Rarity.UNCOMMON, mage.cards.v.VanilleCheerfulLCie.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Vanille, Cheerful l'Cie", 475, Rarity.UNCOMMON, mage.cards.v.VanilleCheerfulLCie.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Vanille, Cheerful l'Cie", 537, Rarity.UNCOMMON, mage.cards.v.VanilleCheerfulLCie.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Wastes", 309, Rarity.COMMON, mage.cards.w.Wastes.class, FULL_ART_BFZ_VARIOUS)); cards.add(new SetCardInfo("White Mage's Staff", 42, Rarity.COMMON, mage.cards.w.WhiteMagesStaff.class)); cards.add(new SetCardInfo("Zanarkand, Ancient Metropolis", 293, Rarity.RARE, mage.cards.z.ZanarkandAncientMetropolis.class, NON_FULL_USE_VARIOUS));