mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-17 19:28:01 +00:00
Merge remote-tracking branch 'upstream/master' into collector-number-in-card-list-and-card-db-refactoring
This commit is contained in:
@@ -291,14 +291,12 @@ public class ComputerUtilCombat {
|
|||||||
* @return a int.
|
* @return a int.
|
||||||
*/
|
*/
|
||||||
public static int lifeThatWouldRemain(final Player ai, final Combat combat) {
|
public static int lifeThatWouldRemain(final Player ai, final Combat combat) {
|
||||||
|
|
||||||
int damage = 0;
|
int damage = 0;
|
||||||
|
|
||||||
final List<Card> attackers = combat.getAttackersOf(ai);
|
final List<Card> attackers = combat.getAttackersOf(ai);
|
||||||
final List<Card> unblocked = Lists.newArrayList();
|
final List<Card> unblocked = Lists.newArrayList();
|
||||||
|
|
||||||
for (final Card attacker : attackers) {
|
for (final Card attacker : attackers) {
|
||||||
|
|
||||||
final List<Card> blockers = combat.getBlockers(attacker);
|
final List<Card> blockers = combat.getBlockers(attacker);
|
||||||
|
|
||||||
if ((blockers.size() == 0)
|
if ((blockers.size() == 0)
|
||||||
@@ -418,7 +416,6 @@ public class ComputerUtilCombat {
|
|||||||
final List<Card> threateningCommanders = getLifeThreateningCommanders(ai,combat);
|
final List<Card> threateningCommanders = getLifeThreateningCommanders(ai,combat);
|
||||||
|
|
||||||
for (final Card attacker : attackers) {
|
for (final Card attacker : attackers) {
|
||||||
|
|
||||||
final List<Card> blockers = combat.getBlockers(attacker);
|
final List<Card> blockers = combat.getBlockers(attacker);
|
||||||
|
|
||||||
if (blockers.isEmpty()) {
|
if (blockers.isEmpty()) {
|
||||||
@@ -2266,7 +2263,7 @@ public class ComputerUtilCombat {
|
|||||||
if (!re.matchesValidParam("ValidSource", source)) {
|
if (!re.matchesValidParam("ValidSource", source)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (!re.matchesValidParam("ValidTarget", source)) {
|
if (!re.matchesValidParam("ValidTarget", target)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (re.hasParam("IsCombat")) {
|
if (re.hasParam("IsCombat")) {
|
||||||
|
|||||||
@@ -138,7 +138,7 @@ public class CardStorageReader {
|
|||||||
final CardRules.Reader rulesReader = new CardRules.Reader();
|
final CardRules.Reader rulesReader = new CardRules.Reader();
|
||||||
|
|
||||||
final List<CardRules> result = new ArrayList<>();
|
final List<CardRules> result = new ArrayList<>();
|
||||||
for(int i = from; i < to; i++) {
|
for (int i = from; i < to; i++) {
|
||||||
final ZipEntry ze = files.get(i);
|
final ZipEntry ze = files.get(i);
|
||||||
// if (ze.getName().endsWith(CardStorageReader.CARD_FILE_DOT_EXTENSION)) // already filtered!
|
// if (ze.getName().endsWith(CardStorageReader.CARD_FILE_DOT_EXTENSION)) // already filtered!
|
||||||
result.add(this.loadCard(rulesReader, ze));
|
result.add(this.loadCard(rulesReader, ze));
|
||||||
@@ -315,11 +315,11 @@ public class CardStorageReader {
|
|||||||
final List<Future<List<CardRules>>> parts = executor.invokeAll(tasks);
|
final List<Future<List<CardRules>>> parts = executor.invokeAll(tasks);
|
||||||
executor.shutdown();
|
executor.shutdown();
|
||||||
cdl.await();
|
cdl.await();
|
||||||
for(final Future<List<CardRules>> pp : parts) {
|
for (final Future<List<CardRules>> pp : parts) {
|
||||||
result.addAll(pp.get());
|
result.addAll(pp.get());
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for(final Callable<List<CardRules>> c : tasks) {
|
for (final Callable<List<CardRules>> c : tasks) {
|
||||||
result.addAll(c.call());
|
result.addAll(c.call());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -240,7 +240,6 @@ public class StaticData {
|
|||||||
private void tryToLoadCard(String requestInfo){
|
private void tryToLoadCard(String requestInfo){
|
||||||
CardDb.CardRequest r = CardRequest.fromString(requestInfo);
|
CardDb.CardRequest r = CardRequest.fromString(requestInfo);
|
||||||
String cardName = r.cardName;
|
String cardName = r.cardName;
|
||||||
String setCode = r.edition;
|
|
||||||
CardRules rules = cardReader.attemptToLoadCard(cardName, setCode);
|
CardRules rules = cardReader.attemptToLoadCard(cardName, setCode);
|
||||||
CardRules customRules = null;
|
CardRules customRules = null;
|
||||||
if (customCardReader != null) {
|
if (customCardReader != null) {
|
||||||
@@ -258,14 +257,6 @@ public class StaticData {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO Remove these in favor of them being associated to the Edition
|
|
||||||
/** @return {@link forge.util.storage.IStorage}<{@link forge.item.SealedProduct.Template}> */
|
|
||||||
public IStorage<FatPack.Template> getFatPacks() {
|
|
||||||
if (fatPacks == null)
|
|
||||||
fatPacks = new StorageBase<>("Fat packs", new FatPack.Template.Reader(blockDataFolder + "fatpacks.txt"));
|
|
||||||
return fatPacks;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @return {@link forge.util.storage.IStorage}<{@link forge.item.SealedProduct.Template}> */
|
/** @return {@link forge.util.storage.IStorage}<{@link forge.item.SealedProduct.Template}> */
|
||||||
public final IStorage<SealedProduct.Template> getTournamentPacks() {
|
public final IStorage<SealedProduct.Template> getTournamentPacks() {
|
||||||
if (tournaments == null)
|
if (tournaments == null)
|
||||||
|
|||||||
@@ -84,6 +84,16 @@ public final class CardEdition implements Comparable<CardEdition> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getFatPackDefault() {
|
||||||
|
switch (this) {
|
||||||
|
case CORE:
|
||||||
|
case EXPANSION:
|
||||||
|
return "10";
|
||||||
|
default:
|
||||||
|
return "0";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public String toString(){
|
public String toString(){
|
||||||
String[] names = TextUtil.splitWithParenthesis(this.name().toLowerCase(), '_');
|
String[] names = TextUtil.splitWithParenthesis(this.name().toLowerCase(), '_');
|
||||||
for (int i = 0; i < names.length; i++)
|
for (int i = 0; i < names.length; i++)
|
||||||
@@ -128,7 +138,8 @@ public final class CardEdition implements Comparable<CardEdition> {
|
|||||||
BUY_A_BOX("buy a box"),
|
BUY_A_BOX("buy a box"),
|
||||||
PROMO("promo"),
|
PROMO("promo"),
|
||||||
BUNDLE("bundle"),
|
BUNDLE("bundle"),
|
||||||
BOX_TOPPER("box topper");
|
BOX_TOPPER("box topper"),
|
||||||
|
DUNGEONS("dungeons");
|
||||||
|
|
||||||
private final String name;
|
private final String name;
|
||||||
|
|
||||||
@@ -242,6 +253,8 @@ public final class CardEdition implements Comparable<CardEdition> {
|
|||||||
// SealedProduct
|
// SealedProduct
|
||||||
private String prerelease = null;
|
private String prerelease = null;
|
||||||
private int boosterBoxCount = 36;
|
private int boosterBoxCount = 36;
|
||||||
|
private int fatPackCount = 10;
|
||||||
|
private String fatPackExtraSlots = "";
|
||||||
|
|
||||||
// Booster/draft info
|
// Booster/draft info
|
||||||
private boolean smallSetOverride = false;
|
private boolean smallSetOverride = false;
|
||||||
@@ -332,6 +345,8 @@ public final class CardEdition implements Comparable<CardEdition> {
|
|||||||
|
|
||||||
public String getPrerelease() { return prerelease; }
|
public String getPrerelease() { return prerelease; }
|
||||||
public int getBoosterBoxCount() { return boosterBoxCount; }
|
public int getBoosterBoxCount() { return boosterBoxCount; }
|
||||||
|
public int getFatPackCount() { return fatPackCount; }
|
||||||
|
public String getFatPackExtraSlots() { return fatPackExtraSlots; }
|
||||||
|
|
||||||
public FoilType getFoilType() { return foilType; }
|
public FoilType getFoilType() { return foilType; }
|
||||||
public double getFoilChanceInBooster() { return foilChanceInBooster; }
|
public double getFoilChanceInBooster() { return foilChanceInBooster; }
|
||||||
@@ -441,11 +456,11 @@ public final class CardEdition implements Comparable<CardEdition> {
|
|||||||
Map<String, Integer> cardToIndex = new HashMap<>();
|
Map<String, Integer> cardToIndex = new HashMap<>();
|
||||||
|
|
||||||
List<PrintSheet> sheets = Lists.newArrayList();
|
List<PrintSheet> sheets = Lists.newArrayList();
|
||||||
for(String sectionName : cardMap.keySet()) {
|
for (String sectionName : cardMap.keySet()) {
|
||||||
PrintSheet sheet = new PrintSheet(String.format("%s %s", this.getCode(), sectionName));
|
PrintSheet sheet = new PrintSheet(String.format("%s %s", this.getCode(), sectionName));
|
||||||
|
|
||||||
List<CardInSet> cards = cardMap.get(sectionName);
|
List<CardInSet> cards = cardMap.get(sectionName);
|
||||||
for(CardInSet card : cards) {
|
for (CardInSet card : cards) {
|
||||||
int index = 1;
|
int index = 1;
|
||||||
if (cardToIndex.containsKey(card.name)) {
|
if (cardToIndex.containsKey(card.name)) {
|
||||||
index = cardToIndex.get(card.name);
|
index = cardToIndex.get(card.name);
|
||||||
@@ -460,7 +475,7 @@ public final class CardEdition implements Comparable<CardEdition> {
|
|||||||
sheets.add(sheet);
|
sheets.add(sheet);
|
||||||
}
|
}
|
||||||
|
|
||||||
for(String sheetName : customPrintSheetsToParse.keySet()) {
|
for (String sheetName : customPrintSheetsToParse.keySet()) {
|
||||||
List<String> sheetToParse = customPrintSheetsToParse.get(sheetName);
|
List<String> sheetToParse = customPrintSheetsToParse.get(sheetName);
|
||||||
CardPool sheetPool = CardPool.fromCardList(sheetToParse);
|
CardPool sheetPool = CardPool.fromCardList(sheetToParse);
|
||||||
PrintSheet sheet = new PrintSheet(String.format("%s %s", this.getCode(), sheetName), sheetPool);
|
PrintSheet sheet = new PrintSheet(String.format("%s %s", this.getCode(), sheetName), sheetPool);
|
||||||
@@ -543,7 +558,7 @@ public final class CardEdition implements Comparable<CardEdition> {
|
|||||||
|
|
||||||
// parse tokens section
|
// parse tokens section
|
||||||
if (contents.containsKey("tokens")) {
|
if (contents.containsKey("tokens")) {
|
||||||
for(String line : contents.get("tokens")) {
|
for (String line : contents.get("tokens")) {
|
||||||
if (StringUtils.isBlank(line))
|
if (StringUtils.isBlank(line))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@@ -571,11 +586,11 @@ public final class CardEdition implements Comparable<CardEdition> {
|
|||||||
res.mciCode = res.code2.toLowerCase();
|
res.mciCode = res.code2.toLowerCase();
|
||||||
}
|
}
|
||||||
res.scryfallCode = section.get("ScryfallCode");
|
res.scryfallCode = section.get("ScryfallCode");
|
||||||
if (res.scryfallCode == null){
|
if (res.scryfallCode == null) {
|
||||||
res.scryfallCode = res.code;
|
res.scryfallCode = res.code;
|
||||||
}
|
}
|
||||||
res.cardsLanguage = section.get("CardLang");
|
res.cardsLanguage = section.get("CardLang");
|
||||||
if (res.cardsLanguage == null){
|
if (res.cardsLanguage == null) {
|
||||||
res.cardsLanguage = "en";
|
res.cardsLanguage = "en";
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -617,8 +632,10 @@ public final class CardEdition implements Comparable<CardEdition> {
|
|||||||
res.type = enumType;
|
res.type = enumType;
|
||||||
res.prerelease = section.get("Prerelease", null);
|
res.prerelease = section.get("Prerelease", null);
|
||||||
res.boosterBoxCount = Integer.parseInt(section.get("BoosterBox", enumType.getBoosterBoxDefault()));
|
res.boosterBoxCount = Integer.parseInt(section.get("BoosterBox", enumType.getBoosterBoxDefault()));
|
||||||
|
res.fatPackCount = Integer.parseInt(section.get("FatPack", enumType.getFatPackDefault()));
|
||||||
|
res.fatPackExtraSlots = section.get("FatPackExtraSlots", "");
|
||||||
|
|
||||||
switch(section.get("foil", "newstyle").toLowerCase()) {
|
switch (section.get("foil", "newstyle").toLowerCase()) {
|
||||||
case "notsupported":
|
case "notsupported":
|
||||||
res.foilType = FoilType.NOT_SUPPORTED;
|
res.foilType = FoilType.NOT_SUPPORTED;
|
||||||
break;
|
break;
|
||||||
@@ -751,7 +768,7 @@ public final class CardEdition implements Comparable<CardEdition> {
|
|||||||
@Override
|
@Override
|
||||||
public Map<String, SealedProduct.Template> readAll() {
|
public Map<String, SealedProduct.Template> readAll() {
|
||||||
Map<String, SealedProduct.Template> map = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
|
Map<String, SealedProduct.Template> map = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
|
||||||
for(CardEdition ce : Collection.this) {
|
for (CardEdition ce : Collection.this) {
|
||||||
List<String> boosterTypes = Lists.newArrayList(ce.getAvailableBoosterTypes());
|
List<String> boosterTypes = Lists.newArrayList(ce.getAvailableBoosterTypes());
|
||||||
for (String type : boosterTypes) {
|
for (String type : boosterTypes) {
|
||||||
String setAffix = type.equals("Draft") ? "" : type;
|
String setAffix = type.equals("Draft") ? "" : type;
|
||||||
@@ -805,14 +822,14 @@ public final class CardEdition implements Comparable<CardEdition> {
|
|||||||
strictness = CardArtPreference.ORIGINAL_ART_ALL_EDITIONS; // card is not found in core and expansions only (probably something CMD or C13)
|
strictness = CardArtPreference.ORIGINAL_ART_ALL_EDITIONS; // card is not found in core and expansions only (probably something CMD or C13)
|
||||||
cp = StaticData.instance().getCommonCards().getCardFromEditions(k.getKey().getName(), strictness);
|
cp = StaticData.instance().getCommonCards().getCardFromEditions(k.getKey().getName(), strictness);
|
||||||
}
|
}
|
||||||
if ( cp == null )
|
if (cp == null)
|
||||||
cp = k.getKey(); // it's unlikely, this code will ever run
|
cp = k.getKey(); // it's unlikely, this code will ever run
|
||||||
|
|
||||||
minEditions.add(cp.getEdition());
|
minEditions.add(cp.getEdition());
|
||||||
}
|
}
|
||||||
|
|
||||||
for(CardEdition ed : getOrderedEditions()) {
|
for (CardEdition ed : getOrderedEditions()) {
|
||||||
if(minEditions.contains(ed.getCode()))
|
if (minEditions.contains(ed.getCode()))
|
||||||
return ed;
|
return ed;
|
||||||
}
|
}
|
||||||
return UNKNOWN;
|
return UNKNOWN;
|
||||||
@@ -854,7 +871,7 @@ public final class CardEdition implements Comparable<CardEdition> {
|
|||||||
private static class CanMakeFatPack implements Predicate<CardEdition> {
|
private static class CanMakeFatPack implements Predicate<CardEdition> {
|
||||||
@Override
|
@Override
|
||||||
public boolean apply(final CardEdition subject) {
|
public boolean apply(final CardEdition subject) {
|
||||||
return StaticData.instance().getFatPacks().contains(subject.getCode());
|
return subject.getFatPackCount() > 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -513,14 +513,14 @@ public final class CardRules implements ICardCharacteristics {
|
|||||||
case 'S':
|
case 'S':
|
||||||
if ("S".equals(key)) {
|
if ("S".equals(key)) {
|
||||||
this.faces[this.curFace].addStaticAbility(value);
|
this.faces[this.curFace].addStaticAbility(value);
|
||||||
} else if ( "SVar".equals(key) ) {
|
} else if ("SVar".equals(key)) {
|
||||||
if ( null == value ) throw new IllegalArgumentException("SVar has no variable name");
|
if (null == value) throw new IllegalArgumentException("SVar has no variable name");
|
||||||
|
|
||||||
colonPos = value.indexOf(':');
|
colonPos = value.indexOf(':');
|
||||||
String variable = colonPos > 0 ? value.substring(0, colonPos) : value;
|
String variable = colonPos > 0 ? value.substring(0, colonPos) : value;
|
||||||
value = colonPos > 0 ? value.substring(1+colonPos) : null;
|
value = colonPos > 0 ? value.substring(1+colonPos) : null;
|
||||||
|
|
||||||
if ( "Picture".equals(variable) ) {
|
if ("Picture".equals(variable)) {
|
||||||
this.pictureUrl[this.curFace] = value;
|
this.pictureUrl[this.curFace] = value;
|
||||||
} else
|
} else
|
||||||
this.faces[curFace].addSVar(variable, value);
|
this.faces[curFace].addSVar(variable, value);
|
||||||
|
|||||||
@@ -451,8 +451,7 @@ public final class CardType implements Comparable<CardType>, CardTypeView {
|
|||||||
if (calculatedType == null) {
|
if (calculatedType == null) {
|
||||||
if (subtypes.isEmpty()) {
|
if (subtypes.isEmpty()) {
|
||||||
calculatedType = StringUtils.join(getTypesBeforeDash(), ' ');
|
calculatedType = StringUtils.join(getTypesBeforeDash(), ' ');
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
calculatedType = StringUtils.join(getTypesBeforeDash(), ' ') + " - " + StringUtils.join(subtypes, " ");
|
calculatedType = StringUtils.join(getTypesBeforeDash(), ' ') + " - " + StringUtils.join(subtypes, " ");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -84,7 +84,7 @@ public final class MagicColor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static String toShortString(final byte color) {
|
public static String toShortString(final byte color) {
|
||||||
switch (color){
|
switch (color) {
|
||||||
case WHITE: return "W";
|
case WHITE: return "W";
|
||||||
case BLUE: return "U";
|
case BLUE: return "U";
|
||||||
case BLACK: return "B";
|
case BLACK: return "B";
|
||||||
@@ -95,7 +95,7 @@ public final class MagicColor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static String toLongString(final byte color) {
|
public static String toLongString(final byte color) {
|
||||||
switch (color){
|
switch (color) {
|
||||||
case WHITE: return Constant.WHITE;
|
case WHITE: return Constant.WHITE;
|
||||||
case BLUE: return Constant.BLUE;
|
case BLUE: return Constant.BLUE;
|
||||||
case BLACK: return Constant.BLACK;
|
case BLACK: return Constant.BLACK;
|
||||||
|
|||||||
@@ -29,8 +29,8 @@ public class PrintSheet {
|
|||||||
public static final IStorage<PrintSheet> initializePrintSheets(File sheetsFile, CardEdition.Collection editions) {
|
public static final IStorage<PrintSheet> initializePrintSheets(File sheetsFile, CardEdition.Collection editions) {
|
||||||
IStorage<PrintSheet> sheets = new StorageExtendable<>("Special print runs", new PrintSheet.Reader(sheetsFile));
|
IStorage<PrintSheet> sheets = new StorageExtendable<>("Special print runs", new PrintSheet.Reader(sheetsFile));
|
||||||
|
|
||||||
for(CardEdition edition : editions) {
|
for (CardEdition edition : editions) {
|
||||||
for(PrintSheet ps : edition.getPrintSheetsBySection()) {
|
for (PrintSheet ps : edition.getPrintSheetsBySection()) {
|
||||||
sheets.add(ps.name, ps);
|
sheets.add(ps.name, ps);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -64,7 +64,7 @@ public class PrintSheet {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void addAll(Iterable<PaperCard> cards, int weight) {
|
public void addAll(Iterable<PaperCard> cards, int weight) {
|
||||||
for(PaperCard card : cards)
|
for (PaperCard card : cards)
|
||||||
cardsWithWeights.add(card, weight);
|
cardsWithWeights.add(card, weight);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -78,15 +78,15 @@ public class PrintSheet {
|
|||||||
private PaperCard fetchRoulette(int start, int roulette, Collection<PaperCard> toSkip) {
|
private PaperCard fetchRoulette(int start, int roulette, Collection<PaperCard> toSkip) {
|
||||||
int sum = start;
|
int sum = start;
|
||||||
boolean isSecondRun = start > 0;
|
boolean isSecondRun = start > 0;
|
||||||
for(Entry<PaperCard, Integer> cc : cardsWithWeights ) {
|
for (Entry<PaperCard, Integer> cc : cardsWithWeights ) {
|
||||||
sum += cc.getValue();
|
sum += cc.getValue();
|
||||||
if( sum > roulette ) {
|
if (sum > roulette) {
|
||||||
if( toSkip != null && toSkip.contains(cc.getKey()))
|
if (toSkip != null && toSkip.contains(cc.getKey()))
|
||||||
continue;
|
continue;
|
||||||
return cc.getKey();
|
return cc.getKey();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if( isSecondRun )
|
if (isSecondRun)
|
||||||
throw new IllegalStateException("Print sheet does not have enough unique cards");
|
throw new IllegalStateException("Print sheet does not have enough unique cards");
|
||||||
|
|
||||||
return fetchRoulette(sum + 1, roulette, toSkip); // start over from beginning, in case last cards were to skip
|
return fetchRoulette(sum + 1, roulette, toSkip); // start over from beginning, in case last cards were to skip
|
||||||
@@ -94,8 +94,8 @@ public class PrintSheet {
|
|||||||
|
|
||||||
public List<PaperCard> all() {
|
public List<PaperCard> all() {
|
||||||
List<PaperCard> result = new ArrayList<>();
|
List<PaperCard> result = new ArrayList<>();
|
||||||
for(Entry<PaperCard, Integer> kv : cardsWithWeights) {
|
for (Entry<PaperCard, Integer> kv : cardsWithWeights) {
|
||||||
for(int i = 0; i < kv.getValue(); i++) {
|
for (int i = 0; i < kv.getValue(); i++) {
|
||||||
result.add(kv.getKey());
|
result.add(kv.getKey());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -106,26 +106,26 @@ public class PrintSheet {
|
|||||||
List<PaperCard> result = new ArrayList<>();
|
List<PaperCard> result = new ArrayList<>();
|
||||||
|
|
||||||
int totalWeight = cardsWithWeights.countAll();
|
int totalWeight = cardsWithWeights.countAll();
|
||||||
if( totalWeight == 0) {
|
if (totalWeight == 0) {
|
||||||
System.err.println("No cards were found on sheet " + name);
|
System.err.println("No cards were found on sheet " + name);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
// If they ask for 40 unique basic lands (to make a fatpack) out of 20 distinct possible, add the whole print run N times.
|
// If they ask for 40 unique basic lands (to make a fatpack) out of 20 distinct possible, add the whole print run N times.
|
||||||
int uniqueCards = cardsWithWeights.countDistinct();
|
int uniqueCards = cardsWithWeights.countDistinct();
|
||||||
while ( number >= uniqueCards ) {
|
while (number >= uniqueCards) {
|
||||||
for(Entry<PaperCard, Integer> kv : cardsWithWeights) {
|
for (Entry<PaperCard, Integer> kv : cardsWithWeights) {
|
||||||
result.add(kv.getKey());
|
result.add(kv.getKey());
|
||||||
}
|
}
|
||||||
number -= uniqueCards;
|
number -= uniqueCards;
|
||||||
}
|
}
|
||||||
|
|
||||||
List<PaperCard> uniques = wantUnique ? new ArrayList<>() : null;
|
List<PaperCard> uniques = wantUnique ? new ArrayList<>() : null;
|
||||||
for(int iC = 0; iC < number; iC++) {
|
for (int iC = 0; iC < number; iC++) {
|
||||||
int index = MyRandom.getRandom().nextInt(totalWeight);
|
int index = MyRandom.getRandom().nextInt(totalWeight);
|
||||||
PaperCard toAdd = fetchRoulette(0, index, wantUnique ? uniques : null);
|
PaperCard toAdd = fetchRoulette(0, index, wantUnique ? uniques : null);
|
||||||
result.add(toAdd);
|
result.add(toAdd);
|
||||||
if( wantUnique )
|
if (wantUnique)
|
||||||
uniques.add(toAdd);
|
uniques.add(toAdd);
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
|
|||||||
@@ -257,7 +257,7 @@ public class Deck extends DeckBase implements Iterable<Entry<DeckSection, CardPo
|
|||||||
|
|
||||||
// I used to store planes and schemes under sideboard header, so this will assign them to a correct section
|
// I used to store planes and schemes under sideboard header, so this will assign them to a correct section
|
||||||
IPaperCard sample = pool.get(0);
|
IPaperCard sample = pool.get(0);
|
||||||
if (sample != null && ( sample.getRules().getType().isPlane() || sample.getRules().getType().isPhenomenon()))
|
if (sample != null && (sample.getRules().getType().isPlane() || sample.getRules().getType().isPhenomenon()))
|
||||||
sec = DeckSection.Planes;
|
sec = DeckSection.Planes;
|
||||||
if (sample != null && sample.getRules().getType().isScheme())
|
if (sample != null && sample.getRules().getType().isScheme())
|
||||||
sec = DeckSection.Schemes;
|
sec = DeckSection.Schemes;
|
||||||
@@ -339,7 +339,7 @@ public class Deck extends DeckBase implements Iterable<Entry<DeckSection, CardPo
|
|||||||
Date releaseDateReferenceEdition = cal.getTime();
|
Date releaseDateReferenceEdition = cal.getTime();
|
||||||
|
|
||||||
CardPool newPool = new CardPool();
|
CardPool newPool = new CardPool();
|
||||||
for(Entry<PaperCard, Integer> cp : pool) {
|
for (Entry<PaperCard, Integer> cp : pool) {
|
||||||
PaperCard card = cp.getKey();
|
PaperCard card = cp.getKey();
|
||||||
int count = cp.getValue();
|
int count = cp.getValue();
|
||||||
if (!cardNamesWithNoEditionInSection.contains(card.getName()))
|
if (!cardNamesWithNoEditionInSection.contains(card.getName()))
|
||||||
|
|||||||
@@ -18,10 +18,8 @@
|
|||||||
|
|
||||||
package forge.item;
|
package forge.item;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.apache.commons.lang3.tuple.ImmutablePair;
|
|
||||||
import org.apache.commons.lang3.tuple.Pair;
|
import org.apache.commons.lang3.tuple.Pair;
|
||||||
|
|
||||||
import com.google.common.base.Function;
|
import com.google.common.base.Function;
|
||||||
@@ -30,16 +28,17 @@ import forge.ImageKeys;
|
|||||||
import forge.StaticData;
|
import forge.StaticData;
|
||||||
import forge.card.CardEdition;
|
import forge.card.CardEdition;
|
||||||
import forge.item.generation.BoosterGenerator;
|
import forge.item.generation.BoosterGenerator;
|
||||||
import forge.util.TextUtil;
|
|
||||||
import forge.util.storage.StorageReaderFile;
|
|
||||||
|
|
||||||
public class FatPack extends BoxedProduct {
|
public class FatPack extends BoxedProduct {
|
||||||
public static final Function<CardEdition, FatPack> FN_FROM_SET = new Function<CardEdition, FatPack>() {
|
public static final Function<CardEdition, FatPack> FN_FROM_SET = new Function<CardEdition, FatPack>() {
|
||||||
@Override
|
@Override
|
||||||
public FatPack apply(final CardEdition arg1) {
|
public FatPack apply(final CardEdition edition) {
|
||||||
FatPack.Template d = StaticData.instance().getFatPacks().get(arg1.getCode());
|
int boosters = edition.getFatPackCount();
|
||||||
|
if (boosters <= 0) { return null; }
|
||||||
|
|
||||||
|
FatPack.Template d = new Template(edition);
|
||||||
if (d == null) { return null; }
|
if (d == null) { return null; }
|
||||||
return new FatPack(arg1.getName(), d, d.cntBoosters);
|
return new FatPack(edition.getName(), d, d.cntBoosters);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -68,17 +67,6 @@ public class FatPack extends BoxedProduct {
|
|||||||
return BoosterGenerator.getBoosterPack(fpData);
|
return BoosterGenerator.getBoosterPack(fpData);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*@Override
|
|
||||||
protected List<PaperCard> generate() {
|
|
||||||
List<PaperCard> result = new ArrayList<PaperCard>();
|
|
||||||
for (int i = 0; i < fpData.getCntBoosters(); i++) {
|
|
||||||
result.addAll(super.generate());
|
|
||||||
}
|
|
||||||
// Add any extra cards that may come in the fatpack after Boosters
|
|
||||||
result.addAll(BoosterGenerator.getBoosterPack(fpData));
|
|
||||||
return result;
|
|
||||||
}*/
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final Object clone() {
|
public final Object clone() {
|
||||||
return new FatPack(name, fpData, fpData.cntBoosters);
|
return new FatPack(name, fpData, fpData.cntBoosters);
|
||||||
@@ -92,38 +80,12 @@ public class FatPack extends BoxedProduct {
|
|||||||
public static class Template extends SealedProduct.Template {
|
public static class Template extends SealedProduct.Template {
|
||||||
private final int cntBoosters;
|
private final int cntBoosters;
|
||||||
|
|
||||||
|
|
||||||
public int getCntBoosters() { return cntBoosters; }
|
public int getCntBoosters() { return cntBoosters; }
|
||||||
|
|
||||||
private Template(String edition, int boosters, Iterable<Pair<String, Integer>> itrSlots)
|
private Template(CardEdition edition) {
|
||||||
{
|
super(edition.getCode(), edition.getFatPackExtraSlots());
|
||||||
super(edition, itrSlots);
|
|
||||||
cntBoosters = boosters;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static final class Reader extends StorageReaderFile<Template> {
|
cntBoosters = edition.getFatPackCount();
|
||||||
public Reader(String pathname) {
|
|
||||||
super(pathname, FN_GET_NAME);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected Template read(String line, int i) {
|
|
||||||
String[] headAndData = TextUtil.split(line, ':', 2);
|
|
||||||
final String edition = headAndData[0];
|
|
||||||
final String[] data = TextUtil.splitWithParenthesis(headAndData[1], ',');
|
|
||||||
int nBoosters = 6;
|
|
||||||
|
|
||||||
List<Pair<String, Integer>> slots = new ArrayList<>();
|
|
||||||
for(String slotDesc : data) {
|
|
||||||
String[] kv = TextUtil.split(slotDesc, ' ', 2);
|
|
||||||
if (kv[1].startsWith("Booster"))
|
|
||||||
nBoosters = Integer.parseInt(kv[0]);
|
|
||||||
else
|
|
||||||
slots.add(ImmutablePair.of(kv[1], Integer.parseInt(kv[0])));
|
|
||||||
}
|
|
||||||
|
|
||||||
return new FatPack.Template(edition, nBoosters, slots);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ public abstract class SealedProduct implements InventoryItemFromSet {
|
|||||||
public SealedProduct(String name0, Template boosterData) {
|
public SealedProduct(String name0, Template boosterData) {
|
||||||
if (null == name0) { throw new IllegalArgumentException("name0 must not be null"); }
|
if (null == name0) { throw new IllegalArgumentException("name0 must not be null"); }
|
||||||
if (null == boosterData) {
|
if (null == boosterData) {
|
||||||
throw new IllegalArgumentException("boosterData must not be null");
|
throw new IllegalArgumentException("boosterData for " + name0 + " must not be null");
|
||||||
}
|
}
|
||||||
contents = boosterData;
|
contents = boosterData;
|
||||||
name = name0;
|
name = name0;
|
||||||
|
|||||||
@@ -545,7 +545,7 @@ public class GameAction {
|
|||||||
if (fromBattlefield && !zoneFrom.getPlayer().equals(zoneTo.getPlayer())) {
|
if (fromBattlefield && !zoneFrom.getPlayer().equals(zoneTo.getPlayer())) {
|
||||||
final Map<AbilityKey, Object> runParams2 = AbilityKey.mapFromCard(lastKnownInfo);
|
final Map<AbilityKey, Object> runParams2 = AbilityKey.mapFromCard(lastKnownInfo);
|
||||||
runParams2.put(AbilityKey.OriginalController, zoneFrom.getPlayer());
|
runParams2.put(AbilityKey.OriginalController, zoneFrom.getPlayer());
|
||||||
if(params != null) {
|
if (params != null) {
|
||||||
runParams2.putAll(params);
|
runParams2.putAll(params);
|
||||||
}
|
}
|
||||||
game.getTriggerHandler().runTrigger(TriggerType.ChangesController, runParams2, false);
|
game.getTriggerHandler().runTrigger(TriggerType.ChangesController, runParams2, false);
|
||||||
@@ -2196,6 +2196,22 @@ public class GameAction {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (cause != null) {
|
||||||
|
// Remember objects as needed
|
||||||
|
final Card sourceLKI = game.getChangeZoneLKIInfo(cause.getHostCard());
|
||||||
|
final boolean rememberCard = cause.hasParam("RememberDamaged") || cause.hasParam("RememberDamagedCreature");
|
||||||
|
final boolean rememberPlayer = cause.hasParam("RememberDamaged") || cause.hasParam("RememberDamagedPlayer");
|
||||||
|
if (rememberCard || rememberPlayer) {
|
||||||
|
for (GameEntity e : damageMap.row(sourceLKI).keySet()) {
|
||||||
|
if (e instanceof Card && rememberCard) {
|
||||||
|
cause.getHostCard().addRemembered(e);
|
||||||
|
} else if (e instanceof Player && rememberPlayer) {
|
||||||
|
cause.getHostCard().addRemembered(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
preventMap.triggerPreventDamage(isCombat);
|
preventMap.triggerPreventDamage(isCombat);
|
||||||
preventMap.clear();
|
preventMap.clear();
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ package forge.game.ability.effects;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import forge.game.Game;
|
import forge.game.Game;
|
||||||
import forge.game.GameEntity;
|
|
||||||
import forge.game.GameEntityCounterTable;
|
import forge.game.GameEntityCounterTable;
|
||||||
import forge.game.ability.AbilityUtils;
|
import forge.game.ability.AbilityUtils;
|
||||||
import forge.game.card.Card;
|
import forge.game.card.Card;
|
||||||
@@ -61,9 +60,7 @@ public class DamageAllEffect extends DamageBaseEffect {
|
|||||||
final String damage = sa.getParam("NumDmg");
|
final String damage = sa.getParam("NumDmg");
|
||||||
final int dmg = AbilityUtils.calculateAmount(source, damage, sa);
|
final int dmg = AbilityUtils.calculateAmount(source, damage, sa);
|
||||||
|
|
||||||
final boolean rememberCard = sa.hasParam("RememberDamaged") || sa.hasParam("RememberDamagedCreature");
|
//Remember params from this effect have been moved to dealDamage in GameAction
|
||||||
final boolean rememberPlayer = sa.hasParam("RememberDamaged") || sa.hasParam("RememberDamagedPlayer");
|
|
||||||
|
|
||||||
Player targetPlayer = sa.getTargets().getFirstTargetedPlayer();
|
Player targetPlayer = sa.getTargets().getFirstTargetedPlayer();
|
||||||
|
|
||||||
String players = "";
|
String players = "";
|
||||||
@@ -75,8 +72,7 @@ public class DamageAllEffect extends DamageBaseEffect {
|
|||||||
CardCollectionView list;
|
CardCollectionView list;
|
||||||
if (sa.hasParam("ValidCards")) {
|
if (sa.hasParam("ValidCards")) {
|
||||||
list = game.getCardsIn(ZoneType.Battlefield);
|
list = game.getCardsIn(ZoneType.Battlefield);
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
list = CardCollection.EMPTY;
|
list = CardCollection.EMPTY;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -114,17 +110,6 @@ public class DamageAllEffect extends DamageBaseEffect {
|
|||||||
game.getAction().dealDamage(false, damageMap, preventMap, counterTable, sa);
|
game.getAction().dealDamage(false, damageMap, preventMap, counterTable, sa);
|
||||||
}
|
}
|
||||||
|
|
||||||
// do Remember there
|
|
||||||
if (rememberCard || rememberPlayer) {
|
|
||||||
for (GameEntity e : damageMap.row(sourceLKI).keySet()) {
|
|
||||||
if (e instanceof Card && rememberCard) {
|
|
||||||
source.addRemembered(e);
|
|
||||||
} else if (e instanceof Player && rememberPlayer) {
|
|
||||||
source.addRemembered(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
replaceDying(sa);
|
replaceDying(sa);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -166,8 +166,7 @@ public class DamageDealEffect extends DamageBaseEffect {
|
|||||||
|
|
||||||
final CardCollection untargetedCards = CardUtil.getRadiance(sa);
|
final CardCollection untargetedCards = CardUtil.getRadiance(sa);
|
||||||
|
|
||||||
final boolean remember = sa.hasParam("RememberDamaged");
|
//Remember params from this effect have been moved to dealDamage in GameAction
|
||||||
|
|
||||||
boolean usedDamageMap = true;
|
boolean usedDamageMap = true;
|
||||||
CardDamageMap damageMap = sa.getDamageMap();
|
CardDamageMap damageMap = sa.getDamageMap();
|
||||||
CardDamageMap preventMap = sa.getPreventMap();
|
CardDamageMap preventMap = sa.getPreventMap();
|
||||||
@@ -252,10 +251,6 @@ public class DamageDealEffect extends DamageBaseEffect {
|
|||||||
internalDamageDeal(sa, sourceLKI, unTgtC, dmg, damageMap);
|
internalDamageDeal(sa, sourceLKI, unTgtC, dmg, damageMap);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (remember) {
|
|
||||||
source.addRemembered(damageMap.row(sourceLKI).keySet());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (!usedDamageMap) {
|
if (!usedDamageMap) {
|
||||||
game.getAction().dealDamage(false, damageMap, preventMap, counterTable, sa);
|
game.getAction().dealDamage(false, damageMap, preventMap, counterTable, sa);
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ public class DamageResolveEffect extends SpellAbilityEffect {
|
|||||||
GameEntityCounterTable counterTable = sa.getCounterTable();
|
GameEntityCounterTable counterTable = sa.getCounterTable();
|
||||||
|
|
||||||
sa.getHostCard().getGame().getAction().dealDamage(false, damageMap, preventMap, counterTable, sa);
|
sa.getHostCard().getGame().getAction().dealDamage(false, damageMap, preventMap, counterTable, sa);
|
||||||
|
|
||||||
|
replaceDying(sa);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
|
|||||||
@@ -36,8 +36,7 @@ public class ManaConversionMatrix {
|
|||||||
rowIdx = rowIdx < 0 ? identityMatrix.length - 1 : rowIdx;
|
rowIdx = rowIdx < 0 ? identityMatrix.length - 1 : rowIdx;
|
||||||
if (additive) {
|
if (additive) {
|
||||||
colorConversionMatrix[rowIdx] |= replacementColor;
|
colorConversionMatrix[rowIdx] |= replacementColor;
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
colorRestrictionMatrix[rowIdx] &= replacementColor;
|
colorRestrictionMatrix[rowIdx] &= replacementColor;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -258,8 +258,7 @@ public class ManaCostBeingPaid {
|
|||||||
ManaCostShard shard;
|
ManaCostShard shard;
|
||||||
if (StringUtils.isEmpty(xColor)) {
|
if (StringUtils.isEmpty(xColor)) {
|
||||||
shard = ManaCostShard.GENERIC;
|
shard = ManaCostShard.GENERIC;
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
shard = ManaCostShard.parseNonGeneric(xColor);
|
shard = ManaCostShard.parseNonGeneric(xColor);
|
||||||
}
|
}
|
||||||
increaseShard(shard, xCost, true);
|
increaseShard(shard, xCost, true);
|
||||||
|
|||||||
@@ -137,18 +137,15 @@ public class ManaPool extends ManaConversionMatrix implements Iterable<Mana> {
|
|||||||
if (convertToColorless) {
|
if (convertToColorless) {
|
||||||
convertManaColor(b, (byte)ManaAtom.COLORLESS);
|
convertManaColor(b, (byte)ManaAtom.COLORLESS);
|
||||||
cm.addAll(pMana);
|
cm.addAll(pMana);
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
cleared.addAll(cm);
|
cleared.addAll(cm);
|
||||||
cm.clear();
|
cm.clear();
|
||||||
floatingMana.putAll(b, pMana);
|
floatingMana.putAll(b, pMana);
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
if (convertToColorless) {
|
if (convertToColorless) {
|
||||||
convertManaColor(b, (byte)ManaAtom.COLORLESS);
|
convertManaColor(b, (byte)ManaAtom.COLORLESS);
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
cleared.addAll(cm);
|
cleared.addAll(cm);
|
||||||
cm.clear();
|
cm.clear();
|
||||||
}
|
}
|
||||||
@@ -261,8 +258,7 @@ public class ManaPool extends ManaConversionMatrix implements Iterable<Mana> {
|
|||||||
|
|
||||||
if (poolLane != null && poolLane.contains(mana)) {
|
if (poolLane != null && poolLane.contains(mana)) {
|
||||||
removeFloating.add(mana);
|
removeFloating.add(mana);
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
manaNotAccountedFor = true;
|
manaNotAccountedFor = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -319,7 +315,7 @@ public class ManaPool extends ManaConversionMatrix implements Iterable<Mana> {
|
|||||||
// TODO Debug this for Paying Gonti,
|
// TODO Debug this for Paying Gonti,
|
||||||
byte line = getPossibleColorUses(color);
|
byte line = getPossibleColorUses(color);
|
||||||
|
|
||||||
for(byte outColor : ManaAtom.MANATYPES) {
|
for (byte outColor : ManaAtom.MANATYPES) {
|
||||||
if ((line & outColor) != 0 && shard.canBePaidWithManaOfColor(outColor)) {
|
if ((line & outColor) != 0 && shard.canBePaidWithManaOfColor(outColor)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ public class MulliganService {
|
|||||||
boolean allKept;
|
boolean allKept;
|
||||||
do {
|
do {
|
||||||
allKept = true;
|
allKept = true;
|
||||||
for(AbstractMulligan mulligan : mulligans) {
|
for (AbstractMulligan mulligan : mulligans) {
|
||||||
if (mulligan.hasKept()) {
|
if (mulligan.hasKept()) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -85,7 +85,7 @@ public class MulliganService {
|
|||||||
}
|
}
|
||||||
} while (!allKept);
|
} while (!allKept);
|
||||||
|
|
||||||
for(AbstractMulligan mulligan : mulligans) {
|
for (AbstractMulligan mulligan : mulligans) {
|
||||||
mulligan.afterMulligan();
|
mulligan.afterMulligan();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -136,7 +136,7 @@ public class RegisteredPlayer {
|
|||||||
}
|
}
|
||||||
if (appliedVariants.contains(GameType.Vanguard) || appliedVariants.contains(GameType.MomirBasic)
|
if (appliedVariants.contains(GameType.Vanguard) || appliedVariants.contains(GameType.MomirBasic)
|
||||||
|| appliedVariants.contains(GameType.MoJhoSto)) { //fix the crash, if somehow the avatar is null, get it directly from the deck
|
|| appliedVariants.contains(GameType.MoJhoSto)) { //fix the crash, if somehow the avatar is null, get it directly from the deck
|
||||||
start.setVanguardAvatars(vanguardAvatar == null ? deck.get(DeckSection.Avatar).toFlatList():vanguardAvatar.toFlatList());
|
start.setVanguardAvatars(vanguardAvatar == null ? deck.get(DeckSection.Avatar).toFlatList() : vanguardAvatar.toFlatList());
|
||||||
}
|
}
|
||||||
return start;
|
return start;
|
||||||
}
|
}
|
||||||
@@ -167,7 +167,7 @@ public class RegisteredPlayer {
|
|||||||
private void setVanguardAvatars(List<PaperCard> vanguardAvatars0) {
|
private void setVanguardAvatars(List<PaperCard> vanguardAvatars0) {
|
||||||
vanguardAvatars = vanguardAvatars0;
|
vanguardAvatars = vanguardAvatars0;
|
||||||
if (vanguardAvatars == null) { return; }
|
if (vanguardAvatars == null) { return; }
|
||||||
for(PaperCard avatar: vanguardAvatars){
|
for (PaperCard avatar: vanguardAvatars) {
|
||||||
setStartingLife(getStartingLife() + avatar.getRules().getLife());
|
setStartingLife(getStartingLife() + avatar.getRules().getLife());
|
||||||
setStartingHand(getStartingHand() + avatar.getRules().getHand());
|
setStartingHand(getStartingHand() + avatar.getRules().getHand());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -163,7 +163,6 @@ public class StaticAbilityCantBeCast {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (stAb.hasParam("AffectedZone") && !card.isInZone(ZoneType.smartValueOf(stAb.getParam("AffectedZone")))) {
|
if (stAb.hasParam("AffectedZone") && !card.isInZone(ZoneType.smartValueOf(stAb.getParam("AffectedZone")))) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -48,11 +48,7 @@ public class StaticAbilityCastWithFlash {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public static boolean commonParts(final StaticAbility stAb, final SpellAbility sa, final Card card, final Player activator) {
|
public static boolean commonParts(final StaticAbility stAb, final SpellAbility sa, final Card card, final Player activator) {
|
||||||
|
|
||||||
if (!stAb.matchesValidParam("ValidCard", card)) {
|
if (!stAb.matchesValidParam("ValidCard", card)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -535,14 +535,12 @@ public abstract class Trigger extends TriggerReplacementBase {
|
|||||||
return this.numberTurnActivations;
|
return this.numberTurnActivations;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void triggerRun()
|
public void triggerRun() {
|
||||||
{
|
|
||||||
this.numberTurnActivations++;
|
this.numberTurnActivations++;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Resets the state stored each turn for per-turn and per-instance restriction
|
// Resets the state stored each turn for per-turn and per-instance restriction
|
||||||
public void resetTurnState()
|
public void resetTurnState() {
|
||||||
{
|
|
||||||
this.numberTurnActivations = 0;
|
this.numberTurnActivations = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -839,7 +839,7 @@ public class VLobby implements ILobbyView {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private boolean isPlayerAI(final int playernum) {
|
private boolean isPlayerAI(final int playernum) {
|
||||||
if(playernum < activePlayersNum){
|
if (playernum < activePlayersNum) {
|
||||||
return playerPanels.get(playernum).isAi();
|
return playerPanels.get(playernum).isAi();
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -1,84 +0,0 @@
|
|||||||
MMQ: 6 Boosters, 30 BasicLands
|
|
||||||
NMS: 6 Boosters
|
|
||||||
PCY: 6 Boosters
|
|
||||||
INV: 6 Boosters
|
|
||||||
PLS: 6 Boosters
|
|
||||||
APC: 6 Boosters
|
|
||||||
ODY: 6 Boosters
|
|
||||||
TOR: 6 Boosters
|
|
||||||
JUD: 6 Boosters
|
|
||||||
ONS: 9 Boosters, 30 BasicLands
|
|
||||||
LGN: 6 Boosters
|
|
||||||
SCG: 6 Boosters
|
|
||||||
MRD: 6 Boosters
|
|
||||||
DST: 6 Boosters
|
|
||||||
5DN: 6 Boosters
|
|
||||||
CHK: 6 Boosters
|
|
||||||
BOK: 6 Boosters
|
|
||||||
SOK: 6 Boosters
|
|
||||||
9ED: 6 Boosters, 40 BasicLands
|
|
||||||
RAV: 6 Boosters, 40 BasicLands
|
|
||||||
GPT: 6 Boosters, 40 BasicLands RAV
|
|
||||||
DIS: 6 Boosters, 40 BasicLands RAV
|
|
||||||
CSP: 6 Boosters, 40 BasicLands
|
|
||||||
TSP: 6 Boosters, 40 BasicLands
|
|
||||||
PLC: 6 Boosters, 40 BasicLands TSP
|
|
||||||
FUT: 6 Boosters, 40 BasicLands TSP
|
|
||||||
10E: 6 Boosters, 40 BasicLands
|
|
||||||
LRW: 6 Boosters, 40 BasicLands
|
|
||||||
MOR: 6 Boosters, 40 BasicLands LRW
|
|
||||||
SHM: 8 Boosters, 40 BasicLands
|
|
||||||
EVE: 8 Boosters, 40 BasicLands SHM
|
|
||||||
ALA: 8 Boosters, 40 BasicLands
|
|
||||||
CFX: 8 Boosters, 40 BasicLands ALA
|
|
||||||
ARB: 8 Boosters, 40 BasicLands ALA
|
|
||||||
M10: 8 Boosters, 40 BasicLands
|
|
||||||
ZEN: 8 Boosters, 40 BasicLands
|
|
||||||
WWK: 8 Boosters, 40 BasicLands ZEN
|
|
||||||
ROE: 8 Boosters, 40 BasicLands
|
|
||||||
M11: 8 Boosters, 40 BasicLands
|
|
||||||
SOM: 8 Boosters, 40 BasicLands
|
|
||||||
MBS: 9 Boosters, 80 BasicLands MBS
|
|
||||||
NPH: 9 Boosters, 80 BasicLands NPH
|
|
||||||
M12: 9 Boosters, 80 BasicLands
|
|
||||||
ISD: 9 Boosters, 70 BasicLands
|
|
||||||
DKA: 9 Boosters, 70 BasicLands ISD
|
|
||||||
AVR: 9 Boosters, 80 BasicLands
|
|
||||||
M13: 9 Boosters, 80 BasicLands
|
|
||||||
RTR: 9 Boosters, 80 BasicLands
|
|
||||||
GTC: 9 Boosters, 80 BasicLands RTR
|
|
||||||
DGM: 9 Boosters, 80 BasicLands RTR
|
|
||||||
M14: 9 Boosters, 80 BasicLands
|
|
||||||
THS: 9 Boosters, 80 BasicLands
|
|
||||||
BNG: 9 Boosters, 80 BasicLands THS
|
|
||||||
JOU: 9 Boosters, 80 BasicLands THS
|
|
||||||
M15: 9 Boosters, 80 BasicLands
|
|
||||||
KTK: 9 Boosters, 80 BasicLands
|
|
||||||
FRF: 9 Boosters, 80 BasicLands
|
|
||||||
DTK: 9 Boosters, 80 BasicLands
|
|
||||||
ORI: 9 Boosters, 80 BasicLands
|
|
||||||
BFZ: 9 Boosters, 80 BasicLands
|
|
||||||
OGW: 9 Boosters, 66 BasicLands BFZ, 14 name("Wastes")
|
|
||||||
SOI: 9 Boosters, 80 BasicLands
|
|
||||||
EMN: 9 Boosters, 80 BasicLands SOI
|
|
||||||
KLD: 10 Boosters, 80 BasicLands
|
|
||||||
AER: 10 Boosters, 80 BasicLands KLD
|
|
||||||
AKH: 10 Boosters, 80 BasicLands
|
|
||||||
HOU: 10 Boosters, 80 BasicLands
|
|
||||||
XLN: 10 Boosters, 80 BasicLands
|
|
||||||
RIX: 10 Boosters, 80 BasicLands
|
|
||||||
DOM: 10 Boosters, 80 BasicLands
|
|
||||||
M19: 10 Boosters, 80 BasicLands
|
|
||||||
GRN: 10 Boosters, 80 BasicLands
|
|
||||||
RNA: 10 Boosters, 80 BasicLands
|
|
||||||
WAR: 10 Boosters, 80 BasicLands
|
|
||||||
ELD: 10 Boosters, 40 BasicLands
|
|
||||||
#needs to be 20 BasicLands, 20 Foil BasicLands, 1 Piper of the Swarm+|ELD|3
|
|
||||||
THB: 10 Boosters, 40 BasicLands
|
|
||||||
#needs to be 20 BasicLands, 20 Foil BasicLands, 1 Arasta of the Endless Web+|THB|3
|
|
||||||
IKO: 10 Boosters, 40 BasicLands
|
|
||||||
#needs to be 20 BasicLands, 20 Foil BasicLands, 1 Colossification+|IKO|3
|
|
||||||
M21: 10 Boosters, 40 BasicLands
|
|
||||||
#needs to be 20 BasicLands, 20 Foil BasicLands, 1 Pack Leader+|M21|3
|
|
||||||
ZNR: 10 Boosters, 40 BasicLands
|
|
||||||
#needs to be 20 BasicLands, 20 Foil BasicLands, 1 Charix, the Raging Isle+|ZNR|3
|
|
||||||
@@ -1,7 +1,6 @@
|
|||||||
Name:Anger of the Gods
|
Name:Anger of the Gods
|
||||||
ManaCost:1 R R
|
ManaCost:1 R R
|
||||||
Types:Sorcery
|
Types:Sorcery
|
||||||
A:SP$ DamageAll | Cost$ 1 R R | ValidCards$ Creature | NumDmg$ 3 | RememberDamaged$ True | ReplaceDyingDefined$ Remembered | SubAbility$ DBCleanup | SpellDescription$ CARDNAME deals 3 damage to each creature. If a creature dealt damage this way would die this turn, exile it instead.
|
A:SP$ DamageAll | ValidCards$ Creature | NumDmg$ 3 | RememberDamaged$ True | ReplaceDyingDefined$ Remembered | SubAbility$ DBCleanup | StackDescription$ SpellDescription | SpellDescription$ CARDNAME deals 3 damage to each creature. If a creature dealt damage this way would die this turn, exile it instead.
|
||||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/anger_of_the_gods.jpg
|
|
||||||
Oracle:Anger of the Gods deals 3 damage to each creature. If a creature dealt damage this way would die this turn, exile it instead.
|
Oracle:Anger of the Gods deals 3 damage to each creature. If a creature dealt damage this way would die this turn, exile it instead.
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ ManaCost:B
|
|||||||
Types:Sorcery
|
Types:Sorcery
|
||||||
K:Kicker:2 B
|
K:Kicker:2 B
|
||||||
A:SP$ Destroy | Cost$ B | ValidTgts$ Creature.cmcLE2,Planeswalker.cmcLE2 | TargetMin$ X | TargetMax$ X | TgtPrompt$ Select target creature or planeswalker with mana value 2 or less | SubAbility$ DBDestroy | AILogic$ AssumeAtLeastOneTarget | StackDescription$ SpellDescription | SpellDescription$ Destroy target creature or planeswalker with mana value 2 or less. If this spell was kicked, instead destroy target creature or planeswalker.
|
A:SP$ Destroy | Cost$ B | ValidTgts$ Creature.cmcLE2,Planeswalker.cmcLE2 | TargetMin$ X | TargetMax$ X | TgtPrompt$ Select target creature or planeswalker with mana value 2 or less | SubAbility$ DBDestroy | AILogic$ AssumeAtLeastOneTarget | StackDescription$ SpellDescription | SpellDescription$ Destroy target creature or planeswalker with mana value 2 or less. If this spell was kicked, instead destroy target creature or planeswalker.
|
||||||
SVar:DBDestroy:DB$ Destroy | TargetMin$ Y | TargetMax$ Y | ValidTgts$ Creature,Planeswalker | TgtPrompt$ Select target creature or planeswalker | StackDescription$ None
|
SVar:DBDestroy:DB$ Destroy | TargetMin$ Y | TargetMax$ Y | ValidTgts$ Creature,Planeswalker | TgtPrompt$ Select target creature or planeswalker | StackDescription$ [{c:ThisTargetedCard}]
|
||||||
SVar:X:Count$Kicked.0.1
|
SVar:X:Count$Kicked.0.1
|
||||||
SVar:Y:Count$Kicked.1.0
|
SVar:Y:Count$Kicked.1.0
|
||||||
Oracle:Kicker {2}{B} (You may pay an additional {2}{B} as you cast this spell.)\nDestroy target creature or planeswalker with mana value 2 or less. If this spell was kicked, instead destroy target creature or planeswalker.
|
Oracle:Kicker {2}{B} (You may pay an additional {2}{B} as you cast this spell.)\nDestroy target creature or planeswalker with mana value 2 or less. If this spell was kicked, instead destroy target creature or planeswalker.
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ Name:Price of Loyalty
|
|||||||
ManaCost:2 R
|
ManaCost:2 R
|
||||||
Types:Sorcery
|
Types:Sorcery
|
||||||
A:SP$ GainControl | ValidTgts$ Creature | TgtPrompt$ Select target creature | LoseControl$ EOT | Untap$ True | AddKWs$ Haste | SubAbility$ DBPump | SpellDescription$ Gain control of target creature until end of turn. Untap that creature. It gains haste until end of turn. If mana from a Treasure was spent to cast this spell, that creature gets +2/+0 until end of turn.
|
A:SP$ GainControl | ValidTgts$ Creature | TgtPrompt$ Select target creature | LoseControl$ EOT | Untap$ True | AddKWs$ Haste | SubAbility$ DBPump | SpellDescription$ Gain control of target creature until end of turn. Untap that creature. It gains haste until end of turn. If mana from a Treasure was spent to cast this spell, that creature gets +2/+0 until end of turn.
|
||||||
SVar:DBPump:DB$ Pump | CheckSVar$ TreasureCheck | Defined$ Targeted | NumAtt$ 2
|
SVar:DBPump:DB$ Pump | ConditionCheckSVar$ TreasureCheck | Defined$ Targeted | NumAtt$ 2
|
||||||
SVar:TreasureCheck:Count$CastTotalManaSpent Treasure
|
SVar:TreasureCheck:Count$CastTotalManaSpent Treasure
|
||||||
SVar:AIPreference:ManaFrom$Treasure
|
SVar:AIPreference:ManaFrom$Treasure
|
||||||
Oracle:Gain control of target creature until end of turn. Untap that creature. It gains haste until end of turn. If mana from a Treasure was spent to cast this spell, that creature gets +2/+0 until end of turn.
|
Oracle:Gain control of target creature until end of turn. Untap that creature. It gains haste until end of turn. If mana from a Treasure was spent to cast this spell, that creature gets +2/+0 until end of turn.
|
||||||
|
|||||||
@@ -2,10 +2,9 @@ Name:Serpentine Spike
|
|||||||
ManaCost:5 R R
|
ManaCost:5 R R
|
||||||
Types:Sorcery
|
Types:Sorcery
|
||||||
K:Devoid
|
K:Devoid
|
||||||
A:SP$ DealDamage | Cost$ 5 R R | ValidTgts$ Creature | TgtPrompt$ Select target creature to deal 2 damage to | NumDmg$ 2 | RememberDamaged$ True | DamageMap$ True | SubAbility$ DBDamageTwo | SpellDescription$ CARDNAME deals 2 damage to target creature, 3 damage to another target creature, and 4 damage to a third target creature. If a creature dealt damage this way would die this turn, exile it instead.
|
A:SP$ DealDamage | ValidTgts$ Creature | TgtPrompt$ Select target creature to deal 2 damage to | NumDmg$ 2 | DamageMap$ True | SubAbility$ DBDamageTwo | StackDescription$ CARDNAME deals 2 damage to {c:ThisTargetedCard}, | SpellDescription$ CARDNAME deals 2 damage to target creature, 3 damage to another target creature, and 4 damage to a third target creature. If a creature dealt damage this way would die this turn, exile it instead.
|
||||||
SVar:DBDamageTwo:DB$ DealDamage | ValidTgts$ Creature | TgtPrompt$ Select another target creature to deal 3 damage to | NumDmg$ 3 | RememberDamaged$ True | TargetUnique$ True | SubAbility$ DBDamageThree
|
SVar:DBDamageTwo:DB$ DealDamage | ValidTgts$ Creature | TgtPrompt$ Select another target creature to deal 3 damage to | NumDmg$ 3 | TargetUnique$ True | SubAbility$ DBDamageThree | StackDescription$ 3 damage to {c:ThisTargetedCard},
|
||||||
SVar:DBDamageThree:DB$ DealDamage | ValidTgts$ Creature | TgtPrompt$ Select another target creature to deal 4 damage to | NumDmg$ 4 | RememberDamaged$ True | TargetUnique$ True | ReplaceDyingDefined$ Remembered | SubAbility$ DBDamageResolve
|
SVar:DBDamageThree:DB$ DealDamage | ValidTgts$ Creature | TgtPrompt$ Select another target creature to deal 4 damage to | NumDmg$ 4 | TargetUnique$ True | SubAbility$ DBDamageResolve | StackDescription$ and 4 damage to {c:ThisTargetedCard}. If a creature dealt damage this way would die this turn, exile it instead.
|
||||||
SVar:DBDamageResolve:DB$ DamageResolve | SubAbility$ DBCleanup
|
SVar:DBDamageResolve:DB$ DamageResolve | RememberDamaged$ True | ReplaceDyingDefined$ Remembered | SubAbility$ DBCleanup
|
||||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/serpentine_spike.jpg
|
|
||||||
Oracle:Devoid (This card has no color.)\nSerpentine Spike deals 2 damage to target creature, 3 damage to another target creature, and 4 damage to a third target creature. If a creature dealt damage this way would die this turn, exile it instead.
|
Oracle:Devoid (This card has no color.)\nSerpentine Spike deals 2 damage to target creature, 3 damage to another target creature, and 4 damage to a third target creature. If a creature dealt damage this way would die this turn, exile it instead.
|
||||||
|
|||||||
@@ -8,6 +8,8 @@ MciCode=aer
|
|||||||
BoosterCovers=3
|
BoosterCovers=3
|
||||||
Booster=10 Common:fromSheet("AER cards"), 3 Uncommon:fromSheet("AER cards"), 1 RareMythic:fromSheet("AER cards"), 1 BasicLand KLD
|
Booster=10 Common:fromSheet("AER cards"), 3 Uncommon:fromSheet("AER cards"), 1 RareMythic:fromSheet("AER cards"), 1 BasicLand KLD
|
||||||
AdditionalSheetForFoils=fromSheet("AER Aether Revolt Inventions")
|
AdditionalSheetForFoils=fromSheet("AER Aether Revolt Inventions")
|
||||||
|
FatPack=10
|
||||||
|
FatPackExtraSlots=80 BasicLands KLD
|
||||||
AdditionalSetUnlockedInQuest=MPS_KLD
|
AdditionalSetUnlockedInQuest=MPS_KLD
|
||||||
ScryfallCode=AER
|
ScryfallCode=AER
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ MciCode=arb
|
|||||||
Type=Expansion
|
Type=Expansion
|
||||||
BoosterCovers=3
|
BoosterCovers=3
|
||||||
Booster=10 Common, 3 Uncommon, 1 RareMythic, 1 BasicLand ALA
|
Booster=10 Common, 3 Uncommon, 1 RareMythic, 1 BasicLand ALA
|
||||||
|
FatPack=8
|
||||||
|
FatPackExtraSlots=40 BasicLands ALA
|
||||||
ScryfallCode=ARB
|
ScryfallCode=ARB
|
||||||
|
|
||||||
[cards]
|
[cards]
|
||||||
|
|||||||
@@ -8,6 +8,8 @@ MciCode=akh
|
|||||||
BoosterCovers=5
|
BoosterCovers=5
|
||||||
Booster=10 Common:!fromSheet("AKH Planeswalker Decks and Toolkit"), 3 Uncommon:!fromSheet("AKH Planeswalker Decks and Toolkit"), 1 RareMythic:!fromSheet("AKH Planeswalker Decks and Toolkit"), 1 BasicLand AKH
|
Booster=10 Common:!fromSheet("AKH Planeswalker Decks and Toolkit"), 3 Uncommon:!fromSheet("AKH Planeswalker Decks and Toolkit"), 1 RareMythic:!fromSheet("AKH Planeswalker Decks and Toolkit"), 1 BasicLand AKH
|
||||||
AdditionalSheetForFoils=fromSheet("MPS Amonkhet Invocations")
|
AdditionalSheetForFoils=fromSheet("MPS Amonkhet Invocations")
|
||||||
|
FatPack=10
|
||||||
|
FatPackExtraSlots=80 BasicLands
|
||||||
AdditionalSetUnlockedInQuest=MPS_AKH
|
AdditionalSetUnlockedInQuest=MPS_AKH
|
||||||
ChaosDraftThemes=GRAVEYARD_MATTERS
|
ChaosDraftThemes=GRAVEYARD_MATTERS
|
||||||
ScryfallCode=AKH
|
ScryfallCode=AKH
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ MciCode=ap
|
|||||||
Type=Expansion
|
Type=Expansion
|
||||||
BoosterCovers=1
|
BoosterCovers=1
|
||||||
Booster=11 Common, 3 Uncommon, 1 Rare
|
Booster=11 Common, 3 Uncommon, 1 Rare
|
||||||
|
FatPack=6
|
||||||
Foil=OldStyle
|
Foil=OldStyle
|
||||||
FoilAlwaysInCommonSlot=False
|
FoilAlwaysInCommonSlot=False
|
||||||
ScryfallCode=APC
|
ScryfallCode=APC
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ MciCode=avr
|
|||||||
Type=Expansion
|
Type=Expansion
|
||||||
BoosterCovers=5
|
BoosterCovers=5
|
||||||
Booster=10 Common, 3 Uncommon, 1 RareMythic, 1 BasicLand
|
Booster=10 Common, 3 Uncommon, 1 RareMythic, 1 BasicLand
|
||||||
|
FatPack=9
|
||||||
|
FatPackExtraSlots=80 BasicLands
|
||||||
ChaosDraftThemes=GRAVEYARD_MATTERS
|
ChaosDraftThemes=GRAVEYARD_MATTERS
|
||||||
ScryfallCode=AVR
|
ScryfallCode=AVR
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ MciCode=bfz
|
|||||||
Type=Expansion
|
Type=Expansion
|
||||||
BoosterCovers=5
|
BoosterCovers=5
|
||||||
Booster=10 Common, 3 Uncommon, 1 RareMythic, 1 BasicLand BFZ
|
Booster=10 Common, 3 Uncommon, 1 RareMythic, 1 BasicLand BFZ
|
||||||
|
FatPack=9
|
||||||
|
FatPackExtraSlots=80 BasicLands
|
||||||
AdditionalSheetForFoils=fromSheet("EXP Lands")
|
AdditionalSheetForFoils=fromSheet("EXP Lands")
|
||||||
AdditionalSetUnlockedInQuest=EXP
|
AdditionalSetUnlockedInQuest=EXP
|
||||||
ScryfallCode=BFZ
|
ScryfallCode=BFZ
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ MciCode=bok
|
|||||||
Type=Expansion
|
Type=Expansion
|
||||||
BoosterCovers=3
|
BoosterCovers=3
|
||||||
Booster=11 Common, 3 Uncommon, 1 Rare
|
Booster=11 Common, 3 Uncommon, 1 Rare
|
||||||
|
FatPack=6
|
||||||
FoilAlwaysInCommonSlot=False
|
FoilAlwaysInCommonSlot=False
|
||||||
ScryfallCode=BOK
|
ScryfallCode=BOK
|
||||||
|
|
||||||
|
|||||||
@@ -6,6 +6,8 @@ MciCode=bng
|
|||||||
Type=Expansion
|
Type=Expansion
|
||||||
BoosterCovers=3
|
BoosterCovers=3
|
||||||
Booster=10 Common, 3 Uncommon, 1 RareMythic, 1 BasicLand THS
|
Booster=10 Common, 3 Uncommon, 1 RareMythic, 1 BasicLand THS
|
||||||
|
FatPack=9
|
||||||
|
FatPackExtraSlots=80 BasicLands THS
|
||||||
ScryfallCode=BNG
|
ScryfallCode=BNG
|
||||||
|
|
||||||
[cards]
|
[cards]
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ MciCode=chk
|
|||||||
Type=Expansion
|
Type=Expansion
|
||||||
BoosterCovers=5
|
BoosterCovers=5
|
||||||
Booster=11 Common, 3 Uncommon, 1 Rare
|
Booster=11 Common, 3 Uncommon, 1 Rare
|
||||||
|
FatPack=6
|
||||||
FoilAlwaysInCommonSlot=False
|
FoilAlwaysInCommonSlot=False
|
||||||
ScryfallCode=CHK
|
ScryfallCode=CHK
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ MciCode=cs
|
|||||||
Type=Expansion
|
Type=Expansion
|
||||||
BoosterCovers=3
|
BoosterCovers=3
|
||||||
Booster=11 Common, 3 Uncommon, 1 Rare
|
Booster=11 Common, 3 Uncommon, 1 Rare
|
||||||
|
FatPack=6
|
||||||
|
FatPackExtraSlots=40 BasicLands
|
||||||
ScryfallCode=CSP
|
ScryfallCode=CSP
|
||||||
|
|
||||||
[cards]
|
[cards]
|
||||||
|
|||||||
@@ -8,6 +8,8 @@ MciCode=cfx
|
|||||||
Type=Expansion
|
Type=Expansion
|
||||||
BoosterCovers=3
|
BoosterCovers=3
|
||||||
Booster=10 Common, 3 Uncommon, 1 RareMythic, 1 BasicLand ALA
|
Booster=10 Common, 3 Uncommon, 1 RareMythic, 1 BasicLand ALA
|
||||||
|
FatPack=8
|
||||||
|
FatPackExtraSlots=40 BasicLands ALA
|
||||||
ScryfallCode=CON
|
ScryfallCode=CON
|
||||||
|
|
||||||
[cards]
|
[cards]
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ MciCode=dka
|
|||||||
Type=Expansion
|
Type=Expansion
|
||||||
BoosterCovers=3
|
BoosterCovers=3
|
||||||
Booster=9 Common:!dfc, 3 Uncommon:!dfc, 1 RareMythic:!dfc, 1 dfc, 1 BasicLand ISD
|
Booster=9 Common:!dfc, 3 Uncommon:!dfc, 1 RareMythic:!dfc, 1 dfc, 1 BasicLand ISD
|
||||||
|
FatPack=9
|
||||||
|
FatPackExtraSlots=70 BasicLands ISD
|
||||||
ChaosDraftThemes=GRAVEYARD_MATTERS
|
ChaosDraftThemes=GRAVEYARD_MATTERS
|
||||||
ScryfallCode=DKA
|
ScryfallCode=DKA
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ MciCode=ds
|
|||||||
Type=Expansion
|
Type=Expansion
|
||||||
BoosterCovers=3
|
BoosterCovers=3
|
||||||
Booster=11 Common, 3 Uncommon, 1 Rare
|
Booster=11 Common, 3 Uncommon, 1 Rare
|
||||||
|
FatPack=6
|
||||||
FoilAlwaysInCommonSlot=False
|
FoilAlwaysInCommonSlot=False
|
||||||
ChaosDraftThemes=MIRRODIN
|
ChaosDraftThemes=MIRRODIN
|
||||||
ScryfallCode=DST
|
ScryfallCode=DST
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ MciCode=di
|
|||||||
Type=Expansion
|
Type=Expansion
|
||||||
BoosterCovers=3
|
BoosterCovers=3
|
||||||
Booster=11 Common, 3 Uncommon, 1 Rare
|
Booster=11 Common, 3 Uncommon, 1 Rare
|
||||||
|
FatPack=6
|
||||||
|
FatPackExtraSlots=40 BasicLands RAV
|
||||||
FoilAlwaysInCommonSlot=False
|
FoilAlwaysInCommonSlot=False
|
||||||
ChaosDraftThemes=RAVNICA
|
ChaosDraftThemes=RAVNICA
|
||||||
ScryfallCode=DIS
|
ScryfallCode=DIS
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ MciCode=dom
|
|||||||
BoosterCovers=5
|
BoosterCovers=5
|
||||||
Booster=10 Common:!fromSheet("DOM Planeswalker Decks and Additional Promo"), 3 Uncommon:!fromSheet("DOM Planeswalker Decks and Additional Promo"), 1 RareMythic:!fromSheet("DOM Planeswalker Decks and Additional Promo"), 1 BasicLand DOM
|
Booster=10 Common:!fromSheet("DOM Planeswalker Decks and Additional Promo"), 3 Uncommon:!fromSheet("DOM Planeswalker Decks and Additional Promo"), 1 RareMythic:!fromSheet("DOM Planeswalker Decks and Additional Promo"), 1 BasicLand DOM
|
||||||
BoosterMustContain=Legendary Creature
|
BoosterMustContain=Legendary Creature
|
||||||
|
FatPack=10
|
||||||
|
FatPackExtraSlots=80 BasicLands
|
||||||
ScryfallCode=DOM
|
ScryfallCode=DOM
|
||||||
|
|
||||||
[cards]
|
[cards]
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ MciCode=dgm
|
|||||||
Type=Expansion
|
Type=Expansion
|
||||||
BoosterCovers=3
|
BoosterCovers=3
|
||||||
Booster=10 Common:!land, 3 Uncommon, 1 RareMythic:!land, 1 fromSheet("DGM Lands")
|
Booster=10 Common:!land, 3 Uncommon, 1 RareMythic:!land, 1 fromSheet("DGM Lands")
|
||||||
|
FatPack=9
|
||||||
|
FatPackExtraSlots=80 BasicLands RTR
|
||||||
ChaosDraftThemes=RAVNICA
|
ChaosDraftThemes=RAVNICA
|
||||||
ScryfallCode=DGM
|
ScryfallCode=DGM
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ MciCode=dtk
|
|||||||
Type=Expansion
|
Type=Expansion
|
||||||
BoosterCovers=5
|
BoosterCovers=5
|
||||||
Booster=10 Common, 3 Uncommon, 1 RareMythic, 1 BasicLand DTK
|
Booster=10 Common, 3 Uncommon, 1 RareMythic, 1 BasicLand DTK
|
||||||
|
FatPack=9
|
||||||
|
FatPackExtraSlots=80 BasicLands
|
||||||
ScryfallCode=DTK
|
ScryfallCode=DTK
|
||||||
|
|
||||||
[cards]
|
[cards]
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ ScryfallCode=AFR
|
|||||||
BoosterCovers=5
|
BoosterCovers=5
|
||||||
Booster=10 Common, 3 Uncommon, 1 RareMythic, 1 BasicLand
|
Booster=10 Common, 3 Uncommon, 1 RareMythic, 1 BasicLand
|
||||||
Prerelease=6 Boosters, 1 RareMythic+
|
Prerelease=6 Boosters, 1 RareMythic+
|
||||||
|
FatPackExtraSlots=20 BasicLands, 20 BasicLands+
|
||||||
|
|
||||||
[cards]
|
[cards]
|
||||||
1 C +2 Mace
|
1 C +2 Mace
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ Type=Expansion
|
|||||||
MciCode=emn
|
MciCode=emn
|
||||||
BoosterCovers=3
|
BoosterCovers=3
|
||||||
Booster=9 Common:!dfc, 3 Uncommon:!dfc, 1 RareMythic:!dfc, 1 dfc:!Rare:!Mythic, 1 BasicLand SOI
|
Booster=9 Common:!dfc, 3 Uncommon:!dfc, 1 RareMythic:!dfc, 1 dfc:!Rare:!Mythic, 1 BasicLand SOI
|
||||||
|
FatPack=9
|
||||||
|
FatPackExtraSlots=80 BasicLands SOI
|
||||||
ChanceReplaceCommonWith=.125F dfc:RareMythic
|
ChanceReplaceCommonWith=.125F dfc:RareMythic
|
||||||
TreatAsSmallSet=true
|
TreatAsSmallSet=true
|
||||||
ChaosDraftThemes=GRAVEYARD_MATTERS
|
ChaosDraftThemes=GRAVEYARD_MATTERS
|
||||||
|
|||||||
@@ -8,6 +8,8 @@ MciCode=eve
|
|||||||
Type=Expansion
|
Type=Expansion
|
||||||
BoosterCovers=3
|
BoosterCovers=3
|
||||||
Booster=11 Common, 3 Uncommon, 1 Rare
|
Booster=11 Common, 3 Uncommon, 1 Rare
|
||||||
|
FatPack=8
|
||||||
|
FatPackExtraSlots=40 BasicLands SHM
|
||||||
ScryfallCode=EVE
|
ScryfallCode=EVE
|
||||||
|
|
||||||
[cards]
|
[cards]
|
||||||
|
|||||||
@@ -6,6 +6,8 @@ MciCode=frf
|
|||||||
Type=Expansion
|
Type=Expansion
|
||||||
BoosterCovers=3
|
BoosterCovers=3
|
||||||
Booster=10 Common:!land, 3 Uncommon, 1 RareMythic, 1 fromSheet("FRF Lands"), 0 fromSheet("FRF Basic Lands")
|
Booster=10 Common:!land, 3 Uncommon, 1 RareMythic, 1 fromSheet("FRF Lands"), 0 fromSheet("FRF Basic Lands")
|
||||||
|
FatPack=9
|
||||||
|
FatPackExtraSlots=80 BasicLands
|
||||||
ChaosDraftThemes=GRAVEYARD_MATTERS
|
ChaosDraftThemes=GRAVEYARD_MATTERS
|
||||||
ScryfallCode=FRF
|
ScryfallCode=FRF
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ MciCode=5dn
|
|||||||
Type=Expansion
|
Type=Expansion
|
||||||
BoosterCovers=3
|
BoosterCovers=3
|
||||||
Booster=11 Common, 3 Uncommon, 1 Rare
|
Booster=11 Common, 3 Uncommon, 1 Rare
|
||||||
|
FatPack=6
|
||||||
FoilAlwaysInCommonSlot=False
|
FoilAlwaysInCommonSlot=False
|
||||||
ChaosDraftThemes=MIRRODIN
|
ChaosDraftThemes=MIRRODIN
|
||||||
ScryfallCode=5DN
|
ScryfallCode=5DN
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ MciCode=fut
|
|||||||
Type=Expansion
|
Type=Expansion
|
||||||
BoosterCovers=3
|
BoosterCovers=3
|
||||||
Booster=11 Common, 3 Uncommon, 1 Rare
|
Booster=11 Common, 3 Uncommon, 1 Rare
|
||||||
|
FatPack=6
|
||||||
|
FatPackExtraSlots=40 BasicLands TSP
|
||||||
ScryfallCode=FUT
|
ScryfallCode=FUT
|
||||||
|
|
||||||
[cards]
|
[cards]
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ MciCode=gtc
|
|||||||
Type=Expansion
|
Type=Expansion
|
||||||
BoosterCovers=5
|
BoosterCovers=5
|
||||||
Booster=10 Common, 3 Uncommon, 1 RareMythic, 1 BasicLand RTR
|
Booster=10 Common, 3 Uncommon, 1 RareMythic, 1 BasicLand RTR
|
||||||
|
FatPack=9
|
||||||
|
FatPackExtraSlots=80 BasicLands RTR
|
||||||
ChaosDraftThemes=RAVNICA
|
ChaosDraftThemes=RAVNICA
|
||||||
ScryfallCode=GTC
|
ScryfallCode=GTC
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ MciCode=gp
|
|||||||
Type=Expansion
|
Type=Expansion
|
||||||
BoosterCovers=3
|
BoosterCovers=3
|
||||||
Booster=11 Common, 3 Uncommon, 1 Rare
|
Booster=11 Common, 3 Uncommon, 1 Rare
|
||||||
|
FatPack=6
|
||||||
|
FatPackExtraSlots=40 BasicLands RAV
|
||||||
FoilAlwaysInCommonSlot=False
|
FoilAlwaysInCommonSlot=False
|
||||||
ChaosDraftThemes=RAVNICA
|
ChaosDraftThemes=RAVNICA
|
||||||
ScryfallCode=GPT
|
ScryfallCode=GPT
|
||||||
|
|||||||
@@ -8,6 +8,8 @@ Type=Expansion
|
|||||||
BoosterCovers=5
|
BoosterCovers=5
|
||||||
Booster=10 Common:!fromSheet("GRN Secret Cards"), 3 Uncommon:!fromSheet("GRN Secret Cards"), 1 RareMythic:!fromSheet("GRN Secret Cards"), 1 fromSheet("GRN Lands")
|
Booster=10 Common:!fromSheet("GRN Secret Cards"), 3 Uncommon:!fromSheet("GRN Secret Cards"), 1 RareMythic:!fromSheet("GRN Secret Cards"), 1 fromSheet("GRN Lands")
|
||||||
AdditionalSetUnlockedInQuest=GK1
|
AdditionalSetUnlockedInQuest=GK1
|
||||||
|
FatPack=10
|
||||||
|
FatPackExtraSlots=80 BasicLands
|
||||||
ChaosDraftThemes=RAVNICA;GRAVEYARD_MATTERS
|
ChaosDraftThemes=RAVNICA;GRAVEYARD_MATTERS
|
||||||
ScryfallCode=GRN
|
ScryfallCode=GRN
|
||||||
|
|
||||||
|
|||||||
@@ -8,6 +8,8 @@ MciCode=hou
|
|||||||
BoosterCovers=5
|
BoosterCovers=5
|
||||||
Booster=10 Common:!fromSheet("HOU Planeswalker Decks and Toolkit"), 3 Uncommon:!fromSheet("HOU Planeswalker Decks and Toolkit"), 1 RareMythic:!fromSheet("HOU Planeswalker Decks and Toolkit"), 1 BasicLand
|
Booster=10 Common:!fromSheet("HOU Planeswalker Decks and Toolkit"), 3 Uncommon:!fromSheet("HOU Planeswalker Decks and Toolkit"), 1 RareMythic:!fromSheet("HOU Planeswalker Decks and Toolkit"), 1 BasicLand
|
||||||
AdditionalSheetForFoils=fromSheet("MPS Hour of Devastation Invocations")
|
AdditionalSheetForFoils=fromSheet("MPS Hour of Devastation Invocations")
|
||||||
|
FatPack=10
|
||||||
|
FatPackExtraSlots=80 BasicLands
|
||||||
AdditionalSetUnlockedInQuest=MPS_AKH
|
AdditionalSetUnlockedInQuest=MPS_AKH
|
||||||
TreatAsSmallSet=true
|
TreatAsSmallSet=true
|
||||||
ChaosDraftThemes=GRAVEYARD_MATTERS
|
ChaosDraftThemes=GRAVEYARD_MATTERS
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ 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
|
||||||
ScryfallCode=IKO
|
ScryfallCode=IKO
|
||||||
|
|
||||||
[cards]
|
[cards]
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ MciCode=isd
|
|||||||
Type=Expansion
|
Type=Expansion
|
||||||
BoosterCovers=5
|
BoosterCovers=5
|
||||||
Booster=9 Common:!dfc, 3 Uncommon:!dfc, 1 RareMythic:!dfc, 1 dfc, 1 BasicLand
|
Booster=9 Common:!dfc, 3 Uncommon:!dfc, 1 RareMythic:!dfc, 1 dfc, 1 BasicLand
|
||||||
|
FatPack=9
|
||||||
|
FatPackExtraSlots=70 BasicLands
|
||||||
ChaosDraftThemes=GRAVEYARD_MATTERS
|
ChaosDraftThemes=GRAVEYARD_MATTERS
|
||||||
ScryfallCode=ISD
|
ScryfallCode=ISD
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ MciCode=in
|
|||||||
Type=Expansion
|
Type=Expansion
|
||||||
BoosterCovers=3
|
BoosterCovers=3
|
||||||
Booster=11 Common, 3 Uncommon, 1 Rare
|
Booster=11 Common, 3 Uncommon, 1 Rare
|
||||||
|
FatPack=6
|
||||||
Foil=OldStyle
|
Foil=OldStyle
|
||||||
FoilAlwaysInCommonSlot=False
|
FoilAlwaysInCommonSlot=False
|
||||||
ScryfallCode=INV
|
ScryfallCode=INV
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ Type=Expansion
|
|||||||
MciCode=xln
|
MciCode=xln
|
||||||
BoosterCovers=5
|
BoosterCovers=5
|
||||||
Booster=10 Common:fromSheet("XLN cards"), 3 Uncommon:fromSheet("XLN cards"), 1 RareMythic:fromSheet("XLN cards"), 1 BasicLand
|
Booster=10 Common:fromSheet("XLN cards"), 3 Uncommon:fromSheet("XLN cards"), 1 RareMythic:fromSheet("XLN cards"), 1 BasicLand
|
||||||
|
FatPack=10
|
||||||
|
FatPackExtraSlots=80 BasicLands
|
||||||
ScryfallCode=XLN
|
ScryfallCode=XLN
|
||||||
|
|
||||||
[cards]
|
[cards]
|
||||||
|
|||||||
@@ -6,6 +6,8 @@ MciCode=jou
|
|||||||
Type=Expansion
|
Type=Expansion
|
||||||
BoosterCovers=3
|
BoosterCovers=3
|
||||||
Booster=10 Common, 3 Uncommon, 1 RareMythic, 1 BasicLand THS
|
Booster=10 Common, 3 Uncommon, 1 RareMythic, 1 BasicLand THS
|
||||||
|
FatPack=9
|
||||||
|
FatPackExtraSlots=80 BasicLands THS
|
||||||
ScryfallCode=JOU
|
ScryfallCode=JOU
|
||||||
|
|
||||||
[cards]
|
[cards]
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ MciCode=ju
|
|||||||
Type=Expansion
|
Type=Expansion
|
||||||
BoosterCovers=1
|
BoosterCovers=1
|
||||||
Booster=11 Common, 3 Uncommon, 1 Rare
|
Booster=11 Common, 3 Uncommon, 1 Rare
|
||||||
|
FatPack=6
|
||||||
Foil=OldStyle
|
Foil=OldStyle
|
||||||
FoilAlwaysInCommonSlot=False
|
FoilAlwaysInCommonSlot=False
|
||||||
ChaosDraftThemes=GRAVEYARD_MATTERS
|
ChaosDraftThemes=GRAVEYARD_MATTERS
|
||||||
|
|||||||
@@ -8,6 +8,8 @@ MciCode=kld
|
|||||||
BoosterCovers=3
|
BoosterCovers=3
|
||||||
Booster=10 Common:fromSheet("KLD cards"), 3 Uncommon:fromSheet("KLD cards"), 1 RareMythic:fromSheet("KLD cards"), 1 BasicLand
|
Booster=10 Common:fromSheet("KLD cards"), 3 Uncommon:fromSheet("KLD cards"), 1 RareMythic:fromSheet("KLD cards"), 1 BasicLand
|
||||||
AdditionalSheetForFoils=fromSheet("KLD Kaladesh Inventions")
|
AdditionalSheetForFoils=fromSheet("KLD Kaladesh Inventions")
|
||||||
|
FatPack=10
|
||||||
|
FatPackExtraSlots=80 BasicLands
|
||||||
AdditionalSetUnlockedInQuest=MPS_KLD
|
AdditionalSetUnlockedInQuest=MPS_KLD
|
||||||
ScryfallCode=KLD
|
ScryfallCode=KLD
|
||||||
|
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ BoosterCovers=3
|
|||||||
Booster=10 Common:!fromSheet("KHM Snow Lands"):fromsheet("KHM cards"), 3 Uncommon:fromSheet("KHM cards"), 1 RareMythic:fromSheet("KHM cards"), 1 fromSheet("KHM Snow Lands")
|
Booster=10 Common:!fromSheet("KHM Snow Lands"):fromsheet("KHM cards"), 3 Uncommon:fromSheet("KHM cards"), 1 RareMythic:fromSheet("KHM cards"), 1 fromSheet("KHM Snow Lands")
|
||||||
Prerelease=6 Boosters, 1 RareMythic+
|
Prerelease=6 Boosters, 1 RareMythic+
|
||||||
#BoosterBox=36 Boosters, 1 fromSheet('KHM buy a box')+
|
#BoosterBox=36 Boosters, 1 fromSheet('KHM buy a box')+
|
||||||
|
FatPackExtraSlots=20 BasicLands, 20 BasicLands+
|
||||||
ScryfallCode=KHM
|
ScryfallCode=KHM
|
||||||
|
|
||||||
[cards]
|
[cards]
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ MciCode=ktk
|
|||||||
Type=Expansion
|
Type=Expansion
|
||||||
BoosterCovers=5
|
BoosterCovers=5
|
||||||
Booster=10 Common, 3 Uncommon, 1 RareMythic, 1 BasicLand KTK
|
Booster=10 Common, 3 Uncommon, 1 RareMythic, 1 BasicLand KTK
|
||||||
|
FatPack=9
|
||||||
|
FatPackExtraSlots=80 BasicLands
|
||||||
ChaosDraftThemes=GRAVEYARD_MATTERS
|
ChaosDraftThemes=GRAVEYARD_MATTERS
|
||||||
ScryfallCode=KTK
|
ScryfallCode=KTK
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ MciCode=le
|
|||||||
Type=Expansion
|
Type=Expansion
|
||||||
BoosterCovers=3
|
BoosterCovers=3
|
||||||
Booster=11 Common, 3 Uncommon, 1 Rare
|
Booster=11 Common, 3 Uncommon, 1 Rare
|
||||||
|
FatPack=6
|
||||||
Foil=OldStyle
|
Foil=OldStyle
|
||||||
FoilAlwaysInCommonSlot=False
|
FoilAlwaysInCommonSlot=False
|
||||||
ScryfallCode=LGN
|
ScryfallCode=LGN
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ MciCode=lw
|
|||||||
Type=Expansion
|
Type=Expansion
|
||||||
BoosterCovers=5
|
BoosterCovers=5
|
||||||
Booster=11 Common, 3 Uncommon, 1 Rare
|
Booster=11 Common, 3 Uncommon, 1 Rare
|
||||||
|
FatPack=6
|
||||||
|
FatPackExtraSlots=40 BasicLands
|
||||||
ScryfallCode=LRW
|
ScryfallCode=LRW
|
||||||
|
|
||||||
[cards]
|
[cards]
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ Date=2018-11-16
|
|||||||
Name=M19 Gift Pack
|
Name=M19 Gift Pack
|
||||||
Code2=G18
|
Code2=G18
|
||||||
MciCode=g18
|
MciCode=g18
|
||||||
Type=Core
|
Type=Promo
|
||||||
ScryfallCode=g18
|
ScryfallCode=g18
|
||||||
|
|
||||||
[cards]
|
[cards]
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ MciCode=m10
|
|||||||
Type=Core
|
Type=Core
|
||||||
BoosterCovers=5
|
BoosterCovers=5
|
||||||
Booster=10 Common, 3 Uncommon, 1 RareMythic, 1 BasicLand
|
Booster=10 Common, 3 Uncommon, 1 RareMythic, 1 BasicLand
|
||||||
|
FatPack=8
|
||||||
|
FatPackExtraSlots=40 BasicLands
|
||||||
ChaosDraftThemes=CORE_SET
|
ChaosDraftThemes=CORE_SET
|
||||||
ScryfallCode=M10
|
ScryfallCode=M10
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ MciCode=m11
|
|||||||
Type=Core
|
Type=Core
|
||||||
BoosterCovers=5
|
BoosterCovers=5
|
||||||
Booster=10 Common, 3 Uncommon, 1 RareMythic, 1 BasicLand
|
Booster=10 Common, 3 Uncommon, 1 RareMythic, 1 BasicLand
|
||||||
|
FatPack=8
|
||||||
|
FatPackExtraSlots=40 BasicLands
|
||||||
ChaosDraftThemes=CORE_SET
|
ChaosDraftThemes=CORE_SET
|
||||||
ScryfallCode=M11
|
ScryfallCode=M11
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ MciCode=m12
|
|||||||
Type=Core
|
Type=Core
|
||||||
BoosterCovers=5
|
BoosterCovers=5
|
||||||
Booster=10 Common, 3 Uncommon, 1 RareMythic, 1 BasicLand
|
Booster=10 Common, 3 Uncommon, 1 RareMythic, 1 BasicLand
|
||||||
|
FatPack=9
|
||||||
|
FatPackExtraSlots=40 BasicLands
|
||||||
ChaosDraftThemes=CORE_SET
|
ChaosDraftThemes=CORE_SET
|
||||||
ScryfallCode=M12
|
ScryfallCode=M12
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ MciCode=m13
|
|||||||
Type=Core
|
Type=Core
|
||||||
BoosterCovers=5
|
BoosterCovers=5
|
||||||
Booster=10 Common, 3 Uncommon, 1 RareMythic, 1 BasicLand
|
Booster=10 Common, 3 Uncommon, 1 RareMythic, 1 BasicLand
|
||||||
|
FatPack=9
|
||||||
|
FatPackExtraSlots=80 BasicLands
|
||||||
ChaosDraftThemes=CORE_SET
|
ChaosDraftThemes=CORE_SET
|
||||||
ScryfallCode=M13
|
ScryfallCode=M13
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ MciCode=m14
|
|||||||
Type=Core
|
Type=Core
|
||||||
BoosterCovers=5
|
BoosterCovers=5
|
||||||
Booster=10 Common, 3 Uncommon, 1 RareMythic, 1 BasicLand
|
Booster=10 Common, 3 Uncommon, 1 RareMythic, 1 BasicLand
|
||||||
|
FatPack=9
|
||||||
|
FatPackExtraSlots=80 BasicLands
|
||||||
ChaosDraftThemes=CORE_SET
|
ChaosDraftThemes=CORE_SET
|
||||||
ScryfallCode=M14
|
ScryfallCode=M14
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ MciCode=m15
|
|||||||
Type=Core
|
Type=Core
|
||||||
BoosterCovers=5
|
BoosterCovers=5
|
||||||
Booster=10 Common:!fromSheet("M15 Sample Cards"), 3 Uncommon:!fromSheet("M15 Sample Cards"), 1 RareMythic:!fromSheet("M15 Sample Cards"), 1 BasicLand
|
Booster=10 Common:!fromSheet("M15 Sample Cards"), 3 Uncommon:!fromSheet("M15 Sample Cards"), 1 RareMythic:!fromSheet("M15 Sample Cards"), 1 BasicLand
|
||||||
|
FatPack=9
|
||||||
|
FatPackExtraSlots=80 BasicLands
|
||||||
ChaosDraftThemes=CORE_SET
|
ChaosDraftThemes=CORE_SET
|
||||||
ScryfallCode=M15
|
ScryfallCode=M15
|
||||||
|
|
||||||
|
|||||||
@@ -8,6 +8,8 @@ Type=Core
|
|||||||
BoosterCovers=5
|
BoosterCovers=5
|
||||||
Booster=10 Common:!fromSheet("M19 Secret Cards"), 3 Uncommon:!fromSheet("M19 Secret Cards"), 1 RareMythic:!fromSheet("M19 Secret Cards"), 1 fromSheet("M19 Lands")
|
Booster=10 Common:!fromSheet("M19 Secret Cards"), 3 Uncommon:!fromSheet("M19 Secret Cards"), 1 RareMythic:!fromSheet("M19 Secret Cards"), 1 fromSheet("M19 Lands")
|
||||||
ChaosDraftThemes=CORE_SET
|
ChaosDraftThemes=CORE_SET
|
||||||
|
FatPack=10
|
||||||
|
FatPackExtraSlots=80 BasicLands
|
||||||
ScryfallCode=M19
|
ScryfallCode=M19
|
||||||
|
|
||||||
[cards]
|
[cards]
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ MciCode=m20
|
|||||||
Type=Core
|
Type=Core
|
||||||
BoosterCovers=3
|
BoosterCovers=3
|
||||||
Booster=10 Common:!fromSheet("M20 Secret Cards"), 3 Uncommon:!fromSheet("M20 Secret Cards"), 1 RareMythic:!fromSheet("M20 Secret Cards"), 1 fromSheet("M20 Lands")
|
Booster=10 Common:!fromSheet("M20 Secret Cards"), 3 Uncommon:!fromSheet("M20 Secret Cards"), 1 RareMythic:!fromSheet("M20 Secret Cards"), 1 fromSheet("M20 Lands")
|
||||||
|
FatPackExtraSlots=80 BasicLands
|
||||||
ChaosDraftThemes=CORE_SET
|
ChaosDraftThemes=CORE_SET
|
||||||
ScryfallCode=M20
|
ScryfallCode=M20
|
||||||
|
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ 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
|
||||||
ChaosDraftThemes=CORE_SET
|
ChaosDraftThemes=CORE_SET
|
||||||
ScryfallCode=M21
|
ScryfallCode=M21
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ MciCode=ori
|
|||||||
Type=Core
|
Type=Core
|
||||||
BoosterCovers=5
|
BoosterCovers=5
|
||||||
Booster=10 Common:!fromSheet("ORI Sample Cards"), 3 Uncommon:!fromSheet("ORI Sample Cards"), 1 RareMythic:!fromSheet("ORI Sample Cards"), 1 BasicLand
|
Booster=10 Common:!fromSheet("ORI Sample Cards"), 3 Uncommon:!fromSheet("ORI Sample Cards"), 1 RareMythic:!fromSheet("ORI Sample Cards"), 1 BasicLand
|
||||||
|
FatPack=9
|
||||||
|
FatPackExtraSlots=80 BasicLands
|
||||||
ChaosDraftThemes=CORE_SET
|
ChaosDraftThemes=CORE_SET
|
||||||
ScryfallCode=ORI
|
ScryfallCode=ORI
|
||||||
|
|
||||||
|
|||||||
@@ -4,12 +4,14 @@ Date=1999-10-04
|
|||||||
Name=Mercadian Masques
|
Name=Mercadian Masques
|
||||||
Code2=MM
|
Code2=MM
|
||||||
MciCode=mm
|
MciCode=mm
|
||||||
|
ScryfallCode=MMQ
|
||||||
Type=Expansion
|
Type=Expansion
|
||||||
BoosterCovers=3
|
BoosterCovers=3
|
||||||
Booster=11 Common, 3 Uncommon, 1 Rare
|
Booster=11 Common, 3 Uncommon, 1 Rare
|
||||||
|
FatPack=6
|
||||||
|
FatPackExtraSlots=30 BasicLands
|
||||||
Foil=OldStyle
|
Foil=OldStyle
|
||||||
FoilAlwaysInCommonSlot=False
|
FoilAlwaysInCommonSlot=False
|
||||||
ScryfallCode=MMQ
|
|
||||||
|
|
||||||
[cards]
|
[cards]
|
||||||
58 R Aerial Caravan
|
58 R Aerial Caravan
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ MciCode=mbs
|
|||||||
Type=Expansion
|
Type=Expansion
|
||||||
BoosterCovers=3
|
BoosterCovers=3
|
||||||
Booster=10 Common, 3 Uncommon, 1 RareMythic, 1 BasicLand
|
Booster=10 Common, 3 Uncommon, 1 RareMythic, 1 BasicLand
|
||||||
|
FatPack=9
|
||||||
|
FatPackExtraSlots=40 BasicLands
|
||||||
ChaosDraftThemes=MIRRODIN
|
ChaosDraftThemes=MIRRODIN
|
||||||
ScryfallCode=MBS
|
ScryfallCode=MBS
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ MciCode=mi
|
|||||||
Type=Expansion
|
Type=Expansion
|
||||||
BoosterCovers=5
|
BoosterCovers=5
|
||||||
Booster=11 Common, 3 Uncommon, 1 Rare
|
Booster=11 Common, 3 Uncommon, 1 Rare
|
||||||
|
FatPack=6
|
||||||
FoilAlwaysInCommonSlot=False
|
FoilAlwaysInCommonSlot=False
|
||||||
ChaosDraftThemes=MIRRODIN
|
ChaosDraftThemes=MIRRODIN
|
||||||
ScryfallCode=MRD
|
ScryfallCode=MRD
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ MciCode=mt
|
|||||||
Type=Expansion
|
Type=Expansion
|
||||||
BoosterCovers=3
|
BoosterCovers=3
|
||||||
Booster=11 Common, 3 Uncommon, 1 Rare
|
Booster=11 Common, 3 Uncommon, 1 Rare
|
||||||
|
FatPack=6
|
||||||
|
FatPackExtraSlots=40 BasicLands LRW
|
||||||
ScryfallCode=MOR
|
ScryfallCode=MOR
|
||||||
|
|
||||||
[cards]
|
[cards]
|
||||||
|
|||||||
@@ -5,12 +5,13 @@ Name=Nemesis
|
|||||||
Code2=NE
|
Code2=NE
|
||||||
Alias=NEM
|
Alias=NEM
|
||||||
MciCode=ne
|
MciCode=ne
|
||||||
|
ScryfallCode=NEM
|
||||||
Type=Expansion
|
Type=Expansion
|
||||||
BoosterCovers=1
|
BoosterCovers=1
|
||||||
Booster=11 Common, 3 Uncommon, 1 Rare
|
Booster=11 Common, 3 Uncommon, 1 Rare
|
||||||
|
FatPack=6
|
||||||
Foil=OldStyle
|
Foil=OldStyle
|
||||||
FoilAlwaysInCommonSlot=False
|
FoilAlwaysInCommonSlot=False
|
||||||
ScryfallCode=NEM
|
|
||||||
|
|
||||||
[cards]
|
[cards]
|
||||||
27 R AEther Barrier
|
27 R AEther Barrier
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ MciCode=nph
|
|||||||
Type=Expansion
|
Type=Expansion
|
||||||
BoosterCovers=3
|
BoosterCovers=3
|
||||||
Booster=10 Common, 3 Uncommon, 1 RareMythic, 1 BasicLand
|
Booster=10 Common, 3 Uncommon, 1 RareMythic, 1 BasicLand
|
||||||
|
FatPack=9
|
||||||
|
FatPackExtraSlots=40 BasicLands
|
||||||
ChaosDraftThemes=MIRRODIN
|
ChaosDraftThemes=MIRRODIN
|
||||||
ScryfallCode=NPH
|
ScryfallCode=NPH
|
||||||
|
|
||||||
|
|||||||
@@ -8,6 +8,8 @@ Type=Core
|
|||||||
Border=White
|
Border=White
|
||||||
BoosterCovers=5
|
BoosterCovers=5
|
||||||
Booster=10 Common, 3 Uncommon, 1 Rare, 1 BasicLand
|
Booster=10 Common, 3 Uncommon, 1 Rare, 1 BasicLand
|
||||||
|
FatPack=6
|
||||||
|
FatPackExtraSlots=40 BasicLands
|
||||||
FoilAlwaysInCommonSlot=False
|
FoilAlwaysInCommonSlot=False
|
||||||
ChaosDraftThemes=CORE_SET
|
ChaosDraftThemes=CORE_SET
|
||||||
ScryfallCode=9ED
|
ScryfallCode=9ED
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ MciCode=ogw
|
|||||||
Type=Expansion
|
Type=Expansion
|
||||||
BoosterCovers=4
|
BoosterCovers=4
|
||||||
Booster=10 Common, 3 Uncommon, 1 RareMythic, 1 BasicLand BFZ
|
Booster=10 Common, 3 Uncommon, 1 RareMythic, 1 BasicLand BFZ
|
||||||
|
FatPack=9
|
||||||
|
FatPackExtraSlots=66 BasicLands BFZ, 14 name("Wastes")
|
||||||
AdditionalSheetForFoils=fromSheet("EXP Lands 2")
|
AdditionalSheetForFoils=fromSheet("EXP Lands 2")
|
||||||
AdditionalSetUnlockedInQuest=EXP
|
AdditionalSetUnlockedInQuest=EXP
|
||||||
ScryfallCode=OGW
|
ScryfallCode=OGW
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ MciCode=od
|
|||||||
Type=Expansion
|
Type=Expansion
|
||||||
BoosterCovers=3
|
BoosterCovers=3
|
||||||
Booster=11 Common, 3 Uncommon, 1 Rare
|
Booster=11 Common, 3 Uncommon, 1 Rare
|
||||||
|
FatPack=6
|
||||||
Foil=OldStyle
|
Foil=OldStyle
|
||||||
FoilAlwaysInCommonSlot=False
|
FoilAlwaysInCommonSlot=False
|
||||||
ChaosDraftThemes=GRAVEYARD_MATTERS
|
ChaosDraftThemes=GRAVEYARD_MATTERS
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ MciCode=on
|
|||||||
Type=Expansion
|
Type=Expansion
|
||||||
BoosterCovers=5
|
BoosterCovers=5
|
||||||
Booster=11 Common, 3 Uncommon, 1 Rare
|
Booster=11 Common, 3 Uncommon, 1 Rare
|
||||||
|
FatPack=9
|
||||||
|
FatPackExtraSlots=30 BasicLands
|
||||||
Foil=OldStyle
|
Foil=OldStyle
|
||||||
FoilAlwaysInCommonSlot=False
|
FoilAlwaysInCommonSlot=False
|
||||||
ScryfallCode=ONS
|
ScryfallCode=ONS
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ MciCode=pc
|
|||||||
Type=Expansion
|
Type=Expansion
|
||||||
BoosterCovers=3
|
BoosterCovers=3
|
||||||
Booster=11 Common, 3 Uncommon, 1 Rare
|
Booster=11 Common, 3 Uncommon, 1 Rare
|
||||||
|
FatPack=6
|
||||||
|
FatPackExtraSlots=40 BasicLands TSP
|
||||||
ScryfallCode=PLC
|
ScryfallCode=PLC
|
||||||
|
|
||||||
[cards]
|
[cards]
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ MciCode=ps
|
|||||||
Type=Expansion
|
Type=Expansion
|
||||||
BoosterCovers=1
|
BoosterCovers=1
|
||||||
Booster=11 Common, 3 Uncommon, 1 Rare, 0 Special
|
Booster=11 Common, 3 Uncommon, 1 Rare, 0 Special
|
||||||
|
FatPack=6
|
||||||
Foil=OldStyle
|
Foil=OldStyle
|
||||||
FoilAlwaysInCommonSlot=False
|
FoilAlwaysInCommonSlot=False
|
||||||
ScryfallCode=PLS
|
ScryfallCode=PLS
|
||||||
|
|||||||
@@ -4,12 +4,13 @@ Date=2000-06-05
|
|||||||
Name=Prophecy
|
Name=Prophecy
|
||||||
Code2=PY
|
Code2=PY
|
||||||
MciCode=pr
|
MciCode=pr
|
||||||
|
ScryfallCode=PCY
|
||||||
Type=Expansion
|
Type=Expansion
|
||||||
BoosterCovers=1
|
BoosterCovers=1
|
||||||
Booster=11 Common, 3 Uncommon, 1 Rare
|
Booster=11 Common, 3 Uncommon, 1 Rare
|
||||||
|
FatPack=6
|
||||||
Foil=OldStyle
|
Foil=OldStyle
|
||||||
FoilAlwaysInCommonSlot=False
|
FoilAlwaysInCommonSlot=False
|
||||||
ScryfallCode=PCY
|
|
||||||
|
|
||||||
[cards]
|
[cards]
|
||||||
1 U Abolish
|
1 U Abolish
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ MciCode=rna
|
|||||||
Type=Expansion
|
Type=Expansion
|
||||||
BoosterCovers=5
|
BoosterCovers=5
|
||||||
Booster=10 Common:!fromSheet("RNA Secret Cards"), 3 Uncommon:!fromSheet("RNA Secret Cards"), 1 RareMythic:!fromSheet("RNA Secret Cards"), 1 fromSheet("RNA Lands")
|
Booster=10 Common:!fromSheet("RNA Secret Cards"), 3 Uncommon:!fromSheet("RNA Secret Cards"), 1 RareMythic:!fromSheet("RNA Secret Cards"), 1 fromSheet("RNA Lands")
|
||||||
|
FatPack=10
|
||||||
|
FatPackExtraSlots=80 BasicLands
|
||||||
ChaosDraftThemes=RAVNICA
|
ChaosDraftThemes=RAVNICA
|
||||||
ScryfallCode=RNA
|
ScryfallCode=RNA
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ MciCode=rav
|
|||||||
Type=Expansion
|
Type=Expansion
|
||||||
BoosterCovers=5
|
BoosterCovers=5
|
||||||
Booster=11 Common, 3 Uncommon, 1 Rare
|
Booster=11 Common, 3 Uncommon, 1 Rare
|
||||||
|
FatPack=6
|
||||||
|
FatPackExtraSlots=30 BasicLands
|
||||||
FoilAlwaysInCommonSlot=False
|
FoilAlwaysInCommonSlot=False
|
||||||
ChaosDraftThemes=RAVNICA
|
ChaosDraftThemes=RAVNICA
|
||||||
ScryfallCode=RAV
|
ScryfallCode=RAV
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ MciCode=rtr
|
|||||||
Type=Expansion
|
Type=Expansion
|
||||||
BoosterCovers=5
|
BoosterCovers=5
|
||||||
Booster=10 Common, 3 Uncommon, 1 RareMythic, 1 BasicLand
|
Booster=10 Common, 3 Uncommon, 1 RareMythic, 1 BasicLand
|
||||||
|
FatPack=9
|
||||||
|
FatPackExtraSlots=80 BasicLands
|
||||||
ChaosDraftThemes=RAVNICA;GRAVEYARD_MATTERS
|
ChaosDraftThemes=RAVNICA;GRAVEYARD_MATTERS
|
||||||
ScryfallCode=RTR
|
ScryfallCode=RTR
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ MciCode=roe
|
|||||||
Type=Expansion
|
Type=Expansion
|
||||||
BoosterCovers=5
|
BoosterCovers=5
|
||||||
Booster=10 Common, 3 Uncommon, 1 RareMythic, 1 BasicLand
|
Booster=10 Common, 3 Uncommon, 1 RareMythic, 1 BasicLand
|
||||||
|
FatPack=8
|
||||||
|
FatPackExtraSlots=40 BasicLands
|
||||||
ScryfallCode=ROE
|
ScryfallCode=ROE
|
||||||
|
|
||||||
[cards]
|
[cards]
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ Type=Expansion
|
|||||||
MciCode=rix
|
MciCode=rix
|
||||||
BoosterCovers=5
|
BoosterCovers=5
|
||||||
Booster=10 Common:fromSheet("RIX cards"), 3 Uncommon:fromSheet("RIX cards"), 1 RareMythic:fromSheet("RIX cards"), 1 BasicLand:fromSheet("RIX Basic Lands")
|
Booster=10 Common:fromSheet("RIX cards"), 3 Uncommon:fromSheet("RIX cards"), 1 RareMythic:fromSheet("RIX cards"), 1 BasicLand:fromSheet("RIX Basic Lands")
|
||||||
|
FatPack=10
|
||||||
|
FatPackExtraSlots=80 BasicLands
|
||||||
TreatAsSmallSet=true
|
TreatAsSmallSet=true
|
||||||
ScryfallCode=RIX
|
ScryfallCode=RIX
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ MciCode=sok
|
|||||||
Type=Expansion
|
Type=Expansion
|
||||||
BoosterCovers=3
|
BoosterCovers=3
|
||||||
Booster=11 Common, 3 Uncommon, 1 Rare
|
Booster=11 Common, 3 Uncommon, 1 Rare
|
||||||
|
FatPack=6
|
||||||
FoilAlwaysInCommonSlot=False
|
FoilAlwaysInCommonSlot=False
|
||||||
ScryfallCode=SOK
|
ScryfallCode=SOK
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ MciCode=som
|
|||||||
Type=Expansion
|
Type=Expansion
|
||||||
BoosterCovers=5
|
BoosterCovers=5
|
||||||
Booster=10 Common, 3 Uncommon, 1 RareMythic, 1 BasicLand
|
Booster=10 Common, 3 Uncommon, 1 RareMythic, 1 BasicLand
|
||||||
|
FatPack=8
|
||||||
|
FatPackExtraSlots=40 BasicLands
|
||||||
ChaosDraftThemes=MIRRODIN
|
ChaosDraftThemes=MIRRODIN
|
||||||
ScryfallCode=SOM
|
ScryfallCode=SOM
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ MciCode=sc
|
|||||||
Type=Expansion
|
Type=Expansion
|
||||||
BoosterCovers=3
|
BoosterCovers=3
|
||||||
Booster=11 Common, 3 Uncommon, 1 Rare
|
Booster=11 Common, 3 Uncommon, 1 Rare
|
||||||
|
FatPack=6
|
||||||
Foil=OldStyle
|
Foil=OldStyle
|
||||||
FoilAlwaysInCommonSlot=False
|
FoilAlwaysInCommonSlot=False
|
||||||
ChaosDraftThemes=GRAVEYARD_MATTERS
|
ChaosDraftThemes=GRAVEYARD_MATTERS
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ MciCode=shm
|
|||||||
Type=Expansion
|
Type=Expansion
|
||||||
BoosterCovers=5
|
BoosterCovers=5
|
||||||
Booster=11 Common, 3 Uncommon, 1 Rare
|
Booster=11 Common, 3 Uncommon, 1 Rare
|
||||||
|
FatPack=8
|
||||||
|
FatPackExtraSlots=40 BasicLands
|
||||||
ScryfallCode=SHM
|
ScryfallCode=SHM
|
||||||
|
|
||||||
[cards]
|
[cards]
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user