diff --git a/Mage.Sets/src/mage/cards/b/BurningProphet.java b/Mage.Sets/src/mage/cards/b/BurningProphet.java new file mode 100644 index 00000000000..99085c2af78 --- /dev/null +++ b/Mage.Sets/src/mage/cards/b/BurningProphet.java @@ -0,0 +1,49 @@ +package mage.cards.b; + +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SpellCastControllerTriggeredAbility; +import mage.abilities.effects.common.continuous.BoostSourceEffect; +import mage.abilities.effects.keyword.ScryEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.SubType; +import mage.filter.StaticFilters; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class BurningProphet extends CardImpl { + + public BurningProphet(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{R}"); + + this.subtype.add(SubType.HUMAN); + this.subtype.add(SubType.WIZARD); + this.power = new MageInt(1); + this.toughness = new MageInt(3); + + // Whenever you cast a noncreature spell, Burning Prophet gets +1/+0 until end of turn, then scry 1. + Ability ability = new SpellCastControllerTriggeredAbility( + new BoostSourceEffect( + 1, 0, Duration.EndOfTurn + ).setText("{this} gets +1/+0 until end of turn, then"), + StaticFilters.FILTER_SPELL_NON_CREATURE, false + ); + ability.addEffect(new ScryEffect(1)); + this.addAbility(ability); + } + + private BurningProphet(final BurningProphet card) { + super(card); + } + + @Override + public BurningProphet copy() { + return new BurningProphet(this); + } +} diff --git a/Mage.Sets/src/mage/cards/d/DovinsVeto.java b/Mage.Sets/src/mage/cards/d/DovinsVeto.java new file mode 100644 index 00000000000..2abe0030c52 --- /dev/null +++ b/Mage.Sets/src/mage/cards/d/DovinsVeto.java @@ -0,0 +1,41 @@ +package mage.cards.d; + +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.common.CantBeCounteredSourceEffect; +import mage.abilities.effects.common.CounterTargetEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Zone; +import mage.filter.StaticFilters; +import mage.target.TargetSpell; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class DovinsVeto extends CardImpl { + + public DovinsVeto(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{W}{U}"); + + // This spell can't be countered. + this.addAbility(new SimpleStaticAbility( + Zone.STACK, new CantBeCounteredSourceEffect() + ).setRuleAtTheTop(true)); + + // Counter target noncreature spell. + this.getSpellAbility().addEffect(new CounterTargetEffect()); + this.getSpellAbility().addTarget(new TargetSpell(StaticFilters.FILTER_SPELL_NON_CREATURE)); + } + + private DovinsVeto(final DovinsVeto card) { + super(card); + } + + @Override + public DovinsVeto copy() { + return new DovinsVeto(this); + } +} diff --git a/Mage.Sets/src/mage/cards/e/ErraticVisionary.java b/Mage.Sets/src/mage/cards/e/ErraticVisionary.java new file mode 100644 index 00000000000..8ae0c49a799 --- /dev/null +++ b/Mage.Sets/src/mage/cards/e/ErraticVisionary.java @@ -0,0 +1,45 @@ +package mage.cards.e; + +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.DrawDiscardControllerEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class ErraticVisionary extends CardImpl { + + public ErraticVisionary(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}"); + + this.subtype.add(SubType.HUMAN); + this.subtype.add(SubType.WIZARD); + this.power = new MageInt(1); + this.toughness = new MageInt(3); + + // {1}{U}, {T}: Draw a card, then discard a card. + Ability ability = new SimpleActivatedAbility( + new DrawDiscardControllerEffect(), new ManaCostsImpl("{1}{U}") + ); + ability.addCost(new TapSourceCost()); + this.addAbility(ability); + } + + private ErraticVisionary(final ErraticVisionary card) { + super(card); + } + + @Override + public ErraticVisionary copy() { + return new ErraticVisionary(this); + } +} diff --git a/Mage.Sets/src/mage/cards/h/HonorTheGodPharaoh.java b/Mage.Sets/src/mage/cards/h/HonorTheGodPharaoh.java new file mode 100644 index 00000000000..1f8f365df05 --- /dev/null +++ b/Mage.Sets/src/mage/cards/h/HonorTheGodPharaoh.java @@ -0,0 +1,36 @@ +package mage.cards.h; + +import mage.abilities.costs.common.DiscardCardCost; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.abilities.effects.keyword.AmassEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class HonorTheGodPharaoh extends CardImpl { + + public HonorTheGodPharaoh(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2}{R}"); + + // As an additional cost to cast this spell, discard a card. + this.getSpellAbility().addCost(new DiscardCardCost(false)); + + // Draw two cards. Amass 1. + this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(2).setText("draw two cards.")); + this.getSpellAbility().addEffect(new AmassEffect(1)); + } + + private HonorTheGodPharaoh(final HonorTheGodPharaoh card) { + super(card); + } + + @Override + public HonorTheGodPharaoh copy() { + return new HonorTheGodPharaoh(this); + } +} diff --git a/Mage.Sets/src/mage/cards/k/KarnsBastion.java b/Mage.Sets/src/mage/cards/k/KarnsBastion.java new file mode 100644 index 00000000000..c57110985fb --- /dev/null +++ b/Mage.Sets/src/mage/cards/k/KarnsBastion.java @@ -0,0 +1,40 @@ +package mage.cards.k; + +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.GenericManaCost; +import mage.abilities.effects.common.counter.ProliferateEffect; +import mage.abilities.mana.ColorlessManaAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class KarnsBastion extends CardImpl { + + public KarnsBastion(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); + + // {T}: Add {C}. + this.addAbility(new ColorlessManaAbility()); + + // {4}, {T}: Proliferate. + Ability ability = new SimpleActivatedAbility(new ProliferateEffect(), new GenericManaCost(4)); + ability.addCost(new TapSourceCost()); + this.addAbility(ability); + } + + private KarnsBastion(final KarnsBastion card) { + super(card); + } + + @Override + public KarnsBastion copy() { + return new KarnsBastion(this); + } +} diff --git a/Mage.Sets/src/mage/cards/k/KioraBehemothBeckoner.java b/Mage.Sets/src/mage/cards/k/KioraBehemothBeckoner.java new file mode 100644 index 00000000000..4e2483500a2 --- /dev/null +++ b/Mage.Sets/src/mage/cards/k/KioraBehemothBeckoner.java @@ -0,0 +1,57 @@ +package mage.cards.k; + +import mage.abilities.Ability; +import mage.abilities.LoyaltyAbility; +import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility; +import mage.abilities.common.PlaneswalkerEntersWithLoyaltyCountersAbility; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.abilities.effects.common.UntapTargetEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.*; +import mage.filter.FilterPermanent; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.mageobject.PowerPredicate; +import mage.target.TargetPermanent; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class KioraBehemothBeckoner extends CardImpl { + + private static final FilterPermanent filter + = new FilterCreaturePermanent("a creature with power 4 or greater"); + + static { + filter.add(new PowerPredicate(ComparisonType.MORE_THAN, 3)); + } + + public KioraBehemothBeckoner(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{2}{G/U}"); + + this.addSuperType(SuperType.LEGENDARY); + this.subtype.add(SubType.KIORA); + this.addAbility(new PlaneswalkerEntersWithLoyaltyCountersAbility(7)); + + // Whenever a creature with power 4 or greater enters the battlefield under your control, draw a card. + this.addAbility(new EntersBattlefieldControlledTriggeredAbility( + Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(1), filter, false + )); + + // -1: Untap target permanent. + Ability ability = new LoyaltyAbility(new UntapTargetEffect(), -1); + ability.addTarget(new TargetPermanent()); + this.addAbility(ability); + } + + private KioraBehemothBeckoner(final KioraBehemothBeckoner card) { + super(card); + } + + @Override + public KioraBehemothBeckoner copy() { + return new KioraBehemothBeckoner(this); + } +} diff --git a/Mage.Sets/src/mage/cards/n/NagaEternal.java b/Mage.Sets/src/mage/cards/n/NagaEternal.java new file mode 100644 index 00000000000..4652ca3e8f5 --- /dev/null +++ b/Mage.Sets/src/mage/cards/n/NagaEternal.java @@ -0,0 +1,33 @@ +package mage.cards.n; + +import mage.MageInt; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class NagaEternal extends CardImpl { + + public NagaEternal(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{U}"); + + this.subtype.add(SubType.ZOMBIE); + this.subtype.add(SubType.NAGA); + this.power = new MageInt(3); + this.toughness = new MageInt(2); + } + + private NagaEternal(final NagaEternal card) { + super(card); + } + + @Override + public NagaEternal copy() { + return new NagaEternal(this); + } +} diff --git a/Mage.Sets/src/mage/cards/s/SamutTyrantSmasher.java b/Mage.Sets/src/mage/cards/s/SamutTyrantSmasher.java new file mode 100644 index 00000000000..8340be7acc2 --- /dev/null +++ b/Mage.Sets/src/mage/cards/s/SamutTyrantSmasher.java @@ -0,0 +1,61 @@ +package mage.cards.s; + +import mage.abilities.Ability; +import mage.abilities.LoyaltyAbility; +import mage.abilities.common.PlaneswalkerEntersWithLoyaltyCountersAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.common.continuous.BoostTargetEffect; +import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; +import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; +import mage.abilities.effects.keyword.ScryEffect; +import mage.abilities.keyword.HasteAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.SubType; +import mage.constants.SuperType; +import mage.filter.StaticFilters; +import mage.target.common.TargetCreaturePermanent; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class SamutTyrantSmasher extends CardImpl { + + public SamutTyrantSmasher(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{2}{R/G}{R/G}"); + + this.addSuperType(SuperType.LEGENDARY); + this.subtype.add(SubType.SAMUT); + this.addAbility(new PlaneswalkerEntersWithLoyaltyCountersAbility(5)); + + // Creatures you control have haste. + this.addAbility(new SimpleStaticAbility(new GainAbilityControlledEffect( + HasteAbility.getInstance(), Duration.WhileOnBattlefield, + StaticFilters.FILTER_PERMANENT_CREATURES + ))); + + // -1: Target creature gets +2/+1 and gains haste until end of turn. Scry 1. + Ability ability = new LoyaltyAbility(new BoostTargetEffect( + 2, 1, Duration.EndOfTurn + ).setText("target creature gets +2/+1"), -1); + ability.addEffect(new GainAbilityTargetEffect( + HasteAbility.getInstance(), Duration.EndOfTurn + ).setText("and gains haste until end of turn.")); + ability.addEffect(new ScryEffect(1)); + ability.addTarget(new TargetCreaturePermanent()); + this.addAbility(ability); + } + + private SamutTyrantSmasher(final SamutTyrantSmasher card) { + super(card); + } + + @Override + public SamutTyrantSmasher copy() { + return new SamutTyrantSmasher(this); + } +} diff --git a/Mage.Sets/src/mage/cards/s/SamutsSprint.java b/Mage.Sets/src/mage/cards/s/SamutsSprint.java new file mode 100644 index 00000000000..28862ab5737 --- /dev/null +++ b/Mage.Sets/src/mage/cards/s/SamutsSprint.java @@ -0,0 +1,42 @@ +package mage.cards.s; + +import mage.abilities.effects.common.continuous.BoostTargetEffect; +import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; +import mage.abilities.effects.keyword.ScryEffect; +import mage.abilities.keyword.HasteAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.target.common.TargetCreaturePermanent; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class SamutsSprint extends CardImpl { + + public SamutsSprint(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{R}"); + + // Target creature gets +2/+1 and gains haste until end of turn. Scry 1. + this.getSpellAbility().addEffect(new BoostTargetEffect( + 2, 1, Duration.EndOfTurn + ).setText("target creature gets +2/+1")); + this.getSpellAbility().addEffect(new GainAbilityTargetEffect( + HasteAbility.getInstance(), Duration.EndOfTurn + ).setText("and gains haste until end of turn.")); + this.getSpellAbility().addEffect(new ScryEffect(1)); + this.getSpellAbility().addTarget(new TargetCreaturePermanent()); + } + + private SamutsSprint(final SamutsSprint card) { + super(card); + } + + @Override + public SamutsSprint copy() { + return new SamutsSprint(this); + } +} diff --git a/Mage.Sets/src/mage/cards/w/WanderersStrike.java b/Mage.Sets/src/mage/cards/w/WanderersStrike.java new file mode 100644 index 00000000000..19487472093 --- /dev/null +++ b/Mage.Sets/src/mage/cards/w/WanderersStrike.java @@ -0,0 +1,38 @@ +package mage.cards.w; + +import mage.abilities.effects.common.ExileTargetEffect; +import mage.abilities.effects.common.counter.ProliferateEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.target.common.TargetCreaturePermanent; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class WanderersStrike extends CardImpl { + + public WanderersStrike(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{4}{W}"); + + + // Exile target creature, then proliferate. + this.getSpellAbility().addEffect(new ExileTargetEffect()); + this.getSpellAbility().addEffect(new ProliferateEffect().setText( + "then proliferate (Choose any number of permanents and/or players, " + + "then give each another counter of each kind already there.)" + )); + this.getSpellAbility().addTarget(new TargetCreaturePermanent()); + } + + private WanderersStrike(final WanderersStrike card) { + super(card); + } + + @Override + public WanderersStrike copy() { + return new WanderersStrike(this); + } +} diff --git a/Mage.Sets/src/mage/sets/WarOfTheSpark.java b/Mage.Sets/src/mage/sets/WarOfTheSpark.java index d9962d505d1..530961bf476 100644 --- a/Mage.Sets/src/mage/sets/WarOfTheSpark.java +++ b/Mage.Sets/src/mage/sets/WarOfTheSpark.java @@ -31,7 +31,7 @@ public final class WarOfTheSpark extends ExpansionSet { cards.add(new SetCardInfo("Burning Prophet", 117, Rarity.COMMON, mage.cards.b.BurningProphet.class)); cards.add(new SetCardInfo("Cruel Celebrant", 188, Rarity.UNCOMMON, mage.cards.c.CruelCelebrant.class)); cards.add(new SetCardInfo("Crush Dissent", 47, Rarity.COMMON, mage.cards.c.CrushDissent.class)); - cards.add(new SetCardInfo("Dovin's Veto", 193, Rarity.UNCOMMON, mage.cards.d.DovinsVeto.class)); + cards.add(new SetCardInfo("Dovin's Veto", 193, Rarity.COMMON, mage.cards.d.DovinsVeto.class)); cards.add(new SetCardInfo("Dreadhorde Invasion", 86, Rarity.RARE, mage.cards.d.DreadhordeInvasion.class)); cards.add(new SetCardInfo("Emergence Zone", 245, Rarity.UNCOMMON, mage.cards.e.EmergenceZone.class)); cards.add(new SetCardInfo("Erratic Visionary", 48, Rarity.COMMON, mage.cards.e.ErraticVisionary.class)); @@ -40,6 +40,7 @@ public final class WarOfTheSpark extends ExpansionSet { cards.add(new SetCardInfo("Forest", 263, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Forest", 264, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Herald of the Dreadhorde", 93, Rarity.COMMON, mage.cards.h.HeraldOfTheDreadhorde.class)); + cards.add(new SetCardInfo("Honor the God-Pharaoh", 132, Rarity.COMMON, mage.cards.h.HonorTheGodPharaoh.class)); cards.add(new SetCardInfo("Ignite the Beacon", 18, Rarity.RARE, mage.cards.i.IgniteTheBeacon.class)); cards.add(new SetCardInfo("Interplanar Beacon", 247, Rarity.UNCOMMON, mage.cards.i.InterplanarBeacon.class)); cards.add(new SetCardInfo("Invade the City", 201, Rarity.UNCOMMON, mage.cards.i.InvadeTheCity.class)); @@ -47,10 +48,13 @@ public final class WarOfTheSpark extends ExpansionSet { cards.add(new SetCardInfo("Island", 254, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Island", 255, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Jace, Wielder of Mysteries", 54, Rarity.RARE, mage.cards.j.JaceWielderOfMysteries.class)); + cards.add(new SetCardInfo("Karn's Bastion", 248, Rarity.RARE, mage.cards.k.KarnsBastion.class)); + cards.add(new SetCardInfo("Kiora, Behemoth Beckoner", 232, Rarity.UNCOMMON, mage.cards.k.KioraBehemothBeckoner.class)); cards.add(new SetCardInfo("Liliana, Dreadhorde General", 97, Rarity.MYTHIC, mage.cards.l.LilianaDreadhordeGeneral.class)); cards.add(new SetCardInfo("Mountain", 259, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Mountain", 260, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Mountain", 261, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Naga Eternal", 60, Rarity.COMMON, mage.cards.n.NagaEternal.class)); cards.add(new SetCardInfo("No Escape", 63, Rarity.COMMON, mage.cards.n.NoEscape.class)); cards.add(new SetCardInfo("Ob Nixilis's Cruelty", 101, Rarity.COMMON, mage.cards.o.ObNixilissCruelty.class)); cards.add(new SetCardInfo("Ob Nixilis, the Hate-Twisted", 100, Rarity.UNCOMMON, mage.cards.o.ObNixilisTheHateTwisted.class)); @@ -60,6 +64,8 @@ public final class WarOfTheSpark extends ExpansionSet { cards.add(new SetCardInfo("Plains", 252, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Ravnica at War", 28, Rarity.RARE, mage.cards.r.RavnicaAtWar.class)); cards.add(new SetCardInfo("Relentless Advance", 64, Rarity.COMMON, mage.cards.r.RelentlessAdvance.class)); + cards.add(new SetCardInfo("Samut's Sprint", 142, Rarity.COMMON, mage.cards.s.SamutsSprint.class)); + cards.add(new SetCardInfo("Samut, Tyrant Smasher", 235, Rarity.UNCOMMON, mage.cards.s.SamutTyrantSmasher.class)); cards.add(new SetCardInfo("Swamp", 256, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Swamp", 257, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Swamp", 258, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); @@ -69,6 +75,7 @@ public final class WarOfTheSpark extends ExpansionSet { cards.add(new SetCardInfo("Time Wipe", 223, Rarity.RARE, mage.cards.t.TimeWipe.class)); cards.add(new SetCardInfo("Vraska's Finisher", 112, Rarity.COMMON, mage.cards.v.VraskasFinisher.class)); cards.add(new SetCardInfo("Vraska, Swarm's Eminence", 236, Rarity.UNCOMMON, mage.cards.v.VraskaSwarmsEminence.class)); + cards.add(new SetCardInfo("Wanderer's Strike", 38, Rarity.COMMON, mage.cards.w.WanderersStrike.class)); cards.add(new SetCardInfo("Widespread Brutality", 226, Rarity.RARE, mage.cards.w.WidespreadBrutality.class)); } } diff --git a/Utils/mtg-cards-data.txt b/Utils/mtg-cards-data.txt index 6c2e54450ae..56dbb2a905d 100644 --- a/Utils/mtg-cards-data.txt +++ b/Utils/mtg-cards-data.txt @@ -34852,6 +34852,7 @@ The Haunt of Hightower|Ravnica Allegiance|273|M|{4}{B}{B}|Legendary Creature - V Serra the Benevolent|Modern Horizons|26|M|{2}{W}{W}|Legendary Planeswalker - Serra|4|+2: Creatures you control with flying get +1/+1 until end of turn.$-3: Create a 4/4 white Angel creature token with flying and vigilance.$-6: You get an emblem with "If you control a creature, damage that would reduce your life total to less than 1 reduces it to 1 instead."| Cabal Therapist|Modern Horizons|80|R|{B}|Creature - Horror|1|1|Menace$At the beginning of your precombat main phase, you may sacrifice a creature. When you do, choose a nonland card name, then target player reveals their hand and discards all cards with that name.| Ajani's Pridemate|War of the Spark|4|U|{1}{W}|Creature - Cat Soldier|2|2|Whenever you gain life, put a +1/+1 counter on Ajani's Pridemate.| +Gideon's Triumph|War of the Spark|15|U|{1}{W}|Instant|||Target opponent sacrifices a creature that attacked or blocked this turn. If you control a Gideon planeswalker, that player sacrifices two of those creatures instead.| Ignite the Beacon|War of the Spark|18|R|{4}{W}|Instant|||Search your library for up to to two planeswalker cards, reveal them, put them into your hand, then shuffle your library.| Ravnica at War|War of the Spark|28|R|{3}{W}|Sorcery|||Exile all multicolored permanents.| Rising Populace|War of the Spark|29|C|{2}{W}|Creature - Human|2|2|Whenever another creature or planeswalker you control dies, put a +1/+1 counter on Rising Populace.|