From aed4b5cdfa14383e85578a2342cc3b4dfa0cf8ab Mon Sep 17 00:00:00 2001 From: swordshine Date: Sun, 8 Mar 2015 06:35:08 +0000 Subject: [PATCH] =?UTF-8?q?-=20ORI=EF=BC=9AAdded=20Liliana,=20Heretical=20?= =?UTF-8?q?Healer?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../forge/ai/simulation/GameSimulator.java | 1 - .../ability/effects/ChangeZoneEffect.java | 3 ++ .../game/ability/effects/SetStateEffect.java | 39 +------------------ .../src/main/java/forge/game/card/Card.java | 35 +++++++++++++++++ .../l/loyal_cathar_unhallowed_cathar.txt | 3 +- forge-gui/res/lists/TypeLists.txt | 1 + 6 files changed, 41 insertions(+), 41 deletions(-) diff --git a/forge-ai/src/main/java/forge/ai/simulation/GameSimulator.java b/forge-ai/src/main/java/forge/ai/simulation/GameSimulator.java index 45d76bc7a5d..480c7d3a376 100644 --- a/forge-ai/src/main/java/forge/ai/simulation/GameSimulator.java +++ b/forge-ai/src/main/java/forge/ai/simulation/GameSimulator.java @@ -12,7 +12,6 @@ import forge.ai.PlayerControllerAi; import forge.ai.simulation.GameStateEvaluator.Score; import forge.game.Game; import forge.game.GameObject; -import forge.game.ability.AbilityUtils; import forge.game.card.Card; import forge.game.card.CardCollection; import forge.game.player.Player; diff --git a/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java index 0a2c25b7eea..abb9b43fdae 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java @@ -442,6 +442,9 @@ public class ChangeZoneEffect extends SpellAbilityEffect { if (sa.hasParam("Tapped") || sa.hasParam("Ninjutsu")) { tgtC.setTapped(true); } + if (sa.hasParam("Transformed") && tgtC.isDoubleFaced()) { + tgtC.changeCardState("Transform", null); + } if (sa.hasParam("WithCounters")) { String[] parse = sa.getParam("WithCounters").split("_"); tgtC.addCounter(CounterType.getType(parse[0]), Integer.parseInt(parse[1]), true); diff --git a/forge-game/src/main/java/forge/game/ability/effects/SetStateEffect.java b/forge-game/src/main/java/forge/game/ability/effects/SetStateEffect.java index 769a574fed8..4773be8dd12 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/SetStateEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/SetStateEffect.java @@ -1,6 +1,5 @@ package forge.game.ability.effects; -import forge.card.CardStateName; import forge.game.Game; import forge.game.ability.SpellAbilityEffect; import forge.game.card.Card; @@ -50,7 +49,7 @@ public class SetStateEffect extends SpellAbilityEffect { continue; } - boolean hasTransformed = changeCardState(tgt, sa.getParam("Mode"), sa.getParam("NewState")); + boolean hasTransformed = tgt.changeCardState(sa.getParam("Mode"), sa.getParam("NewState")); if ( hasTransformed ) { game.fireEvent(new GameEventCardStatsChanged(tgt)); } @@ -59,40 +58,4 @@ public class SetStateEffect extends SpellAbilityEffect { } } } - - private static boolean changeCardState(final Card tgt, final String mode, final String customState) { - if (mode == null) - return tgt.changeToState(CardStateName.smartValueOf(customState)); - - // flip and face-down don't overlap. That is there is no chance to turn face down a flipped permanent - // and then any effect have it turn upface again and demand its former flip state to be restored - // Proof: Morph cards never have ability that makes them flip, Ixidron does not suppose cards to be turned face up again, - // Illusionary Mask affects cards in hand. - CardStateName oldState = tgt.getCurrentStateName(); - if (mode.equals("Transform") && tgt.isDoubleFaced()) { - if (tgt.hasKeyword("CARDNAME can't transform")) { - return false; - } - CardStateName destState = oldState == CardStateName.Transformed ? CardStateName.Original : CardStateName.Transformed; - return tgt.changeToState(destState); - - } else if (mode.equals("Flip") && tgt.isFlipCard()) { - CardStateName destState = oldState == CardStateName.Flipped ? CardStateName.Original : CardStateName.Flipped; - return tgt.changeToState(destState); - } else if (mode.equals("TurnFace")) { - if (oldState == CardStateName.Original) { - // Reset cloned state if Vesuvan Shapeshifter - if (tgt.isCloned() && tgt.getState(CardStateName.Cloner).getName().equals("Vesuvan Shapeshifter")) { - tgt.switchStates(CardStateName.Cloner, CardStateName.Original, false); - tgt.setState(CardStateName.Original, false); - tgt.clearStates(CardStateName.Cloner, false); - } - return tgt.turnFaceDown(); - } else if (oldState == CardStateName.FaceDown) { - return tgt.turnFaceUp(); - } - } - return false; - } - } diff --git a/forge-game/src/main/java/forge/game/card/Card.java b/forge-game/src/main/java/forge/game/card/Card.java index b910544d6b4..1c5cb4383db 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -410,6 +410,41 @@ public class Card extends GameEntity implements Comparable { preFaceDownState = preCharacteristic; } + public boolean changeCardState(final String mode, final String customState) { + if (mode == null) + return changeToState(CardStateName.smartValueOf(customState)); + + // flip and face-down don't overlap. That is there is no chance to turn face down a flipped permanent + // and then any effect have it turn upface again and demand its former flip state to be restored + // Proof: Morph cards never have ability that makes them flip, Ixidron does not suppose cards to be turned face up again, + // Illusionary Mask affects cards in hand. + CardStateName oldState = getCurrentStateName(); + if (mode.equals("Transform") && isDoubleFaced()) { + if (hasKeyword("CARDNAME can't transform")) { + return false; + } + CardStateName destState = oldState == CardStateName.Transformed ? CardStateName.Original : CardStateName.Transformed; + return changeToState(destState); + + } else if (mode.equals("Flip") && isFlipCard()) { + CardStateName destState = oldState == CardStateName.Flipped ? CardStateName.Original : CardStateName.Flipped; + return changeToState(destState); + } else if (mode.equals("TurnFace")) { + if (oldState == CardStateName.Original) { + // Reset cloned state if Vesuvan Shapeshifter + if (isCloned() && getState(CardStateName.Cloner).getName().equals("Vesuvan Shapeshifter")) { + switchStates(CardStateName.Cloner, CardStateName.Original, false); + setState(CardStateName.Original, false); + clearStates(CardStateName.Cloner, false); + } + return turnFaceDown(); + } else if (oldState == CardStateName.FaceDown) { + return turnFaceUp(); + } + } + return false; + } + public Card manifest(Player p) { // Turn Face Down (even if it's DFC). CardState originalCard = this.getState(CardStateName.Original); diff --git a/forge-gui/res/cardsfolder/l/loyal_cathar_unhallowed_cathar.txt b/forge-gui/res/cardsfolder/l/loyal_cathar_unhallowed_cathar.txt index 24dc4983c94..15647c4bbfb 100644 --- a/forge-gui/res/cardsfolder/l/loyal_cathar_unhallowed_cathar.txt +++ b/forge-gui/res/cardsfolder/l/loyal_cathar_unhallowed_cathar.txt @@ -5,8 +5,7 @@ PT:2/2 K:Vigilance T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigDelay | TriggerController$ TriggeredCardController | TriggerDescription$ When CARDNAME dies, return it to the battlefield transformed under your control at the beginning of the next end step. SVar:TrigDelay:AB$ DelayedTrigger | Cost$ 0 | Mode$ Phase | Phase$ End of Turn | Execute$ TrigReturn | RememberObjects$ TriggeredCard | TriggerDescription$ return CARDNAME to the battlefield transformed -SVar:TrigReturn:AB$ ChangeZone | Cost$ 0 | Defined$ DelayTriggerRemembered | Origin$ Graveyard | Destination$ Battlefield | SubAbility$ TrigTransform -SVar:TrigTransform:DB$ SetState | Cost$ 0 | Defined$ DelayTriggerRemembered | Mode$ Transform +SVar:TrigReturn:AB$ ChangeZone | Cost$ 0 | Defined$ DelayTriggerRemembered | Origin$ Graveyard | Destination$ Battlefield | Transformed$ True | GainControl$ True SVar:Picture:http://www.wizards.com/global/images/magic/general/loyal_cathar.jpg AlternateMode:DoubleFaced Oracle:Vigilance\nWhen Loyal Cathar dies, return it to the battlefield transformed under your control at the beginning of the next end step. diff --git a/forge-gui/res/lists/TypeLists.txt b/forge-gui/res/lists/TypeLists.txt index f4097a3ac7e..5a69c9bec62 100644 --- a/forge-gui/res/lists/TypeLists.txt +++ b/forge-gui/res/lists/TypeLists.txt @@ -287,6 +287,7 @@ Kiora Koth Liliana Nahiri +Narset Nissa Nixilis Ral