From bbad644aad6d767a2ed008368c4b4cf792bacc03 Mon Sep 17 00:00:00 2001 From: Evan Kranzler Date: Mon, 18 Apr 2022 19:09:13 -0400 Subject: [PATCH] [SNC] Implemented Spellbinding Soprano --- .../src/mage/cards/s/SpellbindingSoprano.java | 51 +++++++++++++++++++ .../src/mage/sets/NewCapennaCommander.java | 1 + Utils/mtg-cards-data.txt | 2 +- 3 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 Mage.Sets/src/mage/cards/s/SpellbindingSoprano.java diff --git a/Mage.Sets/src/mage/cards/s/SpellbindingSoprano.java b/Mage.Sets/src/mage/cards/s/SpellbindingSoprano.java new file mode 100644 index 00000000000..2a45a8191e6 --- /dev/null +++ b/Mage.Sets/src/mage/cards/s/SpellbindingSoprano.java @@ -0,0 +1,51 @@ +package mage.cards.s; + +import mage.abilities.common.AttacksTriggeredAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.cost.SpellsCostReductionControllerEffect; +import mage.abilities.keyword.EncoreAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; +import mage.filter.FilterCard; +import mage.filter.predicate.Predicates; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class SpellbindingSoprano extends CardImpl { + + private static final FilterCard filter = new FilterCard("Instant and sorcery spells"); + + static { + filter.add(Predicates.or( + CardType.INSTANT.getPredicate(), + CardType.SORCERY.getPredicate() + )); + } + + public SpellbindingSoprano(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{R}"); + + this.subtype.add(SubType.HUMAN); + this.subtype.add(SubType.BARD); + + // Whenever Spellbinding Soprano attacks, instant and sorcery spells you cast this turn cost {1} less to cast. + this.addAbility(new AttacksTriggeredAbility(new SpellsCostReductionControllerEffect(filter, 1))); + + // Encore {3}{R} + this.addAbility(new EncoreAbility(new ManaCostsImpl<>("{3}{R}"))); + } + + private SpellbindingSoprano(final SpellbindingSoprano card) { + super(card); + } + + @Override + public SpellbindingSoprano copy() { + return new SpellbindingSoprano(this); + } +} diff --git a/Mage.Sets/src/mage/sets/NewCapennaCommander.java b/Mage.Sets/src/mage/sets/NewCapennaCommander.java index e5625f1e793..66a66954584 100644 --- a/Mage.Sets/src/mage/sets/NewCapennaCommander.java +++ b/Mage.Sets/src/mage/sets/NewCapennaCommander.java @@ -28,6 +28,7 @@ public final class NewCapennaCommander extends ExpansionSet { cards.add(new SetCardInfo("Damning Verdict", 15, Rarity.RARE, mage.cards.d.DamningVerdict.class)); cards.add(new SetCardInfo("Extravagant Replication", 25, Rarity.RARE, mage.cards.e.ExtravagantReplication.class)); cards.add(new SetCardInfo("Kitt Kanto, Mayhem Diva", 4, Rarity.MYTHIC, mage.cards.k.KittKantoMayhemDiva.class)); + cards.add(new SetCardInfo("Spellbinding Soprano", 53, Rarity.RARE, mage.cards.s.SpellbindingSoprano.class)); cards.removeIf(setCardInfo -> unfinished.contains(setCardInfo.getName())); // remove when shield counters are implemented } diff --git a/Utils/mtg-cards-data.txt b/Utils/mtg-cards-data.txt index 2ee4b3314a9..772dd7a274e 100644 --- a/Utils/mtg-cards-data.txt +++ b/Utils/mtg-cards-data.txt @@ -44214,7 +44214,7 @@ Waste Management|New Capenna Commander|40|R|{2}{B}|Instant|||Kicker {3}{B}$Exile Xander's Pact|New Capenna Commander|43|R|{4}{B}{B}|Sorcery|||Casualty 2$Each opponent exiles the top card of their library. You may cast spells from among those cards this turn. If you cast a spell this way, pay life equal to that spell's mana value rather than pay its mana cost.| Audacious Swap|New Capenna Commander|44|R|{3}{R}|Instant|||Casualty 2$The owner of target nonenchantment permanent shuffles it into their library, then exiles the top card of their library. If it's a land card, they put it onto the battlefield. Otherwise, they may cast it without paying its mana cost.| Determined Iteration|New Capenna Commander|45|R|{1}{R}|Enchantment|||At the beginning of combat on your turn, populate. The token created this way gains haste. Sacrifice it at the beginning of the next end step.| -Spellbinding Soprano|New Capenna Commander|53|R|{1}{R}|Crature - Human Bard|||Whenever Spellbinding Soprano attacks, instant and sorcery spells you cast this turn cost {1} less to cast.$Encore {3}{R}| +Spellbinding Soprano|New Capenna Commander|53|R|{1}{R}|Creature - Human Bard|||Whenever Spellbinding Soprano attacks, instant and sorcery spells you cast this turn cost {1} less to cast.$Encore {3}{R}| Family's Favor|New Capenna Commander|59|R|{2}{G}|Enchantment|||Whenever you attack, put a shield counter on target attacking creature. Until end of turn, it gains "Whenever this creature deals combat damage to a player, remove a shield counter from it. If you do, draw a card."| Cryptic Pursuit|New Capenna Commander|70|R|{2}{U}{R}|Enchantment|||Whenever you cast an instant or sorcery spell from your hand, manifest the top card of your library.$Whenever a face-down creature you control dies, exile it if it's an instant or sorcery card. You may cast that card until the end of your next turn.| Maestros Confluence|New Capenna Commander|75|R|{3}{U}{B}{R}|Sorcery|||Choose three. You may choose the same mode more than once.$• Return target monocolored instant or sorcery card from your graveyard to your hand.$• Target creature gets -3/-3 until end of turn.$• Goad each creature target player controls.|