Merge branch 'master' into questMode_wildOpponents

This commit is contained in:
Alessandro Coli
2020-09-29 19:58:46 +02:00
37 changed files with 423 additions and 237 deletions

View File

@@ -20,9 +20,12 @@ package forge.game;
import com.google.common.base.Predicate;
import com.google.common.base.Predicates;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.HashBasedTable;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Multimap;
import com.google.common.collect.Table;
import com.google.common.eventbus.EventBus;
import forge.card.CardRarity;
import forge.card.CardStateName;
@@ -53,6 +56,8 @@ import forge.util.Visitor;
import java.util.*;
import org.apache.commons.lang3.tuple.Pair;
/**
* Represents the state of a <i>single game</i>, a new instance is created for each game.
*/
@@ -86,6 +91,8 @@ public class Game {
private Map<Player, PlayerCollection> attackedThisTurn = Maps.newHashMap();
private Map<Player, PlayerCollection> attackedLastTurn = Maps.newHashMap();
private Table<CounterType, Player, List<Pair<Card, Integer>>> countersAddedThisTurn = HashBasedTable.create();
private Player monarch = null;
private Player monarchBeginTurn = null;
@@ -939,4 +946,46 @@ public class Game {
}
return result;
}
public void onCleanupPhase() {
clearCounterAddedThisTurn();
for (Player player : getPlayers()) {
player.onCleanupPhase();
}
}
public void addCounterAddedThisTurn(Player putter, CounterType cType, Card card, Integer value) {
if (putter == null || card == null || value <= 0) {
return;
}
List<Pair<Card, Integer>> result = countersAddedThisTurn.get(cType, putter);
if (result == null) {
result = Lists.newArrayList();
}
result.add(Pair.of(CardUtil.getLKICopy(card), value));
if (!countersAddedThisTurn.contains(cType, putter)) {
countersAddedThisTurn.put(cType, putter, result);
}
}
public int getCounterAddedThisTurn(CounterType cType, String validPlayer, String validCard, Card source, Player sourceController, SpellAbility spellAbility) {
int result = 0;
if (!countersAddedThisTurn.containsRow(cType)) {
return result;
}
for (Map.Entry<Player, List<Pair<Card, Integer>>> e : countersAddedThisTurn.row(cType).entrySet()) {
if (e.getKey().isValid(validPlayer.split(","), sourceController, source, spellAbility)) {
for (Pair<Card, Integer> p : e.getValue()) {
if (p.getKey().isValid(validCard.split(","), sourceController, source, spellAbility)) {
result += p.getValue();
}
}
}
}
return result;
}
public void clearCounterAddedThisTurn() {
countersAddedThisTurn.clear();
}
}

View File

@@ -1593,6 +1593,8 @@ public class AbilityUtils {
final String[] sq;
sq = l[0].split("\\.");
final Game game = c.getGame();
if (ctb != null) {
// Count$Compare <int comparator value>.<True>.<False>
if (sq[0].startsWith("Compare")) {
@@ -1776,6 +1778,13 @@ public class AbilityUtils {
}
}
}
if (l[0].startsWith("CountersAddedThisTurn")) {
final String[] parts = l[0].split(" ");
CounterType cType = CounterType.getType(parts[1]);
return CardFactoryUtil.doXMath(game.getCounterAddedThisTurn(cType, parts[2], parts[3], c, sa.getActivatingPlayer(), sa), expr, c);
}
}
}
return CardFactoryUtil.xCount(c, s2);

View File

