From a0fbeebf4e77397bac1999348ea92640549b9749 Mon Sep 17 00:00:00 2001 From: Evan Kranzler Date: Mon, 11 Jun 2018 21:28:43 -0400 Subject: [PATCH] Implemented Vivien Reid --- Mage.Sets/src/mage/cards/v/VivienReid.java | 80 +++++++++++++++++++ Mage.Sets/src/mage/sets/CoreSet2019.java | 1 + .../src/main/java/mage/constants/SubType.java | 1 + .../emblems/ElspethSunsChampionEmblem.java | 23 ++++-- .../command/emblems/VivienReidEmblem.java | 51 ++++++++++++ Utils/mtg-cards-data.txt | 2 +- 6 files changed, 149 insertions(+), 9 deletions(-) create mode 100644 Mage.Sets/src/mage/cards/v/VivienReid.java create mode 100644 Mage/src/main/java/mage/game/command/emblems/VivienReidEmblem.java diff --git a/Mage.Sets/src/mage/cards/v/VivienReid.java b/Mage.Sets/src/mage/cards/v/VivienReid.java new file mode 100644 index 00000000000..f9ac19d2b53 --- /dev/null +++ b/Mage.Sets/src/mage/cards/v/VivienReid.java @@ -0,0 +1,80 @@ +package mage.cards.v; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.LoyaltyAbility; +import mage.abilities.common.PlanswalkerEntersWithLoyalityCountersAbility; +import mage.abilities.dynamicvalue.common.StaticValue; +import mage.abilities.effects.common.DestroyTargetEffect; +import mage.abilities.effects.common.GetEmblemEffect; +import mage.abilities.effects.common.LookLibraryAndPickControllerEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.constants.SubType; +import mage.constants.SuperType; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.filter.FilterCard; +import mage.filter.FilterPermanent; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.predicate.mageobject.CardTypePredicate; +import mage.game.command.emblems.VivienReidEmblem; +import mage.target.TargetPermanent; + +/** + * + * @author TheElk801 + */ +public final class VivienReid extends CardImpl { + + private static final FilterCard filter = new FilterCard("a creature or land card"); + private static final FilterPermanent filter2 = new FilterPermanent("artifact, enchantment, or creature with flying"); + + static { + filter.add(Predicates.or( + new CardTypePredicate(CardType.CREATURE), + new CardTypePredicate(CardType.LAND) + )); + filter2.add(Predicates.or( + new CardTypePredicate(CardType.ARTIFACT), + new CardTypePredicate(CardType.ENCHANTMENT), + Predicates.and( + new CardTypePredicate(CardType.CREATURE), + new AbilityPredicate(FlyingAbility.class) + ) + )); + } + + public VivienReid(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{3}{G}{G}"); + + this.addSuperType(SuperType.LEGENDARY); + this.subtype.add(SubType.VIVIEN); + this.addAbility(new PlanswalkerEntersWithLoyalityCountersAbility(5)); + + // +1: Look at the top four cards of your library. You may reveal a creature or land card from among them and put it into your hand. Put the rest on the bottom of your library in any order. + this.addAbility(new LoyaltyAbility( + new LookLibraryAndPickControllerEffect( + new StaticValue(4), false, new StaticValue(1), filter, false + ), 1 + )); + + // -3: Destroy target artifact, enchantment, or creature with flying. + Ability ability = new LoyaltyAbility(new DestroyTargetEffect()); + ability.addTarget(new TargetPermanent(filter2)); + this.addAbility(ability); + + // -8: You get an emblem with "Creatures you control get +2/+2 and have vigilance, trample, and indestructible. + this.addAbility(new LoyaltyAbility(new GetEmblemEffect(new VivienReidEmblem()), -8)); + } + + public VivienReid(final VivienReid card) { + super(card); + } + + @Override + public VivienReid copy() { + return new VivienReid(this); + } +} diff --git a/Mage.Sets/src/mage/sets/CoreSet2019.java b/Mage.Sets/src/mage/sets/CoreSet2019.java index 777cfaa3c07..f1c008dd228 100644 --- a/Mage.Sets/src/mage/sets/CoreSet2019.java +++ b/Mage.Sets/src/mage/sets/CoreSet2019.java @@ -115,6 +115,7 @@ public final class CoreSet2019 extends ExpansionSet { cards.add(new SetCardInfo("Trusty Packbeast", 41, Rarity.COMMON, mage.cards.t.TrustyPackbeast.class)); cards.add(new SetCardInfo("Uncomfortable Chill", 82, Rarity.COMMON, mage.cards.u.UncomfortableChill.class)); cards.add(new SetCardInfo("Vampire Sovereign", 125, Rarity.UNCOMMON, mage.cards.v.VampireSovereign.class)); + cards.add(new SetCardInfo("Vivien Reid", 208, Rarity.MYTHIC, mage.cards.v.VivienReid.class)); cards.add(new SetCardInfo("Volcanic Dragon", 167, Rarity.UNCOMMON, mage.cards.v.VolcanicDragon.class)); cards.add(new SetCardInfo("Walking Corpse", 126, Rarity.COMMON, mage.cards.w.WalkingCorpse.class)); cards.add(new SetCardInfo("Wall of Mist", 83, Rarity.COMMON, mage.cards.w.WallOfMist.class)); diff --git a/Mage/src/main/java/mage/constants/SubType.java b/Mage/src/main/java/mage/constants/SubType.java index 156a84feb1f..fb38796b592 100644 --- a/Mage/src/main/java/mage/constants/SubType.java +++ b/Mage/src/main/java/mage/constants/SubType.java @@ -403,6 +403,7 @@ public enum SubType { TIBALT("Tibalt", SubTypeSet.PlaneswalkerType), UGIN("Ugin", SubTypeSet.PlaneswalkerType), VENSER("Venser", SubTypeSet.PlaneswalkerType), + VIVIEN("Vivien", SubTypeSet.PlaneswalkerType), VRASKA("Vraska", SubTypeSet.PlaneswalkerType), WILL("Will", SubTypeSet.PlaneswalkerType), XENAGOS("Xenagos", SubTypeSet.PlaneswalkerType), diff --git a/Mage/src/main/java/mage/game/command/emblems/ElspethSunsChampionEmblem.java b/Mage/src/main/java/mage/game/command/emblems/ElspethSunsChampionEmblem.java index dba80ba4561..72e045663eb 100644 --- a/Mage/src/main/java/mage/game/command/emblems/ElspethSunsChampionEmblem.java +++ b/Mage/src/main/java/mage/game/command/emblems/ElspethSunsChampionEmblem.java @@ -1,4 +1,3 @@ - package mage.game.command.emblems; import mage.abilities.Ability; @@ -8,7 +7,7 @@ import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; import mage.abilities.keyword.FlyingAbility; import mage.constants.Duration; import mage.constants.Zone; -import mage.filter.common.FilterCreaturePermanent; +import mage.filter.StaticFilters; import mage.game.command.Emblem; /** @@ -16,16 +15,24 @@ import mage.game.command.Emblem; * @author spjspj */ public class ElspethSunsChampionEmblem extends Emblem { + // -7: You get an emblem with "Creatures you control get +2/+2 and have flying." - - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Creatures"); - public ElspethSunsChampionEmblem() { this.setName("Emblem Elspeth"); this.setExpansionSetCodeForImage("THS"); - Ability ability = new SimpleStaticAbility(Zone.COMMAND, new BoostControlledEffect(2, 2, Duration.EndOfGame, filter, false)); - ability.addEffect(new GainAbilityControlledEffect(FlyingAbility.getInstance(), Duration.EndOfGame, filter)); + Ability ability = new SimpleStaticAbility( + Zone.COMMAND, + new BoostControlledEffect( + 2, 2, Duration.EndOfGame, + StaticFilters.FILTER_PERMANENT_CREATURES, + false + ).setText("creatures you control get +2/+2") + ); + ability.addEffect(new GainAbilityControlledEffect( + FlyingAbility.getInstance(), + Duration.EndOfGame, + StaticFilters.FILTER_PERMANENT_CREATURES + ).setText("and have flying")); this.getAbilities().add(ability); - } } diff --git a/Mage/src/main/java/mage/game/command/emblems/VivienReidEmblem.java b/Mage/src/main/java/mage/game/command/emblems/VivienReidEmblem.java new file mode 100644 index 00000000000..c411e581dfd --- /dev/null +++ b/Mage/src/main/java/mage/game/command/emblems/VivienReidEmblem.java @@ -0,0 +1,51 @@ +package mage.game.command.emblems; + +import mage.abilities.Ability; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.common.continuous.BoostControlledEffect; +import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; +import mage.abilities.keyword.IndestructibleAbility; +import mage.abilities.keyword.TrampleAbility; +import mage.abilities.keyword.VigilanceAbility; +import mage.constants.Duration; +import mage.constants.Zone; +import mage.filter.StaticFilters; +import mage.game.command.Emblem; + +/** + * + * @author spjspj + */ +public class VivienReidEmblem extends Emblem { + // -8: You get an emblem with "Creatures you control get +2/+2 and have vigilance, trample, and indestructible. + + public VivienReidEmblem() { + this.setName("Emblem Vivien"); + this.setExpansionSetCodeForImage("M19"); + Ability ability = new SimpleStaticAbility( + Zone.COMMAND, + new BoostControlledEffect( + 2, 2, Duration.EndOfGame, + StaticFilters.FILTER_PERMANENT_CREATURES, + false + ).setText("creatures you control get +2/+2") + ); + ability.addEffect(new GainAbilityControlledEffect( + VigilanceAbility.getInstance(), + Duration.EndOfGame, + StaticFilters.FILTER_PERMANENT_CREATURES + ).setText("and have vigilance,")); + ability.addEffect(new GainAbilityControlledEffect( + TrampleAbility.getInstance(), + Duration.EndOfGame, + StaticFilters.FILTER_PERMANENT_CREATURES + ).setText("trample,")); + ability.addEffect(new GainAbilityControlledEffect( + IndestructibleAbility.getInstance(), + Duration.EndOfGame, + StaticFilters.FILTER_PERMANENT_CREATURES + ).setText("and indestructible")); + this.getAbilities().add(ability); + + } +} diff --git a/Utils/mtg-cards-data.txt b/Utils/mtg-cards-data.txt index 9577c095285..a26d1bdff96 100644 --- a/Utils/mtg-cards-data.txt +++ b/Utils/mtg-cards-data.txt @@ -33666,7 +33666,7 @@ Rabid Bite|Core Set 2019|195|C|{1}{G}|Sorcery|||Target creature you control deal Recollect|Core Set 2019|197|U|{2}{G}|Sorcery|||Return target card from your graveyard to your hand.| Thornhide Wolves|Core Set 2019|204|C|{4}{G}|Creature - Wolf|4|5|| Titanic Growth|Core Set 2019|205|C|{1}{G}|Instant|||Target creature gets +4/+4 until end of turn.| -Vivien Reid|Core Set 2019|208|M|{3}{G}{G}|Legendary Planeswalker - Vivien|||+1: Look at the top four cards of your library. You may reveal a creature or land card from among them and put it into your hand. Put the rest on the bottom of your library in any order.$-3: Destroy target artifact, enchantment, or creature with flying.$-8: You get an emblem with "Creatures you control get +2/+2 and have vigilance, trample, and indestructible.| +Vivien Reid|Core Set 2019|208|M|{3}{G}{G}|Legendary Planeswalker - Vivien|5|+1: Look at the top four cards of your library. You may reveal a creature or land card from among them and put it into your hand. Put the rest on the bottom of your library in any order.$-3: Destroy target artifact, enchantment, or creature with flying.$-8: You get an emblem with "Creatures you control get +2/+2 and have vigilance, trample, and indestructible.| Vivien's Invocation|Core Set 2019|209|R|{5}{G}{G}|Sorcery|||Look at the top seven cards of your library. You may put a creature card from among them onto the battlefield. Put the rest on the bottom of your library in a random order. When a creature is put onto the battlefield this way, it deals damage equals to its power to target creature an opponent controls.| Wall of Vines|Core Set 2019|210|C|{G}|Creature - Plant Wall|0|3|Defender| Desecrated Tomb|Core Set 2019|230|R|{3}|Artifact|||Whenever one or more creature cards leave your graveyard, create a 1/1 black Bat creature token with flying.|