Merge remote-tracking branch 'upstream/master' into collector-number-in-card-list-and-card-db-refactoring

This commit is contained in:
leriomaggio
2021-08-13 11:25:38 +01:00
455 changed files with 9122 additions and 231 deletions

View File

@@ -6,7 +6,7 @@
<parent>
<artifactId>forge</artifactId>
<groupId>forge</groupId>
<version>1.6.44-SNAPSHOT</version>
<version>1.6.45-SNAPSHOT</version>
</parent>
<artifactId>forge-ai</artifactId>

View File

@@ -1269,7 +1269,7 @@ public class AiBlockController {
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;
int chance = (int)Math.max(minRandomTradeChance, (maxRandomTradeChance - (Math.max(5, ai.getLife() - 5)) * chanceStep));
if (chance > maxRandomTradeChance) {

View File

@@ -736,6 +736,7 @@ public class ComputerUtil {
CardCollection typeList = CardLists.getValidCards(ai.getCardsIn(ZoneType.Battlefield), type.split(";"), activate.getController(), activate, sa);
// don't bounce the card we're pumping
// TODO unless it can be used as a save
typeList = ComputerUtilCost.paymentChoicesWithoutTargets(typeList, sa, ai);
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
public static boolean wantMulligan(Player ai, int cardsToReturn) {
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) {

View File

@@ -1212,6 +1212,8 @@ public abstract class GameState {
p.setLandsPlayedThisTurn(landsPlayed);
p.setLandsPlayedLastTurn(landsPlayedLastTurn);
p.clearPaidForSA();
for (Entry<ZoneType, CardCollectionView> kv : playerCards.entrySet()) {
PlayerZone zone = p.getZone(kv.getKey());
if (kv.getKey() == ZoneType.Battlefield) {

View File

@@ -12,6 +12,7 @@ import forge.ai.AiPlayDecision;
import forge.ai.ComputerUtil;
import forge.ai.ComputerUtilAbility;
import forge.ai.ComputerUtilCard;
import forge.ai.ComputerUtilCost;
import forge.ai.SpecialCardAi;
import forge.ai.SpellAbilityAi;
import forge.game.Game;
@@ -35,7 +36,6 @@ import forge.game.zone.ZoneType;
public class CopyPermanentAi extends SpellAbilityAi {
@Override
protected boolean canPlayAI(Player aiPlayer, SpellAbility sa) {
// TODO - I'm sure someone can do this AI better
Card source = sa.getHostCard();
PhaseHandler ph = aiPlayer.getGame().getPhaseHandler();
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")) {
sa.resetTargets();
Player targetingPlayer = AbilityUtils.getDefinedPlayers(source, sa.getParam("TargetingPlayer"), sa).get(0);
@@ -106,7 +113,7 @@ public class CopyPermanentAi extends SpellAbilityAi {
return false;
}
} else {
return this.doTriggerAINoCost(aiPlayer, sa, false);
return doTriggerAINoCost(aiPlayer, sa, false);
}
}

View File

@@ -6,7 +6,7 @@
<parent>
<artifactId>forge</artifactId>
<groupId>forge</groupId>
<version>1.6.44-SNAPSHOT</version>
<version>1.6.45-SNAPSHOT</version>
</parent>
<artifactId>forge-core</artifactId>

View File

@@ -477,7 +477,7 @@ public final class CardType implements Comparable<CardType>, CardTypeView {
}
// we assume that changes are already correctly ordered (taken from TreeMap.values())
for (final CardChangedType ct : changedCardTypes) {
if(null == newType)
if (null == newType)
newType = new CardType(CardType.this);
if (ct.isRemoveCardTypes()) {

View File

@@ -6,7 +6,7 @@
<parent>
<artifactId>forge</artifactId>
<groupId>forge</groupId>
<version>1.6.44-SNAPSHOT</version>
<version>1.6.45-SNAPSHOT</version>
</parent>
<artifactId>forge-game</artifactId>

View File

@@ -74,7 +74,7 @@ public enum Direction {
* {@inheritDoc}
*/
public String toString() {
switch(this) {
switch (this) {
case Left:
return LEFT;
case Right:

View File

@@ -39,6 +39,7 @@ import com.google.common.collect.Multimap;
import com.google.common.collect.Table;
import com.google.common.eventbus.EventBus;
import forge.GameCommand;
import forge.card.CardRarity;
import forge.card.CardStateName;
import forge.card.CardType.Supertype;
@@ -99,6 +100,8 @@ public class Game {
public final Phase endOfTurn;
public final Untap untap;
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 CostPaymentStack costPaymentStack = new CostPaymentStack();
private final PhaseHandler phaseHandler;
@@ -118,6 +121,9 @@ public class Game {
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 monarchBeginTurn = null;
@@ -305,6 +311,8 @@ public class Game {
endOfCombat = new Phase(PhaseType.COMBAT_END);
endOfTurn = new Phase(PhaseType.END_OF_TURN);
sbaCheckedCommandList = new ArrayList<>();
// update players
view.updatePlayers(this);
@@ -379,6 +387,17 @@ public class Game {
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() {
return phaseHandler;
}
@@ -1102,4 +1121,39 @@ public class Game {
public void clearCounterAddedThisTurn() {
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 its being drawn,
// its 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));
}
}

View File

@@ -1229,7 +1229,7 @@ public class GameAction {
}
// Rule 704.5g - Destroy due to lethal damage
// 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) {
desCreats = new CardCollection();
}
@@ -1371,6 +1371,9 @@ public class GameAction {
if (!refreeze) {
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) {

View File

@@ -338,7 +338,6 @@ public final class AbilityFactory {
final String min = mapParams.containsKey("TargetMin") ? mapParams.get("TargetMin") : "1";
final String max = mapParams.containsKey("TargetMax") ? mapParams.get("TargetMax") : "1";
// TgtPrompt now optional
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.
*/
private static final void initializeParams(final SpellAbility sa) {
if (sa.hasParam("NonBasicSpell")) {
sa.setBasicSpell(false);
}
@@ -456,7 +454,6 @@ public final class AbilityFactory {
* @return a {@link forge.game.spellability.AbilitySub} object.
*/
private static final AbilitySub getSubAbility(CardState state, String sSub, final IHasSVars sVarHolder) {
if (sVarHolder.hasSVar(sSub)) {
return (AbilitySub) AbilityFactory.getAbility(state, sSub, sVarHolder);
}
@@ -484,7 +481,7 @@ public final class AbilityFactory {
}
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");
CardState leftState = card.getState(CardStateName.LeftSplit);

View File

@@ -25,6 +25,7 @@ public enum AbilityKey {
AttackedTarget("AttackedTarget"),
Blocker("Blocker"),
Blockers("Blockers"),
CanReveal("CanReveal"),
CastSA("CastSA"),
CastSACMC("CastSACMC"),
Card("Card"),

View File

@@ -2456,11 +2456,11 @@ public class AbilityUtils {
partyTypes.removeAll(chosenParty.keySet());
// 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);
types.retainAll(partyTypes);
for(String type : types) {
for (String type : types) {
chosenParty.put(type, multi);
partyTypes.remove(type);
break;

View File

@@ -753,10 +753,10 @@ public abstract class SpellAbilityEffect {
} else if ("UntilUntaps".equals(duration)) {
host.addUntapCommand(until);
} else if ("UntilUnattached".equals(duration)) {
sa.getHostCard().addUnattachCommand(until);
host.addUnattachCommand(until);
} else if ("UntilFacedown".equals(duration)) {
sa.getHostCard().addFacedownCommand(until);
}else {
host.addFacedownCommand(until);
} else {
game.getEndOfTurn().addUntil(until);
}
}

View File

@@ -919,8 +919,7 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
String prompt;
if (defined) {
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());
}
String message = MessageUtil.formatMessage(prompt , decider, player);

View File

@@ -283,31 +283,24 @@ public class EffectEffect extends SpellAbilityEffect {
if ((duration == null) || duration.equals("EndOfTurn")) {
game.getEndOfTurn().addUntil(endEffect);
}
else if (duration.equals("UntilHostLeavesPlay")) {
} else if (duration.equals("UntilHostLeavesPlay")) {
hostCard.addLeavesPlayCommand(endEffect);
}
else if (duration.equals("UntilHostLeavesPlayOrEOT")) {
} else if (duration.equals("UntilHostLeavesPlayOrEOT")) {
game.getEndOfTurn().addUntil(endEffect);
hostCard.addLeavesPlayCommand(endEffect);
}
else if (duration.equals("UntilYourNextTurn")) {
} else if (duration.equals("UntilYourNextTurn")) {
game.getCleanup().addUntil(controller, endEffect);
}
else if (duration.equals("UntilYourNextUpkeep")) {
} else if (duration.equals("UntilYourNextUpkeep")) {
game.getUpkeep().addUntil(controller, endEffect);
}
else if (duration.equals("UntilEndOfCombat")) {
} else if (duration.equals("UntilEndOfCombat")) {
game.getEndOfCombat().addUntil(endEffect);
}
else if (duration.equals("UntilTheEndOfYourNextTurn")) {
} else if (duration.equals("UntilTheEndOfYourNextTurn")) {
if (game.getPhaseHandler().isPlayerTurn(controller)) {
game.getEndOfTurn().registerUntilEnd(controller, endEffect);
} else {
game.getEndOfTurn().addUntilEnd(controller, endEffect);
}
}
else if (duration.equals("ThisTurnAndNextTurn")) {
} else if (duration.equals("ThisTurnAndNextTurn")) {
game.getUntap().addAt(new GameCommand() {
private static final long serialVersionUID = -5054153666503075717L;
@@ -316,6 +309,8 @@ public class EffectEffect extends SpellAbilityEffect {
game.getEndOfTurn().addUntil(endEffect);
}
});
} else if (duration.equals("UntilStateBasedActionChecked")) {
game.addSBACheckedCommand(endEffect);
}
}

View File

@@ -46,6 +46,10 @@ public class RepeatEachEffect extends SpellAbilityEffect {
final Player player = sa.getActivatingPlayer();
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");

View File

@@ -2005,7 +2005,6 @@ public class Card extends GameEntity implements Comparable<Card>, IHasSVars {
} else if (keyword.startsWith("Strive") || keyword.startsWith("Escalate")
|| keyword.startsWith("ETBReplacement")
|| keyword.startsWith("Affinity")
|| keyword.equals("CARDNAME enters the battlefield tapped.")
|| keyword.startsWith("UpkeepCost")) {
} else if (keyword.equals("Provoke") || keyword.equals("Ingest") || keyword.equals("Unleash")
|| 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()) {
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() {
@@ -3521,7 +3526,6 @@ public class Card extends GameEntity implements Comparable<Card>, IHasSVars {
final boolean removeLandTypes, final boolean removeCreatureTypes, final boolean removeArtifactTypes,
final boolean removeEnchantmentTypes,
final long timestamp, final boolean updateView, final boolean cda) {
(cda ? changedCardTypesCharacterDefining : changedCardTypes).put(timestamp, new CardChangedType(
addType, removeType, removeSuperTypes, removeCardTypes, removeSubTypes,
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)
@Override
public final int staticReplaceDamage(final int damage, final Card source, final boolean isCombat) {
int restDamage = damage;
for (Card c : getGame().getCardsIn(ZoneType.Battlefield)) {
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
* applied.
* This function handles damage after replacement and prevention effects are applied.
*/
@Override
public final int addDamageAfterPrevention(final int damageIn, final Card source, final boolean isCombat, GameEntityCounterTable counterTable) {

View File

@@ -116,7 +116,6 @@ public class CardFactory {
//out.setFaceDown(in.isFaceDown());
return out;
}
/**
@@ -740,7 +739,6 @@ public class CardFactory {
}
}
if (sa.hasParam("GainThisAbility") && (sa instanceof SpellAbility)) {
SpellAbility root = ((SpellAbility) sa).getRootAbility();

View File

@@ -1421,7 +1421,14 @@ public class CardProperty {
}
}
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)) {
return false;
}

View File

@@ -602,7 +602,7 @@ public class Combat {
for (Card pw : getDefendingPlaneswalkers()) {
if (pw.equals(c)) {
Multimap<GameEntity, AttackingBand> attackerBuffer = ArrayListMultimap.create();
Collection<AttackingBand> bands = attackedByBands.get(pw);
Collection<AttackingBand> bands = attackedByBands.get(c);
for (AttackingBand abPW : bands) {
unregisterDefender(c, abPW);
// Rule 506.4c workaround to keep creatures in combat
@@ -613,6 +613,7 @@ public class Combat {
}
bands.clear();
attackedByBands.putAll(attackerBuffer);
break;
}
}

View File

@@ -425,7 +425,9 @@ public class CombatUtil {
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)) {
return false;
}

View File

@@ -67,8 +67,7 @@ public class CostExile extends CostPartWithList {
CardCollectionView typeList;
if (this.sameZone) {
typeList = game.getCardsIn(this.from);
}
else {
} else {
typeList = payer.getCardsIn(this.from);
}
@@ -140,7 +139,7 @@ public class CostExile extends CostPartWithList {
return list.contains(source);
}
if (!type.contains("X")) {
if (!type.contains("X") || ability.getXManaCostPaid() != null) {
list = CardLists.getValidCards(list, type.split(";"), payer, source, ability);
}

View File

@@ -155,7 +155,6 @@ public class CostPartMana extends CostPart {
@Override
public boolean payAsDecided(Player payer, PaymentDecision pd, SpellAbility sa) {
// TODO Auto-generated method stub
sa.clearManaPaid();
// decision not used here, the whole payment is interactive!

View File

@@ -29,6 +29,7 @@ public abstract class AbstractMulligan {
public void mulligan() {
CardCollection toMulligan = new CardCollection(player.getCardsIn(ZoneType.Hand));
if (toMulligan.isEmpty()) return;
revealPreMulligan(toMulligan);
for (final Card c : toMulligan) {
player.getGame().getAction().moveToLibrary(c, null);

View File

@@ -1219,20 +1219,6 @@ public class Player extends GameEntity implements Comparable<Player> {
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) {
final Map<AbilityKey, Object> repParams = AbilityKey.mapFromAffected(this);
repParams.put(AbilityKey.Source, cause);
@@ -1300,12 +1286,25 @@ public class Player extends GameEntity implements Comparable<Player> {
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) {
return drawCards(n, null);
}
public final CardCollectionView drawCards(final int n, SpellAbility cause) {
final CardCollection drawn = new CardCollection();
final Map<Player, CardCollection> toReveal = Maps.newHashMap();
// Replacement effects
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)
final boolean gameStarted = game.getAge().ordinal() > GameStage.Mulligan.ordinal();
final Map<Player, CardCollection> toReveal = Maps.newHashMap();
for (int i = 0; i < n; i++) {
if (gameStarted && !canDraw()) {
@@ -1358,7 +1358,6 @@ public class Player extends GameEntity implements Comparable<Player> {
}
List<Player> pList = Lists.newArrayList();
for (Player p : getAllOtherPlayers()) {
if (c.mayPlayerLook(p)) {
pList.add(p);
@@ -1385,8 +1384,16 @@ public class Player extends GameEntity implements Comparable<Player> {
}
view.updateNumDrawnThisTurn(this);
// Run triggers
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.Number, numDrawnThisTurn);
runParams.put(AbilityKey.Player, this);
@@ -3164,7 +3171,11 @@ public class Player extends GameEntity implements Comparable<Player> {
paidForStack.push(sa);
}
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() {

View File

@@ -2070,7 +2070,7 @@ public abstract class SpellAbility extends CardTraitBase implements ISpellAbilit
return false;
}
public void checkActivationResloveSubs() {
public void checkActivationResolveSubs() {
if (hasParam("ActivationNumberSacrifice")) {
String comp = getParam("ActivationNumberSacrifice");
int right = Integer.parseInt(comp.substring(2));
@@ -2090,7 +2090,6 @@ public abstract class SpellAbility extends CardTraitBase implements ISpellAbilit
public List<AbilitySub> getChosenList() {
return chosenList;
}
public void setChosenList(List<AbilitySub> choices) {
chosenList = choices;
}

View File

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

View File

@@ -103,8 +103,8 @@ public class TriggerChangesZone extends Trigger {
if (hasParam("ValidCard")) {
Card moved = (Card) runParams.get(AbilityKey.Card);
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) || moved.getZone().is(ZoneType.Command));
leavesLKIZone |= "Exile".equals(getParam("Origin")) && (moved.getZone().is(ZoneType.Graveyard) ||
moved.getZone().is(ZoneType.Command) || hasParam("UseLKI"));
if (leavesLKIZone) {
moved = (Card) runParams.get(AbilityKey.CardLKI);

View File

@@ -86,6 +86,18 @@ public class TriggerDrawn extends Trigger {
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;
}

View File

@@ -555,4 +555,11 @@ public class WrappedAbility extends Ability {
public void setCardState(CardState state) {
sa.setCardState(state);
}
public List<AbilitySub> getChosenList() {
return sa.getChosenList();
}
public void setChosenList(List<AbilitySub> choices) {
sa.setChosenList(choices);
}
}

View File

@@ -134,7 +134,7 @@ public class MagicStack /* extends MyObservable */ implements Iterable<SpellAbil
if (!ability.isCopied()) {
// Copied abilities aren't activated, so they shouldn't change these values
source.addAbilityActivated(ability);
ability.checkActivationResloveSubs();
ability.checkActivationResolveSubs();
}
// if the ability is a spell, but not a copied spell and its not already

View File

@@ -6,7 +6,7 @@
<packaging.type>jar</packaging.type>
<build.min.memory>-Xms1024m</build.min.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.alias>alias</sign.alias>
<sign.storepass>storepass</sign.storepass>
@@ -19,7 +19,7 @@
<parent>
<artifactId>forge</artifactId>
<groupId>forge</groupId>
<version>1.6.44-SNAPSHOT</version>
<version>1.6.45-SNAPSHOT</version>
</parent>
<artifactId>forge-gui-android</artifactId>

View File

@@ -4,7 +4,7 @@
<parent>
<artifactId>forge</artifactId>
<groupId>forge</groupId>
<version>1.6.44-SNAPSHOT</version>
<version>1.6.45-SNAPSHOT</version>
</parent>
<artifactId>forge-gui-desktop</artifactId>

View File

@@ -256,8 +256,10 @@ public class ImageCache {
legalString = "Illus. " + ipc.getArtist() + " ©" + year + " WOTC";
}
FCardImageRenderer.drawCardImage(original.createGraphics(), card, altState, width, height, art, legalString);
if (art != null || !fetcherEnabled)
_CACHE.put(originalKey, original);
// Skip store cache since the rendering speed seems to be fast enough
// Also the scaleImage below will already cache re-sized image for CardPanel anyway
// if (art != null || !fetcherEnabled)
// _CACHE.put(originalKey, original);
} else {
original = _defaultImage;
}

View File

@@ -64,6 +64,7 @@ public class CardFaceSymbols {
MANA_IMAGES.put("W", FSkin.getImage(FSkinProp.IMG_MANA_W));
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("P", FSkin.getImage(FSkinProp.IMG_MANA_PHRYX));
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("PU", FSkin.getImage(FSkinProp.IMG_MANA_PHRYX_U));

View File

@@ -1405,6 +1405,7 @@ public class FSkin {
addEncodingSymbol("2/B", FSkinProp.IMG_MANA_2B);
addEncodingSymbol("2/R", FSkinProp.IMG_MANA_2R);
addEncodingSymbol("2/G", FSkinProp.IMG_MANA_2G);
addEncodingSymbol("P", FSkinProp.IMG_MANA_PHRYX);
addEncodingSymbol("P/W", FSkinProp.IMG_MANA_PHRYX_W);
addEncodingSymbol("P/U", FSkinProp.IMG_MANA_PHRYX_U);
addEncodingSymbol("P/B", FSkinProp.IMG_MANA_PHRYX_B);

View File

@@ -6,13 +6,13 @@
<packaging.type>jar</packaging.type>
<build.min.memory>-Xms128m</build.min.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>
<parent>
<artifactId>forge</artifactId>
<groupId>forge</groupId>
<version>1.6.44-SNAPSHOT</version>
<version>1.6.45-SNAPSHOT</version>
</parent>
<artifactId>forge-gui-ios</artifactId>

View File

@@ -4,7 +4,7 @@
<parent>
<artifactId>forge</artifactId>
<groupId>forge</groupId>
<version>1.6.44-SNAPSHOT</version>
<version>1.6.45-SNAPSHOT</version>
</parent>
<artifactId>forge-gui-mobile-dev</artifactId>

View File

@@ -4,7 +4,7 @@
<parent>
<artifactId>forge</artifactId>
<groupId>forge</groupId>
<version>1.6.44-SNAPSHOT</version>
<version>1.6.45-SNAPSHOT</version>
</parent>
<artifactId>forge-gui-mobile</artifactId>

View File

@@ -46,7 +46,7 @@ import forge.util.Localizer;
import forge.util.Utils;
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 Clipboard clipboard;

View File

@@ -62,6 +62,7 @@ public enum FSkinImage implements FImage {
MANA_HYBRID_UR (FSkinProp.IMG_MANA_HYBRID_UR, SourceFile.MANAICONS),
MANA_HYBRID_WB (FSkinProp.IMG_MANA_HYBRID_WB, 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_W (FSkinProp.IMG_MANA_PHRYX_W, SourceFile.MANAICONS),
MANA_PHRYX_R (FSkinProp.IMG_MANA_PHRYX_R, SourceFile.MANAICONS),

View File

@@ -43,6 +43,7 @@ public class TextRenderer {
symbolLookup.put("2/B", FSkinImage.MANA_2B);
symbolLookup.put("2/R", FSkinImage.MANA_2R);
symbolLookup.put("2/G", FSkinImage.MANA_2G);
symbolLookup.put("P", FSkinImage.MANA_PHRYX);
symbolLookup.put("P/W", FSkinImage.MANA_PHRYX_W);
symbolLookup.put("P/U", FSkinImage.MANA_PHRYX_U);
symbolLookup.put("P/B", FSkinImage.MANA_PHRYX_B);

View File

@@ -56,6 +56,7 @@ public class CardFaceSymbols {
MANA_IMAGES.put("W", FSkinImage.MANA_W);
MANA_IMAGES.put("WB", FSkinImage.MANA_HYBRID_WB);
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("PR", FSkinImage.MANA_PHRYX_R);
MANA_IMAGES.put("PU", FSkinImage.MANA_PHRYX_U);

View File

@@ -419,6 +419,7 @@ public class VStack extends FDropDown {
newtext = TextUtil.fastReplace(TextUtil.fastReplace(newtext, " and .", ".")," .", ".");
newtext = TextUtil.fastReplace(TextUtil.fastReplace(newtext, "- - ", "- "), ". .", ".");
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);
}
}

View File

@@ -4,7 +4,7 @@
<parent>
<artifactId>forge</artifactId>
<groupId>forge</groupId>
<version>1.6.44-SNAPSHOT</version>
<version>1.6.45-SNAPSHOT</version>
</parent>
<artifactId>forge-gui</artifactId>

View File

@@ -1,5 +1,8 @@
#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
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.
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. ***

View File

@@ -3,12 +3,9 @@ ManaCost:2 B
Types:Legendary Creature God
PT:6/6
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.
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 | ConditionCheckSVar$ X | ConditionSVarCompare$ LT2 | SubAbility$ DBDraw
SVar:DBDraw:DB$ Draw | NumCards$ 1 | ConditionCheckSVar$ X | ConditionSVarCompare$ LT2 | SubAbility$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:X:Remembered$Amount
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:DBSacSelf:DB$ Sacrifice | Defined$ Self | UnlessCost$ Mandatory ExileFromGrave<2/Card> | UnlessPayer$ You | UnlessResolveSubs$ WhenNotPaid | SubAbility$ DBDraw
SVar:DBDraw:DB$ Draw | NumCards$ 1
AlternateMode:Modal
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.

View File

@@ -3,7 +3,7 @@ ManaCost:1 G
Types:Creature Elf Warrior
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.
SVar:TrigPutCounter:DB$PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ 1
SVar:TrigPutCounter:DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ 1
SVar:BuffedBy:Elf
SVar:PlayMain1:TRUE
SVar:Picture:http://www.wizards.com/global/images/magic/general/elvish_vanguard.jpg

View File

@@ -3,7 +3,7 @@ ManaCost:2 U U
Types:Legendary Creature Zombie God
PT:4/5
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: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
@@ -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.
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.

View File

@@ -4,7 +4,7 @@ Types:Creature Devil
PT:3/3
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.
SVar:TrigDealDamage:DB$DealDamage | Defined$ TriggeredDefendingPlayer | NumDmg$ 1
SVar:TrigDealDamage:DB$ DealDamage | Defined$ TriggeredDefender | NumDmg$ 1
SVar:HasAttackEffect:TRUE
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.

View File

@@ -5,7 +5,7 @@ PT:6/5
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.
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: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.

View File

@@ -3,8 +3,10 @@ ManaCost:1 U B
Types:Enchantment Saga
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:DBRepeatEach:DB$ RepeatEach | RepeatPlayers$ Player | RepeatSubAbility$ DBExile
SVar:DBExile:DB$ ChangeZone | Origin$ Graveyard | Destination$ Exile | ChangeType$ Creature.RememberedPlayerCtrl,Planeswalker.RememberedPlayerCtrl | ChangeNum$ 1 | Chooser$ You | Optional$ True | Hidden$ True
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: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: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

View File

@@ -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.
SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ komas_coil | TokenOwner$ You
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:DBConstrict:DB$ Pump | Defined$ ParentTarget | KW$ HIDDEN CARDNAME's activated abilities can't be activated.
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. | StackDescription$ None
SVar:DBPump:DB$ Pump | Defined$ Self | KW$ Indestructible | SpellDescription$ CARDNAME gains indestructible until end of turn.
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.

View File

@@ -2,9 +2,9 @@ Name:Living Death
ManaCost:3 B B
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.
SVar:DBSacrifice:DB$SacrificeAll | ValidCards$ Creature | SubAbility$ DBReturn
SVar:DBReturn:DB$ChangeZone | Defined$ Remembered | Origin$ Exile | Destination$ Battlefield | SubAbility$ DBCleanup
SVar:DBCleanup:DB$Cleanup | ClearRemembered$ True
SVar:DBSacrifice:DB$ SacrificeAll | ValidCards$ Creature | SubAbility$ DBReturn
SVar:DBReturn:DB$ ChangeZone | Defined$ Remembered | Origin$ Exile | Destination$ Battlefield | SubAbility$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
AI:RemoveDeck:Random
SVar:IsReanimatorCard:TRUE
SVar:Picture:http://www.wizards.com/global/images/magic/general/living_death.jpg

View File

@@ -3,6 +3,6 @@ ManaCost:1 U
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.
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: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: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 | 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.

View File

@@ -3,6 +3,6 @@ ManaCost:3 W W
Types:Creature Angel
PT:3/3
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
Oracle:Flying\nWhenever Planar Ally attacks, venture into the dungeon. (Enter the first room or advance to the next room.)

View File

@@ -1,7 +1,6 @@
Name:Prey Upon
ManaCost:G
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.)
SVar:DBFight:DB$ Fight | Defined$ ParentTarget | ValidTgts$ Creature.YouDontCtrl | TgtPrompt$ Choose target creature you don't control
SVar:Picture:http://www.wizards.com/global/images/magic/general/prey_upon.jpg
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 | StackDescription$ fights target creature you don't control [{c:ThisTargetedCard}]. (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.)

View File

@@ -1,7 +1,7 @@
Name:Primitive Etchings
ManaCost:2 G G
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: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

View File

@@ -1,7 +1,7 @@
Name:Ral's Dispersal
ManaCost:3 U U
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
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.

View File

@@ -1,7 +1,7 @@
Name:Rowen
ManaCost:2 G G
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: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

View File

@@ -4,6 +4,6 @@ Types:Creature Dwarf Warrior
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.
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
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.

View File

@@ -1,6 +1,6 @@
Name:Soul Snare
ManaCost:W
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
Oracle:{W}, Sacrifice Soul Snare: Exile target creature that's attacking you or a planeswalker you control.

View File

@@ -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.
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:AIPlayForSub:True
AI:RemoveDeck:All
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.

View File

@@ -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.
SVar:DBLoseLife:DB$ LoseLife | Defined$ Player.IsRemembered | LifeAmount$ X
SVar:X:Count$Valid Creature.RememberedPlayerCtrl
SVar:AIPlayForSub:True
AI:RemoveDeck:Random
SVar:Picture:http://www.wizards.com/global/images/magic/general/stronghold_discipline.jpg
Oracle:Each player loses 1 life for each creature they control.

View File

@@ -15,7 +15,7 @@ Name:Toralf's Hammer
ManaCost:1 R
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 owners 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
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

View File

@@ -2,6 +2,6 @@ Name:Tragic Lesson
ManaCost:2 U
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
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
Oracle:Draw two cards. Then discard a card unless you return a land you control to its owner's hand.

View File

@@ -5,7 +5,6 @@ A:SP$ RepeatEach | Cost$ 6 R G | RepeatPlayers$ Player.Opponent | RepeatSubAbili
SVar:DmgOpp:DB$ DealDamage | Defined$ Remembered | NumDmg$ X
SVar:X:Count$Valid Land.RememberedPlayerCtrl
K:TypeCycling:Basic:2
SVar:AIPlayForSub:True
AI:RemoveDeck:All
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.)

View File

@@ -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.
SVar:TyphoonDmg:DB$ DealDamage | Defined$ Remembered | NumDmg$ X
SVar:X:Count$Valid Island.RememberedPlayerCtrl
SVar:AIPlayForSub:True
AI:RemoveDeck:Random
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.

View File

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

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

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

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

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

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

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

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

View File

@@ -3,5 +3,5 @@ ManaCost:2 B
Types:Legendary Creature Demon Rogue
K:Deathtouch
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.)

View File

@@ -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.
SVar:X:Count$Valid Knight.YouCtrl
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.)
SVar:TrigPump:DB$ Pump | ValidTgts$ Knight.YouCtrl+Other | TgtPrompt$ Select another target Knight you control | KW$ Indestructible
DeckHints:Type$Knight

View 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

View File

@@ -6,7 +6,9 @@ Type=Promo
ScryfallCode=PJ21
[cards]
1 M Morophon, the Boundless @Svetlin Velinov
5 M The Gitrog Monster @Nils Hamm
6 R Grand Arbiter Augustin IV @Matt Stewart
7 M Karlov of the Ghost Council @Wisnu Tan
9 M Nicol Bolas, the Ravager @Lie Setiawan
10 M Zacama, Primal Calamity @Yigit Koroglu

View File

@@ -1,42 +1,793 @@
[metadata]
Code=J21
Date=2021-08-12
Date=2021-08-26
Name=Jumpstart: Historic Horizons
Type=Draft
ScryfallCode=J21
[cards]
0 C Baffling Defenses
0 U Boneyard Aberration
0 C Bounty of the Deep
0 M Davriel, Soul Broker
0 C Davriel's Withering
0 C Ethereal Grasp
0 C Faceless Agent
0 M Freyalise, Skyshroud Partisan
0 M Kiora, the Tide's Fury
0 C Leonin Sanctifier
0 C Longtusk Stalker
0 C Lumbering Lightshield
0 R Managorger Phoenix
0 U Manor Guardian
0 C Mentor of Evos Isle
0 C Plaguecrafter's Familiar
0 R Pool of Vigorous Growth
0 C Reckless Ringleader
0 C Sarkhan's Scorn
0 M Sarkhan, Wanderer to Shiv
0 C Scion of Shiv
0 U Shoreline Scout
0 C Skyshroud Ambush
0 U Skyshroud Lookout
0 U Static Discharge
0 R Subversive Acolyte
0 M Teyo, Aegis Adept
0 R Tome of the Infinite
0 C Veteran Charger
0 U Wingsteed Trainer
1 C Faceless Agent @Nicholas Gregory
2 C Baffling Defenses @Andrey Kuzinskiy
3 R Benalish Partisan @Francisco Miyara
4 C Leonin Sanctifier @Jokubas Uogintas
5 C Lumbering Lightshield @Leanna Crossan
6 M Teyo, Aegis Adept @Billy Christian
7 U Wingsteed Trainer @Valera Lutfullina
8 C Bounty of the Deep @Olena Richards
9 C Ethereal Grasp @Miranda Meeks
10 M Kiora, the Tide's Fury @Magali Villeneuve
11 C Mentor of Evos Isle @Shreya Shetty
12 U Shoreline Scout @Shreya Shetty
13 R Tome of the Infinite @Joseph Meehan
14 U Boneyard Aberration @Slawomir Maniak
15 M Davriel, Soul Broker @Justine Cruz
16 C Davriel's Withering @Alex Brock
17 U Manor Guardian @Slawomir Maniak
18 C Plaguecrafter's Familiar @Nicholas Gregory
19 R Subversive Acolyte @Darren Tan
20 R Managorger Phoenix @Brian Valeza
21 C Reckless Ringleader @Brian Valeza
22 C Sarkhan's Scorn @Daarken
23 M Sarkhan, Wanderer to Shiv @Grzegorz Rutkowski
24 C Scion of Shiv @Grzegorz Rutkowski
25 U Static Discharge @Liiga Smilshkalne
26 M Freyalise, Skyshroud Partisan @Daarken
27 U Longtusk Stalker @Vincent Christiaens
28 R Pool of Vigorous Growth @Jokubas Uogintas
29 C Skyshroud Ambush @Andreas Zafiratos
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]
u_8_8_kraken

View File

@@ -321,6 +321,12 @@ ScryfallCode=SLD
573 C Forest @Alayna Danner
573 C Forest @Alayna Danner
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]
b_1_1_faerie_rogue_flying

View File

@@ -4,5 +4,5 @@ Type:Digital
Subtype:Arena
Effective:2019-11-21
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

View File

@@ -621,7 +621,8 @@ lblNetArchivePioneerDecks=ネットアーカイブデッキ パイオニア
lblNetArchiveModernDecks=ネットアーカイブデッキ モダン
lblNetArchiveLegacyDecks=ネットアーカイブデッキ レガシー
lblNetArchiveVintageDecks=ネットアーカイブデッキ ビンテージ
lblNetArchiveBlockDecks=ネットアーカイブデッキ パウパー
lblNetArchiveBlockDecks=ネットアーカイブデッキ ブロック
lblNetArchivePauperDecks=ネットアーカイブデッキ パウパー
#VSubmenuTutorial
lblTutorial=チュートリアル
lblTutorialMode=チュートリアルモード

View File

@@ -621,7 +621,8 @@ lblNetArchiveModernDecks=网络摩登套牌存档
lblNetArchivePioneerDecks=网络先驱套牌存档
lblNetArchiveLegacyDecks=网络薪传套牌存档
lblNetArchiveVintageDecks=网络特选套牌存档
lblNetArchiveBlockDecks=网络全铁套牌存档
lblNetArchiveBlockDecks=网络环境构筑套牌存档
lblNetArchivePauperDecks=网络全铁套牌存档
#VSubmenuTutorial
lblTutorial=教程
lblTutorialMode=教程模式

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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