Feature: Retro Border Renderer (#13563)
* Add Retro Card Renderer * Updated old sets with retro frames Adds sets: * 30th Anniversary Play Promos * 30th Anniversary Misc Promos * Eternal Weekend * MagicFest 2025 * Modern Horizon 2 Timeshifts
|
|
@ -90,6 +90,7 @@ public class PreferencesDialog extends javax.swing.JDialog {
|
|||
public static final String KEY_CARD_IMAGES_PREF_LANGUAGE = "cardImagesPreferredImageLaguage";
|
||||
|
||||
public static final String KEY_CARD_RENDERING_IMAGE_MODE = "cardRenderingFallback";
|
||||
public static final String KEY_CARD_RENDERING_ENABLE_RETRO_FRAMES = "cardRenderingRetroFrames";
|
||||
public static final String KEY_CARD_RENDERING_ICONS_FOR_ABILITIES = "cardRenderingIconsForAbilities";
|
||||
public static final String KEY_CARD_RENDERING_ICONS_FOR_PLAYABLE = "cardRenderingIconsForPlayable";
|
||||
public static final String KEY_CARD_RENDERING_REMINDER_TEXT = "cardRenderingReminderText";
|
||||
|
|
@ -962,6 +963,7 @@ public class PreferencesDialog extends javax.swing.JDialog {
|
|||
labelPreferredImageLanguage = new javax.swing.JLabel();
|
||||
panelCardStyles = new javax.swing.JPanel();
|
||||
cbCardRenderImageFallback = new javax.swing.JCheckBox();
|
||||
cbCardRenderRetroFrames = new javax.swing.JCheckBox();
|
||||
cbCardRenderIconsForAbilities = new javax.swing.JCheckBox();
|
||||
cbCardRenderIconsForPlayable = new javax.swing.JCheckBox();
|
||||
jSeparator1 = new javax.swing.JSeparator();
|
||||
|
|
@ -2328,6 +2330,9 @@ public class PreferencesDialog extends javax.swing.JDialog {
|
|||
cbCardRenderImageFallback.setText("Render mode: MTGO style (off) or IMAGE style (on)");
|
||||
panelCardStyles.add(cbCardRenderImageFallback);
|
||||
|
||||
cbCardRenderRetroFrames.setText("Force retro frames (MTGO render mode will use old border for all cards)");
|
||||
panelCardStyles.add(cbCardRenderRetroFrames);
|
||||
|
||||
cbCardRenderIconsForAbilities.setText("Enable card icons for abilities (example: flying, deathtouch)");
|
||||
panelCardStyles.add(cbCardRenderIconsForAbilities);
|
||||
|
||||
|
|
@ -3034,6 +3039,7 @@ public class PreferencesDialog extends javax.swing.JDialog {
|
|||
|
||||
// rendering
|
||||
save(prefs, dialog.cbCardRenderImageFallback, KEY_CARD_RENDERING_IMAGE_MODE, "true", "false");
|
||||
save(prefs, dialog.cbCardRenderRetroFrames, KEY_CARD_RENDERING_ENABLE_RETRO_FRAMES, "true", "false");
|
||||
save(prefs, dialog.cbCardRenderIconsForAbilities, KEY_CARD_RENDERING_ICONS_FOR_ABILITIES, "true", "false");
|
||||
save(prefs, dialog.cbCardRenderIconsForPlayable, KEY_CARD_RENDERING_ICONS_FOR_PLAYABLE, "true", "false");
|
||||
save(prefs, dialog.cbCardRenderHideSetSymbol, KEY_CARD_RENDERING_SET_SYMBOL, "true", "false");
|
||||
|
|
@ -3485,6 +3491,7 @@ public class PreferencesDialog extends javax.swing.JDialog {
|
|||
|
||||
// rendering settings
|
||||
load(prefs, dialog.cbCardRenderImageFallback, KEY_CARD_RENDERING_IMAGE_MODE, "true", "false");
|
||||
load(prefs, dialog.cbCardRenderRetroFrames, KEY_CARD_RENDERING_ENABLE_RETRO_FRAMES, "true", "false");
|
||||
load(prefs, dialog.cbCardRenderIconsForAbilities, KEY_CARD_RENDERING_ICONS_FOR_ABILITIES, "true", "true");
|
||||
load(prefs, dialog.cbCardRenderIconsForPlayable, KEY_CARD_RENDERING_ICONS_FOR_PLAYABLE, "true", "true");
|
||||
load(prefs, dialog.cbCardRenderHideSetSymbol, KEY_CARD_RENDERING_SET_SYMBOL, "true");
|
||||
|
|
@ -3815,6 +3822,10 @@ public class PreferencesDialog extends javax.swing.JDialog {
|
|||
}
|
||||
}
|
||||
|
||||
public static boolean getRenderRetroFrames() {
|
||||
return (getCachedValue(PreferencesDialog.KEY_CARD_RENDERING_ENABLE_RETRO_FRAMES, "true").endsWith("true"));
|
||||
}
|
||||
|
||||
public static boolean getRenderIconsForAbilities() {
|
||||
return (getCachedValue(PreferencesDialog.KEY_CARD_RENDERING_ICONS_FOR_ABILITIES, "true").equals("true"));
|
||||
}
|
||||
|
|
@ -4043,6 +4054,7 @@ public class PreferencesDialog extends javax.swing.JDialog {
|
|||
private javax.swing.JCheckBox cbCardRenderIconsForAbilities;
|
||||
private javax.swing.JCheckBox cbCardRenderIconsForPlayable;
|
||||
private javax.swing.JCheckBox cbCardRenderImageFallback;
|
||||
private javax.swing.JCheckBox cbCardRenderRetroFrames;
|
||||
private javax.swing.JCheckBox cbCardRenderShowAbilityTextOverlay;
|
||||
private javax.swing.JCheckBox cbCardRenderShowReminderText;
|
||||
private javax.swing.JCheckBox cbConfirmEmptyManaPool;
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
package org.mage.card.arcane;
|
||||
|
||||
import mage.cards.FrameStyle;
|
||||
import mage.client.dialog.PreferencesDialog;
|
||||
import mage.view.CardView;
|
||||
|
||||
/**
|
||||
|
|
@ -13,6 +15,8 @@ public class CardRendererFactory {
|
|||
public CardRenderer create(CardView card) {
|
||||
if (card.isSplitCard()) {
|
||||
return new ModernSplitCardRenderer(card);
|
||||
} else if (card.getFrameStyle().equals(FrameStyle.RETRO) || card.getFrameStyle().equals(FrameStyle.LEA_ORIGINAL_DUAL_LAND_ART_BASIC) || PreferencesDialog.getRenderRetroFrames()) {
|
||||
return new RetroCardRenderer(card);
|
||||
} else {
|
||||
return new ModernCardRenderer(card);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -318,7 +318,8 @@ public class ModernCardRenderer extends CardRenderer {
|
|||
} else if (isUnstableFullArtLand()) {
|
||||
rect = new Rectangle2D.Float(.0f, .0f, 1.0f, 1.0f);
|
||||
} else if (cardView.getArtRect() == ArtRect.FULL_LENGTH_LEFT ||
|
||||
cardView.getArtRect() == ArtRect.FULL_LENGTH_RIGHT) {
|
||||
cardView.getArtRect() == ArtRect.FULL_LENGTH_RIGHT ||
|
||||
cardView.getArtRect() == ArtRect.RETRO) {
|
||||
rect = cardView.getArtRect().rect;
|
||||
} else if (cardView.getFrameStyle().isFullArt() || (cardView.isToken())) {
|
||||
rect = new Rectangle2D.Float(.079f, .11f, .84f, .63f);
|
||||
|
|
|
|||
|
|
@ -543,6 +543,9 @@ public class ScryfallImageSupportCards {
|
|||
add("MAT"); // March of the Machine: The Aftermath
|
||||
add("MUL"); // Multiverse Legends
|
||||
add("30A"); // 30th Anniversary Edition
|
||||
add("P30A"); // 30th Anniversary Play Promos
|
||||
add("P30M"); // 30th Anniversary Misc Promos
|
||||
add("PEWK"); // Eternal Weekend
|
||||
add("LTR"); // The Lord of the Rings: Tales of Middle-Earth
|
||||
add("LTC"); // Tales of Middle-Earth Commander
|
||||
add("CMM"); // Commander Masters
|
||||
|
|
@ -577,6 +580,7 @@ public class ScryfallImageSupportCards {
|
|||
add("PIO"); // Pioneer Masters
|
||||
add("PW25"); // Wizards Play Network 2025
|
||||
add("INR"); // Innistrad Remastered
|
||||
add("PF25"); // MagicFest 2025
|
||||
add("DFT"); // Aetherdrift
|
||||
add("DRC"); // Aetherdrift Commander
|
||||
add("TDM"); // Tarkir: Dragonstorm
|
||||
|
|
|
|||
|
After Width: | Height: | Size: 125 KiB |
|
After Width: | Height: | Size: 407 KiB |
|
After Width: | Height: | Size: 389 KiB |
|
After Width: | Height: | Size: 244 KiB |
|
After Width: | Height: | Size: 178 KiB |
|
After Width: | Height: | Size: 387 KiB |
|
After Width: | Height: | Size: 403 KiB |
|
After Width: | Height: | Size: 422 KiB |
|
After Width: | Height: | Size: 221 KiB |