mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-17 11:18:01 +00:00
- Implemented foiling based on card edition-specific information about the availability and style of foil.
- Added the ability to differentiate between old-style and new-style (modern) foils. If a separate foil sheet called sprite_old_foils.png is available, that sheet will be used for pre-8th edition cards. If not available, the same sprite sheet (sprite_foils.png) will be used for all foils. - Note that the edition files are not yet modified with the information about availability/style of foil cards. This has the nasty temporary side effect of disabling random foiling for all sets (to be remedied in the nearest future).
This commit is contained in:
@@ -19,7 +19,9 @@ import forge.Card;
|
|||||||
import forge.CardLists;
|
import forge.CardLists;
|
||||||
import forge.CardPredicates;
|
import forge.CardPredicates;
|
||||||
import forge.GameLogEntryType;
|
import forge.GameLogEntryType;
|
||||||
|
import forge.Singletons;
|
||||||
import forge.card.CardDb;
|
import forge.card.CardDb;
|
||||||
|
import forge.card.CardEdition;
|
||||||
import forge.card.trigger.Trigger;
|
import forge.card.trigger.Trigger;
|
||||||
import forge.card.trigger.TriggerHandler;
|
import forge.card.trigger.TriggerHandler;
|
||||||
import forge.deck.CardPool;
|
import forge.deck.CardPool;
|
||||||
@@ -113,9 +115,9 @@ public class GameNew {
|
|||||||
return myRemovedAnteCards;
|
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);
|
PlayerZone library = player.getZone(zoneType);
|
||||||
for (final Entry<PaperCard, Integer> stackOfCards : secion) {
|
for (final Entry<PaperCard, Integer> stackOfCards : section) {
|
||||||
final PaperCard cp = stackOfCards.getKey();
|
final PaperCard cp = stackOfCards.getKey();
|
||||||
for (int i = 0; i < stackOfCards.getValue(); i++) {
|
for (int i = 0; i < stackOfCards.getValue(); i++) {
|
||||||
|
|
||||||
@@ -129,9 +131,22 @@ public class GameNew {
|
|||||||
|
|
||||||
final Card card = cpi.toForgeCard(player);
|
final Card card = cpi.toForgeCard(player);
|
||||||
|
|
||||||
// Assign random foiling on approximately 1:20 cards
|
// Assign card-specific foiling or random foiling on approximately 1:20 cards if enabled
|
||||||
if (cp.isFoil() || (canRandomFoil && MyRandom.percentTrue(5))) {
|
CardEdition.FoilType foilType = Singletons.getModel().getEditions().get(card.getCurSetCode()).getFoilType();
|
||||||
final int iFoil = generator.nextInt(9) + 1;
|
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);
|
card.setFoil(iFoil);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -116,6 +116,17 @@ public class CardFaceSymbols {
|
|||||||
MANA_IMAGES.put("foil08", FSkin.getImage(FSkin.Foils.FOIL_08));
|
MANA_IMAGES.put("foil08", FSkin.getImage(FSkin.Foils.FOIL_08));
|
||||||
MANA_IMAGES.put("foil09", FSkin.getImage(FSkin.Foils.FOIL_09));
|
MANA_IMAGES.put("foil09", FSkin.getImage(FSkin.Foils.FOIL_09));
|
||||||
MANA_IMAGES.put("foil10", FSkin.getImage(FSkin.Foils.FOIL_10));
|
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));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -208,7 +208,7 @@ public enum FSkin {
|
|||||||
FOIL_07 (new int[] {0, 1710, 400, 570}), /** */
|
FOIL_07 (new int[] {0, 1710, 400, 570}), /** */
|
||||||
FOIL_08 (new int[] {400, 1710, 400, 570}), /** */
|
FOIL_08 (new int[] {400, 1710, 400, 570}), /** */
|
||||||
FOIL_09 (new int[] {0, 2280, 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;
|
private int[] coords;
|
||||||
/** @param xy   int[] coordinates */
|
/** @param xy   int[] coordinates */
|
||||||
@@ -218,6 +218,26 @@ public enum FSkin {
|
|||||||
public int[] getCoords() { return coords; }
|
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 { /** */
|
public enum DockIcons implements SkinProp { /** */
|
||||||
ICO_SHORTCUTS (new int[] {160, 640, 80, 80}), /** */
|
ICO_SHORTCUTS (new int[] {160, 640, 80, 80}), /** */
|
||||||
@@ -395,6 +415,7 @@ public enum FSkin {
|
|||||||
FILE_SKINS_DIR = "res/skins/",
|
FILE_SKINS_DIR = "res/skins/",
|
||||||
FILE_ICON_SPRITE = "sprite_icons.png",
|
FILE_ICON_SPRITE = "sprite_icons.png",
|
||||||
FILE_FOIL_SPRITE = "sprite_foils.png",
|
FILE_FOIL_SPRITE = "sprite_foils.png",
|
||||||
|
FILE_OLD_FOIL_SPRITE = "sprite_old_foils.png",
|
||||||
FILE_AVATAR_SPRITE = "sprite_avatars.png",
|
FILE_AVATAR_SPRITE = "sprite_avatars.png",
|
||||||
FILE_FONT = "font1.ttf",
|
FILE_FONT = "font1.ttf",
|
||||||
FILE_SPLASH = "bg_splash.png",
|
FILE_SPLASH = "bg_splash.png",
|
||||||
@@ -406,7 +427,7 @@ public enum FSkin {
|
|||||||
private static String preferredName;
|
private static String preferredName;
|
||||||
private static Font font;
|
private static Font font;
|
||||||
private static BufferedImage bimDefaultSprite, bimPreferredSprite, bimFoils,
|
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 x0, y0, w0, h0, newW, newH, preferredW, preferredH;
|
||||||
private static int[] tempCoords;
|
private static int[] tempCoords;
|
||||||
|
|
||||||
@@ -518,6 +539,7 @@ public enum FSkin {
|
|||||||
final File f3 = new File(DEFAULT_DIR + FILE_FOIL_SPRITE);
|
final File f3 = new File(DEFAULT_DIR + FILE_FOIL_SPRITE);
|
||||||
final File f4 = new File(DEFAULT_DIR + FILE_AVATAR_SPRITE);
|
final File f4 = new File(DEFAULT_DIR + FILE_AVATAR_SPRITE);
|
||||||
final File f5 = new File(preferredDir + FILE_AVATAR_SPRITE);
|
final File f5 = new File(preferredDir + FILE_AVATAR_SPRITE);
|
||||||
|
final File f6 = new File(DEFAULT_DIR + FILE_OLD_FOIL_SPRITE);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
bimDefaultSprite = ImageIO.read(f1);
|
bimDefaultSprite = ImageIO.read(f1);
|
||||||
@@ -526,6 +548,8 @@ public enum FSkin {
|
|||||||
barProgress.increment();
|
barProgress.increment();
|
||||||
bimFoils = ImageIO.read(f3);
|
bimFoils = ImageIO.read(f3);
|
||||||
barProgress.increment();
|
barProgress.increment();
|
||||||
|
bimOldFoils = f6.exists() ? ImageIO.read(f6) : ImageIO.read(f3);
|
||||||
|
barProgress.increment();
|
||||||
bimDefaultAvatars = ImageIO.read(f4);
|
bimDefaultAvatars = ImageIO.read(f4);
|
||||||
|
|
||||||
if (f5.exists()) { bimPreferredAvatars = ImageIO.read(f5); }
|
if (f5.exists()) { bimPreferredAvatars = ImageIO.read(f5); }
|
||||||
@@ -571,7 +595,8 @@ public enum FSkin {
|
|||||||
for (final LayoutImages e : LayoutImages.values()) { FSkin.setImage(e); }
|
for (final LayoutImages e : LayoutImages.values()) { FSkin.setImage(e); }
|
||||||
|
|
||||||
// Foils have a separate sprite, so uses a specific method.
|
// 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
|
// Assemble avatar images
|
||||||
FSkin.assembleAvatars();
|
FSkin.assembleAvatars();
|
||||||
@@ -585,6 +610,7 @@ public enum FSkin {
|
|||||||
// Clear references to buffered images
|
// Clear references to buffered images
|
||||||
FSkin.bimDefaultSprite.flush();
|
FSkin.bimDefaultSprite.flush();
|
||||||
FSkin.bimFoils.flush();
|
FSkin.bimFoils.flush();
|
||||||
|
FSkin.bimOldFoils.flush();
|
||||||
FSkin.bimPreferredSprite.flush();
|
FSkin.bimPreferredSprite.flush();
|
||||||
FSkin.bimDefaultAvatars.flush();
|
FSkin.bimDefaultAvatars.flush();
|
||||||
|
|
||||||
@@ -592,6 +618,7 @@ public enum FSkin {
|
|||||||
|
|
||||||
FSkin.bimDefaultSprite = null;
|
FSkin.bimDefaultSprite = null;
|
||||||
FSkin.bimFoils = null;
|
FSkin.bimFoils = null;
|
||||||
|
FSkin.bimOldFoils = null;
|
||||||
FSkin.bimPreferredSprite = null;
|
FSkin.bimPreferredSprite = null;
|
||||||
FSkin.bimDefaultAvatars = null;
|
FSkin.bimDefaultAvatars = null;
|
||||||
FSkin.bimPreferredAvatars = 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();
|
tempCoords = s0.getCoords();
|
||||||
x0 = tempCoords[0];
|
x0 = tempCoords[0];
|
||||||
y0 = tempCoords[1];
|
y0 = tempCoords[1];
|
||||||
w0 = tempCoords[2];
|
w0 = tempCoords[2];
|
||||||
h0 = tempCoords[3];
|
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) {
|
private static void setColor(final SkinProp s0) {
|
||||||
|
|||||||
Reference in New Issue
Block a user