From cd296818af6d2e6b0c4d516a6748023ea6889526 Mon Sep 17 00:00:00 2001 From: jjayers99 <56438137+jjayers99@users.noreply.github.com> Date: Fri, 27 Jan 2023 16:41:00 -0500 Subject: [PATCH] DMU & BRO Jumpstart Added Jumpstart packs for DMU & BRO. Configured block data to be able to use them to play Sealed. Revamped Adventure starter logic to use packs rather than specific sheets to support use of these packs and any others that have random contents - Added ability to select Jumpstart source to use for Standard Adventure deck creation. --- .../src/forge/adventure/data/ConfigData.java | 2 + .../forge/adventure/scene/NewGameScene.java | 25 +- .../src/forge/adventure/util/CardUtil.java | 37 +- .../src/forge/adventure/util/Config.java | 12 +- .../src/forge/adventure/world/WorldSave.java | 5 +- forge-gui/res/adventure/Shandalar/config.json | 16 +- .../res/adventure/Shandalar/ui/new_game.json | 24 +- .../Shandalar/ui/new_game_portrait.json | 24 +- forge-gui/res/blockdata/blocks.txt | 2 + forge-gui/res/blockdata/boosters-special.txt | 24 ++ forge-gui/res/blockdata/printsheets.txt | 401 ++++++++++++++++++ 11 files changed, 545 insertions(+), 27 deletions(-) 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