Merge pull request #2332 from jjayers99/master

DMU & BRO Jumpstart
This commit is contained in:
Anthony Calosa
2023-01-28 07:18:35 +08:00
committed by GitHub
11 changed files with 545 additions and 27 deletions

View File

@@ -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;

View File

@@ -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<String> 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<String> 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());
}

View File

@@ -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<PrintSheet> jumpStartSheetsCandidates=null;
public static Deck generateDeck(GeneratedDeckData data)
static List<List<PaperCard>> packCandidates=null;
public static Deck generateDeck(GeneratedDeckData data, CardEdition starterEdition)
{
List<String> 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<data.jumpstartPacks.length;i++)
{
final byte targetColor = MagicColor.fromName(data.jumpstartPacks[i]);
String targetName;
switch (MagicColor.fromName(data.jumpstartPacks[i]))
switch (targetColor)
{
default:
case MagicColor.WHITE: targetName = "Plains"; break;
@@ -356,16 +359,18 @@ public class CardUtil {
case MagicColor.GREEN: targetName = "Forest"; break;
}
jumpStartSheetsCandidates=new ArrayList<>();
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<PaperCard> 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;
}

View File

@@ -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:

View File

@@ -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()));

View File

@@ -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)"
]
}

View File

@@ -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
}
]

View File

@@ -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
}
]
}

View File

@@ -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

View File

@@ -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")

View File

@@ -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