@@ -201,6 +201,26 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
}
}
sb.append(" Then shuffle that library.");
} else if (origin.equals("Sideboard")) {
sb.append(chooserNames);
//currently Reveal is always True in ChangeZone
if (sa.hasParam("Reveal")) {
sb.append(" may reveal ").append(num).append(" ").append(type).append(" from outside the game and put ");
if (num == 1) {
sb.append("it ");
} else {
sb.append("them ");
}
sb.append("into their ").append(destination.toLowerCase()).append(".");
} else {
if (sa.hasParam("Mandatory")) {
sb.append(" puts ");
} else {
sb.append(" may put ");
}
sb.append(num).append(" ").append(type).append(" from outside the game into their ");
sb.append(destination.toLowerCase()).append(".");
}
} else if (origin.equals("Hand")) {
sb.append(chooserNames);
if (!chooserNames.equals(fetcherNames)) {

View File

@@ -1239,7 +1239,7 @@ public class Card extends GameEntity implements Comparable<Card> {
final int loyaltyBefore = getCurrentLoyalty();
setCounters(counterType, newValue);
getController().addCounterToPermThisTurn(counterType, addAmount);
getGame().addCounterAddedThisTurn(source, counterType, this, addAmount);
view.updateCounters(this);
//fire card stats changed event if p/t bonuses or loyalty changed from added counters
@@ -1267,7 +1267,8 @@ public class Card extends GameEntity implements Comparable<Card> {
}
} else {
setCounters(counterType, newValue);
getController().addCounterToPermThisTurn(counterType, addAmount);
getGame().addCounterAddedThisTurn(source, counterType, this, addAmount);
view.updateCounters(this);
}
if (newValue <= 0) {

View File

@@ -841,14 +841,6 @@ public class CardFactoryUtil {
return doXMath(maxNum, m, c);
}
// Count$CountersAddedToPermYouCtrl <CounterType>
if (l[0].startsWith("CountersAddedToPermYouCtrl")) {
final String[] components = l[0].split(" ", 2);
final CounterType counterType = CounterType.getType(components[1]);
int n = cc.getCounterToPermThisTurn(counterType);
return doXMath(n, m, c);
}
if (l[0].startsWith("CommanderCastFromCommandZone")) {
// only used by Opal Palace, and it does add the trigger to the card
return doXMath(cc.getCommanderCast(c), m, c);

View File

@@ -501,9 +501,7 @@ public class PhaseHandler implements java.io.Serializable {
bPreventCombatDamageThisTurn = false;
if (!bRepeatCleanup) {
// only call onCleanupPhase when Cleanup is not repeated
for (Player player : game.getPlayers()) {
player.onCleanupPhase();
}
game.onCleanupPhase();
setPlayerTurn(handleNextTurn());
// "Trigger" for begin turn to get around a phase skipping
final Map<AbilityKey, Object> runParams = AbilityKey.newMap();

View File

@@ -114,8 +114,6 @@ public class Player extends GameEntity implements Comparable<Player> {
private CardCollection sacrificedThisTurn = new CardCollection();
private Map<CounterType, Integer> countersAddedtoPermThisTurn = Maps.newHashMap();
/** A list of tokens not in play, but on their way.
* This list is kept in order to not break ETB-replacement
* on tokens. */
@@ -2289,20 +2287,6 @@ public class Player extends GameEntity implements Comparable<Player> {
sacrificedThisTurn.clear();
}
public final void addCounterToPermThisTurn(final CounterType type, final int x) {
countersAddedtoPermThisTurn.put(type, getCounterToPermThisTurn(type) + x);
}
public final Integer getCounterToPermThisTurn(final CounterType type) {
if (countersAddedtoPermThisTurn.containsKey(type))
return countersAddedtoPermThisTurn.get(type);
return 0;
}
public final void resetCounterToPermThisTurn() {
countersAddedtoPermThisTurn.clear();
}
public final int getSpellsCastThisTurn() {
return spellsCastThisTurn;
}
@@ -2521,7 +2505,6 @@ public class Player extends GameEntity implements Comparable<Player> {
resetSurveilThisTurn();
resetCycledThisTurn();
resetSacrificedThisTurn();
resetCounterToPermThisTurn();
clearAssignedDamage();
resetAttackersDeclaredThisTurn();
resetAttackedOpponentsThisTurn();

View File

@@ -37,7 +37,6 @@ import forge.util.Localizer;
import forge.util.Utils;
import java.io.File;
import java.io.FileFilter;
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Deque;
@@ -160,25 +159,17 @@ public class Forge implements ApplicationListener {
private void preloadExtendedArt() {
if (!enablePreloadExtendedArt)
return;
List<String> keys = new ArrayList<>();
File[] directories = new File(ForgeConstants.CACHE_CARD_PICS_DIR).listFiles(new FileFilter() {
@Override
public boolean accept(File file) {
if (!file.getName().startsWith("MPS_"))
return false;
return file.isDirectory();
}
});
for (File folder : directories) {
File[] files = new File(folder.toString()).listFiles();
for (File file : files) {
if (file.isFile()) {
keys.add(folder.getName() + "/" +file.getName().replace(".jpg","").replace(".png",""));
}
}
List<String> BorderlessCardlistkeys = FileUtil.readFile(ForgeConstants.BORDERLESS_CARD_LIST_FILE);
if(BorderlessCardlistkeys.isEmpty())
return;
List<String> filteredkeys = new ArrayList<>();
for (String cardname : BorderlessCardlistkeys){
File image = new File(ForgeConstants.CACHE_CARD_PICS_DIR+"/"+cardname+".jpg");
if (image.exists())
filteredkeys.add(cardname);
}
if (!keys.isEmpty())
ImageCache.preloadCache((Iterable<String>)keys);
if (!filteredkeys.isEmpty())
ImageCache.preloadCache(filteredkeys);
}
private void afterDbLoaded() {

View File

@@ -27,6 +27,7 @@ import com.google.common.cache.LoadingCache;
import com.google.common.cache.RemovalCause;
import com.google.common.cache.RemovalListener;
import com.google.common.cache.RemovalNotification;
import forge.Forge;
import forge.ImageKeys;
import forge.card.CardEdition;
import forge.card.CardRenderer;
@@ -106,6 +107,8 @@ public class ImageCache {
}
public static void disposeTexture(){
if (Forge.enablePreloadExtendedArt)
return;
for (Texture t: cache.asMap().values()) {
if (!t.toString().contains("pics/icons")) //fixes quest avatars black texture. todo: filter textures that are safe to dispose...
t.dispose();

View File

@@ -1,7 +1,7 @@
package forge.assets;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import com.badlogic.gdx.files.FileHandle;
import com.badlogic.gdx.graphics.Color;
@@ -14,142 +14,14 @@ import forge.FThreads;
import forge.Forge;
import forge.ImageKeys;
import forge.properties.ForgeConstants;
import forge.util.FileUtil;
import forge.util.TextUtil;
import static forge.assets.ImageCache.croppedBorderImage;
final class ImageLoader extends CacheLoader<String, Texture> {
private static ArrayList<String> borderlessCardlistKey = new ArrayList<String>() {
{//TODO: load the values from text list instead of hardcoded
add("2XM/Academy Ruins2.fullborder");
add("2XM/Atraxa, Praetors' Voice2.fullborder");
add("2XM/Avacyn, Angel of Hope2.fullborder");
add("2XM/Batterskull2.fullborder");
add("2XM/Blightsteel Colossus2.fullborder");
add("2XM/Blood Moon2.fullborder");
add("2XM/Brainstorm2.fullborder");
add("2XM/Chrome Mox2.fullborder");
add("2XM/Council's Judgment2.fullborder");
add("2XM/Crop Rotation2.fullborder");
add("2XM/Cyclonic Rift2.fullborder");
add("2XM/Dark Confidant2.fullborder");
add("2XM/Doubling Season2.fullborder");
add("2XM/Expedition Map2.fullborder");
add("2XM/Exploration2.fullborder");
add("2XM/Fatal Push2.fullborder");
add("2XM/Force of Will2.fullborder");
add("2XM/Goblin Guide2.fullborder");
add("2XM/Jace, the Mind Sculptor2.fullborder");
add("2XM/Kaalia of the Vast2.fullborder");
add("2XM/Karn Liberated2.fullborder");
add("2XM/Lightning Greaves2.fullborder");
add("2XM/Mana Crypt2.fullborder");
add("2XM/Meddling Mage2.fullborder");
add("2XM/Mox Opal2.fullborder");
add("2XM/Noble Hierarch2.fullborder");
add("2XM/Phyrexian Metamorph2.fullborder");
add("2XM/Sneak Attack2.fullborder");
add("2XM/Stoneforge Mystic2.fullborder");
add("2XM/Sword of Body and Mind2.fullborder");
add("2XM/Sword of Feast and Famine2.fullborder");
add("2XM/Sword of Fire and Ice2.fullborder");
add("2XM/Sword of Light and Shadow2.fullborder");
add("2XM/Sword of War and Peace2.fullborder");
add("2XM/Thoughtseize2.fullborder");
add("2XM/Toxic Deluge2.fullborder");
add("2XM/Urza's Mine2.fullborder");
add("2XM/Urza's Power Plant2.fullborder");
add("2XM/Urza's Tower2.fullborder");
add("2XM/Wurmcoil Engine2.fullborder");
add("ELD/Garruk, Cursed Huntsman2.fullborder");
add("ELD/Oko, Thief of Crowns2.fullborder");
add("ELD/The Royal Scions2.fullborder");
add("IKO/Brokkos, Apex of Forever2.fullborder");
add("IKO/Brokkos, Apex of Forever3.fullborder");
add("IKO/Crystalline Giant3.fullborder");
add("IKO/Cubwarden2.fullborder");
add("IKO/Dirge Bat2.fullborder");
add("IKO/Dirge Bat3.fullborder");
add("IKO/Everquill Phoenix2.fullborder");
add("IKO/Everquill Phoenix3.fullborder");
add("IKO/Gemrazer2.fullborder");
add("IKO/Gemrazer3.fullborder");
add("IKO/Gyruda, Doom of Depths3.fullborder");
add("IKO/Huntmaster Liger2.fullborder");
add("IKO/Huntmaster Liger3.fullborder");
add("IKO/Illuna, Apex of Wishes2.fullborder");
add("IKO/Illuna, Apex of Wishes3.fullborder");
add("IKO/Indatha Triome2.fullborder");
add("IKO/Ketria Triome2.fullborder");
add("IKO/Lukka, Coppercoat Outcast2.fullborder");
add("IKO/Luminous Broodmoth3.fullborder");
add("IKO/Mysterious Egg2.fullborder");
add("IKO/Narset of the Ancient Way2.fullborder");
add("IKO/Nethroi, Apex of Death2.fullborder");
add("IKO/Nethroi, Apex of Death3.fullborder");
add("IKO/Pollywog Symbiote2.fullborder");
add("IKO/Raugrin Triome2.fullborder");
add("IKO/Savai Triome2.fullborder");
add("IKO/Sea-Dasher Octopus2.fullborder");
add("IKO/Snapdax, Apex of the Hunt2.fullborder");
add("IKO/Snapdax, Apex of the Hunt3.fullborder");
add("IKO/Sprite Dragon3.fullborder");
add("IKO/Titanoth Rex2.fullborder");
add("IKO/Vadrok, Apex of Thunder2.fullborder");
add("IKO/Vadrok, Apex of Thunder3.fullborder");
add("IKO/Vivien, Monsters' Advocate2.fullborder");
add("IKO/Void Beckoner2.fullborder");
add("IKO/Yidaro, Wandering Monster3.fullborder");
add("IKO/Zagoth Triome2.fullborder");
add("IKO/Zilortha, Strength Incarnate.fullborder");
add("M21/Basri Ket2.fullborder");
add("M21/Chandra, Heart of Fire2.fullborder");
add("M21/Containment Priest2.fullborder");
add("M21/Cultivate2.fullborder");
add("M21/Garruk, Unleashed2.fullborder");
add("M21/Grim Tutor2.fullborder");
add("M21/Liliana, Waker of the Dead2.fullborder");
add("M21/Massacre Wurm2.fullborder");
add("M21/Scavenging Ooze2.fullborder");
add("M21/Solemn Simulacrum2.fullborder");
add("M21/Teferi, Master of Time2.fullborder");
add("M21/Ugin, the Spirit Dragon2.fullborder");
add("M21/Ugin, the Spirit Dragon3.fullborder");
add("PLGS/Hangarback Walker.fullborder");
add("SLD/Acidic Slime.fullborder");
add("SLD/Captain Sisay.fullborder");
add("SLD/Meren of Clan Nel Toth.fullborder");
add("SLD/Narset, Enlightened Master.fullborder");
add("SLD/Necrotic Ooze.fullborder");
add("SLD/Oona, Queen of the Fae.fullborder");
add("SLD/Saskia the Unyielding.fullborder");
add("SLD/The Mimeoplasm.fullborder");
add("SLD/Voidslime.fullborder");
add("THB/Ashiok, Nightmare Muse2.fullborder");
add("THB/Calix, Destiny's Hand2.fullborder");
add("THB/Elspeth, Sun's Nemesis2.fullborder");
add("UST/Forest.fullborder");
add("UST/Island.fullborder");
add("UST/Mountain.fullborder");
add("UST/Plains.fullborder");
add("UST/Swamp.fullborder");
add("ZNR/Boulderloft Pathway2.fullborder");
add("ZNR/Branchloft Pathway2.fullborder");
add("ZNR/Brightclimb Pathway2.fullborder");
add("ZNR/Clearwater Pathway2.fullborder");
add("ZNR/Cragcrown Pathway2.fullborder");
add("ZNR/Grimclimb Pathway2.fullborder");
add("ZNR/Jace, Mirror Mage2.fullborder");
add("ZNR/Lavaglide Pathway2.fullborder");
add("ZNR/Murkwater Pathway2.fullborder");
add("ZNR/Nahiri, Heir of the Ancients2.fullborder");
add("ZNR/Needleverge Pathway2.fullborder");
add("ZNR/Nissa of Shadowed Boughs2.fullborder");
add("ZNR/Pillarverge Pathway2.fullborder");
add("ZNR/Riverglide Pathway2.fullborder");
add("ZNR/Timbercrown Pathway2.fullborder");
}
};
private static List<String> borderlessCardlistKey = FileUtil.readFile(ForgeConstants.BORDERLESS_CARD_LIST_FILE);
Texture n;
@Override
@@ -240,6 +112,8 @@ final class ImageLoader extends CacheLoader<String, Texture> {
}
public boolean isBorderless(String imagekey) {
if(borderlessCardlistKey.isEmpty())
return false;
if (imagekey.length() > 7) {
if ((!imagekey.substring(0, 7).contains("MPS_KLD"))&&(imagekey.substring(0, 4).contains("MPS_"))) //MPS_ sets except MPD_KLD
return true;
@@ -248,6 +122,8 @@ final class ImageLoader extends CacheLoader<String, Texture> {
}
public static boolean isBorderless(Texture t) {
if(borderlessCardlistKey.isEmpty())
return false;
//generated texture/pixmap?
if (t.toString().contains("com.badlogic.gdx.graphics.Texture@"))
return true;

View File

@@ -1,8 +1,7 @@
Name:Burning Wish
ManaCost:1 R
Types:Sorcery
A:SP$ ChangeZone | Cost$ 1 R | Origin$ Sideboard | Destination$ Hand | ChangeType$ Sorcery.YouOwn | ChangeNum$ 1 | SubAbility$ DBChange | SpellDescription$ You may choose a sorcery card you own from outside the game, reveal that card, and put it into your hand. Exile CARDNAME.
A:SP$ ChangeZone | Cost$ 1 R | Reveal$ True | Origin$ Sideboard | Destination$ Hand | ChangeType$ Sorcery.YouOwn | ChangeTypeDesc$ sorcery card they own | ChangeNum$ 1 | SubAbility$ DBChange | Hidden$ True | SpellDescription$ You may reveal a sorcery card you own from outside the game and put it into your hand. Exile CARDNAME.
SVar:DBChange:DB$ ChangeZone | Origin$ Stack | Destination$ Exile
AI:RemoveDeck:Random
SVar:Picture:http://www.wizards.com/global/images/magic/general/burning_wish.jpg
Oracle:You may choose a sorcery card you own from outside the game, reveal that card, and put it into your hand. Exile Burning Wish.
Oracle:You may reveal a sorcery card you own from outside the game and put it into your hand. Exile Burning Wish.

View File

@@ -1,7 +1,6 @@
Name:Coax from the Blind Eternities
ManaCost:2 U
Types:Sorcery
A:SP$ ChangeZone | Cost$ 2 U | Origin$ Sideboard,Exile | Destination$ Hand | ChangeType$ Card.Eldrazi+YouOwn | ChangeNum$ 1 | SpellDescription$ You may choose an Eldrazi card you own from outside the game or in exile, reveal that card, and put it into your hand.
A:SP$ ChangeZone | Cost$ 2 U | Origin$ Sideboard,Exile | Destination$ Hand | ChangeType$ Card.Eldrazi+YouOwn | ChangeNum$ 1 | Hidden$ True | Reveal$ True | StackDescription$ {p:You} may reveal an Eldrazi card they own from outside the game or in exile and put it into their hand. | SpellDescription$ You may reveal an Eldrazi card you own from outside the game or in exile and put it into your hand.
AI:RemoveDeck:Random
SVar:Picture:http://www.wizards.com/global/images/magic/general/coax_from_the_blind_eternities.jpg
Oracle:You may choose an Eldrazi card you own from outside the game or in exile, reveal that card, and put it into your hand.
Oracle:You may reveal an Eldrazi card you own from outside the game or in exile and put it into your hand.

View File

@@ -1,8 +1,7 @@
Name:Cunning Wish
ManaCost:2 U
Types:Instant
A:SP$ ChangeZone | Cost$ 2 U | Origin$ Sideboard | Destination$ Hand | ChangeType$ Instant.YouOwn | ChangeNum$ 1 | SubAbility$ DBChange | SpellDescription$ You may choose an instant card you own from outside the game, reveal that card, and put it into your hand. Exile CARDNAME.
A:SP$ ChangeZone | Cost$ 2 U | Reveal$ True | Origin$ Sideboard | Destination$ Hand | ChangeType$ Instant.YouOwn | ChangeTypeDesc$ instant card they own | ChangeNum$ 1 | SubAbility$ DBChange | Hidden$ True | SpellDescription$ You may reveal an instant card you own from outside the game and put it into your hand. Exile CARDNAME.
SVar:DBChange:DB$ ChangeZone | Origin$ Stack | Destination$ Exile
AI:RemoveDeck:Random
SVar:Picture:http://www.wizards.com/global/images/magic/general/cunning_wish.jpg
Oracle:You may choose an instant card you own from outside the game, reveal that card, and put it into your hand. Exile Cunning Wish.
Oracle:You may reveal an instant card you own from outside the game and put it into your hand. Exile Cunning Wish.

View File

@@ -1,10 +1,9 @@
Name:Death Wish
ManaCost:1 B B
Types:Sorcery
A:SP$ ChangeZone | Cost$ 1 B B | Origin$ Sideboard | Destination$ Hand | ChangeType$ Card.YouOwn | ChangeNum$ 1 | SubAbility$ DBLoseLife | SpellDescription$ You may choose a card you own from outside the game and put it into your hand. You lose half your life, rounded up. Exile CARDNAME.
A:SP$ ChangeZone | Cost$ 1 B B | Origin$ Sideboard | Destination$ Hand | ChangeType$ Card.YouOwn | ChangeTypeDesc$ card they own | ChangeNum$ 1 | SubAbility$ DBLoseLife | Hidden$ True | SpellDescription$ You may put a card you own from outside the game into your hand. You lose half your life, rounded up. Exile CARDNAME.
SVar:DBLoseLife:DB$ LoseLife | LifeAmount$ X | References$ X | SubAbility$ DBChange
SVar:DBChange:DB$ ChangeZone | Origin$ Stack | Destination$ Exile
SVar:X:Count$YourLifeTotal/HalfUp
AI:RemoveDeck:Random
SVar:Picture:http://www.wizards.com/global/images/magic/general/death_wish.jpg
Oracle:You may choose a card you own from outside the game and put it into your hand. You lose half your life, rounded up. Exile Death Wish.
Oracle:You may put a card you own from outside the game into your hand. You lose half your life, rounded up. Exile Death Wish.

View File

@@ -12,5 +12,5 @@ ALTERNATE
Name:Granted
ManaCost:3 U
Types:Sorcery Adventure
A:SP$ ChangeZone | Cost$ 3 U | Origin$ Sideboard | Destination$ Hand | ChangeType$ Card.nonCreature+YouOwn | ChangeNum$ 1 | SpellDescription$ You may choose a noncreature card you own from outside the game, reveal it, and put it into your hand.
Oracle:You may choose a noncreature card you own from outside the game, reveal it, and put it into your hand.
A:SP$ ChangeZone | Cost$ 3 U | Origin$ Sideboard | Destination$ Hand | ChangeType$ Card.nonCreature+YouOwn | ChangeTypeDesc$ noncreature card they own | ChangeNum$ 1 | Reveal$ True | Hidden$ True | SpellDescription$ You may reveal a noncreature card you own from outside the game and put it into your hand.
Oracle:You may reveal a noncreature card you own from outside the game and put it into your hand.

View File

@@ -5,6 +5,6 @@ PT:2/2
T:Mode$ Phase | Phase$ End of Turn | TriggerZones$ Battlefield | CheckSVar$ X | Execute$ TrigPutCounter | TriggerDescription$ At the beginning of each end step, if a +1/+1 counter was put on a permanent under your control this turn, put a +1/+1 counter on CARDNAME.
SVar:TrigPutCounter:DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ 1
DeckHints:Ability$Counters
SVar:X:Count$CountersAddedToPermYouCtrl P1P1
SVar:Picture:http://www.wizards.com/global/images/magic/general/fairgrounds_trumpeter.jpg
DeckHas:Ability$Counters
SVar:X:Count$CountersAddedThisTurn P1P1 Player Permanent.YouCtrl
Oracle:At the beginning of each end step, if a +1/+1 counter was put on a permanent under your control this turn, put a +1/+1 counter on Fairgrounds Trumpeter.

View File

@@ -1,8 +1,7 @@
Name:Glittering Wish
ManaCost:G W
Types:Sorcery
A:SP$ ChangeZone | Cost$ G W | Origin$ Sideboard | Destination$ Hand | ChangeType$ Card.MultiColor+YouOwn | ChangeNum$ 1 | SubAbility$ DBChange | SpellDescription$ You may choose a multicolored card you own from outside the game, reveal that card, and put it into your hand. Exile CARDNAME.
A:SP$ ChangeZone | Cost$ G W | Origin$ Sideboard | Destination$ Hand | ChangeType$ Card.MultiColor+YouOwn | ChangeTypeDesc$ multicolored card they own | ChangeNum$ 1 | Hidden$ True | Reveal$ True | SubAbility$ DBChange | SpellDescription$ You may reveal a multicolored card you own from outside the game and put it into your hand. Exile CARDNAME.
SVar:DBChange:DB$ ChangeZone | Origin$ Stack | Destination$ Exile
AI:RemoveDeck:Random
SVar:Picture:http://www.wizards.com/global/images/magic/general/glittering_wish.jpg
Oracle:You may choose a multicolored card you own from outside the game, reveal that card, and put it into your hand. Exile Glittering Wish.
Oracle:You may reveal a multicolored card you own from outside the game and put it into your hand. Exile Glittering Wish.

View File

@@ -1,8 +1,7 @@
Name:Golden Wish
ManaCost:3 W W
Types:Sorcery
A:SP$ ChangeZone | Cost$ 3 W W | Origin$ Sideboard | Destination$ Hand | ChangeType$ Artifact.YouOwn,Enchantment.YouOwn | ChangeNum$ 1 | SubAbility$ DBChange | SpellDescription$ You may choose an artifact or enchantment card you own from outside the game, reveal that card, and put it into your hand. Exile CARDNAME.
A:SP$ ChangeZone | Cost$ 3 W W | Origin$ Sideboard | Destination$ Hand | ChangeType$ Artifact.YouOwn,Enchantment.YouOwn | ChangeTypeDesc$ artifact or enchantment they own | ChangeNum$ 1 | SubAbility$ DBChange | Hidden$ True | Reveal$ True | SpellDescription$ You may reveal an artifact or enchantment card you own from outside the game and put it into your hand. Exile CARDNAME.
SVar:DBChange:DB$ ChangeZone | Origin$ Stack | Destination$ Exile
AI:RemoveDeck:Random
SVar:Picture:http://www.wizards.com/global/images/magic/general/golden_wish.jpg
Oracle:You may choose an artifact or enchantment card you own from outside the game, reveal that card, and put it into your hand. Exile Golden Wish.
Oracle:You may reveal an artifact or enchantment card you own from outside the game and put it into your hand. Exile Golden Wish.

View File

@@ -0,0 +1,11 @@
Name:Iridescent Hornbeetle
ManaCost:4 G
Types:Creature Insect
PT:3/4
T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigToken | TriggerDescription$ At the beginning of your end step, create a 1/1 green Insect creature token for each +1/+1 counter you've put on creatures under your control this turn.
SVar:TrigToken:DB$ Token | TokenAmount$ X | References$ X | TokenOwner$ You | TokenScript$ g_1_1_insect
SVar:X:Count$CountersAddedThisTurn P1P1 You Creature.YouCtrl
DeckNeeds:Ability$Counters
DeckHas:Ability$Counters
Oracle:At the beginning of your end step, create a 1/1 green Insect creature token for each +1/+1 counter you've put on creatures under your control this turn.

View File

@@ -6,6 +6,6 @@ S:Mode$ Continuous | Affected$ Artifact.OppCtrl | AddHiddenKeyword$ CARDNAME's a
SVar:NonStackingEffect:True
A:AB$ Animate | Cost$ AddCounter<1/LOYALTY> | TargetMin$ 0 | TargetMax$ 1 | Planeswalker$ True | ValidTgts$ Artifact.nonCreature | TgtPrompt$ Select target noncreature artifact | Power$ X | Toughness$ X | Types$ Artifact,Creature | References$ X | UntilYourNextTurn$ True | AILogic$ PTByCMC | SpellDescription$ Until your next turn, up to one target noncreature artifact becomes an artifact creature with power and toughness equal to its converted mana cost.
SVar:X:Targeted$CardManaCost
A:AB$ ChangeZone | Cost$ SubCounter<2/LOYALTY> | Planeswalker$ True | Origin$ Sideboard,Exile | Destination$ Hand | ChangeType$ Artifact.YouOwn | ChangeNum$ 1 | SpellDescription$ You may choose an artifact card you own from outside the game or in exile, reveal that card, and put it into your hand.
A:AB$ ChangeZone | Cost$ SubCounter<2/LOYALTY> | Planeswalker$ True | Origin$ Sideboard,Exile | Destination$ Hand | ChangeType$ Artifact.YouOwn | ChangeTypeDesc$ artifact they own | ChangeNum$ 1 | Hidden$ True | Reveal$ True | StackDescription$ {p:You} may reveal an artifact card they own from outside the game or in exile and put it into their hand. | SpellDescription$ You may reveal an artifact card you own from outside the game or in exile and put it into your hand.
AI:RemoveDeck:Random
Oracle:Activated abilities of artifacts your opponents control can't be activated.\n[+1]: Until your next turn, up to one target noncreature artifact becomes an artifact creature with power and toughness equal to its converted mana cost.\n[-2]: You may choose an artifact card you own from outside the game or in exile, reveal that card, and put it into your hand.
Oracle:Activated abilities of artifacts your opponents control can't be activated.\n[+1]: Until your next turn, up to one target noncreature artifact becomes an artifact creature with power and toughness equal to its converted mana cost.\n[-2]: You may reveal an artifact card you own from outside the game or in exile and put it into your hand.

View File

@@ -1,8 +1,7 @@
Name:Living Wish
ManaCost:1 G
Types:Sorcery
A:SP$ ChangeZone | Cost$ 1 G | Origin$ Sideboard | Destination$ Hand | ChangeType$ Creature.YouOwn,Land.YouOwn | ChangeNum$ 1 | SubAbility$ DBChange | SpellDescription$ You may choose a creature or land card you own from outside the game, reveal that card, and put it into your hand. Exile CARDNAME.
A:SP$ ChangeZone | Cost$ 1 G | Origin$ Sideboard | Destination$ Hand | ChangeType$ Creature.YouOwn,Land.YouOwn | ChangeTypeDesc$ creature or land card they own | ChangeNum$ 1 | Reveal$ True | Hidden$ True | SubAbility$ DBChange | SpellDescription$ You may reveal a creature or land card you own from outside the game and put it into your hand. Exile CARDNAME.
SVar:DBChange:DB$ ChangeZone | Origin$ Stack | Destination$ Exile
AI:RemoveDeck:Random
SVar:Picture:http://www.wizards.com/global/images/magic/general/living_wish.jpg
Oracle:You may choose a creature or land card you own from outside the game, reveal that card, and put it into your hand. Exile Living Wish.
Oracle:You may reveal a creature or land card you own from outside the game and put it into your hand. Exile Living Wish.

View File

@@ -3,6 +3,5 @@ ManaCost:2 B B
Types:Sorcery
A:SP$ Charm | Cost$ 2 B B | Choices$ DBSearch,DBWish
SVar:DBSearch:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Card | ChangeNum$ 1 | Mandatory$ True | SpellDescription$ Search your library for a card, put it into your hand, then shuffle your library.
SVar:DBWish:DB$ ChangeZone | Origin$ Sideboard | Destination$ Hand | ChangeType$ Card.YouOwn | ChangeNum$ 1 | Mandatory$ True | SpellDescription$ Choose a card you own from outside the game and put it into your hand.
SVar:Picture:http://www.wizards.com/global/images/magic/general/masterminds_acquisition.jpg
Oracle:Choose one —\n• Search your library for a card, put it into your hand, then shuffle your library.\n• Choose a card you own from outside the game and put it into your hand.
SVar:DBWish:DB$ ChangeZone | Origin$ Sideboard | Destination$ Hand | ChangeType$ Card.YouOwn | ChangeNum$ 1 | Mandatory$ True | Hidden$ True | SpellDescription$ Put a card you own from outside the game into your hand.
Oracle:Choose one —\n• Search your library for a card, put it into your hand, then shuffle your library.\n• Put a card you own from outside the game into your hand.

View File

@@ -2,9 +2,9 @@ Name:Muldrotha, the Gravetide
ManaCost: 3 B G U
Types:Legendary Creature Elemental Avatar
PT:6/6
S:Mode$ Continuous | Affected$ Land.YouCtrl | Condition$ PlayerTurn | MayPlay$ True | MayPlayLimit$ 1 | MayPlayText$ Land | EffectZone$ Battlefield | AffectedZone$ Graveyard | Description$ During each of your turns, you may play up to one permanent card of each permanent type from your graveyard. (If a card has multiple permanent types, choose one as you play it.)
S:Mode$ Continuous | Affected$ Land.YouCtrl | Condition$ PlayerTurn | MayPlay$ True | MayPlayLimit$ 1 | MayPlayText$ Land | EffectZone$ Battlefield | AffectedZone$ Graveyard | Description$ During each of your turns, you may play a land and cast a permanent spell of each permanent type from your graveyard. (If a card has multiple permanent types, choose one as you play it.)
S:Mode$ Continuous | Affected$ Creature.YouCtrl | Condition$ PlayerTurn | MayPlay$ True | MayPlayLimit$ 1 | MayPlayText$ Creature | EffectZone$ Battlefield | AffectedZone$ Graveyard
S:Mode$ Continuous | Affected$ Planeswalker.YouCtrl | Condition$ PlayerTurn | MayPlay$ True | MayPlayLimit$ 1 | MayPlayText$ Planeswalker | EffectZone$ Battlefield | AffectedZone$ Graveyard
S:Mode$ Continuous | Affected$ Artifact.YouCtrl | Condition$ PlayerTurn | MayPlay$ True | MayPlayLimit$ 1 | MayPlayText$ Artifact | EffectZone$ Battlefield | AffectedZone$ Graveyard
S:Mode$ Continuous | Affected$ Enchantment.YouCtrl | Condition$ PlayerTurn | MayPlay$ True | MayPlayLimit$ 1 | MayPlayText$ Enchantment | EffectZone$ Battlefield | AffectedZone$ Graveyard
Oracle:During each of your turns, you may play up to one permanent card of each permanent type from your graveyard. (If a card has multiple permanent types, choose one as you play it.)
Oracle:During each of your turns, you may play a land and cast a permanent spell of each permanent type from your graveyard. (If a card has multiple permanent types, choose one as you play it.)

View File

@@ -2,10 +2,9 @@ Name:Research
ManaCost:G U
AlternateMode: Split
Types:Instant
A:SP$ ChangeZone | Cost$ G U | Origin$ Sideboard | Destination$ Library | Shuffle$ True | ChangeType$ Card.YouOwn | ChangeNum$ 4 | SpellDescription$ Choose up to four cards you own from outside the game and shuffle them into your library.
A:SP$ ChangeZone | Cost$ G U | Origin$ Sideboard | Destination$ Library | Shuffle$ True | ChangeType$ Card.YouOwn | ChangeNum$ 4 | Hidden$ True | StackDescription$ {p:You} shuffles up to four cards they own from outside the game into their library. | SpellDescription$ Shuffle up to four cards you own from outside the game into your library.
AI:RemoveDeck:Random
SVar:Picture:http://www.wizards.com/global/images/magic/general/researchdevelopment.jpg
Oracle:Choose up to four cards you own from outside the game and shuffle them into your library.
Oracle:Shuffle up to four cards you own from outside the game into your library.
ALTERNATE

View File

@@ -1,11 +1,10 @@
Name:Ring of Ma'ruf
ManaCost:5
Types:Artifact
A:AB$ Effect | Cost$ 5 T Exile<1/CARDNAME> | Name$ Ring of Ma'ruf Effect | ReplacementEffects$ DrawReplace | SVars$ ExileEffect,TutorSideboard | SpellDescription$ The next time you would draw a card this turn, instead choose a card you own from outside the game and put it into your hand.
SVar:DrawReplace:Event$ Draw | ValidPlayer$ You | ReplaceWith$ TutorSideboard | Description$ The next time you would draw a card this turn, instead choose a card you own from outside the game and put it into your hand.
SVar:TutorSideboard:DB$ ChangeZone | Origin$ Sideboard | Destination$ Hand | ChangeType$ Card.YouOwn | ChangeNum$ 1 | Hidden$ True | SubAbility$ ExileEffect
A:AB$ Effect | Cost$ 5 T Exile<1/CARDNAME> | Name$ Ring of Ma'ruf Effect | ReplacementEffects$ DrawReplace | SVars$ ExileEffect,TutorSideboard | SpellDescription$ The next time you would draw a card this turn, instead put a card you own from outside the game into your hand.
SVar:DrawReplace:Event$ Draw | ValidPlayer$ You | ReplaceWith$ TutorSideboard | Description$ The next time you would draw a card this turn, instead put a card you own from outside the game into your hand.
SVar:TutorSideboard:DB$ ChangeZone | Origin$ Sideboard | Destination$ Hand | ChangeType$ Card.YouOwn | ChangeNum$ 1 | Hidden$ True | Mandatory$ True | SubAbility$ ExileEffect
SVar:ExileEffect:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile
AI:RemoveDeck:All
AI:RemoveDeck:Random
SVar:Picture:http://www.wizards.com/global/images/magic/general/ring_of_maruf.jpg
Oracle:{5}, {T}, Exile Ring of Ma'ruf: The next time you would draw a card this turn, instead choose a card you own from outside the game and put it into your hand.
Oracle:{5}, {T}, Exile Ring of Ma'ruf: The next time you would draw a card this turn, instead put a card you own from outside the game into your hand.

View File

@@ -3,10 +3,9 @@ ManaCost:10
Types:Creature Eldrazi
PT:7/11
K:Annihilator:1
A:AB$ Token | Cost$ 4 | TokenAmount$ 2 | TokenScript$ c_0_1_eldrazi_spawn_sac | TokenOwner$ You | LegacyImage$ c 0 1 eldrazi spawn sac roe | SpellDescription$ Create two 0/1 colorless Eldrazi Spawn creature tokens. They have "Sacrifice this creature: Add {C}."
A:AB$ Play | Cost$ 20 | Valid$ Card.Eldrazi+YouOwn | ValidZone$ Sideboard | WithoutManaCost$ True | Amount$ SpawnsireX | Controller$ You | Optional$ True | References$ SpawnsireX | SpellDescription$ Cast any number of Eldrazi cards you own from outside the game without paying their mana costs.
A:AB$ Token | Cost$ 4 | TokenAmount$ 2 | TokenScript$ c_0_1_eldrazi_spawn_sac | TokenOwner$ You | SpellDescription$ Create two 0/1 colorless Eldrazi Spawn creature tokens. They have "Sacrifice this creature: Add {C}."
A:AB$ Play | Cost$ 20 | Valid$ Card.Eldrazi+YouOwn | ValidZone$ Sideboard | WithoutManaCost$ True | Amount$ SpawnsireX | Controller$ You | Optional$ True | References$ SpawnsireX | SpellDescription$ Cast any number of Eldrazi spells you own from outside the game without paying their mana costs.
SVar:SpawnsireX:Count$TypeInYourSideboard.Eldrazi
DeckHints:Type$Eldrazi
DeckHas:Ability$Mana.Colorless & Ability$Token
SVar:Picture:http://www.wizards.com/global/images/magic/general/spawnsire_of_ulamog.jpg
Oracle:Annihilator 1 (Whenever this creature attacks, defending player sacrifices a permanent.)\n{4}: Create two 0/1 colorless Eldrazi Spawn creature tokens. They have "Sacrifice this creature: Add {C}."\n{20}: Cast any number of Eldrazi cards you own from outside the game without paying their mana costs.
Oracle:Annihilator 1 (Whenever this creature attacks, defending player sacrifices a permanent.)\n{4}: Create two 0/1 colorless Eldrazi Spawn creature tokens. They have "Sacrifice this creature: Add {C}."\n{20}: Cast any number of Eldrazi spells you own from outside the game without paying their mana costs.

View File

@@ -7,6 +7,6 @@ SVar:DBPumpAll:DB$ Pump | KW$ Trample | Defined$ Targeted
A:AB$ Pump | Cost$ SubCounter<3/LOYALTY> | Planeswalker$ True | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control | SubAbility$ SoulsDamage | AILogic$ Fight | StackDescription$ None | SpellDescription$ Target creature you control deals damage equal to its power to target creature or planeswalker.
SVar:SoulsDamage:DB$ DealDamage | ValidTgts$ Creature,Planeswalker | AILogic$ PowerDmg | TgtPrompt$ Select target creature or planeswalker | NumDmg$ X | References$ X | DamageSource$ ParentTarget
SVar:X:ParentTargeted$CardPower
A:AB$ ChangeZone | Cost$ SubCounter<5/LOYALTY> | Planeswalker$ True | Ultimate$ True | Origin$ Sideboard | Destination$ Hand | ChangeType$ Creature.YouOwn | ChangeNum$ 1 | SpellDescription$ You may choose a creature card you own from outside the game, reveal it, and put it into your hand.
A:AB$ ChangeZone | Cost$ SubCounter<5/LOYALTY> | Planeswalker$ True | Ultimate$ True | Origin$ Sideboard | Destination$ Hand | ChangeType$ Creature.YouOwn | ChangeTypeDesc$ creature card they own | ChangeNum$ 1 | Reveal$ True | Hidden$ True | SpellDescription$ You may reveal a creature card you own from outside the game and put it into your hand.
DeckHas:Ability$Counters
Oracle:[+1]: Distribute two +1/+1 counters among up to two target creatures. They gain trample until end of turn.\n[3]: Target creature you control deals damage equal to its power to target creature or planeswalker.\n[5]: You may choose a creature card you own from outside the game, reveal it, and put it into your hand.
Oracle:[+1]: Distribute two +1/+1 counters among up to two target creatures. They gain trample until end of turn.\n[3]: Target creature you control deals damage equal to its power to target creature or planeswalker.\n[5]: You may reveal a creature card you own from outside the game and put it into your hand.

View File

@@ -3,8 +3,7 @@ ManaCost:4 R
Types:Creature Dog
PT:4/3
K:Monstrosity:1:5 R R
T:Mode$ BecomeMonstrous | ValidCard$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigDamageAll | TriggerDescription$ When CARDNAME becomes monstrous, it deals 2 damage to each opponent and each creature your opponents control.
SVar:TrigDamageAll:DB$ DamageAll | ValidCards$ Creature.OppCtrl | ValidPlayers$ Player.Opponent | NumDmg$ 2 | ValidDescription$ each opponent and each creature your opponents control.
T:Mode$ BecomeMonstrous | ValidCard$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigDamageAll | TriggerDescription$ When CARDNAME becomes monstrous, it deals 2 damage to each opponent and each creature they control.
SVar:TrigDamageAll:DB$ DamageAll | ValidCards$ Creature.OppCtrl | ValidPlayers$ Player.Opponent | NumDmg$ 2 | ValidDescription$ each opponent and each creature they control.
DeckHas:Ability$Counters
SVar:Picture:http://www.wizards.com/global/images/magic/general/wildfire_cerberus.jpg
Oracle:{5}{R}{R}: Monstrosity 1. (If this creature isn't monstrous, put a +1/+1 counter on it and it becomes monstrous.)\nWhen Wildfire Cerberus becomes monstrous, it deals 2 damage to each opponent and each creature your opponents control.
Oracle:{5}{R}{R}: Monstrosity 1. (If this creature isn't monstrous, put a +1/+1 counter on it and it becomes monstrous.)\nWhen Wildfire Cerberus becomes monstrous, it deals 2 damage to each opponent and each creature they control.

View File

@@ -11,3 +11,140 @@ Type=Other
4 R Enigma Thief
5 R Whispersteel Dagger
6 R Geode Rager
7 M Anowon, the Ruin Thief
8 M Obuun, Mul Daya Ancestor
9 U Abzan Falconer
10 M Admonition Angel
11 U Banishing Light
12 U Condemn
13 U Crush Contraband
14 U Elite Scaleguard
15 R Emeria Angel
16 R Emeria Shepherd
17 R Hour of Revelation
18 C Kor Cartographer
19 R Planar Outburst
20 U Retreat to Emeria
21 M Sun Titan
22 R Together Forever
23 U Aetherize
24 C Distant Melody
25 U Fact or Fiction
26 U Faerie Vandal
27 U Invisible Stalker
28 C Latchkey Faerie
29 U Marang River Prowler
30 U Master Thief
31 U Military Intelligence
32 U Nightveil Sprite
33 R Notorious Throng
34 U Open into Wonder
35 R Scourge of Fleets
36 C Slither Blade
37 R Stolen Identity
38 C Triton Shorestalker
39 U Whirler Rogue
40 C Changeling Outcast
41 U Endless Obedience
42 R Fated Return
43 C Frogtosser Banneret
44 R Gonti, Lord of Luxury
45 R In Garruk's Wake
46 U Marsh Flitter
47 C Murder
48 R Necromantic Selection
49 R Nighthowler
50 R Ogre Slumlord
51 U Oona's Blackguard
52 U Price of Fame
53 U Rise from the Grave
54 R Sepulchral Primordial
55 U Stinkdrinker Bandit
56 U Syr Konrad, the Grim
57 U Zulaport Cutthroat
58 R Abundance
59 U Acidic Slime
60 U Armorcraft Judge
61 U Beanstalk Giant
62 U Circuitous Route
63 C Elvish Rejuvenator
64 U Embodiment of Insight
65 U Evolution Sage
66 C Far Wanderings
67 C Fertilid
68 U Harmonize
69 C Harrow
70 U Inspiring Call
71 U Keeper of Fables
72 C Khalni Heart Expedition
73 C Kodama's Reach
74 R The Mending of Dominaria
75 M Multani, Yavimaya's Avatar
76 R Nissa's Renewal
77 R Rampaging Baloths
78 U Retreat to Kazandu
79 R Return of the Wildspeaker
80 R Rites of Flourishing
81 C Satyr Wayfinder
82 C Sporemound
83 C Springbloom Druid
84 R Sylvan Advocate
85 U Tuskguard Captain
86 R Waker of the Wilds
87 C Yavimaya Elder
88 U Zendikar's Roil
89 R Consuming Aberration
90 U Extract from Darkness
91 U Ground Assault
92 M Lazav, Dimir Mastermind
93 R Living Twister
94 R Mina and Denn, Wildborn
95 U Naya Charm
96 R Notion Thief
97 M Omnath, Locus of Rage
98 R Oona, Queen of the Fae
99 R Silumgar's Command
100 U Soul Manipulation
101 R Spinal Embrace
102 U Struggle // Survive
103 R Sygg, River Cutthroat
104 U Sylvan Reclamation
105 U Treacherous Terrain
106 C Arcane Signet
107 R Blackblade Reforged
108 R Bonehoard
109 C Commander's Sphere
110 U Dimir Keyrune
111 C Dimir Locket
112 U Dimir Signet
113 U Heirloom Blade
114 C Mind Stone
115 R Obelisk of Urd
116 U Sandstone Oracle
117 C Scaretiller
118 R Scytheclaw
119 R Seer's Sundial
120 U Sol Ring
121 U Blighted Woodland
122 C Boros Garrison
123 C Boros Guildgate
124 C Command Tower
125 U Cryptic Caves
126 U Dimir Aqueduct
127 C Dimir Guildgate
128 C Dismal Backwater
129 C Evolving Wilds
130 C Gruul Guildgate
131 U Gruul Turf
132 U Jungle Shrine
133 U Jwar Isle Refuge
134 U Krosan Verge
135 U Myriad Landscape
136 C Naya Panorama
137 R Needle Spires
138 U Rogue's Passage
139 C Selesnya Guildgate
140 C Selesnya Sanctuary
141 U Submerged Boneyard
142 C Terramorphic Expanse

View File

@@ -4,4 +4,4 @@ Order:101
Subtype:Standard
Type:Sanctioned
Sets:ELD, THB, IKO, M21, ZNR
Banned:Cauldron Familiar; Fires of Invention; Oko, Thief of Crowns; Once Upon a Time; Veil of Summer
Banned:Cauldron Familiar; Fires of Invention; Oko, Thief of Crowns; Once Upon a Time; Uro, Titan of Nature's Wrath; Veil of Summer

View File

@@ -981,7 +981,7 @@ nlVibrateWhenLosingLife=Aktiviert Vibration bei Lebenspunktverlust.
lblEnableRoundBorder=Aktiviere Maske mit runden Ränder
nlEnableRoundBorder=Wenn aktiviert, werden Kartenecken abgerundet. Vorzugsweise bei Karten mit vollem Rand.
lblPreloadExtendedArtCards=Erw. Kartenbilder bei Start laden
nlPreloadExtendedArtCards=Wenn aktiviert, werden erweiterte Kartenbilder bereits beim Start in den Speicher geladen.
nlPreloadExtendedArtCards=Wenn aktiviert, werden erweiterte Kartenbilder bereits beim Start in den Speicher geladen (Hohe RAM-Auslastung).
lblShowFPSDisplay=FPS-Anzeige
nlShowFPSDisplay=Aktiviert die Frames-per-second-Anzeige (Experimentell).
lblEnableUnknownCards=Erlaube unbekannte Karten

View File

@@ -981,7 +981,7 @@ nlVibrateWhenLosingLife=Enable vibration when your player loses life or takes da
lblEnableRoundBorder=Enable Round Border Mask
nlEnableRoundBorder=When enabled, the card corners are rounded (Preferably Card with Full Borders).
lblPreloadExtendedArtCards=Preload Extended Art Cards
nlPreloadExtendedArtCards=When enabled, Preloads Extended Art Cards to Cache on Startup.
nlPreloadExtendedArtCards=When enabled, Preloads Extended Art Cards to Cache on Startup (High RAM usage).
lblShowFPSDisplay=Show FPS Display
nlShowFPSDisplay=When enabled, show the FPS Display (Experimental).
lblEnableUnknownCards=Enable Unknown Cards

View File

@@ -981,7 +981,7 @@ nlVibrateWhenLosingLife=Habilita la vibración cuando tu jugador pierde vida o s
lblEnableRoundBorder=Habilitar máscara de bordes redondeados
nlEnableRoundBorder=Cuando está habilitado, las esquinas de las cartas se redondean (Preferiblemente Cartas con bordes completos).
lblPreloadExtendedArtCards=Precargar Cartas de Arte Extendido
nlPreloadExtendedArtCards=Cuando está habilitado, carga previamente las cartas de arte ampliadas en la caché al iniciar el programa.
nlPreloadExtendedArtCards=Cuando está habilitado, carga previamente las cartas de arte ampliadas en la caché al iniciar el programa (Alto uso de RAM).
lblShowFPSDisplay=Mostrar FPS
nlShowFPSDisplay=Cuando está habilitado, muestra los FPS (Experimental).
lblEnableUnknownCards=Enable Unknown Cards

View File

@@ -981,7 +981,7 @@ nlVibrateWhenLosingLife=Attiva le vibrazioni quando il giocatore perde punti vit
lblEnableRoundBorder=Abilita maschera bordo arrotondato
nlEnableRoundBorder=Se abilitato, gli angoli delle carte sono arrotondati (preferibilmente Carta con bordi pieni).
lblPreloadExtendedArtCards=Carte d''arte estese precaricate
nlPreloadExtendedArtCards=Se abilitato, precarica le carte artistiche estese nella cache all''avvio.
nlPreloadExtendedArtCards=Se abilitato, precarica le carte artistiche estese nella cache all''avvio (Utilizzo elevato della RAM).
lblShowFPSDisplay=Mostra display FPS
nlShowFPSDisplay=Se abilitato, mostra il display FPS (sperimentale).
lblEnableUnknownCards=Enable Unknown Cards

View File

@@ -981,7 +981,7 @@ nlVibrateWhenLosingLife=启用当玩家在游戏中失去生命或收到伤害
lblEnableRoundBorder=启用圆角边框掩码
nlEnableRoundBorder=启用后,卡牌边框会变成圆角(带有完整边框的卡牌图片效果最好)。
lblPreloadExtendedArtCards=预加载拉伸卡图
nlPreloadExtendedArtCards=启用后,拉伸卡图将在启动时加载到缓存。
nlPreloadExtendedArtCards=启用后,拉伸卡图将在启动时加载到缓存(使用高内存)
lblShowFPSDisplay=显示当前的FPS值
nlShowFPSDisplay=启用后将在画面左上角显示当前Forge的FPS实验性特性
lblEnableUnknownCards=启用未知卡牌

View File

@@ -0,0 +1,127 @@
2XM/Academy Ruins2.fullborder
2XM/Atraxa, Praetors' Voice2.fullborder
2XM/Avacyn, Angel of Hope2.fullborder
2XM/Batterskull2.fullborder
2XM/Blightsteel Colossus2.fullborder
2XM/Blood Moon2.fullborder
2XM/Brainstorm2.fullborder
2XM/Chrome Mox2.fullborder
2XM/Council's Judgment2.fullborder
2XM/Crop Rotation2.fullborder
2XM/Cyclonic Rift2.fullborder
2XM/Dark Confidant2.fullborder
2XM/Doubling Season2.fullborder
2XM/Expedition Map2.fullborder
2XM/Exploration2.fullborder
2XM/Fatal Push2.fullborder
2XM/Force of Will2.fullborder
2XM/Goblin Guide2.fullborder
2XM/Jace, the Mind Sculptor2.fullborder
2XM/Kaalia of the Vast2.fullborder
2XM/Karn Liberated2.fullborder
2XM/Lightning Greaves2.fullborder
2XM/Mana Crypt2.fullborder
2XM/Meddling Mage2.fullborder
2XM/Mox Opal2.fullborder
2XM/Noble Hierarch2.fullborder
2XM/Phyrexian Metamorph2.fullborder
2XM/Sneak Attack2.fullborder
2XM/Stoneforge Mystic2.fullborder
2XM/Sword of Body and Mind2.fullborder
2XM/Sword of Feast and Famine2.fullborder
2XM/Sword of Fire and Ice2.fullborder
2XM/Sword of Light and Shadow2.fullborder
2XM/Sword of War and Peace2.fullborder
2XM/Thoughtseize2.fullborder
2XM/Toxic Deluge2.fullborder
2XM/Urza's Mine2.fullborder
2XM/Urza's Power Plant2.fullborder
2XM/Urza's Tower2.fullborder
2XM/Wurmcoil Engine2.fullborder
ELD/Garruk, Cursed Huntsman2.fullborder
ELD/Oko, Thief of Crowns2.fullborder
ELD/The Royal Scions2.fullborder
IKO/Brokkos, Apex of Forever2.fullborder
IKO/Brokkos, Apex of Forever3.fullborder
IKO/Crystalline Giant3.fullborder
IKO/Cubwarden2.fullborder
IKO/Dirge Bat2.fullborder
IKO/Dirge Bat3.fullborder
IKO/Everquill Phoenix2.fullborder
IKO/Everquill Phoenix3.fullborder
IKO/Gemrazer2.fullborder
IKO/Gemrazer3.fullborder
IKO/Gyruda, Doom of Depths3.fullborder
IKO/Huntmaster Liger2.fullborder
IKO/Huntmaster Liger3.fullborder
IKO/Illuna, Apex of Wishes2.fullborder
IKO/Illuna, Apex of Wishes3.fullborder
IKO/Indatha Triome2.fullborder
IKO/Ketria Triome2.fullborder
IKO/Lukka, Coppercoat Outcast2.fullborder
IKO/Luminous Broodmoth3.fullborder
IKO/Mysterious Egg2.fullborder
IKO/Narset of the Ancient Way2.fullborder
IKO/Nethroi, Apex of Death2.fullborder
IKO/Nethroi, Apex of Death3.fullborder
IKO/Pollywog Symbiote2.fullborder
IKO/Raugrin Triome2.fullborder
IKO/Savai Triome2.fullborder
IKO/Sea-Dasher Octopus2.fullborder
IKO/Snapdax, Apex of the Hunt2.fullborder
IKO/Snapdax, Apex of the Hunt3.fullborder
IKO/Sprite Dragon3.fullborder
IKO/Titanoth Rex2.fullborder
IKO/Vadrok, Apex of Thunder2.fullborder
IKO/Vadrok, Apex of Thunder3.fullborder
IKO/Vivien, Monsters' Advocate2.fullborder
IKO/Void Beckoner2.fullborder
IKO/Yidaro, Wandering Monster3.fullborder
IKO/Zagoth Triome2.fullborder
IKO/Zilortha, Strength Incarnate.fullborder
M21/Basri Ket2.fullborder
M21/Chandra, Heart of Fire2.fullborder
M21/Containment Priest2.fullborder
M21/Cultivate2.fullborder
M21/Garruk, Unleashed2.fullborder
M21/Grim Tutor2.fullborder
M21/Liliana, Waker of the Dead2.fullborder
M21/Massacre Wurm2.fullborder
M21/Scavenging Ooze2.fullborder
M21/Solemn Simulacrum2.fullborder
M21/Teferi, Master of Time2.fullborder
M21/Ugin, the Spirit Dragon2.fullborder
M21/Ugin, the Spirit Dragon3.fullborder
PLGS/Hangarback Walker.fullborder
SLD/Acidic Slime.fullborder
SLD/Captain Sisay.fullborder
SLD/Meren of Clan Nel Toth.fullborder
SLD/Narset, Enlightened Master.fullborder
SLD/Necrotic Ooze.fullborder
SLD/Oona, Queen of the Fae.fullborder
SLD/Saskia the Unyielding.fullborder
SLD/The Mimeoplasm.fullborder
SLD/Voidslime.fullborder
THB/Ashiok, Nightmare Muse2.fullborder
THB/Calix, Destiny's Hand2.fullborder
THB/Elspeth, Sun's Nemesis2.fullborder
UST/Forest.fullborder
UST/Island.fullborder
UST/Mountain.fullborder
UST/Plains.fullborder
UST/Swamp.fullborder
ZNR/Boulderloft Pathway2.fullborder
ZNR/Branchloft Pathway2.fullborder
ZNR/Brightclimb Pathway2.fullborder
ZNR/Clearwater Pathway2.fullborder
ZNR/Cragcrown Pathway2.fullborder
ZNR/Grimclimb Pathway2.fullborder
ZNR/Jace, Mirror Mage2.fullborder
ZNR/Lavaglide Pathway2.fullborder
ZNR/Murkwater Pathway2.fullborder
ZNR/Nahiri, Heir of the Ancients2.fullborder
ZNR/Needleverge Pathway2.fullborder
ZNR/Nissa of Shadowed Boughs2.fullborder
ZNR/Pillarverge Pathway2.fullborder
ZNR/Riverglide Pathway2.fullborder
ZNR/Timbercrown Pathway2.fullborder

View File

@@ -48,6 +48,7 @@ public final class ForgeConstants {
public static final String NET_DECKS_LIST_FILE = LISTS_DIR + "net-decks.txt";
public static final String NET_DECKS_COMMANDER_LIST_FILE = LISTS_DIR + "net-decks-commander.txt";
public static final String NET_DECKS_BRAWL_LIST_FILE = LISTS_DIR + "net-decks-brawl.txt";
public static final String BORDERLESS_CARD_LIST_FILE = LISTS_DIR + "borderlessCardList.txt";
public static final String CHANGES_FILE = ASSETS_DIR + "README.txt";