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 963f52f2f8f..525a3c754dd 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -3134,14 +3134,20 @@ public class Card extends GameEntity implements Comparable { private final void updateCloneState(final boolean updateView) { if (isFaceDown()) { setState(CardStateName.FaceDown, updateView, true); - } else if (isFlipped() && hasState(CardStateName.Flipped)) { - setState(CardStateName.Flipped, updateView, true); - } else if (backside && isDoubleFaced()) { - setState(CardStateName.Transformed, updateView, true); - } else if (backside && isMeldable()) { - setState(CardStateName.Meld, updateView, true); } else { - setState(CardStateName.Original, updateView, true); + setState(getFaceupCardStateName(), updateView, true); + } + } + + public final CardStateName getFaceupCardStateName() { + if (isFlipped() && hasState(CardStateName.Flipped)) { + return CardStateName.Flipped; + } else if (backside && isDoubleFaced()) { + return CardStateName.Transformed; + } else if (backside && isMeldable()) { + return CardStateName.Meld; + } else { + return CardStateName.Original; } } @@ -5776,10 +5782,7 @@ public class Card extends GameEntity implements Comparable { if (isFaceDown()) { lkicheck = true; source = CardUtil.getLKICopy(source); - - // TODO need to be changed with CloneRewrite and FaceDownState? source.turnFaceUp(false, false); - source.getCurrentState().copyFrom(getState(CardStateName.Original), true); } if (lkicheck) { diff --git a/forge-game/src/main/java/forge/game/card/CardUtil.java b/forge-game/src/main/java/forge/game/card/CardUtil.java index 03f11ffaded..5c76488ec6c 100644 --- a/forge-game/src/main/java/forge/game/card/CardUtil.java +++ b/forge-game/src/main/java/forge/game/card/CardUtil.java @@ -227,7 +227,10 @@ public final class CardUtil { // used for the purpose of cards that care about the zone the card was known to be in last newCopy.setLastKnownZone(in.getLastKnownZone()); - newCopy.getCurrentState().copyFrom(in.getState(in.getCurrentStateName()), true); + newCopy.getCurrentState().copyFrom(in.getState(in.getFaceupCardStateName()), true); + if (in.isFaceDown()) { + newCopy.turnFaceDownNoUpdate(); + } /* if (in.isCloned()) { diff --git a/forge-gui-desktop/src/test/java/forge/ai/simulation/GameSimulatorTest.java b/forge-gui-desktop/src/test/java/forge/ai/simulation/GameSimulatorTest.java index 54bb9b0afa9..63f48d0e7f8 100644 --- a/forge-gui-desktop/src/test/java/forge/ai/simulation/GameSimulatorTest.java +++ b/forge-gui-desktop/src/test/java/forge/ai/simulation/GameSimulatorTest.java @@ -1771,7 +1771,7 @@ public class GameSimulatorTest extends SimulationTestCase { assertTrue(transformOutLaw.isCloned()); assertTrue(transformOutLaw.isDoubleFaced()); - assertFalse(transformOutLaw.hasState(CardStateName.Transformed)); + assertTrue(transformOutLaw.hasState(CardStateName.Transformed)); assertTrue(transformOutLaw.canTransform()); assertTrue(transformOutLaw.isBackSide());