mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-15 10:18:01 +00:00
Merge branch 'master' of git.cardforge.org:core-developers/forge into agetian-master
This commit is contained in:
@@ -239,7 +239,10 @@ public class ComputerUtilCost {
|
|||||||
for (final CostPart part : cost.getCostParts()) {
|
for (final CostPart part : cost.getCostParts()) {
|
||||||
if (part instanceof CostSacrifice) {
|
if (part instanceof CostSacrifice) {
|
||||||
CardCollection list = new CardCollection();
|
CardCollection list = new CardCollection();
|
||||||
final CardCollection exclude = new CardCollection(AiCardMemory.getMemorySet(ai, MemorySet.PAYS_SAC_COST));
|
final CardCollection exclude = new CardCollection();
|
||||||
|
if (AiCardMemory.getMemorySet(ai, MemorySet.PAYS_SAC_COST) != null) {
|
||||||
|
exclude.addAll(AiCardMemory.getMemorySet(ai, MemorySet.PAYS_SAC_COST));
|
||||||
|
}
|
||||||
if (part.payCostFromSource()) {
|
if (part.payCostFromSource()) {
|
||||||
list.add(source);
|
list.add(source);
|
||||||
} else if (part.getType().equals("OriginalHost")) {
|
} else if (part.getType().equals("OriginalHost")) {
|
||||||
@@ -448,7 +451,10 @@ public class ComputerUtilCost {
|
|||||||
if (c == null) {
|
if (c == null) {
|
||||||
c = AbilityUtils.calculateAmount(source, part.getAmount(), sa);
|
c = AbilityUtils.calculateAmount(source, part.getAmount(), sa);
|
||||||
}
|
}
|
||||||
CardCollection exclude = new CardCollection(AiCardMemory.getMemorySet(ai, MemorySet.PAYS_TAP_COST));
|
CardCollection exclude = new CardCollection();
|
||||||
|
if (AiCardMemory.getMemorySet(ai, MemorySet.PAYS_TAP_COST) != null) {
|
||||||
|
exclude.addAll(AiCardMemory.getMemorySet(ai, MemorySet.PAYS_TAP_COST));
|
||||||
|
}
|
||||||
// trying to produce mana that includes tapping source that will already be tapped
|
// trying to produce mana that includes tapping source that will already be tapped
|
||||||
if (exclude.contains(source) && cost.hasTapCost()) {
|
if (exclude.contains(source) && cost.hasTapCost()) {
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -146,6 +146,14 @@ public class AnimateAi extends SpellAbilityAi {
|
|||||||
if (!ComputerUtilCost.checkTapTypeCost(aiPlayer, sa.getPayCosts(), source, sa)) {
|
if (!ComputerUtilCost.checkTapTypeCost(aiPlayer, sa.getPayCosts(), source, sa)) {
|
||||||
return false; // prevent crewing with equal or better creatures
|
return false; // prevent crewing with equal or better creatures
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (sa.costHasManaX() && sa.getSVar("X").equals("Count$xPaid")) {
|
||||||
|
// Set PayX here to maximum value.
|
||||||
|
final int xPay = ComputerUtilCost.getMaxXValue(sa, aiPlayer);
|
||||||
|
|
||||||
|
sa.setXManaCostPaid(xPay);
|
||||||
|
}
|
||||||
|
|
||||||
if (!sa.usesTargeting()) {
|
if (!sa.usesTargeting()) {
|
||||||
final List<Card> defined = AbilityUtils.getDefinedCards(source, sa.getParam("Defined"), sa);
|
final List<Card> defined = AbilityUtils.getDefinedCards(source, sa.getParam("Defined"), sa);
|
||||||
boolean bFlag = false;
|
boolean bFlag = false;
|
||||||
|
|||||||
@@ -129,6 +129,23 @@ public final class ImageKeys {
|
|||||||
// if there's a 1st art variant try with it for .full images
|
// if there's a 1st art variant try with it for .full images
|
||||||
file = findFile(dir, filename.replaceAll("[0-9]*.full", "1.full"));
|
file = findFile(dir, filename.replaceAll("[0-9]*.full", "1.full"));
|
||||||
if (file != null) { return file; }
|
if (file != null) { return file; }
|
||||||
|
//setlookup
|
||||||
|
if (!StaticData.instance().getSetLookup().isEmpty()) {
|
||||||
|
for (String setKey : StaticData.instance().getSetLookup().keySet()) {
|
||||||
|
for (String setLookup : StaticData.instance().getSetLookup().get(setKey)) {
|
||||||
|
//.fullborder lookup
|
||||||
|
file = findFile(dir, TextUtil.fastReplace(fullborderFile, setKey, getSetFolder(setLookup)));
|
||||||
|
if (file != null) { return file; }
|
||||||
|
file = findFile(dir, TextUtil.fastReplace(fullborderFile, setKey, getSetFolder(setLookup)).replaceAll("[0-9]*.fullborder", "1.fullborder"));
|
||||||
|
if (file != null) { return file; }
|
||||||
|
//.full lookup
|
||||||
|
file = findFile(dir, TextUtil.fastReplace(filename, setKey, getSetFolder(setLookup)));
|
||||||
|
if (file != null) { return file; }
|
||||||
|
file = findFile(dir, TextUtil.fastReplace(filename, setKey, getSetFolder(setLookup)).replaceAll("[0-9]*.full", "1.full"));
|
||||||
|
if (file != null) { return file; }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
//if an image, like phenomenon or planes is missing .full in their filenames but you have an existing images that have .full/.fullborder
|
//if an image, like phenomenon or planes is missing .full in their filenames but you have an existing images that have .full/.fullborder
|
||||||
if (!filename.contains(".full")) {
|
if (!filename.contains(".full")) {
|
||||||
@@ -137,12 +154,6 @@ public final class ImageKeys {
|
|||||||
file = findFile(dir, TextUtil.addSuffix(filename,".fullborder"));
|
file = findFile(dir, TextUtil.addSuffix(filename,".fullborder"));
|
||||||
if (file != null) { return file; }
|
if (file != null) { return file; }
|
||||||
}
|
}
|
||||||
// some S00 cards are really part of 6ED
|
|
||||||
String s2kAlias = getSetFolder("S00");
|
|
||||||
if (filename.startsWith(s2kAlias)) {
|
|
||||||
file = findFile(dir, TextUtil.fastReplace(filename, s2kAlias, getSetFolder("6ED")));
|
|
||||||
if (file != null) { return file; }
|
|
||||||
}
|
|
||||||
|
|
||||||
if (dir.equals(CACHE_TOKEN_PICS_DIR)) {
|
if (dir.equals(CACHE_TOKEN_PICS_DIR)) {
|
||||||
int index = filename.lastIndexOf('_');
|
int index = filename.lastIndexOf('_');
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import forge.item.FatPack;
|
|||||||
import forge.item.PaperCard;
|
import forge.item.PaperCard;
|
||||||
import forge.item.SealedProduct;
|
import forge.item.SealedProduct;
|
||||||
import forge.token.TokenDb;
|
import forge.token.TokenDb;
|
||||||
|
import forge.util.FileUtil;
|
||||||
import forge.util.TextUtil;
|
import forge.util.TextUtil;
|
||||||
import forge.util.storage.IStorage;
|
import forge.util.storage.IStorage;
|
||||||
import forge.util.storage.StorageBase;
|
import forge.util.storage.StorageBase;
|
||||||
@@ -57,18 +58,19 @@ public class StaticData {
|
|||||||
private IStorage<FatPack.Template> fatPacks;
|
private IStorage<FatPack.Template> fatPacks;
|
||||||
private IStorage<BoosterBox.Template> boosterBoxes;
|
private IStorage<BoosterBox.Template> boosterBoxes;
|
||||||
private IStorage<PrintSheet> printSheets;
|
private IStorage<PrintSheet> printSheets;
|
||||||
|
private final Map<String, List<String>> setLookup = new HashMap<>();
|
||||||
|
|
||||||
private static StaticData lastInstance = null;
|
private static StaticData lastInstance = null;
|
||||||
|
|
||||||
public StaticData(CardStorageReader cardReader, CardStorageReader customCardReader, String editionFolder, String customEditionsFolder, String blockDataFolder, String cardArtPreference, boolean enableUnknownCards, boolean loadNonLegalCards) {
|
public StaticData(CardStorageReader cardReader, CardStorageReader customCardReader, String editionFolder, String customEditionsFolder, String blockDataFolder, String cardArtPreference, boolean enableUnknownCards, boolean loadNonLegalCards) {
|
||||||
this(cardReader, null, customCardReader, editionFolder, customEditionsFolder, blockDataFolder, cardArtPreference, enableUnknownCards, loadNonLegalCards, false, false);
|
this(cardReader, null, customCardReader, editionFolder, customEditionsFolder, blockDataFolder, "", cardArtPreference, enableUnknownCards, loadNonLegalCards, false, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public StaticData(CardStorageReader cardReader, CardStorageReader tokenReader, CardStorageReader customCardReader, String editionFolder, String customEditionsFolder, String blockDataFolder, String cardArtPreference, boolean enableUnknownCards, boolean loadNonLegalCards, boolean allowCustomCardsInDecksConformance){
|
public StaticData(CardStorageReader cardReader, CardStorageReader tokenReader, CardStorageReader customCardReader, String editionFolder, String customEditionsFolder, String blockDataFolder, String setLookupFolder, String cardArtPreference, boolean enableUnknownCards, boolean loadNonLegalCards, boolean allowCustomCardsInDecksConformance){
|
||||||
this(cardReader, tokenReader, customCardReader, editionFolder, customEditionsFolder, blockDataFolder, cardArtPreference, enableUnknownCards, loadNonLegalCards, allowCustomCardsInDecksConformance, false);
|
this(cardReader, tokenReader, customCardReader, editionFolder, customEditionsFolder, blockDataFolder, setLookupFolder, cardArtPreference, enableUnknownCards, loadNonLegalCards, allowCustomCardsInDecksConformance, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public StaticData(CardStorageReader cardReader, CardStorageReader tokenReader, CardStorageReader customCardReader, String editionFolder, String customEditionsFolder, String blockDataFolder, String cardArtPreference, boolean enableUnknownCards, boolean loadNonLegalCards, boolean allowCustomCardsInDecksConformance, boolean enableSmartCardArtSelection) {
|
public StaticData(CardStorageReader cardReader, CardStorageReader tokenReader, CardStorageReader customCardReader, String editionFolder, String customEditionsFolder, String blockDataFolder, String setLookupFolder, String cardArtPreference, boolean enableUnknownCards, boolean loadNonLegalCards, boolean allowCustomCardsInDecksConformance, boolean enableSmartCardArtSelection) {
|
||||||
this.cardReader = cardReader;
|
this.cardReader = cardReader;
|
||||||
this.tokenReader = tokenReader;
|
this.tokenReader = tokenReader;
|
||||||
this.editions = new CardEdition.Collection(new CardEdition.Reader(new File(editionFolder)));
|
this.editions = new CardEdition.Collection(new CardEdition.Reader(new File(editionFolder)));
|
||||||
@@ -143,12 +145,24 @@ public class StaticData {
|
|||||||
} else {
|
} else {
|
||||||
allTokens = null;
|
allTokens = null;
|
||||||
}
|
}
|
||||||
|
//initialize setLookup
|
||||||
|
if (FileUtil.isDirectoryWithFiles(setLookupFolder)){
|
||||||
|
for (File f : Objects.requireNonNull(new File(setLookupFolder).listFiles())){
|
||||||
|
if (f.isFile()) {
|
||||||
|
setLookup.put(f.getName().replace(".txt",""), FileUtil.readFile(f));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static StaticData instance() {
|
public static StaticData instance() {
|
||||||
return lastInstance;
|
return lastInstance;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Map<String, List<String>> getSetLookup() {
|
||||||
|
return setLookup;
|
||||||
|
}
|
||||||
|
|
||||||
public final CardEdition.Collection getEditions() {
|
public final CardEdition.Collection getEditions() {
|
||||||
return this.editions;
|
return this.editions;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,6 @@ ManaCost:3 U U R R
|
|||||||
Types:Instant
|
Types:Instant
|
||||||
A:SP$ DealDamage | Cost$ 3 U U R R | ValidTgts$ Creature,Player,Planeswalker | TgtPrompt$ Select any target | NumDmg$ 5 | SubAbility$ DBDig | SpellDescription$ CARDNAME deals 5 damage to any target. Look at the top five cards of your library. Put one of them into your hand and the rest on the bottom of your library in a random order.
|
A:SP$ DealDamage | Cost$ 3 U U R R | ValidTgts$ Creature,Player,Planeswalker | TgtPrompt$ Select any target | NumDmg$ 5 | SubAbility$ DBDig | SpellDescription$ CARDNAME deals 5 damage to any target. Look at the top five cards of your library. Put one of them into your hand and the rest on the bottom of your library in a random order.
|
||||||
SVar:DBDig:DB$Dig | DigNum$ 5 | RestRandomOrder$ True
|
SVar:DBDig:DB$Dig | DigNum$ 5 | RestRandomOrder$ True
|
||||||
A:AB$ Token | Cost$ UR UR Discard<1/CARDNAME> | ActivationZone$ Hand | TokenScript$ c_a_treasure_sac | SpellDescription$ Create a Treasure token.
|
A:AB$ Token | Cost$ UR UR Discard<1/CARDNAME> | ActivationZone$ Hand | TokenScript$ c_a_treasure_sac | AILogic$ AlwaysOnDiscard | SpellDescription$ Create a Treasure token.
|
||||||
DeckHas:Ability$Token
|
DeckHas:Ability$Token
|
||||||
Oracle:Creative Outburst deals 5 damage to any target. Look at the top five cards of your library. Put one of them into your hand and the rest on the bottom of your library in a random order.\n{U/R}{U/R}, Discard Creative Outburst: Create a Treasure token.
|
Oracle:Creative Outburst deals 5 damage to any target. Look at the top five cards of your library. Put one of them into your hand and the rest on the bottom of your library in a random order.\n{U/R}{U/R}, Discard Creative Outburst: Create a Treasure token.
|
||||||
@@ -2,6 +2,6 @@ Name:Elemental Masterpiece
|
|||||||
ManaCost:5 U R
|
ManaCost:5 U R
|
||||||
Types:Sorcery
|
Types:Sorcery
|
||||||
A:SP$ Token | Cost$ 5 U R | TokenAmount$ 2 | TokenScript$ ur_4_4_elemental | TokenOwner$ You | SpellDescription$ Create two 4/4 blue and red Elemental creature tokens.
|
A:SP$ Token | Cost$ 5 U R | TokenAmount$ 2 | TokenScript$ ur_4_4_elemental | TokenOwner$ You | SpellDescription$ Create two 4/4 blue and red Elemental creature tokens.
|
||||||
A:AB$ Token | Cost$ UR UR Discard<1/CARDNAME> | ActivationZone$ Hand | TokenScript$ c_a_treasure_sac | SpellDescription$ Create a Treasure token.
|
A:AB$ Token | Cost$ UR UR Discard<1/CARDNAME> | ActivationZone$ Hand | TokenScript$ c_a_treasure_sac | AILogic$ AlwaysOnDiscard | SpellDescription$ Create a Treasure token.
|
||||||
DeckHas:Ability$Token
|
DeckHas:Ability$Token
|
||||||
Oracle:Create two 4/4 blue and red Elemental creature tokens.\n{U/R}{U/R}, Discard Elemental Masterpiece: Create a Treasure token. (It's an artifact with "{T}, Sacrifice this artifact: Add one mana of any color.")
|
Oracle:Create two 4/4 blue and red Elemental creature tokens.\n{U/R}{U/R}, Discard Elemental Masterpiece: Create a Treasure token. (It's an artifact with "{T}, Sacrifice this artifact: Add one mana of any color.")
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ Name:Tempt with Discovery
|
|||||||
ManaCost:3 G
|
ManaCost:3 G
|
||||||
Types:Sorcery
|
Types:Sorcery
|
||||||
A:SP$ ChangeZone | Cost$ 3 G | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.YouCtrl | ChangeNum$ 1 | Hidden$ True | NoShuffle$ True | SubAbility$ DBRepeat | StackDescription$ SpellDescription | SpellDescription$ Tempting offer — Search your library for a land card and put it onto the battlefield. Each opponent may search their library for a land card and put it onto the battlefield. For each opponent who searches a library this way, search your library for a land card and put it onto the battlefield. Then each player who searched a library this way shuffles.
|
A:SP$ ChangeZone | Cost$ 3 G | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.YouCtrl | ChangeNum$ 1 | Hidden$ True | NoShuffle$ True | SubAbility$ DBRepeat | StackDescription$ SpellDescription | SpellDescription$ Tempting offer — Search your library for a land card and put it onto the battlefield. Each opponent may search their library for a land card and put it onto the battlefield. For each opponent who searches a library this way, search your library for a land card and put it onto the battlefield. Then each player who searched a library this way shuffles.
|
||||||
SVar:DBRepeat:DB$ RepeatEach | RepeatSubAbility$ DBChangeZone | RepeatPlayers$ Player.Opponent | SubAbility$ DBSearchAgain | RepeatOptionalForEachPlayer$ True | RepeatOptionalMessage$ Do you want to search their library for a land card and put it onto the battlefield?
|
SVar:DBRepeat:DB$ RepeatEach | RepeatSubAbility$ DBChangeZone | RepeatPlayers$ Player.Opponent | SubAbility$ DBSearchAgain | RepeatOptionalForEachPlayer$ True | RepeatOptionalMessage$ Do you want to search your library for a land card and put it onto the battlefield?
|
||||||
SVar:DBChangeZone:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.RememberedPlayerCtrl | DefinedPlayer$ Player.IsRemembered | Chooser$ Player.IsRemembered | ChangeNum$ 1 | Hidden$ True | SubAbility$ DBCount
|
SVar:DBChangeZone:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.RememberedPlayerCtrl | DefinedPlayer$ Player.IsRemembered | Chooser$ Player.IsRemembered | ChangeNum$ 1 | Hidden$ True | SubAbility$ DBCount
|
||||||
SVar:DBCount:DB$ StoreSVar | SVar$ X | Type$ CountSVar | Expression$ X/Plus.1
|
SVar:DBCount:DB$ StoreSVar | SVar$ X | Type$ CountSVar | Expression$ X/Plus.1
|
||||||
SVar:DBSearchAgain:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.YouCtrl | ChangeNum$ X | Hidden$ True | Shuffle$ True | StackDescription$ None | SubAbility$ DBReset
|
SVar:DBSearchAgain:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.YouCtrl | ChangeNum$ X | Hidden$ True | Shuffle$ True | StackDescription$ None | SubAbility$ DBReset
|
||||||
|
|||||||
@@ -8,7 +8,8 @@ Type=Expansion
|
|||||||
BoosterCovers=3
|
BoosterCovers=3
|
||||||
Booster=10 Common:fromSheet("IKO cards"):!fromSheet("IKO Lands"), 3 Uncommon:fromSheet("IKO cards"), 1 RareMythic:fromSheet("IKO cards"), 1 fromSheet("IKO Lands")
|
Booster=10 Common:fromSheet("IKO cards"):!fromSheet("IKO Lands"), 3 Uncommon:fromSheet("IKO cards"), 1 RareMythic:fromSheet("IKO cards"), 1 fromSheet("IKO Lands")
|
||||||
Prerelease=6 Boosters, 1 RareMythic+
|
Prerelease=6 Boosters, 1 RareMythic+
|
||||||
FatPackExtraSlots=20 BasicLands, 20 BasicLands+, 1 Colossification+|IKO|3
|
FatPackExtraSlots=20 BasicLands, 20 BasicLands+
|
||||||
|
#, 1 Colossification+|IKO|3
|
||||||
ScryfallCode=IKO
|
ScryfallCode=IKO
|
||||||
|
|
||||||
[cards]
|
[cards]
|
||||||
|
|||||||
@@ -6,7 +6,8 @@ Type=Core
|
|||||||
BoosterCovers=3
|
BoosterCovers=3
|
||||||
Booster=10 Common:fromSheet("M21 cards"):!fromSheet("M21 Lands"), 3 Uncommon:fromSheet("M21 cards"), 1 RareMythic:fromSheet("M21 cards"), 1 fromSheet("M21 Lands")
|
Booster=10 Common:fromSheet("M21 cards"):!fromSheet("M21 Lands"), 3 Uncommon:fromSheet("M21 cards"), 1 RareMythic:fromSheet("M21 cards"), 1 fromSheet("M21 Lands")
|
||||||
Prerelease=6 Boosters, 1 RareMythic+
|
Prerelease=6 Boosters, 1 RareMythic+
|
||||||
FatPackExtraSlots=20 BasicLands, 20 BasicLands+, 1 Pack Leader+|M21|3
|
FatPackExtraSlots=20 BasicLands, 20 BasicLands+
|
||||||
|
#, 1 Pack Leader+|M21|3
|
||||||
ChaosDraftThemes=CORE_SET
|
ChaosDraftThemes=CORE_SET
|
||||||
ScryfallCode=M21
|
ScryfallCode=M21
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,8 @@ Type=Expansion
|
|||||||
BoosterCovers=3
|
BoosterCovers=3
|
||||||
Booster=10 Common:fromSheet("THB Commons"), 3 Uncommon:fromSheet("THB Uncommons"), 1 RareMythic:fromSheet("THB RareMythics"), 1 BasicLand
|
Booster=10 Common:fromSheet("THB Commons"), 3 Uncommon:fromSheet("THB Uncommons"), 1 RareMythic:fromSheet("THB RareMythics"), 1 BasicLand
|
||||||
Prerelease=6 Boosters, 1 RareMythic+
|
Prerelease=6 Boosters, 1 RareMythic+
|
||||||
FatPackExtraSlots=20 BasicLands, 20 BasicLands+, 1 Arasta of the Endless Web+|THB|3
|
FatPackExtraSlots=20 BasicLands, 20 BasicLands+
|
||||||
|
#, 1 Arasta of the Endless Web+|THB|3
|
||||||
ChaosDraftThemes=GRAVEYARD_MATTERS
|
ChaosDraftThemes=GRAVEYARD_MATTERS
|
||||||
ScryfallCode=THB
|
ScryfallCode=THB
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,8 @@ BoosterCovers=3
|
|||||||
Booster=10 Common:fromSheet("ELD cards"), 3 Uncommon:fromSheet("ELD cards"), 1 RareMythic:fromSheet("ELD cards"), 1 BasicLand
|
Booster=10 Common:fromSheet("ELD cards"), 3 Uncommon:fromSheet("ELD cards"), 1 RareMythic:fromSheet("ELD cards"), 1 BasicLand
|
||||||
Prerelease=6 Boosters, 1 RareMythic+
|
Prerelease=6 Boosters, 1 RareMythic+
|
||||||
FatPack=10
|
FatPack=10
|
||||||
FatPackExtraSlots=20 BasicLands, 20 BasicLands+, 1 Piper of the Swarm+|ELD|3
|
FatPackExtraSlots=20 BasicLands, 20 BasicLands+
|
||||||
|
#, 1 Piper of the Swarm+|ELD|3
|
||||||
ScryfallCode=ELD
|
ScryfallCode=ELD
|
||||||
|
|
||||||
[cards]
|
[cards]
|
||||||
|
|||||||
@@ -10,7 +10,8 @@ Booster=10 Common:!dfc:fromSheet("ZNR cards"), 3 Uncommon:!dfc:fromSheet("ZNR ca
|
|||||||
BoosterReplaceSlotFromPrintSheet=ZNR ModalDoubleFaceCards
|
BoosterReplaceSlotFromPrintSheet=ZNR ModalDoubleFaceCards
|
||||||
Prerelease=6 Boosters, 1 RareMythic+
|
Prerelease=6 Boosters, 1 RareMythic+
|
||||||
#BoosterBox=36 Boosters, 1 fromSheet('ZNR buy a box')+
|
#BoosterBox=36 Boosters, 1 fromSheet('ZNR buy a box')+
|
||||||
FatPackExtraSlots=20 BasicLands, 20 BasicLands+, 1 Charix; the Raging Isle+|ZNR|3
|
FatPackExtraSlots=20 BasicLands, 20 BasicLands+
|
||||||
|
#, 1 Charix; the Raging Isle+|ZNR|3
|
||||||
ScryfallCode=ZNR
|
ScryfallCode=ZNR
|
||||||
|
|
||||||
[cards]
|
[cards]
|
||||||
|
|||||||
@@ -121,15 +121,15 @@ lblAltLifeDisplay=Alternatives Spieler-Layout (Landscape-Modus)
|
|||||||
nlAltLifeDisplay=Alternative Anzeige von Lebens-, Gift-, Energie- und Erfahrungspunkten.
|
nlAltLifeDisplay=Alternative Anzeige von Lebens-, Gift-, Energie- und Erfahrungspunkten.
|
||||||
lblAltZoneTabs=Alternatives Spielerbereich-Layout (Landscape-Modus)
|
lblAltZoneTabs=Alternatives Spielerbereich-Layout (Landscape-Modus)
|
||||||
nlAltZoneTabs=Alternative Anzeige von Kartenhand, Friedhof, Bibliothek und Exilzone.
|
nlAltZoneTabs=Alternative Anzeige von Kartenhand, Friedhof, Bibliothek und Exilzone.
|
||||||
lblPreferredArt=Kartenkunst-Präferenz
|
lblPreferredArt=Kartenbild-Präferenz
|
||||||
nlPreferredArt=Gibt an, welche Grafik für Karten ausgewählt werden soll, wenn keine Edition angegeben ist.
|
nlPreferredArt=Gibt an, welche Grafik für Karten ausgewählt werden soll, wenn keine Edition angegeben ist.
|
||||||
lblPrefArtExpansionOnly=Kartenkunst aus Kern-, Erweiterungs- und Nachdrucksets bevorzugen
|
lblPrefArtExpansionOnly=Kartenbilder aus Haupt-, Erweiterungs- und Reprint-Sets bevorzugen
|
||||||
nlPrefArtExpansionOnly=Bevorzugen Sie, wann immer möglich, Kartenkunst aus Basis-, Erweiterungs- und Reprint-Sets (z. B. keine Promo, keine Online-Editionen).
|
nlPrefArtExpansionOnly=Bevorzugt, wann immer möglich, Kartenbilder aus Haupt-, Erweiterungs- und Reprint-Sets (z. B. keine Promo, keine Online-Editionen).
|
||||||
lblSmartCardArtOpt=Aktivieren Sie die intelligente Auswahl für Kartengrafiken in Decks
|
lblSmartCardArtOpt=Aktiviert die intelligente Auswahl für Kartenbilder in Decks
|
||||||
nlSmartCardArtOpt=Wenn diese Option aktiviert ist, wird Kartenkunst in Decks automatisch optimiert, um mit Kartenrahmen, Editionen und mehreren Kunstillustrationen zusammenzupassen.
|
nlSmartCardArtOpt=Wenn diese Option aktiviert ist, werden Kartenbilder in Decks automatisch optimiert, um mit Kartenrahmen, Editionen und mehrfachen Bildvarianten zusammenzupassen.
|
||||||
nlSmartCardArtOptNote=HINWEIS: Diese Option wirkt sich nur auf Karten aus, die keine angegebene Edition haben. Andere Karten bleiben unverändert. (Warnung: Experimentell)
|
nlSmartCardArtOptNote=HINWEIS: Diese Option wirkt sich nur auf Karten aus, die keine angegebene Edition haben. Andere Karten bleiben unverändert. Warnung: Experimentell!!!
|
||||||
latestArtOpt=Neueste Kunst
|
latestArtOpt=Neueste Version
|
||||||
originalArtOpt=Originalkunst
|
originalArtOpt=Originalbild
|
||||||
Troubleshooting=Fehlerbehebung
|
Troubleshooting=Fehlerbehebung
|
||||||
GeneralConfiguration=Allgemeine Einstellungen
|
GeneralConfiguration=Allgemeine Einstellungen
|
||||||
lblPlayerName=Spielername
|
lblPlayerName=Spielername
|
||||||
|
|||||||
74
forge-gui/res/setlookup/J21.txt
Normal file
74
forge-gui/res/setlookup/J21.txt
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
AFR
|
||||||
|
MH2
|
||||||
|
STX
|
||||||
|
TSR
|
||||||
|
KHM
|
||||||
|
CMR
|
||||||
|
KLR
|
||||||
|
ZNC
|
||||||
|
ZNR
|
||||||
|
AKR
|
||||||
|
ANB
|
||||||
|
2XM
|
||||||
|
JMP
|
||||||
|
M21
|
||||||
|
IKO
|
||||||
|
C20
|
||||||
|
THB
|
||||||
|
SLD
|
||||||
|
GN2
|
||||||
|
ELD
|
||||||
|
C19
|
||||||
|
M20
|
||||||
|
MH1
|
||||||
|
WAR
|
||||||
|
GK2
|
||||||
|
RNA
|
||||||
|
UMA
|
||||||
|
GK1
|
||||||
|
GRN
|
||||||
|
C18
|
||||||
|
M19
|
||||||
|
BBD
|
||||||
|
CM2
|
||||||
|
DOM
|
||||||
|
A25
|
||||||
|
RIX
|
||||||
|
IMA
|
||||||
|
DDT
|
||||||
|
XLN
|
||||||
|
HOU
|
||||||
|
AKH
|
||||||
|
MM3
|
||||||
|
AER
|
||||||
|
PCA
|
||||||
|
DDR
|
||||||
|
CN2
|
||||||
|
SOI
|
||||||
|
W16
|
||||||
|
DDQ
|
||||||
|
OGW
|
||||||
|
BFZ
|
||||||
|
ORI
|
||||||
|
MM2
|
||||||
|
DTK
|
||||||
|
FRF
|
||||||
|
KTK
|
||||||
|
EMN
|
||||||
|
M15
|
||||||
|
VMA
|
||||||
|
THS
|
||||||
|
M14
|
||||||
|
DGM
|
||||||
|
GTC
|
||||||
|
ISD
|
||||||
|
MBS
|
||||||
|
ALA
|
||||||
|
MOR
|
||||||
|
LRW
|
||||||
|
10E
|
||||||
|
LGN
|
||||||
|
ONS
|
||||||
|
PCY
|
||||||
|
P02
|
||||||
|
WTH
|
||||||
1
forge-gui/res/setlookup/S00.txt
Normal file
1
forge-gui/res/setlookup/S00.txt
Normal file
@@ -0,0 +1 @@
|
|||||||
|
6ED
|
||||||
1
forge-gui/res/setlookup/S2K.txt
Normal file
1
forge-gui/res/setlookup/S2K.txt
Normal file
@@ -0,0 +1 @@
|
|||||||
|
6ED
|
||||||
@@ -32,6 +32,7 @@ public final class ForgeConstants {
|
|||||||
|
|
||||||
public static final String RES_DIR = ASSETS_DIR + "res" + PATH_SEPARATOR;
|
public static final String RES_DIR = ASSETS_DIR + "res" + PATH_SEPARATOR;
|
||||||
public static final String LISTS_DIR = RES_DIR + "lists" + PATH_SEPARATOR;
|
public static final String LISTS_DIR = RES_DIR + "lists" + PATH_SEPARATOR;
|
||||||
|
public static final String SETLOOKUP_DIR = RES_DIR + "setlookup" + PATH_SEPARATOR;
|
||||||
public static final String KEYWORD_LIST_FILE = LISTS_DIR + "NonStackingKWList.txt";
|
public static final String KEYWORD_LIST_FILE = LISTS_DIR + "NonStackingKWList.txt";
|
||||||
public static final String TYPE_LIST_FILE = LISTS_DIR + "TypeLists.txt";
|
public static final String TYPE_LIST_FILE = LISTS_DIR + "TypeLists.txt";
|
||||||
public static final String PLANESWALKER_ACHIEVEMENT_LIST_FILE = LISTS_DIR + "planeswalker-achievements.txt";
|
public static final String PLANESWALKER_ACHIEVEMENT_LIST_FILE = LISTS_DIR + "planeswalker-achievements.txt";
|
||||||
|
|||||||
@@ -179,7 +179,7 @@ public final class FModel {
|
|||||||
customReader = null;
|
customReader = null;
|
||||||
}
|
}
|
||||||
magicDb = new StaticData(reader, tokenReader, customReader, ForgeConstants.EDITIONS_DIR,
|
magicDb = new StaticData(reader, tokenReader, customReader, ForgeConstants.EDITIONS_DIR,
|
||||||
ForgeConstants.USER_CUSTOM_EDITIONS_DIR, ForgeConstants.BLOCK_DATA_DIR,
|
ForgeConstants.USER_CUSTOM_EDITIONS_DIR, ForgeConstants.BLOCK_DATA_DIR, ForgeConstants.SETLOOKUP_DIR,
|
||||||
FModel.getPreferences().getPref(FPref.UI_PREFERRED_ART),
|
FModel.getPreferences().getPref(FPref.UI_PREFERRED_ART),
|
||||||
FModel.getPreferences().getPrefBoolean(FPref.UI_LOAD_UNKNOWN_CARDS),
|
FModel.getPreferences().getPrefBoolean(FPref.UI_LOAD_UNKNOWN_CARDS),
|
||||||
FModel.getPreferences().getPrefBoolean(FPref.UI_LOAD_NONLEGAL_CARDS),
|
FModel.getPreferences().getPrefBoolean(FPref.UI_LOAD_NONLEGAL_CARDS),
|
||||||
|
|||||||
Reference in New Issue
Block a user