mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-14 17:58:01 +00:00
Moved images from cardforge.org to cardforge.link and added missing sets/some product images.
This commit is contained in:
1
.gitattributes
vendored
1
.gitattributes
vendored
@@ -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
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)."),
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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."
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.)
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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."
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.)
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.)
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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."
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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
Reference in New Issue
Block a user