diff --git a/forge-gui-mobile/src/forge/adventure/data/ConfigData.java b/forge-gui-mobile/src/forge/adventure/data/ConfigData.java index 035a2c3272b..bf18d7326c6 100644 --- a/forge-gui-mobile/src/forge/adventure/data/ConfigData.java +++ b/forge-gui-mobile/src/forge/adventure/data/ConfigData.java @@ -16,6 +16,8 @@ public class ConfigData { public float playerBaseSpeed; public String[] colorIds; public String[] colorIdNames; + public String[] starterEditions; + public String[] starterEditionNames; public DifficultyData[] difficulties; public RewardData legalCards; public String[] restrictedCards; diff --git a/forge-gui-mobile/src/forge/adventure/scene/NewGameScene.java b/forge-gui-mobile/src/forge/adventure/scene/NewGameScene.java index caa7750f6cb..b36706d3a2b 100644 --- a/forge-gui-mobile/src/forge/adventure/scene/NewGameScene.java +++ b/forge-gui-mobile/src/forge/adventure/scene/NewGameScene.java @@ -15,6 +15,7 @@ import forge.adventure.util.Config; import forge.adventure.util.Selector; import forge.adventure.util.UIActor; import forge.adventure.world.WorldSave; +import forge.card.CardEdition; import forge.card.ColorSet; import forge.deck.DeckProxy; import forge.localinstance.properties.ForgePreferences; @@ -31,6 +32,7 @@ import java.util.Random; public class NewGameScene extends UIScene { TextField selectedName; ColorSet[] colorIds; + CardEdition[] editionIds; private final Image avatarImage; private int avatarIndex = 0; private final Selector race; @@ -38,6 +40,8 @@ public class NewGameScene extends UIScene { private final Selector gender; private final Selector mode; private final Selector difficulty; + private final Selector starterEdition; + private final TextraLabel starterEditionLabel; private final Array custom; private final TextraLabel colorLabel; @@ -88,6 +92,19 @@ public class NewGameScene extends UIScene { } break; } + + starterEdition = ui.findActor("starterEdition"); + starterEditionLabel = ui.findActor("starterEditionL"); + String[] starterEditions = Config.instance().starterEditions(); + String[] starterEditionNames = Config.instance().starterEditionNames(); + editionIds = new CardEdition[starterEditions.length]; + for (int i = 0; i < editionIds.length; i++) + editionIds[i] = FModel.getMagicDb().getEditions().get(starterEditions[i]); + Array editionNames = new Array<>(editionIds.length); + for (String editionName : starterEditionNames) + editionNames.add(UIActor.localize(editionName)); + starterEdition.setTextList(editionNames); + modes.add(AdventureModes.Chaos); AdventureModes.Chaos.setSelectionName("[BLACK]"+Forge.getLocalizer().getMessage("lblDeck")+":"); AdventureModes.Chaos.setModes(new Array<>(new String[]{Forge.getLocalizer().getMessage("lblRandomDeck")})); @@ -113,6 +130,8 @@ public class NewGameScene extends UIScene { AdventureModes smode=modes.get(mode.getCurrentIndex()); colorLabel.setText(smode.getSelectionName()); colorId.setTextList(smode.getModes()); + starterEdition.setVisible(smode == AdventureModes.Standard); + starterEditionLabel.setVisible(smode == AdventureModes.Standard); } }); race = ui.findActor("race"); @@ -165,7 +184,8 @@ public class NewGameScene extends UIScene { avatarIndex, colorIds[colorId.getCurrentIndex()], Config.instance().getConfigData().difficulties[difficulty.getCurrentIndex()], - modes.get(mode.getCurrentIndex()), colorId.getCurrentIndex(), 0);//maybe replace with enum + modes.get(mode.getCurrentIndex()), colorId.getCurrentIndex(), + editionIds[starterEdition.getCurrentIndex()], 0);//maybe replace with enum GamePlayerUtil.getGuiPlayer().setName(selectedName.getText()); Forge.switchScene(GameScene.instance()); }; @@ -208,7 +228,8 @@ public class NewGameScene extends UIScene { avatarIndex, colorIds[colorId.getCurrentIndex()], Config.instance().getConfigData().difficulties[difficulty.getCurrentIndex()], - modes.get(mode.getCurrentIndex()), colorId.getCurrentIndex(), 0); + modes.get(mode.getCurrentIndex()), colorId.getCurrentIndex(), + editionIds[starterEdition.getCurrentIndex()],0); GamePlayerUtil.getGuiPlayer().setName(selectedName.getText()); Forge.switchScene(GameScene.instance()); } diff --git a/forge-gui-mobile/src/forge/adventure/util/CardUtil.java b/forge-gui-mobile/src/forge/adventure/util/CardUtil.java index aa6b462e48a..83718a3adee 100644 --- a/forge-gui-mobile/src/forge/adventure/util/CardUtil.java +++ b/forge-gui-mobile/src/forge/adventure/util/CardUtil.java @@ -16,6 +16,8 @@ import forge.deck.DeckSection; import forge.deck.DeckgenUtil; import forge.deck.io.DeckSerializer; import forge.item.PaperCard; +import forge.item.SealedProduct; +import forge.item.generation.UnOpenedProduct; import forge.model.FModel; import java.io.File; @@ -327,10 +329,10 @@ public class CardUtil { return reward.getCount(); return 1000; } - - static List jumpStartSheetsCandidates=null; - public static Deck generateDeck(GeneratedDeckData data) + static List> packCandidates=null; + public static Deck generateDeck(GeneratedDeckData data, CardEdition starterEdition) { + List editionCodes = (starterEdition != null)?Arrays.asList(starterEdition.getCode(), starterEdition.getCode2()):Arrays.asList("JMP", "J22", "DMU","BRO"); Deck deck= new Deck(data.name); if(data.mainDeck!=null) { @@ -345,8 +347,9 @@ public class CardUtil { for(int i=0;i(); - for(PrintSheet sheet : StaticData.instance().getPrintSheets()) + packCandidates=new ArrayList<>(); + for(SealedProduct.Template template : StaticData.instance().getSpecialBoosters()) { - if(sheet.containsCardNamed(targetName,3) && sheet.getName().startsWith("JMP") && sheet.all().size() == 20)//dodge the rainbow jumpstart sheet and the sheet for every card - { - jumpStartSheetsCandidates.add(sheet); - } + if (!editionCodes.contains(template.getEdition().split("\\s",2)[0])) + continue; + List packContents = new UnOpenedProduct(template).get(); + if (packContents.size() < 20 | packContents.size() > 25) + continue; + if (packContents.stream().filter(x -> x.getName().equals(targetName)).count() >=3) + packCandidates.add(packContents); } - PrintSheet sheet=jumpStartSheetsCandidates.get(Current.world().getRandom().nextInt(jumpStartSheetsCandidates.size())); - deck.getOrCreate(DeckSection.Main).addAllFlat(sheet.all()); + deck.getOrCreate(DeckSection.Main).addAllFlat(packCandidates.get(Current.world().getRandom().nextInt(packCandidates.size()))); } return deck; } @@ -577,7 +582,11 @@ public class CardUtil { return ret; } - public static Deck getDeck(String path, boolean forAI, boolean isFantasyMode, String colors, boolean isTheme, boolean useGeneticAI) + public static Deck getDeck(String path, boolean forAI, boolean isFantasyMode, String colors, boolean isTheme, boolean useGeneticAI) { + return getDeck(path, forAI, isFantasyMode, colors, isTheme, useGeneticAI, null); + } + + public static Deck getDeck(String path, boolean forAI, boolean isFantasyMode, String colors, boolean isTheme, boolean useGeneticAI, CardEdition starterEdition) { if(path.endsWith(".dck")) return DeckSerializer.fromFile(new File(Config.instance().getFilePath(path))); @@ -590,7 +599,7 @@ public class CardUtil { Json json = new Json(); FileHandle handle = Config.instance().getFile(path); if (handle.exists()) - return generateDeck(json.fromJson(GeneratedDeckData.class, handle)); + return generateDeck(json.fromJson(GeneratedDeckData.class, handle), starterEdition); return null; } diff --git a/forge-gui-mobile/src/forge/adventure/util/Config.java b/forge-gui-mobile/src/forge/adventure/util/Config.java index 41753b47bad..c8ae2b6e9ed 100644 --- a/forge-gui-mobile/src/forge/adventure/util/Config.java +++ b/forge-gui-mobile/src/forge/adventure/util/Config.java @@ -171,7 +171,15 @@ public class Config { return configData.colorIds; } - public Deck starterDeck(ColorSet color, DifficultyData difficultyData, AdventureModes mode,int index) { + public String[] starterEditionNames() { + + return configData.starterEditionNames; + } + public String[] starterEditions() { + + return configData.starterEditions; + } + public Deck starterDeck(ColorSet color, DifficultyData difficultyData, AdventureModes mode,int index,CardEdition starterEdition) { switch (mode) { case Constructed: @@ -188,7 +196,7 @@ public class Config { { if(ColorSet.fromNames(entry.key.toCharArray()).getColor()==color.getColor()) { - return CardUtil.getDeck(entry.value, false, false, "", false, false); + return CardUtil.getDeck(entry.value, false, false, "", false, false, starterEdition); } } case Chaos: diff --git a/forge-gui-mobile/src/forge/adventure/world/WorldSave.java b/forge-gui-mobile/src/forge/adventure/world/WorldSave.java index a8957a458ab..686752987cd 100644 --- a/forge-gui-mobile/src/forge/adventure/world/WorldSave.java +++ b/forge-gui-mobile/src/forge/adventure/world/WorldSave.java @@ -8,6 +8,7 @@ import forge.adventure.util.AdventureModes; import forge.adventure.util.Config; import forge.adventure.util.SaveFileData; import forge.adventure.util.SignalList; +import forge.card.CardEdition; import forge.card.ColorSet; import forge.deck.Deck; import forge.localinstance.properties.ForgeConstants; @@ -122,12 +123,12 @@ public class WorldSave { return currentSave; } - public static WorldSave generateNewWorld(String name, boolean male, int race, int avatarIndex, ColorSet startingColorIdentity, DifficultyData diff, AdventureModes mode, int customDeckIndex, long seed) { + public static WorldSave generateNewWorld(String name, boolean male, int race, int avatarIndex, ColorSet startingColorIdentity, DifficultyData diff, AdventureModes mode, int customDeckIndex, CardEdition starterEdition, long seed) { currentSave.world.generateNew(seed); currentSave.pointOfInterestChanges.clear(); boolean chaos=mode==AdventureModes.Chaos; boolean custom=mode==AdventureModes.Custom; - Deck starterDeck = Config.instance().starterDeck(startingColorIdentity,diff,mode,customDeckIndex); + Deck starterDeck = Config.instance().starterDeck(startingColorIdentity,diff,mode,customDeckIndex,starterEdition); currentSave.player.create(name, starterDeck, male, race, avatarIndex, chaos, custom, diff); currentSave.player.setWorldPosY((int) (currentSave.world.getData().playerStartPosY * currentSave.world.getData().height * currentSave.world.getTileSize())); currentSave.player.setWorldPosX((int) (currentSave.world.getData().playerStartPosX * currentSave.world.getData().width * currentSave.world.getTileSize())); diff --git a/forge-gui/res/adventure/Shandalar/config.json b/forge-gui/res/adventure/Shandalar/config.json index 8055ffa07a2..efe13c7c732 100644 --- a/forge-gui/res/adventure/Shandalar/config.json +++ b/forge-gui/res/adventure/Shandalar/config.json @@ -196,6 +196,20 @@ "G":"decks/starter/pile_green_h.json" } } - ] + ], + "starterEditions": [ + "JMP", + "DMU", + "BRO", + "J22" + "(All)" + ], + "starterEditionNames": [ + "Jumpstart", + "Dominaria United", + "Brother's War", + "Jumpstart 22" + "(All)" + ] } diff --git a/forge-gui/res/adventure/Shandalar/ui/new_game.json b/forge-gui/res/adventure/Shandalar/ui/new_game.json index 15bb9d96697..998cb0e0fd3 100644 --- a/forge-gui/res/adventure/Shandalar/ui/new_game.json +++ b/forge-gui/res/adventure/Shandalar/ui/new_game.json @@ -15,7 +15,7 @@ "style": "paper", "x": 56, "y": 10, - "width": 256, + "width": 280, "height": 250 }, { @@ -81,6 +81,15 @@ "height": 16, "x": 75, "yOffset": 8 + }, + { + "type": "Label", + "name" : "starterEditionL", + "text": "[BLACK]Starter Edition", + "width": 128, + "height": 16, + "x": 75, + "yOffset": 8 }, { "type": "ImageButton", @@ -164,6 +173,15 @@ "height": 16, "x": 164, "yOffset": 8 + }, + { + "type": "Selector", + "name": "starterEdition", + "selectable": true, + "width": 112, + "height": 16, + "x": 164, + "yOffset": 8 }, { "type": "TextButton", @@ -173,7 +191,7 @@ "binding": "Back", "width": 100, "height": 30, - "x": 348, + "x": 376, "y": 85 }, { @@ -184,7 +202,7 @@ "binding": "Status", "width": 100, "height": 30, - "x": 348, + "x": 376, "y": 155 } ] diff --git a/forge-gui/res/adventure/Shandalar/ui/new_game_portrait.json b/forge-gui/res/adventure/Shandalar/ui/new_game_portrait.json index 07edb7293fb..fbda10b86f3 100644 --- a/forge-gui/res/adventure/Shandalar/ui/new_game_portrait.json +++ b/forge-gui/res/adventure/Shandalar/ui/new_game_portrait.json @@ -16,7 +16,7 @@ "x": 5, "y": 60, "width": 256, - "height": 323 + "height": 355 }, { "type": "Label", @@ -81,6 +81,15 @@ "height": 24, "x": 16, "yOffset": 8 + }, + { + "type": "Label", + "name" : "starterEditionL", + "text": "[BLACK]Starter Edition:", + "width": 128, + "height": 24, + "x": 16, + "yOffset": 8 }, { "type": "ImageButton", @@ -163,6 +172,15 @@ "height": 24, "x": 96, "yOffset": 8 + }, + { + "type": "Selector", + "name": "starterEdition", + "selectable": true, + "width": 168, + "height": 24, + "x": 96, + "yOffset": 8 }, { "type": "TextButton", @@ -173,7 +191,7 @@ "width": 64, "height": 28, "x": 32, - "y": 344 + "y": 376 }, { "type": "TextButton", @@ -184,7 +202,7 @@ "width": 64, "height": 28, "x": 165, - "y": 344 + "y": 376 } ] } \ No newline at end of file diff --git a/forge-gui/res/blockdata/blocks.txt b/forge-gui/res/blockdata/blocks.txt index 38a8637dc04..9227af582ad 100644 --- a/forge-gui/res/blockdata/blocks.txt +++ b/forge-gui/res/blockdata/blocks.txt @@ -106,7 +106,9 @@ Streets of New Capenna, 3/6/SNC, SNC Alchemy Horizons: Baldur's Gate, 3/6/HBG, HBG Double Masters 2022, 3/6/2X2, 2X2 Dominaria United, 3/6/DMU, DMU +Dominaria United Jumpstart, -/2/DMU, Meta-Choose(S(DMU Coalition Corps)Coaltion Corps;S(DMU Coalition Legion)Coaltion Legion;S(DMU Mystic Mischief)Mystic Mischief;S(DMU Arcane Mischief)Arcane Mischief;S(DMU Totally Ruthless)Totally Ruthless;S(DMU Totally Merciless)Totally Merciless;S(DMU Ready to Charge)Ready to Charge;S(DMU Ready to Attack)Ready to Attack;S(DMU Beast Territory)Beast Territory;S(DMU Monster Territory)Monster Territory)Themes The Brothers' War, 3/6/BRO, BRO +The Brothers' War Jumpstart, -/2/DMU, Meta-Choose(S(BRO Infantry 1)Infantry 1;S(BRO Infantry 2)Infantry 2;S(BRO Powerstones 1)Powerstones 1;S(BRO Powerstones 2)Powerstones 2;S(BRO Unearthed 1)Unearthed 1;S(BRO Unearthed 2)Unearthed 1;S(BRO Welded 1)Welded 1;S(BRO Welded 2)Welded 1;S(BRO Titanic 1)Titanic 1;S(BRO Titanic 2)Titanic 1)Themes 30th Anniversary Edition, 3/6/30A, 30A Jumpstart 2022, -/2/J22, Meta-Choose(S(J22 Vehicles)Vehicles;S(J22 Knights)Knights;S(J22 Constellation 1)Constellation 1;S(J22 Constellation 2)Constellation 2;S(J22 Teamwork 1)Teamwork 1;S(J22 Teamwork 2)Teamwork 2;S(J22 Spirits 1)Spirits 1;S(J22 Spirits 2)Spirits 2;S(J22 Blink 1)Blink 1;S(J22 Blink 2)Blink 2;S(J22 Blink 3)Blink 3;S(J22 Blink 4)Blink 4;S(J22 Cats 1)Cats 1;S(J22 Cats 2)Cats 2;S(J22 Cats 3)Cats 3;S(J22 Cats 4)Cats 4;S(J22 Law 1)Law 1;S(J22 Law 2)Law 2;S(J22 Law 3)Law 3;S(J22 Law 4)Law 4;S(J22 Holy 1)Holy 1;S(J22 Holy 2)Holy 2;S(J22 Holy 3)Holy 3;S(J22 Holy 4)Holy 4;S(J22 Shapeshifters)Shapeshifters;S(J22 Snow)Snow;S(J22 Go to School 1)Go to School 1;S(J22 Go to School 2)Go to School 2;S(J22 Scrying 1)Scrying 1;S(J22 Scrying 2)Scrying 2;S(J22 Faeries 1)Faeries 1;S(J22 Faeries 2)Faeries 2;S(J22 Merfolk 1)Merfolk 1;S(J22 Merfolk 2)Merfolk 2;S(J22 Merfolk 3)Merfolk 3;S(J22 Merfolk 4)Merfolk 4;S(J22 Detective 1)Detective 1;S(J22 Detective 2)Detective 2;S(J22 Detective 3)Detective 3;S(J22 Detective 4)Detective 4;S(J22 Think Again 1)Think Again 1;S(J22 Think Again 2)Think Again 2;S(J22 Think Again 3)Think Again 3;S(J22 Think Again 4)Think Again 4;S(J22 Inventive 1)Inventive 1;S(J22 Inventive 2)Inventive 2;S(J22 Inventive 3)Inventive 3;S(J22 Inventive 4)Inventive 4;S(J22 Unlucky Thirteen)Unlucky Thirteen;S(J22 Rats)Rats;S(J22 Demons 1)Demons 1;S(J22 Demons 2)Demons 2;S(J22 Boneyard 1)Boneyard 1;S(J22 Boneyard 2)Boneyard 2;S(J22 Morbid 1)Morbid 1;S(J22 Morbid 2)Morbid 2;S(J22 Cruel 1)Cruel 1;S(J22 Cruel 2)Cruel 2;S(J22 Cruel 3)Cruel 3;S(J22 Cruel 4)Cruel 4;S(J22 Fangs 1)Fangs 1;S(J22 Fangs 2)Fangs 2;S(J22 Fangs 3)Fangs 3;S(J22 Fangs 4)Fangs 4;S(J22 Zombies 1)Zombies 1;S(J22 Zombies 2)Zombies 2;S(J22 Zombies 3)Zombies 3;S(J22 Zombies 4)Zombies 4;S(J22 Gross 1)Gross 1;S(J22 Gross 2)Gross 2;S(J22 Gross 3)Gross 3;S(J22 Gross 4)Gross 4;S(J22 Spicy)Spicy;S(J22 Speedy)Speedy;S(J22 Experimental 1)Experimental 1;S(J22 Experimental 2)Experimental 2;S(J22 Dragons 1)Dragons 1;S(J22 Dragons 2)Dragons 2;S(J22 Cycling 1)Cycling 1;S(J22 Cycling 2)Cycling 2;S(J22 Goblins 1)Goblins 1;S(J22 Goblins 2)Goblins 2;S(J22 Goblins 3)Goblins 3;S(J22 Goblins 4)Goblins 4;S(J22 Treasure 1)Treasure 1;S(J22 Treasure 2)Treasure 2;S(J22 Treasure 3)Treasure 3;S(J22 Treasure 4)Treasure 4;S(J22 Fiery 1)Fiery 1;S(J22 Fiery 2)Fiery 2;S(J22 Fiery 3)Fiery 3;S(J22 Fiery 4)Fiery 4;S(J22 Raid 1)Raid 1;S(J22 Raid 2)Raid 2;S(J22 Raid 3)Raid 3;S(J22 Raid 4)Raid 4;S(J22 Eldrazi)Eldrazi;S(J22 Primates)Primates;S(J22 Multi-Headed 1)Multi-Headed 1;S(J22 Multi-Headed 2)Multi-Headed 2;S(J22 Gigantic 1)Gigantic 1;S(J22 Gigantic 2)Gigantic 2;S(J22 Landfall 1)Landfall 1;S(J22 Landfall 2)Landfall 2;S(J22 Elves 1)Elves 1;S(J22 Elves 2)Elves 2;S(J22 Elves 3)Elves 3;S(J22 Elves 4)Elves 4;S(J22 Wolves 1)Wolves 1;S(J22 Wolves 2)Wolves 2;S(J22 Wolves 3)Wolves 3;S(J22 Wolves 4)Wolves 4;S(J22 Ferocious 1)Ferocious 1;S(J22 Ferocious 2)Ferocious 2;S(J22 Ferocious 3)Ferocious 3;S(J22 Ferocious 4)Ferocious 4;S(J22 Insects 1)Insects 1;S(J22 Insects 2)Insects 2;S(J22 Insects 3)Insects 3;S(J22 Insects 4)Insects 4;S(J22 Urza's)Urza's)Themes Dominaria Remastered, 3/6/DMR, DMR diff --git a/forge-gui/res/blockdata/boosters-special.txt b/forge-gui/res/blockdata/boosters-special.txt index bf1d3931a06..4bae16df218 100644 --- a/forge-gui/res/blockdata/boosters-special.txt +++ b/forge-gui/res/blockdata/boosters-special.txt @@ -274,3 +274,27 @@ J22 Insects 2: 1 wholeSheet("J22 Insects 2") J22 Insects 3: 1 wholeSheet("J22 Insects 3") J22 Insects 4: 1 wholeSheet("J22 Insects 4") J22 Urza's: 1 wholeSheet("J22 Urza's") + +# DMU Jumpstart +DMU Coalition Corps: 1 wholeSheet("DMU Coalition Corps"), 1 RareMythic:fromSheet("DMU White Inserts") +DMU Coalition Legion: 1 wholeSheet("DMU Coalition Legion"), 1 RareMythic:fromSheet("DMU White Inserts") +DMU Mystic Mischief: 1 wholeSheet("DMU Mystic Mischief"), 1 RareMythic:fromSheet("DMU Blue Inserts") +DMU Arcane Mischief: 1 wholeSheet("DMU Arcane Mischief"), 1 RareMythic:fromSheet("DMU Blue Inserts") +DMU Totally Ruthless: 1 wholeSheet("DMU Totally Ruthless"), 1 RareMythic:fromSheet("DMU Black Inserts") +DMU Totally Merciless: 1 wholeSheet("DMU Totally Merciless"), 1 RareMythic:fromSheet("DMU Black Inserts") +DMU Ready to Charge: 1 wholeSheet("DMU Ready to Charge"), 1 RareMythic:fromSheet("DMU Red Inserts") +DMU Ready to Attack: 1 wholeSheet("DMU Ready to Attack"), 1 RareMythic:fromSheet("DMU Red Inserts") +DMU Beast Territory: 1 wholeSheet("DMU Beast Territory"), 1 RareMythic:fromSheet("DMU Green Inserts") +DMU Monster Territory: 1 wholeSheet("DMU Monster Territory"), 1 RareMythic:fromSheet("DMU Green Inserts") + +# BRO Jumpstart +BRO Infantry 1: 1 wholeSheet("BRO Infantry 1"), 1 RareMythic:fromSheet("BRO White Inserts") +BRO Infantry 2: 1 wholeSheet("BRO Infantry 2"), 1 RareMythic:fromSheet("BRO White Inserts") +BRO Powerstones 1: 1 wholeSheet("BRO Powerstones 1"), 1 RareMythic:fromSheet("BRO Blue Inserts") +BRO Powerstones 2: 1 wholeSheet("BRO Powerstones 2"), 1 RareMythic:fromSheet("BRO Blue Inserts") +BRO Unearthed 1: 1 wholeSheet("BRO Unearthed 1"), 1 RareMythic:fromSheet("BRO Black Inserts") +BRO Unearthed 2: 1 wholeSheet("BRO Unearthed 2"), 1 RareMythic:fromSheet("BRO Black Inserts") +BRO Welded 1: 1 wholeSheet("BRO Welded 1"), 1 RareMythic:fromSheet("BRO Red Inserts") +BRO Welded 2: 1 wholeSheet("BRO Welded 2"), 1 RareMythic:fromSheet("BRO Red Inserts") +BRO Titanic 1: 1 wholeSheet("BRO Titanic 1"), 1 RareMythic:fromSheet("BRO Green Inserts") +BRO Titanic 2: 1 wholeSheet("BRO Titanic 2"), 1 RareMythic:fromSheet("BRO Green Inserts") \ No newline at end of file diff --git a/forge-gui/res/blockdata/printsheets.txt b/forge-gui/res/blockdata/printsheets.txt index 905edaf9b25..7d89b8fc67e 100644 --- a/forge-gui/res/blockdata/printsheets.txt +++ b/forge-gui/res/blockdata/printsheets.txt @@ -5389,3 +5389,404 @@ Kaya, Ghost Assassin|CN2|2 3 Urza's Tower|J22 2 Urza's Power Plant|J22 2 Urza's Mine|J22 + +[DMU Coalition Corps] +1 Clockwork Drawbridge|DMU +1 Resolute Reinforcements|DMU +1 Argivian Cavalier|DMU +1 Charismatic Vanguard|DMU +1 Griffin Protector|DMU +1 Argivian Phalanx|DMU +1 Serra Redeemer|DMU +1 Captain's Call|DMU +1 Prayer of Binding|DMU +1 Love Song of Night and Day|DMU +1 Join Forces|DMU +8 Plains|DMU|1 + +[DMU Coalition Legion] +1 Samite Herbalist|DMU +1 Benalish Faithbonder|DMU +1 Knight of Dawn's Light|DMU +1 Argivian Cavalier|DMU +1 Charismatic Vanguard|DMU +1 Griffin Protector|DMU +1 Serra Redeemer|DMU +1 Take Up the Shield|DMU +1 Join Forces|DMU +1 Prayer of Binding|DMU +1 Love Song of Night and Day|DMU +8 Plains|DMU|1 + +[DMU Mystic Mischief] +1 Coral Colony|DMU +1 Soaring Drake|DMU +1 Academy Wall|DMU +1 Talas Lookout|DMU +1 Tolarian Terror|DMU +1 Frostfist Strider|DMU +1 Impulse|DMU +1 Ertai's Scorn|DMU +1 Founding the Third Path|DMU +1 Cosmic Epiphany|DMU +1 Impede Momentum|DMU +8 Island|DMU|1 + +[DMU Arcane Mischief] +1 Haunting Figment|DMU +1 Soaring Drake|DMU +1 Academy Wall|DMU +1 Talas Lookout|DMU +1 Frostfist Strider|DMU +1 Djinn of the Fountain|DMU +1 Impulse|DMU +1 Shore Up|DMU +1 Combat Research|DMU +1 Cosmic Epiphany|DMU +1 Impede Momentum|DMU +8 Island|DMU|1 + +[DMU Totally Ruthless] +1 Cult Conscript|DMU +1 Phyrexian Vivisector|DMU +1 Splatter Goblin|DMU +1 Phyrexian Rager|DMU +1 Gibbering Barricade|DMU +1 Sengir Connoisseur|DMU +1 Tyrannical Pitlord|DMU +1 Bone Splinters|DMU +1 Cut Down|DMU +1 Battle-Rage Blessing|DMU +1 Braids's Frightful Return|DMU +8 Swamp|DMU|1 + +[DMU Totally Merciless] +1 Knight of Dusk's Shadow|DMU +1 Phyrexian Vivisector|DMU +1 Eerie Soultender|DMU +1 Phyrexian Rager|DMU +1 Sengir Connoisseur|DMU +1 Writhing Necromass|DMU +1 Tyrannical Pitlord|DMU +1 Battle-Rage Blessing|DMU +1 Extinguish the Light|DMU +1 Braids's Frightful Return|DMU +1 Pilfer|DMU +8 Swamp|DMU|1 + +[DMU Ready to Attack] +1 Phoenix Chick|DMU +1 Electrostatic Infantry|DMU +1 Goblin Picker|DMU +1 Flowstone Kavu|DMU +1 Dragon Whelp|DMU +1 Coalition Warbrute|DMU +1 Ragefire Hellkite|DMU +1 Hammerhand|DMU +1 Lightning Strike|DMU +1 Twinferno|DMU +1 Jaya's Firenado|DMU +8 Mountain|DMU|1 + +[DMU Ready to Charge] +1 Electrostatic Infantry|DMU +1 Yavimaya Steelcrusher|DMU +1 Balduvian Berserker|DMU +1 Dragon Whelp|DMU +1 Coalition Warbrute|DMU +1 Molten Monstrosity|DMU +1 Ragefire Hellkite|DMU +1 Flowstone Infusion|DMU +1 Twinferno|DMU +1 Furious Bellow|DMU +1 Jaya's Firenado|DMU +8 Mountain|DMU|1 + +[DMU Beast Territory] +1 Floriferous Vinewall|DMU +1 Sunbathing Rootwalla|DMU +1 Deathbloom Gardener|DMU +1 Magnigoth Sentry|DMU +1 Territorial Maro|DMU +1 Linebreaker Baloth|DMU +1 Mossbeard Ancient|DMU +1 Briar Hydra|DMU +1 Bite Down|DMU +1 Broken Wings|DMU +1 Slimefoot's Survey|DMU +1 Tangled Islet|DMU +1 Wooded Ridgeline|DMU +1 Radiant Grove|DMU +1 Haunted Mire|DMU +4 Forest|DMU|1 + +[DMU Monster Territory] +1 Floriferous Vinewall|DMU +1 Sunbathing Rootwalla|DMU +1 Nishoba Brawler|DMU +1 Briar Hydra|DMU +1 Magnigoth Sentry|DMU +1 Territorial Maro|DMU +1 Yavimaya Sojourner|DMU +1 Gaea's Might|DMU +1 Bite Down|DMU +1 Slimefoot's Survey|DMU +1 The Weatherseed Treaty|DMU +1 Tangled Islet|DMU +1 Wooded Ridgeline|DMU +1 Radiant Grove|DMU +1 Haunted Mire|DMU +4 Forest|DMU|1 + +[DMU White Inserts] +1 Karn, Living Legacy|DMU +1 Anointed Peacekeeper|DMU +1 Archangel of Wrath|DMU +1 Danitha, Benalia's Hope|DMU +1 Defiler of Faith|DMU +1 Guardian of New Benalia|DMU +1 Leyline Binding|DMU +1 Temporary Lockdown|DMU +1 Urza Assembles the Titans|DMU +1 Valiant Veteran|DMU +1 Serra Paragon|DMU + +[DMU Blue Inserts] +1 Academy Loremaster|DMU +1 Aether Channeler|DMU +1 Defiler of Dreams|DMU +1 Haughty Djinn|DMU +1 Silver Scrutiny|DMU +1 The Phasing of Zhalfir|DMU +1 Vodalian Hexcatcher|DMU +1 Vodalian Mindsinger|DMU +1 Sphinx of Clear Skies|DMU +1 Vesuvan Duplimancy|DMU + +[DMU Black Inserts] +1 Weatherlight Compleated|DMU +1 Braids, Arisen Nightmare|DMU +1 Defiler of Flesh|DMU +1 Drag to the Bottom|DMU +1 Evolved Sleeper|DMU +1 Stronghold Arena|DMU +1 The Cruelty of Gix|DMU +1 The Raven Man|DMU +1 Liliana of the Veil|DMU +1 Sheoldred, the Apocalypse|DMU + +[DMU Red Inserts] +1 Chaotic Transformation|DMU +1 Defiler of Instinct|DMU +1 The Elder Dragon War|DMU +1 Keldon Flamesage|DMU +1 Radha's Firebrand|DMU +1 Rundvelt Hordemaster|DMU +1 Squee, Dubious Monarch|DMU +1 Temporal Firestorm|DMU +1 Jaya, Fiery Negotiator|DMU +1 Shivan Devastator|DMU + +[DMU Green Inserts] +1 Defiler of Vigor|DMU +1 Herd Migration|DMU +1 Leaf-Crowned Visionary|DMU +1 Llanowar Greenwidow|DMU +1 Llanowar Loamspeaker|DMU +1 Quirion Beastcaller|DMU +1 Threats Undetected|DMU +1 Urborg Lhurgoyf|DMU +1 Silverback Elder|DMU +1 The World Spell|DMU + +[BRO Infantry 1] +1 Rescue Retriever|BRO +1 Aeronaut Cavalry|BRO +1 Airlift Chaplain|BRO +1 Phalanx Vanguard|BRO +1 Warlord's Elite|BRO +1 Reconstructed Thopter|BRO +1 Recruitment Officer|BRO +1 Lay Down Arms|BRO +1 Recommission|BRO +1 Veteran's Powerblade|BRO +1 Static Net|BRO +8 Plains|BRO|1 + +[BRO Infantry 2] +1 Rescue Retriever|BRO +1 Aeronaut Cavalry|BRO +1 Ambush Paratrooper|BRO +1 Phalanx Vanguard|BRO +1 Thopter Architect|BRO +1 Warlord's Elite|BRO +1 Scrapwork Cohort|BRO +1 Yotian Frontliner|BRO +1 Lay Down Arms|BRO +1 Static Net|BRO +1 Veteran's Powerblade|BRO +8 Plains|BRO|1 + +[BRO Powerstones 1] +1 Geology Enthusiast|BRO +1 Koilos Roc|BRO +1 Third Path Savant|BRO +1 Thopter Mechanic|BRO +1 Urza, Powerstone Prodigy|BRO +1 Combat Courier|BRO +1 Spotter Thopter|BRO +1 Stern Lesson|BRO +1 Urza's Rebuff|BRO +1 Take Flight|BRO +1 Weakstone's Subjugation|BRO +8 Island|BRO|1 + +[BRO Powerstones 2] +1 Geology Enthusiast|BRO +1 Koilos Roc|BRO +1 Lat-Nam Adept|BRO +1 Thopter Mechanic|BRO +1 Urza, Powerstone Prodigy|BRO +1 Combat Courier|BRO +1 Hulking Metamorph|BRO +1 Stern Lesson|BRO +1 Involuntary Cooldown|BRO +1 Mightstone's Animation|BRO +1 Weakstone's Subjugation|BRO +8 Island|BRO|1 + +[BRO Unearthed 1] +1 Terror Ballista|BRO +1 Ravenous Gigamole|BRO +1 Thraxodemon|BRO +1 Ashnod's Harvester|BRO +1 Clay Revenant|BRO +1 Scrapwork Rager|BRO +1 Kill-Zone Acrobat|BRO +1 Ashnod's Intervention|BRO +1 Go for the Throat|BRO +1 Gruesome Realization|BRO +1 No One Left Behind|BRO +8 Swamp|BRO|1 + +[BRO Unearthed 2] +1 Terror Ballista|BRO +1 Gixian Skullflayer|BRO +1 Gnawing Vermin|BRO +1 Ravenous Gigamole|BRO +1 Thraxodemon|BRO +1 Ashnod's Harvester|BRO +1 Scrapwork Rager|BRO +1 Gruesome Realization|BRO +1 Overwhelming Remorse|BRO +1 Dredging Claw|BRO +1 Transmogrant Altar|BRO +8 Swamp|BRO|1 + +[BRO Welded 1] +1 Artificer's Dragon|BRO +1 Fallaji Chaindancer|BRO +1 Horned Stoneseeker|BRO +1 Mishra, Excavation Prodigy|BRO +1 Mishra's Juggernaut|BRO +1 Scrapwork Mutt|BRO +1 Fallaji Dragon Engine|BRO +1 Obliterating Bolt|BRO +1 Unleash Shell|BRO +1 Whirling Strike|BRO +1 Bitter Reunion|BRO +8 Mountain|BRO|1 + +[BRO Welded 2] +1 Artificer's Dragon|BRO +1 Horned Stoneseeker|BRO +1 Mishra, Excavation Prodigy|BRO +1 Scrapwork Mutt|BRO +1 Tomakul Scrapsmith|BRO +1 Fallaji Dragon Engine|BRO +1 Mishra's Juggernaut|BRO +1 Excavation Explosion|BRO +1 Mishra's Onslaught|BRO +1 Unleash Shell|BRO +1 Mishra's Research Desk|BRO +8 Mountain|BRO|1 + +[BRO Titanic 1] +1 Woodcaller Automaton|BRO +1 Argothian Opportunist|BRO +1 Blanchwood Prowler|BRO +1 Sarinth Steelseeker|BRO +1 Iron-Craw Crusher|BRO +1 Rust Goliath|BRO +1 Cradle Clearcutter|BRO +1 Giant Growth|BRO +1 Gaea's Gift|BRO +1 Shoot Down|BRO +1 Bushwhack|BRO +8 Forest|BRO|1 + +[BRO Titanic 2] +1 Woodcaller Automaton|BRO +1 Argothian Sprite|BRO +1 Cradle Clearcutter|BRO +1 Iron-Craw Crusher|BRO +1 Rust Goliath|BRO +1 Perimeter Patrol|BRO +1 Sarinth Steelseeker|BRO +1 Tawnos's Tinkering|BRO +1 Bushwhack|BRO +1 Shoot Down|BRO +1 Epic Confrontation|BRO +8 Forest|BRO|1 + +[BRO Black Inserts] +1 Ashnod, Flesh Mechanist|BRO +1 Diabolic Intent|BRO +1 Fateful Handoff|BRO +1 Gix's Command|BRO +1 Gixian Puppeteer|BRO +1 Hostile Negotiations|BRO +1 Misery's Shadow|BRO +1 Painful Quandary|BRO +1 Gix, Yawgmoth Praetor|BRO + +[BRO Blue Inserts] +1 Liberator, Urza's Battlethopter|BRO +1 Thran Spider|BRO +1 Drafna, Founder of Lat-Nam|BRO +1 Hurkyl's Final Meditation|BRO +1 Hurkyl, Master Wizard|BRO +1 Skystrike Officer|BRO +1 The Temporal Anchor|BRO +1 Urza's Command|BRO +1 One with the Multiverse|BRO +1 Teferi, Temporal Pilgrim|BRO + +[BRO Green Inserts] +1 Fade from History|BRO +1 Fauna Shaman|BRO +1 Gwenna, Eyes of Gaea|BRO +1 Teething Wurmlet|BRO +1 Titania's Command|BRO +1 Awaken the Woods|BRO +1 Titania, Voice of Gaea|BRO + +[BRO Red Inserts] +1 Brotherhood's End|BRO +1 Feldon, Ronom Excavator|BRO +1 Mechanized Warfare|BRO +1 Mishra's Command|BRO +1 Over the Top|BRO +1 Tyrant of Kher Ridges|BRO +1 Visions of Phyrexia|BRO +1 Draconic Destiny|BRO + +[BRO White Inserts] +1 Kayla's Command|BRO +1 Kayla's Reconstruction|BRO +1 Loran of the Third Path|BRO +1 Siege Veteran|BRO +1 Soul Partition|BRO +1 Tocasia's Welcome|BRO +1 In the Trenches|BRO +1 Myrel, Shield of Argive|BRO \ No newline at end of file