Moved images from cardforge.org to cardforge.link and added missing sets/some product images.

This commit is contained in:
Krazy
2015-06-01 03:44:10 +00:00
parent cceee98a0d
commit 5886f43f8b
179 changed files with 2019 additions and 2101 deletions

1
.gitattributes vendored
View File

@@ -16308,7 +16308,6 @@ forge-gui/res/lists/net-decks-commander.txt -text
forge-gui/res/lists/net-decks.txt -text forge-gui/res/lists/net-decks.txt -text
forge-gui/res/lists/precon-images.txt svneol=native#text/plain forge-gui/res/lists/precon-images.txt svneol=native#text/plain
forge-gui/res/lists/quest-opponent-icons.txt svneol=native#text/plain forge-gui/res/lists/quest-opponent-icons.txt svneol=native#text/plain
forge-gui/res/lists/quest-pet-shop-icons.txt svneol=native#text/plain
forge-gui/res/lists/quest-pet-token-images.txt svneol=native#text/plain forge-gui/res/lists/quest-pet-token-images.txt svneol=native#text/plain
forge-gui/res/lists/token-images.txt svneol=native#text/plain forge-gui/res/lists/token-images.txt svneol=native#text/plain
forge-gui/res/lists/tournamentpack-images.txt svneol=native#text/plain forge-gui/res/lists/tournamentpack-images.txt svneol=native#text/plain

View File

