diff --git a/Mage.Client/pom.xml b/Mage.Client/pom.xml index 9ab3cec792..7c96a42190 100644 --- a/Mage.Client/pom.xml +++ b/Mage.Client/pom.xml @@ -161,6 +161,11 @@ prettytime 4.0.2.Final + + org.unbescape + unbescape + 1.1.6.RELEASE + diff --git a/Mage.Client/sounds/FeedbackNeeded.wav b/Mage.Client/sounds/FeedbackNeeded.wav new file mode 100644 index 0000000000..be64080145 Binary files /dev/null and b/Mage.Client/sounds/FeedbackNeeded.wav differ diff --git a/Mage.Client/src/main/java/mage/client/MageFrame.java b/Mage.Client/src/main/java/mage/client/MageFrame.java index 520014b62d..b65dfe74f3 100644 --- a/Mage.Client/src/main/java/mage/client/MageFrame.java +++ b/Mage.Client/src/main/java/mage/client/MageFrame.java @@ -200,9 +200,17 @@ public class MageFrame extends javax.swing.JFrame implements MageClient { TConfig config = TConfig.current(); config.setArchiveDetector(new TArchiveDetector("zip")); config.setAccessPreference(FsAccessOption.STORE, true); + try { UIManager.put("desktop", new Color(0, 0, 0, 0)); UIManager.setLookAndFeel("javax.swing.plaf.nimbus.NimbusLookAndFeel"); + + UIManager.put("nimbusBlueGrey", PreferencesDialog.getCurrentTheme().getNimbusBlueGrey()); // buttons, scrollbar background, disabled inputs + UIManager.put("control", PreferencesDialog.getCurrentTheme().getControl()); // window bg + UIManager.put("nimbusLightBackground", PreferencesDialog.getCurrentTheme().getNimbusLightBackground()); // inputs, table rows + UIManager.put("info", PreferencesDialog.getCurrentTheme().getInfo()); // tooltips + UIManager.put("nimbusBase", PreferencesDialog.getCurrentTheme().getNimbusBase()); // title bars, scrollbar foreground + //UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); // stop JSplitPane from eating F6 and F8 or any other function keys { @@ -445,16 +453,19 @@ public class MageFrame extends javax.swing.JFrame implements MageClient { } } + // Sets background for login screen private void setBackground() { if (liteMode || grayMode) { return; } - String filename = "/background.jpg"; + try { - if (Plugins.instance.isThemePluginLoaded()) { + // If user has custom background, use that, otherwise, use theme background + if (Plugins.instance.isThemePluginLoaded() && + !PreferencesDialog.getCachedValue(PreferencesDialog.KEY_BACKGROUND_IMAGE_DEFAULT, "true").equals("true")) { backgroundPane = (ImagePanel) Plugins.instance.updateTablePanel(new HashMap<>()); } else { - InputStream is = this.getClass().getResourceAsStream(filename); + InputStream is = this.getClass().getResourceAsStream(PreferencesDialog.getCurrentTheme().getLoginBackgroundPath()); BufferedImage background = ImageIO.read(is); backgroundPane = new ImagePanel(background, ImagePanelStyle.SCALED); } @@ -1020,6 +1031,10 @@ public class MageFrame extends javax.swing.JFrame implements MageClient { .addComponent(desktopPane, javax.swing.GroupLayout.DEFAULT_SIZE, 145, Short.MAX_VALUE)) ); + if (PreferencesDialog.getCurrentTheme().getMageToolbar() != null) { + mageToolbar.getParent().setBackground(PreferencesDialog.getCurrentTheme().getMageToolbar()); + } + pack(); }// //GEN-END:initComponents diff --git a/Mage.Client/src/main/java/mage/client/components/KeyboundButton.java b/Mage.Client/src/main/java/mage/client/components/KeyboundButton.java index c58ae3cad2..0054cb51d7 100644 --- a/Mage.Client/src/main/java/mage/client/components/KeyboundButton.java +++ b/Mage.Client/src/main/java/mage/client/components/KeyboundButton.java @@ -12,41 +12,48 @@ import mage.client.dialog.PreferencesDialog; */ public class KeyboundButton extends JButton { - private final String text; - private static final Font keyFont = new Font(Font.SANS_SERIF, Font.BOLD, 13); + private final String text; + private static final Font keyFont = new Font(Font.SANS_SERIF, Font.BOLD, 13); - private boolean tinting = false; + private boolean tinting = false; - public KeyboundButton(String key) { - text = PreferencesDialog.getCachedKeyText(key); - } + public KeyboundButton(String key, boolean drawText) { + if (drawText) { + text = PreferencesDialog.getCachedKeyText(key); + } else { + text = ""; + } + } - @Override - protected void paintComponent(Graphics g) { - if (ui != null && g != null) { - Graphics sg = g.create(); - try { - ui.update(sg, this); - if (tinting) { - sg.setColor(new Color(0, 0, 0, 32)); - sg.fillRoundRect(2, 2, getWidth() - 4 , getHeight() - 4, 6, 6); - } - sg.setColor(tinting ? Color.lightGray : Color.white); - sg.setFont(keyFont); + @Override + protected void paintComponent(Graphics g) { + if (ui != null && g != null) { + Graphics sg = g.create(); + try { + ui.update(sg, this); - int textWidth = sg.getFontMetrics(keyFont).stringWidth(text); - int centerX = (getWidth() - textWidth) / 2; + if (tinting) { + sg.setColor(new Color(0, 0, 0, 32)); + sg.fillRoundRect(2, 2, getWidth() - 4 , getHeight() - 4, 6, 6); + } + sg.setColor(tinting ? Color.lightGray : Color.white); - sg.drawString(text, centerX, 28); - } finally { - sg.dispose(); - } - } - } + if (!text.isEmpty()) { + sg.setFont(keyFont); - public void setTint(boolean tinting) { - this.tinting = tinting; - repaint(); - } + int textWidth = sg.getFontMetrics(keyFont).stringWidth(text); + int centerX = (getWidth() - textWidth) / 2; + sg.drawString(text, centerX, 28); + } + } finally { + sg.dispose(); + } + } + } + + public void setTint(boolean tinting) { + this.tinting = tinting; + repaint(); + } } diff --git a/Mage.Client/src/main/java/mage/client/components/LegalityLabel.java b/Mage.Client/src/main/java/mage/client/components/LegalityLabel.java new file mode 100644 index 0000000000..ab711cc42a --- /dev/null +++ b/Mage.Client/src/main/java/mage/client/components/LegalityLabel.java @@ -0,0 +1,180 @@ +package mage.client.components; + +import mage.cards.decks.Deck; +import mage.cards.decks.DeckValidator; +import mage.cards.decks.importer.DeckImporter; +import org.unbescape.html.HtmlEscape; +import org.unbescape.html.HtmlEscapeLevel; +import org.unbescape.html.HtmlEscapeType; + +import javax.swing.*; +import java.awt.*; +import java.io.File; +import java.util.Map; + +/** + * @author Elandril + */ +public class LegalityLabel extends JLabel { + + protected static final Color COLOR_UNKNOWN = new Color(174, 174, 174); + protected static final Color COLOR_LEGAL = new Color(117, 152, 110); + protected static final Color COLOR_NOT_LEGAL = new Color(191, 84, 74); + protected static final Color COLOR_TEXT = new Color(255, 255, 255); + protected static final Dimension DIM_MINIMUM = new Dimension(75, 25); + protected static final Dimension DIM_MAXIMUM = new Dimension(150, 75); + protected static final Dimension DIM_PREFERRED = new Dimension(75, 25); + + protected Deck currentDeck; + protected String errorMessage; + protected DeckValidator validator; + + /** + * Creates a LegalityLabel instance with the specified text + * and the given DeckValidator. + * + * @param text The text to be displayed by the label. + * @param validator The DeckValidator to check against. + */ + public LegalityLabel(String text, DeckValidator validator) { + super(text); + this.validator = validator; + + setBackground(COLOR_UNKNOWN); + setForeground(COLOR_TEXT); + setHorizontalAlignment(SwingConstants.CENTER); + setMinimumSize(DIM_MINIMUM); + setMaximumSize(DIM_MAXIMUM); + setName(text); // NOI18N + setOpaque(true); + setPreferredSize(DIM_PREFERRED); + } + + /** + * Creates a LegalityLabel instance with the given DeckValidator and uses its + * shortName as the text. + * + * @param validator The DeckValidator to check against. + */ + public LegalityLabel(DeckValidator validator) { + this(validator.getShortName(), validator); + } + + /** + * Creates a LegalityLabel instance with no DeckValidator or text. + * This is used by the Netbeans GUI Editor. + */ + public LegalityLabel() { + super(); + + setBackground(COLOR_UNKNOWN); + setForeground(COLOR_TEXT); + setHorizontalAlignment(SwingConstants.CENTER); + setMinimumSize(DIM_MINIMUM); + setMaximumSize(DIM_MAXIMUM); + setOpaque(true); + setPreferredSize(DIM_PREFERRED); + } + + public String getErrorMessage() { + return errorMessage; + } + + public DeckValidator getValidator() { + return validator; + } + + public void setValidator(DeckValidator validator) { + this.validator = validator; + revalidateDeck(); + } + + protected String escapeHtml(String string) { + return HtmlEscape.escapeHtml(string, HtmlEscapeType.HTML4_NAMED_REFERENCES_DEFAULT_TO_HEXA, HtmlEscapeLevel.LEVEL_0_ONLY_MARKUP_SIGNIFICANT_EXCEPT_APOS); + } + + protected String formatInvalidTooltip(Map invalid) { + return invalid.entrySet().stream() + .sorted(Map.Entry.comparingByKey()) + .reduce("

Deck is INVALID

The following problems have been found:
", + (str, entry) -> String.format("%s", str, escapeHtml(entry.getKey()), escapeHtml(entry.getValue())), String::concat) + + "
%s%s
"; + } + + private String appendErrorMessage(String string) { + if (errorMessage.isEmpty()) + return string; + if (string.contains("")) { + return string.replaceFirst("(()?)", String.format("

The following errors occurred while loading the deck:
%s$1", escapeHtml(errorMessage))); + } + return string.concat("\n\nThe following errors occurred while loading the deck:\n" + errorMessage); + } + + public void showState(Color color) { + setBackground(color); + } + + public void showState(Color color, String tooltip) { + setBackground(color); + setToolTipText(appendErrorMessage(tooltip)); + } + + public void showStateUnknown(String tooltip) { + showState(COLOR_UNKNOWN, tooltip); + } + + public void showStateLegal(String tooltip) { + showState(COLOR_LEGAL, tooltip); + } + + public void showStateNotLegal(String tooltip) { + showState(COLOR_NOT_LEGAL, tooltip); + } + + public void validateDeck(Deck deck) { + errorMessage = ""; + currentDeck = deck; + if (deck == null) { + showStateUnknown("No deck loaded!"); + return; + } + if (validator == null) { + showStateUnknown("No deck type selected!"); + return; + } + try { + if (validator.validate(deck)) { + showStateLegal("Deck is VALID"); + } else { + showStateNotLegal(formatInvalidTooltip(validator.getInvalid())); + } + } catch (Exception e) { + showStateUnknown(String.format("Deck could not be validated!
The following error occurred while validating this deck:
%s", escapeHtml(e.getMessage()))); + } + } + + public void validateDeck(File deckFile) { + deckFile = deckFile.getAbsoluteFile(); + if (!deckFile.exists()) { + errorMessage = String.format("Deck file '%s' does not exist.", deckFile.getAbsolutePath()); + showStateUnknown("No Deck loaded!"); + return; + } + try { + StringBuilder errorMessages = new StringBuilder(); + Deck deck = Deck.load(DeckImporter.importDeckFromFile(deckFile.getAbsolutePath(), errorMessages), true, true); + errorMessage = errorMessages.toString(); + validateDeck(deck); + } catch (Exception ex) { + errorMessage = String.format("Error importing deck from file '%s'!", deckFile.getAbsolutePath()); + } + } + + public void revalidateDeck() { + validateDeck(currentDeck); + } + + public void validateDeck(String deckFile) { + validateDeck(new File(deckFile)); + } +} diff --git a/Mage.Client/src/main/java/mage/client/deckeditor/CardSelector.java b/Mage.Client/src/main/java/mage/client/deckeditor/CardSelector.java index cd81d88493..2125c6be45 100644 --- a/Mage.Client/src/main/java/mage/client/deckeditor/CardSelector.java +++ b/Mage.Client/src/main/java/mage/client/deckeditor/CardSelector.java @@ -10,6 +10,7 @@ import mage.ObjectColor; import mage.cards.Card; import mage.cards.ExpansionSet; import mage.cards.Sets; +import mage.cards.decks.PennyDreadfulLegalityUtil; import mage.cards.repository.*; import mage.client.MageFrame; import mage.client.cards.*; @@ -421,9 +422,8 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene try { java.util.List filteredCards = new ArrayList<>(); - boolean chkPD = chkPennyDreadful.isSelected(); - if (chkPD) { - generatePennyDreadfulHash(); + if (chkPennyDreadful.isSelected() && pdAllowed.isEmpty()) { + pdAllowed.putAll(PennyDreadfulLegalityUtil.getLegalCardList()); } if (limited) { @@ -437,7 +437,7 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene for (CardInfo cardInfo : foundCards) { Card card = cardInfo.getMockCard(); if (filter.match(card, null)) { - if (chkPD) { + if (chkPennyDreadful.isSelected()) { if (!pdAllowed.containsKey(card.getName())) { continue; } @@ -478,22 +478,6 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene } } - public void generatePennyDreadfulHash() { - if (pdAllowed.size() > 0) { - return; - } - - Properties properties = new Properties(); - try { - properties.load(CardSelector.class.getResourceAsStream("pennydreadful.properties")); - } catch (Exception e) { - e.printStackTrace(); - } - for (final Entry entry : properties.entrySet()) { - pdAllowed.put((String) entry.getKey(), 1); - } - } - private void reloadSetsCombobox() { DefaultComboBoxModel model = new DefaultComboBoxModel<>(ConstructedFormats.getTypes()); cbExpansionSet.setModel(model); diff --git a/Mage.Client/src/main/java/mage/client/deckeditor/DeckEditorPanel.form b/Mage.Client/src/main/java/mage/client/deckeditor/DeckEditorPanel.form index 78ffbeab4d..1282c8ff13 100644 --- a/Mage.Client/src/main/java/mage/client/deckeditor/DeckEditorPanel.form +++ b/Mage.Client/src/main/java/mage/client/deckeditor/DeckEditorPanel.form @@ -18,7 +18,7 @@ - + @@ -26,7 +26,7 @@ - + @@ -60,12 +60,12 @@ - - - - - - + + + + + + @@ -73,9 +73,11 @@ - + + + - + @@ -112,7 +114,7 @@ - + @@ -158,7 +160,7 @@ - + @@ -215,7 +217,7 @@ - + @@ -272,7 +274,7 @@ - + @@ -329,7 +331,7 @@ - + @@ -392,15 +394,20 @@ - + + + - + - + + + + @@ -420,6 +427,16 @@ + + + + + + + + + + @@ -435,7 +452,7 @@ - + @@ -470,6 +487,20 @@ + + + + + + + + + + + + + + diff --git a/Mage.Client/src/main/java/mage/client/deckeditor/DeckEditorPanel.java b/Mage.Client/src/main/java/mage/client/deckeditor/DeckEditorPanel.java index 18efa71393..3b9c00a916 100644 --- a/Mage.Client/src/main/java/mage/client/deckeditor/DeckEditorPanel.java +++ b/Mage.Client/src/main/java/mage/client/deckeditor/DeckEditorPanel.java @@ -43,7 +43,7 @@ import static mage.cards.decks.DeckFormats.XMAGE; import static mage.cards.decks.DeckFormats.XMAGE_INFO; /** - * @author BetaSteward_at_googlemail.com, JayDi85 + * @author BetaSteward_at_googlemail.com, JayDi85, Elandril */ public class DeckEditorPanel extends javax.swing.JPanel { @@ -858,9 +858,11 @@ public class DeckEditorPanel extends javax.swing.JPanel { btnSubmitTimer = new javax.swing.JButton(); panelDeckLands = new javax.swing.JPanel(); btnAddLand = new javax.swing.JButton(); + btnLegality = new javax.swing.JButton(); panelDeckExit = new javax.swing.JPanel(); btnExit = new javax.swing.JButton(); txtTimeRemaining = new javax.swing.JTextField(); + deckLegalityDisplay = new mage.client.deckeditor.DeckLegalityPanel(); panelRight.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT); panelRight.setResizeWeight(0.5); @@ -879,21 +881,21 @@ public class DeckEditorPanel extends javax.swing.JPanel { javax.swing.GroupLayout panelDeckNameLayout = new javax.swing.GroupLayout(panelDeckName); panelDeckName.setLayout(panelDeckNameLayout); panelDeckNameLayout.setHorizontalGroup( - panelDeckNameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(panelDeckNameLayout.createSequentialGroup() - .addContainerGap() - .addComponent(lblDeckName) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(txtDeckName, javax.swing.GroupLayout.DEFAULT_SIZE, 175, Short.MAX_VALUE) - .addContainerGap()) + panelDeckNameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(panelDeckNameLayout.createSequentialGroup() + .addContainerGap() + .addComponent(lblDeckName) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(txtDeckName, javax.swing.GroupLayout.DEFAULT_SIZE, 184, Short.MAX_VALUE) + .addContainerGap()) ); panelDeckNameLayout.setVerticalGroup( - panelDeckNameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(panelDeckNameLayout.createSequentialGroup() - .addGroup(panelDeckNameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(txtDeckName, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(lblDeckName)) - .addGap(0, 0, 0)) + panelDeckNameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(panelDeckNameLayout.createSequentialGroup() + .addGroup(panelDeckNameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(txtDeckName, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(lblDeckName)) + .addGap(0, 0, 0)) ); panelDeck.add(panelDeckName); @@ -922,21 +924,21 @@ public class DeckEditorPanel extends javax.swing.JPanel { javax.swing.GroupLayout panelDeckCreateLayout = new javax.swing.GroupLayout(panelDeckCreate); panelDeckCreate.setLayout(panelDeckCreateLayout); panelDeckCreateLayout.setHorizontalGroup( - panelDeckCreateLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(panelDeckCreateLayout.createSequentialGroup() - .addContainerGap() - .addComponent(btnNew, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(btnGenDeck, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE) - .addContainerGap(40, Short.MAX_VALUE)) + panelDeckCreateLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(panelDeckCreateLayout.createSequentialGroup() + .addContainerGap() + .addComponent(btnNew, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(btnGenDeck, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap(49, Short.MAX_VALUE)) ); panelDeckCreateLayout.setVerticalGroup( - panelDeckCreateLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(panelDeckCreateLayout.createSequentialGroup() - .addGap(5, 5, 5) - .addGroup(panelDeckCreateLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(btnGenDeck, javax.swing.GroupLayout.DEFAULT_SIZE, 30, Short.MAX_VALUE) - .addComponent(btnNew, javax.swing.GroupLayout.DEFAULT_SIZE, 30, Short.MAX_VALUE))) + panelDeckCreateLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(panelDeckCreateLayout.createSequentialGroup() + .addGap(5, 5, 5) + .addGroup(panelDeckCreateLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(btnGenDeck, javax.swing.GroupLayout.DEFAULT_SIZE, 30, Short.MAX_VALUE) + .addComponent(btnNew, javax.swing.GroupLayout.DEFAULT_SIZE, 30, Short.MAX_VALUE))) ); panelDeck.add(panelDeckCreate); @@ -965,21 +967,21 @@ public class DeckEditorPanel extends javax.swing.JPanel { javax.swing.GroupLayout panelDeckLoadLayout = new javax.swing.GroupLayout(panelDeckLoad); panelDeckLoad.setLayout(panelDeckLoadLayout); panelDeckLoadLayout.setHorizontalGroup( - panelDeckLoadLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(panelDeckLoadLayout.createSequentialGroup() - .addContainerGap() - .addComponent(btnLoad, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(btnImport, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE) - .addContainerGap(40, Short.MAX_VALUE)) + panelDeckLoadLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(panelDeckLoadLayout.createSequentialGroup() + .addContainerGap() + .addComponent(btnLoad, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(btnImport, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap(49, Short.MAX_VALUE)) ); panelDeckLoadLayout.setVerticalGroup( - panelDeckLoadLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(panelDeckLoadLayout.createSequentialGroup() - .addContainerGap() - .addGroup(panelDeckLoadLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(btnLoad, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE) - .addComponent(btnImport, javax.swing.GroupLayout.DEFAULT_SIZE, 30, Short.MAX_VALUE))) + panelDeckLoadLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(panelDeckLoadLayout.createSequentialGroup() + .addContainerGap() + .addGroup(panelDeckLoadLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(btnLoad, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE) + .addComponent(btnImport, javax.swing.GroupLayout.DEFAULT_SIZE, 30, Short.MAX_VALUE))) ); panelDeck.add(panelDeckLoad); @@ -1008,21 +1010,21 @@ public class DeckEditorPanel extends javax.swing.JPanel { javax.swing.GroupLayout panelDeckSaveLayout = new javax.swing.GroupLayout(panelDeckSave); panelDeckSave.setLayout(panelDeckSaveLayout); panelDeckSaveLayout.setHorizontalGroup( - panelDeckSaveLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(panelDeckSaveLayout.createSequentialGroup() - .addContainerGap() - .addComponent(btnSave, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(btnExport, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE) - .addContainerGap(40, Short.MAX_VALUE)) + panelDeckSaveLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(panelDeckSaveLayout.createSequentialGroup() + .addContainerGap() + .addComponent(btnSave, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(btnExport, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap(49, Short.MAX_VALUE)) ); panelDeckSaveLayout.setVerticalGroup( - panelDeckSaveLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(panelDeckSaveLayout.createSequentialGroup() - .addContainerGap() - .addGroup(panelDeckSaveLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(btnSave, javax.swing.GroupLayout.DEFAULT_SIZE, 30, Short.MAX_VALUE) - .addComponent(btnExport, javax.swing.GroupLayout.DEFAULT_SIZE, 30, Short.MAX_VALUE))) + panelDeckSaveLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(panelDeckSaveLayout.createSequentialGroup() + .addContainerGap() + .addGroup(panelDeckSaveLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(btnSave, javax.swing.GroupLayout.DEFAULT_SIZE, 30, Short.MAX_VALUE) + .addComponent(btnExport, javax.swing.GroupLayout.DEFAULT_SIZE, 30, Short.MAX_VALUE))) ); panelDeck.add(panelDeckSave); @@ -1053,24 +1055,24 @@ public class DeckEditorPanel extends javax.swing.JPanel { javax.swing.GroupLayout panelDeckDraftLayout = new javax.swing.GroupLayout(panelDeckDraft); panelDeckDraft.setLayout(panelDeckDraftLayout); panelDeckDraftLayout.setHorizontalGroup( - panelDeckDraftLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(panelDeckDraftLayout.createSequentialGroup() - .addContainerGap() - .addComponent(btnSubmit, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(btnSubmitTimer, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE) - .addContainerGap(40, Short.MAX_VALUE)) + panelDeckDraftLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(panelDeckDraftLayout.createSequentialGroup() + .addContainerGap() + .addComponent(btnSubmit, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(btnSubmitTimer, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap(49, Short.MAX_VALUE)) ); panelDeckDraftLayout.setVerticalGroup( - panelDeckDraftLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(panelDeckDraftLayout.createSequentialGroup() - .addContainerGap() - .addGroup(panelDeckDraftLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(panelDeckDraftLayout.createSequentialGroup() - .addComponent(btnSubmit, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(0, 0, Short.MAX_VALUE)) - .addComponent(btnSubmitTimer, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)) - .addGap(0, 0, 0)) + panelDeckDraftLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(panelDeckDraftLayout.createSequentialGroup() + .addContainerGap() + .addGroup(panelDeckDraftLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(panelDeckDraftLayout.createSequentialGroup() + .addComponent(btnSubmit, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(0, 0, Short.MAX_VALUE)) + .addComponent(btnSubmitTimer, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)) + .addGap(0, 0, 0)) ); panelDeck.add(panelDeckDraft); @@ -1087,21 +1089,34 @@ public class DeckEditorPanel extends javax.swing.JPanel { } }); + btnLegality.setText("Validate"); + btnLegality.setIconTextGap(2); + btnLegality.setName("btnLegality"); // NOI18N + btnLegality.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + btnLegalityActionPerformed(evt); + } + }); + javax.swing.GroupLayout panelDeckLandsLayout = new javax.swing.GroupLayout(panelDeckLands); panelDeckLands.setLayout(panelDeckLandsLayout); panelDeckLandsLayout.setHorizontalGroup( - panelDeckLandsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(panelDeckLandsLayout.createSequentialGroup() - .addContainerGap() - .addComponent(btnAddLand, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE) - .addContainerGap(146, Short.MAX_VALUE)) + panelDeckLandsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(panelDeckLandsLayout.createSequentialGroup() + .addContainerGap() + .addComponent(btnAddLand, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(btnLegality, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap(49, Short.MAX_VALUE)) ); panelDeckLandsLayout.setVerticalGroup( - panelDeckLandsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(panelDeckLandsLayout.createSequentialGroup() - .addContainerGap() - .addComponent(btnAddLand, javax.swing.GroupLayout.DEFAULT_SIZE, 30, Short.MAX_VALUE) - .addGap(0, 0, 0)) + panelDeckLandsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelDeckLandsLayout.createSequentialGroup() + .addContainerGap() + .addGroup(panelDeckLandsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(btnAddLand, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(btnLegality, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addGap(0, 0, 0)) ); panelDeck.add(panelDeckLands); @@ -1125,57 +1140,65 @@ public class DeckEditorPanel extends javax.swing.JPanel { javax.swing.GroupLayout panelDeckExitLayout = new javax.swing.GroupLayout(panelDeckExit); panelDeckExit.setLayout(panelDeckExitLayout); panelDeckExitLayout.setHorizontalGroup( - panelDeckExitLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(panelDeckExitLayout.createSequentialGroup() - .addContainerGap() - .addComponent(btnExit, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(txtTimeRemaining, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE) - .addContainerGap(40, Short.MAX_VALUE)) + panelDeckExitLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(panelDeckExitLayout.createSequentialGroup() + .addContainerGap() + .addComponent(btnExit, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(txtTimeRemaining, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap(49, Short.MAX_VALUE)) ); panelDeckExitLayout.setVerticalGroup( - panelDeckExitLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelDeckExitLayout.createSequentialGroup() - .addGap(0, 11, Short.MAX_VALUE) - .addGroup(panelDeckExitLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(btnExit, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(txtTimeRemaining, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE))) + panelDeckExitLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelDeckExitLayout.createSequentialGroup() + .addGap(0, 11, Short.MAX_VALUE) + .addGroup(panelDeckExitLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(btnExit, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(txtTimeRemaining, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE))) ); panelDeck.add(panelDeckExit); + deckLegalityDisplay.setMaximumSize(new java.awt.Dimension(245, 155)); + deckLegalityDisplay.setMinimumSize(new java.awt.Dimension(85, 155)); + deckLegalityDisplay.setOpaque(false); + deckLegalityDisplay.setVisible(false); + javax.swing.GroupLayout panelLeftLayout = new javax.swing.GroupLayout(panelLeft); panelLeft.setLayout(panelLeftLayout); panelLeftLayout.setHorizontalGroup( - panelLeftLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(panelLeftLayout.createSequentialGroup() - .addGap(0, 0, 0) - .addGroup(panelLeftLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(panelDeck, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(bigCard, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))) + panelLeftLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(panelDeck, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(bigCard, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelLeftLayout.createSequentialGroup() + .addGap(0, 0, Short.MAX_VALUE) + .addComponent(deckLegalityDisplay, javax.swing.GroupLayout.PREFERRED_SIZE, 245, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(0, 0, Short.MAX_VALUE)) ); panelLeftLayout.setVerticalGroup( - panelLeftLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(panelLeftLayout.createSequentialGroup() - .addComponent(panelDeck, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(bigCard, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addContainerGap()) + panelLeftLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(panelLeftLayout.createSequentialGroup() + .addComponent(panelDeck, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(62, 62, 62) + .addComponent(deckLegalityDisplay, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGap(63, 63, 63) + .addComponent(bigCard, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap()) ); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addComponent(panelLeft, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(0, 0, 0) - .addComponent(panelRight, javax.swing.GroupLayout.DEFAULT_SIZE, 890, Short.MAX_VALUE)) + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addComponent(panelLeft, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(panelRight, javax.swing.GroupLayout.PREFERRED_SIZE, 890, Short.MAX_VALUE)) ); layout.setVerticalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(panelLeft, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(panelRight, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 808, Short.MAX_VALUE) + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(panelLeft, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(panelRight, javax.swing.GroupLayout.Alignment.TRAILING) ); }// //GEN-END:initComponents @@ -1368,6 +1391,11 @@ public class DeckEditorPanel extends javax.swing.JPanel { exportChoose(evt); }//GEN-LAST:event_btnExportActionPerformed + private void btnLegalityActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnLegalityActionPerformed + this.deckLegalityDisplay.setVisible(true); + this.deckLegalityDisplay.validateDeck(deck); + }//GEN-LAST:event_btnLegalityActionPerformed + // Variables declaration - do not modify//GEN-BEGIN:variables private mage.client.cards.BigCard bigCard; @@ -1376,6 +1404,7 @@ public class DeckEditorPanel extends javax.swing.JPanel { private javax.swing.JButton btnExport; private javax.swing.JButton btnGenDeck; private javax.swing.JButton btnImport; + private javax.swing.JButton btnLegality; private javax.swing.JButton btnLoad; private javax.swing.JButton btnNew; private javax.swing.JButton btnSave; @@ -1387,6 +1416,7 @@ public class DeckEditorPanel extends javax.swing.JPanel { */ private mage.client.deckeditor.CardSelector cardSelector; private mage.client.deckeditor.DeckArea deckArea; + private mage.client.deckeditor.DeckLegalityPanel deckLegalityDisplay; private javax.swing.JLabel lblDeckName; private javax.swing.JPanel panelDeck; private javax.swing.JPanel panelDeckCreate; diff --git a/Mage.Client/src/main/java/mage/client/deckeditor/DeckLegalityPanel.form b/Mage.Client/src/main/java/mage/client/deckeditor/DeckLegalityPanel.form new file mode 100644 index 0000000000..4954e9b43d --- /dev/null +++ b/Mage.Client/src/main/java/mage/client/deckeditor/DeckLegalityPanel.form @@ -0,0 +1,97 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/Mage.Client/src/main/java/mage/client/deckeditor/DeckLegalityPanel.java b/Mage.Client/src/main/java/mage/client/deckeditor/DeckLegalityPanel.java new file mode 100644 index 0000000000..c1f3e47ef0 --- /dev/null +++ b/Mage.Client/src/main/java/mage/client/deckeditor/DeckLegalityPanel.java @@ -0,0 +1,111 @@ +package mage.client.deckeditor; + +import java.util.*; +import java.util.stream.Stream; + +import mage.cards.decks.Deck; +import mage.cards.decks.DeckValidator; +import mage.client.components.LegalityLabel; +import mage.deck.*; + + +/** + * @author Elandril + */ +public class DeckLegalityPanel extends javax.swing.JPanel { + /** + * Creates new form DeckLegalityPanel + */ + public DeckLegalityPanel() { + initComponents(); + initDeckLabels(); + } + + /** + * This method is called from within the constructor to initialize the form. + * WARNING: Do NOT modify this code. The content of this method is always + * regenerated by the Form Editor. + */ + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() { + + previewUnknown = new javax.swing.JLabel(); + previewLegal = new javax.swing.JLabel(); + previewNotLegal = new javax.swing.JLabel(); + + setMinimumSize(new java.awt.Dimension(85, 35)); + setName("DeckLegalityPanel"); // NOI18N + setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEADING)); + + previewUnknown.setBackground(new java.awt.Color(174, 174, 174)); + previewUnknown.setForeground(new java.awt.Color(255, 255, 255)); + previewUnknown.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); + previewUnknown.setText("Unknown"); + previewUnknown.setMaximumSize(new java.awt.Dimension(150, 50)); + previewUnknown.setMinimumSize(new java.awt.Dimension(75, 25)); + previewUnknown.setName("previewUnknown"); // NOI18N + previewUnknown.setOpaque(true); + previewUnknown.setPreferredSize(new java.awt.Dimension(75, 25)); + add(previewUnknown); + + previewLegal.setBackground(new java.awt.Color(117, 152, 110)); + previewLegal.setForeground(new java.awt.Color(255, 255, 255)); + previewLegal.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); + previewLegal.setText("Legal"); + previewLegal.setMaximumSize(new java.awt.Dimension(150, 50)); + previewLegal.setMinimumSize(new java.awt.Dimension(75, 25)); + previewLegal.setName("previewLegal"); // NOI18N + previewLegal.setOpaque(true); + previewLegal.setPreferredSize(new java.awt.Dimension(75, 25)); + add(previewLegal); + + previewNotLegal.setBackground(new java.awt.Color(191, 84, 74)); + previewNotLegal.setForeground(new java.awt.Color(255, 255, 255)); + previewNotLegal.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); + previewNotLegal.setText("Not Legal"); + previewNotLegal.setMaximumSize(new java.awt.Dimension(150, 50)); + previewNotLegal.setMinimumSize(new java.awt.Dimension(75, 25)); + previewNotLegal.setName("previewNotLegal"); // NOI18N + previewNotLegal.setOpaque(true); + previewNotLegal.setPreferredSize(new java.awt.Dimension(75, 25)); + add(previewNotLegal); + }// //GEN-END:initComponents + + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JLabel previewLegal; + private javax.swing.JLabel previewNotLegal; + private javax.swing.JLabel previewUnknown; + // End of variables declaration//GEN-END:variables + + private void initDeckLabels() { + remove(previewUnknown); + remove(previewLegal); + remove(previewNotLegal); + + Stream.of( + new Standard(), new Pioneer(), new Modern(), new Pauper(), new HistoricalType2(), + new Legacy(), new Vintage(), new Eternal(), new Frontier(), new Momir(), + new Commander(), new Brawl(), new Oathbreaker(), new PennyDreadfulCommander(), new TinyLeaders() + ).forEach(this::addLegalityLabel); + + revalidate(); + repaint(); + } + + protected LegalityLabel addLegalityLabel(DeckValidator validator) { + LegalityLabel label = new LegalityLabel(validator); + add(label); + + return label; + } + + public void validateDeck(Deck deck) { + Arrays.stream(getComponents()) + .filter(LegalityLabel.class::isInstance) + .map(LegalityLabel.class::cast) + .forEach(label -> label.validateDeck(deck)); + } + +} diff --git a/Mage.Client/src/main/java/mage/client/dialog/GameEndDialog.java b/Mage.Client/src/main/java/mage/client/dialog/GameEndDialog.java index 94920b36ef..ad7f4abc7a 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/GameEndDialog.java +++ b/Mage.Client/src/main/java/mage/client/dialog/GameEndDialog.java @@ -31,15 +31,12 @@ */ public class GameEndDialog extends MageDialog { - private final DateFormat df = DateFormat.getDateTimeInstance(); - /** * Creates new form GameEndDialog * * @param gameEndView */ public GameEndDialog(GameEndView gameEndView) { - initComponents(); this.modal = true; @@ -47,7 +44,14 @@ pnlText.setBackground(new Color(240, 240, 240, 140)); Rectangle r = new Rectangle(610, 250); - Image image = ImageHelper.getImageFromResources(gameEndView.hasWon() ? "/game_won.jpg" : "/game_lost.jpg"); + + Image image; + if (gameEndView.hasWon()) { + image = ImageHelper.getImageFromResources(PreferencesDialog.getCurrentTheme().getWinlossPath("game_won.jpg")); + } else { + image = ImageHelper.getImageFromResources(PreferencesDialog.getCurrentTheme().getWinlossPath("game_lost.jpg")); + } + BufferedImage imageResult = ImageHelper.getResizedImage(BufferedImageBuilder.bufferImage(image, BufferedImage.TYPE_INT_ARGB), r); ImageIcon icon = new ImageIcon(imageResult); lblResultImage.setIcon(icon); @@ -61,6 +65,8 @@ this.saveGameLog(gameEndView); } + DateFormat df = DateFormat.getDateTimeInstance(); + // game duration txtDurationGame.setText(" " + Format.getDuration(gameEndView.getStartTime(), gameEndView.getEndTime())); txtDurationGame.setToolTipText(new StringBuilder(df.format(gameEndView.getStartTime())).append(" - ").append(df.format(gameEndView.getEndTime())).toString()); diff --git a/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.form b/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.form index 559770d732..1e52f05391 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.form +++ b/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.form @@ -6236,6 +6236,114 @@
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.java b/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.java index 47a8fd897a..d6a7d1a69d 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.java +++ b/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.java @@ -15,6 +15,7 @@ import mage.remote.Connection; import mage.remote.Connection.ProxyType; import mage.view.UserRequestMessage; import org.apache.log4j.Logger; +import mage.client.themes.ThemeType; import javax.swing.*; import javax.swing.border.Border; @@ -100,6 +101,9 @@ public class PreferencesDialog extends javax.swing.JDialog { public static final String KEY_BIG_CARD_TOGGLED = "bigCardToggled"; + // Themes + public static final String KEY_THEME = "themeSelection"; + // Phases public static final String UPKEEP_YOU = "upkeepYou"; public static final String DRAW_YOU = "drawYou"; @@ -309,6 +313,16 @@ public class PreferencesDialog extends javax.swing.JDialog { private static final Border BLACK_BORDER = BorderFactory.createLineBorder(Color.BLACK, 3); private static int selectedAvatarId; + + private static ThemeType currentTheme = null; + + public static ThemeType getCurrentTheme() { + if (currentTheme == null) { + currentTheme = ThemeType.valueByName(getCachedValue(KEY_THEME, "Default Theme")); + } + + return currentTheme; + } private final JFileChooser fc = new JFileChooser(); @@ -359,6 +373,7 @@ public class PreferencesDialog extends javax.swing.JDialog { initComponents(); txtImageFolderPath.setEditable(false); cbProxyType.setModel(new DefaultComboBoxModel<>(Connection.ProxyType.values())); + cbTheme.setModel(new DefaultComboBoxModel<>(ThemeType.values())); addAvatars(); cbPreferedImageLanguage.setModel(new DefaultComboBoxModel<>(CardLanguage.toList())); @@ -469,7 +484,7 @@ public class PreferencesDialog extends javax.swing.JDialog { txtImageFolderPath = new javax.swing.JTextField(); btnBrowseImageLocation = new javax.swing.JButton(); cbSaveToZipFiles = new javax.swing.JCheckBox(); - cbPreferedImageLanguage = new javax.swing.JComboBox<>(); + cbPreferedImageLanguage = new javax.swing.JComboBox(); labelPreferedImageLanguage = new javax.swing.JLabel(); labelNumberOfDownloadThreads = new javax.swing.JLabel(); cbNumberOfDownloadThreads = new javax.swing.JComboBox(); @@ -530,7 +545,7 @@ public class PreferencesDialog extends javax.swing.JDialog { txtURLServerList = new javax.swing.JTextField(); jLabel17 = new javax.swing.JLabel(); lblProxyType = new javax.swing.JLabel(); - cbProxyType = new javax.swing.JComboBox<>(); + cbProxyType = new javax.swing.JComboBox(); pnlProxySettings = new javax.swing.JPanel(); pnlProxy = new javax.swing.JPanel(); lblProxyServer = new javax.swing.JLabel(); @@ -568,6 +583,11 @@ public class PreferencesDialog extends javax.swing.JDialog { keyToggleRecordMacro = new KeyBindButton(this, KEY_CONTROL_TOGGLE_MACRO); labelSwitchChat = new javax.swing.JLabel(); keySwitchChat = new KeyBindButton(this, KEY_CONTROL_SWITCH_CHAT); + tabThemes = new javax.swing.JPanel(); + themesCategory = new javax.swing.JPanel(); + lbSelectLabel = new javax.swing.JLabel(); + cbTheme = new javax.swing.JComboBox(); + lbThemeHint = new javax.swing.JLabel(); saveButton = new javax.swing.JButton(); exitButton = new javax.swing.JButton(); @@ -637,29 +657,29 @@ public class PreferencesDialog extends javax.swing.JDialog { org.jdesktop.layout.GroupLayout main_cardLayout = new org.jdesktop.layout.GroupLayout(main_card); main_card.setLayout(main_cardLayout); main_cardLayout.setHorizontalGroup( - main_cardLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(main_cardLayout.createSequentialGroup() - .add(6, 6, 6) - .add(main_cardLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(main_cardLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING, false) - .add(tooltipDelayLabel, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .add(tooltipDelay, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - .add(main_cardLayout.createSequentialGroup() - .add(showCardName) - .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED) - .add(showFullImagePath))) - .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + main_cardLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(main_cardLayout.createSequentialGroup() + .add(6, 6, 6) + .add(main_cardLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(main_cardLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING, false) + .add(tooltipDelayLabel, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .add(tooltipDelay, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .add(main_cardLayout.createSequentialGroup() + .add(showCardName) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED) + .add(showFullImagePath))) + .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); main_cardLayout.setVerticalGroup( - main_cardLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(main_cardLayout.createSequentialGroup() - .add(main_cardLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) - .add(showCardName) - .add(showFullImagePath)) - .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) - .add(tooltipDelayLabel) - .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) - .add(tooltipDelay, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + main_cardLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(main_cardLayout.createSequentialGroup() + .add(main_cardLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) + .add(showCardName) + .add(showFullImagePath)) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) + .add(tooltipDelayLabel) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) + .add(tooltipDelay, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); main_game.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEtchedBorder(), "Game")); @@ -746,48 +766,48 @@ public class PreferencesDialog extends javax.swing.JDialog { org.jdesktop.layout.GroupLayout main_gameLayout = new org.jdesktop.layout.GroupLayout(main_game); main_game.setLayout(main_gameLayout); main_gameLayout.setHorizontalGroup( - main_gameLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(main_gameLayout.createSequentialGroup() - .addContainerGap() - .add(main_gameLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(main_gameLayout.createSequentialGroup() - .add(main_gameLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING, false) - .add(showPlayerNamesPermanently, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .add(nonLandPermanentsInOnePile, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .add(cbConfirmEmptyManaPool, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .add(cbAllowRequestToShowHandCards, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .add(cbShowStormCounter, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .add(cbAskMoveToGraveOrder, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .add(showAbilityPickerForced, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - .add(0, 0, Short.MAX_VALUE)) - .add(displayLifeOnAvatar, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - .addContainerGap()) + main_gameLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(main_gameLayout.createSequentialGroup() + .addContainerGap() + .add(main_gameLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(main_gameLayout.createSequentialGroup() + .add(main_gameLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING, false) + .add(showPlayerNamesPermanently, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .add(nonLandPermanentsInOnePile, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .add(cbConfirmEmptyManaPool, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .add(cbAllowRequestToShowHandCards, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .add(cbShowStormCounter, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .add(cbAskMoveToGraveOrder, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .add(showAbilityPickerForced, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .add(0, 0, Short.MAX_VALUE)) + .add(displayLifeOnAvatar, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addContainerGap()) ); main_gameLayout.setVerticalGroup( - main_gameLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(main_gameLayout.createSequentialGroup() - .add(nonLandPermanentsInOnePile) - .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) - .add(showPlayerNamesPermanently) - .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) - .add(displayLifeOnAvatar) - .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) - .add(showAbilityPickerForced) - .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) - .add(cbAllowRequestToShowHandCards) - .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) - .add(cbShowStormCounter) - .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) - .add(cbConfirmEmptyManaPool) - .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) - .add(cbAskMoveToGraveOrder)) + main_gameLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(main_gameLayout.createSequentialGroup() + .add(nonLandPermanentsInOnePile) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) + .add(showPlayerNamesPermanently) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) + .add(displayLifeOnAvatar) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) + .add(showAbilityPickerForced) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) + .add(cbAllowRequestToShowHandCards) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) + .add(cbShowStormCounter) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) + .add(cbConfirmEmptyManaPool) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) + .add(cbAskMoveToGraveOrder)) ); nonLandPermanentsInOnePile.getAccessibleContext().setAccessibleName("nonLandPermanentsInOnePile"); main_battlefield.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEtchedBorder(), "Battlefield")); - cbBattlefieldFeedbackColorizingMode.setModel(new javax.swing.DefaultComboBoxModel(new String[]{"Disable colorizing", "Enable one color for all phases", "Enable multicolor for different phases"})); + cbBattlefieldFeedbackColorizingMode.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Disable colorizing", "Enable one color for all phases", "Enable multicolor for different phases" })); cbBattlefieldFeedbackColorizingMode.setToolTipText("Battlefield feedback panel colorizing on your turn (e.g. use green color if you must select card or answer to request)"); cbBattlefieldFeedbackColorizingMode.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { @@ -801,46 +821,46 @@ public class PreferencesDialog extends javax.swing.JDialog { org.jdesktop.layout.GroupLayout main_battlefieldLayout = new org.jdesktop.layout.GroupLayout(main_battlefield); main_battlefield.setLayout(main_battlefieldLayout); main_battlefieldLayout.setHorizontalGroup( - main_battlefieldLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(main_battlefieldLayout.createSequentialGroup() - .addContainerGap() - .add(lblBattlefieldFeedbackColorizingMode) - .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) - .add(cbBattlefieldFeedbackColorizingMode, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 278, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) - .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + main_battlefieldLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(main_battlefieldLayout.createSequentialGroup() + .addContainerGap() + .add(lblBattlefieldFeedbackColorizingMode) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) + .add(cbBattlefieldFeedbackColorizingMode, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 278, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) + .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); main_battlefieldLayout.setVerticalGroup( - main_battlefieldLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(main_battlefieldLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) - .add(lblBattlefieldFeedbackColorizingMode) - .add(cbBattlefieldFeedbackColorizingMode, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) + main_battlefieldLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(main_battlefieldLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) + .add(lblBattlefieldFeedbackColorizingMode) + .add(cbBattlefieldFeedbackColorizingMode, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) ); org.jdesktop.layout.GroupLayout tabMainLayout = new org.jdesktop.layout.GroupLayout(tabMain); tabMain.setLayout(tabMainLayout); tabMainLayout.setHorizontalGroup( - tabMainLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(tabMainLayout.createSequentialGroup() - .addContainerGap() - .add(tabMainLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(org.jdesktop.layout.GroupLayout.TRAILING, main_card, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .add(org.jdesktop.layout.GroupLayout.TRAILING, main_gamelog, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .add(main_game, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .add(org.jdesktop.layout.GroupLayout.TRAILING, main_battlefield, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - .addContainerGap()) + tabMainLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(tabMainLayout.createSequentialGroup() + .addContainerGap() + .add(tabMainLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(org.jdesktop.layout.GroupLayout.TRAILING, main_card, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .add(org.jdesktop.layout.GroupLayout.TRAILING, main_gamelog, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .add(main_game, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .add(org.jdesktop.layout.GroupLayout.TRAILING, main_battlefield, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addContainerGap()) ); tabMainLayout.setVerticalGroup( - tabMainLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(tabMainLayout.createSequentialGroup() - .addContainerGap() - .add(main_card, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) - .add(main_game, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) - .add(main_gamelog, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) - .add(main_battlefield, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) - .addContainerGap(23, Short.MAX_VALUE)) + tabMainLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(tabMainLayout.createSequentialGroup() + .addContainerGap() + .add(main_card, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) + .add(main_game, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) + .add(main_gamelog, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) + .add(main_battlefield, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) + .addContainerGap(23, Short.MAX_VALUE)) ); main_card.getAccessibleContext().setAccessibleName("Game panel"); @@ -850,18 +870,18 @@ public class PreferencesDialog extends javax.swing.JDialog { tabGuiSize.setMaximumSize(new java.awt.Dimension(527, 423)); tabGuiSize.setMinimumSize(new java.awt.Dimension(527, 423)); java.awt.GridBagLayout tabGuiSizeLayout = new java.awt.GridBagLayout(); - tabGuiSizeLayout.columnWidths = new int[]{0}; - tabGuiSizeLayout.rowHeights = new int[]{0, 20, 0}; - tabGuiSizeLayout.columnWeights = new double[]{1.0}; - tabGuiSizeLayout.rowWeights = new double[]{1.0, 0.0, 1.0}; + tabGuiSizeLayout.columnWidths = new int[] {0}; + tabGuiSizeLayout.rowHeights = new int[] {0, 20, 0}; + tabGuiSizeLayout.columnWeights = new double[] {1.0}; + tabGuiSizeLayout.rowWeights = new double[] {1.0, 0.0, 1.0}; tabGuiSize.setLayout(tabGuiSizeLayout); guiSizeBasic.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEtchedBorder(), "Size basic elements")); guiSizeBasic.setMinimumSize(new java.awt.Dimension(600, 180)); guiSizeBasic.setPreferredSize(new java.awt.Dimension(600, 180)); java.awt.GridBagLayout guiSizeBasicLayout = new java.awt.GridBagLayout(); - guiSizeBasicLayout.columnWeights = new double[]{1.0, 1.0, 1.0}; - guiSizeBasicLayout.rowWeights = new double[]{1.0, 0.2, 1.0, 0.2}; + guiSizeBasicLayout.columnWeights = new double[] {1.0, 1.0, 1.0}; + guiSizeBasicLayout.rowWeights = new double[] {1.0, 0.2, 1.0, 0.2}; guiSizeBasic.setLayout(guiSizeBasicLayout); sliderFontSize.setMajorTickSpacing(5); @@ -1050,8 +1070,8 @@ public class PreferencesDialog extends javax.swing.JDialog { guiSizeGame.setMinimumSize(new java.awt.Dimension(600, 180)); guiSizeGame.setPreferredSize(new java.awt.Dimension(600, 180)); java.awt.GridBagLayout guiSizeGameLayout = new java.awt.GridBagLayout(); - guiSizeGameLayout.columnWeights = new double[]{1.0, 1.0, 1.0, 1.0}; - guiSizeGameLayout.rowWeights = new double[]{1.0, 0.2, 1.0, 0.2}; + guiSizeGameLayout.columnWeights = new double[] {1.0, 1.0, 1.0, 1.0}; + guiSizeGameLayout.rowWeights = new double[] {1.0, 0.2, 1.0, 0.2}; guiSizeGame.setLayout(guiSizeGameLayout); sliderCardSizeHand.setMajorTickSpacing(5); @@ -1395,115 +1415,115 @@ public class PreferencesDialog extends javax.swing.JDialog { org.jdesktop.layout.GroupLayout tabPhasesLayout = new org.jdesktop.layout.GroupLayout(tabPhases); tabPhases.setLayout(tabPhasesLayout); tabPhasesLayout.setHorizontalGroup( - tabPhasesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(tabPhasesLayout.createSequentialGroup() + tabPhasesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(tabPhasesLayout.createSequentialGroup() + .add(tabPhasesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(tabPhasesLayout.createSequentialGroup() + .add(tabPhasesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(tabPhasesLayout.createSequentialGroup() + .add(20, 20, 20) .add(tabPhasesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(tabPhasesLayout.createSequentialGroup() - .add(tabPhasesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(tabPhasesLayout.createSequentialGroup() - .add(20, 20, 20) - .add(tabPhasesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(tabPhasesLayout.createSequentialGroup() - .add(tabPhasesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(jLabelUpkeep) - .add(jLabelBeforeCombat) - .add(jLabelEndofCombat) - .add(jLabelMain2) - .add(jLabelEndOfTurn)) - .add(77, 77, 77) - .add(tabPhasesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(tabPhasesLayout.createSequentialGroup() - .add(2, 2, 2) - .add(jLabelYourTurn) - .add(32, 32, 32) - .add(jLabelOpponentsTurn)) - .add(tabPhasesLayout.createSequentialGroup() - .add(13, 13, 13) - .add(tabPhasesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING) - .add(checkBoxDrawYou) - .add(checkBoxUpkeepYou) - .add(checkBoxMainYou) - .add(checkBoxBeforeCYou) - .add(checkBoxEndOfCYou) - .add(checkBoxMain2You) - .add(checkBoxEndTurnYou)) - .add(78, 78, 78) - .add(tabPhasesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING) - .add(checkBoxUpkeepOthers) - .add(checkBoxBeforeCOthers) - .add(checkBoxMainOthers) - .add(checkBoxEndOfCOthers) - .add(checkBoxDrawOthers) - .add(checkBoxMain2Others) - .add(checkBoxEndTurnOthers))))) - .add(tabPhasesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING, false) - .add(org.jdesktop.layout.GroupLayout.LEADING, jLabelMain1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .add(org.jdesktop.layout.GroupLayout.LEADING, jLabelDraw, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))) - .add(tabPhasesLayout.createSequentialGroup() - .addContainerGap() - .add(jLabelHeadLine))) - .add(0, 0, Short.MAX_VALUE)) - .add(tabPhasesLayout.createSequentialGroup() - .addContainerGap() - .add(phases_stopSettings, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))) - .addContainerGap()) + .add(tabPhasesLayout.createSequentialGroup() + .add(tabPhasesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(jLabelUpkeep) + .add(jLabelBeforeCombat) + .add(jLabelEndofCombat) + .add(jLabelMain2) + .add(jLabelEndOfTurn)) + .add(77, 77, 77) + .add(tabPhasesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(tabPhasesLayout.createSequentialGroup() + .add(2, 2, 2) + .add(jLabelYourTurn) + .add(32, 32, 32) + .add(jLabelOpponentsTurn)) + .add(tabPhasesLayout.createSequentialGroup() + .add(13, 13, 13) + .add(tabPhasesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING) + .add(checkBoxDrawYou) + .add(checkBoxUpkeepYou) + .add(checkBoxMainYou) + .add(checkBoxBeforeCYou) + .add(checkBoxEndOfCYou) + .add(checkBoxMain2You) + .add(checkBoxEndTurnYou)) + .add(78, 78, 78) + .add(tabPhasesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING) + .add(checkBoxUpkeepOthers) + .add(checkBoxBeforeCOthers) + .add(checkBoxMainOthers) + .add(checkBoxEndOfCOthers) + .add(checkBoxDrawOthers) + .add(checkBoxMain2Others) + .add(checkBoxEndTurnOthers))))) + .add(tabPhasesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING, false) + .add(org.jdesktop.layout.GroupLayout.LEADING, jLabelMain1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .add(org.jdesktop.layout.GroupLayout.LEADING, jLabelDraw, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))) + .add(tabPhasesLayout.createSequentialGroup() + .addContainerGap() + .add(jLabelHeadLine))) + .add(0, 0, Short.MAX_VALUE)) + .add(tabPhasesLayout.createSequentialGroup() + .addContainerGap() + .add(phases_stopSettings, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))) + .addContainerGap()) ); tabPhasesLayout.setVerticalGroup( - tabPhasesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(tabPhasesLayout.createSequentialGroup() - .addContainerGap() - .add(tabPhasesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING) - .add(tabPhasesLayout.createSequentialGroup() - .add(jLabelOpponentsTurn) - .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED) - .add(checkBoxUpkeepOthers)) - .add(tabPhasesLayout.createSequentialGroup() - .add(tabPhasesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING) - .add(tabPhasesLayout.createSequentialGroup() - .add(jLabelHeadLine) - .add(20, 20, 20)) - .add(jLabelYourTurn)) - .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED) - .add(tabPhasesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING) - .add(checkBoxUpkeepYou) - .add(jLabelUpkeep)))) - .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) - .add(tabPhasesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING) - .add(jLabelDraw) - .add(checkBoxDrawYou) - .add(checkBoxDrawOthers)) - .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) - .add(tabPhasesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING) - .add(jLabelMain1) - .add(checkBoxMainYou) - .add(checkBoxMainOthers)) - .add(tabPhasesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(tabPhasesLayout.createSequentialGroup() - .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) - .add(tabPhasesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(org.jdesktop.layout.GroupLayout.TRAILING, jLabelBeforeCombat) - .add(org.jdesktop.layout.GroupLayout.TRAILING, checkBoxBeforeCYou))) - .add(tabPhasesLayout.createSequentialGroup() - .add(6, 6, 6) - .add(checkBoxBeforeCOthers))) - .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) - .add(tabPhasesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING) - .add(jLabelEndofCombat) - .add(checkBoxEndOfCYou) - .add(checkBoxEndOfCOthers)) - .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) - .add(tabPhasesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING) - .add(jLabelMain2) - .add(checkBoxMain2You) - .add(checkBoxMain2Others)) - .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) - .add(tabPhasesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING) - .add(checkBoxEndTurnYou) - .add(jLabelEndOfTurn) - .add(checkBoxEndTurnOthers)) - .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED) - .add(phases_stopSettings, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) - .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + tabPhasesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(tabPhasesLayout.createSequentialGroup() + .addContainerGap() + .add(tabPhasesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING) + .add(tabPhasesLayout.createSequentialGroup() + .add(jLabelOpponentsTurn) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED) + .add(checkBoxUpkeepOthers)) + .add(tabPhasesLayout.createSequentialGroup() + .add(tabPhasesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING) + .add(tabPhasesLayout.createSequentialGroup() + .add(jLabelHeadLine) + .add(20, 20, 20)) + .add(jLabelYourTurn)) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED) + .add(tabPhasesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING) + .add(checkBoxUpkeepYou) + .add(jLabelUpkeep)))) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) + .add(tabPhasesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING) + .add(jLabelDraw) + .add(checkBoxDrawYou) + .add(checkBoxDrawOthers)) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) + .add(tabPhasesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING) + .add(jLabelMain1) + .add(checkBoxMainYou) + .add(checkBoxMainOthers)) + .add(tabPhasesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(tabPhasesLayout.createSequentialGroup() + .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) + .add(tabPhasesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(org.jdesktop.layout.GroupLayout.TRAILING, jLabelBeforeCombat) + .add(org.jdesktop.layout.GroupLayout.TRAILING, checkBoxBeforeCYou))) + .add(tabPhasesLayout.createSequentialGroup() + .add(6, 6, 6) + .add(checkBoxBeforeCOthers))) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) + .add(tabPhasesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING) + .add(jLabelEndofCombat) + .add(checkBoxEndOfCYou) + .add(checkBoxEndOfCOthers)) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) + .add(tabPhasesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING) + .add(jLabelMain2) + .add(checkBoxMain2You) + .add(checkBoxMain2Others)) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) + .add(tabPhasesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING) + .add(checkBoxEndTurnYou) + .add(jLabelEndOfTurn) + .add(checkBoxEndTurnOthers)) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED) + .add(phases_stopSettings, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) + .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); tabsPanel.addTab("Phases & Priority", tabPhases); @@ -1534,7 +1554,7 @@ public class PreferencesDialog extends javax.swing.JDialog { }); cbPreferedImageLanguage.setMaximumRowCount(20); - cbPreferedImageLanguage.setModel(new javax.swing.DefaultComboBoxModel<>(new String[]{"Item 1", "Item 2", "Item 3", "Item 4"})); + cbPreferedImageLanguage.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" })); labelPreferedImageLanguage.setText("Default images language:"); labelPreferedImageLanguage.setFocusable(false); @@ -1542,57 +1562,57 @@ public class PreferencesDialog extends javax.swing.JDialog { labelNumberOfDownloadThreads.setText("Number of download threads:"); cbNumberOfDownloadThreads.setMaximumRowCount(20); - cbNumberOfDownloadThreads.setModel(new javax.swing.DefaultComboBoxModel(new String[]{"Item 1", "Item 2", "Item 3", "Item 4"})); + cbNumberOfDownloadThreads.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" })); labelHint1.setText("(change it to 1-3 if image source bans your IP for too many connections)"); org.jdesktop.layout.GroupLayout panelCardImagesLayout = new org.jdesktop.layout.GroupLayout(panelCardImages); panelCardImages.setLayout(panelCardImagesLayout); panelCardImagesLayout.setHorizontalGroup( - panelCardImagesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(panelCardImagesLayout.createSequentialGroup() + panelCardImagesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(panelCardImagesLayout.createSequentialGroup() + .add(panelCardImagesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(panelCardImagesLayout.createSequentialGroup() + .add(cbUseDefaultImageFolder) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) + .add(txtImageFolderPath) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) + .add(btnBrowseImageLocation)) + .add(panelCardImagesLayout.createSequentialGroup() + .add(panelCardImagesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(cbSaveToZipFiles) + .add(panelCardImagesLayout.createSequentialGroup() .add(panelCardImagesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(panelCardImagesLayout.createSequentialGroup() - .add(cbUseDefaultImageFolder) - .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) - .add(txtImageFolderPath) - .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) - .add(btnBrowseImageLocation)) - .add(panelCardImagesLayout.createSequentialGroup() - .add(panelCardImagesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(cbSaveToZipFiles) - .add(panelCardImagesLayout.createSequentialGroup() - .add(panelCardImagesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(labelNumberOfDownloadThreads) - .add(labelPreferedImageLanguage)) - .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) - .add(panelCardImagesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(cbPreferedImageLanguage, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 153, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) - .add(panelCardImagesLayout.createSequentialGroup() - .add(cbNumberOfDownloadThreads, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 153, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED) - .add(labelHint1))))) - .add(0, 0, Short.MAX_VALUE))) - .addContainerGap()) + .add(labelNumberOfDownloadThreads) + .add(labelPreferedImageLanguage)) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) + .add(panelCardImagesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(cbPreferedImageLanguage, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 153, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) + .add(panelCardImagesLayout.createSequentialGroup() + .add(cbNumberOfDownloadThreads, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 153, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED) + .add(labelHint1))))) + .add(0, 0, Short.MAX_VALUE))) + .addContainerGap()) ); panelCardImagesLayout.setVerticalGroup( - panelCardImagesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(panelCardImagesLayout.createSequentialGroup() - .add(panelCardImagesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) - .add(cbUseDefaultImageFolder) - .add(txtImageFolderPath, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) - .add(btnBrowseImageLocation)) - .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED) - .add(cbSaveToZipFiles) - .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED) - .add(panelCardImagesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) - .add(labelNumberOfDownloadThreads) - .add(cbNumberOfDownloadThreads, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) - .add(labelHint1)) - .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED) - .add(panelCardImagesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) - .add(labelPreferedImageLanguage) - .add(cbPreferedImageLanguage, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))) + panelCardImagesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(panelCardImagesLayout.createSequentialGroup() + .add(panelCardImagesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) + .add(cbUseDefaultImageFolder) + .add(txtImageFolderPath, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) + .add(btnBrowseImageLocation)) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED) + .add(cbSaveToZipFiles) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED) + .add(panelCardImagesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) + .add(labelNumberOfDownloadThreads) + .add(cbNumberOfDownloadThreads, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) + .add(labelHint1)) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED) + .add(panelCardImagesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) + .add(labelPreferedImageLanguage) + .add(cbPreferedImageLanguage, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))) ); jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEtchedBorder(), "Card styles (restart xmage to apply new settings)")); @@ -1621,23 +1641,23 @@ public class PreferencesDialog extends javax.swing.JDialog { org.jdesktop.layout.GroupLayout jPanel1Layout = new org.jdesktop.layout.GroupLayout(jPanel1); jPanel1.setLayout(jPanel1Layout); jPanel1Layout.setHorizontalGroup( - jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(jPanel1Layout.createSequentialGroup() - .add(jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(cbCardRenderImageFallback) - .add(cbCardRenderShowReminderText) - .add(cbCardRenderHideSetSymbol)) - .add(0, 0, Short.MAX_VALUE)) + jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(jPanel1Layout.createSequentialGroup() + .add(jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(cbCardRenderImageFallback) + .add(cbCardRenderShowReminderText) + .add(cbCardRenderHideSetSymbol)) + .add(0, 0, Short.MAX_VALUE)) ); jPanel1Layout.setVerticalGroup( - jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(jPanel1Layout.createSequentialGroup() - .add(cbCardRenderImageFallback) - .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) - .add(cbCardRenderShowReminderText) - .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) - .add(cbCardRenderHideSetSymbol) - .add(0, 0, Short.MAX_VALUE)) + jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(jPanel1Layout.createSequentialGroup() + .add(cbCardRenderImageFallback) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) + .add(cbCardRenderShowReminderText) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) + .add(cbCardRenderHideSetSymbol) + .add(0, 0, Short.MAX_VALUE)) ); panelBackgroundImages.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEtchedBorder(), "Background images")); @@ -1692,65 +1712,65 @@ public class PreferencesDialog extends javax.swing.JDialog { org.jdesktop.layout.GroupLayout panelBackgroundImagesLayout = new org.jdesktop.layout.GroupLayout(panelBackgroundImages); panelBackgroundImages.setLayout(panelBackgroundImagesLayout); panelBackgroundImagesLayout.setHorizontalGroup( - panelBackgroundImagesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(panelBackgroundImagesLayout.createSequentialGroup() - .add(panelBackgroundImagesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(panelBackgroundImagesLayout.createSequentialGroup() - .add(cbUseDefaultBackground) - .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED) - .add(txtBackgroundImagePath) - .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) - .add(btnBrowseBackgroundImage)) - .add(panelBackgroundImagesLayout.createSequentialGroup() - .add(cbUseRandomBattleImage) - .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED) - .add(txtBattlefieldImagePath) - .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) - .add(btnBrowseBattlefieldImage)) - .add(panelBackgroundImagesLayout.createSequentialGroup() - .add(cbUseDefaultBattleImage) - .add(0, 0, Short.MAX_VALUE))) - .addContainerGap()) + panelBackgroundImagesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(panelBackgroundImagesLayout.createSequentialGroup() + .add(panelBackgroundImagesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(panelBackgroundImagesLayout.createSequentialGroup() + .add(cbUseDefaultBackground) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED) + .add(txtBackgroundImagePath) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) + .add(btnBrowseBackgroundImage)) + .add(panelBackgroundImagesLayout.createSequentialGroup() + .add(cbUseRandomBattleImage) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED) + .add(txtBattlefieldImagePath) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) + .add(btnBrowseBattlefieldImage)) + .add(panelBackgroundImagesLayout.createSequentialGroup() + .add(cbUseDefaultBattleImage) + .add(0, 0, Short.MAX_VALUE))) + .addContainerGap()) ); panelBackgroundImagesLayout.setVerticalGroup( - panelBackgroundImagesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(panelBackgroundImagesLayout.createSequentialGroup() - .add(cbUseDefaultBattleImage) - .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) - .add(panelBackgroundImagesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) - .add(cbUseDefaultBackground) - .add(txtBackgroundImagePath, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) - .add(btnBrowseBackgroundImage)) - .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) - .add(panelBackgroundImagesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) - .add(cbUseRandomBattleImage) - .add(txtBattlefieldImagePath, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) - .add(btnBrowseBattlefieldImage)) - .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + panelBackgroundImagesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(panelBackgroundImagesLayout.createSequentialGroup() + .add(cbUseDefaultBattleImage) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) + .add(panelBackgroundImagesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) + .add(cbUseDefaultBackground) + .add(txtBackgroundImagePath, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) + .add(btnBrowseBackgroundImage)) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) + .add(panelBackgroundImagesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) + .add(cbUseRandomBattleImage) + .add(txtBattlefieldImagePath, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) + .add(btnBrowseBattlefieldImage)) + .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); org.jdesktop.layout.GroupLayout tabImagesLayout = new org.jdesktop.layout.GroupLayout(tabImages); tabImages.setLayout(tabImagesLayout); tabImagesLayout.setHorizontalGroup( - tabImagesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(tabImagesLayout.createSequentialGroup() - .addContainerGap() - .add(tabImagesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(panelCardImages, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .add(jPanel1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .add(panelBackgroundImages, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - .addContainerGap()) + tabImagesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(tabImagesLayout.createSequentialGroup() + .addContainerGap() + .add(tabImagesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(panelCardImages, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .add(jPanel1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .add(panelBackgroundImages, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addContainerGap()) ); tabImagesLayout.setVerticalGroup( - tabImagesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(tabImagesLayout.createSequentialGroup() - .addContainerGap() - .add(jPanel1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) - .add(panelCardImages, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) - .add(panelBackgroundImages, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) - .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + tabImagesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(tabImagesLayout.createSequentialGroup() + .addContainerGap() + .add(jPanel1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) + .add(panelCardImages, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) + .add(panelBackgroundImages, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) + .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); tabsPanel.addTab("Images", tabImages); @@ -1824,48 +1844,48 @@ public class PreferencesDialog extends javax.swing.JDialog { org.jdesktop.layout.GroupLayout sounds_backgroundMusicLayout = new org.jdesktop.layout.GroupLayout(sounds_backgroundMusic); sounds_backgroundMusic.setLayout(sounds_backgroundMusicLayout); sounds_backgroundMusicLayout.setHorizontalGroup( - sounds_backgroundMusicLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(sounds_backgroundMusicLayout.createSequentialGroup() - .addContainerGap() - .add(jLabel16) - .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) - .add(txtBattlefieldIBGMPath) - .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) - .add(btnBattlefieldBGMBrowse)) - .add(sounds_backgroundMusicLayout.createSequentialGroup() - .add(cbEnableBattlefieldBGM) - .add(0, 0, Short.MAX_VALUE)) + sounds_backgroundMusicLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(sounds_backgroundMusicLayout.createSequentialGroup() + .addContainerGap() + .add(jLabel16) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) + .add(txtBattlefieldIBGMPath) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) + .add(btnBattlefieldBGMBrowse)) + .add(sounds_backgroundMusicLayout.createSequentialGroup() + .add(cbEnableBattlefieldBGM) + .add(0, 0, Short.MAX_VALUE)) ); sounds_backgroundMusicLayout.setVerticalGroup( - sounds_backgroundMusicLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(sounds_backgroundMusicLayout.createSequentialGroup() - .add(cbEnableBattlefieldBGM) - .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) - .add(sounds_backgroundMusicLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) - .add(txtBattlefieldIBGMPath, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) - .add(btnBattlefieldBGMBrowse) - .add(jLabel16))) + sounds_backgroundMusicLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(sounds_backgroundMusicLayout.createSequentialGroup() + .add(cbEnableBattlefieldBGM) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) + .add(sounds_backgroundMusicLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) + .add(txtBattlefieldIBGMPath, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) + .add(btnBattlefieldBGMBrowse) + .add(jLabel16))) ); org.jdesktop.layout.GroupLayout tabSoundsLayout = new org.jdesktop.layout.GroupLayout(tabSounds); tabSounds.setLayout(tabSoundsLayout); tabSoundsLayout.setHorizontalGroup( - tabSoundsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(tabSoundsLayout.createSequentialGroup() - .addContainerGap() - .add(tabSoundsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(sounds_clips, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .add(org.jdesktop.layout.GroupLayout.TRAILING, sounds_backgroundMusic, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - .addContainerGap()) + tabSoundsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(tabSoundsLayout.createSequentialGroup() + .addContainerGap() + .add(tabSoundsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(sounds_clips, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .add(org.jdesktop.layout.GroupLayout.TRAILING, sounds_backgroundMusic, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addContainerGap()) ); tabSoundsLayout.setVerticalGroup( - tabSoundsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(tabSoundsLayout.createSequentialGroup() - .addContainerGap() - .add(sounds_clips, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) - .add(sounds_backgroundMusic, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) - .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + tabSoundsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(tabSoundsLayout.createSequentialGroup() + .addContainerGap() + .add(sounds_clips, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) + .add(sounds_backgroundMusic, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) + .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); sounds_clips.getAccessibleContext().setAccessibleDescription(""); @@ -1889,12 +1909,12 @@ public class PreferencesDialog extends javax.swing.JDialog { org.jdesktop.layout.GroupLayout jPanel10Layout = new org.jdesktop.layout.GroupLayout(jPanel10); jPanel10.setLayout(jPanel10Layout); jPanel10Layout.setHorizontalGroup( - jPanel10Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(0, 0, Short.MAX_VALUE) + jPanel10Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(0, 0, Short.MAX_VALUE) ); jPanel10Layout.setVerticalGroup( - jPanel10Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(0, 0, Short.MAX_VALUE) + jPanel10Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(0, 0, Short.MAX_VALUE) ); avatarPanel.add(jPanel10); @@ -1907,12 +1927,12 @@ public class PreferencesDialog extends javax.swing.JDialog { org.jdesktop.layout.GroupLayout jPanel11Layout = new org.jdesktop.layout.GroupLayout(jPanel11); jPanel11.setLayout(jPanel11Layout); jPanel11Layout.setHorizontalGroup( - jPanel11Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(0, 0, Short.MAX_VALUE) + jPanel11Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(0, 0, Short.MAX_VALUE) ); jPanel11Layout.setVerticalGroup( - jPanel11Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(0, 0, Short.MAX_VALUE) + jPanel11Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(0, 0, Short.MAX_VALUE) ); avatarPanel.add(jPanel11); @@ -1925,12 +1945,12 @@ public class PreferencesDialog extends javax.swing.JDialog { org.jdesktop.layout.GroupLayout jPanel12Layout = new org.jdesktop.layout.GroupLayout(jPanel12); jPanel12.setLayout(jPanel12Layout); jPanel12Layout.setHorizontalGroup( - jPanel12Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(0, 0, Short.MAX_VALUE) + jPanel12Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(0, 0, Short.MAX_VALUE) ); jPanel12Layout.setVerticalGroup( - jPanel12Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(0, 0, Short.MAX_VALUE) + jPanel12Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(0, 0, Short.MAX_VALUE) ); avatarPanel.add(jPanel12); @@ -1943,12 +1963,12 @@ public class PreferencesDialog extends javax.swing.JDialog { org.jdesktop.layout.GroupLayout jPanel13Layout = new org.jdesktop.layout.GroupLayout(jPanel13); jPanel13.setLayout(jPanel13Layout); jPanel13Layout.setHorizontalGroup( - jPanel13Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(0, 0, Short.MAX_VALUE) + jPanel13Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(0, 0, Short.MAX_VALUE) ); jPanel13Layout.setVerticalGroup( - jPanel13Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(0, 0, Short.MAX_VALUE) + jPanel13Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(0, 0, Short.MAX_VALUE) ); avatarPanel.add(jPanel13); @@ -1961,12 +1981,12 @@ public class PreferencesDialog extends javax.swing.JDialog { org.jdesktop.layout.GroupLayout jPanel14Layout = new org.jdesktop.layout.GroupLayout(jPanel14); jPanel14.setLayout(jPanel14Layout); jPanel14Layout.setHorizontalGroup( - jPanel14Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(0, 0, Short.MAX_VALUE) + jPanel14Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(0, 0, Short.MAX_VALUE) ); jPanel14Layout.setVerticalGroup( - jPanel14Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(0, 0, Short.MAX_VALUE) + jPanel14Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(0, 0, Short.MAX_VALUE) ); avatarPanel.add(jPanel14); @@ -1979,12 +1999,12 @@ public class PreferencesDialog extends javax.swing.JDialog { org.jdesktop.layout.GroupLayout jPanel15Layout = new org.jdesktop.layout.GroupLayout(jPanel15); jPanel15.setLayout(jPanel15Layout); jPanel15Layout.setHorizontalGroup( - jPanel15Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(0, 0, Short.MAX_VALUE) + jPanel15Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(0, 0, Short.MAX_VALUE) ); jPanel15Layout.setVerticalGroup( - jPanel15Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(0, 0, Short.MAX_VALUE) + jPanel15Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(0, 0, Short.MAX_VALUE) ); avatarPanel.add(jPanel15); @@ -1997,12 +2017,12 @@ public class PreferencesDialog extends javax.swing.JDialog { org.jdesktop.layout.GroupLayout jPanel16Layout = new org.jdesktop.layout.GroupLayout(jPanel16); jPanel16.setLayout(jPanel16Layout); jPanel16Layout.setHorizontalGroup( - jPanel16Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(0, 0, Short.MAX_VALUE) + jPanel16Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(0, 0, Short.MAX_VALUE) ); jPanel16Layout.setVerticalGroup( - jPanel16Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(0, 0, Short.MAX_VALUE) + jPanel16Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(0, 0, Short.MAX_VALUE) ); avatarPanel.add(jPanel16); @@ -2015,12 +2035,12 @@ public class PreferencesDialog extends javax.swing.JDialog { org.jdesktop.layout.GroupLayout jPanel17Layout = new org.jdesktop.layout.GroupLayout(jPanel17); jPanel17.setLayout(jPanel17Layout); jPanel17Layout.setHorizontalGroup( - jPanel17Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(0, 0, Short.MAX_VALUE) + jPanel17Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(0, 0, Short.MAX_VALUE) ); jPanel17Layout.setVerticalGroup( - jPanel17Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(0, 0, Short.MAX_VALUE) + jPanel17Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(0, 0, Short.MAX_VALUE) ); avatarPanel.add(jPanel17); @@ -2033,12 +2053,12 @@ public class PreferencesDialog extends javax.swing.JDialog { org.jdesktop.layout.GroupLayout jPanel18Layout = new org.jdesktop.layout.GroupLayout(jPanel18); jPanel18.setLayout(jPanel18Layout); jPanel18Layout.setHorizontalGroup( - jPanel18Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(0, 0, Short.MAX_VALUE) + jPanel18Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(0, 0, Short.MAX_VALUE) ); jPanel18Layout.setVerticalGroup( - jPanel18Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(0, 0, Short.MAX_VALUE) + jPanel18Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(0, 0, Short.MAX_VALUE) ); avatarPanel.add(jPanel18); @@ -2051,12 +2071,12 @@ public class PreferencesDialog extends javax.swing.JDialog { org.jdesktop.layout.GroupLayout jPanel19Layout = new org.jdesktop.layout.GroupLayout(jPanel19); jPanel19.setLayout(jPanel19Layout); jPanel19Layout.setHorizontalGroup( - jPanel19Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(0, 0, Short.MAX_VALUE) + jPanel19Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(0, 0, Short.MAX_VALUE) ); jPanel19Layout.setVerticalGroup( - jPanel19Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(0, 0, Short.MAX_VALUE) + jPanel19Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(0, 0, Short.MAX_VALUE) ); avatarPanel.add(jPanel19); @@ -2069,12 +2089,12 @@ public class PreferencesDialog extends javax.swing.JDialog { org.jdesktop.layout.GroupLayout jPanel20Layout = new org.jdesktop.layout.GroupLayout(jPanel20); jPanel20.setLayout(jPanel20Layout); jPanel20Layout.setHorizontalGroup( - jPanel20Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(0, 0, Short.MAX_VALUE) + jPanel20Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(0, 0, Short.MAX_VALUE) ); jPanel20Layout.setVerticalGroup( - jPanel20Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(0, 0, Short.MAX_VALUE) + jPanel20Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(0, 0, Short.MAX_VALUE) ); avatarPanel.add(jPanel20); @@ -2087,12 +2107,12 @@ public class PreferencesDialog extends javax.swing.JDialog { org.jdesktop.layout.GroupLayout jPanel21Layout = new org.jdesktop.layout.GroupLayout(jPanel21); jPanel21.setLayout(jPanel21Layout); jPanel21Layout.setHorizontalGroup( - jPanel21Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(0, 0, Short.MAX_VALUE) + jPanel21Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(0, 0, Short.MAX_VALUE) ); jPanel21Layout.setVerticalGroup( - jPanel21Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(0, 0, Short.MAX_VALUE) + jPanel21Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(0, 0, Short.MAX_VALUE) ); avatarPanel.add(jPanel21); @@ -2105,12 +2125,12 @@ public class PreferencesDialog extends javax.swing.JDialog { org.jdesktop.layout.GroupLayout jPanel22Layout = new org.jdesktop.layout.GroupLayout(jPanel22); jPanel22.setLayout(jPanel22Layout); jPanel22Layout.setHorizontalGroup( - jPanel22Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(0, 0, Short.MAX_VALUE) + jPanel22Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(0, 0, Short.MAX_VALUE) ); jPanel22Layout.setVerticalGroup( - jPanel22Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(0, 0, Short.MAX_VALUE) + jPanel22Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(0, 0, Short.MAX_VALUE) ); avatarPanel.add(jPanel22); @@ -2123,12 +2143,12 @@ public class PreferencesDialog extends javax.swing.JDialog { org.jdesktop.layout.GroupLayout jPanel23Layout = new org.jdesktop.layout.GroupLayout(jPanel23); jPanel23.setLayout(jPanel23Layout); jPanel23Layout.setHorizontalGroup( - jPanel23Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(0, 0, Short.MAX_VALUE) + jPanel23Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(0, 0, Short.MAX_VALUE) ); jPanel23Layout.setVerticalGroup( - jPanel23Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(0, 0, Short.MAX_VALUE) + jPanel23Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(0, 0, Short.MAX_VALUE) ); avatarPanel.add(jPanel23); @@ -2141,12 +2161,12 @@ public class PreferencesDialog extends javax.swing.JDialog { org.jdesktop.layout.GroupLayout jPanel24Layout = new org.jdesktop.layout.GroupLayout(jPanel24); jPanel24.setLayout(jPanel24Layout); jPanel24Layout.setHorizontalGroup( - jPanel24Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(0, 0, Short.MAX_VALUE) + jPanel24Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(0, 0, Short.MAX_VALUE) ); jPanel24Layout.setVerticalGroup( - jPanel24Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(0, 0, Short.MAX_VALUE) + jPanel24Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(0, 0, Short.MAX_VALUE) ); avatarPanel.add(jPanel24); @@ -2159,12 +2179,12 @@ public class PreferencesDialog extends javax.swing.JDialog { org.jdesktop.layout.GroupLayout jPanel25Layout = new org.jdesktop.layout.GroupLayout(jPanel25); jPanel25.setLayout(jPanel25Layout); jPanel25Layout.setHorizontalGroup( - jPanel25Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(0, 0, Short.MAX_VALUE) + jPanel25Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(0, 0, Short.MAX_VALUE) ); jPanel25Layout.setVerticalGroup( - jPanel25Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(0, 0, Short.MAX_VALUE) + jPanel25Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(0, 0, Short.MAX_VALUE) ); avatarPanel.add(jPanel25); @@ -2177,12 +2197,12 @@ public class PreferencesDialog extends javax.swing.JDialog { org.jdesktop.layout.GroupLayout jPanel26Layout = new org.jdesktop.layout.GroupLayout(jPanel26); jPanel26.setLayout(jPanel26Layout); jPanel26Layout.setHorizontalGroup( - jPanel26Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(0, 0, Short.MAX_VALUE) + jPanel26Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(0, 0, Short.MAX_VALUE) ); jPanel26Layout.setVerticalGroup( - jPanel26Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(0, 0, Short.MAX_VALUE) + jPanel26Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(0, 0, Short.MAX_VALUE) ); avatarPanel.add(jPanel26); @@ -2195,12 +2215,12 @@ public class PreferencesDialog extends javax.swing.JDialog { org.jdesktop.layout.GroupLayout jPanel27Layout = new org.jdesktop.layout.GroupLayout(jPanel27); jPanel27.setLayout(jPanel27Layout); jPanel27Layout.setHorizontalGroup( - jPanel27Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(0, 0, Short.MAX_VALUE) + jPanel27Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(0, 0, Short.MAX_VALUE) ); jPanel27Layout.setVerticalGroup( - jPanel27Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(0, 0, Short.MAX_VALUE) + jPanel27Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(0, 0, Short.MAX_VALUE) ); avatarPanel.add(jPanel27); @@ -2213,12 +2233,12 @@ public class PreferencesDialog extends javax.swing.JDialog { org.jdesktop.layout.GroupLayout jPanel28Layout = new org.jdesktop.layout.GroupLayout(jPanel28); jPanel28.setLayout(jPanel28Layout); jPanel28Layout.setHorizontalGroup( - jPanel28Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(0, 0, Short.MAX_VALUE) + jPanel28Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(0, 0, Short.MAX_VALUE) ); jPanel28Layout.setVerticalGroup( - jPanel28Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(0, 0, Short.MAX_VALUE) + jPanel28Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(0, 0, Short.MAX_VALUE) ); avatarPanel.add(jPanel28); @@ -2231,12 +2251,12 @@ public class PreferencesDialog extends javax.swing.JDialog { org.jdesktop.layout.GroupLayout jPanel29Layout = new org.jdesktop.layout.GroupLayout(jPanel29); jPanel29.setLayout(jPanel29Layout); jPanel29Layout.setHorizontalGroup( - jPanel29Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(0, 0, Short.MAX_VALUE) + jPanel29Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(0, 0, Short.MAX_VALUE) ); jPanel29Layout.setVerticalGroup( - jPanel29Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(0, 0, Short.MAX_VALUE) + jPanel29Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(0, 0, Short.MAX_VALUE) ); avatarPanel.add(jPanel29); @@ -2249,12 +2269,12 @@ public class PreferencesDialog extends javax.swing.JDialog { org.jdesktop.layout.GroupLayout jPanel30Layout = new org.jdesktop.layout.GroupLayout(jPanel30); jPanel30.setLayout(jPanel30Layout); jPanel30Layout.setHorizontalGroup( - jPanel30Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(0, 0, Short.MAX_VALUE) + jPanel30Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(0, 0, Short.MAX_VALUE) ); jPanel30Layout.setVerticalGroup( - jPanel30Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(0, 0, Short.MAX_VALUE) + jPanel30Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(0, 0, Short.MAX_VALUE) ); avatarPanel.add(jPanel30); @@ -2267,12 +2287,12 @@ public class PreferencesDialog extends javax.swing.JDialog { org.jdesktop.layout.GroupLayout jPanel31Layout = new org.jdesktop.layout.GroupLayout(jPanel31); jPanel31.setLayout(jPanel31Layout); jPanel31Layout.setHorizontalGroup( - jPanel31Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(0, 0, Short.MAX_VALUE) + jPanel31Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(0, 0, Short.MAX_VALUE) ); jPanel31Layout.setVerticalGroup( - jPanel31Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(0, 0, Short.MAX_VALUE) + jPanel31Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(0, 0, Short.MAX_VALUE) ); avatarPanel.add(jPanel31); @@ -2285,12 +2305,12 @@ public class PreferencesDialog extends javax.swing.JDialog { org.jdesktop.layout.GroupLayout jPanel32Layout = new org.jdesktop.layout.GroupLayout(jPanel32); jPanel32.setLayout(jPanel32Layout); jPanel32Layout.setHorizontalGroup( - jPanel32Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(0, 0, Short.MAX_VALUE) + jPanel32Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(0, 0, Short.MAX_VALUE) ); jPanel32Layout.setVerticalGroup( - jPanel32Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(0, 0, Short.MAX_VALUE) + jPanel32Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(0, 0, Short.MAX_VALUE) ); avatarPanel.add(jPanel32); @@ -2302,12 +2322,12 @@ public class PreferencesDialog extends javax.swing.JDialog { org.jdesktop.layout.GroupLayout jPanel33Layout = new org.jdesktop.layout.GroupLayout(jPanel33); jPanel33.setLayout(jPanel33Layout); jPanel33Layout.setHorizontalGroup( - jPanel33Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(0, 0, Short.MAX_VALUE) + jPanel33Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(0, 0, Short.MAX_VALUE) ); jPanel33Layout.setVerticalGroup( - jPanel33Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(0, 0, Short.MAX_VALUE) + jPanel33Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(0, 0, Short.MAX_VALUE) ); avatarPanel.add(jPanel33); @@ -2317,16 +2337,16 @@ public class PreferencesDialog extends javax.swing.JDialog { org.jdesktop.layout.GroupLayout tabAvatarsLayout = new org.jdesktop.layout.GroupLayout(tabAvatars); tabAvatars.setLayout(tabAvatarsLayout); tabAvatarsLayout.setHorizontalGroup( - tabAvatarsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(tabAvatarsLayout.createSequentialGroup() - .add(avatarPane, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 528, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) - .add(0, 0, Short.MAX_VALUE)) + tabAvatarsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(tabAvatarsLayout.createSequentialGroup() + .add(avatarPane, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 528, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) + .add(0, 0, Short.MAX_VALUE)) ); tabAvatarsLayout.setVerticalGroup( - tabAvatarsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(tabAvatarsLayout.createSequentialGroup() - .add(avatarPane, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addContainerGap()) + tabAvatarsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(tabAvatarsLayout.createSequentialGroup() + .add(avatarPane, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addContainerGap()) ); tabsPanel.addTab("Avatars", tabAvatars); @@ -2349,27 +2369,27 @@ public class PreferencesDialog extends javax.swing.JDialog { org.jdesktop.layout.GroupLayout connection_serversLayout = new org.jdesktop.layout.GroupLayout(connection_servers); connection_servers.setLayout(connection_serversLayout); connection_serversLayout.setHorizontalGroup( - connection_serversLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(connection_serversLayout.createSequentialGroup() - .add(connection_serversLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(connection_serversLayout.createSequentialGroup() - .addContainerGap() - .add(lblURLServerList, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 96, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) - .add(txtURLServerList, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 370, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) - .add(connection_serversLayout.createSequentialGroup() - .add(141, 141, 141) - .add(jLabel17))) - .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + connection_serversLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(connection_serversLayout.createSequentialGroup() + .add(connection_serversLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(connection_serversLayout.createSequentialGroup() + .addContainerGap() + .add(lblURLServerList, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 96, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) + .add(txtURLServerList, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 370, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) + .add(connection_serversLayout.createSequentialGroup() + .add(141, 141, 141) + .add(jLabel17))) + .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); connection_serversLayout.setVerticalGroup( - connection_serversLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(connection_serversLayout.createSequentialGroup() - .add(connection_serversLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING, false) - .add(lblURLServerList, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .add(txtURLServerList, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) - .add(jLabel17)) + connection_serversLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(connection_serversLayout.createSequentialGroup() + .add(connection_serversLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING, false) + .add(lblURLServerList, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .add(txtURLServerList, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) + .add(jLabel17)) ); lblProxyType.setText("Proxy:"); @@ -2415,99 +2435,99 @@ public class PreferencesDialog extends javax.swing.JDialog { org.jdesktop.layout.GroupLayout pnlProxyLayout = new org.jdesktop.layout.GroupLayout(pnlProxy); pnlProxy.setLayout(pnlProxyLayout); pnlProxyLayout.setHorizontalGroup( - pnlProxyLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(pnlProxyLayout.createSequentialGroup() - .addContainerGap() - .add(pnlProxyLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(pnlProxyLayout.createSequentialGroup() - .add(rememberPswd) - .add(47, 47, 47) - .add(jLabel11) - .add(34, 34, 34)) - .add(pnlProxyLayout.createSequentialGroup() - .add(pnlProxyLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(lblProxyPort) - .add(lblProxyPassword) - .add(lblProxyServer) - .add(lblProxyUserName)) - .add(19, 19, 19) - .add(pnlProxyLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(txtProxyPort, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 58, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) - .add(pnlProxyLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING, false) - .add(org.jdesktop.layout.GroupLayout.LEADING, txtPasswordField) - .add(org.jdesktop.layout.GroupLayout.LEADING, txtProxyUserName, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 148, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) - .add(txtProxyServer)) - .addContainerGap()))) + pnlProxyLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(pnlProxyLayout.createSequentialGroup() + .addContainerGap() + .add(pnlProxyLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(pnlProxyLayout.createSequentialGroup() + .add(rememberPswd) + .add(47, 47, 47) + .add(jLabel11) + .add(34, 34, 34)) + .add(pnlProxyLayout.createSequentialGroup() + .add(pnlProxyLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(lblProxyPort) + .add(lblProxyPassword) + .add(lblProxyServer) + .add(lblProxyUserName)) + .add(19, 19, 19) + .add(pnlProxyLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(txtProxyPort, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 58, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) + .add(pnlProxyLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING, false) + .add(org.jdesktop.layout.GroupLayout.LEADING, txtPasswordField) + .add(org.jdesktop.layout.GroupLayout.LEADING, txtProxyUserName, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 148, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) + .add(txtProxyServer)) + .addContainerGap()))) ); pnlProxyLayout.setVerticalGroup( - pnlProxyLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(pnlProxyLayout.createSequentialGroup() - .add(6, 6, 6) - .add(pnlProxyLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) - .add(txtProxyServer, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) - .add(lblProxyServer)) - .add(8, 8, 8) - .add(pnlProxyLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) - .add(lblProxyPort) - .add(txtProxyPort, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) - .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) - .add(pnlProxyLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) - .add(txtProxyUserName, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) - .add(lblProxyUserName)) - .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) - .add(pnlProxyLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) - .add(txtPasswordField, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) - .add(lblProxyPassword)) - .add(18, 18, 18) - .add(pnlProxyLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) - .add(rememberPswd) - .add(jLabel11)) - .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + pnlProxyLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(pnlProxyLayout.createSequentialGroup() + .add(6, 6, 6) + .add(pnlProxyLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) + .add(txtProxyServer, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) + .add(lblProxyServer)) + .add(8, 8, 8) + .add(pnlProxyLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) + .add(lblProxyPort) + .add(txtProxyPort, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) + .add(pnlProxyLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) + .add(txtProxyUserName, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) + .add(lblProxyUserName)) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) + .add(pnlProxyLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) + .add(txtPasswordField, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) + .add(lblProxyPassword)) + .add(18, 18, 18) + .add(pnlProxyLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) + .add(rememberPswd) + .add(jLabel11)) + .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); org.jdesktop.layout.GroupLayout pnlProxySettingsLayout = new org.jdesktop.layout.GroupLayout(pnlProxySettings); pnlProxySettings.setLayout(pnlProxySettingsLayout); pnlProxySettingsLayout.setHorizontalGroup( - pnlProxySettingsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(pnlProxySettingsLayout.createSequentialGroup() - .addContainerGap() - .add(pnlProxy, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addContainerGap()) + pnlProxySettingsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(pnlProxySettingsLayout.createSequentialGroup() + .addContainerGap() + .add(pnlProxy, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addContainerGap()) ); pnlProxySettingsLayout.setVerticalGroup( - pnlProxySettingsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(pnlProxySettingsLayout.createSequentialGroup() - .add(pnlProxy, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addContainerGap()) + pnlProxySettingsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(pnlProxySettingsLayout.createSequentialGroup() + .add(pnlProxy, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addContainerGap()) ); org.jdesktop.layout.GroupLayout tabConnectionLayout = new org.jdesktop.layout.GroupLayout(tabConnection); tabConnection.setLayout(tabConnectionLayout); tabConnectionLayout.setHorizontalGroup( - tabConnectionLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(org.jdesktop.layout.GroupLayout.TRAILING, tabConnectionLayout.createSequentialGroup() - .addContainerGap() - .add(tabConnectionLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING) - .add(pnlProxySettings, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .add(org.jdesktop.layout.GroupLayout.LEADING, tabConnectionLayout.createSequentialGroup() - .add(lblProxyType) - .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED) - .add(cbProxyType, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 126, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) - .add(connection_servers, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - .addContainerGap()) + tabConnectionLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(org.jdesktop.layout.GroupLayout.TRAILING, tabConnectionLayout.createSequentialGroup() + .addContainerGap() + .add(tabConnectionLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING) + .add(pnlProxySettings, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .add(org.jdesktop.layout.GroupLayout.LEADING, tabConnectionLayout.createSequentialGroup() + .add(lblProxyType) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED) + .add(cbProxyType, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 126, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) + .add(connection_servers, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addContainerGap()) ); tabConnectionLayout.setVerticalGroup( - tabConnectionLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(tabConnectionLayout.createSequentialGroup() - .addContainerGap() - .add(connection_servers, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) - .add(tabConnectionLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(lblProxyType) - .add(cbProxyType, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) - .add(18, 18, 18) - .add(pnlProxySettings, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) - .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + tabConnectionLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(tabConnectionLayout.createSequentialGroup() + .addContainerGap() + .add(connection_servers, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) + .add(tabConnectionLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(lblProxyType) + .add(cbProxyType, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) + .add(18, 18, 18) + .add(pnlProxySettings, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) + .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); pnlProxySettings.getAccessibleContext().setAccessibleDescription(""); @@ -2571,98 +2591,162 @@ public class PreferencesDialog extends javax.swing.JDialog { org.jdesktop.layout.GroupLayout tabControlsLayout = new org.jdesktop.layout.GroupLayout(tabControls); tabControls.setLayout(tabControlsLayout); tabControlsLayout.setHorizontalGroup( - tabControlsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(tabControlsLayout.createSequentialGroup() - .addContainerGap() - .add(tabControlsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING, false) - .add(bttnResetControls, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .add(tabControlsLayout.createSequentialGroup() - .add(tabControlsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(labelCancel) - .add(labelNextTurn) - .add(labelEndStep) - .add(labelMainStep) - .add(labelYourTurn) - .add(lebelSkip) - .add(labelPriorEnd) - .add(labelSkipStep) - .add(labelConfirm) - .add(labelToggleRecordMacro) - .add(labelSwitchChat)) - .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED) - .add(tabControlsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(keyConfirm, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 100, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) - .add(keyCancelSkip, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 100, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) - .add(keyNextTurn, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 100, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) - .add(keySkipStack, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 100, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) - .add(keyYourTurn, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 100, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) - .add(keyMainStep, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 100, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) - .add(keyPriorEnd, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 100, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) - .add(keySkipStep, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 100, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) - .add(keyEndStep, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 100, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) - .add(keyToggleRecordMacro, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 100, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) - .add(keySwitchChat, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 100, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)))) - .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED) - .add(controlsDescriptionLabel) - .addContainerGap()) + tabControlsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(tabControlsLayout.createSequentialGroup() + .addContainerGap() + .add(tabControlsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING, false) + .add(bttnResetControls, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .add(tabControlsLayout.createSequentialGroup() + .add(tabControlsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(labelCancel) + .add(labelNextTurn) + .add(labelEndStep) + .add(labelMainStep) + .add(labelYourTurn) + .add(lebelSkip) + .add(labelPriorEnd) + .add(labelSkipStep) + .add(labelConfirm) + .add(labelToggleRecordMacro) + .add(labelSwitchChat)) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED) + .add(tabControlsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(keyConfirm, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 100, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) + .add(keyCancelSkip, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 100, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) + .add(keyNextTurn, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 100, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) + .add(keySkipStack, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 100, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) + .add(keyYourTurn, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 100, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) + .add(keyMainStep, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 100, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) + .add(keyPriorEnd, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 100, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) + .add(keySkipStep, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 100, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) + .add(keyEndStep, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 100, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) + .add(keyToggleRecordMacro, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 100, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) + .add(keySwitchChat, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 100, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)))) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED) + .add(controlsDescriptionLabel) + .addContainerGap()) ); tabControlsLayout.setVerticalGroup( - tabControlsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(tabControlsLayout.createSequentialGroup() - .addContainerGap() - .add(tabControlsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING, false) - .add(tabControlsLayout.createSequentialGroup() - .add(tabControlsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) - .add(labelConfirm) - .add(keyConfirm, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) - .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED) - .add(tabControlsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) - .add(labelCancel) - .add(keyCancelSkip, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) - .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED) - .add(tabControlsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) - .add(labelNextTurn) - .add(keyNextTurn, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) - .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED) - .add(tabControlsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) - .add(labelEndStep) - .add(keyEndStep, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) - .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED) - .add(tabControlsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) - .add(labelSkipStep) - .add(keySkipStep, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) - .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED) - .add(tabControlsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) - .add(labelMainStep) - .add(keyMainStep, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) - .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED) - .add(tabControlsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) - .add(labelYourTurn) - .add(keyYourTurn, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) - .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED) - .add(tabControlsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) - .add(lebelSkip) - .add(keySkipStack, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) - .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED) - .add(tabControlsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) - .add(labelPriorEnd) - .add(keyPriorEnd, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) - .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED) - .add(tabControlsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) - .add(labelToggleRecordMacro) - .add(keyToggleRecordMacro, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) - .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED) - .add(tabControlsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) - .add(labelSwitchChat) - .add(keySwitchChat, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) - .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED) - .add(bttnResetControls)) - .add(controlsDescriptionLabel)) - .addContainerGap()) + tabControlsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(tabControlsLayout.createSequentialGroup() + .addContainerGap() + .add(tabControlsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING, false) + .add(tabControlsLayout.createSequentialGroup() + .add(tabControlsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) + .add(labelConfirm) + .add(keyConfirm, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED) + .add(tabControlsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) + .add(labelCancel) + .add(keyCancelSkip, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED) + .add(tabControlsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) + .add(labelNextTurn) + .add(keyNextTurn, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED) + .add(tabControlsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) + .add(labelEndStep) + .add(keyEndStep, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED) + .add(tabControlsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) + .add(labelSkipStep) + .add(keySkipStep, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED) + .add(tabControlsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) + .add(labelMainStep) + .add(keyMainStep, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED) + .add(tabControlsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) + .add(labelYourTurn) + .add(keyYourTurn, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED) + .add(tabControlsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) + .add(lebelSkip) + .add(keySkipStack, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED) + .add(tabControlsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) + .add(labelPriorEnd) + .add(keyPriorEnd, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED) + .add(tabControlsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) + .add(labelToggleRecordMacro) + .add(keyToggleRecordMacro, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED) + .add(tabControlsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) + .add(labelSwitchChat) + .add(keySwitchChat, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED) + .add(bttnResetControls)) + .add(controlsDescriptionLabel)) + .addContainerGap()) ); tabsPanel.addTab("Controls", tabControls); + themesCategory.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEtchedBorder(), "Themes")); + + lbSelectLabel.setHorizontalAlignment(javax.swing.SwingConstants.LEFT); + lbSelectLabel.setText("Select a theme:"); + lbSelectLabel.setToolTipText(""); + lbSelectLabel.setHorizontalTextPosition(javax.swing.SwingConstants.LEADING); + lbSelectLabel.setPreferredSize(new java.awt.Dimension(110, 16)); + lbSelectLabel.setVerticalTextPosition(javax.swing.SwingConstants.TOP); + + cbTheme.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + cbThemeActionPerformed(evt); + } + }); + + lbThemeHint.setText("Requires a restart to apply new theme."); + + org.jdesktop.layout.GroupLayout themesCategoryLayout = new org.jdesktop.layout.GroupLayout(themesCategory); + themesCategory.setLayout(themesCategoryLayout); + themesCategoryLayout.setHorizontalGroup( + themesCategoryLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(themesCategoryLayout.createSequentialGroup() + .addContainerGap() + .add(lbSelectLabel, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 96, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) + .add(themesCategoryLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(lbThemeHint) + .add(cbTheme, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 303, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) + .addContainerGap(303, Short.MAX_VALUE)) + ); + themesCategoryLayout.setVerticalGroup( + themesCategoryLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(themesCategoryLayout.createSequentialGroup() + .add(themesCategoryLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING) + .add(cbTheme, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) + .add(lbSelectLabel, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 22, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) + .add(lbThemeHint) + .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + + org.jdesktop.layout.GroupLayout tabThemesLayout = new org.jdesktop.layout.GroupLayout(tabThemes); + tabThemes.setLayout(tabThemesLayout); + tabThemesLayout.setHorizontalGroup( + tabThemesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(0, 750, Short.MAX_VALUE) + .add(tabThemesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(tabThemesLayout.createSequentialGroup() + .addContainerGap() + .add(themesCategory, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addContainerGap())) + ); + tabThemesLayout.setVerticalGroup( + tabThemesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(0, 526, Short.MAX_VALUE) + .add(tabThemesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(tabThemesLayout.createSequentialGroup() + .add(21, 21, 21) + .add(themesCategory, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) + .addContainerGap(430, Short.MAX_VALUE))) + ); + + tabsPanel.addTab("Themes", tabThemes); + saveButton.setLabel("Save"); saveButton.setMaximumSize(new java.awt.Dimension(100, 30)); saveButton.setMinimumSize(new java.awt.Dimension(100, 30)); @@ -2688,27 +2772,27 @@ public class PreferencesDialog extends javax.swing.JDialog { org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( - layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(layout.createSequentialGroup() - .addContainerGap() - .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING) - .add(org.jdesktop.layout.GroupLayout.LEADING, tabsPanel, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .add(layout.createSequentialGroup() - .add(0, 0, Short.MAX_VALUE) - .add(saveButton, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 100, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) - .add(exitButton, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 100, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))) - .add(6, 6, 6)) + layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(layout.createSequentialGroup() + .addContainerGap() + .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING) + .add(org.jdesktop.layout.GroupLayout.LEADING, tabsPanel, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .add(layout.createSequentialGroup() + .add(0, 0, Short.MAX_VALUE) + .add(saveButton, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 100, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) + .add(exitButton, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 100, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))) + .add(6, 6, 6)) ); layout.setVerticalGroup( - layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(layout.createSequentialGroup() - .add(tabsPanel, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 554, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) - .add(saveButton, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 30, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) - .add(exitButton, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 30, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) - .addContainerGap()) + layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(layout.createSequentialGroup() + .add(tabsPanel, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 554, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) + .add(saveButton, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 30, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) + .add(exitButton, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 30, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) + .addContainerGap()) ); pack(); @@ -2879,6 +2963,9 @@ public class PreferencesDialog extends javax.swing.JDialog { save(prefs, dialog.keyToggleRecordMacro); save(prefs, dialog.keySwitchChat); + // Themes + save(prefs, dialog.cbTheme, KEY_THEME); + // Avatar if (selectedAvatarId < MIN_AVATAR_ID || selectedAvatarId > MAX_AVATAR_ID) { selectedAvatarId = DEFAULT_AVATAR_ID; @@ -3184,6 +3271,10 @@ public class PreferencesDialog extends javax.swing.JDialog { } }//GEN-LAST:event_cbUseDefaultImageFolderActionPerformed + private void cbThemeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cbThemeActionPerformed + // TODO add your handling code here: + }//GEN-LAST:event_cbThemeActionPerformed + private void showProxySettings() { Connection.ProxyType proxyType = (Connection.ProxyType) cbProxyType.getSelectedItem(); switch (proxyType) { @@ -3268,6 +3359,9 @@ public class PreferencesDialog extends javax.swing.JDialog { // Controls loadControlSettings(prefs); + // Themes + loadThemeSettings(prefs); + // Selected avatar loadSelectedAvatar(prefs); @@ -3457,6 +3551,10 @@ public class PreferencesDialog extends javax.swing.JDialog { load(prefs, dialog.keySwitchChat); } + private static void loadThemeSettings(Preferences prefs) { + dialog.cbTheme.setSelectedItem(PreferencesDialog.getCurrentTheme()); + } + private static void loadSelectedAvatar(Preferences prefs) { getSelectedAvatar(); dialog.setSelectedId(selectedAvatarId); @@ -3916,6 +4014,7 @@ public class PreferencesDialog extends javax.swing.JDialog { private javax.swing.JCheckBox cbStopOnAllEnd; private javax.swing.JCheckBox cbStopOnAllMain; private javax.swing.JCheckBox cbStopOnNewStackObjects; + private javax.swing.JComboBox cbTheme; private javax.swing.JCheckBox cbUseDefaultBackground; private javax.swing.JCheckBox cbUseDefaultBattleImage; private javax.swing.JCheckBox cbUseDefaultImageFolder; @@ -4015,6 +4114,8 @@ public class PreferencesDialog extends javax.swing.JDialog { private javax.swing.JLabel labelToggleRecordMacro; private javax.swing.JLabel labelTooltipSize; private javax.swing.JLabel labelYourTurn; + private javax.swing.JLabel lbSelectLabel; + private javax.swing.JLabel lbThemeHint; private javax.swing.JLabel lblBattlefieldFeedbackColorizingMode; private javax.swing.JLabel lblProxyPassword; private javax.swing.JLabel lblProxyPort; @@ -4062,7 +4163,9 @@ public class PreferencesDialog extends javax.swing.JDialog { private javax.swing.JPanel tabMain; private javax.swing.JPanel tabPhases; private javax.swing.JPanel tabSounds; + private javax.swing.JPanel tabThemes; private javax.swing.JTabbedPane tabsPanel; + private javax.swing.JPanel themesCategory; private javax.swing.JSlider tooltipDelay; private javax.swing.JLabel tooltipDelayLabel; private javax.swing.JTextField txtBackgroundImagePath; diff --git a/Mage.Client/src/main/java/mage/client/game/FeedbackPanel.java b/Mage.Client/src/main/java/mage/client/game/FeedbackPanel.java index 4d1c9c4ec4..b4bc6cdaaf 100644 --- a/Mage.Client/src/main/java/mage/client/game/FeedbackPanel.java +++ b/Mage.Client/src/main/java/mage/client/game/FeedbackPanel.java @@ -10,6 +10,7 @@ package mage.client.game; import java.awt.Component; import java.awt.event.ActionEvent; import java.io.Serializable; +import java.time.LocalDateTime; import java.util.Map; import java.util.UUID; import java.util.concurrent.Executors; @@ -46,6 +47,7 @@ public class FeedbackPanel extends javax.swing.JPanel { private MageDialog connectedDialog; private ChatPanelBasic connectedChatPanel; private int lastMessageId; + private LocalDateTime lastResponse; private static final ScheduledExecutorService WORKER = Executors.newSingleThreadScheduledExecutor(); @@ -85,6 +87,13 @@ public class FeedbackPanel extends javax.swing.JPanel { String lblText = addAdditionalText(message, options); this.helper.setTextArea(lblText); //this.lblMessage.setText(lblText); + + // Alert user when needing feedback if last dialog was informative, and it has been over 2 seconds since last input + if (this.mode == FeedbackMode.INFORM && mode != FeedbackMode.INFORM + && (this.lastResponse == null || this.lastResponse.isBefore(LocalDateTime.now().minusSeconds(2)))) { + AudioManager.playFeedbackNeeded(); + } + this.mode = mode; switch (this.mode) { case INFORM: @@ -244,7 +253,8 @@ public class FeedbackPanel extends javax.swing.JPanel { } private void btnRightActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnRightActionPerformed - if (connectedDialog != null) { + setLastResponse(); + if (connectedDialog != null) { connectedDialog.removeDialog(); connectedDialog = null; } @@ -262,15 +272,18 @@ public class FeedbackPanel extends javax.swing.JPanel { }//GEN-LAST:event_btnRightActionPerformed private void btnLeftActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnLeftActionPerformed + setLastResponse(); SessionHandler.sendPlayerBoolean(gameId, true); AudioManager.playButtonCancel(); }//GEN-LAST:event_btnLeftActionPerformed private void btnSpecialActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnSpecialActionPerformed + setLastResponse(); SessionHandler.sendPlayerString(gameId, "special"); }//GEN-LAST:event_btnSpecialActionPerformed private void btnUndoActionPerformed(java.awt.event.ActionEvent evt) { + setLastResponse(); SessionHandler.sendPlayerAction(PlayerAction.UNDO, gameId, null); } @@ -301,6 +314,10 @@ public class FeedbackPanel extends javax.swing.JPanel { public void disableUndo() { this.helper.setUndoEnabled(false); } + + public void setLastResponse() { + this.lastResponse = LocalDateTime.now(); + } private javax.swing.JButton btnLeft; private javax.swing.JButton btnRight; diff --git a/Mage.Client/src/main/java/mage/client/game/GamePanel.java b/Mage.Client/src/main/java/mage/client/game/GamePanel.java index b5578b3289..f9d796dee9 100644 --- a/Mage.Client/src/main/java/mage/client/game/GamePanel.java +++ b/Mage.Client/src/main/java/mage/client/game/GamePanel.java @@ -18,6 +18,7 @@ import mage.client.dialog.CardInfoWindowDialog.ShowType; import mage.client.game.FeedbackPanel.FeedbackMode; import mage.client.plugins.adapters.MageActionCallback; import mage.client.plugins.impl.Plugins; +import mage.client.themes.ThemeType; import mage.client.util.Event; import mage.client.util.*; import mage.client.util.audio.AudioManager; @@ -1575,7 +1576,6 @@ public final class GamePanel extends javax.swing.JPanel { @SuppressWarnings("unchecked") private void initComponents() { - abilityPicker = new mage.client.components.ability.AbilityPicker(); jSplitPane1 = new javax.swing.JSplitPane(); jSplitPane0 = new javax.swing.JSplitPane(); @@ -1610,14 +1610,16 @@ public final class GamePanel extends javax.swing.JPanel { txtHoldPriority.setToolTipText("Holding priority after the next spell cast or ability activation"); txtHoldPriority.setVisible(false); - btnToggleMacro = new KeyboundButton(KEY_CONTROL_TOGGLE_MACRO); - btnCancelSkip = new KeyboundButton(KEY_CONTROL_CANCEL_SKIP); // F3 - btnSkipToNextTurn = new KeyboundButton(KEY_CONTROL_NEXT_TURN); // F4 - btnSkipToEndTurn = new KeyboundButton(KEY_CONTROL_END_STEP); // F5 - btnSkipToNextMain = new KeyboundButton(KEY_CONTROL_MAIN_STEP); // F7 - btnSkipStack = new KeyboundButton(KEY_CONTROL_SKIP_STACK); // F10 - btnSkipToYourTurn = new KeyboundButton(KEY_CONTROL_YOUR_TURN); // F9 - btnSkipToEndStepBeforeYourTurn = new KeyboundButton(KEY_CONTROL_PRIOR_END); // F11 + boolean displayButtonText = PreferencesDialog.getCurrentTheme().isShortcutsVisibleForSkipButtons(); + + btnToggleMacro = new KeyboundButton(KEY_CONTROL_TOGGLE_MACRO, displayButtonText); + btnCancelSkip = new KeyboundButton(KEY_CONTROL_CANCEL_SKIP, displayButtonText); // F3 + btnSkipToNextTurn = new KeyboundButton(KEY_CONTROL_NEXT_TURN, displayButtonText); // F4 + btnSkipToEndTurn = new KeyboundButton(KEY_CONTROL_END_STEP, displayButtonText); // F5 + btnSkipToNextMain = new KeyboundButton(KEY_CONTROL_MAIN_STEP, displayButtonText); // F7 + btnSkipStack = new KeyboundButton(KEY_CONTROL_SKIP_STACK, displayButtonText); // F10 + btnSkipToYourTurn = new KeyboundButton(KEY_CONTROL_YOUR_TURN, displayButtonText); // F9 + btnSkipToEndStepBeforeYourTurn = new KeyboundButton(KEY_CONTROL_PRIOR_END, displayButtonText); // F11 btnConcede = new javax.swing.JButton(); btnSwitchHands = new javax.swing.JButton(); @@ -2353,6 +2355,7 @@ public final class GamePanel extends javax.swing.JPanel { } private void btnEndTurnActionPerformed(java.awt.event.ActionEvent evt) { + this.feedbackPanel.setLastResponse(); SessionHandler.sendPlayerAction(PlayerAction.PASS_PRIORITY_UNTIL_NEXT_TURN, gameId, null); skipButtons.activateSkipButton(KEY_CONTROL_NEXT_TURN); @@ -2376,6 +2379,7 @@ public final class GamePanel extends javax.swing.JPanel { } private void btnUntilEndOfTurnActionPerformed(java.awt.event.ActionEvent evt) { + this.feedbackPanel.setLastResponse(); SessionHandler.sendPlayerAction(PlayerAction.PASS_PRIORITY_UNTIL_TURN_END_STEP, gameId, null); skipButtons.activateSkipButton(KEY_CONTROL_END_STEP); @@ -2393,6 +2397,7 @@ public final class GamePanel extends javax.swing.JPanel { } private void btnUntilNextMainPhaseActionPerformed(java.awt.event.ActionEvent evt) { + this.feedbackPanel.setLastResponse(); SessionHandler.sendPlayerAction(PlayerAction.PASS_PRIORITY_UNTIL_NEXT_MAIN_PHASE, gameId, null); skipButtons.activateSkipButton(KEY_CONTROL_MAIN_STEP); @@ -2401,6 +2406,7 @@ public final class GamePanel extends javax.swing.JPanel { } private void btnPassPriorityUntilNextYourTurnActionPerformed(java.awt.event.ActionEvent evt) { + this.feedbackPanel.setLastResponse(); SessionHandler.sendPlayerAction(PlayerAction.PASS_PRIORITY_UNTIL_MY_NEXT_TURN, gameId, null); skipButtons.activateSkipButton(KEY_CONTROL_YOUR_TURN); @@ -2409,6 +2415,7 @@ public final class GamePanel extends javax.swing.JPanel { } private void btnPassPriorityUntilStackResolvedActionPerformed(java.awt.event.ActionEvent evt) { + this.feedbackPanel.setLastResponse(); SessionHandler.sendPlayerAction(PlayerAction.PASS_PRIORITY_UNTIL_STACK_RESOLVED, gameId, null); skipButtons.activateSkipButton(KEY_CONTROL_SKIP_STACK); @@ -2417,6 +2424,7 @@ public final class GamePanel extends javax.swing.JPanel { } private void btnSkipToEndStepBeforeYourTurnActionPerformed(java.awt.event.ActionEvent evt) { + this.feedbackPanel.setLastResponse(); SessionHandler.sendPlayerAction(PlayerAction.PASS_PRIORITY_UNTIL_END_STEP_BEFORE_MY_NEXT_TURN, gameId, null); skipButtons.activateSkipButton(KEY_CONTROL_PRIOR_END); @@ -2425,6 +2433,7 @@ public final class GamePanel extends javax.swing.JPanel { } private void restorePriorityActionPerformed(java.awt.event.ActionEvent evt) { + this.feedbackPanel.setLastResponse(); SessionHandler.sendPlayerAction(PlayerAction.PASS_PRIORITY_CANCEL_ALL_ACTIONS, gameId, null); skipButtons.activateSkipButton(""); diff --git a/Mage.Client/src/main/java/mage/client/game/PlayerPanelExt.java b/Mage.Client/src/main/java/mage/client/game/PlayerPanelExt.java index c7d7ac32d0..2c713fd410 100644 --- a/Mage.Client/src/main/java/mage/client/game/PlayerPanelExt.java +++ b/Mage.Client/src/main/java/mage/client/game/PlayerPanelExt.java @@ -16,6 +16,7 @@ import mage.client.components.HoverButton; import mage.client.components.MageRoundPane; import mage.client.components.ext.dlg.DialogManager; import mage.client.dialog.PreferencesDialog; +import mage.client.themes.ThemeType; import mage.client.util.CardsViewUtil; import mage.client.util.ImageHelper; import mage.client.util.gui.BufferedImageBuilder; @@ -56,9 +57,9 @@ public class PlayerPanelExt extends javax.swing.JPanel { private static final Border GREEN_BORDER = new LineBorder(Color.green, 3); private static final Border RED_BORDER = new LineBorder(Color.red, 2); private static final Border EMPTY_BORDER = BorderFactory.createEmptyBorder(0, 0, 0, 0); - private final Color inactiveBackgroundColor = new Color(200, 200, 180, 200); - private final Color activeBackgroundColor = new Color(200, 255, 200, 200); - private final Color deadBackgroundColor = new Color(131, 94, 83, 200); + private final Color inactiveBackgroundColor; + private final Color activeBackgroundColor; + private final Color deadBackgroundColor; private final Color activeValueColor = new Color(244, 9, 47); private final Font fontValuesZero = this.getFont().deriveFont(Font.PLAIN); @@ -78,6 +79,11 @@ public class PlayerPanelExt extends javax.swing.JPanel { setPreferredSize(new Dimension(PANEL_WIDTH, PANEL_HEIGHT)); initComponents(); setGUISize(); + + ThemeType currentTheme = PreferencesDialog.getCurrentTheme(); + inactiveBackgroundColor = currentTheme.getPlayerPanel_inactiveBackgroundColor(); + activeBackgroundColor = currentTheme.getPlayerPanel_activeBackgroundColor(); + deadBackgroundColor = currentTheme.getPlayerPanel_deadBackgroundColor(); } public void init(UUID gameId, UUID playerId, BigCard bigCard, int priorityTime) { diff --git a/Mage.Client/src/main/java/mage/client/themes/ThemeType.java b/Mage.Client/src/main/java/mage/client/themes/ThemeType.java new file mode 100644 index 0000000000..52f1264c02 --- /dev/null +++ b/Mage.Client/src/main/java/mage/client/themes/ThemeType.java @@ -0,0 +1,270 @@ +package mage.client.themes; + +import java.awt.*; + +public enum ThemeType { + // https://docs.oracle.com/javase/tutorial/uiswing/lookandfeel/_nimbusDefaults.html + DEFAULT("Default Theme", + "", + true, + false, + true, + true, + true, + true, + true, + new Color(169,176,190), // nimbusBlueGrey + new Color(214,217,223), // control + new Color(255,255,255), // nimbusLightBackground + new Color(242,242,189), // info + new Color(51,98,140), // nimbusBase + null, // mageToolbar + new Color(200, 200, 180, 200), // playerPanel_inactiveBackgroundColor + new Color(200, 255, 200, 200), // playerPanel_activeBackgroundColor + new Color(131, 94, 83, 200) // playerPanel_deadBackgroundColor + ), + GREY("GREY", + "grey-theme/", + false, + false, + false, + false, + false, + true, + true, + new Color(158, 158, 158), // nimbusBlueGrey + new Color(212, 212, 212), // control + new Color(215, 215, 215), // nimbusLightBackground + new Color(189, 189, 164), // info + new Color(102, 102, 102), // nimbusBase + null, // mageToolbar + new Color(172, 172, 172, 200), // playerPanel_inactiveBackgroundColor + new Color(180, 234, 180, 200), // playerPanel_activeBackgroundColor + new Color(99, 99, 99, 200) // playerPanel_deadBackgroundColor + ), + SUNSET_VAPORWAVE("Sunset Vaporwave", + "16bit-theme/", + true, + true, + false, + true, + true, + true, + false, + new Color(246, 136, 158), + new Color(243, 233, 164), + new Color(204, 236, 201), + new Color(117, 174, 238), + new Color(106, 0, 255), + new Color(192, 166, 232), + new Color(243, 233, 164), + new Color(204, 236, 201), + new Color(106, 0, 255) + ), + COFFEE("Coffee", + "coffee-theme/", + true, + true, + true, + true, + true, + true, + false, + new Color(219, 193, 172), // nimbusBlueGrey + new Color(182, 157, 135), // control + new Color(219, 193, 172), // nimbusLightBackground + new Color(219, 197, 182), // info + new Color(97, 27, 0), // nimbusBase + new Color(219, 193, 172), // mageToolbar + new Color(219, 193, 172), + new Color(204, 236, 201), + new Color(99, 72, 50, 255) + ), + ISLAND("Island", + "island-theme/", + true, + true, + false, + true, + true, + true, + false, + new Color(172, 197, 219), // nimbusBlueGrey + new Color(135, 158, 182), // control + new Color(172, 197, 219), // nimbusLightBackground + new Color(182, 200, 219), // info + new Color(0, 78, 97), // nimbusBase + new Color(172, 195, 219), // mageToolbar + new Color(172, 195, 219), + new Color(204, 236, 201), + new Color(50, 68, 99, 255) + ); + + private final String name; + private final String path; + private final boolean hasBackground; + private final boolean hasLoginBackground; + private final boolean hasBattleBackground; + private final boolean hasSkipButtons; + private final boolean hasPhaseIcons; + private final boolean hasWinLossImages; + private final boolean shortcutsVisibleForSkipButtons; // Whether or not to display skip button shortcuts + private final Color nimbusBlueGrey; // buttons, scrollbar background, disabled inputs + private final Color control; // window bg + private final Color nimbusLightBackground; // inputs, table rows + private final Color info;// tooltips + private final Color nimbusBase;// title bars, scrollbar foreground + private final Color mageToolbar; + private final Color playerPanel_inactiveBackgroundColor; + private final Color playerPanel_activeBackgroundColor; + private final Color playerPanel_deadBackgroundColor; + + ThemeType(String name, + String path, + boolean hasBackground, + boolean hasLoginBackground, + boolean hasBattleBackground, + boolean hasSkipButtons, + boolean hasPhaseIcons, + boolean hasWinLossImages, + boolean shortcutsVisibleForSkipButtons, + Color nimbusBlueGrey, + Color control, + Color nimbusLightBackground, + Color info, + Color nimbusBase, + Color mageToolbar, + Color playerPanel_inactiveBackgroundColor, + Color playerPanel_activeBackgroundColor, + Color playerPanel_deadBackgroundColor + ) { + this.name = name; + this.path = path; + this.hasBackground = hasBackground; + this.hasLoginBackground = hasLoginBackground; + this.hasBattleBackground = hasBattleBackground; + this.hasSkipButtons = hasSkipButtons; + this.hasPhaseIcons = hasPhaseIcons; + this.hasWinLossImages = hasWinLossImages; + this.shortcutsVisibleForSkipButtons = shortcutsVisibleForSkipButtons; + this.nimbusBlueGrey = nimbusBlueGrey; + this.control = control; + this.nimbusLightBackground = nimbusLightBackground; + this.info = info; + this.nimbusBase = nimbusBase; + this.mageToolbar = mageToolbar; + this.playerPanel_activeBackgroundColor = playerPanel_activeBackgroundColor; + this.playerPanel_deadBackgroundColor = playerPanel_deadBackgroundColor; + this.playerPanel_inactiveBackgroundColor = playerPanel_inactiveBackgroundColor; + } + + @Override + public String toString() { + return name; + } + + public static ThemeType valueByName(String value) { + for (ThemeType themeType : values()) { + if (themeType.name.equals(value)) { + return themeType; + } + } + return DEFAULT; + } + + public String getName() { + return name; + } + + public boolean isShortcutsVisibleForSkipButtons() { + return shortcutsVisibleForSkipButtons; + } + + public Color getNimbusBlueGrey() { + return nimbusBlueGrey; + } + + public Color getControl() { + return control; + } + + public Color getNimbusLightBackground() { + return nimbusLightBackground; + } + + public Color getInfo() { + return info; + } + + public Color getNimbusBase() { + return nimbusBase; + } + + public Color getMageToolbar() { + return mageToolbar; + } + + public Color getPlayerPanel_inactiveBackgroundColor() { + return playerPanel_inactiveBackgroundColor; + } + + public Color getPlayerPanel_activeBackgroundColor() { + return playerPanel_activeBackgroundColor; + } + + public Color getPlayerPanel_deadBackgroundColor() { + return playerPanel_deadBackgroundColor; + } + + private String getImagePath(String imageType, String name) { + return "/" + imageType + "/" + path + name; + } + + public String getButtonPath(String name) { + if (hasSkipButtons) { + return getImagePath("buttons", name); + } else { + return "/buttons/" + name; + } + } + + public String getPhasePath(String name) { + if (hasPhaseIcons) { + return getImagePath("phases", name); + } else { + return "/phases/" + name; + } + } + + public String getWinlossPath(String name) { + if (hasWinLossImages) { + return getImagePath("winloss", name); + } else { + return "/winloss/" + name; + } + } + + public String getBackgroundPath() { + if (hasBackground) { + return getImagePath("background", "background.png"); + } else { + return "/background/background.png"; + } + } + + public String getLoginBackgroundPath() { + if (hasLoginBackground) { + return getImagePath("background", "login-background.png"); + } else { + return getBackgroundPath(); + } + } + + public String getBattleBackgroundPath() { + if (hasBattleBackground) { + return getImagePath("background", "battle-background.png"); + } else { + return getBackgroundPath(); + } + } +} \ No newline at end of file diff --git a/Mage.Client/src/main/java/mage/client/util/audio/AudioManager.java b/Mage.Client/src/main/java/mage/client/util/audio/AudioManager.java index 5e310ddbf1..a303282d47 100644 --- a/Mage.Client/src/main/java/mage/client/util/audio/AudioManager.java +++ b/Mage.Client/src/main/java/mage/client/util/audio/AudioManager.java @@ -47,6 +47,7 @@ public class AudioManager { private MageClip playerQuitTournament = null; private MageClip playerWon = null; private MageClip playerLost = null; + private MageClip feedbackNeeded = null; /** * AudioManager singleton. */ @@ -284,6 +285,13 @@ public class AudioManager { } checkAndPlayClip(audioManager.playerWon); } + + public static void playFeedbackNeeded() { + if (audioManager.feedbackNeeded == null) { + audioManager.feedbackNeeded = new MageClip(Constants.BASE_SOUND_PATH + "FeedbackNeeded.wav", AudioGroup.GameSounds); + } + checkAndPlayClip(audioManager.feedbackNeeded); + } private static boolean audioGroupEnabled(AudioGroup audioGroup) { switch (audioGroup) { diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/utils/impl/ImageManagerImpl.java b/Mage.Client/src/main/java/org/mage/plugins/card/utils/impl/ImageManagerImpl.java index e37eb827c1..0aff4722d9 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/utils/impl/ImageManagerImpl.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/utils/impl/ImageManagerImpl.java @@ -14,6 +14,8 @@ import java.util.HashMap; import java.util.Locale; import java.util.Map; import javax.imageio.ImageIO; + +import mage.client.dialog.PreferencesDialog; import mage.client.util.gui.BufferedImageBuilder; import org.mage.plugins.card.utils.ImageManager; import org.mage.plugins.card.utils.Transparency; @@ -31,7 +33,9 @@ public enum ImageManagerImpl implements ImageManager { "Main2", "Cleanup", "Next_Turn"}; phasesImages = new HashMap<>(); for (String name : phases) { - Image image = getImageFromResource("/phases/phase_" + name.toLowerCase(Locale.ENGLISH) + ".png", new Rectangle(36, 36)); + Image image = getImageFromResource( + PreferencesDialog.getCurrentTheme().getPhasePath("phase_" + name.toLowerCase(Locale.ENGLISH) + ".png"), + new Rectangle(36, 36)); phasesImages.put(name, image); } } @@ -263,7 +267,8 @@ public enum ImageManagerImpl implements ImageManager { @Override public Image getConcedeButtonImage() { if (imageConcedeButton == null) { - imageConcedeButton = getBufferedImageFromResource("/buttons/concede.png"); + imageConcedeButton = getBufferedImageFromResource( + PreferencesDialog.getCurrentTheme().getButtonPath("concede.png")); } return imageConcedeButton; } @@ -271,7 +276,8 @@ public enum ImageManagerImpl implements ImageManager { @Override public Image getSwitchHandsButtonImage() { if (imageSwitchHandsButton == null) { - imageSwitchHandsButton = getBufferedImageFromResource("/buttons/switch_hands.png"); + imageSwitchHandsButton = getBufferedImageFromResource( + PreferencesDialog.getCurrentTheme().getButtonPath("switch_hands.png")); } return imageSwitchHandsButton; } @@ -279,7 +285,8 @@ public enum ImageManagerImpl implements ImageManager { @Override public Image getStopWatchButtonImage() { if (imageStopWatchingButton == null) { - imageStopWatchingButton = getBufferedImageFromResource("/buttons/stop_watching.png"); + imageStopWatchingButton = getBufferedImageFromResource( + PreferencesDialog.getCurrentTheme().getButtonPath("stop_watching.png")); } return imageStopWatchingButton; } @@ -287,7 +294,8 @@ public enum ImageManagerImpl implements ImageManager { @Override public Image getCancelSkipButtonImage() { if (imageCancelSkipButton == null) { - imageCancelSkipButton = getBufferedImageFromResource("/buttons/cancel_skip.png"); + imageCancelSkipButton = getBufferedImageFromResource( + PreferencesDialog.getCurrentTheme().getButtonPath("cancel_skip.png")); } return imageCancelSkipButton; } @@ -295,7 +303,8 @@ public enum ImageManagerImpl implements ImageManager { @Override public Image getSkipNextTurnButtonImage() { if (imageSkipNextTurnButton == null) { - imageSkipNextTurnButton = getBufferedImageFromResource("/buttons/skip_turn.png"); + imageSkipNextTurnButton = getBufferedImageFromResource( + PreferencesDialog.getCurrentTheme().getButtonPath("skip_turn.png")); } return imageSkipNextTurnButton; } @@ -303,7 +312,8 @@ public enum ImageManagerImpl implements ImageManager { @Override public Image getSkipEndTurnButtonImage() { if (imageSkipToEndTurnButton == null) { - imageSkipToEndTurnButton = getBufferedImageFromResource("/buttons/skip_to_end.png"); + imageSkipToEndTurnButton = getBufferedImageFromResource( + PreferencesDialog.getCurrentTheme().getButtonPath("skip_to_end.png")); } return imageSkipToEndTurnButton; } @@ -311,7 +321,8 @@ public enum ImageManagerImpl implements ImageManager { @Override public Image getSkipMainButtonImage() { if (imageSkipToMainButton == null) { - imageSkipToMainButton = getBufferedImageFromResource("/buttons/skip_to_main.png"); + imageSkipToMainButton = getBufferedImageFromResource( + PreferencesDialog.getCurrentTheme().getButtonPath("skip_to_main.png")); } return imageSkipToMainButton; } @@ -319,7 +330,8 @@ public enum ImageManagerImpl implements ImageManager { @Override public Image getSkipStackButtonImage() { if (imageSkipStackButton == null) { - imageSkipStackButton = getBufferedImageFromResource("/buttons/skip_stack.png"); + imageSkipStackButton = getBufferedImageFromResource( + PreferencesDialog.getCurrentTheme().getButtonPath("skip_stack.png")); } return imageSkipStackButton; } @@ -327,7 +339,8 @@ public enum ImageManagerImpl implements ImageManager { @Override public Image getSkipEndStepBeforeYourTurnButtonImage() { if (imageSkipUntilEndStepBeforeYourTurnButton == null) { - imageSkipUntilEndStepBeforeYourTurnButton = getBufferedImageFromResource("/buttons/skip_to_previous_end.png"); + imageSkipUntilEndStepBeforeYourTurnButton = getBufferedImageFromResource( + PreferencesDialog.getCurrentTheme().getButtonPath("skip_to_previous_end.png")); } return imageSkipUntilEndStepBeforeYourTurnButton; } @@ -335,7 +348,8 @@ public enum ImageManagerImpl implements ImageManager { @Override public Image getSkipYourNextTurnButtonImage() { if (imageSkipYourNextTurnButton == null) { - imageSkipYourNextTurnButton = getBufferedImageFromResource("/buttons/skip_all.png"); + imageSkipYourNextTurnButton = getBufferedImageFromResource( + PreferencesDialog.getCurrentTheme().getButtonPath("skip_all.png")); } return imageSkipYourNextTurnButton; } @@ -343,7 +357,8 @@ public enum ImageManagerImpl implements ImageManager { @Override public Image getToggleRecordMacroButtonImage() { if (imageToggleRecordMacroButton == null) { - imageToggleRecordMacroButton = getBufferedImageFromResource("/buttons/toggle_macro.png"); + imageToggleRecordMacroButton = getBufferedImageFromResource( + PreferencesDialog.getCurrentTheme().getButtonPath("toggle_macro.png")); } return imageToggleRecordMacroButton; } diff --git a/Mage.Client/src/main/java/org/mage/plugins/theme/ThemePluginImpl.java b/Mage.Client/src/main/java/org/mage/plugins/theme/ThemePluginImpl.java index 6f9b00879f..7d12660d5a 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/theme/ThemePluginImpl.java +++ b/Mage.Client/src/main/java/org/mage/plugins/theme/ThemePluginImpl.java @@ -12,7 +12,6 @@ import mage.components.ImagePanel; import mage.components.ImagePanelStyle; import mage.interfaces.plugin.ThemePlugin; import net.xeoh.plugins.base.annotations.PluginImplementation; -import net.xeoh.plugins.base.annotations.events.Init; import net.xeoh.plugins.base.annotations.events.PluginLoaded; import net.xeoh.plugins.base.annotations.meta.Author; import org.apache.log4j.Logger; @@ -27,10 +26,6 @@ public class ThemePluginImpl implements ThemePlugin { private final List flist = new List(); private final String BackgroundDir = "backgrounds" + File.separator; - @Init - public void init() { - } - @PluginLoaded public void newPlugin(ThemePlugin plugin) { log.info(plugin.toString() + " has been loaded."); @@ -104,10 +99,11 @@ public class ThemePluginImpl implements ThemePlugin { } } + // Sets background for in-battle + // loadbuffer_default - Only apply theme background if no custom user background set private BufferedImage loadbuffer_default() throws IOException { - String filename = "/dragon.png"; BufferedImage res; - InputStream is = this.getClass().getResourceAsStream(filename); + InputStream is = this.getClass().getResourceAsStream(PreferencesDialog.getCurrentTheme().getBattleBackgroundPath()); res = ImageIO.read(is); return res; } @@ -150,43 +146,44 @@ public class ThemePluginImpl implements ThemePlugin { return bgPanel; } + // Sets background for logged in user for tables/deck editor/card viewer/etc private synchronized ImagePanel createImagePanelInstance() { if (background == null) { - String filename = "/background.png"; - try { - if (PreferencesDialog.getCachedValue(PreferencesDialog.KEY_BACKGROUND_IMAGE_DEFAULT, "true").equals("true")) { - InputStream is = this.getClass().getResourceAsStream(filename); - if (is == null) { - throw new FileNotFoundException("Couldn't find " + filename + " in resources."); - } - background = ImageIO.read(is); - } else { - String path = PreferencesDialog.getCachedValue(PreferencesDialog.KEY_BACKGROUND_IMAGE, ""); - if (path != null && !path.isEmpty()) { - try { - File f = new File(path); - if (f != null) { - background = ImageIO.read(f); - } - } catch (Exception e) { - background = null; + try { + if (PreferencesDialog.getCachedValue(PreferencesDialog.KEY_BACKGROUND_IMAGE_DEFAULT, "true").equals("true")) { + InputStream is = this.getClass().getResourceAsStream(PreferencesDialog.getCurrentTheme().getBackgroundPath()); + if (is == null) { + throw new FileNotFoundException("Couldn't find " + PreferencesDialog.getCurrentTheme().getBackgroundPath() + " in resources."); + } + background = ImageIO.read(is); + } else { + String path = PreferencesDialog.getCachedValue(PreferencesDialog.KEY_BACKGROUND_IMAGE, ""); + if (path != null && !path.isEmpty()) { + try { + File f = new File(path); + if (f != null) { + background = ImageIO.read(f); } + } catch (Exception e) { + background = null; } } - if (background == null) { - InputStream is = this.getClass().getResourceAsStream(filename); - if (is == null) { - throw new FileNotFoundException("Couldn't find " + filename + " in resources."); - } - background = ImageIO.read(is); + } + if (background == null) { + String filename = "/background/background.png"; + InputStream is = this.getClass().getResourceAsStream(filename); + if (is == null) { + throw new FileNotFoundException("Couldn't find " + filename + " in resources."); } + background = ImageIO.read(is); if (background == null) { throw new FileNotFoundException("Couldn't find " + filename + " in resources."); } - } catch (Exception e) { - log.error(e.getMessage(), e); - return null; } + } catch (Exception e) { + log.error(e.getMessage(), e); + return null; + } } return new ImagePanel(background, ImagePanelStyle.SCALED); } diff --git a/Mage.Client/src/main/resources/background.jpg b/Mage.Client/src/main/resources/background.jpg deleted file mode 100644 index 75c7980b63..0000000000 Binary files a/Mage.Client/src/main/resources/background.jpg and /dev/null differ diff --git a/Mage.Client/src/main/resources/background/16bit-theme/background.png b/Mage.Client/src/main/resources/background/16bit-theme/background.png new file mode 100644 index 0000000000..53260054e5 Binary files /dev/null and b/Mage.Client/src/main/resources/background/16bit-theme/background.png differ diff --git a/Mage.Client/src/main/resources/background/16bit-theme/login-background.png b/Mage.Client/src/main/resources/background/16bit-theme/login-background.png new file mode 100644 index 0000000000..a1c69400c5 Binary files /dev/null and b/Mage.Client/src/main/resources/background/16bit-theme/login-background.png differ diff --git a/Mage.Client/src/main/resources/background.png b/Mage.Client/src/main/resources/background/background.png similarity index 100% rename from Mage.Client/src/main/resources/background.png rename to Mage.Client/src/main/resources/background/background.png diff --git a/Mage.Client/src/main/resources/dragon.png b/Mage.Client/src/main/resources/background/battle-background.png similarity index 100% rename from Mage.Client/src/main/resources/dragon.png rename to Mage.Client/src/main/resources/background/battle-background.png diff --git a/Mage.Client/src/main/resources/background/coffee-theme/background.png b/Mage.Client/src/main/resources/background/coffee-theme/background.png new file mode 100644 index 0000000000..d027873990 Binary files /dev/null and b/Mage.Client/src/main/resources/background/coffee-theme/background.png differ diff --git a/Mage.Client/src/main/resources/background/coffee-theme/battle-background.png b/Mage.Client/src/main/resources/background/coffee-theme/battle-background.png new file mode 100644 index 0000000000..08aacd45d0 Binary files /dev/null and b/Mage.Client/src/main/resources/background/coffee-theme/battle-background.png differ diff --git a/Mage.Client/src/main/resources/background/coffee-theme/login-background.png b/Mage.Client/src/main/resources/background/coffee-theme/login-background.png new file mode 100644 index 0000000000..c6e272ccd2 Binary files /dev/null and b/Mage.Client/src/main/resources/background/coffee-theme/login-background.png differ diff --git a/Mage.Client/src/main/resources/background/island-theme/background.png b/Mage.Client/src/main/resources/background/island-theme/background.png new file mode 100644 index 0000000000..ee53a5c95b Binary files /dev/null and b/Mage.Client/src/main/resources/background/island-theme/background.png differ diff --git a/Mage.Client/src/main/resources/background/island-theme/login-background.png b/Mage.Client/src/main/resources/background/island-theme/login-background.png new file mode 100644 index 0000000000..1e1c644f5a Binary files /dev/null and b/Mage.Client/src/main/resources/background/island-theme/login-background.png differ diff --git a/Mage.Client/src/main/resources/buttons/16bit-theme/cancel_skip.png b/Mage.Client/src/main/resources/buttons/16bit-theme/cancel_skip.png new file mode 100644 index 0000000000..ccb15fa5f6 Binary files /dev/null and b/Mage.Client/src/main/resources/buttons/16bit-theme/cancel_skip.png differ diff --git a/Mage.Client/src/main/resources/buttons/16bit-theme/concede.png b/Mage.Client/src/main/resources/buttons/16bit-theme/concede.png new file mode 100644 index 0000000000..1ce98fb19a Binary files /dev/null and b/Mage.Client/src/main/resources/buttons/16bit-theme/concede.png differ diff --git a/Mage.Client/src/main/resources/buttons/16bit-theme/skip_all.png b/Mage.Client/src/main/resources/buttons/16bit-theme/skip_all.png new file mode 100644 index 0000000000..52fa4050a0 Binary files /dev/null and b/Mage.Client/src/main/resources/buttons/16bit-theme/skip_all.png differ diff --git a/Mage.Client/src/main/resources/buttons/16bit-theme/skip_stack.png b/Mage.Client/src/main/resources/buttons/16bit-theme/skip_stack.png new file mode 100644 index 0000000000..e2ef22ee23 Binary files /dev/null and b/Mage.Client/src/main/resources/buttons/16bit-theme/skip_stack.png differ diff --git a/Mage.Client/src/main/resources/buttons/16bit-theme/skip_to_end.png b/Mage.Client/src/main/resources/buttons/16bit-theme/skip_to_end.png new file mode 100644 index 0000000000..9a80561dd5 Binary files /dev/null and b/Mage.Client/src/main/resources/buttons/16bit-theme/skip_to_end.png differ diff --git a/Mage.Client/src/main/resources/buttons/16bit-theme/skip_to_main.png b/Mage.Client/src/main/resources/buttons/16bit-theme/skip_to_main.png new file mode 100644 index 0000000000..7ca3ea3f8c Binary files /dev/null and b/Mage.Client/src/main/resources/buttons/16bit-theme/skip_to_main.png differ diff --git a/Mage.Client/src/main/resources/buttons/16bit-theme/skip_to_previous_end.png b/Mage.Client/src/main/resources/buttons/16bit-theme/skip_to_previous_end.png new file mode 100644 index 0000000000..38792e1bd0 Binary files /dev/null and b/Mage.Client/src/main/resources/buttons/16bit-theme/skip_to_previous_end.png differ diff --git a/Mage.Client/src/main/resources/buttons/16bit-theme/skip_turn.png b/Mage.Client/src/main/resources/buttons/16bit-theme/skip_turn.png new file mode 100644 index 0000000000..db01fefadc Binary files /dev/null and b/Mage.Client/src/main/resources/buttons/16bit-theme/skip_turn.png differ diff --git a/Mage.Client/src/main/resources/buttons/16bit-theme/stop_watching.png b/Mage.Client/src/main/resources/buttons/16bit-theme/stop_watching.png new file mode 100644 index 0000000000..5a9ebb7b7b Binary files /dev/null and b/Mage.Client/src/main/resources/buttons/16bit-theme/stop_watching.png differ diff --git a/Mage.Client/src/main/resources/buttons/16bit-theme/switch_hands.png b/Mage.Client/src/main/resources/buttons/16bit-theme/switch_hands.png new file mode 100644 index 0000000000..8ee4fffdde Binary files /dev/null and b/Mage.Client/src/main/resources/buttons/16bit-theme/switch_hands.png differ diff --git a/Mage.Client/src/main/resources/buttons/16bit-theme/toggle_macro.png b/Mage.Client/src/main/resources/buttons/16bit-theme/toggle_macro.png new file mode 100644 index 0000000000..24dafbb4e5 Binary files /dev/null and b/Mage.Client/src/main/resources/buttons/16bit-theme/toggle_macro.png differ diff --git a/Mage.Client/src/main/resources/buttons/coffee-theme/cancel_skip.png b/Mage.Client/src/main/resources/buttons/coffee-theme/cancel_skip.png new file mode 100644 index 0000000000..a65476db20 Binary files /dev/null and b/Mage.Client/src/main/resources/buttons/coffee-theme/cancel_skip.png differ diff --git a/Mage.Client/src/main/resources/buttons/coffee-theme/concede.png b/Mage.Client/src/main/resources/buttons/coffee-theme/concede.png new file mode 100644 index 0000000000..33ff828cbf Binary files /dev/null and b/Mage.Client/src/main/resources/buttons/coffee-theme/concede.png differ diff --git a/Mage.Client/src/main/resources/buttons/coffee-theme/skip_all.png b/Mage.Client/src/main/resources/buttons/coffee-theme/skip_all.png new file mode 100644 index 0000000000..a9e7e90517 Binary files /dev/null and b/Mage.Client/src/main/resources/buttons/coffee-theme/skip_all.png differ diff --git a/Mage.Client/src/main/resources/buttons/coffee-theme/skip_stack.png b/Mage.Client/src/main/resources/buttons/coffee-theme/skip_stack.png new file mode 100644 index 0000000000..ffb27fdc1d Binary files /dev/null and b/Mage.Client/src/main/resources/buttons/coffee-theme/skip_stack.png differ diff --git a/Mage.Client/src/main/resources/buttons/coffee-theme/skip_to_end.png b/Mage.Client/src/main/resources/buttons/coffee-theme/skip_to_end.png new file mode 100644 index 0000000000..1d89223f13 Binary files /dev/null and b/Mage.Client/src/main/resources/buttons/coffee-theme/skip_to_end.png differ diff --git a/Mage.Client/src/main/resources/buttons/coffee-theme/skip_to_main.png b/Mage.Client/src/main/resources/buttons/coffee-theme/skip_to_main.png new file mode 100644 index 0000000000..68171b6302 Binary files /dev/null and b/Mage.Client/src/main/resources/buttons/coffee-theme/skip_to_main.png differ diff --git a/Mage.Client/src/main/resources/buttons/coffee-theme/skip_to_previous_end.png b/Mage.Client/src/main/resources/buttons/coffee-theme/skip_to_previous_end.png new file mode 100644 index 0000000000..a6e23b98d3 Binary files /dev/null and b/Mage.Client/src/main/resources/buttons/coffee-theme/skip_to_previous_end.png differ diff --git a/Mage.Client/src/main/resources/buttons/coffee-theme/skip_turn.png b/Mage.Client/src/main/resources/buttons/coffee-theme/skip_turn.png new file mode 100644 index 0000000000..a9ba0dde7e Binary files /dev/null and b/Mage.Client/src/main/resources/buttons/coffee-theme/skip_turn.png differ diff --git a/Mage.Client/src/main/resources/buttons/coffee-theme/stop_watching.png b/Mage.Client/src/main/resources/buttons/coffee-theme/stop_watching.png new file mode 100644 index 0000000000..baf9868776 Binary files /dev/null and b/Mage.Client/src/main/resources/buttons/coffee-theme/stop_watching.png differ diff --git a/Mage.Client/src/main/resources/buttons/coffee-theme/switch_hands.png b/Mage.Client/src/main/resources/buttons/coffee-theme/switch_hands.png new file mode 100644 index 0000000000..c248dacdcf Binary files /dev/null and b/Mage.Client/src/main/resources/buttons/coffee-theme/switch_hands.png differ diff --git a/Mage.Client/src/main/resources/buttons/coffee-theme/toggle_macro.png b/Mage.Client/src/main/resources/buttons/coffee-theme/toggle_macro.png new file mode 100644 index 0000000000..71cf8e1454 Binary files /dev/null and b/Mage.Client/src/main/resources/buttons/coffee-theme/toggle_macro.png differ diff --git a/Mage.Client/src/main/resources/buttons/island-theme/cancel_skip.png b/Mage.Client/src/main/resources/buttons/island-theme/cancel_skip.png new file mode 100644 index 0000000000..013792f806 Binary files /dev/null and b/Mage.Client/src/main/resources/buttons/island-theme/cancel_skip.png differ diff --git a/Mage.Client/src/main/resources/buttons/island-theme/concede.png b/Mage.Client/src/main/resources/buttons/island-theme/concede.png new file mode 100644 index 0000000000..dcf96b5ec6 Binary files /dev/null and b/Mage.Client/src/main/resources/buttons/island-theme/concede.png differ diff --git a/Mage.Client/src/main/resources/buttons/island-theme/skip_all.png b/Mage.Client/src/main/resources/buttons/island-theme/skip_all.png new file mode 100644 index 0000000000..18576182d4 Binary files /dev/null and b/Mage.Client/src/main/resources/buttons/island-theme/skip_all.png differ diff --git a/Mage.Client/src/main/resources/buttons/island-theme/skip_stack.png b/Mage.Client/src/main/resources/buttons/island-theme/skip_stack.png new file mode 100644 index 0000000000..7e8a313e03 Binary files /dev/null and b/Mage.Client/src/main/resources/buttons/island-theme/skip_stack.png differ diff --git a/Mage.Client/src/main/resources/buttons/island-theme/skip_to_end.png b/Mage.Client/src/main/resources/buttons/island-theme/skip_to_end.png new file mode 100644 index 0000000000..ce9c883c12 Binary files /dev/null and b/Mage.Client/src/main/resources/buttons/island-theme/skip_to_end.png differ diff --git a/Mage.Client/src/main/resources/buttons/island-theme/skip_to_main.png b/Mage.Client/src/main/resources/buttons/island-theme/skip_to_main.png new file mode 100644 index 0000000000..a2d33d3c71 Binary files /dev/null and b/Mage.Client/src/main/resources/buttons/island-theme/skip_to_main.png differ diff --git a/Mage.Client/src/main/resources/buttons/island-theme/skip_to_previous_end.png b/Mage.Client/src/main/resources/buttons/island-theme/skip_to_previous_end.png new file mode 100644 index 0000000000..9eec76991d Binary files /dev/null and b/Mage.Client/src/main/resources/buttons/island-theme/skip_to_previous_end.png differ diff --git a/Mage.Client/src/main/resources/buttons/island-theme/skip_turn.png b/Mage.Client/src/main/resources/buttons/island-theme/skip_turn.png new file mode 100644 index 0000000000..c19196777c Binary files /dev/null and b/Mage.Client/src/main/resources/buttons/island-theme/skip_turn.png differ diff --git a/Mage.Client/src/main/resources/buttons/island-theme/stop_watching.png b/Mage.Client/src/main/resources/buttons/island-theme/stop_watching.png new file mode 100644 index 0000000000..6f8934b8be Binary files /dev/null and b/Mage.Client/src/main/resources/buttons/island-theme/stop_watching.png differ diff --git a/Mage.Client/src/main/resources/buttons/island-theme/switch_hands.png b/Mage.Client/src/main/resources/buttons/island-theme/switch_hands.png new file mode 100644 index 0000000000..f7a39488a6 Binary files /dev/null and b/Mage.Client/src/main/resources/buttons/island-theme/switch_hands.png differ diff --git a/Mage.Client/src/main/resources/buttons/island-theme/toggle_macro.png b/Mage.Client/src/main/resources/buttons/island-theme/toggle_macro.png new file mode 100644 index 0000000000..2c2fd6c659 Binary files /dev/null and b/Mage.Client/src/main/resources/buttons/island-theme/toggle_macro.png differ diff --git a/Mage.Client/src/main/resources/phases/16bit-theme/phase_cleanup.png b/Mage.Client/src/main/resources/phases/16bit-theme/phase_cleanup.png new file mode 100644 index 0000000000..1216dc01b3 Binary files /dev/null and b/Mage.Client/src/main/resources/phases/16bit-theme/phase_cleanup.png differ diff --git a/Mage.Client/src/main/resources/phases/16bit-theme/phase_combat_attack.png b/Mage.Client/src/main/resources/phases/16bit-theme/phase_combat_attack.png new file mode 100644 index 0000000000..47ef061ca1 Binary files /dev/null and b/Mage.Client/src/main/resources/phases/16bit-theme/phase_combat_attack.png differ diff --git a/Mage.Client/src/main/resources/phases/16bit-theme/phase_combat_block.png b/Mage.Client/src/main/resources/phases/16bit-theme/phase_combat_block.png new file mode 100644 index 0000000000..42138c22ca Binary files /dev/null and b/Mage.Client/src/main/resources/phases/16bit-theme/phase_combat_block.png differ diff --git a/Mage.Client/src/main/resources/phases/16bit-theme/phase_combat_damage.png b/Mage.Client/src/main/resources/phases/16bit-theme/phase_combat_damage.png new file mode 100644 index 0000000000..5e13e818a1 Binary files /dev/null and b/Mage.Client/src/main/resources/phases/16bit-theme/phase_combat_damage.png differ diff --git a/Mage.Client/src/main/resources/phases/16bit-theme/phase_combat_end.png b/Mage.Client/src/main/resources/phases/16bit-theme/phase_combat_end.png new file mode 100644 index 0000000000..8bf8f72840 Binary files /dev/null and b/Mage.Client/src/main/resources/phases/16bit-theme/phase_combat_end.png differ diff --git a/Mage.Client/src/main/resources/phases/16bit-theme/phase_combat_start.png b/Mage.Client/src/main/resources/phases/16bit-theme/phase_combat_start.png new file mode 100644 index 0000000000..8e590bd3d4 Binary files /dev/null and b/Mage.Client/src/main/resources/phases/16bit-theme/phase_combat_start.png differ diff --git a/Mage.Client/src/main/resources/phases/16bit-theme/phase_draw.png b/Mage.Client/src/main/resources/phases/16bit-theme/phase_draw.png new file mode 100644 index 0000000000..a4a6883462 Binary files /dev/null and b/Mage.Client/src/main/resources/phases/16bit-theme/phase_draw.png differ diff --git a/Mage.Client/src/main/resources/phases/16bit-theme/phase_main1.png b/Mage.Client/src/main/resources/phases/16bit-theme/phase_main1.png new file mode 100644 index 0000000000..ec11524c0f Binary files /dev/null and b/Mage.Client/src/main/resources/phases/16bit-theme/phase_main1.png differ diff --git a/Mage.Client/src/main/resources/phases/16bit-theme/phase_main2.png b/Mage.Client/src/main/resources/phases/16bit-theme/phase_main2.png new file mode 100644 index 0000000000..71ed702e17 Binary files /dev/null and b/Mage.Client/src/main/resources/phases/16bit-theme/phase_main2.png differ diff --git a/Mage.Client/src/main/resources/phases/16bit-theme/phase_next_turn.png b/Mage.Client/src/main/resources/phases/16bit-theme/phase_next_turn.png new file mode 100644 index 0000000000..c768643f98 Binary files /dev/null and b/Mage.Client/src/main/resources/phases/16bit-theme/phase_next_turn.png differ diff --git a/Mage.Client/src/main/resources/phases/16bit-theme/phase_untap.png b/Mage.Client/src/main/resources/phases/16bit-theme/phase_untap.png new file mode 100644 index 0000000000..51d0bff648 Binary files /dev/null and b/Mage.Client/src/main/resources/phases/16bit-theme/phase_untap.png differ diff --git a/Mage.Client/src/main/resources/phases/16bit-theme/phase_upkeep.png b/Mage.Client/src/main/resources/phases/16bit-theme/phase_upkeep.png new file mode 100644 index 0000000000..19098bb92d Binary files /dev/null and b/Mage.Client/src/main/resources/phases/16bit-theme/phase_upkeep.png differ diff --git a/Mage.Client/src/main/resources/phases/coffee-theme/phase_cleanup.png b/Mage.Client/src/main/resources/phases/coffee-theme/phase_cleanup.png new file mode 100644 index 0000000000..d586c5337a Binary files /dev/null and b/Mage.Client/src/main/resources/phases/coffee-theme/phase_cleanup.png differ diff --git a/Mage.Client/src/main/resources/phases/coffee-theme/phase_combat_attack.png b/Mage.Client/src/main/resources/phases/coffee-theme/phase_combat_attack.png new file mode 100644 index 0000000000..c2ba8aeddf Binary files /dev/null and b/Mage.Client/src/main/resources/phases/coffee-theme/phase_combat_attack.png differ diff --git a/Mage.Client/src/main/resources/phases/coffee-theme/phase_combat_block.png b/Mage.Client/src/main/resources/phases/coffee-theme/phase_combat_block.png new file mode 100644 index 0000000000..15b6a56917 Binary files /dev/null and b/Mage.Client/src/main/resources/phases/coffee-theme/phase_combat_block.png differ diff --git a/Mage.Client/src/main/resources/phases/coffee-theme/phase_combat_damage.png b/Mage.Client/src/main/resources/phases/coffee-theme/phase_combat_damage.png new file mode 100644 index 0000000000..7db4831a83 Binary files /dev/null and b/Mage.Client/src/main/resources/phases/coffee-theme/phase_combat_damage.png differ diff --git a/Mage.Client/src/main/resources/phases/coffee-theme/phase_combat_end.png b/Mage.Client/src/main/resources/phases/coffee-theme/phase_combat_end.png new file mode 100644 index 0000000000..0eaa82979d Binary files /dev/null and b/Mage.Client/src/main/resources/phases/coffee-theme/phase_combat_end.png differ diff --git a/Mage.Client/src/main/resources/phases/coffee-theme/phase_combat_start.png b/Mage.Client/src/main/resources/phases/coffee-theme/phase_combat_start.png new file mode 100644 index 0000000000..78d0048554 Binary files /dev/null and b/Mage.Client/src/main/resources/phases/coffee-theme/phase_combat_start.png differ diff --git a/Mage.Client/src/main/resources/phases/coffee-theme/phase_draw.png b/Mage.Client/src/main/resources/phases/coffee-theme/phase_draw.png new file mode 100644 index 0000000000..30e2574f65 Binary files /dev/null and b/Mage.Client/src/main/resources/phases/coffee-theme/phase_draw.png differ diff --git a/Mage.Client/src/main/resources/phases/coffee-theme/phase_main1.png b/Mage.Client/src/main/resources/phases/coffee-theme/phase_main1.png new file mode 100644 index 0000000000..7d6af3f2cf Binary files /dev/null and b/Mage.Client/src/main/resources/phases/coffee-theme/phase_main1.png differ diff --git a/Mage.Client/src/main/resources/phases/coffee-theme/phase_main2.png b/Mage.Client/src/main/resources/phases/coffee-theme/phase_main2.png new file mode 100644 index 0000000000..26bc6f51d5 Binary files /dev/null and b/Mage.Client/src/main/resources/phases/coffee-theme/phase_main2.png differ diff --git a/Mage.Client/src/main/resources/phases/coffee-theme/phase_next_turn.png b/Mage.Client/src/main/resources/phases/coffee-theme/phase_next_turn.png new file mode 100644 index 0000000000..c768643f98 Binary files /dev/null and b/Mage.Client/src/main/resources/phases/coffee-theme/phase_next_turn.png differ diff --git a/Mage.Client/src/main/resources/phases/coffee-theme/phase_untap.png b/Mage.Client/src/main/resources/phases/coffee-theme/phase_untap.png new file mode 100644 index 0000000000..bae633681d Binary files /dev/null and b/Mage.Client/src/main/resources/phases/coffee-theme/phase_untap.png differ diff --git a/Mage.Client/src/main/resources/phases/coffee-theme/phase_upkeep.png b/Mage.Client/src/main/resources/phases/coffee-theme/phase_upkeep.png new file mode 100644 index 0000000000..de91d28293 Binary files /dev/null and b/Mage.Client/src/main/resources/phases/coffee-theme/phase_upkeep.png differ diff --git a/Mage.Client/src/main/resources/phases/island-theme/phase_cleanup.png b/Mage.Client/src/main/resources/phases/island-theme/phase_cleanup.png new file mode 100644 index 0000000000..82d8ef82fa Binary files /dev/null and b/Mage.Client/src/main/resources/phases/island-theme/phase_cleanup.png differ diff --git a/Mage.Client/src/main/resources/phases/island-theme/phase_combat_attack.png b/Mage.Client/src/main/resources/phases/island-theme/phase_combat_attack.png new file mode 100644 index 0000000000..7b56f796ff Binary files /dev/null and b/Mage.Client/src/main/resources/phases/island-theme/phase_combat_attack.png differ diff --git a/Mage.Client/src/main/resources/phases/island-theme/phase_combat_block.png b/Mage.Client/src/main/resources/phases/island-theme/phase_combat_block.png new file mode 100644 index 0000000000..824b48556d Binary files /dev/null and b/Mage.Client/src/main/resources/phases/island-theme/phase_combat_block.png differ diff --git a/Mage.Client/src/main/resources/phases/island-theme/phase_combat_damage.png b/Mage.Client/src/main/resources/phases/island-theme/phase_combat_damage.png new file mode 100644 index 0000000000..c614cff42d Binary files /dev/null and b/Mage.Client/src/main/resources/phases/island-theme/phase_combat_damage.png differ diff --git a/Mage.Client/src/main/resources/phases/island-theme/phase_combat_end.png b/Mage.Client/src/main/resources/phases/island-theme/phase_combat_end.png new file mode 100644 index 0000000000..83d3cf6dea Binary files /dev/null and b/Mage.Client/src/main/resources/phases/island-theme/phase_combat_end.png differ diff --git a/Mage.Client/src/main/resources/phases/island-theme/phase_combat_start.png b/Mage.Client/src/main/resources/phases/island-theme/phase_combat_start.png new file mode 100644 index 0000000000..d9bf358c18 Binary files /dev/null and b/Mage.Client/src/main/resources/phases/island-theme/phase_combat_start.png differ diff --git a/Mage.Client/src/main/resources/phases/island-theme/phase_draw.png b/Mage.Client/src/main/resources/phases/island-theme/phase_draw.png new file mode 100644 index 0000000000..2ab62ebb54 Binary files /dev/null and b/Mage.Client/src/main/resources/phases/island-theme/phase_draw.png differ diff --git a/Mage.Client/src/main/resources/phases/island-theme/phase_main1.png b/Mage.Client/src/main/resources/phases/island-theme/phase_main1.png new file mode 100644 index 0000000000..e890b9980d Binary files /dev/null and b/Mage.Client/src/main/resources/phases/island-theme/phase_main1.png differ diff --git a/Mage.Client/src/main/resources/phases/island-theme/phase_main2.png b/Mage.Client/src/main/resources/phases/island-theme/phase_main2.png new file mode 100644 index 0000000000..efa04bd865 Binary files /dev/null and b/Mage.Client/src/main/resources/phases/island-theme/phase_main2.png differ diff --git a/Mage.Client/src/main/resources/phases/island-theme/phase_next_turn.png b/Mage.Client/src/main/resources/phases/island-theme/phase_next_turn.png new file mode 100644 index 0000000000..c768643f98 Binary files /dev/null and b/Mage.Client/src/main/resources/phases/island-theme/phase_next_turn.png differ diff --git a/Mage.Client/src/main/resources/phases/island-theme/phase_untap.png b/Mage.Client/src/main/resources/phases/island-theme/phase_untap.png new file mode 100644 index 0000000000..1ee0899960 Binary files /dev/null and b/Mage.Client/src/main/resources/phases/island-theme/phase_untap.png differ diff --git a/Mage.Client/src/main/resources/phases/island-theme/phase_upkeep.png b/Mage.Client/src/main/resources/phases/island-theme/phase_upkeep.png new file mode 100644 index 0000000000..ee95b1cf1c Binary files /dev/null and b/Mage.Client/src/main/resources/phases/island-theme/phase_upkeep.png differ diff --git a/Mage.Client/src/main/resources/winloss/16bit-theme/game_lost.jpg b/Mage.Client/src/main/resources/winloss/16bit-theme/game_lost.jpg new file mode 100644 index 0000000000..a068f73a83 Binary files /dev/null and b/Mage.Client/src/main/resources/winloss/16bit-theme/game_lost.jpg differ diff --git a/Mage.Client/src/main/resources/winloss/16bit-theme/game_won.jpg b/Mage.Client/src/main/resources/winloss/16bit-theme/game_won.jpg new file mode 100644 index 0000000000..fe57590501 Binary files /dev/null and b/Mage.Client/src/main/resources/winloss/16bit-theme/game_won.jpg differ diff --git a/Mage.Client/src/main/resources/winloss/coffee-theme/game_lost.jpg b/Mage.Client/src/main/resources/winloss/coffee-theme/game_lost.jpg new file mode 100644 index 0000000000..c578b7ea87 Binary files /dev/null and b/Mage.Client/src/main/resources/winloss/coffee-theme/game_lost.jpg differ diff --git a/Mage.Client/src/main/resources/winloss/coffee-theme/game_won.jpg b/Mage.Client/src/main/resources/winloss/coffee-theme/game_won.jpg new file mode 100644 index 0000000000..4ab9705c0a Binary files /dev/null and b/Mage.Client/src/main/resources/winloss/coffee-theme/game_won.jpg differ diff --git a/Mage.Client/src/main/resources/game_lost.jpg b/Mage.Client/src/main/resources/winloss/game_lost.jpg similarity index 100% rename from Mage.Client/src/main/resources/game_lost.jpg rename to Mage.Client/src/main/resources/winloss/game_lost.jpg diff --git a/Mage.Client/src/main/resources/game_won.jpg b/Mage.Client/src/main/resources/winloss/game_won.jpg similarity index 100% rename from Mage.Client/src/main/resources/game_won.jpg rename to Mage.Client/src/main/resources/winloss/game_won.jpg diff --git a/Mage.Client/src/main/resources/winloss/grey-theme/game_lost.jpg b/Mage.Client/src/main/resources/winloss/grey-theme/game_lost.jpg new file mode 100644 index 0000000000..49f4dd8216 Binary files /dev/null and b/Mage.Client/src/main/resources/winloss/grey-theme/game_lost.jpg differ diff --git a/Mage.Client/src/main/resources/winloss/grey-theme/game_won.jpg b/Mage.Client/src/main/resources/winloss/grey-theme/game_won.jpg new file mode 100644 index 0000000000..aca845cb1d Binary files /dev/null and b/Mage.Client/src/main/resources/winloss/grey-theme/game_won.jpg differ diff --git a/Mage.Client/src/main/resources/winloss/island-theme/game_lost.jpg b/Mage.Client/src/main/resources/winloss/island-theme/game_lost.jpg new file mode 100644 index 0000000000..ac71ca0ce0 Binary files /dev/null and b/Mage.Client/src/main/resources/winloss/island-theme/game_lost.jpg differ diff --git a/Mage.Client/src/main/resources/winloss/island-theme/game_won.jpg b/Mage.Client/src/main/resources/winloss/island-theme/game_won.jpg new file mode 100644 index 0000000000..18bdfcfcbe Binary files /dev/null and b/Mage.Client/src/main/resources/winloss/island-theme/game_won.jpg differ diff --git a/Mage.Server.Plugins/Mage.Deck.Constructed/pom.xml b/Mage.Server.Plugins/Mage.Deck.Constructed/pom.xml index f37a90e2ac..0e9e81ccd1 100644 --- a/Mage.Server.Plugins/Mage.Deck.Constructed/pom.xml +++ b/Mage.Server.Plugins/Mage.Deck.Constructed/pom.xml @@ -46,7 +46,6 @@ - mage-deck-constructed diff --git a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/AusHighlander.java b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/AusHighlander.java index a66fdab991..8e25f052f7 100644 --- a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/AusHighlander.java +++ b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/AusHighlander.java @@ -81,7 +81,7 @@ public class AusHighlander extends Constructed { } public AusHighlander() { - this("Australian Highlander"); + super("Australian Highlander", "AU Highlander"); for (ExpansionSet set : Sets.getInstance().values()) { if (set.getSetType().isEternalLegal()) { setCodes.add(set.getCode()); @@ -89,13 +89,10 @@ public class AusHighlander extends Constructed { } } - public AusHighlander(String name) { - super(name); - } - @Override public boolean validate(Deck deck) { boolean valid = true; + invalid.clear(); if (deck.getCards().size() != getDeckMinSize()) { invalid.put("Deck", "Must contain " + getDeckMinSize() + " singleton cards: has " + (deck.getCards().size()) + " cards"); diff --git a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/Brawl.java b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/Brawl.java index 2fd9250d66..28534db325 100644 --- a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/Brawl.java +++ b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/Brawl.java @@ -32,10 +32,6 @@ public class Brawl extends Constructed { banned.add("Winota, Joiner of Forces"); } - public Brawl(String name) { - super(name); - } - @Override public int getSideboardMinSize() { return 1; @@ -44,6 +40,7 @@ public class Brawl extends Constructed { @Override public boolean validate(Deck deck) { boolean valid = true; + invalid.clear(); Card brawler = null; Card companion = null; FilterMana colorIdentity = new FilterMana(); diff --git a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/CanadianHighlander.java b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/CanadianHighlander.java index 4661dd2072..aec2126784 100644 --- a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/CanadianHighlander.java +++ b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/CanadianHighlander.java @@ -63,7 +63,7 @@ public class CanadianHighlander extends Constructed { } public CanadianHighlander() { - this("Canadian Highlander"); + super("Canadian Highlander"); for (ExpansionSet set : Sets.getInstance().values()) { if (set.getSetType().isEternalLegal()) { setCodes.add(set.getCode()); @@ -71,13 +71,10 @@ public class CanadianHighlander extends Constructed { } } - public CanadianHighlander(String name) { - super(name); - } - @Override public boolean validate(Deck deck) { boolean valid = true; + invalid.clear(); if (deck.getCards().size() < 100) { invalid.put("Deck", "Must contain 100 or more singleton cards: has " + (deck.getCards().size()) + " cards"); diff --git a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/Commander.java b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/Commander.java index ee24485aa0..670146e404 100644 --- a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/Commander.java +++ b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/Commander.java @@ -27,7 +27,7 @@ public class Commander extends Constructed { protected boolean partnerAllowed = true; public Commander() { - this("Commander"); + super("Commander"); for (ExpansionSet set : Sets.getInstance().values()) { if (set.getSetType().isEternalLegal()) { setCodes.add(set.getCode()); @@ -80,6 +80,10 @@ public class Commander extends Constructed { super(name); } + public Commander(String name, String shortName) { + super(name, shortName); + } + @Override public int getDeckMinSize() { return 98; @@ -93,6 +97,7 @@ public class Commander extends Constructed { @Override public boolean validate(Deck deck) { boolean valid = true; + invalid.clear(); FilterMana colorIdentity = new FilterMana(); Set commanders = new HashSet<>(); Card companion = null; diff --git a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/Freeform.java b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/Freeform.java index 41733f9116..d09bb6a8d4 100644 --- a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/Freeform.java +++ b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/Freeform.java @@ -12,6 +12,14 @@ public class Freeform extends DeckValidator { super("Constructed - Freeform"); } + public Freeform(String name) { + super(name); + } + + public Freeform(String name, String shortName) { + super(name, shortName); + } + @Override public int getDeckMinSize() { return 40; @@ -25,6 +33,7 @@ public class Freeform extends DeckValidator { @Override public boolean validate(Deck deck) { boolean valid = true; + invalid.clear(); // http://magic.wizards.com/en/gameinfo/gameplay/formats/freeform if (deck.getCards().size() < getDeckMinSize()) { invalid.put("Deck", "Must contain at least " + getDeckMinSize() + " cards: has only " + deck.getCards().size() + " cards"); diff --git a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/FreeformCommander.java b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/FreeformCommander.java index f66405d36b..9372f2e175 100644 --- a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/FreeformCommander.java +++ b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/FreeformCommander.java @@ -23,7 +23,7 @@ public class FreeformCommander extends Constructed { private static final Map pdAllowed = new HashMap<>(); public FreeformCommander() { - this("Freeform Commander"); + super("Freeform Commander"); for (ExpansionSet set : Sets.getInstance().values()) { setCodes.add(set.getCode()); } @@ -36,6 +36,10 @@ public class FreeformCommander extends Constructed { super(name); } + public FreeformCommander(String name, String shortName) { + super(name, shortName); + } + @Override public int getDeckMinSize() { return 98; @@ -49,6 +53,7 @@ public class FreeformCommander extends Constructed { @Override public boolean validate(Deck deck) { boolean valid = true; + invalid.clear(); FilterMana colorIdentity = new FilterMana(); Set commanders = new HashSet<>(); Card companion = null; diff --git a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/HistoricalType2.java b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/HistoricalType2.java index 04a6957064..f38c2b5be6 100644 --- a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/HistoricalType2.java +++ b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/HistoricalType2.java @@ -107,6 +107,7 @@ public class HistoricalType2 extends Constructed { Map leastInvalid = null; boolean valid = false; + invalid.clear(); // first, check whether misty and batterskull are in the same deck. Map counts = new HashMap<>(); diff --git a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/Momir.java b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/Momir.java index ab5500ebd2..bcd8e57227 100644 --- a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/Momir.java +++ b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/Momir.java @@ -14,11 +14,7 @@ import java.util.List; public class Momir extends DeckValidator { public Momir() { - this("Momir Basic"); - } - - public Momir(String name) { - super(name); + super("Momir Basic", "Momir"); } @Override @@ -34,6 +30,7 @@ public class Momir extends DeckValidator { @Override public boolean validate(Deck deck) { boolean valid = true; + invalid.clear(); if (deck.getCards().size() != getDeckMinSize()) { invalid.put("Deck", "Must contain " + getDeckMinSize() + " cards: has " + deck.getCards().size() + " cards"); diff --git a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/Oathbreaker.java b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/Oathbreaker.java index 07609dfe78..9c70b049ff 100644 --- a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/Oathbreaker.java +++ b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/Oathbreaker.java @@ -20,7 +20,7 @@ public class Oathbreaker extends Vintage { public Oathbreaker() { super(); - this.name = "Oathbreaker"; + setName("Oathbreaker"); // banned = vintage + oathbreaker's list: https://oathbreakermtg.org/banned-list/ // last updated 4/24/20 - Dark Ritual banned @@ -82,6 +82,7 @@ public class Oathbreaker extends Vintage { @Override public boolean validate(Deck deck) { boolean valid = true; + invalid.clear(); if (deck.getCards().size() + deck.getSideboard().size() != 60) { invalid.put("Deck", "Must contain " + 60 + " cards: has " + (deck.getCards().size() + deck.getSideboard().size()) + " cards"); diff --git a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/PennyDreadfulCommander.java b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/PennyDreadfulCommander.java index ceff69fd1f..4a41c6c970 100644 --- a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/PennyDreadfulCommander.java +++ b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/PennyDreadfulCommander.java @@ -10,6 +10,7 @@ import mage.cards.ExpansionSet; import mage.cards.Sets; import mage.cards.decks.Constructed; import mage.cards.decks.Deck; +import mage.cards.decks.PennyDreadfulLegalityUtil; import mage.filter.FilterMana; import mage.util.ManaUtil; @@ -23,10 +24,9 @@ public class PennyDreadfulCommander extends Constructed { protected List bannedCommander = new ArrayList<>(); private static final Map pdAllowed = new HashMap<>(); - private static boolean setupAllowed = false; public PennyDreadfulCommander() { - this("Penny Dreadful Commander"); + super("Penny Dreadful Commander", "Penny"); for (ExpansionSet set : Sets.getInstance().values()) { if (set.getSetType().isEternalLegal()) { setCodes.add(set.getCode()); @@ -34,10 +34,6 @@ public class PennyDreadfulCommander extends Constructed { } } - public PennyDreadfulCommander(String name) { - super(name); - } - @Override public int getDeckMinSize() { return 98; @@ -51,6 +47,7 @@ public class PennyDreadfulCommander extends Constructed { @Override public boolean validate(Deck deck) { boolean valid = true; + invalid.clear(); FilterMana colorIdentity = new FilterMana(); Set commanders = new HashSet<>(); Card companion = null; @@ -110,7 +107,10 @@ public class PennyDreadfulCommander extends Constructed { countCards(counts, deck.getSideboard()); valid = checkCounts(1, counts) && valid; - generatePennyDreadfulHash(); + if (pdAllowed.isEmpty()) { + pdAllowed.putAll(PennyDreadfulLegalityUtil.getLegalCardList()); + } + for (String wantedCard : counts.keySet()) { if (!(pdAllowed.containsKey(wantedCard))) { invalid.put(wantedCard, "Banned"); @@ -199,22 +199,4 @@ public class PennyDreadfulCommander extends Constructed { } return valid; } - - public void generatePennyDreadfulHash() { - if (setupAllowed == false) { - setupAllowed = true; - } else { - return; - } - - Properties properties = new Properties(); - try { - properties.load(PennyDreadfulCommander.class.getResourceAsStream("pennydreadful.properties")); - } catch (Exception e) { - e.printStackTrace(); - } - for (final Entry entry : properties.entrySet()) { - pdAllowed.put((String) entry.getKey(), 1); - } - } } diff --git a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/SuperType2.java b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/SuperType2.java index 17a1c9909f..a9db25e7f8 100644 --- a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/SuperType2.java +++ b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/SuperType2.java @@ -80,6 +80,7 @@ public class SuperType2 extends Constructed { Map leastInvalid = null; boolean valid = false; + invalid.clear(); // first, check whether misty and batterskull are in the same deck. Map counts = new HashMap<>(); diff --git a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/TinyLeaders.java b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/TinyLeaders.java index d1aefbcd70..e423a916a4 100644 --- a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/TinyLeaders.java +++ b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/TinyLeaders.java @@ -22,7 +22,7 @@ public class TinyLeaders extends Constructed { protected List bannedCommander = new ArrayList<>(); public TinyLeaders() { - this("Tiny Leaders"); + super("Tiny Leaders"); for (ExpansionSet set : Sets.getInstance().values()) { if (set.getSetType().isEternalLegal()) { setCodes.add(set.getCode()); @@ -86,10 +86,6 @@ public class TinyLeaders extends Constructed { bannedCommander.add("Derevi, Empyrical Tactician"); } - public TinyLeaders(String name) { - super(name); - } - @Override public int getDeckMinSize() { return 49; // commander gives from deck name @@ -107,6 +103,7 @@ public class TinyLeaders extends Constructed { @Override public boolean validate(Deck deck) { boolean valid = true; + invalid.clear(); if (deck.getCards().size() != getDeckMinSize()) { invalid.put("Deck", "Must contain " + getDeckMinSize() + " cards: has " + deck.getCards().size() + " cards"); diff --git a/Mage.Server.Plugins/Mage.Deck.Limited/src/mage/deck/Limited.java b/Mage.Server.Plugins/Mage.Deck.Limited/src/mage/deck/Limited.java index 542f045045..404a6c91b7 100644 --- a/Mage.Server.Plugins/Mage.Deck.Limited/src/mage/deck/Limited.java +++ b/Mage.Server.Plugins/Mage.Deck.Limited/src/mage/deck/Limited.java @@ -28,6 +28,7 @@ public class Limited extends DeckValidator { @Override public boolean validate(Deck deck) { boolean valid = true; + invalid.clear(); //20091005 - 100.2b if (deck.getCards().size() < getDeckMinSize()) { invalid.put("Deck", "Must contain at least " + getDeckMinSize() + " cards: has only " + deck.getCards().size() + " cards"); diff --git a/Mage.Server/src/main/resources/mage/deck/pennydreadful.properties b/Mage.Server/src/main/resources/mage/deck/pennydreadful.properties deleted file mode 100644 index 21b3685179..0000000000 --- a/Mage.Server/src/main/resources/mage/deck/pennydreadful.properties +++ /dev/null @@ -1,10371 +0,0 @@ -Abandon\ Reason=1 -Abandoned\ Outpost=1 -Abandoned\ Sarcophagus=1 -Abattoir\ Ghoul=1 -Abduction=1 -Aberrant\ Researcher=1 -Abhorrent\ Overlord=1 -Abnormal\ Endurance=1 -Abomination\ of\ Gudul=1 -Aboshan's\ Desire=1 -About\ Face=1 -Absolver\ Thrull=1 -Absorb\ Vis=1 -Abstruse\ Interference=1 -Abuna's\ Chant=1 -Abundant\ Maw=1 -Abyssal\ Horror=1 -Abyssal\ Nocturnus=1 -Abyssal\ Specter=1 -Abzan\ Ascendancy=1 -Abzan\ Banner=1 -Abzan\ Battle\ Priest=1 -Abzan\ Charm=1 -Abzan\ Falconer=1 -Abzan\ Guide=1 -Abzan\ Runemark=1 -Academy\ Drake=1 -Academy\ Elite=1 -Academy\ Journeymage=1 -Academy\ Raider=1 -Academy\ Researchers=1 -Accelerate=1 -Accomplished\ Automaton=1 -Accorder's\ Shield=1 -Accorder\ Paladin=1 -Accursed\ Horde=1 -Accursed\ Spirit=1 -Accursed\ Witch=1 -Acid-Spewer\ Dragon=1 -Acid\ Web\ Spider=1 -Acidic\ Sliver=1 -Acolyte's\ Reward=1 -Acolyte\ of\ Xathrid=1 -Acolyte\ of\ the\ Inferno=1 -Acquire=1 -Acrobatic\ Maneuver=1 -Act\ of\ Aggression=1 -Act\ of\ Heroism=1 -Act\ of\ Treason=1 -Act\ on\ Impulse=1 -Active\ Volcano=1 -Adamant\ Will=1 -Adamaro,\ First\ to\ Desire=1 -Adanto\ Vanguard=1 -Adaptive\ Snapjaw=1 -Adarkar\ Sentinel=1 -Adarkar\ Valkyrie=1 -Adarkar\ Windform=1 -Addle=1 -Advance\ Scout=1 -Advanced\ Hoverguard=1 -Advanced\ Stitchwing=1 -Advent\ of\ the\ Wurm=1 -Adventuring\ Gear=1 -Adverse\ Conditions=1 -Advice\ from\ the\ Fae=1 -Advocate\ of\ the\ Beast=1 -Aegis\ Angel=1 -Aegis\ Automaton=1 -Aeolipile=1 -Aeon\ Chronicler=1 -Aerial\ Caravan=1 -Aerial\ Engineer=1 -Aerial\ Formation=1 -Aerial\ Guide=1 -Aerial\ Maneuver=1 -Aerial\ Modification=1 -Aerial\ Predation=1 -Aerial\ Responder=1 -Aerial\ Volley=1 -Aerie\ Bowmasters=1 -Aerie\ Mystics=1 -Aerie\ Ouphes=1 -Aerie\ Worshippers=1 -Aeronaut\ Admiral=1 -Aeronaut\ Tinkerer=1 -Aesthir\ Glider=1 -Aether\ Adept=1 -Aether\ Chaser=1 -Aether\ Figment=1 -Aether\ Herder=1 -Aether\ Inspector=1 -Aether\ Membrane=1 -Aether\ Mutation=1 -Aether\ Poisoner=1 -Aether\ Shockwave=1 -Aether\ Snap=1 -Aether\ Spellbomb=1 -Aether\ Sting=1 -Aether\ Storm=1 -Aether\ Swooper=1 -Aether\ Theorist=1 -Aether\ Tide=1 -Aether\ Tradewinds=1 -Aetherborn\ Marauder=1 -Aethergeode\ Miner=1 -Aetherling=1 -Aethermage's\ Touch=1 -Aetherplasm=1 -Aethershield\ Artificer=1 -Aethersnipe=1 -Aethersquall\ Ancient=1 -Aetherstorm\ Roc=1 -Aetherstream\ Leopard=1 -Aethertide\ Whale=1 -Aethertorch\ Renegade=1 -Aethertow=1 -Aetherwind\ Basker=1 -Affa\ Protector=1 -Afflict=1 -Afflicted\ Deserter=1 -Afterlife=1 -Aftershock=1 -Agadeem\ Occultist=1 -Agent\ of\ Horizons=1 -Agent\ of\ Masks=1 -Agent\ of\ the\ Fates=1 -Aggressive\ Urge=1 -Agility=1 -Agonizing\ Demise=1 -Agonizing\ Memories=1 -Agony\ Warp=1 -Agoraphobia=1 -Agrus\ Kos,\ Wojek\ Veteran=1 -Ahn-Crop\ Champion=1 -Aid\ from\ the\ Cowl=1 -Aim\ High=1 -Ainok\ Artillerist=1 -Ainok\ Bond-Kin=1 -Ainok\ Tracker=1 -Air\ Bladder=1 -Air\ Elemental=1 -Air\ Servant=1 -Airborne\ Aid=1 -Airdrop\ Aeronauts=1 -Ajani's\ Mantra=1 -Ajani's\ Sunstriker=1 -Akki\ Avalanchers=1 -Akki\ Blizzard-Herder=1 -Akki\ Drillmaster=1 -Akki\ Lavarunner=1 -Akki\ Raider=1 -Akki\ Rockspeaker=1 -Akki\ Underminer=1 -Akoum\ Battlesinger=1 -Akoum\ Boulderfoot=1 -Akoum\ Flameseeker=1 -Akoum\ Hellkite=1 -Akoum\ Stonewaker=1 -Akrasan\ Squire=1 -Akroan\ Conscriptor=1 -Akroan\ Crusader=1 -Akroan\ Hoplite=1 -Akroan\ Horse=1 -Akroan\ Jailer=1 -Akroan\ Line\ Breaker=1 -Akroan\ Mastiff=1 -Akroan\ Phalanx=1 -Akroan\ Sergeant=1 -Akroma's\ Blessing=1 -Akroma's\ Devoted=1 -Akron\ Legionnaire=1 -Aku\ Djinn=1 -Alabaster\ Kirin=1 -Alabaster\ Wall=1 -Alaborn\ Musketeer=1 -Alaborn\ Trooper=1 -Aladdin's\ Ring=1 -Alarum=1 -Albino\ Troll=1 -Alchemist's\ Apprentice=1 -Alchemist's\ Greeting=1 -Aleatory=1 -Algae\ Gharial=1 -Alhammarret,\ High\ Arbiter=1 -Aligned\ Hedron\ Network=1 -Alive\ //\ Well=1 -All\ Suns'\ Dawn=1 -Alley\ Evasion=1 -Alley\ Strangler=1 -Allied\ Reinforcements=1 -Alloy\ Golem=1 -Alloy\ Myr=1 -Alluring\ Scent=1 -Alluring\ Siren=1 -Ally\ Encampment=1 -Alms=1 -Alms\ Beast=1 -Alms\ of\ the\ Vein=1 -Alpha\ Authority=1 -Alpha\ Brawl=1 -Alpha\ Kavu=1 -Alpha\ Myr=1 -Alpine\ Grizzly=1 -Altac\ Bloodseeker=1 -Altar's\ Reap=1 -Altar\ Golem=1 -Altar\ of\ Shadows=1 -Altar\ of\ the\ Brood=1 -Altar\ of\ the\ Lost=1 -Altered\ Ego=1 -Always\ Watching=1 -Amaranthine\ Wall=1 -Amass\ the\ Components=1 -Ambassador\ Laquatus=1 -Ambassador\ Oak=1 -Ambitious\ Aetherborn=1 -Ambuscade=1 -Ambuscade\ Shaman=1 -Ambush\ Krotiq=1 -Ambush\ Party=1 -Ambush\ Viper=1 -Amnesia=1 -Amoeboid\ Changeling=1 -Amok=1 -Amphibious\ Kavu=1 -Amphin\ Cutthroat=1 -Amphin\ Pathmage=1 -Ampryn\ Tactician=1 -Amrou\ Kithkin=1 -Amrou\ Scout=1 -Amrou\ Seekers=1 -Amugaba=1 -Amulet\ of\ Kroog=1 -Ana\ Battlemage=1 -Ana\ Disciple=1 -Ana\ Sanctuary=1 -Anaba\ Ancestor=1 -Anaba\ Shaman=1 -Anaba\ Spirit\ Crafter=1 -Anaconda=1 -Anarchist=1 -Anathemancer=1 -Anax\ and\ Cymede=1 -Ancestor's\ Chosen=1 -Ancestor's\ Prophet=1 -Ancestral\ Memories=1 -Ancestral\ Tribute=1 -Ancestral\ Vengeance=1 -Anchor\ to\ the\ Aether=1 -Ancient\ Amphitheater=1 -Ancient\ Animus=1 -Ancient\ Brontodon=1 -Ancient\ Carp=1 -Ancient\ Crab=1 -Ancient\ Hellkite=1 -Ancient\ Kavu=1 -Ancient\ Runes=1 -Ancient\ Silverback=1 -Andradite\ Leech=1 -Angel's\ Feather=1 -Angel's\ Herald=1 -Angel's\ Mercy=1 -Angel's\ Tomb=1 -Angel's\ Trumpet=1 -Angel\ of\ Condemnation=1 -Angel\ of\ Deliverance=1 -Angel\ of\ Despair=1 -Angel\ of\ Flight\ Alabaster=1 -Angel\ of\ Fury=1 -Angel\ of\ Light=1 -Angel\ of\ Mercy=1 -Angel\ of\ Renewal=1 -Angel\ of\ Retribution=1 -Angel\ of\ Salvation=1 -Angel\ of\ the\ Dawn=1 -Angel\ of\ the\ God-Pharaoh=1 -Angelfire\ Crusader=1 -Angelheart\ Vial=1 -Angelic\ Arbiter=1 -Angelic\ Armaments=1 -Angelic\ Benediction=1 -Angelic\ Blessing=1 -Angelic\ Captain=1 -Angelic\ Curator=1 -Angelic\ Edict=1 -Angelic\ Favor=1 -Angelic\ Gift=1 -Angelic\ Overseer=1 -Angelic\ Page=1 -Angelic\ Protector=1 -Angelic\ Purge=1 -Angelic\ Shield=1 -Angelic\ Skirmisher=1 -Angelic\ Voices=1 -Angelic\ Wall=1 -Angelsong=1 -Angler\ Drake=1 -Angrath's\ Marauders=1 -Angry\ Mob=1 -Animal\ Boneyard=1 -Animal\ Magnetism=1 -Animate\ Artifact=1 -Animate\ Land=1 -Animate\ Wall=1 -Animation\ Module=1 -Animist's\ Awakening=1 -Ankh\ of\ Mishra=1 -Ankle\ Shanker=1 -Annex=1 -Annihilate=1 -Annihilating\ Fire=1 -Anodet\ Lurker=1 -Anoint=1 -Anointed\ Deacon=1 -Anointer\ Priest=1 -Anointer\ of\ Champions=1 -Ant\ Queen=1 -Anthem\ of\ Rakdos=1 -Anticipate=1 -Antler\ Skulkin=1 -Anurid\ Barkripper=1 -Anurid\ Brushhopper=1 -Anurid\ Murkdiver=1 -Anurid\ Scavenger=1 -Anurid\ Swarmsnapper=1 -Anvilwrought\ Raptor=1 -Apes\ of\ Rath=1 -Aphetto\ Dredging=1 -Aphetto\ Exterminator=1 -Aphetto\ Vulture=1 -Aphotic\ Wisps=1 -Apocalypse\ Demon=1 -Apocalypse\ Hydra=1 -Apothecary\ Geist=1 -Apothecary\ Initiate=1 -Appeal\ //\ Authority=1 -Appetite\ for\ Brains=1 -Appetite\ for\ the\ Unnatural=1 -Apprentice\ Wizard=1 -Approach\ of\ the\ Second\ Sun=1 -Aquamoeba=1 -Aquastrand\ Spider=1 -Aquatic\ Incursion=1 -Aquitect's\ Will=1 -Araba\ Mothrider=1 -Arachnus\ Spinner=1 -Arachnus\ Web=1 -Aradara\ Express=1 -Arashi,\ the\ Sky\ Asunder=1 -Arashin\ Cleric=1 -Arashin\ Sovereign=1 -Arashin\ War\ Beast=1 -Arbalest\ Elite=1 -Arbiter\ of\ Knollridge=1 -Arbiter\ of\ the\ Ideal=1 -Arbor\ Armament=1 -Arbor\ Colossus=1 -Arborback\ Stomper=1 -Arc-Slogger=1 -Arc\ Blade=1 -Arc\ Lightning=1 -Arc\ Runner=1 -Arc\ Trail=1 -Arcane\ Adaptation=1 -Arcane\ Flight=1 -Arcane\ Sanctum=1 -Arcane\ Spyglass=1 -Arcane\ Teachings=1 -Arcanis\ the\ Omnipotent=1 -Arcbound\ Bruiser=1 -Arcbound\ Crusher=1 -Arcbound\ Fiend=1 -Arcbound\ Hybrid=1 -Arcbound\ Lancer=1 -Arcbound\ Overseer=1 -Arcbound\ Reclaimer=1 -Arcbound\ Stinger=1 -Arcbound\ Wanderer=1 -Archaeological\ Dig=1 -Archdemon\ of\ Unx=1 -Archers'\ Parapet=1 -Archers\ of\ Qarsi=1 -Archery\ Training=1 -Archetype\ of\ Aggression=1 -Archetype\ of\ Courage=1 -Archetype\ of\ Finality=1 -Archetype\ of\ Imagination=1 -Archfiend\ of\ Ifnir=1 -Architect\ of\ the\ Untamed=1 -Archivist=1 -Archmage\ Ascension=1 -Archon\ of\ Justice=1 -Archon\ of\ Redemption=1 -Archon\ of\ the\ Triumvirate=1 -Archweaver=1 -Arctic\ Aven=1 -Arctic\ Nishoba=1 -Arctic\ Wolves=1 -Ardent\ Militia=1 -Ardent\ Recruit=1 -Ardent\ Soldier=1 -Arena\ Athlete=1 -Argent\ Mutation=1 -Argent\ Sphinx=1 -Argivian\ Blacksmith=1 -Argivian\ Restoration=1 -Argothian\ Pixies=1 -Argothian\ Swine=1 -Argothian\ Treefolk=1 -Ark\ of\ Blight=1 -Armageddon\ Clock=1 -Armament\ Corps=1 -Armament\ Master=1 -Armament\ of\ Nyx=1 -Armed\ //\ Dangerous=1 -Armed\ Response=1 -Armillary\ Sphere=1 -Armor\ Sliver=1 -Armor\ Thrull=1 -Armor\ of\ Faith=1 -Armor\ of\ Thorns=1 -Armorcraft\ Judge=1 -Armored\ Ascension=1 -Armored\ Cancrix=1 -Armored\ Griffin=1 -Armored\ Pegasus=1 -Armored\ Skaab=1 -Armored\ Warhorse=1 -Armored\ Wolf-Rider=1 -Armorer\ Guildmage=1 -Armory\ of\ Iroas=1 -Arms\ Dealer=1 -Arrest=1 -Arrogant\ Bloodlord=1 -Arrow\ Storm=1 -Arrows\ of\ Justice=1 -Arsenal\ Thresher=1 -Arterial\ Flow=1 -Artifact\ Blast=1 -Artificer's\ Assistant=1 -Artificer's\ Epiphany=1 -Artificer's\ Hex=1 -Artificial\ Evolution=1 -Artillerize=1 -Artisan's\ Sorrow=1 -Artisan\ of\ Forms=1 -Artisan\ of\ Kozilek=1 -Arvad\ the\ Cursed=1 -Aryel,\ Knight\ of\ Windgrace=1 -Ascendant\ Evincar=1 -Ascended\ Lawmage=1 -Ash\ Zealot=1 -Asha's\ Favor=1 -Ashcoat\ Bear=1 -Ashen\ Firebeast=1 -Ashen\ Ghoul=1 -Ashen\ Monstrosity=1 -Ashenmoor\ Cohort=1 -Ashenmoor\ Gouger=1 -Ashes\ of\ the\ Fallen=1 -Ashiok's\ Adept=1 -Ashling's\ Prerogative=1 -Ashling,\ the\ Extinguisher=1 -Ashling\ the\ Pilgrim=1 -Ashnod's\ Cylix=1 -Ashnod's\ Transmogrant=1 -Aspect\ of\ Gorgon=1 -Aspect\ of\ Mongoose=1 -Asphodel\ Wanderer=1 -Asphyxiate=1 -Aspiring\ Aeronaut=1 -Assassin's\ Strike=1 -Assassinate=1 -Assault\ //\ Battery=1 -Assault\ Griffin=1 -Assault\ Zeppelid=1 -Assembled\ Alphas=1 -Assert\ Authority=1 -Astral\ Slide=1 -Astral\ Steel=1 -Astrolabe=1 -Asylum\ Visitor=1 -Atarka\ Efreet=1 -Atarka\ Monument=1 -Atarka\ Pummeler=1 -Atogatog=1 -Attended\ Knight=1 -Attune\ with\ Aether=1 -Atzocan\ Archer=1 -Atzocan\ Seer=1 -Audacious\ Infiltrator=1 -Auger\ Spree=1 -Augmenting\ Automaton=1 -Augur\ il-Vec=1 -Augury\ Owl=1 -Auntie's\ Snitch=1 -Aura\ Barbs=1 -Aura\ Extraction=1 -Aura\ Finesse=1 -Aura\ Graft=1 -Auramancer's\ Guise=1 -Auramancer=1 -Auratouched\ Mage=1 -Auriok\ Edgewright=1 -Auriok\ Glaivemaster=1 -Auriok\ Salvagers=1 -Auriok\ Steelshaper=1 -Auriok\ Sunchaser=1 -Auriok\ Survivors=1 -Auriok\ Transfixer=1 -Auriok\ Windwalker=1 -Aurora\ Eidolon=1 -Auspicious\ Ancestor=1 -Autochthon\ Wurm=1 -Autumn's\ Veil=1 -Autumn\ Willow=1 -Autumnal\ Gloom=1 -Avacyn's\ Collar=1 -Avacyn's\ Judgment=1 -Avacyn's\ Pilgrim=1 -Avacyn,\ Guardian\ Angel=1 -Avacynian\ Missionaries=1 -Avacynian\ Priest=1 -Avarax=1 -Avarice\ Amulet=1 -Avarice\ Totem=1 -Avatar\ of\ Might=1 -Aven\ Archer=1 -Aven\ Augur=1 -Aven\ Battle\ Priest=1 -Aven\ Brigadier=1 -Aven\ Cloudchaser=1 -Aven\ Envoy=1 -Aven\ Farseer=1 -Aven\ Fisher=1 -Aven\ Fleetwing=1 -Aven\ Flock=1 -Aven\ Initiate=1 -Aven\ Liberator=1 -Aven\ Mimeomancer=1 -Aven\ Mindcensor=1 -Aven\ Redeemer=1 -Aven\ Reedstalker=1 -Aven\ Riftwatcher=1 -Aven\ Sentry=1 -Aven\ Shrine=1 -Aven\ Smokeweaver=1 -Aven\ Squire=1 -Aven\ Sunstriker=1 -Aven\ Surveyor=1 -Aven\ Tactician=1 -Aven\ Trailblazer=1 -Aven\ Trooper=1 -Aven\ Warcraft=1 -Aven\ Warhawk=1 -Aven\ Wind\ Guide=1 -Aven\ Wind\ Mage=1 -Aven\ Windreader=1 -Aven\ of\ Enduring\ Hope=1 -Avenging\ Angel=1 -Avenging\ Arrow=1 -Avian\ Changeling=1 -Aviary\ Mechanic=1 -Aviation\ Pioneer=1 -Avizoa=1 -Avoid\ Fate=1 -Awaken\ the\ Ancient=1 -Awaken\ the\ Bear=1 -Awakened\ Amalgam=1 -Awakener\ Druid=1 -Awe\ Strike=1 -Awe\ for\ the\ Guilds=1 -Axebane\ Stag=1 -Axelrod\ Gunnarson=1 -Ayli,\ Eternal\ Pilgrim=1 -Aysen\ Bureaucrats=1 -Aysen\ Crusader=1 -Ayumi,\ the\ Last\ Visitor=1 -Azimaet\ Drake=1 -Azor's\ Elocutors=1 -Azorius\ Aethermage=1 -Azorius\ Arrester=1 -Azorius\ Charm=1 -Azorius\ Cluestone=1 -Azorius\ First-Wing=1 -Azorius\ Guildgate=1 -Azorius\ Guildmage=1 -Azorius\ Herald=1 -Azorius\ Justiciar=1 -Azorius\ Keyrune=1 -Azure\ Drake=1 -Azure\ Mage=1 -Back\ from\ the\ Brink=1 -Backwoods\ Survivalists=1 -Bad\ River=1 -Baffling\ End=1 -Baird,\ Steward\ of\ Argive=1 -Baku\ Altar=1 -Bala\ Ged\ Scorpion=1 -Bala\ Ged\ Thief=1 -Balance\ of\ Power=1 -Balduvian\ Barbarians=1 -Balduvian\ Conjurer=1 -Balduvian\ Dead=1 -Balduvian\ Fallen=1 -Balduvian\ Rage=1 -Balduvian\ Warlord=1 -Baleful\ Ammit=1 -Baleful\ Eidolon=1 -Baleful\ Force=1 -Baleful\ Stare=1 -Ballista\ Charger=1 -Balloon\ Peddler=1 -Ballynock\ Cohort=1 -Ballynock\ Trapper=1 -Baloth\ Cage\ Trap=1 -Baloth\ Gorger=1 -Baloth\ Null=1 -Baloth\ Pup=1 -Baloth\ Woodcrasher=1 -Balshan\ Beguiler=1 -Balshan\ Collaborator=1 -Balshan\ Griffin=1 -Balustrade\ Spy=1 -Bamboozle=1 -Bandage=1 -Bane\ Alley\ Broker=1 -Bane\ of\ Bala\ Ged=1 -Baneful\ Omen=1 -Banewhip\ Punisher=1 -Banisher\ Priest=1 -Banishing\ Stroke=1 -Banishment\ Decree=1 -Banners\ Raised=1 -Banshee's\ Blade=1 -Banshee=1 -Bant\ Sojourners=1 -Bar\ the\ Door=1 -Barbarian\ Bully=1 -Barbarian\ Riftcutter=1 -Barbed-Back\ Wurm=1 -Barbed\ Battlegear=1 -Barbed\ Lightning=1 -Barbed\ Sextant=1 -Barbed\ Shocker=1 -Barbed\ Sliver=1 -Barbed\ Wire=1 -Barishi=1 -Barkhide\ Mauler=1 -Barkshell\ Blessing=1 -Barktooth\ Warbeard=1 -Barl's\ Cage=1 -Barrage\ Ogre=1 -Barrage\ Tyrant=1 -Barrage\ of\ Boulders=1 -Barrel\ Down\ Sokenzan=1 -Barren\ Glory=1 -Barrenton\ Cragtreads=1 -Barrenton\ Medic=1 -Barricade\ Breaker=1 -Barrin's\ Codex=1 -Barrin's\ Unmaking=1 -Basal\ Sliver=1 -Basal\ Thrull=1 -Basalt\ Gargoyle=1 -Basandra,\ Battle\ Seraph=1 -Bash\ to\ Bits=1 -Basilica\ Guards=1 -Basilica\ Screecher=1 -Bassara\ Tower\ Archer=1 -Bastion\ Enforcer=1 -Bastion\ Inventor=1 -Bastion\ Mastodon=1 -Bathe\ in\ Light=1 -Batterhorn=1 -Battering\ Craghorn=1 -Battering\ Krasis=1 -Battering\ Sliver=1 -Battering\ Wurm=1 -Battle-Mad\ Ronin=1 -Battle-Rattle\ Shaman=1 -Battle\ Hurda=1 -Battle\ Mastery=1 -Battle\ Screech=1 -Battle\ Sliver=1 -Battle\ Squadron=1 -Battle\ of\ Wits=1 -Battlefield\ Medic=1 -Battlefield\ Percher=1 -Battlefield\ Scavenger=1 -Battlefield\ Thaumaturge=1 -Battlefront\ Krushok=1 -Battlegate\ Mimic=1 -Battlegrace\ Angel=1 -Battleground\ Geist=1 -Battlegrowth=1 -Battletide\ Alchemist=1 -Battlewand\ Oak=1 -Battlewise\ Hoplite=1 -Battlewise\ Valor=1 -Batwing\ Brume=1 -Bay\ Falcon=1 -Bayou\ Dragonfly=1 -Beacon\ Hawk=1 -Beacon\ of\ Destiny=1 -Beacon\ of\ Destruction=1 -Beacon\ of\ Immortality=1 -Beacon\ of\ Unrest=1 -Bear's\ Companion=1 -Bearer\ of\ Silence=1 -Bearer\ of\ the\ Heavens=1 -Bearscape=1 -Beast\ Attack=1 -Beast\ Hunt=1 -Beast\ of\ Burden=1 -Beastbreaker\ of\ Bala\ Ged=1 -Beastcaller\ Savant=1 -Beckon\ Apparition=1 -Bedlam=1 -Bee\ Sting=1 -Beetleback\ Chief=1 -Beetleform\ Mage=1 -Befuddle=1 -Behemoth's\ Herald=1 -Behemoth\ Sledge=1 -Behind\ the\ Scenes=1 -Belbe's\ Percher=1 -Belfry\ Spirit=1 -Belligerent\ Brontodon=1 -Belligerent\ Hatchling=1 -Belligerent\ Sliver=1 -Belligerent\ Whiptail=1 -Bellowing\ Aegisaur=1 -Bellowing\ Fiend=1 -Bellowing\ Saddlebrute=1 -Bellowing\ Tanglewurm=1 -Bellows\ Lizard=1 -Belltoll\ Dragon=1 -Belltower\ Sphinx=1 -Beloved\ Chaplain=1 -Benalish\ Cavalry=1 -Benalish\ Commander=1 -Benalish\ Emissary=1 -Benalish\ Heralds=1 -Benalish\ Hero=1 -Benalish\ Honor\ Guard=1 -Benalish\ Knight=1 -Benalish\ Lancer=1 -Benalish\ Missionary=1 -Benalish\ Trapper=1 -Benalish\ Veteran=1 -Beneath\ the\ Sands=1 -Benediction\ of\ Moons=1 -Benefaction\ of\ Rhonas=1 -Benevolent\ Ancestor=1 -Benevolent\ Bodyguard=1 -Benthic\ Behemoth=1 -Benthic\ Djinn=1 -Benthic\ Explorers=1 -Benthic\ Giant=1 -Benthic\ Infiltrator=1 -Bereavement=1 -Berserk\ Murlodont=1 -Berserkers\ of\ Blood\ Ridge=1 -Bestial\ Menace=1 -Bewilder=1 -Bident\ of\ Thassa=1 -Bile\ Blight=1 -Bile\ Urchin=1 -Binding\ Agony=1 -Binding\ Mummy=1 -Biomantic\ Mastery=1 -Biomass\ Mutation=1 -Bioplasm=1 -Bioshift=1 -Biovisionary=1 -Birthing\ Hulk=1 -Bishop's\ Soldier=1 -Bishop\ of\ Rebirth=1 -Bishop\ of\ the\ Bloodstained=1 -Biting\ Rain=1 -Biting\ Tether=1 -Bitter\ Revelation=1 -Bitterblade\ Warrior=1 -Bitterbow\ Sharpshooters=1 -Bitterheart\ Witch=1 -Bituminous\ Blast=1 -Black\ Knight=1 -Black\ Oak\ of\ Odunos=1 -Black\ Poplar\ Shaman=1 -Blackblade\ Reforged=1 -Blackcleave\ Goblin=1 -Blade-Tribe\ Berserkers=1 -Bladed\ Bracers=1 -Bladed\ Pinions=1 -Bladed\ Sentinel=1 -Blades\ of\ Velis\ Vel=1 -Bladetusk\ Boar=1 -Bladewing's\ Thrall=1 -Blanchwood\ Armor=1 -Blanchwood\ Treefolk=1 -Blast\ of\ Genius=1 -Blastfire\ Bolt=1 -Blastoderm=1 -Blaze=1 -Blaze\ Commando=1 -Blaze\ of\ Glory=1 -Blazethorn\ Scarecrow=1 -Blazing\ Blade\ Askari=1 -Blazing\ Hellhound=1 -Blazing\ Hope=1 -Blazing\ Specter=1 -Blazing\ Torch=1 -Bleak\ Coven\ Vampires=1 -Blessed\ Breath=1 -Blessed\ Light=1 -Blessed\ Orator=1 -Blessed\ Reincarnation=1 -Blessed\ Reversal=1 -Blessed\ Spirits=1 -Blessing=1 -Blessing\ of\ Belzenlok=1 -Blessing\ of\ Leeches=1 -Blessing\ of\ the\ Nephilim=1 -Blight\ Herder=1 -Blight\ Keeper=1 -Blight\ Sickle=1 -Blightcaster=1 -Blighted\ Bat=1 -Blighted\ Cataract=1 -Blighted\ Fen=1 -Blighted\ Gorge=1 -Blighted\ Shaman=1 -Blighted\ Steppe=1 -Blighted\ Woodland=1 -Blightspeaker=1 -Blightwidow=1 -Blind\ Creeper=1 -Blind\ Fury=1 -Blind\ Hunter=1 -Blind\ Zealot=1 -Blind\ with\ Anger=1 -Blinding\ Angel=1 -Blinding\ Beam=1 -Blinding\ Drone=1 -Blinding\ Flare=1 -Blinding\ Fog=1 -Blinding\ Light=1 -Blinding\ Mage=1 -Blinding\ Powder=1 -Blinding\ Souleater=1 -Blinding\ Spray=1 -Blinking\ Spirit=1 -Blinkmoth\ Infusion=1 -Blinkmoth\ Urn=1 -Blinkmoth\ Well=1 -Blister\ Beetle=1 -Blistercoil\ Weird=1 -Blistergrub=1 -Blistering\ Barrier=1 -Blistering\ Dieflyn=1 -Blisterpod=1 -Blitz\ Hellion=1 -Blizzard\ Elemental=1 -Blizzard\ Specter=1 -Bloated\ Toad=1 -Blockade\ Runner=1 -Blockbuster=1 -Blood-Chin\ Fanatic=1 -Blood-Cursed\ Knight=1 -Blood\ Bairn=1 -Blood\ Celebrant=1 -Blood\ Clock=1 -Blood\ Cultist=1 -Blood\ Frenzy=1 -Blood\ Funnel=1 -Blood\ Host=1 -Blood\ Knight=1 -Blood\ Lust=1 -Blood\ Mist=1 -Blood\ Ogre=1 -Blood\ Reckoning=1 -Blood\ Rites=1 -Blood\ Seeker=1 -Blood\ Speaker=1 -Blood\ Tithe=1 -Blood\ Tribute=1 -Blood\ Vassal=1 -Bloodbond\ March=1 -Bloodbond\ Vampire=1 -Bloodbriar=1 -Bloodcrazed\ Goblin=1 -Bloodcrazed\ Hoplite=1 -Bloodcrazed\ Neonate=1 -Bloodcurdler=1 -Bloodfire\ Colossus=1 -Bloodfire\ Dwarf=1 -Bloodfire\ Enforcers=1 -Bloodfire\ Expert=1 -Bloodfire\ Infusion=1 -Bloodfire\ Kavu=1 -Bloodfire\ Mentor=1 -Bloodfray\ Giant=1 -Bloodgift\ Demon=1 -Bloodhall\ Ooze=1 -Bloodhall\ Priest=1 -Bloodhunter\ Bat=1 -Bloodhusk\ Ritualist=1 -Bloodied\ Ghost=1 -Bloodletter\ Quill=1 -Bloodline\ Keeper=1 -Bloodline\ Shaman=1 -Bloodlust\ Inciter=1 -Bloodmad\ Vampire=1 -Bloodmark\ Mentor=1 -Bloodrage\ Brawler=1 -Bloodrage\ Vampire=1 -Bloodrite\ Invoker=1 -Bloodrock\ Cyclops=1 -Bloodscale\ Prowler=1 -Bloodscent=1 -Bloodshed\ Fever=1 -Bloodshot\ Trainee=1 -Bloodstoke\ Howler=1 -Bloodstone\ Cameo=1 -Bloodstone\ Goblin=1 -Bloodtallow\ Candle=1 -Bloodthirsty\ Ogre=1 -Bloodthorn\ Taunter=1 -Bloodthrone\ Vampire=1 -Bloodwater\ Entity=1 -Blossom\ Dryad=1 -Blossoming\ Wreath=1 -Blowfly\ Infestation=1 -Bludgeon\ Brawl=1 -Blunt\ the\ Assault=1 -Blur\ of\ Blades=1 -Blustersquall=1 -Boa\ Constrictor=1 -Boar\ Umbra=1 -Board\ the\ Weatherlight=1 -Body\ of\ Jukai=1 -Bog-Strider\ Ash=1 -Bog\ Down=1 -Bog\ Elemental=1 -Bog\ Gnarr=1 -Bog\ Hoodlums=1 -Bog\ Imp=1 -Bog\ Initiate=1 -Bog\ Raiders=1 -Bog\ Serpent=1 -Bog\ Tatters=1 -Bog\ Wraith=1 -Bog\ Wreckage=1 -Bogardan\ Firefiend=1 -Bogardan\ Hellkite=1 -Bogardan\ Lancer=1 -Bogardan\ Phoenix=1 -Bogbrew\ Witch=1 -Boggart\ Arsonists=1 -Boggart\ Birth\ Rite=1 -Boggart\ Brute=1 -Boggart\ Mob=1 -Boggart\ Shenanigans=1 -Bogstomper=1 -Boiling\ Blood=1 -Boiling\ Earth=1 -Boiling\ Seas=1 -Bojuka\ Brigand=1 -Bola\ Warrior=1 -Bold\ Defense=1 -Bold\ Impaler=1 -Boldwyr\ Heavyweights=1 -Boldwyr\ Intimidator=1 -Bolt\ of\ Keranos=1 -Boltwing\ Marauder=1 -Bomat\ Bazaar\ Barge=1 -Bombard=1 -Bomber\ Corps=1 -Bond\ Beetle=1 -Bond\ of\ Agony=1 -Bonded\ Construct=1 -Bonded\ Fetch=1 -Bonded\ Horncrest=1 -Bonds\ of\ Faith=1 -Bonds\ of\ Mortality=1 -Bone\ Flute=1 -Bone\ Picker=1 -Bone\ Saw=1 -Bone\ Splinters=1 -Bone\ to\ Ash=1 -Bonehoard=1 -Boneknitter=1 -Boneshard\ Slasher=1 -Bonesplitter\ Sliver=1 -Bonethorn\ Valesk=1 -Boneyard\ Wurm=1 -Bontu's\ Monument=1 -Booby\ Trap=1 -Book\ Burning=1 -Book\ of\ Rass=1 -Boon\ Satyr=1 -Boon\ of\ Emrakul=1 -Boon\ of\ Erebos=1 -Boonweaver\ Giant=1 -Borborygmos=1 -Borderland\ Behemoth=1 -Borderland\ Marauder=1 -Borderland\ Minotaur=1 -Borderland\ Ranger=1 -Boreal\ Centaur=1 -Boreal\ Griffin=1 -Boros\ Battleshaper=1 -Boros\ Cluestone=1 -Boros\ Elite=1 -Boros\ Guildgate=1 -Boros\ Guildmage=1 -Boros\ Keyrune=1 -Boros\ Mastiff=1 -Boros\ Recruit=1 -Boros\ Signet=1 -Boros\ Swiftblade=1 -Borrowed\ Grace=1 -Borrowed\ Hostility=1 -Borrowed\ Malevolence=1 -Bosh,\ Iron\ Golem=1 -Bosk\ Banneret=1 -Bottle\ Gnomes=1 -Bottled\ Cloister=1 -Boulderfall=1 -Bound\ //\ Determined=1 -Bound\ by\ Moonsilver=1 -Bound\ in\ Silence=1 -Bounding\ Krasis=1 -Bounteous\ Kirin=1 -Bow\ of\ Nylea=1 -Bower\ Passage=1 -Brace\ for\ Impact=1 -Braids,\ Cabal\ Minion=1 -Braidwood\ Cup=1 -Brain\ Freeze=1 -Brain\ Gorgers=1 -Brain\ Pry=1 -Brain\ Weevil=1 -Brain\ in\ a\ Jar=1 -Brainbite=1 -Brainspoil=1 -Bramble\ Creeper=1 -Bramble\ Elemental=1 -Bramblesnap=1 -Branching\ Bolt=1 -Branded\ Brawlers=1 -Brass's\ Bounty=1 -Brass-Talon\ Chimera=1 -Brass\ Gnat=1 -Brass\ Herald=1 -Brass\ Man=1 -Brass\ Secretary=1 -Brass\ Squire=1 -Brave\ the\ Sands=1 -Brawl-Bash\ Ogre=1 -Brawler's\ Plate=1 -Brawn=1 -Brazen\ Buccaneers=1 -Brazen\ Freebooter=1 -Brazen\ Scourge=1 -Brazen\ Wolves=1 -Breaching\ Hippocamp=1 -Break\ Asunder=1 -Break\ Open=1 -Break\ of\ Day=1 -Breaker\ of\ Armies=1 -Breaking\ Point=1 -Breaking\ Wave=1 -Breakneck\ Rider=1 -Breath\ of\ Fury=1 -Breath\ of\ Life=1 -Breath\ of\ Malfegor=1 -Breathstealer=1 -Bred\ for\ the\ Hunt=1 -Breeding\ Pit=1 -Briar\ Patch=1 -Briarberry\ Cohort=1 -Briarbridge\ Patrol=1 -Briarhorn=1 -Briarknit\ Kami=1 -Briarpack\ Alpha=1 -Briber's\ Purse=1 -Bright\ Reprisal=1 -Brightflame=1 -Brighthearth\ Banneret=1 -Brigid,\ Hero\ of\ Kinsbaile=1 -Brilliant\ Halo=1 -Brilliant\ Spectrum=1 -Brimstone\ Mage=1 -Brindle\ Boar=1 -Brine\ Elemental=1 -Brine\ Seer=1 -Brine\ Shaman=1 -Bring\ to\ Light=1 -Bringer\ of\ the\ Blue\ Dawn=1 -Bringer\ of\ the\ Green\ Dawn=1 -Bringer\ of\ the\ Red\ Dawn=1 -Brink\ of\ Disaster=1 -Brink\ of\ Madness=1 -Brion\ Stoutarm=1 -Bristling\ Boar=1 -Brittle\ Effigy=1 -Broken\ Ambitions=1 -Broken\ Bond=1 -Broken\ Concentration=1 -Broken\ Visage=1 -Bronze\ Bombshell=1 -Bronze\ Horse=1 -Bronze\ Sable=1 -Bronzebeak\ Moa=1 -Brood\ Birthing=1 -Brood\ Butcher=1 -Brood\ Keeper=1 -Brood\ Monitor=1 -Brood\ of\ Cockroaches=1 -Broodbirth\ Viper=1 -Broodhatch\ Nantuko=1 -Broodhunter\ Wurm=1 -Broodmate\ Dragon=1 -Broodstar=1 -Broodwarden=1 -Brothers\ Yamazaki=1 -Brothers\ of\ Fire=1 -Brown\ Ouphe=1 -Browse=1 -Brush\ with\ Death=1 -Brutal\ Expulsion=1 -Brutalizer\ Exarch=1 -Brute\ Force=1 -Brute\ Strength=1 -Bubbling\ Cauldron=1 -Buccaneer's\ Bravado=1 -Builder's\ Blessing=1 -Built\ to\ Last=1 -Built\ to\ Smash=1 -Bull\ Aurochs=1 -Bull\ Hippo=1 -Bull\ Rush=1 -Bullwhip=1 -Buoyancy=1 -Burden\ of\ Greed=1 -Burn\ Away=1 -Burn\ from\ Within=1 -Burn\ the\ Impure=1 -Burning-Eye\ Zubera=1 -Burning-Fist\ Minotaur=1 -Burning-Tree\ Bloodscale=1 -Burning\ Anger=1 -Burning\ Earth=1 -Burning\ Oil=1 -Burning\ Palm\ Efreet=1 -Burning\ Sun's\ Avatar=1 -Burning\ Vengeance=1 -Burning\ of\ Xinye=1 -Burr\ Grafter=1 -Burrenton\ Bombardier=1 -Burrenton\ Shield-Bearers=1 -Burst\ Lightning=1 -Burst\ of\ Energy=1 -Burst\ of\ Speed=1 -Burst\ of\ Strength=1 -Bushi\ Tenderfoot=1 -Butcher's\ Cleaver=1 -Butcher's\ Glee=1 -Butcher\ Orgg=1 -Butcher\ of\ the\ Horde=1 -By\ Force=1 -Bygone\ Bishop=1 -Byway\ Courier=1 -Cabal\ Archon=1 -Cabal\ Conditioning=1 -Cabal\ Evangel=1 -Cabal\ Executioner=1 -Cabal\ Inquisitor=1 -Cabal\ Paladin=1 -Cabal\ Patriarch=1 -Cabal\ Shrine=1 -Cabal\ Surgeon=1 -Cabal\ Torturer=1 -Cache\ Raiders=1 -Cackling\ Counterpart=1 -Cackling\ Flames=1 -Cackling\ Imp=1 -Cackling\ Witch=1 -Cacophodon=1 -Cadaver\ Imp=1 -Cadaverous\ Knight=1 -Cage\ of\ Hands=1 -Cagemail=1 -Cairn\ Wanderer=1 -Calciderm=1 -Calciform\ Pools=1 -Calcite\ Snapper=1 -Calculated\ Dismissal=1 -Caldera\ Hellion=1 -Caldera\ Kavu=1 -Caldera\ Lake=1 -Caligo\ Skin-Witch=1 -Call\ for\ Blood=1 -Call\ for\ Unity=1 -Call\ of\ the\ Conclave=1 -Call\ of\ the\ Full\ Moon=1 -Call\ of\ the\ Herd=1 -Call\ of\ the\ Nightwing=1 -Call\ of\ the\ Wild=1 -Call\ the\ Bloodline=1 -Call\ the\ Cavalry=1 -Call\ the\ Gatewatch=1 -Call\ the\ Scions=1 -Call\ the\ Skybreaker=1 -Call\ to\ Arms=1 -Call\ to\ Glory=1 -Call\ to\ Heel=1 -Call\ to\ Mind=1 -Call\ to\ Serve=1 -Call\ to\ the\ Feast=1 -Call\ to\ the\ Grave=1 -Call\ to\ the\ Kindred=1 -Caller\ of\ Gales=1 -Caller\ of\ the\ Pack=1 -Callous\ Oppressor=1 -Callow\ Jushi=1 -Caltrops=1 -Campaign\ of\ Vengeance=1 -Canal\ Monitor=1 -Cancel=1 -Candles\ of\ Leng=1 -Canker\ Abomination=1 -Cankerous\ Thirst=1 -Cannibalize=1 -Canopy\ Claws=1 -Canopy\ Cover=1 -Canopy\ Crawler=1 -Canopy\ Gorger=1 -Canopy\ Spider=1 -Canyon\ Drake=1 -Canyon\ Lurkers=1 -Canyon\ Minotaur=1 -Canyon\ Wildcat=1 -Capashen\ Knight=1 -Capashen\ Templar=1 -Capashen\ Unicorn=1 -Capricious\ Efreet=1 -Captain's\ Call=1 -Captain's\ Claws=1 -Captain's\ Hook=1 -Captain's\ Maneuver=1 -Captain\ of\ the\ Mists=1 -Captivating\ Crew=1 -Captive\ Flame=1 -Captured\ Sunlight=1 -Caravan\ Escort=1 -Caravan\ Hurda=1 -Carbonize=1 -Careful\ Consideration=1 -Caregiver=1 -Caress\ of\ Phyrexia=1 -Carnage\ Altar=1 -Carnage\ Gladiator=1 -Carnassid=1 -Carnifex\ Demon=1 -Carnival\ Hellsteed=1 -Carnivorous\ Moss-Beast=1 -Carnivorous\ Plant=1 -Carom=1 -Carrier\ Thrall=1 -Carrion\ Beetles=1 -Carrion\ Call=1 -Carrion\ Rats=1 -Carrion\ Screecher=1 -Carrion\ Thrash=1 -Carrion\ Wall=1 -Carrion\ Wurm=1 -Cartel\ Aristocrat=1 -Cartographer=1 -Cartouche\ of\ Ambition=1 -Cartouche\ of\ Knowledge=1 -Cartouche\ of\ Strength=1 -Carven\ Caryatid=1 -Cascading\ Cataracts=1 -Cast\ into\ Darkness=1 -Castle=1 -Castle\ Raptors=1 -Cat\ Burglar=1 -Catacomb\ Sifter=1 -Catacomb\ Slug=1 -Catalog=1 -Catalyst\ Elemental=1 -Catch\ //\ Release=1 -Cateran\ Kidnappers=1 -Cateran\ Summons=1 -Caterwauling\ Boggart=1 -Cathar's\ Companion=1 -Cathar's\ Shield=1 -Cathartic\ Adept=1 -Cathedral\ Membrane=1 -Cathedral\ of\ War=1 -Cathodion=1 -Caught\ in\ the\ Brights=1 -Caustic\ Caterpillar=1 -Caustic\ Crawler=1 -Caustic\ Hound=1 -Caustic\ Rain=1 -Caustic\ Tar=1 -Cautery\ Sliver=1 -Cavalry\ Master=1 -Cavalry\ Pegasus=1 -Cave\ Sense=1 -Cave\ Tiger=1 -Cavern\ Crawler=1 -Cavern\ Lampad=1 -Cavern\ Thoctar=1 -Cease-Fire=1 -Ceaseless\ Searblades=1 -Celestial\ Ancient=1 -Celestial\ Archon=1 -Celestial\ Crusader=1 -Celestial\ Dawn=1 -Celestial\ Flare=1 -Celestial\ Kirin=1 -Celestial\ Mantle=1 -Celestial\ Sword=1 -Cellar\ Door=1 -Cemetery\ Puca=1 -Cemetery\ Recruitment=1 -Cenn's\ Enlistment=1 -Cenn's\ Heir=1 -Cenn's\ Tactician=1 -Centaur's\ Herald=1 -Centaur\ Archer=1 -Centaur\ Battlemaster=1 -Centaur\ Chieftain=1 -Centaur\ Courser=1 -Centaur\ Glade=1 -Centaur\ Healer=1 -Centaur\ Omenreader=1 -Centaur\ Rootcaster=1 -Center\ Soul=1 -Cephalid\ Aristocrat=1 -Cephalid\ Broker=1 -Cephalid\ Illusionist=1 -Cephalid\ Inkshrouder=1 -Cephalid\ Looter=1 -Cephalid\ Retainer=1 -Cephalid\ Sage=1 -Cephalid\ Scout=1 -Cephalid\ Shrine=1 -Cerebral\ Eruption=1 -Cerebral\ Vortex=1 -Ceremonial\ Guard=1 -Cerodon\ Yearling=1 -Certain\ Death=1 -Cerulean\ Sphinx=1 -Cerulean\ Wyvern=1 -Cessation=1 -Ceta\ Disciple=1 -Ceta\ Sanctuary=1 -Chain\ of\ Plasma=1 -Chain\ of\ Silence=1 -Chainbreaker=1 -Chained\ Throatseeker=1 -Chained\ to\ the\ Rocks=1 -Chainer's\ Torment=1 -Chainflinger=1 -Chamber\ of\ Manipulation=1 -Chambered\ Nautilus=1 -Chameleon\ Blur=1 -Champion's\ Drake=1 -Champion\ Lancer=1 -Champion\ of\ Arashin=1 -Champion\ of\ Dusk=1 -Champion\ of\ Rhonas=1 -Champion\ of\ the\ Flame=1 -Chancellor\ of\ the\ Dross=1 -Chancellor\ of\ the\ Forge=1 -Chandra's\ Fury=1 -Chandra's\ Ignition=1 -Chandra's\ Outrage=1 -Chandra's\ Phoenix=1 -Chandra's\ Pyrohelix=1 -Chandra's\ Revolution=1 -Chandra's\ Spitfire=1 -Chandra\ Nalaar=1 -Change\ of\ Heart=1 -Changeling\ Berserker=1 -Changeling\ Hero=1 -Changeling\ Sentinel=1 -Changeling\ Titan=1 -Channel\ Harm=1 -Channel\ the\ Suns=1 -Channeler\ Initiate=1 -Chant\ of\ Vitu-Ghazi=1 -Chaos\ Charm=1 -Chaos\ Imps=1 -Chaos\ Maw=1 -Chaotic\ Backlash=1 -Chaplain's\ Blessing=1 -Char=1 -Charge=1 -Charge\ Across\ the\ Araba=1 -Charging\ Badger=1 -Charging\ Griffin=1 -Charging\ Monstrosaur=1 -Charging\ Paladin=1 -Charging\ Rhino=1 -Charging\ Slateback=1 -Charging\ Tuskodon=1 -Charmbreaker\ Devils=1 -Charmed\ Griffin=1 -Chartooth\ Cougar=1 -Chasm\ Drake=1 -Chasm\ Guide=1 -Chastise=1 -Chemister's\ Trick=1 -Cherished\ Hatchling=1 -Chief\ of\ the\ Edge=1 -Chief\ of\ the\ Foundry=1 -Chief\ of\ the\ Scale=1 -Chieftain\ en-Dal=1 -Child\ of\ Night=1 -Childhood\ Horror=1 -Children\ of\ Korlis=1 -Chill\ Haunting=1 -Chill\ of\ Foreboding=1 -Chill\ to\ the\ Bone=1 -Chilling\ Grasp=1 -Chilling\ Shade=1 -Chime\ of\ Night=1 -Chimeric\ Coils=1 -Chimeric\ Egg=1 -Chimeric\ Idol=1 -Chimeric\ Mass=1 -Chimeric\ Staff=1 -Chisei,\ Heart\ of\ Oceans=1 -Chitinous\ Cloak=1 -Chlorophant=1 -Cho-Arrim\ Legate=1 -Cho-Manno,\ Revolutionary=1 -Choice\ of\ Damnations=1 -Choking\ Fumes=1 -Choking\ Restraints=1 -Choking\ Tethers=1 -Chorus\ of\ Might=1 -Chorus\ of\ the\ Conclave=1 -Chorus\ of\ the\ Tides=1 -Chosen\ by\ Heliod=1 -Chosen\ of\ Markov=1 -Chrome\ Steed=1 -Chromescale\ Drake=1 -Chromium=1 -Chronatog\ Totem=1 -Chronic\ Flooding=1 -Chronicler\ of\ Heroes=1 -Chronomantic\ Escape=1 -Chronomaton=1 -Chronosavant=1 -Chronostutter=1 -Chronozoa=1 -Chub\ Toad=1 -Churning\ Eddy=1 -Cinder\ Barrens=1 -Cinder\ Cloud=1 -Cinder\ Crawler=1 -Cinder\ Elemental=1 -Cinder\ Pyromancer=1 -Cinder\ Seer=1 -Cinder\ Shade=1 -Cinderhaze\ Wretch=1 -Circle\ of\ Affliction=1 -Circle\ of\ Elders=1 -Circle\ of\ Flame=1 -Circle\ of\ Protection:\ Artifacts=1 -Circle\ of\ Protection:\ Shadow=1 -Circle\ of\ Protection:\ White=1 -Circle\ of\ Solace=1 -Circling\ Vultures=1 -Circu,\ Dimir\ Lobotomist=1 -Citadel\ Castellan=1 -Citanul\ Druid=1 -Citanul\ Flute=1 -Citanul\ Woodreaders=1 -Civic\ Guildmage=1 -Civic\ Saber=1 -Civic\ Wayfinder=1 -Civilized\ Scholar=1 -Claim\ //\ Fame=1 -Claim\ of\ Erebos=1 -Clan\ Defiance=1 -Clarion\ Ultimatum=1 -Clash\ of\ Realities=1 -Clash\ of\ Wills=1 -Claustrophobia=1 -Claws\ of\ Valakut=1 -Clay\ Statue=1 -Cleanse=1 -Cleansing\ Beam=1 -Cleansing\ Meditation=1 -Cleansing\ Ray=1 -Clear=1 -Clear\ Shot=1 -Clear\ a\ Path=1 -Clergy\ en-Vec=1 -Cleric\ of\ the\ Forward\ Order=1 -Clickslither=1 -Cliff\ Threader=1 -Cliffhaven\ Vampire=1 -Cliffrunner\ Behemoth=1 -Cliffside\ Lookout=1 -Clinging\ Anemones=1 -Clinging\ Mists=1 -Clip\ Wings=1 -Cloak\ and\ Dagger=1 -Cloak\ of\ Mists=1 -Cloaked\ Siren=1 -Clock\ of\ Omens=1 -Clockspinning=1 -Clockwork\ Avian=1 -Clockwork\ Beetle=1 -Clockwork\ Condor=1 -Clockwork\ Dragon=1 -Clockwork\ Gnomes=1 -Clockwork\ Hydra=1 -Cloistered\ Youth=1 -Clone=1 -Clone\ Shell=1 -Close\ Quarters=1 -Clot\ Sliver=1 -Cloud\ Crusader=1 -Cloud\ Dragon=1 -Cloud\ Elemental=1 -Cloud\ Manta=1 -Cloud\ Spirit=1 -Cloud\ Sprite=1 -Cloud\ of\ Faeries=1 -Cloudblazer=1 -Cloudchaser\ Kestrel=1 -Cloudcrest\ Lake=1 -Cloudcrown\ Oak=1 -Cloudgoat\ Ranger=1 -Cloudheath\ Drake=1 -Cloudhoof\ Kirin=1 -Cloudpost=1 -Cloudreach\ Cavalry=1 -Cloudreader\ Sphinx=1 -Cloudseeder=1 -Cloudshift=1 -Cloudskate=1 -Cloven\ Casting=1 -Clutch\ of\ Currents=1 -Clutch\ of\ Undeath=1 -Clutch\ of\ the\ Undercity=1 -Coal\ Golem=1 -Coal\ Stoker=1 -Coalition\ Flag=1 -Coalition\ Victory=1 -Coast\ Watcher=1 -Coastal\ Discovery=1 -Coastal\ Drake=1 -Coastal\ Hornclaw=1 -Coat\ with\ Venom=1 -Coax\ from\ the\ Blind\ Eternities=1 -Cobalt\ Golem=1 -Cobblebrute=1 -Cobbled\ Wings=1 -Cobra\ Trap=1 -Cockatrice=1 -Codex\ Shredder=1 -Coerced\ Confession=1 -Coercion=1 -Cognivore=1 -Cogwork\ Assembler=1 -Cogworker's\ Puzzleknot=1 -Coiled\ Tinviper=1 -Coiling\ Woodworm=1 -Coils\ of\ the\ Medusa=1 -Cold-Water\ Snapper=1 -Colfenor's\ Plans=1 -Colfenor's\ Urn=1 -Collective\ Blessing=1 -Collective\ Defiance=1 -Collective\ Effort=1 -Colos\ Yearling=1 -Colossal\ Dreadmaw=1 -Colossal\ Heroics=1 -Colossal\ Might=1 -Colossal\ Whale=1 -Colossapede=1 -Colossus\ of\ Akros=1 -Colossus\ of\ Sardia=1 -Coma\ Veil=1 -Combust=1 -Commander's\ Authority=1 -Commander\ Greven\ il-Vec=1 -Commando\ Raid=1 -Commencement\ of\ Festivities=1 -Common\ Bond=1 -Commune\ with\ Dinosaurs=1 -Commune\ with\ Nature=1 -Comparative\ Analysis=1 -Compelling\ Argument=1 -Compelling\ Deterrence=1 -Complete\ Disregard=1 -Complex\ Automaton=1 -Complicate=1 -Composite\ Golem=1 -Compulsory\ Rest=1 -Concerted\ Effort=1 -Conclave's\ Blessing=1 -Conclave\ Equenaut=1 -Conclave\ Naturalists=1 -Conclave\ Phalanx=1 -Concordia\ Pegasus=1 -Conduit\ of\ Ruin=1 -Conduit\ of\ Storms=1 -Cone\ of\ Flame=1 -Confessor=1 -Confirm\ Suspicions=1 -Confiscate=1 -Confiscation\ Coup=1 -Confront\ the\ Unknown=1 -Congregate=1 -Congregation\ at\ Dawn=1 -Conjured\ Currency=1 -Conjurer's\ Ban=1 -Conquer=1 -Conquering\ Manticore=1 -Conqueror's\ Pledge=1 -Consecrate\ Land=1 -Consecrated\ by\ Blood=1 -Consign\ to\ Dream=1 -Consign\ to\ Dust=1 -Constricting\ Sliver=1 -Consul's\ Lieutenant=1 -Consul's\ Shieldguard=1 -Consulate\ Crackdown=1 -Consulate\ Dreadnought=1 -Consulate\ Skygate=1 -Consulate\ Surveillance=1 -Consulate\ Turret=1 -Consult\ the\ Necrosages=1 -Consume\ Spirit=1 -Consume\ Strength=1 -Consume\ the\ Meek=1 -Consuming\ Aberration=1 -Consuming\ Bonfire=1 -Consuming\ Ferocity=1 -Consuming\ Fervor=1 -Consuming\ Sinkhole=1 -Consuming\ Vortex=1 -Consumptive\ Goo=1 -Contagion\ Clasp=1 -Contagious\ Nim=1 -Containment\ Membrane=1 -Contaminated\ Bond=1 -Contaminated\ Ground=1 -Contemplation=1 -Contempt=1 -Contingency\ Plan=1 -Contraband\ Kingpin=1 -Contract\ Killing=1 -Contradict=1 -Control\ Magic=1 -Controvert=1 -Conundrum\ Sphinx=1 -Convalescent\ Care=1 -Conversion\ Chamber=1 -Convicted\ Killer=1 -Conviction=1 -Convincing\ Mirage=1 -Convolute=1 -Coordinated\ Assault=1 -Coordinated\ Barrage=1 -Copper\ Carapace=1 -Copper\ Myr=1 -Copper\ Tablet=1 -Copperhoof\ Vorrac=1 -Copperhorn\ Scout=1 -Coral\ Barrier=1 -Coral\ Eel=1 -Coral\ Merfolk=1 -Coral\ Trickster=1 -Coralhelm\ Guide=1 -Core\ Prowler=1 -Corpse\ Blockade=1 -Corpse\ Churn=1 -Corpse\ Connoisseur=1 -Corpse\ Cur=1 -Corpse\ Hauler=1 -Corpse\ Lunge=1 -Corpse\ Traders=1 -Corpsehatch=1 -Corpsejack\ Menace=1 -Corpseweft=1 -Corrosive\ Gale=1 -Corrosive\ Mentor=1 -Corrosive\ Ooze=1 -Corrupt=1 -Corrupt\ Eunuchs=1 -Corrupt\ Official=1 -Corrupted\ Conscience=1 -Corrupted\ Crossroads=1 -Corrupted\ Grafstone=1 -Corrupted\ Harvester=1 -Corrupted\ Resolve=1 -Corrupted\ Roots=1 -Corrupted\ Zendikon=1 -Corrupting\ Licid=1 -Cosi's\ Ravager=1 -Cosmic\ Horror=1 -Costly\ Plunder=1 -Council\ of\ the\ Absolute=1 -Counsel\ of\ the\ Soratami=1 -Counterbore=1 -Counterflux=1 -Counterlash=1 -Countermand=1 -Countervailing\ Winds=1 -Countless\ Gears\ Renegade=1 -Countryside\ Crusher=1 -Courageous\ Outrider=1 -Courier's\ Capsule=1 -Courier\ Griffin=1 -Coursers'\ Accord=1 -Court\ Archers=1 -Court\ Homunculus=1 -Court\ Hussar=1 -Court\ Street\ Denizen=1 -Courtly\ Provocateur=1 -Covenant\ of\ Blood=1 -Covenant\ of\ Minds=1 -Cover\ of\ Winter=1 -Cowardice=1 -Cowed\ by\ Wisdom=1 -Cower\ in\ Fear=1 -Cowl\ Prowler=1 -Crab\ Umbra=1 -Crabapple\ Cohort=1 -Crackdown\ Construct=1 -Crackleburr=1 -Crackling\ Club=1 -Crackling\ Perimeter=1 -Crackling\ Triton=1 -Cradle\ Guard=1 -Cradle\ of\ Vitality=1 -Cradle\ of\ the\ Accursed=1 -Cradle\ to\ Grave=1 -Crafty\ Cutpurse=1 -Crafty\ Pathmage=1 -Crag\ Puca=1 -Cragganwick\ Cremator=1 -Cranial\ Archive=1 -Cranial\ Extraction=1 -Crash\ Landing=1 -Crash\ Through=1 -Crash\ of\ Rhinos=1 -Crash\ the\ Ramparts=1 -Crashing\ Boars=1 -Crashing\ Centaur=1 -Crashing\ Tide=1 -Crater's\ Claws=1 -Crater\ Elemental=1 -Crater\ Hellion=1 -Craterize=1 -Craven\ Giant=1 -Craw\ Wurm=1 -Crawling\ Filth=1 -Crawling\ Sensation=1 -Crazed\ Armodon=1 -Crazed\ Goblin=1 -Creakwood\ Ghoul=1 -Cream\ of\ the\ Crop=1 -Creeping\ Dread=1 -Creeping\ Mold=1 -Creeping\ Renaissance=1 -Creepy\ Doll=1 -Cremate=1 -Crescendo\ of\ War=1 -Crested\ Craghorn=1 -Crested\ Herdcaller=1 -Crib\ Swap=1 -Crimson\ Hellkite=1 -Crimson\ Mage=1 -Crimson\ Manticore=1 -Crimson\ Muckwader=1 -Crimson\ Roc=1 -Crimson\ Wisps=1 -Crippling\ Blight=1 -Crippling\ Chill=1 -Crocanura=1 -Crocodile\ of\ the\ Crossing=1 -Crookclaw\ Transmuter=1 -Crop\ Sigil=1 -Crosis's\ Attendant=1 -Crossbow\ Ambush=1 -Crossbow\ Infantry=1 -Crossroads\ Consecrator=1 -Crosstown\ Courier=1 -Crossway\ Vampire=1 -Crosswinds=1 -Crovax,\ Ascendant\ Hero=1 -Crovax\ the\ Cursed=1 -Crow\ of\ Dark\ Tidings=1 -Crowd's\ Favor=1 -Crowd\ of\ Cinders=1 -Crown\ of\ Ascension=1 -Crown\ of\ Empires=1 -Crown\ of\ Flames=1 -Crown\ of\ Fury=1 -Crown\ of\ Suspicion=1 -Crown\ of\ Vigor=1 -Crowned\ Ceratok=1 -Crucible\ of\ Fire=1 -Crude\ Rampart=1 -Cruel\ Bargain=1 -Cruel\ Deceiver=1 -Cruel\ Edict=1 -Cruel\ Feeding=1 -Cruel\ Finality=1 -Cruel\ Revival=1 -Cruel\ Sadist=1 -Crumble=1 -Crumbling\ Vestige=1 -Crusader\ of\ Odric=1 -Crush=1 -Crush\ Underfoot=1 -Crusher\ Zendikon=1 -Crushing\ Canopy=1 -Crushing\ Pain=1 -Crushing\ Vines=1 -Cry\ of\ Contrition=1 -Cryoclasm=1 -Crypsis=1 -Crypt\ Champion=1 -Crypt\ Cobra=1 -Crypt\ Ripper=1 -Crypt\ of\ the\ Eternals=1 -Cryptborn\ Horror=1 -Cryptic\ Annelid=1 -Cryptic\ Cruiser=1 -Cryptic\ Serpent=1 -Cryptolith\ Fragment=1 -Cryptwailing=1 -Crystal\ Ball=1 -Crystal\ Rod=1 -Crystal\ Seer=1 -Crystal\ Shard=1 -Crystal\ Spray=1 -Crystalline\ Nautilus=1 -Crystallization=1 -Cudgel\ Troll=1 -Culling\ Dais=1 -Culling\ Drone=1 -Culling\ Mark=1 -Culling\ Scales=1 -Culling\ Sun=1 -Cult\ of\ the\ Waxing\ Moon=1 -Cultist's\ Staff=1 -Cultivator's\ Caravan=1 -Cultivator\ Drone=1 -Cultivator\ of\ Blades=1 -Cumber\ Stone=1 -Cunning\ Bandit=1 -Cunning\ Breezedancer=1 -Cunning\ Lethemancer=1 -Cunning\ Sparkmage=1 -Cunning\ Strike=1 -Cunning\ Survivor=1 -Curator's\ Ward=1 -Curator\ of\ Mysteries=1 -Curio\ Vendor=1 -Curiosity=1 -Curious\ Homunculus=1 -Curse\ of\ Death's\ Hold=1 -Curse\ of\ Oblivion=1 -Curse\ of\ Stalked\ Prey=1 -Curse\ of\ Thirst=1 -Curse\ of\ Wizardry=1 -Curse\ of\ the\ Cabal=1 -Curse\ of\ the\ Nightly\ Hunt=1 -Curse\ of\ the\ Swine=1 -Cursebreak=1 -Cursed\ Flesh=1 -Cursed\ Minotaur=1 -Cursed\ Monstrosity=1 -Cursed\ Rack=1 -Cursed\ Scroll=1 -Curtain\ of\ Light=1 -Custodi\ Soulbinders=1 -Custodian\ of\ the\ Trove=1 -Cut\ the\ Earthly\ Bond=1 -Cut\ the\ Tethers=1 -Cutthroat\ Maneuver=1 -Cutthroat\ il-Dal=1 -Cycle\ of\ Life=1 -Cyclone\ Sire=1 -Cyclopean\ Giant=1 -Cyclopean\ Mummy=1 -Cyclopean\ Snare=1 -Cyclops\ Gladiator=1 -Cyclops\ Tyrant=1 -Cyclops\ of\ Eternal\ Fury=1 -Cyclops\ of\ One-Eyed\ Pass=1 -Cystbearer=1 -Cytoplast\ Manipulator=1 -Cytoplast\ Root-Kin=1 -Cytoshape=1 -Cytospawn\ Shambler=1 -D'Avenant\ Trapper=1 -Dack's\ Duplicate=1 -Dagger\ of\ the\ Worthy=1 -Daggerback\ Basilisk=1 -Daggerclaw\ Imp=1 -Daggerdrome\ Imp=1 -Daily\ Regimen=1 -Dakmor\ Lancer=1 -Dakra\ Mystic=1 -Dampen\ Thought=1 -Dampening\ Pulse=1 -Damping\ Matrix=1 -Dance\ of\ Shadows=1 -Dance\ of\ the\ Skywise=1 -Dance\ with\ Devils=1 -Dancing\ Scimitar=1 -Dandân=1 -Daraja\ Griffin=1 -Darba=1 -Daredevil\ Dragster=1 -Darigaaz's\ Attendant=1 -Darigaaz's\ Caldera=1 -Daring\ Apprentice=1 -Daring\ Archaeologist=1 -Daring\ Buccaneer=1 -Daring\ Demolition=1 -Daring\ Leap=1 -Daring\ Saboteur=1 -Daring\ Skyjek=1 -Daring\ Sleuth=1 -Dark\ Banishing=1 -Dark\ Bargain=1 -Dark\ Betrayal=1 -Dark\ Dabbling=1 -Dark\ Favor=1 -Dark\ Hatchling=1 -Dark\ Heart\ of\ the\ Wood=1 -Dark\ Inquiry=1 -Dark\ Intimations=1 -Dark\ Nourishment=1 -Dark\ Privilege=1 -Dark\ Revenant=1 -Dark\ Supplicant=1 -Dark\ Temper=1 -Dark\ Tutelage=1 -Dark\ Withering=1 -Darkheart\ Sliver=1 -Darkling\ Stalker=1 -Darkslick\ Drake=1 -Darksteel\ Axe=1 -Darksteel\ Brute=1 -Darksteel\ Gargoyle=1 -Darksteel\ Myr=1 -Darksteel\ Pendant=1 -Darksteel\ Sentinel=1 -Darkthicket\ Wolf=1 -Darkwatch\ Elves=1 -Darkwater\ Egg=1 -Daru\ Encampment=1 -Daru\ Lancer=1 -Daru\ Mender=1 -Dash\ Hopes=1 -Dauntless\ Aven=1 -Dauntless\ Cathar=1 -Dauntless\ Dourbark=1 -Dauntless\ Onslaught=1 -Dauntless\ River\ Marshal=1 -Dauthi\ Cutthroat=1 -Dauthi\ Jackal=1 -Dauthi\ Marauder=1 -Dauthi\ Mindripper=1 -Dauthi\ Trapper=1 -Dauthi\ Warlord=1 -Dawn's\ Reflection=1 -Dawn\ Elemental=1 -Dawn\ Gryff=1 -Dawn\ to\ Dusk=1 -Dawnbringer\ Charioteers=1 -Dawnfeather\ Eagle=1 -Dawnglare\ Invoker=1 -Dawnglow\ Infusion=1 -Dawning\ Purist=1 -Dawnray\ Archer=1 -Dawnstrike\ Paladin=1 -Dawntreader\ Elk=1 -Daxos\ of\ Meletis=1 -Day\ of\ the\ Dragons=1 -Daybreak\ Chaplain=1 -Daybreak\ Ranger=1 -Dazzling\ Beauty=1 -Dazzling\ Ramparts=1 -Dazzling\ Reflection=1 -Dead-Iron\ Sledge=1 -Dead\ //\ Gone=1 -Dead\ Drop=1 -Dead\ Man's\ Chest=1 -Dead\ Reveler=1 -Dead\ Ringers=1 -Dead\ Weight=1 -Deadapult=1 -Deadbridge\ Goliath=1 -Deadbridge\ Shaman=1 -Deadeye\ Brawler=1 -Deadeye\ Harpooner=1 -Deadeye\ Plunderers=1 -Deadeye\ Quartermaster=1 -Deadeye\ Rig-Hauler=1 -Deadeye\ Tormentor=1 -Deadlock\ Trap=1 -Deadly\ Allure=1 -Deadly\ Designs=1 -Deadly\ Grub=1 -Deadly\ Insect=1 -Deadly\ Recluse=1 -Deadly\ Wanderings=1 -Dearly\ Departed=1 -Death's\ Approach=1 -Death's\ Duet=1 -Death's\ Presence=1 -Death-Hood\ Cobra=1 -Death\ Bomb=1 -Death\ Cultist=1 -Death\ Denied=1 -Death\ Frenzy=1 -Death\ Grasp=1 -Death\ Match=1 -Death\ Pit\ Offering=1 -Death\ Pits\ of\ Rath=1 -Death\ Pulse=1 -Death\ Rattle=1 -Death\ Stroke=1 -Death\ Wind=1 -Death\ by\ Dragons=1 -Death\ of\ a\ Thousand\ Stings=1 -Deathbellow\ Raider=1 -Deathbloom\ Thallid=1 -Deathbringer\ Thoctar=1 -Deathcap\ Cultivator=1 -Deathcoil\ Wurm=1 -Deathcult\ Rogue=1 -Deathforge\ Shaman=1 -Deathgaze\ Cockatrice=1 -Deathgazer=1 -Deathgreeter=1 -Deathless\ Ancient=1 -Deathless\ Angel=1 -Deathless\ Behemoth=1 -Deathmark=1 -Deathmark\ Prelate=1 -Deathmask\ Nezumi=1 -Deathreap\ Ritual=1 -Deathspore\ Thallid=1 -Debilitating\ Injury=1 -Debtor's\ Pulpit=1 -Debtors'\ Knell=1 -Decaying\ Soil=1 -Deceiver\ of\ Form=1 -Decimator\ Beetle=1 -Decision\ Paralysis=1 -Declare\ Dominance=1 -Decoction\ Module=1 -Decommission=1 -Decompose=1 -Decomposition=1 -Deconstruct=1 -Decorated\ Griffin=1 -Deem\ Worthy=1 -Deep-Sea\ Kraken=1 -Deep-Sea\ Terror=1 -Deep-Slumber\ Titan=1 -Deep\ Freeze=1 -Deep\ Reconnaissance=1 -Deepcavern\ Imp=1 -Deepchannel\ Mentor=1 -Deepfathom\ Skulker=1 -Deepfire\ Elemental=1 -Deeproot\ Warrior=1 -Deeproot\ Waters=1 -Deeptread\ Merrow=1 -Deepwater\ Hypnotist=1 -Deepwood\ Ghoul=1 -Deepwood\ Legate=1 -Deepwood\ Tantiv=1 -Deepwood\ Wolverine=1 -Defeat=1 -Defend\ the\ Hearth=1 -Defender\ en-Vec=1 -Defender\ of\ Law=1 -Defender\ of\ the\ Order=1 -Defensive\ Formation=1 -Defensive\ Maneuvers=1 -Defiant\ Bloodlord=1 -Defiant\ Elf=1 -Defiant\ Greatmaw=1 -Defiant\ Khenra=1 -Defiant\ Ogre=1 -Defiant\ Salvager=1 -Defiant\ Strike=1 -Defiling\ Tears=1 -Deflection=1 -Deft\ Dismissal=1 -Deft\ Duelist=1 -Deftblade\ Elite=1 -Defy\ Death=1 -Defy\ Gravity=1 -Dega\ Sanctuary=1 -Deglamer=1 -Dehydration=1 -Deicide=1 -Delirium\ Skeins=1 -Delusions\ of\ Mediocrity=1 -Dematerialize=1 -Dementia\ Sliver=1 -Demolish=1 -Demolition\ Stomper=1 -Demon's\ Grasp=1 -Demon's\ Herald=1 -Demon's\ Horn=1 -Demon's\ Jester=1 -Demonfire=1 -Demonic\ Appetite=1 -Demonic\ Collusion=1 -Demonic\ Consultation=1 -Demonic\ Taskmaster=1 -Demonic\ Torment=1 -Demonic\ Vigor=1 -Demonmail\ Hauberk=1 -Demonspine\ Whip=1 -Demoralize=1 -Demystify=1 -Denizen\ of\ the\ Deep=1 -Dense\ Canopy=1 -Deny\ Existence=1 -Deny\ Reality=1 -Depala,\ Pilot\ Exemplar=1 -Depths\ of\ Desire=1 -Deputy\ of\ Acquittals=1 -Deranged\ Assistant=1 -Deranged\ Hermit=1 -Deranged\ Outcast=1 -Deranged\ Whelp=1 -Dermoplasm=1 -Descendant\ of\ Soramaro=1 -Descent\ into\ Madness=1 -Desecrated\ Earth=1 -Desecration\ Elemental=1 -Desecration\ Plague=1 -Desecrator\ Hag=1 -Desert's\ Hold=1 -Desert=1 -Desert\ Cerodon=1 -Desert\ Twister=1 -Desert\ of\ the\ Fervent=1 -Desert\ of\ the\ Glorified=1 -Desert\ of\ the\ Indomitable=1 -Desert\ of\ the\ Mindful=1 -Desert\ of\ the\ True=1 -Deserter's\ Quarters=1 -Desolation\ Giant=1 -Desolation\ Twin=1 -Desperate\ Castaways=1 -Desperate\ Charge=1 -Desperate\ Gambit=1 -Desperate\ Ravings=1 -Desperate\ Sentry=1 -Desperate\ Stand=1 -Despise=1 -Despoiler\ of\ Souls=1 -Destined\ //\ Lead=1 -Destroy\ the\ Evidence=1 -Destructive\ Force=1 -Destructive\ Tampering=1 -Destructive\ Urge=1 -Detainment\ Spell=1 -Deviant\ Glee=1 -Devil's\ Play=1 -Devils'\ Playground=1 -Devilthorn\ Fox=1 -Devoted\ Crop-Mate=1 -Devotee\ of\ Strength=1 -Devour\ in\ Flames=1 -Devour\ in\ Shadow=1 -Devouring\ Greed=1 -Devouring\ Light=1 -Devouring\ Rage=1 -Devouring\ Strossus=1 -Devouring\ Swarm=1 -Devout\ Chaplain=1 -Devout\ Harpist=1 -Devout\ Lightcaster=1 -Devout\ Witness=1 -Dewdrop\ Spy=1 -Dhund\ Operative=1 -Diabolic\ Revelation=1 -Diabolic\ Tutor=1 -Diabolic\ Vision=1 -Diamond\ Faerie=1 -Die\ Young=1 -Diligent\ Excavator=1 -Diluvian\ Primordial=1 -Dimensional\ Breach=1 -Dimensional\ Infiltrator=1 -Diminish=1 -Dimir\ Charm=1 -Dimir\ Cluestone=1 -Dimir\ Cutpurse=1 -Dimir\ Guildmage=1 -Dimir\ House\ Guard=1 -Dimir\ Infiltrator=1 -Dimir\ Keyrune=1 -Dimir\ Machinations=1 -Din\ of\ the\ Fireherd=1 -Dingus\ Egg=1 -Dinosaur\ Hunter=1 -Dinosaur\ Stampede=1 -Dinrova\ Horror=1 -Diplomacy\ of\ the\ Wastes=1 -Diplomatic\ Escort=1 -Dire\ Fleet\ Captain=1 -Dire\ Fleet\ Hoarder=1 -Dire\ Fleet\ Interloper=1 -Dire\ Fleet\ Neckbreaker=1 -Dire\ Undercurrents=1 -Diregraf\ Colossus=1 -Diregraf\ Escort=1 -Dirge\ of\ Dread=1 -Dirty\ Wererat=1 -Disappear=1 -Disappearing\ Act=1 -Disarm=1 -Disaster\ Radius=1 -Disciple\ of\ Grace=1 -Disciple\ of\ Griselbrand=1 -Disciple\ of\ Kangee=1 -Disciple\ of\ Malice=1 -Disciple\ of\ Phenax=1 -Disciple\ of\ Tevesh\ Szat=1 -Disciple\ of\ the\ Old\ Ways=1 -Disciple\ of\ the\ Ring=1 -Discordant\ Dirge=1 -Discordant\ Spirit=1 -Disease\ Carriers=1 -Disembowel=1 -Disentomb=1 -Disintegrate=1 -Dismal\ Failure=1 -Dismantle=1 -Dismiss\ into\ Dream=1 -Disorder=1 -Disowned\ Ancestor=1 -Dispeller's\ Capsule=1 -Dispense\ Justice=1 -Dispersal\ Technician=1 -Disperse=1 -Dispersing\ Orb=1 -Displace=1 -Displacement\ Wave=1 -Disposal\ Mummy=1 -Dispossess=1 -Disrupting\ Scepter=1 -Disruptive\ Pitmage=1 -Disruptive\ Student=1 -Dissension\ in\ the\ Ranks=1 -Dissenter's\ Deliverance=1 -Dissipate=1 -Dissipation\ Field=1 -Dissolve=1 -Distant\ Memories=1 -Distemper\ of\ the\ Blood=1 -Distended\ Mindbender=1 -Distorting\ Wake=1 -Disturbing\ Plot=1 -Dive\ Down=1 -Divebomber\ Griffin=1 -Divergent\ Growth=1 -Diversionary\ Tactics=1 -Divest=1 -Divination=1 -Divine\ Deflection=1 -Divine\ Favor=1 -Divine\ Offering=1 -Divine\ Reckoning=1 -Divine\ Transformation=1 -Divine\ Verdict=1 -Diviner's\ Wand=1 -Diviner\ Spirit=1 -Diving\ Griffin=1 -Dizzying\ Gaze=1 -Djeru's\ Renunciation=1 -Djeru's\ Resolve=1 -Djeru,\ With\ Eyes\ Open=1 -Djinn\ Illuminatus=1 -Djinn\ of\ Wishes=1 -Docent\ of\ Perfection=1 -Dodecapod=1 -Dogged\ Hunter=1 -Dogpile=1 -Dolmen\ Gate=1 -Domesticated\ Hydra=1 -Domestication=1 -Dominator\ Drone=1 -Dong\ Zhou,\ the\ Tyrant=1 -Doom\ Cannon=1 -Doomed\ Dissenter=1 -Doomed\ Necromancer=1 -Doomgape=1 -Doomwake\ Giant=1 -Door\ to\ Nothingness=1 -Doorkeeper=1 -Dormant\ Gomazoa=1 -Dormant\ Sliver=1 -Dosan's\ Oldest\ Chant=1 -Double\ Negative=1 -Doubtless\ One=1 -Douse\ in\ Gloom=1 -Down\ //\ Dirty=1 -Downdraft=1 -Downpour=1 -Downsize=1 -Dowsing\ Shaman=1 -Dracoplasm=1 -Drag\ Down=1 -Drag\ Under=1 -Dragon's\ Eye\ Savants=1 -Dragon's\ Eye\ Sentry=1 -Dragon's\ Herald=1 -Dragon-Scarred\ Bear=1 -Dragon-Style\ Twins=1 -Dragon\ Appeasement=1 -Dragon\ Bell\ Monk=1 -Dragon\ Blood=1 -Dragon\ Egg=1 -Dragon\ Engine=1 -Dragon\ Fodder=1 -Dragon\ Grip=1 -Dragon\ Hatchling=1 -Dragon\ Mantle=1 -Dragon\ Mask=1 -Dragon\ Roost=1 -Dragon\ Throne\ of\ Tarkir=1 -Dragon\ Whelp=1 -Dragonloft\ Idol=1 -Dragonlord's\ Prerogative=1 -Dragonlord's\ Servant=1 -Dragonrage=1 -Dragonscale\ Boon=1 -Dragonshift=1 -Dragonsoul\ Knight=1 -Dragonstalker=1 -Drain\ the\ Well=1 -Draining\ Whelk=1 -Drainpipe\ Vermin=1 -Drake-Skull\ Cameo=1 -Drake\ Familiar=1 -Drake\ Hatchling=1 -Drake\ Haven=1 -Drake\ Umbra=1 -Drakestown\ Forgotten=1 -Drakewing\ Krasis=1 -Dralnu's\ Pet=1 -Dralnu,\ Lich\ Lord=1 -Dramatic\ Rescue=1 -Dramatic\ Reversal=1 -Drana's\ Chosen=1 -Drana's\ Emissary=1 -Drastic\ Revelation=1 -Dread=1 -Dread\ Defiler=1 -Dread\ Drone=1 -Dread\ Reaper=1 -Dread\ Slag=1 -Dread\ Specter=1 -Dread\ Warlock=1 -Dread\ Wight=1 -Dreadbringer\ Lampads=1 -Dreadwaters=1 -Dreadwing=1 -Dream's\ Grip=1 -Dream\ Chisel=1 -Dream\ Fighter=1 -Dream\ Leash=1 -Dream\ Prowler=1 -Dream\ Salvage=1 -Dream\ Thief=1 -Dream\ Tides=1 -Dream\ Twist=1 -Dreamborn\ Muse=1 -Dreamcaller\ Siren=1 -Dreamcatcher=1 -Dreampod\ Druid=1 -Dreams\ of\ the\ Dead=1 -Dreamscape\ Artist=1 -Dreamspoiler\ Witches=1 -Dreamstealer=1 -Dreamstone\ Hedron=1 -Dreamwinder=1 -Dreg\ Mangler=1 -Dreg\ Reaver=1 -Dregs\ of\ Sorrow=1 -Dregscape\ Zombie=1 -Drekavac=1 -Drelnoch=1 -Drift\ of\ the\ Dead=1 -Drifter\ il-Dal=1 -Drifting\ Shade=1 -Drill-Skimmer=1 -Drinker\ of\ Sorrow=1 -Dripping-Tongue\ Zubera=1 -Dripping\ Dead=1 -Driven\ //\ Despair=1 -Driver\ of\ the\ Dead=1 -Drogskol\ Cavalry=1 -Drogskol\ Shieldmate=1 -Dromar's\ Attendant=1 -Dromoka's\ Gift=1 -Dromoka\ Captain=1 -Dromoka\ Dunecaster=1 -Dromoka\ Monument=1 -Dromoka\ Warrior=1 -Dromosaur=1 -Droning\ Bureaucrats=1 -Drooling\ Groodion=1 -Drooling\ Ogre=1 -Dross\ Crocodile=1 -Dross\ Golem=1 -Dross\ Harvester=1 -Dross\ Hopper=1 -Dross\ Prowler=1 -Dross\ Scorpion=1 -Drove\ of\ Elves=1 -Drover\ of\ the\ Mighty=1 -Drown\ in\ Filth=1 -Drowned=1 -Drowned\ Rusalka=1 -Drowner\ Initiate=1 -Drowner\ of\ Hope=1 -Drowner\ of\ Secrets=1 -Drownyard\ Behemoth=1 -Drownyard\ Explorers=1 -Drownyard\ Temple=1 -Drudge\ Beetle=1 -Drudge\ Reavers=1 -Drudge\ Sentinel=1 -Drudge\ Skeletons=1 -Druid's\ Call=1 -Druid's\ Deliverance=1 -Druid's\ Familiar=1 -Druid\ Lyrist=1 -Druid\ of\ the\ Anima=1 -Druid\ of\ the\ Cowl=1 -Druidic\ Satchel=1 -Drumhunter=1 -Drunau\ Corpse\ Trawler=1 -Dry\ Spell=1 -Dryad's\ Caress=1 -Dryad\ Sophisticate=1 -Dual\ Shot=1 -Dub=1 -Dubious\ Challenge=1 -Duct\ Crawler=1 -Duergar\ Assailant=1 -Duergar\ Cave-Guard=1 -Duergar\ Mine-Captain=1 -Dukhara\ Peafowl=1 -Dukhara\ Scavenger=1 -Dune-Brood\ Nephilim=1 -Dune\ Beetle=1 -Dune\ Diviner=1 -Duneblast=1 -Dunerider\ Outlaw=1 -Dunes\ of\ the\ Dead=1 -Dungeon\ Geists=1 -Dungeon\ Shade=1 -Duplicity=1 -Durable\ Handicraft=1 -Durkwood\ Baloth=1 -Durkwood\ Tracker=1 -Dusk\ Charger=1 -Dusk\ Feaster=1 -Dusk\ Imp=1 -Dusk\ Legion\ Dreadnought=1 -Duskborne\ Skymarcher=1 -Duskdale\ Wurm=1 -Duskhunter\ Bat=1 -Duskmantle,\ House\ of\ Shadow=1 -Duskmantle\ Prowler=1 -Duskrider\ Peregrine=1 -Duskwalker=1 -Duskworker=1 -Dust\ Corona=1 -Dust\ Elemental=1 -Dutiful\ Attendant=1 -Dutiful\ Return=1 -Dutiful\ Servants=1 -Dutiful\ Thrull=1 -Duty-Bound\ Dead=1 -Dwarven\ Berserker=1 -Dwarven\ Blastminer=1 -Dwarven\ Demolition\ Team=1 -Dwarven\ Driller=1 -Dwarven\ Landslide=1 -Dwarven\ Nomad=1 -Dwarven\ Patrol=1 -Dwarven\ Priest=1 -Dwarven\ Recruiter=1 -Dwarven\ Shrine=1 -Dwarven\ Soldier=1 -Dwarven\ Strike\ Force=1 -Dwarven\ Vigilantes=1 -Dwindle=1 -Dwynen,\ Gilt-Leaf\ Daen=1 -Dying\ Wail=1 -Dying\ Wish=1 -Dynacharge=1 -Dynavolt\ Tower=1 -Eager\ Cadet=1 -Eager\ Construct=1 -Eagle\ of\ the\ Watch=1 -Early\ Frost=1 -Earsplitting\ Rats=1 -Earth\ Elemental=1 -Earthblighter=1 -Earthbrawn=1 -Earthen\ Arms=1 -Earthshaker=1 -Eastern\ Paladin=1 -Eater\ of\ Hope=1 -Ebon\ Drake=1 -Ebonblade\ Reaper=1 -Ebony\ Horse=1 -Ebony\ Rhino=1 -Ebony\ Treefolk=1 -Echo\ Circlet=1 -Echo\ Mage=1 -Echo\ Tracer=1 -Echoes\ of\ the\ Kin\ Tree=1 -Echoing\ Calm=1 -Echoing\ Courage=1 -Echoing\ Ruin=1 -Eddytrail\ Hawk=1 -Edifice\ of\ Authority=1 -Edric,\ Spymaster\ of\ Trest=1 -Eel\ Umbra=1 -Eerie\ Procession=1 -Efficient\ Construction=1 -Efreet\ Weaponmaster=1 -Ego\ Erasure=1 -Eidolon\ of\ Countless\ Battles=1 -Eight-and-a-Half-Tails=1 -Ekundu\ Cyclops=1 -Ekundu\ Griffin=1 -Elaborate\ Firecannon=1 -Eland\ Umbra=1 -Elder\ Cathar=1 -Elder\ Deep-Fiend=1 -Elder\ Land\ Wurm=1 -Elder\ Mastery=1 -Elder\ Pine\ of\ Jukai=1 -Elder\ of\ Laurels=1 -Eldrazi\ Aggressor=1 -Eldrazi\ Devastator=1 -Eldrazi\ Mimic=1 -Eldrazi\ Obligator=1 -Eldrazi\ Skyspawner=1 -Electrify=1 -Electropotence=1 -Electrostatic\ Bolt=1 -Electrostatic\ Pummeler=1 -Electryte=1 -Elegant\ Edgecrafters=1 -Elemental\ Appeal=1 -Elemental\ Bond=1 -Elemental\ Mastery=1 -Elemental\ Resonance=1 -Elemental\ Uprising=1 -Elephant\ Ambush=1 -Elephant\ Guide=1 -Elfhame\ Druid=1 -Elgaud\ Inquisitor=1 -Elgaud\ Shieldmate=1 -Elite\ Arcanist=1 -Elite\ Archers=1 -Elite\ Cat\ Warrior=1 -Elite\ Inquisitor=1 -Elite\ Javelineer=1 -Elite\ Skirmisher=1 -Elite\ Vanguard=1 -Elixir\ of\ Immortality=1 -Elixir\ of\ Vitality=1 -Elkin\ Bottle=1 -Elsewhere\ Flask=1 -Elusive\ Krasis=1 -Elusive\ Tormentor=1 -Elven\ Lyre=1 -Elven\ Riders=1 -Elven\ Rite=1 -Elves\ of\ Deep\ Shadow=1 -Elvish\ Aberration=1 -Elvish\ Berserker=1 -Elvish\ Branchbender=1 -Elvish\ Eulogist=1 -Elvish\ Fury=1 -Elvish\ Handservant=1 -Elvish\ Herder=1 -Elvish\ Hexhunter=1 -Elvish\ Lookout=1 -Elvish\ Lyrist=1 -Elvish\ Pathcutter=1 -Elvish\ Piper=1 -Elvish\ Ranger=1 -Elvish\ Scrapper=1 -Elvish\ Soultiller=1 -Elvish\ Warrior=1 -Embalmed\ Brawler=1 -Embalmer's\ Tools=1 -Ember-Eye\ Wolf=1 -Ember\ Beast=1 -Ember\ Gale=1 -Ember\ Shot=1 -Ember\ Swallower=1 -Emberhorn\ Minotaur=1 -Embermaw\ Hellion=1 -Emberstrike\ Duo=1 -Emberwilde\ Augur=1 -Emberwilde\ Caliph=1 -Emblazoned\ Golem=1 -Emblem\ of\ the\ Warmind=1 -Embodiment\ of\ Fury=1 -Embodiment\ of\ Insight=1 -Embodiment\ of\ Spring=1 -Embolden=1 -Embraal\ Bruiser=1 -Embraal\ Gear-Smasher=1 -Emergent\ Growth=1 -Emeria\ Angel=1 -Emeria\ Shepherd=1 -Emissary\ of\ Despair=1 -Emissary\ of\ Hope=1 -Emissary\ of\ Sunrise=1 -Emissary\ of\ the\ Sleepless=1 -Emmara\ Tandris=1 -Emmessi\ Tome=1 -Emperor's\ Vanguard=1 -Emperor\ Crocodile=1 -Empty-Shrine\ Kannushi=1 -Empyreal\ Voyager=1 -Empyrial\ Armor=1 -Empyrial\ Plate=1 -Emrakul's\ Evangel=1 -Emrakul's\ Hatcher=1 -Emrakul's\ Influence=1 -Enatu\ Golem=1 -Encampment\ Keeper=1 -Encase\ in\ Ice=1 -Enchantment\ Alteration=1 -Encircling\ Fissure=1 -Enclave\ Cryptologist=1 -Enclave\ Elite=1 -Encroaching\ Wastes=1 -Encrust=1 -End\ Hostilities=1 -Endangered\ Armodon=1 -Endbringer's\ Revel=1 -Endemic\ Plague=1 -Endless\ Obedience=1 -Endless\ Ranks\ of\ the\ Dead=1 -Endless\ Sands=1 -Endless\ Scream=1 -Endless\ Swarm=1 -Endless\ Whispers=1 -Endoskeleton=1 -Endrek\ Sahr,\ Master\ Breeder=1 -Endure=1 -Energizer=1 -Energy\ Arc=1 -Enervate=1 -Enfeeblement=1 -Engineered\ Might=1 -Engulfing\ Flames=1 -Engulfing\ Slagwurm=1 -Enhanced\ Awareness=1 -Enigma\ Drake=1 -Enigma\ Sphinx=1 -Enlarge=1 -Enlightened\ Ascetic=1 -Enlightened\ Maniac=1 -Enlisted\ Wurm=1 -Enormous\ Baloth=1 -Enrage=1 -Enraged\ Giant=1 -Enraging\ Licid=1 -Enshrined\ Memories=1 -Enshrouding\ Mist=1 -Enslave=1 -Enslaved\ Dwarf=1 -Ensouled\ Scimitar=1 -Entangling\ Trap=1 -Entangling\ Vines=1 -Enter\ the\ Unknown=1 -Enthralling\ Victor=1 -Entomber\ Exarch=1 -Entrails\ Feaster=1 -Entrancing\ Melody=1 -Entropic\ Eidolon=1 -Envelop=1 -Eon\ Hub=1 -Ephara's\ Enlightenment=1 -Ephara's\ Radiance=1 -Ephemeral\ Shields=1 -Ephemeron=1 -Epic\ Proportions=1 -Epicenter=1 -Epiphany\ Storm=1 -Epiphany\ at\ the\ Drownyard=1 -Epitaph\ Golem=1 -Epochrasite=1 -Equal\ Treatment=1 -Equestrian\ Skill=1 -Era\ of\ Innovation=1 -Eradicate=1 -Erase=1 -Erdwal\ Illuminator=1 -Erdwal\ Ripper=1 -Erebos's\ Emissary=1 -Erg\ Raiders=1 -Eron\ the\ Relentless=1 -Errand\ of\ Duty=1 -Errant\ Doomsayers=1 -Errant\ Ephemeron=1 -Erratic\ Mutation=1 -Ersatz\ Gnomes=1 -Ertai's\ Trickery=1 -Escaped\ Null=1 -Escaped\ Shapeshifter=1 -Esper\ Sojourners=1 -Esperzoa=1 -Essence\ Backlash=1 -Essence\ Depleter=1 -Essence\ Drain=1 -Essence\ Feed=1 -Essence\ Filter=1 -Essence\ Flare=1 -Essence\ Flux=1 -Essence\ Fracture=1 -Essence\ Leak=1 -Etched\ Monstrosity=1 -Etched\ Oracle=1 -Eternal\ Dominion=1 -Eternal\ Scourge=1 -Eternal\ Thirst=1 -Eternal\ of\ Harsh\ Truths=1 -Eternity\ Snare=1 -Ether\ Well=1 -Ethercaste\ Knight=1 -Ethereal\ Champion=1 -Ethereal\ Guidance=1 -Ethereal\ Usher=1 -Etherium\ Astrolabe=1 -Ethersworn\ Shieldmage=1 -Etherwrought\ Page=1 -Evacuation=1 -Evanescent\ Intellect=1 -Evangel\ of\ Heliod=1 -Evangelize=1 -Even\ the\ Odds=1 -Ever\ After=1 -Everbark\ Shaman=1 -Everdawn\ Champion=1 -Everflame\ Eidolon=1 -Everflowing\ Chalice=1 -Everglades=1 -Evernight\ Shade=1 -Evershrike=1 -Evil\ Eye\ of\ Orms-by-Gore=1 -Evil\ Eye\ of\ Urborg=1 -Evil\ Presence=1 -Evil\ Twin=1 -Eviscerate=1 -Eviscerator=1 -Evolution\ Charm=1 -Evolution\ Vat=1 -Evolving\ Wilds=1 -Evra,\ Halcyon\ Witness=1 -Exalted\ Dragon=1 -Exava,\ Rakdos\ Blood\ Witch=1 -Excavation\ Elephant=1 -Excavator=1 -Exclusion\ Ritual=1 -Excommunicate=1 -Excoriate=1 -Excruciator=1 -Execute=1 -Executioner's\ Capsule=1 -Executioner's\ Hood=1 -Executioner's\ Swing=1 -Exemplar\ of\ Strength=1 -Exert\ Influence=1 -Exhumer\ Thrull=1 -Exile=1 -Exile\ into\ Darkness=1 -Exiled\ Boggart=1 -Exiled\ Doomsayer=1 -Exoskeletal\ Armor=1 -Exotic\ Curse=1 -Exotic\ Disease=1 -Expedite=1 -Expedition\ Envoy=1 -Expedition\ Raptor=1 -Expel\ from\ Orazca=1 -Expendable\ Troops=1 -Experiment\ Kraj=1 -Experimental\ Aviator=1 -Exploding\ Borders=1 -Explorer's\ Scope=1 -Explosive\ Apparatus=1 -Explosive\ Growth=1 -Explosive\ Impact=1 -Explosive\ Revelation=1 -Expunge=1 -Exquisite\ Archangel=1 -Extinguish\ All\ Hope=1 -Extract\ from\ Darkness=1 -Extractor\ Demon=1 -Extricator\ of\ Sin=1 -Extruder=1 -Exultant\ Cultist=1 -Exultant\ Skymarcher=1 -Eye\ Gouge=1 -Eye\ for\ an\ Eye=1 -Eye\ of\ the\ Storm=1 -Eyeblight's\ Ending=1 -Eyeblight\ Assassin=1 -Eyeblight\ Massacre=1 -Eyeless\ Watcher=1 -Eyes\ in\ the\ Skies=1 -Eyes\ of\ the\ Watcher=1 -Eyes\ of\ the\ Wisent=1 -Ezuri's\ Archers=1 -Fa'adiyah\ Seer=1 -Fable\ of\ Wolf\ and\ Owl=1 -Fabled\ Hero=1 -Fabrication\ Module=1 -Face\ of\ Fear=1 -Facevaulter=1 -Fact\ or\ Fiction=1 -Fade\ from\ Memory=1 -Fade\ into\ Antiquity=1 -Faerie\ Harbinger=1 -Faerie\ Impostor=1 -Faerie\ Invaders=1 -Faerie\ Mechanist=1 -Faerie\ Squadron=1 -Faerie\ Swarm=1 -Faerie\ Tauntings=1 -Faerie\ Trickery=1 -Failed\ Inspection=1 -Failure\ //\ Comply=1 -Fairgrounds\ Trumpeter=1 -Fairgrounds\ Warden=1 -Faith's\ Fetters=1 -Faith\ Unbroken=1 -Faith\ of\ the\ Devoted=1 -Faithbearer\ Paladin=1 -Faithful\ Squire=1 -Falkenrath\ Gorger=1 -Falkenrath\ Marauders=1 -Falkenrath\ Noble=1 -Falkenrath\ Reaver=1 -Falkenrath\ Torturer=1 -Fall\ of\ the\ Gavel=1 -Fall\ of\ the\ Hammer=1 -Fall\ of\ the\ Thran=1 -Fall\ of\ the\ Titans=1 -Fallen\ Angel=1 -Fallen\ Cleric=1 -Fallen\ Ferromancer=1 -Fallen\ Ideal=1 -Falling\ Timber=1 -Fallowsage=1 -False\ Dawn=1 -False\ Memories=1 -Familiar's\ Ruse=1 -Famine=1 -Famished\ Ghoul=1 -Famished\ Paladin=1 -Fan\ Bearer=1 -Fanatic\ of\ Mogis=1 -Fanatic\ of\ Xenagos=1 -Fang\ Skulkin=1 -Fangren\ Firstborn=1 -Fangren\ Hunter=1 -Fanning\ the\ Flames=1 -Far\ //\ Away=1 -Farbog\ Boneflinger=1 -Farbog\ Revenant=1 -Farm\ //\ Market=1 -Farrel's\ Zealot=1 -Fatal\ Blow=1 -Fatal\ Frenzy=1 -Fate\ Foretold=1 -Fate\ Forgotten=1 -Fate\ Transfer=1 -Fate\ Unraveler=1 -Fated\ Conflagration=1 -Fated\ Infatuation=1 -Fated\ Intervention=1 -Fated\ Retribution=1 -Fated\ Return=1 -Fateful\ Showdown=1 -Fatespinner=1 -Fathom\ Feeder=1 -Fathom\ Fleet\ Boarder=1 -Fathom\ Fleet\ Captain=1 -Fathom\ Fleet\ Cutthroat=1 -Fathom\ Fleet\ Firebrand=1 -Fathom\ Mage=1 -Fathom\ Seer=1 -Fathom\ Trawl=1 -Fatigue=1 -Fault\ Riders=1 -Favor\ of\ the\ Mighty=1 -Favor\ of\ the\ Woods=1 -Favored\ Hoplite=1 -Fear=1 -Fearsome\ Temper=1 -Feast\ of\ Dreams=1 -Feast\ of\ Flesh=1 -Feast\ on\ the\ Fallen=1 -Feast\ or\ Famine=1 -Feat\ of\ Resistance=1 -Feebleness=1 -Feed\ the\ Pack=1 -Feeding\ Frenzy=1 -Feeling\ of\ Dread=1 -Felhide\ Brawler=1 -Felhide\ Minotaur=1 -Felhide\ Petrifier=1 -Felidar\ Cub=1 -Felidar\ Sovereign=1 -Fell\ Flagship=1 -Femeref\ Healer=1 -Femeref\ Knight=1 -Femeref\ Scouts=1 -Fen\ Hauler=1 -Fencer's\ Magemark=1 -Fencing\ Ace=1 -Fendeep\ Summoner=1 -Feral\ Abomination=1 -Feral\ Animist=1 -Feral\ Contest=1 -Feral\ Hydra=1 -Feral\ Incarnation=1 -Feral\ Instinct=1 -Feral\ Invocation=1 -Feral\ Krushok=1 -Feral\ Lightning=1 -Feral\ Prowler=1 -Feral\ Shadow=1 -Feral\ Thallid=1 -Ferocity=1 -Ferropede=1 -Ferrovore=1 -Fertile\ Imagination=1 -Fertile\ Thicket=1 -Fervent\ Cathar=1 -Fervent\ Charge=1 -Fervent\ Denial=1 -Fervent\ Paincaster=1 -Fervent\ Strike=1 -Fervor=1 -Festercreep=1 -Festergloom=1 -Festerhide\ Boar=1 -Festering\ Evil=1 -Festering\ Goblin=1 -Festering\ Mummy=1 -Festering\ Newt=1 -Festering\ Wound=1 -Festival\ of\ the\ Guildpact=1 -Fetid\ Horror=1 -Fetid\ Imp=1 -Fettergeist=1 -Feudkiller's\ Verdict=1 -Fevered\ Strength=1 -Fevered\ Visions=1 -Field\ Creeper=1 -Field\ Surgeon=1 -Field\ of\ Souls=1 -Fiend\ Binder=1 -Fierce\ Invocation=1 -Fiery\ Cannonade=1 -Fiery\ Conclusion=1 -Fiery\ Fall=1 -Fiery\ Finish=1 -Fiery\ Hellhound=1 -Fiery\ Impulse=1 -Fiery\ Intervention=1 -Fiery\ Temper=1 -Fight\ or\ Flight=1 -Fight\ to\ the\ Death=1 -Fighting\ Chance=1 -Fighting\ Drake=1 -Filigree\ Angel=1 -Filigree\ Crawler=1 -Filigree\ Familiar=1 -Filigree\ Sages=1 -Fill\ with\ Fright=1 -Filth=1 -Filthy\ Cur=1 -Final-Sting\ Faerie=1 -Final\ Parting=1 -Final\ Punishment=1 -Final\ Revels=1 -Final\ Reward=1 -Finest\ Hour=1 -Fire-Belly\ Changeling=1 -Fire-Field\ Ogre=1 -Fire\ Ambush=1 -Fire\ Ants=1 -Fire\ Drake=1 -Fire\ Elemental=1 -Fire\ Imp=1 -Fire\ Juggler=1 -Fire\ Servant=1 -Fire\ Shrine\ Keeper=1 -Fire\ Sprites=1 -Fire\ Tempest=1 -Fire\ Whip=1 -Fire\ at\ Will=1 -Fireball=1 -Firebrand\ Archer=1 -Firebreathing=1 -Firecannon\ Blast=1 -Firefiend\ Elemental=1 -Firefist\ Adept=1 -Firefist\ Striker=1 -Firefly=1 -Fireforger's\ Puzzleknot=1 -Firefright\ Mage=1 -Firemane\ Angel=1 -Firemane\ Avenger=1 -Firemantle\ Mage=1 -Firemind's\ Foresight=1 -Fires\ of\ Undeath=1 -Fires\ of\ Yavimaya=1 -Firescreamer=1 -Fireshrieker=1 -Firestorm\ Hellkite=1 -Firestorm\ Phoenix=1 -Firewake\ Sliver=1 -First\ Response=1 -First\ Volley=1 -Fishliver\ Oil=1 -Fissure=1 -Fissure\ Vent=1 -Fists\ of\ Ironwood=1 -Fists\ of\ the\ Anvil=1 -Fists\ of\ the\ Demigod=1 -Five-Alarm\ Fire=1 -Flailing\ Drake=1 -Flailing\ Manticore=1 -Flame-Kin\ War\ Scout=1 -Flame-Kin\ Zealot=1 -Flame-Wreathed\ Phoenix=1 -Flame\ Burst=1 -Flame\ Elemental=1 -Flame\ Fusillade=1 -Flame\ Javelin=1 -Flame\ Spirit=1 -Flame\ Wave=1 -Flameblade\ Angel=1 -Flameblast\ Dragon=1 -Flameborn\ Hellion=1 -Flamebreak=1 -Flamecast\ Wheel=1 -Flamecore\ Elemental=1 -Flamekin\ Bladewhirl=1 -Flamekin\ Brawler=1 -Flames\ of\ the\ Blood\ Hand=1 -Flames\ of\ the\ Firebrand=1 -Flameshadow\ Conjuring=1 -Flamespeaker\ Adept=1 -Flametongue\ Kavu=1 -Flamewave\ Invoker=1 -Flaming\ Sword=1 -Flare=1 -Flaring\ Flame-Kin=1 -Flash\ Conscription=1 -Flash\ Foliage=1 -Flash\ of\ Defiance=1 -Flashfreeze=1 -Flatten=1 -Flay=1 -Flayed\ Nim=1 -Flayer\ Drone=1 -Flaying\ Tendrils=1 -Fledgling\ Dragon=1 -Fledgling\ Imp=1 -Fledgling\ Mawcor=1 -Fledgling\ Osprey=1 -Fleecemane\ Lion=1 -Fleet\ Swallower=1 -Fleetfeather\ Cockatrice=1 -Fleetfeather\ Sandals=1 -Fleetfoot\ Panther=1 -Fleeting\ Aven=1 -Fleeting\ Image=1 -Fleeting\ Memories=1 -Fleetwheel\ Cruiser=1 -Flensermite=1 -Flesh-Eater\ Imp=1 -Flesh\ //\ Blood=1 -Flesh\ Allergy=1 -Flesh\ Reaver=1 -Flesh\ to\ Dust=1 -Fleshbag\ Marauder=1 -Fleshwrither=1 -Flickerform=1 -Flickering\ Spirit=1 -Flight=1 -Flight\ Spellbomb=1 -Flight\ of\ Fancy=1 -Fling=1 -Flint\ Golem=1 -Flinthoof\ Boar=1 -Flitterstep\ Eidolon=1 -Flood\ Plain=1 -Flood\ of\ Recollection=1 -Floodbringer=1 -Floodchaser=1 -Floodgate=1 -Floodtide\ Serpent=1 -Floodwater\ Dam=1 -Floodwaters=1 -Flourishing\ Defenses=1 -Flow\ of\ Ideas=1 -Flowstone\ Armor=1 -Flowstone\ Blade=1 -Flowstone\ Channeler=1 -Flowstone\ Charger=1 -Flowstone\ Crusher=1 -Flowstone\ Embrace=1 -Flowstone\ Flood=1 -Flowstone\ Mauler=1 -Flowstone\ Overseer=1 -Flowstone\ Salamander=1 -Flowstone\ Sculpture=1 -Flowstone\ Shambler=1 -Flowstone\ Slide=1 -Flowstone\ Strike=1 -Flowstone\ Surge=1 -Flowstone\ Thopter=1 -Flowstone\ Wyvern=1 -Flurry\ of\ Wings=1 -Fluxcharger=1 -Flying\ Carpet=1 -Flying\ Crane\ Technique=1 -Flying\ Men=1 -Fodder\ Cannon=1 -Fodder\ Launch=1 -Fog=1 -Fog\ Elemental=1 -Fog\ Patch=1 -Fog\ of\ Gnats=1 -Fogwalker=1 -Fold\ into\ Aether=1 -Folk\ of\ the\ Pines=1 -Followed\ Footsteps=1 -Font\ of\ Fortunes=1 -Font\ of\ Return=1 -Font\ of\ Vigor=1 -Fool's\ Demise=1 -Fool's\ Tome=1 -Foot\ Soldiers=1 -Footbottom\ Feast=1 -Foratog=1 -Forbidden\ Lore=1 -Force\ Away=1 -Force\ of\ Nature=1 -Force\ of\ Savagery=1 -Forced\ Adaptation=1 -Forced\ Worship=1 -Forcemage\ Advocate=1 -Forebear's\ Blade=1 -Forerunner\ of\ Slaughter=1 -Forerunner\ of\ the\ Coalition=1 -Forerunner\ of\ the\ Empire=1 -Forerunner\ of\ the\ Heralds=1 -Forerunner\ of\ the\ Legion=1 -Foresee=1 -Foreshadow=1 -Forest=1 -Forfend=1 -Forge\ Armor=1 -Forge\ Devil=1 -Forgeborn\ Oreads=1 -Forgotten\ Creation=1 -Forgotten\ Lore=1 -Foriysian\ Interceptor=1 -Foriysian\ Totem=1 -Fork\ in\ the\ Road=1 -Forked-Branch\ Garami=1 -Forked\ Lightning=1 -Forlorn\ Pseudamma=1 -Form\ of\ the\ Dinosaur=1 -Formless\ Nurturing=1 -Forsaken\ Drifters=1 -Forsaken\ Sanctuary=1 -Fortified\ Rampart=1 -Fortify=1 -Fortitude=1 -Fortress\ Cyclops=1 -Fortuitous\ Find=1 -Fortune's\ Favor=1 -Fortune\ Thief=1 -Fossil\ Find=1 -Foul\ Emissary=1 -Foul\ Familiar=1 -Foul\ Imp=1 -Foul\ Orchard=1 -Foul\ Presence=1 -Foul\ Renewal=1 -Foundry\ Assembler=1 -Foundry\ Champion=1 -Foundry\ Hornet=1 -Foundry\ Screecher=1 -Foundry\ of\ the\ Consuls=1 -Fountain\ of\ Youth=1 -Fourth\ Bridge\ Prowler=1 -Fractured\ Loyalty=1 -Fragmentize=1 -Frantic\ Purification=1 -Frantic\ Salvage=1 -Freejam\ Regent=1 -Freewind\ Equenaut=1 -Freewind\ Falcon=1 -Frenetic\ Ogre=1 -Frenetic\ Raptor=1 -Frenetic\ Sliver=1 -Frenzied\ Goblin=1 -Frenzied\ Rage=1 -Frenzied\ Raptor=1 -Frenzied\ Tilling=1 -Frenzy\ Sliver=1 -Fresh\ Meat=1 -Fresh\ Volunteers=1 -Fretwork\ Colony=1 -Freyalise's\ Winds=1 -Frightcrawler=1 -Frightful\ Delusion=1 -Frightshroud\ Courier=1 -Frilled\ Deathspitter=1 -Frilled\ Sandwalla=1 -Frilled\ Sea\ Serpent=1 -From\ Beyond=1 -From\ Under\ the\ Floorboards=1 -Frontier\ Bivouac=1 -Frontier\ Guide=1 -Frontline\ Devastator=1 -Frontline\ Medic=1 -Frontline\ Rebel=1 -Frontline\ Sage=1 -Frontline\ Strategist=1 -Frost\ Lynx=1 -Frost\ Marsh=1 -Frost\ Raptor=1 -Frostburn\ Weird=1 -Frostweb\ Spider=1 -Frozen\ Aether=1 -Frozen\ Solid=1 -Fuel\ for\ the\ Cause=1 -Fugitive\ Wizard=1 -Fugue=1 -Fulgent\ Distraction=1 -Full\ Moon's\ Rise=1 -Fumarole=1 -Fumiko\ the\ Lowblood=1 -Funeral\ Pyre=1 -Fungal\ Behemoth=1 -Fungal\ Infection=1 -Fungal\ Plots=1 -Fungal\ Reaches=1 -Fungal\ Shambler=1 -Fungus\ Sliver=1 -Furious\ Assault=1 -Furious\ Reprisal=1 -Furious\ Resistance=1 -Furnace\ Brood=1 -Furnace\ Celebration=1 -Furnace\ Dragon=1 -Furnace\ Scamp=1 -Furnace\ Spirit=1 -Furnace\ Whelp=1 -Furor\ of\ the\ Bitten=1 -Furtive\ Homunculus=1 -Fury\ Charm=1 -Furyblade\ Vampire=1 -Furystoke\ Giant=1 -Fusion\ Elemental=1 -Future\ Sight=1 -Fylamarid=1 -Fyndhorn\ Pollen=1 -Gaea's\ Anthem=1 -Gaea's\ Blessing=1 -Gaea's\ Bounty=1 -Gaea's\ Embrace=1 -Gaea's\ Herald=1 -Gaea's\ Liege=1 -Gaea's\ Protector=1 -Gaea's\ Revenge=1 -Gainsay=1 -Gale\ Force=1 -Galepowder\ Mage=1 -Galestrike=1 -Gallant\ Cavalry=1 -Gallantry=1 -Gallows\ Warden=1 -Gallows\ at\ Willow\ Hill=1 -Galvanic\ Bombardment=1 -Galvanic\ Juggernaut=1 -Galvanic\ Key=1 -Galvanoth=1 -Game-Trail\ Changeling=1 -Game\ Trail=1 -Gamekeeper=1 -Gang\ of\ Devils=1 -Gang\ of\ Elk=1 -Gangrenous\ Goliath=1 -Gangrenous\ Zombies=1 -Gargantuan\ Gorilla=1 -Gargoyle\ Castle=1 -Gargoyle\ Sentinel=1 -Garna,\ the\ Bloodflame=1 -Garruk's\ Companion=1 -Garruk's\ Horde=1 -Garruk's\ Packleader=1 -Garrulous\ Sycophant=1 -Garza\ Zol,\ Plague\ Queen=1 -Gaseous\ Form=1 -Gate\ Hound=1 -Gate\ Smasher=1 -Gatecreeper\ Vine=1 -Gatekeeper\ of\ Malakir=1 -Gateway\ Shade=1 -Gathan\ Raiders=1 -Gather\ Courage=1 -Gather\ Specimens=1 -Gather\ the\ Pack=1 -Gatherer\ of\ Graces=1 -Gatstaf\ Arsonists=1 -Gatstaf\ Shepherd=1 -Gauntlets\ of\ Chaos=1 -Gavony\ Ironwright=1 -Gavony\ Unhallowed=1 -Gaze\ of\ Adamaro=1 -Gaze\ of\ Justice=1 -Gearseeker\ Serpent=1 -Gearshift\ Ace=1 -Gearsmith\ Guardian=1 -Gearsmith\ Prodigy=1 -Geier\ Reach\ Bandit=1 -Geist-Fueled\ Scarecrow=1 -Geist-Honored\ Monk=1 -Geist\ of\ the\ Archives=1 -Geist\ of\ the\ Lonely\ Vigil=1 -Geistblast=1 -Geistflame=1 -Gelatinous\ Genesis=1 -Gelectrode=1 -Gelid\ Shackles=1 -Gem\ of\ Becoming=1 -Gemini\ Engine=1 -Gempalm\ Avenger=1 -Gemstone\ Array=1 -General's\ Kabuto=1 -General\ Tazri=1 -Genesis=1 -Genju\ of\ the\ Cedars=1 -Genju\ of\ the\ Falls=1 -Genju\ of\ the\ Fens=1 -Genju\ of\ the\ Fields=1 -Genju\ of\ the\ Realm=1 -Genju\ of\ the\ Spires=1 -Geosurge=1 -Geralf's\ Mindcrusher=1 -Gerrard's\ Battle\ Cry=1 -Gerrard's\ Command=1 -Gerrard's\ Irregulars=1 -Geth's\ Grimoire=1 -Geyserfield\ Stalker=1 -Ghastbark\ Twins=1 -Ghastly\ Remains=1 -Ghazbán\ Ogre=1 -Ghirapur\ Gearcrafter=1 -Ghirapur\ Guide=1 -Ghirapur\ Orrery=1 -Ghirapur\ Osprey=1 -Ghitu\ Chronicler=1 -Ghitu\ Fire-Eater=1 -Ghitu\ Fire=1 -Ghitu\ Firebreathing=1 -Ghitu\ Journeymage=1 -Ghitu\ Slinger=1 -Ghitu\ War\ Cry=1 -Ghor-Clan\ Bloodscale=1 -Ghor-Clan\ Rampager=1 -Ghost-Lit\ Raider=1 -Ghost-Lit\ Redeemer=1 -Ghost-Lit\ Stalker=1 -Ghost-Lit\ Warder=1 -Ghost\ Council\ of\ Orzhova=1 -Ghost\ Ship=1 -Ghost\ Tactician=1 -Ghost\ Warden=1 -Ghostblade\ Eidolon=1 -Ghostfire=1 -Ghostfire\ Blade=1 -Ghostflame\ Sliver=1 -Ghostform=1 -Ghostly\ Changeling=1 -Ghostly\ Possession=1 -Ghostly\ Sentinel=1 -Ghostly\ Touch=1 -Ghostly\ Visit=1 -Ghostly\ Wings=1 -Ghosts\ of\ the\ Damned=1 -Ghosts\ of\ the\ Innocent=1 -Ghoul's\ Feast=1 -Ghoulcaller's\ Accomplice=1 -Ghoulcaller's\ Bell=1 -Ghoulflesh=1 -Ghoulsteed=1 -Giant's\ Ire=1 -Giant\ Badger=1 -Giant\ Caterpillar=1 -Giant\ Cockroach=1 -Giant\ Crab=1 -Giant\ Growth=1 -Giant\ Harbinger=1 -Giant\ Mantis=1 -Giant\ Octopus=1 -Giant\ Oyster=1 -Giant\ Scorpion=1 -Giant\ Solifuge=1 -Giant\ Spectacle=1 -Giant\ Spider=1 -Giant\ Strength=1 -Giant\ Tortoise=1 -Giant\ Trap\ Door\ Spider=1 -Giantbaiting=1 -Gibbering\ Descent=1 -Gibbering\ Fiend=1 -Gibbering\ Hyenas=1 -Gideon's\ Avenger=1 -Gideon's\ Defeat=1 -Gideon's\ Intervention=1 -Gideon's\ Lawkeeper=1 -Gideon's\ Phalanx=1 -Gideon's\ Reproach=1 -Gift\ of\ Granite=1 -Gift\ of\ Growth=1 -Gift\ of\ Immortality=1 -Gift\ of\ Orzhova=1 -Gift\ of\ Strength=1 -Gift\ of\ Tusks=1 -Gift\ of\ the\ Deity=1 -Gift\ of\ the\ Gargantuan=1 -Gigapede=1 -Gild=1 -Gilded\ Cerodon=1 -Gilded\ Light=1 -Gilded\ Lotus=1 -Gilded\ Sentinel=1 -Gilt-Leaf\ Ambush=1 -Gilt-Leaf\ Seer=1 -Gilt-Leaf\ Winnower=1 -Giltgrove\ Stalker=1 -Giltspire\ Avenger=1 -Gisa's\ Bidding=1 -Give\ //\ Take=1 -Give\ No\ Ground=1 -Glacial\ Crevasses=1 -Glacial\ Plating=1 -Glacial\ Ray=1 -Glacial\ Stalker=1 -Glacial\ Wall=1 -Glade\ Gnarr=1 -Glade\ Watcher=1 -Gladehart\ Cavalry=1 -Glamer\ Spinners=1 -Glamerdye=1 -Glare\ of\ Heresy=1 -Glare\ of\ Subdual=1 -Glarecaster=1 -Glaring\ Aegis=1 -Glaring\ Spotlight=1 -Glass\ Asp=1 -Glass\ Golem=1 -Glassblower's\ Puzzleknot=1 -Glassdust\ Hulk=1 -Glaze\ Fiend=1 -Gleam\ of\ Authority=1 -Gleam\ of\ Battle=1 -Gleam\ of\ Resistance=1 -Gleaming\ Barrier=1 -Gleancrawler=1 -Glen\ Elendra\ Liege=1 -Glimmerdust\ Nap=1 -Glimmerpoint\ Stag=1 -Glimmerpost=1 -Glimpse\ the\ Future=1 -Glimpse\ the\ Sun\ God=1 -Glint-Eye\ Nephilim=1 -Glint-Sleeve\ Artisan=1 -Glint=1 -Glint\ Hawk\ Idol=1 -Glintwing\ Invoker=1 -Glissa's\ Scorn=1 -Glissa\ Sunseeker=1 -Glistening\ Oil=1 -Glitterfang=1 -Glittering\ Lion=1 -Gloom\ Surgeon=1 -Gloomhunter=1 -Gloomwidow's\ Feast=1 -Gloomwidow=1 -Glorifier\ of\ Dusk=1 -Glorious\ Anthem=1 -Glorious\ Charge=1 -Glory-Bound\ Initiate=1 -Glory\ Seeker=1 -Glory\ of\ Warfare=1 -Glowering\ Rogon=1 -Glowing\ Anemone=1 -Gluttonous\ Slime=1 -Gluttonous\ Zombie=1 -Glyph\ Keeper=1 -Gnarled\ Effigy=1 -Gnarled\ Mass=1 -Gnarled\ Scarhide=1 -Gnarlid\ Pack=1 -Gnarlroot\ Trapper=1 -Gnarlwood\ Dryad=1 -Gnathosaur=1 -Gnawing\ Zombie=1 -Goatnapper=1 -Gobbling\ Ooze=1 -Gobhobbler\ Rats=1 -Goblin\ Archaeologist=1 -Goblin\ Arsonist=1 -Goblin\ Artillery=1 -Goblin\ Assault=1 -Goblin\ Bangchuckers=1 -Goblin\ Barrage=1 -Goblin\ Battle\ Jester=1 -Goblin\ Boom\ Keg=1 -Goblin\ Brigand=1 -Goblin\ Bully=1 -Goblin\ Burrows=1 -Goblin\ Cadets=1 -Goblin\ Cannon=1 -Goblin\ Chariot=1 -Goblin\ Commando=1 -Goblin\ Deathraiders=1 -Goblin\ Digging\ Team=1 -Goblin\ Diplomats=1 -Goblin\ Elite\ Infantry=1 -Goblin\ Fire\ Fiend=1 -Goblin\ Firebug=1 -Goblin\ Fireslinger=1 -Goblin\ Firestarter=1 -Goblin\ Flectomancer=1 -Goblin\ Freerunner=1 -Goblin\ Furrier=1 -Goblin\ Gardener=1 -Goblin\ Gaveleer=1 -Goblin\ General=1 -Goblin\ Glider=1 -Goblin\ Glory\ Chaser=1 -Goblin\ Goon=1 -Goblin\ Grappler=1 -Goblin\ Grenadiers=1 -Goblin\ Kaboomist=1 -Goblin\ Legionnaire=1 -Goblin\ Machinist=1 -Goblin\ Medics=1 -Goblin\ Mountaineer=1 -Goblin\ Outlander=1 -Goblin\ Patrol=1 -Goblin\ Piker=1 -Goblin\ Pyromancer=1 -Goblin\ Raider=1 -Goblin\ Rally=1 -Goblin\ Razerunners=1 -Goblin\ Rimerunner=1 -Goblin\ Roughrider=1 -Goblin\ Settler=1 -Goblin\ Shortcutter=1 -Goblin\ Shrine=1 -Goblin\ Ski\ Patrol=1 -Goblin\ Sky\ Raider=1 -Goblin\ Snowman=1 -Goblin\ Spelunkers=1 -Goblin\ Striker=1 -Goblin\ Swine-Rider=1 -Goblin\ Taskmaster=1 -Goblin\ Test\ Pilot=1 -Goblin\ Trailblazer=1 -Goblin\ Trenches=1 -Goblin\ Turncoat=1 -Goblin\ War\ Buggy=1 -Goblin\ War\ Paint=1 -Goblin\ War\ Wagon=1 -Goblin\ Warchief=1 -Goblins\ of\ the\ Flarg=1 -Goblinslide=1 -God-Favored\ General=1 -God-Pharaoh's\ Faithful=1 -Godhead\ of\ Awe=1 -Godo's\ Irregulars=1 -Gods'\ Eye,\ Gate\ to\ the\ Reikai=1 -Gods\ Willing=1 -Godtoucher=1 -Goham\ Djinn=1 -Gold-Forged\ Sentinel=1 -Gold\ Myr=1 -Golden\ Demise=1 -Golden\ Hind=1 -Golden\ Urn=1 -Golden\ Wish=1 -Goldenglow\ Moth=1 -Goldenhide\ Ox=1 -Goldmeadow\ Dodger=1 -Goldmeadow\ Harrier=1 -Goldmeadow\ Stalwart=1 -Goldnight\ Commander=1 -Goldnight\ Redeemer=1 -Golem's\ Heart=1 -Golem-Skin\ Gauntlets=1 -Golem\ Foundry=1 -Golgari\ Cluestone=1 -Golgari\ Germination=1 -Golgari\ Guildgate=1 -Golgari\ Guildmage=1 -Golgari\ Keyrune=1 -Golgari\ Rotwurm=1 -Golgari\ Signet=1 -Goliath\ Beetle=1 -Goliath\ Sphinx=1 -Gomazoa=1 -Gone\ Missing=1 -Gonti's\ Aether\ Heart=1 -Gonti's\ Machinations=1 -Gore-House\ Chainwalker=1 -Gore\ Swine=1 -Gorehorn\ Minotaurs=1 -Goretusk\ Firebeast=1 -Gorgon's\ Head=1 -Gorgon\ Flail=1 -Gorgon\ Recluse=1 -Gorilla\ Titan=1 -Gorilla\ War\ Cry=1 -Gorilla\ Warrior=1 -Goring\ Ceratops=1 -Gossamer\ Chains=1 -Gossamer\ Phantasm=1 -Govern\ the\ Guildless=1 -Grab\ the\ Reins=1 -Graceful\ Adept=1 -Graceful\ Antelope=1 -Graceful\ Reprieve=1 -Graf\ Harvest=1 -Graf\ Mole=1 -Graf\ Rats=1 -Grafted\ Exoskeleton=1 -Grand\ Melee=1 -Grand\ Warlord\ Radha=1 -Grandmother\ Sengir=1 -Granite\ Gargoyle=1 -Granite\ Grip=1 -Granite\ Shard=1 -Granitic\ Titan=1 -Grapeshot\ Catapult=1 -Grapple\ with\ the\ Past=1 -Grappling\ Hook=1 -Grasp\ of\ Darkness=1 -Grasp\ of\ Phantoms=1 -Grasp\ of\ the\ Hieromancer=1 -Grasping\ Dunes=1 -Grasping\ Scoundrel=1 -Grasslands=1 -Grave-Shell\ Scarab=1 -Grave\ Betrayal=1 -Grave\ Birthing=1 -Grave\ Peril=1 -Grave\ Servitude=1 -Gravebane\ Zombie=1 -Gravebind=1 -Graveblade\ Marauder=1 -Gravedigger=1 -Gravel\ Slinger=1 -Gravelgill\ Axeshark=1 -Gravelgill\ Duo=1 -Graven\ Abomination=1 -Graven\ Dominator=1 -Gravepurge=1 -Graverobber\ Spider=1 -Gravity\ Negator=1 -Gravity\ Well=1 -Graxiplon=1 -Graypelt\ Hunter=1 -Grazing\ Gladehart=1 -Grazing\ Kelpie=1 -Grazing\ Whiptail=1 -Great-Horn\ Krushok=1 -Great\ Hart=1 -Great\ Teacher's\ Decree=1 -Greatbow\ Doyen=1 -Greater\ Basilisk=1 -Greater\ Forgeling=1 -Greater\ Harvester=1 -Greater\ Mossdog=1 -Greater\ Sandwurm=1 -Greatsword=1 -Greel's\ Caress=1 -Greenhilt\ Trainee=1 -Greenseeker=1 -Greenside\ Watcher=1 -Greenweaver\ Druid=1 -Greenwheel\ Liberator=1 -Gremlin\ Infestation=1 -Grenzo,\ Dungeon\ Warden=1 -Grid\ Monitor=1 -Gridlock=1 -Griffin\ Dreamfinder=1 -Griffin\ Guide=1 -Griffin\ Sentinel=1 -Grifter's\ Blade=1 -Grim\ Affliction=1 -Grim\ Captain's\ Call=1 -Grim\ Contest=1 -Grim\ Discovery=1 -Grim\ Flowering=1 -Grim\ Haruspex=1 -Grim\ Poppet=1 -Grim\ Reminder=1 -Grim\ Return=1 -Grim\ Roustabout=1 -Grim\ Strider=1 -Grimoire\ Thief=1 -Grind\ //\ Dust=1 -Grindclock=1 -Grinning\ Demon=1 -Grinning\ Ignus=1 -Grinning\ Totem=1 -Grip\ of\ Amnesia=1 -Grip\ of\ Desolation=1 -Grip\ of\ the\ Roil=1 -Griptide=1 -Grisly\ Spectacle=1 -Grisly\ Survivor=1 -Grisly\ Transformation=1 -Gristle\ Grinner=1 -Gristleback=1 -Grixis\ Battlemage=1 -Grixis\ Charm=1 -Grixis\ Grimblade=1 -Grixis\ Illusionist=1 -Grixis\ Slavedriver=1 -Grixis\ Sojourners=1 -Grizzled\ Angler=1 -Grizzled\ Leotau=1 -Grizzled\ Outcasts=1 -Grizzly\ Bears=1 -Grizzly\ Fate=1 -Groffskithur=1 -Grollub=1 -Grotag\ Thrasher=1 -Grotesque\ Mutation=1 -Ground\ Assault=1 -Ground\ Rift=1 -Groundling\ Pouncer=1 -Groundskeeper=1 -Grove\ Rumbler=1 -Grove\ of\ the\ Guardian=1 -Grovetender\ Druids=1 -Grow\ from\ the\ Ashes=1 -Growing\ Ranks=1 -Grozoth=1 -Gruesome\ Deformity=1 -Gruesome\ Encore=1 -Gruesome\ Fate=1 -Gruesome\ Slaughter=1 -Grunn,\ the\ Lonely\ King=1 -Gruul\ Charm=1 -Gruul\ Cluestone=1 -Gruul\ Guildgate=1 -Gruul\ Guildmage=1 -Gruul\ Keyrune=1 -Gruul\ Nodorog=1 -Gruul\ Ragebeast=1 -Gruul\ Scrapper=1 -Gruul\ War\ Chant=1 -Gruul\ War\ Plow=1 -Gryff's\ Boon=1 -Guan\ Yu's\ 1,000-Li\ March=1 -Guan\ Yu,\ Sainted\ Warrior=1 -Guard\ Dogs=1 -Guard\ Duty=1 -Guard\ Gomazoa=1 -Guardian\ Automaton=1 -Guardian\ Seraph=1 -Guardian\ Shield-Bearer=1 -Guardian\ Zendikon=1 -Guardian\ of\ Pilgrims=1 -Guardian\ of\ Solitude=1 -Guardian\ of\ Tazeem=1 -Guardian\ of\ the\ Ages=1 -Guardian\ of\ the\ Gateless=1 -Guardians\ of\ Akrasa=1 -Guardians\ of\ Koilos=1 -Guardians\ of\ Meletis=1 -Guerrilla\ Tactics=1 -Guild\ Feud=1 -Guildscorn\ Ward=1 -Guile=1 -Guilty\ Conscience=1 -Guma=1 -Gurmag\ Drowner=1 -Gurmag\ Swiftwing=1 -Gust-Skimmer=1 -Gust\ Walker=1 -Gustcloak\ Cavalier=1 -Gustcloak\ Runner=1 -Gustcloak\ Savior=1 -Gustcloak\ Sentinel=1 -Gustha's\ Scepter=1 -Gustrider\ Exuberant=1 -Gutter\ Grime=1 -Gutter\ Skulk=1 -Gutwrencher\ Oni=1 -Guul\ Draz\ Assassin=1 -Guul\ Draz\ Overseer=1 -Guul\ Draz\ Specter=1 -Gwafa\ Hazid,\ Profiteer=1 -Gwyllion\ Hedge-Mage=1 -Haazda\ Shield\ Mate=1 -Hada\ Spy\ Patrol=1 -Hag\ Hedge-Mage=1 -Hagra\ Crocodile=1 -Hagra\ Diabolist=1 -Hagra\ Sharpshooter=1 -Hail\ of\ Arrows=1 -Hair-Strung\ Koto=1 -Halam\ Djinn=1 -Halcyon\ Glaze=1 -Halimar\ Excavator=1 -Halimar\ Tidecaller=1 -Halimar\ Wavewatch=1 -Hallar,\ the\ Firefletcher=1 -Hallowed\ Moonlight=1 -Halo\ Hunter=1 -Hamlet\ Captain=1 -Hamletback\ Goliath=1 -Hammer\ of\ Bogardan=1 -Hammer\ of\ Purphoros=1 -Hammerfist\ Giant=1 -Hammerhand=1 -Hammerhead\ Shark=1 -Hammerheim=1 -Hammerheim\ Deadeye=1 -Hana\ Kami=1 -Hanabi\ Blast=1 -Hand\ of\ Cruelty=1 -Hand\ of\ Emrakul=1 -Hand\ of\ Justice=1 -Hand\ of\ Silumgar=1 -Hand\ of\ the\ Praetors=1 -Hand\ to\ Hand=1 -Hands\ of\ Binding=1 -Hanweir\ Battlements=1 -Hanweir\ Lancer=1 -Hanweir\ Militia\ Captain=1 -Hanweir\ Watchkeep=1 -Hapatra's\ Mark=1 -Hapatra,\ Vizier\ of\ Poisons=1 -Haphazard\ Bombardment=1 -Harbinger\ of\ the\ Hunt=1 -Harbor\ Bandit=1 -Harbor\ Guardian=1 -Harbor\ Serpent=1 -Hardened\ Berserker=1 -Hardy\ Veteran=1 -Harm's\ Way=1 -Harmattan\ Efreet=1 -Harmless\ Offering=1 -Harmonic\ Convergence=1 -Harness\ the\ Storm=1 -Harpoon\ Sniper=1 -Harrier\ Griffin=1 -Harrier\ Naga=1 -Harrow=1 -Harrowing\ Journey=1 -Harsh\ Deceiver=1 -Harsh\ Scrutiny=1 -Haru-Onna=1 -Harvest\ Gwyllion=1 -Harvest\ Hand=1 -Harvest\ Mage=1 -Harvest\ Season=1 -Harvester\ Troll=1 -Harvestguard\ Alseids=1 -Hasran\ Ogress=1 -Hatchet\ Bully=1 -Hate\ Weaver=1 -Hateflayer=1 -Haunted\ Angel=1 -Haunted\ Cadaver=1 -Haunted\ Cloak=1 -Haunted\ Dead=1 -Haunted\ Guardian=1 -Haunted\ Plate\ Mail=1 -Haunter\ of\ Nightveil=1 -Haunting\ Apparition=1 -Haunting\ Echoes=1 -Haunting\ Hymn=1 -Havengul\ Runebinder=1 -Havengul\ Skaab=1 -Havengul\ Vampire=1 -Havenwood\ Battleground=1 -Havenwood\ Wurm=1 -Havoc\ Demon=1 -Havoc\ Devils=1 -Havoc\ Festival=1 -Havoc\ Sower=1 -Hawkeater\ Moth=1 -Hazardous\ Conditions=1 -Haze\ Frog=1 -Haze\ of\ Pollen=1 -Hazerider\ Drake=1 -Hazezon\ Tamar=1 -Hazoret's\ Favor=1 -Hazoret's\ Monument=1 -Hazoret's\ Undying\ Fury=1 -Hazy\ Homunculus=1 -He\ Who\ Hungers=1 -Head\ Games=1 -Headless\ Skaab=1 -Headstrong\ Brute=1 -Headwater\ Sentries=1 -Heal=1 -Healer's\ Headdress=1 -Healer\ of\ the\ Pride=1 -Healing\ Grace=1 -Healing\ Hands=1 -Healing\ Leaves=1 -Healing\ Salve=1 -Heap\ Doll=1 -Heart-Piercer\ Bow=1 -Heart-Piercer\ Manticore=1 -Heart\ Warden=1 -Hearth\ Kami=1 -Hearthfire\ Hobgoblin=1 -Heartlash\ Cinder=1 -Heartless\ Pillage=1 -Heartmender=1 -Heartseeker=1 -Heartstabber\ Mosquito=1 -Heartwood\ Dryad=1 -Heartwood\ Giant=1 -Heartwood\ Shard=1 -Heartwood\ Treefolk=1 -Heat\ Ray=1 -Heat\ Shimmer=1 -Heat\ Wave=1 -Heat\ of\ Battle=1 -Heaven\ //\ Earth=1 -Heavy\ Arbalest=1 -Heavy\ Ballista=1 -Heavy\ Fog=1 -Heavy\ Infantry=1 -Heavy\ Mattock=1 -Hecatomb=1 -Heckling\ Fiends=1 -Hedonist's\ Trove=1 -Hedron-Field\ Purists=1 -Hedron\ Alignment=1 -Hedron\ Archive=1 -Hedron\ Blade=1 -Hedron\ Crawler=1 -Hedron\ Matrix=1 -Hedron\ Rover=1 -Hedron\ Scrabbler=1 -Heed\ the\ Mists=1 -Heidar,\ Rimewind\ Master=1 -Heir\ of\ Falkenrath=1 -Heir\ of\ the\ Wilds=1 -Heirs\ of\ Stromkirk=1 -Hekma\ Sentinels=1 -Heliod's\ Emissary=1 -Helium\ Squirter=1 -Hellcarver\ Demon=1 -Helldozer=1 -Hellhole\ Flailer=1 -Hellhole\ Rats=1 -Hellion\ Crucible=1 -Hellion\ Eruption=1 -Hellkite\ Charger=1 -Hellkite\ Hatchling=1 -Hellraiser\ Goblin=1 -Helm\ of\ the\ Ghastlord=1 -Helm\ of\ the\ Gods=1 -Helm\ of\ the\ Host=1 -Hematite\ Golem=1 -Henchfiend\ of\ Ukor=1 -Henge\ Guardian=1 -Herald\ of\ Anafenza=1 -Herald\ of\ Faith=1 -Herald\ of\ Kozilek=1 -Herald\ of\ Secret\ Streams=1 -Herald\ of\ Torment=1 -Herald\ of\ the\ Fair=1 -Herald\ of\ the\ Host=1 -Herald\ of\ the\ Pantheon=1 -Herbal\ Poultice=1 -Herdchaser\ Dragon=1 -Heretic's\ Punishment=1 -Hermetic\ Study=1 -Hermit\ Druid=1 -Hermit\ of\ the\ Natterknolls=1 -Hero's\ Demise=1 -Hero's\ Resolve=1 -Hero\ of\ Goma\ Fada=1 -Hero\ of\ Iroas=1 -Hero\ of\ Leina\ Tower=1 -Heroes'\ Bane=1 -Heroes'\ Podium=1 -Heroes'\ Reunion=1 -Heroes\ Remembered=1 -Heroic\ Defiance=1 -Heroic\ Reinforcements=1 -Heron's\ Grace\ Champion=1 -Hesitation=1 -Hewed\ Stone\ Retainers=1 -Hex=1 -Hibernation's\ End=1 -Hidden\ Ancients=1 -Hidden\ Gibbons=1 -Hidden\ Guerrillas=1 -Hidden\ Herbalists=1 -Hidden\ Horror=1 -Hidden\ Stockpile=1 -Hideous\ End=1 -Hideous\ Laughter=1 -Hideous\ Visage=1 -Hidetsugu's\ Second\ Rite=1 -Hieroglyphic\ Illumination=1 -Hieromancer's\ Cage=1 -Hierophant's\ Chalice=1 -High\ Ground=1 -High\ Priest\ of\ Penance=1 -High\ Sentinels\ of\ Arashin=1 -Highborn\ Ghoul=1 -Highland\ Berserker=1 -Highland\ Game=1 -Highland\ Lake=1 -Highland\ Weald=1 -Highspire\ Artisan=1 -Highspire\ Infusion=1 -Highspire\ Mantis=1 -Hightide\ Hermit=1 -Highway\ Robber=1 -Higure,\ the\ Still\ Wind=1 -Hijack=1 -Hikari,\ Twilight\ Guardian=1 -Hill\ Giant=1 -Hinder=1 -Hindering\ Light=1 -Hindering\ Touch=1 -Hindervines=1 -Hint\ of\ Insanity=1 -Hinterland\ Drake=1 -Hinterland\ Hermit=1 -Hinterland\ Logger=1 -Hired\ Blade=1 -Hired\ Giant=1 -Hired\ Muscle=1 -Hired\ Torturer=1 -Hisoka's\ Guard=1 -Hisoka,\ Minamo\ Sensei=1 -Hissing\ Iguanar=1 -Hissing\ Miasma=1 -Hit\ //\ Run=1 -Hitchclaw\ Recluse=1 -Hivestone=1 -Hivis\ of\ the\ Scale=1 -Hixus,\ Prison\ Warden=1 -Hoard-Smelter\ Dragon=1 -Hoarder's\ Greed=1 -Hoarding\ Dragon=1 -Hobgoblin\ Dragoon=1 -Hold\ at\ Bay=1 -Hold\ the\ Gates=1 -Hold\ the\ Line=1 -Holdout\ Settlement=1 -Holistic\ Wisdom=1 -Hollow\ Dogs=1 -Hollow\ Specter=1 -Hollowborn\ Barghest=1 -Hollowhenge\ Spirit=1 -Hollowsage=1 -Holy\ Mantle=1 -Holy\ Strength=1 -Homarid\ Explorer=1 -Homarid\ Spawning\ Bed=1 -Homing\ Lightning=1 -Honden\ of\ Cleansing\ Fire=1 -Honden\ of\ Infinite\ Rage=1 -Honden\ of\ Life's\ Web=1 -Honden\ of\ Night's\ Reach=1 -Honden\ of\ Seeing\ Winds=1 -Honed\ Khopesh=1 -Honor-Worn\ Shaku=1 -Honor\ Guard=1 -Honorable\ Passage=1 -Honored\ Crop-Captain=1 -Honored\ Hierarch=1 -Honored\ Hydra=1 -Hooded\ Brawler=1 -Hooded\ Horror=1 -Hooded\ Kavu=1 -Hoof\ Skulkin=1 -Hoofprints\ of\ the\ Stag=1 -Hope\ Against\ Hope=1 -Hope\ Charm=1 -Hope\ Tender=1 -Hope\ and\ Glory=1 -Hopeful\ Eidolon=1 -Hopping\ Automaton=1 -Horde\ of\ Boggarts=1 -Horde\ of\ Notions=1 -Hordeling\ Outburst=1 -Horizon\ Chimera=1 -Horizon\ Drake=1 -Horizon\ Scholar=1 -Horizon\ Seed=1 -Horizon\ Spellbomb=1 -Horncaller's\ Chant=1 -Horned\ Cheetah=1 -Horned\ Helm=1 -Horned\ Turtle=1 -Hornet\ Cannon=1 -Hornet\ Harasser=1 -Hornet\ Sting=1 -Hornswoggle=1 -Horobi's\ Whisper=1 -Horrible\ Hordes=1 -Horribly\ Awry=1 -Horrifying\ Revelation=1 -Horror\ of\ Horrors=1 -Horror\ of\ the\ Broken\ Lands=1 -Horseshoe\ Crab=1 -Hostile\ Minotaur=1 -Hostile\ Realm=1 -Hostility=1 -Hot\ Soup=1 -Hound\ of\ the\ Farbogs=1 -Hour\ of\ Eternity=1 -Hour\ of\ Need=1 -Hour\ of\ Revelation=1 -Hover\ Barrier=1 -Hoverguard\ Observer=1 -Hoverguard\ Sweepers=1 -Hovermyr=1 -Howl\ from\ Beyond=1 -Howl\ of\ the\ Night\ Pack=1 -Howlgeist=1 -Howling\ Gale=1 -Howling\ Golem=1 -Howlpack\ Resurgence=1 -Howlpack\ Wolf=1 -Howltooth\ Hollow=1 -Hubris=1 -Hulking\ Cyclops=1 -Hulking\ Devil=1 -Hum\ of\ the\ Radix=1 -Human\ Frailty=1 -Humble=1 -Humble\ Budoka=1 -Humble\ the\ Brute=1 -Humbler\ of\ Mortals=1 -Hundred-Handed\ One=1 -Hundred-Talon\ Strike=1 -Hundroog=1 -Hunger\ of\ the\ Nim=1 -Hungering\ Yeti=1 -Hungry\ Flames=1 -Hungry\ Mist=1 -Hungry\ Spriggan=1 -Hunt\ the\ Hunter=1 -Hunt\ the\ Weak=1 -Hunted\ Dragon=1 -Hunted\ Ghoul=1 -Hunted\ Lammasu=1 -Hunted\ Phantasm=1 -Hunted\ Troll=1 -Hunted\ Wumpus=1 -Hunter's\ Ambush=1 -Hunter's\ Insight=1 -Hunter's\ Prowess=1 -Hunter\ of\ Eyeblights=1 -Hunters'\ Feast=1 -Hunting\ Cheetah=1 -Hunting\ Drake=1 -Hunting\ Moa=1 -Hunting\ Pack=1 -Hunting\ Triad=1 -Hunting\ Wilds=1 -Hurloon\ Minotaur=1 -Hurloon\ Shaman=1 -Hurly-Burly=1 -Hurricane=1 -Hush=1 -Hussar\ Patrol=1 -Hydra\ Broodmaster=1 -Hydroform=1 -Hydrolash=1 -Hydromorph\ Guardian=1 -Hydromorph\ Gull=1 -Hydrosurge=1 -Hyena\ Pack=1 -Hymn\ of\ Rebirth=1 -Hypersonic\ Dragon=1 -Hypervolt\ Grasp=1 -Hypnotic\ Cloud=1 -Hypnotic\ Siren=1 -Hypnotic\ Specter=1 -Hypochondria=1 -Hysterical\ Blindness=1 -Hythonia\ the\ Cruel=1 -Ib\ Halfheart,\ Goblin\ Tactician=1 -Icatian\ Crier=1 -Icatian\ Lieutenant=1 -Icatian\ Priest=1 -Icatian\ Town=1 -Ice\ Cage=1 -Ice\ Cauldron=1 -Ice\ Floe=1 -Ice\ Over=1 -Iceberg=1 -Icefall=1 -Icefeather\ Aven=1 -Ichor\ Explosion=1 -Ichor\ Rats=1 -Ichor\ Slick=1 -Icy\ Blast=1 -Icy\ Manipulator=1 -Icy\ Prison=1 -Identity\ Crisis=1 -Identity\ Thief=1 -Idle\ Thoughts=1 -Ifh-Bíff\ Efreet=1 -Igneous\ Golem=1 -Igneous\ Pouncer=1 -Ignite\ Disorder=1 -Ignite\ Memories=1 -Ignoble\ Soldier=1 -Ignorant\ Bliss=1 -Iizuka\ the\ Ruthless=1 -Ikiral\ Outrider=1 -Illness\ in\ the\ Ranks=1 -Illuminate=1 -Illuminated\ Folio=1 -Illuminated\ Wings=1 -Illusion\ //\ Reality=1 -Illusionary\ Forces=1 -Illusionary\ Servant=1 -Illusionist's\ Bracers=1 -Illusory\ Ambusher=1 -Illusory\ Angel=1 -Illusory\ Demon=1 -Illusory\ Gains=1 -Illusory\ Wrappings=1 -Imagecrafter=1 -Imaginary\ Pet=1 -Imaginary\ Threats=1 -Imi\ Statue=1 -Immaculate\ Magistrate=1 -Imminent\ Doom=1 -Immobilizer\ Eldrazi=1 -Immobilizing\ Ink=1 -Immolating\ Glare=1 -Immolation=1 -Immortal\ Coil=1 -Immortal\ Servitude=1 -Imp's\ Mischief=1 -Impale=1 -Impatience=1 -Impeccable\ Timing=1 -Impelled\ Giant=1 -Imperial\ Aerosaur=1 -Imperial\ Ceratops=1 -Imperial\ Hellkite=1 -Imperial\ Lancer=1 -Imperiosaur=1 -Impetuous\ Devils=1 -Impetuous\ Sunchaser=1 -Implement\ of\ Combustion=1 -Implement\ of\ Examination=1 -Implement\ of\ Ferocity=1 -Implement\ of\ Improvement=1 -Implement\ of\ Malice=1 -Imprisoned\ in\ the\ Moon=1 -Impromptu\ Raid=1 -Improvised\ Armor=1 -In\ Bolas's\ Clutches=1 -In\ Oketra's\ Name=1 -In\ the\ Web\ of\ War=1 -Inaction\ Injunction=1 -Iname,\ Death\ Aspect=1 -Iname,\ Life\ Aspect=1 -Incandescent\ Soulstoke=1 -Incendiary\ Command=1 -Incendiary\ Sabotage=1 -Incite=1 -Incite\ Hysteria=1 -Incite\ War=1 -Incorrigible\ Youths=1 -Incremental\ Blight=1 -Incremental\ Growth=1 -Incubator\ Drone=1 -Incurable\ Ogre=1 -Incursion\ Specialist=1 -Indebted\ Samurai=1 -Indentured\ Oaf=1 -Indestructibility=1 -Index=1 -Indigo\ Faerie=1 -Indomitable\ Ancients=1 -Indomitable\ Archangel=1 -Indrik\ Stomphowler=1 -Induce\ Despair=1 -Induce\ Paranoia=1 -Induced\ Amnesia=1 -Indulgent\ Aristocrat=1 -Indulgent\ Tormentor=1 -Inertia\ Bubble=1 -Inexorable\ Blob=1 -Inexorable\ Tide=1 -Infantry\ Veteran=1 -Infected\ Vermin=1 -Infectious\ Horror=1 -Infectious\ Host=1 -Infectious\ Rage=1 -Infernal\ Harvest=1 -Infernal\ Kirin=1 -Infernal\ Scarring=1 -Inferno=1 -Inferno\ Elemental=1 -Inferno\ Fist=1 -Inferno\ Jet=1 -Inferno\ Trap=1 -Infest=1 -Infested\ Roothold=1 -Infiltration\ Lens=1 -Infiltrator's\ Magemark=1 -Infiltrator\ il-Kor=1 -Infinite\ Obliteration=1 -Infinite\ Reflection=1 -Infuse=1 -Infuse\ with\ the\ Elements=1 -Infused\ Arrows=1 -Ingenious\ Skaab=1 -Inheritance=1 -Initiate's\ Companion=1 -Initiate\ of\ Blood=1 -Ink-Treader\ Nephilim=1 -Ink\ Dissolver=1 -Inkfathom\ Divers=1 -Inkfathom\ Witch=1 -Inner-Chamber\ Guard=1 -Inner-Flame\ Acolyte=1 -Inner-Flame\ Igniter=1 -Inner\ Struggle=1 -Innocence\ Kami=1 -Inquisitor's\ Flail=1 -Inquisitor's\ Ox=1 -Insatiable\ Gorgers=1 -Insatiable\ Harpy=1 -Insidious\ Will=1 -Insight=1 -Insolence=1 -Inspiration=1 -Inspired\ Charge=1 -Inspired\ Sprite=1 -Inspiring\ Captain=1 -Inspiring\ Cleric=1 -Inspirit=1 -Instigator\ Gang=1 -Instill\ Furor=1 -Instill\ Infection=1 -Insult\ //\ Injury=1 -Intervene=1 -Intet,\ the\ Dreamer=1 -Intimidation=1 -Intimidation\ Bolt=1 -Intimidator\ Initiate=1 -Into\ Thin\ Air=1 -Into\ the\ Core=1 -Into\ the\ Fray=1 -Into\ the\ Maw\ of\ Hell=1 -Into\ the\ Void=1 -Intrepid\ Hero=1 -Intrepid\ Provisioner=1 -Inundate=1 -Invader\ Parasite=1 -Invasive\ Species=1 -Invasive\ Surgery=1 -Inventor's\ Apprentice=1 -Inventor's\ Goggles=1 -Invert\ the\ Skies=1 -Inverter\ of\ Truth=1 -Invigorate=1 -Invigorated\ Rampage=1 -Invigorating\ Boon=1 -Invigorating\ Falls=1 -Invincible\ Hymn=1 -Invisibility=1 -Invoke\ the\ Divine=1 -Invoke\ the\ Firemind=1 -Invulnerability=1 -Ion\ Storm=1 -Iona's\ Blessing=1 -Ior\ Ruin\ Expedition=1 -Ire\ Shaman=1 -Ire\ of\ Kaminari=1 -Iridescent\ Drake=1 -Iroas's\ Champion=1 -Iron-Barb\ Hellion=1 -Iron-Heart\ Chimera=1 -Iron\ Lance=1 -Iron\ League\ Steed=1 -Iron\ Myr=1 -Iron\ Star=1 -Iron\ Tusk\ Elephant=1 -Iron\ Will=1 -Ironclad\ Revolutionary=1 -Ironclad\ Slayer=1 -Ironclaw\ Buzzardiers=1 -Ironfist\ Crusher=1 -Ironhoof\ Ox=1 -Irontread\ Crusher=1 -Ironwright's\ Cleansing=1 -Irradiate=1 -Irresistible\ Prey=1 -Isao,\ Enlightened\ Bushi=1 -Ishi-Ishi,\ Akki\ Crackshot=1 -Island=1 -Isleback\ Spawn=1 -Isolation\ Cell=1 -Isolation\ Zone=1 -Isperia's\ Skywatch=1 -Isperia\ the\ Inscrutable=1 -It\ of\ the\ Horrid\ Swarm=1 -Ith,\ High\ Arcanist=1 -Ivory\ Crane\ Netsuke=1 -Ivory\ Cup=1 -Ivory\ Gargoyle=1 -Ivory\ Giant=1 -Ivory\ Guardians=1 -Ivory\ Tower=1 -Ivorytusk\ Fortress=1 -Ivy\ Dancer=1 -Ivy\ Elemental=1 -Ivy\ Lane\ Denizen=1 -Ivy\ Seer=1 -Iwamori\ of\ the\ Open\ Fist=1 -Ixalli's\ Diviner=1 -Ixalli's\ Keeper=1 -Ixidor's\ Will=1 -Ixidron=1 -Izzet\ Chemister=1 -Izzet\ Chronarch=1 -Izzet\ Cluestone=1 -Izzet\ Guildgate=1 -Izzet\ Guildmage=1 -Izzet\ Keyrune=1 -Jabari's\ Banner=1 -Jace's\ Ingenuity=1 -Jace's\ Mindseeker=1 -Jace's\ Sanctum=1 -Jace's\ Scrutiny=1 -Jackal\ Pup=1 -Jackalope\ Herd=1 -Jaddi\ Lifestrider=1 -Jaddi\ Offshoot=1 -Jade\ Bearer=1 -Jade\ Guardian=1 -Jade\ Idol=1 -Jade\ Mage=1 -Jade\ Monolith=1 -Jade\ Statue=1 -Jadecraft\ Artisan=1 -Jagged-Scar\ Archers=1 -Jagged\ Lightning=1 -Jagged\ Poppet=1 -Jagwasp\ Swarm=1 -Jalira,\ Master\ Polymorphist=1 -Jalum\ Tome=1 -Jamuraan\ Lion=1 -Janjeet\ Sentry=1 -Jar\ of\ Eyeballs=1 -Jarad's\ Orders=1 -Jareth,\ Leonine\ Titan=1 -Jasmine\ Seer=1 -Jawbone\ Skulkin=1 -Jaya's\ Immolating\ Inferno=1 -Jaya\ Ballard,\ Task\ Mage=1 -Jayemdae\ Tome=1 -Jedit\ Ojanen=1 -Jedit\ Ojanen\ of\ Efrava=1 -Jeering\ Instigator=1 -Jelenn\ Sphinx=1 -Jerrard\ of\ the\ Closed\ Fist=1 -Jeskai\ Ascendancy=1 -Jeskai\ Banner=1 -Jeskai\ Charm=1 -Jeskai\ Elder=1 -Jeskai\ Infiltrator=1 -Jeskai\ Student=1 -Jeskai\ Windscout=1 -Jester's\ Scepter=1 -Jeweled\ Torque=1 -Jhessian\ Balmgiver=1 -Jhessian\ Infiltrator=1 -Jhessian\ Lookout=1 -Jhessian\ Thief=1 -Jhessian\ Zombies=1 -Jhoira's\ Familiar=1 -Jhoira's\ Timebug=1 -Jhoira's\ Toolbox=1 -Jilt=1 -Jinxed\ Choker=1 -Jinxed\ Idol=1 -Jinxed\ Ring=1 -Jiwari,\ the\ Earth\ Aflame=1 -Jodah's\ Avenger=1 -Jodah,\ Archmage\ Eternal=1 -Johtull\ Wurm=1 -Join\ the\ Ranks=1 -Joiner\ Adept=1 -Jokulmorder=1 -Jolrael,\ Empress\ of\ Beasts=1 -Jolt=1 -Jolting\ Merfolk=1 -Joraga\ Auxiliary=1 -Joraga\ Bard=1 -Joraga\ Invocation=1 -Jori\ En,\ Ruin\ Diver=1 -Jorubai\ Murk\ Lurker=1 -Journey\ of\ Discovery=1 -Jousting\ Lance=1 -Joven's\ Ferrets=1 -Joyous\ Respite=1 -Judge\ Unworthy=1 -Judge\ of\ Currents=1 -Jugan,\ the\ Rising\ Star=1 -Juggernaut=1 -Juju\ Bubble=1 -Jukai\ Messenger=1 -Jund\ Battlemage=1 -Jund\ Charm=1 -Jund\ Sojourners=1 -Jungle\ Barrier=1 -Jungle\ Creeper=1 -Jungle\ Delver=1 -Jungle\ Shrine=1 -Jungle\ Weaver=1 -Jungle\ Wurm=1 -Jungleborn\ Pioneer=1 -Juniper\ Order\ Advocate=1 -Junk\ Golem=1 -Junktroller=1 -Junkyo\ Bell=1 -Jushi\ Apprentice=1 -Just\ Fate=1 -Just\ the\ Wind=1 -Juvenile\ Gloomwidow=1 -Juxtapose=1 -Jwar\ Isle\ Avenger=1 -Jwari\ Scuttler=1 -Jwari\ Shapeshifter=1 -Jötun\ Grunt=1 -Jötun\ Owl\ Keeper=1 -Kabira\ Vindicator=1 -Kaboom!=1 -Kabuto\ Moth=1 -Kaervek's\ Hex=1 -Kaervek's\ Torch=1 -Kaervek\ the\ Merciless=1 -Kagemaro's\ Clutch=1 -Kagemaro,\ First\ to\ Suffer=1 -Kaho,\ Minamo\ Historian=1 -Kaijin\ of\ the\ Vanishing\ Touch=1 -Kalastria\ Healer=1 -Kalastria\ Nightwatch=1 -Kaleidostone=1 -Kalonian\ Behemoth=1 -Kalonian\ Twingrove=1 -Kamahl's\ Desire=1 -Kamahl's\ Druidic\ Vow=1 -Kamahl's\ Sledge=1 -Kamahl,\ Pit\ Fighter=1 -Kami\ of\ Ancient\ Law=1 -Kami\ of\ Fire's\ Roar=1 -Kami\ of\ Lunacy=1 -Kami\ of\ Twisted\ Reflection=1 -Kami\ of\ the\ Honored\ Dead=1 -Kami\ of\ the\ Painted\ Road=1 -Kami\ of\ the\ Tended\ Garden=1 -Karametra's\ Acolyte=1 -Karametra's\ Favor=1 -Karn's\ Temporal\ Sundering=1 -Karplusan\ Giant=1 -Karplusan\ Strider=1 -Karplusan\ Wolverine=1 -Karplusan\ Yeti=1 -Karstoderm=1 -Kashi-Tribe\ Elite=1 -Kashi-Tribe\ Reaver=1 -Kashi-Tribe\ Warriors=1 -Katabatic\ Winds=1 -Kathari\ Bomber=1 -Kathari\ Remnant=1 -Kathari\ Screecher=1 -Kavu\ Aggressor=1 -Kavu\ Chameleon=1 -Kavu\ Climber=1 -Kavu\ Glider=1 -Kavu\ Howler=1 -Kavu\ Mauler=1 -Kavu\ Predator=1 -Kavu\ Primarch=1 -Kavu\ Recluse=1 -Kavu\ Runner=1 -Kazandu\ Refuge=1 -Kazandu\ Tuskcaller=1 -Kazarov,\ Sengir\ Pureblood=1 -Kazuul's\ Toll\ Collector=1 -Kazuul,\ Tyrant\ of\ the\ Cliffs=1 -Kazuul\ Warlord=1 -Kederekt\ Creeper=1 -Kederekt\ Leviathan=1 -Keeneye\ Aven=1 -Keening\ Apparition=1 -Keening\ Banshee=1 -Keening\ Stone=1 -Keeper\ of\ Kookus=1 -Keeper\ of\ Progenitus=1 -Keeper\ of\ the\ Beasts=1 -Keeper\ of\ the\ Dead=1 -Keeper\ of\ the\ Flame=1 -Keeper\ of\ the\ Lens=1 -Keeper\ of\ the\ Light=1 -Keeper\ of\ the\ Mind=1 -Keepsake\ Gorgon=1 -Kefnet's\ Monument=1 -Keiga,\ the\ Tide\ Star=1 -Keldon\ Berserker=1 -Keldon\ Champion=1 -Keldon\ Halberdier=1 -Keldon\ Mantle=1 -Keldon\ Megaliths=1 -Keldon\ Necropolis=1 -Keldon\ Overseer=1 -Keldon\ Raider=1 -Keldon\ Twilight=1 -Keldon\ Warcaller=1 -Keldon\ Warlord=1 -Kelinore\ Bat=1 -Kemba's\ Legion=1 -Kemba's\ Skyguard=1 -Kemuri-Onna=1 -Kentaro,\ the\ Smiling\ Cat=1 -Kessig\ Cagebreakers=1 -Kessig\ Dire\ Swine=1 -Kessig\ Forgemaster=1 -Kessig\ Prowler=1 -Kessig\ Recluse=1 -Key\ to\ the\ City=1 -Keymaster\ Rogue=1 -Kezzerdrix=1 -Khalni\ Gem=1 -Khenra\ Charioteer=1 -Khenra\ Eternal=1 -Khenra\ Scrapper=1 -Kheru\ Bloodsucker=1 -Kheru\ Dreadmaw=1 -Kheru\ Lich\ Lord=1 -Kheru\ Spellsnatcher=1 -Kiku's\ Shadow=1 -Kiku,\ Night's\ Flower=1 -Kill-Suit\ Cultist=1 -Kill\ Shot=1 -Killer\ Bees=1 -Killer\ Instinct=1 -Killer\ Whale=1 -Killing\ Glare=1 -Kiln\ Walker=1 -Kin-Tree\ Invocation=1 -Kin-Tree\ Warden=1 -Kindle=1 -Kindle\ the\ Carnage=1 -Kindled\ Fury=1 -Kindly\ Stranger=1 -King\ Cheetah=1 -King\ Crab=1 -King\ Macar,\ the\ Gold-Cursed=1 -Kingfisher=1 -Kingpin's\ Pet=1 -Kinjalli's\ Caller=1 -Kinsbaile\ Balloonist=1 -Kinsbaile\ Skirmisher=1 -Kinscaer\ Harpoonist=1 -Kiora's\ Dismissal=1 -Kiora's\ Follower=1 -Kird\ Chieftain=1 -Kiri-Onna=1 -Kiss\ of\ the\ Amesha=1 -Kite\ Shield=1 -Kitesail=1 -Kitesail\ Apprentice=1 -Kitesail\ Corsair=1 -Kitesail\ Scout=1 -Kithkin\ Armor=1 -Kithkin\ Daggerdare=1 -Kithkin\ Greatheart=1 -Kithkin\ Harbinger=1 -Kithkin\ Healer=1 -Kithkin\ Mourncaller=1 -Kithkin\ Spellduster=1 -Kithkin\ Zealot=1 -Kithkin\ Zephyrnaut=1 -Kitsune\ Bonesetter=1 -Kitsune\ Dawnblade=1 -Kitsune\ Diviner=1 -Kitsune\ Healer=1 -Kitsune\ Palliator=1 -Kitsune\ Riftwalker=1 -Kiyomaro,\ First\ to\ Stand=1 -Kjeldoran\ Elite\ Guard=1 -Kjeldoran\ Frostbeast=1 -Kjeldoran\ Gargoyle=1 -Kjeldoran\ Home\ Guard=1 -Kjeldoran\ Javelineer=1 -Kjeldoran\ Outpost=1 -Kjeldoran\ Outrider=1 -Kjeldoran\ Royal\ Guard=1 -Kjeldoran\ Skycaptain=1 -Kjeldoran\ War\ Cry=1 -Knacksaw\ Clique=1 -Knight's\ Pledge=1 -Knight-Captain\ of\ Eos=1 -Knight\ Errant=1 -Knight\ Watch=1 -Knight\ of\ Cliffhaven=1 -Knight\ of\ Dusk=1 -Knight\ of\ Glory=1 -Knight\ of\ Infamy=1 -Knight\ of\ New\ Benalia=1 -Knight\ of\ Obligation=1 -Knight\ of\ Stromgald=1 -Knight\ of\ Sursi=1 -Knight\ of\ Valor=1 -Knight\ of\ the\ Holy\ Nimbus=1 -Knight\ of\ the\ Mists=1 -Knight\ of\ the\ Pilgrim's\ Road=1 -Knight\ of\ the\ Skyward\ Eye=1 -Knight\ of\ the\ Stampede=1 -Knight\ of\ the\ Tusk=1 -Knighthood=1 -Knightly\ Valor=1 -Knollspine\ Dragon=1 -Knotvine\ Mystic=1 -Knotvine\ Paladin=1 -Knowledge\ Exploitation=1 -Knowledge\ Pool=1 -Knowledge\ and\ Power=1 -Knucklebone\ Witch=1 -Kobold\ Drill\ Sergeant=1 -Kobold\ Taskmaster=1 -Kodama's\ Might=1 -Kodama\ of\ the\ Center\ Tree=1 -Kodama\ of\ the\ North\ Tree=1 -Kodama\ of\ the\ South\ Tree=1 -Kolaghan\ Aspirant=1 -Kolaghan\ Forerunners=1 -Kolaghan\ Monument=1 -Kolaghan\ Stormsinger=1 -Konda's\ Banner=1 -Konda's\ Hatamoto=1 -Konda,\ Lord\ of\ Eiganjo=1 -Kongming,\ "Sleeping\ Dragon"=1 -Kookus=1 -Kor\ Bladewhirl=1 -Kor\ Cartographer=1 -Kor\ Castigator=1 -Kor\ Chant=1 -Kor\ Duelist=1 -Kor\ Entanglers=1 -Kor\ Hookmaster=1 -Kor\ Outfitter=1 -Kor\ Scythemaster=1 -Kor\ Sky\ Climber=1 -Korozda\ Gorgon=1 -Korozda\ Guildmage=1 -Korozda\ Monitor=1 -Kothophed,\ Soul\ Hoarder=1 -Kozilek's\ Channeler=1 -Kozilek's\ Pathfinder=1 -Kozilek's\ Predator=1 -Kozilek's\ Sentinel=1 -Kozilek's\ Shrieker=1 -Kozilek's\ Translator=1 -Kragma\ Butcher=1 -Kragma\ Warcaller=1 -Kraken's\ Eye=1 -Kraken\ Hatchling=1 -Kraken\ of\ the\ Straits=1 -Krakilin=1 -Kranioceros=1 -Krasis\ Incubation=1 -Kraul\ Warrior=1 -Krenko's\ Enforcer=1 -Krosan\ Avenger=1 -Krosan\ Cloudscraper=1 -Krosan\ Colossus=1 -Krosan\ Drover=1 -Krosan\ Druid=1 -Krosan\ Groundshaker=1 -Krosan\ Reclamation=1 -Krosan\ Tusker=1 -Krosan\ Vorine=1 -Krosan\ Warchief=1 -Krosan\ Wayfarer=1 -Krovikan\ Fetish=1 -Krovikan\ Horror=1 -Krovikan\ Rot=1 -Krovikan\ Scoundrel=1 -Krovikan\ Vampire=1 -Kruin\ Outlaw=1 -Kruin\ Striker=1 -Kudzu=1 -Kujar\ Seedsculptor=1 -Kukemssa\ Serpent=1 -Kuldotha\ Flamefiend=1 -Kuldotha\ Phoenix=1 -Kulrath\ Knight=1 -Kumano's\ Blessing=1 -Kumano's\ Pupils=1 -Kumano,\ Master\ Yamabushi=1 -Kumena's\ Awakening=1 -Kumena's\ Speaker=1 -Kuon,\ Ogre\ Ascendant=1 -Kurgadon=1 -Kurkesh,\ Onakke\ Ancient=1 -Kuro's\ Taken=1 -Kuro,\ Pitlord=1 -Kusari-Gama=1 -Kwende,\ Pride\ of\ Femeref=1 -Kyoki,\ Sanity's\ Eclipse=1 -Kyren\ Legate=1 -Kyren\ Sniper=1 -Kytheon's\ Irregulars=1 -Kytheon's\ Tactics=1 -Lab\ Rats=1 -Laboratory\ Brute=1 -Labyrinth\ Champion=1 -Labyrinth\ Guardian=1 -Labyrinth\ Minotaur=1 -Laccolith\ Grunt=1 -Laccolith\ Rig=1 -Laccolith\ Warrior=1 -Lady\ Orca=1 -Lagac\ Lizard=1 -Lagonna-Band\ Elder=1 -Lambholt\ Elder=1 -Lambholt\ Pacifist=1 -Lammastide\ Weave=1 -Lamplighter\ of\ Selhoff=1 -Landbind\ Ritual=1 -Landslide=1 -Lantern-Lit\ Graveyard=1 -Lantern\ Kami=1 -Lantern\ Scout=1 -Lantern\ Spirit=1 -Lapse\ of\ Certainty=1 -Laquatus's\ Champion=1 -Laquatus's\ Disdain=1 -Larceny=1 -Larger\ Than\ Life=1 -Lash\ Out=1 -Lashknife=1 -Lashknife\ Barrier=1 -Lashweed\ Lurker=1 -Last-Ditch\ Effort=1 -Last\ Breath=1 -Last\ Caress=1 -Last\ Gasp=1 -Last\ Kiss=1 -Last\ Laugh=1 -Last\ Stand=1 -Last\ Thoughts=1 -Last\ Word=1 -Lat-Nam's\ Legacy=1 -Latch\ Seeker=1 -Latchkey\ Faerie=1 -Lathnu\ Hellion=1 -Lathnu\ Sailback=1 -Launch=1 -Lava\ Axe=1 -Lava\ Burst=1 -Lava\ Dart=1 -Lava\ Flow=1 -Lava\ Hounds=1 -Lava\ Runner=1 -Lavaball\ Trap=1 -Lavaborn\ Muse=1 -Lavafume\ Invoker=1 -Lavalanche=1 -Lavastep\ Raider=1 -Lavinia\ of\ the\ Tenth=1 -Lawless\ Broker=1 -Lay\ Bare\ the\ Heart=1 -Lay\ Claim=1 -Lay\ Waste=1 -Lay\ of\ the\ Land=1 -Lead-Belly\ Chimera=1 -Lead\ Astray=1 -Lead\ Golem=1 -Lead\ by\ Example=1 -Leaden\ Fists=1 -Leaden\ Myr=1 -Leaf\ Dancer=1 -Leaf\ Gilder=1 -Leafcrown\ Dryad=1 -Leafdrake\ Roost=1 -Leaping\ Lizard=1 -Leaping\ Master=1 -Learn\ from\ the\ Past=1 -Leashling=1 -Leave\ //\ Chance=1 -Leave\ in\ the\ Dust=1 -Leech\ Bonder=1 -Leeches=1 -Leeching\ Licid=1 -Leering\ Emblem=1 -Leering\ Gargoyle=1 -Leery\ Fogbeast=1 -Legacy's\ Allure=1 -Legacy\ Weapon=1 -Legerdemain=1 -Legion's\ Judgment=1 -Legion\ Conquistador=1 -Legion\ Lieutenant=1 -Lens\ of\ Clarity=1 -Leonin\ Abunas=1 -Leonin\ Armorguard=1 -Leonin\ Battlemage=1 -Leonin\ Bola=1 -Leonin\ Den-Guard=1 -Leonin\ Elder=1 -Leonin\ Iconoclast=1 -Leonin\ Scimitar=1 -Leonin\ Skyhunter=1 -Leonin\ Snarecaster=1 -Leonin\ Squire=1 -Leonin\ Sun\ Standard=1 -Leshrac's\ Rite=1 -Lesser\ Gargadon=1 -Lesser\ Werewolf=1 -Lethal\ Sting=1 -Lethargy\ Trap=1 -Leveler=1 -Leviathan=1 -Levitation=1 -Ley\ Druid=1 -Ley\ Line=1 -Leyline\ Phantom=1 -Leyline\ of\ Lightning=1 -Leyline\ of\ Vitality=1 -Lhurgoyf=1 -Liar's\ Pendulum=1 -Liberate=1 -Liberated\ Dwarf=1 -Lich's\ Caress=1 -Lich's\ Mastery=1 -Lich's\ Tomb=1 -Liege\ of\ the\ Pit=1 -Life's\ Finale=1 -Life\ Goes\ On=1 -Life\ and\ Limb=1 -Lifecraft\ Awakening=1 -Lifecraft\ Cavalry=1 -Lifecrafter's\ Gift=1 -Lifegift=1 -Lifespark\ Spellbomb=1 -Lifespinner=1 -Lifespring\ Druid=1 -Light\ of\ Sanction=1 -Lightbringer=1 -Lightkeeper\ of\ Emeria=1 -Lightning-Rig\ Crew=1 -Lightning\ Blast=1 -Lightning\ Blow=1 -Lightning\ Cloud=1 -Lightning\ Elemental=1 -Lightning\ Hounds=1 -Lightning\ Javelin=1 -Lightning\ Reaver=1 -Lightning\ Reflexes=1 -Lightning\ Rift=1 -Lightning\ Runner=1 -Lightning\ Talons=1 -Lightning\ Volley=1 -Lightwielder\ Paladin=1 -Liliana's\ Defeat=1 -Liliana's\ Elite=1 -Liliana's\ Indignation=1 -Liliana's\ Shade=1 -Liliana's\ Specter=1 -Lilting\ Refrain=1 -Lim-Dûl's\ Cohort=1 -Lim-Dûl's\ High\ Guard=1 -Lim-Dûl\ the\ Necromancer=1 -Limestone\ Golem=1 -Limits\ of\ Solidarity=1 -Linessa,\ Zephyr\ Mage=1 -Lingering\ Mirage=1 -Lingering\ Phantom=1 -Lingering\ Tormentor=1 -Linvala,\ the\ Preserver=1 -Lionheart\ Maverick=1 -Liquid\ Fire=1 -Liquimetal\ Coating=1 -Lithatog=1 -Lithomancer's\ Focus=1 -Lithophage=1 -Liturgy\ of\ Blood=1 -Liu\ Bei,\ Lord\ of\ Shu=1 -Live\ Fast=1 -Livewire\ Lash=1 -Living\ Airship=1 -Living\ Death=1 -Living\ Destiny=1 -Living\ Hive=1 -Living\ Inferno=1 -Living\ Lands=1 -Living\ Terrain=1 -Living\ Totem=1 -Living\ Tsunami=1 -Llanowar\ Behemoth=1 -Llanowar\ Cavalry=1 -Llanowar\ Dead=1 -Llanowar\ Empath=1 -Llanowar\ Envoy=1 -Llanowar\ Mentor=1 -Llanowar\ Scout=1 -Llanowar\ Sentinel=1 -Llanowar\ Vanguard=1 -Loafing\ Giant=1 -Loam\ Dryad=1 -Loam\ Dweller=1 -Loam\ Lion=1 -Loamdragger\ Giant=1 -Loathsome\ Catoblepas=1 -Lobber\ Crew=1 -Locket\ of\ Yesterdays=1 -Lockjaw\ Snapper=1 -Locust\ Swarm=1 -Lodestone\ Myr=1 -Lone\ Missionary=1 -Lone\ Revenant=1 -Lone\ Rider=1 -Lone\ Wolf=1 -Long-Finned\ Skywhale=1 -Long-Forgotten\ Gohei=1 -Long\ Road\ Home=1 -Longbow\ Archer=1 -Longshot\ Squad=1 -Longtusk\ Cub=1 -Lookout's\ Dispersal=1 -Looming\ Altisaur=1 -Looming\ Hoverguard=1 -Looming\ Shade=1 -Looming\ Spires=1 -Lord\ of\ Shatterskull\ Pass=1 -Lord\ of\ the\ Pit=1 -Lore\ Broker=1 -Lorescale\ Coatl=1 -Lorthos,\ the\ Tidemaker=1 -Lose\ Calm=1 -Lose\ Hope=1 -Lost\ Auramancers=1 -Lost\ Leonin=1 -Lost\ Order\ of\ Jarkeld=1 -Lost\ in\ Thought=1 -Lost\ in\ a\ Labyrinth=1 -Lost\ in\ the\ Mist=1 -Lost\ in\ the\ Woods=1 -Lotus\ Path\ Djinn=1 -Lowland\ Basilisk=1 -Lowland\ Giant=1 -Loxodon\ Gatekeeper=1 -Loxodon\ Hierarch=1 -Loxodon\ Line\ Breaker=1 -Loxodon\ Mystic=1 -Loxodon\ Partisan=1 -Loxodon\ Peacekeeper=1 -Loxodon\ Punisher=1 -Loyal\ Cathar=1 -Loyal\ Gyrfalcon=1 -Loyal\ Pegasus=1 -Lu\ Bu,\ Master-at-Arms=1 -Lu\ Meng,\ Wu\ General=1 -Lucent\ Liminid=1 -Ludevic's\ Test\ Subject=1 -Lullmage\ Mentor=1 -Lumbering\ Satyr=1 -Lumberknot=1 -Lumengrid\ Augur=1 -Lumengrid\ Gargoyle=1 -Lumengrid\ Sentinel=1 -Lumengrid\ Warden=1 -Luminate\ Primordial=1 -Luminous\ Angel=1 -Luminous\ Bonds=1 -Luminous\ Wake=1 -Lunar\ Avenger=1 -Lunar\ Force=1 -Lunar\ Mystic=1 -Lunarch\ Mantle=1 -Lunk\ Errant=1 -Lupine\ Prototype=1 -Lurching\ Rotbeast=1 -Lure=1 -Lurebound\ Scarecrow=1 -Lurking\ Arynx=1 -Lurking\ Chupacabra=1 -Lurking\ Informant=1 -Lurking\ Skirge=1 -Lush\ Growth=1 -Lust\ for\ War=1 -Luxa\ River\ Shrine=1 -Lyev\ Decree=1 -Lyev\ Skyknight=1 -Lymph\ Sliver=1 -Lys\ Alana\ Bowmaster=1 -Lys\ Alana\ Scarblade=1 -Macabre\ Waltz=1 -Macetail\ Hystrodon=1 -Machinate=1 -Mad\ Auntie=1 -Mad\ Prophet=1 -Madblind\ Mountain=1 -Madcap\ Skills=1 -Madrush\ Cyclops=1 -Maelstrom\ Djinn=1 -Maga,\ Traitor\ to\ Mortals=1 -Mage-Ring\ Bully=1 -Mage-Ring\ Network=1 -Mage-Ring\ Responder=1 -Mage\ Slayer=1 -Magebane\ Armor=1 -Magefire\ Wings=1 -Magewright's\ Stone=1 -Maggot\ Carrier=1 -Maggot\ Therapy=1 -Magister\ Sphinx=1 -Magister\ of\ Worth=1 -Magistrate's\ Veto=1 -Magma\ Burst=1 -Magma\ Giant=1 -Magma\ Mine=1 -Magma\ Phoenix=1 -Magma\ Rift=1 -Magmaquake=1 -Magmaroth=1 -Magmasaur=1 -Magmatic\ Chasm=1 -Magmatic\ Core=1 -Magmatic\ Insight=1 -Magmaw=1 -Magnetic\ Theft=1 -Magnifying\ Glass=1 -Magnivore=1 -Magosi,\ the\ Waterveil=1 -Magus\ of\ the\ Abyss=1 -Magus\ of\ the\ Candelabra=1 -Magus\ of\ the\ Coffers=1 -Magus\ of\ the\ Disk=1 -Magus\ of\ the\ Future=1 -Magus\ of\ the\ Jar=1 -Magus\ of\ the\ Library=1 -Magus\ of\ the\ Mirror=1 -Magus\ of\ the\ Scroll=1 -Magus\ of\ the\ Tabernacle=1 -Magus\ of\ the\ Vineyard=1 -Mahamoti\ Djinn=1 -Majestic\ Heliopterus=1 -Major\ Teroh=1 -Make\ Mischief=1 -Make\ Obsolete=1 -Make\ a\ Stand=1 -Make\ a\ Wish=1 -Makeshift\ Mannequin=1 -Makeshift\ Mauler=1 -Makeshift\ Munitions=1 -Makindi\ Aeronaut=1 -Makindi\ Griffin=1 -Makindi\ Patrol=1 -Makindi\ Shieldmate=1 -Makindi\ Sliderunner=1 -Malach\ of\ the\ Dawn=1 -Malachite\ Golem=1 -Malakir\ Bloodwitch=1 -Malakir\ Cullblade=1 -Malakir\ Familiar=1 -Malakir\ Soothsayer=1 -Malevolent\ Awakening=1 -Malevolent\ Whispers=1 -Malfunction=1 -Malicious\ Advice=1 -Mammoth\ Spider=1 -Mammoth\ Umbra=1 -Man-o'-War=1 -Mana\ Bloom=1 -Mana\ Clash=1 -Mana\ Cylix=1 -Mana\ Leech=1 -Mana\ Seism=1 -Mana\ Skimmer=1 -Manabarbs=1 -Manacles\ of\ Decay=1 -Manaforce\ Mace=1 -Manaforge\ Cinder=1 -Managorger\ Hydra=1 -Manakin=1 -Manalith=1 -Manaplasm=1 -Mangara's\ Blessing=1 -Mangara\ of\ Corondor=1 -Manglehorn=1 -Maniacal\ Rage=1 -Manic\ Scribe=1 -Manic\ Vandal=1 -Mannichi,\ the\ Fevered\ Dream=1 -Manor\ Gargoyle=1 -Manor\ Skeleton=1 -Manta\ Ray=1 -Manta\ Riders=1 -Manticore\ Eternal=1 -Manticore\ of\ the\ Gauntlet=1 -Mantis\ Engine=1 -Mantle\ of\ Leadership=1 -Mantle\ of\ Webs=1 -Map\ the\ Wastes=1 -Marang\ River\ Skeleton=1 -Marauder's\ Axe=1 -Marauding\ Boneslasher=1 -Marauding\ Looter=1 -Marauding\ Maulhorn=1 -Marble\ Chalice=1 -Marble\ Titan=1 -March\ of\ the\ Drowned=1 -March\ of\ the\ Machines=1 -March\ of\ the\ Returned=1 -Mardu\ Ascendancy=1 -Mardu\ Banner=1 -Mardu\ Blazebringer=1 -Mardu\ Charm=1 -Mardu\ Hateblade=1 -Mardu\ Heart-Piercer=1 -Mardu\ Hordechief=1 -Mardu\ Roughrider=1 -Mardu\ Runemark=1 -Mardu\ Skullhunter=1 -Mardu\ Warshrieker=1 -Marionette\ Master=1 -Marisi's\ Twinclaws=1 -Maritime\ Guard=1 -Mark\ for\ Death=1 -Mark\ of\ Eviction=1 -Mark\ of\ Sakiko=1 -Mark\ of\ the\ Oni=1 -Mark\ of\ the\ Vampire=1 -Marked\ by\ Honor=1 -Marker\ Beetles=1 -Markov\ Blademaster=1 -Markov\ Crusader=1 -Markov\ Dreadknight=1 -Markov\ Patrician=1 -Markov\ Warlord=1 -Maro=1 -Marrow\ Bats=1 -Marrow\ Chomper=1 -Marrow\ Shards=1 -Marsh\ Casualties=1 -Marsh\ Flitter=1 -Marsh\ Hulk=1 -Marsh\ Lurker=1 -Marshal's\ Anthem=1 -Marshaling\ Cry=1 -Marshdrinker\ Giant=1 -Marshmist\ Titan=1 -Martial\ Glory=1 -Martial\ Law=1 -Martyr's\ Cause=1 -Martyr's\ Cry=1 -Martyr\ of\ Bones=1 -Martyr\ of\ Dusk=1 -Martyr\ of\ Frost=1 -Martyred\ Rusalka=1 -Martyrs'\ Tomb=1 -Martyrs\ of\ Korlis=1 -Marwyn,\ the\ Nurturer=1 -Masako\ the\ Humorless=1 -Mask\ of\ Avacyn=1 -Mask\ of\ Intolerance=1 -Mask\ of\ Riddles=1 -Mask\ of\ the\ Mimic=1 -Masked\ Admirers=1 -Mass\ Appeal=1 -Mass\ Calcify=1 -Mass\ Polymorph=1 -Mass\ of\ Ghouls=1 -Master's\ Call=1 -Master\ Decoy=1 -Master\ Splicer=1 -Master\ Thief=1 -Master\ Trinketeer=1 -Master\ Warcraft=1 -Master\ of\ Arms=1 -Master\ of\ Diversion=1 -Master\ of\ Pearls=1 -Master\ of\ Predicaments=1 -Master\ the\ Way=1 -Masticore=1 -Masumaro,\ First\ to\ Live=1 -Matca\ Rioters=1 -Matsu-Tribe\ Birdstalker=1 -Matsu-Tribe\ Decoy=1 -Matsu-Tribe\ Sniper=1 -Maul\ Splicer=1 -Maulfist\ Doorbuster=1 -Maulfist\ Revolutionary=1 -Maulfist\ Squad=1 -Mausoleum\ Guard=1 -Mausoleum\ Harpy=1 -Mausoleum\ Turnkey=1 -Maverick\ Thopterist=1 -Mavren\ Fein,\ Dusk\ Apostle=1 -Maw\ of\ Kozilek=1 -Maw\ of\ the\ Mire=1 -Maw\ of\ the\ Obzedat=1 -Mawcor=1 -Mayor\ of\ Avabruck=1 -Maze\ Abomination=1 -Maze\ Behemoth=1 -Maze\ Glider=1 -Maze\ Rusher=1 -Maze\ Sentinel=1 -Maze\ of\ Shadows=1 -Meadowboon=1 -Meandering\ River=1 -Meandering\ Towershell=1 -Measure\ of\ Wickedness=1 -Meddle=1 -Medicine\ Runner=1 -Meditation\ Puzzle=1 -Megatherium=1 -Megatog=1 -Meglonoth=1 -Megrim=1 -Melancholy=1 -Melek,\ Izzet\ Paragon=1 -Melesse\ Spirit=1 -Meletis\ Astronomer=1 -Meletis\ Charlatan=1 -Melira's\ Keepers=1 -Meloku\ the\ Clouded\ Mirror=1 -Melt\ Terrain=1 -Memorial\ to\ Folly=1 -Memorial\ to\ Glory=1 -Memorial\ to\ Unity=1 -Memory's\ Journey=1 -Memory\ Erosion=1 -Menacing\ Ogre=1 -Mending\ Hands=1 -Mending\ Touch=1 -Meng\ Huo's\ Horde=1 -Mental\ Discipline=1 -Mental\ Vapors=1 -Mephidross\ Vampire=1 -Mephitic\ Ooze=1 -Mer-Ek\ Nightblade=1 -Mercadian\ Bazaar=1 -Merchant's\ Dockhand=1 -Merciless\ Eternal=1 -Merciless\ Javelineer=1 -Merciless\ Resolve=1 -Mercurial\ Chemister=1 -Mercurial\ Kite=1 -Mercurial\ Pretender=1 -Merfolk\ Assassin=1 -Merfolk\ Looter=1 -Merfolk\ Mesmerist=1 -Merfolk\ Mistbinder=1 -Merfolk\ Observer=1 -Merfolk\ Seastalkers=1 -Merfolk\ Seer=1 -Merfolk\ Skyscout=1 -Merfolk\ Sovereign=1 -Merfolk\ Spy=1 -Merfolk\ Thaumaturgist=1 -Merfolk\ Traders=1 -Merfolk\ Wayfinder=1 -Merfolk\ of\ the\ Depths=1 -Merfolk\ of\ the\ Pearl\ Trident=1 -Merieke\ Ri\ Berit=1 -Merrow\ Bonegnawer=1 -Merrow\ Commerce=1 -Merrow\ Grimeblotter=1 -Merrow\ Harbinger=1 -Merrow\ Levitator=1 -Merrow\ Witsniper=1 -Mesa\ Enchantress=1 -Mesa\ Unicorn=1 -Mesmeric\ Sliver=1 -Mesmeric\ Trance=1 -Messenger's\ Speed=1 -Messenger\ Drake=1 -Messenger\ Falcons=1 -Metal\ Fatigue=1 -Metallic\ Mastery=1 -Metallurgeon=1 -Metalspinner's\ Puzzleknot=1 -Metamorphic\ Wurm=1 -Metathran\ Aerostat=1 -Metathran\ Soldier=1 -Metathran\ Transport=1 -Metathran\ Zombie=1 -Meteor\ Shower=1 -Meteorite=1 -Metrognome=1 -Metropolis\ Sprite=1 -Miasmic\ Mummy=1 -Midnight\ Banshee=1 -Midnight\ Charm=1 -Midnight\ Covenant=1 -Midnight\ Entourage=1 -Midnight\ Guard=1 -Midnight\ Haunting=1 -Midnight\ Oil=1 -Midnight\ Ritual=1 -Midnight\ Scavengers=1 -Might\ Beyond\ Reason=1 -Might\ Makes\ Right=1 -Might\ Sliver=1 -Might\ Weaver=1 -Might\ of\ Alara=1 -Might\ of\ Oaks=1 -Might\ of\ the\ Masses=1 -Might\ of\ the\ Nephilim=1 -Mightstone=1 -Mighty\ Emergence=1 -Mighty\ Leap=1 -Militant\ Inquisitor=1 -Militant\ Monk=1 -Militia's\ Pride=1 -Millennial\ Gargoyle=1 -Millikin=1 -Millstone=1 -Mimeofacture=1 -Mimic\ Vat=1 -Miming\ Slime=1 -Mina\ and\ Denn,\ Wildborn=1 -Minamo\ Scrollkeeper=1 -Minamo\ Sightbender=1 -Mind\ Bend=1 -Mind\ Burst=1 -Mind\ Control=1 -Mind\ Extraction=1 -Mind\ Grind=1 -Mind\ Peel=1 -Mind\ Raker=1 -Mind\ Rot=1 -Mind\ Shatter=1 -Mind\ Sludge=1 -Mind\ Spring=1 -Mindclaw\ Shaman=1 -Mindlash\ Sliver=1 -Mindleech\ Mass=1 -Mindless\ Automaton=1 -Mindless\ Null=1 -Mindlock\ Orb=1 -Mindmelter=1 -Mindreaver=1 -Mindshrieker=1 -Mindstab=1 -Mindstab\ Thrull=1 -Mindstatic=1 -Mindswipe=1 -Mindwarper=1 -Mindwrack\ Liege=1 -Mine\ Bearer=1 -Mine\ Excavation=1 -Minion\ Reflector=1 -Minion\ of\ the\ Wastes=1 -Minions'\ Murmurs=1 -Minister\ of\ Impediments=1 -Minotaur\ Abomination=1 -Minotaur\ Aggressor=1 -Minotaur\ Explorer=1 -Minotaur\ Illusionist=1 -Minotaur\ Skullcleaver=1 -Minotaur\ Sureshot=1 -Minotaur\ Tactician=1 -Miraculous\ Recovery=1 -Mirage\ Mirror=1 -Mirari=1 -Mire's\ Malice=1 -Mire's\ Toll=1 -Mire\ Boa=1 -Mire\ Kavu=1 -Mire\ Shade=1 -Mirozel=1 -Mirran\ Mettle=1 -Mirran\ Spy=1 -Mirri,\ Cat\ Warrior=1 -Mirri\ the\ Cursed=1 -Mirror-Mad\ Phantasm=1 -Mirror\ Sheen=1 -Mirror\ Strike=1 -Mirror\ Wall=1 -Mirror\ of\ Fate=1 -Mirrorweave=1 -Mirrorwood\ Treefolk=1 -Mirrorworks=1 -Mischievous\ Poltergeist=1 -Misery\ Charm=1 -Misfortune's\ Gain=1 -Misguided\ Rage=1 -Mishra's\ Groundbreaker=1 -Mishra's\ Self-Replicator=1 -Mishra,\ Artificer\ Prodigy=1 -Misinformation=1 -Misstep=1 -Mist-Cloaked\ Herald=1 -Mist\ Intruder=1 -Mist\ Leopard=1 -Mist\ Raven=1 -Mistcutter\ Hydra=1 -Mistfire\ Weaver=1 -Mistform\ Dreamer=1 -Mistform\ Mask=1 -Mistform\ Mutant=1 -Mistform\ Shrieker=1 -Mistform\ Skyreaver=1 -Mistform\ Sliver=1 -Mistform\ Stalker=1 -Mistform\ Ultimus=1 -Mistform\ Wakecaster=1 -Mistform\ Wall=1 -Mistform\ Warchief=1 -Misthoof\ Kirin=1 -Mistmeadow\ Skulk=1 -Mistmeadow\ Witch=1 -Mistmoon\ Griffin=1 -Mistral\ Charger=1 -Mitotic\ Manipulation=1 -Mitotic\ Slime=1 -Mizzium\ Meddler=1 -Mizzium\ Mortars=1 -Mizzium\ Skin=1 -Mizzium\ Transreliquat=1 -Mnemonic\ Nexus=1 -Moan\ of\ the\ Unhallowed=1 -Moaning\ Wall=1 -Mobile\ Fort=1 -Mobile\ Garrison=1 -Mockery\ of\ Nature=1 -Mogg\ Bombers=1 -Mogg\ Flunkies=1 -Mogg\ Hollows=1 -Mogg\ Salvage=1 -Mogg\ Sentry=1 -Mogg\ Squad=1 -Mogis's\ Marauder=1 -Mogis's\ Warhound=1 -Mold\ Adder=1 -Molder=1 -Molder\ Beast=1 -Molder\ Slug=1 -Moldervine\ Cloak=1 -Moldgraf\ Monstrosity=1 -Moldgraf\ Scavenger=1 -Molimo,\ Maro-Sorcerer=1 -Molten\ Disaster=1 -Molten\ Firebird=1 -Molten\ Hydra=1 -Molten\ Influence=1 -Molten\ Nursery=1 -Molten\ Primordial=1 -Molten\ Psyche=1 -Molten\ Ravager=1 -Molten\ Sentry=1 -Molten\ Slagheap=1 -Molten\ Vortex=1 -Moltensteel\ Dragon=1 -Molting\ Harpy=1 -Molting\ Skin=1 -Molting\ Snakeskin=1 -Moment\ of\ Craving=1 -Moment\ of\ Heroism=1 -Moment\ of\ Triumph=1 -Momentary\ Blink=1 -Momentous\ Fall=1 -Momir\ Vig,\ Simic\ Visionary=1 -Monastery\ Flock=1 -Monastery\ Loremaster=1 -Mondronen\ Shaman=1 -Monk\ Idealist=1 -Monk\ Realist=1 -Monomania=1 -Monstrify=1 -Monstrous\ Growth=1 -Monstrous\ Hound=1 -Monstrous\ Onslaught=1 -Moonbow\ Illusionist=1 -Moonglove\ Changeling=1 -Moonglove\ Winnower=1 -Moonhold=1 -Moonlace=1 -Moonlight\ Bargain=1 -Moonlight\ Hunt=1 -Moonlit\ Strider=1 -Moonmist=1 -Moonring\ Island=1 -Moonring\ Mirror=1 -Moonsilver\ Spear=1 -Moonwing\ Moth=1 -Moorish\ Cavalry=1 -Moorland\ Drifter=1 -Morality\ Shift=1 -Moratorium\ Stone=1 -Morbid\ Bloom=1 -Morbid\ Curiosity=1 -Mordant\ Dragon=1 -Morgue\ Burst=1 -Morgue\ Thrull=1 -Morgue\ Toad=1 -Morinfen=1 -Moriok\ Reaver=1 -Moriok\ Replica=1 -Moriok\ Rigger=1 -Moriok\ Scavenger=1 -Morkrut\ Banshee=1 -Morkrut\ Necropod=1 -Morningtide=1 -Moroii=1 -Morphling=1 -Morsel\ Theft=1 -Morselhoarder=1 -Mortal's\ Ardor=1 -Mortal's\ Resolve=1 -Mortal\ Combat=1 -Mortal\ Obstinacy=1 -Mortal\ Wound=1 -Mortarpod=1 -Mortician\ Beetle=1 -Mortipede=1 -Mortiphobia=1 -Mortivore=1 -Mortuary=1 -Mortuary\ Mire=1 -Mortus\ Strider=1 -Mosquito\ Guard=1 -Moss\ Diamond=1 -Moss\ Kami=1 -Moss\ Monster=1 -Mossbridge\ Troll=1 -Mossfire\ Egg=1 -Mothdust\ Changeling=1 -Mothrider\ Samurai=1 -Mountain=1 -Mountain\ Valley=1 -Mountain\ Yeti=1 -Mourner's\ Shield=1 -Mournful\ Zombie=1 -Mourning=1 -Mournwhelk=1 -Mournwillow=1 -Mouth\ //\ Feed=1 -Mtenda\ Griffin=1 -Muck\ Drubb=1 -Mudbutton\ Clanger=1 -Mudbutton\ Torchrunner=1 -Mugging=1 -Mul\ Daya\ Channelers=1 -Mulch=1 -Multani's\ Acolyte=1 -Multani's\ Harmony=1 -Multani's\ Presence=1 -Mummy\ Paramount=1 -Munda's\ Vanguard=1 -Munda,\ Ambush\ Leader=1 -Mundungu=1 -Murasa\ Pyromancer=1 -Murasa\ Ranger=1 -Murder=1 -Murder\ Investigation=1 -Murder\ of\ Crows=1 -Murderer's\ Axe=1 -Murderous\ Betrayal=1 -Murderous\ Compulsion=1 -Murderous\ Cut=1 -Murderous\ Redcap=1 -Murderous\ Spoils=1 -Murk\ Strider=1 -Murmuring\ Phantasm=1 -Murmurs\ from\ Beyond=1 -Muscle\ Burst=1 -Muse\ Vessel=1 -Musician=1 -Mutant's\ Prey=1 -Mutiny=1 -Muzzle=1 -Mwonvuli\ Beast\ Tracker=1 -Mwonvuli\ Ooze=1 -Mycoid\ Shepherd=1 -Mycologist=1 -Mycosynth\ Fiend=1 -Mycosynth\ Wellspring=1 -Myojin\ of\ Infinite\ Rage=1 -Myr\ Adapter=1 -Myr\ Galvanizer=1 -Myr\ Incubator=1 -Myr\ Moonvessel=1 -Myr\ Propagator=1 -Myr\ Prototype=1 -Myr\ Reservoir=1 -Myr\ Sire=1 -Myr\ Turbine=1 -Myr\ Welder=1 -Myrsmith=1 -Mysteries\ of\ the\ Deep=1 -Mystic\ Decree=1 -Mystic\ Genesis=1 -Mystic\ Meditation=1 -Mystic\ Melting=1 -Mystic\ Monastery=1 -Mystic\ Penitent=1 -Mystic\ Restraints=1 -Mystic\ Snake=1 -Mystic\ Speculation=1 -Mystic\ Veil=1 -Mystic\ Zealot=1 -Mystic\ of\ the\ Hidden\ Way=1 -Mystifying\ Maze=1 -Mythic\ Proportions=1 -Nacatl\ Hunt-Pride=1 -Nacatl\ Outlander=1 -Nacatl\ Savage=1 -Nacatl\ War-Pride=1 -Naga\ Oracle=1 -Naga\ Vitalist=1 -Nagao,\ Bound\ by\ Honor=1 -Nagging\ Thoughts=1 -Nahiri's\ Machinations=1 -Nakaya\ Shade=1 -Naked\ Singularity=1 -Nalathni\ Dragon=1 -Nameless\ One=1 -Nantuko\ Blightcutter=1 -Nantuko\ Disciple=1 -Nantuko\ Elder=1 -Nantuko\ Husk=1 -Nantuko\ Mentor=1 -Nantuko\ Monastery=1 -Nantuko\ Shade=1 -Nantuko\ Shaman=1 -Nantuko\ Tracer=1 -Nantuko\ Vigilante=1 -Narcissism=1 -Narcolepsy=1 -Narnam\ Cobra=1 -Narnam\ Renegade=1 -Narrow\ Escape=1 -Narwhal=1 -Nath's\ Buffoon=1 -Nath's\ Elite=1 -Natural\ Affinity=1 -Natural\ Connection=1 -Natural\ Emergence=1 -Natural\ Obsolescence=1 -Natural\ Spring=1 -Naturalize=1 -Nature's\ Blessing=1 -Nature's\ Kiss=1 -Nature's\ Panoply=1 -Nature's\ Resurgence=1 -Nature's\ Spiral=1 -Nature's\ Way=1 -Nature's\ Will=1 -Navigator's\ Compass=1 -Navigator's\ Ruin=1 -Naya\ Battlemage=1 -Naya\ Panorama=1 -Near-Death\ Experience=1 -Nearheath\ Chaplain=1 -Nearheath\ Stalker=1 -Nebelgast\ Herald=1 -Nebuchadnezzar=1 -Neck\ Snap=1 -Necra\ Disciple=1 -Necra\ Sanctuary=1 -Necravolver=1 -Necrobite=1 -Necrogen\ Scudder=1 -Necrogen\ Spellbomb=1 -Necrogenesis=1 -Necrologia=1 -Necromancer's\ Assistant=1 -Necromancer's\ Covenant=1 -Necromantic\ Summons=1 -Necromantic\ Thirst=1 -Necromaster\ Dragon=1 -Necroplasm=1 -Necropolis\ Fiend=1 -Necropouncer=1 -Necrosavant=1 -Necrotic\ Plague=1 -Nectar\ Faerie=1 -Needle\ Storm=1 -Needlebite\ Trap=1 -Needlebug=1 -Needlepeak\ Spider=1 -Needleshot\ Gourna=1 -Needletooth\ Raptor=1 -Nef-Crop\ Entangler=1 -Nefarox,\ Overlord\ of\ Grixis=1 -Neglected\ Heirloom=1 -Neheb,\ the\ Worthy=1 -Neko-Te=1 -Nekrataal=1 -Nema\ Siltlurker=1 -Nemesis\ Mask=1 -Nemesis\ Trap=1 -Nemesis\ of\ Mortals=1 -Nephalia\ Academy=1 -Nephalia\ Moondrakes=1 -Nephalia\ Seakite=1 -Nephalia\ Smuggler=1 -Nessian\ Asp=1 -Nessian\ Courser=1 -Nessian\ Demolok=1 -Nessian\ Game\ Warden=1 -Nessian\ Wilds\ Ravager=1 -Nest\ Invader=1 -Nest\ Robber=1 -Nest\ of\ Scarabs=1 -Nested\ Ghoul=1 -Nesting\ Wurm=1 -Netcaster\ Spider=1 -Nether\ Horror=1 -Netherborn\ Phalanx=1 -Netter\ en-Dal=1 -Nettle\ Drone=1 -Nettlevine\ Blight=1 -Nettling\ Curse=1 -Neurok\ Commando=1 -Neurok\ Familiar=1 -Neurok\ Hoversail=1 -Neurok\ Invisimancer=1 -Neurok\ Prodigy=1 -Neurok\ Stealthsuit=1 -Neurok\ Transmuter=1 -Neutralizing\ Blast=1 -Nevermaker=1 -New\ Benalia=1 -New\ Horizons=1 -New\ Perspectives=1 -New\ Prahv\ Guildmage=1 -Nezumi\ Bone-Reader=1 -Nezumi\ Cutthroat=1 -Nezumi\ Graverobber=1 -Nezumi\ Ronin=1 -Nezumi\ Shadow-Watcher=1 -Niblis\ of\ Dusk=1 -Niblis\ of\ Frost=1 -Niblis\ of\ the\ Urn=1 -Nicol\ Bolas=1 -Night\ Dealings=1 -Night\ Market\ Aeronaut=1 -Night\ Market\ Guard=1 -Night\ Market\ Lookout=1 -Night\ Terrors=1 -Nightbird's\ Clutches=1 -Nightcreep=1 -Nightfire\ Giant=1 -Nightguard\ Patrol=1 -Nighthaze=1 -Nighthowler=1 -Nightmare=1 -Nightmare\ Incursion=1 -Nightmare\ Lash=1 -Nightmare\ Void=1 -Nightmarish\ End=1 -Nightscape\ Apprentice=1 -Nightscape\ Battlemage=1 -Nightscape\ Familiar=1 -Nightshade\ Assassin=1 -Nightshade\ Peddler=1 -Nightshade\ Schemers=1 -Nightshade\ Seer=1 -Nightshade\ Stinger=1 -Nightsnare=1 -Nightwing\ Shade=1 -Nihilistic\ Glee=1 -Nihilith=1 -Nikko-Onna=1 -Nim\ Abomination=1 -Nim\ Devourer=1 -Nim\ Grotesque=1 -Nim\ Lasher=1 -Nim\ Replica=1 -Nim\ Shambler=1 -Nim\ Shrieker=1 -Nimana\ Sell-Sword=1 -Nimble-Blade\ Khenra=1 -Nimble\ Innovator=1 -Nimbus\ Naiad=1 -Nimbus\ Swimmer=1 -Nimbus\ Wings=1 -Ninth\ Bridge\ Patrol=1 -Nirkana\ Assassin=1 -Nirkana\ Cutthroat=1 -Nissa's\ Chosen=1 -Nissa's\ Defeat=1 -Nissa's\ Expedition=1 -Nissa's\ Judgment=1 -Nissa's\ Pilgrimage=1 -Nissa's\ Renewal=1 -Nissa's\ Revelation=1 -Niv-Mizzet,\ Dracogenius=1 -Niv-Mizzet,\ the\ Firemind=1 -Niveous\ Wisps=1 -Nivix,\ Aerie\ of\ the\ Firemind=1 -Nivix\ Barrier=1 -Nivix\ Guildmage=1 -Nivmagus\ Elemental=1 -No-Dachi=1 -No\ Rest\ for\ the\ Wicked=1 -Nobilis\ of\ War=1 -Noble\ Elephant=1 -Noble\ Quarry=1 -Noble\ Stand=1 -Noble\ Templar=1 -Noble\ Vestige=1 -Nocturnal\ Raid=1 -Noggin\ Whack=1 -Noggle\ Bandit=1 -Noggle\ Hedge-Mage=1 -Nomad\ Decoy=1 -Nomad\ Mythmaker=1 -Nomad\ Outpost=1 -Nomad\ Stadium=1 -Nomads'\ Assembly=1 -Noose\ Constrictor=1 -Noosegraf\ Mob=1 -Norwood\ Priestess=1 -Norwood\ Ranger=1 -Nostalgic\ Dreams=1 -Not\ Forgotten=1 -Not\ of\ This\ World=1 -Nourish=1 -Nova\ Pentacle=1 -Novijen,\ Heart\ of\ Progress=1 -Novijen\ Sages=1 -Noxious\ Hatchling=1 -Noxious\ Vapors=1 -Nucklavee=1 -Nuisance\ Engine=1 -Null\ Caller=1 -Null\ Champion=1 -Null\ Profusion=1 -Nullify=1 -Nullmage\ Advocate=1 -Nullmage\ Shepherd=1 -Nullstone\ Gargoyle=1 -Nulltread\ Gargantuan=1 -Numbing\ Dose=1 -Numot,\ the\ Devastator=1 -Nurturing\ Licid=1 -Nylea's\ Disciple=1 -Nylea's\ Emissary=1 -Nylea's\ Presence=1 -Nyx\ Infusion=1 -Nyxborn\ Eidolon=1 -Nyxborn\ Rollicker=1 -Nyxborn\ Shieldmate=1 -Nyxborn\ Triton=1 -Nyxborn\ Wolf=1 -Oak\ Street\ Innkeeper=1 -Oaken\ Brawler=1 -Oakenform=1 -Oakgnarl\ Warrior=1 -Oakheart\ Dryads=1 -Oashra\ Cultivator=1 -Oasis=1 -Oasis\ Ritualist=1 -Oath\ of\ Ajani=1 -Oath\ of\ Chandra=1 -Oath\ of\ Gideon=1 -Oath\ of\ Jace=1 -Oath\ of\ Liliana=1 -Oath\ of\ Teferi=1 -Oath\ of\ the\ Ancient\ Wood=1 -Oathkeeper,\ Takeno's\ Daisho=1 -Oathsworn\ Giant=1 -Oathsworn\ Vampire=1 -Obelisk\ Spider=1 -Obelisk\ of\ Alara=1 -Obelisk\ of\ Bant=1 -Obelisk\ of\ Esper=1 -Obelisk\ of\ Grixis=1 -Obelisk\ of\ Jund=1 -Obelisk\ of\ Naya=1 -Oblivion\ Crown=1 -Oblivion\ Strike=1 -Oboro\ Envoy=1 -Obscuring\ Aether=1 -Observant\ Alseid=1 -Obsessive\ Search=1 -Obsessive\ Skinner=1 -Obsianus\ Golem=1 -Obsidian\ Battle-Axe=1 -Obsidian\ Fireheart=1 -Obstinate\ Familiar=1 -Obzedat's\ Aid=1 -Ocular\ Halo=1 -Oculus=1 -Odds\ //\ Ends=1 -Odious\ Trow=1 -Odric,\ Lunarch\ Marshal=1 -Odric,\ Master\ Tactician=1 -Odunos\ River\ Trawler=1 -Off\ Balance=1 -Offalsnout=1 -Offering\ to\ Asha=1 -Ogre's\ Cleaver=1 -Ogre\ Enforcer=1 -Ogre\ Gatecrasher=1 -Ogre\ Geargrabber=1 -Ogre\ Jailbreaker=1 -Ogre\ Leadfoot=1 -Ogre\ Marauder=1 -Ogre\ Menial=1 -Ogre\ Recluse=1 -Ogre\ Resister=1 -Ogre\ Savant=1 -Ogre\ Sentry=1 -Ogre\ Shaman=1 -Ogre\ Slumlord=1 -Ogre\ Taskmaster=1 -Ohran\ Yeti=1 -Ojutai's\ Breath=1 -Ojutai's\ Summons=1 -Ojutai\ Interceptor=1 -Ojutai\ Monument=1 -Oketra's\ Attendant=1 -Oketra's\ Avenger=1 -Oketra's\ Last\ Mercy=1 -Okina,\ Temple\ to\ the\ Grandfathers=1 -Okk=1 -Old-Growth\ Dryads=1 -Old\ Ghastbark=1 -Olivia's\ Bloodsworn=1 -Olivia's\ Dragoon=1 -Omen\ Machine=1 -Omenspeaker=1 -Ominous\ Sphinx=1 -Omnibian=1 -On\ Serra's\ Wings=1 -Onakke\ Ogre=1 -Ondu\ Champion=1 -Ondu\ Cleric=1 -Ondu\ Giant=1 -Ondu\ Greathorn=1 -Ondu\ Rising=1 -Ondu\ War\ Cleric=1 -One-Eyed\ Scarecrow=1 -One\ Dozen\ Eyes=1 -One\ Thousand\ Lashes=1 -One\ With\ the\ Wind=1 -One\ with\ Nothing=1 -Ongoing\ Investigation=1 -Oni\ Possession=1 -Oni\ of\ Wild\ Places=1 -Onulet=1 -Onward\ //\ Victory=1 -Onyx\ Goblet=1 -Oona's\ Blackguard=1 -Oona's\ Gatewarden=1 -Oona's\ Grace=1 -Oona's\ Prowler=1 -Oona,\ Queen\ of\ the\ Fae=1 -Ooze\ Flux=1 -Ooze\ Garden=1 -Opal\ Acrolith=1 -Opal\ Archangel=1 -Opal\ Avenger=1 -Opal\ Caryatid=1 -Opal\ Champion=1 -Opal\ Gargoyle=1 -Opal\ Guardian=1 -Opal\ Lake\ Gatekeepers=1 -Opaline\ Sliver=1 -Opaline\ Unicorn=1 -Open\ Fire=1 -Open\ into\ Wonder=1 -Open\ the\ Armory=1 -Ophidian=1 -Opportunist=1 -Opportunity=1 -Oppressive\ Rays=1 -Oppressive\ Will=1 -Oracle's\ Attendants=1 -Oracle's\ Insight=1 -Oracle's\ Vault=1 -Oracle\ en-Vec=1 -Oracle\ of\ Bones=1 -Oracle\ of\ Dust=1 -Oran-Rief\ Hydra=1 -Oran-Rief\ Invoker=1 -Oran-Rief\ Recluse=1 -Orator\ of\ Ojutai=1 -Oraxid=1 -Orazca\ Frillback=1 -Orazca\ Raptor=1 -Orazca\ Relic=1 -Orb\ of\ Dreams=1 -Orbs\ of\ Warding=1 -Orbweaver\ Kumo=1 -Orchard\ Spirit=1 -Orchard\ Warden=1 -Orcish\ Artillery=1 -Orcish\ Bloodpainter=1 -Orcish\ Cannonade=1 -Orcish\ Cannoneers=1 -Orcish\ Captain=1 -Orcish\ Librarian=1 -Orcish\ Lumberjack=1 -Orcish\ Mechanics=1 -Orcish\ Oriflamme=1 -Orcish\ Spy=1 -Orcish\ Squatters=1 -Orcish\ Vandal=1 -Orcish\ Veteran=1 -Ordeal\ of\ Erebos=1 -Ordeal\ of\ Heliod=1 -Ordeal\ of\ Nylea=1 -Ordeal\ of\ Purphoros=1 -Ordeal\ of\ Thassa=1 -Order\ //\ Chaos=1 -Order\ of\ Yawgmoth=1 -Order\ of\ the\ Golden\ Cricket=1 -Order\ of\ the\ Sacred\ Bell=1 -Order\ of\ the\ Stars=1 -Order\ of\ the\ White\ Shield=1 -Ordered\ Migration=1 -Ordruun\ Commando=1 -Ordruun\ Veteran=1 -Ore\ Gorger=1 -Oreskos\ Sun\ Guide=1 -Oreskos\ Swiftclaw=1 -Organ\ Grinder=1 -Orgg=1 -Origin\ Spellbomb=1 -Orim,\ Samite\ Healer=1 -Ornamental\ Courage=1 -Ornery\ Kudu=1 -Ornitharch=1 -Orochi\ Eggwatcher=1 -Orochi\ Hatchery=1 -Orochi\ Leafcaller=1 -Orochi\ Ranger=1 -Orochi\ Sustainer=1 -Oros,\ the\ Avenger=1 -Orzhov\ Charm=1 -Orzhov\ Cluestone=1 -Orzhov\ Euthanist=1 -Orzhov\ Guildgate=1 -Orzhov\ Guildmage=1 -Orzhov\ Keyrune=1 -Orzhova,\ the\ Church\ of\ Deals=1 -Osai\ Vultures=1 -Ostiary\ Thrull=1 -Ostracize=1 -Otarian\ Juggernaut=1 -Otepec\ Huntmaster=1 -Otherworldly\ Journey=1 -Otherworldly\ Outburst=1 -Ouphe\ Vandals=1 -Outbreak=1 -Outland\ Boar=1 -Outland\ Colossus=1 -Outmaneuver=1 -Outnumber=1 -Outrage\ Shaman=1 -Outrider\ en-Kor=1 -Outrider\ of\ Jhess=1 -Ovalchase\ Daredevil=1 -Ovalchase\ Dragster=1 -Overblaze=1 -Overcome=1 -Overgrown\ Armasaur=1 -Override=1 -Overrule=1 -Overrun=1 -Overwhelm=1 -Overwhelming\ Denial=1 -Overwhelming\ Stampede=1 -Ovinize=1 -Ovinomancer=1 -Oviya\ Pashiri,\ Sage\ Lifecrafter=1 -Owl\ Familiar=1 -Oxidda\ Daredevil=1 -Oxidda\ Golem=1 -Oxidda\ Scrapmelter=1 -Oyobi,\ Who\ Split\ the\ Heavens=1 -Pacification\ Array=1 -Pacifism=1 -Pack's\ Disdain=1 -Pack\ Guardian=1 -Pain\ //\ Suffering=1 -Pain\ Kami=1 -Pain\ Magnification=1 -Pain\ Seer=1 -Painbringer=1 -Painful\ Lesson=1 -Painful\ Memories=1 -Painful\ Quandary=1 -Painful\ Truths=1 -Painsmith=1 -Painted\ Bluffs=1 -Painwracker\ Oni=1 -Palace\ Familiar=1 -Palace\ Guard=1 -Paladin\ of\ Prahv=1 -Paladin\ of\ the\ Bloodstained=1 -Pale\ Recluse=1 -Pale\ Rider\ of\ Trostad=1 -Pale\ Wayfarer=1 -Paleoloth=1 -Palinchron=1 -Palisade\ Giant=1 -Palladia-Mors=1 -Pallid\ Mycoderm=1 -Pallimud=1 -Panacea=1 -Panic=1 -Panic\ Attack=1 -Panic\ Spellbomb=1 -Panoptic\ Mirror=1 -Panther\ Warriors=1 -Paperfin\ Rascal=1 -Paragon\ of\ Eternal\ Wilds=1 -Paragon\ of\ Fierce\ Defiance=1 -Paragon\ of\ Gathering\ Mists=1 -Paragon\ of\ New\ Dawns=1 -Paragon\ of\ Open\ Graves=1 -Paragon\ of\ the\ Amesha=1 -Parallax\ Wave=1 -Parallectric\ Feedback=1 -Paralyze=1 -Paralyzing\ Grasp=1 -Paranoid\ Delusions=1 -Paranoid\ Parish-Blade=1 -Parapet\ Watchers=1 -Paraselene=1 -Parasitic\ Bond=1 -Parasitic\ Implant=1 -Parasitic\ Strix=1 -Parch=1 -Pardic\ Collaborator=1 -Pardic\ Dragon=1 -Pardic\ Firecat=1 -Pardic\ Lancer=1 -Pardic\ Miner=1 -Pardic\ Wanderer=1 -Pariah's\ Shield=1 -Part\ the\ Veil=1 -Patagia\ Golem=1 -Patagia\ Viper=1 -Patchwork\ Gnomes=1 -Path\ of\ Anger's\ Flame=1 -Path\ of\ Bravery=1 -Pathmaker\ Initiate=1 -Pathrazer\ of\ Ulamog=1 -Pathway\ Arrows=1 -Patriarch's\ Desire=1 -Patron\ of\ the\ Akki=1 -Patron\ of\ the\ Kitsune=1 -Patron\ of\ the\ Moon=1 -Patron\ of\ the\ Nezumi=1 -Patron\ of\ the\ Valiant=1 -Patron\ of\ the\ Wild=1 -Pawn\ of\ Ulamog=1 -Pay\ No\ Heed=1 -Peace\ Strider=1 -Peace\ and\ Quiet=1 -Peace\ of\ Mind=1 -Peacewalker\ Colossus=1 -Peach\ Garden\ Oath=1 -Peak\ Eruption=1 -Pearl\ Shard=1 -Pearlspear\ Courier=1 -Peel\ from\ Reality=1 -Peema\ Aether-Seer=1 -Peema\ Outrider=1 -Peer\ Pressure=1 -Peer\ Through\ Depths=1 -Pegasus\ Charger=1 -Pegasus\ Courser=1 -Pegasus\ Refuge=1 -Pegasus\ Stampede=1 -Pelakka\ Wurm=1 -Penance=1 -Pendelhaven\ Elder=1 -Pendrell\ Drake=1 -Pennon\ Blade=1 -Pensive\ Minotaur=1 -Pentagram\ of\ the\ Ages=1 -Pentarch\ Paladin=1 -Pentarch\ Ward=1 -Pentavus=1 -Penumbra\ Bobcat=1 -Penumbra\ Kavu=1 -Penumbra\ Spider=1 -Penumbra\ Wurm=1 -Peppersmoke=1 -Peregrination=1 -Peregrine\ Griffin=1 -Peregrine\ Mask=1 -Perilous\ Forays=1 -Perilous\ Myr=1 -Perilous\ Predicament=1 -Perilous\ Shadow=1 -Perilous\ Voyage=1 -Perish\ the\ Thought=1 -Permafrost\ Trap=1 -Permeating\ Mass=1 -Perpetual\ Timepiece=1 -Perplex=1 -Perplexing\ Chimera=1 -Persecute=1 -Personal\ Incarnation=1 -Personal\ Sanctuary=1 -Persuasion=1 -Pestilence\ Demon=1 -Pestilent\ Souleater=1 -Petalmane\ Baku=1 -Petals\ of\ Insight=1 -Petradon=1 -Petrahydrox=1 -Petravark=1 -Petrified\ Wood-Kin=1 -Pewter\ Golem=1 -Phalanx\ Formation=1 -Phalanx\ Leader=1 -Phantasmagorian=1 -Phantasmal\ Abomination=1 -Phantasmal\ Bear=1 -Phantasmal\ Dragon=1 -Phantasmal\ Fiend=1 -Phantasmal\ Mount=1 -Phantasmal\ Terrain=1 -Phantatog=1 -Phantom\ Beast=1 -Phantom\ Centaur=1 -Phantom\ Flock=1 -Phantom\ General=1 -Phantom\ Monster=1 -Phantom\ Nomad=1 -Phantom\ Tiger=1 -Phantom\ Warrior=1 -Phantom\ Wurm=1 -Pharagax\ Giant=1 -Pharika's\ Cure=1 -Pharika's\ Disciple=1 -Pharika's\ Mender=1 -Pheres-Band\ Centaurs=1 -Pheres-Band\ Raiders=1 -Pheres-Band\ Thunderhoof=1 -Pheres-Band\ Tromper=1 -Pheres-Band\ Warchief=1 -Phobian\ Phantasm=1 -Phosphorescent\ Feast=1 -Phthisis=1 -Phylactery\ Lich=1 -Phyresis=1 -Phyrexia's\ Core=1 -Phyrexian\ Battleflies=1 -Phyrexian\ Bloodstock=1 -Phyrexian\ Colossus=1 -Phyrexian\ Defiler=1 -Phyrexian\ Denouncer=1 -Phyrexian\ Devourer=1 -Phyrexian\ Digester=1 -Phyrexian\ Etchings=1 -Phyrexian\ Gargantua=1 -Phyrexian\ Grimoire=1 -Phyrexian\ Hulk=1 -Phyrexian\ Hydra=1 -Phyrexian\ Infiltrator=1 -Phyrexian\ Ingester=1 -Phyrexian\ Ironfoot=1 -Phyrexian\ Juggernaut=1 -Phyrexian\ Monitor=1 -Phyrexian\ Prowler=1 -Phyrexian\ Reaper=1 -Phyrexian\ Rebirth=1 -Phyrexian\ Slayer=1 -Phyrexian\ Splicer=1 -Phyrexian\ Totem=1 -Phyrexian\ Vatmother=1 -Phyrexian\ Vault=1 -Phytoburst=1 -Phytohydra=1 -Phytotitan=1 -Pia's\ Revolution=1 -Pianna,\ Nomad\ Captain=1 -Pick\ the\ Brain=1 -Pierce\ Strider=1 -Pierce\ the\ Sky=1 -Piety\ Charm=1 -Pilfered\ Plans=1 -Pilgrim's\ Eye=1 -Pilgrim\ of\ Justice=1 -Pilgrim\ of\ Virtue=1 -Pilgrim\ of\ the\ Fires=1 -Pillage=1 -Pillar\ Tombs\ of\ Aku=1 -Pillar\ of\ Origins=1 -Pillar\ of\ War=1 -Pillar\ of\ the\ Paruns=1 -Pillarfield\ Ox=1 -Pillory\ of\ the\ Sleepless=1 -Pin\ to\ the\ Earth=1 -Pincer\ Spider=1 -Pincher\ Beetles=1 -Pine\ Barrens=1 -Pine\ Walker=1 -Pinecrest\ Ridge=1 -Pinion\ Feast=1 -Pious\ Evangel=1 -Pious\ Interdiction=1 -Pious\ Kitsune=1 -Piper's\ Melody=1 -Piranha\ Marsh=1 -Pirate's\ Cutlass=1 -Pirate's\ Pillage=1 -Pirate's\ Prize=1 -Pirate\ Ship=1 -Pit\ Fight=1 -Pit\ Keeper=1 -Pit\ Raptor=1 -Pit\ Trap=1 -Pitfall\ Trap=1 -Pith\ Driller=1 -Pitiless\ Horde=1 -Pitiless\ Plunderer=1 -Pitiless\ Vizier=1 -Plagiarize=1 -Plague\ Beetle=1 -Plague\ Belcher=1 -Plague\ Boiler=1 -Plague\ Sliver=1 -Plague\ Spores=1 -Plague\ Wind=1 -Plague\ of\ Vermin=1 -Plaguemaw\ Beast=1 -Plains=1 -Planar\ Cleansing=1 -Planar\ Guide=1 -Planar\ Outburst=1 -Planar\ Overlay=1 -Planar\ Void=1 -Planeswalker's\ Fury=1 -Planeswalker's\ Mirth=1 -Planeswalker's\ Scorn=1 -Plasma\ Elemental=1 -Plated\ Crusher=1 -Plated\ Geopede=1 -Plated\ Pegasus=1 -Plated\ Seastrider=1 -Plated\ Spider=1 -Plaxcaster\ Frogling=1 -Plaxmanta=1 -Plea\ for\ Guidance=1 -Pledge\ of\ Loyalty=1 -Plow\ Through\ Reito=1 -Plumes\ of\ Peace=1 -Plumeveil=1 -Plummet=1 -Plunder=1 -Poison\ the\ Well=1 -Poisonbelly\ Ogre=1 -Polis\ Crusher=1 -Pollen\ Lullaby=1 -Pollen\ Remedy=1 -Pollenbright\ Wings=1 -Polluted\ Bonds=1 -Polluted\ Dead=1 -Polymorphist's\ Jest=1 -Polymorphous\ Rush=1 -Pontiff\ of\ Blight=1 -Ponyback\ Brigade=1 -Pooling\ Venom=1 -Pore\ Over\ the\ Pages=1 -Portent\ of\ Betrayal=1 -Possessed\ Aven=1 -Possessed\ Barbarian=1 -Possessed\ Centaur=1 -Possessed\ Nomad=1 -Possessed\ Skaab=1 -Poultice\ Sliver=1 -Pounce=1 -Pouncing\ Cheetah=1 -Pouncing\ Kavu=1 -Power\ Armor=1 -Power\ Taint=1 -Power\ of\ Fire=1 -Powerstone\ Minefield=1 -Powerstone\ Shard=1 -Prahv,\ Spires\ of\ Order=1 -Prakhata\ Club\ Security=1 -Prakhata\ Pillar-Bug=1 -Precinct\ Captain=1 -Precise\ Strike=1 -Precognition=1 -Precognition\ Field=1 -Precursor\ Golem=1 -Predator's\ Rapport=1 -Predator,\ Flagship=1 -Predator\ Dragon=1 -Predatory\ Advantage=1 -Predatory\ Nightstalker=1 -Predatory\ Urge=1 -Premature\ Burial=1 -Prepare\ //\ Fight=1 -Prescient\ Chimera=1 -Presence\ of\ the\ Master=1 -Presence\ of\ the\ Wise=1 -Press\ into\ Service=1 -Press\ the\ Advantage=1 -Pressure\ Point=1 -Prey's\ Vengeance=1 -Prey\ Upon=1 -Prickleboar=1 -Prickly\ Boggart=1 -Pride\ Guardian=1 -Pride\ of\ Conquerors=1 -Priest\ of\ Gix=1 -Priest\ of\ Iroas=1 -Priest\ of\ Urabrask=1 -Priest\ of\ the\ Blood\ Rite=1 -Priests\ of\ Norn=1 -Primal\ Bellow=1 -Primal\ Beyond=1 -Primal\ Clay=1 -Primal\ Druid=1 -Primal\ Forcemage=1 -Primal\ Huntbeast=1 -Primal\ Plasma=1 -Primal\ Rage=1 -Primal\ Visitation=1 -Primal\ Whisperer=1 -Primeval\ Force=1 -Primeval\ Light=1 -Primeval\ Shambler=1 -Primevals'\ Glorious\ Rebirth=1 -Primitive\ Etchings=1 -Primitive\ Justice=1 -Primordial\ Sage=1 -Primordial\ Wurm=1 -Prism\ Array=1 -Prism\ Ring=1 -Prismatic\ Boon=1 -Prismatic\ Lens=1 -Prismwake\ Merrow=1 -Prison\ Barricade=1 -Prison\ Term=1 -Pristine\ Angel=1 -Pristine\ Skywise=1 -Private\ Research=1 -Prized\ Elephant=1 -Prized\ Unicorn=1 -Prizefighter\ Construct=1 -Processor\ Assault=1 -Prodigal\ Pyromancer=1 -Prodigal\ Sorcerer=1 -Profane\ Command=1 -Profane\ Prayers=1 -Profaner\ of\ the\ Dead=1 -Profit\ //\ Loss=1 -Profound\ Journey=1 -Prognostic\ Sphinx=1 -Promise\ of\ Power=1 -Promised\ Kannushi=1 -Propeller\ Pioneer=1 -Proper\ Burial=1 -Prophet\ of\ Distortion=1 -Prophet\ of\ Kruphix=1 -Prophetic\ Bolt=1 -Prophetic\ Ravings=1 -Prosperous\ Pirates=1 -Protean\ Hydra=1 -Protean\ Raider=1 -Protection\ of\ the\ Hekma=1 -Protective\ Bubble=1 -Proteus\ Machine=1 -Protomatter\ Powder=1 -Prototype\ Portal=1 -Proven\ Combatant=1 -Providence=1 -Prowess\ of\ the\ Fair=1 -Prowler's\ Helm=1 -Prowling\ Nightstalker=1 -Prowling\ Pangolin=1 -Prying\ Blade=1 -Prying\ Questions=1 -Psionic\ Gift=1 -Psionic\ Sliver=1 -Psychatog=1 -Psychic\ Barrier=1 -Psychic\ Drain=1 -Psychic\ Intrusion=1 -Psychic\ Membrane=1 -Psychic\ Miasma=1 -Psychic\ Overload=1 -Psychic\ Possession=1 -Psychic\ Puppetry=1 -Psychic\ Purge=1 -Psychic\ Rebuttal=1 -Psychic\ Spear=1 -Psychic\ Spiral=1 -Psychic\ Surgery=1 -Psychic\ Symbiont=1 -Psychic\ Trance=1 -Psychic\ Transfer=1 -Psychogenic\ Probe=1 -Psychotic\ Episode=1 -Psychotic\ Fury=1 -Psychotrope\ Thallid=1 -Pterodon\ Knight=1 -Pteron\ Ghost=1 -Public\ Execution=1 -Puca's\ Mischief=1 -Puffer\ Extract=1 -Pull\ Under=1 -Pull\ from\ Eternity=1 -Pull\ from\ the\ Deep=1 -Pulling\ Teeth=1 -Pulsating\ Illusion=1 -Pulse\ of\ Llanowar=1 -Pulse\ of\ the\ Dross=1 -Pulse\ of\ the\ Fields=1 -Pulse\ of\ the\ Forge=1 -Pulse\ of\ the\ Grid=1 -Pulse\ of\ the\ Tangle=1 -Puncture\ Blast=1 -Puncture\ Bolt=1 -Puncturing\ Blow=1 -Puncturing\ Light=1 -Punish\ Ignorance=1 -Puppet\ Conjurer=1 -Puppet\ Strings=1 -Puppeteer=1 -Puppeteer\ Clique=1 -Pure\ //\ Simple=1 -Pure\ Reflection=1 -Puresight\ Merrow=1 -Purge\ the\ Profane=1 -Purging\ Scythe=1 -Purity=1 -Purphoros's\ Emissary=1 -Pursue\ Glory=1 -Pursuit\ of\ Flight=1 -Pus\ Kami=1 -Put\ Away=1 -Putrefaction=1 -Putrefax=1 -Putrefy=1 -Putrid\ Cyclops=1 -Putrid\ Raptor=1 -Putrid\ Warrior=1 -Pygmy\ Kavu=1 -Pygmy\ Pyrosaur=1 -Pygmy\ Razorback=1 -Pygmy\ Troll=1 -Pyramid\ of\ the\ Pantheon=1 -Pyre\ Charger=1 -Pyre\ Hound=1 -Pyrewild\ Shaman=1 -Pyric\ Salamander=1 -Pyrite\ Spellbomb=1 -Pyroclasm=1 -Pyroclast\ Consul=1 -Pyrohemia=1 -Pyromancer's\ Assault=1 -Pyromancer's\ Gauntlet=1 -Pyromancer's\ Swath=1 -Pyromancy=1 -Pyromania=1 -Pyrotechnics=1 -Pyrrhic\ Revival=1 -Python=1 -Pyxis\ of\ Pandemonium=1 -Qal\ Sisma\ Behemoth=1 -Qarsi\ Deceiver=1 -Qasali\ Ambusher=1 -Quag\ Sickness=1 -Quag\ Vampires=1 -Quagmire\ Druid=1 -Quarry\ Beetle=1 -Quarry\ Colossus=1 -Quarry\ Hauler=1 -Quash=1 -Queen's\ Agent=1 -Queen's\ Bay\ Soldier=1 -Queen's\ Commission=1 -Quenchable\ Fire=1 -Quest\ for\ Ancient\ Secrets=1 -Quest\ for\ Renewal=1 -Quest\ for\ Ula's\ Temple=1 -Quest\ for\ the\ Gemblades=1 -Quest\ for\ the\ Gravelord=1 -Quicken=1 -Quicksand=1 -Quicksilver\ Behemoth=1 -Quicksilver\ Dagger=1 -Quicksilver\ Dragon=1 -Quicksilver\ Fountain=1 -Quicksilver\ Geyser=1 -Quicksilver\ Wall=1 -Quicksmith\ Genius=1 -Quicksmith\ Rebel=1 -Quicksmith\ Spy=1 -Quiet\ Contemplation=1 -Quiet\ Purity=1 -Quiet\ Speculation=1 -Quietus\ Spike=1 -Quill-Slinger\ Boggart=1 -Quilled\ Slagwurm=1 -Quilled\ Sliver=1 -Quilled\ Wolf=1 -Quillmane\ Baku=1 -Quirion\ Dryad=1 -Quirion\ Explorer=1 -Quirion\ Sentinel=1 -Qumulox=1 -Rabble-Rouser=1 -Rabid\ Bite=1 -Rabid\ Bloodsucker=1 -Rabid\ Rats=1 -Rabid\ Wolverines=1 -Rabid\ Wombat=1 -Rack\ and\ Ruin=1 -Radiant's\ Dragoons=1 -Radiant's\ Judgment=1 -Radiant,\ Archangel=1 -Radiant\ Flames=1 -Radiant\ Purge=1 -Radiating\ Lightning=1 -Radjan\ Spirit=1 -Raff\ Capashen,\ Ship's\ Mage=1 -Ragamuffyn=1 -Rage\ Forger=1 -Rage\ Reflection=1 -Rage\ Thrower=1 -Rage\ Weaver=1 -Rage\ of\ Purphoros=1 -Rageblood\ Shaman=1 -Ragemonger=1 -Ragged\ Veins=1 -Raging\ Goblin=1 -Raging\ Gorilla=1 -Raging\ Kavu=1 -Raging\ Minotaur=1 -Raging\ Regisaur=1 -Raging\ Swordtooth=1 -Rags\ //\ Riches=1 -Raid\ Bombardment=1 -Raiders'\ Spoils=1 -Raiders'\ Wake=1 -Rain\ of\ Daggers=1 -Rain\ of\ Embers=1 -Rain\ of\ Rust=1 -Rain\ of\ Salt=1 -Rain\ of\ Thorns=1 -Rainbow\ Crow=1 -Rainbow\ Efreet=1 -Raise\ Dead=1 -Raised\ by\ Wolves=1 -Raka\ Disciple=1 -Raka\ Sanctuary=1 -Rakalite=1 -Rakavolver=1 -Rakdos\ Augermage=1 -Rakdos\ Cackler=1 -Rakdos\ Cluestone=1 -Rakdos\ Drake=1 -Rakdos\ Guildgate=1 -Rakdos\ Guildmage=1 -Rakdos\ Ickspitter=1 -Rakdos\ Keyrune=1 -Rakdos\ Pit\ Dragon=1 -Rakdos\ Ragemutt=1 -Rakdos\ Ringleader=1 -Rakdos\ Riteknife=1 -Rakdos\ Shred-Freak=1 -Rakdos\ Signet=1 -Rakeclaw\ Gargantuan=1 -Raking\ Canopy=1 -Rakish\ Heir=1 -Rakka\ Mar=1 -Raksha\ Golden\ Cub=1 -Rakshasa's\ Secret=1 -Rakshasa\ Deathdealer=1 -Rakshasa\ Gravecaller=1 -Rakshasa\ Vizier=1 -Rally\ the\ Forces=1 -Rally\ the\ Horde=1 -Rally\ the\ Peasants=1 -Rally\ the\ Righteous=1 -Rallying\ Roar=1 -Ramirez\ DePietro=1 -Ramosian\ Commander=1 -Ramosian\ Revivalist=1 -Rampaging\ Cyclops=1 -Rampaging\ Hippo=1 -Rampant\ Growth=1 -Ramroller=1 -Ramunap\ Hydra=1 -Ramunap\ Ruins=1 -Rancid\ Rats=1 -Ranger's\ Guile=1 -Ranger\ en-Vec=1 -Ranging\ Raptors=1 -Rapacious\ One=1 -Raptor\ Companion=1 -Raptor\ Hatchling=1 -Ratcatcher=1 -Rathi\ Dragon=1 -Rathi\ Fiend=1 -Rathi\ Trapper=1 -Rats'\ Feast=1 -Rats\ of\ Rath=1 -Rattleblaze\ Scarecrow=1 -Rattleclaw\ Mystic=1 -Ravaged\ Highlands=1 -Ravaging\ Blaze=1 -Ravaging\ Riftwurm=1 -Raven\ Familiar=1 -Raven\ Guild\ Initiate=1 -Ravenous\ Baloth=1 -Ravenous\ Bloodseeker=1 -Ravenous\ Daggertooth=1 -Ravenous\ Demon=1 -Ravenous\ Harpy=1 -Ravenous\ Intruder=1 -Raving\ Oni-Slave=1 -Ray\ of\ Command=1 -Ray\ of\ Dissolution=1 -Ray\ of\ Distortion=1 -Razaketh's\ Rite=1 -Razia's\ Purification=1 -Razia,\ Boros\ Archangel=1 -Razing\ Snidd=1 -Razor\ Barrier=1 -Razor\ Boomerang=1 -Razor\ Golem=1 -Razor\ Hippogriff=1 -Razor\ Pendulum=1 -Razor\ Swine=1 -Razorfin\ Abolisher=1 -Razorfoot\ Griffin=1 -Razorgrass\ Screen=1 -Razormane\ Masticore=1 -Razortip\ Whip=1 -Razortooth\ Rats=1 -Reach\ Through\ Mists=1 -Reach\ of\ Branches=1 -Reach\ of\ Shadows=1 -Read\ the\ Runes=1 -Reality\ Acid=1 -Reality\ Anchor=1 -Reality\ Hemorrhage=1 -Reality\ Ripple=1 -Reality\ Spasm=1 -Reality\ Strobe=1 -Realm\ Razer=1 -Realm\ Seekers=1 -Realms\ Uncharted=1 -Realmwright=1 -Reap=1 -Reap\ Intellect=1 -Reap\ What\ Is\ Sown=1 -Reap\ the\ Seagraf=1 -Reaper\ of\ Flight\ Moonsilver=1 -Reaper\ of\ Sheoldred=1 -Reaper\ of\ the\ Wilds=1 -Reaping\ the\ Rewards=1 -Reason\ //\ Believe=1 -Reassembling\ Skeleton=1 -Reave\ Soul=1 -Reaver\ Ambush=1 -Reaver\ Drone=1 -Rebellion\ of\ the\ Flamekin=1 -Reborn\ Hero=1 -Reborn\ Hope=1 -Rebound=1 -Rebuff\ the\ Wicked=1 -Rebuke=1 -Rebuking\ Ceremony=1 -Recantation=1 -Reciprocate=1 -Reckless\ Charge=1 -Reckless\ Cohort=1 -Reckless\ Embermage=1 -Reckless\ Fireweaver=1 -Reckless\ Imp=1 -Reckless\ Ogre=1 -Reckless\ One=1 -Reckless\ Racer=1 -Reckless\ Rage=1 -Reckless\ Reveler=1 -Reckless\ Scholar=1 -Reckless\ Spite=1 -Reckless\ Waif=1 -Reckless\ Wurm=1 -Reclaim=1 -Reclusive\ Artificer=1 -Reclusive\ Wight=1 -Recollect=1 -Reconstruction=1 -Recoup=1 -Recover=1 -Recumbent\ Bliss=1 -Recuperate=1 -Recurring\ Nightmare=1 -Red\ Cliffs\ Armada=1 -Red\ Sun's\ Zenith=1 -Redeem=1 -Redeem\ the\ Lost=1 -Redirect=1 -Reduce\ //\ Rubble=1 -Reduce\ in\ Stature=1 -Reduce\ to\ Ashes=1 -Reduce\ to\ Dreams=1 -Redwood\ Treefolk=1 -Reflex\ Sliver=1 -Reflexes=1 -Refraction\ Trap=1 -Refresh=1 -Refreshing\ Rain=1 -Refuse\ //\ Cooperate=1 -Regenerate=1 -Regeneration=1 -Regress=1 -Reign\ of\ the\ Pit=1 -Reinforced\ Bulwark=1 -Reinforcements=1 -Reins\ of\ the\ Vinesteed=1 -Reiterate=1 -Reito\ Lantern=1 -Reiver\ Demon=1 -Rejuvenate=1 -Rejuvenation\ Chamber=1 -Rekindled\ Flame=1 -Reknit=1 -Relearn=1 -Release\ the\ Ants=1 -Release\ the\ Gremlins=1 -Release\ to\ the\ Wind=1 -Relentless\ Assault=1 -Relentless\ Hunter=1 -Relentless\ Raptor=1 -Relentless\ Rats=1 -Relentless\ Skaabs=1 -Relic\ Bane=1 -Relic\ Barrier=1 -Relic\ Crush=1 -Relic\ Putrescence=1 -Relic\ Runner=1 -Relic\ Seeker=1 -Relic\ Ward=1 -Relief\ Captain=1 -Reliquary\ Monk=1 -Remember\ the\ Fallen=1 -Reminisce=1 -Remorseless\ Punishment=1 -Rend\ Flesh=1 -Render\ Silent=1 -Rending\ Vines=1 -Renegade's\ Getaway=1 -Renegade\ Doppelganger=1 -Renegade\ Freighter=1 -Renegade\ Krasis=1 -Renegade\ Rallier=1 -Renegade\ Tactics=1 -Renegade\ Warlord=1 -Renegade\ Wheelsmith=1 -Renewed\ Faith=1 -Renounce=1 -Renounce\ the\ Guilds=1 -Renowned\ Weaver=1 -Repay\ in\ Kind=1 -Repeal=1 -Repeating\ Barrage=1 -Repel\ Intruders=1 -Repel\ the\ Abominable=1 -Repentance=1 -Repentant\ Vampire=1 -Repopulate=1 -Reprisal=1 -Reprocess=1 -Requiem\ Angel=1 -Reroute=1 -Rescind=1 -Rescue=1 -Rescue\ from\ the\ Underworld=1 -Research\ //\ Development=1 -Research\ Assistant=1 -Research\ the\ Deep=1 -Reservoir\ Walker=1 -Resilient\ Wanderer=1 -Resistance\ Fighter=1 -Resize=1 -Resolute\ Archangel=1 -Resolute\ Blademaster=1 -Resolute\ Survivors=1 -Resounding\ Scream=1 -Resounding\ Silence=1 -Resounding\ Thunder=1 -Resounding\ Wave=1 -Resourceful\ Return=1 -Resplendent\ Griffin=1 -Resplendent\ Mentor=1 -Rest\ for\ the\ Weary=1 -Restless\ Apparition=1 -Restless\ Bones=1 -Restless\ Dreams=1 -Restock=1 -Restoration\ Gearsmith=1 -Restoration\ Specialist=1 -Restore\ the\ Peace=1 -Restrain=1 -Resupply=1 -Resurrection=1 -Retaliate=1 -Retaliation=1 -Retaliator\ Griffin=1 -Retether=1 -Rethink=1 -Retraction\ Helix=1 -Retreat\ to\ Coralhelm=1 -Retreat\ to\ Emeria=1 -Retreat\ to\ Hagra=1 -Retreat\ to\ Kazandu=1 -Retreat\ to\ Valakut=1 -Retribution=1 -Retribution\ of\ the\ Ancients=1 -Retromancer=1 -Return\ to\ the\ Earth=1 -Returned\ Centaur=1 -Returned\ Phalanx=1 -Returned\ Reveler=1 -Revealing\ Wind=1 -Reveille\ Squad=1 -Revel\ in\ Riches=1 -Revel\ of\ the\ Fallen\ God=1 -Revelsong\ Horn=1 -Revenant=1 -Revenant\ Patriarch=1 -Reverberate=1 -Revered\ Dead=1 -Revered\ Elder=1 -Revered\ Unicorn=1 -Reverence=1 -Reverent\ Hunter=1 -Reversal\ of\ Fortune=1 -Reverse\ Engineer=1 -Reverse\ the\ Sands=1 -Revive=1 -Reviving\ Dose=1 -Reviving\ Melody=1 -Reviving\ Vapors=1 -Revoke\ Existence=1 -Revoke\ Privileges=1 -Revolutionary\ Rebuff=1 -Reward\ the\ Faithful=1 -Rewards\ of\ Diversity=1 -Reweave=1 -Rewind=1 -Rhet-Crop\ Spearmaster=1 -Rhonas's\ Last\ Stand=1 -Rhonas's\ Monument=1 -Rhonas's\ Stalwart=1 -Rhox=1 -Rhox\ Bodyguard=1 -Rhox\ Brute=1 -Rhox\ Charger=1 -Rhox\ Maulers=1 -Rhox\ Meditant=1 -Rhox\ Oracle=1 -Rhox\ Pikemaster=1 -Rhox\ War\ Monk=1 -Rhystic\ Shield=1 -Rib\ Cage\ Spider=1 -Ribbon\ Snake=1 -Ribbons\ of\ the\ Reikai=1 -Riddle\ of\ Lightning=1 -Riddleform=1 -Riddlesmith=1 -Ride\ Down=1 -Ridge\ Rannet=1 -Ridged\ Kusite=1 -Ridgeline\ Rager=1 -Ridgescale\ Tusker=1 -Ridgetop\ Raptor=1 -Riding\ the\ Dilu\ Horse=1 -Rift\ Elemental=1 -Riftmarked\ Knight=1 -Riftsweeper=1 -Riftwing\ Cloudskate=1 -Righteous\ Authority=1 -Righteous\ Avengers=1 -Righteous\ Blow=1 -Righteous\ Charge=1 -Righteous\ Fury=1 -Righteousness=1 -Rile=1 -Rime\ Transfusion=1 -Rimebound\ Dead=1 -Rimefeather\ Owl=1 -Rimescale\ Dragon=1 -Rimewind\ Cryomancer=1 -Rimewind\ Taskmage=1 -Ring\ of\ Evos\ Isle=1 -Ring\ of\ Gix=1 -Ring\ of\ Kalonia=1 -Ring\ of\ Thune=1 -Ring\ of\ Valkas=1 -Ring\ of\ Xathrid=1 -Ringskipper=1 -Ringwarden\ Owl=1 -Riot\ Control=1 -Riot\ Gear=1 -Riot\ Piker=1 -Riot\ Spikes=1 -Riparian\ Tiger=1 -Ripscale\ Predator=1 -Riptide\ Biologist=1 -Riptide\ Chimera=1 -Riptide\ Chronologist=1 -Riptide\ Entrancer=1 -Riptide\ Mangler=1 -Riptide\ Pilferer=1 -Riptide\ Replicator=1 -Rise\ from\ the\ Grave=1 -Rise\ from\ the\ Tides=1 -Rise\ of\ Eagles=1 -Rise\ to\ the\ Challenge=1 -Risen\ Sanctuary=1 -Rishadan\ Airship=1 -Rishkar's\ Expertise=1 -Rising\ Miasma=1 -Rite\ of\ Belzenlok=1 -Rite\ of\ Ruin=1 -Rite\ of\ Undoing=1 -Rites\ of\ Initiation=1 -Rites\ of\ Reaping=1 -Rites\ of\ Refusal=1 -Rith's\ Attendant=1 -Ritual\ of\ Rejuvenation=1 -Ritual\ of\ Restoration=1 -Ritual\ of\ Subdual=1 -Ritual\ of\ the\ Returned=1 -Rivalry=1 -Rivals'\ Duel=1 -River's\ Grasp=1 -River\ Bear=1 -River\ Darter=1 -River\ Heralds'\ Boon=1 -River\ Hoopoe=1 -River\ Kaijin=1 -River\ Merfolk=1 -River\ Serpent=1 -River\ Sneak=1 -Riverfall\ Mimic=1 -Riverwheel\ Aerialists=1 -Riverwise\ Augur=1 -Rix\ Maadi,\ Dungeon\ Palace=1 -Rix\ Maadi\ Guildmage=1 -Roar\ of\ Challenge=1 -Roar\ of\ Jukai=1 -Roar\ of\ Reclamation=1 -Roar\ of\ the\ Crowd=1 -Roar\ of\ the\ Wurm=1 -Roaring\ Primadox=1 -Roaring\ Slagwurm=1 -Robber\ Fly=1 -Robe\ of\ Mirrors=1 -Roc\ Egg=1 -Roc\ Hatchling=1 -Rock\ Badger=1 -Rock\ Basilisk=1 -Rock\ Hydra=1 -Rock\ Jockey=1 -Rock\ Slide=1 -Rockshard\ Elemental=1 -Rockslide\ Ambush=1 -Rockslide\ Elemental=1 -Rocky\ Tar\ Pit=1 -Rod\ of\ Ruin=1 -Rofellos,\ Llanowar\ Emissary=1 -Rogue's\ Gloves=1 -Rogue's\ Passage=1 -Rogue\ Kavu=1 -Rogue\ Refiner=1 -Rogue\ Skycaptain=1 -Roil's\ Retribution=1 -Roil\ Spout=1 -Roiling\ Horror=1 -Roiling\ Terrain=1 -Roiling\ Waters=1 -Roilmage's\ Trick=1 -Rollick\ of\ Abandon=1 -Rolling\ Spoil=1 -Rolling\ Temblor=1 -Rolling\ Thunder=1 -Rona,\ Disciple\ of\ Gix=1 -Ronin\ Cavekeeper=1 -Ronin\ Cliffrider=1 -Ronin\ Houndmaster=1 -Ronin\ Warclub=1 -Ronom\ Hulk=1 -Ronom\ Serpent=1 -Ronom\ Unicorn=1 -Roofstalker\ Wight=1 -Rooftop\ Storm=1 -Root-Kin\ Ally=1 -Root\ Out=1 -Root\ Snare=1 -Rootborn\ Defenses=1 -Rootbreaker\ Wurm=1 -Rootgrapple=1 -Rooting\ Kavu=1 -Rootrunner=1 -Roots=1 -Rootwalla=1 -Rootwater\ Alligator=1 -Rootwater\ Diver=1 -Rootwater\ Hunter=1 -Rootwater\ Matriarch=1 -Rootwater\ Mystic=1 -Rorix\ Bladewing=1 -Rosheen\ Meanderer=1 -Rot\ Farm\ Skeleton=1 -Rot\ Shambler=1 -Rot\ Wolf=1 -Rotcrown\ Ghoul=1 -Roterothopter=1 -Rotfeaster\ Maggot=1 -Rotted\ Hulk=1 -Rottenheart\ Ghoul=1 -Rotting\ Giant=1 -Rotting\ Legion=1 -Rotting\ Mastodon=1 -Roughshod\ Mentor=1 -Rouse\ the\ Mob=1 -Royal\ Assassin=1 -Royal\ Decree=1 -Royal\ Trooper=1 -Rubbleback\ Rhino=1 -Rubblebelt\ Maaka=1 -Rubblebelt\ Raiders=1 -Rubblehulk=1 -Rude\ Awakening=1 -Rugged\ Highlands=1 -Ruham\ Djinn=1 -Ruin\ Processor=1 -Ruin\ Rat=1 -Ruin\ in\ Their\ Wake=1 -Ruination\ Guide=1 -Ruination\ Wurm=1 -Ruinous\ Gremlin=1 -Ruinous\ Minotaur=1 -Ruinous\ Path=1 -Ruins\ of\ Oran-Rief=1 -Ruins\ of\ Trokair=1 -Rukh\ Egg=1 -Rumbling\ Aftershocks=1 -Rumbling\ Baloth=1 -Rumbling\ Slum=1 -Rummaging\ Goblin=1 -Rummaging\ Wizard=1 -Run\ Aground=1 -Run\ Amok=1 -Run\ Wild=1 -Rune\ of\ Protection:\ Artifacts=1 -Rune\ of\ Protection:\ Lands=1 -Runeboggle=1 -Runechanter's\ Pike=1 -Runeclaw\ Bear=1 -Runed\ Servitor=1 -Runed\ Stalactite=1 -Runeflare\ Trap=1 -Runes\ of\ the\ Deus=1 -Runic\ Repetition=1 -Runner's\ Bane=1 -Rush\ of\ Adrenaline=1 -Rush\ of\ Battle=1 -Rush\ of\ Blood=1 -Rush\ of\ Ice=1 -Rush\ of\ Vitality=1 -Rushing-Tide\ Zubera=1 -Rushwood\ Dryad=1 -Rushwood\ Herbalist=1 -Rust\ Scarab=1 -Rusted\ Relic=1 -Rusted\ Sentinel=1 -Rusted\ Slasher=1 -Rustic\ Clachan=1 -Rusting\ Golem=1 -Rustmouth\ Ogre=1 -Rustrazor\ Butcher=1 -Rustspore\ Ram=1 -Rustwing\ Falcon=1 -Ruthless\ Cullblade=1 -Ruthless\ Deathfang=1 -Ruthless\ Disposal=1 -Ruthless\ Instincts=1 -Ruthless\ Knave=1 -Ruthless\ Ripper=1 -Ruthless\ Sniper=1 -Ryusei,\ the\ Falling\ Star=1 -Saberclaw\ Golem=1 -Sabertooth\ Outrider=1 -Sabertooth\ Wyvern=1 -Sabretooth\ Tiger=1 -Sacellum\ Godspeaker=1 -Sacred\ Armory=1 -Sacred\ Excavation=1 -Sacred\ Ground=1 -Sacred\ Mesa=1 -Sacred\ Nectar=1 -Sacred\ Prey=1 -Sacred\ Rites=1 -Sacred\ Wolf=1 -Saddleback\ Lagac=1 -Sadistic\ Augermage=1 -Sadistic\ Skymarcher=1 -Safe\ Passage=1 -Safeguard=1 -Safehold\ Sentry=1 -Safewright\ Quest=1 -Saffi\ Eriksdotter=1 -Sage's\ Dousing=1 -Sage's\ Row\ Denizen=1 -Sage-Eye\ Avengers=1 -Sage-Eye\ Harrier=1 -Sage\ Aven=1 -Sage\ Owl=1 -Sage\ of\ Ancient\ Lore=1 -Sage\ of\ Lat-Nam=1 -Sage\ of\ Shaila's\ Claim=1 -Sage\ of\ the\ Inward\ Eye=1 -Sages\ of\ the\ Anima=1 -Sagu\ Archer=1 -Sagu\ Mauler=1 -Saheeli's\ Artistry=1 -Sailmonger=1 -Sailor\ of\ Means=1 -Sakiko,\ Mother\ of\ Summer=1 -Sakura-Tribe\ Springcaller=1 -Salivating\ Gremlins=1 -Salt\ Flats=1 -Salt\ Marsh=1 -Salt\ Road\ Ambushers=1 -Salt\ Road\ Patrol=1 -Salt\ Road\ Quartermasters=1 -Saltblast=1 -Saltcrusted\ Steppe=1 -Saltfield\ Recluse=1 -Saltskitter=1 -Salvage\ Drone=1 -Salvage\ Scout=1 -Salvage\ Scuttler=1 -Salvage\ Slasher=1 -Salvage\ Titan=1 -Salvager\ of\ Secrets=1 -Salvaging\ Station=1 -Samite\ Archer=1 -Samite\ Blessing=1 -Samite\ Censer-Bearer=1 -Samite\ Healer=1 -Samite\ Ministration=1 -Samite\ Pilgrim=1 -Samite\ Sanctuary=1 -Samurai\ of\ the\ Pale\ Curtain=1 -Sanctified\ Charge=1 -Sanctifier\ of\ Souls=1 -Sanctuary\ Cat=1 -Sanctum\ Gargoyle=1 -Sanctum\ Guardian=1 -Sanctum\ Plowbeast=1 -Sanctum\ Spirit=1 -Sand\ Golem=1 -Sand\ Strangler=1 -Sandbar\ Merfolk=1 -Sandbar\ Serpent=1 -Sandblast=1 -Sandcrafter\ Mage=1 -Sands\ of\ Delirium=1 -Sandskin=1 -Sandsower=1 -Sandsteppe\ Citadel=1 -Sandsteppe\ Outcast=1 -Sandsteppe\ Scavenger=1 -Sandstone\ Bridge=1 -Sandstone\ Deadfall=1 -Sandstone\ Warrior=1 -Sandstorm\ Eidolon=1 -Sandwurm\ Convergence=1 -Sangromancer=1 -Sanguimancy=1 -Sanguinary\ Mage=1 -Sanguine\ Glorifier=1 -Sanguine\ Guard=1 -Sanguine\ Praetor=1 -Sanguine\ Sacrament=1 -Sanitarium\ Skeleton=1 -Sanity\ Gnawers=1 -Sanity\ Grinding=1 -Sapphire\ Drake=1 -Sapphire\ Leech=1 -Saprazzan\ Legate=1 -Saprazzan\ Raider=1 -Saproling\ Burst=1 -Saproling\ Migration=1 -Sapseep\ Forest=1 -Sarcatog=1 -Sarcomancy=1 -Sarcomite\ Myr=1 -Sarkhan's\ Rage=1 -Sarpadian\ Empires,\ Vol.\ VII=1 -Saruli\ Gatekeepers=1 -Sasaya,\ Orochi\ Ascendant=1 -Satyr\ Firedancer=1 -Satyr\ Grovedancer=1 -Satyr\ Hedonist=1 -Satyr\ Nyx-Smith=1 -Satyr\ Piper=1 -Satyr\ Rambler=1 -Savage\ Alliance=1 -Savage\ Beating=1 -Savage\ Conception=1 -Savage\ Gorilla=1 -Savage\ Knuckleblade=1 -Savage\ Punch=1 -Savage\ Silhouette=1 -Savage\ Stomp=1 -Savage\ Surge=1 -Savage\ Thallid=1 -Savage\ Twister=1 -Saving\ Grace=1 -Saving\ Grasp=1 -Savra,\ Queen\ of\ the\ Golgari=1 -Sawback\ Manticore=1 -Sawtooth\ Loon=1 -Sawtooth\ Ogre=1 -Sawtooth\ Thresher=1 -Scab-Clan\ Berserker=1 -Scab-Clan\ Mauler=1 -Scabland=1 -Scald=1 -Scalding\ Tongs=1 -Scaldkin=1 -Scale\ Blessing=1 -Scale\ of\ Chiss-Goria=1 -Scalebane's\ Elite=1 -Scaled\ Behemoth=1 -Scaled\ Hulk=1 -Scaleguard\ Sentinels=1 -Scalpelexis=1 -Scandalmonger=1 -Scapegoat=1 -Scar=1 -Scarab\ Feast=1 -Scarblade\ Elite=1 -Scarecrow=1 -Scarred\ Puma=1 -Scarred\ Vinebreeder=1 -Scars\ of\ the\ Veteran=1 -Scarscale\ Ritual=1 -Scarwood\ Bandits=1 -Scarwood\ Treefolk=1 -Scathe\ Zombies=1 -Scatter\ Arc=1 -Scatter\ the\ Seeds=1 -Scatter\ to\ the\ Winds=1 -Scattering\ Stroke=1 -Scattershot=1 -Scavenged\ Weaponry=1 -Scavenger\ Drake=1 -Scavenger\ Folk=1 -Scavenging\ Scarab=1 -Scent\ of\ Brine=1 -Scent\ of\ Jasmine=1 -Scent\ of\ Nightshade=1 -Scepter\ of\ Empires=1 -Scepter\ of\ Insight=1 -Schismotivate=1 -Scholar\ of\ Athreos=1 -Scholar\ of\ Stars=1 -School\ of\ Piranha=1 -Scion\ Summoner=1 -Scion\ of\ Glaciers=1 -Scion\ of\ Ugin=1 -Scion\ of\ Vitu-Ghazi=1 -Scion\ of\ the\ Wild=1 -Scorch\ the\ Fields=1 -Scorched\ Rusalka=1 -Scorching\ Lava=1 -Scorchwalker=1 -Scoria\ Elemental=1 -Scoria\ Wurm=1 -Scorned\ Villager=1 -Scornful\ Aether-Lich=1 -Scornful\ Egotist=1 -Scour=1 -Scour\ from\ Existence=1 -Scour\ the\ Laboratory=1 -Scoured\ Barrens=1 -Scourge\ Devil=1 -Scourge\ Servant=1 -Scourge\ Wolf=1 -Scourge\ of\ Geier\ Reach=1 -Scourge\ of\ Kher\ Ridges=1 -Scourge\ of\ Numai=1 -Scourge\ of\ Skola\ Vale=1 -Scourge\ of\ the\ Nobilis=1 -Scourgemark=1 -Scourglass=1 -Scouring\ Sands=1 -Scout's\ Warning=1 -Scout\ the\ Borders=1 -Scragnoth=1 -Scrambleverse=1 -Scrapbasket=1 -Scrapheap=1 -Scrapper\ Champion=1 -Scrapskin\ Drake=1 -Scrapyard\ Mongrel=1 -Scrapyard\ Salvo=1 -Screaming\ Fury=1 -Screaming\ Seahawk=1 -Screamreach\ Brawler=1 -Screams\ from\ Within=1 -Screams\ of\ the\ Damned=1 -Screeching\ Bat=1 -Screeching\ Drake=1 -Screeching\ Griffin=1 -Screeching\ Harpy=1 -Screeching\ Silcaw=1 -Screeching\ Skaab=1 -Screeching\ Sliver=1 -Scrib\ Nibblers=1 -Scribe\ of\ the\ Mindful=1 -Scrivener=1 -Scroll\ of\ Avacyn=1 -Scroll\ of\ Griselbrand=1 -Scroll\ of\ Origins=1 -Scrounge=1 -Scrounger\ of\ Souls=1 -Scrounging\ Bandar=1 -Scryb\ Ranger=1 -Scryb\ Sprites=1 -Scrying\ Glass=1 -Scute\ Mob=1 -Scuttlemutt=1 -Scuttling\ Death=1 -Scuttling\ Doom\ Engine=1 -Scuzzback\ Marauders=1 -Scuzzback\ Scrapper=1 -Scythe\ Leopard=1 -Scythe\ Tiger=1 -Scythe\ of\ the\ Wretched=1 -Sea\ Drake=1 -Sea\ Gate\ Loremaster=1 -Sea\ Gate\ Wreckage=1 -Sea\ God's\ Revenge=1 -Sea\ Legs=1 -Sea\ Monster=1 -Sea\ Scryer=1 -Sea\ Serpent=1 -Sea\ Snidd=1 -Sea\ Sprite=1 -Seacoast\ Drake=1 -Seagraf\ Skaab=1 -Seal\ of\ Cleansing=1 -Seal\ of\ Doom=1 -Seal\ of\ Primordium=1 -Seal\ of\ Strength=1 -Sealed\ Fate=1 -Sealock\ Monster=1 -Search\ Warrant=1 -Search\ the\ City=1 -Searing\ Flesh=1 -Searing\ Light=1 -Searing\ Meditation=1 -Searing\ Rays=1 -Searing\ Spear=1 -Searing\ Touch=1 -Searing\ Wind=1 -Seascape\ Aerialist=1 -Seashell\ Cameo=1 -Seaside\ Citadel=1 -Seaside\ Haven=1 -Seasinger=1 -Seasoned\ Marshal=1 -Second\ Guess=1 -Second\ Harvest=1 -Second\ Sunrise=1 -Second\ Wind=1 -Secret\ Plans=1 -Secret\ Salvage=1 -Secretkeeper=1 -Secrets\ of\ the\ Golden\ City=1 -Security\ Detail=1 -Sedge\ Scorpion=1 -Sedge\ Troll=1 -Sedraxis\ Alchemist=1 -Sedraxis\ Specter=1 -See\ Beyond=1 -See\ Red=1 -Seed\ Guardian=1 -Seed\ Spark=1 -Seed\ the\ Land=1 -Seedcradle\ Witch=1 -Seedguide\ Ash=1 -Seeds\ of\ Strength=1 -Seek\ the\ Horizon=1 -Seek\ the\ Wilds=1 -Seeker\ of\ Insight=1 -Seekers'\ Squire=1 -Seer's\ Lantern=1 -Seer's\ Sundial=1 -Seer\ of\ the\ Last\ Tomorrow=1 -Seething\ Pathblazer=1 -Segmented\ Krotiq=1 -Seismic\ Elemental=1 -Seismic\ Rupture=1 -Seismic\ Shift=1 -Seismic\ Spike=1 -Seismic\ Stomp=1 -Seismic\ Strike=1 -Seizan,\ Perverter\ of\ Truth=1 -Seize\ the\ Soul=1 -Sejiri\ Merfolk=1 -Sek'Kuar,\ Deathkeeper=1 -Select\ for\ Inspection=1 -Selective\ Memory=1 -Selesnya\ Charm=1 -Selesnya\ Cluestone=1 -Selesnya\ Evangel=1 -Selesnya\ Guildgate=1 -Selesnya\ Guildmage=1 -Selesnya\ Keyrune=1 -Selesnya\ Sagittars=1 -Selesnya\ Sanctuary=1 -Selesnya\ Signet=1 -Self-Assembler=1 -Self-Inflicted\ Wound=1 -Selfless\ Cathar=1 -Selfless\ Exorcist=1 -Selhoff\ Occultist=1 -Selkie\ Hedge-Mage=1 -Sell-Sword\ Brute=1 -Seller\ of\ Songbirds=1 -Selvala,\ Explorer\ Returned=1 -Send\ to\ Sleep=1 -Sengir\ Autocrat=1 -Sengir\ Nosferatu=1 -Sengir\ Vampire=1 -Sensation\ Gorger=1 -Sensei\ Golden-Tail=1 -Senseless\ Rage=1 -Sensor\ Splicer=1 -Sentinel\ Spider=1 -Sentinel\ of\ the\ Eternal\ Watch=1 -Sentinel\ of\ the\ Pearl\ Trident=1 -Sentinels\ of\ Glen\ Elendra=1 -Sentry\ of\ the\ Underworld=1 -Separatist\ Voidmage=1 -Septic\ Rats=1 -Sepulchral\ Primordial=1 -Sequestered\ Stash=1 -Seraph\ of\ the\ Masses=1 -Seraph\ of\ the\ Suns=1 -Serendib\ Efreet=1 -Serendib\ Sorcerer=1 -Serene\ Offering=1 -Serene\ Remembrance=1 -Serene\ Steward=1 -Serene\ Sunset=1 -Sergeant-at-Arms=1 -Serpent\ Skin=1 -Serpent\ Warrior=1 -Serpentine\ Kavu=1 -Serpentine\ Spike=1 -Serra's\ Blessing=1 -Serra's\ Boon=1 -Serra's\ Embrace=1 -Serra's\ Hymn=1 -Serra\ Advocate=1 -Serra\ Angel=1 -Serra\ Avenger=1 -Serra\ Aviary=1 -Serra\ Bestiary=1 -Serra\ Disciple=1 -Serra\ Sphinx=1 -Serra\ Zealot=1 -Serrated\ Biskelion=1 -Serum\ Raker=1 -Serum\ Tank=1 -Servant\ of\ Nefarox=1 -Servant\ of\ Tymaret=1 -Servant\ of\ Volrath=1 -Servo\ Exhibition=1 -Servo\ Schematic=1 -Seshiro\ the\ Anointed=1 -Set\ Adrift=1 -Setessan\ Battle\ Priest=1 -Setessan\ Griffin=1 -Setessan\ Oathsworn=1 -Setessan\ Starbreaker=1 -Setessan\ Tactics=1 -Seton's\ Desire=1 -Seton's\ Scout=1 -Settle\ the\ Score=1 -Sever\ Soul=1 -Sever\ the\ Bloodline=1 -Severed\ Legion=1 -Sewer\ Rats=1 -Sewer\ Shambler=1 -Sewerdreg=1 -Sewn-Eye\ Drake=1 -Shackles=1 -Shade's\ Breath=1 -Shade's\ Form=1 -Shade\ of\ Trokair=1 -Shadow\ Alley\ Denizen=1 -Shadow\ Glider=1 -Shadow\ Guildmage=1 -Shadow\ Rider=1 -Shadow\ Slice=1 -Shadow\ Sliver=1 -Shadow\ of\ the\ Grave=1 -Shadowblood\ Egg=1 -Shadowcloak\ Vampire=1 -Shadowed\ Caravel=1 -Shadowfeed=1 -Shadowmage\ Infiltrator=1 -Shadows\ of\ the\ Past=1 -Shadowstorm=1 -Shadowstorm\ Vizier=1 -Shake\ the\ Foundations=1 -Shaleskin\ Bruiser=1 -Shaleskin\ Plower=1 -Shaman's\ Trance=1 -Shaman\ of\ Spring=1 -Shamble\ Back=1 -Shambleshark=1 -Shambling\ Attendants=1 -Shambling\ Ghoul=1 -Shambling\ Remains=1 -Shambling\ Shell=1 -Shambling\ Strider=1 -Shambling\ Swarm=1 -Shanna,\ Sisay's\ Legacy=1 -Shanodin\ Dryads=1 -Shape\ Anew=1 -Shape\ Stealer=1 -Shape\ the\ Sands=1 -Shaper\ Apprentice=1 -Shaper\ Guildmage=1 -Shapers\ of\ Nature=1 -Shapeshifter's\ Marrow=1 -Shard\ Convergence=1 -Shard\ Phoenix=1 -Shard\ of\ Broken\ Glass=1 -Sharding\ Sphinx=1 -Shared\ Discovery=1 -Shared\ Fate=1 -Sharpened\ Pitchfork=1 -Shatter=1 -Shattered\ Angel=1 -Shattered\ Crypt=1 -Shattered\ Dreams=1 -Shattered\ Perception=1 -Shattering\ Blow=1 -Shatterskull\ Giant=1 -Shatterskull\ Recruit=1 -Shauku's\ Minion=1 -Shed\ Weakness=1 -Sheer\ Drop=1 -Shefet\ Monitor=1 -Shell\ Skulkin=1 -Shell\ of\ the\ Last\ Kappa=1 -Shelter=1 -Sheltered\ Aerie=1 -Sheltering\ Light=1 -Shield\ Bearer=1 -Shield\ Dancer=1 -Shield\ Wall=1 -Shield\ of\ the\ Ages=1 -Shield\ of\ the\ Avatar=1 -Shield\ of\ the\ Oversoul=1 -Shield\ of\ the\ Realm=1 -Shield\ of\ the\ Righteous=1 -Shielded\ Aether\ Thief=1 -Shielded\ Passage=1 -Shieldhide\ Dragon=1 -Shielding\ Plax=1 -Shieldmage\ Elder=1 -Shields\ of\ Velis\ Vel=1 -Shifting\ Borders=1 -Shifting\ Sky=1 -Shimatsu\ the\ Bloodcloaked=1 -Shimian\ Specter=1 -Shimmering\ Barrier=1 -Shimmering\ Efreet=1 -Shimmering\ Glasskite=1 -Shimmering\ Grotto=1 -Shimmering\ Mirage=1 -Shimmering\ Wings=1 -Shimmerscale\ Drake=1 -Shinen\ of\ Life's\ Roar=1 -Shinewend=1 -Shining\ Aerosaur=1 -Shinka\ Gatekeeper=1 -Shipbreaker\ Kraken=1 -Shipwreck\ Looter=1 -Shipwreck\ Moray=1 -Shipwreck\ Singer=1 -Shirei,\ Shizo's\ Caretaker=1 -Shisato,\ Whispering\ Hunter=1 -Shiv's\ Embrace=1 -Shivan\ Dragon=1 -Shivan\ Emissary=1 -Shivan\ Hellkite=1 -Shivan\ Meteor=1 -Shivan\ Oasis=1 -Shivan\ Phoenix=1 -Shivan\ Raptor=1 -Shivan\ Sand-Mage=1 -Shivan\ Wumpus=1 -Shivan\ Wurm=1 -Shizuko,\ Caller\ of\ Autumn=1 -Shoal\ Serpent=1 -Shock=1 -Shockmaw\ Dragon=1 -Shore\ Keeper=1 -Shore\ Snapper=1 -Shorecrasher\ Mimic=1 -Shoreline\ Raider=1 -Shoreline\ Ranger=1 -Short\ Sword=1 -Shoulder\ to\ Shoulder=1 -Shoving\ Match=1 -Shower\ of\ Coals=1 -Shower\ of\ Sparks=1 -Showstopper=1 -Shrapnel\ Blast=1 -Shredding\ Winds=1 -Shreds\ of\ Sanity=1 -Shrewd\ Hatchling=1 -Shrewd\ Negotiation=1 -Shriek\ Raptor=1 -Shriek\ of\ Dread=1 -Shriekgeist=1 -Shriekhorn=1 -Shrike\ Harpy=1 -Shrill\ Howler=1 -Shrine\ of\ Boundless\ Growth=1 -Shrine\ of\ Limitless\ Power=1 -Shrine\ of\ Loyal\ Legions=1 -Shrine\ of\ Piercing\ Vision=1 -Shrine\ of\ the\ Forsaken\ Gods=1 -Shrink=1 -Shriveling\ Rot=1 -Shrouded\ Lore=1 -Shu\ Cavalry=1 -Shu\ Elite\ Companions=1 -Shu\ Soldier-Farmers=1 -Shuriken=1 -Shyft=1 -Sibilant\ Spirit=1 -Sibsig\ Icebreakers=1 -Sicken=1 -Sickening\ Dreams=1 -Sickle\ Ripper=1 -Sickleslicer=1 -Sideswipe=1 -Sidewinder\ Naga=1 -Sidisi's\ Pet=1 -Siege\ Dragon=1 -Siege\ Mastodon=1 -Siege\ Modification=1 -Siege\ Wurm=1 -Siege\ of\ Towers=1 -Siegebreaker\ Giant=1 -Sift=1 -Sift\ Through\ Sands=1 -Sifter\ of\ Skulls=1 -Sigarda's\ Aid=1 -Sigardian\ Priest=1 -Sight\ Beyond\ Sight=1 -Sight\ of\ the\ Scalelords=1 -Sighted-Caste\ Sorcerer=1 -Sightless\ Brawler=1 -Sightless\ Ghoul=1 -Sigil\ Blessing=1 -Sigil\ Captain=1 -Sigil\ Tracer=1 -Sigil\ of\ Distinction=1 -Sigil\ of\ Valor=1 -Sigil\ of\ the\ Empty\ Throne=1 -Sigil\ of\ the\ Nayan\ Gods=1 -Sigiled\ Behemoth=1 -Sigiled\ Skink=1 -Sigiled\ Starfish=1 -Signal\ the\ Clans=1 -Silburlind\ Snapper=1 -Silence\ the\ Believers=1 -Silent-Chant\ Zubera=1 -Silent\ Artisan=1 -Silent\ Departure=1 -Silent\ Observer=1 -Silent\ Sentinel=1 -Silent\ Skimmer=1 -Silhana\ Starfletcher=1 -Silk\ Net=1 -Silkbind\ Faerie=1 -Silkenfist\ Fighter=1 -Silkenfist\ Order=1 -Silklash\ Spider=1 -Silkweaver\ Elite=1 -Silt\ Crawler=1 -Silumgar\ Assassin=1 -Silumgar\ Butcher=1 -Silumgar\ Monument=1 -Silumgar\ Sorcerer=1 -Silumgar\ Spell-Eater=1 -Silver-Inlaid\ Dagger=1 -Silver\ Myr=1 -Silver\ Seraph=1 -Silver\ Wyvern=1 -Silverback\ Ape=1 -Silverchase\ Fox=1 -Silverclad\ Ferocidons=1 -Silvercoat\ Lion=1 -Silverfur\ Partisan=1 -Silvergill\ Douser=1 -Silverskin\ Armor=1 -Silverstorm\ Samurai=1 -Silverstrike=1 -Silvos,\ Rogue\ Elemental=1 -Simian\ Brawler=1 -Simian\ Grunts=1 -Simic\ Basilisk=1 -Simic\ Cluestone=1 -Simic\ Fluxmage=1 -Simic\ Guildgate=1 -Simic\ Guildmage=1 -Simic\ Initiate=1 -Simic\ Keyrune=1 -Simic\ Manipulator=1 -Simic\ Ragworm=1 -Simic\ Sky\ Swallower=1 -Simoon=1 -Sin\ Prodder=1 -Sindbad=1 -Singe-Mind\ Ogre=1 -Singe=1 -Singing\ Bell\ Strike=1 -Singing\ Tree=1 -Sinister\ Concoction=1 -Sinister\ Possession=1 -Sinister\ Strength=1 -Sink\ into\ Takenuma=1 -Sinking\ Feeling=1 -Sins\ of\ the\ Past=1 -Sinuous\ Striker=1 -Sir\ Shandlar\ of\ Eberyn=1 -Sire\ of\ Insanity=1 -Siren's\ Ruse=1 -Siren\ Lookout=1 -Siren\ Reaver=1 -Siren\ Song\ Lyre=1 -Siren\ of\ the\ Fanged\ Coast=1 -Siren\ of\ the\ Silent\ Song=1 -Sisay's\ Ingenuity=1 -Sisay's\ Ring=1 -Sisters\ of\ Stone\ Death=1 -Sivitri\ Scarzam=1 -Sixth\ Sense=1 -Skaab\ Goliath=1 -Skarrg,\ the\ Rage\ Pits=1 -Skarrg\ Goliath=1 -Skarrg\ Guildmage=1 -Skarrgan\ Firebird=1 -Skarrgan\ Skybreaker=1 -Skeletal\ Changeling=1 -Skeletal\ Grimace=1 -Skeletal\ Kathari=1 -Skeletal\ Vampire=1 -Skeletal\ Wurm=1 -Skeleton\ Archer=1 -Skeleton\ Key=1 -Skeleton\ Scavengers=1 -Skeleton\ Shard=1 -Skeletonize=1 -Skill\ Borrower=1 -Skillful\ Lunge=1 -Skin\ Invasion=1 -Skinbrand\ Goblin=1 -Skinrender=1 -Skinshifter=1 -Skinthinner=1 -Skinwing=1 -Skirge\ Familiar=1 -Skirk\ Alarmist=1 -Skirk\ Drill\ Sergeant=1 -Skirk\ Outrider=1 -Skirk\ Prospector=1 -Skirk\ Ridge\ Exhumer=1 -Skirk\ Shaman=1 -Skirk\ Volcanist=1 -Skirsdag\ Flayer=1 -Skirsdag\ High\ Priest=1 -Skirsdag\ Supplicant=1 -Skitter\ of\ Lizards=1 -Skittering\ Heartstopper=1 -Skittering\ Horror=1 -Skittering\ Invasion=1 -Skittering\ Monstrosity=1 -Skittering\ Skirge=1 -Skittering\ Surveyor=1 -Skitterskin=1 -Skittish\ Kavu=1 -Skittish\ Valesk=1 -Skizzik=1 -Skulduggery=1 -Skulking\ Ghost=1 -Skulking\ Knight=1 -Skull\ Collector=1 -Skull\ Rend=1 -Skull\ of\ Orm=1 -Skullcage=1 -Skullmead\ Cauldron=1 -Skullmulcher=1 -Skullsnatcher=1 -Skulltap=1 -Sky\ Ruin\ Drake=1 -Sky\ Scourer=1 -Sky\ Skiff=1 -Sky\ Spirit=1 -Sky\ Swallower=1 -Sky\ Terror=1 -Skybind=1 -Skyblade\ of\ the\ Legion=1 -Skyblinder\ Staff=1 -Skycloud\ Egg=1 -Skygames=1 -Skyhunter\ Cub=1 -Skyhunter\ Prowler=1 -Skyhunter\ Skirmisher=1 -Skyknight\ Legionnaire=1 -Skylasher=1 -Skyline\ Cascade=1 -Skyline\ Predator=1 -Skymarch\ Bloodletter=1 -Skymarcher\ Aspirant=1 -Skymark\ Roc=1 -Skyraker\ Giant=1 -Skyreach\ Manta=1 -Skyreaping=1 -Skyrider\ Elf=1 -Skyrider\ Trainee=1 -Skyscribing=1 -Skyshaper=1 -Skyship\ Plunderer=1 -Skyship\ Stalker=1 -Skyshooter=1 -Skyshroud\ Archer=1 -Skyshroud\ Blessing=1 -Skyshroud\ Condor=1 -Skyshroud\ Elf=1 -Skyshroud\ Elite=1 -Skyshroud\ Forest=1 -Skyshroud\ Ranger=1 -Skyshroud\ Sentinel=1 -Skyshroud\ Vampire=1 -Skyshroud\ War\ Beast=1 -Skysnare\ Spider=1 -Skyspear\ Cavalry=1 -Skyswirl\ Harrier=1 -Skyward\ Eye\ Prophets=1 -Skywatcher\ Adept=1 -Skywhaler's\ Shot=1 -Skywinder\ Drake=1 -Skywing\ Aven=1 -Skywise\ Teachings=1 -Slab\ Hammer=1 -Slag\ Fiend=1 -Slagwurm\ Armor=1 -Slash\ Panther=1 -Slash\ of\ Talons=1 -Slashing\ Tiger=1 -Slate\ Street\ Ruffian=1 -Slaughter=1 -Slaughter\ Cry=1 -Slaughter\ Drone=1 -Slaughterhorn=1 -Slaughterhouse\ Bouncer=1 -Slave\ of\ Bolas=1 -Slavering\ Nulls=1 -Slay=1 -Slayer's\ Cleaver=1 -Slayer's\ Plate=1 -Slayer\ of\ the\ Wicked=1 -Sleek\ Schooner=1 -Sleep=1 -Sleep\ Paralysis=1 -Sleeper's\ Robe=1 -Sleeper\ Agent=1 -Sleeping\ Potion=1 -Slice\ and\ Dice=1 -Slice\ in\ Twain=1 -Slime\ Molding=1 -Slimefoot,\ the\ Stowaway=1 -Slimy\ Kavu=1 -Slingbow\ Trap=1 -Slingshot\ Goblin=1 -Slinking\ Serpent=1 -Slinking\ Skirge=1 -Slinn\ Voda,\ the\ Rising\ Deep=1 -Slip\ Through\ Space=1 -Slippery\ Scoundrel=1 -Slipstream\ Eel=1 -Slipstream\ Serpent=1 -Sliptide\ Serpent=1 -Slith\ Ascendant=1 -Slith\ Bloodletter=1 -Slith\ Firewalker=1 -Slith\ Predator=1 -Slith\ Strider=1 -Slither\ Blade=1 -Slitherhead=1 -Slithering\ Shade=1 -Slithermuse=1 -Slithery\ Stalker=1 -Sliver\ Construct=1 -Sliversmith=1 -Slobad,\ Goblin\ Tinkerer=1 -Slow\ Motion=1 -Sludge\ Crawler=1 -Sludge\ Strider=1 -Sluggishness=1 -Sluiceway\ Scorpion=1 -Slum\ Reaper=1 -Slumbering\ Dragon=1 -Slumbering\ Tora=1 -Sly\ Requisitioner=1 -Smash=1 -Smash\ to\ Smithereens=1 -Smelt-Ward\ Gatekeepers=1 -Smelt=1 -Smite=1 -Smite\ the\ Monstrous=1 -Smogsteed\ Rider=1 -Smoke\ Teller=1 -Smokebraider=1 -Smokespew\ Invoker=1 -Smolder\ Initiate=1 -Smoldering\ Efreet=1 -Smoldering\ Spires=1 -Smoldering\ Tar=1 -Smoldering\ Werewolf=1 -Smother=1 -Smothering\ Abomination=1 -Snake\ Cult\ Initiation=1 -Snake\ Umbra=1 -Snake\ of\ the\ Golden\ Grove=1 -Snapback=1 -Snapping\ Drake=1 -Snapping\ Gnarlid=1 -Snapping\ Sailback=1 -Snapping\ Thragg=1 -Snare\ Thopter=1 -Sneaky\ Homunculus=1 -Snorting\ Gahr=1 -Snowhorn\ Rider=1 -Snubhorn\ Sentry=1 -Soar=1 -Soaring\ Hope=1 -Soaring\ Seacliff=1 -Soilshaper=1 -Sokenzan\ Renegade=1 -Sokenzan\ Spellblade=1 -Sol'kanar\ the\ Swamp\ King=1 -Solar\ Tide=1 -Solarion=1 -Soldevi\ Digger=1 -Soldevi\ Golem=1 -Soldevi\ Machinist=1 -Soldevi\ Simulacrum=1 -Soldier\ of\ the\ Pantheon=1 -Solemn\ Offering=1 -Solemn\ Recruit=1 -Solfatara=1 -Solidarity=1 -Solitary\ Camel=1 -Solitary\ Hunter=1 -Soliton=1 -Soltari\ Champion=1 -Soltari\ Crusader=1 -Soltari\ Lancer=1 -Soltari\ Monk=1 -Soltari\ Priest=1 -Soltari\ Trooper=1 -Somber\ Hoverguard=1 -Somberwald\ Alpha=1 -Somberwald\ Spider=1 -Somberwald\ Stag=1 -Somnomancer=1 -Somnophore=1 -Song\ of\ Serenity=1 -Songstitcher=1 -Sonic\ Seizure=1 -Soot\ Imp=1 -Sootfeather\ Flock=1 -Sootstoke\ Kindler=1 -Sophic\ Centaur=1 -Soramaro,\ First\ to\ Dream=1 -Soratami\ Cloud\ Chariot=1 -Soratami\ Cloudskater=1 -Soratami\ Mindsweeper=1 -Soratami\ Mirror-Guard=1 -Soratami\ Mirror-Mage=1 -Soratami\ Rainshaper=1 -Soratami\ Savant=1 -Soratami\ Seer=1 -Sorcerer's\ Strongbox=1 -Sorcerer's\ Wand=1 -Sorin's\ Thirst=1 -Sorin's\ Vengeance=1 -Sorrow's\ Path=1 -Sosuke's\ Summons=1 -Sosuke,\ Son\ of\ Seshiro=1 -Soul's\ Fire=1 -Soul's\ Grace=1 -Soul's\ Might=1 -Soul\ Channeling=1 -Soul\ Collector=1 -Soul\ Conduit=1 -Soul\ Exchange=1 -Soul\ Feast=1 -Soul\ Foundry=1 -Soul\ Kiss=1 -Soul\ Link=1 -Soul\ Manipulation=1 -Soul\ Net=1 -Soul\ Nova=1 -Soul\ Ransom=1 -Soul\ Rend=1 -Soul\ Salvage=1 -Soul\ Seizer=1 -Soul\ Separator=1 -Soul\ Shepherd=1 -Soul\ Shred=1 -Soul\ Stair\ Expedition=1 -Soul\ Swallower=1 -Soul\ Tithe=1 -Soul\ of\ Magma=1 -Soul\ of\ the\ Rapids=1 -Soulblade\ Djinn=1 -Soulblast=1 -Soulbright\ Flamekin=1 -Soulcage\ Fiend=1 -Soulcatcher=1 -Soulcatchers'\ Aerie=1 -Souldrinker=1 -Soulgorger\ Orgg=1 -Soulless\ Revival=1 -Soulmender=1 -Soulquake=1 -Souls\ of\ the\ Faultless=1 -Soulstinger=1 -Soulsworn\ Jury=1 -Soulsworn\ Spirit=1 -Soultether\ Golem=1 -Southern\ Paladin=1 -Sowing\ Salt=1 -Spare\ from\ Evil=1 -Spark\ Jolt=1 -Spark\ Mage=1 -Spark\ Spray=1 -Spark\ Trooper=1 -Spark\ of\ Creativity=1 -Sparkmage's\ Gambit=1 -Sparkspitter=1 -Sparktongue\ Dragon=1 -Sparring\ Construct=1 -Sparring\ Golem=1 -Sparring\ Mummy=1 -Spatial\ Binding=1 -Spawn\ of\ Thraxes=1 -Spawnbinder\ Mage=1 -Spawnbroker=1 -Spawning\ Bed=1 -Spawning\ Breath=1 -Spawnsire\ of\ Ulamog=1 -Spear\ of\ Heliod=1 -Spearbreaker\ Behemoth=1 -Spearpoint\ Oread=1 -Species\ Gorger=1 -Specter's\ Shroud=1 -Spectra\ Ward=1 -Spectral\ Bears=1 -Spectral\ Flight=1 -Spectral\ Force=1 -Spectral\ Guardian=1 -Spectral\ Prison=1 -Spectral\ Reserves=1 -Spectral\ Searchlight=1 -Spectral\ Shepherd=1 -Spectral\ Shield=1 -Spectral\ Shift=1 -Spectral\ Sliver=1 -Speedway\ Fanatic=1 -Spell\ Blast=1 -Spell\ Burst=1 -Spell\ Contortion=1 -Spell\ Rupture=1 -Spell\ Shrivel=1 -Spell\ Swindle=1 -Spell\ Syphon=1 -Spellbane\ Centaur=1 -Spellbinder=1 -Spellbook=1 -Spellbound\ Dragon=1 -Spellheart\ Chimera=1 -Spellshift=1 -Spelltithe\ Enforcer=1 -Spelltwine=1 -Spellweaver\ Eternal=1 -Spellweaver\ Helix=1 -Sphere\ of\ Duty=1 -Sphere\ of\ Grace=1 -Sphere\ of\ Purity=1 -Sphere\ of\ Reason=1 -Sphere\ of\ Truth=1 -Sphere\ of\ the\ Suns=1 -Sphinx's\ Disciple=1 -Sphinx's\ Herald=1 -Sphinx-Bone\ Wand=1 -Sphinx\ Summoner=1 -Sphinx\ of\ Jwar\ Isle=1 -Sphinx\ of\ Lost\ Truths=1 -Sphinx\ of\ Magosi=1 -Sphinx\ of\ Uthuun=1 -Sphinx\ of\ the\ Chimes=1 -Spider\ Climb=1 -Spider\ Spawning=1 -Spidery\ Grasp=1 -Spike-Tailed\ Ceratops=1 -Spike\ Breeder=1 -Spike\ Cannibal=1 -Spike\ Colony=1 -Spike\ Drone=1 -Spike\ Hatcher=1 -Spike\ Jester=1 -Spike\ Rogue=1 -Spike\ Soldier=1 -Spike\ Tiller=1 -Spike\ Worker=1 -Spikeshot\ Elder=1 -Spikeshot\ Goblin=1 -Spiketail\ Drakeling=1 -Spiketail\ Hatchling=1 -Spin\ Engine=1 -Spin\ into\ Myth=1 -Spinal\ Graft=1 -Spincrusher=1 -Spinebiter=1 -Spined\ Basher=1 -Spined\ Fluke=1 -Spined\ Sliver=1 -Spined\ Thopter=1 -Spined\ Wurm=1 -Spineless\ Thug=1 -Spiny\ Starfish=1 -Spiraling\ Duelist=1 -Spiraling\ Embers=1 -Spire\ Monitor=1 -Spire\ Owl=1 -Spire\ Patrol=1 -Spire\ Tracer=1 -Spire\ Winder=1 -Spireside\ Infiltrator=1 -Spirespine=1 -Spirit\ Away=1 -Spirit\ Bonds=1 -Spirit\ Cairn=1 -Spirit\ Flare=1 -Spirit\ Loop=1 -Spirit\ Mirror=1 -Spirit\ Shackle=1 -Spirit\ Weaver=1 -Spirit\ en-Dal=1 -Spirit\ en-Kor=1 -Spirit\ of\ the\ Hearth=1 -Spirit\ of\ the\ Hunt=1 -Spiritmonger=1 -Spiritual\ Visit=1 -Spiritualize=1 -Spite\ of\ Mogis=1 -Spitebellows=1 -Spiteflame\ Witch=1 -Spiteful\ Blow=1 -Spiteful\ Bully=1 -Spiteful\ Motives=1 -Spiteful\ Returned=1 -Spiteful\ Shadows=1 -Spitting\ Drake=1 -Spitting\ Earth=1 -Spitting\ Gourna=1 -Spitting\ Hydra=1 -Spitting\ Sliver=1 -Spitting\ Slug=1 -Spitting\ Spider=1 -Splatter\ Thug=1 -Splendid\ Agony=1 -Splendid\ Reclamation=1 -Splinterfright=1 -Split-Tail\ Miko=1 -Splitting\ Headache=1 -Splitting\ Slime=1 -Spoils\ of\ Victory=1 -Spontaneous\ Artist=1 -Spontaneous\ Combustion=1 -Spontaneous\ Mutation=1 -Spore\ Burst=1 -Spore\ Cloud=1 -Spore\ Swarm=1 -Sporeback\ Troll=1 -Sporecap\ Spider=1 -Sporecrown\ Thallid=1 -Sporesower\ Thallid=1 -Sporoloth\ Ancient=1 -Spotted\ Griffin=1 -Spread\ the\ Sickness=1 -Spreading\ Algae=1 -Spreading\ Flames=1 -Spreading\ Rot=1 -Spring\ Cleaning=1 -Springing\ Tiger=1 -Springsage\ Ritual=1 -Sprinting\ Warbrute=1 -Sprite\ Noble=1 -Sprout=1 -Sprouting\ Thrinax=1 -Spurnmage\ Advocate=1 -Spurred\ Wolverine=1 -Spy\ Network=1 -Squadron\ Hawk=1 -Squall=1 -Squall\ Drifter=1 -Squall\ Line=1 -Squeaking\ Pie\ Grubfellows=1 -Squeaking\ Pie\ Sneak=1 -Squealing\ Devil=1 -Squee's\ Toy=1 -Squee,\ the\ Immortal=1 -Squelch=1 -Squelching\ Leeches=1 -Squire's\ Devotion=1 -Squire=1 -Squirming\ Mass=1 -Stab\ Wound=1 -Stabilizer=1 -Staff\ of\ the\ Death\ Magus=1 -Staff\ of\ the\ Flame\ Magus=1 -Staff\ of\ the\ Mind\ Magus=1 -Staff\ of\ the\ Sun\ Magus=1 -Staff\ of\ the\ Wild\ Magus=1 -Stag\ Beetle=1 -Stalker\ Hag=1 -Stalking\ Assassin=1 -Stalking\ Bloodsucker=1 -Stalking\ Drone=1 -Stalking\ Stones=1 -Stalking\ Tiger=1 -Stalking\ Yeti=1 -Stalwart\ Aven=1 -Stalwart\ Shield-Bearers=1 -Stamina=1 -Stampede=1 -Stampeding\ Elk\ Herd=1 -Stampeding\ Horncrest=1 -Stampeding\ Rhino=1 -Stampeding\ Wildebeests=1 -Stand\ //\ Deliver=1 -Stand\ Firm=1 -Stand\ Together=1 -Standardize=1 -Standing\ Troops=1 -Stangg=1 -Star-Crowned\ Stag=1 -Star\ Compass=1 -Starlight=1 -Starlight\ Invoker=1 -Starlit\ Sanctum=1 -Start\ //\ Finish=1 -Start\ Your\ Engines=1 -Starved\ Rusalka=1 -Stasis\ Cell=1 -Stasis\ Cocoon=1 -Stasis\ Snare=1 -Statute\ of\ Denial=1 -Staunch-Hearted\ Warrior=1 -Staunch\ Defenders=1 -Stave\ Off=1 -Steadfast\ Armasaur=1 -Steadfast\ Cathar=1 -Steadfast\ Guard=1 -Steadfast\ Sentinel=1 -Steady\ Progress=1 -Steal\ Artifact=1 -Steal\ Strength=1 -Stealer\ of\ Secrets=1 -Steam\ Augury=1 -Steam\ Blast=1 -Steam\ Catapult=1 -Steam\ Spitter=1 -Steam\ Vines=1 -Steamclaw=1 -Steamcore\ Weird=1 -Steamflogger\ Boss=1 -Steel\ Golem=1 -Steel\ Leaf\ Paladin=1 -Steel\ Sabotage=1 -Steelclad\ Serpent=1 -Steeling\ Stance=1 -Steelshaper\ Apprentice=1 -Steeple\ Roc=1 -Stenchskipper=1 -Stensia\ Banquet=1 -Stensia\ Bloodhall=1 -Stensia\ Innkeeper=1 -Stensia\ Masquerade=1 -Steppe\ Glider=1 -Stern\ Constable=1 -Stern\ Judge=1 -Stern\ Mentor=1 -Stern\ Proctor=1 -Steward\ of\ Solidarity=1 -Steward\ of\ Valeron=1 -Still\ Life=1 -Stingerfling\ Spider=1 -Stinging\ Licid=1 -Stinging\ Shot=1 -Stingmoggie=1 -Stingscourger=1 -Stinkdrinker\ Daredevil=1 -Stir\ the\ Grave=1 -Stir\ the\ Pride=1 -Stir\ the\ Sands=1 -Stitch\ in\ Time=1 -Stitched\ Drake=1 -Stitched\ Mangler=1 -Stitcher's\ Apprentice=1 -Stitchwing\ Skaab=1 -Stoic\ Angel=1 -Stoic\ Builder=1 -Stoic\ Ephemera=1 -Stoic\ Rebuttal=1 -Stoke\ the\ Flames=1 -Stolen\ Goods=1 -Stolen\ Grain=1 -Stolen\ Identity=1 -Stomper\ Cub=1 -Stomping\ Slabs=1 -Stone-Seeder\ Hierophant=1 -Stone-Tongue\ Basilisk=1 -Stone\ Calendar=1 -Stone\ Giant=1 -Stone\ Haven\ Medic=1 -Stone\ Haven\ Outfitter=1 -Stone\ Idol\ Trap=1 -Stone\ Quarry=1 -Stone\ Spirit=1 -Stonebrow,\ Krosan\ Hero=1 -Stonecloaker=1 -Stoneforge\ Acolyte=1 -Stonefury=1 -Stonehands=1 -Stonehewer\ Giant=1 -Stoneshaker\ Shaman=1 -Stoneshock\ Giant=1 -Stonewise\ Fortifier=1 -Stonewood\ Invocation=1 -Stonework\ Puma=1 -Stonewright=1 -Stonybrook\ Angler=1 -Stonybrook\ Schoolmaster=1 -Storm\ Crow=1 -Storm\ Elemental=1 -Storm\ Entity=1 -Storm\ Fleet\ Aerialist=1 -Storm\ Fleet\ Arsonist=1 -Storm\ Fleet\ Pyromancer=1 -Storm\ Fleet\ Sprinter=1 -Storm\ Fleet\ Spy=1 -Storm\ Fleet\ Swashbuckler=1 -Storm\ Front=1 -Storm\ Herd=1 -Storm\ Sculptor=1 -Storm\ Seeker=1 -Storm\ Shaman=1 -Storm\ Spirit=1 -Storm\ the\ Vault=1 -Stormblood\ Berserker=1 -Stormchaser\ Chimera=1 -Stormfront\ Pegasus=1 -Stormfront\ Riders=1 -Stormrider\ Rig=1 -Stormrider\ Spirit=1 -Stormscale\ Anarch=1 -Stormscape\ Apprentice=1 -Stormscape\ Battlemage=1 -Stormscape\ Familiar=1 -Stormtide\ Leviathan=1 -Stormwatch\ Eagle=1 -Stormwing\ Dragon=1 -Strands\ of\ Night=1 -Strandwalker=1 -Strange\ Augmentation=1 -Strangling\ Soot=1 -Strangling\ Spores=1 -Strata\ Scythe=1 -Stratadon=1 -Stratozeppelid=1 -Stratus\ Walk=1 -Straw\ Golem=1 -Stream\ Hopper=1 -Stream\ of\ Consciousness=1 -Stream\ of\ Life=1 -Stream\ of\ Unconsciousness=1 -Streambed\ Aquitects=1 -Street\ Savvy=1 -Street\ Spasm=1 -Street\ Sweeper=1 -Streetbreaker\ Wurm=1 -Strength\ from\ the\ Fallen=1 -Strength\ in\ Numbers=1 -Strength\ of\ Arms=1 -Strength\ of\ Isolation=1 -Strength\ of\ Lunacy=1 -Strength\ of\ Night=1 -Strength\ of\ Unity=1 -Strength\ of\ the\ Pack=1 -Strength\ of\ the\ Tajuru=1 -Strider\ Harness=1 -Strip\ Bare=1 -Striped\ Riverwinder=1 -Stromkirk\ Mentor=1 -Stromkirk\ Noble=1 -Stromkirk\ Occultist=1 -Strongarm\ Monk=1 -Strongarm\ Tactics=1 -Strongarm\ Thug=1 -Stronghold\ Assassin=1 -Stronghold\ Biologist=1 -Stronghold\ Confessor=1 -Stronghold\ Discipline=1 -Stronghold\ Machinist=1 -Stronghold\ Overseer=1 -Stronghold\ Rats=1 -Stronghold\ Taskmaster=1 -Stronghold\ Zeppelin=1 -Structural\ Collapse=1 -Structural\ Distortion=1 -Struggle\ for\ Sanity=1 -Student\ of\ Elements=1 -Student\ of\ Ojutai=1 -Stuffy\ Doll=1 -Stun=1 -Stun\ Sniper=1 -Stunted\ Growth=1 -Stupefying\ Touch=1 -Sturdy\ Hatchling=1 -Sturmgeist=1 -Stymied\ Hopes=1 -Subjugator\ Angel=1 -Submerged\ Boneyard=1 -Subterranean\ Scout=1 -Subtle\ Strike=1 -Succumb\ to\ Temptation=1 -Sudden\ Death=1 -Sudden\ Disappearance=1 -Sudden\ Impact=1 -Sudden\ Spoiling=1 -Sudden\ Storm=1 -Sudden\ Strength=1 -Suffer\ the\ Past=1 -Suicidal\ Charge=1 -Sulam\ Djinn=1 -Sulfur\ Elemental=1 -Sulfuric\ Vapors=1 -Sulfurous\ Blast=1 -Sultai\ Ascendancy=1 -Sultai\ Banner=1 -Sultai\ Charm=1 -Sultai\ Flayer=1 -Sultai\ Scavenger=1 -Sultai\ Soothsayer=1 -Summary\ Dismissal=1 -Summit\ Apes=1 -Summit\ Prowler=1 -Summon\ the\ School=1 -Summoner's\ Bane=1 -Summoner's\ Egg=1 -Summoning\ Station=1 -Sun's\ Bounty=1 -Sun-Collared\ Raptor=1 -Sun-Crested\ Pterodon=1 -Sun-Crowned\ Hunters=1 -Sun\ Sentinel=1 -Sunastian\ Falconer=1 -Sunbeam\ Spellbomb=1 -Sunbird's\ Invocation=1 -Sunblade\ Elf=1 -Sunblast\ Angel=1 -Sunbond=1 -Sunbringer's\ Touch=1 -Suncrusher=1 -Sunder\ from\ Within=1 -Sundering\ Growth=1 -Sundering\ Vitae=1 -Sunfire\ Balm=1 -Sunflare\ Shaman=1 -Sunforger=1 -Sungrace\ Pegasus=1 -Sungrass\ Egg=1 -Sunhome\ Enforcer=1 -Sunhome\ Guildmage=1 -Sunken\ City=1 -Sunken\ Hope=1 -Sunlance=1 -Sunrise\ Seeker=1 -Sunrise\ Sovereign=1 -Sunscape\ Apprentice=1 -Sunscorched\ Desert=1 -Sunseed\ Nurturer=1 -Sunset\ Pyramid=1 -Sunspear\ Shikari=1 -Sunspire\ Gatekeepers=1 -Sunspire\ Griffin=1 -Sunspring\ Expedition=1 -Sunstrike\ Legionnaire=1 -Suntail\ Hawk=1 -Suntouched\ Myr=1 -Sunweb=1 -Superior\ Numbers=1 -Supernatural\ Stamina=1 -Supply\ //\ Demand=1 -Supply\ Caravan=1 -Suppress=1 -Suppression\ Bonds=1 -Supreme\ Exemplar=1 -Supreme\ Inquisitor=1 -Suq'Ata\ Assassin=1 -Suq'Ata\ Lancer=1 -Sure\ Strike=1 -Surestrike\ Trident=1 -Surge\ Node=1 -Surge\ of\ Righteousness=1 -Surge\ of\ Thoughtweft=1 -Surge\ of\ Zeal=1 -Surgespanner=1 -Surging\ Flame=1 -Surging\ Might=1 -Surging\ Sentinels=1 -Surprise\ Deployment=1 -Surrakar\ Banisher=1 -Surrakar\ Spellblade=1 -Surreal\ Memoir=1 -Surveilling\ Sprite=1 -Survey\ the\ Wreckage=1 -Survival\ Cache=1 -Survive\ the\ Night=1 -Survivor\ of\ the\ Unseen=1 -Survivors'\ Encampment=1 -Suspension\ Field=1 -Suture\ Spirit=1 -Sutured\ Ghoul=1 -Svogthos,\ the\ Restless\ Tomb=1 -Svyelunite\ Temple=1 -Swaggering\ Corsair=1 -Swallowing\ Plague=1 -Swamp=1 -Swamp\ Mosquito=1 -Swarm\ Intelligence=1 -Swarm\ Surge=1 -Swarm\ of\ Bloodflies=1 -Swarmborn\ Giant=1 -Swashbuckling=1 -Swat=1 -Sway\ of\ Illusion=1 -Sway\ of\ the\ Stars=1 -Sweatworks\ Brawler=1 -Sweep\ Away=1 -Swell\ of\ Courage=1 -Swell\ of\ Growth=1 -Swelter=1 -Swerve=1 -Swift\ Justice=1 -Swift\ Kick=1 -Swift\ Reckoning=1 -Swift\ Silence=1 -Swift\ Spinner=1 -Swift\ Warden=1 -Swift\ Warkite=1 -Swirl\ the\ Mists=1 -Swirling\ Spriggan=1 -Switcheroo=1 -Sword-Point\ Diplomacy=1 -Sword\ Dancer=1 -Swordwise\ Centaur=1 -Sworn\ Guardian=1 -Sygg,\ River\ Guide=1 -Sylvan\ Awakening=1 -Sylvan\ Basilisk=1 -Sylvan\ Bounty=1 -Sylvan\ Echoes=1 -Sylvan\ Messenger=1 -Sylvan\ Might=1 -Sylvan\ Primordial=1 -Sylvan\ Ranger=1 -Sylvok\ Explorer=1 -Sylvok\ Replica=1 -Symbiosis=1 -Symbiotic\ Deployment=1 -Symbiotic\ Wurm=1 -Synchronized\ Strike=1 -Synchronous\ Sliver=1 -Syncopate=1 -Syndic\ of\ Tithes=1 -Syndicate\ Enforcer=1 -Syndicate\ Trafficker=1 -Synod\ Artificer=1 -Synod\ Centurion=1 -Synod\ Sanctum=1 -Syphon\ Soul=1 -Szadek,\ Lord\ of\ Secrets=1 -Séance=1 -Tablet\ of\ Epityr=1 -Tablet\ of\ the\ Guilds=1 -Tah-Crop\ Elite=1 -Tah-Crop\ Skirmisher=1 -Tahngarth's\ Glare=1 -Tahngarth's\ Rage=1 -Taigam's\ Scheming=1 -Taigam's\ Strike=1 -Tail\ Slash=1 -Tainted\ Remedy=1 -Tainted\ Sigil=1 -Taj-Nar\ Swordsmith=1 -Tajic,\ Blade\ of\ the\ Legion=1 -Tajuru\ Archer=1 -Tajuru\ Beastmaster=1 -Tajuru\ Pathwarden=1 -Tajuru\ Preserver=1 -Tajuru\ Stalwart=1 -Tajuru\ Warcaller=1 -Take\ Down=1 -Take\ Inventory=1 -Take\ Possession=1 -Take\ Vengeance=1 -Take\ into\ Custody=1 -Takeno,\ Samurai\ General=1 -Takenuma\ Bleeder=1 -Takklemaggot=1 -Talas\ Researcher=1 -Talent\ of\ the\ Telepath=1 -Talisman\ of\ Impulse=1 -Talisman\ of\ Unity=1 -Talon\ Trooper=1 -Talon\ of\ Pain=1 -Talonrend=1 -Talrand's\ Invocation=1 -Talruum\ Champion=1 -Talruum\ Minotaur=1 -Talruum\ Piper=1 -Talus\ Paladin=1 -Tamiyo's\ Journal=1 -Tandem\ Lookout=1 -Tandem\ Tactics=1 -Tangle=1 -Tangle\ Angler=1 -Tangle\ Asp=1 -Tangle\ Golem=1 -Tangle\ Mantis=1 -Tangle\ Spider=1 -Tanglebloom=1 -Tangleclaw\ Werewolf=1 -Tangleroot=1 -Tanglesap=1 -Tanglewalker=1 -Tapestry\ of\ the\ Ages=1 -Tar\ Fiend=1 -Tar\ Pit\ Warrior=1 -Tasseled\ Dromedary=1 -Taste\ for\ Mayhem=1 -Tatsumasa,\ the\ Dragon's\ Fang=1 -Tattered\ Drake=1 -Tattered\ Haunter=1 -Tatterkite=1 -Tattermunge\ Duo=1 -Tattermunge\ Maniac=1 -Tattermunge\ Witch=1 -Tatyova,\ Benthic\ Druid=1 -Tawnos's\ Coffin=1 -Tawnos's\ Wand=1 -Teardrop\ Kami=1 -Tears\ of\ Valakut=1 -Tectonic\ Rift=1 -Teferi's\ Care=1 -Teferi's\ Honor\ Guard=1 -Tel-Jilad\ Archers=1 -Tel-Jilad\ Chosen=1 -Tel-Jilad\ Defiance=1 -Tel-Jilad\ Fallen=1 -Tel-Jilad\ Lifebreather=1 -Tel-Jilad\ Outrider=1 -Tel-Jilad\ Stylus=1 -Tel-Jilad\ Wolf=1 -Telekinetic\ Bonds=1 -Telekinetic\ Sliver=1 -Telemin\ Performance=1 -Telepathic\ Spies=1 -Telepathy=1 -Teleportal=1 -Telim'Tor's\ Darts=1 -Telim'Tor=1 -Teller\ of\ Tales=1 -Telling\ Time=1 -Temmet,\ Vizier\ of\ Naktamun=1 -Temper=1 -Tempest\ Caller=1 -Tempest\ Drake=1 -Tempest\ of\ Light=1 -Temple\ Acolyte=1 -Temple\ Altisaur=1 -Temporal\ Adept=1 -Temporal\ Cascade=1 -Temporal\ Distortion=1 -Temporal\ Fissure=1 -Temporal\ Isolation=1 -Tempting\ Licid=1 -Tempting\ Wurm=1 -Temur\ Ascendancy=1 -Temur\ Banner=1 -Temur\ Charger=1 -Temur\ Charm=1 -Tenacious\ Dead=1 -Tenacious\ Hunter=1 -Tenacity=1 -Teneb,\ the\ Harvester=1 -Tenement\ Crasher=1 -Tenza,\ Godo's\ Maul=1 -Tephraderm=1 -Terashi's\ Cry=1 -Terashi's\ Grasp=1 -Terashi's\ Verdict=1 -Teremko\ Griffin=1 -Teroh's\ Vanguard=1 -Terra\ Eternal=1 -Terra\ Stomper=1 -Terraformer=1 -Terrarion=1 -Territorial\ Baloth=1 -Territorial\ Gorger=1 -Territorial\ Hammerskull=1 -Terror=1 -Terror\ of\ the\ Fairgrounds=1 -Terrus\ Wurm=1 -Teshar,\ Ancestor's\ Apostle=1 -Test\ of\ Faith=1 -Testament\ of\ Faith=1 -Tethered\ Skirge=1 -Tethmos\ High\ Priest=1 -Tetsuko\ Umezawa,\ Fugitive=1 -Teysa,\ Envoy\ of\ Ghosts=1 -Tezzeret's\ Ambition=1 -Tezzeret's\ Gambit=1 -Tezzeret's\ Touch=1 -Thada\ Adel,\ Acquisitor=1 -Thalakos\ Drifters=1 -Thalakos\ Lowlands=1 -Thalakos\ Mistfolk=1 -Thalakos\ Seer=1 -Thalia's\ Lancers=1 -Thallid=1 -Thallid\ Germinator=1 -Thallid\ Omnivore=1 -Thallid\ Shell-Dweller=1 -Thallid\ Soothsayer=1 -Thassa's\ Bounty=1 -Thassa's\ Devourer=1 -Thassa's\ Emissary=1 -Thassa's\ Ire=1 -Thassa's\ Rebuff=1 -The\ First\ Eruption=1 -The\ Hive=1 -The\ Lady\ of\ the\ Mountain=1 -The\ Mending\ of\ Dominaria=1 -The\ Unspeakable=1 -The\ Wretched=1 -Theft\ of\ Dreams=1 -Thelonite\ Druid=1 -Thermal\ Flux=1 -Thermopod=1 -Thick-Skinned\ Goblin=1 -Thief\ of\ Hope=1 -Thieves'\ Fortune=1 -Thieving\ Magpie=1 -Thieving\ Sprite=1 -Thing\ from\ the\ Deep=1 -Think\ Tank=1 -Thirst=1 -Thirsting\ Axe=1 -Thistledown\ Duo=1 -Thopter\ Arrest=1 -Thopter\ Engineer=1 -Thopter\ Spy\ Network=1 -Thopter\ Squadron=1 -Thorn-Thrash\ Viashino=1 -Thorn\ Elemental=1 -Thornbite\ Staff=1 -Thornbow\ Archer=1 -Thorned\ Moloch=1 -Thornhide\ Wolves=1 -Thornscape\ Apprentice=1 -Thornscape\ Battlemage=1 -Thornscape\ Master=1 -Thorntooth\ Witch=1 -Thornweald\ Archer=1 -Thornwind\ Faeries=1 -Thornwood\ Falls=1 -Those\ Who\ Serve=1 -Thought\ Courier=1 -Thought\ Devourer=1 -Thought\ Dissector=1 -Thought\ Eater=1 -Thought\ Gorger=1 -Thought\ Harvester=1 -Thought\ Hemorrhage=1 -Thought\ Prison=1 -Thought\ Reflection=1 -Thoughtbind=1 -Thoughtbound\ Primoc=1 -Thoughtflare=1 -Thoughtleech=1 -Thoughtpicker\ Witch=1 -Thoughtrender\ Lamia=1 -Thoughts\ of\ Ruin=1 -Thousand-legged\ Kami=1 -Thousand\ Winds=1 -Thraben\ Foulbloods=1 -Thraben\ Gargoyle=1 -Thraben\ Sentry=1 -Thraben\ Standard\ Bearer=1 -Thran\ Forge=1 -Thran\ Foundry=1 -Thran\ Golem=1 -Thran\ Temporal\ Gateway=1 -Thran\ Weaponry=1 -Thrash\ of\ Raptors=1 -Thrashing\ Mossdog=1 -Threaten=1 -Three\ Dreams=1 -Thresher\ Lizard=1 -Thrill-Kill\ Assassin=1 -Thrill\ of\ the\ Hunt=1 -Thriss,\ Nantuko\ Primus=1 -Thrive=1 -Thriving\ Grubs=1 -Thriving\ Ibex=1 -Thriving\ Rats=1 -Thriving\ Rhino=1 -Thriving\ Turtle=1 -Throat\ Slitter=1 -Throne\ of\ Bone=1 -Throne\ of\ Empires=1 -Throne\ of\ the\ God-Pharaoh=1 -Throttle=1 -Throwing\ Knife=1 -Thrull\ Parasite=1 -Thrull\ Retainer=1 -Thrull\ Surgeon=1 -Thrummingbird=1 -Thumbscrews=1 -Thunder-Thrash\ Elder=1 -Thunder\ Brute=1 -Thunder\ Spirit=1 -Thunder\ Totem=1 -Thunder\ of\ Hooves=1 -Thunderblade\ Charge=1 -Thunderblust=1 -Thunderbolt=1 -Thunderclap\ Wyvern=1 -Thundercloud\ Elemental=1 -Thundercloud\ Shaman=1 -Thunderheads=1 -Thunderherd\ Migration=1 -Thundering\ Giant=1 -Thundering\ Spineback=1 -Thundering\ Tanadon=1 -Thundermare=1 -Thunderous\ Might=1 -Thunderscape\ Battlemage=1 -Thundersong\ Trumpeter=1 -Thunderstaff=1 -Tiana,\ Ship's\ Caretaker=1 -Tibor\ and\ Lumia=1 -Tidal\ Visionary=1 -Tidal\ Wave=1 -Tide\ Drifter=1 -Tide\ of\ War=1 -Tideforce\ Elemental=1 -Tidehollow\ Strix=1 -Tideshaper\ Mystic=1 -Tidewalker=1 -Tidewater\ Minion=1 -Tidings=1 -Tidy\ Conclusion=1 -Tiger\ Claws=1 -Tigereye\ Cameo=1 -Tightening\ Coils=1 -Tilonalli's\ Crown=1 -Tilonalli's\ Knight=1 -Tilonalli's\ Skinshifter=1 -Timber\ Gorge=1 -Timberland\ Ruins=1 -Timbermare=1 -Timbermaw\ Larva=1 -Timberpack\ Wolf=1 -Time\ Bomb=1 -Time\ Ebb=1 -Time\ Stop=1 -Time\ and\ Tide=1 -Time\ of\ Heroes=1 -Time\ of\ Ice=1 -Time\ to\ Feed=1 -Time\ to\ Reflect=1 -Timebender=1 -Timecrafting=1 -Timely\ Hordemate=1 -Timid\ Drake=1 -Tin-Wing\ Chimera=1 -Tine\ Shrike=1 -Tireless\ Missionaries=1 -Tishana's\ Wayfinder=1 -Titan's\ Presence=1 -Titan's\ Revenge=1 -Titan's\ Strength=1 -Titan\ Forge=1 -Titan\ of\ Eternal\ Fire=1 -Titania's\ Boon=1 -Titania's\ Chosen=1 -Titanic\ Bulvox=1 -Titanic\ Growth=1 -Titanic\ Ultimatum=1 -Titanium\ Golem=1 -Tivadar's\ Crusade=1 -Tivadar\ of\ Thorn=1 -To\ Arms!=1 -To\ the\ Slaughter=1 -Tobias\ Andrion=1 -Toil\ //\ Trouble=1 -Toil\ to\ Renown=1 -Toils\ of\ Night\ and\ Day=1 -Tolarian\ Drake=1 -Tolarian\ Emissary=1 -Tolarian\ Scholar=1 -Tolarian\ Sentinel=1 -Tolarian\ Serpent=1 -Tolsimir\ Wolfblood=1 -Tomb\ Robber=1 -Tomb\ of\ Urami=1 -Tomb\ of\ the\ Spirit\ Dragon=1 -Tome\ Scour=1 -Tomorrow,\ Azami's\ Familiar=1 -Toolcraft\ Exemplar=1 -Tooth\ Collector=1 -Tooth\ and\ Claw=1 -Tooth\ of\ Chiss-Goria=1 -Topan\ Ascetic=1 -Topan\ Freeblade=1 -Topplegeist=1 -Tor\ Wauki=1 -Torch\ Fiend=1 -Torch\ Gauntlet=1 -Torch\ Song=1 -Torchling=1 -Torgaar,\ Famine\ Incarnate=1 -Torment\ of\ Scarabs=1 -Torment\ of\ Venom=1 -Tormented\ Angel=1 -Tormented\ Hero=1 -Tormented\ Pariah=1 -Tormented\ Soul=1 -Tormented\ Thoughts=1 -Tormenting\ Voice=1 -Tormentor\ Exarch=1 -Tornado=1 -Tornado\ Elemental=1 -Torpid\ Moloch=1 -Torpor\ Dust=1 -Torrent\ of\ Fire=1 -Torrent\ of\ Souls=1 -Torrent\ of\ Stone=1 -Torsten\ Von\ Ursus=1 -Tortoise\ Formation=1 -Torture=1 -Toshiro\ Umezawa=1 -Totally\ Lost=1 -Totem-Guide\ Hartebeest=1 -Totem\ Speaker=1 -Touch\ of\ Invisibility=1 -Touch\ of\ Moonglove=1 -Touch\ of\ the\ Eternal=1 -Touch\ of\ the\ Void=1 -Touchstone=1 -Tower\ Above=1 -Tower\ Defense=1 -Tower\ Drake=1 -Tower\ Gargoyle=1 -Tower\ Geist=1 -Tower\ of\ Calamities=1 -Tower\ of\ Champions=1 -Tower\ of\ Eons=1 -Tower\ of\ Fortunes=1 -Tower\ of\ Murmurs=1 -Towering\ Baloth=1 -Towering\ Indrik=1 -Town\ Gossipmonger=1 -Toxic\ Nim=1 -Trade\ Routes=1 -Trade\ Secrets=1 -Tradewind\ Rider=1 -Tragic\ Arrogance=1 -Tragic\ Lesson=1 -Tragic\ Poet=1 -Trail\ of\ Evidence=1 -Trail\ of\ Mystery=1 -Trailblazer's\ Boots=1 -Trained\ Armodon=1 -Trained\ Caracal=1 -Trained\ Orgg=1 -Trained\ Pronghorn=1 -Trait\ Doctoring=1 -Traitor's\ Clutch=1 -Traitorous\ Blood=1 -Traitorous\ Instinct=1 -Tranquil\ Cove=1 -Tranquil\ Expanse=1 -Tranquil\ Garden=1 -Transcendence=1 -Transgress\ the\ Mind=1 -Transguild\ Courier=1 -Transguild\ Promenade=1 -Transluminant=1 -Transmogrifying\ Licid=1 -Trap\ Digger=1 -Trap\ Essence=1 -Trapjaw\ Kelpie=1 -Trapmaker's\ Snare=1 -Traumatize=1 -Travel\ Preparations=1 -Traveler's\ Amulet=1 -Traveling\ Plague=1 -Treacherous\ Urge=1 -Treacherous\ Werewolf=1 -Tread\ Upon=1 -Treasure\ Cruise=1 -Treasure\ Hunter=1 -Treasure\ Keeper=1 -Treasure\ Trove=1 -Treasured\ Find=1 -Treasury\ Thrull=1 -Tree\ Monkey=1 -Treefolk\ Healer=1 -Treefolk\ Mystic=1 -Treefolk\ Seedlings=1 -Treespring\ Lorian=1 -Treetop\ Rangers=1 -Treetop\ Sentinel=1 -Tremor=1 -Trench\ Wurm=1 -Trenching\ Steed=1 -Trepanation\ Blade=1 -Trespasser's\ Curse=1 -Trespasser\ il-Vec=1 -Tresserhorn\ Skyknight=1 -Trestle\ Troll=1 -Treva's\ Attendant=1 -Triad\ of\ Fates=1 -Trial\ //\ Error=1 -Trial\ of\ Ambition=1 -Trial\ of\ Knowledge=1 -Trial\ of\ Solidarity=1 -Trial\ of\ Strength=1 -Trial\ of\ Zeal=1 -Triangle\ of\ War=1 -Triassic\ Egg=1 -Tribal\ Flames=1 -Tribal\ Golem=1 -Tribal\ Unity=1 -Tribute\ to\ Hunger=1 -Tribute\ to\ the\ Wild=1 -Trickbind=1 -Trickery\ Charm=1 -Tricks\ of\ the\ Trade=1 -Trickster\ Mage=1 -Triclopean\ Sight=1 -Trigon\ of\ Corruption=1 -Trigon\ of\ Infestation=1 -Trip\ Noose=1 -Trip\ Wire=1 -Triskaidekaphobia=1 -Triskelavus=1 -Triskelion=1 -Triton\ Cavalry=1 -Triton\ Fortune\ Hunter=1 -Triton\ Shorethief=1 -Triton\ Tactics=1 -Triumph\ of\ Ferocity=1 -Triumph\ of\ Gerrard=1 -Troll-Horn\ Cameo=1 -Tromokratis=1 -Tromp\ the\ Domains=1 -Trophy\ Hunter=1 -Trophy\ Mage=1 -Tropical\ Storm=1 -Trostani's\ Judgment=1 -Trostani's\ Summoner=1 -Troubled\ Healer=1 -Troublesome\ Spirit=1 -Trove\ of\ Temptation=1 -True-Faith\ Censer=1 -True\ Believer=1 -True\ Conviction=1 -Truefire\ Paladin=1 -Trueheart\ Duelist=1 -Trueheart\ Twins=1 -Trumpet\ Blast=1 -Trumpeting\ Armodon=1 -Trusted\ Advisor=1 -Trusted\ Forcemage=1 -Trusty\ Companion=1 -Trusty\ Machete=1 -Trusty\ Packbeast=1 -Truth\ or\ Tale=1 -Trygon\ Predator=1 -Tukatongue\ Thallid=1 -Tuktuk\ Grunts=1 -Tuktuk\ Scrapper=1 -Tuktuk\ the\ Explorer=1 -Tumble\ Magnet=1 -Tundra\ Kavu=1 -Tunnel\ Vision=1 -Tunneling\ Geopede=1 -Turbulent\ Dreams=1 -Turn\ //\ Burn=1 -Turn\ Against=1 -Turn\ Aside=1 -Turn\ the\ Tables=1 -Turn\ the\ Tide=1 -Turn\ to\ Dust=1 -Turn\ to\ Frog=1 -Turn\ to\ Mist=1 -Turn\ to\ Slag=1 -Turntimber\ Basilisk=1 -Turntimber\ Grove=1 -Turntimber\ Ranger=1 -Turtleshell\ Changeling=1 -Tusked\ Colossodon=1 -Tuskguard\ Captain=1 -Twiddle=1 -Twigwalker=1 -Twilight\ Drover=1 -Twilight\ Shepherd=1 -Twinblade\ Slasher=1 -Twincast=1 -Twinning\ Glass=1 -Twins\ of\ Maurer\ Estate=1 -Twinstrike=1 -Twist\ Allegiance=1 -Twisted\ Abomination=1 -Twisted\ Image=1 -Twitch=1 -Two-Headed\ Cerberus=1 -Two-Headed\ Dragon=1 -Two-Headed\ Giant=1 -Two-Headed\ Giant\ of\ Foriys=1 -Two-Headed\ Sliver=1 -Two-Headed\ Zombie=1 -Tymaret,\ the\ Murder\ King=1 -Typhoid\ Rats=1 -Tyrannize=1 -Tyrant's\ Choice=1 -Tyrant\ of\ Valakut=1 -Tyrranax=1 -Uba\ Mask=1 -Ubul\ Sar\ Gatekeepers=1 -Ugin's\ Construct=1 -Ugin's\ Insight=1 -Uktabi\ Drake=1 -Uktabi\ Efreet=1 -Uktabi\ Faerie=1 -Uktabi\ Orangutan=1 -Uktabi\ Wildcats=1 -Ukud\ Cobra=1 -Ulamog's\ Despoiler=1 -Ulamog's\ Nullifier=1 -Ulamog's\ Reclaimer=1 -Ulcerate=1 -Ulrich's\ Kindred=1 -Ultimate\ Price=1 -Ulvenwald\ Bear=1 -Ulvenwald\ Captive=1 -Ulvenwald\ Mysteries=1 -Ulvenwald\ Mystics=1 -Ulvenwald\ Observer=1 -Umara\ Entangler=1 -Umara\ Raptor=1 -Umbra\ Mystic=1 -Umbra\ Stalker=1 -Umbral\ Mantle=1 -Unbender\ Tine=1 -Unblinking\ Bleb=1 -Unbreathing\ Horde=1 -Unbridled\ Growth=1 -Unburden=1 -Uncaged\ Fury=1 -Unchecked\ Growth=1 -Uncomfortable\ Chill=1 -Uncontrollable\ Anger=1 -Unconventional\ Tactics=1 -Uncovered\ Clues=1 -Undead\ Alchemist=1 -Undead\ Gladiator=1 -Undead\ Leotau=1 -Undead\ Minotaur=1 -Undead\ Servant=1 -Undead\ Slayer=1 -Undercity\ Informer=1 -Undercity\ Plague=1 -Undercity\ Shade=1 -Undercity\ Troll=1 -Undergrowth\ Scavenger=1 -Underhanded\ Designs=1 -Undertaker=1 -Underworld\ Coinsmith=1 -Undo=1 -Undying\ Rage=1 -Unerring\ Sling=1 -Unesh,\ Criosphinx\ Sovereign=1 -Unexpected\ Results=1 -Unflinching\ Courage=1 -Unforge=1 -Unfriendly\ Fire=1 -Unhallowed\ Pact=1 -Unholy\ Hunger=1 -Unholy\ Strength=1 -Unified\ Front=1 -Unified\ Strike=1 -Uninvited\ Geist=1 -Unity\ of\ Purpose=1 -Universal\ Solvent=1 -Unknown\ Shores=1 -Unliving\ Psychopath=1 -Unmake\ the\ Graves=1 -Unnatural\ Aggression=1 -Unnatural\ Endurance=1 -Unnatural\ Predation=1 -Unnerving\ Assault=1 -Unquenchable\ Thirst=1 -Unravel\ the\ Aether=1 -Unraveling\ Mummy=1 -Unruly\ Mob=1 -Unstable\ Footing=1 -Unstable\ Frontier=1 -Unstable\ Hulk=1 -Unstoppable\ Ash=1 -Unsummon=1 -Untamed\ Hunger=1 -Untamed\ Kavu=1 -Untamed\ Might=1 -Untamed\ Wilds=1 -Untethered\ Express=1 -Unwavering\ Initiate=1 -Unwilling\ Recruit=1 -Unwind=1 -Unyaro\ Bee\ Sting=1 -Unyaro\ Bees=1 -Unyielding\ Krumar=1 -Uphill\ Battle=1 -Uproot=1 -Ur-Golem's\ Eye=1 -Urban\ Burgeoning=1 -Urban\ Evolution=1 -Urbis\ Protector=1 -Urborg\ Elf=1 -Urborg\ Emissary=1 -Urborg\ Mindsucker=1 -Urborg\ Phantom=1 -Urborg\ Shambler=1 -Urborg\ Skeleton=1 -Urborg\ Stalker=1 -Urborg\ Syphon-Mage=1 -Urborg\ Uprising=1 -Urborg\ Volcano=1 -Urge\ to\ Feed=1 -Urgoros,\ the\ Empty\ One=1 -Ursapine=1 -Urza's\ Armor=1 -Urza's\ Blueprints=1 -Urza's\ Chalice=1 -Urza's\ Guilt=1 -Urza's\ Tome=1 -Uthden\ Troll=1 -Utopia\ Vow=1 -Utter\ End=1 -Utvara\ Scalper=1 -Uyo,\ Silent\ Prophet=1 -Vacuumelt=1 -Vaevictis\ Asmadi=1 -Vagrant\ Plowbeasts=1 -Valakut\ Fireboar=1 -Valakut\ Invoker=1 -Valakut\ Predator=1 -Valduk,\ Keeper\ of\ the\ Flame=1 -Valeron\ Outlander=1 -Valeron\ Wardens=1 -Valiant\ Guard=1 -Valley\ Dasher=1 -Valley\ Rannet=1 -Valleymaker=1 -Valor=1 -Valor\ Made\ Real=1 -Valor\ in\ Akros=1 -Vampire's\ Bite=1 -Vampire's\ Zeal=1 -Vampire\ Aristocrat=1 -Vampire\ Cutthroat=1 -Vampire\ Envoy=1 -Vampire\ Interloper=1 -Vampire\ Nighthawk=1 -Vampire\ Noble=1 -Vampire\ Outcasts=1 -Vampire\ Revenant=1 -Vampire\ Warlord=1 -Vampiric\ Embrace=1 -Vampiric\ Fury=1 -Vampiric\ Link=1 -Vampiric\ Rites=1 -Vampiric\ Sliver=1 -Vampiric\ Spirit=1 -Vampirism=1 -Vandalize=1 -Vanguard's\ Shield=1 -Vanguard\ of\ Brimaz=1 -Vanish\ into\ Memory=1 -Vanishment=1 -Vanquish=1 -Vanquish\ the\ Weak=1 -Vaporkin=1 -Vaporous\ Djinn=1 -Varchild's\ Crusader=1 -Varolz,\ the\ Scar-Striped=1 -Vassal's\ Duty=1 -Vassal\ Soul=1 -Vastwood\ Animist=1 -Vastwood\ Gorger=1 -Vastwood\ Zendikon=1 -Vault\ Skyward=1 -Vaultbreaker=1 -Vebulid=1 -Vec\ Townships=1 -Vectis\ Agents=1 -Vectis\ Silencers=1 -Vector\ Asp=1 -Vedalken\ Anatomist=1 -Vedalken\ Blademaster=1 -Vedalken\ Certarch=1 -Vedalken\ Dismisser=1 -Vedalken\ Engineer=1 -Vedalken\ Entrancer=1 -Vedalken\ Ghoul=1 -Vedalken\ Heretic=1 -Vedalken\ Infuser=1 -Vedalken\ Mastermind=1 -Vedalken\ Outlander=1 -Vedalken\ Plotter=1 -Veil\ of\ Secrecy=1 -Veilborn\ Ghoul=1 -Veiled\ Apparition=1 -Veiled\ Crocodile=1 -Veiled\ Sentry=1 -Veiled\ Serpent=1 -Veilstone\ Amulet=1 -Vein\ Drinker=1 -Venarian\ Glimmer=1 -Vendetta=1 -Venerable\ Kumo=1 -Venerable\ Lammasu=1 -Venerable\ Monk=1 -Venerated\ Teacher=1 -Vengeance=1 -Vengeful\ Firebrand=1 -Vengeful\ Rebel=1 -Vengeful\ Rebirth=1 -Vengeful\ Vampire=1 -Venomous\ Dragonfly=1 -Venomspout\ Brackus=1 -Venser's\ Diffusion=1 -Venser's\ Journal=1 -Vent\ Sentinel=1 -Ventifact\ Bottle=1 -Verdant\ Automaton=1 -Verdant\ Eidolon=1 -Verdant\ Embrace=1 -Verdant\ Field=1 -Verdant\ Force=1 -Verdant\ Haven=1 -Verdant\ Rebirth=1 -Verdant\ Sun's\ Avatar=1 -Verdant\ Touch=1 -Verdigris=1 -Vermiculos=1 -Vertigo\ Spawn=1 -Vesper\ Ghoul=1 -Vessel\ of\ Endless\ Rest=1 -Vessel\ of\ Ephemera=1 -Vessel\ of\ Malignity=1 -Vessel\ of\ Nascency=1 -Vessel\ of\ Paramnesia=1 -Vessel\ of\ Volatility=1 -Vestige\ of\ Emrakul=1 -Vesuvan\ Shapeshifter=1 -Veteran's\ Armaments=1 -Veteran's\ Reflexes=1 -Veteran's\ Sidearm=1 -Veteran\ Armorer=1 -Veteran\ Armorsmith=1 -Veteran\ Cathar=1 -Veteran\ Motorist=1 -Veteran\ Warleader=1 -Veteran\ of\ the\ Depths=1 -Vex=1 -Vexing\ Scuttler=1 -Vial\ of\ Dragonfire=1 -Vial\ of\ Poison=1 -Viashino\ Bladescout=1 -Viashino\ Cutthroat=1 -Viashino\ Firstblade=1 -Viashino\ Grappler=1 -Viashino\ Outrider=1 -Viashino\ Racketeer=1 -Viashino\ Runner=1 -Viashino\ Sandscout=1 -Viashino\ Sandstalker=1 -Viashino\ Skeleton=1 -Viashino\ Slasher=1 -Viashino\ Slaughtermaster=1 -Vibrating\ Sphere=1 -Vicious\ Conquistador=1 -Vicious\ Hunger=1 -Vicious\ Kavu=1 -Vicious\ Offering=1 -Vicious\ Shadows=1 -Victorious\ Destruction=1 -Victory's\ Herald=1 -Victual\ Sliver=1 -View\ from\ Above=1 -Vigean\ Graftmage=1 -Vigean\ Hydropon=1 -Vigean\ Intuition=1 -Vigil\ for\ the\ Lost=1 -Vigilance=1 -Vigilant\ Baloth=1 -Vigilant\ Drake=1 -Vigilant\ Sentry=1 -Vigilante\ Justice=1 -Vigor\ Mortis=1 -Vigorous\ Charge=1 -Vildin-Pack\ Outcast=1 -Vile\ Aggregate=1 -Vile\ Deacon=1 -Vile\ Manifestation=1 -Vile\ Rebirth=1 -Vile\ Redeemer=1 -Vile\ Requiem=1 -Village\ Bell-Ringer=1 -Village\ Cannibals=1 -Village\ Elder=1 -Village\ Ironsmith=1 -Village\ Messenger=1 -Village\ Survivors=1 -Villagers\ of\ Estwald=1 -Villainous\ Wealth=1 -Vindictive\ Mob=1 -Vine\ Kami=1 -Vine\ Snare=1 -Vinelasher\ Kudzu=1 -Vines\ of\ the\ Recluse=1 -Vineshaper\ Mystic=1 -Vineweft=1 -Vintara\ Snapper=1 -Violent\ Impact=1 -Violet\ Pall=1 -Viper's\ Kiss=1 -Viral\ Drake=1 -Viridescent\ Wisps=1 -Viridian\ Acolyte=1 -Viridian\ Betrayers=1 -Viridian\ Claw=1 -Viridian\ Emissary=1 -Viridian\ Joiner=1 -Viridian\ Lorebearers=1 -Viridian\ Revel=1 -Viridian\ Shaman=1 -Viridian\ Zealot=1 -Virulent\ Swipe=1 -Virulent\ Wound=1 -Visara\ the\ Dreadful=1 -Viscerid\ Armor=1 -Viscerid\ Drone=1 -Viscid\ Lemures=1 -Vision\ Skeins=1 -Visionary\ Augmenter=1 -Visions\ of\ Brutality=1 -Vital\ Splicer=1 -Vital\ Surge=1 -Vitality\ Charm=1 -Vitalizing\ Cascade=1 -Vitaspore\ Thallid=1 -Vithian\ Renegades=1 -Vithian\ Stinger=1 -Vitu-Ghazi,\ the\ City-Tree=1 -Vitu-Ghazi\ Guildmage=1 -Vivify=1 -Vivisection=1 -Vizier\ of\ Deferment=1 -Vizier\ of\ Many\ Faces=1 -Vizier\ of\ Remedies=1 -Vizier\ of\ Tumbling\ Sands=1 -Vizier\ of\ the\ Anointed=1 -Vizier\ of\ the\ True=1 -Vizkopa\ Confessor=1 -Vizkopa\ Guildmage=1 -Vizzerdrix=1 -Vodalian\ Arcanist=1 -Vodalian\ Hypnotist=1 -Vodalian\ Knights=1 -Vodalian\ Merchant=1 -Vodalian\ Serpent=1 -Voice\ of\ All=1 -Voice\ of\ Duty=1 -Voice\ of\ Grace=1 -Voice\ of\ Law=1 -Voice\ of\ Reason=1 -Void\ Attendant=1 -Void\ Grafter=1 -Void\ Maw=1 -Void\ Shatter=1 -Void\ Squall=1 -Void\ Stalker=1 -Voidmage\ Apprentice=1 -Voidmage\ Husher=1 -Voidstone\ Gargoyle=1 -Voidwalk=1 -Voidwielder=1 -Volatile\ Rig=1 -Volcanic\ Awakening=1 -Volcanic\ Dragon=1 -Volcanic\ Geyser=1 -Volcanic\ Rambler=1 -Volcanic\ Rush=1 -Volcanic\ Spray=1 -Volcanic\ Strength=1 -Volcanic\ Upheaval=1 -Volcanic\ Wind=1 -Volcano\ Hellion=1 -Volcano\ Imp=1 -Voldaren\ Duelist=1 -Voldaren\ Pariah=1 -Volition\ Reins=1 -Volrath's\ Curse=1 -Volrath's\ Dungeon=1 -Volrath's\ Gardens=1 -Volrath's\ Laboratory=1 -Volrath's\ Shapeshifter=1 -Volt\ Charge=1 -Voltaic\ Brawler=1 -Voltaic\ Construct=1 -Voltaic\ Servant=1 -Volunteer\ Reserves=1 -Vona's\ Hunger=1 -Voodoo\ Doll=1 -Voracious\ Cobra=1 -Voracious\ Dragon=1 -Voracious\ Null=1 -Voracious\ Vampire=1 -Voracious\ Wurm=1 -Vorrac\ Battlehorns=1 -Vortex\ Elemental=1 -Votary\ of\ the\ Conclave=1 -Vow\ of\ Duty=1 -Vow\ of\ Flight=1 -Vow\ of\ Lightning=1 -Vow\ of\ Malice=1 -Vow\ of\ Wildness=1 -Voyage's\ End=1 -Voyager\ Drake=1 -Voyager\ Staff=1 -Voyaging\ Satyr=1 -Vug\ Lizard=1 -Vulpine\ Goliath=1 -Vulshok\ Battlemaster=1 -Vulshok\ Berserker=1 -Vulshok\ Gauntlets=1 -Vulshok\ Heartstoker=1 -Vulshok\ Morningstar=1 -Vulshok\ Replica=1 -Vulshok\ Sorcerer=1 -Vulshok\ War\ Boar=1 -Vulturous\ Zombie=1 -Wail\ of\ the\ Nim=1 -Wailing\ Ghoul=1 -Wake\ of\ Vultures=1 -Wake\ the\ Reflections=1 -Wakedancer=1 -Waker\ of\ the\ Wilds=1 -Waking\ Nightmare=1 -Walk\ the\ Plank=1 -Walker\ of\ Secret\ Ways=1 -Walker\ of\ the\ Grove=1 -Walker\ of\ the\ Wastes=1 -Walking\ Archive=1 -Walking\ Atlas=1 -Walking\ Corpse=1 -Walking\ Desecration=1 -Walking\ Dream=1 -Walking\ Sponge=1 -Walking\ Wall=1 -Wall\ of\ Air=1 -Wall\ of\ Blood=1 -Wall\ of\ Bone=1 -Wall\ of\ Deceit=1 -Wall\ of\ Denial=1 -Wall\ of\ Diffusion=1 -Wall\ of\ Distortion=1 -Wall\ of\ Essence=1 -Wall\ of\ Faith=1 -Wall\ of\ Fire=1 -Wall\ of\ Forgotten\ Pharaohs=1 -Wall\ of\ Frost=1 -Wall\ of\ Light=1 -Wall\ of\ Limbs=1 -Wall\ of\ Mist=1 -Wall\ of\ Mulch=1 -Wall\ of\ Resurgence=1 -Wall\ of\ Souls=1 -Wall\ of\ Spears=1 -Wall\ of\ Stone=1 -Wall\ of\ Swords=1 -Wall\ of\ Tanglecord=1 -Wall\ of\ Vines=1 -Wall\ of\ Vipers=1 -Wall\ of\ Wonder=1 -Wallop=1 -Wand\ of\ Denial=1 -Wand\ of\ the\ Elements=1 -Wander\ in\ Death=1 -Wanderbrine\ Rootcutters=1 -Wanderer's\ Twig=1 -Wanderguard\ Sentry=1 -Wandering\ Champion=1 -Wandering\ Eye=1 -Wandering\ Goblins=1 -Wandering\ Graybeard=1 -Wandering\ Mage=1 -Wandering\ Ones=1 -Wandering\ Stream=1 -Wandering\ Wolf=1 -Wanderlust=1 -Wanderwine\ Prophets=1 -Waning\ Wurm=1 -Wanted\ Scoundrels=1 -War-Name\ Aspirant=1 -War-Spike\ Changeling=1 -War-Wing\ Siren=1 -War\ Barge=1 -War\ Behemoth=1 -War\ Dance=1 -War\ Elemental=1 -War\ Falcon=1 -War\ Flare=1 -War\ Horn=1 -War\ Oracle=1 -War\ Priest\ of\ Thune=1 -War\ Report=1 -Warbreak\ Trumpeter=1 -Warbringer=1 -Warchanter\ of\ Mogis=1 -Warchief\ Giant=1 -Warcry\ Phoenix=1 -Ward\ of\ Piety=1 -Warden\ of\ Evos\ Isle=1 -Warden\ of\ Geometries=1 -Warden\ of\ the\ Eye=1 -Wardscale\ Dragon=1 -Warfire\ Javelineer=1 -Warleader's\ Helix=1 -Warlord's\ Fury=1 -Warmind\ Infantry=1 -Warmonger's\ Chariot=1 -Warmonger=1 -Warning=1 -Warp\ Artifact=1 -Warp\ World=1 -Warpath\ Ghoul=1 -Warped\ Devotion=1 -Warped\ Landscape=1 -Warped\ Researcher=1 -Warren-Scourge\ Elf=1 -Warren\ Pilferers=1 -Warren\ Weirding=1 -Warrior's\ Honor=1 -Warrior\ Angel=1 -Warrior\ en-Kor=1 -Warriors'\ Lesson=1 -Warthog=1 -Wasp\ Lancer=1 -Waste\ Away=1 -Wasteland\ Scorpion=1 -Wasteland\ Strangler=1 -Wasteland\ Viper=1 -Watchdog=1 -Watcher\ Sliver=1 -Watcher\ in\ the\ Web=1 -Watcher\ of\ the\ Roost=1 -Watchers\ of\ the\ Dead=1 -Watchful\ Automaton=1 -Watchful\ Naga=1 -Watchwing\ Scarecrow=1 -Watchwolf=1 -Water\ Elemental=1 -Water\ Servant=1 -Watercourser=1 -Waterfront\ Bouncer=1 -Waterknot=1 -Waterspout\ Djinn=1 -Waterspout\ Elemental=1 -Waterspout\ Weavers=1 -Watertrap\ Weaver=1 -Waterveil\ Cavern=1 -Wave-Wing\ Elemental=1 -Wave\ of\ Indifference=1 -Wavecrash\ Triton=1 -Waveskimmer\ Aven=1 -Wax\ //\ Wane=1 -Waxing\ Moon=1 -Waxmane\ Baku=1 -Way\ of\ the\ Thief=1 -Wayfaring\ Giant=1 -Wayfaring\ Temple=1 -Waylay=1 -Wayward\ Giant=1 -Wayward\ Servant=1 -Wayward\ Soul=1 -Weakness=1 -Weakstone=1 -Weapon\ Surge=1 -Weaponcraft\ Enthusiast=1 -Weapons\ Trainer=1 -Wear\ Away=1 -Weathered\ Bodyguards=1 -Weatherseed\ Elf=1 -Weatherseed\ Faeries=1 -Weatherseed\ Totem=1 -Weave\ Fate=1 -Weaver\ of\ Currents=1 -Weaver\ of\ Lies=1 -Weaver\ of\ Lightning=1 -Web=1 -Wee\ Dragonauts=1 -Weed-Pruner\ Poplar=1 -Weed\ Strangle=1 -Wei\ Elite\ Companions=1 -Wei\ Infantry=1 -Wei\ Night\ Raiders=1 -Weight\ of\ Conscience=1 -Weight\ of\ Memory=1 -Weight\ of\ Spires=1 -Weight\ of\ the\ Underworld=1 -Weird\ Harvest=1 -Weirded\ Vampire=1 -Weirding\ Wood=1 -Welcome\ to\ the\ Fold=1 -Welder\ Automaton=1 -Weldfast\ Engineer=1 -Weldfast\ Monitor=1 -Weldfast\ Wingsmith=1 -Welding\ Sparks=1 -Welkin\ Guide=1 -Welkin\ Tern=1 -Well\ of\ Life=1 -Western\ Paladin=1 -Wetland\ Sambar=1 -Wharf\ Infiltrator=1 -Whelming\ Wave=1 -Where\ Ancients\ Tread=1 -Whetwheel=1 -Whims\ of\ the\ Fates=1 -Whimwader=1 -Whip\ Sergeant=1 -Whip\ Silk=1 -Whip\ of\ Erebos=1 -Whipcorder=1 -Whipkeeper=1 -Whiplash\ Trap=1 -Whiptail\ Moloch=1 -Whiptail\ Wurm=1 -Whiptongue\ Frog=1 -Whirler\ Rogue=1 -Whirlermaker=1 -Whirling\ Catapult=1 -Whirling\ Dervish=1 -Whirlpool\ Drake=1 -Whirlwind\ Adept=1 -Whisper,\ Blood\ Liturgist=1 -Whispering\ Madness=1 -Whispering\ Shade=1 -Whispering\ Specter=1 -Whispers\ of\ Emrakul=1 -Whispersilk\ Cloak=1 -White\ Knight=1 -White\ Shield\ Crusader=1 -Whitemane\ Lion=1 -Whiteout=1 -Whitesun's\ Passage=1 -Wicked\ Akuba=1 -Wicked\ Reward=1 -Wicker\ Warcrawler=1 -Wicker\ Witch=1 -Wiitigo=1 -Wild-Field\ Scarecrow=1 -Wild\ Aesthir=1 -Wild\ Beastmaster=1 -Wild\ Colos=1 -Wild\ Dogs=1 -Wild\ Evocation=1 -Wild\ Griffin=1 -Wild\ Guess=1 -Wild\ Hunger=1 -Wild\ Instincts=1 -Wild\ Leotau=1 -Wild\ Mammoth=1 -Wild\ Might=1 -Wild\ Onslaught=1 -Wild\ Ox=1 -Wild\ Pair=1 -Wild\ Ricochet=1 -Wild\ Swing=1 -Wild\ Wanderer=1 -Wild\ Wurm=1 -Wildcall=1 -Wilderness\ Elemental=1 -Wilderness\ Hypnotist=1 -Wildest\ Dreams=1 -Wildfire\ Cerberus=1 -Wildfire\ Emissary=1 -Wildfire\ Eternal=1 -Wildgrowth\ Walker=1 -Wildheart\ Invoker=1 -Wildsize=1 -Wildwood\ Rebirth=1 -Will-Forged\ Golem=1 -Willbender=1 -Willbreaker=1 -Willow\ Priestess=1 -Wily\ Bandar=1 -Wily\ Goblin=1 -Wind-Kin\ Raiders=1 -Wind-Scarred\ Crag=1 -Wind\ Dancer=1 -Wind\ Drake=1 -Wind\ Shear=1 -Wind\ Strider=1 -Windborne\ Charge=1 -Windbrisk\ Raptor=1 -Windgrace\ Acolyte=1 -Winding\ Wurm=1 -Windreaper\ Falcon=1 -Windreaver=1 -Windrider\ Patrol=1 -Winds\ of\ Rath=1 -Winds\ of\ Rebuke=1 -Windseeker\ Centaur=1 -Windstorm=1 -Windwright\ Mage=1 -Wine\ of\ Blood\ and\ Iron=1 -Wing\ Puncture=1 -Wing\ Shards=1 -Wing\ Snare=1 -Wing\ Splicer=1 -Wing\ Storm=1 -Wingcrafter=1 -Winged\ Coatl=1 -Winged\ Shepherd=1 -Wingmate\ Roc=1 -Wingrattle\ Scarecrow=1 -Wings\ of\ Aesthir=1 -Wings\ of\ Velis\ Vel=1 -Wingsteed\ Rider=1 -Winnow=1 -Winnower\ Patrol=1 -Winter\ Blast=1 -Winterflame=1 -Wipe\ Clean=1 -Wirecat=1 -Wirefly\ Hive=1 -Wirewood\ Elf=1 -Wirewood\ Guardian=1 -Wirewood\ Savage=1 -Wispweaver\ Angel=1 -Wistful\ Thinking=1 -Wit's\ End=1 -Witch's\ Familiar=1 -Witch's\ Mist=1 -Witch-Maw\ Nephilim=1 -Witches'\ Eye=1 -Withered\ Wretch=1 -Withering\ Gaze=1 -Withering\ Hex=1 -Withering\ Wisps=1 -Witherscale\ Wurm=1 -Without\ Weakness=1 -Withstand=1 -Withstand\ Death=1 -Witness\ of\ the\ Ages=1 -Witness\ the\ End=1 -Wizard\ Mentor=1 -Wizard\ Replica=1 -Wizened\ Cenn=1 -Woebearer=1 -Woebringer\ Demon=1 -Woeleecher=1 -Wojek\ Apothecary=1 -Wojek\ Siren=1 -Wolf-Skull\ Shaman=1 -Wolfbriar\ Elemental=1 -Wolfhunter's\ Quiver=1 -Wolfir\ Avenger=1 -Wolfkin\ Bond=1 -Wonder=1 -Wood\ Elemental=1 -Woodborn\ Behemoth=1 -Woodcloaker=1 -Woodcutter's\ Grit=1 -Wooden\ Sphere=1 -Wooden\ Stake=1 -Woodland\ Changeling=1 -Woodland\ Druid=1 -Woodland\ Guidance=1 -Woodland\ Patrol=1 -Woodland\ Sleuth=1 -Woodland\ Stream=1 -Woodland\ Wanderer=1 -Woodlot\ Crawler=1 -Woodlurker\ Mimic=1 -Woodripper=1 -Woodweaver's\ Puzzleknot=1 -Woodwraith\ Corrupter=1 -Woodwraith\ Strangler=1 -Woolly\ Loxodon=1 -Woolly\ Mammoths=1 -Woolly\ Spider=1 -Woolly\ Thoctar=1 -Word\ of\ Seizing=1 -Word\ of\ Undoing=1 -Words\ of\ War=1 -Words\ of\ Waste=1 -Words\ of\ Wilding=1 -Workshop\ Assistant=1 -World\ Queller=1 -World\ Shaper=1 -World\ at\ War=1 -Worldgorger\ Dragon=1 -Worldheart\ Phoenix=1 -Worldly\ Counsel=1 -Worldpurge=1 -Worldslayer=1 -Worm\ Harvest=1 -Wormfang\ Drake=1 -Wormfang\ Manta=1 -Wormwood\ Dryad=1 -Wormwood\ Treefolk=1 -Wort,\ Boggart\ Auntie=1 -Wort,\ the\ Raidmother=1 -Worthy\ Cause=1 -Wound\ Reflection=1 -Wrangle=1 -Wrap\ in\ Flames=1 -Wrath\ of\ Marit\ Lage=1 -Wreak\ Havoc=1 -Wreath\ of\ Geists=1 -Wrecking\ Ball=1 -Wrecking\ Ogre=1 -Wren's\ Run\ Packmaster=1 -Wren's\ Run\ Vanquisher=1 -Wretched\ Camel=1 -Wretched\ Gryff=1 -Writ\ of\ Passage=1 -Wu\ Elite\ Cavalry=1 -Wu\ Longbowman=1 -Wu\ Warship=1 -Wurm's\ Tooth=1 -Wurmcalling=1 -Wurmskin\ Forger=1 -Wurmweaver\ Coil=1 -Wydwen,\ the\ Biting\ Gale=1 -Wyluli\ Wolf=1 -Xathrid\ Gorgon=1 -Xathrid\ Slyblade=1 -Xenic\ Poltergeist=1 -Yamabushi's\ Flame=1 -Yamabushi's\ Storm=1 -Yare=1 -Yargle,\ Glutton\ of\ Urborg=1 -Yavimaya\ Ancients=1 -Yavimaya\ Ants=1 -Yavimaya\ Dryad=1 -Yavimaya\ Enchantress=1 -Yavimaya\ Kavu=1 -Yavimaya\ Sapherd=1 -Yavimaya\ Scion=1 -Yavimaya\ Wurm=1 -Yawgmoth's\ Edict=1 -Yawgmoth\ Demon=1 -Yawning\ Fissure=1 -Yeva's\ Forcemage=1 -Yeva,\ Nature's\ Herald=1 -Yew\ Spirit=1 -Yixlid\ Jailer=1 -Yoke\ of\ the\ Damned=1 -Yoked\ Ox=1 -Yoked\ Plowbeast=1 -Yomiji,\ Who\ Bars\ the\ Way=1 -Yore-Tiller\ Nephilim=1 -Yosei,\ the\ Morning\ Star=1 -Yotian\ Soldier=1 -Young\ Wei\ Recruits=1 -Youthful\ Knight=1 -Youthful\ Scholar=1 -Yuki-Onna=1 -Yukora,\ the\ Prisoner=1 -Zada's\ Commando=1 -Zada,\ Hedron\ Grinder=1 -Zameck\ Guildmage=1 -Zanikev\ Locust=1 -Zap=1 -Zarichi\ Tiger=1 -Zealot\ il-Vec=1 -Zealous\ Guardian=1 -Zealous\ Inquisitor=1 -Zebra\ Unicorn=1 -Zektar\ Shrine\ Expedition=1 -Zendikar's\ Roil=1 -Zendikar\ Farguide=1 -Zendikar\ Incarnate=1 -Zendikar\ Resurgent=1 -Zenith\ Seeker=1 -Zephid's\ Embrace=1 -Zephid=1 -Zephyr\ Charge=1 -Zephyr\ Net=1 -Zephyr\ Spirit=1 -Zephyr\ Sprite=1 -Zerapa\ Minotaur=1 -Zhalfirin\ Commander=1 -Zhalfirin\ Crusader=1 -Zhalfirin\ Knight=1 -Zhang\ Fei,\ Fierce\ Warrior=1 -Zhur-Taa\ Ancient=1 -Zhur-Taa\ Druid=1 -Zhur-Taa\ Swine=1 -Zodiac\ Monkey=1 -Zoetic\ Cavern=1 -Zof\ Shade=1 -Zombie\ Boa=1 -Zombie\ Cannibal=1 -Zombie\ Cutthroat=1 -Zombie\ Goliath=1 -Zombie\ Musher=1 -Zombie\ Trailblazer=1 -Zombify=1 -Zoologist=1 -Zulaport\ Chainmage=1 -Zulaport\ Cutthroat=1 -Zulaport\ Enforcer=1 -Zur's\ Weirding=1 -Zuran\ Spellcaster=1 diff --git a/Mage/src/main/java/mage/cards/decks/Constructed.java b/Mage/src/main/java/mage/cards/decks/Constructed.java index 84e3ea2f91..66303911ef 100644 --- a/Mage/src/main/java/mage/cards/decks/Constructed.java +++ b/Mage/src/main/java/mage/cards/decks/Constructed.java @@ -37,6 +37,10 @@ public class Constructed extends DeckValidator { super(name); } + protected Constructed(String name, String shortName) { + super(name, shortName); + } + public List getSetCodes() { return setCodes; } @@ -54,6 +58,7 @@ public class Constructed extends DeckValidator { @Override public boolean validate(Deck deck) { boolean valid = true; + invalid.clear(); //20091005 - 100.2a if (deck.getCards().size() < getDeckMinSize()) { invalid.put("Deck", "Must contain at least " + getDeckMinSize() + " cards: has only " + deck.getCards().size() + " cards"); diff --git a/Mage/src/main/java/mage/cards/decks/DeckValidator.java b/Mage/src/main/java/mage/cards/decks/DeckValidator.java index 506fd6310b..af8f4d0115 100644 --- a/Mage/src/main/java/mage/cards/decks/DeckValidator.java +++ b/Mage/src/main/java/mage/cards/decks/DeckValidator.java @@ -13,11 +13,16 @@ import java.util.Map; public abstract class DeckValidator implements Serializable { protected String name; + protected String shortName; protected Map invalid = new HashMap<>(); public DeckValidator(String name) { - this.name = name; + setName(name); + } + + public DeckValidator(String name, String shortName) { + setName(name, shortName); } public abstract boolean validate(Deck deck); @@ -26,6 +31,24 @@ public abstract class DeckValidator implements Serializable { return name; } + public String getShortName() { + return shortName; + } + + protected void setName(String name) { + this.name = name; + this.shortName = name.contains("-") ? name.substring(name.indexOf("-") + 1).trim() : name; + } + + protected void setName(String name, String shortName) { + this.name = name; + this.shortName = shortName; + } + + protected void setShortName(String shortName) { + this.shortName = shortName; + } + public Map getInvalid() { return invalid; } diff --git a/Mage/src/main/java/mage/cards/decks/PennyDreadfulLegalityUtil.java b/Mage/src/main/java/mage/cards/decks/PennyDreadfulLegalityUtil.java new file mode 100644 index 0000000000..248c6ac49c --- /dev/null +++ b/Mage/src/main/java/mage/cards/decks/PennyDreadfulLegalityUtil.java @@ -0,0 +1,23 @@ +package mage.cards.decks; + +import java.util.HashMap; +import java.util.Map; +import java.util.Properties; + +public class PennyDreadfulLegalityUtil { + public static Map getLegalCardList() { + Map pdAllowed = new HashMap<>(); + + Properties properties = new Properties(); + try { + properties.load(PennyDreadfulLegalityUtil.class.getResourceAsStream("/pennydreadful.properties")); + } catch (Exception e) { + e.printStackTrace(); + } + for (final Map.Entry entry : properties.entrySet()) { + pdAllowed.put((String) entry.getKey(), 1); + } + + return pdAllowed; + } +} diff --git a/Mage.Client/src/main/resources/mage/client/deckeditor/pennydreadful.properties b/Mage/src/main/resources/pennydreadful.properties similarity index 100% rename from Mage.Client/src/main/resources/mage/client/deckeditor/pennydreadful.properties rename to Mage/src/main/resources/pennydreadful.properties