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 7749e6f8d33..7e16fa21ed5 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -282,7 +282,6 @@ public class Card extends GameEntity implements Comparable { view = new CardView(id0, game == null ? null : game.getTracker()); currentState = new CardState(view.getCurrentState(), this); states.put(CardStateName.Original, currentState); - states.put(CardStateName.FaceDown, CardUtil.getFaceDownCharacteristic(this)); view.updateChangedColorWords(this); view.updateChangedTypes(this); view.updateSickness(this); @@ -357,8 +356,13 @@ public class Card extends GameEntity implements Comparable { } public boolean setState(final CardStateName state, boolean updateView) { if (!states.containsKey(state)) { - System.out.println(getName() + " tried to switch to non-existant state \"" + state + "\"!"); - return false; // Nonexistant state. + if (state == CardStateName.FaceDown) { + // The face-down state is created lazily only when needed. + states.put(CardStateName.FaceDown, CardUtil.getFaceDownCharacteristic(this)); + } else { + System.out.println(getName() + " tried to switch to non-existant state \"" + state + "\"!"); + return false; // Nonexistant state. + } } if (state.equals(currentStateName)) { @@ -6281,6 +6285,8 @@ public class Card extends GameEntity implements Comparable { public final void setManifested(final boolean manifested) { this.manifested = manifested; final String image = manifested ? ImageKeys.MANIFEST_IMAGE : ImageKeys.MORPH_IMAGE; + // Note: This should only be called after state has been set to CardStateName.FaceDown, + // so the below call should be valid since the state should have been created already. getState(CardStateName.FaceDown).setImageKey(ImageKeys.getTokenKey(image)); }