@@ -1,14 +1,12 @@
package forge.util; package forge.util;
import org.apache.commons.lang3.StringUtils;
import forge.ImageKeys; import forge.ImageKeys;
import forge.StaticData; import forge.StaticData;
import forge.card.CardDb; import forge.card.CardDb;
import forge.card.CardRules; import forge.card.CardRules;
import forge.card.CardSplitType; import forge.card.CardSplitType;
import forge.item.PaperCard; import forge.item.PaperCard;
import forge.util.Base64Coder; import org.apache.commons.lang3.StringUtils;
public class ImageUtil { public class ImageUtil {
public static float getNearestHQSize(float baseSize, float actualSize) { public static float getNearestHQSize(float baseSize, float actualSize) {
@@ -67,10 +65,10 @@ public class ImageUtil {
s.append(".full"); s.append(".full");
} }
final String fname; String fname;
if (isDownloadUrl) { if (isDownloadUrl) {
s.append(".jpg"); s.append(".jpg");
fname = Base64Coder.encodeString(s.toString(), true); fname = s.toString().replaceAll("\\s", "%20");
} else { } else {
fname = s.toString(); fname = s.toString();
} }
@@ -111,7 +109,7 @@ public class ImageUtil {
} }
public static String toMWSFilename(String in) { public static String toMWSFilename(String in) {
final StringBuffer out = new StringBuffer(); final StringBuilder out = new StringBuilder();
char c; char c;
for (int i = 0; i < in.length(); i++) { for (int i = 0; i < in.length(); i++) {
c = in.charAt(i); c = in.charAt(i);

View File

@@ -17,18 +17,8 @@
*/ */
package forge.gui; package forge.gui;
import java.io.File;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import java.util.TreeMap;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.Pair;
import com.google.common.base.Predicate; import com.google.common.base.Predicate;
import com.google.common.collect.Iterables; import com.google.common.collect.Iterables;
import forge.card.CardEdition; import forge.card.CardEdition;
import forge.card.CardRules; import forge.card.CardRules;
import forge.item.IPaperCard; import forge.item.IPaperCard;
@@ -37,9 +27,15 @@ import forge.model.FModel;
import forge.properties.ForgeConstants; import forge.properties.ForgeConstants;
import forge.util.FileUtil; import forge.util.FileUtil;
import forge.util.ImageUtil; import forge.util.ImageUtil;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.Pair;
import java.io.File;
import java.util.*;
public class ImportSourceAnalyzer { public class ImportSourceAnalyzer {
public static enum OpType {
public enum OpType {
CONSTRUCTED_DECK, CONSTRUCTED_DECK,
DRAFT_DECK, DRAFT_DECK,
PLANAR_DECK, PLANAR_DECK,
@@ -57,74 +53,75 @@ public class ImportSourceAnalyzer {
DB_FILE DB_FILE
} }
public static interface AnalysisCallback { public interface AnalysisCallback {
boolean checkCancel(); boolean checkCancel();
void addOp(OpType type, File src, File dest); void addOp(OpType type, File src, File dest);
} }
private final File _source; private final File source;
private final AnalysisCallback _cb; private final AnalysisCallback cb;
private final int _numFilesToAnalyze; private final int numFilesToAnalyze;
private int _numFilesAnalyzed; private int numFilesAnalyzed;
public ImportSourceAnalyzer(final String source, final AnalysisCallback cb) { public ImportSourceAnalyzer(final String source, final AnalysisCallback cb) {
_source = new File(source); this.source = new File(source);
_cb = cb; this.cb = cb;
numFilesToAnalyze = countFiles(this.source);
_numFilesToAnalyze = _countFiles(_source);
} }
public int getNumFilesToAnalyze() { return _numFilesToAnalyze; } public int getNumFilesToAnalyze() { return numFilesToAnalyze; }
public int getNumFilesAnalyzed() { return _numFilesAnalyzed; } public int getNumFilesAnalyzed() { return numFilesAnalyzed; }
public void doAnalysis() { public void doAnalysis() {
_identifyAndAnalyze(_source); identifyAndAnalyze(this.source);
} }
private void _identifyAndAnalyze(final File root) { private void identifyAndAnalyze(final File root) {
// see if we can figure out the likely identity of the source folder and // see if we can figure out the likely identity of the source folder and
// dispatch to the best analysis subroutine to handle it // dispatch to the best analysis subroutine to handle it
final String dirname = root.getName(); final String dirname = root.getName();
if ("res".equalsIgnoreCase(dirname)) { _analyzeOldResDir(root); } if ("res".equalsIgnoreCase(dirname)) { analyzeOldResDir(root); }
else if ("constructed".equalsIgnoreCase(dirname)) { _analyzeConstructedDeckDir(root); } else if ("constructed".equalsIgnoreCase(dirname)) { analyzeConstructedDeckDir(root); }
else if ("draft".equalsIgnoreCase(dirname)) { _analyzeDraftDeckDir(root); } else if ("draft".equalsIgnoreCase(dirname)) { analyzeDraftDeckDir(root); }
else if ("plane".equalsIgnoreCase(dirname) || "planar".equalsIgnoreCase(dirname)) { _analyzePlanarDeckDir(root); } else if ("plane".equalsIgnoreCase(dirname) || "planar".equalsIgnoreCase(dirname)) { analyzePlanarDeckDir(root); }
else if ("scheme".equalsIgnoreCase(dirname)) { _analyzeSchemeDeckDir(root); } else if ("scheme".equalsIgnoreCase(dirname)) { analyzeSchemeDeckDir(root); }
else if ("sealed".equalsIgnoreCase(dirname)) { _analyzeSealedDeckDir(root); } else if ("sealed".equalsIgnoreCase(dirname)) { analyzeSealedDeckDir(root); }
else if (StringUtils.containsIgnoreCase(dirname, "deck")) { _analyzeDecksDir(root); } else if (StringUtils.containsIgnoreCase(dirname, "deck")) { analyzeDecksDir(root); }
else if ("gauntlet".equalsIgnoreCase(dirname)) { _analyzeGauntletDataDir(root); } else if ("gauntlet".equalsIgnoreCase(dirname)) { analyzeGauntletDataDir(root); }
else if ("layouts".equalsIgnoreCase(dirname)) { _analyzeLayoutsDir(root); } else if ("layouts".equalsIgnoreCase(dirname)) { analyzeLayoutsDir(root); }
else if ("pics".equalsIgnoreCase(dirname)) { _analyzeCardPicsDir(root); } else if ("pics".equalsIgnoreCase(dirname)) { analyzeCardPicsDir(root); }
else if ("pics_product".equalsIgnoreCase(dirname)) { _analyzeProductPicsDir(root); } else if ("pics_product".equalsIgnoreCase(dirname)) { analyzeProductPicsDir(root); }
else if ("preferences".equalsIgnoreCase(dirname)) { _analyzePreferencesDir(root); } else if ("preferences".equalsIgnoreCase(dirname)) { analyzePreferencesDir(root); }
else if ("quest".equalsIgnoreCase(dirname)) { _analyzeQuestDir(root); } else if ("quest".equalsIgnoreCase(dirname)) { analyzeQuestDir(root); }
else if (null != FModel.getMagicDb().getEditions().get(dirname)) { _analyzeCardPicsSetDir(root); } else if (null != FModel.getMagicDb().getEditions().get(dirname)) { analyzeCardPicsSetDir(root); }
else { else {
// look at files in directory and make a semi-educated guess based on file extensions // look at files in directory and make a semi-educated guess based on file extensions
int numUnhandledFiles = 0; int numUnhandledFiles = 0;
for (final File file : root.listFiles()) { File[] files = root.listFiles();
if (_cb.checkCancel()) { return; } assert files != null;
for (final File file : files) {
if (cb.checkCancel()) { return; }
if (file.isFile()) { if (file.isFile()) {
final String filename = file.getName(); final String filename = file.getName();
if (StringUtils.endsWithIgnoreCase(filename, ".dck")) { if (StringUtils.endsWithIgnoreCase(filename, ".dck")) {
_analyzeDecksDir(root); analyzeDecksDir(root);
numUnhandledFiles = 0; numUnhandledFiles = 0;
break; break;
} else if (StringUtils.endsWithIgnoreCase(filename, ".jpg")) { } else if (StringUtils.endsWithIgnoreCase(filename, ".jpg")) {
_analyzeCardPicsDir(root); analyzeCardPicsDir(root);
numUnhandledFiles = 0; numUnhandledFiles = 0;
break; break;
} }
++numUnhandledFiles; ++numUnhandledFiles;
} else if (file.isDirectory()) { } else if (file.isDirectory()) {
_identifyAndAnalyze(file); identifyAndAnalyze(file);
} }
} }
_numFilesAnalyzed += numUnhandledFiles; numFilesAnalyzed += numUnhandledFiles;
} }
} }
@@ -132,24 +129,25 @@ public class ImportSourceAnalyzer {
// pre-profile res dir // pre-profile res dir
// //
private void _analyzeOldResDir(final File root) { private void analyzeOldResDir(final File root) {
_analyzeDir(root, new _Analyzer() { analyzeDir(root, new Analyzer() {
@Override boolean onDir(final File dir) { @Override
boolean onDir(final File dir) {
final String dirname = dir.getName(); final String dirname = dir.getName();
if ("decks".equalsIgnoreCase(dirname)) { if ("decks".equalsIgnoreCase(dirname)) {
_analyzeDecksDir(dir); analyzeDecksDir(dir);
} else if ("gauntlet".equalsIgnoreCase(dirname)) { } else if ("gauntlet".equalsIgnoreCase(dirname)) {
_analyzeGauntletDataDir(dir); analyzeGauntletDataDir(dir);
} else if ("layouts".equalsIgnoreCase(dirname)) { } else if ("layouts".equalsIgnoreCase(dirname)) {
_analyzeLayoutsDir(dir); analyzeLayoutsDir(dir);
} else if ("pics".equalsIgnoreCase(dirname)) { } else if ("pics".equalsIgnoreCase(dirname)) {
_analyzeCardPicsDir(dir); analyzeCardPicsDir(dir);
} else if ("pics_product".equalsIgnoreCase(dirname)) { } else if ("pics_product".equalsIgnoreCase(dirname)) {
_analyzeProductPicsDir(dir); analyzeProductPicsDir(dir);
} else if ("preferences".equalsIgnoreCase(dirname)) { } else if ("preferences".equalsIgnoreCase(dirname)) {
_analyzePreferencesDir(dir); analyzePreferencesDir(dir);
} else if ("quest".equalsIgnoreCase(dirname)) { } else if ("quest".equalsIgnoreCase(dirname)) {
_analyzeQuestDir(dir); analyzeQuestDir(dir);
} else { } else {
return false; return false;
} }
@@ -162,74 +160,78 @@ public class ImportSourceAnalyzer {
// decks // decks
// //
private void _analyzeDecksDir(final File root) { private void analyzeDecksDir(final File root) {
_analyzeDir(root, new _Analyzer() { analyzeDir(root, new Analyzer() {
@Override void onFile(final File file) { @Override
void onFile(final File file) {
// we don't really expect any files in here, but if we find a .dck file, add it to the unknown list // we don't really expect any files in here, but if we find a .dck file, add it to the unknown list
final String filename = file.getName(); final String filename = file.getName();
if (StringUtils.endsWithIgnoreCase(filename, ".dck")) { if (StringUtils.endsWithIgnoreCase(filename, ".dck")) {
final File targetFile = new File(_lcaseExt(filename)); final File targetFile = new File(lcaseExt(filename));
_cb.addOp(OpType.UNKNOWN_DECK, file, targetFile); cb.addOp(OpType.UNKNOWN_DECK, file, targetFile);
} }
} }
@Override boolean onDir(final File dir) { @Override
boolean onDir(final File dir) {
final String dirname = dir.getName(); final String dirname = dir.getName();
if ("constructed".equalsIgnoreCase(dirname)) { if ("constructed".equalsIgnoreCase(dirname)) {
_analyzeConstructedDeckDir(dir); analyzeConstructedDeckDir(dir);
} else if ("cube".equalsIgnoreCase(dirname)) { } else if ("cube".equalsIgnoreCase(dirname)) {
return false; return false;
} else if ("draft".equalsIgnoreCase(dirname)) { } else if ("draft".equalsIgnoreCase(dirname)) {
_analyzeDraftDeckDir(dir); analyzeDraftDeckDir(dir);
} else if ("plane".equalsIgnoreCase(dirname) || "planar".equalsIgnoreCase(dirname)) { } else if ("plane".equalsIgnoreCase(dirname) || "planar".equalsIgnoreCase(dirname)) {
_analyzePlanarDeckDir(dir); analyzePlanarDeckDir(dir);
} else if ("scheme".equalsIgnoreCase(dirname)) { } else if ("scheme".equalsIgnoreCase(dirname)) {
_analyzeSchemeDeckDir(dir); analyzeSchemeDeckDir(dir);
} else if ("sealed".equalsIgnoreCase(dirname)) { } else if ("sealed".equalsIgnoreCase(dirname)) {
_analyzeSealedDeckDir(dir); analyzeSealedDeckDir(dir);
} else { } else {
_analyzeKnownDeckDir(dir, null, OpType.UNKNOWN_DECK); analyzeKnownDeckDir(dir, null, OpType.UNKNOWN_DECK);
} }
return true; return true;
} }
}); });
} }
private void _analyzeConstructedDeckDir(final File root) { private void analyzeConstructedDeckDir(final File root) {
_analyzeKnownDeckDir(root, ForgeConstants.DECK_CONSTRUCTED_DIR, OpType.CONSTRUCTED_DECK); analyzeKnownDeckDir(root, ForgeConstants.DECK_CONSTRUCTED_DIR, OpType.CONSTRUCTED_DECK);
} }
private void _analyzeDraftDeckDir(final File root) { private void analyzeDraftDeckDir(final File root) {
_analyzeKnownDeckDir(root, ForgeConstants.DECK_DRAFT_DIR, OpType.DRAFT_DECK); analyzeKnownDeckDir(root, ForgeConstants.DECK_DRAFT_DIR, OpType.DRAFT_DECK);
} }
private void _analyzePlanarDeckDir(final File root) { private void analyzePlanarDeckDir(final File root) {
_analyzeKnownDeckDir(root, ForgeConstants.DECK_PLANE_DIR, OpType.PLANAR_DECK); analyzeKnownDeckDir(root, ForgeConstants.DECK_PLANE_DIR, OpType.PLANAR_DECK);
} }
private void _analyzeSchemeDeckDir(final File root) { private void analyzeSchemeDeckDir(final File root) {
_analyzeKnownDeckDir(root, ForgeConstants.DECK_SCHEME_DIR, OpType.SCHEME_DECK); analyzeKnownDeckDir(root, ForgeConstants.DECK_SCHEME_DIR, OpType.SCHEME_DECK);
} }
private void _analyzeSealedDeckDir(final File root) { private void analyzeSealedDeckDir(final File root) {
_analyzeKnownDeckDir(root, ForgeConstants.DECK_SEALED_DIR, OpType.SEALED_DECK); analyzeKnownDeckDir(root, ForgeConstants.DECK_SEALED_DIR, OpType.SEALED_DECK);
} }
private void _analyzeKnownDeckDir(final File root, final String targetDir, final OpType opType) { private void analyzeKnownDeckDir(final File root, final String targetDir, final OpType opType) {
_analyzeDir(root, new _Analyzer() { analyzeDir(root, new Analyzer() {
@Override void onFile(final File file) { @Override
void onFile(final File file) {
final String filename = file.getName(); final String filename = file.getName();
if (StringUtils.endsWithIgnoreCase(filename, ".dck")) { if (StringUtils.endsWithIgnoreCase(filename, ".dck")) {
final File targetFile = new File(targetDir, _lcaseExt(filename)); final File targetFile = new File(targetDir, lcaseExt(filename));
if (!file.equals(targetFile)) { if (!file.equals(targetFile)) {
_cb.addOp(opType, file, targetFile); cb.addOp(opType, file, targetFile);
} }
} }
} }
@Override boolean onDir(final File dir) { @Override
boolean onDir(final File dir) {
// if there's a dir beneath a known directory, assume the same kind of decks are in there // if there's a dir beneath a known directory, assume the same kind of decks are in there
_analyzeKnownDeckDir(dir, targetDir, opType); analyzeKnownDeckDir(dir, targetDir, opType);
return true; return true;
} }
}); });
@@ -239,15 +241,16 @@ public class ImportSourceAnalyzer {
// gauntlet // gauntlet
// //
private void _analyzeGauntletDataDir(final File root) { private void analyzeGauntletDataDir(final File root) {
_analyzeDir(root, new _Analyzer() { analyzeDir(root, new Analyzer() {
@Override void onFile(final File file) { @Override
void onFile(final File file) {
// find *.dat files, but exclude LOCKED_* // find *.dat files, but exclude LOCKED_*
final String filename = file.getName(); final String filename = file.getName();
if (StringUtils.endsWithIgnoreCase(filename, ".dat") && !filename.startsWith("LOCKED_")) { if (StringUtils.endsWithIgnoreCase(filename, ".dat") && !filename.startsWith("LOCKED_")) {
final File targetFile = new File(ForgeConstants.GAUNTLET_DIR.userPrefLoc, _lcaseExt(filename)); final File targetFile = new File(ForgeConstants.GAUNTLET_DIR.userPrefLoc, lcaseExt(filename));
if (!file.equals(targetFile)) { if (!file.equals(targetFile)) {
_cb.addOp(OpType.GAUNTLET_DATA, file, targetFile); cb.addOp(OpType.GAUNTLET_DATA, file, targetFile);
} }
} }
} }
@@ -258,15 +261,16 @@ public class ImportSourceAnalyzer {
// layouts // layouts
// //
private void _analyzeLayoutsDir(final File root) { private void analyzeLayoutsDir(final File root) {
_analyzeDir(root, new _Analyzer() { analyzeDir(root, new Analyzer() {
@Override void onFile(final File file) { @Override
void onFile(final File file) {
// find *_preferred.xml files // find *_preferred.xml files
final String filename = file.getName(); final String filename = file.getName();
if (StringUtils.endsWithIgnoreCase(filename, "_preferred.xml")) { if (StringUtils.endsWithIgnoreCase(filename, "_preferred.xml")) {
final File targetFile = new File(ForgeConstants.USER_PREFS_DIR, final File targetFile = new File(ForgeConstants.USER_PREFS_DIR,
file.getName().toLowerCase(Locale.ENGLISH).replace("_preferred", "")); file.getName().toLowerCase(Locale.ENGLISH).replace("_preferred", ""));
_cb.addOp(OpType.PREFERENCE_FILE, file, targetFile); cb.addOp(OpType.PREFERENCE_FILE, file, targetFile);
} }
} }
}); });
@@ -276,8 +280,8 @@ public class ImportSourceAnalyzer {
// default card pics // default card pics
// //
private static String _oldCleanString(final String in) { private static String oldCleanString(final String in) {
final StringBuffer out = new StringBuffer(); final StringBuilder out = new StringBuilder();
for (int i = 0; i < in.length(); i++) { for (int i = 0; i < in.length(); i++) {
final char c = in.charAt(i); final char c = in.charAt(i);
if ((c == ' ') || (c == '-')) { if ((c == ' ') || (c == '-')) {
@@ -292,7 +296,7 @@ public class ImportSourceAnalyzer {
return out.toString().toLowerCase(); return out.toString().toLowerCase();
} }
private void _addDefaultPicNames(final PaperCard c, final boolean backFace) { private void addDefaultPicNames(final PaperCard c, final boolean backFace) {
final CardRules card = c.getRules(); final CardRules card = c.getRules();
final String urls = card.getPictureUrl(backFace); final String urls = card.getPictureUrl(backFace);
if (StringUtils.isEmpty(urls)) { return; } if (StringUtils.isEmpty(urls)) { return; }
@@ -304,59 +308,62 @@ public class ImportSourceAnalyzer {
final String filenameBase = ImageUtil.getImageKey(c, backFace, false); final String filenameBase = ImageUtil.getImageKey(c, backFace, false);
final String filename = filenameBase + ".jpg"; final String filename = filenameBase + ".jpg";
final boolean alreadyHadIt = null != _defaultPicNames.put(filename, filename); final boolean alreadyHadIt = null != defaultPicNames.put(filename, filename);
if ( alreadyHadIt ) { if ( alreadyHadIt ) {
return; return;
} }
// Do you shift artIndex by one here? // Do you shift artIndex by one here?
final String newLastSymbol = 0 == c.getArtIndex() ? "" : String.valueOf(c.getArtIndex() /* + 1 */); final String newLastSymbol = 0 == c.getArtIndex() ? "" : String.valueOf(c.getArtIndex() /* + 1 */);
final String oldFilename = _oldCleanString(filenameBase.replaceAll("[0-9]?(\\.full)?$", "")) + newLastSymbol + ".jpg"; final String oldFilename = oldCleanString(filenameBase.replaceAll("[0-9]?(\\.full)?$", "")) + newLastSymbol + ".jpg";
//if ( numPics > 1 ) //if ( numPics > 1 )
//System.out.printf("Will move %s -> %s%n", oldFilename, filename); //System.out.printf("Will move %s -> %s%n", oldFilename, filename);
_defaultPicOldNameToCurrentName.put(oldFilename, filename); defaultPicOldNameToCurrentName.put(oldFilename, filename);
} }
private Map<String, String> _defaultPicNames; private Map<String, String> defaultPicNames;
private Map<String, String> _defaultPicOldNameToCurrentName; private Map<String, String> defaultPicOldNameToCurrentName;
private void _analyzeCardPicsDir(final File root) { private void analyzeCardPicsDir(final File root) {
if (null == _defaultPicNames) { if (null == defaultPicNames) {
_defaultPicNames = new TreeMap<String, String>(String.CASE_INSENSITIVE_ORDER); defaultPicNames = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
_defaultPicOldNameToCurrentName = new TreeMap<String, String>(String.CASE_INSENSITIVE_ORDER); defaultPicOldNameToCurrentName = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
for (final PaperCard c : FModel.getMagicDb().getCommonCards().getAllCards()) { for (final PaperCard c : FModel.getMagicDb().getCommonCards().getAllCards()) {
_addDefaultPicNames(c, false); addDefaultPicNames(c, false);
if (ImageUtil.hasBackFacePicture(c)) { if (ImageUtil.hasBackFacePicture(c)) {
_addDefaultPicNames(c, true); addDefaultPicNames(c, true);
} }
} }
for (final PaperCard c : FModel.getMagicDb().getVariantCards().getAllCards()) { for (final PaperCard c : FModel.getMagicDb().getVariantCards().getAllCards()) {
_addDefaultPicNames(c, false); addDefaultPicNames(c, false);
// variants never have backfaces // variants never have backfaces
} }
} }
_analyzeListedDir(root, ForgeConstants.CACHE_CARD_PICS_DIR, new _ListedAnalyzer() { analyzeListedDir(root, ForgeConstants.CACHE_CARD_PICS_DIR, new ListedAnalyzer() {
@Override public String map(final String filename) { @Override
if (_defaultPicOldNameToCurrentName.containsKey(filename)) { public String map(final String filename) {
return _defaultPicOldNameToCurrentName.get(filename); if (defaultPicOldNameToCurrentName.containsKey(filename)) {
return defaultPicOldNameToCurrentName.get(filename);
} }
return _defaultPicNames.get(filename); return defaultPicNames.get(filename);
} }
@Override public OpType getOpType(final String filename) { @Override
public OpType getOpType(final String filename) {
return OpType.DEFAULT_CARD_PIC; return OpType.DEFAULT_CARD_PIC;
} }
@Override boolean onDir(final File dir) { @Override
boolean onDir(final File dir) {
if ("icons".equalsIgnoreCase(dir.getName())) { if ("icons".equalsIgnoreCase(dir.getName())) {
_analyzeIconsPicsDir(dir); analyzeIconsPicsDir(dir);
} else if ("tokens".equalsIgnoreCase(dir.getName())) { } else if ("tokens".equalsIgnoreCase(dir.getName())) {
_analyzeTokenPicsDir(dir); analyzeTokenPicsDir(dir);
} else { } else {
_analyzeCardPicsSetDir(dir); analyzeCardPicsSetDir(dir);
} }
return true; return true;
} }
@@ -367,7 +374,7 @@ public class ImportSourceAnalyzer {
// set card pics // set card pics
// //
private static void _addSetCards(final Map<String, String> cardFileNames, final Iterable<PaperCard> library, final Predicate<PaperCard> filter) { private static void addSetCards(final Map<String, String> cardFileNames, final Iterable<PaperCard> library, final Predicate<PaperCard> filter) {
for (final PaperCard c : Iterables.filter(library, filter)) { for (final PaperCard c : Iterables.filter(library, filter)) {
String filename = ImageUtil.getImageKey(c, false, true) + ".jpg"; String filename = ImageUtil.getImageKey(c, false, true) + ".jpg";
cardFileNames.put(filename, filename); cardFileNames.put(filename, filename);
@@ -378,21 +385,21 @@ public class ImportSourceAnalyzer {
} }
} }
Map<String, Map<String, String>> _cardFileNamesBySet; Map<String, Map<String, String>> cardFileNamesBySet;
Map<String, String> _nameUpdates; Map<String, String> nameUpdates;
private void _analyzeCardPicsSetDir(final File root) { private void analyzeCardPicsSetDir(final File root) {
if (null == _cardFileNamesBySet) { if (null == cardFileNamesBySet) {
_cardFileNamesBySet = new TreeMap<String, Map<String, String>>(String.CASE_INSENSITIVE_ORDER); cardFileNamesBySet = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
for (final CardEdition ce : FModel.getMagicDb().getEditions()) { for (final CardEdition ce : FModel.getMagicDb().getEditions()) {
final Map<String, String> cardFileNames = new TreeMap<String, String>(String.CASE_INSENSITIVE_ORDER); final Map<String, String> cardFileNames = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
final Predicate<PaperCard> filter = IPaperCard.Predicates.printedInSet(ce.getCode()); final Predicate<PaperCard> filter = IPaperCard.Predicates.printedInSet(ce.getCode());
_addSetCards(cardFileNames, FModel.getMagicDb().getCommonCards().getAllCards(), filter); addSetCards(cardFileNames, FModel.getMagicDb().getCommonCards().getAllCards(), filter);
_addSetCards(cardFileNames, FModel.getMagicDb().getVariantCards().getAllCards(), filter); addSetCards(cardFileNames, FModel.getMagicDb().getVariantCards().getAllCards(), filter);
_cardFileNamesBySet.put(ce.getCode2(), cardFileNames); cardFileNamesBySet.put(ce.getCode2(), cardFileNames);
} }
// planar cards now don't have the ".full" part in their filenames // planar cards now don't have the ".full" part in their filenames
_nameUpdates = new TreeMap<String, String>(String.CASE_INSENSITIVE_ORDER); nameUpdates = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
final Predicate<PaperCard> predPlanes = new Predicate<PaperCard>() { final Predicate<PaperCard> predPlanes = new Predicate<PaperCard>() {
@Override @Override
public boolean apply(final PaperCard arg0) { public boolean apply(final PaperCard arg0) {
@@ -402,10 +409,10 @@ public class ImportSourceAnalyzer {
for (final PaperCard c : Iterables.filter(FModel.getMagicDb().getVariantCards().getAllCards(), predPlanes)) { for (final PaperCard c : Iterables.filter(FModel.getMagicDb().getVariantCards().getAllCards(), predPlanes)) {
String baseName = ImageUtil.getImageKey(c,false, true); String baseName = ImageUtil.getImageKey(c,false, true);
_nameUpdates.put(baseName + ".full.jpg", baseName + ".jpg"); nameUpdates.put(baseName + ".full.jpg", baseName + ".jpg");
if (ImageUtil.hasBackFacePicture(c)) { if (ImageUtil.hasBackFacePicture(c)) {
baseName = ImageUtil.getImageKey(c, true, true); baseName = ImageUtil.getImageKey(c, true, true);
_nameUpdates.put(baseName + ".full.jpg", baseName + ".jpg"); nameUpdates.put(baseName + ".full.jpg", baseName + ".jpg");
} }
} }
} }
@@ -415,17 +422,18 @@ public class ImportSourceAnalyzer {
final CardEdition edition = editions.get(editionCode); final CardEdition edition = editions.get(editionCode);
if (null == edition) { if (null == edition) {
// not a valid set name, skip // not a valid set name, skip
_numFilesAnalyzed += _countFiles(root); numFilesAnalyzed += countFiles(root);
return; return;
} }
final String editionCode2 = edition.getCode2(); final String editionCode2 = edition.getCode2();
final Map<String, String> validFilenames = _cardFileNamesBySet.get(editionCode2); final Map<String, String> validFilenames = cardFileNamesBySet.get(editionCode2);
_analyzeListedDir(root, ForgeConstants.CACHE_CARD_PICS_DIR, new _ListedAnalyzer() { analyzeListedDir(root, ForgeConstants.CACHE_CARD_PICS_DIR, new ListedAnalyzer() {
@Override public String map(String filename) { @Override
public String map(String filename) {
filename = editionCode2 + "/" + filename; filename = editionCode2 + "/" + filename;
if (_nameUpdates.containsKey(filename)) { if (nameUpdates.containsKey(filename)) {
filename = _nameUpdates.get(filename); filename = nameUpdates.get(filename);
} }
if (validFilenames.containsKey(filename)) { if (validFilenames.containsKey(filename)) {
return validFilenames.get(filename); return validFilenames.get(filename);
@@ -435,7 +443,9 @@ public class ImportSourceAnalyzer {
} }
return null; return null;
} }
@Override public OpType getOpType(final String filename) {
@Override
public OpType getOpType(final String filename) {
return validFilenames.containsKey(filename) ? OpType.SET_CARD_PIC : OpType.POSSIBLE_SET_CARD_PIC; return validFilenames.containsKey(filename) ? OpType.SET_CARD_PIC : OpType.POSSIBLE_SET_CARD_PIC;
} }
}); });
@@ -445,65 +455,77 @@ public class ImportSourceAnalyzer {
// other image dirs // other image dirs
// //
Map<String, String> _iconFileNames; Map<String, String> iconFileNames;
private void _analyzeIconsPicsDir(final File root) { private void analyzeIconsPicsDir(final File root) {
if (null == _iconFileNames) { if (null == iconFileNames) {
_iconFileNames = new TreeMap<String, String>(String.CASE_INSENSITIVE_ORDER); iconFileNames = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
for (final Pair<String, String> nameurl : FileUtil.readNameUrlFile(ForgeConstants.IMAGE_LIST_QUEST_OPPONENT_ICONS_FILE)) { for (final Pair<String, String> nameurl : FileUtil.readNameUrlFile(ForgeConstants.IMAGE_LIST_QUEST_OPPONENT_ICONS_FILE)) {
_iconFileNames.put(nameurl.getLeft(), nameurl.getLeft()); iconFileNames.put(nameurl.getLeft(), nameurl.getLeft());
}
for (final Pair<String, String> nameurl : FileUtil.readNameUrlFile(ForgeConstants.IMAGE_LIST_QUEST_PET_SHOP_ICONS_FILE)) {
_iconFileNames.put(nameurl.getLeft(), nameurl.getLeft());
} }
} }
_analyzeListedDir(root, ForgeConstants.CACHE_ICON_PICS_DIR, new _ListedAnalyzer() { analyzeListedDir(root, ForgeConstants.CACHE_ICON_PICS_DIR, new ListedAnalyzer() {
@Override public String map(final String filename) { return _iconFileNames.containsKey(filename) ? _iconFileNames.get(filename) : null; } @Override
@Override public OpType getOpType(final String filename) { return OpType.QUEST_PIC; } public String map(final String filename) {
return iconFileNames.containsKey(filename) ? iconFileNames.get(filename) : null;
}
@Override
public OpType getOpType(final String filename) {
return OpType.QUEST_PIC;
}
}); });
} }
Map<String, String> _tokenFileNames; Map<String, String> tokenFileNames;
Map<String, String> _questTokenFileNames; Map<String, String> questTokenFileNames;
private void _analyzeTokenPicsDir(final File root) { private void analyzeTokenPicsDir(final File root) {
if (null == _tokenFileNames) { if (null == tokenFileNames) {
_tokenFileNames = new TreeMap<String, String>(String.CASE_INSENSITIVE_ORDER); tokenFileNames = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
_questTokenFileNames = new TreeMap<String, String>(String.CASE_INSENSITIVE_ORDER); questTokenFileNames = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
for (final Pair<String, String> nameurl : FileUtil.readNameUrlFile(ForgeConstants.IMAGE_LIST_TOKENS_FILE)) { for (final Pair<String, String> nameurl : FileUtil.readNameUrlFile(ForgeConstants.IMAGE_LIST_TOKENS_FILE)) {
_tokenFileNames.put(nameurl.getLeft(), nameurl.getLeft()); tokenFileNames.put(nameurl.getLeft(), nameurl.getLeft());
} }
for (final Pair<String, String> nameurl : FileUtil.readNameUrlFile(ForgeConstants.IMAGE_LIST_QUEST_TOKENS_FILE)) { for (final Pair<String, String> nameurl : FileUtil.readNameUrlFile(ForgeConstants.IMAGE_LIST_QUEST_TOKENS_FILE)) {
_questTokenFileNames.put(nameurl.getLeft(), nameurl.getLeft()); questTokenFileNames.put(nameurl.getLeft(), nameurl.getLeft());
} }
} }
_analyzeListedDir(root, ForgeConstants.CACHE_TOKEN_PICS_DIR, new _ListedAnalyzer() { analyzeListedDir(root, ForgeConstants.CACHE_TOKEN_PICS_DIR, new ListedAnalyzer() {
@Override public String map(final String filename) { @Override
if (_questTokenFileNames.containsKey(filename)) { return _questTokenFileNames.get(filename); } public String map(final String filename) {
if (_tokenFileNames.containsKey(filename)) { return _tokenFileNames.get(filename); } if (questTokenFileNames.containsKey(filename)) {
return questTokenFileNames.get(filename);
}
if (tokenFileNames.containsKey(filename)) {
return tokenFileNames.get(filename);
}
return null; return null;
} }
@Override public OpType getOpType(final String filename) {
return _questTokenFileNames.containsKey(filename) ? OpType.QUEST_PIC : OpType.TOKEN_PIC; @Override
public OpType getOpType(final String filename) {
return questTokenFileNames.containsKey(filename) ? OpType.QUEST_PIC : OpType.TOKEN_PIC;
} }
}); });
} }
private void _analyzeProductPicsDir(final File root) { private void analyzeProductPicsDir(final File root) {
// we don't care about the files in the root dir -- the new booster files are .png, not the current .jpg ones // we don't care about the files in the root dir -- the new booster files are .png, not the current .jpg ones
_analyzeDir(root, new _Analyzer() { analyzeDir(root, new Analyzer() {
@Override boolean onDir(final File dir) { @Override
boolean onDir(final File dir) {
final String dirName = dir.getName(); final String dirName = dir.getName();
if ("booster".equalsIgnoreCase(dirName)) { if ("booster".equalsIgnoreCase(dirName)) {
_analyzeSimpleListedDir(dir, ForgeConstants.IMAGE_LIST_QUEST_BOOSTERS_FILE, ForgeConstants.CACHE_BOOSTER_PICS_DIR, OpType.QUEST_PIC); analyzeSimpleListedDir(dir, ForgeConstants.IMAGE_LIST_QUEST_BOOSTERS_FILE, ForgeConstants.CACHE_BOOSTER_PICS_DIR, OpType.QUEST_PIC);
} else if ("fatpacks".equalsIgnoreCase(dirName)) { } else if ("fatpacks".equalsIgnoreCase(dirName)) {
_analyzeSimpleListedDir(dir, ForgeConstants.IMAGE_LIST_QUEST_FATPACKS_FILE, ForgeConstants.CACHE_FATPACK_PICS_DIR, OpType.QUEST_PIC); analyzeSimpleListedDir(dir, ForgeConstants.IMAGE_LIST_QUEST_FATPACKS_FILE, ForgeConstants.CACHE_FATPACK_PICS_DIR, OpType.QUEST_PIC);
} else if ("boosterboxes".equalsIgnoreCase(dirName)) { } else if ("boosterboxes".equalsIgnoreCase(dirName)) {
_analyzeSimpleListedDir(dir, ForgeConstants.IMAGE_LIST_QUEST_BOOSTERBOXES_FILE, ForgeConstants.CACHE_BOOSTERBOX_PICS_DIR, OpType.QUEST_PIC); analyzeSimpleListedDir(dir, ForgeConstants.IMAGE_LIST_QUEST_BOOSTERBOXES_FILE, ForgeConstants.CACHE_BOOSTERBOX_PICS_DIR, OpType.QUEST_PIC);
} else if ("precons".equalsIgnoreCase(dirName)) { } else if ("precons".equalsIgnoreCase(dirName)) {
_analyzeSimpleListedDir(dir, ForgeConstants.IMAGE_LIST_QUEST_PRECONS_FILE, ForgeConstants.CACHE_PRECON_PICS_DIR, OpType.QUEST_PIC); analyzeSimpleListedDir(dir, ForgeConstants.IMAGE_LIST_QUEST_PRECONS_FILE, ForgeConstants.CACHE_PRECON_PICS_DIR, OpType.QUEST_PIC);
} else if ("tournamentpacks".equalsIgnoreCase(dirName)) { } else if ("tournamentpacks".equalsIgnoreCase(dirName)) {
_analyzeSimpleListedDir(dir, ForgeConstants.IMAGE_LIST_QUEST_TOURNAMENTPACKS_FILE, ForgeConstants.CACHE_TOURNAMENTPACK_PICS_DIR, OpType.QUEST_PIC); analyzeSimpleListedDir(dir, ForgeConstants.IMAGE_LIST_QUEST_TOURNAMENTPACKS_FILE, ForgeConstants.CACHE_TOURNAMENTPACK_PICS_DIR, OpType.QUEST_PIC);
} else { } else {
return false; return false;
} }
@@ -516,14 +538,15 @@ public class ImportSourceAnalyzer {
// preferences // preferences
// //
private void _analyzePreferencesDir(final File root) { private void analyzePreferencesDir(final File root) {
_analyzeDir(root, new _Analyzer() { analyzeDir(root, new Analyzer() {
@Override void onFile(final File file) { @Override
void onFile(final File file) {
final String filename = file.getName(); final String filename = file.getName();
if ("editor.preferences".equalsIgnoreCase(filename) || "forge.preferences".equalsIgnoreCase(filename)) { if ("editor.preferences".equalsIgnoreCase(filename) || "forge.preferences".equalsIgnoreCase(filename)) {
final File targetFile = new File(ForgeConstants.USER_PREFS_DIR, filename.toLowerCase(Locale.ENGLISH)); final File targetFile = new File(ForgeConstants.USER_PREFS_DIR, filename.toLowerCase(Locale.ENGLISH));
if (!file.equals(targetFile)) { if (!file.equals(targetFile)) {
_cb.addOp(OpType.PREFERENCE_FILE, file, targetFile); cb.addOp(OpType.PREFERENCE_FILE, file, targetFile);
} }
} }
} }
@@ -534,20 +557,23 @@ public class ImportSourceAnalyzer {
// quest data // quest data
// //
private void _analyzeQuestDir(final File root) { private void analyzeQuestDir(final File root) {
_analyzeDir(root, new _Analyzer() { analyzeDir(root, new Analyzer() {
@Override void onFile(final File file) { @Override
void onFile(final File file) {
final String filename = file.getName(); final String filename = file.getName();
if ("all-prices.txt".equalsIgnoreCase(filename)) { if ("all-prices.txt".equalsIgnoreCase(filename)) {
final File targetFile = new File(ForgeConstants.DB_DIR, filename.toLowerCase(Locale.ENGLISH)); final File targetFile = new File(ForgeConstants.DB_DIR, filename.toLowerCase(Locale.ENGLISH));
if (!file.equals(targetFile)) { if (!file.equals(targetFile)) {
_cb.addOp(OpType.DB_FILE, file, targetFile); cb.addOp(OpType.DB_FILE, file, targetFile);
} }
} }
} }
@Override boolean onDir(final File dir) {
@Override
boolean onDir(final File dir) {
if ("data".equalsIgnoreCase(dir.getName())) { if ("data".equalsIgnoreCase(dir.getName())) {
_analyzeQuestDataDir(dir); analyzeQuestDataDir(dir);
return true; return true;
} }
return false; return false;
@@ -555,14 +581,15 @@ public class ImportSourceAnalyzer {
}); });
} }
private void _analyzeQuestDataDir(final File root) { private void analyzeQuestDataDir(final File root) {
_analyzeDir(root, new _Analyzer() { analyzeDir(root, new Analyzer() {
@Override void onFile(final File file) { @Override
void onFile(final File file) {
final String filename = file.getName(); final String filename = file.getName();
if (StringUtils.endsWithIgnoreCase(filename, ".dat")) { if (StringUtils.endsWithIgnoreCase(filename, ".dat")) {
final File targetFile = new File(ForgeConstants.QUEST_SAVE_DIR, _lcaseExt(filename)); final File targetFile = new File(ForgeConstants.QUEST_SAVE_DIR, lcaseExt(filename));
if (!file.equals(targetFile)) { if (!file.equals(targetFile)) {
_cb.addOp(OpType.QUEST_DATA, file, targetFile); cb.addOp(OpType.QUEST_DATA, file, targetFile);
} }
} }
} }
@@ -573,47 +600,56 @@ public class ImportSourceAnalyzer {
// utility functions // utility functions
// //
private class _Analyzer { private class Analyzer {
void onFile(final File file) { } void onFile(final File file) { }
// returns whether the directory has been handled // returns whether the directory has been handled
boolean onDir(final File dir) { return false; } boolean onDir(final File dir) { return false; }
} }
private void _analyzeDir(final File root, final _Analyzer analyzer) { private void analyzeDir(final File root, final Analyzer analyzer) {
for (final File file : root.listFiles()) { File[] files = root.listFiles();
if (_cb.checkCancel()) { return; } assert files != null;
for (final File file : files) {
if (cb.checkCancel()) { return; }
if (file.isFile()) { if (file.isFile()) {
++_numFilesAnalyzed; ++numFilesAnalyzed;
analyzer.onFile(file); analyzer.onFile(file);
} else if (file.isDirectory()) { } else if (file.isDirectory()) {
if (!analyzer.onDir(file)) { if (!analyzer.onDir(file)) {
_numFilesAnalyzed += _countFiles(file); numFilesAnalyzed += countFiles(file);
} }
} }
} }
} }
private final Map<String, Map<String, String>> _fileNameDb = new HashMap<String, Map<String, String>>(); private final Map<String, Map<String, String>> fileNameDb = new HashMap<>();
private void _analyzeSimpleListedDir(final File root, final String listFile, final String targetDir, final OpType opType) { private void analyzeSimpleListedDir(final File root, final String listFile, final String targetDir, final OpType opType) {
if (!_fileNameDb.containsKey(listFile)) { if (!fileNameDb.containsKey(listFile)) {
final Map<String, String> fileNames = new TreeMap<String, String>(String.CASE_INSENSITIVE_ORDER); final Map<String, String> fileNames = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
for (final Pair<String, String> nameurl : FileUtil.readNameUrlFile(listFile)) { for (final Pair<String, String> nameurl : FileUtil.readNameUrlFile(listFile)) {
// we use a map instead of a set since we need to match case-insensitively but still map to the correct case // we use a map instead of a set since we need to match case-insensitively but still map to the correct case
fileNames.put(nameurl.getLeft(), nameurl.getLeft()); fileNames.put(nameurl.getLeft(), nameurl.getLeft());
} }
_fileNameDb.put(listFile, fileNames); fileNameDb.put(listFile, fileNames);
} }
final Map<String, String> fileDb = _fileNameDb.get(listFile); final Map<String, String> fileDb = fileNameDb.get(listFile);
_analyzeListedDir(root, targetDir, new _ListedAnalyzer() { analyzeListedDir(root, targetDir, new ListedAnalyzer() {
@Override public String map(final String filename) { return fileDb.containsKey(filename) ? fileDb.get(filename) : null; } @Override
@Override public OpType getOpType(final String filename) { return opType; } public String map(final String filename) {
return fileDb.containsKey(filename) ? fileDb.get(filename) : null;
}
@Override
public OpType getOpType(final String filename) {
return opType;
}
}); });
} }
private abstract class _ListedAnalyzer { private abstract class ListedAnalyzer {
abstract String map(String filename); abstract String map(String filename);
abstract OpType getOpType(String filename); abstract OpType getOpType(String filename);
@@ -621,37 +657,43 @@ public class ImportSourceAnalyzer {
boolean onDir(final File dir) { return false; } boolean onDir(final File dir) { return false; }
} }
private void _analyzeListedDir(final File root, final String targetDir, final _ListedAnalyzer listedAnalyzer) { private void analyzeListedDir(final File root, final String targetDir, final ListedAnalyzer listedAnalyzer) {
_analyzeDir(root, new _Analyzer() { analyzeDir(root, new Analyzer() {
@Override void onFile(final File file) { @Override
void onFile(final File file) {
final String filename = listedAnalyzer.map(file.getName()); final String filename = listedAnalyzer.map(file.getName());
if (null != filename) { if (null != filename) {
final File targetFile = new File(targetDir, filename); final File targetFile = new File(targetDir, filename);
if (!file.equals(targetFile)) { if (!file.equals(targetFile)) {
_cb.addOp(listedAnalyzer.getOpType(filename), file, targetFile); cb.addOp(listedAnalyzer.getOpType(filename), file, targetFile);
} }
} }
} }
@Override boolean onDir(final File dir) { return listedAnalyzer.onDir(dir); } @Override
boolean onDir(final File dir) {
return listedAnalyzer.onDir(dir);
}
}); });
} }
private int _countFiles(final File root) { private int countFiles(final File root) {
int count = 0; int count = 0;
for (final File file : root.listFiles()) { File[] files = root.listFiles();
if (_cb.checkCancel()) { return 0; } assert files != null;
for (final File file : files) {
if (cb.checkCancel()) { return 0; }
if (file.isFile()) { if (file.isFile()) {
++count; ++count;
} else if (file.isDirectory()) { } else if (file.isDirectory()) {
count += _countFiles(file); count += countFiles(file);
} }
} }
return count; return count;
} }
private static String _lcaseExt(final String filename) { private static String lcaseExt(final String filename) {
final int lastDotIdx = filename.lastIndexOf('.'); final int lastDotIdx = filename.lastIndexOf('.');
if (0 > lastDotIdx) { if (0 > lastDotIdx) {
return filename; return filename;

View File

@@ -110,7 +110,6 @@ public class CEditorDraftingProcess extends ACEditorBase<PaperCard, DeckGroup> {
this.showChoices(this.boosterDraft.nextChoice()); this.showChoices(this.boosterDraft.nextChoice());
} }
else { else {
this.boosterDraft.finishedDrafting();
this.saveDraft(); this.saveDraft();
} }
} }
@@ -138,7 +137,7 @@ public class CEditorDraftingProcess extends ACEditorBase<PaperCard, DeckGroup> {
* </p> * </p>
* *
* @param list * @param list
* a {@link forge.CardList} object. * a {@link ItemPool<PaperCard>} object.
*/ */
private void showChoices(final ItemPool<PaperCard> list) { private void showChoices(final ItemPool<PaperCard> list) {
int packNumber = ((BoosterDraft) boosterDraft).getCurrentBoosterIndex() + 1; int packNumber = ((BoosterDraft) boosterDraft).getCurrentBoosterIndex() + 1;
@@ -194,7 +193,7 @@ public class CEditorDraftingProcess extends ACEditorBase<PaperCard, DeckGroup> {
// Cancel button will be null; OK will return string. // Cancel button will be null; OK will return string.
// Must check for null value first, then string length. // Must check for null value first, then string length.
// Recurse, if either null or empty string. // Recurse, if either null or empty string.
if (s == null || s.length() == 0) { if (s == null || s.isEmpty()) {
saveDraft(); saveDraft();
return; return;
} }

View File

@@ -17,10 +17,7 @@
*/ */
package forge.screens.deckeditor.controllers; package forge.screens.deckeditor.controllers;
import java.util.Map.Entry;
import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList;
import forge.assets.FSkinProp; import forge.assets.FSkinProp;
import forge.card.MagicColor; import forge.card.MagicColor;
import forge.deck.Deck; import forge.deck.Deck;
@@ -48,6 +45,8 @@ import forge.toolbox.FSkin;
import forge.util.ItemPool; import forge.util.ItemPool;
import forge.util.MyRandom; import forge.util.MyRandom;
import java.util.Map.Entry;
/** /**
* Updates the deck editor UI as necessary draft selection mode. * Updates the deck editor UI as necessary draft selection mode.
* *
@@ -126,7 +125,6 @@ public class CEditorQuestDraftingProcess extends ACEditorBase<PaperCard, DeckGro
this.showChoices(this.boosterDraft.nextChoice()); this.showChoices(this.boosterDraft.nextChoice());
} }
else { else {
this.boosterDraft.finishedDrafting();
this.saveDraft(); this.saveDraft();
} }
} }
@@ -154,7 +152,7 @@ public class CEditorQuestDraftingProcess extends ACEditorBase<PaperCard, DeckGro
* </p> * </p>
* *
* @param list * @param list
* a {@link forge.CardList} object. * a {@link ItemPool<PaperCard>} object.
*/ */
private void showChoices(final ItemPool<PaperCard> list) { private void showChoices(final ItemPool<PaperCard> list) {
int packNumber = ((BoosterDraft) boosterDraft).getCurrentBoosterIndex() + 1; int packNumber = ((BoosterDraft) boosterDraft).getCurrentBoosterIndex() + 1;

View File

@@ -54,6 +54,7 @@ import java.util.Map.Entry;
* @author Forge * @author Forge
* @version $Id: CEditorDraftingProcess.java 24872 2014-02-17 07:35:47Z drdev $ * @version $Id: CEditorDraftingProcess.java 24872 2014-02-17 07:35:47Z drdev $
*/ */
@SuppressWarnings("FieldCanBeLocal")
public class CEditorWinstonProcess extends ACEditorBase<PaperCard, DeckGroup> { public class CEditorWinstonProcess extends ACEditorBase<PaperCard, DeckGroup> {
private IBoosterDraft boosterDraft; private IBoosterDraft boosterDraft;
@@ -202,7 +203,7 @@ public class CEditorWinstonProcess extends ACEditorBase<PaperCard, DeckGroup> {
// Cancel button will be null; OK will return string. // Cancel button will be null; OK will return string.
// Must check for null value first, then string length. // Must check for null value first, then string length.
// Recurse, if either null or empty string. // Recurse, if either null or empty string.
if (s == null || s.length() == 0) { if (s == null || s.isEmpty()) {
saveDraft(); saveDraft();
return; return;
} }
@@ -376,7 +377,6 @@ public class CEditorWinstonProcess extends ACEditorBase<PaperCard, DeckGroup> {
} }
} }
// If we get here, there's no choices left. Finish the draft and then save it // If we get here, there's no choices left. Finish the draft and then save it
this.boosterDraft.finishedDrafting();
this.saveDraft(); this.saveDraft();
} }

View File

@@ -1,16 +1,5 @@
package forge.screens.deckeditor.controllers; package forge.screens.deckeditor.controllers;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.TreeMap;
import forge.deck.Deck; import forge.deck.Deck;
import forge.item.PaperCard; import forge.item.PaperCard;
import forge.properties.ForgeConstants; import forge.properties.ForgeConstants;
@@ -20,6 +9,13 @@ import freemarker.template.DefaultObjectWrapper;
import freemarker.template.Template; import freemarker.template.Template;
import freemarker.template.TemplateException; import freemarker.template.TemplateException;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.*;
import java.util.Map.Entry;
public class DeckHtmlSerializer { public class DeckHtmlSerializer {
public static void writeDeckHtml(final Deck d, final File f) { public static void writeDeckHtml(final Deck d, final File f) {
try { try {
@@ -40,11 +36,9 @@ public class DeckHtmlSerializer {
* a {@link forge.deck.Deck} object. * a {@link forge.deck.Deck} object.
* @param out * @param out
* a {@link java.io.BufferedWriter} object. * a {@link java.io.BufferedWriter} object.
* @throws java.io.IOException
* if any.
*/ */
private static void writeDeckHtml(final Deck d, final BufferedWriter out) { private static void writeDeckHtml(final Deck d, final BufferedWriter out) {
Template temp = null; Template temp;
final int cardBorder = 0; final int cardBorder = 0;
final int height = 319; final int height = 319;
final int width = 222; final int width = 222;
@@ -68,19 +62,19 @@ public class DeckHtmlSerializer {
temp = cfg.getTemplate("proxy-template.ftl"); temp = cfg.getTemplate("proxy-template.ftl");
/* Create a data-model */ /* Create a data-model */
final Map<String, Object> root = new HashMap<String, Object>(); final Map<String, Object> root = new HashMap<>();
root.put("title", d.getName()); root.put("title", d.getName());
final List<String> list = new ArrayList<String>(); final List<String> list = new ArrayList<>();
for (final Entry<PaperCard, Integer> card : d.getMain()) { for (final Entry<PaperCard, Integer> card : d.getMain()) {
// System.out.println(card.getSets().get(card.getSets().size() - 1).URL); // System.out.println(card.getSets().get(card.getSets().size() - 1).URL);
for (int i = card.getValue().intValue(); i > 0; --i ) { for (int i = card.getValue(); i > 0; --i ) {
final PaperCard r = card.getKey(); final PaperCard r = card.getKey();
final String url = ForgeConstants.URL_PIC_DOWNLOAD + ImageUtil.getDownloadUrl(r, false); final String url = ForgeConstants.URL_PIC_DOWNLOAD + ImageUtil.getDownloadUrl(r, false);
list.add(url); list.add(url);
} }
} }
final Map<String, Integer> map = new TreeMap<String, Integer>(); final Map<String, Integer> map = new TreeMap<>();
for (final Entry<PaperCard, Integer> entry : d.getMain()) { for (final Entry<PaperCard, Integer> entry : d.getMain()) {
map.put(entry.getKey().getName(), entry.getValue()); map.put(entry.getKey().getName(), entry.getValue());
// System.out.println(entry.getValue() + " " + // System.out.println(entry.getValue() + " " +
@@ -97,9 +91,7 @@ public class DeckHtmlSerializer {
/* Merge data-model with template */ /* Merge data-model with template */
temp.process(root, out); temp.process(root, out);
out.flush(); out.flush();
} catch (final IOException e) { } catch (final IOException | TemplateException e) {
System.out.println(e.toString());
} catch (final TemplateException e) {
System.out.println(e.toString()); System.out.println(e.toString());
} }
} }

View File

@@ -1,18 +1,5 @@
package forge.screens.home.settings; package forge.screens.home.settings;
import java.awt.Desktop;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JCheckBox;
import javax.swing.SwingUtilities;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.Pair;
import forge.Singletons; import forge.Singletons;
import forge.UiCommand; import forge.UiCommand;
import forge.ai.AiProfileUtil; import forge.ai.AiProfileUtil;
@@ -31,6 +18,16 @@ import forge.toolbox.FComboBox;
import forge.toolbox.FComboBoxPanel; import forge.toolbox.FComboBoxPanel;
import forge.toolbox.FLabel; import forge.toolbox.FLabel;
import forge.toolbox.FOptionPane; import forge.toolbox.FOptionPane;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.Pair;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
/** /**
* Controls the preferences submenu in the home UI. * Controls the preferences submenu in the home UI.
@@ -46,7 +43,7 @@ public enum CSubmenuPreferences implements ICDoc {
private ForgePreferences prefs; private ForgePreferences prefs;
private boolean updating; private boolean updating;
private final List<Pair<JCheckBox, FPref>> lstControls = new ArrayList<Pair<JCheckBox,FPref>>(); private final List<Pair<JCheckBox, FPref>> lstControls = new ArrayList<>();
@Override @Override
public void register() { public void register() {
@@ -100,7 +97,6 @@ public enum CSubmenuPreferences implements ICDoc {
lstControls.add(Pair.of(view.getCbRemoveSmall(), FPref.DECKGEN_NOSMALL)); lstControls.add(Pair.of(view.getCbRemoveSmall(), FPref.DECKGEN_NOSMALL));
lstControls.add(Pair.of(view.getCbRemoveArtifacts(), FPref.DECKGEN_ARTIFACTS)); lstControls.add(Pair.of(view.getCbRemoveArtifacts(), FPref.DECKGEN_ARTIFACTS));
lstControls.add(Pair.of(view.getCbSingletons(), FPref.DECKGEN_SINGLETONS)); lstControls.add(Pair.of(view.getCbSingletons(), FPref.DECKGEN_SINGLETONS));
lstControls.add(Pair.of(view.getCbUploadDraft(), FPref.UI_UPLOAD_DRAFT));
lstControls.add(Pair.of(view.getCbEnableAICheats(), FPref.UI_ENABLE_AI_CHEATS)); lstControls.add(Pair.of(view.getCbEnableAICheats(), FPref.UI_ENABLE_AI_CHEATS));
lstControls.add(Pair.of(view.getCbDisplayFoil(), FPref.UI_OVERLAY_FOIL_EFFECT)); lstControls.add(Pair.of(view.getCbDisplayFoil(), FPref.UI_OVERLAY_FOIL_EFFECT));
lstControls.add(Pair.of(view.getCbRandomFoil(), FPref.UI_RANDOM_FOIL)); lstControls.add(Pair.of(view.getCbRandomFoil(), FPref.UI_RANDOM_FOIL));
@@ -285,7 +281,7 @@ public enum CSubmenuPreferences implements ICDoc {
private void initializeCloseActionComboBox() { private void initializeCloseActionComboBox() {
final FComboBoxPanel<CloseAction> panel = this.view.getCloseActionComboBoxPanel(); final FComboBoxPanel<CloseAction> panel = this.view.getCloseActionComboBoxPanel();
final FComboBox<CloseAction> comboBox = new FComboBox<CloseAction>(CloseAction.values()); final FComboBox<CloseAction> comboBox = new FComboBox<>(CloseAction.values());
comboBox.addItemListener(new ItemListener() { comboBox.addItemListener(new ItemListener() {
@Override public void itemStateChanged(final ItemEvent e) { @Override public void itemStateChanged(final ItemEvent e) {
Singletons.getControl().setCloseAction(comboBox.getSelectedItem()); Singletons.getControl().setCloseAction(comboBox.getSelectedItem());
@@ -303,7 +299,7 @@ public enum CSubmenuPreferences implements ICDoc {
} }
private <E> FComboBox<E> createComboBox(final E[] items, final ForgePreferences.FPref setting) { private <E> FComboBox<E> createComboBox(final E[] items, final ForgePreferences.FPref setting) {
final FComboBox<E> comboBox = new FComboBox<E>(items); final FComboBox<E> comboBox = new FComboBox<>(items);
addComboBoxListener(comboBox, setting); addComboBoxListener(comboBox, setting);
return comboBox; return comboBox;
} }

View File

@@ -1,27 +1,5 @@
package forge.screens.home.settings; package forge.screens.home.settings;
import java.awt.Color;
import java.awt.Font;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.ScrollPaneConstants;
import javax.swing.SwingConstants;
import net.miginfocom.swing.MigLayout;
import org.apache.commons.lang3.StringUtils;
import forge.control.FControl.CloseAction; import forge.control.FControl.CloseAction;
import forge.control.KeyboardShortcuts; import forge.control.KeyboardShortcuts;
import forge.control.KeyboardShortcuts.Shortcut; import forge.control.KeyboardShortcuts.Shortcut;
@@ -34,13 +12,20 @@ import forge.properties.ForgePreferences.FPref;
import forge.screens.home.EMenuGroup; import forge.screens.home.EMenuGroup;
import forge.screens.home.IVSubmenu; import forge.screens.home.IVSubmenu;
import forge.screens.home.VHomeUI; import forge.screens.home.VHomeUI;
import forge.toolbox.FCheckBox; import forge.toolbox.*;
import forge.toolbox.FComboBoxPanel;
import forge.toolbox.FLabel;
import forge.toolbox.FScrollPane;
import forge.toolbox.FSkin;
import forge.toolbox.FSkin.SkinnedLabel; import forge.toolbox.FSkin.SkinnedLabel;
import forge.toolbox.FSkin.SkinnedTextField; import forge.toolbox.FSkin.SkinnedTextField;
import net.miginfocom.swing.MigLayout;
import org.apache.commons.lang3.StringUtils;
import javax.swing.*;
import java.awt.*;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.*;
import java.util.List;
/** /**
* Assembles Swing components of preferences submenu singleton. * Assembles Swing components of preferences submenu singleton.
@@ -73,7 +58,6 @@ public enum VSubmenuPreferences implements IVSubmenu<CSubmenuPreferences> {
private final JCheckBox cbRemoveArtifacts = new OptionsCheckBox("Remove Artifacts"); private final JCheckBox cbRemoveArtifacts = new OptionsCheckBox("Remove Artifacts");
private final JCheckBox cbAnte = new OptionsCheckBox("Play for Ante"); private final JCheckBox cbAnte = new OptionsCheckBox("Play for Ante");
private final JCheckBox cbAnteMatchRarity = new OptionsCheckBox("Match Ante Rarity"); private final JCheckBox cbAnteMatchRarity = new OptionsCheckBox("Match Ante Rarity");
private final JCheckBox cbUploadDraft = new OptionsCheckBox("Upload Draft Picks");
private final JCheckBox cbEnableAICheats = new OptionsCheckBox("Allow AI Cheating"); private final JCheckBox cbEnableAICheats = new OptionsCheckBox("Allow AI Cheating");
private final JCheckBox cbManaBurn = new OptionsCheckBox("Mana Burn"); private final JCheckBox cbManaBurn = new OptionsCheckBox("Mana Burn");
private final JCheckBox cbManaLostPrompt = new OptionsCheckBox("Prompt Mana Pool Emptying"); private final JCheckBox cbManaLostPrompt = new OptionsCheckBox("Prompt Mana Pool Emptying");
@@ -99,17 +83,17 @@ public enum VSubmenuPreferences implements IVSubmenu<CSubmenuPreferences> {
private final JCheckBox cbTokensInSeparateRow = new OptionsCheckBox("Display Tokens in a Separate Row"); private final JCheckBox cbTokensInSeparateRow = new OptionsCheckBox("Display Tokens in a Separate Row");
private final JCheckBox cbStackCreatures = new OptionsCheckBox("Stack Creatures"); private final JCheckBox cbStackCreatures = new OptionsCheckBox("Stack Creatures");
private final Map<FPref, KeyboardShortcutField> shortcutFields = new HashMap<FPref, KeyboardShortcutField>(); private final Map<FPref, KeyboardShortcutField> shortcutFields = new HashMap<>();
// ComboBox items are added in CSubmenuPreferences since this is just the View. // ComboBox items are added in CSubmenuPreferences since this is just the View.
private final FComboBoxPanel<GameLogEntryType> cbpGameLogEntryType = new FComboBoxPanel<GameLogEntryType>("Game Log Verbosity:"); private final FComboBoxPanel<GameLogEntryType> cbpGameLogEntryType = new FComboBoxPanel<>("Game Log Verbosity:");
private final FComboBoxPanel<CloseAction> cbpCloseAction = new FComboBoxPanel<CloseAction>("Close Action:"); private final FComboBoxPanel<CloseAction> cbpCloseAction = new FComboBoxPanel<>("Close Action:");
private final FComboBoxPanel<String> cbpAiProfiles = new FComboBoxPanel<String>("AI Personality:"); private final FComboBoxPanel<String> cbpAiProfiles = new FComboBoxPanel<>("AI Personality:");
/** /**
* Constructor. * Constructor.
*/ */
private VSubmenuPreferences() { VSubmenuPreferences() {
pnlPrefs.setOpaque(false); pnlPrefs.setOpaque(false);
pnlPrefs.setLayout(new MigLayout("insets 0, gap 0, wrap 2")); pnlPrefs.setLayout(new MigLayout("insets 0, gap 0, wrap 2"));
@@ -153,9 +137,6 @@ public enum VSubmenuPreferences implements IVSubmenu<CSubmenuPreferences> {
pnlPrefs.add(cbAnteMatchRarity, regularConstraints); pnlPrefs.add(cbAnteMatchRarity, regularConstraints);
pnlPrefs.add(new NoteLabel("Attempts to make antes the same rarity for all players."), regularConstraints); pnlPrefs.add(new NoteLabel("Attempts to make antes the same rarity for all players."), regularConstraints);
pnlPrefs.add(cbUploadDraft, regularConstraints);
pnlPrefs.add(new NoteLabel("Sends draft picks to Forge servers for analysis, to improve draft AI."), regularConstraints);
pnlPrefs.add(cbEnableAICheats, regularConstraints); pnlPrefs.add(cbEnableAICheats, regularConstraints);
pnlPrefs.add(new NoteLabel("Allow the AI to cheat to gain advantage (for personalities that have cheat shuffling options set)."), regularConstraints); pnlPrefs.add(new NoteLabel("Allow the AI to cheat to gain advantage (for personalities that have cheat shuffling options set)."), regularConstraints);
@@ -317,8 +298,8 @@ public enum VSubmenuPreferences implements IVSubmenu<CSubmenuPreferences> {
/** Consolidates checkbox styling in one place. */ /** Consolidates checkbox styling in one place. */
@SuppressWarnings("serial") @SuppressWarnings("serial")
private class OptionsCheckBox extends FCheckBox { private final class OptionsCheckBox extends FCheckBox {
public OptionsCheckBox(final String txt0) { private OptionsCheckBox(final String txt0) {
super(txt0); super(txt0);
this.setFont(FSkin.getBoldFont(12)); this.setFont(FSkin.getBoldFont(12));
} }
@@ -326,8 +307,8 @@ public enum VSubmenuPreferences implements IVSubmenu<CSubmenuPreferences> {
/** Consolidates section title label styling in one place. */ /** Consolidates section title label styling in one place. */
@SuppressWarnings("serial") @SuppressWarnings("serial")
private class SectionLabel extends SkinnedLabel { private final class SectionLabel extends SkinnedLabel {
public SectionLabel(final String txt0) { private SectionLabel(final String txt0) {
super(txt0); super(txt0);
this.setBorder(new FSkin.MatteSkinBorder(0, 0, 1, 0, FSkin.getColor(FSkin.Colors.CLR_BORDERS))); this.setBorder(new FSkin.MatteSkinBorder(0, 0, 1, 0, FSkin.getColor(FSkin.Colors.CLR_BORDERS)));
setHorizontalAlignment(SwingConstants.CENTER); setHorizontalAlignment(SwingConstants.CENTER);
@@ -338,8 +319,8 @@ public enum VSubmenuPreferences implements IVSubmenu<CSubmenuPreferences> {
/** Consolidates notation label styling in one place. */ /** Consolidates notation label styling in one place. */
@SuppressWarnings("serial") @SuppressWarnings("serial")
private class NoteLabel extends SkinnedLabel { private final class NoteLabel extends SkinnedLabel {
public NoteLabel(final String txt0) { private NoteLabel(final String txt0) {
super(txt0); super(txt0);
this.setFont(FSkin.getItalicFont(12)); this.setFont(FSkin.getItalicFont(12));
this.setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); this.setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT));
@@ -418,8 +399,8 @@ public enum VSubmenuPreferences implements IVSubmenu<CSubmenuPreferences> {
this.codeString = str0.trim(); this.codeString = str0.trim();
final List<String> codes = new ArrayList<String>(Arrays.asList(this.codeString.split(" "))); final List<String> codes = new ArrayList<>(Arrays.asList(this.codeString.split(" ")));
final List<String> displayText = new ArrayList<String>(); final List<String> displayText = new ArrayList<>();
for (final String s : codes) { for (final String s : codes) {
if (!s.isEmpty()) { if (!s.isEmpty()) {
@@ -451,11 +432,6 @@ public enum VSubmenuPreferences implements IVSubmenu<CSubmenuPreferences> {
return cbRemoveArtifacts; return cbRemoveArtifacts;
} }
/** @return {@link javax.swing.JCheckBox} */
public JCheckBox getCbUploadDraft() {
return cbUploadDraft;
}
/** @return {@link javax.swing.JCheckBox} */ /** @return {@link javax.swing.JCheckBox} */
public JCheckBox getCbEnableAICheats() { public JCheckBox getCbEnableAICheats() {
return cbEnableAICheats; return cbEnableAICheats;

View File

@@ -96,16 +96,6 @@ public class BoosterDraftTest implements IBoosterDraft {
return null; return null;
} }
/*
* (non-Javadoc)
*
* @see forge.game.limited.IBoosterDraft#finishedDrafting()
*/
@Override
public void finishedDrafting() {
}
@Override @Override
public boolean isPileDraft() { public boolean isPileDraft() {
return false; return false;

View File

@@ -1,27 +1,14 @@
package forge.deck; package forge.deck;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import org.apache.commons.lang3.StringUtils;
import com.badlogic.gdx.graphics.g2d.BitmapFont.HAlignment; import com.badlogic.gdx.graphics.g2d.BitmapFont.HAlignment;
import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.math.Vector2;
import com.google.common.base.Predicates; import com.google.common.base.Predicates;
import com.google.common.base.Supplier; import com.google.common.base.Supplier;
import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList;
import forge.Forge; import forge.Forge;
import forge.Graphics; import forge.Graphics;
import forge.StaticData; import forge.StaticData;
import forge.assets.FImage; import forge.assets.*;
import forge.assets.FSkin;
import forge.assets.FSkinFont;
import forge.assets.FSkinImage;
import forge.assets.FTextureRegionImage;
import forge.card.CardDb; import forge.card.CardDb;
import forge.card.CardEdition; import forge.card.CardEdition;
import forge.card.CardPreferences; import forge.card.CardPreferences;
@@ -32,8 +19,8 @@ import forge.itemmanager.CardManager;
import forge.itemmanager.ColumnDef; import forge.itemmanager.ColumnDef;
import forge.itemmanager.ItemColumn; import forge.itemmanager.ItemColumn;
import forge.itemmanager.ItemManager.ContextMenuBuilder; import forge.itemmanager.ItemManager.ContextMenuBuilder;
import forge.itemmanager.filters.ItemFilter;
import forge.itemmanager.ItemManagerConfig; import forge.itemmanager.ItemManagerConfig;
import forge.itemmanager.filters.ItemFilter;
import forge.limited.BoosterDraft; import forge.limited.BoosterDraft;
import forge.menu.FCheckBoxMenuItem; import forge.menu.FCheckBoxMenuItem;
import forge.menu.FDropDownMenu; import forge.menu.FDropDownMenu;
@@ -45,17 +32,20 @@ import forge.properties.ForgePreferences.FPref;
import forge.quest.data.QuestPreferences.QPref; import forge.quest.data.QuestPreferences.QPref;
import forge.screens.FScreen; import forge.screens.FScreen;
import forge.screens.TabPageScreen; import forge.screens.TabPageScreen;
import forge.toolbox.FContainer; import forge.toolbox.*;
import forge.toolbox.FEvent;
import forge.toolbox.FEvent.FEventHandler; import forge.toolbox.FEvent.FEventHandler;
import forge.toolbox.FEvent.FEventType; import forge.toolbox.FEvent.FEventType;
import forge.toolbox.FLabel;
import forge.toolbox.FOptionPane;
import forge.toolbox.GuiChoose;
import forge.util.Callback; import forge.util.Callback;
import forge.util.ItemPool; import forge.util.ItemPool;
import forge.util.Utils; import forge.util.Utils;
import forge.util.storage.IStorage; import forge.util.storage.IStorage;
import org.apache.commons.lang3.StringUtils;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
public class FDeckEditor extends TabPageScreen<FDeckEditor> { public class FDeckEditor extends TabPageScreen<FDeckEditor> {
public static FSkinImage MAIN_DECK_ICON = FSkinImage.DECKLIST; public static FSkinImage MAIN_DECK_ICON = FSkinImage.DECKLIST;
@@ -1254,7 +1244,6 @@ public class FDeckEditor extends TabPageScreen<FDeckEditor> {
} }
else { else {
hideTab(); //hide this tab page when finished drafting hideTab(); //hide this tab page when finished drafting
draft.finishedDrafting();
parentScreen.save(null); parentScreen.save(null);
} }
} }

View File

@@ -1,10 +1,6 @@
package forge.screens.settings; package forge.screens.settings;
import java.util.ArrayList;
import java.util.List;
import com.badlogic.gdx.graphics.g2d.BitmapFont.HAlignment; import com.badlogic.gdx.graphics.g2d.BitmapFont.HAlignment;
import forge.Forge; import forge.Forge;
import forge.Graphics; import forge.Graphics;
import forge.ai.AiProfileUtil; import forge.ai.AiProfileUtil;
@@ -26,6 +22,9 @@ import forge.toolbox.FGroupList;
import forge.toolbox.FList; import forge.toolbox.FList;
import forge.util.Utils; import forge.util.Utils;
import java.util.ArrayList;
import java.util.List;
public class SettingsPage extends TabPage<SettingsScreen> { public class SettingsPage extends TabPage<SettingsScreen> {
private final FGroupList<Setting> lstSettings = add(new FGroupList<Setting>()); private final FGroupList<Setting> lstSettings = add(new FGroupList<Setting>());
@@ -71,10 +70,6 @@ public class SettingsPage extends TabPage<SettingsScreen> {
"Hot Seat Mode", "Hot Seat Mode",
"When starting a game with 2 human players, use single prompt to control both players."), "When starting a game with 2 human players, use single prompt to control both players."),
1); 1);
lstSettings.addItem(new BooleanSetting(FPref.UI_UPLOAD_DRAFT,
"Upload Draft Picks",
"Sends draft picks to Forge servers for analysis, to improve draft AI."),
1);
lstSettings.addItem(new BooleanSetting(FPref.UI_ENABLE_AI_CHEATS, lstSettings.addItem(new BooleanSetting(FPref.UI_ENABLE_AI_CHEATS,
"Allow AI Cheating", "Allow AI Cheating",
"Allow the AI to cheat to gain advantage (for personalities that have cheat shuffling options set)."), "Allow the AI to cheat to gain advantage (for personalities that have cheat shuffling options set)."),

View File

@@ -5,5 +5,5 @@ T:Mode$ SetInMotion | ValidCard$ Card.Self | Execute$ DarkEffect | TriggerZones$
SVar:DarkEffect:AB$ Effect | Cost$ 0 | Name$ Dark Power Scheme | Duration$ UntilYourNextTurn | Triggers$ DarkPower | SVars$ DarkMana SVar:DarkEffect:AB$ Effect | Cost$ 0 | Name$ Dark Power Scheme | Duration$ UntilYourNextTurn | Triggers$ DarkPower | SVars$ DarkMana
SVar:DarkPower:Mode$ TapsForMana | ValidCard$ Land | Execute$ DarkMana | TriggerZones$ Command | Static$ True | TriggerDescription$ Whenever a player taps a land for mana, that player adds one mana to his or her mana pool of any type that land produced. SVar:DarkPower:Mode$ TapsForMana | ValidCard$ Land | Execute$ DarkMana | TriggerZones$ Command | Static$ True | TriggerDescription$ Whenever a player taps a land for mana, that player adds one mana to his or her mana pool of any type that land produced.
SVar:DarkMana:AB$ ManaReflected | Cost$ 0 | ColorOrType$ Type | Valid$ Defined.Triggered | ReflectProperty$ Produced | Defined$ TriggeredPlayer SVar:DarkMana:AB$ ManaReflected | Cost$ 0 | ColorOrType$ Type | Valid$ Defined.Triggered | ReflectProperty$ Produced | Defined$ TriggeredPlayer
SVar:Picture:http://www.cardforge.org/fpics/lq_schemes/a_display_of_my_dark_power.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/ARC/A Display of My Dark Power.full.jpg
Oracle:When you set this scheme in motion, until your next turn, whenever a player taps a land for mana, that player adds one mana to his or her mana pool of any type that land produced. Oracle:When you set this scheme in motion, until your next turn, whenever a player taps a land for mana, that player adds one mana to his or her mana pool of any type that land produced.

View File

@@ -4,5 +4,5 @@ Types:Vanguard
HandLifeModifier:+1/+7 HandLifeModifier:+1/+7
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | TriggerZones$ Command | ValidCard$ Creature.YouCtrl | Execute$ PumpRandom | TriggerDescription$ Whenever a creature enters the battlefield under your control, it gains two abilities chosen at random from flying, first strike, trample, haste, protection from black, protection from red, and vigilance. T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | TriggerZones$ Command | ValidCard$ Creature.YouCtrl | Execute$ PumpRandom | TriggerDescription$ Whenever a creature enters the battlefield under your control, it gains two abilities chosen at random from flying, first strike, trample, haste, protection from black, protection from red, and vigilance.
SVar:PumpRandom:AB$ Pump | Cost$ 0 | Defined$ TriggeredCard | Permanent$ True | KW$ Flying & First Strike & Trample & Haste & Protection from black & Protection from red & Vigilance | RandomKeyword$ True | RandomKWNum$ 2 SVar:PumpRandom:AB$ Pump | Cost$ 0 | Defined$ TriggeredCard | Permanent$ True | KW$ Flying & First Strike & Trample & Haste & Protection from black & Protection from red & Vigilance | RandomKeyword$ True | RandomKWNum$ 2
SVar:Picture:http://www.cardforge.org/fpics/vgd-lq/akroma_angel_of_wrath_avatar.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/VAN/Akroma, Angel of Wrath Avatar.full.jpg
Oracle:Hand +1, life +7\nWhenever a creature enters the battlefield under your control, it gains two abilities chosen at random from flying, first strike, trample, haste, protection from black, protection from red, and vigilance. Oracle:Hand +1, life +7\nWhenever a creature enters the battlefield under your control, it gains two abilities chosen at random from flying, first strike, trample, haste, protection from black, protection from red, and vigilance.

View File

@@ -3,5 +3,5 @@ ManaCost:no cost
Types:Scheme Types:Scheme
T:Mode$ SetInMotion | ValidCard$ Card.Self | Execute$ GoodTimes | TriggerZones$ Command | TriggerDescription$ When you set this scheme in motion, take an extra turn after this one. Schemes can't be set in motion that turn. T:Mode$ SetInMotion | ValidCard$ Card.Self | Execute$ GoodTimes | TriggerZones$ Command | TriggerDescription$ When you set this scheme in motion, take an extra turn after this one. Schemes can't be set in motion that turn.
SVar:GoodTimes:AB$ AddTurn | Cost$ 0 | NumTurns$ 1 | NoSchemes$ True SVar:GoodTimes:AB$ AddTurn | Cost$ 0 | NumTurns$ 1 | NoSchemes$ True
SVar:Picture:http://www.cardforge.org/fpics/lq_schemes/all_in_good_time.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/ARC/All in Good Time.full.jpg
Oracle:When you set this scheme in motion, take an extra turn after this one. Schemes can't be set in motion that turn. Oracle:When you set this scheme in motion, take an extra turn after this one. Schemes can't be set in motion that turn.

View File

@@ -5,5 +5,5 @@ T:Mode$ SetInMotion | ValidCard$ Card.Self | Execute$ Ignite | TriggerZones$ Com
SVar:Ignite:AB$ Destroy | Cost$ 0 | TargetMin$ 0 | TargetMax$ 1 | ValidTgts$ Artifact | TgtPrompt$ Select target artifact to destroy | SubAbility$ Burn SVar:Ignite:AB$ Destroy | Cost$ 0 | TargetMin$ 0 | TargetMax$ 1 | ValidTgts$ Artifact | TgtPrompt$ Select target artifact to destroy | SubAbility$ Burn
SVar:Burn:DB$ Destroy | TargetMin$ 0 | TargetMax$ 1 | ValidTgts$ Enchantment | TgtPrompt$ Select target enchantment to destroy | SubAbility$ Smolder SVar:Burn:DB$ Destroy | TargetMin$ 0 | TargetMax$ 1 | ValidTgts$ Enchantment | TgtPrompt$ Select target enchantment to destroy | SubAbility$ Smolder
SVar:Smolder:DB$ Destroy | TargetMin$ 0 | TargetMax$ 1 | ValidTgts$ Land.nonBasic | TgtPrompt$ Select target nonbasic land to destroy SVar:Smolder:DB$ Destroy | TargetMin$ 0 | TargetMax$ 1 | ValidTgts$ Land.nonBasic | TgtPrompt$ Select target nonbasic land to destroy
SVar:Picture:http://www.cardforge.org/fpics/lq_schemes/all_shall_smolder_in_my_wake.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/ARC/All Shall Smolder in My Wake.full.jpg
Oracle:When you set this scheme in motion, destroy up to one target artifact, up to one target enchantment, and up to one target nonbasic land. Oracle:When you set this scheme in motion, destroy up to one target artifact, up to one target enchantment, and up to one target nonbasic land.

View File

@@ -8,5 +8,5 @@ SVar:MoltenRealmCombat:Event$ DamageDone | ActiveZones$ Command | ValidSource$ C
SVar:DmgTimes2:AB$ DealDamage | Cost$ 0 | Defined$ ReplacedTarget | DamageSource$ ReplacedSource | NumDmg$ MoltenX | References$ MoltenX SVar:DmgTimes2:AB$ DealDamage | Cost$ 0 | Defined$ ReplacedTarget | DamageSource$ ReplacedSource | NumDmg$ MoltenX | References$ MoltenX
SVar:DmgTimes2Combat:AB$ DealDamage | Cost$ 0 | CombatDamage$ True | Defined$ ReplacedTarget | DamageSource$ ReplacedSource | NumDmg$ MoltenX | References$ MoltenX SVar:DmgTimes2Combat:AB$ DealDamage | Cost$ 0 | CombatDamage$ True | Defined$ ReplacedTarget | DamageSource$ ReplacedSource | NumDmg$ MoltenX | References$ MoltenX
SVar:MoltenX:ReplaceCount$DamageAmount/Twice SVar:MoltenX:ReplaceCount$DamageAmount/Twice
SVar:Picture:http://www.cardforge.org/fpics/lq_schemes/approach_my_molten_realm.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/ARC/Approach My Molten Realm.full.jpg
Oracle:When you set this scheme in motion, until your next turn, if a source would deal damage, it deals double that damage instead. Oracle:When you set this scheme in motion, until your next turn, if a source would deal damage, it deals double that damage instead.

View File

@@ -5,5 +5,5 @@ HandLifeModifier:+1/-3
A:AB$ Draw | ActivationZone$ Command | Announce$ X | Cost$ XCantBe0 X Return<1/Creature.cmcEQX/creature you control with converted mana cost X> | NumCards$ Y | References$ X,Y | SpellDescription$ Draw a number of cards chosen at random between 0 and X. X can't be 0. | StackDescription$ SpellDescription A:AB$ Draw | ActivationZone$ Command | Announce$ X | Cost$ XCantBe0 X Return<1/Creature.cmcEQX/creature you control with converted mana cost X> | NumCards$ Y | References$ X,Y | SpellDescription$ Draw a number of cards chosen at random between 0 and X. X can't be 0. | StackDescription$ SpellDescription
SVar:X:Count$xPaid SVar:X:Count$xPaid
SVar:Y:Count$Random.0.X SVar:Y:Count$Random.0.X
SVar:Picture:http://www.cardforge.org/fpics/vgd-lq/arcanis_the_omnipotent_avatar.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/VAN/Arcanis, the Omnipotent Avatar.full.jpg
Oracle:Hand +1, life -3\n{X}, Return a creature you control with converted mana cost X to its owner's hand: Draw a number of cards chosen at random between 0 and X. X can't be 0. Oracle:Hand +1, life -3\n{X}, Return a creature you control with converted mana cost X to its owner's hand: Draw a number of cards chosen at random between 0 and X. X can't be 0.

View File

@@ -6,5 +6,5 @@ T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Command | Execu
SVar:BuildCounter:AB$ PutCounter | Cost$ 0 | CounterType$ P1P1 | CounterNum$ 1 | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control SVar:BuildCounter:AB$ PutCounter | Cost$ 0 | CounterType$ P1P1 | CounterNum$ 1 | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Command | Execute$ ChargeCounter | OptionalDecider$ You | TriggerDescription$ At the beginning of your upkeep, you may put a charge counter on target permanent you control. T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Command | Execute$ ChargeCounter | OptionalDecider$ You | TriggerDescription$ At the beginning of your upkeep, you may put a charge counter on target permanent you control.
SVar:ChargeCounter:AB$ PutCounter | Cost$ 0 | CounterType$ CHARGE | CounterNum$ 1 | ValidTgts$ Permanent.YouCtrl | TgtPrompt$ Select target permanent you control SVar:ChargeCounter:AB$ PutCounter | Cost$ 0 | CounterType$ CHARGE | CounterNum$ 1 | ValidTgts$ Permanent.YouCtrl | TgtPrompt$ Select target permanent you control
SVar:Picture:http://www.cardforge.org/fpics/vgd-lq/arcbound_overseer_avatar.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/VAN/Arcbound Overseer Avatar.full.jpg
Oracle:Hand +0, life +3\nAt the beginning of your upkeep, you may put a +1/+1 counter on target creature you control.\nAt the beginning of your upkeep, you may put a charge counter on target permanent you control. Oracle:Hand +0, life +3\nAt the beginning of your upkeep, you may put a +1/+1 counter on target creature you control.\nAt the beginning of your upkeep, you may put a charge counter on target permanent you control.

View File

@@ -3,5 +3,5 @@ ManaCost:no cost
Types:Vanguard Types:Vanguard
HandLifeModifier:+1/-3 HandLifeModifier:+1/-3
A:AB$ DestroyAll | ActivationZone$ Command | Cost$ 5 | ValidCards$ Permanent.nonLand | PlayerTurn$ True | GameActivationLimit$ 1 | SpellDescription$ Destroy all nonland permanents. Activate this ability only once and only during your turn. A:AB$ DestroyAll | ActivationZone$ Command | Cost$ 5 | ValidCards$ Permanent.nonLand | PlayerTurn$ True | GameActivationLimit$ 1 | SpellDescription$ Destroy all nonland permanents. Activate this ability only once and only during your turn.
SVar:Picture:http://www.cardforge.org/fpics/vgd-lq/ashling_the_extinguisher_avatar.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/VAN/Ashling, the Extinguisher Avatar.full.jpg
Oracle:Hand +1, life -3\n{5}: Destroy all nonland permanents. Activate this ability only once and only during your turn. Oracle:Hand +1, life -3\n{5}: Destroy all nonland permanents. Activate this ability only once and only during your turn.

View File

@@ -3,5 +3,5 @@ ManaCost:no cost
Types:Vanguard Types:Vanguard
HandLifeModifier:-1/+6 HandLifeModifier:-1/+6
A:AB$ DamageAll | ActivationZone$ Command | Cost$ 2 | NumDmg$ 1 | ValidCards$ Creature | ValidPlayers$ Each | ValidDescription$ each creature and each player. | SpellDescription$ CARDNAME deals 1 damage to each creature and each player. A:AB$ DamageAll | ActivationZone$ Command | Cost$ 2 | NumDmg$ 1 | ValidCards$ Creature | ValidPlayers$ Each | ValidDescription$ each creature and each player. | SpellDescription$ CARDNAME deals 1 damage to each creature and each player.
SVar:Picture:http://www.cardforge.org/fpics/vgd-lq/ashling_the_pilgrim_avatar.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/VAN/Ashling the Pilgrim Avatar.full.jpg
Oracle:Hand -1, life +6\n{2}: Ashling the Pilgrim Avatar deals 1 damage to each creature and each player. Oracle:Hand -1, life +6\n{2}: Ashling the Pilgrim Avatar deals 1 damage to each creature and each player.

View File

@@ -4,5 +4,5 @@ Types:Vanguard
HandLifeModifier:+1/-8 HandLifeModifier:+1/-8
T:Mode$ DamageDone | ValidSource$ Creature | ValidTarget$ You | Execute$ TrigDestroy | TriggerZones$ Command | TriggerDescription$ Whenever a creature deals damage to you, destroy it. T:Mode$ DamageDone | ValidSource$ Creature | ValidTarget$ You | Execute$ TrigDestroy | TriggerZones$ Command | TriggerDescription$ Whenever a creature deals damage to you, destroy it.
SVar:TrigDestroy:AB$ Destroy | Cost$ 0 | Defined$ TriggeredSource SVar:TrigDestroy:AB$ Destroy | Cost$ 0 | Defined$ TriggeredSource
SVar:Picture:http://www.cardforge.org/fpics/vgd-lq/ashnod.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/VAN/Ashnod.full.jpg
Oracle:Hand +1, life -8\nWhenever a creature deals damage to you, destroy it. Oracle:Hand +1, life -8\nWhenever a creature deals damage to you, destroy it.

View File

@@ -4,5 +4,5 @@ Types:Vanguard
HandLifeModifier:+0/+6 HandLifeModifier:+0/+6
A:AB$ ChangeZone | ActivationZone$ Command | Cost$ Sac<1/Permanent> | ValidTgts$ Creature | TgtPrompt$ Select target Creature | Origin$ Battlefield | Destination$ Hand | SpellDescription$ Return target creature to its owner's hand. A:AB$ ChangeZone | ActivationZone$ Command | Cost$ Sac<1/Permanent> | ValidTgts$ Creature | TgtPrompt$ Select target Creature | Origin$ Battlefield | Destination$ Hand | SpellDescription$ Return target creature to its owner's hand.
SVar:RemAIDeck:True SVar:RemAIDeck:True
SVar:Picture:http://www.cardforge.org/fpics/vgd-lq/barrin.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/VAN/Barrin.full.jpg
Oracle:Hand +0, life +6\nSacrifice a permanent: Return target creature to its owner's hand. Oracle:Hand +0, life +6\nSacrifice a permanent: Return target creature to its owner's hand.

View File

@@ -3,5 +3,5 @@ ManaCost:no cost
Types:Scheme Types:Scheme
T:Mode$ SetInMotion | ValidCard$ Card.Self | Execute$ DarkEffect | TriggerZones$ Command | TriggerDescription$ When you set this scheme in motion, destroy all nonland permanents target opponent controls. T:Mode$ SetInMotion | ValidCard$ Card.Self | Execute$ DarkEffect | TriggerZones$ Command | TriggerDescription$ When you set this scheme in motion, destroy all nonland permanents target opponent controls.
SVar:DarkEffect:AB$ DestroyAll | Cost$ 0 | ValidTgts$ Opponent | TgtPrompt$ Select target opponent | ValidCards$ Permanent.nonLand SVar:DarkEffect:AB$ DestroyAll | Cost$ 0 | ValidTgts$ Opponent | TgtPrompt$ Select target opponent | ValidCards$ Permanent.nonLand
SVar:Picture:http://www.cardforge.org/fpics/lq_schemes/behold_the_power_of_destruction.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/ARC/Behold the Power of Destruction.full.jpg
Oracle:When you set this scheme in motion, destroy all nonland permanents target opponent controls. Oracle:When you set this scheme in motion, destroy all nonland permanents target opponent controls.

View File

@@ -4,5 +4,5 @@ Types:Vanguard
HandLifeModifier:+0/-3 HandLifeModifier:+0/-3
S:Mode$ Continuous | EffectZone$ Command | AffectedZone$ Battlefield | Affected$ Land.YouCtrl | AddAbility$ AnyMana | Description$ Lands you control have "{T}: Add one mana of any color to your mana pool." S:Mode$ Continuous | EffectZone$ Command | AffectedZone$ Battlefield | Affected$ Land.YouCtrl | AddAbility$ AnyMana | Description$ Lands you control have "{T}: Add one mana of any color to your mana pool."
SVar:AnyMana:AB$ Mana | Cost$ T | Produced$ Any | Amount$ 1 | SpellDescription$ Add one mana of any color to your mana pool. SVar:AnyMana:AB$ Mana | Cost$ T | Produced$ Any | Amount$ 1 | SpellDescription$ Add one mana of any color to your mana pool.
SVar:Picture:http://www.cardforge.org/fpics/vgd-lq/birds_of_paradise_avatar.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/VAN/Birds of Paradise Avatar1.full.jpg
Oracle:Hand +0, life -3\nLands you control have "{T}: Add one mana of any color to your mana pool." Oracle:Hand +0, life -3\nLands you control have "{T}: Add one mana of any color to your mana pool."

View File

@@ -4,6 +4,6 @@ Types:Vanguard
HandLifeModifier:+0/-2 HandLifeModifier:+0/-2
A:AB$ DealDamage | ActivationZone$ Command | Announce$ X | Cost$ X Sac<1/Artifact.cmcEQX/artifact with converted mana cost X> | ValidTgts$ Creature,Player | TgtPrompt$ Select target creature or player | NumDmg$ X | References$ X | SpellDescription$ CARDNAME deals X damage to target creature or player. A:AB$ DealDamage | ActivationZone$ Command | Announce$ X | Cost$ X Sac<1/Artifact.cmcEQX/artifact with converted mana cost X> | ValidTgts$ Creature,Player | TgtPrompt$ Select target creature or player | NumDmg$ X | References$ X | SpellDescription$ CARDNAME deals X damage to target creature or player.
SVar:X:Count$xPaid SVar:X:Count$xPaid
SVar:Picture:http://www.cardforge.org/fpics/vgd-lq/bosh_iron_golem_avatar.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/VAN/Bosh, Iron Golem Avatar.full.jpg
SVar:RemAIDeck:True SVar:RemAIDeck:True
Oracle:Hand +0, life -2\n{X}, Sacrifice an artifact with converted mana cost X: Bosh, Iron Golem Avatar deals X damage to target creature or player. Oracle:Hand +0, life -2\n{X}, Sacrifice an artifact with converted mana cost X: Bosh, Iron Golem Avatar deals X damage to target creature or player.

View File

@@ -5,5 +5,5 @@ HandLifeModifier:+0/+3
A:AB$ ChangeZone | ActivationZone$ Command | Cost$ 2 | Origin$ Hand | Destination$ Battlefield | ChangeType$ Land | DefinedPlayer$ Player | ChangeNum$ 1 | Tapped$ True | SpellDescription$ Each player may put a land card from his or her hand onto the battlefield tapped. A:AB$ ChangeZone | ActivationZone$ Command | Cost$ 2 | Origin$ Hand | Destination$ Battlefield | ChangeType$ Land | DefinedPlayer$ Player | ChangeNum$ 1 | Tapped$ True | SpellDescription$ Each player may put a land card from his or her hand onto the battlefield tapped.
A:AB$ ChangeZone | ActivationZone$ Command | Cost$ 3 | Origin$ Hand | Destination$ Battlefield | ChangeType$ Artifact.nonCreature | DefinedPlayer$ Player | ChangeNum$ 1 | SpellDescription$ Each player may put a noncreature artifact card from his or her hand onto the battlefield. A:AB$ ChangeZone | ActivationZone$ Command | Cost$ 3 | Origin$ Hand | Destination$ Battlefield | ChangeType$ Artifact.nonCreature | DefinedPlayer$ Player | ChangeNum$ 1 | SpellDescription$ Each player may put a noncreature artifact card from his or her hand onto the battlefield.
A:AB$ ChangeZone | ActivationZone$ Command | Cost$ 4 | Origin$ Hand | Destination$ Battlefield | ChangeType$ Creature | DefinedPlayer$ Player | ChangeNum$ 1 | SorcerySpeed$ True | SpellDescription$ Each player may put a creature card from his or her hand onto the battlefield. Activate this ability only any time you could cast a sorcery. A:AB$ ChangeZone | ActivationZone$ Command | Cost$ 4 | Origin$ Hand | Destination$ Battlefield | ChangeType$ Creature | DefinedPlayer$ Player | ChangeNum$ 1 | SorcerySpeed$ True | SpellDescription$ Each player may put a creature card from his or her hand onto the battlefield. Activate this ability only any time you could cast a sorcery.
SVar:Picture:http://www.cardforge.org/fpics/vgd-lq/braids_conjurer_adept_avatar.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/VAN/Braids, Conjurer Adept Avatar.full.jpg
Oracle:Hand +0, life +3\n{2}: Each player may put a land card from his or her hand onto the battlefield tapped.\n{3}: Each player may put a noncreature artifact card from his or her hand onto the battlefield.\n{4}: Each player may put a creature card from his or her hand onto the battlefield. Activate this ability only any time you could cast a sorcery. Oracle:Hand +0, life +3\n{2}: Each player may put a land card from his or her hand onto the battlefield tapped.\n{3}: Each player may put a noncreature artifact card from his or her hand onto the battlefield.\n{4}: Each player may put a creature card from his or her hand onto the battlefield. Activate this ability only any time you could cast a sorcery.

View File

@@ -6,5 +6,5 @@ SVar:ChooseChampion:AB$ ChoosePlayer | Cost$ 0 | ValidTgts$ Opponent | Choices$
SVar:PrepChamps:DB$ Effect | RememberObjects$ ChosenPlayer,You | Name$ Choose Your Champion Scheme | Duration$ UntilYourNextTurn | StaticAbilities$ RestrictAttackers,RestrictCasting SVar:PrepChamps:DB$ Effect | RememberObjects$ ChosenPlayer,You | Name$ Choose Your Champion Scheme | Duration$ UntilYourNextTurn | StaticAbilities$ RestrictAttackers,RestrictCasting
SVar:RestrictAttackers:Mode$ Continuous | Affected$ Creature.nonRememberedPlayerCtrl | AddHiddenKeyword$ CARDNAME can't attack. | EffectZone$ Command | Description$ Until your next turn, only you and the chosen player can attack with creatures. SVar:RestrictAttackers:Mode$ Continuous | Affected$ Creature.nonRememberedPlayerCtrl | AddHiddenKeyword$ CARDNAME can't attack. | EffectZone$ Command | Description$ Until your next turn, only you and the chosen player can attack with creatures.
SVar:RestrictCasting:Mode$ CantBeCast | ValidCard$ Card | Caster$ Player.IsNotRemembered | EffectZone$ Command | Description$ Until your next turn, only you and the chosen player can cast spells. SVar:RestrictCasting:Mode$ CantBeCast | ValidCard$ Card | Caster$ Player.IsNotRemembered | EffectZone$ Command | Description$ Until your next turn, only you and the chosen player can cast spells.
SVar:Picture:http://www.cardforge.org/fpics/lq_schemes/choose_your_champion.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/ARC/Choose Your Champion.full.jpg
Oracle:When you set this scheme in motion, target opponent chooses a player. Until your next turn, only you and the chosen player can cast spells and attack with creatures. Oracle:When you set this scheme in motion, target opponent chooses a player. Until your next turn, only you and the chosen player can cast spells and attack with creatures.

View File

@@ -6,5 +6,5 @@ S:Mode$ Continuous | EffectZone$ Command | Affected$ You | SetMaxHandSize$ Unlim
A:AB$ Draw | ActivationZone$ Command | Cost$ 0 | NumCards$ 3 | Defined$ You | ActivationLimit$ 1 | SubAbility$ DBSkipTurn | SpellDescription$ Draw three cards. You skip your next turn. Activate this ability only once each turn. A:AB$ Draw | ActivationZone$ Command | Cost$ 0 | NumCards$ 3 | Defined$ You | ActivationLimit$ 1 | SubAbility$ DBSkipTurn | SpellDescription$ Draw three cards. You skip your next turn. Activate this ability only once each turn.
SVar:DBSkipTurn:DB$ SkipTurn | NumTurns$ 1 | Defined$ You SVar:DBSkipTurn:DB$ SkipTurn | NumTurns$ 1 | Defined$ You
SVar:RemAIDeck:True SVar:RemAIDeck:True
SVar:Picture:http://www.cardforge.org/fpics/vgd-lq/chronatog_avatar.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/VAN/Chronatog Avatar.full.jpg
Oracle:Hand -1, life +1\nYou have no maximum hand size.\n{0}: Draw three cards. You skip your next turn. Activate this ability only once each turn. Oracle:Hand -1, life +1\nYou have no maximum hand size.\n{0}: Draw three cards. You skip your next turn. Activate this ability only once each turn.

View File

@@ -4,5 +4,5 @@ Types:Vanguard
HandLifeModifier:+2/+0 HandLifeModifier:+2/+0
T:Mode$ DamageDone | ValidSource$ Creature+YouCtrl | ValidTarget$ Creature,Player | TriggerZones$ Command | Execute$ TrigGainLife | TriggerDescription$ Whenever a creature you control deals damage to a creature or player, you gain 1 life. T:Mode$ DamageDone | ValidSource$ Creature+YouCtrl | ValidTarget$ Creature,Player | TriggerZones$ Command | Execute$ TrigGainLife | TriggerDescription$ Whenever a creature you control deals damage to a creature or player, you gain 1 life.
SVar:TrigGainLife:AB$ GainLife | Cost$ 0 | Defined$ You | LifeAmount$ 1 SVar:TrigGainLife:AB$ GainLife | Cost$ 0 | Defined$ You | LifeAmount$ 1
SVar:Picture:http://www.cardforge.org/fpics/vgd-lq/crovax.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/VAN/Crovax.full.jpg
Oracle:Hand +2, life +0\nWhenever a creature you control deals damage to a creature or player, you gain 1 life. Oracle:Hand +2, life +0\nWhenever a creature you control deals damage to a creature or player, you gain 1 life.

View File

@@ -5,5 +5,5 @@ HandLifeModifier:+1/+0
S:Mode$ Continuous | EffectZone$ Command | AffectedZone$ Hand | Affected$ Card.nonColorless+YouOwn | AddAbility$ STPlayLand | Description$ You may play any colored card from your hand as a copy of a basic land card chosen at random that can produce mana of one of the card's colors. S:Mode$ Continuous | EffectZone$ Command | AffectedZone$ Hand | Affected$ Card.nonColorless+YouOwn | AddAbility$ STPlayLand | Description$ You may play any colored card from your hand as a copy of a basic land card chosen at random that can produce mana of one of the card's colors.
SVar:STPlayLand:ST$ PlayLandVariant | Cost$ 0 | Clone$ BasicLand | SorcerySpeed$ True | ActivationZone$ Hand | SpellDescription$ Play CARDNAME from your hand as a copy of a basic land card chosen at random that can produce mana of one of CARDNAME's colors. SVar:STPlayLand:ST$ PlayLandVariant | Cost$ 0 | Clone$ BasicLand | SorcerySpeed$ True | ActivationZone$ Hand | SpellDescription$ Play CARDNAME from your hand as a copy of a basic land card chosen at random that can produce mana of one of CARDNAME's colors.
SVar:RemAIDeck:True SVar:RemAIDeck:True
SVar:Picture:http://www.cardforge.org/fpics/vgd-lq/dakkon_blackblade_avatar.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/VAN/Dakkon Blackblade Avatar.full.jpg
Oracle:Hand +1, life +0\nYou may play any colored card from your hand as a copy of a basic land card chosen at random that can produce mana of one of the card's colors. Oracle:Hand +1, life +0\nYou may play any colored card from your hand as a copy of a basic land card chosen at random that can produce mana of one of the card's colors.

View File

@@ -7,5 +7,5 @@ SVar:MakeItChoose:DB$ ChooseCard | Choices$ Card.IsRemembered | ChoiceZone$ Libr
SVar:MakeItDance:DB$ ChangeZone | Defined$ ChosenCard | Origin$ Library | Destination$ Battlefield | Mandatory$ True | GainControl$ True | ForgetChanged$ True | SubAbility$ TakeOutTheTrash SVar:MakeItDance:DB$ ChangeZone | Defined$ ChosenCard | Origin$ Library | Destination$ Battlefield | Mandatory$ True | GainControl$ True | ForgetChanged$ True | SubAbility$ TakeOutTheTrash
SVar:TakeOutTheTrash:DB$ ChangeZoneAll | ChangeType$ Card.IsRemembered | Origin$ Library | Destination$ Graveyard | SubAbility$ DBCleanup SVar:TakeOutTheTrash:DB$ ChangeZoneAll | ChangeType$ Card.IsRemembered | Origin$ Library | Destination$ Graveyard | SubAbility$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:Picture:http://www.cardforge.org/fpics/lq_schemes/dance_pathetic_marionette.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/ARC/Dance, Pathetic Marionette.full.jpg
Oracle:When you set this scheme in motion, each opponent reveals cards from the top of his or her library until he or she reveals a creature card. Choose one of the revealed creature cards and put it onto the battlefield under your control. Put all other cards revealed this way into their owners' graveyards. Oracle:When you set this scheme in motion, each opponent reveals cards from the top of his or her library until he or she reveals a creature card. Choose one of the revealed creature cards and put it onto the battlefield under your control. Put all other cards revealed this way into their owners' graveyards.

View File

@@ -3,5 +3,5 @@ ManaCost:no cost
Types:Vanguard Types:Vanguard
HandLifeModifier:+1/+1 HandLifeModifier:+1/+1
S:Mode$ Continuous | EffectZone$ Command | Affected$ Creature.YouCtrl | AddKeyword$ Exalted | Description$ Creatures you control have exalted. (Whenever a creature you control attacks alone, it gets +1/+1 until end of turn for each instance of exalted among permanents you control.) S:Mode$ Continuous | EffectZone$ Command | Affected$ Creature.YouCtrl | AddKeyword$ Exalted | Description$ Creatures you control have exalted. (Whenever a creature you control attacks alone, it gets +1/+1 until end of turn for each instance of exalted among permanents you control.)
SVar:Picture:http://www.cardforge.org/fpics/vgd-lq/dauntless_escort_avatar.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/VAN/Dauntless Escort Avatar.full.jpg
Oracle:Hand +1, life +1\nCreatures you control have exalted. (Whenever a creature you control attacks alone, it gets +1/+1 until end of turn for each instance of exalted among permanents you control.) Oracle:Hand +1, life +1\nCreatures you control have exalted. (Whenever a creature you control attacks alone, it gets +1/+1 until end of turn for each instance of exalted among permanents you control.)

View File

@@ -4,5 +4,5 @@ Types:Vanguard
HandLifeModifier:+0/+5 HandLifeModifier:+0/+5
A:AB$ Pump | ActivationZone$ Command | Cost$ S | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control | NumAtt$ 1 | NumDef$ 1 | SpellDescription$ Target creature you control gets +1/+1 until end of turn. A:AB$ Pump | ActivationZone$ Command | Cost$ S | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control | NumAtt$ 1 | NumDef$ 1 | SpellDescription$ Target creature you control gets +1/+1 until end of turn.
SVar:RemRandomDeck:True SVar:RemRandomDeck:True
SVar:Picture:http://www.cardforge.org/fpics/vgd-lq/diamond_faerie_avatar.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/VAN/Diamond Faerie Avatar.full.jpg
Oracle:Hand +0, life +5\n{S}: Target creature you control gets +1/+1 until end of turn. Oracle:Hand +0, life +5\n{S}: Target creature you control gets +1/+1 until end of turn.

View File

@@ -4,5 +4,5 @@ Types:Scheme
T:Mode$ SetInMotion | ValidCard$ Card.Self | Execute$ BloodyCombat | TriggerZones$ Command | TriggerDescription$ When you set this scheme in motion, after the main phase, there is an additional combat phase followed by an additional main phase. Creatures you control gain vigilance until end of turn. T:Mode$ SetInMotion | ValidCard$ Card.Self | Execute$ BloodyCombat | TriggerZones$ Command | TriggerDescription$ When you set this scheme in motion, after the main phase, there is an additional combat phase followed by an additional main phase. Creatures you control gain vigilance until end of turn.
SVar:BloodyCombat:DB$ AddPhase | ExtraPhase$ BeginCombat | FollowedBy$ ThisPhase | ConditionPhases$ Main1,Main2 | SubAbility$ MakeVigilant SVar:BloodyCombat:DB$ AddPhase | ExtraPhase$ BeginCombat | FollowedBy$ ThisPhase | ConditionPhases$ Main1,Main2 | SubAbility$ MakeVigilant
SVar:MakeVigilant:DB$ PumpAll | ValidCards$ Creature.YouCtrl | KW$ Vigilance SVar:MakeVigilant:DB$ PumpAll | ValidCards$ Creature.YouCtrl | KW$ Vigilance
SVar:Picture:http://www.cardforge.org/fpics/lq_schemes/drench_the_soil_in_their_blood.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/ARC/Drench the Soil in Their Blood.full.jpg
Oracle:When you set this scheme in motion, after the main phase, there is an additional combat phase followed by an additional main phase. Creatures you control gain vigilance until end of turn. Oracle:When you set this scheme in motion, after the main phase, there is an additional combat phase followed by an additional main phase. Creatures you control gain vigilance until end of turn.

View File

@@ -3,5 +3,5 @@ ManaCost:no cost
Types:Vanguard Types:Vanguard
HandLifeModifier:+2/-3 HandLifeModifier:+2/-3
A:AB$ Pump | Cost$ 1 | ActivationZone$ Command | ValidTgts$ Permanent.YouCtrl | TgtPrompt$ Select target permanent you control | KW$ Protection from red & Protection from blue & Protection from black & Protection from white & Protection from green | RandomKeyword$ True | NoRepetition$ True | StackDescription$ SpellDescription | SpellDescription$ Until end of turn, target permanent you control gains protection from a color chosen at random from colors it doesn't have protection from. A:AB$ Pump | Cost$ 1 | ActivationZone$ Command | ValidTgts$ Permanent.YouCtrl | TgtPrompt$ Select target permanent you control | KW$ Protection from red & Protection from blue & Protection from black & Protection from white & Protection from green | RandomKeyword$ True | NoRepetition$ True | StackDescription$ SpellDescription | SpellDescription$ Until end of turn, target permanent you control gains protection from a color chosen at random from colors it doesn't have protection from.
SVar:Picture:http://www.cardforge.org/fpics/vgd-lq/eight_and_a_half_tails_avatar.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/VAN/Eight-and-a-Half-Tails Avatar.full.jpg
Oracle:Hand +2, life -3\n{1}: Until end of turn, target permanent you control gains protection from a color chosen at random from colors it doesn't have protection from. Oracle:Hand +2, life -3\n{1}: Until end of turn, target permanent you control gains protection from a color chosen at random from colors it doesn't have protection from.

View File

@@ -13,6 +13,6 @@ SVar:OutOfSight:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | Val
SVar:ExileEffect:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile | Static$ True SVar:ExileEffect:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile | Static$ True
SVar:X:ReplaceCount$DamageAmount/Minus.1 SVar:X:ReplaceCount$DamageAmount/Minus.1
SVar:Y:ReplaceCount$DamageAmount SVar:Y:ReplaceCount$DamageAmount
SVar:Picture:http://www.cardforge.org/fpics/vgd-lq/eladamri.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/VAN/Eladamri.full.jpg
SVar:RemAIDeck:True SVar:RemAIDeck:True
Oracle:Hand -1, life +15\n{0}: The next 1 damage that would be dealt to target creature you control is dealt to you instead. Oracle:Hand -1, life +15\n{0}: The next 1 damage that would be dealt to target creature you control is dealt to you instead.

View File

@@ -6,5 +6,5 @@ T:Mode$ Phase | Phase$ Main1 | ValidPlayer$ Player | TriggerZones$ Command | Exe
SVar:TrigAddMana:AB$ Mana | Cost$ 0 | Produced$ G | Amount$ 2 | Defined$ TriggeredPlayer SVar:TrigAddMana:AB$ Mana | Cost$ 0 | Produced$ G | Amount$ 2 | Defined$ TriggeredPlayer
SVar:RemAIDeck:True SVar:RemAIDeck:True
SVar:RemRandomDeck:True SVar:RemRandomDeck:True
SVar:Picture:http://www.cardforge.org/fpics/vgd-lq/eladamri_lord_of_leaves_avatar.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/VAN/Eladamri, Lord of Leaves Avatar.full.jpg
Oracle:Hand -1, life +2\nAt the beginning of each player's precombat main phase, that player adds {G}{G} to his or her mana pool. Oracle:Hand -1, life +2\nAt the beginning of each player's precombat main phase, that player adds {G}{G} to his or her mana pool.

View File

@@ -5,5 +5,5 @@ HandLifeModifier:+0/-5
T:Mode$ NewGame | TriggerZones$ Command | Execute$ TrigToken | Static$ True | TriggerDescription$ You begin the game with a 1/1 green Elf creature token on the battlefield. It has "{T}: Add {G} to your mana pool." T:Mode$ NewGame | TriggerZones$ Command | Execute$ TrigToken | Static$ True | TriggerDescription$ You begin the game with a 1/1 green Elf creature token on the battlefield. It has "{T}: Add {G} to your mana pool."
SVar:TrigToken:AB$ Token | Cost$ 0 | TokenAmount$ 1 | TokenName$ Elf | TokenTypes$ Creature,Elf | TokenOwner$ You | TokenColors$ Green | TokenPower$ 1 | TokenToughness$ 1 | TokenAbilities$ DBMana SVar:TrigToken:AB$ Token | Cost$ 0 | TokenAmount$ 1 | TokenName$ Elf | TokenTypes$ Creature,Elf | TokenOwner$ You | TokenColors$ Green | TokenPower$ 1 | TokenToughness$ 1 | TokenAbilities$ DBMana
SVar:DBMana:AB$ Mana | Cost$ T | Produced$ G | SpellDescription$ Add {G} to your mana pool. SVar:DBMana:AB$ Mana | Cost$ T | Produced$ G | SpellDescription$ Add {G} to your mana pool.
SVar:Picture:http://www.cardforge.org/fpics/vgd-lq/elvish_champion_avatar.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/VAN/Elvish Champion Avatar.full.jpg
Oracle:Hand +0, life -5\nYou begin the game with a 1/1 green Elf creature token on the battlefield. It has "{T}: Add {G} to your mana pool." Oracle:Hand +0, life -5\nYou begin the game with a 1/1 green Elf creature token on the battlefield. It has "{T}: Add {G} to your mana pool."

View File

@@ -5,5 +5,5 @@ T:Mode$ SetInMotion | ValidCard$ Card.Self | Execute$ GraveEmbrace | TriggerZone
SVar:GraveEmbrace:AB$ ChangeZoneAll | Cost$ 0 | ChangeType$ Card | Origin$ Graveyard,Hand | Destination$ Library | Shuffle$ True | SubAbility$ MyVision SVar:GraveEmbrace:AB$ ChangeZoneAll | Cost$ 0 | ChangeType$ Card | Origin$ Graveyard,Hand | Destination$ Library | Shuffle$ True | SubAbility$ MyVision
SVar:MyVision:DB$ Draw | Defined$ You | NumCards$ 7 | SubAbility$ PitifulDraw SVar:MyVision:DB$ Draw | Defined$ You | NumCards$ 7 | SubAbility$ PitifulDraw
SVar:PitifulDraw:DB$ Draw | Defined$ Player.Other | NumCards$ 4 SVar:PitifulDraw:DB$ Draw | Defined$ Player.Other | NumCards$ 4
SVar:Picture:http://www.cardforge.org/fpics/lq_schemes/embrace_my_diabolical_vision.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/ARC/Embrace My Diabolical Vision.full.jpg
Oracle:When you set this scheme in motion, each player shuffles his or her hand and graveyard into his or her library. You draw seven cards, then each other player draws four cards. Oracle:When you set this scheme in motion, each player shuffles his or her hand and graveyard into his or her library. You draw seven cards, then each other player draws four cards.

View File

@@ -8,5 +8,5 @@ SVar:DBPlay:DB$ Play | Defined$ Remembered | Controller$ You | WithoutManaCost$
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:NumColoredCast:Count$ThisTurnCast_Artifact.nonColorless+YouCtrl SVar:NumColoredCast:Count$ThisTurnCast_Artifact.nonColorless+YouCtrl
SVar:X:Count$TriggeredCardManaCost SVar:X:Count$TriggeredCardManaCost
SVar:Picture:http://www.cardforge.org/fpics/vgd-lq/enigma_sphinx_avatar.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/VAN/Enigma Sphinx Avatar.full.jpg
Oracle:Hand +0, life +5\nWhenever you cast a colored artifact spell for the first time in a turn, search your library for a colored artifact card chosen at random whose converted mana cost is less than that spell's converted mana cost. You may play that card without paying its mana cost. If you don't, put that card on the bottom of your library. Oracle:Hand +0, life +5\nWhenever you cast a colored artifact spell for the first time in a turn, search your library for a colored artifact card chosen at random whose converted mana cost is less than that spell's converted mana cost. You may play that card without paying its mana cost. If you don't, put that card on the bottom of your library.

View File

@@ -4,5 +4,5 @@ Types:Vanguard
HandLifeModifier:+0/+3 HandLifeModifier:+0/+3
T:Mode$ SpellCast | ValidCard$ Creature | ValidActivatingPlayer$ You | Execute$ DjinnisGift | TriggerZones$ Command | TriggerDescription$ Whenever you cast a creature spell, put a 1/1 green Saproling creature token onto the battlefield. T:Mode$ SpellCast | ValidCard$ Creature | ValidActivatingPlayer$ You | Execute$ DjinnisGift | TriggerZones$ Command | TriggerDescription$ Whenever you cast a creature spell, put a 1/1 green Saproling creature token onto the battlefield.
SVar:DjinnisGift:AB$ Token | Cost$ 0 | TokenAmount$ 1 | TokenName$ Saproling | TokenTypes$ Creature,Saproling | TokenOwner$ You | TokenColors$ Green | TokenPower$ 1 | TokenToughness$ 1 SVar:DjinnisGift:AB$ Token | Cost$ 0 | TokenAmount$ 1 | TokenName$ Saproling | TokenTypes$ Creature,Saproling | TokenOwner$ You | TokenColors$ Green | TokenPower$ 1 | TokenToughness$ 1
SVar:Picture:http://www.cardforge.org/fpics/vgd-lq/erhnam_djinn_avatar.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/VAN/Erhnam Djinn Avatar1.full.jpg
Oracle:Hand +0, life +3\nWhenever you cast a creature spell, put a 1/1 green Saproling creature token onto the battlefield. Oracle:Hand +0, life +3\nWhenever you cast a creature spell, put a 1/1 green Saproling creature token onto the battlefield.

View File

@@ -3,5 +3,5 @@ ManaCost:no cost
Types:Vanguard Types:Vanguard
HandLifeModifier:-1/+4 HandLifeModifier:-1/+4
S:Mode$ Continuous | EffectZone$ Command | Affected$ Creature.YouCtrl | AddKeyword$ Hexproof | Description$ Creatures you control have hexproof. (They can't be the targets of spells or abilities your opponents control.) S:Mode$ Continuous | EffectZone$ Command | Affected$ Creature.YouCtrl | AddKeyword$ Hexproof | Description$ Creatures you control have hexproof. (They can't be the targets of spells or abilities your opponents control.)
SVar:Picture:http://www.cardforge.org/fpics/vgd-lq/ertai.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/VAN/Ertai.full.jpg
Oracle:Hand -1, life +4\nCreatures you control have hexproof. (They can't be the targets of spells or abilities your opponents control.) Oracle:Hand -1, life +4\nCreatures you control have hexproof. (They can't be the targets of spells or abilities your opponents control.)

View File

@@ -4,5 +4,5 @@ Types:Vanguard
HandLifeModifier:+1/-4 HandLifeModifier:+1/-4
S:Mode$ Continuous | EffectZone$ Command | Affected$ Card.YouCtrl | AddHiddenKeyword$ Alternative Cost W U B R G | AffectedZone$ Hand,Graveyard,Exile,Library,Command | Description$ You may pay {W}{U}{B}{R}{G} rather than pay the mana cost for spells that you cast. S:Mode$ Continuous | EffectZone$ Command | Affected$ Card.YouCtrl | AddHiddenKeyword$ Alternative Cost W U B R G | AffectedZone$ Hand,Graveyard,Exile,Library,Command | Description$ You may pay {W}{U}{B}{R}{G} rather than pay the mana cost for spells that you cast.
SVar:RemRandomDeck:True SVar:RemRandomDeck:True
SVar:Picture:http://www.cardforge.org/fpics/vgd-lq/etched_oracle_avatar.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/VAN/Etched Oracle Avatar.full.jpg
Oracle:Hand +1, life -4\nYou may pay {W}{U}{B}{R}{G} rather than pay the mana cost for spells that you cast. Oracle:Hand +1, life -4\nYou may pay {W}{U}{B}{R}{G} rather than pay the mana cost for spells that you cast.

View File

@@ -3,5 +3,5 @@ ManaCost:no cost
Types:Scheme Types:Scheme
T:Mode$ SetInMotion | ValidCard$ Card.Self | Execute$ DiscardHope | TriggerZones$ Command | TriggerDescription$ When you set this scheme in motion, each opponent reveals his or her hand. Choose a nonland card from each of those hands. Those players discard those cards. T:Mode$ SetInMotion | ValidCard$ Card.Self | Execute$ DiscardHope | TriggerZones$ Command | TriggerDescription$ When you set this scheme in motion, each opponent reveals his or her hand. Choose a nonland card from each of those hands. Those players discard those cards.
SVar:DiscardHope:AB$ Discard | Cost$ 0 | Defined$ Player.Opponent | Mode$ RevealYouChoose | DiscardValid$ Card.nonLand | NumCards$ 1 SVar:DiscardHope:AB$ Discard | Cost$ 0 | Defined$ Player.Opponent | Mode$ RevealYouChoose | DiscardValid$ Card.nonLand | NumCards$ 1
SVar:Picture:http://www.cardforge.org/fpics/lq_schemes/every_hope_shall_vanish.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/ARC/Every Hope Shall Vanish.full.jpg
Oracle:When you set this scheme in motion, each opponent reveals his or her hand. Choose a nonland card from each of those hands. Those players discard those cards. Oracle:When you set this scheme in motion, each opponent reveals his or her hand. Choose a nonland card from each of those hands. Those players discard those cards.

View File

@@ -4,5 +4,5 @@ Types:Scheme
T:Mode$ SetInMotion | ValidCard$ Card.Self | Execute$ MoveToBottom | TriggerZones$ Command | OptionalDecider$ You | TriggerDescription$ When you set this scheme in motion, you may pay {X}. If you do, put each nonland permanent target player controls with converted mana cost X or less on the bottom of its owner's library. T:Mode$ SetInMotion | ValidCard$ Card.Self | Execute$ MoveToBottom | TriggerZones$ Command | OptionalDecider$ You | TriggerDescription$ When you set this scheme in motion, you may pay {X}. If you do, put each nonland permanent target player controls with converted mana cost X or less on the bottom of its owner's library.
SVar:MoveToBottom:AB$ ChangeZoneAll | Cost$ X | ChangeType$ Permanent.nonLand+cmcLEX | ValidTgts$ Player | TgtPrompt$ Select target player | Origin$ Battlefield | Destination$ Library | LibraryPosition$ -1 SVar:MoveToBottom:AB$ ChangeZoneAll | Cost$ X | ChangeType$ Permanent.nonLand+cmcLEX | ValidTgts$ Player | TgtPrompt$ Select target player | Origin$ Battlefield | Destination$ Library | LibraryPosition$ -1
SVar:X:Count$xPaid SVar:X:Count$xPaid
SVar:Picture:http://www.cardforge.org/fpics/lq_schemes/every_last_vestige_shall_rot.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/ARC/Every Last Vestige Shall Rot.full.jpg
Oracle:When you set this scheme in motion, you may pay {X}. If you do, put each nonland permanent target player controls with converted mana cost X or less on the bottom of its owner's library. Oracle:When you set this scheme in motion, you may pay {X}. If you do, put each nonland permanent target player controls with converted mana cost X or less on the bottom of its owner's library.

View File

@@ -5,5 +5,5 @@ T:Mode$ SetInMotion | ValidCard$ Card.Self | Execute$ NewEvil | TriggerZones$ Co
SVar:NewEvil:AB$ Token | Cost$ 0 | TokenAmount$ 7 | TokenName$ Plant | TokenTypes$ Creature,Plant | TokenOwner$ You | TokenColors$ Green | TokenPower$ 0 | TokenToughness$ 1 | ConditionPresent$ Land.YouCtrl | ConditionCompare$ LT10 | SubAbility$ MatureEvil SVar:NewEvil:AB$ Token | Cost$ 0 | TokenAmount$ 7 | TokenName$ Plant | TokenTypes$ Creature,Plant | TokenOwner$ You | TokenColors$ Green | TokenPower$ 0 | TokenToughness$ 1 | ConditionPresent$ Land.YouCtrl | ConditionCompare$ LT10 | SubAbility$ MatureEvil
SVar:MatureEvil:DB$ Token | Cost$ 0 | TokenAmount$ 7 | TokenName$ Elemental | TokenTypes$ Creature,Elemental | TokenOwner$ You | TokenColors$ Green | TokenPower$ 3 | TokenToughness$ 3 | ConditionPresent$ Land.YouCtrl | ConditionCompare$ GE10 SVar:MatureEvil:DB$ Token | Cost$ 0 | TokenAmount$ 7 | TokenName$ Elemental | TokenTypes$ Creature,Elemental | TokenOwner$ You | TokenColors$ Green | TokenPower$ 3 | TokenToughness$ 3 | ConditionPresent$ Land.YouCtrl | ConditionCompare$ GE10
SVar:X:Count$NumTypeYouCtrl.Land SVar:X:Count$NumTypeYouCtrl.Land
SVar:Picture:http://www.cardforge.org/fpics/lq_schemes/evil_comes_to_fruition.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/ARC/Evil Comes to Fruition.full.jpg
Oracle:When you set this scheme in motion, put seven 0/1 green Plant creature tokens onto the battlefield. If you control ten or more lands, put seven 3/3 green Elemental creature tokens onto the battlefield instead. Oracle:When you set this scheme in motion, put seven 0/1 green Plant creature tokens onto the battlefield. If you control ten or more lands, put seven 3/3 green Elemental creature tokens onto the battlefield instead.

View File

@@ -5,5 +5,5 @@ HandLifeModifier:+0/-5
T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Creature.YouCtrl | Execute$ TrigDrain | TriggerZones$ Command | TriggerDescription$ Whenever a creature you control dies, target opponent loses 1 life and you gain 1 life. T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Creature.YouCtrl | Execute$ TrigDrain | TriggerZones$ Command | TriggerDescription$ Whenever a creature you control dies, target opponent loses 1 life and you gain 1 life.
SVar:TrigDrain:AB$ LoseLife | Cost$ 0 | ValidTgts$ Opponent | LifeAmount$ 1 | SubAbility$ DBGainLife SVar:TrigDrain:AB$ LoseLife | Cost$ 0 | ValidTgts$ Opponent | LifeAmount$ 1 | SubAbility$ DBGainLife
SVar:DBGainLife:DB$ GainLife | Defined$ You | LifeAmount$ 1 SVar:DBGainLife:DB$ GainLife | Defined$ You | LifeAmount$ 1
SVar:Picture:http://www.cardforge.org/fpics/vgd-lq/fallen_angel_avatar.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/VAN/Fallen Angel Avatar.full.jpg
Oracle:Hand +0, life -5\nWhenever a creature you control dies, target opponent loses 1 life and you gain 1 life. Oracle:Hand +0, life -5\nWhenever a creature you control dies, target opponent loses 1 life and you gain 1 life.

View File

@@ -4,5 +4,5 @@ Types:Vanguard
HandLifeModifier:+0/+3 HandLifeModifier:+0/+3
A:AB$ PutCounter | ActivationZone$ Command | Announce$ X | Cost$ X | CounterType$ P1P1 | CounterNum$ 1 | ValidTgts$ Creature.counters_LTX_P1P1 | TgtPrompt$ Select target creature with fewer than X +1/+1 counters on it | References$ X | SpellDescription$ Put a +1/+1 counter on target creature with fewer than X +1/+1 counters on it. A:AB$ PutCounter | ActivationZone$ Command | Announce$ X | Cost$ X | CounterType$ P1P1 | CounterNum$ 1 | ValidTgts$ Creature.counters_LTX_P1P1 | TgtPrompt$ Select target creature with fewer than X +1/+1 counters on it | References$ X | SpellDescription$ Put a +1/+1 counter on target creature with fewer than X +1/+1 counters on it.
SVar:X:Count$xPaid SVar:X:Count$xPaid
SVar:Picture:http://www.cardforge.org/fpics/vgd-lq/figure_of_destiny_avatar.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/VAN/Figure of Destiny Avatar.full.jpg
Oracle:Hand +0, life +3\n{X}: Put a +1/+1 counter on target creature with fewer than X +1/+1 counters on it. Oracle:Hand +0, life +3\n{X}: Put a +1/+1 counter on target creature with fewer than X +1/+1 counters on it.

View File

@@ -5,5 +5,5 @@ HandLifeModifier:+0/-6
T:Mode$ ChangesZone | ValidCard$ Creature.nonToken+YouCtrl | Origin$ Any | Destination$ Battlefield | Execute$ TrigDealDamage | TriggerZones$ Command | TriggerDescription$ Whenever a nontoken creature enters the battlefield under your control, that creature deals X damage to target creature, where X is a number chosen at random from 0 to 4. T:Mode$ ChangesZone | ValidCard$ Creature.nonToken+YouCtrl | Origin$ Any | Destination$ Battlefield | Execute$ TrigDealDamage | TriggerZones$ Command | TriggerDescription$ Whenever a nontoken creature enters the battlefield under your control, that creature deals X damage to target creature, where X is a number chosen at random from 0 to 4.
SVar:TrigDealDamage:AB$ DealDamage | Cost$ 0 | ValidTgts$ Creature | NumDmg$ X | References$ X | DamageSource$ TriggeredCard SVar:TrigDealDamage:AB$ DealDamage | Cost$ 0 | ValidTgts$ Creature | NumDmg$ X | References$ X | DamageSource$ TriggeredCard
SVar:X:Count$Random.0.4 SVar:X:Count$Random.0.4
SVar:Picture:http://www.cardforge.org/fpics/vgd-lq/flametongue_kavu_avatar.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/VAN/Flametongue Kavu Avatar.full.jpg
Oracle:Hand +0, life -6\nWhenever a nontoken creature enters the battlefield under your control, that creature deals X damage to target creature, where X is a number chosen at random from 0 to 4. Oracle:Hand +0, life -6\nWhenever a nontoken creature enters the battlefield under your control, that creature deals X damage to target creature, where X is a number chosen at random from 0 to 4.

View File

@@ -6,5 +6,5 @@ S:Mode$ Continuous | EffectZone$ Command | Affected$ Permanent.YouCtrl | AddKeyw
T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Command | Execute$ TrigFlip | TriggerDescription$ At the beginning of your end step, flip a coin. If you win the flip, take an extra turn after this one. T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Command | Execute$ TrigFlip | TriggerDescription$ At the beginning of your end step, flip a coin. If you win the flip, take an extra turn after this one.
SVar:TrigFlip:AB$ FlipACoin | Cost$ 0 | Defined$ You | WinSubAbility$ DBAddTurn SVar:TrigFlip:AB$ FlipACoin | Cost$ 0 | Defined$ You | WinSubAbility$ DBAddTurn
SVar:DBAddTurn:DB$ AddTurn | NumTurns$ 1 SVar:DBAddTurn:DB$ AddTurn | NumTurns$ 1
SVar:Picture:http://www.cardforge.org/fpics/vgd-lq/frenetic_efreet_avatar.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/VAN/Frenetic Efreet Avatar.full.jpg
Oracle:Hand -1, life -3\nEach permanent you control has phasing. (It phases in or out before you untap during each of your untap steps. While it's phased out, it's treated as though it doesn't exist.)\nAt the beginning of your end step, flip a coin. If you win the flip, take an extra turn after this one. Oracle:Hand -1, life -3\nEach permanent you control has phasing. (It phases in or out before you untap during each of your untap steps. While it's phased out, it's treated as though it doesn't exist.)\nAt the beginning of your end step, flip a coin. If you win the flip, take an extra turn after this one.

View File

@@ -4,5 +4,5 @@ Types:Vanguard
HandLifeModifier:-4/+0 HandLifeModifier:-4/+0
T:Mode$ Phase | Phase$ Draw | ValidPlayer$ You | TriggerZones$ Command | Execute$ TrigDraw | TriggerDescription$ At the beginning of your draw step, draw an additional card. T:Mode$ Phase | Phase$ Draw | ValidPlayer$ You | TriggerZones$ Command | Execute$ TrigDraw | TriggerDescription$ At the beginning of your draw step, draw an additional card.
SVar:TrigDraw:AB$ Draw | Cost$ 0 | NumCards$ 1 | Defined$ You SVar:TrigDraw:AB$ Draw | Cost$ 0 | NumCards$ 1 | Defined$ You
SVar:Picture:http://www.cardforge.org/fpics/vgd-lq/gerrard.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/VAN/Gerrard.full.jpg
Oracle:Hand -4, life +0\nAt the beginning of your draw step, draw an additional card. Oracle:Hand -4, life +0\nAt the beginning of your draw step, draw an additional card.

View File

@@ -3,5 +3,5 @@ ManaCost:no cost
Types:Vanguard Types:Vanguard
HandLifeModifier:-2/+18 HandLifeModifier:-2/+18
A:AB$ ChangeZone | Cost$ 3 | ActivationZone$ Command | Origin$ Graveyard | Destination$ Hand | TgtPrompt$ Select target creature card in your graveyard | ValidTgts$ Creature.YouCtrl | SpellDescription$ Return target creature card from your graveyard to your hand. A:AB$ ChangeZone | Cost$ 3 | ActivationZone$ Command | Origin$ Graveyard | Destination$ Hand | TgtPrompt$ Select target creature card in your graveyard | ValidTgts$ Creature.YouCtrl | SpellDescription$ Return target creature card from your graveyard to your hand.
SVar:Picture:http://www.cardforge.org/fpics/vgd-lq/gix.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/VAN/Gix.full.jpg
Oracle:Hand -2, life +18\n{3}: Return target creature card from your graveyard to your hand. Oracle:Hand -2, life +18\n{3}: Return target creature card from your graveyard to your hand.

View File

@@ -3,5 +3,5 @@ ManaCost:no cost
Types:Vanguard Types:Vanguard
HandLifeModifier:+1/+2 HandLifeModifier:+1/+2
S:Mode$ Continuous | EffectZone$ Command | AffectedZone$ Battlefield | Affected$ Creature.attacking+YouCtrl | AddPower$ 1 | Description$ Attacking creatures you control get +1/+0. S:Mode$ Continuous | EffectZone$ Command | AffectedZone$ Battlefield | Affected$ Creature.attacking+YouCtrl | AddPower$ 1 | Description$ Attacking creatures you control get +1/+0.
SVar:Picture:http://www.cardforge.org/fpics/vgd-lq/goblin_warchief_avatar.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/VAN/Goblin Warchief Avatar1.full.jpg
Oracle:Hand +1, life +2\nAttacking creatures you control get +1/+0. Oracle:Hand +1, life +2\nAttacking creatures you control get +1/+0.

View File

@@ -4,5 +4,5 @@ Types:Vanguard
HandLifeModifier:-1/+2 HandLifeModifier:-1/+2
T:Mode$ DamageDone | ValidSource$ Creature.YouCtrl | ValidTarget$ Creature | TriggerZones$ Command | Execute$ TrigDestroy | TriggerDescription$ Whenever a creature you control deals damage to a creature, destroy the other creature. It can't be regenerated. T:Mode$ DamageDone | ValidSource$ Creature.YouCtrl | ValidTarget$ Creature | TriggerZones$ Command | Execute$ TrigDestroy | TriggerDescription$ Whenever a creature you control deals damage to a creature, destroy the other creature. It can't be regenerated.
SVar:TrigDestroy:AB$ Destroy | Cost$ 0 | Defined$ TriggeredTarget | NoRegen$ True SVar:TrigDestroy:AB$ Destroy | Cost$ 0 | Defined$ TriggeredTarget | NoRegen$ True
SVar:Picture:http://www.cardforge.org/fpics/vgd-lq/greven_il-vec.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/VAN/Greven il-Vec.full.jpg
Oracle:Hand -1, life +2\nWhenever a creature you control deals damage to a creature, destroy the other creature. It can't be regenerated. Oracle:Hand -1, life +2\nWhenever a creature you control deals damage to a creature, destroy the other creature. It can't be regenerated.

View File

@@ -4,5 +4,5 @@ Types:Vanguard
HandLifeModifier:-1/-2 HandLifeModifier:-1/-2
T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Creature.YouCtrl+nonToken | TriggerZones$ Command | Execute$ GrinningDiscard | TriggerDescription$ Whenever a nontoken creature you control dies, target opponent discards a card. T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Creature.YouCtrl+nonToken | TriggerZones$ Command | Execute$ GrinningDiscard | TriggerDescription$ Whenever a nontoken creature you control dies, target opponent discards a card.
SVar:GrinningDiscard:AB$ Discard | Cost$ 0 | ValidTgts$ Opponent | TgtPrompt$ Select an opponent to discard | NumCards$ 1 | Mode$ TgtChoose SVar:GrinningDiscard:AB$ Discard | Cost$ 0 | ValidTgts$ Opponent | TgtPrompt$ Select an opponent to discard | NumCards$ 1 | Mode$ TgtChoose
SVar:Picture:http://www.cardforge.org/fpics/vgd-lq/grinning_demon_avatar.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/VAN/Grinning Demon Avatar1.full.jpg
Oracle:Hand -1, life -2\nWhenever a nontoken creature you control dies, target opponent discards a card. Oracle:Hand -1, life -2\nWhenever a nontoken creature you control dies, target opponent discards a card.

View File

@@ -6,5 +6,5 @@ A:AB$ Pump | ActivationZone$ Command | Cost$ PayLife<1> | TgtZone$ Graveyard | V
T:Mode$ SpellCast | ValidCard$ Card.wasCastFromGraveyard | ValidControllingPlayer$ You | TriggerZones$ Command | Execute$ TrigAnimate | TriggerDescription$ Whenever you play a creature card from your graveyard, it becomes a black Zombie Knight. T:Mode$ SpellCast | ValidCard$ Card.wasCastFromGraveyard | ValidControllingPlayer$ You | TriggerZones$ Command | Execute$ TrigAnimate | TriggerDescription$ Whenever you play a creature card from your graveyard, it becomes a black Zombie Knight.
SVar:TrigAnimate:AB$ Animate | Cost$ 0 | Defined$ TriggeredCard | Types$ Zombie,Knight | Colors$ Black | OverwriteColors$ True | Permanent$ True | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True SVar:TrigAnimate:AB$ Animate | Cost$ 0 | Defined$ TriggeredCard | Types$ Zombie,Knight | Colors$ Black | OverwriteColors$ True | Permanent$ True | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True
S:Mode$ Continuous | EffectZone$ Command | Affected$ Card.Zombie+Knight | AffectedZone$ Battlefield | AddHiddenKeyword$ If CARDNAME would be put into a graveyard, exile it instead. | Description$ If a Zombie Knight would be put into your graveyard from the battlefield, exile it instead. S:Mode$ Continuous | EffectZone$ Command | Affected$ Card.Zombie+Knight | AffectedZone$ Battlefield | AddHiddenKeyword$ If CARDNAME would be put into a graveyard, exile it instead. | Description$ If a Zombie Knight would be put into your graveyard from the battlefield, exile it instead.
SVar:Picture:http://www.cardforge.org/fpics/vgd-lq/haakon_stromgald_scourge_avatar.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/VAN/Haakon, Stromgald Scourge Avatar.full.jpg
Oracle:Hand +0, life -3\nPay 1 life: You may play target creature card in your graveyard this turn.\nWhenever you play a creature card from your graveyard, it becomes a black Zombie Knight.\nIf a Zombie Knight would be put into your graveyard from the battlefield, exile it instead. Oracle:Hand +0, life -3\nPay 1 life: You may play target creature card in your graveyard this turn.\nWhenever you play a creature card from your graveyard, it becomes a black Zombie Knight.\nIf a Zombie Knight would be put into your graveyard from the battlefield, exile it instead.

View File

@@ -3,5 +3,5 @@ ManaCost:no cost
Types:Vanguard Types:Vanguard
HandLifeModifier:+1/-5 HandLifeModifier:+1/-5
S:Mode$ ReduceCost | EffectZone$ Command | ValidCard$ Card | Type$ Spell | Activator$ You | Amount$ 1 | Description$ Spells you cast cost {1} less to cast. S:Mode$ ReduceCost | EffectZone$ Command | ValidCard$ Card | Type$ Spell | Activator$ You | Amount$ 1 | Description$ Spells you cast cost {1} less to cast.
SVar:Picture:http://www.cardforge.org/fpics/vgd-lq/hanna.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/VAN/Hanna.full.jpg
Oracle:Hand +1, life -5\nSpells you cast cost {1} less to cast. Oracle:Hand +1, life -5\nSpells you cast cost {1} less to cast.

View File

@@ -4,5 +4,5 @@ Types:Vanguard
HandLifeModifier:-1/+4 HandLifeModifier:-1/+4
S:Mode$ ReduceCost | EffectZone$ Command | ValidCard$ Card.Creature | Activator$ You | Type$ Spell | OnlyFirstSpell$ True | Amount$ 1 | Description$ The first creature spell you cast each turn costs {1} less to cast. S:Mode$ ReduceCost | EffectZone$ Command | ValidCard$ Card.Creature | Activator$ You | Type$ Spell | OnlyFirstSpell$ True | Amount$ 1 | Description$ The first creature spell you cast each turn costs {1} less to cast.
S:Mode$ RaiseCost | EffectZone$ Command | ValidCard$ Card.nonCreature | Activator$ Player.Opponent | Type$ Spell | OnlyFirstSpell$ True | Amount$ 1 | Description$ The first noncreature spell each opponent casts each turn costs {1} more to cast. S:Mode$ RaiseCost | EffectZone$ Command | ValidCard$ Card.nonCreature | Activator$ Player.Opponent | Type$ Spell | OnlyFirstSpell$ True | Amount$ 1 | Description$ The first noncreature spell each opponent casts each turn costs {1} more to cast.
SVar:Picture:http://www.cardforge.org/fpics/vgd-lq/heartwood_storyteller_avatar.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/VAN/Heartwood Storyteller Avatar.full.jpg
Oracle:Hand -1, life +4\nThe first creature spell you cast each turn costs {1} less to cast.\nThe first noncreature spell each opponent casts each turn costs {1} more to cast. Oracle:Hand -1, life +4\nThe first creature spell you cast each turn costs {1} less to cast.\nThe first noncreature spell each opponent casts each turn costs {1} more to cast.

View File

@@ -4,5 +4,5 @@ Types:Vanguard
HandLifeModifier:-1/-4 HandLifeModifier:-1/-4
A:AB$ ChangeZone | Cost$ 3 Sac<1/Creature/creature> | ActivationZone$ Command | Origin$ Graveyard | Destination$ Battlefield | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature in your graveyard | SpellDescription$ Return target creature card from your graveyard to the battlefield. A:AB$ ChangeZone | Cost$ 3 Sac<1/Creature/creature> | ActivationZone$ Command | Origin$ Graveyard | Destination$ Battlefield | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature in your graveyard | SpellDescription$ Return target creature card from your graveyard to the battlefield.
SVar:RemAIDeck:True SVar:RemAIDeck:True
SVar:Picture:http://www.cardforge.org/fpics/vgd-lq/hells_caretaker_avatar.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/VAN/Hell's Caretaker Avatar.full.jpg
Oracle:Hand -1, life -4\n{3}, Sacrifice a creature: Return target creature card from your graveyard to the battlefield. Oracle:Hand -1, life -4\n{3}, Sacrifice a creature: Return target creature card from your graveyard to the battlefield.

View File

@@ -4,5 +4,5 @@ Types:Vanguard
HandLifeModifier:-2/-2 HandLifeModifier:-2/-2
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | Execute$ TrigBounce | TriggerZones$ Command | TriggerDescription$ At the beginning of your upkeep, put a land card from your library chosen at random onto the battlefield. T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | Execute$ TrigBounce | TriggerZones$ Command | TriggerDescription$ At the beginning of your upkeep, put a land card from your library chosen at random onto the battlefield.
SVar:TrigBounce:AB$ ChangeZone | Cost$ 0 | Origin$ Library | Destination$ Battlefield | AtRandom$ True | ChangeType$ Land SVar:TrigBounce:AB$ ChangeZone | Cost$ 0 | Origin$ Library | Destination$ Battlefield | AtRandom$ True | ChangeType$ Land
SVar:Picture:http://www.cardforge.org/fpics/vgd-lq/hermit_druid_avatar.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/VAN/Hermit Druid Avatar.full.jpg
Oracle:Hand -2, life -2\nAt the beginning of your upkeep, put a land card from your library chosen at random onto the battlefield. Oracle:Hand -2, life -2\nAt the beginning of your upkeep, put a land card from your library chosen at random onto the battlefield.

View File

@@ -4,5 +4,5 @@ Types:Vanguard
HandLifeModifier:-1/+3 HandLifeModifier:-1/+3
T:Mode$ DamageDone | ValidSource$ Creature.nonToken+YouCtrl | ValidTarget$ Opponent | TriggerZones$ Command | CombatDamage$ True | Execute$ TrigChangeZone | TriggerDescription$ Whenever a nontoken creature you control deals combat damage to an opponent, choose a creature card at random from your library, reveal that card, and put it into your hand. Then shuffle your library. T:Mode$ DamageDone | ValidSource$ Creature.nonToken+YouCtrl | ValidTarget$ Opponent | TriggerZones$ Command | CombatDamage$ True | Execute$ TrigChangeZone | TriggerDescription$ Whenever a nontoken creature you control deals combat damage to an opponent, choose a creature card at random from your library, reveal that card, and put it into your hand. Then shuffle your library.
SVar:TrigChangeZone:AB$ ChangeZone | Cost$ 0 | Origin$ Library | Destination$ Hand | AtRandom$ True | ChangeType$ Card.Creature | ChangeNum$ 1 SVar:TrigChangeZone:AB$ ChangeZone | Cost$ 0 | Origin$ Library | Destination$ Hand | AtRandom$ True | ChangeType$ Card.Creature | ChangeNum$ 1
SVar:Picture:http://www.cardforge.org/fpics/vgd-lq/higure_the_still_wind_avatar.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/VAN/Higure, the Still Wind Avatar.full.jpg
Oracle:Hand -1, life +3\nWhenever a nontoken creature you control deals combat damage to an opponent, choose a creature card at random from your library, reveal that card, and put it into your hand. Then shuffle your library. Oracle:Hand -1, life +3\nWhenever a nontoken creature you control deals combat damage to an opponent, choose a creature card at random from your library, reveal that card, and put it into your hand. Then shuffle your library.

View File

@@ -4,6 +4,6 @@ Types:Plane Pyrulea
S:Mode$ Continuous | EffectZone$ Command | Affected$ Permanent | AddHiddenKeyword$ CARDNAME untaps during each other player's untap step. | Description$ All permanents untap during each player's untap step. S:Mode$ Continuous | EffectZone$ Command | Affected$ Permanent | AddHiddenKeyword$ CARDNAME untaps during each other player's untap step. | Description$ All permanents untap during each player's untap step.
T:Mode$ PlanarDice | Result$ Chaos | TriggerZones$ Command | Execute$ DBFetch | TriggerDescription$ Whenever you roll {C}, you may search your library for up to three basic land cards, put them onto the battlefield tapped, then shuffle your library. T:Mode$ PlanarDice | Result$ Chaos | TriggerZones$ Command | Execute$ DBFetch | TriggerDescription$ Whenever you roll {C}, you may search your library for up to three basic land cards, put them onto the battlefield tapped, then shuffle your library.
SVar:DBFetch:DB$ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeNum$ 3 | ShuffleNonMandatory$ True SVar:DBFetch:DB$ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeNum$ 3 | ShuffleNonMandatory$ True
SVar:Picture:http://www.cardforge.org/fpics/lq_planes_promos/horizon_boughs.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/HOP/Horizon Boughs.jpg
SVar:AIRollPlanarDieParams:Mode$ Always | LowPriority$ True | MaxRollsPerTurn$ 9 SVar:AIRollPlanarDieParams:Mode$ Always | LowPriority$ True | MaxRollsPerTurn$ 9
Oracle:All permanents untap during each player's untap step.\nWhenever you roll {C}, you may search your library for up to three basic land cards, put them onto the battlefield tapped, then shuffle your library. Oracle:All permanents untap during each player's untap step.\nWhenever you roll {C}, you may search your library for up to three basic land cards, put them onto the battlefield tapped, then shuffle your library.

View File

@@ -4,5 +4,5 @@ Types:Scheme
T:Mode$ SetInMotion | ValidCard$ Card.Self | Execute$ OppTutor | TriggerZones$ Command | TriggerDescription$ When you set this scheme in motion, each other player searches his or her library for a card, reveals it, and puts it into his or her hand. Then you search your library for two cards and put them into your hand. Each player shuffles his or her library. T:Mode$ SetInMotion | ValidCard$ Card.Self | Execute$ OppTutor | TriggerZones$ Command | TriggerDescription$ When you set this scheme in motion, each other player searches his or her library for a card, reveals it, and puts it into his or her hand. Then you search your library for two cards and put them into your hand. Each player shuffles his or her library.
SVar:OppTutor:AB$ ChangeZone | Cost$ 0 | DefinedPlayer$ Player.Other | Origin$ Library | Destination$ Hand | ChangeType$ Card | ChangeNum$ 1 | Reveal$ True | Mandatory$ True | SubAbility$ MyMagic SVar:OppTutor:AB$ ChangeZone | Cost$ 0 | DefinedPlayer$ Player.Other | Origin$ Library | Destination$ Hand | ChangeType$ Card | ChangeNum$ 1 | Reveal$ True | Mandatory$ True | SubAbility$ MyMagic
SVar:MyMagic:DB$ ChangeZone | DefinedPlayer$ You | Origin$ Library | Destination$ Hand | ChangeType$ Card | ChangeNum$ 2 | Mandatory$ True SVar:MyMagic:DB$ ChangeZone | DefinedPlayer$ You | Origin$ Library | Destination$ Hand | ChangeType$ Card | ChangeNum$ 2 | Mandatory$ True
SVar:Picture:http://www.cardforge.org/fpics/lq_schemes/i_call_on_the_ancient_magics.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/ARC/I Call on the Ancient Magics.full.jpg
Oracle:When you set this scheme in motion, each other player searches his or her library for a card, reveals it, and puts it into his or her hand. Then you search your library for two cards and put them into your hand. Each player shuffles his or her library. Oracle:When you set this scheme in motion, each other player searches his or her library for a card, reveals it, and puts it into his or her hand. Then you search your library for two cards and put them into your hand. Each player shuffles his or her library.

View File

@@ -5,5 +5,5 @@ T:Mode$ SetInMotion | ValidCard$ Card.Self | Execute$ DarkEffect | TriggerZones$
SVar:DarkEffect:AB$ LoseLife | Cost$ 0 | Defined$ Player.Opponent | LifeAmount$ 3 | SubAbility$ DBGainLife SVar:DarkEffect:AB$ LoseLife | Cost$ 0 | Defined$ Player.Opponent | LifeAmount$ 3 | SubAbility$ DBGainLife
SVar:DBGainLife:DB$ GainLife | Defined$ You | LifeAmount$ AFLifeLost | StackDescription$ You gain life equal to the life lost this way. SVar:DBGainLife:DB$ GainLife | Defined$ You | LifeAmount$ AFLifeLost | StackDescription$ You gain life equal to the life lost this way.
SVar:AFLifeLost:Number$0 SVar:AFLifeLost:Number$0
SVar:Picture:http://www.cardforge.org/fpics/lq_schemes/i_delight_in_your_convulsions.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/ARC/I Delight in Your Convulsions.full.jpg
Oracle:When you set this scheme in motion, each opponent loses 3 life. You gain life equal to the life lost this way. Oracle:When you set this scheme in motion, each opponent loses 3 life. You gain life equal to the life lost this way.

View File

@@ -5,5 +5,5 @@ S:Mode$ Continuous | EffectZone$ Command | Affected$ Permanent.YouCtrl | AddHidd
T:Mode$ Phase | Phase$ End of Turn | Execute$ Abandon | TriggerZones$ Command | CheckSVar$ X | SVarCompare$ GE3 | TriggerDescription$ At the beginning of each end step, if three or more cards were put into your graveyard this turn from anywhere, abandon this scheme. T:Mode$ Phase | Phase$ End of Turn | Execute$ Abandon | TriggerZones$ Command | CheckSVar$ X | SVarCompare$ GE3 | TriggerDescription$ At the beginning of each end step, if three or more cards were put into your graveyard this turn from anywhere, abandon this scheme.
SVar:Abandon:AB$ Abandon | Cost$ 0 SVar:Abandon:AB$ Abandon | Cost$ 0
SVar:X:Count$ThisTurnEntered_Graveyard_Card.YouOwn SVar:X:Count$ThisTurnEntered_Graveyard_Card.YouOwn
SVar:Picture:http://www.cardforge.org/fpics/lq_schemes/i_know_all_i_see_all.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/ARC/I Know All, I See All.full.jpg
Oracle:(An ongoing scheme remains face up until it's abandoned.)\nUntap all permanents you control during each opponent's untap step.\nAt the beginning of each end step, if three or more cards were put into your graveyard this turn from anywhere, abandon this scheme. Oracle:(An ongoing scheme remains face up until it's abandoned.)\nUntap all permanents you control during each opponent's untap step.\nAt the beginning of each end step, if three or more cards were put into your graveyard this turn from anywhere, abandon this scheme.

View File

@@ -3,5 +3,5 @@ ManaCost:no cost
Types:Scheme Types:Scheme
T:Mode$ SetInMotion | ValidCard$ Card.Self | Execute$ DarkEffect | TriggerZones$ Command | TriggerDescription$ When you set this scheme in motion, put a token onto the battlefield that's a copy of target permanent an opponent controls. T:Mode$ SetInMotion | ValidCard$ Card.Self | Execute$ DarkEffect | TriggerZones$ Command | TriggerDescription$ When you set this scheme in motion, put a token onto the battlefield that's a copy of target permanent an opponent controls.
SVar:DarkEffect:AB$ CopyPermanent | Cost$ 0 | ValidTgts$ Permanent.OppCtrl | TgtPrompt$ Select target permanent an opponent controls SVar:DarkEffect:AB$ CopyPermanent | Cost$ 0 | ValidTgts$ Permanent.OppCtrl | TgtPrompt$ Select target permanent an opponent controls
SVar:Picture:http://www.cardforge.org/fpics/lq_schemes/ignite_the_cloneforge.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/ARC/Ignite the Cloneforge!.full.jpg
Oracle:When you set this scheme in motion, put a token onto the battlefield that's a copy of target permanent an opponent controls. Oracle:When you set this scheme in motion, put a token onto the battlefield that's a copy of target permanent an opponent controls.

View File

@@ -7,5 +7,5 @@ S:Mode$ Continuous | EffectZone$ Command | Affected$ Permanent.ChosenCtrl | Affe
T:Mode$ Attacks | ValidCard$ Card | Attacked$ Player.Chosen | Execute$ Abandon | TriggerZones$ Command | TriggerDescription$ When the chosen player is attacked or becomes the target of a spell or ability, abandon this scheme. T:Mode$ Attacks | ValidCard$ Card | Attacked$ Player.Chosen | Execute$ Abandon | TriggerZones$ Command | TriggerDescription$ When the chosen player is attacked or becomes the target of a spell or ability, abandon this scheme.
T:Mode$ BecomesTarget | ValidTarget$ Player.Chosen | TriggerZones$ Command | Execute$ Abandon | Secondary$ True | TriggerDescription$ When the chosen player is attacked or becomes the target of a spell or ability, abandon this scheme. T:Mode$ BecomesTarget | ValidTarget$ Player.Chosen | TriggerZones$ Command | Execute$ Abandon | Secondary$ True | TriggerDescription$ When the chosen player is attacked or becomes the target of a spell or ability, abandon this scheme.
SVar:Abandon:AB$ Abandon | Cost$ 0 SVar:Abandon:AB$ Abandon | Cost$ 0
SVar:Picture:http://www.cardforge.org/fpics/lq_schemes/imprison_this_insolent_wretch.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/ARC/Imprison This Insolent Wretch.full.jpg
Oracle:When you set this scheme in motion, choose an opponent.\nPermanents the chosen player controls don't untap during his or her untap step.\nWhen the chosen player is attacked or becomes the target of a spell or ability, abandon this scheme. Oracle:When you set this scheme in motion, choose an opponent.\nPermanents the chosen player controls don't untap during his or her untap step.\nWhen the chosen player is attacked or becomes the target of a spell or ability, abandon this scheme.

View File

@@ -6,5 +6,5 @@ T:Mode$ NewGame | Execute$ TrigDiscard | TriggerZones$ Command | TriggerDescript
SVar:TrigDiscard:AB$ Discard | Cost$ 0 | ValidTgts$ Opponent | Mode$ RevealYouChoose | NumCards$ 1 | DiscardValid$ Card.nonLand SVar:TrigDiscard:AB$ Discard | Cost$ 0 | ValidTgts$ Opponent | Mode$ RevealYouChoose | NumCards$ 1 | DiscardValid$ Card.nonLand
A:AB$ ChangeZone | ActivationZone$ Command | Announce$ X | Cost$ X PayLife<X> | References$ X | ValidTgts$ Creature.OppOwn+cmcEQX | TgtPrompt$ Select target creature with converted mana cost X from an opponent's graveyard | Origin$ Graveyard | Destination$ Battlefield | GainControl$ True | SpellDescription$ Put target creature card with converted mana cost X from an opponent's graveyard onto the battlefield under your control. A:AB$ ChangeZone | ActivationZone$ Command | Announce$ X | Cost$ X PayLife<X> | References$ X | ValidTgts$ Creature.OppOwn+cmcEQX | TgtPrompt$ Select target creature with converted mana cost X from an opponent's graveyard | Origin$ Graveyard | Destination$ Battlefield | GainControl$ True | SpellDescription$ Put target creature card with converted mana cost X from an opponent's graveyard onto the battlefield under your control.
SVar:X:Count$xPaid SVar:X:Count$xPaid
SVar:Picture:http://www.cardforge.org/fpics/vgd-lq/ink_eyes_servant_of_oni_avatar.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/VAN/Ink-Eyes, Servant of Oni Avatar.full.jpg
Oracle:Hand +0, life -3\nAt the beginning of the game, look at target opponent's hand and choose a nonland card from it. That player discards that card.\n{X}, Pay X life: Put target creature card with converted mana cost X from an opponent's graveyard onto the battlefield under your control. Oracle:Hand +0, life -3\nAt the beginning of the game, look at target opponent's hand and choose a nonland card from it. That player discards that card.\n{X}, Pay X life: Put target creature card with converted mana cost X from an opponent's graveyard onto the battlefield under your control.

View File

@@ -5,5 +5,5 @@ T:Mode$ SetInMotion | ValidCard$ Card.Self | Execute$ ExileFlying | TriggerZones
SVar:ExileFlying:AB$ ChangeZone | Cost$ 0 | Origin$ Battlefield | Destination$ Exile | TargetMin$ 0 | TargetMax$ 1 | ValidTgts$ Creature.withFlying | TgtPrompt$ Select target creature with Flying | SubAbility$ ExileWithoutFly SVar:ExileFlying:AB$ ChangeZone | Cost$ 0 | Origin$ Battlefield | Destination$ Exile | TargetMin$ 0 | TargetMax$ 1 | ValidTgts$ Creature.withFlying | TgtPrompt$ Select target creature with Flying | SubAbility$ ExileWithoutFly
SVar:ExileWithoutFly:DB$ ChangeZone | Origin$ Battlefield | Destination$ Exile | TargetMin$ 0 | TargetMax$ 1 | ValidTgts$ Creature.withoutFlying | TgtPrompt$ Select target creature without Flying | SubAbility$ ExileAllYard SVar:ExileWithoutFly:DB$ ChangeZone | Origin$ Battlefield | Destination$ Exile | TargetMin$ 0 | TargetMax$ 1 | ValidTgts$ Creature.withoutFlying | TgtPrompt$ Select target creature without Flying | SubAbility$ ExileAllYard
SVar:ExileAllYard:DB$ ChangeZoneAll | Origin$ Graveyard | Destination$ Exile | TargetMin$ 0 | TargetMax$ 1 | ValidTgts$ Opponent | ChangeType$ Card SVar:ExileAllYard:DB$ ChangeZoneAll | Origin$ Graveyard | Destination$ Exile | TargetMin$ 0 | TargetMax$ 1 | ValidTgts$ Opponent | ChangeType$ Card
SVar:Picture:http://www.cardforge.org/fpics/lq_schemes/into_the_earthen_maw.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/ARC/Into the Earthen Maw.full.jpg
Oracle:When you set this scheme in motion, exile up to one target creature with flying, up to one target creature without flying, and all cards from up to one target opponent's graveyard. Oracle:When you set this scheme in motion, exile up to one target creature with flying, up to one target creature without flying, and all cards from up to one target opponent's graveyard.

View File

@@ -5,5 +5,5 @@ T:Mode$ SetInMotion | ValidCard$ Card.Self | Execute$ TrigCharm | TriggerZones$
SVar:TrigCharm:AB$ Charm | Cost$ 0 | Choices$ DBTutorCreature,DBPutCreature | CharmNum$ 1 SVar:TrigCharm:AB$ Charm | Cost$ 0 | Choices$ DBTutorCreature,DBPutCreature | CharmNum$ 1
SVar:DBTutorCreature:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Card.Creature | ChangeNum$ 1 | SpellDescription$ Search your library for a creature card, reveal it, put it into your hand, then shuffle your library; SVar:DBTutorCreature:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Card.Creature | ChangeNum$ 1 | SpellDescription$ Search your library for a creature card, reveal it, put it into your hand, then shuffle your library;
SVar:DBPutCreature:DB$ ChangeZone | Origin$ Hand | Destination$ Battlefield | ChangeType$ Card.Creature | ChangeNum$ 1 | SpellDescription$ or you may put a creature card from your hand onto the battlefield. SVar:DBPutCreature:DB$ ChangeZone | Origin$ Hand | Destination$ Battlefield | ChangeType$ Card.Creature | ChangeNum$ 1 | SpellDescription$ or you may put a creature card from your hand onto the battlefield.
SVar:Picture:http://www.cardforge.org/fpics/lq_schemes/introductions_are_in_order.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/ARC/Introductions Are in Order.full.jpg
Oracle:When you set this scheme in motion, choose one -\n• Search your library for a creature card, reveal it, put it into your hand, then shuffle your library.\n• You may put a creature card from your hand onto the battlefield. Oracle:When you set this scheme in motion, choose one -\n• Search your library for a creature card, reveal it, put it into your hand, then shuffle your library.\n• You may put a creature card from your hand onto the battlefield.

View File

@@ -5,5 +5,5 @@ HandLifeModifier:+0/+1
A:AB$ DealDamage | ActivationZone$ Command | Cost$ X | ValidTgts$ Creature,Player | TgtPrompt$ Select target creature or player | NumDmg$ Y | References$ X,Y | ActivationLimit$ 1 | StackDescription$ SpellDescription | SpellDescription$ CARDNAME deals an amount of damage chosen at random from 0 to X to target creature or player. Activate this ability only once each turn. A:AB$ DealDamage | ActivationZone$ Command | Cost$ X | ValidTgts$ Creature,Player | TgtPrompt$ Select target creature or player | NumDmg$ Y | References$ X,Y | ActivationLimit$ 1 | StackDescription$ SpellDescription | SpellDescription$ CARDNAME deals an amount of damage chosen at random from 0 to X to target creature or player. Activate this ability only once each turn.
SVar:X:Count$xPaid SVar:X:Count$xPaid
SVar:Y:Count$Random.0.X SVar:Y:Count$Random.0.X
SVar:Picture:http://www.cardforge.org/fpics/vgd-lq/jaya_ballard_avatar.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/VAN/Jaya Ballard Avatar.full.jpg
Oracle:Hand +0, life +1\n{X}: Jaya Ballard Avatar deals an amount of damage chosen at random from 0 to X to target creature or player. Activate this ability only once each turn. Oracle:Hand +0, life +1\n{X}: Jaya Ballard Avatar deals an amount of damage chosen at random from 0 to X to target creature or player. Activate this ability only once each turn.

View File

@@ -4,5 +4,5 @@ Types:Vanguard
HandLifeModifier:+1/+0 HandLifeModifier:+1/+0
A:AB$ Play | Cost$ 3 Discard<1/Card> | ActivationZone$ Command | AnySupportedCard$ Instant | RandomCopied$ True | RandomNum$ 3 | ChoiceNum$ 1 | CopyCard$ True | WithoutManaCost$ True | SpellDescription$ Copy three instant cards chosen at random. You may cast one of the copies without paying its mana cost. A:AB$ Play | Cost$ 3 Discard<1/Card> | ActivationZone$ Command | AnySupportedCard$ Instant | RandomCopied$ True | RandomNum$ 3 | ChoiceNum$ 1 | CopyCard$ True | WithoutManaCost$ True | SpellDescription$ Copy three instant cards chosen at random. You may cast one of the copies without paying its mana cost.
A:AB$ Play | Cost$ 3 Discard<1/Card> | ActivationZone$ Command | AnySupportedCard$ Sorcery | RandomCopied$ True | RandomNum$ 3 | ChoiceNum$ 1 | CopyCard$ True | WithoutManaCost$ True | SorcerySpeed$ True | SpellDescription$ Copy three sorcery cards chosen at random. You may cast one of the copies without paying its mana cost. Activate this ability only any time you could cast a sorcery. A:AB$ Play | Cost$ 3 Discard<1/Card> | ActivationZone$ Command | AnySupportedCard$ Sorcery | RandomCopied$ True | RandomNum$ 3 | ChoiceNum$ 1 | CopyCard$ True | WithoutManaCost$ True | SorcerySpeed$ True | SpellDescription$ Copy three sorcery cards chosen at random. You may cast one of the copies without paying its mana cost. Activate this ability only any time you could cast a sorcery.
SVar:Picture:http://www.cardforge.org/fpics/vgd-lq/jhoira_of_the_ghitu_avatar.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/VAN/Jhoira of the Ghitu Avatar.full.jpg
Oracle:Hand +1, life +0\n{3}, Discard a card: Copy three instant cards chosen at random. You may cast one of the copies without paying its mana cost.\n{3}, Discard a card: Copy three sorcery cards chosen at random. You may cast one of the copies without paying its mana cost. Activate this ability only any time you could cast a sorcery. Oracle:Hand +1, life +0\n{3}, Discard a card: Copy three instant cards chosen at random. You may cast one of the copies without paying its mana cost.\n{3}, Discard a card: Copy three sorcery cards chosen at random. You may cast one of the copies without paying its mana cost. Activate this ability only any time you could cast a sorcery.

View File

@@ -4,5 +4,5 @@ Types:Vanguard
HandLifeModifier:+1/+6 HandLifeModifier:+1/+6
S:Mode$ Continuous | EffectZone$ Command | Affected$ Artifact.nonCreature+YouCtrl | SetPower$ AffectedX | SetToughness$ AffectedX | AddType$ Creature | Description$ Each noncreature artifact you control is an artifact creature with power and toughness each equal to its converted mana cost. S:Mode$ Continuous | EffectZone$ Command | Affected$ Artifact.nonCreature+YouCtrl | SetPower$ AffectedX | SetToughness$ AffectedX | AddType$ Creature | Description$ Each noncreature artifact you control is an artifact creature with power and toughness each equal to its converted mana cost.
SVar:AffectedX:Count$CardManaCost SVar:AffectedX:Count$CardManaCost
SVar:Picture:http://www.cardforge.org/fpics/vgd-lq/karn.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/VAN/Karn.full.jpg
Oracle:Hand +1, life +6\nEach noncreature artifact you control is an artifact creature with power and toughness each equal to its converted mana cost. Oracle:Hand +1, life +6\nEach noncreature artifact you control is an artifact creature with power and toughness each equal to its converted mana cost.

View File

@@ -7,5 +7,5 @@ SVar:TrigExchangeChoose:AB$ ChooseCard | Cost$ 0 | ValidTgts$ Opponent | Choices
SVar:ChooseYou:DB$ ChooseCard | Choices$ Permanent.YouCtrl | Amount$ 1 | AtRandom$ True | RememberChosen$ True | SubAbility$ DBExchange SVar:ChooseYou:DB$ ChooseCard | Choices$ Permanent.YouCtrl | Amount$ 1 | AtRandom$ True | RememberChosen$ True | SubAbility$ DBExchange
SVar:DBExchange:DB$ ExchangeControl | Defined$ Remembered | BothDefined$ True | SubAbility$ DBCleanup SVar:DBExchange:DB$ ExchangeControl | Defined$ Remembered | BothDefined$ True | SubAbility$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:Picture:http://www.cardforge.org/fpics/vgd-lq/karona_false_god_avatar.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/VAN/Karona, False God Avatar.full.jpg
Oracle:Hand -1, life +8\nAt the beginning of your upkeep, exchange control of a permanent you control chosen at random and a permanent target opponent controls chosen at random. Oracle:Hand -1, life +8\nAt the beginning of your upkeep, exchange control of a permanent you control chosen at random and a permanent target opponent controls chosen at random.

View File

@@ -5,5 +5,5 @@ T:Mode$ SetInMotion | ValidCard$ Card.Self | Execute$ DmgAll | TriggerZones$ Com
SVar:DmgAll:AB$ RepeatEach | Cost$ 0 | RepeatPlayers$ Player.Opponent | RepeatSubAbility$ DBDamage SVar:DmgAll:AB$ RepeatEach | Cost$ 0 | RepeatPlayers$ Player.Opponent | RepeatSubAbility$ DBDamage
SVar:DBDamage:DB$ DealDamage | Defined$ Player.IsRemembered | NumDmg$ X | References$ X SVar:DBDamage:DB$ DealDamage | Defined$ Player.IsRemembered | NumDmg$ X | References$ X
SVar:X:PlayerCountRemembered$CardsInHand SVar:X:PlayerCountRemembered$CardsInHand
SVar:Picture:http://www.cardforge.org/fpics/lq_schemes/know_naught_but_fire.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/ARC/Know Naught but Fire.full.jpg
Oracle:When you set this scheme in motion, it deals damage to each opponent equal to the number of cards in that player's hand. Oracle:When you set this scheme in motion, it deals damage to each opponent equal to the number of cards in that player's hand.

View File

@@ -5,5 +5,5 @@ HandLifeModifier:+1/-3
T:Mode$ Devoured | ValidDevoured$ Creature.YouCtrl | TriggerZones$ Command | Execute$ TrigToken | TriggerDescription$ Whenever a creature you control is devoured, put an X/X green Ooze creature token onto the battlefield, where X is the devoured creature's power. T:Mode$ Devoured | ValidDevoured$ Creature.YouCtrl | TriggerZones$ Command | Execute$ TrigToken | TriggerDescription$ Whenever a creature you control is devoured, put an X/X green Ooze creature token onto the battlefield, where X is the devoured creature's power.
SVar:TrigToken:AB$ Token | Cost$ 0 | TokenAmount$ 1 | TokenName$ Ooze | TokenTypes$ Creature,Ooze | TokenOwner$ You | TokenColors$ Green | TokenPower$ X | TokenToughness$ X | References$ X | TokenImage$ g x x ooze rtr | SpellDescription$ Put an X/X green Ooze creature token onto the battlefield. SVar:TrigToken:AB$ Token | Cost$ 0 | TokenAmount$ 1 | TokenName$ Ooze | TokenTypes$ Creature,Ooze | TokenOwner$ You | TokenColors$ Green | TokenPower$ X | TokenToughness$ X | References$ X | TokenImage$ g x x ooze rtr | SpellDescription$ Put an X/X green Ooze creature token onto the battlefield.
SVar:X:TriggeredDevoured$CardPower SVar:X:TriggeredDevoured$CardPower
SVar:Picture:http://www.cardforge.org/fpics/vgd-lq/kresh_the_bloodbraided_avatar.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/VAN/Kresh the Bloodbraided Avatar.full.jpg
Oracle:Hand +1, life -3\nWhenever a creature you control is devoured, put an X/X green Ooze creature token onto the battlefield, where X is the devoured creature's power. Oracle:Hand +1, life -3\nWhenever a creature you control is devoured, put an X/X green Ooze creature token onto the battlefield, where X is the devoured creature's power.

View File

@@ -3,5 +3,5 @@ ManaCost:no cost
Types:Scheme Types:Scheme
T:Mode$ SetInMotion | ValidCard$ Card.Self | Execute$ DarkEffect | TriggerZones$ Command | TriggerDescription$ When you set this scheme in motion, put a 5/5 red Dragon creature token with flying onto the battlefield. T:Mode$ SetInMotion | ValidCard$ Card.Self | Execute$ DarkEffect | TriggerZones$ Command | TriggerDescription$ When you set this scheme in motion, put a 5/5 red Dragon creature token with flying onto the battlefield.
SVar:DarkEffect:AB$ Token | Cost$ 0 | TokenAmount$ 1 | TokenName$ Dragon | TokenTypes$ Creature,Dragon | TokenOwner$ You | TokenColors$ Red | TokenPower$ 5 | TokenToughness$ 5 | TokenKeywords$ Flying SVar:DarkEffect:AB$ Token | Cost$ 0 | TokenAmount$ 1 | TokenName$ Dragon | TokenTypes$ Creature,Dragon | TokenOwner$ You | TokenColors$ Red | TokenPower$ 5 | TokenToughness$ 5 | TokenKeywords$ Flying
SVar:Picture:http://www.cardforge.org/fpics/lq_schemes/look_skyward_and_despair.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/ARC/Look Skyward and Despair.full.jpg
Oracle:When you set this scheme in motion, put a 5/5 red Dragon creature token with flying onto the battlefield. Oracle:When you set this scheme in motion, put a 5/5 red Dragon creature token with flying onto the battlefield.

View File

@@ -3,5 +3,5 @@ ManaCost:no cost
Types:Vanguard Types:Vanguard
HandLifeModifier:+0/+12 HandLifeModifier:+0/+12
A:AB$ Regenerate | ActivationZone$ Command | Cost$ Sac<1/Permanent> | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control | SpellDescription$ Regenerate target creature you control. A:AB$ Regenerate | ActivationZone$ Command | Cost$ Sac<1/Permanent> | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control | SpellDescription$ Regenerate target creature you control.
SVar:Picture:http://www.cardforge.org/fpics/vgd-lq/loxodon_hierarch_avatar.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/VAN/Loxodon Hierarch Avatar.full.jpg
Oracle:Hand +0, life +12\nSacrifice a permanent: Regenerate target creature you control. Oracle:Hand +0, life +12\nSacrifice a permanent: Regenerate target creature you control.

View File

@@ -3,5 +3,5 @@ ManaCost:no cost
Types:Vanguard Types:Vanguard
HandLifeModifier:+2/-4 HandLifeModifier:+2/-4
S:Mode$ Continuous | EffectZone$ Command | Affected$ Creature.YouCtrl | AddKeyword$ Shadow | Description$ Creatures you control have shadow. (They can block and be blocked only by creatures with shadow.) S:Mode$ Continuous | EffectZone$ Command | Affected$ Creature.YouCtrl | AddKeyword$ Shadow | Description$ Creatures you control have shadow. (They can block and be blocked only by creatures with shadow.)
SVar:Picture:http://www.cardforge.org/fpics/vgd-lq/lyna.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/VAN/Lyna.full.jpg
Oracle:Hand +2, life -4\nCreatures you control have shadow. (They can block and be blocked only by creatures with shadow.) Oracle:Hand +2, life -4\nCreatures you control have shadow. (They can block and be blocked only by creatures with shadow.)

View File

@@ -9,5 +9,5 @@ SVar:DmgTwiceCombat:AB$ DealDamage | Cost$ 0 | CombatDamage$ True | Defined$ Rep
SVar:X:ReplaceCount$DamageAmount/Twice SVar:X:ReplaceCount$DamageAmount/Twice
T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Command | Hellbent$ True | Execute$ LyzoldasDiscard | TriggerDescription$ Hellbent - At the beginning of your end step, if you have no cards in hand, each of your opponents discards a card. T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Command | Hellbent$ True | Execute$ LyzoldasDiscard | TriggerDescription$ Hellbent - At the beginning of your end step, if you have no cards in hand, each of your opponents discards a card.
SVar:LyzoldasDiscard:AB$ Discard | Cost$ 0 | Defined$ Player.Opponent | NumCards$ 1 | Mode$ TgtChoose SVar:LyzoldasDiscard:AB$ Discard | Cost$ 0 | Defined$ Player.Opponent | NumCards$ 1 | Mode$ TgtChoose
SVar:Picture:http://www.cardforge.org/fpics/vgd-lq/lyzolda_the_blood_witch_avatar.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/VAN/Lyzolda, the Blood Witch Avatar.full.jpg
Oracle:Hand -1, life -1\nHellbent - As long as you have no cards in hand, if a source you control would deal damage to a creature or player, it deals double that damage to that creature or player instead.\nHellbent - At the beginning of your end step, if you have no cards in hand, each of your opponents discards a card. Oracle:Hand -1, life -1\nHellbent - As long as you have no cards in hand, if a source you control would deal damage to a creature or player, it deals double that damage to that creature or player instead.\nHellbent - At the beginning of your end step, if you have no cards in hand, each of your opponents discards a card.

View File

@@ -11,5 +11,5 @@ T:Mode$ Phase | Phase$ Draw | ValidPlayer$ You | TriggerZones$ Command | Execute
SVar:TrigDig:AB$ Dig | Cost$ 0 | DigNum$ LifePaidOnNewGame | References$ LifePaidOnNewGame | ChangeNum$ 1 | LibraryPosition$ 0 | SubAbility$ DBShuffle SVar:TrigDig:AB$ Dig | Cost$ 0 | DigNum$ LifePaidOnNewGame | References$ LifePaidOnNewGame | ChangeNum$ 1 | LibraryPosition$ 0 | SubAbility$ DBShuffle
SVar:DBShuffle:DB$ Shuffle | Defined$ You SVar:DBShuffle:DB$ Shuffle | Defined$ You
SVar:RemAIDeck:True SVar:RemAIDeck:True
SVar:Picture:http://www.cardforge.org/fpics/vgd-lq/maralen_of_the_mornsong_avatar.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/VAN/Maralen of the Mornsong Avatar.full.jpg
Oracle:Hand +0, life -3\nAt the beginning of the game, you may pay any amount of life.\nYou can't draw cards.\nAt the beginning of your draw step, look at the top X cards of your library, where X is the amount of life paid with Maralen of the Mornsong Avatar. Put one of them into your hand, then shuffle your library. Oracle:Hand +0, life -3\nAt the beginning of the game, you may pay any amount of life.\nYou can't draw cards.\nAt the beginning of your draw step, look at the top X cards of your library, where X is the amount of life paid with Maralen of the Mornsong Avatar. Put one of them into your hand, then shuffle your library.

View File

@@ -3,5 +3,5 @@ ManaCost:no cost
Types:Vanguard Types:Vanguard
HandLifeModifier:+1/+2 HandLifeModifier:+1/+2
S:Mode$ Continuous | EffectZone$ Command | Affected$ Creature.YouCtrl | AddPower$ 1 | Description$ Creatures you control get +1/+0. S:Mode$ Continuous | EffectZone$ Command | Affected$ Creature.YouCtrl | AddPower$ 1 | Description$ Creatures you control get +1/+0.
SVar:Picture:http://www.cardforge.org/fpics/vgd-lq/maraxus.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/VAN/Maraxus.full.jpg
Oracle:Hand +1, life +2\nCreatures you control get +1/+0. Oracle:Hand +1, life +2\nCreatures you control get +1/+0.

View File

@@ -4,6 +4,6 @@ Types:Vanguard
HandLifeModifier:+2/-7 HandLifeModifier:+2/-7
A:AB$ Pump | Cost$ tapXType<1/Creature> Discard<1/Card> | ActivationZone$ Command | ValidTgts$ Creature | NumAtt$ +X | NumDef$ +X | SpellDescription$ Target creature you control gets +X/+X until end of turn, where X is the number of cards in your hand. A:AB$ Pump | Cost$ tapXType<1/Creature> Discard<1/Card> | ActivationZone$ Command | ValidTgts$ Creature | NumAtt$ +X | NumDef$ +X | SpellDescription$ Target creature you control gets +X/+X until end of turn, where X is the number of cards in your hand.
SVar:X:Count$InYourHand SVar:X:Count$InYourHand
SVar:Picture:http://www.cardforge.org/fpics/vgd-lq/maro_avatar.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/VAN/Maro Avatar.full.jpg
SVar:RemAIDeck:True SVar:RemAIDeck:True
Oracle:Hand +2, life -7\nTap an untapped creature you control, Discard a card: Target creature you control gets +X/+X until end of turn, where X is the number of cards in your hand. Oracle:Hand +2, life -7\nTap an untapped creature you control, Discard a card: Target creature you control gets +X/+X until end of turn, where X is the number of cards in your hand.

View File

@@ -7,5 +7,5 @@ SVar:Wolf:DB$ Token | TokenAmount$ 1 | TokenName$ Wolf | TokenTypes$ Creature,Wo
SVar:Antelope:DB$ Token | TokenAmount$ 1 | TokenName$ Antelope | TokenTypes$ Creature,Antelope | TokenOwner$ You | TokenColors$ Green | TokenPower$ 2 | TokenToughness$ 3 | TokenKeywords$ Forestwalk | SpellDescription$ Antelope SVar:Antelope:DB$ Token | TokenAmount$ 1 | TokenName$ Antelope | TokenTypes$ Creature,Antelope | TokenOwner$ You | TokenColors$ Green | TokenPower$ 2 | TokenToughness$ 3 | TokenKeywords$ Forestwalk | SpellDescription$ Antelope
SVar:Cat:DB$ Token | TokenAmount$ 1 | TokenName$ Cat | TokenTypes$ Creature,Cat | TokenOwner$ You | TokenColors$ Green | TokenPower$ 3 | TokenToughness$ 2 | TokenKeywords$ Shroud | SpellDescription$ Cat SVar:Cat:DB$ Token | TokenAmount$ 1 | TokenName$ Cat | TokenTypes$ Creature,Cat | TokenOwner$ You | TokenColors$ Green | TokenPower$ 3 | TokenToughness$ 2 | TokenKeywords$ Shroud | SpellDescription$ Cat
SVar:Rhino:DB$ Token | TokenAmount$ 1 | TokenName$ Rhino | TokenTypes$ Creature,Rhino | TokenOwner$ You | TokenColors$ Green | TokenPower$ 4 | TokenToughness$ 4 | TokenKeywords$ Trample | SpellDescription$ Rhino SVar:Rhino:DB$ Token | TokenAmount$ 1 | TokenName$ Rhino | TokenTypes$ Creature,Rhino | TokenOwner$ You | TokenColors$ Green | TokenPower$ 4 | TokenToughness$ 4 | TokenKeywords$ Trample | SpellDescription$ Rhino
SVar:Picture:http://www.cardforge.org/fpics/vgd-lq/master_of_the_wild_hunt_avatar.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/VAN/Master of the Wild Hunt Avatar.full.jpg
Oracle:Hand +1, life +3\n{2}{G}: Put a green creature token onto the battlefield that's a 2/2 Wolf, a 2/3 Antelope with forestwalk, a 3/2 Cat with shroud, or a 4/4 Rhino with trample, chosen at random. Oracle:Hand +1, life +3\n{2}{G}: Put a green creature token onto the battlefield that's a 2/2 Wolf, a 2/3 Antelope with forestwalk, a 3/2 Cat with shroud, or a 4/4 Rhino with trample, chosen at random.

View File

@@ -7,5 +7,5 @@ SVar:TrigDig:AB$ Dig | Cost$ 0 | DigNum$ 1 | Reveal$ True | ChangeNum$ All | Cha
SVar:DBDig:DB$ Dig | DigNum$ 1 | DestinationZone$ Library | Optional$ True | LibraryPosition$ -1 | LibraryPosition2$ 0 | ConditionCheckSVar$ X | ConditionSVarCompare$ EQ0 | SubAbility$ DBCleanup | References$ X SVar:DBDig:DB$ Dig | DigNum$ 1 | DestinationZone$ Library | Optional$ True | LibraryPosition$ -1 | LibraryPosition2$ 0 | ConditionCheckSVar$ X | ConditionSVarCompare$ EQ0 | SubAbility$ DBCleanup | References$ X
SVar:X:Remembered$Amount SVar:X:Remembered$Amount
SVar:DBCleanup:DB$Cleanup | ClearRemembered$ True SVar:DBCleanup:DB$Cleanup | ClearRemembered$ True
SVar:Picture:http://www.cardforge.org/fpics/vgd-lq/mayael_the_anima_avatar.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/VAN/Mayael the Anima Avatar.full.jpg
Oracle:Hand +1, life +5\nAt the beginning of your upkeep, reveal the top card of your library. If it's a creature card with power 5 or greater, put it into your hand. Otherwise, you may put it on the bottom of your library. Oracle:Hand +1, life +5\nAt the beginning of your upkeep, reveal the top card of your library. If it's a creature card with power 5 or greater, put it into your hand. Otherwise, you may put it on the bottom of your library.

View File

@@ -5,5 +5,5 @@ HandLifeModifier:+0/+5
R:Event$ ProduceMana | ActiveZones$ Command | ValidCard$ Land.Basic+YouCtrl | ManaReplacement$ ProduceAny | Description$ If a basic land you control is tapped for mana, it produces mana of a color of your choice instead of any other type. R:Event$ ProduceMana | ActiveZones$ Command | ValidCard$ Land.Basic+YouCtrl | ManaReplacement$ ProduceAny | Description$ If a basic land you control is tapped for mana, it produces mana of a color of your choice instead of any other type.
SVar:ProduceAny:Colorless->Any & B->Any & R->Any & G->Any & W->Any & U->Any SVar:ProduceAny:Colorless->Any & B->Any & R->Any & G->Any & W->Any & U->Any
SVar:RemAIDeck:True SVar:RemAIDeck:True
SVar:Picture:http://www.cardforge.org/fpics/vgd-lq/mirri.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/VAN/Mirri.full.jpg
Oracle:Hand +0, life +5\nIf a basic land you control is tapped for mana, it produces mana of a color of your choice instead of any other type. Oracle:Hand +0, life +5\nIf a basic land you control is tapped for mana, it produces mana of a color of your choice instead of any other type.

View File

@@ -5,5 +5,5 @@ HandLifeModifier:-2/-3
S:Mode$ Continuous | EffectZone$ Command | AffectedZone$ Battlefield | Affected$ Creature.YouCtrl | AddAbility$ MirriPump | AddSVar$ MirriPutCounter | Description$ Creatures you control have "{T}: Another target creature gets -1/-1 until end of turn. Put a +1/+1 counter on this creature." S:Mode$ Continuous | EffectZone$ Command | AffectedZone$ Battlefield | Affected$ Creature.YouCtrl | AddAbility$ MirriPump | AddSVar$ MirriPutCounter | Description$ Creatures you control have "{T}: Another target creature gets -1/-1 until end of turn. Put a +1/+1 counter on this creature."
SVar:MirriPump:AB$ Pump | Cost$ T | ValidTgts$ Creature.Other | NumAtt$ -1 | NumDef$ -1 | SubAbility$ MirriPutCounter | SpellDescription$ Another target creature gets -1/-1 until end of turn. Put a +1/+1 counter on this creature. SVar:MirriPump:AB$ Pump | Cost$ T | ValidTgts$ Creature.Other | NumAtt$ -1 | NumDef$ -1 | SubAbility$ MirriPutCounter | SpellDescription$ Another target creature gets -1/-1 until end of turn. Put a +1/+1 counter on this creature.
SVar:MirriPutCounter:DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ 1 SVar:MirriPutCounter:DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ 1
SVar:Picture:http://www.cardforge.org/fpics/vgd-lq/mirri_the_cursed_avatar.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/VAN/Mirri the Cursed Avatar.full.jpg
Oracle:Hand -2, life -3\nCreatures you control have "{T}: Another target creature gets -1/-1 until end of turn. Put a +1/+1 counter on this creature." Oracle:Hand -2, life -3\nCreatures you control have "{T}: Another target creature gets -1/-1 until end of turn. Put a +1/+1 counter on this creature."

View File

@@ -6,5 +6,5 @@ A:AB$ ChooseType | ActivationZone$ Command | Cost$ X | Defined$ You | Type$ Crea
SVar:DBAnimate:DB$ AnimateAll | Power$ X | Toughness$ X | References$ X | Types$ AllCreatureTypes | ValidCards$ Creature.YouCtrl+ChosenType SVar:DBAnimate:DB$ AnimateAll | Power$ X | Toughness$ X | References$ X | Types$ AllCreatureTypes | ValidCards$ Creature.YouCtrl+ChosenType
SVar:X:Count$xPaid SVar:X:Count$xPaid
SVar:RemAIDeck:True SVar:RemAIDeck:True
SVar:Picture:http://www.cardforge.org/fpics/vgd-lq/mirror_entity_avatar.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/VAN/Mirror Entity Avatar.full.jpg
Oracle:Hand +1, life -2\n{X}: Choose a creature type. Until end of turn, creatures you control of the chosen type become X/X and gain all creature types. Oracle:Hand +1, life -2\n{X}: Choose a creature type. Until end of turn, creatures you control of the chosen type become X/X and gain all creature types.

View File

@@ -7,5 +7,5 @@ R:Event$ DamageDone | ActiveZones$ Command | ValidSource$ Creature.YouCtrl | Rep
SVar:DmgTimes2:AB$ DealDamage | Cost$ 0 | Defined$ ReplacedTarget | DamageSource$ ReplacedSource | NumDmg$ X | References$ X SVar:DmgTimes2:AB$ DealDamage | Cost$ 0 | Defined$ ReplacedTarget | DamageSource$ ReplacedSource | NumDmg$ X | References$ X
SVar:DmgTimes2Combat:AB$ DealDamage | Cost$ 0 | CombatDamage$ True | Defined$ ReplacedTarget | DamageSource$ ReplacedSource | NumDmg$ X | References$ X SVar:DmgTimes2Combat:AB$ DealDamage | Cost$ 0 | CombatDamage$ True | Defined$ ReplacedTarget | DamageSource$ ReplacedSource | NumDmg$ X | References$ X
SVar:X:ReplaceCount$DamageAmount/Twice SVar:X:ReplaceCount$DamageAmount/Twice
SVar:Picture:http://www.cardforge.org/fpics/vgd-lq/mishra.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/VAN/Mishra.full.jpg
Oracle:Hand +0, life -3\nIf a creature you control would deal damage, it deals double that damage instead. Oracle:Hand +0, life -3\nIf a creature you control would deal damage, it deals double that damage instead.

View File

@@ -5,5 +5,5 @@ HandLifeModifier:+0/+4
A:AB$ NameCard | Cost$ X Discard<1/Card> | AILogic$ MomirAvatar | ActivationZone$ Command | AtRandom$ True | ValidCards$ Creature | ValidAttribute$ cmcEQX | References$ X | Amount$ 1 | SubAbility$ DBToken | SorcerySpeed$ True | ActivationLimit$ 1 | AILogic$ MomirAvatar | SpellDescription$ Put a token onto the battlefield that's a copy of a creature card with converted mana cost X chosen at random. Activate this ability only any time you could cast a sorcery and only once each turn. | StackDescription$ SpellDescription A:AB$ NameCard | Cost$ X Discard<1/Card> | AILogic$ MomirAvatar | ActivationZone$ Command | AtRandom$ True | ValidCards$ Creature | ValidAttribute$ cmcEQX | References$ X | Amount$ 1 | SubAbility$ DBToken | SorcerySpeed$ True | ActivationLimit$ 1 | AILogic$ MomirAvatar | SpellDescription$ Put a token onto the battlefield that's a copy of a creature card with converted mana cost X chosen at random. Activate this ability only any time you could cast a sorcery and only once each turn. | StackDescription$ SpellDescription
SVar:DBToken:DB$ CopyPermanent | ValidSupportedCopy$ Card | DefinedName$ NamedCard | NumCopies$ 1 | StackDescription$ SVar:DBToken:DB$ CopyPermanent | ValidSupportedCopy$ Card | DefinedName$ NamedCard | NumCopies$ 1 | StackDescription$
SVar:X:Count$xPaid SVar:X:Count$xPaid
SVar:Picture:http://www.cardforge.org/fpics/vgd-lq/momir_vig_simic_visionary_avatar.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/VAN/Momir Vig, Simic Visionary Avatar.full.jpg
Oracle:Hand +0, life +4\n{X}, Discard a card: Put a token onto the battlefield that's a copy of a creature card with converted mana cost X chosen at random. Activate this ability only any time you could cast a sorcery and only once each turn. Oracle:Hand +0, life +4\n{X}, Discard a card: Put a token onto the battlefield that's a copy of a creature card with converted mana cost X chosen at random. Activate this ability only any time you could cast a sorcery and only once each turn.

View File

@@ -7,5 +7,5 @@ SVar:TrigLoseLife:AB$ LoseLife | Cost$ 0 | Defined$ You | LifeAmount$ Ouch
SVar:Ouch:Count$Valid Permanent.YouCtrl SVar:Ouch:Count$Valid Permanent.YouCtrl
SVar:RemAIDeck:True SVar:RemAIDeck:True
SVar:RemRandomDeck:True SVar:RemRandomDeck:True
SVar:Picture:http://www.cardforge.org/fpics/vgd-lq/morinfen_avatar.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/VAN/Morinfen Avatar.full.jpg
Oracle:Hand +0, life +30\nAt the beginning of your upkeep, you lose 1 life for each permanent you control. Oracle:Hand +0, life +30\nAt the beginning of your upkeep, you lose 1 life for each permanent you control.

View File

@@ -4,5 +4,5 @@ Types:Scheme
T:Mode$ SetInMotion | ValidCard$ Card.Self | Execute$ ShowTheWeakness | TriggerZones$ Command | TriggerDescription$ When you set this scheme in motion, each opponent's life total becomes the lowest life total among your opponents. T:Mode$ SetInMotion | ValidCard$ Card.Self | Execute$ ShowTheWeakness | TriggerZones$ Command | TriggerDescription$ When you set this scheme in motion, each opponent's life total becomes the lowest life total among your opponents.
SVar:ShowTheWeakness:AB$ SetLife | Cost$ 0 | Defined$ Player.Opponent | LifeAmount$ X | References$ X SVar:ShowTheWeakness:AB$ SetLife | Cost$ 0 | Defined$ Player.Opponent | LifeAmount$ X | References$ X
SVar:X:PlayerCountOpponents$LowestLifeTotal SVar:X:PlayerCountOpponents$LowestLifeTotal
SVar:Picture:http://www.cardforge.org/fpics/lq_schemes/mortal_flesh_is_weak.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/ARC/Mortal Flesh Is Weak.full.jpg
Oracle:When you set this scheme in motion, each opponent's life total becomes the lowest life total among your opponents. Oracle:When you set this scheme in motion, each opponent's life total becomes the lowest life total among your opponents.

View File

@@ -4,5 +4,5 @@ Types:Vanguard
HandLifeModifier:-3/-2 HandLifeModifier:-3/-2
S:Mode$ Continuous | EffectZone$ Command | Affected$ Creature.YouCtrl | AddPower$ X | References$ X | Description$ Creatures you control get +X/+0, where X is the number of cards in your hand. S:Mode$ Continuous | EffectZone$ Command | Affected$ Creature.YouCtrl | AddPower$ X | References$ X | Description$ Creatures you control get +X/+0, where X is the number of cards in your hand.
SVar:X:Count$CardsInYourHand SVar:X:Count$CardsInYourHand
SVar:Picture:http://www.cardforge.org/fpics/vgd-lq/multani.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/VAN/Multani.full.jpg
Oracle:Hand -3, life -2\nCreatures you control get +X/+0, where X is the number of cards in your hand. Oracle:Hand -3, life -2\nCreatures you control get +X/+0, where X is the number of cards in your hand.

View File

@@ -5,5 +5,5 @@ HandLifeModifier:+0/-2
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature.YouCtrl+HasCounters | TriggerZones$ Command | Execute$ TrigDamage | TriggerDescription$ Whenever a creature enters the battlefield under your control with a counter on it, you may have it deal damage equal to its power to target creature or player. T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature.YouCtrl+HasCounters | TriggerZones$ Command | Execute$ TrigDamage | TriggerDescription$ Whenever a creature enters the battlefield under your control with a counter on it, you may have it deal damage equal to its power to target creature or player.
SVar:TrigDamage:AB$ DealDamage | Cost$ 0 | ValidTgts$ Creature,Player | TgtPrompt$ Select target creature or player | DamageSource$ TriggeredCard | NumDmg$ Damage | References$ Damage SVar:TrigDamage:AB$ DealDamage | Cost$ 0 | ValidTgts$ Creature,Player | TgtPrompt$ Select target creature or player | DamageSource$ TriggeredCard | NumDmg$ Damage | References$ Damage
SVar:Damage:TriggeredCard$CardPower SVar:Damage:TriggeredCard$CardPower
SVar:Picture:http://www.cardforge.org/fpics/vgd-lq/murderous_redcap_avatar.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/VAN/Murderous Redcap Avatar.full.jpg
Oracle:Hand +0, life -2\nWhenever a creature enters the battlefield under your control with a counter on it, you may have it deal damage equal to its power to target creature or player. Oracle:Hand +0, life -2\nWhenever a creature enters the battlefield under your control with a counter on it, you may have it deal damage equal to its power to target creature or player.

View File

@@ -5,5 +5,5 @@ T:Mode$ SetInMotion | ValidCard$ Card.Self | Execute$ GeniusLife | TriggerZones$
SVar:GeniusLife:AB$ GainLife | Cost$ X | Defined$ You | LifeAmount$ X | SubAbility$ GeniusCards SVar:GeniusLife:AB$ GainLife | Cost$ X | Defined$ You | LifeAmount$ X | SubAbility$ GeniusCards
SVar:GeniusCards:DB$ Draw | Defined$ You | NumCards$ X SVar:GeniusCards:DB$ Draw | Defined$ You | NumCards$ X
SVar:X:Count$xPaid SVar:X:Count$xPaid
SVar:Picture:http://www.cardforge.org/fpics/lq_schemes/my_genius_knows_no_bounds.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/ARC/My Genius Knows No Bounds.full.jpg
Oracle:When you set this scheme in motion, you may pay {X}. If you do, you gain X life and draw X cards. Oracle:When you set this scheme in motion, you may pay {X}. If you do, you gain X life and draw X cards.

View File

@@ -5,5 +5,5 @@ T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Command |
SVar:TrigNecromancy:AB$ ChangeZone | Cost$ 0 | ValidTgts$ Creature.OppCtrl | Origin$ Graveyard | Destination$ Battlefield | GainControl$ True | RememberChanged$ True SVar:TrigNecromancy:AB$ ChangeZone | Cost$ 0 | ValidTgts$ Creature.OppCtrl | Origin$ Graveyard | Destination$ Battlefield | GainControl$ True | RememberChanged$ True
T:Mode$ ChangesZone | ValidCard$ Creature.IsRemembered | Origin$ Battlefield | Destination$ Graveyard | Execute$ TrigAbandon | TriggerZones$ Command | TriggerDescription$ When a creature put onto the battlefield with this scheme dies, abandon this scheme. T:Mode$ ChangesZone | ValidCard$ Creature.IsRemembered | Origin$ Battlefield | Destination$ Graveyard | Execute$ TrigAbandon | TriggerZones$ Command | TriggerDescription$ When a creature put onto the battlefield with this scheme dies, abandon this scheme.
SVar:TrigAbandon:AB$ Abandon | Cost$ 0 SVar:TrigAbandon:AB$ Abandon | Cost$ 0
SVar:Picture:http://www.cardforge.org/fpics/lq_schemes/my_undead_horde_awakens.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/ARC/My Undead Horde Awakens.full.jpg
Oracle:(An ongoing scheme remains face up until it's abandoned.)\nAt the beginning of your end step, you may put target creature card from an opponent's graveyard onto the battlefield under your control.\nWhen a creature put onto the battlefield with this scheme dies, abandon this scheme. Oracle:(An ongoing scheme remains face up until it's abandoned.)\nAt the beginning of your end step, you may put target creature card from an opponent's graveyard onto the battlefield under your control.\nWhen a creature put onto the battlefield with this scheme dies, abandon this scheme.

View File

@@ -5,5 +5,5 @@ T:Mode$ SetInMotion | ValidCard$ Card.Self | Execute$ MyWish | TriggerZones$ Com
SVar:MyWish:AB$ RevealHand | Cost$ 0 | Defined$ Player.Opponent | RememberRevealed$ True | SubAbility$ MyPleasure SVar:MyWish:AB$ RevealHand | Cost$ 0 | Defined$ Player.Opponent | RememberRevealed$ True | SubAbility$ MyPleasure
SVar:MyPleasure:DB$ Play | Valid$ Card.nonCreature+nonLand+IsRemembered | WithoutManaCost$ True | Optional$ True | SubAbility$ DBCleanup SVar:MyPleasure:DB$ Play | Valid$ Card.nonCreature+nonLand+IsRemembered | WithoutManaCost$ True | Optional$ True | SubAbility$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:Picture:http://www.cardforge.org/fpics/lq_schemes/my_wish_is_your_command.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/ARC/My Wish Is Your Command.full.jpg
Oracle:When you set this scheme in motion, each opponent reveals his or her hand. You may choose a noncreature, nonland card revealed this way and cast it without paying its mana cost. Oracle:When you set this scheme in motion, each opponent reveals his or her hand. You may choose a noncreature, nonland card revealed this way and cast it without paying its mana cost.

View File

@@ -16,5 +16,5 @@ SVar:BounceLand:DB$ ChangeZone | Defined$ ChosenCard | Origin$ Battlefield | Des
SVar:DBRemember4:DB$ Pump | RememberObjects$ ImprintedOwner | SubAbility$ DBShuffle SVar:DBRemember4:DB$ Pump | RememberObjects$ ImprintedOwner | SubAbility$ DBShuffle
SVar:DBShuffle:DB$ Shuffle | Defined$ Remembered | SubAbility$ DBCleanup SVar:DBShuffle:DB$ Shuffle | Defined$ Remembered | SubAbility$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | ClearImprinted$ True SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | ClearImprinted$ True
SVar:Picture:http://www.cardforge.org/fpics/lq_schemes/nature_demands_an_offering.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/ARC/Nature Demands an Offering.full.jpg
Oracle:When you set this scheme in motion, target opponent chooses a creature you don't control and puts it on top of its owner's library, then repeats this process for an artifact, an enchantment, and a land. Then the owner of each permanent chosen this way shuffles his or her library. Oracle:When you set this scheme in motion, target opponent chooses a creature you don't control and puts it on top of its owner's library, then repeats this process for an artifact, an enchantment, and a land. Then the owner of each permanent chosen this way shuffles his or her library.

View File

@@ -7,5 +7,5 @@ T:Mode$ AttackersDeclared | DelayedTrigger$ DelTrigEOC | CheckSVar$ NatureShield
SVar:DelTrigEOC:Mode$ Phase | Phase$ EndCombat | ValidPlayer$ Player | Execute$ Abandon | TriggerDescription$ Abandon this scheme at end of combat. SVar:DelTrigEOC:Mode$ Phase | Phase$ EndCombat | ValidPlayer$ Player | Execute$ Abandon | TriggerDescription$ Abandon this scheme at end of combat.
SVar:Abandon:AB$ Abandon | Cost$ 0 SVar:Abandon:AB$ Abandon | Cost$ 0
SVar:NatureShields:Count$Valid Creature.attackingYou SVar:NatureShields:Count$Valid Creature.attackingYou
SVar:Picture:http://www.cardforge.org/fpics/lq_schemes/nature_shields_its_own.jpg SVar:Picture:http://downloads.cardforge.link/images/cards/ARC/Nature Shields Its Own.full.jpg
Oracle:(An ongoing scheme remains face up until it's abandoned.)\nWhenever a creature attacks and isn't blocked, if you're the defending player, put a 0/1 green Plant creature token onto the battlefield blocking that creature.\nWhen four or more creatures attack you, abandon this scheme at end of combat. Oracle:(An ongoing scheme remains face up until it's abandoned.)\nWhenever a creature attacks and isn't blocked, if you're the defending player, put a 0/1 green Plant creature token onto the battlefield blocking that creature.\nWhen four or more creatures attack you, abandon this scheme at end of combat.

Some files were not shown because too many files have changed in this diff Show More