From 468ff7fc50f40f0917beb279eade757896917fe2 Mon Sep 17 00:00:00 2001 From: Agetian Date: Sun, 30 Dec 2018 08:19:29 +0300 Subject: [PATCH 1/2] - Fixed the reveal for face-down cards leaving battlefield/stack not working anymore. --- forge-game/src/main/java/forge/game/GameAction.java | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/forge-game/src/main/java/forge/game/GameAction.java b/forge-game/src/main/java/forge/game/GameAction.java index 6a7fbd7e4e2..60e82688e03 100644 --- a/forge-game/src/main/java/forge/game/GameAction.java +++ b/forge-game/src/main/java/forge/game/GameAction.java @@ -104,6 +104,7 @@ public class GameAction { boolean toBattlefield = zoneTo.is(ZoneType.Battlefield); boolean fromBattlefield = zoneFrom != null && zoneFrom.is(ZoneType.Battlefield); boolean toHand = zoneTo.is(ZoneType.Hand); + boolean wasFacedown = c.isFaceDown(); //Rule 110.5g: A token that has left the battlefield can't move to another zone if (c.isToken() && zoneFrom != null && !fromBattlefield && !zoneFrom.is(ZoneType.Command)) { @@ -150,7 +151,7 @@ public class GameAction { // Cards returned from exile face-down must be reset to their original state, otherwise // all sort of funky shenanigans may happen later (e.g. their ETB replacement effects are set // up on the wrong card state etc.). - if (c.isFaceDown() && (fromBattlefield || (toHand && zoneFrom.is(ZoneType.Exile)))) { + if (wasFacedown && (fromBattlefield || (toHand && zoneFrom.is(ZoneType.Exile)))) { c.setState(CardStateName.Original, true); c.runFaceupCommands(); } @@ -435,10 +436,13 @@ public class GameAction { } // rule 504.6: reveal a face-down card leaving the stack - if (zoneFrom != null && zoneTo != null && zoneFrom.is(ZoneType.Stack) && !zoneTo.is(ZoneType.Battlefield) && c.isFaceDown()) { + if (zoneFrom != null && zoneTo != null && zoneFrom.is(ZoneType.Stack) && !zoneTo.is(ZoneType.Battlefield) && wasFacedown) { + boolean trackerFrozen = game.getTracker().isFrozen(); + game.getTracker().unfreeze(); c.setState(CardStateName.Original, true); reveal(new CardCollection(c), c.getOwner(), true, "Face-down card moves from the stack: "); c.setState(CardStateName.FaceDown, true); + if (trackerFrozen) {game.getTracker().freeze();} } if (fromBattlefield) { @@ -466,10 +470,13 @@ public class GameAction { changeZone(null, zoneTo, unmeld, position, cause, params); } // Reveal if face-down - if (c.isFaceDown()) { + if (wasFacedown) { + boolean trackerFrozen = game.getTracker().isFrozen(); + game.getTracker().unfreeze(); c.setState(CardStateName.Original, true); reveal(new CardCollection(c), c.getOwner(), true, "Face-down card leaves the battlefield: "); c.setState(CardStateName.FaceDown, true); + if (trackerFrozen) {game.getTracker().freeze();} copied.setState(CardStateName.Original, true); } unattachCardLeavingBattlefield(copied); From 1ced8bba7d09638f626818fea3de6cd025732fa7 Mon Sep 17 00:00:00 2001 From: Agetian Date: Sun, 30 Dec 2018 08:26:34 +0300 Subject: [PATCH 2/2] - Style fix. Added a comment. --- forge-game/src/main/java/forge/game/GameAction.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/forge-game/src/main/java/forge/game/GameAction.java b/forge-game/src/main/java/forge/game/GameAction.java index 60e82688e03..026408faeb5 100644 --- a/forge-game/src/main/java/forge/game/GameAction.java +++ b/forge-game/src/main/java/forge/game/GameAction.java @@ -437,12 +437,13 @@ public class GameAction { // rule 504.6: reveal a face-down card leaving the stack if (zoneFrom != null && zoneTo != null && zoneFrom.is(ZoneType.Stack) && !zoneTo.is(ZoneType.Battlefield) && wasFacedown) { + // FIXME: tracker freeze-unfreeze is needed here to avoid a bug with the card staying face down in the View for the reveal boolean trackerFrozen = game.getTracker().isFrozen(); game.getTracker().unfreeze(); c.setState(CardStateName.Original, true); reveal(new CardCollection(c), c.getOwner(), true, "Face-down card moves from the stack: "); c.setState(CardStateName.FaceDown, true); - if (trackerFrozen) {game.getTracker().freeze();} + if (trackerFrozen) { game.getTracker().freeze(); } } if (fromBattlefield) { @@ -471,12 +472,13 @@ public class GameAction { } // Reveal if face-down if (wasFacedown) { + // FIXME: tracker freeze-unfreeze is needed here to avoid a bug with the card staying face down in the View for the reveal boolean trackerFrozen = game.getTracker().isFrozen(); game.getTracker().unfreeze(); c.setState(CardStateName.Original, true); reveal(new CardCollection(c), c.getOwner(), true, "Face-down card leaves the battlefield: "); c.setState(CardStateName.FaceDown, true); - if (trackerFrozen) {game.getTracker().freeze();} + if (trackerFrozen) { game.getTracker().freeze(); } copied.setState(CardStateName.Original, true); } unattachCardLeavingBattlefield(copied);