diff --git a/src/main/java/forge/game/GameNew.java b/src/main/java/forge/game/GameNew.java index c1e9bf8a179..c9e5c90444d 100644 --- a/src/main/java/forge/game/GameNew.java +++ b/src/main/java/forge/game/GameNew.java @@ -19,7 +19,9 @@ import forge.Card; import forge.CardLists; import forge.CardPredicates; import forge.GameLogEntryType; +import forge.Singletons; import forge.card.CardDb; +import forge.card.CardEdition; import forge.card.trigger.Trigger; import forge.card.trigger.TriggerHandler; import forge.deck.CardPool; @@ -113,9 +115,9 @@ public class GameNew { return myRemovedAnteCards; } - private static void preparePlayerLibrary(Player player, final ZoneType zoneType, CardPool secion, boolean canRandomFoil, Random generator) { + private static void preparePlayerLibrary(Player player, final ZoneType zoneType, CardPool section, boolean canRandomFoil, Random generator) { PlayerZone library = player.getZone(zoneType); - for (final Entry stackOfCards : secion) { + for (final Entry stackOfCards : section) { final PaperCard cp = stackOfCards.getKey(); for (int i = 0; i < stackOfCards.getValue(); i++) { @@ -129,9 +131,22 @@ public class GameNew { final Card card = cpi.toForgeCard(player); - // Assign random foiling on approximately 1:20 cards - if (cp.isFoil() || (canRandomFoil && MyRandom.percentTrue(5))) { - final int iFoil = generator.nextInt(9) + 1; + // Assign card-specific foiling or random foiling on approximately 1:20 cards if enabled + CardEdition.FoilType foilType = Singletons.getModel().getEditions().get(card.getCurSetCode()).getFoilType(); + if (foilType != CardEdition.FoilType.NOT_SUPPORTED && (cp.isFoil() || (canRandomFoil && MyRandom.percentTrue(5)))) { + int iFoil = 0; + + switch(foilType) { + case MODERN: + iFoil = generator.nextInt(9) + 1; // modern foils in slots 1-10 + break; + case OLD_STYLE: + iFoil = generator.nextInt(9) + 11; // old style foils in slots 11-20 + break; + default: + System.out.println(String.format("Unexpected foil type for card %s in edition %s.", card.getName(), card.getCurSetCode())); + } + card.setFoil(iFoil); } diff --git a/src/main/java/forge/gui/toolbox/CardFaceSymbols.java b/src/main/java/forge/gui/toolbox/CardFaceSymbols.java index 4bfe0b07a35..8390420b579 100644 --- a/src/main/java/forge/gui/toolbox/CardFaceSymbols.java +++ b/src/main/java/forge/gui/toolbox/CardFaceSymbols.java @@ -116,6 +116,17 @@ public class CardFaceSymbols { MANA_IMAGES.put("foil08", FSkin.getImage(FSkin.Foils.FOIL_08)); MANA_IMAGES.put("foil09", FSkin.getImage(FSkin.Foils.FOIL_09)); MANA_IMAGES.put("foil10", FSkin.getImage(FSkin.Foils.FOIL_10)); + + MANA_IMAGES.put("foil11", FSkin.getImage(FSkin.OldFoils.FOIL_11)); + MANA_IMAGES.put("foil12", FSkin.getImage(FSkin.OldFoils.FOIL_12)); + MANA_IMAGES.put("foil13", FSkin.getImage(FSkin.OldFoils.FOIL_13)); + MANA_IMAGES.put("foil14", FSkin.getImage(FSkin.OldFoils.FOIL_14)); + MANA_IMAGES.put("foil15", FSkin.getImage(FSkin.OldFoils.FOIL_15)); + MANA_IMAGES.put("foil16", FSkin.getImage(FSkin.OldFoils.FOIL_16)); + MANA_IMAGES.put("foil17", FSkin.getImage(FSkin.OldFoils.FOIL_17)); + MANA_IMAGES.put("foil18", FSkin.getImage(FSkin.OldFoils.FOIL_18)); + MANA_IMAGES.put("foil19", FSkin.getImage(FSkin.OldFoils.FOIL_19)); + MANA_IMAGES.put("foil20", FSkin.getImage(FSkin.OldFoils.FOIL_20)); } /** diff --git a/src/main/java/forge/gui/toolbox/FSkin.java b/src/main/java/forge/gui/toolbox/FSkin.java index 9f015cc0db7..56d039232f2 100644 --- a/src/main/java/forge/gui/toolbox/FSkin.java +++ b/src/main/java/forge/gui/toolbox/FSkin.java @@ -208,7 +208,7 @@ public enum FSkin { FOIL_07 (new int[] {0, 1710, 400, 570}), /** */ FOIL_08 (new int[] {400, 1710, 400, 570}), /** */ FOIL_09 (new int[] {0, 2280, 400, 570}), /** */ - FOIL_10 (new int[] {400, 2280, 400, 570}); + FOIL_10 (new int[] {400, 2280, 400, 570}); /** */ private int[] coords; /** @param xy   int[] coordinates */ @@ -218,6 +218,26 @@ public enum FSkin { public int[] getCoords() { return coords; } } + public enum OldFoils implements SkinProp { /** */ + FOIL_11 (new int[] {0, 0, 400, 570}), /** */ + FOIL_12 (new int[] {400, 0, 400, 570}), /** */ + FOIL_13 (new int[] {0, 570, 400, 570}), /** */ + FOIL_14 (new int[] {400, 570, 400, 570}), /** */ + FOIL_15 (new int[] {0, 1140, 400, 570}), /** */ + FOIL_16 (new int[] {400, 1140, 400, 570}), /** */ + FOIL_17 (new int[] {0, 1710, 400, 570}), /** */ + FOIL_18 (new int[] {400, 1710, 400, 570}), /** */ + FOIL_19 (new int[] {0, 2280, 400, 570}), /** */ + FOIL_20 (new int[] {400, 2280, 400, 570}); /** */ + + private int[] coords; + /** @param xy   int[] coordinates */ + OldFoils(final int[] xy) { this.coords = xy; } + /** @return int[] */ + @Override + public int[] getCoords() { return coords; } + } + /** */ public enum DockIcons implements SkinProp { /** */ ICO_SHORTCUTS (new int[] {160, 640, 80, 80}), /** */ @@ -395,6 +415,7 @@ public enum FSkin { FILE_SKINS_DIR = "res/skins/", FILE_ICON_SPRITE = "sprite_icons.png", FILE_FOIL_SPRITE = "sprite_foils.png", + FILE_OLD_FOIL_SPRITE = "sprite_old_foils.png", FILE_AVATAR_SPRITE = "sprite_avatars.png", FILE_FONT = "font1.ttf", FILE_SPLASH = "bg_splash.png", @@ -406,7 +427,7 @@ public enum FSkin { private static String preferredName; private static Font font; private static BufferedImage bimDefaultSprite, bimPreferredSprite, bimFoils, - bimDefaultAvatars, bimPreferredAvatars; + bimOldFoils, bimDefaultAvatars, bimPreferredAvatars; private static int x0, y0, w0, h0, newW, newH, preferredW, preferredH; private static int[] tempCoords; @@ -518,6 +539,7 @@ public enum FSkin { final File f3 = new File(DEFAULT_DIR + FILE_FOIL_SPRITE); final File f4 = new File(DEFAULT_DIR + FILE_AVATAR_SPRITE); final File f5 = new File(preferredDir + FILE_AVATAR_SPRITE); + final File f6 = new File(DEFAULT_DIR + FILE_OLD_FOIL_SPRITE); try { bimDefaultSprite = ImageIO.read(f1); @@ -526,6 +548,8 @@ public enum FSkin { barProgress.increment(); bimFoils = ImageIO.read(f3); barProgress.increment(); + bimOldFoils = f6.exists() ? ImageIO.read(f6) : ImageIO.read(f3); + barProgress.increment(); bimDefaultAvatars = ImageIO.read(f4); if (f5.exists()) { bimPreferredAvatars = ImageIO.read(f5); } @@ -571,7 +595,8 @@ public enum FSkin { for (final LayoutImages e : LayoutImages.values()) { FSkin.setImage(e); } // Foils have a separate sprite, so uses a specific method. - for (final Foils e : Foils.values()) { FSkin.setFoil(e); } + for (final Foils e : Foils.values()) { FSkin.setFoil(e, false); } + for (final OldFoils e : OldFoils.values()) { FSkin.setFoil(e, true); } // Assemble avatar images FSkin.assembleAvatars(); @@ -585,6 +610,7 @@ public enum FSkin { // Clear references to buffered images FSkin.bimDefaultSprite.flush(); FSkin.bimFoils.flush(); + FSkin.bimOldFoils.flush(); FSkin.bimPreferredSprite.flush(); FSkin.bimDefaultAvatars.flush(); @@ -592,6 +618,7 @@ public enum FSkin { FSkin.bimDefaultSprite = null; FSkin.bimFoils = null; + FSkin.bimOldFoils = null; FSkin.bimPreferredSprite = null; FSkin.bimDefaultAvatars = null; FSkin.bimPreferredAvatars = null; @@ -867,14 +894,14 @@ public enum FSkin { } } - private static void setFoil(final SkinProp s0) { + private static void setFoil(final SkinProp s0, boolean isOldStyle) { tempCoords = s0.getCoords(); x0 = tempCoords[0]; y0 = tempCoords[1]; w0 = tempCoords[2]; h0 = tempCoords[3]; - FSkin.images.put(s0, bimFoils.getSubimage(x0, y0, w0, h0)); + FSkin.images.put(s0, isOldStyle ? bimOldFoils.getSubimage(x0, y0, w0, h0) : bimFoils.getSubimage(x0, y0, w0, h0)); } private static void setColor(final SkinProp s0) {