mirror of
https://github.com/magefree/mage.git
synced 2025-12-22 11:32:00 -08:00
Merge remote-tracking branch 'magefree/master'
This commit is contained in:
commit
05d88b46dd
4 changed files with 69 additions and 12 deletions
|
|
@ -88,9 +88,9 @@ class PermeatingMassEffect extends OneShotEffect {
|
||||||
public boolean apply(Game game, Ability ability) {
|
public boolean apply(Game game, Ability ability) {
|
||||||
Permanent copyTo = game.getPermanentOrLKIBattlefield(getTargetPointer().getFirst(game, ability));
|
Permanent copyTo = game.getPermanentOrLKIBattlefield(getTargetPointer().getFirst(game, ability));
|
||||||
if (copyTo != null) {
|
if (copyTo != null) {
|
||||||
Permanent copyFrom = game.getPermanent(ability.getSourceId());
|
Permanent copyFrom = (Permanent) ability.getSourceObject(game);
|
||||||
if (copyFrom != null) {
|
if (copyFrom != null) {
|
||||||
game.copyPermanent(Duration.WhileOnBattlefield, copyFrom, copyTo.getId(), ability, new EmptyApplyToPermanent());
|
game.copyPermanent(Duration.Custom, copyFrom, copyTo.getId(), ability, new EmptyApplyToPermanent());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
|
|
||||||
|
|
@ -108,7 +108,7 @@ class TreeOfPerditionEffect extends OneShotEffect {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
opponent.setLife(amount, game);
|
opponent.setLife(amount, game);
|
||||||
game.addEffect(new SetPowerToughnessSourceEffect(Integer.MIN_VALUE, life, Duration.WhileOnBattlefield, SubLayer.SetPT_7b), source);
|
game.addEffect(new SetPowerToughnessSourceEffect(Integer.MIN_VALUE, life, Duration.Custom, SubLayer.SetPT_7b), source);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,58 @@
|
||||||
|
/*
|
||||||
|
* 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;
|
||||||
|
|
||||||
|
import mage.constants.PhaseStep;
|
||||||
|
import mage.constants.Zone;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.mage.test.serverside.base.CardTestPlayerBase;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author escplan9 (Derek Monturo - dmontur1 at gmail dot com)
|
||||||
|
*/
|
||||||
|
public class DiscardEffectsTest extends CardTestPlayerBase {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testOpponentDiscardsLoxodonSmiter() {
|
||||||
|
|
||||||
|
addCard(Zone.HAND, playerA, "Thoughtseize"); // {B} target player, discard non-land card, lose two life.
|
||||||
|
addCard(Zone.BATTLEFIELD, playerA, "Swamp");
|
||||||
|
// Loxodon Smiter can't be countered.
|
||||||
|
// If a spell or ability an opponent controls causes you to discard Loxodon Smiter, put it onto the battlefield instead of putting it into your graveyard.
|
||||||
|
addCard(Zone.HAND, playerB, "Loxodon Smiter");
|
||||||
|
|
||||||
|
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Thoughtseize");
|
||||||
|
addTarget(playerA, playerB);
|
||||||
|
setChoice(playerA, "Loxodon Smiter");
|
||||||
|
setStopAt(1, PhaseStep.BEGIN_COMBAT);
|
||||||
|
execute();
|
||||||
|
|
||||||
|
assertLife(playerA, 18);
|
||||||
|
assertGraveyardCount(playerA, "Thoughtseize", 1);
|
||||||
|
assertGraveyardCount(playerB, "Loxodon Smiter", 0);
|
||||||
|
assertPermanentCount(playerB, "Loxodon Smiter", 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testOwnerDiscardsOwnLoxodonSmiter() {
|
||||||
|
|
||||||
|
// Loxodon Smiter can't be countered.
|
||||||
|
// If a spell or ability an opponent controls causes you to discard Loxodon Smiter, put it onto the battlefield instead of putting it into your graveyard.
|
||||||
|
addCard(Zone.HAND, playerA, "Loxodon Smiter");
|
||||||
|
addCard(Zone.HAND, playerA, "Sift"); // {3}{U} Sorcery - draw 3 discard 1
|
||||||
|
addCard(Zone.BATTLEFIELD, playerA, "Island", 4);
|
||||||
|
|
||||||
|
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Sift");
|
||||||
|
setChoice(playerA, "Loxodon Smiter");
|
||||||
|
setStopAt(1, PhaseStep.BEGIN_COMBAT);
|
||||||
|
execute();
|
||||||
|
|
||||||
|
assertGraveyardCount(playerA, "Sift", 1);
|
||||||
|
assertGraveyardCount(playerA, "Loxodon Smiter", 1);
|
||||||
|
assertPermanentCount(playerA, "Loxodon Smiter", 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -7,7 +7,6 @@ package org.mage.test.cards.single.emn;
|
||||||
|
|
||||||
import mage.constants.PhaseStep;
|
import mage.constants.PhaseStep;
|
||||||
import mage.constants.Zone;
|
import mage.constants.Zone;
|
||||||
import mage.game.permanent.Permanent;
|
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.mage.test.serverside.base.CardTestPlayerBase;
|
import org.mage.test.serverside.base.CardTestPlayerBase;
|
||||||
|
|
||||||
|
|
@ -16,24 +15,24 @@ import org.mage.test.serverside.base.CardTestPlayerBase;
|
||||||
* @author escplan9 (Derek Monturo - dmontur1 at gmail dot com)
|
* @author escplan9 (Derek Monturo - dmontur1 at gmail dot com)
|
||||||
*/
|
*/
|
||||||
public class PermeatingMassTest extends CardTestPlayerBase {
|
public class PermeatingMassTest extends CardTestPlayerBase {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testWhenDiesInCombatMakesCopyStill() {
|
public void testWhenDiesInCombatMakesCopyStill() {
|
||||||
|
|
||||||
addCard(Zone.BATTLEFIELD, playerA, "Hill Giant"); // 3/3
|
addCard(Zone.BATTLEFIELD, playerA, "Hill Giant"); // 3/3
|
||||||
|
|
||||||
// Whenever Permeating Mass deals combat damage to a creature, that creature becomes a copy of Permeating Mass.
|
// Whenever Permeating Mass deals combat damage to a creature, that creature becomes a copy of Permeating Mass.
|
||||||
addCard(Zone.BATTLEFIELD, playerB, "Permeating Mass"); // 1/3
|
addCard(Zone.BATTLEFIELD, playerB, "Permeating Mass"); // 1/3
|
||||||
|
|
||||||
attack(1, playerA, "Hill Giant");
|
attack(1, playerA, "Hill Giant");
|
||||||
block(1, playerB, "Permeating Mass", "Hill Giant");
|
block(1, playerB, "Permeating Mass", "Hill Giant");
|
||||||
|
|
||||||
setStopAt(1, PhaseStep.END_COMBAT);
|
setStopAt(1, PhaseStep.END_COMBAT);
|
||||||
execute();
|
execute();
|
||||||
|
|
||||||
assertLife(playerB, 20);
|
assertLife(playerB, 20);
|
||||||
assertGraveyardCount(playerB, "Permeating Mass", 1);
|
assertGraveyardCount(playerB, "Permeating Mass", 1);
|
||||||
Permanent hilly = getPermanent("Hill Giant", playerA);
|
assertPermanentCount(playerA, "Permeating Mass", 1);
|
||||||
assertPowerToughness(playerA, "Hill Giant", 1, 3);
|
assertPowerToughness(playerA, "Permeating Mass", 1, 3);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue