Merge remote-tracking branch 'upstream/master'

This commit is contained in:
CCTV-1
2020-04-02 21:32:41 +08:00
56 changed files with 258 additions and 68 deletions

View File

@@ -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; }

View File

@@ -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));
} }

View File

@@ -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;

View File

@@ -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);

View File

@@ -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();
} }

View File

@@ -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 ");

View File

@@ -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."),

View File

@@ -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;
} }

View File

@@ -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>

View File

@@ -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));

View File

@@ -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;

View File

@@ -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() {

View File

@@ -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>

View File

@@ -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;

View File

@@ -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);
} }
} }

View File

@@ -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"),

View File

@@ -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

View File

@@ -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.

View File

@@ -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

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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

View File

@@ -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.

View File

@@ -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.

View 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 players first upkeep, that player creates a 1/1 red Goblin creature token with “This creature cant 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 players first upkeep, that player creates a 1/1 red Goblin creature token with “This creature cant block.”

View File

@@ -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.)

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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.

View File

@@ -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

View File

@@ -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

View File

@@ -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.

View File

@@ -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

View File

@@ -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

View 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.

View File

@@ -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.

View File

@@ -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

View File

@@ -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.

View File

@@ -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

View File

@@ -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

View 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 owners 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 owners 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 owners 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 owners 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 owners 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 owners 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 Tawnoss 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 Tawnoss Coffin leaves the battlefield or becomes untapped, return that exiled card to the battlefield under its owners 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 owners control attached to that permanent.

View File

@@ -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

View File

@@ -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

View 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

View 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

View File

@@ -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

View 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

View 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

View 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

View 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

View 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

View File

@@ -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

View File

@@ -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"),

View File

@@ -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: