diff --git a/Mage.Sets/src/mage/cards/d/DreamChisel.java b/Mage.Sets/src/mage/cards/d/DreamChisel.java index 86db355d011..1c384389294 100644 --- a/Mage.Sets/src/mage/cards/d/DreamChisel.java +++ b/Mage.Sets/src/mage/cards/d/DreamChisel.java @@ -1,7 +1,7 @@ package mage.cards.d; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.effects.common.cost.MorphSpellsCostReductionControllerEffect; +import mage.abilities.effects.common.cost.FaceDownSpellsCostReductionControllerEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -17,7 +17,7 @@ public final class DreamChisel extends CardImpl { super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{2}"); // Face-down creature spells you cast cost {1} less to cast. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new MorphSpellsCostReductionControllerEffect(1))); + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new FaceDownSpellsCostReductionControllerEffect(1))); } private DreamChisel(final DreamChisel card) { @@ -28,4 +28,4 @@ public final class DreamChisel extends CardImpl { public DreamChisel copy() { return new DreamChisel(this); } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/k/KadenaSlinkingSorcerer.java b/Mage.Sets/src/mage/cards/k/KadenaSlinkingSorcerer.java index 72c80abcbf2..21cf949e8a3 100644 --- a/Mage.Sets/src/mage/cards/k/KadenaSlinkingSorcerer.java +++ b/Mage.Sets/src/mage/cards/k/KadenaSlinkingSorcerer.java @@ -4,7 +4,7 @@ import mage.MageInt; import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.effects.common.DrawCardSourceControllerEffect; -import mage.abilities.effects.common.cost.MorphSpellsCostReductionControllerEffect; +import mage.abilities.effects.common.cost.FaceDownSpellsCostReductionControllerEffect; import mage.cards.Card; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -50,7 +50,7 @@ public final class KadenaSlinkingSorcerer extends CardImpl { // The first face-down creature spell you cast each turn costs {3} less to cast. this.addAbility(new SimpleStaticAbility( - new MorphSpellsCostReductionControllerEffect(filterFirstFaceDownSpell, 3) + new FaceDownSpellsCostReductionControllerEffect(filterFirstFaceDownSpell, 3) .setText("The first face-down creature spell you cast each turn costs {3} less to cast.") ), new KadenaSlinkingSorcererWatcher()); diff --git a/Mage.Sets/src/mage/cards/o/ObscuringAether.java b/Mage.Sets/src/mage/cards/o/ObscuringAether.java index 294312f385b..1cf0f4c7792 100644 --- a/Mage.Sets/src/mage/cards/o/ObscuringAether.java +++ b/Mage.Sets/src/mage/cards/o/ObscuringAether.java @@ -5,13 +5,12 @@ import mage.abilities.common.SimpleStaticAbility; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.Effect; import mage.abilities.effects.common.continuous.BecomesFaceDownCreatureEffect; -import mage.abilities.effects.common.cost.MorphSpellsCostReductionControllerEffect; +import mage.abilities.effects.common.cost.FaceDownSpellsCostReductionControllerEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.Zone; -import mage.filter.common.FilterCreatureCard; import java.util.UUID; @@ -24,7 +23,7 @@ public final class ObscuringAether extends CardImpl { super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{G}"); // Face-down creature spells you cast cost {1} less to cast. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new MorphSpellsCostReductionControllerEffect(1))); + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new FaceDownSpellsCostReductionControllerEffect(1))); // {1}{G}: Turn Obscuring Aether face down. Effect effect = new BecomesFaceDownCreatureEffect(Duration.Custom, BecomesFaceDownCreatureEffect.FaceDownType.MANUAL); diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/DisguiseTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/DisguiseTest.java index 5befc0cfd8e..9dc6a6efee3 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/DisguiseTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/DisguiseTest.java @@ -173,4 +173,28 @@ public class DisguiseTest extends CardTestPlayerBase { Assert.assertFalse(info, foundAbility != null); } } + + @Test + public void testCostReduction() { + String chisel = "Dream Chisel"; // Face-down creature spells you cast cost {1} less to cast. + String nightdrinker = "Nightdrinker Moroii"; + /* Nightdrinker Moroii {3}{B} Creature — Vampire + * Flying + * When Nightdrinker Moroii enters the battlefield, you lose 3 life. + * Disguise {B}{B} + */ + addCard(Zone.BATTLEFIELD, playerA, chisel); + addCard(Zone.HAND, playerA, nightdrinker); + addCard(Zone.BATTLEFIELD, playerA, "Wastes", 2); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, nightdrinker + " using Disguise"); + + setStrictChooseMode(true); + setStopAt(1, PhaseStep.END_TURN); + execute(); + + assertPowerToughness(playerA, EmptyNames.FACE_DOWN_CREATURE.toString(), 2, 2); + assertLife(playerA, 20); + } + } diff --git a/Mage/src/main/java/mage/abilities/effects/common/cost/FaceDownSpellsCostReductionControllerEffect.java b/Mage/src/main/java/mage/abilities/effects/common/cost/FaceDownSpellsCostReductionControllerEffect.java new file mode 100644 index 00000000000..a8961615b36 --- /dev/null +++ b/Mage/src/main/java/mage/abilities/effects/common/cost/FaceDownSpellsCostReductionControllerEffect.java @@ -0,0 +1,46 @@ +package mage.abilities.effects.common.cost; + +import mage.abilities.Ability; +import mage.abilities.SpellAbility; +import mage.filter.FilterCard; +import mage.filter.common.FilterCreatureCard; +import mage.game.Game; + +public class FaceDownSpellsCostReductionControllerEffect extends SpellsCostReductionControllerEffect{ + + private static final FilterCreatureCard standardFilter = new FilterCreatureCard("Face-down creature spells"); + + /** + * Face-down creature spells you cast cost + * @param amount less to cast + */ + public FaceDownSpellsCostReductionControllerEffect(int amount) { + super(standardFilter, amount); + } + + /** + * Face-down spells you cast cost + * @param filter with matching characteristics + * @param amount less to cast + */ + public FaceDownSpellsCostReductionControllerEffect(FilterCard filter, int amount) { + super(filter, amount); + } + + protected FaceDownSpellsCostReductionControllerEffect(final FaceDownSpellsCostReductionControllerEffect effect) { + super(effect); + } + + @Override + public FaceDownSpellsCostReductionControllerEffect copy() { + return new FaceDownSpellsCostReductionControllerEffect(this); + } + + @Override + public boolean applies(Ability abilityToModify, Ability source, Game game) { + if (abilityToModify instanceof SpellAbility && ((SpellAbility) abilityToModify).getSpellAbilityCastMode().isFaceDown()) { + return super.applies(abilityToModify, source, game); + } + return false; + } +} diff --git a/Mage/src/main/java/mage/abilities/effects/common/cost/MorphSpellsCostReductionControllerEffect.java b/Mage/src/main/java/mage/abilities/effects/common/cost/MorphSpellsCostReductionControllerEffect.java deleted file mode 100644 index ffe11991641..00000000000 --- a/Mage/src/main/java/mage/abilities/effects/common/cost/MorphSpellsCostReductionControllerEffect.java +++ /dev/null @@ -1,33 +0,0 @@ -package mage.abilities.effects.common.cost; - -import mage.abilities.Ability; -import mage.abilities.keyword.MorphAbility; -import mage.filter.FilterCard; -import mage.filter.common.FilterCreatureCard; -import mage.game.Game; - -public class MorphSpellsCostReductionControllerEffect extends SpellsCostReductionControllerEffect{ - private static final FilterCreatureCard standardFilter = new FilterCreatureCard("Face-down creature spells"); - - public MorphSpellsCostReductionControllerEffect(int amount) { - super(standardFilter, amount); - } - public MorphSpellsCostReductionControllerEffect(FilterCard filter, int amount) { - super(filter, amount); - } - protected MorphSpellsCostReductionControllerEffect(final MorphSpellsCostReductionControllerEffect effect) { - super(effect); - } - @Override - public MorphSpellsCostReductionControllerEffect copy() { - return new MorphSpellsCostReductionControllerEffect(this); - } - - @Override - public boolean applies(Ability abilityToModify, Ability source, Game game) { - if (abilityToModify instanceof MorphAbility) { - return super.applies(abilityToModify, source, game); - } - return false; - } -} \ No newline at end of file