mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-17 11:18:01 +00:00
Merge remote-tracking branch 'upstream/master' into collector-number-in-card-list-and-card-db-refactoring
This commit is contained in:
@@ -6,7 +6,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>forge</artifactId>
|
<artifactId>forge</artifactId>
|
||||||
<groupId>forge</groupId>
|
<groupId>forge</groupId>
|
||||||
<version>1.6.44-SNAPSHOT</version>
|
<version>1.6.45-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>forge-ai</artifactId>
|
<artifactId>forge-ai</artifactId>
|
||||||
|
|||||||
@@ -1269,7 +1269,7 @@ public class AiBlockController {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
int numSteps = ai.getStartingLife() - 5; // e.g. 15 steps between 5 life and 20 life
|
int numSteps = Math.max(1, ai.getStartingLife() - 5); // e.g. 15 steps between 5 life and 20 life
|
||||||
float chanceStep = (maxRandomTradeChance - minRandomTradeChance) / numSteps;
|
float chanceStep = (maxRandomTradeChance - minRandomTradeChance) / numSteps;
|
||||||
int chance = (int)Math.max(minRandomTradeChance, (maxRandomTradeChance - (Math.max(5, ai.getLife() - 5)) * chanceStep));
|
int chance = (int)Math.max(minRandomTradeChance, (maxRandomTradeChance - (Math.max(5, ai.getLife() - 5)) * chanceStep));
|
||||||
if (chance > maxRandomTradeChance) {
|
if (chance > maxRandomTradeChance) {
|
||||||
|
|||||||
@@ -736,6 +736,7 @@ public class ComputerUtil {
|
|||||||
CardCollection typeList = CardLists.getValidCards(ai.getCardsIn(ZoneType.Battlefield), type.split(";"), activate.getController(), activate, sa);
|
CardCollection typeList = CardLists.getValidCards(ai.getCardsIn(ZoneType.Battlefield), type.split(";"), activate.getController(), activate, sa);
|
||||||
|
|
||||||
// don't bounce the card we're pumping
|
// don't bounce the card we're pumping
|
||||||
|
// TODO unless it can be used as a save
|
||||||
typeList = ComputerUtilCost.paymentChoicesWithoutTargets(typeList, sa, ai);
|
typeList = ComputerUtilCost.paymentChoicesWithoutTargets(typeList, sa, ai);
|
||||||
|
|
||||||
if (typeList.size() < amount) {
|
if (typeList.size() < amount) {
|
||||||
@@ -2066,7 +2067,7 @@ public class ComputerUtil {
|
|||||||
// Computer mulligans if there are no cards with converted mana cost of 0 in its hand
|
// Computer mulligans if there are no cards with converted mana cost of 0 in its hand
|
||||||
public static boolean wantMulligan(Player ai, int cardsToReturn) {
|
public static boolean wantMulligan(Player ai, int cardsToReturn) {
|
||||||
final CardCollectionView handList = ai.getCardsIn(ZoneType.Hand);
|
final CardCollectionView handList = ai.getCardsIn(ZoneType.Hand);
|
||||||
return scoreHand(handList, ai, cardsToReturn) <= 0;
|
return !handList.isEmpty() && scoreHand(handList, ai, cardsToReturn) <= 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static CardCollection getPartialParisCandidates(Player ai) {
|
public static CardCollection getPartialParisCandidates(Player ai) {
|
||||||
|
|||||||
@@ -1212,6 +1212,8 @@ public abstract class GameState {
|
|||||||
p.setLandsPlayedThisTurn(landsPlayed);
|
p.setLandsPlayedThisTurn(landsPlayed);
|
||||||
p.setLandsPlayedLastTurn(landsPlayedLastTurn);
|
p.setLandsPlayedLastTurn(landsPlayedLastTurn);
|
||||||
|
|
||||||
|
p.clearPaidForSA();
|
||||||
|
|
||||||
for (Entry<ZoneType, CardCollectionView> kv : playerCards.entrySet()) {
|
for (Entry<ZoneType, CardCollectionView> kv : playerCards.entrySet()) {
|
||||||
PlayerZone zone = p.getZone(kv.getKey());
|
PlayerZone zone = p.getZone(kv.getKey());
|
||||||
if (kv.getKey() == ZoneType.Battlefield) {
|
if (kv.getKey() == ZoneType.Battlefield) {
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import forge.ai.AiPlayDecision;
|
|||||||
import forge.ai.ComputerUtil;
|
import forge.ai.ComputerUtil;
|
||||||
import forge.ai.ComputerUtilAbility;
|
import forge.ai.ComputerUtilAbility;
|
||||||
import forge.ai.ComputerUtilCard;
|
import forge.ai.ComputerUtilCard;
|
||||||
|
import forge.ai.ComputerUtilCost;
|
||||||
import forge.ai.SpecialCardAi;
|
import forge.ai.SpecialCardAi;
|
||||||
import forge.ai.SpellAbilityAi;
|
import forge.ai.SpellAbilityAi;
|
||||||
import forge.game.Game;
|
import forge.game.Game;
|
||||||
@@ -35,7 +36,6 @@ import forge.game.zone.ZoneType;
|
|||||||
public class CopyPermanentAi extends SpellAbilityAi {
|
public class CopyPermanentAi extends SpellAbilityAi {
|
||||||
@Override
|
@Override
|
||||||
protected boolean canPlayAI(Player aiPlayer, SpellAbility sa) {
|
protected boolean canPlayAI(Player aiPlayer, SpellAbility sa) {
|
||||||
// TODO - I'm sure someone can do this AI better
|
|
||||||
Card source = sa.getHostCard();
|
Card source = sa.getHostCard();
|
||||||
PhaseHandler ph = aiPlayer.getGame().getPhaseHandler();
|
PhaseHandler ph = aiPlayer.getGame().getPhaseHandler();
|
||||||
String aiLogic = sa.getParamOrDefault("AILogic", "");
|
String aiLogic = sa.getParamOrDefault("AILogic", "");
|
||||||
@@ -77,6 +77,13 @@ public class CopyPermanentAi extends SpellAbilityAi {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (sa.costHasManaX() && sa.getSVar("X").equals("Count$xPaid")) {
|
||||||
|
// Set PayX here to maximum value. (Osgir)
|
||||||
|
final int xPay = ComputerUtilCost.getMaxXValue(sa, aiPlayer);
|
||||||
|
|
||||||
|
sa.setXManaCostPaid(xPay);
|
||||||
|
}
|
||||||
|
|
||||||
if (sa.usesTargeting() && sa.hasParam("TargetingPlayer")) {
|
if (sa.usesTargeting() && sa.hasParam("TargetingPlayer")) {
|
||||||
sa.resetTargets();
|
sa.resetTargets();
|
||||||
Player targetingPlayer = AbilityUtils.getDefinedPlayers(source, sa.getParam("TargetingPlayer"), sa).get(0);
|
Player targetingPlayer = AbilityUtils.getDefinedPlayers(source, sa.getParam("TargetingPlayer"), sa).get(0);
|
||||||
@@ -106,7 +113,7 @@ public class CopyPermanentAi extends SpellAbilityAi {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
return this.doTriggerAINoCost(aiPlayer, sa, false);
|
return doTriggerAINoCost(aiPlayer, sa, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>forge</artifactId>
|
<artifactId>forge</artifactId>
|
||||||
<groupId>forge</groupId>
|
<groupId>forge</groupId>
|
||||||
<version>1.6.44-SNAPSHOT</version>
|
<version>1.6.45-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>forge-core</artifactId>
|
<artifactId>forge-core</artifactId>
|
||||||
|
|||||||
@@ -477,7 +477,7 @@ public final class CardType implements Comparable<CardType>, CardTypeView {
|
|||||||
}
|
}
|
||||||
// we assume that changes are already correctly ordered (taken from TreeMap.values())
|
// we assume that changes are already correctly ordered (taken from TreeMap.values())
|
||||||
for (final CardChangedType ct : changedCardTypes) {
|
for (final CardChangedType ct : changedCardTypes) {
|
||||||
if(null == newType)
|
if (null == newType)
|
||||||
newType = new CardType(CardType.this);
|
newType = new CardType(CardType.this);
|
||||||
|
|
||||||
if (ct.isRemoveCardTypes()) {
|
if (ct.isRemoveCardTypes()) {
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>forge</artifactId>
|
<artifactId>forge</artifactId>
|
||||||
<groupId>forge</groupId>
|
<groupId>forge</groupId>
|
||||||
<version>1.6.44-SNAPSHOT</version>
|
<version>1.6.45-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>forge-game</artifactId>
|
<artifactId>forge-game</artifactId>
|
||||||
|
|||||||
@@ -74,7 +74,7 @@ public enum Direction {
|
|||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
*/
|
*/
|
||||||
public String toString() {
|
public String toString() {
|
||||||
switch(this) {
|
switch (this) {
|
||||||
case Left:
|
case Left:
|
||||||
return LEFT;
|
return LEFT;
|
||||||
case Right:
|
case Right:
|
||||||
|
|||||||
@@ -39,6 +39,7 @@ import com.google.common.collect.Multimap;
|
|||||||
import com.google.common.collect.Table;
|
import com.google.common.collect.Table;
|
||||||
import com.google.common.eventbus.EventBus;
|
import com.google.common.eventbus.EventBus;
|
||||||
|
|
||||||
|
import forge.GameCommand;
|
||||||
import forge.card.CardRarity;
|
import forge.card.CardRarity;
|
||||||
import forge.card.CardStateName;
|
import forge.card.CardStateName;
|
||||||
import forge.card.CardType.Supertype;
|
import forge.card.CardType.Supertype;
|
||||||
@@ -99,6 +100,8 @@ public class Game {
|
|||||||
public final Phase endOfTurn;
|
public final Phase endOfTurn;
|
||||||
public final Untap untap;
|
public final Untap untap;
|
||||||
public final Phase upkeep;
|
public final Phase upkeep;
|
||||||
|
// to execute commands for "current" phase each time state based action is checked
|
||||||
|
public final List<GameCommand> sbaCheckedCommandList;
|
||||||
public final MagicStack stack;
|
public final MagicStack stack;
|
||||||
public final CostPaymentStack costPaymentStack = new CostPaymentStack();
|
public final CostPaymentStack costPaymentStack = new CostPaymentStack();
|
||||||
private final PhaseHandler phaseHandler;
|
private final PhaseHandler phaseHandler;
|
||||||
@@ -118,6 +121,9 @@ public class Game {
|
|||||||
|
|
||||||
private Table<CounterType, Player, List<Pair<Card, Integer>>> countersAddedThisTurn = HashBasedTable.create();
|
private Table<CounterType, Player, List<Pair<Card, Integer>>> countersAddedThisTurn = HashBasedTable.create();
|
||||||
|
|
||||||
|
private Map<Player, Card> topLibsCast = Maps.newHashMap();
|
||||||
|
private Map<Card, Integer> facedownWhileCasting = Maps.newHashMap();
|
||||||
|
|
||||||
private Player monarch = null;
|
private Player monarch = null;
|
||||||
private Player monarchBeginTurn = null;
|
private Player monarchBeginTurn = null;
|
||||||
|
|
||||||
@@ -305,6 +311,8 @@ public class Game {
|
|||||||
endOfCombat = new Phase(PhaseType.COMBAT_END);
|
endOfCombat = new Phase(PhaseType.COMBAT_END);
|
||||||
endOfTurn = new Phase(PhaseType.END_OF_TURN);
|
endOfTurn = new Phase(PhaseType.END_OF_TURN);
|
||||||
|
|
||||||
|
sbaCheckedCommandList = new ArrayList<>();
|
||||||
|
|
||||||
// update players
|
// update players
|
||||||
view.updatePlayers(this);
|
view.updatePlayers(this);
|
||||||
|
|
||||||
@@ -379,6 +387,17 @@ public class Game {
|
|||||||
return cleanup;
|
return cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void addSBACheckedCommand(final GameCommand c) {
|
||||||
|
sbaCheckedCommandList.add(c);
|
||||||
|
}
|
||||||
|
public final void runSBACheckedCommands() {
|
||||||
|
for (final GameCommand c : sbaCheckedCommandList) {
|
||||||
|
c.run();
|
||||||
|
}
|
||||||
|
sbaCheckedCommandList.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public final PhaseHandler getPhaseHandler() {
|
public final PhaseHandler getPhaseHandler() {
|
||||||
return phaseHandler;
|
return phaseHandler;
|
||||||
}
|
}
|
||||||
@@ -1102,4 +1121,39 @@ public class Game {
|
|||||||
public void clearCounterAddedThisTurn() {
|
public void clearCounterAddedThisTurn() {
|
||||||
countersAddedThisTurn.clear();
|
countersAddedThisTurn.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Card getTopLibForPlayer(Player P) {
|
||||||
|
return topLibsCast.get(P);
|
||||||
|
}
|
||||||
|
public void setTopLibsCast() {
|
||||||
|
for (Player p : getPlayers()) {
|
||||||
|
topLibsCast.put(p, p.getTopXCardsFromLibrary(1).isEmpty() ? null : p.getTopXCardsFromLibrary(1).get(0));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public void clearTopLibsCast(SpellAbility sa) {
|
||||||
|
// if nothing left to pay
|
||||||
|
if (sa.getActivatingPlayer().getPaidForSA() == null) {
|
||||||
|
topLibsCast.clear();
|
||||||
|
for (Card c : facedownWhileCasting.keySet()) {
|
||||||
|
// maybe it was discarded as payment?
|
||||||
|
if (c.isInZone(ZoneType.Hand)) {
|
||||||
|
c.forceTurnFaceUp();
|
||||||
|
|
||||||
|
// If an effect allows or instructs a player to reveal the card as it’s being drawn,
|
||||||
|
// it’s revealed after the spell becomes cast or the ability becomes activated.
|
||||||
|
final Map<AbilityKey, Object> runParams = Maps.newHashMap();
|
||||||
|
runParams.put(AbilityKey.Card, c);
|
||||||
|
runParams.put(AbilityKey.Number, facedownWhileCasting.get(c));
|
||||||
|
runParams.put(AbilityKey.Player, this);
|
||||||
|
runParams.put(AbilityKey.CanReveal, true);
|
||||||
|
// need to hold trigger to clear list first
|
||||||
|
getTriggerHandler().runTrigger(TriggerType.Drawn, runParams, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
facedownWhileCasting.clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public void addFacedownWhileCasting(Card c, int numDrawn) {
|
||||||
|
facedownWhileCasting.put(c, Integer.valueOf(numDrawn));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1229,7 +1229,7 @@ public class GameAction {
|
|||||||
}
|
}
|
||||||
// Rule 704.5g - Destroy due to lethal damage
|
// Rule 704.5g - Destroy due to lethal damage
|
||||||
// Rule 704.5h - Destroy due to deathtouch
|
// Rule 704.5h - Destroy due to deathtouch
|
||||||
else if (c.getDamage() > 0 && (c.getLethal() <= c.getDamage() || c.hasBeenDealtDeathtouchDamage())) {
|
else if (c.hasBeenDealtDeathtouchDamage() || (c.getDamage() > 0 && c.getLethal() <= c.getDamage())) {
|
||||||
if (desCreats == null) {
|
if (desCreats == null) {
|
||||||
desCreats = new CardCollection();
|
desCreats = new CardCollection();
|
||||||
}
|
}
|
||||||
@@ -1371,6 +1371,9 @@ public class GameAction {
|
|||||||
if (!refreeze) {
|
if (!refreeze) {
|
||||||
game.getStack().unfreezeStack();
|
game.getStack().unfreezeStack();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Run all commands that are queued to run after state based actions are checked
|
||||||
|
game.runSBACheckedCommands();
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean stateBasedAction_Saga(Card c, CardZoneTable table) {
|
private boolean stateBasedAction_Saga(Card c, CardZoneTable table) {
|
||||||
|
|||||||
@@ -338,7 +338,6 @@ public final class AbilityFactory {
|
|||||||
final String min = mapParams.containsKey("TargetMin") ? mapParams.get("TargetMin") : "1";
|
final String min = mapParams.containsKey("TargetMin") ? mapParams.get("TargetMin") : "1";
|
||||||
final String max = mapParams.containsKey("TargetMax") ? mapParams.get("TargetMax") : "1";
|
final String max = mapParams.containsKey("TargetMax") ? mapParams.get("TargetMax") : "1";
|
||||||
|
|
||||||
|
|
||||||
// TgtPrompt now optional
|
// TgtPrompt now optional
|
||||||
final String prompt = mapParams.containsKey("TgtPrompt") ? mapParams.get("TgtPrompt") : "Select target " + mapParams.get("ValidTgts");
|
final String prompt = mapParams.containsKey("TgtPrompt") ? mapParams.get("TgtPrompt") : "Select target " + mapParams.get("ValidTgts");
|
||||||
|
|
||||||
@@ -412,7 +411,6 @@ public final class AbilityFactory {
|
|||||||
* a {@link forge.game.spellability.SpellAbility} object.
|
* a {@link forge.game.spellability.SpellAbility} object.
|
||||||
*/
|
*/
|
||||||
private static final void initializeParams(final SpellAbility sa) {
|
private static final void initializeParams(final SpellAbility sa) {
|
||||||
|
|
||||||
if (sa.hasParam("NonBasicSpell")) {
|
if (sa.hasParam("NonBasicSpell")) {
|
||||||
sa.setBasicSpell(false);
|
sa.setBasicSpell(false);
|
||||||
}
|
}
|
||||||
@@ -456,7 +454,6 @@ public final class AbilityFactory {
|
|||||||
* @return a {@link forge.game.spellability.AbilitySub} object.
|
* @return a {@link forge.game.spellability.AbilitySub} object.
|
||||||
*/
|
*/
|
||||||
private static final AbilitySub getSubAbility(CardState state, String sSub, final IHasSVars sVarHolder) {
|
private static final AbilitySub getSubAbility(CardState state, String sSub, final IHasSVars sVarHolder) {
|
||||||
|
|
||||||
if (sVarHolder.hasSVar(sSub)) {
|
if (sVarHolder.hasSVar(sSub)) {
|
||||||
return (AbilitySub) AbilityFactory.getAbility(state, sSub, sVarHolder);
|
return (AbilitySub) AbilityFactory.getAbility(state, sSub, sVarHolder);
|
||||||
}
|
}
|
||||||
@@ -484,7 +481,7 @@ public final class AbilityFactory {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static final SpellAbility buildFusedAbility(final Card card) {
|
public static final SpellAbility buildFusedAbility(final Card card) {
|
||||||
if(!card.isSplitCard())
|
if (!card.isSplitCard())
|
||||||
throw new IllegalStateException("Fuse ability may be built only on split cards");
|
throw new IllegalStateException("Fuse ability may be built only on split cards");
|
||||||
|
|
||||||
CardState leftState = card.getState(CardStateName.LeftSplit);
|
CardState leftState = card.getState(CardStateName.LeftSplit);
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ public enum AbilityKey {
|
|||||||
AttackedTarget("AttackedTarget"),
|
AttackedTarget("AttackedTarget"),
|
||||||
Blocker("Blocker"),
|
Blocker("Blocker"),
|
||||||
Blockers("Blockers"),
|
Blockers("Blockers"),
|
||||||
|
CanReveal("CanReveal"),
|
||||||
CastSA("CastSA"),
|
CastSA("CastSA"),
|
||||||
CastSACMC("CastSACMC"),
|
CastSACMC("CastSACMC"),
|
||||||
Card("Card"),
|
Card("Card"),
|
||||||
|
|||||||
@@ -2456,11 +2456,11 @@ public class AbilityUtils {
|
|||||||
partyTypes.removeAll(chosenParty.keySet());
|
partyTypes.removeAll(chosenParty.keySet());
|
||||||
|
|
||||||
// Here I'm left with just the party types that I haven't selected.
|
// Here I'm left with just the party types that I haven't selected.
|
||||||
for(Card multi : multityped.keySet()) {
|
for (Card multi : multityped.keySet()) {
|
||||||
Set<String> types = multityped.get(multi);
|
Set<String> types = multityped.get(multi);
|
||||||
types.retainAll(partyTypes);
|
types.retainAll(partyTypes);
|
||||||
|
|
||||||
for(String type : types) {
|
for (String type : types) {
|
||||||
chosenParty.put(type, multi);
|
chosenParty.put(type, multi);
|
||||||
partyTypes.remove(type);
|
partyTypes.remove(type);
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -753,10 +753,10 @@ public abstract class SpellAbilityEffect {
|
|||||||
} else if ("UntilUntaps".equals(duration)) {
|
} else if ("UntilUntaps".equals(duration)) {
|
||||||
host.addUntapCommand(until);
|
host.addUntapCommand(until);
|
||||||
} else if ("UntilUnattached".equals(duration)) {
|
} else if ("UntilUnattached".equals(duration)) {
|
||||||
sa.getHostCard().addUnattachCommand(until);
|
host.addUnattachCommand(until);
|
||||||
} else if ("UntilFacedown".equals(duration)) {
|
} else if ("UntilFacedown".equals(duration)) {
|
||||||
sa.getHostCard().addFacedownCommand(until);
|
host.addFacedownCommand(until);
|
||||||
}else {
|
} else {
|
||||||
game.getEndOfTurn().addUntil(until);
|
game.getEndOfTurn().addUntil(until);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -919,8 +919,7 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
|
|||||||
String prompt;
|
String prompt;
|
||||||
if (defined) {
|
if (defined) {
|
||||||
prompt = Localizer.getInstance().getMessage("lblPutThatCardFromPlayerOriginToDestination", "{player's}", Lang.joinHomogenous(origin, ZoneType.Accessors.GET_TRANSLATED_NAME).toLowerCase(), destination.getTranslatedName().toLowerCase());
|
prompt = Localizer.getInstance().getMessage("lblPutThatCardFromPlayerOriginToDestination", "{player's}", Lang.joinHomogenous(origin, ZoneType.Accessors.GET_TRANSLATED_NAME).toLowerCase(), destination.getTranslatedName().toLowerCase());
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
prompt = Localizer.getInstance().getMessage("lblSearchPlayerZoneConfirm", "{player's}", Lang.joinHomogenous(origin, ZoneType.Accessors.GET_TRANSLATED_NAME).toLowerCase());
|
prompt = Localizer.getInstance().getMessage("lblSearchPlayerZoneConfirm", "{player's}", Lang.joinHomogenous(origin, ZoneType.Accessors.GET_TRANSLATED_NAME).toLowerCase());
|
||||||
}
|
}
|
||||||
String message = MessageUtil.formatMessage(prompt , decider, player);
|
String message = MessageUtil.formatMessage(prompt , decider, player);
|
||||||
|
|||||||
@@ -283,31 +283,24 @@ public class EffectEffect extends SpellAbilityEffect {
|
|||||||
|
|
||||||
if ((duration == null) || duration.equals("EndOfTurn")) {
|
if ((duration == null) || duration.equals("EndOfTurn")) {
|
||||||
game.getEndOfTurn().addUntil(endEffect);
|
game.getEndOfTurn().addUntil(endEffect);
|
||||||
}
|
} else if (duration.equals("UntilHostLeavesPlay")) {
|
||||||
else if (duration.equals("UntilHostLeavesPlay")) {
|
|
||||||
hostCard.addLeavesPlayCommand(endEffect);
|
hostCard.addLeavesPlayCommand(endEffect);
|
||||||
}
|
} else if (duration.equals("UntilHostLeavesPlayOrEOT")) {
|
||||||
else if (duration.equals("UntilHostLeavesPlayOrEOT")) {
|
|
||||||
game.getEndOfTurn().addUntil(endEffect);
|
game.getEndOfTurn().addUntil(endEffect);
|
||||||
hostCard.addLeavesPlayCommand(endEffect);
|
hostCard.addLeavesPlayCommand(endEffect);
|
||||||
}
|
} else if (duration.equals("UntilYourNextTurn")) {
|
||||||
else if (duration.equals("UntilYourNextTurn")) {
|
|
||||||
game.getCleanup().addUntil(controller, endEffect);
|
game.getCleanup().addUntil(controller, endEffect);
|
||||||
}
|
} else if (duration.equals("UntilYourNextUpkeep")) {
|
||||||
else if (duration.equals("UntilYourNextUpkeep")) {
|
|
||||||
game.getUpkeep().addUntil(controller, endEffect);
|
game.getUpkeep().addUntil(controller, endEffect);
|
||||||
}
|
} else if (duration.equals("UntilEndOfCombat")) {
|
||||||
else if (duration.equals("UntilEndOfCombat")) {
|
|
||||||
game.getEndOfCombat().addUntil(endEffect);
|
game.getEndOfCombat().addUntil(endEffect);
|
||||||
}
|
} else if (duration.equals("UntilTheEndOfYourNextTurn")) {
|
||||||
else if (duration.equals("UntilTheEndOfYourNextTurn")) {
|
|
||||||
if (game.getPhaseHandler().isPlayerTurn(controller)) {
|
if (game.getPhaseHandler().isPlayerTurn(controller)) {
|
||||||
game.getEndOfTurn().registerUntilEnd(controller, endEffect);
|
game.getEndOfTurn().registerUntilEnd(controller, endEffect);
|
||||||
} else {
|
} else {
|
||||||
game.getEndOfTurn().addUntilEnd(controller, endEffect);
|
game.getEndOfTurn().addUntilEnd(controller, endEffect);
|
||||||
}
|
}
|
||||||
}
|
} else if (duration.equals("ThisTurnAndNextTurn")) {
|
||||||
else if (duration.equals("ThisTurnAndNextTurn")) {
|
|
||||||
game.getUntap().addAt(new GameCommand() {
|
game.getUntap().addAt(new GameCommand() {
|
||||||
private static final long serialVersionUID = -5054153666503075717L;
|
private static final long serialVersionUID = -5054153666503075717L;
|
||||||
|
|
||||||
@@ -316,6 +309,8 @@ public class EffectEffect extends SpellAbilityEffect {
|
|||||||
game.getEndOfTurn().addUntil(endEffect);
|
game.getEndOfTurn().addUntil(endEffect);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
} else if (duration.equals("UntilStateBasedActionChecked")) {
|
||||||
|
game.addSBACheckedCommand(endEffect);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -46,6 +46,10 @@ public class RepeatEachEffect extends SpellAbilityEffect {
|
|||||||
|
|
||||||
final Player player = sa.getActivatingPlayer();
|
final Player player = sa.getActivatingPlayer();
|
||||||
final Game game = player.getGame();
|
final Game game = player.getGame();
|
||||||
|
if (sa.hasParam("Optional") && sa.hasParam("OptionPrompt") && //for now, OptionPrompt is needed
|
||||||
|
!player.getController().confirmAction(sa, null, sa.getParam("OptionPrompt"))) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
boolean useImprinted = sa.hasParam("UseImprinted");
|
boolean useImprinted = sa.hasParam("UseImprinted");
|
||||||
|
|
||||||
|
|||||||
@@ -2005,7 +2005,6 @@ public class Card extends GameEntity implements Comparable<Card>, IHasSVars {
|
|||||||
} else if (keyword.startsWith("Strive") || keyword.startsWith("Escalate")
|
} else if (keyword.startsWith("Strive") || keyword.startsWith("Escalate")
|
||||||
|| keyword.startsWith("ETBReplacement")
|
|| keyword.startsWith("ETBReplacement")
|
||||||
|| keyword.startsWith("Affinity")
|
|| keyword.startsWith("Affinity")
|
||||||
|| keyword.equals("CARDNAME enters the battlefield tapped.")
|
|
||||||
|| keyword.startsWith("UpkeepCost")) {
|
|| keyword.startsWith("UpkeepCost")) {
|
||||||
} else if (keyword.equals("Provoke") || keyword.equals("Ingest") || keyword.equals("Unleash")
|
} else if (keyword.equals("Provoke") || keyword.equals("Ingest") || keyword.equals("Unleash")
|
||||||
|| keyword.equals("Soulbond") || keyword.equals("Partner") || keyword.equals("Retrace")
|
|| keyword.equals("Soulbond") || keyword.equals("Partner") || keyword.equals("Retrace")
|
||||||
@@ -3453,7 +3452,13 @@ public class Card extends GameEntity implements Comparable<Card>, IHasSVars {
|
|||||||
if (changedCardTypes.isEmpty() && changedCardTypesCharacterDefining.isEmpty()) {
|
if (changedCardTypes.isEmpty() && changedCardTypesCharacterDefining.isEmpty()) {
|
||||||
return state.getType();
|
return state.getType();
|
||||||
}
|
}
|
||||||
return state.getType().getTypeWithChanges(getChangedCardTypes());
|
// CR 506.4 attacked planeswalkers leave combat
|
||||||
|
boolean checkCombat = state.getType().isPlaneswalker() && game.getCombat() != null && !game.getCombat().getAttackersOf(this).isEmpty();
|
||||||
|
CardTypeView types = state.getType().getTypeWithChanges(getChangedCardTypes());
|
||||||
|
if (checkCombat && !types.isPlaneswalker()) {
|
||||||
|
game.getCombat().removeFromCombat(this);
|
||||||
|
}
|
||||||
|
return types;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Iterable<CardChangedType> getChangedCardTypes() {
|
public Iterable<CardChangedType> getChangedCardTypes() {
|
||||||
@@ -3521,7 +3526,6 @@ public class Card extends GameEntity implements Comparable<Card>, IHasSVars {
|
|||||||
final boolean removeLandTypes, final boolean removeCreatureTypes, final boolean removeArtifactTypes,
|
final boolean removeLandTypes, final boolean removeCreatureTypes, final boolean removeArtifactTypes,
|
||||||
final boolean removeEnchantmentTypes,
|
final boolean removeEnchantmentTypes,
|
||||||
final long timestamp, final boolean updateView, final boolean cda) {
|
final long timestamp, final boolean updateView, final boolean cda) {
|
||||||
|
|
||||||
(cda ? changedCardTypesCharacterDefining : changedCardTypes).put(timestamp, new CardChangedType(
|
(cda ? changedCardTypesCharacterDefining : changedCardTypes).put(timestamp, new CardChangedType(
|
||||||
addType, removeType, removeSuperTypes, removeCardTypes, removeSubTypes,
|
addType, removeType, removeSuperTypes, removeCardTypes, removeSubTypes,
|
||||||
removeLandTypes, removeCreatureTypes, removeArtifactTypes, removeEnchantmentTypes));
|
removeLandTypes, removeCreatureTypes, removeArtifactTypes, removeEnchantmentTypes));
|
||||||
@@ -5188,7 +5192,6 @@ public class Card extends GameEntity implements Comparable<Card>, IHasSVars {
|
|||||||
// This is used by the AI to forecast an effect (so it must not change the game state)
|
// This is used by the AI to forecast an effect (so it must not change the game state)
|
||||||
@Override
|
@Override
|
||||||
public final int staticReplaceDamage(final int damage, final Card source, final boolean isCombat) {
|
public final int staticReplaceDamage(final int damage, final Card source, final boolean isCombat) {
|
||||||
|
|
||||||
int restDamage = damage;
|
int restDamage = damage;
|
||||||
for (Card c : getGame().getCardsIn(ZoneType.Battlefield)) {
|
for (Card c : getGame().getCardsIn(ZoneType.Battlefield)) {
|
||||||
if (c.getName().equals("Sulfuric Vapors")) {
|
if (c.getName().equals("Sulfuric Vapors")) {
|
||||||
@@ -5264,8 +5267,7 @@ public class Card extends GameEntity implements Comparable<Card>, IHasSVars {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This function handles damage after replacement and prevention effects are
|
* This function handles damage after replacement and prevention effects are applied.
|
||||||
* applied.
|
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public final int addDamageAfterPrevention(final int damageIn, final Card source, final boolean isCombat, GameEntityCounterTable counterTable) {
|
public final int addDamageAfterPrevention(final int damageIn, final Card source, final boolean isCombat, GameEntityCounterTable counterTable) {
|
||||||
|
|||||||
@@ -116,7 +116,6 @@ public class CardFactory {
|
|||||||
//out.setFaceDown(in.isFaceDown());
|
//out.setFaceDown(in.isFaceDown());
|
||||||
|
|
||||||
return out;
|
return out;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -740,7 +739,6 @@ public class CardFactory {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (sa.hasParam("GainThisAbility") && (sa instanceof SpellAbility)) {
|
if (sa.hasParam("GainThisAbility") && (sa instanceof SpellAbility)) {
|
||||||
SpellAbility root = ((SpellAbility) sa).getRootAbility();
|
SpellAbility root = ((SpellAbility) sa).getRootAbility();
|
||||||
|
|
||||||
|
|||||||
@@ -1421,7 +1421,14 @@ public class CardProperty {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (property.equals("attackingYouOrYourPW")) {
|
if (property.equals("attackingYouOrYourPW")) {
|
||||||
Player defender = combat.getDefenderPlayerByAttacker(card);
|
GameEntity defender = combat.getDefenderByAttacker(card);
|
||||||
|
if (defender instanceof Card) {
|
||||||
|
// attack on a planeswalker that was removed from combat
|
||||||
|
if (!((Card)defender).isPlaneswalker()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
defender = ((Card)defender).getController();
|
||||||
|
}
|
||||||
if (!sourceController.equals(defender)) {
|
if (!sourceController.equals(defender)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -602,7 +602,7 @@ public class Combat {
|
|||||||
for (Card pw : getDefendingPlaneswalkers()) {
|
for (Card pw : getDefendingPlaneswalkers()) {
|
||||||
if (pw.equals(c)) {
|
if (pw.equals(c)) {
|
||||||
Multimap<GameEntity, AttackingBand> attackerBuffer = ArrayListMultimap.create();
|
Multimap<GameEntity, AttackingBand> attackerBuffer = ArrayListMultimap.create();
|
||||||
Collection<AttackingBand> bands = attackedByBands.get(pw);
|
Collection<AttackingBand> bands = attackedByBands.get(c);
|
||||||
for (AttackingBand abPW : bands) {
|
for (AttackingBand abPW : bands) {
|
||||||
unregisterDefender(c, abPW);
|
unregisterDefender(c, abPW);
|
||||||
// Rule 506.4c workaround to keep creatures in combat
|
// Rule 506.4c workaround to keep creatures in combat
|
||||||
@@ -613,6 +613,7 @@ public class Combat {
|
|||||||
}
|
}
|
||||||
bands.clear();
|
bands.clear();
|
||||||
attackedByBands.putAll(attackerBuffer);
|
attackedByBands.putAll(attackerBuffer);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -425,7 +425,9 @@ public class CombatUtil {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
final int blockersFromOnePlayer = CardLists.filter(combat.getAllBlockers(), CardPredicates.isController(blocker.getController())).size();
|
CardCollection allOtherBlockers = combat.getAllBlockers();
|
||||||
|
allOtherBlockers.remove(blocker);
|
||||||
|
final int blockersFromOnePlayer = CardLists.filter(allOtherBlockers, CardPredicates.isController(blocker.getController())).size();
|
||||||
if (blockersFromOnePlayer > 0 && game.getStaticEffects().getGlobalRuleChange(GlobalRuleChange.onlyOneBlockerPerOpponent)) {
|
if (blockersFromOnePlayer > 0 && game.getStaticEffects().getGlobalRuleChange(GlobalRuleChange.onlyOneBlockerPerOpponent)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -67,8 +67,7 @@ public class CostExile extends CostPartWithList {
|
|||||||
CardCollectionView typeList;
|
CardCollectionView typeList;
|
||||||
if (this.sameZone) {
|
if (this.sameZone) {
|
||||||
typeList = game.getCardsIn(this.from);
|
typeList = game.getCardsIn(this.from);
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
typeList = payer.getCardsIn(this.from);
|
typeList = payer.getCardsIn(this.from);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -140,7 +139,7 @@ public class CostExile extends CostPartWithList {
|
|||||||
return list.contains(source);
|
return list.contains(source);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!type.contains("X")) {
|
if (!type.contains("X") || ability.getXManaCostPaid() != null) {
|
||||||
list = CardLists.getValidCards(list, type.split(";"), payer, source, ability);
|
list = CardLists.getValidCards(list, type.split(";"), payer, source, ability);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -155,7 +155,6 @@ public class CostPartMana extends CostPart {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean payAsDecided(Player payer, PaymentDecision pd, SpellAbility sa) {
|
public boolean payAsDecided(Player payer, PaymentDecision pd, SpellAbility sa) {
|
||||||
// TODO Auto-generated method stub
|
|
||||||
sa.clearManaPaid();
|
sa.clearManaPaid();
|
||||||
|
|
||||||
// decision not used here, the whole payment is interactive!
|
// decision not used here, the whole payment is interactive!
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ public abstract class AbstractMulligan {
|
|||||||
|
|
||||||
public void mulligan() {
|
public void mulligan() {
|
||||||
CardCollection toMulligan = new CardCollection(player.getCardsIn(ZoneType.Hand));
|
CardCollection toMulligan = new CardCollection(player.getCardsIn(ZoneType.Hand));
|
||||||
|
if (toMulligan.isEmpty()) return;
|
||||||
revealPreMulligan(toMulligan);
|
revealPreMulligan(toMulligan);
|
||||||
for (final Card c : toMulligan) {
|
for (final Card c : toMulligan) {
|
||||||
player.getGame().getAction().moveToLibrary(c, null);
|
player.getGame().getAction().moveToLibrary(c, null);
|
||||||
|
|||||||
@@ -1219,20 +1219,6 @@ public class Player extends GameEntity implements Comparable<Player> {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public final boolean canDraw() {
|
|
||||||
if (hasKeyword("You can't draw cards.")) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (hasKeyword("You can't draw more than one card each turn.")) {
|
|
||||||
return numDrawnThisTurn < 1;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public final CardCollectionView drawCard() {
|
|
||||||
return drawCards(1, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void surveil(int num, SpellAbility cause, CardZoneTable table) {
|
public void surveil(int num, SpellAbility cause, CardZoneTable table) {
|
||||||
final Map<AbilityKey, Object> repParams = AbilityKey.mapFromAffected(this);
|
final Map<AbilityKey, Object> repParams = AbilityKey.mapFromAffected(this);
|
||||||
repParams.put(AbilityKey.Source, cause);
|
repParams.put(AbilityKey.Source, cause);
|
||||||
@@ -1300,12 +1286,25 @@ public class Player extends GameEntity implements Comparable<Player> {
|
|||||||
return !getZone(ZoneType.Hand).isEmpty();
|
return !getZone(ZoneType.Hand).isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public final boolean canDraw() {
|
||||||
|
if (hasKeyword("You can't draw cards.")) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (hasKeyword("You can't draw more than one card each turn.")) {
|
||||||
|
return numDrawnThisTurn < 1;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public final CardCollectionView drawCard() {
|
||||||
|
return drawCards(1, null);
|
||||||
|
}
|
||||||
|
|
||||||
public final CardCollectionView drawCards(final int n) {
|
public final CardCollectionView drawCards(final int n) {
|
||||||
return drawCards(n, null);
|
return drawCards(n, null);
|
||||||
}
|
}
|
||||||
public final CardCollectionView drawCards(final int n, SpellAbility cause) {
|
public final CardCollectionView drawCards(final int n, SpellAbility cause) {
|
||||||
final CardCollection drawn = new CardCollection();
|
final CardCollection drawn = new CardCollection();
|
||||||
final Map<Player, CardCollection> toReveal = Maps.newHashMap();
|
|
||||||
|
|
||||||
// Replacement effects
|
// Replacement effects
|
||||||
final Map<AbilityKey, Object> repRunParams = AbilityKey.mapFromAffected(this);
|
final Map<AbilityKey, Object> repRunParams = AbilityKey.mapFromAffected(this);
|
||||||
@@ -1317,6 +1316,7 @@ public class Player extends GameEntity implements Comparable<Player> {
|
|||||||
|
|
||||||
// always allow drawing cards before the game actually starts (e.g. Maralen of the Mornsong Avatar)
|
// always allow drawing cards before the game actually starts (e.g. Maralen of the Mornsong Avatar)
|
||||||
final boolean gameStarted = game.getAge().ordinal() > GameStage.Mulligan.ordinal();
|
final boolean gameStarted = game.getAge().ordinal() > GameStage.Mulligan.ordinal();
|
||||||
|
final Map<Player, CardCollection> toReveal = Maps.newHashMap();
|
||||||
|
|
||||||
for (int i = 0; i < n; i++) {
|
for (int i = 0; i < n; i++) {
|
||||||
if (gameStarted && !canDraw()) {
|
if (gameStarted && !canDraw()) {
|
||||||
@@ -1358,7 +1358,6 @@ public class Player extends GameEntity implements Comparable<Player> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
List<Player> pList = Lists.newArrayList();
|
List<Player> pList = Lists.newArrayList();
|
||||||
|
|
||||||
for (Player p : getAllOtherPlayers()) {
|
for (Player p : getAllOtherPlayers()) {
|
||||||
if (c.mayPlayerLook(p)) {
|
if (c.mayPlayerLook(p)) {
|
||||||
pList.add(p);
|
pList.add(p);
|
||||||
@@ -1385,8 +1384,16 @@ public class Player extends GameEntity implements Comparable<Player> {
|
|||||||
}
|
}
|
||||||
view.updateNumDrawnThisTurn(this);
|
view.updateNumDrawnThisTurn(this);
|
||||||
|
|
||||||
// Run triggers
|
|
||||||
final Map<AbilityKey, Object> runParams = Maps.newHashMap();
|
final Map<AbilityKey, Object> runParams = Maps.newHashMap();
|
||||||
|
|
||||||
|
// CR 121.8 card was drawn as part of another sa (e.g. paying with Chromantic Sphere), hide it temporarily
|
||||||
|
if (game.getTopLibForPlayer(this) != null && getPaidForSA() != null && cause != null && getPaidForSA() != cause.getRootAbility()) {
|
||||||
|
c.turnFaceDown();
|
||||||
|
game.addFacedownWhileCasting(c, numDrawnThisTurn);
|
||||||
|
runParams.put(AbilityKey.CanReveal, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Run triggers
|
||||||
runParams.put(AbilityKey.Card, c);
|
runParams.put(AbilityKey.Card, c);
|
||||||
runParams.put(AbilityKey.Number, numDrawnThisTurn);
|
runParams.put(AbilityKey.Number, numDrawnThisTurn);
|
||||||
runParams.put(AbilityKey.Player, this);
|
runParams.put(AbilityKey.Player, this);
|
||||||
@@ -3164,7 +3171,11 @@ public class Player extends GameEntity implements Comparable<Player> {
|
|||||||
paidForStack.push(sa);
|
paidForStack.push(sa);
|
||||||
}
|
}
|
||||||
public void popPaidForSA() {
|
public void popPaidForSA() {
|
||||||
paidForStack.pop();
|
// it could be empty if spell couldn't be cast
|
||||||
|
paidForStack.poll();
|
||||||
|
}
|
||||||
|
public void clearPaidForSA() {
|
||||||
|
paidForStack.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isMonarch() {
|
public boolean isMonarch() {
|
||||||
|
|||||||
@@ -2070,7 +2070,7 @@ public abstract class SpellAbility extends CardTraitBase implements ISpellAbilit
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void checkActivationResloveSubs() {
|
public void checkActivationResolveSubs() {
|
||||||
if (hasParam("ActivationNumberSacrifice")) {
|
if (hasParam("ActivationNumberSacrifice")) {
|
||||||
String comp = getParam("ActivationNumberSacrifice");
|
String comp = getParam("ActivationNumberSacrifice");
|
||||||
int right = Integer.parseInt(comp.substring(2));
|
int right = Integer.parseInt(comp.substring(2));
|
||||||
@@ -2090,7 +2090,6 @@ public abstract class SpellAbility extends CardTraitBase implements ISpellAbilit
|
|||||||
public List<AbilitySub> getChosenList() {
|
public List<AbilitySub> getChosenList() {
|
||||||
return chosenList;
|
return chosenList;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setChosenList(List<AbilitySub> choices) {
|
public void setChosenList(List<AbilitySub> choices) {
|
||||||
chosenList = choices;
|
chosenList = choices;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -873,7 +873,7 @@ public final class StaticAbilityContinuous {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mayLookAt != null) {
|
if (mayLookAt != null && (!affectedCard.getOwner().getTopXCardsFromLibrary(1).contains(affectedCard) || game.getTopLibForPlayer(affectedCard.getOwner()) == null || game.getTopLibForPlayer(affectedCard.getOwner()) == affectedCard)) {
|
||||||
affectedCard.addMayLookAt(se.getTimestamp(), mayLookAt);
|
affectedCard.addMayLookAt(se.getTimestamp(), mayLookAt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -103,8 +103,8 @@ public class TriggerChangesZone extends Trigger {
|
|||||||
if (hasParam("ValidCard")) {
|
if (hasParam("ValidCard")) {
|
||||||
Card moved = (Card) runParams.get(AbilityKey.Card);
|
Card moved = (Card) runParams.get(AbilityKey.Card);
|
||||||
boolean leavesLKIZone = "Battlefield".equals(getParam("Origin"));
|
boolean leavesLKIZone = "Battlefield".equals(getParam("Origin"));
|
||||||
//TODO make this smarter if there ever is a card that lets you play anything from exile
|
leavesLKIZone |= "Exile".equals(getParam("Origin")) && (moved.getZone().is(ZoneType.Graveyard) ||
|
||||||
leavesLKIZone |= "Exile".equals(getParam("Origin")) && (moved.getZone().is(ZoneType.Graveyard) || moved.getZone().is(ZoneType.Command));
|
moved.getZone().is(ZoneType.Command) || hasParam("UseLKI"));
|
||||||
|
|
||||||
if (leavesLKIZone) {
|
if (leavesLKIZone) {
|
||||||
moved = (Card) runParams.get(AbilityKey.CardLKI);
|
moved = (Card) runParams.get(AbilityKey.CardLKI);
|
||||||
|
|||||||
@@ -86,6 +86,18 @@ public class TriggerDrawn extends Trigger {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (runParams.containsKey(AbilityKey.CanReveal)) {
|
||||||
|
// while drawing this is only set if false
|
||||||
|
boolean canReveal = (boolean) runParams.get(AbilityKey.CanReveal);
|
||||||
|
if (hasParam("ForReveal")) {
|
||||||
|
if (!canReveal) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else if (canReveal) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -555,4 +555,11 @@ public class WrappedAbility extends Ability {
|
|||||||
public void setCardState(CardState state) {
|
public void setCardState(CardState state) {
|
||||||
sa.setCardState(state);
|
sa.setCardState(state);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<AbilitySub> getChosenList() {
|
||||||
|
return sa.getChosenList();
|
||||||
|
}
|
||||||
|
public void setChosenList(List<AbilitySub> choices) {
|
||||||
|
sa.setChosenList(choices);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -134,7 +134,7 @@ public class MagicStack /* extends MyObservable */ implements Iterable<SpellAbil
|
|||||||
if (!ability.isCopied()) {
|
if (!ability.isCopied()) {
|
||||||
// Copied abilities aren't activated, so they shouldn't change these values
|
// Copied abilities aren't activated, so they shouldn't change these values
|
||||||
source.addAbilityActivated(ability);
|
source.addAbilityActivated(ability);
|
||||||
ability.checkActivationResloveSubs();
|
ability.checkActivationResolveSubs();
|
||||||
}
|
}
|
||||||
|
|
||||||
// if the ability is a spell, but not a copied spell and its not already
|
// if the ability is a spell, but not a copied spell and its not already
|
||||||
|
|||||||
@@ -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.43.001</alpha-version>
|
<alpha-version>1.6.44.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>
|
||||||
@@ -19,7 +19,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>forge</artifactId>
|
<artifactId>forge</artifactId>
|
||||||
<groupId>forge</groupId>
|
<groupId>forge</groupId>
|
||||||
<version>1.6.44-SNAPSHOT</version>
|
<version>1.6.45-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>forge-gui-android</artifactId>
|
<artifactId>forge-gui-android</artifactId>
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>forge</artifactId>
|
<artifactId>forge</artifactId>
|
||||||
<groupId>forge</groupId>
|
<groupId>forge</groupId>
|
||||||
<version>1.6.44-SNAPSHOT</version>
|
<version>1.6.45-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>forge-gui-desktop</artifactId>
|
<artifactId>forge-gui-desktop</artifactId>
|
||||||
|
|||||||
@@ -256,8 +256,10 @@ public class ImageCache {
|
|||||||
legalString = "Illus. " + ipc.getArtist() + " ©" + year + " WOTC";
|
legalString = "Illus. " + ipc.getArtist() + " ©" + year + " WOTC";
|
||||||
}
|
}
|
||||||
FCardImageRenderer.drawCardImage(original.createGraphics(), card, altState, width, height, art, legalString);
|
FCardImageRenderer.drawCardImage(original.createGraphics(), card, altState, width, height, art, legalString);
|
||||||
if (art != null || !fetcherEnabled)
|
// Skip store cache since the rendering speed seems to be fast enough
|
||||||
_CACHE.put(originalKey, original);
|
// Also the scaleImage below will already cache re-sized image for CardPanel anyway
|
||||||
|
// if (art != null || !fetcherEnabled)
|
||||||
|
// _CACHE.put(originalKey, original);
|
||||||
} else {
|
} else {
|
||||||
original = _defaultImage;
|
original = _defaultImage;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -64,6 +64,7 @@ public class CardFaceSymbols {
|
|||||||
MANA_IMAGES.put("W", FSkin.getImage(FSkinProp.IMG_MANA_W));
|
MANA_IMAGES.put("W", FSkin.getImage(FSkinProp.IMG_MANA_W));
|
||||||
MANA_IMAGES.put("WB", FSkin.getImage(FSkinProp.IMG_MANA_HYBRID_WB));
|
MANA_IMAGES.put("WB", FSkin.getImage(FSkinProp.IMG_MANA_HYBRID_WB));
|
||||||
MANA_IMAGES.put("WU", FSkin.getImage(FSkinProp.IMG_MANA_HYBRID_WU));
|
MANA_IMAGES.put("WU", FSkin.getImage(FSkinProp.IMG_MANA_HYBRID_WU));
|
||||||
|
MANA_IMAGES.put("P", FSkin.getImage(FSkinProp.IMG_MANA_PHRYX));
|
||||||
MANA_IMAGES.put("PW", FSkin.getImage(FSkinProp.IMG_MANA_PHRYX_W));
|
MANA_IMAGES.put("PW", FSkin.getImage(FSkinProp.IMG_MANA_PHRYX_W));
|
||||||
MANA_IMAGES.put("PR", FSkin.getImage(FSkinProp.IMG_MANA_PHRYX_R));
|
MANA_IMAGES.put("PR", FSkin.getImage(FSkinProp.IMG_MANA_PHRYX_R));
|
||||||
MANA_IMAGES.put("PU", FSkin.getImage(FSkinProp.IMG_MANA_PHRYX_U));
|
MANA_IMAGES.put("PU", FSkin.getImage(FSkinProp.IMG_MANA_PHRYX_U));
|
||||||
|
|||||||
@@ -1405,6 +1405,7 @@ public class FSkin {
|
|||||||
addEncodingSymbol("2/B", FSkinProp.IMG_MANA_2B);
|
addEncodingSymbol("2/B", FSkinProp.IMG_MANA_2B);
|
||||||
addEncodingSymbol("2/R", FSkinProp.IMG_MANA_2R);
|
addEncodingSymbol("2/R", FSkinProp.IMG_MANA_2R);
|
||||||
addEncodingSymbol("2/G", FSkinProp.IMG_MANA_2G);
|
addEncodingSymbol("2/G", FSkinProp.IMG_MANA_2G);
|
||||||
|
addEncodingSymbol("P", FSkinProp.IMG_MANA_PHRYX);
|
||||||
addEncodingSymbol("P/W", FSkinProp.IMG_MANA_PHRYX_W);
|
addEncodingSymbol("P/W", FSkinProp.IMG_MANA_PHRYX_W);
|
||||||
addEncodingSymbol("P/U", FSkinProp.IMG_MANA_PHRYX_U);
|
addEncodingSymbol("P/U", FSkinProp.IMG_MANA_PHRYX_U);
|
||||||
addEncodingSymbol("P/B", FSkinProp.IMG_MANA_PHRYX_B);
|
addEncodingSymbol("P/B", FSkinProp.IMG_MANA_PHRYX_B);
|
||||||
|
|||||||
@@ -6,13 +6,13 @@
|
|||||||
<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.43.001</alpha-version>
|
<alpha-version>1.6.44.001</alpha-version>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
<parent>
|
<parent>
|
||||||
<artifactId>forge</artifactId>
|
<artifactId>forge</artifactId>
|
||||||
<groupId>forge</groupId>
|
<groupId>forge</groupId>
|
||||||
<version>1.6.44-SNAPSHOT</version>
|
<version>1.6.45-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>forge-gui-ios</artifactId>
|
<artifactId>forge-gui-ios</artifactId>
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>forge</artifactId>
|
<artifactId>forge</artifactId>
|
||||||
<groupId>forge</groupId>
|
<groupId>forge</groupId>
|
||||||
<version>1.6.44-SNAPSHOT</version>
|
<version>1.6.45-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>forge-gui-mobile-dev</artifactId>
|
<artifactId>forge-gui-mobile-dev</artifactId>
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>forge</artifactId>
|
<artifactId>forge</artifactId>
|
||||||
<groupId>forge</groupId>
|
<groupId>forge</groupId>
|
||||||
<version>1.6.44-SNAPSHOT</version>
|
<version>1.6.45-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>forge-gui-mobile</artifactId>
|
<artifactId>forge-gui-mobile</artifactId>
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ import forge.util.Localizer;
|
|||||||
import forge.util.Utils;
|
import forge.util.Utils;
|
||||||
|
|
||||||
public class Forge implements ApplicationListener {
|
public class Forge implements ApplicationListener {
|
||||||
public static final String CURRENT_VERSION = "1.6.43.001";
|
public static final String CURRENT_VERSION = "1.6.44.001";
|
||||||
|
|
||||||
private static final ApplicationListener app = new Forge();
|
private static final ApplicationListener app = new Forge();
|
||||||
private static Clipboard clipboard;
|
private static Clipboard clipboard;
|
||||||
|
|||||||
@@ -62,6 +62,7 @@ public enum FSkinImage implements FImage {
|
|||||||
MANA_HYBRID_UR (FSkinProp.IMG_MANA_HYBRID_UR, SourceFile.MANAICONS),
|
MANA_HYBRID_UR (FSkinProp.IMG_MANA_HYBRID_UR, SourceFile.MANAICONS),
|
||||||
MANA_HYBRID_WB (FSkinProp.IMG_MANA_HYBRID_WB, SourceFile.MANAICONS),
|
MANA_HYBRID_WB (FSkinProp.IMG_MANA_HYBRID_WB, SourceFile.MANAICONS),
|
||||||
MANA_HYBRID_WU (FSkinProp.IMG_MANA_HYBRID_WU, SourceFile.MANAICONS),
|
MANA_HYBRID_WU (FSkinProp.IMG_MANA_HYBRID_WU, SourceFile.MANAICONS),
|
||||||
|
MANA_PHRYX (FSkinProp.IMG_MANA_PHRYX, SourceFile.MANAICONS),
|
||||||
MANA_PHRYX_U (FSkinProp.IMG_MANA_PHRYX_U, SourceFile.MANAICONS),
|
MANA_PHRYX_U (FSkinProp.IMG_MANA_PHRYX_U, SourceFile.MANAICONS),
|
||||||
MANA_PHRYX_W (FSkinProp.IMG_MANA_PHRYX_W, SourceFile.MANAICONS),
|
MANA_PHRYX_W (FSkinProp.IMG_MANA_PHRYX_W, SourceFile.MANAICONS),
|
||||||
MANA_PHRYX_R (FSkinProp.IMG_MANA_PHRYX_R, SourceFile.MANAICONS),
|
MANA_PHRYX_R (FSkinProp.IMG_MANA_PHRYX_R, SourceFile.MANAICONS),
|
||||||
|
|||||||
@@ -43,6 +43,7 @@ public class TextRenderer {
|
|||||||
symbolLookup.put("2/B", FSkinImage.MANA_2B);
|
symbolLookup.put("2/B", FSkinImage.MANA_2B);
|
||||||
symbolLookup.put("2/R", FSkinImage.MANA_2R);
|
symbolLookup.put("2/R", FSkinImage.MANA_2R);
|
||||||
symbolLookup.put("2/G", FSkinImage.MANA_2G);
|
symbolLookup.put("2/G", FSkinImage.MANA_2G);
|
||||||
|
symbolLookup.put("P", FSkinImage.MANA_PHRYX);
|
||||||
symbolLookup.put("P/W", FSkinImage.MANA_PHRYX_W);
|
symbolLookup.put("P/W", FSkinImage.MANA_PHRYX_W);
|
||||||
symbolLookup.put("P/U", FSkinImage.MANA_PHRYX_U);
|
symbolLookup.put("P/U", FSkinImage.MANA_PHRYX_U);
|
||||||
symbolLookup.put("P/B", FSkinImage.MANA_PHRYX_B);
|
symbolLookup.put("P/B", FSkinImage.MANA_PHRYX_B);
|
||||||
|
|||||||
@@ -56,6 +56,7 @@ public class CardFaceSymbols {
|
|||||||
MANA_IMAGES.put("W", FSkinImage.MANA_W);
|
MANA_IMAGES.put("W", FSkinImage.MANA_W);
|
||||||
MANA_IMAGES.put("WB", FSkinImage.MANA_HYBRID_WB);
|
MANA_IMAGES.put("WB", FSkinImage.MANA_HYBRID_WB);
|
||||||
MANA_IMAGES.put("WU", FSkinImage.MANA_HYBRID_WU);
|
MANA_IMAGES.put("WU", FSkinImage.MANA_HYBRID_WU);
|
||||||
|
MANA_IMAGES.put("P", FSkinImage.MANA_PHRYX);
|
||||||
MANA_IMAGES.put("PW", FSkinImage.MANA_PHRYX_W);
|
MANA_IMAGES.put("PW", FSkinImage.MANA_PHRYX_W);
|
||||||
MANA_IMAGES.put("PR", FSkinImage.MANA_PHRYX_R);
|
MANA_IMAGES.put("PR", FSkinImage.MANA_PHRYX_R);
|
||||||
MANA_IMAGES.put("PU", FSkinImage.MANA_PHRYX_U);
|
MANA_IMAGES.put("PU", FSkinImage.MANA_PHRYX_U);
|
||||||
|
|||||||
@@ -419,6 +419,7 @@ public class VStack extends FDropDown {
|
|||||||
newtext = TextUtil.fastReplace(TextUtil.fastReplace(newtext, " and .", ".")," .", ".");
|
newtext = TextUtil.fastReplace(TextUtil.fastReplace(newtext, " and .", ".")," .", ".");
|
||||||
newtext = TextUtil.fastReplace(TextUtil.fastReplace(newtext, "- - ", "- "), ". .", ".");
|
newtext = TextUtil.fastReplace(TextUtil.fastReplace(newtext, "- - ", "- "), ". .", ".");
|
||||||
newtext = TextUtil.fastReplace(newtext, "CARDNAME", name);
|
newtext = TextUtil.fastReplace(newtext, "CARDNAME", name);
|
||||||
|
newtext = TextUtil.fastReplace(newtext, name+name, name);
|
||||||
textRenderer.drawText(g, name+" "+cId + optionalCostString +newtext, FONT, foreColor, x, y, w, h, y, h, true, Align.left, true);
|
textRenderer.drawText(g, name+" "+cId + optionalCostString +newtext, FONT, foreColor, x, y, w, h, y, h, true, Align.left, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>forge</artifactId>
|
<artifactId>forge</artifactId>
|
||||||
<groupId>forge</groupId>
|
<groupId>forge</groupId>
|
||||||
<version>1.6.44-SNAPSHOT</version>
|
<version>1.6.45-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>forge-gui</artifactId>
|
<artifactId>forge-gui</artifactId>
|
||||||
|
|||||||
@@ -1,5 +1,8 @@
|
|||||||
#Add one announcement per line
|
#Add one announcement per line
|
||||||
|
The Throne of Eldraine quest world is the largest and most meticulously developed quest world to date, combining fascinating fairytales and interesting interactions. If you've never baked a pie into a pie, have you really played Magic?
|
||||||
Get in the discord if you aren't yet. https://discord.gg/3v9JCVr
|
Get in the discord if you aren't yet. https://discord.gg/3v9JCVr
|
||||||
|
New Graphic Options preference: display full card scan or cropped art with everything else rendered.
|
||||||
|
Most cards from Jumpstart:Historic Horizons are now available for brewing. J:HH limited play experience is WIP.
|
||||||
Custom cards can now be loaded from your user profile. Enable it your preferences.
|
Custom cards can now be loaded from your user profile. Enable it your preferences.
|
||||||
Fat packs and Booster Box count are now set in the Edition file for easier customization
|
Fat packs and Booster Box count are now set in the Edition file for easier customization
|
||||||
*** Android 7 & 8 support is now deprecated. Support will be dropped in an upcoming release. ***
|
*** Android 7 & 8 support is now deprecated. Support will be dropped in an upcoming release. ***
|
||||||
|
|||||||
@@ -3,12 +3,9 @@ ManaCost:2 B
|
|||||||
Types:Legendary Creature God
|
Types:Legendary Creature God
|
||||||
PT:6/6
|
PT:6/6
|
||||||
K:Deathtouch
|
K:Deathtouch
|
||||||
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigExile | TriggerDescription$ At the beginning of your upkeep, exile two cards from your graveyard. If you can't, sacrifice NICKNAME and draw a card.
|
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ DBSacSelf | TriggerDescription$ At the beginning of your upkeep, exile two cards from your graveyard. If you can't, sacrifice NICKNAME and draw a card.
|
||||||
SVar:TrigExile:DB$ ChangeZone | Origin$ Graveyard | Destination$ Exile | ChangeType$ Card.YouOwn | ChangeNum$ 2 | RememberChanged$ True | Hidden$ True | Mandatory$ True | SubAbility$ DBSacSelf
|
SVar:DBSacSelf:DB$ Sacrifice | Defined$ Self | UnlessCost$ Mandatory ExileFromGrave<2/Card> | UnlessPayer$ You | UnlessResolveSubs$ WhenNotPaid | SubAbility$ DBDraw
|
||||||
SVar:DBSacSelf:DB$ Sacrifice | Defined$ Self | ConditionCheckSVar$ X | ConditionSVarCompare$ LT2 | SubAbility$ DBDraw
|
SVar:DBDraw:DB$ Draw | NumCards$ 1
|
||||||
SVar:DBDraw:DB$ Draw | NumCards$ 1 | ConditionCheckSVar$ X | ConditionSVarCompare$ LT2 | SubAbility$ DBCleanup
|
|
||||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
|
||||||
SVar:X:Remembered$Amount
|
|
||||||
AlternateMode:Modal
|
AlternateMode:Modal
|
||||||
DeckHints:Ability$Discard & Ability$Graveyard
|
DeckHints:Ability$Discard & Ability$Graveyard
|
||||||
Oracle:Deathtouch\nAt the beginning of your upkeep, exile two cards from your graveyard. If you can't, sacrifice Egon and draw a card.
|
Oracle:Deathtouch\nAt the beginning of your upkeep, exile two cards from your graveyard. If you can't, sacrifice Egon and draw a card.
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ ManaCost:1 G
|
|||||||
Types:Creature Elf Warrior
|
Types:Creature Elf Warrior
|
||||||
PT:1/1
|
PT:1/1
|
||||||
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Elf.Other | TriggerZones$ Battlefield | Execute$ TrigPutCounter | TriggerDescription$ Whenever another Elf enters the battlefield, put a +1/+1 counter on CARDNAME.
|
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Elf.Other | TriggerZones$ Battlefield | Execute$ TrigPutCounter | TriggerDescription$ Whenever another Elf enters the battlefield, put a +1/+1 counter on CARDNAME.
|
||||||
SVar:TrigPutCounter:DB$PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ 1
|
SVar:TrigPutCounter:DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ 1
|
||||||
SVar:BuffedBy:Elf
|
SVar:BuffedBy:Elf
|
||||||
SVar:PlayMain1:TRUE
|
SVar:PlayMain1:TRUE
|
||||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/elvish_vanguard.jpg
|
SVar:Picture:http://www.wizards.com/global/images/magic/general/elvish_vanguard.jpg
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ ManaCost:2 U U
|
|||||||
Types:Legendary Creature Zombie God
|
Types:Legendary Creature Zombie God
|
||||||
PT:4/5
|
PT:4/5
|
||||||
K:Flying
|
K:Flying
|
||||||
T:Mode$ Drawn | ValidCard$ Card.YouOwn | Number$ 1 | OptionalDecider$ You | Static$ True | Execute$ DBReveal | TriggerZones$ Battlefield | TriggerDescription$ You may reveal the first card you draw each turn as you draw it. Whenever you reveal an instant or sorcery card this way, copy that card and you may cast the copy. That copy costs {2} less to cast.
|
T:Mode$ Drawn | ValidCard$ Card.YouOwn | Number$ 1 | OptionalDecider$ You | Static$ True | ForReveal$ True | Execute$ DBReveal | TriggerZones$ Battlefield | TriggerDescription$ You may reveal the first card you draw each turn as you draw it. Whenever you reveal an instant or sorcery card this way, copy that card and you may cast the copy. That copy costs {2} less to cast.
|
||||||
SVar:DBReveal:DB$ Reveal | Defined$ You | RevealDefined$ TriggeredCard | RememberRevealed$ True | SubAbility$ DBTrigger | AILogic$ Kefnet
|
SVar:DBReveal:DB$ Reveal | Defined$ You | RevealDefined$ TriggeredCard | RememberRevealed$ True | SubAbility$ DBTrigger | AILogic$ Kefnet
|
||||||
SVar:DBTrigger:DB$ ImmediateTrigger | RememberObjects$ RememberedCard | ConditionDefined$ Remembered | ConditionPresent$ Instant,Sorcery | SubAbility$ DBCleanup | Execute$ DBPlay | TriggerDescription$ Whenever you reveal an instant or sorcery card this way, copy that card and you may cast the copy. That copy costs {2} less to cast.
|
SVar:DBTrigger:DB$ ImmediateTrigger | RememberObjects$ RememberedCard | ConditionDefined$ Remembered | ConditionPresent$ Instant,Sorcery | SubAbility$ DBCleanup | Execute$ DBPlay | TriggerDescription$ Whenever you reveal an instant or sorcery card this way, copy that card and you may cast the copy. That copy costs {2} less to cast.
|
||||||
SVar:DBPlay:DB$ Play | Defined$ DelayTriggerRemembered | ValidSA$ Spell | PlayReduceCost$ 2 | Optional$ True | CopyCard$ True
|
SVar:DBPlay:DB$ Play | Defined$ DelayTriggerRemembered | ValidSA$ Spell | PlayReduceCost$ 2 | Optional$ True | CopyCard$ True
|
||||||
@@ -11,4 +11,3 @@ SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
|||||||
T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard,Exile | ValidCard$ Card.Self | Execute$ TriReturn | OptionalDecider$ You | TriggerController$ TriggeredCardController | TriggerDescription$ When CARDNAME dies or is put into exile from the battlefield, you may put it into its owner's library third from the top.
|
T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard,Exile | ValidCard$ Card.Self | Execute$ TriReturn | OptionalDecider$ You | TriggerController$ TriggeredCardController | TriggerDescription$ When CARDNAME dies or is put into exile from the battlefield, you may put it into its owner's library third from the top.
|
||||||
SVar:TriReturn:DB$ ChangeZone | Defined$ TriggeredNewCardLKICopy | Destination$ Library | LibraryPosition$ 2
|
SVar:TriReturn:DB$ ChangeZone | Defined$ TriggeredNewCardLKICopy | Destination$ Library | LibraryPosition$ 2
|
||||||
Oracle:Flying\nYou may reveal the first card you draw each turn as you draw it. Whenever you reveal an instant or sorcery card this way, copy that card and you may cast the copy. That copy costs {2} less to cast.\nWhen God-Eternal Kefnet dies or is put into exile from the battlefield, you may put it into its owner's library third from the top.
|
Oracle:Flying\nYou may reveal the first card you draw each turn as you draw it. Whenever you reveal an instant or sorcery card this way, copy that card and you may cast the copy. That copy costs {2} less to cast.\nWhen God-Eternal Kefnet dies or is put into exile from the battlefield, you may put it into its owner's library third from the top.
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ Types:Creature Devil
|
|||||||
PT:3/3
|
PT:3/3
|
||||||
K:Haste
|
K:Haste
|
||||||
T:Mode$ Attacks | ValidCard$ Creature.YouCtrl | Execute$ TrigDealDamage | TriggerZones$ Battlefield | TriggerDescription$ Whenever a creature you control attacks, CARDNAME deals 1 damage to the player or planeswalker it's attacking.
|
T:Mode$ Attacks | ValidCard$ Creature.YouCtrl | Execute$ TrigDealDamage | TriggerZones$ Battlefield | TriggerDescription$ Whenever a creature you control attacks, CARDNAME deals 1 damage to the player or planeswalker it's attacking.
|
||||||
SVar:TrigDealDamage:DB$DealDamage | Defined$ TriggeredDefendingPlayer | NumDmg$ 1
|
SVar:TrigDealDamage:DB$ DealDamage | Defined$ TriggeredDefender | NumDmg$ 1
|
||||||
SVar:HasAttackEffect:TRUE
|
SVar:HasAttackEffect:TRUE
|
||||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/hellrider.jpg
|
SVar:Picture:http://www.wizards.com/global/images/magic/general/hellrider.jpg
|
||||||
Oracle:Haste\nWhenever a creature you control attacks, Hellrider deals 1 damage to the player or planeswalker it's attacking.
|
Oracle:Haste\nWhenever a creature you control attacks, Hellrider deals 1 damage to the player or planeswalker it's attacking.
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ PT:6/5
|
|||||||
K:Indestructible
|
K:Indestructible
|
||||||
S:Mode$ Continuous | Affected$ Card.Self | RemoveType$ Creature | CheckSVar$ X | SVarCompare$ LT7 | Description$ As long as your devotion to blue and red is less than seven, CARDNAME isn't a creature.
|
S:Mode$ Continuous | Affected$ Card.Self | RemoveType$ Creature | CheckSVar$ X | SVarCompare$ LT7 | Description$ As long as your devotion to blue and red is less than seven, CARDNAME isn't a creature.
|
||||||
SVar:X:Count$DevotionDual.Blue.Red
|
SVar:X:Count$DevotionDual.Blue.Red
|
||||||
T:Mode$ Drawn | ValidCard$ Card.YouOwn | Number$ 1 | Static$ True | Execute$ DBReveal | TriggerZones$ Battlefield | PlayerTurn$ True | TriggerDescription$ Reveal the first card you draw on each of your turns. Whenever you reveal a land card this way, draw a card. Whenever you reveal a nonland card this way, CARDNAME deals 3 damage to any target.
|
T:Mode$ Drawn | ValidCard$ Card.YouOwn | Number$ 1 | Static$ True | Execute$ DBReveal | ForReveal$ True | TriggerZones$ Battlefield | PlayerTurn$ True | TriggerDescription$ Reveal the first card you draw on each of your turns. Whenever you reveal a land card this way, draw a card. Whenever you reveal a nonland card this way, CARDNAME deals 3 damage to any target.
|
||||||
SVar:DBReveal:DB$ Reveal | Defined$ You | RevealDefined$ TriggeredCard | RememberRevealed$ True | SubAbility$ DBTriggerLand
|
SVar:DBReveal:DB$ Reveal | Defined$ You | RevealDefined$ TriggeredCard | RememberRevealed$ True | SubAbility$ DBTriggerLand
|
||||||
SVar:DBTriggerLand:DB$ ImmediateTrigger | ConditionDefined$ Remembered | ConditionPresent$ Card.Land+YouCtrl | SubAbility$ DBTriggerNonLand | Execute$ TrigDraw | TriggerDescription$ Whenever you reveal a land card this way, draw a card.
|
SVar:DBTriggerLand:DB$ ImmediateTrigger | ConditionDefined$ Remembered | ConditionPresent$ Card.Land+YouCtrl | SubAbility$ DBTriggerNonLand | Execute$ TrigDraw | TriggerDescription$ Whenever you reveal a land card this way, draw a card.
|
||||||
SVar:DBTriggerNonLand:DB$ ImmediateTrigger | ConditionDefined$ Remembered | ConditionPresent$ Card.nonLand+YouCtrl | SubAbility$ DBCleanup | Execute$ TrigDmg | TriggerDescription$ Whenever you reveal a nonland card this way, CARDNAME deals 3 damage to any target.
|
SVar:DBTriggerNonLand:DB$ ImmediateTrigger | ConditionDefined$ Remembered | ConditionPresent$ Card.nonLand+YouCtrl | SubAbility$ DBCleanup | Execute$ TrigDmg | TriggerDescription$ Whenever you reveal a nonland card this way, CARDNAME deals 3 damage to any target.
|
||||||
|
|||||||
@@ -3,8 +3,10 @@ ManaCost:1 U B
|
|||||||
Types:Enchantment Saga
|
Types:Enchantment Saga
|
||||||
K:Saga:3:DBMill,DBEffect,DBEffect
|
K:Saga:3:DBMill,DBEffect,DBEffect
|
||||||
SVar:DBMill:DB$ Mill | NumCards$ 4 | Defined$ Player | SubAbility$ DBRepeatEach | SpellDescription$ Each player mills four cards. Then you may exile a creature or planeswalker card from each graveyard.
|
SVar:DBMill:DB$ Mill | NumCards$ 4 | Defined$ Player | SubAbility$ DBRepeatEach | SpellDescription$ Each player mills four cards. Then you may exile a creature or planeswalker card from each graveyard.
|
||||||
SVar:DBRepeatEach:DB$ RepeatEach | RepeatPlayers$ Player | RepeatSubAbility$ DBExile
|
SVar:DBRepeatEach:DB$ RepeatEach | Optional$ True | OptionPrompt$ Do you want to exile a creature or planeswalker card from each graveyard? | RepeatPlayers$ Player | RepeatSubAbility$ DBChooseCard | SubAbility$ DBExile
|
||||||
SVar:DBExile:DB$ ChangeZone | Origin$ Graveyard | Destination$ Exile | ChangeType$ Creature.RememberedPlayerCtrl,Planeswalker.RememberedPlayerCtrl | ChangeNum$ 1 | Chooser$ You | Optional$ True | Hidden$ True
|
SVar:DBChooseCard:DB$ ChooseCard | Defined$ You | Choices$ Creature.RememberedPlayerCtrl,Planeswalker.RememberedPlayerCtrl | ChoiceZone$ Graveyard | ChoiceTitle$ Select a creature or planeswalker | Mandatory$ True | RememberChosen$ True
|
||||||
|
SVar:DBExile:DB$ ChangeZoneAll | Origin$ Graveyard | Destination$ Exile | ChangeType$ Card.IsRemembered
|
||||||
|
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | ClearChosenCard$ True
|
||||||
SVar:DBEffect:DB$ Effect | StaticAbilities$ PlayExile | SpellDescription$ Until end of turn, you may cast spells from among cards exiled with CARDNAME, and you may spend mana as though it were mana of any color to cast those spells.
|
SVar:DBEffect:DB$ Effect | StaticAbilities$ PlayExile | SpellDescription$ Until end of turn, you may cast spells from among cards exiled with CARDNAME, and you may spend mana as though it were mana of any color to cast those spells.
|
||||||
SVar:PlayExile:Mode$ Continuous | MayPlayIgnoreType$ True | MayPlayIgnoreColor$ True | MayPlay$ True | Affected$ Card.ExiledWithEffectSource | AffectedZone$ Exile | Description$ You may play cards exiled with EFFECTSOURCE, and you may spend mana as though it were mana of any color to cast those spells.
|
SVar:PlayExile:Mode$ Continuous | MayPlayIgnoreType$ True | MayPlayIgnoreColor$ True | MayPlay$ True | Affected$ Card.ExiledWithEffectSource | AffectedZone$ Exile | Description$ You may play cards exiled with EFFECTSOURCE, and you may spend mana as though it were mana of any color to cast those spells.
|
||||||
DeckHas:Ability$Mill
|
DeckHas:Ability$Mill
|
||||||
|
|||||||
@@ -6,8 +6,8 @@ K:CARDNAME can't be countered.
|
|||||||
T:Mode$ Phase | Phase$ Upkeep | TriggerZones$ Battlefield | Execute$ TrigToken | TriggerDescription$ At the beginning of each upkeep, create a 3/3 blue Serpent creature token named Koma's Coil.
|
T:Mode$ Phase | Phase$ Upkeep | TriggerZones$ Battlefield | Execute$ TrigToken | TriggerDescription$ At the beginning of each upkeep, create a 3/3 blue Serpent creature token named Koma's Coil.
|
||||||
SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ komas_coil | TokenOwner$ You
|
SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ komas_coil | TokenOwner$ You
|
||||||
A:AB$ Charm | Cost$ Sac<1/Serpent.Other/another Serpent> | Choices$ DBTap,DBPump
|
A:AB$ Charm | Cost$ Sac<1/Serpent.Other/another Serpent> | Choices$ DBTap,DBPump
|
||||||
SVar:DBTap:DB$ Tap | ValidTgts$ Permanent | TgtPrompt$ Select target permanent | SubAbility$ DBConstrict | SpellDescription$ Tap target permanent. Its activated abilities can't be activated this turn.
|
SVar:DBTap:DB$ Tap | ValidTgts$ Permanent | TgtPrompt$ Select target permanent | SubAbility$ DBConstrict | StackDescription$ Tap {c:Targeted}. Its activated abilities can't be activated this turn. | SpellDescription$ Tap target permanent. Its activated abilities can't be activated this turn.
|
||||||
SVar:DBConstrict:DB$ Pump | Defined$ ParentTarget | KW$ HIDDEN CARDNAME's activated abilities can't be activated.
|
SVar:DBConstrict:DB$ Pump | Defined$ ParentTarget | KW$ HIDDEN CARDNAME's activated abilities can't be activated. | StackDescription$ None
|
||||||
SVar:DBPump:DB$ Pump | Defined$ Self | KW$ Indestructible | SpellDescription$ CARDNAME gains indestructible until end of turn.
|
SVar:DBPump:DB$ Pump | Defined$ Self | KW$ Indestructible | SpellDescription$ CARDNAME gains indestructible until end of turn.
|
||||||
DeckHas:Ability$Token & Ability$Sacrifice
|
DeckHas:Ability$Token & Ability$Sacrifice
|
||||||
Oracle:This spell can't be countered.\nAt the beginning of each upkeep, create a 3/3 blue Serpent creature token named Koma's Coil.\nSacrifice another Serpent: Choose one —\n• Tap target permanent. Its activated abilities can't be activated this turn.\n• Koma, Cosmos Serpent gains indestructible until end of turn.
|
Oracle:This spell can't be countered.\nAt the beginning of each upkeep, create a 3/3 blue Serpent creature token named Koma's Coil.\nSacrifice another Serpent: Choose one —\n• Tap target permanent. Its activated abilities can't be activated this turn.\n• Koma, Cosmos Serpent gains indestructible until end of turn.
|
||||||
|
|||||||
@@ -2,9 +2,9 @@ Name:Living Death
|
|||||||
ManaCost:3 B B
|
ManaCost:3 B B
|
||||||
Types:Sorcery
|
Types:Sorcery
|
||||||
A:SP$ ChangeZoneAll | Cost$ 3 B B | ChangeType$ Creature | Origin$ Graveyard | Destination$ Exile | RememberChanged$ True | ForgetOtherRemembered$ True | SubAbility$ DBSacrifice | AILogic$ LivingDeath | SpellDescription$ Each player exiles all creature cards from their graveyard, then sacrifices all creatures they control, then puts all cards they exiled this way onto the battlefield.
|
A:SP$ ChangeZoneAll | Cost$ 3 B B | ChangeType$ Creature | Origin$ Graveyard | Destination$ Exile | RememberChanged$ True | ForgetOtherRemembered$ True | SubAbility$ DBSacrifice | AILogic$ LivingDeath | SpellDescription$ Each player exiles all creature cards from their graveyard, then sacrifices all creatures they control, then puts all cards they exiled this way onto the battlefield.
|
||||||
SVar:DBSacrifice:DB$SacrificeAll | ValidCards$ Creature | SubAbility$ DBReturn
|
SVar:DBSacrifice:DB$ SacrificeAll | ValidCards$ Creature | SubAbility$ DBReturn
|
||||||
SVar:DBReturn:DB$ChangeZone | Defined$ Remembered | Origin$ Exile | Destination$ Battlefield | SubAbility$ DBCleanup
|
SVar:DBReturn:DB$ ChangeZone | Defined$ Remembered | Origin$ Exile | Destination$ Battlefield | SubAbility$ DBCleanup
|
||||||
SVar:DBCleanup:DB$Cleanup | ClearRemembered$ True
|
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||||
AI:RemoveDeck:Random
|
AI:RemoveDeck:Random
|
||||||
SVar:IsReanimatorCard:TRUE
|
SVar:IsReanimatorCard:TRUE
|
||||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/living_death.jpg
|
SVar:Picture:http://www.wizards.com/global/images/magic/general/living_death.jpg
|
||||||
|
|||||||
@@ -3,6 +3,6 @@ ManaCost:1 U
|
|||||||
Types:Sorcery Lesson
|
Types:Sorcery Lesson
|
||||||
A:SP$ Animate | Cost$ 1 U | ValidTgts$ Permanent.nonLand | TgtPrompt$ Select target nonland permanent | RemoveAllAbilities$ True | SubAbility$ DBChoose | SpellDescription$ Until end of turn, target nonland permanent loses all abilities and becomes your choice of a blue Frog creature with base power and toughness 1/1 or a blue Octopus creature with base power and toughness 4/4.
|
A:SP$ Animate | Cost$ 1 U | ValidTgts$ Permanent.nonLand | TgtPrompt$ Select target nonland permanent | RemoveAllAbilities$ True | SubAbility$ DBChoose | SpellDescription$ Until end of turn, target nonland permanent loses all abilities and becomes your choice of a blue Frog creature with base power and toughness 1/1 or a blue Octopus creature with base power and toughness 4/4.
|
||||||
SVar:DBChoose:DB$ GenericChoice | Defined$ You | Choices$ DBFrog,DBOctopus | StackDescription$ None
|
SVar:DBChoose:DB$ GenericChoice | Defined$ You | Choices$ DBFrog,DBOctopus | StackDescription$ None
|
||||||
SVar:DBFrog:DB$ Animate | Power$ 1 | Toughness$ 1 | Colors$ Blue | OverwriteColors$ True | Types$ Creature,Frog | RemoveCreatureTypes$ True | IsCurse$ True | Defined$ Targeted | SpellDescription$ Until end of turn, target nonland permanent loses all abilities and becomes a blue Frog with base power and toughness 1/1.
|
SVar:DBFrog:DB$ Animate | Power$ 1 | Toughness$ 1 | Colors$ Blue | OverwriteColors$ True | Types$ Creature,Frog | RemoveCardTypes$ True | RemoveSubTypes$ True | IsCurse$ True | Defined$ Targeted | SpellDescription$ Until end of turn, target nonland permanent loses all abilities and becomes a blue Frog with base power and toughness 1/1.
|
||||||
SVar:DBOctopus:DB$ Animate | Power$ 4 | Toughness$ 4 | Colors$ Blue | OverwriteColors$ True | Types$ Creature,Octopus | RemoveCreatureTypes$ True | IsCurse$ True | Defined$ Targeted | SpellDescription$ Until end of turn, target nonland permanent loses all abilities and becomes a blue Octopus with base power and toughness 4/4.
|
SVar:DBOctopus:DB$ Animate | Power$ 4 | Toughness$ 4 | Colors$ Blue | OverwriteColors$ True | Types$ Creature,Octopus | RemoveCardTypes$ True | RemoveSubTypes$ True | IsCurse$ True | Defined$ Targeted | SpellDescription$ Until end of turn, target nonland permanent loses all abilities and becomes a blue Octopus with base power and toughness 4/4.
|
||||||
Oracle:Until end of turn, target nonland permanent loses all abilities and becomes your choice of a blue Frog creature with base power and toughness 1/1 or a blue Octopus creature with base power and toughness 4/4.
|
Oracle:Until end of turn, target nonland permanent loses all abilities and becomes your choice of a blue Frog creature with base power and toughness 1/1 or a blue Octopus creature with base power and toughness 4/4.
|
||||||
|
|||||||
@@ -3,6 +3,6 @@ ManaCost:3 W W
|
|||||||
Types:Creature Angel
|
Types:Creature Angel
|
||||||
PT:3/3
|
PT:3/3
|
||||||
K:Flying
|
K:Flying
|
||||||
T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ DBVenture | TriggerDescription$ Whenever CARDNAME enters the battlefield or attacks, venture into the dungeon. (Enter the first room or advance to the next room.)
|
T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ DBVenture | TriggerDescription$ Whenever CARDNAME attacks, venture into the dungeon. (Enter the first room or advance to the next room.)
|
||||||
SVar:DBVenture:DB$ Venture | Defined$ You
|
SVar:DBVenture:DB$ Venture | Defined$ You
|
||||||
Oracle:Flying\nWhenever Planar Ally attacks, venture into the dungeon. (Enter the first room or advance to the next room.)
|
Oracle:Flying\nWhenever Planar Ally attacks, venture into the dungeon. (Enter the first room or advance to the next room.)
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
Name:Prey Upon
|
Name:Prey Upon
|
||||||
ManaCost:G
|
ManaCost:G
|
||||||
Types:Sorcery
|
Types:Sorcery
|
||||||
A:SP$ Pump | Cost$ G | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Choose target creature you control | SubAbility$ DBFight | SpellDescription$ Target creature you control fights target creature you don't control. (Each deals damage equal to its power to the other.)
|
A:SP$ Pump | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Choose target creature you control | SubAbility$ DBFight | StackDescription$ Target creature you control [{c:ThisTargetedCard}] | SpellDescription$ Target creature you control fights target creature you don't control. (Each deals damage equal to its power to the other.)
|
||||||
SVar:DBFight:DB$ Fight | Defined$ ParentTarget | ValidTgts$ Creature.YouDontCtrl | TgtPrompt$ Choose target creature you don't control
|
SVar:DBFight:DB$ Fight | Defined$ ParentTarget | ValidTgts$ Creature.YouDontCtrl | TgtPrompt$ Choose target creature you don't control | StackDescription$ fights target creature you don't control [{c:ThisTargetedCard}]. (Each deals damage equal to its power to the other.)
|
||||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/prey_upon.jpg
|
|
||||||
Oracle:Target creature you control fights target creature you don't control. (Each deals damage equal to its power to the other.)
|
Oracle:Target creature you control fights target creature you don't control. (Each deals damage equal to its power to the other.)
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
Name:Primitive Etchings
|
Name:Primitive Etchings
|
||||||
ManaCost:2 G G
|
ManaCost:2 G G
|
||||||
Types:Enchantment
|
Types:Enchantment
|
||||||
T:Mode$ Drawn | ValidCard$ Card.YouOwn | Number$ 1 | Static$ True | Execute$ DBReveal | TriggerZones$ Battlefield | TriggerDescription$ Reveal the first card you draw each turn. Whenever you reveal a creature card this way, draw a card.
|
T:Mode$ Drawn | ValidCard$ Card.YouOwn | Number$ 1 | Static$ True | ForReveal$ True | Execute$ DBReveal | TriggerZones$ Battlefield | TriggerDescription$ Reveal the first card you draw each turn. Whenever you reveal a creature card this way, draw a card.
|
||||||
SVar:DBReveal:DB$ Reveal | Defined$ You | RevealDefined$ TriggeredCard | RememberRevealed$ True | SubAbility$ DBTrigger
|
SVar:DBReveal:DB$ Reveal | Defined$ You | RevealDefined$ TriggeredCard | RememberRevealed$ True | SubAbility$ DBTrigger
|
||||||
SVar:DBTrigger:DB$ ImmediateTrigger | ConditionDefined$ Remembered | ConditionPresent$ Card.Creature+YouCtrl | SubAbility$ DBCleanup | Execute$ TrigDraw | TriggerDescription$ Whenever you reveal a creature card this way, draw a card.
|
SVar:DBTrigger:DB$ ImmediateTrigger | ConditionDefined$ Remembered | ConditionPresent$ Card.Creature+YouCtrl | SubAbility$ DBCleanup | Execute$ TrigDraw | TriggerDescription$ Whenever you reveal a creature card this way, draw a card.
|
||||||
SVar:TrigDraw:DB$Draw | NumCards$ 1
|
SVar:TrigDraw:DB$Draw | NumCards$ 1
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
Name:Ral's Dispersal
|
Name:Ral's Dispersal
|
||||||
ManaCost:3 U U
|
ManaCost:3 U U
|
||||||
Types:Instant
|
Types:Instant
|
||||||
A:SP$ ChangeZone | Cost$ 3 U U | ValidTgts$ Creature | TgtPrompt$ Select target creature | Origin$ Battlefield | Destination$ Hand | SubAbility$ DBSearch | SpellDescription$ Return target creature to its owner's hand. You may search you library and/or graveyard for a card named, Ral, Caller of Storms and put it in your hand. If you search your library this way, shuffle it.
|
A:SP$ ChangeZone | Cost$ 3 U U | ValidTgts$ Creature | TgtPrompt$ Select target creature | Origin$ Battlefield | Destination$ Hand | SubAbility$ DBSearch | SpellDescription$ Return target creature to its owner's hand. You may search your library and/or graveyard for a card named, Ral, Caller of Storms and put it in your hand. If you search your library this way, shuffle it.
|
||||||
SVar:DBSearch:DB$ ChangeZone | Origin$ Library | OriginChoice$ True | OriginAlternative$ Graveyard | AlternativeMessage$ Would you like to search your library with this ability? If you do, your library will be shuffled. | Destination$ Hand | ChangeType$ Card.namedRal; Caller of Storms | ChangeNum$ 1 | Optional$ True
|
SVar:DBSearch:DB$ ChangeZone | Origin$ Library | OriginChoice$ True | OriginAlternative$ Graveyard | AlternativeMessage$ Would you like to search your library with this ability? If you do, your library will be shuffled. | Destination$ Hand | ChangeType$ Card.namedRal; Caller of Storms | ChangeNum$ 1 | Optional$ True
|
||||||
DeckNeeds:Name$Ral, Caller of Storms
|
DeckNeeds:Name$Ral, Caller of Storms
|
||||||
Oracle:Return target creature to its owner's hand. You may search your library and/or graveyard for a card named Ral, Caller of Storms, reveal it, and put it into your hand. If you search your library this way, shuffle.
|
Oracle:Return target creature to its owner's hand. You may search your library and/or graveyard for a card named Ral, Caller of Storms, reveal it, and put it into your hand. If you search your library this way, shuffle.
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
Name:Rowen
|
Name:Rowen
|
||||||
ManaCost:2 G G
|
ManaCost:2 G G
|
||||||
Types:Enchantment
|
Types:Enchantment
|
||||||
T:Mode$ Drawn | ValidCard$ Card.YouOwn | Number$ 1 | Static$ True | Execute$ DBReveal | TriggerZones$ Battlefield | TriggerDescription$ Reveal the first card you draw each turn. Whenever you reveal a basic land card this way, draw a card.
|
T:Mode$ Drawn | ValidCard$ Card.YouOwn | Number$ 1 | Static$ True | Execute$ DBReveal | ForReveal$ True | TriggerZones$ Battlefield | TriggerDescription$ Reveal the first card you draw each turn. Whenever you reveal a basic land card this way, draw a card.
|
||||||
SVar:DBReveal:DB$ Reveal | Defined$ You | RevealDefined$ TriggeredCard | RememberRevealed$ True | SubAbility$ DBTrigger
|
SVar:DBReveal:DB$ Reveal | Defined$ You | RevealDefined$ TriggeredCard | RememberRevealed$ True | SubAbility$ DBTrigger
|
||||||
SVar:DBTrigger:DB$ ImmediateTrigger | ConditionDefined$ Remembered | ConditionPresent$ Land.Basic+YouCtrl | SubAbility$ DBCleanup | Execute$ TrigDraw | TriggerDescription$ Whenever you reveal a basic land card this way, draw a card.
|
SVar:DBTrigger:DB$ ImmediateTrigger | ConditionDefined$ Remembered | ConditionPresent$ Land.Basic+YouCtrl | SubAbility$ DBCleanup | Execute$ TrigDraw | TriggerDescription$ Whenever you reveal a basic land card this way, draw a card.
|
||||||
SVar:TrigDraw:DB$Draw | NumCards$ 1
|
SVar:TrigDraw:DB$Draw | NumCards$ 1
|
||||||
|
|||||||
@@ -4,6 +4,6 @@ Types:Creature Dwarf Warrior
|
|||||||
PT:2/3
|
PT:2/3
|
||||||
S:Mode$ Continuous | Affected$ Card.Rune+YouCtrl | AddKeyword$ Alternative Cost:1 | AffectedZone$ Hand,Graveyard,Exile,Library,Command | Description$ You may pay {1} rather than pay the mana cost for Rune spells you cast.
|
S:Mode$ Continuous | Affected$ Card.Rune+YouCtrl | AddKeyword$ Alternative Cost:1 | AffectedZone$ Hand,Graveyard,Exile,Library,Command | Description$ You may pay {1} rather than pay the mana cost for Rune spells you cast.
|
||||||
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature.Self | Execute$ TrigChange | OptionalDecider$ You | TriggerDescription$ When CARDNAME enters the battlefield, you may search your library and/or graveyard for a Rune card, reveal it, and put it into your hand. If you search your library this way, shuffle.
|
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature.Self | Execute$ TrigChange | OptionalDecider$ You | TriggerDescription$ When CARDNAME enters the battlefield, you may search your library and/or graveyard for a Rune card, reveal it, and put it into your hand. If you search your library this way, shuffle.
|
||||||
SVar:TrigChange:DB$ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Rune | ChangeNum$ 1 | ShuffleNonMandatory$ True
|
SVar:TrigChange:DB$ ChangeZone | Origin$ Library | OriginChoice$ True | OriginAlternative$ Graveyard | AlternativeMessage$ Would you like to search your library with this ability? If you do, your library will be shuffled. | Destination$ Hand | ChangeType$ Rune | ChangeNum$ 1
|
||||||
DeckNeeds:Type$Rune
|
DeckNeeds:Type$Rune
|
||||||
Oracle:When Runeforge Champion enters the battlefield, you may search your library and/or graveyard for a Rune card, reveal it, and put it into your hand. If you search your library this way, shuffle.\nYou may pay {1} rather than pay the mana cost for Rune spells you cast.
|
Oracle:When Runeforge Champion enters the battlefield, you may search your library and/or graveyard for a Rune card, reveal it, and put it into your hand. If you search your library this way, shuffle.\nYou may pay {1} rather than pay the mana cost for Rune spells you cast.
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
Name:Soul Snare
|
Name:Soul Snare
|
||||||
ManaCost:W
|
ManaCost:W
|
||||||
Types:Enchantment
|
Types:Enchantment
|
||||||
A:AB$ ChangeZone | Cost$ W Sac<1/CARDNAME> | ValidTgts$ Creature.attacking+OppCtrl | TgtPrompt$ Select target creature that's attacking you or a planeswalker you control. | Origin$ Battlefield | Destination$ Exile | SpellDescription$ Exile target creature that's attacking you or a planeswalker you control.
|
A:AB$ ChangeZone | Cost$ W Sac<1/CARDNAME> | ValidTgts$ Creature.attackingYouOrYourPW | TgtPrompt$ Select target creature that's attacking you or a planeswalker you control. | Origin$ Battlefield | Destination$ Exile | SpellDescription$ Exile target creature that's attacking you or a planeswalker you control.
|
||||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/soul_snare.jpg
|
SVar:Picture:http://www.wizards.com/global/images/magic/general/soul_snare.jpg
|
||||||
Oracle:{W}, Sacrifice Soul Snare: Exile target creature that's attacking you or a planeswalker you control.
|
Oracle:{W}, Sacrifice Soul Snare: Exile target creature that's attacking you or a planeswalker you control.
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ Types:Sorcery
|
|||||||
A:SP$ RepeatEach | Cost$ 1 W | RepeatPlayers$ Player.Opponent | NextTurnForEachPlayer$ True | RepeatSubAbility$ DBEffect | SpellDescription$ Each opponent can't cast instant or sorcery spells during that player's next turn.
|
A:SP$ RepeatEach | Cost$ 1 W | RepeatPlayers$ Player.Opponent | NextTurnForEachPlayer$ True | RepeatSubAbility$ DBEffect | SpellDescription$ Each opponent can't cast instant or sorcery spells during that player's next turn.
|
||||||
SVar:DBEffect:DB$ Effect | Name$ Sphinx's Decree Effect | StaticAbilities$ STCantBeCast | EffectOwner$ Remembered
|
SVar:DBEffect:DB$ Effect | Name$ Sphinx's Decree Effect | StaticAbilities$ STCantBeCast | EffectOwner$ Remembered
|
||||||
SVar:STCantBeCast:Mode$ CantBeCast | ValidCard$ Instant,Sorcery | Caster$ You | EffectZone$ Command | Description$ You can't cast instant or sorcery spells.
|
SVar:STCantBeCast:Mode$ CantBeCast | ValidCard$ Instant,Sorcery | Caster$ You | EffectZone$ Command | Description$ You can't cast instant or sorcery spells.
|
||||||
SVar:AIPlayForSub:True
|
|
||||||
AI:RemoveDeck:All
|
AI:RemoveDeck:All
|
||||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/sphinxs_decree.jpg
|
SVar:Picture:http://www.wizards.com/global/images/magic/general/sphinxs_decree.jpg
|
||||||
Oracle:Each opponent can't cast instant or sorcery spells during that player's next turn.
|
Oracle:Each opponent can't cast instant or sorcery spells during that player's next turn.
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ Types:Sorcery
|
|||||||
A:SP$ RepeatEach | Cost$ 2 B B | RepeatPlayers$ Player | RepeatSubAbility$ DBLoseLife | AILogic$ AllPlayerLoseLife | SpellDescription$ Each player loses 1 life for each creature they control.
|
A:SP$ RepeatEach | Cost$ 2 B B | RepeatPlayers$ Player | RepeatSubAbility$ DBLoseLife | AILogic$ AllPlayerLoseLife | SpellDescription$ Each player loses 1 life for each creature they control.
|
||||||
SVar:DBLoseLife:DB$ LoseLife | Defined$ Player.IsRemembered | LifeAmount$ X
|
SVar:DBLoseLife:DB$ LoseLife | Defined$ Player.IsRemembered | LifeAmount$ X
|
||||||
SVar:X:Count$Valid Creature.RememberedPlayerCtrl
|
SVar:X:Count$Valid Creature.RememberedPlayerCtrl
|
||||||
SVar:AIPlayForSub:True
|
|
||||||
AI:RemoveDeck:Random
|
AI:RemoveDeck:Random
|
||||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/stronghold_discipline.jpg
|
SVar:Picture:http://www.wizards.com/global/images/magic/general/stronghold_discipline.jpg
|
||||||
Oracle:Each player loses 1 life for each creature they control.
|
Oracle:Each player loses 1 life for each creature they control.
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ Name:Toralf's Hammer
|
|||||||
ManaCost:1 R
|
ManaCost:1 R
|
||||||
Types:Legendary Artifact Equipment
|
Types:Legendary Artifact Equipment
|
||||||
S:Mode$ Continuous | Affected$ Creature.EquippedBy | AddAbility$ HammerDamage | Description$ Equipped creature has "{1}{R}, {T}, Unattach CARDNAME: It deals 3 damage to any target. Return CARDNAME to it owner’s hand."
|
S:Mode$ Continuous | Affected$ Creature.EquippedBy | AddAbility$ HammerDamage | Description$ Equipped creature has "{1}{R}, {T}, Unattach CARDNAME: It deals 3 damage to any target. Return CARDNAME to it owner’s hand."
|
||||||
SVar:HammerDamage:AB$ DealDamage | Cost$ 1 R T Unattach<OriginalHost/Toralf's Hammer> | NumDmg$ 3 | DamageSource$ OriginalHost | ValidTgts$ Creature,Player,Planeswalker | TgtPrompt$ Select any target | SubAbility$ HammerCatch | SpellDescription$ ORIGINALHOST deals 1 damage to any target. Return ORIGINALHOST to its owner's hand.
|
SVar:HammerDamage:AB$ DealDamage | Cost$ 1 R T Unattach<OriginalHost/Toralf's Hammer> | NumDmg$ 3 | DamageSource$ OriginalHost | ValidTgts$ Creature,Player,Planeswalker | TgtPrompt$ Select any target | SubAbility$ HammerCatch | SpellDescription$ ORIGINALHOST deals 3 damage to any target. Return ORIGINALHOST to its owner's hand.
|
||||||
SVar:HammerCatch:DB$ ChangeZone | Origin$ Battlefield | Destination$ Hand | Defined$ OriginalHost
|
SVar:HammerCatch:DB$ ChangeZone | Origin$ Battlefield | Destination$ Hand | Defined$ OriginalHost
|
||||||
S:Mode$ Continuous | Affected$ Card.EquippedBy+Legendary | AddPower$ 3 | Description$ Equipped creature gets +3/+0 as long as it's legendary.
|
S:Mode$ Continuous | Affected$ Card.EquippedBy+Legendary | AddPower$ 3 | Description$ Equipped creature gets +3/+0 as long as it's legendary.
|
||||||
K:Equip:1 R
|
K:Equip:1 R
|
||||||
|
|||||||
@@ -2,6 +2,6 @@ Name:Tragic Lesson
|
|||||||
ManaCost:2 U
|
ManaCost:2 U
|
||||||
Types:Instant
|
Types:Instant
|
||||||
A:SP$ Draw | Cost$ 2 U | NumCards$ 2 | SpellDescription$ Draw two cards. Then discard a card unless you return a land you control to its owner's hand. | SubAbility$ DBDiscard
|
A:SP$ Draw | Cost$ 2 U | NumCards$ 2 | SpellDescription$ Draw two cards. Then discard a card unless you return a land you control to its owner's hand. | SubAbility$ DBDiscard
|
||||||
SVar:DBDiscard:DB$Discard | Defined$ You | NumCards$ 1 | Mode$ TgtChoose | UnlessCost$ Return<1/Land> | UnlessPayer$ You
|
SVar:DBDiscard:DB$ Discard | Defined$ You | NumCards$ 1 | Mode$ TgtChoose | UnlessCost$ Return<1/Land> | UnlessPayer$ You
|
||||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/tragic_lesson.jpg
|
SVar:Picture:http://www.wizards.com/global/images/magic/general/tragic_lesson.jpg
|
||||||
Oracle:Draw two cards. Then discard a card unless you return a land you control to its owner's hand.
|
Oracle:Draw two cards. Then discard a card unless you return a land you control to its owner's hand.
|
||||||
@@ -5,7 +5,6 @@ A:SP$ RepeatEach | Cost$ 6 R G | RepeatPlayers$ Player.Opponent | RepeatSubAbili
|
|||||||
SVar:DmgOpp:DB$ DealDamage | Defined$ Remembered | NumDmg$ X
|
SVar:DmgOpp:DB$ DealDamage | Defined$ Remembered | NumDmg$ X
|
||||||
SVar:X:Count$Valid Land.RememberedPlayerCtrl
|
SVar:X:Count$Valid Land.RememberedPlayerCtrl
|
||||||
K:TypeCycling:Basic:2
|
K:TypeCycling:Basic:2
|
||||||
SVar:AIPlayForSub:True
|
|
||||||
AI:RemoveDeck:All
|
AI:RemoveDeck:All
|
||||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/treacherous_terrain.jpg
|
SVar:Picture:http://www.wizards.com/global/images/magic/general/treacherous_terrain.jpg
|
||||||
Oracle:Treacherous Terrain deals damage to each opponent equal to the number of lands that player controls.\nBasic landcycling {2} ({2}, Discard this card: Search your library for a basic land card, reveal it, put it into your hand, then shuffle.)
|
Oracle:Treacherous Terrain deals damage to each opponent equal to the number of lands that player controls.\nBasic landcycling {2} ({2}, Discard this card: Search your library for a basic land card, reveal it, put it into your hand, then shuffle.)
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ Types:Sorcery
|
|||||||
A:SP$ RepeatEach | Cost$ 2 G | RepeatPlayers$ Player.Opponent | RepeatSubAbility$ TyphoonDmg | DamageMap$ True | SpellDescription$ Typhoon deals damage to each opponent equal to the number of Islands that player controls.
|
A:SP$ RepeatEach | Cost$ 2 G | RepeatPlayers$ Player.Opponent | RepeatSubAbility$ TyphoonDmg | DamageMap$ True | SpellDescription$ Typhoon deals damage to each opponent equal to the number of Islands that player controls.
|
||||||
SVar:TyphoonDmg:DB$ DealDamage | Defined$ Remembered | NumDmg$ X
|
SVar:TyphoonDmg:DB$ DealDamage | Defined$ Remembered | NumDmg$ X
|
||||||
SVar:X:Count$Valid Island.RememberedPlayerCtrl
|
SVar:X:Count$Valid Island.RememberedPlayerCtrl
|
||||||
SVar:AIPlayForSub:True
|
|
||||||
AI:RemoveDeck:Random
|
AI:RemoveDeck:Random
|
||||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/typhoon.jpg
|
SVar:Picture:http://www.wizards.com/global/images/magic/general/typhoon.jpg
|
||||||
Oracle:Typhoon deals damage to each opponent equal to the number of Islands that player controls.
|
Oracle:Typhoon deals damage to each opponent equal to the number of Islands that player controls.
|
||||||
|
|||||||
@@ -0,0 +1,10 @@
|
|||||||
|
Name:Champion of the Perished
|
||||||
|
ManaCost:B
|
||||||
|
Types:Creature Zombie
|
||||||
|
PT:1/1
|
||||||
|
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Zombie.Other+YouCtrl | TriggerZones$ Battlefield | Execute$ TrigPutCounter | TriggerDescription$ Whenever another Zombie enters the battlefield under your control, put a +1/+1 counter on CARDNAME.
|
||||||
|
SVar:TrigPutCounter:DB$ PutCounter | CounterType$ P1P1 | CounterNum$ 1
|
||||||
|
SVar:BuffedBy:Zombie
|
||||||
|
DeckHints:Type$Zombie
|
||||||
|
DeckHas:Ability$Counters
|
||||||
|
Oracle:Whenever another Zombie enters the battlefield under your control, put a +1/+1 counter on Champion of the Perished.
|
||||||
7
forge-gui/res/cardsfolder/upcoming/consider.txt
Normal file
7
forge-gui/res/cardsfolder/upcoming/consider.txt
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
Name:Consider
|
||||||
|
ManaCost:U
|
||||||
|
Types:Instant
|
||||||
|
A:SP$ Dig | Cost$ U | DigNum$ 1 | ChangeNum$ 1 | DestinationZone$ Graveyard | Optional$ True | LibraryPosition2$ 0 | SubAbility$ DBDraw | SpellDescription$ Look at the top card of your library. You may put that card into your graveyard. Draw a card.
|
||||||
|
SVar:DBDraw:DB$ Draw | Defined$ You | NumCards$ 1
|
||||||
|
DeckHas:Ability$Graveyard
|
||||||
|
Oracle:Look at the top card of your library. You may put that card into your graveyard. Draw a card.
|
||||||
6
forge-gui/res/cardsfolder/upcoming/infernal_grasp.txt
Normal file
6
forge-gui/res/cardsfolder/upcoming/infernal_grasp.txt
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
Name:Infernal Grasp
|
||||||
|
ManaCost:1 B
|
||||||
|
Types:Instant
|
||||||
|
A:SP$ Destroy | Cost$ 1 B | ValidTgts$ Creature | TgtPrompt$ Select target creature | SubAbility$ DBLoseLife | SpellDescription$ Destroy target creature. You lose 2 life.
|
||||||
|
SVar:DBLoseLife:DB$ LoseLife | Defined$ You | LifeAmount$ 2
|
||||||
|
Oracle:Destroy target creature. You lose 2 life.
|
||||||
7
forge-gui/res/cardsfolder/upcoming/join_the_dance.txt
Normal file
7
forge-gui/res/cardsfolder/upcoming/join_the_dance.txt
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
Name:Join the Dance
|
||||||
|
ManaCost:G W
|
||||||
|
Types:Sorcery
|
||||||
|
K:Flashback:3 G W
|
||||||
|
A:SP$ Token | Cost$ G W | TokenAmount$ 2 | TokenScript$ w_1_1_human | TokenOwner$ You | SpellDescription$ Create two 1/1 white Human creature tokens.
|
||||||
|
DeckHas:Ability$Token
|
||||||
|
Oracle:Create two 1/1 white Human creature tokens.\nFlashback {3}{G}{W} (You may cast this card from your graveyard for its flashback cost. Then exile it.)
|
||||||
7
forge-gui/res/cardsfolder/upcoming/play_with_fire.txt
Normal file
7
forge-gui/res/cardsfolder/upcoming/play_with_fire.txt
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
Name:Play with Fire
|
||||||
|
ManaCost:R
|
||||||
|
Types:Instant
|
||||||
|
A:SP$ DealDamage | Cost$ R | ValidTgts$ Creature,Player,Planeswalker | TgtPrompt$ Select any target | NumDmg$ 2 | RememberDamaged$ True | SubAbility$ DBScry | StackDescription$ SpellDescription | SpellDescription$ CARDNAME deals 2 damage to any target. If a player is dealt damage this way, scry 1.
|
||||||
|
SVar:DBScry:DB$ Scry | Defined$ You | ScryNum$ 1 | ConditionDefined$ Remembered | ConditionPresent$ Player | ConditionCompare$ GE1 | SubAbility$ DBCleanup | StackDescription$ None
|
||||||
|
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||||
|
Oracle:Play with Fire deals 2 damage to any target. If a player is dealt damage this way, scry 1.
|
||||||
10
forge-gui/res/cardsfolder/upcoming/skyshroud_ambush.txt
Normal file
10
forge-gui/res/cardsfolder/upcoming/skyshroud_ambush.txt
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
Name:Skyshroud Ambush
|
||||||
|
ManaCost:1 G
|
||||||
|
Types:Instant
|
||||||
|
A:SP$ Pump | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Choose target creature you control | ImprintCards$ ThisTargetedCard | SubAbility$ DBFight | StackDescription$ Target creature you control [{c:ThisTargetedCard}] | SpellDescription$ Target creature you control fights target creature you don't control. When the creature you control wins the fight, draw a card.
|
||||||
|
SVar:DBFight:DB$ Fight | Defined$ ParentTarget | ValidTgts$ Creature.YouDontCtrl | TgtPrompt$ Choose target creature you don't control | RememberObjects$ ThisTargetedCard | SubAbility$ DBEffect | StackDescription$ fights target creature you don't control [{c:ThisTargetedCard}]. When the creature you control wins the fight, draw a card.
|
||||||
|
SVar:DBEffect:DB$ Effect | Triggers$ TrigWin | RememberObjects$ Remembered | ImprintCards$ Imprinted | Duration$ UntilStateBasedActionChecked | SubAbility$ DBCleanup
|
||||||
|
SVar:TrigWin:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Creature.IsRemembered | IsPresent$ Creature.IsImprinted | NoResolvingCheck$ True | Execute$ TrigDraw | TriggerDescription$ When the creature you control wins the fight, draw a card.
|
||||||
|
SVar:TrigDraw:DB$ Draw | NumCards$ 1
|
||||||
|
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | ClearImprinted$ True
|
||||||
|
Oracle:Target creature you control fights target creature you don't control. When the creature you control wins the fight, draw a card.
|
||||||
9
forge-gui/res/cardsfolder/upcoming/triskaidekaphile.txt
Normal file
9
forge-gui/res/cardsfolder/upcoming/triskaidekaphile.txt
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
Name:Triskaidekaphile
|
||||||
|
ManaCost:1 U
|
||||||
|
Types:Creature Human Wizard
|
||||||
|
PT:1/3
|
||||||
|
S:Mode$ Continuous | Affected$ You | SetMaxHandSize$ Unlimited | Description$ You have no maximum hand size.
|
||||||
|
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | IsPresent$ Card.YouCtrl | PresentZone$ Hand | PresentCompare$ EQ13 | TriggerZones$ Battlefield | Execute$ TrigWin | TriggerDescription$ At the beginning of your upkeep, if you have exactly 13 cards in your hand, you win the game.
|
||||||
|
SVar:TrigWin:DB$ WinsGame | Defined$ You
|
||||||
|
A:AB$ Draw | Cost$ 3 U | Defined$ You | NumCards$ 1
|
||||||
|
Oracle:You have no maximum hand size.\nAt the beginning of your upkeep, if you have exactly 13 cards in your hand, you win the game.\n{3}{U}: Draw a card.
|
||||||
13
forge-gui/res/cardsfolder/upcoming/wrenn_and_seven.txt
Normal file
13
forge-gui/res/cardsfolder/upcoming/wrenn_and_seven.txt
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
Name:Wrenn and Seven
|
||||||
|
ManaCost:3 G G
|
||||||
|
Types:Legendary Planeswalker Wrenn
|
||||||
|
Loyalty:5
|
||||||
|
A:AB$ Dig | Cost$ AddCounter<1/LOYALTY> | Planeswalker$ True | DigNum$ 4 | Reveal$ True | ChangeNum$ All | ChangeValid$ Land | DestinationZone2$ Graveyard | SpellDescription$ Reveal the top four cards of your library. Put all land cards revealed this way into your hand and the rest into your graveyard.
|
||||||
|
A:AB$ ChangeZone | Cost$ AddCounter<0/LOYALTY> | Planeswalker$ True | Origin$ Hand | Destination$ Battlefield | ChangeType$ Land | ChangeNum$ X | Tapped$ True | StackDescription$ {p:You} puts any number of land cards from their hand onto the battlefield tapped. | SpellDescription$ Put any number of land cards from your hand onto the battlefield tapped.
|
||||||
|
A:AB$ Token | Cost$ SubCounter<3/LOYALTY> | Planeswalker$ True | TokenOwner$ You | TokenAmount$ 1 | TokenScript$ g_x_x_treefolk_reach_total_lands | SpellDescription$ Create a green Treefolk creature token with reach and "This creature's power and toughness are each equal to the number of lands you control."
|
||||||
|
A:AB$ ChangeZoneAll | Cost$ SubCounter<8/LOYALTY> | Planeswalker$ True | Ultimate$ True | Origin$ Graveyard | Destination$ Hand | ChangeType$ Card.YouOwn+Permanent | SubAbility$ DBEmblem | SpellDescription$ Return all permanent cards from your graveyard to your hand. You get an emblem with "You have no maximum hand size."
|
||||||
|
SVar:DBEmblem:DB$ Effect | Name$ Emblem - Wrenn and Seven | Image$ emblem_wrenn_and_seven | StaticAbilities$ UnlimitedHand | Stackable$ False | Duration$ Permanent | AILogic$ Always
|
||||||
|
SVar:UnlimitedHand:Mode$ Continuous | EffectZone$ Command | Affected$ You | SetMaxHandSize$ Unlimited | Description$ You have no maximum hand size.
|
||||||
|
SVar:X:Count$ValidHand Land.YouCtrl
|
||||||
|
DeckHas:Ability$Token & Ability$Graveyard
|
||||||
|
Oracle:[+1]: Reveal the top four cards of your library. Put all land cards revealed this way into your hand and the rest into your graveyard.\n[0]: Put any number of land cards from your hand onto the battlefield.\n[-3]: Create a green Treefolk creature token with reach and "This creature's power and toughness are each equal to the number of lands you control."\n[-8]: Return all permanent cards from your graveyard to your hand. You get an emblem with "You have no maximum hand size."
|
||||||
@@ -3,5 +3,5 @@ ManaCost:2 B
|
|||||||
Types:Legendary Creature Demon Rogue
|
Types:Legendary Creature Demon Rogue
|
||||||
K:Deathtouch
|
K:Deathtouch
|
||||||
PT:2/3
|
PT:2/3
|
||||||
A:AB$ ChangeZone | Cost$ 1 B | ValidTgts$ Player | Origin$ Library | Destination$ Library | LibraryPosition$ 0 | Mandatory$ True | ChangeType$ Card | ChangeNum$ 1 | Boast$ True | SpellDescription$ Target player searches their library for a card, then shuffles their library and puts that card on top of it.
|
A:AB$ ChangeZone | Cost$ 1 B | ValidTgts$ Player | Origin$ Library | Destination$ Library | LibraryPosition$ 0 | Mandatory$ True | ChangeType$ Card | ChangeNum$ 1 | Boast$ True | Chooser$ Targeted | SpellDescription$ Target player searches their library for a card, then shuffles their library and puts that card on top of it.
|
||||||
Oracle:Deathtouch\nBoast — {1}{B}: Target player searches their library for a card, then shuffles and puts that card on top. (Activate only if this creature attacked this turn and only once each turn.)
|
Oracle:Deathtouch\nBoast — {1}{B}: Target player searches their library for a card, then shuffles and puts that card on top. (Activate only if this creature attacked this turn and only once each turn.)
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ K:Deathtouch
|
|||||||
S:Mode$ Continuous | EffectZone$ All | CharacteristicDefining$ True | SetToughness$ X | Description$ CARDNAME's toughness is equal to the number of Knights you control.
|
S:Mode$ Continuous | EffectZone$ All | CharacteristicDefining$ True | SetToughness$ X | Description$ CARDNAME's toughness is equal to the number of Knights you control.
|
||||||
SVar:X:Count$Valid Knight.YouCtrl
|
SVar:X:Count$Valid Knight.YouCtrl
|
||||||
SVar:BuffedBy:Knight
|
SVar:BuffedBy:Knight
|
||||||
|
SVar:NoZeroToughnessAI:True
|
||||||
T:Mode$ Attacks | ValidCard$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigPump | TriggerDescription$ Whenever CARDNAME attacks, another target Knight you control gains indestructible until end of turn. (Damage and effects that say "destroy" don't destroy it.)
|
T:Mode$ Attacks | ValidCard$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigPump | TriggerDescription$ Whenever CARDNAME attacks, another target Knight you control gains indestructible until end of turn. (Damage and effects that say "destroy" don't destroy it.)
|
||||||
SVar:TrigPump:DB$ Pump | ValidTgts$ Knight.YouCtrl+Other | TgtPrompt$ Select another target Knight you control | KW$ Indestructible
|
SVar:TrigPump:DB$ Pump | ValidTgts$ Knight.YouCtrl+Other | TgtPrompt$ Select another target Knight you control | KW$ Indestructible
|
||||||
DeckHints:Type$Knight
|
DeckHints:Type$Knight
|
||||||
|
|||||||
41
forge-gui/res/editions/Innistrad Midnight Hunt.txt
Normal file
41
forge-gui/res/editions/Innistrad Midnight Hunt.txt
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
[metadata]
|
||||||
|
Code=MID
|
||||||
|
Date=2021-09-24
|
||||||
|
Name=Innistrad: Midnight Hunt
|
||||||
|
Code2=MID
|
||||||
|
MciCode=mid
|
||||||
|
Type=Expansion
|
||||||
|
ScryfallCode=MID
|
||||||
|
Booster=10 Common, 3 Uncommon, 1 RareMythic, 1 BasicLand
|
||||||
|
Prerelease=6 Boosters, 1 RareMythic+
|
||||||
|
|
||||||
|
[cards]
|
||||||
|
44 C Consider @Zezhou Chen
|
||||||
|
81 R Triskaidekaphile @Slawomir Maniak
|
||||||
|
91 R Champion of the Perished @Kekai Kotaki
|
||||||
|
107 U Infernal Grasp @Naomi Baker
|
||||||
|
154 U Play with Fire @Svetlin Velinov
|
||||||
|
208 M Wrenn and Seven @Heonhwa Choe
|
||||||
|
229 U Join the Dance @Raoul Vitale
|
||||||
|
268 L Plains @Alayna Danner
|
||||||
|
269 L Plains @Dan Mumford
|
||||||
|
270 L Island @Evan Cagle
|
||||||
|
271 L Island @Dan Mumford
|
||||||
|
272 L Swamp @Alayna Danner
|
||||||
|
273 L Swamp @Dan Mumford
|
||||||
|
274 L Mountain @Daria Khlebnikova
|
||||||
|
275 L Mountain @Dan Mumford
|
||||||
|
276 L Forest @Alayna Danner
|
||||||
|
277 L Forest @Dan Mumford
|
||||||
|
278 M Wrenn and Seven @Bram Sels
|
||||||
|
380 L Plains @Andreas Rocha
|
||||||
|
381 L Island @Andreas Rocha
|
||||||
|
382 L Swamp @Kasia 'Kafis' Zielińska
|
||||||
|
383 L Mountain @Muhammad Firdaus
|
||||||
|
384 L Forest @Andreas Rocha
|
||||||
|
385 R Champion of the Perished @Daarken
|
||||||
|
386 R Triskaidekaphile @Mathias Kollros
|
||||||
|
388 C Consider @Zezhou Chen
|
||||||
|
389 U Infernal Grasp @Naomi Baker
|
||||||
|
390 U Play with Fire @Svetlin Velinov
|
||||||
|
391 U Join the Dance @Raoul Vitale
|
||||||
@@ -6,7 +6,9 @@ Type=Promo
|
|||||||
ScryfallCode=PJ21
|
ScryfallCode=PJ21
|
||||||
|
|
||||||
[cards]
|
[cards]
|
||||||
|
1 M Morophon, the Boundless @Svetlin Velinov
|
||||||
5 M The Gitrog Monster @Nils Hamm
|
5 M The Gitrog Monster @Nils Hamm
|
||||||
6 R Grand Arbiter Augustin IV @Matt Stewart
|
6 R Grand Arbiter Augustin IV @Matt Stewart
|
||||||
7 M Karlov of the Ghost Council @Wisnu Tan
|
7 M Karlov of the Ghost Council @Wisnu Tan
|
||||||
9 M Nicol Bolas, the Ravager @Lie Setiawan
|
9 M Nicol Bolas, the Ravager @Lie Setiawan
|
||||||
|
10 M Zacama, Primal Calamity @Yigit Koroglu
|
||||||
|
|||||||
@@ -1,42 +1,793 @@
|
|||||||
[metadata]
|
[metadata]
|
||||||
Code=J21
|
Code=J21
|
||||||
Date=2021-08-12
|
Date=2021-08-26
|
||||||
Name=Jumpstart: Historic Horizons
|
Name=Jumpstart: Historic Horizons
|
||||||
Type=Draft
|
Type=Draft
|
||||||
ScryfallCode=J21
|
ScryfallCode=J21
|
||||||
|
|
||||||
[cards]
|
[cards]
|
||||||
0 C Baffling Defenses
|
1 C Faceless Agent @Nicholas Gregory
|
||||||
0 U Boneyard Aberration
|
2 C Baffling Defenses @Andrey Kuzinskiy
|
||||||
0 C Bounty of the Deep
|
3 R Benalish Partisan @Francisco Miyara
|
||||||
0 M Davriel, Soul Broker
|
4 C Leonin Sanctifier @Jokubas Uogintas
|
||||||
0 C Davriel's Withering
|
5 C Lumbering Lightshield @Leanna Crossan
|
||||||
0 C Ethereal Grasp
|
6 M Teyo, Aegis Adept @Billy Christian
|
||||||
0 C Faceless Agent
|
7 U Wingsteed Trainer @Valera Lutfullina
|
||||||
0 M Freyalise, Skyshroud Partisan
|
8 C Bounty of the Deep @Olena Richards
|
||||||
0 M Kiora, the Tide's Fury
|
9 C Ethereal Grasp @Miranda Meeks
|
||||||
0 C Leonin Sanctifier
|
10 M Kiora, the Tide's Fury @Magali Villeneuve
|
||||||
0 C Longtusk Stalker
|
11 C Mentor of Evos Isle @Shreya Shetty
|
||||||
0 C Lumbering Lightshield
|
12 U Shoreline Scout @Shreya Shetty
|
||||||
0 R Managorger Phoenix
|
13 R Tome of the Infinite @Joseph Meehan
|
||||||
0 U Manor Guardian
|
14 U Boneyard Aberration @Slawomir Maniak
|
||||||
0 C Mentor of Evos Isle
|
15 M Davriel, Soul Broker @Justine Cruz
|
||||||
0 C Plaguecrafter's Familiar
|
16 C Davriel's Withering @Alex Brock
|
||||||
0 R Pool of Vigorous Growth
|
17 U Manor Guardian @Slawomir Maniak
|
||||||
0 C Reckless Ringleader
|
18 C Plaguecrafter's Familiar @Nicholas Gregory
|
||||||
0 C Sarkhan's Scorn
|
19 R Subversive Acolyte @Darren Tan
|
||||||
0 M Sarkhan, Wanderer to Shiv
|
20 R Managorger Phoenix @Brian Valeza
|
||||||
0 C Scion of Shiv
|
21 C Reckless Ringleader @Brian Valeza
|
||||||
0 U Shoreline Scout
|
22 C Sarkhan's Scorn @Daarken
|
||||||
0 C Skyshroud Ambush
|
23 M Sarkhan, Wanderer to Shiv @Grzegorz Rutkowski
|
||||||
0 U Skyshroud Lookout
|
24 C Scion of Shiv @Grzegorz Rutkowski
|
||||||
0 U Static Discharge
|
25 U Static Discharge @Liiga Smilshkalne
|
||||||
0 R Subversive Acolyte
|
26 M Freyalise, Skyshroud Partisan @Daarken
|
||||||
0 M Teyo, Aegis Adept
|
27 U Longtusk Stalker @Vincent Christiaens
|
||||||
0 R Tome of the Infinite
|
28 R Pool of Vigorous Growth @Jokubas Uogintas
|
||||||
0 C Veteran Charger
|
29 C Skyshroud Ambush @Andreas Zafiratos
|
||||||
0 U Wingsteed Trainer
|
30 U Skyshroud Lookout @Olena Richards
|
||||||
|
31 C Veteran Charger @Leanna Crossan
|
||||||
|
32 U Abiding Grace
|
||||||
|
33 U Abzan Battle Priest
|
||||||
|
34 U Abzan Falconer
|
||||||
|
35 U Aethershield Artificer
|
||||||
|
36 C Ainok Bond-Kin
|
||||||
|
37 U Allied Assault
|
||||||
|
38 U Alseid of Life's Bounty
|
||||||
|
39 C Angelheart Protector
|
||||||
|
40 C Angelic Edict
|
||||||
|
41 U Angelic Exaltation
|
||||||
|
42 C Angelic Purge
|
||||||
|
43 C Angel of the Dawn
|
||||||
|
44 U Angel of the God-Pharaoh
|
||||||
|
45 C Anointed Chorister
|
||||||
|
46 C Anointer of Valor
|
||||||
|
47 C Arcbound Mouser
|
||||||
|
48 C Arcbound Prototype
|
||||||
|
49 U Baffling End
|
||||||
|
50 U Barbed Spike
|
||||||
|
51 C Battlefield Promotion
|
||||||
|
52 C Battlefield Raptor
|
||||||
|
53 U Battle Screech
|
||||||
|
54 R Blade Splicer
|
||||||
|
55 C Bonds of Faith
|
||||||
|
56 R Bonescythe Sliver
|
||||||
|
57 U Boros Elite
|
||||||
|
58 C Captivating Unicorn
|
||||||
|
59 U Cast Out
|
||||||
|
60 C Celestial Enforcer
|
||||||
|
61 R Charming Prince
|
||||||
|
62 C Cloudshift
|
||||||
|
63 C Codespell Cleric
|
||||||
|
64 U Conclave Tribunal
|
||||||
|
65 C Coordinated Charge
|
||||||
|
66 U Dauntless Bodyguard
|
||||||
|
67 U Devouring Light
|
||||||
|
68 C Disciple of the Sun
|
||||||
|
69 C Djeru's Renunciation
|
||||||
|
70 C Doomed Traveler
|
||||||
|
71 C Drannith Healer
|
||||||
|
72 U Dueling Coach
|
||||||
|
73 R Elite Spellbinder
|
||||||
|
74 C Enduring Sliver
|
||||||
|
75 R Esper Sentinel
|
||||||
|
76 C Faerie Guidemother
|
||||||
|
77 C Fairgrounds Patrol
|
||||||
|
78 C Feat of Resistance
|
||||||
|
79 U Fencing Ace
|
||||||
|
80 U Fight as One
|
||||||
|
81 U First Sliver's Chosen
|
||||||
|
82 U Flourishing Fox
|
||||||
|
83 C Forsake the Worldly
|
||||||
|
84 C Fortify
|
||||||
|
85 U Gauntlets of Light
|
||||||
|
86 C Gilded Light
|
||||||
|
87 U Gird for Battle
|
||||||
|
88 U Glass Casket
|
||||||
|
89 U Glorious Enforcer
|
||||||
|
90 R Hanweir Militia Captain
|
||||||
|
91 U Healer's Flock
|
||||||
|
92 C Healer's Hawk
|
||||||
|
93 U Herald of the Sun
|
||||||
|
94 C Hive Stirrings
|
||||||
|
95 C Imposing Vantasaur
|
||||||
|
96 C Impostor of the Sixth Pride
|
||||||
|
97 C Irregular Cohort
|
||||||
|
98 U Journey to Oblivion
|
||||||
|
99 U King of the Pride
|
||||||
|
100 C Kor Skyfisher
|
||||||
|
101 U Lagonna-Band Storyteller
|
||||||
|
102 C Lancer Sliver
|
||||||
|
103 C Late to Dinner
|
||||||
|
104 C Law-Rune Enforcer
|
||||||
|
105 C Light of Hope
|
||||||
|
106 C Makeshift Battalion
|
||||||
|
107 C Martyr for the Cause
|
||||||
|
108 C Moment of Heroism
|
||||||
|
109 U Oketra's Attendant
|
||||||
|
110 C Omen of the Sun
|
||||||
|
111 U On Serra's Wings
|
||||||
|
112 C Pacifism
|
||||||
|
113 C Pious Wayfarer
|
||||||
|
114 C Radiant's Judgment
|
||||||
|
115 M Ranger-Captain of Eos
|
||||||
|
116 C Reprobation
|
||||||
|
117 R Restoration Angel
|
||||||
|
118 R Return to the Ranks
|
||||||
|
119 R Righteous Valkyrie
|
||||||
|
120 U Roc Egg
|
||||||
|
121 C Sandsteppe Outcast
|
||||||
|
122 U Scour the Desert
|
||||||
|
123 C Sea Gate Banneret
|
||||||
|
124 U Seal Away
|
||||||
|
125 C Segovian Angel
|
||||||
|
126 C Selfless Cathar
|
||||||
|
127 U Selfless Savior
|
||||||
|
128 C Sentinel Sliver
|
||||||
|
129 C Seraph of Dawn
|
||||||
|
130 U Serra Angel
|
||||||
|
131 M Serra's Emissary
|
||||||
|
132 M Serra the Benevolent
|
||||||
|
133 C Shelter
|
||||||
|
134 U Shepherd of the Flock
|
||||||
|
135 U Sigiled Contender
|
||||||
|
136 U Skyblade's Boon
|
||||||
|
137 C Snare Tactician
|
||||||
|
138 C Soul of Migration
|
||||||
|
139 U Splendor Mare
|
||||||
|
140 C Stalwart Valkyrie
|
||||||
|
141 R Starfield Mystic
|
||||||
|
142 C Star Pupil
|
||||||
|
143 C Steadfast Sentry
|
||||||
|
144 U Steelform Sliver
|
||||||
|
145 C Stirring Address
|
||||||
|
146 C Sustainer of the Realm
|
||||||
|
147 U Teyo, the Shieldmage
|
||||||
|
148 R Thalia's Lieutenant
|
||||||
|
149 C Thraben Inspector
|
||||||
|
150 C Thraben Standard Bearer
|
||||||
|
151 U Thraben Watcher
|
||||||
|
152 U Triumph of Gerrard
|
||||||
|
153 U Valiant Rescuer
|
||||||
|
154 U Valkyrie's Sword
|
||||||
|
155 U Valorous Stance
|
||||||
|
156 U Vesperlark
|
||||||
|
157 C Wall of One Thousand Cuts
|
||||||
|
158 C Winged Shepherd
|
||||||
|
159 U Wispweaver Angel
|
||||||
|
160 C Yoked Plowbeast
|
||||||
|
161 U Youthful Valkyrie
|
||||||
|
162 U Zhalfirin Decoy
|
||||||
|
163 C Aeromoeba
|
||||||
|
164 U Alirios, Enraptured
|
||||||
|
165 U Animating Faerie
|
||||||
|
166 R Archmage's Charm
|
||||||
|
167 C Aven Eternal
|
||||||
|
168 C Aviation Pioneer
|
||||||
|
169 R Bazaar Trademage
|
||||||
|
170 C Breaching Hippocamp
|
||||||
|
171 U Brineborn Cutthroat
|
||||||
|
172 C Bubble Snare
|
||||||
|
173 C Burdened Aerialist
|
||||||
|
174 C Burrog Befuddler
|
||||||
|
175 C Capture Sphere
|
||||||
|
176 U Censor
|
||||||
|
177 R Champion of Wits
|
||||||
|
178 C Choking Tethers
|
||||||
|
179 C Coralhelm Guide
|
||||||
|
180 C Crookclaw Transmuter
|
||||||
|
181 U Diffusion Sliver
|
||||||
|
182 U Dismiss
|
||||||
|
183 U Essence Capture
|
||||||
|
184 C Etherium Spinner
|
||||||
|
185 U Exclude
|
||||||
|
186 U Exclusion Mage
|
||||||
|
187 C Expedition Diviner
|
||||||
|
188 C Eyekite
|
||||||
|
189 C Faerie Duelist
|
||||||
|
190 C Faerie Seer
|
||||||
|
191 U Faerie Vandal
|
||||||
|
192 U Filigree Attendant
|
||||||
|
193 C Floodhound
|
||||||
|
194 C Foul Watcher
|
||||||
|
195 C Ghostform
|
||||||
|
196 U Ghost-Lit Drifter
|
||||||
|
197 U Giant's Amulet
|
||||||
|
198 C Glimmerbell
|
||||||
|
199 C Gust of Wind
|
||||||
|
200 C Hard Evidence
|
||||||
|
201 U Hypnotic Sprite
|
||||||
|
202 R Inniaz, the Gale Force
|
||||||
|
203 C Into the Roil
|
||||||
|
204 U Junk Winder
|
||||||
|
205 C Just the Wind
|
||||||
|
206 U Jwari Disruption
|
||||||
|
207 C Keen Glidemaster
|
||||||
|
208 C Kitesail Corsair
|
||||||
|
209 C Living Tempest
|
||||||
|
210 C Lofty Denial
|
||||||
|
211 U Manic Scribe
|
||||||
|
212 C Man-o'-War
|
||||||
|
213 C Mantle of Tides
|
||||||
|
214 R Master of the Pearl Trident
|
||||||
|
215 U Merfolk Falconer
|
||||||
|
216 U Merfolk Trickster
|
||||||
|
217 U Merrow Reejerey
|
||||||
|
218 R Mist-Syndicate Naga
|
||||||
|
219 C Mistwalker
|
||||||
|
220 C Moonblade Shinobi
|
||||||
|
221 C Mulldrifter
|
||||||
|
222 U Neutralize
|
||||||
|
223 C Ninja of the Deep Hours
|
||||||
|
224 C Ojutai's Summons
|
||||||
|
225 C Omen of the Sea
|
||||||
|
226 U Oneirophage
|
||||||
|
227 C Parcel Myr
|
||||||
|
228 C Passwall Adept
|
||||||
|
229 C Phantasmal Form
|
||||||
|
230 C Phantom Ninja
|
||||||
|
231 C Pondering Mage
|
||||||
|
232 C Prosperous Pirates
|
||||||
|
233 U Rain of Revelation
|
||||||
|
234 U Raving Visionary
|
||||||
|
235 C Recalibrate
|
||||||
|
236 C Resculpt
|
||||||
|
237 U Rewind
|
||||||
|
238 R Rise and Shine
|
||||||
|
239 C Roaming Ghostlight
|
||||||
|
240 C Rousing Read
|
||||||
|
241 C Sailor of Means
|
||||||
|
242 C Scour All Possibilities
|
||||||
|
243 U Scour the Laboratory
|
||||||
|
244 U Scuttletide
|
||||||
|
245 U Scuttling Sliver
|
||||||
|
246 C Shaper Apprentice
|
||||||
|
247 U Sigiled Starfish
|
||||||
|
248 U Silvergill Adept
|
||||||
|
249 U Skatewing Spy
|
||||||
|
250 U Skilled Animator
|
||||||
|
251 C Skyclave Squid
|
||||||
|
252 C So Shiny
|
||||||
|
253 U Specimen Collector
|
||||||
|
254 U Spectral Sailor
|
||||||
|
255 C Steelfin Whale
|
||||||
|
256 U Stitchwing Skaab
|
||||||
|
257 C Storm Sculptor
|
||||||
|
258 U Supreme Will
|
||||||
|
259 M Svyelun of Sea and Sky
|
||||||
|
260 C Tazeem Roilmage
|
||||||
|
261 R Thought Monitor
|
||||||
|
262 U Tide Skimmer
|
||||||
|
263 C Tightening Coils
|
||||||
|
264 U Tolarian Kraken
|
||||||
|
265 C Tome Anima
|
||||||
|
266 U Turn into a Pumpkin
|
||||||
|
267 U Unsubstantiate
|
||||||
|
268 C Unsummon
|
||||||
|
269 C Vexing Gull
|
||||||
|
270 R Voracious Greatshark
|
||||||
|
271 U Waker of Waves
|
||||||
|
272 U Waterkin Shaman
|
||||||
|
273 C Waterknot
|
||||||
|
274 C Watertrap Weaver
|
||||||
|
275 C Windcaller Aven
|
||||||
|
276 U Windstorm Drake
|
||||||
|
277 C Winged Words
|
||||||
|
278 C Witching Well
|
||||||
|
279 R Wonder
|
||||||
|
280 U Wormhole Serpent
|
||||||
|
281 C Abnormal Endurance
|
||||||
|
282 U Accursed Horde
|
||||||
|
283 C Alchemist's Gift
|
||||||
|
284 C Anointed Deacon
|
||||||
|
285 U Archfiend of Sorrows
|
||||||
|
286 R Asylum Visitor
|
||||||
|
287 C Azra Smokeshaper
|
||||||
|
288 C Black Cat
|
||||||
|
289 C Blighted Bat
|
||||||
|
290 C Blight Keeper
|
||||||
|
291 C Blitz Leech
|
||||||
|
292 U Blood Artist
|
||||||
|
293 C Blood Burglar
|
||||||
|
294 U Bloodchief's Thirst
|
||||||
|
295 C Blood Glutton
|
||||||
|
296 U Bond of Revival
|
||||||
|
297 C Boneclad Necromancer
|
||||||
|
298 C Bone Shards
|
||||||
|
299 C Burglar Rat
|
||||||
|
300 C Cabal Initiate
|
||||||
|
301 R Callous Bloodmage
|
||||||
|
302 U Carrier Thrall
|
||||||
|
303 C Cemetery Recruitment
|
||||||
|
304 C Changeling Outcast
|
||||||
|
305 U Clattering Augur
|
||||||
|
306 R Cordial Vampire
|
||||||
|
307 C Corpse Churn
|
||||||
|
308 R Dark Salvation
|
||||||
|
309 U Davriel, Rogue Shadowmage
|
||||||
|
310 C Davriel's Shadowfugue
|
||||||
|
311 C Deadly Alliance
|
||||||
|
312 C Deathbloom Thallid
|
||||||
|
313 U Deathless Ancient
|
||||||
|
314 C Death Wind
|
||||||
|
315 R Dire Fleet Poisoner
|
||||||
|
316 R Diregraf Colossus
|
||||||
|
317 C Discerning Taste
|
||||||
|
318 C Drainpipe Vermin
|
||||||
|
319 U Dregscape Sliver
|
||||||
|
320 C Echoing Return
|
||||||
|
321 C Elderfang Disciple
|
||||||
|
322 R Endling
|
||||||
|
323 C Epicure of Blood
|
||||||
|
324 U Eternal Taskmaster
|
||||||
|
325 C Eyeblight Assassin
|
||||||
|
326 C Facevaulter
|
||||||
|
327 C Feed the Serpent
|
||||||
|
328 C Feed the Swarm
|
||||||
|
329 U Fell Specter
|
||||||
|
330 C First-Sphere Gargantua
|
||||||
|
331 U Fleshbag Marauder
|
||||||
|
332 C Gilt-Blade Prowler
|
||||||
|
333 U Goremand
|
||||||
|
334 U Graveshifter
|
||||||
|
335 C Grim Physician
|
||||||
|
336 U Haunted Dead
|
||||||
|
337 U Heartless Act
|
||||||
|
338 U Heir of Falkenrath
|
||||||
|
339 C Hell Mongrel
|
||||||
|
340 U Indulgent Aristocrat
|
||||||
|
341 C Karfell Kennel-Master
|
||||||
|
342 C Kitchen Imp
|
||||||
|
343 U Kraul Swarm
|
||||||
|
344 U Leeching Sliver
|
||||||
|
345 U Legion Vanguard
|
||||||
|
346 U Liliana's Devotee
|
||||||
|
347 U Liliana's Elite
|
||||||
|
348 C Liliana's Steward
|
||||||
|
349 U Lord of the Accursed
|
||||||
|
350 C Macabre Waltz
|
||||||
|
351 C Marauding Blight-Priest
|
||||||
|
352 C Marauding Boneslasher
|
||||||
|
353 C Mark of the Vampire
|
||||||
|
354 U Markov Crusader
|
||||||
|
355 R Marrow-Gnawer
|
||||||
|
356 C Miasmic Mummy
|
||||||
|
357 C Mind Rake
|
||||||
|
358 U Mire Triton
|
||||||
|
359 C Mob
|
||||||
|
360 C Moment of Craving
|
||||||
|
361 C Murder
|
||||||
|
362 R Murderous Rider
|
||||||
|
363 R Necrogoyf
|
||||||
|
364 U Necromancer's Familiar
|
||||||
|
365 C Nested Shambler
|
||||||
|
366 R Nether Spirit
|
||||||
|
367 C Nezumi Cutthroat
|
||||||
|
368 R Nullpriest of Oblivion
|
||||||
|
369 C Ob Nixilis's Cruelty
|
||||||
|
370 C Okiba-Gang Shinobi
|
||||||
|
371 U Pelakka Predation
|
||||||
|
372 R Piper of the Swarm
|
||||||
|
373 U Plaguecrafter
|
||||||
|
374 C Plague Wight
|
||||||
|
375 C Putrid Goblin
|
||||||
|
376 C Queen's Agent
|
||||||
|
377 C Raise the Draugr
|
||||||
|
378 C Ransack the Lab
|
||||||
|
379 C Rat Colony
|
||||||
|
380 C Reaper of Night
|
||||||
|
381 C Ruin Rat
|
||||||
|
382 C Shambling Goblin
|
||||||
|
383 C Sinister Starfish
|
||||||
|
384 C Skullsnatcher
|
||||||
|
385 C Skymarch Bloodletter
|
||||||
|
386 U Sling-Gang Lieutenant
|
||||||
|
387 C Strangling Spores
|
||||||
|
388 C Subtle Strike
|
||||||
|
389 U Sudden Edict
|
||||||
|
390 C Supernatural Stamina
|
||||||
|
391 U Throatseeker
|
||||||
|
392 U Thwart the Grave
|
||||||
|
393 C Tourach's Canticle
|
||||||
|
394 C Typhoid Rats
|
||||||
|
395 U Unbreakable Bond
|
||||||
|
396 U Undead Augur
|
||||||
|
397 C Unexpected Fangs
|
||||||
|
398 U Urgoros, the Empty One
|
||||||
|
399 U Vampire of the Dire Moon
|
||||||
|
400 C Venomous Changeling
|
||||||
|
401 C Vermin Gorger
|
||||||
|
402 C Village Rites
|
||||||
|
403 U Void Beckoner
|
||||||
|
404 C Warteye Witch
|
||||||
|
405 M Yawgmoth, Thran Physician
|
||||||
|
406 U Young Necromancer
|
||||||
|
407 C Alchemist's Greeting
|
||||||
|
408 C Arcbound Slasher
|
||||||
|
409 C Arcbound Tracker
|
||||||
|
410 U Arcbound Whelp
|
||||||
|
411 C Barge In
|
||||||
|
412 U Battle-Rattle Shaman
|
||||||
|
413 U Battle Squadron
|
||||||
|
414 U Beetleback Chief
|
||||||
|
415 U Belligerent Sliver
|
||||||
|
416 R Birgi, God of Storytelling
|
||||||
|
417 C Bladeback Sliver
|
||||||
|
418 U Blazing Rootwalla
|
||||||
|
419 C Blisterstick Shaman
|
||||||
|
420 R Bloodbraid Marauder
|
||||||
|
421 C Bloodhaze Wolverine
|
||||||
|
422 C Blur Sliver
|
||||||
|
423 C Bogardan Dragonheart
|
||||||
|
424 R Breya's Apprentice
|
||||||
|
425 C Burn Bright
|
||||||
|
426 C Burning-Tree Vandal
|
||||||
|
427 U Captain Ripley Vance
|
||||||
|
428 C Cathartic Reunion
|
||||||
|
429 U Clamor Shaman
|
||||||
|
430 C Cleaving Sliver
|
||||||
|
431 R Conspiracy Theorist
|
||||||
|
432 R Dark-Dweller Oracle
|
||||||
|
433 C Destructive Digger
|
||||||
|
434 U Dragon Egg
|
||||||
|
435 C Dragon Fodder
|
||||||
|
436 C Dragon Hatchling
|
||||||
|
437 C Dragon Mantle
|
||||||
|
438 U Dragon's Rage Channeler
|
||||||
|
439 C Faithless Salvaging
|
||||||
|
440 C Fiery Temper
|
||||||
|
441 C Fire Prophecy
|
||||||
|
442 C Fissure Wizard
|
||||||
|
443 C Fists of Flame
|
||||||
|
444 U Flameblade Adept
|
||||||
|
445 U Flame Sweep
|
||||||
|
446 C Foundry Street Denizen
|
||||||
|
447 U Furnace Whelp
|
||||||
|
448 U Furyblade Vampire
|
||||||
|
449 R Gadrak, the Crown-Scourge
|
||||||
|
450 C Galvanic Relay
|
||||||
|
451 U Gempalm Incinerator
|
||||||
|
452 C Geomancer's Gambit
|
||||||
|
453 C Goatnap
|
||||||
|
454 C Goblin Arsonist
|
||||||
|
455 U Goblin Barrage
|
||||||
|
456 C Goblin Bird-Grabber
|
||||||
|
457 R Goblin Dark-Dwellers
|
||||||
|
458 R Goblin Engineer
|
||||||
|
459 U Goblin Morningstar
|
||||||
|
460 U Goblin Oriflamme
|
||||||
|
461 U Goblin Rally
|
||||||
|
462 C Goblin Wizardry
|
||||||
|
463 C Gouged Zealot
|
||||||
|
464 U Grinning Ignus
|
||||||
|
465 U Guttersnipe
|
||||||
|
466 R Harmonic Prodigy
|
||||||
|
467 U Hellkite Punisher
|
||||||
|
468 C Hobblefiend
|
||||||
|
469 U Hollowhead Sliver
|
||||||
|
470 U Hordeling Outburst
|
||||||
|
471 C Igneous Elemental
|
||||||
|
472 C Incendiary Oracle
|
||||||
|
473 U Incorrigible Youths
|
||||||
|
474 U Insatiable Gorgers
|
||||||
|
475 C Insolent Neonate
|
||||||
|
476 R Irencrag Pyromancer
|
||||||
|
477 C Kargan Dragonrider
|
||||||
|
478 C Keldon Raider
|
||||||
|
479 U Kinetic Augur
|
||||||
|
480 C Krenko's Command
|
||||||
|
481 U Kuldotha Flamefiend
|
||||||
|
482 U Lava Coil
|
||||||
|
483 U Lightning Axe
|
||||||
|
484 C Lightning Spear
|
||||||
|
485 C Lightning Visionary
|
||||||
|
486 U Living Lightning
|
||||||
|
487 C Mad Prophet
|
||||||
|
488 U Mad Ratter
|
||||||
|
489 C Merchant of the Vale
|
||||||
|
490 C Omen of the Forge
|
||||||
|
491 U Orcish Vandal
|
||||||
|
492 C Oread of Mountain's Blaze
|
||||||
|
493 U Ore-Scale Guardian
|
||||||
|
494 C Ornery Goblin
|
||||||
|
495 R Pashalik Mons
|
||||||
|
496 U Rage Forger
|
||||||
|
497 U Rapacious Dragon
|
||||||
|
498 U Ravenous Bloodseeker
|
||||||
|
499 U Ravenous Intruder
|
||||||
|
500 C Reckless Charge
|
||||||
|
501 U Reckless Racer
|
||||||
|
502 U Reckless Wurm
|
||||||
|
503 C Renegade Tactics
|
||||||
|
504 C Revolutionist
|
||||||
|
505 U Rust Monster
|
||||||
|
506 C Sarkhan's Rage
|
||||||
|
507 U Sarkhan's Whelp
|
||||||
|
508 C Scorching Dragonfire
|
||||||
|
509 M Seasoned Pyromancer
|
||||||
|
510 C Shivan Fire
|
||||||
|
511 U Shiv's Embrace
|
||||||
|
512 C Shock
|
||||||
|
513 C Skophos Reaver
|
||||||
|
514 U Slag Strider
|
||||||
|
515 C Sparktongue Dragon
|
||||||
|
516 C Spinehorn Minotaur
|
||||||
|
517 R Spiteful Sliver
|
||||||
|
518 U Spreading Insurrection
|
||||||
|
519 C Storm Caller
|
||||||
|
520 U Storm-Kiln Artist
|
||||||
|
521 U Strike It Rich
|
||||||
|
522 C Striking Sliver
|
||||||
|
523 C Sure Strike
|
||||||
|
524 C Thermo-Alchemist
|
||||||
|
525 C Thrill of Possibility
|
||||||
|
526 U Throes of Chaos
|
||||||
|
527 R Thunderbreak Regent
|
||||||
|
528 C Tormenting Voice
|
||||||
|
529 C Unholy Heat
|
||||||
|
530 C Viashino Lashclaw
|
||||||
|
531 U Volcanic Dragon
|
||||||
|
532 U Volley Veteran
|
||||||
|
533 C Warlord's Fury
|
||||||
|
534 C Weaselback Redcap
|
||||||
|
535 U Young Pyromancer
|
||||||
|
536 U You See a Pair of Goblins
|
||||||
|
537 C Adaptive Snapjaw
|
||||||
|
538 C Aetherstream Leopard
|
||||||
|
539 R Aeve, Progenitor Ooze
|
||||||
|
540 C Arbor Armament
|
||||||
|
541 U Armorcraft Judge
|
||||||
|
542 C Awaken the Bear
|
||||||
|
543 R Ayula, Queen Among Bears
|
||||||
|
544 C Bannerhide Krushok
|
||||||
|
545 C Battering Krasis
|
||||||
|
546 C Bear Cub
|
||||||
|
547 U Bestial Menace
|
||||||
|
548 U Biogenic Upgrade
|
||||||
|
549 C Bloom Hulk
|
||||||
|
550 R Bristling Hydra
|
||||||
|
551 C Charge Through
|
||||||
|
552 M Chatterfang, Squirrel General
|
||||||
|
553 C Chatter of the Squirrel
|
||||||
|
554 C Chatterstorm
|
||||||
|
555 R Chitterspitter
|
||||||
|
556 C Courage in Crisis
|
||||||
|
557 C Crocanura
|
||||||
|
558 C Deepwood Denizen
|
||||||
|
559 U Destiny Spinner
|
||||||
|
560 R Dragonsguard Elite
|
||||||
|
561 C Duskshell Crawler
|
||||||
|
562 U Dwynen's Elite
|
||||||
|
563 C Elderleaf Mentor
|
||||||
|
564 U Elven Bow
|
||||||
|
565 U Enlarge
|
||||||
|
566 R Esika's Chariot
|
||||||
|
567 U Evolution Sage
|
||||||
|
568 C Excavating Anurid
|
||||||
|
569 U Exuberant Wolfbear
|
||||||
|
570 C Ferocious Pup
|
||||||
|
571 C Fierce Witchstalker
|
||||||
|
572 U Flaxen Intruder
|
||||||
|
573 C Funnel-Web Recluse
|
||||||
|
574 U Ghirapur Guide
|
||||||
|
575 C Gift of Growth
|
||||||
|
576 C Glimmer Bairn
|
||||||
|
577 C Gnarlid Colony
|
||||||
|
578 R Goreclaw, Terror of Qal Sisma
|
||||||
|
579 C Grizzled Outrider
|
||||||
|
580 C Grizzly Bears
|
||||||
|
581 C Guardian Gladewalker
|
||||||
|
582 R Hardened Scales
|
||||||
|
583 C Harrow
|
||||||
|
584 U Herd Baloth
|
||||||
|
585 C Highspire Infusion
|
||||||
|
586 C Hunter's Edge
|
||||||
|
587 U Hunting Pack
|
||||||
|
588 U Incremental Growth
|
||||||
|
589 U Inspiring Call
|
||||||
|
590 U Invigorating Surge
|
||||||
|
591 U Iridescent Hornbeetle
|
||||||
|
592 C Jewel-Eyed Cobra
|
||||||
|
593 C Jungleborn Pioneer
|
||||||
|
594 C Kujar Seedsculptor
|
||||||
|
595 C Lifecraft Cavalry
|
||||||
|
596 U Littjara Glade-Warden
|
||||||
|
597 C Llanowar Elves
|
||||||
|
598 U Llanowar Tribe
|
||||||
|
599 C Llanowar Visionary
|
||||||
|
600 U Longtusk Cub
|
||||||
|
601 U Manaweft Sliver
|
||||||
|
602 R Marwyn, the Nurturer
|
||||||
|
603 U Might of the Masses
|
||||||
|
604 C Mother Bear
|
||||||
|
605 U Mowu, Loyal Companion
|
||||||
|
606 C Murasa Behemoth
|
||||||
|
607 U Nantuko Cultivator
|
||||||
|
608 U Nessian Hornbeetle
|
||||||
|
609 C Nylea's Forerunner
|
||||||
|
610 R Oran-Rief Ooze
|
||||||
|
611 U Overcome
|
||||||
|
612 C Owlbear
|
||||||
|
613 C Pack's Favor
|
||||||
|
614 U Paradise Druid
|
||||||
|
615 R Parallel Lives
|
||||||
|
616 U Peema Aether-Seer
|
||||||
|
617 C Penumbra Bobcat
|
||||||
|
618 C Pollenbright Druid
|
||||||
|
619 C Predatory Sliver
|
||||||
|
620 C Prey's Vengeance
|
||||||
|
621 C Professor of Zoomancy
|
||||||
|
622 C Riparian Tiger
|
||||||
|
623 R Rishkar, Peema Renegade
|
||||||
|
624 C Runeclaw Bear
|
||||||
|
625 C Sabertooth Mauler
|
||||||
|
626 C Sage of Shaila's Claim
|
||||||
|
627 R Sanctum Weaver
|
||||||
|
628 C Saproling Migration
|
||||||
|
629 C Sauroform Hybrid
|
||||||
|
630 C Savage Swipe
|
||||||
|
631 U Scale Up
|
||||||
|
632 C Scurrid Colony
|
||||||
|
633 U Scurry Oak
|
||||||
|
634 U Servant of the Conduit
|
||||||
|
635 C Servant of the Scale
|
||||||
|
636 C Setessan Skirmisher
|
||||||
|
637 C Skola Grovedancer
|
||||||
|
638 C Smell Fear
|
||||||
|
639 C Snakeskin Veil
|
||||||
|
640 U Song of Freyalise
|
||||||
|
641 U Spore Swarm
|
||||||
|
642 C Springbloom Druid
|
||||||
|
643 U Sprouting Renewal
|
||||||
|
644 R Squirrel Mob
|
||||||
|
645 U Squirrel Sanctuary
|
||||||
|
646 U Squirrel Sovereign
|
||||||
|
647 R Squirrel Wrangler
|
||||||
|
648 C Striped Bears
|
||||||
|
649 R Sylvan Anthem
|
||||||
|
650 C Tajuru Pathwarden
|
||||||
|
651 U Taunting Arbormage
|
||||||
|
652 U Tempered Sliver
|
||||||
|
653 C Thriving Rhino
|
||||||
|
654 U Timeless Witness
|
||||||
|
655 U Tireless Provisioner
|
||||||
|
656 C Titanic Brawl
|
||||||
|
657 C Titanic Growth
|
||||||
|
658 C Trufflesnout
|
||||||
|
659 C Trumpeting Herd
|
||||||
|
660 C Twin-Silk Spider
|
||||||
|
661 U Ulvenwald Mysteries
|
||||||
|
662 C Urban Daggertooth
|
||||||
|
663 U Vastwood Fortification
|
||||||
|
664 R Verdant Command
|
||||||
|
665 C Vivien's Grizzly
|
||||||
|
666 U Webweaver Changeling
|
||||||
|
667 C Wildheart Invoker
|
||||||
|
668 U Wild Onslaught
|
||||||
|
669 U Wildwood Scourge
|
||||||
|
670 C Winding Way
|
||||||
|
671 U Woodland Champion
|
||||||
|
672 U Wren's Run Hydra
|
||||||
|
673 C Yavimaya Sapherd
|
||||||
|
674 U Acolyte of Affliction
|
||||||
|
675 C Aeromunculus
|
||||||
|
676 C Applied Biomancy
|
||||||
|
677 U Arcbound Shikari
|
||||||
|
678 U Arcus Acolyte
|
||||||
|
679 U Ascent of the Worthy
|
||||||
|
680 C Breathless Knight
|
||||||
|
681 U Bred for the Hunt
|
||||||
|
682 C Captured by Lagacs
|
||||||
|
683 R Chainer, Nightmare Adept
|
||||||
|
684 C Chrome Courier
|
||||||
|
685 R Cloudshredder Sliver
|
||||||
|
686 U Combine Chrysalis
|
||||||
|
687 C Drey Keeper
|
||||||
|
688 U Elusive Krasis
|
||||||
|
689 U Etchings of the Chosen
|
||||||
|
690 U Fall of the Impostor
|
||||||
|
691 M The First Sliver
|
||||||
|
692 U Glowspore Shaman
|
||||||
|
693 C Goblin Anarchomancer
|
||||||
|
694 U Good-Fortune Unicorn
|
||||||
|
695 U Graceful Restoration
|
||||||
|
696 U Improbable Alliance
|
||||||
|
697 U Ingenious Infiltrator
|
||||||
|
698 U Jungle Creeper
|
||||||
|
699 U Justice Strike
|
||||||
|
700 R Knight of Autumn
|
||||||
|
701 U Lavabelly Sliver
|
||||||
|
702 U Lazotep Chancellor
|
||||||
|
703 R Lonis, Cryptozoologist
|
||||||
|
704 R Lord of Extinction
|
||||||
|
705 U Munitions Expert
|
||||||
|
706 U Nimbus Swimmer
|
||||||
|
707 R Priest of Fell Rites
|
||||||
|
708 U Prophetic Titan
|
||||||
|
709 U Rakdos Headliner
|
||||||
|
710 R Reap the Past
|
||||||
|
711 U Rip Apart
|
||||||
|
712 U Rotwidow Pack
|
||||||
|
713 U Ruination Rioter
|
||||||
|
714 C Shambleshark
|
||||||
|
715 U Sharktocrab
|
||||||
|
716 R Simic Ascendancy
|
||||||
|
717 U Skull Prophet
|
||||||
|
718 U Soulherder
|
||||||
|
719 U Spire Patrol
|
||||||
|
720 R Sterling Grove
|
||||||
|
721 C Storm God's Oracle
|
||||||
|
722 R Sythis, Harvest's Hand
|
||||||
|
723 C Terminal Agony
|
||||||
|
724 R Territorial Kavu
|
||||||
|
725 U Thundering Djinn
|
||||||
|
726 C Wavesifter
|
||||||
|
727 U Loch Dragon
|
||||||
|
728 U Ravenous Squirrel
|
||||||
|
729 C Scuttlegator
|
||||||
|
730 U Fast // Furious
|
||||||
|
731 U Integrity // Intervention
|
||||||
|
732 R Abandoned Sarcophagus
|
||||||
|
733 U Altar of the Goyf
|
||||||
|
734 C Amorphous Axe
|
||||||
|
735 U Batterbone
|
||||||
|
736 U Birthing Boughs
|
||||||
|
737 U Bloodline Pretender
|
||||||
|
738 C Bonded Construct
|
||||||
|
739 C Chromatic Sphere
|
||||||
|
740 C Cogworker's Puzzleknot
|
||||||
|
741 U Foundry Inspector
|
||||||
|
742 C Ichor Wellspring
|
||||||
|
743 U Icy Manipulator
|
||||||
|
744 C Implement of Combustion
|
||||||
|
745 C Implement of Examination
|
||||||
|
746 C Iron Bully
|
||||||
|
747 C Lightning-Core Excavator
|
||||||
|
748 U Monoskelion
|
||||||
|
749 C Myr Enforcer
|
||||||
|
750 C Myr Scrapling
|
||||||
|
751 C Myr Sire
|
||||||
|
752 R Nettlecyst
|
||||||
|
753 C Ornithopter of Paradise
|
||||||
|
754 C Prophetic Prism
|
||||||
|
755 U Sanctuary Raptor
|
||||||
|
756 R Scrap Trawler
|
||||||
|
757 C Sparring Construct
|
||||||
|
758 U Treasure Keeper
|
||||||
|
759 C Universal Automaton
|
||||||
|
760 C Weapon Rack
|
||||||
|
761 U Witch's Oven
|
||||||
|
762 R Zabaz, the Glimmerwasp
|
||||||
|
763 C Barren Moor
|
||||||
|
764 C Bloodfell Caves
|
||||||
|
765 C Blossoming Sands
|
||||||
|
766 C Dismal Backwater
|
||||||
|
767 C Evolving Wilds
|
||||||
|
768 C Forgotten Cave
|
||||||
|
769 C Jungle Hollow
|
||||||
|
770 C Khalni Garden
|
||||||
|
771 C Lonely Sandbar
|
||||||
|
772 C Rugged Highlands
|
||||||
|
773 C Rupture Spire
|
||||||
|
774 C Scoured Barrens
|
||||||
|
775 C Secluded Steppe
|
||||||
|
776 R Sliver Hive
|
||||||
|
777 C Swiftwater Cliffs
|
||||||
|
778 C Thornwood Falls
|
||||||
|
779 C Tranquil Cove
|
||||||
|
780 C Tranquil Thicket
|
||||||
|
781 C Unknown Shores
|
||||||
|
782 C Wind-Scarred Crag
|
||||||
|
|
||||||
[tokens]
|
[tokens]
|
||||||
|
|
||||||
u_8_8_kraken
|
u_8_8_kraken
|
||||||
@@ -321,6 +321,12 @@ ScryfallCode=SLD
|
|||||||
573 C Forest @Alayna Danner
|
573 C Forest @Alayna Danner
|
||||||
573 C Forest @Alayna Danner
|
573 C Forest @Alayna Danner
|
||||||
581 M Lucille @Jason Felix
|
581 M Lucille @Jason Felix
|
||||||
|
582 R Brainstorm @Mark Poole
|
||||||
|
589 R Arcane Signet @Dan Frazier
|
||||||
|
591 R Crash Through @Tyler Walpole
|
||||||
|
603 M Eldrazi Monument @Cosmin Podar
|
||||||
|
604 R Ornithopter @Cosmin Podar
|
||||||
|
606 R Swiftfoot Boots @Cosmin Podar
|
||||||
|
|
||||||
[tokens]
|
[tokens]
|
||||||
b_1_1_faerie_rogue_flying
|
b_1_1_faerie_rogue_flying
|
||||||
|
|||||||
@@ -4,5 +4,5 @@ Type:Digital
|
|||||||
Subtype:Arena
|
Subtype:Arena
|
||||||
Effective:2019-11-21
|
Effective:2019-11-21
|
||||||
Order:142
|
Order:142
|
||||||
Sets:XLN, RIX, DOM, M19, GRN, G18, RNA, WAR, M20, ELD, HA1, THB, HA2, IKO, HA3, M21, JMP, AKR, ZNR, KLR, KHM, HA4, STX, STA, HA5, AFR
|
Sets:XLN, RIX, DOM, M19, GRN, G18, RNA, WAR, M20, ELD, HA1, THB, HA2, IKO, HA3, M21, JMP, AKR, ZNR, KLR, KHM, HA4, STX, STA, HA5, AFR, J21
|
||||||
Banned:Agent of Treachery; Channel; Counterspell; Dark Ritual; Demonic Tutor; Field of the Dead; Fires of Invention; Lightning Bolt; Oko, Thief of Crowns; Omnath, Locus of Creation; Natural Order; Nexus of Fate; Once Upon a Time; Swords to Plowshares; Teferi, Time Raveler; Thassa's Oracle; Time Warp; Veil of Summer; Uro, Titan of Nature's Wrath; Wilderness Reclamation; Winota, Joiner of Forces
|
Banned:Agent of Treachery; Channel; Counterspell; Dark Ritual; Demonic Tutor; Field of the Dead; Fires of Invention; Lightning Bolt; Oko, Thief of Crowns; Omnath, Locus of Creation; Natural Order; Nexus of Fate; Once Upon a Time; Swords to Plowshares; Teferi, Time Raveler; Thassa's Oracle; Time Warp; Veil of Summer; Uro, Titan of Nature's Wrath; Wilderness Reclamation; Winota, Joiner of Forces
|
||||||
|
|||||||
@@ -621,7 +621,8 @@ lblNetArchivePioneerDecks=ネットアーカイブデッキ パイオニア
|
|||||||
lblNetArchiveModernDecks=ネットアーカイブデッキ モダン
|
lblNetArchiveModernDecks=ネットアーカイブデッキ モダン
|
||||||
lblNetArchiveLegacyDecks=ネットアーカイブデッキ レガシー
|
lblNetArchiveLegacyDecks=ネットアーカイブデッキ レガシー
|
||||||
lblNetArchiveVintageDecks=ネットアーカイブデッキ ビンテージ
|
lblNetArchiveVintageDecks=ネットアーカイブデッキ ビンテージ
|
||||||
lblNetArchiveBlockDecks=ネットアーカイブデッキ パウパー
|
lblNetArchiveBlockDecks=ネットアーカイブデッキ ブロック
|
||||||
|
lblNetArchivePauperDecks=ネットアーカイブデッキ パウパー
|
||||||
#VSubmenuTutorial
|
#VSubmenuTutorial
|
||||||
lblTutorial=チュートリアル
|
lblTutorial=チュートリアル
|
||||||
lblTutorialMode=チュートリアルモード
|
lblTutorialMode=チュートリアルモード
|
||||||
|
|||||||
@@ -621,7 +621,8 @@ lblNetArchiveModernDecks=网络摩登套牌存档
|
|||||||
lblNetArchivePioneerDecks=网络先驱套牌存档
|
lblNetArchivePioneerDecks=网络先驱套牌存档
|
||||||
lblNetArchiveLegacyDecks=网络薪传套牌存档
|
lblNetArchiveLegacyDecks=网络薪传套牌存档
|
||||||
lblNetArchiveVintageDecks=网络特选套牌存档
|
lblNetArchiveVintageDecks=网络特选套牌存档
|
||||||
lblNetArchiveBlockDecks=网络全铁套牌存档
|
lblNetArchiveBlockDecks=网络环境构筑套牌存档
|
||||||
|
lblNetArchivePauperDecks=网络全铁套牌存档
|
||||||
#VSubmenuTutorial
|
#VSubmenuTutorial
|
||||||
lblTutorial=教程
|
lblTutorial=教程
|
||||||
lblTutorialMode=教程模式
|
lblTutorialMode=教程模式
|
||||||
|
|||||||
@@ -0,0 +1,20 @@
|
|||||||
|
[quest]
|
||||||
|
id=ELD Challenge: Acclaimed Contender
|
||||||
|
OpponentName=The Contenders
|
||||||
|
AILife=20
|
||||||
|
Repeat=true
|
||||||
|
Wins=0
|
||||||
|
Card Reward=chosen card sets:ELD
|
||||||
|
Credit Reward=120
|
||||||
|
AIExtras=
|
||||||
|
HumanExtras=
|
||||||
|
[metadata]
|
||||||
|
Name=ELD Challenge: Acclaimed Contender
|
||||||
|
Title=Acclaimed Contender
|
||||||
|
Difficulty=medium
|
||||||
|
Description="Every champion was once a contender that refused to give up."\n-Rocky Balboa, Rocky
|
||||||
|
Icon=Dungeon Crawling White.jpg
|
||||||
|
Deck Type=constructed
|
||||||
|
[Main]
|
||||||
|
30 Acclaimed Contender|ELD|2
|
||||||
|
30 Tournament Grounds|ELD
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
[quest]
|
||||||
|
id=ELD Challenge: Arcanist's Owl
|
||||||
|
OpponentName=The Owls
|
||||||
|
AILife=20
|
||||||
|
Repeat=true
|
||||||
|
Wins=0
|
||||||
|
Card Reward=chosen card sets:ELD
|
||||||
|
Credit Reward=120
|
||||||
|
AIExtras=Mystic Sanctuary
|
||||||
|
HumanExtras=
|
||||||
|
[metadata]
|
||||||
|
Title=Arcanist's Owl
|
||||||
|
Difficulty=hard
|
||||||
|
Description=The owls start with a land.
|
||||||
|
Icon=Dungeon Crawling Gold.jpg
|
||||||
|
Deck Type=constructed
|
||||||
|
Name=ELD Challenge: Arcanist's Owl
|
||||||
|
[Main]
|
||||||
|
30 Arcanist's Owl|ELD
|
||||||
|
30 Island|ELD|1
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
[quest]
|
||||||
|
id=ELD Challenge: Archon of Absolution
|
||||||
|
OpponentName=The Archons
|
||||||
|
AILife=20
|
||||||
|
Repeat=true
|
||||||
|
Wins=0
|
||||||
|
Card Reward=chosen card sets:ELD
|
||||||
|
Credit Reward=120
|
||||||
|
AIExtras=
|
||||||
|
HumanExtras=
|
||||||
|
[metadata]
|
||||||
|
Name=ELD Challenge: Archon of Absolution
|
||||||
|
Title=Archon of Absolution
|
||||||
|
Difficulty=medium
|
||||||
|
Description="It is the confession, not the priest, that gives us absolution."\n-Oscar Wilde
|
||||||
|
Icon=Dungeon Crawling White.jpg
|
||||||
|
Deck Type=constructed
|
||||||
|
[Main]
|
||||||
|
30 Archon of Absolution|ELD
|
||||||
|
30 Plains|ELD|3
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
[quest]
|
||||||
|
id=ELD Challenge: Beanstalk Giant
|
||||||
|
OpponentName=The Giants
|
||||||
|
AILife=20
|
||||||
|
Repeat=true
|
||||||
|
Wins=0
|
||||||
|
Card Reward=chosen card sets:ELD
|
||||||
|
Credit Reward=120
|
||||||
|
AIExtras=
|
||||||
|
HumanExtras=
|
||||||
|
[metadata]
|
||||||
|
Title=Beanstalk Giant
|
||||||
|
Difficulty=easy
|
||||||
|
Description=Fee-fi-fo-fum,\nI smell the blood of an Englishman,\nBe he alive, or be he dead\nI'll grind his bones to make my bread.
|
||||||
|
Icon=Dungeon Crawling Green.jpg
|
||||||
|
Deck Type=constructed
|
||||||
|
Name=ELD Challenge: Beanstalk Giant
|
||||||
|
[Main]
|
||||||
|
30 Beanstalk Giant|ELD|2
|
||||||
|
30 Forest|ELD|3
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
[quest]
|
||||||
|
id=ELD Challenge: Bonecrusher Giant
|
||||||
|
OpponentName=The Giants
|
||||||
|
AILife=20
|
||||||
|
Repeat=true
|
||||||
|
Wins=0
|
||||||
|
Card Reward=chosen card sets:ELD
|
||||||
|
Credit Reward=120
|
||||||
|
AIExtras=
|
||||||
|
HumanExtras=
|
||||||
|
[metadata]
|
||||||
|
Title=Bonecrusher Giant
|
||||||
|
Difficulty=medium
|
||||||
|
Description=Not every tale ends in glory.
|
||||||
|
Icon=Dungeon Crawling Red.jpg
|
||||||
|
Deck Type=constructed
|
||||||
|
Name=ELD Challenge: Bonecrusher Giant
|
||||||
|
[Main]
|
||||||
|
30 Bonecrusher Giant|ELD|2
|
||||||
|
30 Mountain|ELD|2
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
[quest]
|
||||||
|
id=ELD Challenge: Brazen Borrower
|
||||||
|
OpponentName=The Borrowers
|
||||||
|
AILife=20
|
||||||
|
Repeat=true
|
||||||
|
Wins=0
|
||||||
|
Card Reward=chosen card sets:ELD
|
||||||
|
Credit Reward=120
|
||||||
|
AIExtras=
|
||||||
|
HumanExtras=
|
||||||
|
[metadata]
|
||||||
|
Title=Brazen Borrower
|
||||||
|
Difficulty=medium
|
||||||
|
Description="Human beans are for Borrowers--like bread's for butter!"\n-Arrietty, Mary Norton's The Borrowers
|
||||||
|
Icon=Dungeon Crawling Blue.jpg
|
||||||
|
Deck Type=constructed
|
||||||
|
Name=ELD Challenge: Brazen Borrower
|
||||||
|
[Main]
|
||||||
|
30 Brazen Borrower|ELD|2
|
||||||
|
30 Island|ELD|1
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
[quest]
|
||||||
|
id=ELD Challenge: Brimstone Trebuchet
|
||||||
|
OpponentName=The Trebuchets
|
||||||
|
AILife=20
|
||||||
|
Repeat=true
|
||||||
|
Wins=0
|
||||||
|
Card Reward=chosen card sets:ELD
|
||||||
|
Credit Reward=120
|
||||||
|
AIExtras=
|
||||||
|
HumanExtras=
|
||||||
|
[metadata]
|
||||||
|
Title=Brimstone Trebuchet
|
||||||
|
Difficulty=easy
|
||||||
|
Description=Roses are red\nWater comes in liters\nTrebuchets can launch a 90kg stone\nOver 300 meters
|
||||||
|
Icon=Dungeon Crawling Red.jpg
|
||||||
|
Deck Type=constructed
|
||||||
|
Name=ELD Challenge: Brimstone Trebuchet
|
||||||
|
[Main]
|
||||||
|
30 Brimstone Trebuchet|ELD
|
||||||
|
4 Castle Embereth|ELD|1
|
||||||
|
26 Mountain|ELD|1
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
[quest]
|
||||||
|
id=ELD Challenge: Cauldron Familiar
|
||||||
|
OpponentName=The Familiars
|
||||||
|
AILife=20
|
||||||
|
Repeat=true
|
||||||
|
Wins=0
|
||||||
|
Card Reward=chosen card sets:ELD
|
||||||
|
Credit Reward=120
|
||||||
|
AIExtras=Midnight Clock
|
||||||
|
HumanExtras=
|
||||||
|
[metadata]
|
||||||
|
Title=Cauldron Familiar
|
||||||
|
Difficulty=medium
|
||||||
|
Description=Every day the cat returns to kill the same mouse, which sinks again into the cauldron's brew.
|
||||||
|
Icon=Dungeon Crawling Black.jpg
|
||||||
|
Deck Type=constructed
|
||||||
|
Name=ELD Challenge: Cauldron Familiar
|
||||||
|
[Main]
|
||||||
|
40 Cauldron Familiar|ELD
|
||||||
|
20 Swamp|ELD|1
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
[quest]
|
||||||
|
id=ELD Challenge: Clackbridge Troll
|
||||||
|
OpponentName=The Trolls
|
||||||
|
AILife=20
|
||||||
|
Repeat=true
|
||||||
|
Wins=0
|
||||||
|
Card Reward=chosen card sets:ELD
|
||||||
|
Credit Reward=120
|
||||||
|
AIExtras=Witch's Cottage
|
||||||
|
HumanExtras=
|
||||||
|
[metadata]
|
||||||
|
Title=Clackbridge Troll
|
||||||
|
Difficulty=medium
|
||||||
|
Description="Lolololo lol, lololol, lololol. La la la la yaah.\nTrolololol, la-la-la, la-la-la,\nOhoh hahahoh! Hahah hahahoh! Ohoh hahahoh! Hahah hahahoh!\nLolol lol lololol, lolol lol lololol, lolol lol lololol, lolol lolol!"\n-Eduard Khil
|
||||||
|
Icon=Dungeon Crawling Black.jpg
|
||||||
|
Deck Type=constructed
|
||||||
|
Name=ELD Challenge: Clackbridge Troll
|
||||||
|
[Main]
|
||||||
|
30 Clackbridge Troll|ELD|2
|
||||||
|
30 Swamp|ELD|1
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
[quest]
|
||||||
|
id=ELD Challenge: Clockwork Servant
|
||||||
|
OpponentName=The Servants
|
||||||
|
AILife=20
|
||||||
|
Repeat=true
|
||||||
|
Wins=0
|
||||||
|
Card Reward=chosen card sets:ELD
|
||||||
|
Credit Reward=120
|
||||||
|
AIExtras=Improbable Alliance
|
||||||
|
HumanExtras=
|
||||||
|
[metadata]
|
||||||
|
Title=Clockwork Servant
|
||||||
|
Difficulty=medium
|
||||||
|
Description=The servants start with an Improbable Alliance.
|
||||||
|
Icon=Dungeon Crawling Colorless.jpg
|
||||||
|
Deck Type=constructed
|
||||||
|
Name=ELD Challenge: Clockwork Servant
|
||||||
|
[Main]
|
||||||
|
30 Clockwork Servant|ELD
|
||||||
|
30 Mountain|ELD|3
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
[quest]
|
||||||
|
id=ELD Challenge: Eye Collector
|
||||||
|
OpponentName=The Collectors
|
||||||
|
AILife=20
|
||||||
|
Repeat=true
|
||||||
|
Wins=0
|
||||||
|
Card Reward=chosen card sets:ELD
|
||||||
|
Credit Reward=120
|
||||||
|
AIExtras=
|
||||||
|
HumanExtras=
|
||||||
|
[metadata]
|
||||||
|
Title=Eye Collector
|
||||||
|
Difficulty=easy
|
||||||
|
Description="Lord Rankle will see you now--all he asks is a small token of tribute."
|
||||||
|
Icon=Dungeon Crawling Black.jpg
|
||||||
|
Deck Type=constructed
|
||||||
|
Name=ELD Challenge: Eye Collector
|
||||||
|
[Main]
|
||||||
|
40 Eye Collector|ELD
|
||||||
|
20 Swamp|ELD|4
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
[quest]
|
||||||
|
id=ELD Challenge: Fae of Wishes
|
||||||
|
OpponentName=The Fae
|
||||||
|
AILife=20
|
||||||
|
Repeat=true
|
||||||
|
Wins=0
|
||||||
|
Card Reward=chosen card sets:ELD
|
||||||
|
Credit Reward=120
|
||||||
|
AIExtras=Lucky Clover
|
||||||
|
HumanExtras=
|
||||||
|
[metadata]
|
||||||
|
Title=Fae of Wishes
|
||||||
|
Difficulty=medium
|
||||||
|
Description=The fae start with a Lucky Clover.
|
||||||
|
Icon=Dungeon Crawling Blue.jpg
|
||||||
|
Deck Type=constructed
|
||||||
|
Name=ELD Challenge: Fae of Wishes
|
||||||
|
[Main]
|
||||||
|
30 Fae of Wishes|ELD|2
|
||||||
|
30 Island|ELD|4
|
||||||
|
[Sideboard]
|
||||||
|
100 Heraldic Banner|ELD
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
[quest]
|
||||||
|
id=ELD Challenge: Faerie Guidemother
|
||||||
|
OpponentName=The Guidemothers
|
||||||
|
AILife=20
|
||||||
|
Repeat=true
|
||||||
|
Wins=0
|
||||||
|
Card Reward=chosen card sets:ELD
|
||||||
|
Credit Reward=120
|
||||||
|
AIExtras=The Magic Mirror
|
||||||
|
HumanExtras=
|
||||||
|
[metadata]
|
||||||
|
Title=Faerie Guidemother
|
||||||
|
Difficulty=medium
|
||||||
|
Description=The faeries start with the Magic Mirror.\n\n"Somebody bring me something deep fried and smothered in chocolate!"\n-The Fairy Godmother, Shrek 2
|
||||||
|
Icon=Dungeon Crawling White.jpg
|
||||||
|
Deck Type=constructed
|
||||||
|
Name=ELD Challenge: Faerie Guidemother
|
||||||
|
[Main]
|
||||||
|
40 Faerie Guidemother|ELD|2
|
||||||
|
20 Plains|ELD|4
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user