diff --git a/Mage.Sets/src/mage/sets/bornofthegods/PerplexingChimera.java b/Mage.Sets/src/mage/sets/bornofthegods/PerplexingChimera.java index a249d46d935..848dcaee76a 100644 --- a/Mage.Sets/src/mage/sets/bornofthegods/PerplexingChimera.java +++ b/Mage.Sets/src/mage/sets/bornofthegods/PerplexingChimera.java @@ -53,28 +53,28 @@ import mage.target.targetpointer.FixedTarget; /** * - * You may exchange control of Perplexing Chimera and any spell cast - * by an opponent, not just one with targets. + * You may exchange control of Perplexing Chimera and any spell cast by an + * opponent, not just one with targets. * - * You make the decision whether to exchange control of Perplexing Chimera - * and the spell as the triggered ability resolves. + * You make the decision whether to exchange control of Perplexing Chimera and + * the spell as the triggered ability resolves. * * If Perplexing Chimera leaves the battlefield or the spell leaves the stack * before the triggered ability resolves, you can't make the exchange. * - * Neither Perplexing Chimera nor the spell changes zones. Only control of - * them is exchanged. + * Neither Perplexing Chimera nor the spell changes zones. Only control of them + * is exchanged. * - * After the ability resolves, you control the spell. Any instance of "you" - * in that spell's text now refers to you, "an opponent" refers to one of - * your opponents, and so on. The change of control happens before new targets - * are chosen, so any targeting restrictions such as "target opponent" or - * "target creature you control" are now made in reference to you, not the - * spell's original controller. You may change those targets to be legal in - * reference to you, or, if those are the spell's only targets, the spell will - * be countered on resolution for having illegal targets. When the spell - * resolves, any illegal targets are unaffected by it and you make all decisions - * the spell's effect calls for. + * After the ability resolves, you control the spell. Any instance of "you" in + * that spell's text now refers to you, "an opponent" refers to one of your + * opponents, and so on. The change of control happens before new targets are + * chosen, so any targeting restrictions such as "target opponent" or "target + * creature you control" are now made in reference to you, not the spell's + * original controller. You may change those targets to be legal in reference to + * you, or, if those are the spell's only targets, the spell will be countered + * on resolution for having illegal targets. When the spell resolves, any + * illegal targets are unaffected by it and you make all decisions the spell's + * effect calls for. * * You may change any of the spell's targets. If you change a target, you must * choose a legal target for the spell. If you can't, you must leave the target @@ -139,7 +139,7 @@ class PerplexingChimeraTriggeredAbility extends TriggeredAbilityImpl { @Override public boolean checkTrigger(GameEvent event, Game game) { if (game.getOpponents(controllerId).contains(event.getPlayerId())) { - for (Effect effect: this.getEffects()) { + for (Effect effect : this.getEffects()) { effect.setTargetPointer(new FixedTarget(event.getTargetId())); } return true; @@ -184,7 +184,7 @@ class PerplexingChimeraControlExchangeEffect extends OneShotEffect { spell.setControllerId(controller.getId()); // and chooses new targets spell.chooseNewTargets(game, controller.getId()); - game.informPlayers(new StringBuilder(controller.getLogName()).append(" got control of ").append(spell.getName()).append(" spell.").toString()); + game.informPlayers(controller.getLogName() + " got control of " + spell.getName() + " spell."); // and spell controller get control of Perplexing Chimera if (spellCaster != null) { ContinuousEffect effect = new PerplexingChimeraControlEffect(); @@ -218,8 +218,10 @@ class PerplexingChimeraControlEffect extends ContinuousEffectImpl { Permanent permanent = game.getPermanent(source.getSourceId()); if (permanent != null) { return permanent.changeControllerId(this.getTargetPointer().getFirst(game, source), game); + } else { + discard(); // if card once left the battlefield the effect can be discarded } - return false; + return true; } } diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/oneshot/exile/RoonOfTheHiddenRealmTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/oneshot/exile/RoonOfTheHiddenRealmTest.java new file mode 100644 index 00000000000..8b17d0396f3 --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/oneshot/exile/RoonOfTheHiddenRealmTest.java @@ -0,0 +1,75 @@ +/* + * 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.abilities.oneshot.exile; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX2 + */ +public class RoonOfTheHiddenRealmTest extends CardTestPlayerBase { + + /** + * Roon of the Hidden Realm is returning cards to their controler's control + * instead of the owner's control at the end of the turn. I used his ability + * on a Perplexing Chimera I gave my opponent and in the end of the turn it + * returned to the battlefield in his control. + */ + @Test + public void testReturnToBattlefieldForOwner() { + addCard(Zone.BATTLEFIELD, playerA, "Plains", 2); + // Vigilance, Trample + // {2}, {T}: Exile another target creature. Return that card to the battlefield under its owner's control at the beginning of the next end step. + addCard(Zone.BATTLEFIELD, playerA, "Roon of the Hidden Realm"); + + // Whenever an opponent casts a spell, you may exchange control of Perplexing Chimera and that spell. If you do, you may choose new targets for the spell. + addCard(Zone.BATTLEFIELD, playerA, "Perplexing Chimera"); + + addCard(Zone.HAND, playerB, "Silvercoat Lion", 1); + addCard(Zone.BATTLEFIELD, playerB, "Plains", 2); + + castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Silvercoat Lion"); + setChoice(playerA, "Yes"); + + activateAbility(2, PhaseStep.POSTCOMBAT_MAIN, playerA, "{2}", "Perplexing Chimera"); + + setStopAt(2, PhaseStep.END_TURN); + execute(); + + assertTapped("Roon of the Hidden Realm", true); + assertPermanentCount(playerA, "Roon of the Hidden Realm", 1); + assertPermanentCount(playerA, "Silvercoat Lion", 1); + assertPermanentCount(playerB, "Perplexing Chimera", 0); + assertPermanentCount(playerA, "Perplexing Chimera", 1); + + } +}