diff --git a/forge-ai/src/main/java/forge/ai/GameState.java b/forge-ai/src/main/java/forge/ai/GameState.java index 31b5c7bb18c..2524260873a 100644 --- a/forge-ai/src/main/java/forge/ai/GameState.java +++ b/forge-ai/src/main/java/forge/ai/GameState.java @@ -107,7 +107,7 @@ public abstract class GameState { public GameState() { } - public abstract IPaperCard getPaperCard(String cardName); + public abstract IPaperCard getPaperCard(String cardName, String setCode, int artID); @Override public String toString() { @@ -258,9 +258,12 @@ public abstract class GameState { if (c.hasMergedCard()) { // we have to go by the current top card name here - newText.append(c.getTopMergedCard().getPaperCard().getName()); + newText.append(c.getTopMergedCard().getPaperCard().getName()).append("|Set:") + .append(c.getTopMergedCard().getPaperCard().getEdition()).append("|Art:") + .append(c.getTopMergedCard().getPaperCard().getArtIndex()); } else { - newText.append(c.getPaperCard().getName()); + newText.append(c.getPaperCard().getName()).append("|Set:").append(c.getPaperCard().getEdition()) + .append("|Art:").append(c.getPaperCard().getArtIndex()); } } if (c.isCommander()) { @@ -735,9 +738,11 @@ public abstract class GameState { String id = rememberedEnts.getValue(); Card exiledWith = idToCard.get(Integer.parseInt(id)); - exiledWith.addExiledCard(c); - c.setExiledWith(exiledWith); - c.setExiledBy(exiledWith.getController()); + if (exiledWith != null) { + exiledWith.addExiledCard(c); + c.setExiledWith(exiledWith); + c.setExiledBy(exiledWith.getController()); + } } } @@ -1196,6 +1201,18 @@ public abstract class GameState { } } + int artID = -1; + for (final String info : cardinfo) { + if (info.startsWith("Art:")) { + try { + artID = Integer.parseInt(info.substring(info.indexOf(':') + 1)); + } catch (Exception e) { + break; + } + break; + } + } + Card c; boolean hasSetCurSet = false; if (cardinfo[0].startsWith("t:")) { @@ -1212,7 +1229,7 @@ public abstract class GameState { } c = Card.fromPaperCard(token, player, player.getGame()); } else { - PaperCard pc = StaticData.instance().getCommonCards().getCard(cardinfo[0], setCode); + PaperCard pc = StaticData.instance().getCommonCards().getCard(cardinfo[0], setCode, artID); if (pc == null) { System.err.println("ERROR: Tried to create a non-existent card named " + cardinfo[0] + " (set: " + (setCode == null ? "any" : setCode) + ") when loading game state!"); continue; diff --git a/forge-gui-mobile/src/forge/screens/match/MatchController.java b/forge-gui-mobile/src/forge/screens/match/MatchController.java index 86898673586..753cb06dfd5 100644 --- a/forge-gui-mobile/src/forge/screens/match/MatchController.java +++ b/forge-gui-mobile/src/forge/screens/match/MatchController.java @@ -262,9 +262,9 @@ public class MatchController extends AbstractGuiGame { if (ph != null && saveState && ph.isMain()) { phaseGameState = new GameState() { - @Override //todo get specific card edition for this function? - public IPaperCard getPaperCard(final String cardName) { - return FModel.getMagicDb().getCommonCards().getCard(cardName); + @Override + public IPaperCard getPaperCard(final String cardName, final String setCode, final int artID) { + return FModel.getMagicDb().getCommonCards().getCard(cardName, setCode, artID); } }; try { diff --git a/forge-gui/src/main/java/forge/gamemodes/puzzle/Puzzle.java b/forge-gui/src/main/java/forge/gamemodes/puzzle/Puzzle.java index 3435a16252c..1c7fd952c85 100644 --- a/forge-gui/src/main/java/forge/gamemodes/puzzle/Puzzle.java +++ b/forge-gui/src/main/java/forge/gamemodes/puzzle/Puzzle.java @@ -98,8 +98,8 @@ public class Puzzle extends GameState implements InventoryItem, Comparable