From 71aa4c6b0816c8d66995bb75dbee7a609ac338c3 Mon Sep 17 00:00:00 2001 From: Evan Kranzler Date: Mon, 29 Aug 2022 20:54:01 -0400 Subject: [PATCH] [DMU] Implemented Volshe Tideturner --- .../src/mage/cards/v/VolsheTideturner.java | 92 +++++++++++++++++++ Mage.Sets/src/mage/sets/DominariaUnited.java | 1 + 2 files changed, 93 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/v/VolsheTideturner.java diff --git a/Mage.Sets/src/mage/cards/v/VolsheTideturner.java b/Mage.Sets/src/mage/cards/v/VolsheTideturner.java new file mode 100644 index 00000000000..ea93447a487 --- /dev/null +++ b/Mage.Sets/src/mage/cards/v/VolsheTideturner.java @@ -0,0 +1,92 @@ +package mage.cards.v; + +import mage.ConditionalMana; +import mage.MageInt; +import mage.MageObject; +import mage.Mana; +import mage.abilities.Ability; +import mage.abilities.SpellAbility; +import mage.abilities.condition.Condition; +import mage.abilities.condition.common.KickedCondition; +import mage.abilities.costs.Cost; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.mana.ConditionalColoredManaAbility; +import mage.abilities.mana.builder.ConditionalManaBuilder; +import mage.abilities.mana.conditional.ManaCondition; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; +import mage.game.Game; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class VolsheTideturner extends CardImpl { + + public VolsheTideturner(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}"); + + this.subtype.add(SubType.MERFOLK); + this.subtype.add(SubType.WIZARD); + this.power = new MageInt(1); + this.toughness = new MageInt(3); + + // {T}: Add {U}. Spend this mana only to cast an instant or sorcery spell or a kicked spell. + this.addAbility(new ConditionalColoredManaAbility( + new TapSourceCost(), Mana.BlueMana(1), new VolsheTideturnerManaBuilder() + )); + } + + private VolsheTideturner(final VolsheTideturner card) { + super(card); + } + + @Override + public VolsheTideturner copy() { + return new VolsheTideturner(this); + } +} + +class VolsheTideturnerManaBuilder extends ConditionalManaBuilder { + + @Override + public ConditionalMana build(Object... options) { + return new VolsheTideturnerConditionalMana(this.mana); + } + + @Override + public String getRule() { + return "Spend this mana only to cast an instant or sorcery spell or a kicked spell."; + } +} + +class VolsheTideturnerConditionalMana extends ConditionalMana { + + public VolsheTideturnerConditionalMana(Mana mana) { + super(mana); + addCondition(new VolsheTideturnerCondition()); + } +} + +class VolsheTideturnerCondition extends ManaCondition implements Condition { + + @Override + public boolean apply(Game game, Ability source) { + if (KickedCondition.ONCE.apply(game, source)) { + return true; + } + if (!(source instanceof SpellAbility)) { + return false; + } + MageObject object = game.getObject(source); + return object != null && object.isInstantOrSorcery(game); + } + + @Override + public boolean apply(Game game, Ability source, UUID originalId, Cost costsToPay) { + return apply(game, source); + } +} diff --git a/Mage.Sets/src/mage/sets/DominariaUnited.java b/Mage.Sets/src/mage/sets/DominariaUnited.java index c0e49ed8da1..8c922f5d4fa 100644 --- a/Mage.Sets/src/mage/sets/DominariaUnited.java +++ b/Mage.Sets/src/mage/sets/DominariaUnited.java @@ -237,6 +237,7 @@ public final class DominariaUnited extends ExpansionSet { cards.add(new SetCardInfo("Voda Sea Scavenger", 74, Rarity.COMMON, mage.cards.v.VodaSeaScavenger.class)); cards.add(new SetCardInfo("Vodalian Hexcatcher", 75, Rarity.RARE, mage.cards.v.VodalianHexcatcher.class)); cards.add(new SetCardInfo("Vodalian Mindsinger", 76, Rarity.RARE, mage.cards.v.VodalianMindsinger.class)); + cards.add(new SetCardInfo("Volshe Tideturner", 77, Rarity.COMMON, mage.cards.v.VolsheTideturner.class)); cards.add(new SetCardInfo("Walking Bulwark", 241, Rarity.UNCOMMON, mage.cards.w.WalkingBulwark.class)); cards.add(new SetCardInfo("Wingmantle Chaplain", 39, Rarity.UNCOMMON, mage.cards.w.WingmantleChaplain.class)); cards.add(new SetCardInfo("Wooded Ridgeline", 260, Rarity.COMMON, mage.cards.w.WoodedRidgeline.class));