diff --git a/Mage.Sets/src/mage/cards/p/PalisadeGiant.java b/Mage.Sets/src/mage/cards/p/PalisadeGiant.java index 0ceed13bfb4..f1c808fbe9b 100644 --- a/Mage.Sets/src/mage/cards/p/PalisadeGiant.java +++ b/Mage.Sets/src/mage/cards/p/PalisadeGiant.java @@ -65,7 +65,7 @@ class PalisadeGiantReplacementEffect extends ReplacementEffectImpl { PalisadeGiantReplacementEffect() { super(Duration.WhileOnBattlefield, Outcome.RedirectDamage); - staticText = "All damage that would be dealt to you or another permanent you control is dealt to Palisade Giant instead"; + staticText = "All damage that would be dealt to you or another permanent you control is dealt to {this} instead"; } PalisadeGiantReplacementEffect(final PalisadeGiantReplacementEffect effect) { diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/MadnessTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/MadnessTest.java index 26871817688..bb4c94e3832 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/MadnessTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/MadnessTest.java @@ -177,15 +177,15 @@ public class MadnessTest extends CardTestPlayerBase { addCard(Zone.HAND, playerA, "Forest"); castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Falkenrath Gorger"); + setChoice(playerA, "Yes"); // Discard a card and put a +1/+1 counter on that creature, it gains haste until end of turn, and it becomes a Vampire in addition to its other types? - setChoice(playerA, "Asylum Visitor"); - setChoice(playerA, "Asylum Visitor: Madness {1}{B}"); // choose replacement effect (TODO: 2 same madness effetcs: one from Asylum Visitor, one from Falkenrath -- is that ok?!) - // - setChoice(playerA, "Yes"); // use madness triggered ability - setChoice(playerA, "Yes"); // use madness cast + setChoice(playerA, "Asylum Visitor"); // Card to discard from Falkenrath entering by Olivia effect + setChoice(playerA, "Asylum Visito"); // Madness {1}{B} + setChoice(playerA, "Yes"); // use madness triggered ability + setChoice(playerA, "Yes"); // use madness cast setChoice(playerA, "Yes"); // Discard a card and put a +1/+1 counter on that creature, it gains haste until end of turn, and it becomes a Vampire in addition to its other types? setChoice(playerA, "Forest"); - + setStrictChooseMode(true); setStopAt(1, PhaseStep.BEGIN_COMBAT); execute(); diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/RiotTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/RiotTest.java index 310de3055ef..7315ce32c68 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/RiotTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/RiotTest.java @@ -101,7 +101,7 @@ public class RiotTest extends CardTestPlayerBase { addCard(Zone.HAND, playerA, "Silvercoat Lion", 1); // Creature {1}{W} 2/2 castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Silvercoat Lion"); - setChoice(playerA, "Rhythm of the Wild: Nontoken creatu"); // choose replacement effect + setChoice(playerA, "Rhythm of the Wild"); // choose replacement effect setChoice(playerA, "Yes"); // yes - counter setChoice(playerA, "Yes"); // yes - counter diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/replacement/redirect/PalisadeGiantTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/replacement/redirect/PalisadeGiantTest.java new file mode 100644 index 00000000000..63410e6417d --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/cards/replacement/redirect/PalisadeGiantTest.java @@ -0,0 +1,60 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package org.mage.test.cards.replacement.redirect; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import mage.game.permanent.Permanent; +import org.junit.Assert; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX2 + */ +public class PalisadeGiantTest extends CardTestPlayerBase { + + /** + * when you have two Palisade Giants in play and your opponent deals you + * damage, the damage is applied to both of them rather than allowing you to + * choose which replacement effect applies (as it should). I experienced + * this multiple times in games vs the A.I. + */ + @Test + public void testRedirectDamage() { + + // All damage that would be dealt to you or another permanent you control is dealt to Palisade Giant instead. + addCard(Zone.BATTLEFIELD, playerA, "Palisade Giant", 2); // Creature 2/7 + + addCard(Zone.HAND, playerB, "Lightning Bolt"); // Instant {R} + addCard(Zone.BATTLEFIELD, playerB, "Mountain"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerB, "Lightning Bolt", playerA); + + setChoice(playerA, "Palisade Giant"); + + setStrictChooseMode(true); + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + assertAllCommandsUsed(); + + assertGraveyardCount(playerB, "Lightning Bolt", 1); + + assertLife(playerA, 20); + assertLife(playerB, 20); + + int damage = 0; + for (Permanent permanent : currentGame.getBattlefield().getAllActivePermanents(playerA.getId())) { + if (permanent.getName().equals("Palisade Giant")) { + damage += permanent.getDamage(); + } + } + Assert.assertEquals("Only 3 damage in sum should be dealt to the Palisade Giants", 3, damage); + + } + +} diff --git a/Mage/src/main/java/mage/abilities/effects/ContinuousEffects.java b/Mage/src/main/java/mage/abilities/effects/ContinuousEffects.java index f32f87e537b..bf7d2beed13 100644 --- a/Mage/src/main/java/mage/abilities/effects/ContinuousEffects.java +++ b/Mage/src/main/java/mage/abilities/effects/ContinuousEffects.java @@ -1349,7 +1349,7 @@ public class ContinuousEffects implements Serializable { for (Ability ability : entry.getValue()) { MageObject object = game.getObject(ability.getSourceId()); if (object != null) { - texts.put(ability.getId().toString() + '_' + entry.getKey().getId().toString(), object.getName() + ": " + ability.getRule(object.getName())); + texts.put(ability.getId().toString() + '_' + entry.getKey().getId().toString(), object.getIdName() + ": " + ability.getRule(object.getName())); } else { texts.put(ability.getId().toString() + '_' + entry.getKey().getId().toString(), entry.getKey().getText(null)); }