From 6e4b63dfd9c9493f585f4b7b1059415fa99b26f5 Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Thu, 23 Jul 2015 23:38:05 +0200 Subject: [PATCH] * Heartstone - Fixed that it can also reduce mana costs of abilities that include only 1 colorless mana and some colored mana. --- .../mage/sets/morningtide/SigilTracer.java | 7 +- .../src/mage/sets/stronghold/Heartstone.java | 48 ++++++------ .../cost/modification/HeartstoneTest.java | 73 +++++++++++++++++++ 3 files changed, 100 insertions(+), 28 deletions(-) create mode 100644 Mage.Tests/src/test/java/org/mage/test/cards/cost/modification/HeartstoneTest.java diff --git a/Mage.Sets/src/mage/sets/morningtide/SigilTracer.java b/Mage.Sets/src/mage/sets/morningtide/SigilTracer.java index b5e5499dfa..f97d3fdc29 100644 --- a/Mage.Sets/src/mage/sets/morningtide/SigilTracer.java +++ b/Mage.Sets/src/mage/sets/morningtide/SigilTracer.java @@ -28,9 +28,6 @@ package mage.sets.morningtide; import java.util.UUID; - -import mage.constants.CardType; -import mage.constants.Rarity; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; @@ -38,6 +35,8 @@ import mage.abilities.costs.common.TapTargetCost; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.common.CopyTargetSpellEffect; import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; import mage.constants.Zone; import mage.filter.FilterSpell; import mage.filter.common.FilterControlledCreaturePermanent; @@ -72,6 +71,8 @@ public class SigilTracer extends CardImpl { this.power = new MageInt(2); this.toughness = new MageInt(2); + + // {1}{U}, Tap two untapped Wizards you control: Copy target instant or sorcery spell. You may choose new targets for the copy. Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CopyTargetSpellEffect(), new ManaCostsImpl("{1}{U}")); ability.addTarget(new TargetSpell(filterInstorSorc)); ability.addCost(new TapTargetCost(new TargetControlledCreaturePermanent(2, 2, filter, false))); diff --git a/Mage.Sets/src/mage/sets/stronghold/Heartstone.java b/Mage.Sets/src/mage/sets/stronghold/Heartstone.java index e30efda2bc..4b4af5e2c9 100644 --- a/Mage.Sets/src/mage/sets/stronghold/Heartstone.java +++ b/Mage.Sets/src/mage/sets/stronghold/Heartstone.java @@ -25,28 +25,26 @@ * authors and should not be interpreted as representing official policies, either expressed * or implied, of BetaSteward_at_googlemail.com. */ - package mage.sets.stronghold; +package mage.sets.stronghold; - import java.util.LinkedHashSet; - import java.util.Set; - import java.util.UUID; - import mage.Mana; - import mage.abilities.Ability; - import mage.abilities.common.SimpleStaticAbility; - import mage.abilities.effects.common.cost.CostModificationEffectImpl; - import mage.cards.CardImpl; - import mage.constants.AbilityType; - import mage.constants.CardType; - import mage.constants.CostModificationType; - import mage.constants.Duration; - import mage.constants.Outcome; - import mage.constants.Rarity; - import mage.constants.Zone; - import mage.filter.common.FilterCreaturePermanent; - import mage.game.Game; - import mage.game.permanent.Permanent; - import mage.players.Player; - import mage.util.CardUtil; +import java.util.UUID; +import mage.Mana; +import mage.abilities.Ability; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.common.cost.CostModificationEffectImpl; +import mage.cards.CardImpl; +import mage.constants.AbilityType; +import mage.constants.CardType; +import mage.constants.CostModificationType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterCreaturePermanent; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.players.Player; +import mage.util.CardUtil; /** * @@ -89,14 +87,14 @@ class HeartstoneEffect extends CostModificationEffectImpl { @Override public boolean apply(Game game, Ability source, Ability abilityToModify) { Player controller = game.getPlayer(abilityToModify.getControllerId()); - if (controller != null){ + if (controller != null) { Mana mana = abilityToModify.getManaCostsToPay().getMana(); - if (mana.getColorless() > 1){ - CardUtil.reduceCost(abilityToModify, 1); + if (mana.count() > 1 && mana.getColorless() > 0) { + CardUtil.reduceCost(abilityToModify, 1); } return true; } - return false; + return false; } @Override diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/cost/modification/HeartstoneTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/cost/modification/HeartstoneTest.java new file mode 100644 index 0000000000..60253c99c6 --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/cards/cost/modification/HeartstoneTest.java @@ -0,0 +1,73 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package org.mage.test.cards.cost.modification; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX2 + */ +public class HeartstoneTest extends CardTestPlayerBase { + + /** + * Heartstone is not reducing the cost of Sigil Tracer 's activated ability + */ + @Test + public void testSigilTracer() { + addCard(Zone.BATTLEFIELD, playerA, "Island", 2); + // {1}{U}, Tap two untapped Wizards you control: Copy target instant or sorcery spell. You may choose new targets for the copy. + addCard(Zone.BATTLEFIELD, playerA, "Sigil Tracer"); + // Activated abilities of creatures cost {1} less to activate. This effect can't reduce the amount of mana an ability costs to activate to less than one mana. + addCard(Zone.BATTLEFIELD, playerA, "Heartstone"); + addCard(Zone.BATTLEFIELD, playerA, "Fugitive Wizard"); + + addCard(Zone.BATTLEFIELD, playerB, "Mountain"); + addCard(Zone.HAND, playerB, "Lightning Bolt"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerB, "Lightning Bolt", playerA); + activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{1}{U},Tap two untapped Wizards you control: Copy target instant or sorcery spell. You may choose new targets for the copy.", "Lightning Bolt"); + setChoice(playerA, "Yes"); + addTarget(playerA, playerB); + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertGraveyardCount(playerB, "Lightning Bolt", 1); + + assertTapped("Fugitive Wizard", true); + assertLife(playerA, 17); + assertLife(playerB, 17); + + assertTappedCount("Island", true, 1); + + } + +}