mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-18 19:58:00 +00:00
Merge remote-tracking branch 'upstream/master'
This commit is contained in:
@@ -54,11 +54,11 @@ public class StaticData {
|
|||||||
|
|
||||||
private static StaticData lastInstance = null;
|
private static StaticData lastInstance = null;
|
||||||
|
|
||||||
public StaticData(CardStorageReader cardReader, String editionFolder, String blockDataFolder) {
|
public StaticData(CardStorageReader cardReader, String editionFolder, String blockDataFolder, boolean enableUnknownCards) {
|
||||||
this(cardReader, null, editionFolder, blockDataFolder);
|
this(cardReader, null, editionFolder, blockDataFolder, enableUnknownCards);
|
||||||
}
|
}
|
||||||
|
|
||||||
public StaticData(CardStorageReader cardReader, CardStorageReader tokenReader, String editionFolder, String blockDataFolder) {
|
public StaticData(CardStorageReader cardReader, CardStorageReader tokenReader, String editionFolder, String blockDataFolder, boolean enableUnknownCards) {
|
||||||
this.cardReader = cardReader;
|
this.cardReader = cardReader;
|
||||||
this.tokenReader = tokenReader;
|
this.tokenReader = tokenReader;
|
||||||
this.editions = new CardEdition.Collection(new CardEdition.Reader(new File(editionFolder)));
|
this.editions = new CardEdition.Collection(new CardEdition.Reader(new File(editionFolder)));
|
||||||
@@ -84,8 +84,8 @@ public class StaticData {
|
|||||||
variantCards = new CardDb(variantsCards, editions);
|
variantCards = new CardDb(variantsCards, editions);
|
||||||
|
|
||||||
//must initialize after establish field values for the sake of card image logic
|
//must initialize after establish field values for the sake of card image logic
|
||||||
commonCards.initialize(false, false);
|
commonCards.initialize(false, false, enableUnknownCards);
|
||||||
variantCards.initialize(false, false);
|
variantCards.initialize(false, false, enableUnknownCards);
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
@@ -215,7 +215,7 @@ public class StaticData {
|
|||||||
public Predicate<PaperCard> getStandardPredicate() { return standardPredicate; }
|
public Predicate<PaperCard> getStandardPredicate() { return standardPredicate; }
|
||||||
|
|
||||||
public Predicate<PaperCard> getPioneerPredicate() { return pioneerPredicate; }
|
public Predicate<PaperCard> getPioneerPredicate() { return pioneerPredicate; }
|
||||||
|
|
||||||
public Predicate<PaperCard> getModernPredicate() { return modernPredicate; }
|
public Predicate<PaperCard> getModernPredicate() { return modernPredicate; }
|
||||||
|
|
||||||
public Predicate<PaperCard> getCommanderPredicate() { return commanderPredicate; }
|
public Predicate<PaperCard> getCommanderPredicate() { return commanderPredicate; }
|
||||||
|
|||||||
@@ -165,7 +165,7 @@ public final class CardDb implements ICardDatabase, IDeckGenPool {
|
|||||||
reIndex();
|
reIndex();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void initialize(boolean logMissingPerEdition, boolean logMissingSummary) {
|
public void initialize(boolean logMissingPerEdition, boolean logMissingSummary, boolean enableUnknownCards) {
|
||||||
Set<String> allMissingCards = new LinkedHashSet<>();
|
Set<String> allMissingCards = new LinkedHashSet<>();
|
||||||
List<String> missingCards = new ArrayList<>();
|
List<String> missingCards = new ArrayList<>();
|
||||||
CardEdition upcomingSet = null;
|
CardEdition upcomingSet = null;
|
||||||
@@ -218,7 +218,7 @@ public final class CardDb implements ICardDatabase, IDeckGenPool {
|
|||||||
if (!contains(cr.getName())) {
|
if (!contains(cr.getName())) {
|
||||||
if (upcomingSet != null) {
|
if (upcomingSet != null) {
|
||||||
addCard(new PaperCard(cr, upcomingSet.getCode(), CardRarity.Unknown, 1));
|
addCard(new PaperCard(cr, upcomingSet.getCode(), CardRarity.Unknown, 1));
|
||||||
} else {
|
} else if(enableUnknownCards) {
|
||||||
System.err.println("The card " + cr.getName() + " was not assigned to any set. Adding it to UNKNOWN set... to fix see res/editions/ folder. ");
|
System.err.println("The card " + cr.getName() + " was not assigned to any set. Adding it to UNKNOWN set... to fix see res/editions/ folder. ");
|
||||||
addCard(new PaperCard(cr, CardEdition.UNKNOWN.getCode(), CardRarity.Special, 1));
|
addCard(new PaperCard(cr, CardEdition.UNKNOWN.getCode(), CardRarity.Special, 1));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ import java.util.Map.Entry;
|
|||||||
public class GameFormat implements Comparable<GameFormat> {
|
public class GameFormat implements Comparable<GameFormat> {
|
||||||
private final String name;
|
private final String name;
|
||||||
public enum FormatType {Sanctioned, Casual, Historic, Digital, Custom}
|
public enum FormatType {Sanctioned, Casual, Historic, Digital, Custom}
|
||||||
public enum FormatSubType {Block, Standard, Extended, Pioneer, Modern, Legacy, Vintage, Commander, Planechase, Videogame, MTGO, Custom}
|
public enum FormatSubType {Block, Standard, Extended, Pioneer, Modern, Legacy, Vintage, Commander, Planechase, Videogame, MTGO, Arena, Custom}
|
||||||
|
|
||||||
// contains allowed sets, when empty allows all sets
|
// contains allowed sets, when empty allows all sets
|
||||||
private FormatType formatType;
|
private FormatType formatType;
|
||||||
|
|||||||
@@ -28,9 +28,9 @@ public class CountersNoteEffect extends SpellAbilityEffect {
|
|||||||
GameEntityCounterTable table = new GameEntityCounterTable();
|
GameEntityCounterTable table = new GameEntityCounterTable();
|
||||||
for (Card c : getDefinedCardsOrTargeted(sa)) {
|
for (Card c : getDefinedCardsOrTargeted(sa)) {
|
||||||
if (mode.equals(MODE_STORE)) {
|
if (mode.equals(MODE_STORE)) {
|
||||||
noteCounters(c, source);
|
noteCounters(c, c);
|
||||||
} else if (mode.equals(MODE_LOAD)) {
|
} else if (mode.equals(MODE_LOAD)) {
|
||||||
loadCounters(c, source, p, table);
|
loadCounters(c, c, p, table);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
table.triggerCountersPutAll(game);
|
table.triggerCountersPutAll(game);
|
||||||
|
|||||||
@@ -78,7 +78,9 @@ public class CountersPutEffect extends SpellAbilityEffect {
|
|||||||
final List<Card> targetCards = SpellAbilityEffect.getTargetCards(spellAbility);
|
final List<Card> targetCards = SpellAbilityEffect.getTargetCards(spellAbility);
|
||||||
for(int i = 0; i < targetCards.size(); i++) {
|
for(int i = 0; i < targetCards.size(); i++) {
|
||||||
Card targetCard = targetCards.get(i);
|
Card targetCard = targetCards.get(i);
|
||||||
stringBuilder.append(targetCard).append(" (").append(spellAbility.getTargetRestrictions().getDividedMap().get(targetCard)).append(" counter)");
|
stringBuilder.append(targetCard);
|
||||||
|
if (spellAbility.getTargetRestrictions().getDividedMap().get(targetCard) != null) // fix null counter stack description
|
||||||
|
stringBuilder.append(" (").append(spellAbility.getTargetRestrictions().getDividedMap().get(targetCard)).append(" counter)");
|
||||||
|
|
||||||
if(i == targetCards.size() - 2) {
|
if(i == targetCards.size() - 2) {
|
||||||
stringBuilder.append(" and ");
|
stringBuilder.append(" and ");
|
||||||
@@ -104,7 +106,6 @@ public class CountersPutEffect extends SpellAbilityEffect {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
stringBuilder.append(".");
|
stringBuilder.append(".");
|
||||||
|
|
||||||
return stringBuilder.toString();
|
return stringBuilder.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -30,7 +30,12 @@ public class DamageDealEffect extends DamageBaseEffect {
|
|||||||
// when damageStackDescription is called, just build exactly what is happening
|
// when damageStackDescription is called, just build exactly what is happening
|
||||||
final StringBuilder stringBuilder = new StringBuilder();
|
final StringBuilder stringBuilder = new StringBuilder();
|
||||||
final String damage = spellAbility.getParam("NumDmg");
|
final String damage = spellAbility.getParam("NumDmg");
|
||||||
final int dmg = AbilityUtils.calculateAmount(spellAbility.getHostCard(), damage, spellAbility);
|
int dmg;
|
||||||
|
try { // try-catch to fix Volcano Hellion Crash
|
||||||
|
dmg = AbilityUtils.calculateAmount(spellAbility.getHostCard(), damage, spellAbility);
|
||||||
|
} catch (NullPointerException e) {
|
||||||
|
dmg = 0;
|
||||||
|
}
|
||||||
|
|
||||||
List<GameObject> targets = SpellAbilityEffect.getTargets(spellAbility);
|
List<GameObject> targets = SpellAbilityEffect.getTargets(spellAbility);
|
||||||
if (targets.isEmpty()) {
|
if (targets.isEmpty()) {
|
||||||
@@ -53,7 +58,8 @@ public class DamageDealEffect extends DamageBaseEffect {
|
|||||||
stringBuilder.append("divided evenly (rounded down) to\n");
|
stringBuilder.append("divided evenly (rounded down) to\n");
|
||||||
} else if (spellAbility.hasParam("DividedAsYouChoose")) {
|
} else if (spellAbility.hasParam("DividedAsYouChoose")) {
|
||||||
stringBuilder.append("divided to\n");
|
stringBuilder.append("divided to\n");
|
||||||
}
|
} else
|
||||||
|
stringBuilder.append("to ");
|
||||||
|
|
||||||
final List<Card> targetCards = SpellAbilityEffect.getTargetCards(spellAbility);
|
final List<Card> targetCards = SpellAbilityEffect.getTargetCards(spellAbility);
|
||||||
final List<Player> players = SpellAbilityEffect.getTargetPlayers(spellAbility);
|
final List<Player> players = SpellAbilityEffect.getTargetPlayers(spellAbility);
|
||||||
@@ -63,7 +69,9 @@ public class DamageDealEffect extends DamageBaseEffect {
|
|||||||
// target cards
|
// target cards
|
||||||
for (int i = 0; i < targetCards.size(); i++) {
|
for (int i = 0; i < targetCards.size(); i++) {
|
||||||
Card targetCard = targetCards.get(i);
|
Card targetCard = targetCards.get(i);
|
||||||
stringBuilder.append(targetCard).append(" (").append(spellAbility.getTargetRestrictions().getDividedMap().get(targetCard)).append(" damage)");
|
stringBuilder.append(targetCard);
|
||||||
|
if (spellAbility.getTargetRestrictions().getDividedMap().get(targetCard) != null) //fix null damage stack description
|
||||||
|
stringBuilder.append(" (").append(spellAbility.getTargetRestrictions().getDividedMap().get(targetCard)).append(" damage)");
|
||||||
|
|
||||||
if (i == targetCount - 2) {
|
if (i == targetCount - 2) {
|
||||||
stringBuilder.append(" and ");
|
stringBuilder.append(" and ");
|
||||||
@@ -74,9 +82,10 @@ public class DamageDealEffect extends DamageBaseEffect {
|
|||||||
|
|
||||||
// target players
|
// target players
|
||||||
for (int i = 0; i < players.size(); i++) {
|
for (int i = 0; i < players.size(); i++) {
|
||||||
|
|
||||||
Player targetPlayer = players.get(i);
|
Player targetPlayer = players.get(i);
|
||||||
stringBuilder.append(targetPlayer).append(" (").append(spellAbility.getTargetRestrictions().getDividedMap().get(targetPlayer)).append(" damage)");
|
stringBuilder.append(targetPlayer);
|
||||||
|
if (spellAbility.getTargetRestrictions().getDividedMap().get(targetPlayer) != null) //fix null damage stack description
|
||||||
|
stringBuilder.append(" (").append(spellAbility.getTargetRestrictions().getDividedMap().get(targetPlayer)).append(" damage)");
|
||||||
|
|
||||||
if (i == players.size() - 2) {
|
if (i == players.size() - 2) {
|
||||||
stringBuilder.append(" and ");
|
stringBuilder.append(" and ");
|
||||||
|
|||||||
@@ -127,7 +127,7 @@ public enum Keyword {
|
|||||||
SHROUD("Shroud", SimpleKeyword.class, true, "This can't be the target of spells or abilities."),
|
SHROUD("Shroud", SimpleKeyword.class, true, "This can't be the target of spells or abilities."),
|
||||||
SKULK("Skulk", SimpleKeyword.class, true, "This creature can't be blocked by creatures with greater power."),
|
SKULK("Skulk", SimpleKeyword.class, true, "This creature can't be blocked by creatures with greater power."),
|
||||||
SCAVENGE("Scavenge", KeywordWithCost.class, false, "%s, Exile this card from your graveyard: Put a number of +1/+1 counters equal to this card's power on target creature. Scavenge only as a sorcery."),
|
SCAVENGE("Scavenge", KeywordWithCost.class, false, "%s, Exile this card from your graveyard: Put a number of +1/+1 counters equal to this card's power on target creature. Scavenge only as a sorcery."),
|
||||||
SOULBOND("Souldbond", SimpleKeyword.class, true, "You may pair this creature with another unpaired creature when either enters the battlefield. They remain paired for as long as you control both of them"),
|
SOULBOND("Soulbond", SimpleKeyword.class, true, "You may pair this creature with another unpaired creature when either enters the battlefield. They remain paired for as long as you control both of them."),
|
||||||
SOULSHIFT("Soulshift", KeywordWithAmount.class, false, "When this creature dies, you may return target Spirit card with converted mana cost %d or less from your graveyard to your hand."),
|
SOULSHIFT("Soulshift", KeywordWithAmount.class, false, "When this creature dies, you may return target Spirit card with converted mana cost %d or less from your graveyard to your hand."),
|
||||||
SPECTACLE("Spectacle", KeywordWithCost.class, false, "You may cast this spell for its spectacle cost rather than its mana cost if an opponent lost life this turn."),
|
SPECTACLE("Spectacle", KeywordWithCost.class, false, "You may cast this spell for its spectacle cost rather than its mana cost if an opponent lost life this turn."),
|
||||||
SPLICE("Splice", KeywordWithCostAndType.class, false, "As you cast an %2$s spell, you may reveal this card from your hand and pay its splice cost. If you do, add this card's effects to that spell."),
|
SPLICE("Splice", KeywordWithCostAndType.class, false, "As you cast an %2$s spell, you may reveal this card from your hand and pay its splice cost. If you do, add this card's effects to that spell."),
|
||||||
|
|||||||
@@ -2525,6 +2525,10 @@ public class Player extends GameEntity implements Comparable<Player> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean isSkippingCombat() {
|
public boolean isSkippingCombat() {
|
||||||
|
if (hasLost()) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
if (hasKeyword("Skip your next combat phase.")) {
|
if (hasKeyword("Skip your next combat phase.")) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
<packaging.type>jar</packaging.type>
|
<packaging.type>jar</packaging.type>
|
||||||
<build.min.memory>-Xms1024m</build.min.memory>
|
<build.min.memory>-Xms1024m</build.min.memory>
|
||||||
<build.max.memory>-Xmx1536m</build.max.memory>
|
<build.max.memory>-Xmx1536m</build.max.memory>
|
||||||
<alpha-version>1.6.32.001</alpha-version>
|
<alpha-version>1.6.33.001</alpha-version>
|
||||||
<sign.keystore>keystore</sign.keystore>
|
<sign.keystore>keystore</sign.keystore>
|
||||||
<sign.alias>alias</sign.alias>
|
<sign.alias>alias</sign.alias>
|
||||||
<sign.storepass>storepass</sign.storepass>
|
<sign.storepass>storepass</sign.storepass>
|
||||||
|
|||||||
@@ -114,6 +114,7 @@ public enum CSubmenuPreferences implements ICDoc {
|
|||||||
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.getCbEnableAICheats(), FPref.UI_ENABLE_AI_CHEATS));
|
lstControls.add(Pair.of(view.getCbEnableAICheats(), FPref.UI_ENABLE_AI_CHEATS));
|
||||||
|
lstControls.add(Pair.of(view.getCbEnableUnknownCards(), FPref.UI_LOAD_UNKNOWN_CARDS));
|
||||||
lstControls.add(Pair.of(view.getCbImageFetcher(), FPref.UI_ENABLE_ONLINE_IMAGE_FETCHER));
|
lstControls.add(Pair.of(view.getCbImageFetcher(), FPref.UI_ENABLE_ONLINE_IMAGE_FETCHER));
|
||||||
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));
|
||||||
|
|||||||
@@ -107,6 +107,7 @@ public enum VSubmenuPreferences implements IVSubmenu<CSubmenuPreferences> {
|
|||||||
private final JCheckBox cbShowStormCount = new OptionsCheckBox(localizer.getMessage("cbShowStormCount"));
|
private final JCheckBox cbShowStormCount = new OptionsCheckBox(localizer.getMessage("cbShowStormCount"));
|
||||||
private final JCheckBox cbRemindOnPriority = new OptionsCheckBox(localizer.getMessage("cbRemindOnPriority"));
|
private final JCheckBox cbRemindOnPriority = new OptionsCheckBox(localizer.getMessage("cbRemindOnPriority"));
|
||||||
private final JCheckBox cbUseSentry = new OptionsCheckBox(localizer.getMessage("cbUseSentry"));
|
private final JCheckBox cbUseSentry = new OptionsCheckBox(localizer.getMessage("cbUseSentry"));
|
||||||
|
private final JCheckBox cbEnableUnknownCards = new OptionsCheckBox("Enable Unknown Cards");
|
||||||
|
|
||||||
private final Map<FPref, KeyboardShortcutField> shortcutFields = new HashMap<>();
|
private final Map<FPref, KeyboardShortcutField> shortcutFields = new HashMap<>();
|
||||||
|
|
||||||
@@ -287,6 +288,9 @@ public enum VSubmenuPreferences implements IVSubmenu<CSubmenuPreferences> {
|
|||||||
pnlPrefs.add(cbLoadHistoricFormats, titleConstraints);
|
pnlPrefs.add(cbLoadHistoricFormats, titleConstraints);
|
||||||
pnlPrefs.add(new NoteLabel(localizer.getMessage("nlLoadHistoricFormats")), descriptionConstraints);
|
pnlPrefs.add(new NoteLabel(localizer.getMessage("nlLoadHistoricFormats")), descriptionConstraints);
|
||||||
|
|
||||||
|
pnlPrefs.add(cbEnableUnknownCards, titleConstraints);
|
||||||
|
pnlPrefs.add(new NoteLabel("Enable Unknown Cards to be loaded to Unknown Set. (Requires restart)"), descriptionConstraints);
|
||||||
|
|
||||||
// Graphic Options
|
// Graphic Options
|
||||||
pnlPrefs.add(new SectionLabel(localizer.getMessage("GraphicOptions")), sectionConstraints + ", gaptop 2%");
|
pnlPrefs.add(new SectionLabel(localizer.getMessage("GraphicOptions")), sectionConstraints + ", gaptop 2%");
|
||||||
|
|
||||||
@@ -580,6 +584,11 @@ public enum VSubmenuPreferences implements IVSubmenu<CSubmenuPreferences> {
|
|||||||
return cbEnableAICheats;
|
return cbEnableAICheats;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @return {@link javax.swing.JCheckBox} */
|
||||||
|
public JCheckBox getCbEnableUnknownCards() {
|
||||||
|
return cbEnableUnknownCards;
|
||||||
|
}
|
||||||
|
|
||||||
/** @return {@link javax.swing.JCheckBox} */
|
/** @return {@link javax.swing.JCheckBox} */
|
||||||
public JCheckBox getCbImageFetcher() {
|
public JCheckBox getCbImageFetcher() {
|
||||||
return cbImageFetcher;
|
return cbImageFetcher;
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ public class CardDatabaseHelper {
|
|||||||
|
|
||||||
private static void initialize() {
|
private static void initialize() {
|
||||||
final CardStorageReader reader = new CardStorageReader(ForgeConstants.CARD_DATA_DIR, null, FModel.getPreferences().getPrefBoolean(FPref.LOAD_CARD_SCRIPTS_LAZILY));
|
final CardStorageReader reader = new CardStorageReader(ForgeConstants.CARD_DATA_DIR, null, FModel.getPreferences().getPrefBoolean(FPref.LOAD_CARD_SCRIPTS_LAZILY));
|
||||||
staticData = new StaticData(reader, ForgeConstants.EDITIONS_DIR, ForgeConstants.BLOCK_DATA_DIR);
|
staticData = new StaticData(reader, ForgeConstants.EDITIONS_DIR, ForgeConstants.BLOCK_DATA_DIR, FModel.getPreferences().getPrefBoolean(FPref.UI_LOAD_UNKNOWN_CARDS));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean hasBeenInitialized() {
|
private static boolean hasBeenInitialized() {
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
<packaging.type>jar</packaging.type>
|
<packaging.type>jar</packaging.type>
|
||||||
<build.min.memory>-Xms128m</build.min.memory>
|
<build.min.memory>-Xms128m</build.min.memory>
|
||||||
<build.max.memory>-Xmx2048m</build.max.memory>
|
<build.max.memory>-Xmx2048m</build.max.memory>
|
||||||
<alpha-version>1.6.32.001</alpha-version>
|
<alpha-version>1.6.33.001</alpha-version>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
<parent>
|
<parent>
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ import java.util.List;
|
|||||||
import java.util.Stack;
|
import java.util.Stack;
|
||||||
|
|
||||||
public class Forge implements ApplicationListener {
|
public class Forge implements ApplicationListener {
|
||||||
public static final String CURRENT_VERSION = "1.6.32.001";
|
public static final String CURRENT_VERSION = "1.6.33.001";
|
||||||
|
|
||||||
private static final ApplicationListener app = new Forge();
|
private static final ApplicationListener app = new Forge();
|
||||||
private static Clipboard clipboard;
|
private static Clipboard clipboard;
|
||||||
|
|||||||
@@ -386,6 +386,7 @@ public class VStack extends FDropDown {
|
|||||||
|
|
||||||
if (index == -1) {
|
if (index == -1) {
|
||||||
newtext = TextUtil.fastReplace(TextUtil.fastReplace(text.trim(),"--","-"),"- -","-");
|
newtext = TextUtil.fastReplace(TextUtil.fastReplace(text.trim(),"--","-"),"- -","-");
|
||||||
|
newtext = TextUtil.fastReplace(newtext, "- - ", "- ");
|
||||||
textRenderer.drawText(g, name + " " + (name.length() > 1 ? cId : "") + "\n" + (newtext.length() > 1 ? newtext : ""),
|
textRenderer.drawText(g, name + " " + (name.length() > 1 ? cId : "") + "\n" + (newtext.length() > 1 ? newtext : ""),
|
||||||
FONT, foreColor, x, y, w, h, y, h, true, Align.left, true);
|
FONT, foreColor, x, y, w, h, y, h, true, Align.left, true);
|
||||||
|
|
||||||
@@ -399,6 +400,7 @@ public class VStack extends FDropDown {
|
|||||||
else {
|
else {
|
||||||
newtext = TextUtil.fastReplace(TextUtil.fastReplace(newtext,name+" -","-"), "\n ", "\n");
|
newtext = TextUtil.fastReplace(TextUtil.fastReplace(newtext,name+" -","-"), "\n ", "\n");
|
||||||
newtext = "\n"+ TextUtil.fastReplace(newtext.trim(),"--","-");
|
newtext = "\n"+ TextUtil.fastReplace(newtext.trim(),"--","-");
|
||||||
|
newtext = TextUtil.fastReplace(newtext, "- - ", "- ");
|
||||||
textRenderer.drawText(g, name+" "+cId+newtext, FONT, foreColor, x, y, w, h, y, h, true, Align.left, true);
|
textRenderer.drawText(g, name+" "+cId+newtext, FONT, foreColor, x, y, w, h, y, h, true, Align.left, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -331,6 +331,10 @@ public class SettingsPage extends TabPage<SettingsScreen> {
|
|||||||
Forge.showFPS = FModel.getPreferences().getPrefBoolean(FPref.UI_SHOW_FPS);
|
Forge.showFPS = FModel.getPreferences().getPrefBoolean(FPref.UI_SHOW_FPS);
|
||||||
}
|
}
|
||||||
},4);
|
},4);
|
||||||
|
lstSettings.addItem(new BooleanSetting(FPref.UI_LOAD_UNKNOWN_CARDS,
|
||||||
|
"Enable Unknown Cards",
|
||||||
|
"Enable Unknown Cards to be loaded to Unknown Set. (Requires restart)"),
|
||||||
|
4);
|
||||||
lstSettings.addItem(new CustomSelectSetting(FPref.UI_CARD_COUNTER_DISPLAY_TYPE,
|
lstSettings.addItem(new CustomSelectSetting(FPref.UI_CARD_COUNTER_DISPLAY_TYPE,
|
||||||
localizer.getMessage("cbpCounterDisplayType"),
|
localizer.getMessage("cbpCounterDisplayType"),
|
||||||
localizer.getMessage("nlCounterDisplayType"),
|
localizer.getMessage("nlCounterDisplayType"),
|
||||||
|
|||||||
@@ -1020,11 +1020,11 @@ Wasteland|EXP
|
|||||||
|
|
||||||
[CN2 Draft Matters]
|
[CN2 Draft Matters]
|
||||||
Adriana's Valor
|
Adriana's Valor
|
||||||
#Assemble the Rank and Vile
|
Assemble the Rank and Vile
|
||||||
Echoing Boon
|
Echoing Boon
|
||||||
#Emissary's Ploy
|
#Emissary's Ploy
|
||||||
Hired Heist
|
Hired Heist
|
||||||
#Hold the Permiter
|
Hold the Perimeter
|
||||||
Hymn of the Wilds
|
Hymn of the Wilds
|
||||||
Incendiary Dissent
|
Incendiary Dissent
|
||||||
Natural Unity
|
Natural Unity
|
||||||
@@ -3414,7 +3414,7 @@ Eldrazi Monument
|
|||||||
Eldritch Evolution
|
Eldritch Evolution
|
||||||
Elesh Norn, Grand Cenobite
|
Elesh Norn, Grand Cenobite
|
||||||
Evra, Halcyon Witness
|
Evra, Halcyon Witness
|
||||||
#Expropriate
|
Expropriate
|
||||||
Fblthp, the Lost
|
Fblthp, the Lost
|
||||||
Felidar Sovereign
|
Felidar Sovereign
|
||||||
Gideon Jura
|
Gideon Jura
|
||||||
@@ -3617,11 +3617,11 @@ Stalking Stones+|FMB1
|
|||||||
|
|
||||||
[CN2 Not In Normal Slots]
|
[CN2 Not In Normal Slots]
|
||||||
Adriana's Valor
|
Adriana's Valor
|
||||||
#Assemble the Rank and Vile
|
Assemble the Rank and Vile
|
||||||
Echoing Boon
|
Echoing Boon
|
||||||
#Emissary's Ploy
|
#Emissary's Ploy
|
||||||
Hired Heist
|
Hired Heist
|
||||||
#Hold the Permiter
|
Hold the Perimeter
|
||||||
Hymn of the Wilds
|
Hymn of the Wilds
|
||||||
Incendiary Dissent
|
Incendiary Dissent
|
||||||
Natural Unity
|
Natural Unity
|
||||||
|
|||||||
@@ -6,5 +6,5 @@ K:Flying
|
|||||||
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Land.YouCtrl | TriggerZones$ Battlefield | Execute$ TrigDamage | TriggerDescription$ Landfall — Whenever a land enters the battlefield under your control, CARDNAME deals 1 damage to any target. If that land was a mountain, CARDNAME deals 2 damage to that permanent or player instead.
|
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Land.YouCtrl | TriggerZones$ Battlefield | Execute$ TrigDamage | TriggerDescription$ Landfall — Whenever a land enters the battlefield under your control, CARDNAME deals 1 damage to any target. If that land was a mountain, CARDNAME deals 2 damage to that permanent or player instead.
|
||||||
SVar:TrigDamage:DB$ DealDamage | ValidTgts$ Creature,Player,Planeswalker | TgtPrompt$ Select any target | TgtPrompt$ Select any target | NumDmg$ X | References$ X
|
SVar:TrigDamage:DB$ DealDamage | ValidTgts$ Creature,Player,Planeswalker | TgtPrompt$ Select any target | TgtPrompt$ Select any target | NumDmg$ X | References$ X
|
||||||
SVar:X:TriggeredCard$Valid Mountain/Plus.1
|
SVar:X:TriggeredCard$Valid Mountain/Plus.1
|
||||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/akoum_hellkite.jpg
|
SVar:BuffedBy:Land
|
||||||
Oracle:Flying\nLandfall — Whenever a land enters the battlefield under your control, Akoum Hellkite deals 1 damage to any target. If that land is a Mountain, Akoum Hellkite deals 2 damage to that permanent or player instead.
|
Oracle:Flying\nLandfall — Whenever a land enters the battlefield under your control, Akoum Hellkite deals 1 damage to any target. If that land is a Mountain, Akoum Hellkite deals 2 damage to that permanent or player instead.
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
Name:Aretopolis
|
Name:Aretopolis
|
||||||
ManaCost:no cost
|
ManaCost:no cost
|
||||||
Types:Plane Kephalai
|
Types:Plane Kephalai
|
||||||
T:Mode$ PlaneswalkedTo | ValidCard$ Plane.Self | TriggerZones$ Command | Execute$ AcquireScrolls | TriggerDescription$ When you planeswalk to CARDNAME or at the beginning of your upkeep, put a scroll counter on CARDNAME, then you gain life equal to the number of scroll counters on it.
|
T:Mode$ PlaneswalkedTo | ValidCard$ Plane.Self | Execute$ AcquireScrolls | TriggerDescription$ When you planeswalk to CARDNAME or at the beginning of your upkeep, put a scroll counter on CARDNAME, then you gain life equal to the number of scroll counters on it.
|
||||||
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | Execute$ AcquireScrolls | TriggerZones$ Command | Secondary$ True | TriggerDescription$ When you planeswalk to CARDNAME or at the beginning of your upkeep, put a scroll counter on CARDNAME, then you gain life equal to the number of scroll counters on it.
|
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | Execute$ AcquireScrolls | TriggerZones$ Command | Secondary$ True | TriggerDescription$ When you planeswalk to CARDNAME or at the beginning of your upkeep, put a scroll counter on CARDNAME, then you gain life equal to the number of scroll counters on it.
|
||||||
SVar:AcquireScrolls:DB$ PutCounter | Defined$ Self | CounterType$ SCROLL | CounterNum$ 1 | SubAbility$ ScrollsOfLife
|
SVar:AcquireScrolls:DB$ PutCounter | Defined$ Self | CounterType$ SCROLL | CounterNum$ 1 | SubAbility$ ScrollsOfLife
|
||||||
SVar:ScrollsOfLife:DB$ GainLife | Defined$ You | LifeAmount$ NumScrolls | References$ NumScrolls
|
SVar:ScrollsOfLife:DB$ GainLife | Defined$ You | LifeAmount$ NumScrolls | References$ NumScrolls
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
Name:Chaotic Aether
|
Name:Chaotic Aether
|
||||||
ManaCost:no cost
|
ManaCost:no cost
|
||||||
Types:Phenomenon
|
Types:Phenomenon
|
||||||
T:Mode$ PlaneswalkedTo | ValidCard$ Card.Self | TriggerZones$ Command | Execute$ Aether | TriggerDescription$ When you encounter CARDNAME, each blank roll of the planar dice is a {CHAOS} roll until a player planeswalks away from a plane. (Then planeswalk away from this phenomenon)
|
T:Mode$ PlaneswalkedTo | ValidCard$ Card.Self | Execute$ Aether | TriggerDescription$ When you encounter CARDNAME, each blank roll of the planar dice is a {CHAOS} roll until a player planeswalks away from a plane. (Then planeswalk away from this phenomenon)
|
||||||
SVar:Aether:DB$ Effect | Name$ Chaotic Aether Effect | StaticAbilities$ STBlankIsChaos | Triggers$ TPWAway | SVars$ ExileSelf | SubAbility$ PWAway
|
SVar:Aether:DB$ Effect | Name$ Chaotic Aether Effect | StaticAbilities$ STBlankIsChaos | Triggers$ TPWAway | SVars$ ExileSelf | SubAbility$ PWAway
|
||||||
SVar:PWAway:DB$ Planeswalk | Cost$ 0
|
SVar:PWAway:DB$ Planeswalk | Cost$ 0
|
||||||
SVar:STBlankIsChaos:Mode$ Continuous | EffectZone$ Command | GlobalRule$ Each blank roll of the planar dice is a {CHAOS} roll.
|
SVar:STBlankIsChaos:Mode$ Continuous | EffectZone$ Command | GlobalRule$ Each blank roll of the planar dice is a {CHAOS} roll.
|
||||||
|
|||||||
@@ -3,11 +3,8 @@ ManaCost:5 W W
|
|||||||
Types:Creature Angel
|
Types:Creature Angel
|
||||||
PT:4/4
|
PT:4/4
|
||||||
K:Flying
|
K:Flying
|
||||||
T:Mode$ ChangesZone | TriggerZones$ Battlefield | Origin$ Any | Destination$ Battlefield | ValidCard$ Land.YouCtrl+HasSubtype Plains | Execute$ DBChoose | OptionalDecider$ You | TriggerDescription$ Landfall — Whenever a land enters the battlefield, you may return target nonland permanent card from your graveyard to your hand. If that land is a Plains, you may return that nonland permanent card to the battlefield instead.
|
T:Mode$ ChangesZone | TriggerZones$ Battlefield | Origin$ Any | Destination$ Battlefield | ValidCard$ Land.YouCtrl | Execute$ TrigChangeHand | OptionalDecider$ You | TriggerDescription$ Landfall — Whenever a land enters the battlefield under your control, you may return target nonland permanent card from your graveyard to your hand. If that land is a Plains, you may return that nonland permanent card to the battlefield instead.
|
||||||
T:Mode$ ChangesZone | TriggerZones$ Battlefield | Secondary$ True | Origin$ Any | Destination$ Battlefield | ValidCard$ Land.YouCtrl+HasNoSubtype Plains | Execute$ TrigChangeHand | OptionalDecider$ You | TriggerDescription$ Landfall — Whenever a land enters the battlefield, you may return target nonland permanent card from your graveyard to your hand.
|
SVar:TrigChangeHand:DB$ ChangeZone | Origin$ Graveyard | Destination$ Hand | TgtPrompt$ Select target nonland permanent | ValidTgts$ Permanent.YouCtrl+nonLand | ConditionDefined$ TriggeredCard | ConditionPresent$ Card.Plains | ConditionCompare$ EQ0 | SubAbility$ TrigChangeBattlefield
|
||||||
SVar:DBChoose:DB$ ChooseCard | Defined$ You | Choices$ Permanent.YouCtrl+nonLand | ChoiceZone$ Graveyard | SubAbility$ TrigChangeHand2
|
SVar:TrigChangeBattlefield:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | DestinationAlternative$ Hand | AlternativeDestinationMessage$ Would you like to return this permanent to the battlefield (and not to your hand)? | Defined$ Targeted | ConditionDefined$ TriggeredCard | ConditionPresent$ Card.Plains | ConditionCompare$ EQ1
|
||||||
SVar:TrigChangeHand:DB$ChangeZone | Origin$ Graveyard | Destination$ Hand | ValidTgts$ Permanent.YouCtrl+nonLand | Defined$ ChosenCard
|
SVar:BuffedBy:Land
|
||||||
SVar:TrigChangeHand2:DB$ChangeZone | Origin$ Graveyard | Destination$ Battlefield | DestinationAlternative$ Hand | AlternativeDestinationMessage$ Would you like to return this permanent to the battlefield (and not to the hand)? | Defined$ ChosenCard | ConditionCheckSVar$ NumTargets | ConditionSVarCompare$ GE1 | References$ NumTargets
|
|
||||||
SVar:NumTargets:Count$ValidGraveyard Permanent.YouCtrl+nonLand
|
|
||||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/emeria_shepherd.jpg
|
|
||||||
Oracle:Flying\nLandfall — Whenever a land enters the battlefield under your control, you may return target nonland permanent card from your graveyard to your hand. If that land is a Plains, you may return that nonland permanent card to the battlefield instead.
|
Oracle:Flying\nLandfall — Whenever a land enters the battlefield under your control, you may return target nonland permanent card from your graveyard to your hand. If that land is a Plains, you may return that nonland permanent card to the battlefield instead.
|
||||||
|
|||||||
@@ -3,10 +3,9 @@ ManaCost:3 U
|
|||||||
Types:Creature Faerie Artificer
|
Types:Creature Faerie Artificer
|
||||||
PT:2/2
|
PT:2/2
|
||||||
K:Flying
|
K:Flying
|
||||||
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature.nonToken+OppCtrl | TriggerZones$ Battlefield | Execute$ TrigImprint | TriggerDescription$Whenever a nontoken creature enters the battlefield under an opponent's control, create a token that's a copy of that creature except that it's an artifact in addition to its other types. Then exile all other tokens created with Faerie Artisans.
|
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature.nonToken+OppCtrl | TriggerZones$ Battlefield | Execute$ TrigImprint | TriggerDescription$ Whenever a nontoken creature enters the battlefield under an opponent's control, create a token that's a copy of that creature except that it's an artifact in addition to its other types. Then exile all other tokens created with CARDNAME.
|
||||||
SVar:TrigImprint:DB$ Pump | ImprintCards$ Remembered | SubAbility$ DBCopy
|
SVar:TrigImprint:DB$ Pump | ImprintCards$ Remembered | SubAbility$ DBCopy
|
||||||
SVar:DBCopy:DB$ CopyPermanent | Defined$ TriggeredCard | Controller$ You | AddTypes$ Artifact | RememberCopied$ True | SubAbility$ DBChangeZoneAll
|
SVar:DBCopy:DB$ CopyPermanent | Defined$ TriggeredCard | Controller$ You | AddTypes$ Artifact | RememberCopied$ True | SubAbility$ DBChangeZoneAll
|
||||||
SVar:DBChangeZoneAll:DB$ ChangeZoneAll | Origin$ Battlefield | Destination$ Exile | ChangeType$ Card.IsImprinted
|
SVar:DBChangeZoneAll:DB$ ChangeZoneAll | Origin$ Battlefield | Destination$ Exile | ChangeType$ Card.IsImprinted
|
||||||
DeckHas:Ability$Token
|
DeckHas:Ability$Token
|
||||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/faerie_artisans.jpg
|
|
||||||
Oracle:Flying\nWhenever a nontoken creature enters the battlefield under an opponent's control, create a token that's a copy of that creature except that it's an artifact in addition to its other types. Then exile all other tokens created with Faerie Artisans.
|
Oracle:Flying\nWhenever a nontoken creature enters the battlefield under an opponent's control, create a token that's a copy of that creature except that it's an artifact in addition to its other types. Then exile all other tokens created with Faerie Artisans.
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
Name:Furnace Layer
|
Name:Furnace Layer
|
||||||
ManaCost:no cost
|
ManaCost:no cost
|
||||||
Types:Plane New Phyrexia
|
Types:Plane New Phyrexia
|
||||||
T:Mode$ PlaneswalkedTo | ValidCard$ Plane.Self | TriggerZones$ Command | Execute$ FurnaceDiscard | TriggerDescription$ When you planeswalk to CARDNAME or at the beginning of your upkeep, select target player at random. That player discards a card. If that player discards a land card this way, they lose 3 life.
|
T:Mode$ PlaneswalkedTo | ValidCard$ Plane.Self | Execute$ FurnaceDiscard | TriggerDescription$ When you planeswalk to CARDNAME or at the beginning of your upkeep, select target player at random. That player discards a card. If that player discards a land card this way, they lose 3 life.
|
||||||
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | Execute$ FurnaceDiscard | TriggerZones$ Command | Secondary$ True | TriggerDescription$ When you planeswalk to CARDNAME or at the beginning of your upkeep, select target player at random. That player discards a card. If that player discards a land card this way, they lose 3 life.
|
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | Execute$ FurnaceDiscard | TriggerZones$ Command | Secondary$ True | TriggerDescription$ When you planeswalk to CARDNAME or at the beginning of your upkeep, select target player at random. That player discards a card. If that player discards a land card this way, they lose 3 life.
|
||||||
SVar:FurnaceDiscard:DB$ Discard | ValidTgts$ Player | TargetsAtRandom$ True | NumCards$ 1 | Mode$ TgtChoose | RememberDiscarded$ True | SubAbility$ DBLoseLife
|
SVar:FurnaceDiscard:DB$ Discard | ValidTgts$ Player | TargetsAtRandom$ True | NumCards$ 1 | Mode$ TgtChoose | RememberDiscarded$ True | SubAbility$ DBLoseLife
|
||||||
SVar:DBLoseLife:DB$ LoseLife | Defined$ Targeted | LifeAmount$ 3 | ConditionDefined$ Remembered | ConditionPresent$ Land | ConditionCompare$ GE1 | SubAbility$ DBCleanup
|
SVar:DBLoseLife:DB$ LoseLife | Defined$ Targeted | LifeAmount$ 3 | ConditionDefined$ Remembered | ConditionPresent$ Land | ConditionCompare$ GE1 | SubAbility$ DBCleanup
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
Name:Grove of the Dreampods
|
Name:Grove of the Dreampods
|
||||||
ManaCost:no cost
|
ManaCost:no cost
|
||||||
Types:Plane Fabacin
|
Types:Plane Fabacin
|
||||||
T:Mode$ PlaneswalkedTo | ValidCard$ Card.Self | TriggerZones$ Command | Execute$ DreampodsDig | TriggerDescription$ When you planeswalk to CARDNAME or at the beginning of your upkeep, reveal cards from the top of your library until you reveal a creature card. Put that card onto the battlefield and the rest on the bottom of your library in a random order.
|
T:Mode$ PlaneswalkedTo | ValidCard$ Card.Self | Execute$ DreampodsDig | TriggerDescription$ When you planeswalk to CARDNAME or at the beginning of your upkeep, reveal cards from the top of your library until you reveal a creature card. Put that card onto the battlefield and the rest on the bottom of your library in a random order.
|
||||||
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | Execute$ DreampodsDig | TriggerZones$ Command | Secondary$ True | TriggerDescription$ When you planeswalk to CARDNAME or at the beginning of your upkeep, reveal cards from the top of your library until you reveal a creature card. Put that card onto the battlefield and the rest on the bottom of your library in a random order.
|
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | Execute$ DreampodsDig | TriggerZones$ Command | Secondary$ True | TriggerDescription$ When you planeswalk to CARDNAME or at the beginning of your upkeep, reveal cards from the top of your library until you reveal a creature card. Put that card onto the battlefield and the rest on the bottom of your library in a random order.
|
||||||
SVar:DreampodsDig:DB$ DigUntil | Valid$ Creature | ValidDescription$ creature | FoundDestination$ Battlefield | RevealedDestination$ Library | RevealedLibraryPosition$ -1 | RevealRandomOrder$ True
|
SVar:DreampodsDig:DB$ DigUntil | Valid$ Creature | ValidDescription$ creature | FoundDestination$ Battlefield | RevealedDestination$ Library | RevealedLibraryPosition$ -1 | RevealRandomOrder$ True
|
||||||
T:Mode$ PlanarDice | Result$ Chaos | TriggerZones$ Command | Execute$ RolledChaos | TriggerDescription$ Whenever you roll {CHAOS}, return target creature card from your graveyard to the battlefield.
|
T:Mode$ PlanarDice | Result$ Chaos | TriggerZones$ Command | Execute$ RolledChaos | TriggerDescription$ Whenever you roll {CHAOS}, return target creature card from your graveyard to the battlefield.
|
||||||
|
|||||||
@@ -3,9 +3,8 @@ ManaCost:4 B B
|
|||||||
Types:Creature Vampire
|
Types:Creature Vampire
|
||||||
PT:3/4
|
PT:3/4
|
||||||
K:Flying
|
K:Flying
|
||||||
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Land.YouCtrl+HasSubtype Swamp | TriggerZones$ Battlefield | Execute$ TrigPumpAll2 | TriggerDescription$ Landfall — Whenever a land enters the battlefield under your control, other creatures you control get +1/+0 until end of turn. If that land is a Swamp, those creatures get +2/+0 until end of turn instead.
|
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Land.YouCtrl | TriggerZones$ Battlefield | Execute$ TrigPumpAll | TriggerDescription$ Landfall — Whenever a land enters the battlefield under your control, other creatures you control get +1/+0 until end of turn. If that land is a Swamp, those creatures get +2/+0 until end of turn instead.
|
||||||
T:Mode$ ChangesZone | Secondary$ True | Origin$ Any | Destination$ Battlefield | ValidCard$ Land.YouCtrl+HasNoSubtype Swamp | TriggerZones$ Battlefield | Execute$ TrigPumpAll | TriggerDescription$ Landfall — Whenever a land enters the battlefield, other creatures you control get +1/+0 until end of turn.
|
SVar:TrigPumpAll:DB$PumpAll | ValidCards$ Creature.Other+YouCtrl | NumAtt$ X | References$ X
|
||||||
SVar:TrigPumpAll:DB$PumpAll | ValidCards$ Creature.Other+YouCtrl | NumAtt$ 1
|
SVar:X:TriggeredCard$Valid Swamp/Plus.1
|
||||||
SVar:TrigPumpAll2:DB$PumpAll | ValidCards$ Creature.Other+YouCtrl | NumAtt$ 2
|
SVar:BuffedBy:Land
|
||||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/guul_draz_overseer.jpg
|
|
||||||
Oracle:Flying\nLandfall — Whenever a land enters the battlefield under your control, other creatures you control get +1/+0 until end of turn. If that land is a Swamp, those creatures get +2/+0 until end of turn instead.
|
Oracle:Flying\nLandfall — Whenever a land enters the battlefield under your control, other creatures you control get +1/+0 until end of turn. If that land is a Swamp, those creatures get +2/+0 until end of turn instead.
|
||||||
|
|||||||
11
forge-gui/res/cardsfolder/h/hold_the_perimeter.txt
Normal file
11
forge-gui/res/cardsfolder/h/hold_the_perimeter.txt
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
Name:Hold the Perimeter
|
||||||
|
ManaCost:no cost
|
||||||
|
Types:Conspiracy
|
||||||
|
Text:(Start the game with this conspiracy face up in the command zone.)
|
||||||
|
T:Mode$ Phase | Phase$ Upkeep | CheckSVar$ X | SVarCompare$ EQ1 | References$ X | ValidPlayer$ You | Execute$ TrigToken1 | EffectZone$ Command | TriggerDescription$ At the beginning of your first upkeep, create a 1/2 white Soldier creature token with defender.
|
||||||
|
SVar:X:Count$YourTurns
|
||||||
|
SVar:TrigToken1:DB$ Token | TokenAmount$ 1 | TokenScript$ w_1_2_soldier_defender | TokenOwner$ You | LegacyImage$ w 1 2 soldier defender cn2
|
||||||
|
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ Player.Other+IsNotRemembered | Execute$ TrigToken2 | EffectZone$ Command | TriggerDescription$ At the beginning of each other player’s first upkeep, that player creates a 1/1 red Goblin creature token with “This creature can’t block.”
|
||||||
|
SVar:TrigToken2:DB$ Token | TokenAmount$ 1 | TokenScript$ r_1_1_goblin_noblock | TokenOwner$ TriggeredPlayer | LegacyImage$ r 1 1 goblin noblock cn2 | SubAbility$ RememberPlayer
|
||||||
|
SVar:RememberPlayer:DB$ Pump | RememberObjects$ TriggeredPlayer
|
||||||
|
Oracle:(Start the game with this conspiracy face up in the command zone.)\nAt the beginning of your first upkeep, create a 1/2 white Soldier creature token with defender.\nAt the beginning of each other player’s first upkeep, that player creates a 1/1 red Goblin creature token with “This creature can’t block.”
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
Name:Interplanar Tunnel
|
Name:Interplanar Tunnel
|
||||||
ManaCost:no cost
|
ManaCost:no cost
|
||||||
Types:Phenomenon
|
Types:Phenomenon
|
||||||
T:Mode$ PlaneswalkedTo | ValidCard$ Card.Self | TriggerZones$ Command | Execute$ TrigDig | TriggerDescription$ When you encounter CARDNAME, reveal cards from the top of your planar deck until you reveal five plane cards. Put a plane card from among them on top of your planar deck, then put the rest of the revealed cards on the bottom in a random order. (Then planeswalk away from this phenomenon.)
|
T:Mode$ PlaneswalkedTo | ValidCard$ Card.Self | Execute$ TrigDig | TriggerDescription$ When you encounter CARDNAME, reveal cards from the top of your planar deck until you reveal five plane cards. Put a plane card from among them on top of your planar deck, then put the rest of the revealed cards on the bottom in a random order. (Then planeswalk away from this phenomenon.)
|
||||||
SVar:TrigDig:DB$ Dig | DigNum$ 5 | ChangeNum$ 1 | SourceZone$ PlanarDeck | DestinationZone$ PlanarDeck | DestinationZone2$ PlanarDeck | LibraryPosition$ 0 | ChangeValid$ Plane | RestRandomOrder$ True | SubAbility$ Replaneswalk
|
SVar:TrigDig:DB$ Dig | DigNum$ 5 | ChangeNum$ 1 | SourceZone$ PlanarDeck | DestinationZone$ PlanarDeck | DestinationZone2$ PlanarDeck | LibraryPosition$ 0 | ChangeValid$ Plane | RestRandomOrder$ True | SubAbility$ Replaneswalk
|
||||||
SVar:Replaneswalk:DB$ Planeswalk | Cost$ 0
|
SVar:Replaneswalk:DB$ Planeswalk | Cost$ 0
|
||||||
Oracle:When you encounter Interplanar Tunnel, reveal cards from the top of your planar deck until you reveal five plane cards. Put a plane card from among them on top of your planar deck, then put the rest of the revealed cards on the bottom in a random order. (Then planeswalk away from this phenomenon.)
|
Oracle:When you encounter Interplanar Tunnel, reveal cards from the top of your planar deck until you reveal five plane cards. Put a plane card from among them on top of your planar deck, then put the rest of the revealed cards on the bottom in a random order. (Then planeswalk away from this phenomenon.)
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
Name:Kilnspire District
|
Name:Kilnspire District
|
||||||
ManaCost:no cost
|
ManaCost:no cost
|
||||||
Types:Plane Ravnica
|
Types:Plane Ravnica
|
||||||
T:Mode$ PlaneswalkedTo | ValidCard$ Card.Self | TriggerZones$ Command | Execute$ PutCounter | TriggerDescription$ When you planeswalk to CARDNAME or at the beginning of your precombat main phase, put a charge counter on CARDNAME, then add {R} for each charge counter on it.
|
T:Mode$ PlaneswalkedTo | ValidCard$ Card.Self | Execute$ PutCounter | TriggerDescription$ When you planeswalk to CARDNAME or at the beginning of your precombat main phase, put a charge counter on CARDNAME, then add {R} for each charge counter on it.
|
||||||
T:Mode$ Phase | PreCombatMain$ True | ValidPlayer$ You | TriggerZones$ Command | Execute$ PutCounter | Secondary$ True | TriggerDescription$ When you planeswalk to CARDNAME or at the beginning of your precombat main phase, put a charge counter on CARDNAME, then add {R} for each charge counter on it.
|
T:Mode$ Phase | PreCombatMain$ True | ValidPlayer$ You | TriggerZones$ Command | Execute$ PutCounter | Secondary$ True | TriggerDescription$ When you planeswalk to CARDNAME or at the beginning of your precombat main phase, put a charge counter on CARDNAME, then add {R} for each charge counter on it.
|
||||||
SVar:PutCounter:DB$PutCounter | Defined$ Self | CounterType$ CHARGE | CounterNum$ 1 | SubAbility$ DBMana
|
SVar:PutCounter:DB$PutCounter | Defined$ Self | CounterType$ CHARGE | CounterNum$ 1 | SubAbility$ DBMana
|
||||||
SVar:DBMana:DB$ Mana | Produced$ R | Amount$ Y | References$ Y
|
SVar:DBMana:DB$ Mana | Produced$ R | Amount$ Y | References$ Y
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
Name:Morphic Tide
|
Name:Morphic Tide
|
||||||
ManaCost:no cost
|
ManaCost:no cost
|
||||||
Types:Phenomenon
|
Types:Phenomenon
|
||||||
T:Mode$ PlaneswalkedTo | ValidCard$ Card.Self | TriggerZones$ Command | Execute$ TrigPut | TriggerDescription$ When you encounter CARDNAME, starting with you, each player may put a permanent card from their hand onto the battlefield. (Then planeswalk away from this phenomenon.)
|
T:Mode$ PlaneswalkedTo | ValidCard$ Card.Self | Execute$ TrigPut | TriggerDescription$ When you encounter CARDNAME, starting with you, each player may put a permanent card from their hand onto the battlefield. (Then planeswalk away from this phenomenon.)
|
||||||
SVar:TrigPut:DB$ RepeatEach | StartingWithActivator$ True | RepeatPlayers$ Player | RepeatSubAbility$ DBShuffle | SubAbility$ ChangePermanent
|
SVar:TrigPut:DB$ RepeatEach | StartingWithActivator$ True | RepeatPlayers$ Player | RepeatSubAbility$ DBShuffle | SubAbility$ ChangePermanent
|
||||||
SVar:DBShuffle:DB$ ChangeZoneAll | ChangeType$ Permanent.RememberedPlayerOwn | Imprint$ True | Origin$ Battlefield | Destination$ Library | Shuffle$ True | SubAbility$ DBDig
|
SVar:DBShuffle:DB$ ChangeZoneAll | ChangeType$ Permanent.RememberedPlayerOwn | Imprint$ True | Origin$ Battlefield | Destination$ Library | Shuffle$ True | SubAbility$ DBDig
|
||||||
SVar:DBDig:DB$ Dig | Defined$ Remembered | NoMove$ True | DigNum$ WarpX | References$ WarpX | RememberRevealed$ True | Reveal$ True | SubAbility$ DBCleanImprint
|
SVar:DBDig:DB$ Dig | Defined$ Remembered | NoMove$ True | DigNum$ WarpX | References$ WarpX | RememberRevealed$ True | Reveal$ True | SubAbility$ DBCleanImprint
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
Name:Mutual Epiphany
|
Name:Mutual Epiphany
|
||||||
ManaCost:no cost
|
ManaCost:no cost
|
||||||
Types:Phenomenon
|
Types:Phenomenon
|
||||||
T:Mode$ PlaneswalkedTo | ValidCard$ Card.Self | TriggerZones$ Command | Execute$ Epiphany | TriggerDescription$ When you encounter CARDNAME, each player draws four cards. (Then planeswalk away from this phenomenon)
|
T:Mode$ PlaneswalkedTo | ValidCard$ Card.Self | Execute$ Epiphany | TriggerDescription$ When you encounter CARDNAME, each player draws four cards. (Then planeswalk away from this phenomenon)
|
||||||
SVar:Epiphany:DB$ Draw | Defined$ Player | NumCards$ 4 | SubAbility$ PWAway | SpellDescription$ Each player draws four cards.
|
SVar:Epiphany:DB$ Draw | Defined$ Player | NumCards$ 4 | SubAbility$ PWAway | SpellDescription$ Each player draws four cards.
|
||||||
SVar:PWAway:DB$ Planeswalk | Cost$ 0
|
SVar:PWAway:DB$ Planeswalk | Cost$ 0
|
||||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/mutual_epiphany.jpg
|
SVar:Picture:http://www.wizards.com/global/images/magic/general/mutual_epiphany.jpg
|
||||||
|
|||||||
@@ -4,6 +4,5 @@ Types:Creature Illusion
|
|||||||
PT:1/1
|
PT:1/1
|
||||||
K:Flying
|
K:Flying
|
||||||
T:Mode$ ChangesZone | Origin$ Library | Destination$ Graveyard | ValidCard$ Card.Self | OptionalDecider$ You | Execute$ TrigChange | TriggerDescription$ When CARDNAME is put into your graveyard from your library, you may put it onto the battlefield.
|
T:Mode$ ChangesZone | Origin$ Library | Destination$ Graveyard | ValidCard$ Card.Self | OptionalDecider$ You | Execute$ TrigChange | TriggerDescription$ When CARDNAME is put into your graveyard from your library, you may put it onto the battlefield.
|
||||||
SVar:TrigChange:DB$ChangeZone | Origin$ Graveyard | Destination$ Battlefield | Defined$ Self
|
SVar:TrigChange:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | Defined$ TriggeredCard
|
||||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/narcomoeba.jpg
|
|
||||||
Oracle:Flying\nWhen Narcomoeba is put into your graveyard from your library, you may put it onto the battlefield.
|
Oracle:Flying\nWhen Narcomoeba is put into your graveyard from your library, you may put it onto the battlefield.
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ Name:Natural Unity
|
|||||||
ManaCost:no cost
|
ManaCost:no cost
|
||||||
Types:Conspiracy
|
Types:Conspiracy
|
||||||
K:Hidden agenda
|
K:Hidden agenda
|
||||||
S:Mode$ Continuous | EffectZone$ Command | Affected$ Creature.NamedCard+YouCtrl | EffectZone$ Battlefield | AddTrigger$ NUCombat | AddSVar$ NUCounter | Description$ Creatures you control with the chosen name have "At the beginning of combat on your turn, you may pay {G}. If you do, put a +1/+1 counter on this creature."
|
S:Mode$ Continuous | EffectZone$ Command | Affected$ Creature.NamedCard+YouCtrl | AffectedZone$ Battlefield | AddTrigger$ NUCombat | AddSVar$ NUCounter | Description$ Creatures you control with the chosen name have "At the beginning of combat on your turn, you may pay {G}. If you do, put a +1/+1 counter on this creature."
|
||||||
SVar:NUCombat:Mode$ Phase | Phase$ BeginCombat | ValidPlayer$ You | Execute$ NUCounter | TriggerZones$ Battlefield | TriggerDescription$ At the beginning of combat on your turn, you may pay {G}. If you do, put a +1/+1 counter on this creature.
|
SVar:NUCombat:Mode$ Phase | Phase$ BeginCombat | ValidPlayer$ You | Execute$ NUCounter | TriggerZones$ Battlefield | TriggerDescription$ At the beginning of combat on your turn, you may pay {G}. If you do, put a +1/+1 counter on this creature.
|
||||||
SVar:NUCounter:AB$ PutCounter | Cost$ G | Defined$ Self | CounterType$ P1P1 | CounterNum$ 1
|
SVar:NUCounter:AB$ PutCounter | Cost$ G | Defined$ Self | CounterType$ P1P1 | CounterNum$ 1
|
||||||
SVar:AgendaLogic:BestCreatureInComputerDeck
|
SVar:AgendaLogic:BestCreatureInComputerDeck
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ Name:Nissa's Pilgrimage
|
|||||||
ManaCost:2 G
|
ManaCost:2 G
|
||||||
Types:Sorcery
|
Types:Sorcery
|
||||||
A:SP$ ChangeZone | Cost$ 2 G | Origin$ Library | Destination$ Library | ChangeType$ Land.Basic+Forest | ChangeNum$ X | References$ X,Y | RememberChanged$ True | SubAbility$ DBBattlefield | Shuffle$ False | StackDescription$ SpellDescription | SpellDescription$ Search your library for up to two basic Forest cards, reveal those cards, and put one onto the battlefield tapped and the rest into your hand. Then shuffle your library. Spell mastery — If there are two or more instant or sorcery cards in your graveyard, search your library for up to three basic Forest cards instead of two.
|
A:SP$ ChangeZone | Cost$ 2 G | Origin$ Library | Destination$ Library | ChangeType$ Land.Basic+Forest | ChangeNum$ X | References$ X,Y | RememberChanged$ True | SubAbility$ DBBattlefield | Shuffle$ False | StackDescription$ SpellDescription | SpellDescription$ Search your library for up to two basic Forest cards, reveal those cards, and put one onto the battlefield tapped and the rest into your hand. Then shuffle your library. Spell mastery — If there are two or more instant or sorcery cards in your graveyard, search your library for up to three basic Forest cards instead of two.
|
||||||
SVar:DBBattlefield:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | SubAbility$ DBHand | ChangeType$ Card.IsRemembered | ChangeNum$ 1 | Mandatory$ True | NoLooking$ True | SelectPrompt$ Select a card to go to the battlefield | Shuffle$ False | StackDescription$ None
|
SVar:DBBattlefield:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | SubAbility$ DBHand | ChangeType$ Card.IsRemembered | ChangeNum$ 1 | ForgetChanged$ True | Mandatory$ True | NoLooking$ True | SelectPrompt$ Select a card to go to the battlefield | Shuffle$ False | StackDescription$ None
|
||||||
SVar:DBHand:DB$ ChangeZone | Origin$ Library | Destination$ Hand | Defined$ Remembered | NoLooking$ True | StackDescription$ None | SubAbility$ DBCleanup
|
SVar:DBHand:DB$ ChangeZone | Origin$ Library | Destination$ Hand | Defined$ Remembered | NoLooking$ True | StackDescription$ None | SubAbility$ DBCleanup
|
||||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||||
SVar:X:Count$Compare Y GE2.3.2
|
SVar:X:Count$Compare Y GE2.3.2
|
||||||
|
|||||||
@@ -6,5 +6,5 @@ K:Trample
|
|||||||
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Land.YouCtrl | TriggerZones$ Battlefield | Execute$ TrigPutCounter | TriggerDescription$ Landfall — Whenever a land enters the battlefield under your control, put a +1/+1 counter on CARDNAME. If that land is a Forest, put two +1/+1 counters on CARDNAME instead.
|
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Land.YouCtrl | TriggerZones$ Battlefield | Execute$ TrigPutCounter | TriggerDescription$ Landfall — Whenever a land enters the battlefield under your control, put a +1/+1 counter on CARDNAME. If that land is a Forest, put two +1/+1 counters on CARDNAME instead.
|
||||||
SVar:TrigPutCounter:DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ X | References$ X
|
SVar:TrigPutCounter:DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ X | References$ X
|
||||||
SVar:X:TriggeredCard$Valid Forest/Plus.1
|
SVar:X:TriggeredCard$Valid Forest/Plus.1
|
||||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/oran_rief_hydra.jpg
|
SVar:BuffedBy:Land
|
||||||
Oracle:Trample\nLandfall — Whenever a land enters the battlefield under your control, put a +1/+1 counter on Oran-Rief Hydra. If that land is a Forest, put two +1/+1 counters on Oran-Rief Hydra instead.
|
Oracle:Trample\nLandfall — Whenever a land enters the battlefield under your control, put a +1/+1 counter on Oran-Rief Hydra. If that land is a Forest, put two +1/+1 counters on Oran-Rief Hydra instead.
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
Name:Panopticon
|
Name:Panopticon
|
||||||
ManaCost:no cost
|
ManaCost:no cost
|
||||||
Types:Plane Mirrodin
|
Types:Plane Mirrodin
|
||||||
T:Mode$ PlaneswalkedTo | ValidCard$ Card.Self | TriggerZones$ Command | Execute$ PanopticonDraw | TriggerDescription$ When you planeswalk to CARDNAME, draw a card.
|
T:Mode$ PlaneswalkedTo | ValidCard$ Card.Self | Execute$ PanopticonDraw | TriggerDescription$ When you planeswalk to CARDNAME, draw a card.
|
||||||
T:Mode$ Phase | Phase$ Draw | ValidPlayer$ You | Execute$ PanopticonDraw | TriggerZones$ Command | TriggerDescription$ At the beginning of your draw step, draw an additional card.
|
T:Mode$ Phase | Phase$ Draw | ValidPlayer$ You | Execute$ PanopticonDraw | TriggerZones$ Command | TriggerDescription$ At the beginning of your draw step, draw an additional card.
|
||||||
T:Mode$ PlanarDice | Result$ Chaos | TriggerZones$ Command | Execute$ PanopticonDraw | TriggerDescription$ Whenever you roll {CHAOS}, draw a card.
|
T:Mode$ PlanarDice | Result$ Chaos | TriggerZones$ Command | Execute$ PanopticonDraw | TriggerDescription$ Whenever you roll {CHAOS}, draw a card.
|
||||||
SVar:PanopticonDraw:DB$ Draw | Defined$ You | NumCards$ 1
|
SVar:PanopticonDraw:DB$ Draw | Defined$ You | NumCards$ 1
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
Name:Planewide Disaster
|
Name:Planewide Disaster
|
||||||
ManaCost:no cost
|
ManaCost:no cost
|
||||||
Types:Phenomenon
|
Types:Phenomenon
|
||||||
T:Mode$ PlaneswalkedTo | ValidCard$ Card.Self | TriggerZones$ Command | Execute$ Disaster | TriggerDescription$ When you encounter CARDNAME, destroy all creatures. (Then planeswalk away from this phenomenon)
|
T:Mode$ PlaneswalkedTo | ValidCard$ Card.Self | Execute$ Disaster | TriggerDescription$ When you encounter CARDNAME, destroy all creatures. (Then planeswalk away from this phenomenon)
|
||||||
SVar:Disaster:DB$ DestroyAll | ValidCards$ Creature | SubAbility$ PWAway
|
SVar:Disaster:DB$ DestroyAll | ValidCards$ Creature | SubAbility$ PWAway
|
||||||
SVar:PWAway:DB$ Planeswalk | Cost$ 0
|
SVar:PWAway:DB$ Planeswalk | Cost$ 0
|
||||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/planewide_disaster.jpg
|
SVar:Picture:http://www.wizards.com/global/images/magic/general/planewide_disaster.jpg
|
||||||
|
|||||||
10
forge-gui/res/cardsfolder/p/pyramids.txt
Normal file
10
forge-gui/res/cardsfolder/p/pyramids.txt
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
Name:Pyramids
|
||||||
|
ManaCost:6
|
||||||
|
Types:Artifact
|
||||||
|
A:AB$ Charm | Cost$ 2 | Choices$ DBDestroy,DBProtect | Defined$ You
|
||||||
|
SVar:DBDestroy:DB$ Destroy | ValidTgts$ Aura.AttachedTo Land | TgtPrompt$ Select target Aura attached to a land | SpellDescription$ Destroy target Aura attached to a land.
|
||||||
|
SVar:DBProtect:DB$ Effect | ValidTgts$ Land | TgtPrompt$ Select target land | ReplacementEffects$ DBRemove | SVars$ ExileEffect,RemoveDamage | ForgetOnMoved$ Battlefield | RememberObjects$ Targeted | SpellDescription$ The next time target land would be destroyed this turn, remove all damage marked on it instead.
|
||||||
|
SVar:DBRemove:Event$ Destroy | ValidCard$ Land.IsRemembered | ReplaceWith$ RemoveDamage | Description$ The next time target land would be destroyed this turn, remove all damage marked on it instead.
|
||||||
|
SVar:RemoveDamage:DB$ DealDamage | Defined$ ReplacedCard | Remove$ All | SubAbility$ ExileEffect
|
||||||
|
SVar:ExileEffect:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile
|
||||||
|
Oracle:{2}: Choose one —\n• Destroy target Aura attached to a land.\n• The next time target land would be destroyed this turn, remove all damage marked on it instead.
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
Name:Quicksilver Sea
|
Name:Quicksilver Sea
|
||||||
ManaCost:no cost
|
ManaCost:no cost
|
||||||
Types:Plane Mirrodin
|
Types:Plane Mirrodin
|
||||||
T:Mode$ PlaneswalkedTo | ValidCard$ Card.Self | TriggerZones$ Command | Execute$ QuicksilverScry | TriggerDescription$ When you planeswalk to CARDNAME or at the beginning of your upkeep, scry 4. (Look at the top four cards of your library, then put any number of them on the bottom of your library and the rest on top in any order.)
|
T:Mode$ PlaneswalkedTo | ValidCard$ Card.Self | Execute$ QuicksilverScry | TriggerDescription$ When you planeswalk to CARDNAME or at the beginning of your upkeep, scry 4. (Look at the top four cards of your library, then put any number of them on the bottom of your library and the rest on top in any order.)
|
||||||
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | Execute$ QuicksilverScry | TriggerZones$ Command | Secondary$ True | TriggerDescription$ When you planeswalk to CARDNAME or at the beginning of your upkeep, scry 4. (Look at the top four cards of your library, then put any number of them on the bottom of your library and the rest on top in any order.)
|
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | Execute$ QuicksilverScry | TriggerZones$ Command | Secondary$ True | TriggerDescription$ When you planeswalk to CARDNAME or at the beginning of your upkeep, scry 4. (Look at the top four cards of your library, then put any number of them on the bottom of your library and the rest on top in any order.)
|
||||||
SVar:QuicksilverScry:DB$ Scry | ScryNum$ 4
|
SVar:QuicksilverScry:DB$ Scry | ScryNum$ 4
|
||||||
T:Mode$ PlanarDice | Result$ Chaos | TriggerZones$ Command | Execute$ RolledChaos | TriggerDescription$ Whenever you roll {CHAOS}, reveal the top card of your library. You may play it without paying its mana cost.
|
T:Mode$ PlanarDice | Result$ Chaos | TriggerZones$ Command | Execute$ RolledChaos | TriggerDescription$ Whenever you roll {CHAOS}, reveal the top card of your library. You may play it without paying its mana cost.
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
Name:Reality Shaping
|
Name:Reality Shaping
|
||||||
ManaCost:no cost
|
ManaCost:no cost
|
||||||
Types:Phenomenon
|
Types:Phenomenon
|
||||||
T:Mode$ PlaneswalkedTo | ValidCard$ Card.Self | TriggerZones$ Command | Execute$ TrigPutFromHand | TriggerDescription$ When you encounter CARDNAME, starting with you, each player may put a permanent card from their hand onto the battlefield. (Then planeswalk away from this phenomenon.)
|
T:Mode$ PlaneswalkedTo | ValidCard$ Card.Self | Execute$ TrigPutFromHand | TriggerDescription$ When you encounter CARDNAME, starting with you, each player may put a permanent card from their hand onto the battlefield. (Then planeswalk away from this phenomenon.)
|
||||||
SVar:TrigPutFromHand:DB$ RepeatEach | StartingWithActivator$ True | RepeatPlayers$ Player | RepeatSubAbility$ DBChangeZone | SubAbility$ PWAway
|
SVar:TrigPutFromHand:DB$ RepeatEach | StartingWithActivator$ True | RepeatPlayers$ Player | RepeatSubAbility$ DBChangeZone | SubAbility$ PWAway
|
||||||
SVar:DBChangeZone:DB$ ChangeZone | DefinedPlayer$ Player.IsRemembered | Choser$ Player.IsRemembered | ChangeType$ Permanent | ChangeNum$ 1 | Origin$ Hand | Destination$ Battlefield
|
SVar:DBChangeZone:DB$ ChangeZone | DefinedPlayer$ Player.IsRemembered | Choser$ Player.IsRemembered | ChangeType$ Permanent | ChangeNum$ 1 | Origin$ Hand | Destination$ Battlefield
|
||||||
SVar:PWAway:DB$ Planeswalk | Cost$ 0
|
SVar:PWAway:DB$ Planeswalk | Cost$ 0
|
||||||
|
|||||||
@@ -3,6 +3,6 @@ ManaCost:1 W W
|
|||||||
Types:Creature Human Knight
|
Types:Creature Human Knight
|
||||||
PT:2/2
|
PT:2/2
|
||||||
K:Soulbond
|
K:Soulbond
|
||||||
S:Mode$ Continuous | Affected$ Creature.PairedWith,Creature.Self+Paired | AddKeyword$ Double Strike | Description$ As long as CARDNAME is paired with another creature, both creature have double strike.
|
S:Mode$ Continuous | Affected$ Creature.PairedWith,Creature.Self+Paired | AddKeyword$ Double Strike | Description$ As long as CARDNAME is paired with another creature, both creatures have double strike.
|
||||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/silverblade_paladin.jpg
|
SVar:Picture:http://www.wizards.com/global/images/magic/general/silverblade_paladin.jpg
|
||||||
Oracle:Soulbond (You may pair this creature with another unpaired creature when either enters the battlefield. They remain paired for as long as you control both of them.)\nAs long as Silverblade Paladin is paired with another creature, both creatures have double strike.
|
Oracle:Soulbond (You may pair this creature with another unpaired creature when either enters the battlefield. They remain paired for as long as you control both of them.)\nAs long as Silverblade Paladin is paired with another creature, both creatures have double strike.
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
Name:Skybreen
|
Name:Skybreen
|
||||||
ManaCost:no cost
|
ManaCost:no cost
|
||||||
Types:Plane Kaldheim
|
Types:Plane Kaldheim
|
||||||
S:Mode$ Continuous | Affected$ Card.TopLibrary | AffectedZone$ Library | MayLookAt$ Player | Description$ Players play with the top card of their libraries revealed.
|
S:Mode$ Continuous | EffectZone$ Command | Affected$ Card.TopLibrary | AffectedZone$ Library | MayLookAt$ Player | Description$ Players play with the top card of their libraries revealed.
|
||||||
S:Mode$ CantBeCast | EffectZone$ Command | ValidCard$ Card.sharesCardTypeWith EachTopLibrary | Description$ Spells that share a card type with the top card of a library can't be cast.
|
S:Mode$ CantBeCast | EffectZone$ Command | ValidCard$ Card.sharesCardTypeWith EachTopLibrary | Description$ Spells that share a card type with the top card of a library can't be cast.
|
||||||
T:Mode$ PlanarDice | Result$ Chaos | TriggerZones$ Command | Execute$ RolledChaos | TriggerDescription$ Whenever you roll {CHAOS}, target player loses life equal to the number of cards in their hand.
|
T:Mode$ PlanarDice | Result$ Chaos | TriggerZones$ Command | Execute$ RolledChaos | TriggerDescription$ Whenever you roll {CHAOS}, target player loses life equal to the number of cards in their hand.
|
||||||
SVar:RolledChaos:DB$ LoseLife | ValidTgts$ Player | LifeAmount$ Y | References$ Y
|
SVar:RolledChaos:DB$ LoseLife | ValidTgts$ Player | LifeAmount$ Y | References$ Y
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
Name:Spatial Merging
|
Name:Spatial Merging
|
||||||
ManaCost:no cost
|
ManaCost:no cost
|
||||||
Types:Phenomenon
|
Types:Phenomenon
|
||||||
T:Mode$ PlaneswalkedTo | ValidCard$ Card.Self | TriggerZones$ Command | Execute$ TrigDig | TriggerDescription$ When you encounter CARDNAME, reveal cards from the top of your planar deck until you reveal two plane cards. Simultaneously planeswalk to both of them. Put all other cards revealed this way on the bottom of your planar deck in any order.
|
T:Mode$ PlaneswalkedTo | ValidCard$ Card.Self | Execute$ TrigDig | TriggerDescription$ When you encounter CARDNAME, reveal cards from the top of your planar deck until you reveal two plane cards. Simultaneously planeswalk to both of them. Put all other cards revealed this way on the bottom of your planar deck in any order.
|
||||||
SVar:TrigDig:DB$ DigUntil | Amount$ 2 | Valid$ Plane | DigZone$ PlanarDeck | RememberFound$ True | FoundDestination$ PlanarDeck | RevealedDestination$ PlanarDeck | RevealedLibraryPosition$ -1 | SubAbility$ DBPWTo
|
SVar:TrigDig:DB$ DigUntil | Amount$ 2 | Valid$ Plane | DigZone$ PlanarDeck | RememberFound$ True | FoundDestination$ PlanarDeck | RevealedDestination$ PlanarDeck | RevealedLibraryPosition$ -1 | SubAbility$ DBPWTo
|
||||||
SVar:DBPWTo:DB$ Planeswalk | Defined$ Remembered | SubAbility$ DBCleanup
|
SVar:DBPWTo:DB$ Planeswalk | Defined$ Remembered | SubAbility$ DBCleanup
|
||||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||||
|
|||||||
18
forge-gui/res/cardsfolder/t/tawnoss_coffin.txt
Normal file
18
forge-gui/res/cardsfolder/t/tawnoss_coffin.txt
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
Name:Tawnos's Coffin
|
||||||
|
ManaCost:4
|
||||||
|
Types:Artifact
|
||||||
|
K:You may choose not to untap CARDNAME during your untap step.
|
||||||
|
A:AB$ Pump | Cost$ 3 T | ValidTgts$ Creature | ImprintCards$ Targeted | SubAbility$ RecordCounters | StackDescription$ SpellDescription | SpellDescription$ Exile target creature and all Auras attached to it. Note the number and kind of counters that were on that creature. When CARDNAME leaves the battlefield or becomes untapped, return that exiled card to the battlefield under its owner’s control tapped with the noted number and kind of counters on it. If you do, return the other exiled cards to the battlefield under their owner’s control attached to that permanent.
|
||||||
|
SVar:RecordCounters:DB$ NoteCounters | Mode$ Store | Defined$ Imprinted | SubAbility$ DBRememberAura
|
||||||
|
SVar:DBRememberAura:DB$ PumpAll | ValidCards$ Aura.AttachedTo Creature.IsImprinted | RememberAllPumped$ True | StackDescription$ None | SubAbility$ DBEffect
|
||||||
|
SVar:DBEffect:DB$ Effect | Triggers$ LeavesPlay,Untap | SVars$ RestoreCounters,TrigReturn,TrigAuraReturn,ExileSelf | References$ LeavesPlay,Untap | ImprintCards$ ParentTarget | RememberObjects$ Remembered | SubAbility$ DBExile
|
||||||
|
SVar:DBExile:DB$ ChangeZoneAll | Origin$ Battlefield | Destination$ Exile | ChangeType$ Card.IsRemembered,Card.IsImprinted | SubAbility$ DBCleanup
|
||||||
|
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | ClearImprinted$ True
|
||||||
|
SVar:LeavesPlay:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.EffectSource | Execute$ RestoreCounters | TriggerController$ TriggeredCardController | TriggerDescription$ When EFFECTSOURCE leaves the battlefield or becomes untapped, return that exiled card to the battlefield under its owner’s control tapped with the noted number and kind of counters on it. If you do, return the other exiled cards to the battlefield under their owner’s control attached to that permanent.
|
||||||
|
SVar:Untap:Mode$ Untaps | ValidCard$ Card.EffectSource | Execute$ RestoreCounters | TriggerController$ TriggeredCardController | Secondary$ True | TriggerDescription$ When EFFECTSOURCE leaves the battlefield or becomes untapped, return that exiled card to the battlefield under its owner’s control tapped with the noted number and kind of counters on it. If you do, return the other exiled cards to the battlefield under their owner’s control attached to that permanent.
|
||||||
|
SVar:RestoreCounters:DB$ NoteCounters | Mode$ Load | Defined$ Imprinted | SubAbility$ TrigReturn
|
||||||
|
SVar:TrigReturn:DB$ ChangeZone | Defined$ Imprinted | Origin$ Exile | Destination$ Battlefield | Tapped$ True | SubAbility$ TrigAuraReturn
|
||||||
|
SVar:TrigAuraReturn:DB$ ChangeZone | Defined$ Remembered | Origin$ Exile | Destination$ Battlefield | AttachedTo$ Valid Creature.IsImprinted | SubAbility$ ExileSelf
|
||||||
|
SVar:ExileSelf:DB$ ChangeZone | Origin$ Command | Destination$ Exile | Defined$ Self
|
||||||
|
AI:RemoveDeck:All
|
||||||
|
Oracle:You may choose not to untap Tawnos’s Coffin during your untap step.\n{3},{T}: Exile target creature and all Auras attached to it. Note the number and kind of counters that were on that creature. When Tawnos’s Coffin leaves the battlefield or becomes untapped, return that exiled card to the battlefield under its owner’s control tapped with the noted number and kind of counters on it. If you do, return the other exiled cards to the battlefield under their owner’s control attached to that permanent.
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
Name:The Aether Flues
|
Name:The Aether Flues
|
||||||
ManaCost:no cost
|
ManaCost:no cost
|
||||||
Types:Plane Iquatana
|
Types:Plane Iquatana
|
||||||
T:Mode$ PlaneswalkedTo | ValidCard$ Card.Self | TriggerZones$ Command | Execute$ FluesSacrifice | TriggerDescription$ When you planeswalk to CARDNAME or at the beginning of your upkeep, you may sacrifice a creature. If you do, reveal cards from the top of your library until you reveal a creature card, put that card onto the battlefield, then shuffle all other cards revealed this way into your library.
|
T:Mode$ PlaneswalkedTo | ValidCard$ Card.Self | Execute$ FluesSacrifice | TriggerDescription$ When you planeswalk to CARDNAME or at the beginning of your upkeep, you may sacrifice a creature. If you do, reveal cards from the top of your library until you reveal a creature card, put that card onto the battlefield, then shuffle all other cards revealed this way into your library.
|
||||||
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | Execute$ FluesSacrifice | TriggerZones$ Command | Secondary$ True | TriggerDescription$ When you planeswalk to CARDNAME or at the beginning of your upkeep, you may sacrifice a creature. If you do, reveal cards from the top of your library until you reveal a creature card, put that card onto the battlefield, then shuffle all other cards revealed this way into your library.
|
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | Execute$ FluesSacrifice | TriggerZones$ Command | Secondary$ True | TriggerDescription$ When you planeswalk to CARDNAME or at the beginning of your upkeep, you may sacrifice a creature. If you do, reveal cards from the top of your library until you reveal a creature card, put that card onto the battlefield, then shuffle all other cards revealed this way into your library.
|
||||||
SVar:FluesSacrifice:DB$ Sacrifice | Optional$ True | SacValid$ Creature | Amount$ 1 | RememberSacrificed$ True | SubAbility$ FluesDig
|
SVar:FluesSacrifice:DB$ Sacrifice | Optional$ True | SacValid$ Creature | Amount$ 1 | RememberSacrificed$ True | SubAbility$ FluesDig
|
||||||
SVar:FluesDig:DB$ DigUntil | Valid$ Creature | ValidDescription$ creature | FoundDestination$ Battlefield | RevealedDestination$ Library | Shuffle$ True | ConditionDefined$ Remembered | ConditionPresent$ Creature | ConditionCompare$ EQ1 | SubAbility$ DBCleanup
|
SVar:FluesDig:DB$ DigUntil | Valid$ Creature | ValidDescription$ creature | FoundDestination$ Battlefield | RevealedDestination$ Library | Shuffle$ True | ConditionDefined$ Remembered | ConditionPresent$ Creature | ConditionCompare$ EQ1 | SubAbility$ DBCleanup
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
Name:Time Distortion
|
Name:Time Distortion
|
||||||
ManaCost:no cost
|
ManaCost:no cost
|
||||||
Types:Phenomenon
|
Types:Phenomenon
|
||||||
T:Mode$ PlaneswalkedTo | ValidCard$ Card.Self | TriggerZones$ Command | Execute$ TrigReverse | TriggerDescription$ When you encounter CARDNAME, reverse the game's turn order. (For example, if play had proceeded clockwise around the table, it now goes counterclockwise. Then planeswalk away from this phenomenon.)
|
T:Mode$ PlaneswalkedTo | ValidCard$ Card.Self | Execute$ TrigReverse | TriggerDescription$ When you encounter CARDNAME, reverse the game's turn order. (For example, if play had proceeded clockwise around the table, it now goes counterclockwise. Then planeswalk away from this phenomenon.)
|
||||||
SVar:TrigReverse:DB$ ReverseTurnOrder | SubAbility$ PWAway
|
SVar:TrigReverse:DB$ ReverseTurnOrder | SubAbility$ PWAway
|
||||||
SVar:PWAway:DB$ Planeswalk | Cost$ 0
|
SVar:PWAway:DB$ Planeswalk | Cost$ 0
|
||||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/time_distortion.jpg
|
SVar:Picture:http://www.wizards.com/global/images/magic/general/time_distortion.jpg
|
||||||
|
|||||||
27
forge-gui/res/editions/Historic Anthology 1.txt
Normal file
27
forge-gui/res/editions/Historic Anthology 1.txt
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
[metadata]
|
||||||
|
Code=HA1
|
||||||
|
Date=2019-11-21
|
||||||
|
Name=Historic Anthology 1
|
||||||
|
Type=Other
|
||||||
|
|
||||||
|
[cards]
|
||||||
|
1 R Serra Ascendant
|
||||||
|
2 C Soul Warden
|
||||||
|
3 R Kinsbaile Cavalier
|
||||||
|
4 C Treasure Hunt
|
||||||
|
5 C Distant Melody
|
||||||
|
6 R Cryptbreaker
|
||||||
|
7 R Hypnotic Specter
|
||||||
|
8 R Phyrexian Arena
|
||||||
|
9 C Tendrils of Corruption
|
||||||
|
10 C Kiln Fiend
|
||||||
|
11 U Goblin Matron
|
||||||
|
12 R Hidetsugu's Second Rite
|
||||||
|
13 C Elvish Visionary
|
||||||
|
14 R Fauna Shaman
|
||||||
|
15 U Imperious Perfect
|
||||||
|
16 U Burning-Tree Emissary
|
||||||
|
17 R Captain Sisay
|
||||||
|
18 U Ornithopter
|
||||||
|
19 C Mind Stone
|
||||||
|
20 R Darksteel Reactor
|
||||||
32
forge-gui/res/editions/Historic Anthology 2.txt
Normal file
32
forge-gui/res/editions/Historic Anthology 2.txt
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
[metadata]
|
||||||
|
Code=HA2
|
||||||
|
Date=2020-03-12
|
||||||
|
Name=Historic Anthology 2
|
||||||
|
Type=Other
|
||||||
|
|
||||||
|
[cards]
|
||||||
|
1 U Nyx-Fleece Ram
|
||||||
|
2 R Ranger of Eos
|
||||||
|
3 R Sigil of the Empty Throne
|
||||||
|
4 R Thalia, Guardian of Thraben
|
||||||
|
5 U Merrow Reejerey
|
||||||
|
6 R Inexorable Tide
|
||||||
|
7 U Brain Maggot
|
||||||
|
8 R Pack Rat
|
||||||
|
9 U Virulent Plague
|
||||||
|
10 R Waste Not
|
||||||
|
11 M Dragonmaster Outcast
|
||||||
|
12 U Goblin Ruinblaster
|
||||||
|
13 C Ancestral Mask
|
||||||
|
14 R Terravore
|
||||||
|
15 R Knight of the Reliquary
|
||||||
|
16 R Maelstrom Pulse
|
||||||
|
17 R Meddling Mage
|
||||||
|
18 M Platinum Angel
|
||||||
|
19 C Barren Moor
|
||||||
|
20 C Bojuka Bog
|
||||||
|
21 C Forgotten Cave
|
||||||
|
22 U Ghost Quarter
|
||||||
|
23 C Lonely Sandbar
|
||||||
|
24 C Secluded Steppe
|
||||||
|
25 C Tranquil Thicket
|
||||||
@@ -44,7 +44,7 @@ Type=Other
|
|||||||
52 M Meren of Clan Nel Toth
|
52 M Meren of Clan Nel Toth
|
||||||
53 M Narset, Enlightened Master
|
53 M Narset, Enlightened Master
|
||||||
54 M Oona, Queen of the Fae
|
54 M Oona, Queen of the Fae
|
||||||
55 M Saskia, the Unyielding
|
55 M Saskia the Unyielding
|
||||||
68 M Heliod, God of the Sun
|
68 M Heliod, God of the Sun
|
||||||
69 M Karametra, God of Harvests
|
69 M Karametra, God of Harvests
|
||||||
70 M Iroas, God of Victory
|
70 M Iroas, God of Victory
|
||||||
|
|||||||
12
forge-gui/res/editions/Secret Lair Ultimate Edition.txt
Normal file
12
forge-gui/res/editions/Secret Lair Ultimate Edition.txt
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
[metadata]
|
||||||
|
Code=SLU
|
||||||
|
Date=2020-05-29
|
||||||
|
Name=Secret Lair: Ultimate Edition
|
||||||
|
Type=Reprint
|
||||||
|
|
||||||
|
[cards]
|
||||||
|
1 R Marsh Flats
|
||||||
|
2 R Scalding Tarn
|
||||||
|
3 R Verdant Catacombs
|
||||||
|
4 R Arid Mesa
|
||||||
|
5 R Misty Rainforest
|
||||||
9
forge-gui/res/editions/Signature Spellbook Chandra.txt
Normal file
9
forge-gui/res/editions/Signature Spellbook Chandra.txt
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
[metadata]
|
||||||
|
Code=SS3
|
||||||
|
Date=2020-06-26
|
||||||
|
Name=Signature Spellbook: Chandra
|
||||||
|
Type=Reprint
|
||||||
|
|
||||||
|
[cards]
|
||||||
|
1 M Chandra, Torch of Defiance
|
||||||
|
4 M Past in Flames
|
||||||
8
forge-gui/res/formats/Digital/Historic.txt
Normal file
8
forge-gui/res/formats/Digital/Historic.txt
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
[format]
|
||||||
|
Name:Historic
|
||||||
|
Type:Digital
|
||||||
|
Subtype:Arena
|
||||||
|
Effective:2019-11-21
|
||||||
|
Order:142
|
||||||
|
Sets:XLN, RIX, DOM, M19, GRN, G18, RNA, WAR, M20, ELD, HA1, THB, HA2
|
||||||
|
Banned:Oko, Thief of Crowns; Once Upon a Time; Veil of Summer
|
||||||
16
forge-gui/res/puzzle/PS_THB8.pzl
Normal file
16
forge-gui/res/puzzle/PS_THB8.pzl
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
[metadata]
|
||||||
|
Name:Possibility Storm - Theros Beyond Death #08
|
||||||
|
URL:https://i2.wp.com/www.possibilitystorm.com/wp-content/uploads/2020/03/151.-THB8-scaled.jpg
|
||||||
|
Goal:Win
|
||||||
|
Turns:1
|
||||||
|
Difficulty:Uncommon
|
||||||
|
Description:Win this turn.
|
||||||
|
[state]
|
||||||
|
humanlife=20
|
||||||
|
ailife=23
|
||||||
|
turn=1
|
||||||
|
activeplayer=human
|
||||||
|
activephase=MAIN1
|
||||||
|
humanhand=Bone Splinters;Gray Merchant of Asphodel;Mogis's Favor;Kaya's Ghostform;Massacre Girl
|
||||||
|
humanbattlefield=Nightmare Shepherd;Nightmare Shepherd;Nyx Lotus;Swamp;Swamp;Swamp;Swamp;Swamp;Swamp
|
||||||
|
aibattlefield=Bishop of Wings;Angelic Guardian;Sunblade Angel
|
||||||
19
forge-gui/res/puzzle/PS_THB9.pzl
Normal file
19
forge-gui/res/puzzle/PS_THB9.pzl
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
[metadata]
|
||||||
|
Name:Possibility Storm - Theros Beyond Death #09
|
||||||
|
URL:https://i0.wp.com/www.possibilitystorm.com/wp-content/uploads/2020/03/152.-THB9-scaled.jpg
|
||||||
|
Goal:Win
|
||||||
|
Turns:1
|
||||||
|
Difficulty:Mythic
|
||||||
|
Description:Win this turn. Assume your opponent has no mana available and no cards in hand. Assume both players have over 30 cards left in their library, and that any drawn are irrelevant to the puzzle.
|
||||||
|
[state]
|
||||||
|
humanlife=2
|
||||||
|
ailife=94
|
||||||
|
turn=1
|
||||||
|
activeplayer=human
|
||||||
|
activephase=MAIN1
|
||||||
|
humanhand=Terror of Mount Velus;Awaken the Erstwhile;Dragon Mage;Corpse Knight;Fling
|
||||||
|
humanlibrary=Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt
|
||||||
|
humanbattlefield=The Royal Scions|Counters:LOYALTY=8;Purphoros, Bronze-Blooded;Smothering Tithe;Mace of the Valiant;Bag of Holding;Bag of Holding;Temple of Malice|NoETBTrigs;Temple of Malice|NoETBTrigs;Temple of Malice|NoETBTrigs;Temple of Malice|NoETBTrigs;Temple of Triumph|NoETBTrigs;Temple of Triumph|NoETBTrigs;Temple of Triumph|NoETBTrigs;Temple of Triumph|NoETBTrigs
|
||||||
|
ailibrary=Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt
|
||||||
|
aibattlefield=Knight of Autumn;Vindictive Vampire;Ajani's Pridemate|Counters:P1P1=15;Ajani, Strength of the Pride|Counters:LOYALTY=2;Sorin, Vengeful Bloodlord|Counters:LOYALTY=2
|
||||||
|
humanprecast=Smothering Tithe:TrigToken;Smothering Tithe:TrigToken;Smothering Tithe:TrigToken;Smothering Tithe:TrigToken
|
||||||
@@ -152,7 +152,7 @@ public final class FModel {
|
|||||||
FModel.getPreferences().getPrefBoolean(FPref.LOAD_CARD_SCRIPTS_LAZILY));
|
FModel.getPreferences().getPrefBoolean(FPref.LOAD_CARD_SCRIPTS_LAZILY));
|
||||||
final CardStorageReader tokenReader = new CardStorageReader(ForgeConstants.TOKEN_DATA_DIR, progressBarBridge,
|
final CardStorageReader tokenReader = new CardStorageReader(ForgeConstants.TOKEN_DATA_DIR, progressBarBridge,
|
||||||
FModel.getPreferences().getPrefBoolean(FPref.LOAD_CARD_SCRIPTS_LAZILY));
|
FModel.getPreferences().getPrefBoolean(FPref.LOAD_CARD_SCRIPTS_LAZILY));
|
||||||
magicDb = new StaticData(reader, tokenReader, ForgeConstants.EDITIONS_DIR, ForgeConstants.BLOCK_DATA_DIR);
|
magicDb = new StaticData(reader, tokenReader, ForgeConstants.EDITIONS_DIR, ForgeConstants.BLOCK_DATA_DIR, FModel.getPreferences().getPrefBoolean(FPref.UI_LOAD_UNKNOWN_CARDS));
|
||||||
CardTranslation.preloadTranslation(preferences.getPref(FPref.UI_LANGUAGE), ForgeConstants.LANG_DIR);
|
CardTranslation.preloadTranslation(preferences.getPref(FPref.UI_LANGUAGE), ForgeConstants.LANG_DIR);
|
||||||
|
|
||||||
//create profile dirs if they don't already exist
|
//create profile dirs if they don't already exist
|
||||||
|
|||||||
@@ -139,6 +139,7 @@ public class ForgePreferences extends PreferencesStore<ForgePreferences.FPref> {
|
|||||||
UI_ENABLE_PRELOAD_EXTENDED_ART("false"),
|
UI_ENABLE_PRELOAD_EXTENDED_ART("false"),
|
||||||
UI_ENABLE_BORDER_MASKING("false"),
|
UI_ENABLE_BORDER_MASKING("false"),
|
||||||
UI_SHOW_FPS("false"),
|
UI_SHOW_FPS("false"),
|
||||||
|
UI_LOAD_UNKNOWN_CARDS("true"),
|
||||||
UI_ALLOW_ORDER_GRAVEYARD_WHEN_NEEDED ("Never"),
|
UI_ALLOW_ORDER_GRAVEYARD_WHEN_NEEDED ("Never"),
|
||||||
UI_DEFAULT_FONT_SIZE("12"),
|
UI_DEFAULT_FONT_SIZE("12"),
|
||||||
UI_SELECT_FROM_CARD_DISPLAYS("true"),
|
UI_SELECT_FROM_CARD_DISPLAYS("true"),
|
||||||
|
|||||||
@@ -46,8 +46,11 @@ def initializeEditions():
|
|||||||
metadata = True
|
metadata = True
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
if line.startswith("#"):
|
||||||
|
continue
|
||||||
|
|
||||||
if line:
|
if line:
|
||||||
hasSetNumbers = line.split(" ", 1)[0].isdigit()
|
hasSetNumbers = line[0].isdigit()
|
||||||
|
|
||||||
card = line.split(" ", 2 if hasSetNumbers else 1)[-1].rstrip()
|
card = line.split(" ", 2 if hasSetNumbers else 1)[-1].rstrip()
|
||||||
if card not in mtgDataCards:
|
if card not in mtgDataCards:
|
||||||
|
|||||||
Reference in New Issue
Block a user