From d49cd6f3049f357c8020ff5aa95ff523f225ebf4 Mon Sep 17 00:00:00 2001 From: Evan Kranzler Date: Fri, 4 Jan 2019 11:40:11 -0500 Subject: [PATCH] Implemented Electrodominance --- .../src/mage/cards/e/Electrodominance.java | 35 +++++++++++++++++++ .../src/mage/sets/RavnicaAllegiance.java | 1 + .../cost/CastWithoutPayingManaCostEffect.java | 20 +++++++---- 3 files changed, 49 insertions(+), 7 deletions(-) create mode 100644 Mage.Sets/src/mage/cards/e/Electrodominance.java diff --git a/Mage.Sets/src/mage/cards/e/Electrodominance.java b/Mage.Sets/src/mage/cards/e/Electrodominance.java new file mode 100644 index 00000000000..2d87841a40c --- /dev/null +++ b/Mage.Sets/src/mage/cards/e/Electrodominance.java @@ -0,0 +1,35 @@ +package mage.cards.e; + +import mage.abilities.dynamicvalue.common.ManacostVariableValue; +import mage.abilities.effects.common.DamageTargetEffect; +import mage.abilities.effects.common.cost.CastWithoutPayingManaCostEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.target.common.TargetAnyTarget; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class Electrodominance extends CardImpl { + + public Electrodominance(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{X}{R}{R}"); + + // Electrodominance deals X damage to any target. You may cast a card with converted mana cost X or less from your hand without paying its mana cost. + this.getSpellAbility().addEffect(new DamageTargetEffect(new ManacostVariableValue())); + this.getSpellAbility().addTarget(new TargetAnyTarget()); + this.getSpellAbility().addEffect(new CastWithoutPayingManaCostEffect(new ManacostVariableValue())); + } + + private Electrodominance(final Electrodominance card) { + super(card); + } + + @Override + public Electrodominance copy() { + return new Electrodominance(this); + } +} diff --git a/Mage.Sets/src/mage/sets/RavnicaAllegiance.java b/Mage.Sets/src/mage/sets/RavnicaAllegiance.java index 134733df049..01b7e974e41 100644 --- a/Mage.Sets/src/mage/sets/RavnicaAllegiance.java +++ b/Mage.Sets/src/mage/sets/RavnicaAllegiance.java @@ -47,6 +47,7 @@ public final class RavnicaAllegiance extends ExpansionSet { cards.add(new SetCardInfo("Depose // Deploy", 225, Rarity.UNCOMMON, mage.cards.d.DeposeDeploy.class)); cards.add(new SetCardInfo("Deputy of Detention", 165, Rarity.RARE, mage.cards.d.DeputyOfDetention.class)); cards.add(new SetCardInfo("Dovin, Grand Arbiter", 167, Rarity.MYTHIC, mage.cards.d.DovinGrandArbiter.class)); + cards.add(new SetCardInfo("Electrodominance", 99, Rarity.RARE, mage.cards.e.Electrodominance.class)); cards.add(new SetCardInfo("Emergency Powers", 169, Rarity.MYTHIC, mage.cards.e.EmergencyPowers.class)); cards.add(new SetCardInfo("End-Raze Forerunners", 124, Rarity.RARE, mage.cards.e.EndRazeForerunners.class)); cards.add(new SetCardInfo("Frenzied Arynx", 173, Rarity.COMMON, mage.cards.f.FrenziedArynx.class)); diff --git a/Mage/src/main/java/mage/abilities/effects/common/cost/CastWithoutPayingManaCostEffect.java b/Mage/src/main/java/mage/abilities/effects/common/cost/CastWithoutPayingManaCostEffect.java index 91bb40fba53..90e19e1c133 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/cost/CastWithoutPayingManaCostEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/cost/CastWithoutPayingManaCostEffect.java @@ -3,10 +3,13 @@ package mage.abilities.effects.common.cost; import mage.MageObjectReference; import mage.abilities.Ability; +import mage.abilities.dynamicvalue.DynamicValue; +import mage.abilities.dynamicvalue.common.StaticValue; import mage.abilities.effects.OneShotEffect; import mage.cards.Card; import mage.constants.ComparisonType; import mage.constants.Outcome; +import mage.filter.FilterCard; import mage.filter.common.FilterNonlandCard; import mage.filter.predicate.mageobject.ConvertedManaCostPredicate; import mage.game.Game; @@ -25,23 +28,23 @@ import org.apache.log4j.Logger; */ public class CastWithoutPayingManaCostEffect extends OneShotEffect { - private final FilterNonlandCard filter; - private final int manaCost; + private final DynamicValue manaCost; /** * @param maxCost Maximum converted mana cost for this effect to apply to */ public CastWithoutPayingManaCostEffect(int maxCost) { + this(new StaticValue(maxCost)); + } + + public CastWithoutPayingManaCostEffect(DynamicValue maxCost) { super(Outcome.PlayForFree); - filter = new FilterNonlandCard("card with converted mana cost " + maxCost + " or less from your hand"); - filter.add(new ConvertedManaCostPredicate(ComparisonType.FEWER_THAN, maxCost + 1)); this.manaCost = maxCost; this.staticText = "you may cast a card with converted mana cost " + maxCost + " or less from your hand without paying its mana cost"; } public CastWithoutPayingManaCostEffect(final CastWithoutPayingManaCostEffect effect) { super(effect); - this.filter = effect.filter.copy(); this.manaCost = effect.manaCost; } @@ -52,11 +55,14 @@ public class CastWithoutPayingManaCostEffect extends OneShotEffect { if (controller == null) { return false; } + int cmc = manaCost.calculate(game, source, this); + FilterCard filter = new FilterNonlandCard("card with converted mana cost " + cmc + " or less from your hand"); + filter.add(new ConvertedManaCostPredicate(ComparisonType.FEWER_THAN, cmc + 1)); Target target = new TargetCardInHand(filter); if (target.canChoose(source.getSourceId(), controller.getId(), game) - && controller.chooseUse(outcome, "Cast a card with converted mana cost " + manaCost - + " or less from your hand without paying its mana cost?", source, game)) { + && controller.chooseUse(outcome, "Cast a card with converted mana cost " + cmc + + " or less from your hand without paying its mana cost?", source, game)) { Card cardToCast = null; boolean cancel = false; while (controller.canRespond() && !cancel) {