Merge branch 'master' into master2

This commit is contained in:
Anthony Calosa
2024-07-28 08:21:24 +08:00
56 changed files with 495 additions and 179 deletions

View File

@@ -148,6 +148,19 @@ public class AiCostDecision extends CostDecisionMakerBase {
return decision;
}
@Override
public PaymentDecision visit(CostPromiseGift cost) {
if (!cost.canPay(ability, player, isEffect())) {
return null;
}
List<Player> res = cost.getPotentialPlayers(player, ability);
// I should only choose one of these right?
// TODO Choose the "worst" player.
Collections.shuffle(res);
return PaymentDecision.players(res.subList(0, 1));
}
@Override
public PaymentDecision visit(CostExile cost) {
String type = cost.getType();

View File

@@ -17,24 +17,16 @@
*/
package forge.game;
import java.util.Collections;
import java.util.EnumSet;
import java.util.List;
import java.util.Map;
import com.google.common.collect.*;
import forge.game.card.*;
import forge.game.staticability.StaticAbility;
import forge.game.staticability.StaticAbilityAlternativeCost;
import forge.util.Aggregates;
import org.apache.commons.lang3.StringUtils;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import forge.card.MagicColor;
import forge.card.mana.ManaCost;
import forge.game.ability.AbilityFactory;
import forge.game.ability.AbilityUtils;
import forge.game.ability.ApiType;
import forge.game.ability.SpellAbilityEffect;
import forge.game.card.*;
import forge.game.card.CardPlayOption.PayManaCost;
import forge.game.cost.Cost;
import forge.game.cost.CostPayment;
@@ -46,12 +38,21 @@ import forge.game.replacement.ReplacementEffect;
import forge.game.replacement.ReplacementHandler;
import forge.game.replacement.ReplacementLayer;
import forge.game.spellability.*;
import forge.game.staticability.StaticAbility;
import forge.game.staticability.StaticAbilityAlternativeCost;
import forge.game.staticability.StaticAbilityLayer;
import forge.game.trigger.Trigger;
import forge.game.zone.Zone;
import forge.game.zone.ZoneType;
import forge.util.Aggregates;
import forge.util.Lang;
import forge.util.TextUtil;
import org.apache.commons.lang3.StringUtils;
import java.util.Collections;
import java.util.EnumSet;
import java.util.List;
import java.util.Map;
/**
@@ -434,6 +435,9 @@ public final class GameActionUtil {
String[] k = keyword.split(":");
final Cost cost = new Cost(k[1], false);
costs.add(new OptionalCostValue(OptionalCost.Entwine, cost));
} else if (keyword.startsWith("Gift")) {
final Cost cost = new Cost("PromiseGift", false);
costs.add(new OptionalCostValue(OptionalCost.PromiseGift, cost));
} else if (keyword.startsWith("Kicker")) {
String[] sCosts = TextUtil.split(keyword.substring(6), ':');
int numKickers = sCosts.length;

View File

@@ -1,13 +1,13 @@
package forge.game.ability;
import java.util.Map;
import forge.game.card.Card;
import forge.game.cost.Cost;
import forge.game.spellability.AbilityActivated;
import forge.game.spellability.AbilityManaPart;
import forge.game.spellability.TargetRestrictions;
import java.util.Map;
public class AbilityApiBased extends AbilityActivated {
private final SpellAbilityEffect effect;
@@ -30,7 +30,16 @@ public class AbilityApiBased extends AbilityActivated {
@Override
public String getStackDescription() {
return effect.getStackDescriptionWithSubs(mapParams, this);
StringBuilder sb = new StringBuilder();
if (this.hostCard.hasPromisedGift() && this.isSpell() && !this.hostCard.isPermanent()) {
sb.append("Gift a ").
append(this.getAdditionalAbility("GiftAbility").getParam("GiftDescription")).
append(" to ").append(this.hostCard.getPromisedGift()).
append(". ");
}
sb.append(effect.getStackDescriptionWithSubs(mapParams, this));
return sb.toString();
}
/* (non-Javadoc)

View File

@@ -17,14 +17,9 @@
*/
package forge.game.ability;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import com.google.common.base.Function;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import forge.card.CardStateName;
import forge.card.CardType;
import forge.game.CardTraitBase;
@@ -40,6 +35,10 @@ import forge.util.FileSection;
import io.sentry.Breadcrumb;
import io.sentry.Sentry;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
/**
* <p>
* AbilityFactory class.
@@ -64,7 +63,8 @@ public final class AbilityFactory {
"CantChooseSubAbility", // Can't choose a player via ChoosePlayer
"AnimateSubAbility", // For ChangeZone Effects to Animate before ETB
"RegenerationAbility", // for Regeneration Effect
"ReturnAbility" // for Delayed Trigger on Magpie
"ReturnAbility", // for Delayed Trigger on Magpie
"GiftAbility" // for Promise Gift
);
public enum AbilityRecordType {

View File

@@ -1156,6 +1156,13 @@ public class AbilityUtils {
if (p != null) {
players.add(p);
}
} else if (defined.equals("Promised")) {
if (card != null) {
final Player p = card.getPromisedGift();
if (p != null) {
players.add(p);
}
}
} else if (defined.startsWith("ChosenCard")) {
addPlayer(card.getChosenCards(), defined, players);
} else if (defined.equals("SourceController")) {
@@ -1326,12 +1333,7 @@ public class AbilityUtils {
game.getTriggerHandler().resetActiveTriggers();
}
// do blessing there before condition checks
if (sa.isSpell() && !sa.getHostCard().isPermanent() && sa.getHostCard().hasKeyword(Keyword.ASCEND)) {
if (pl.getZone(ZoneType.Battlefield).size() >= 10) {
pl.setBlessing(true);
}
}
resolvePreAbilities(sa, game);
// count times ability resolves this turn
if (!sa.isWrapper()) {
@@ -1352,6 +1354,32 @@ public class AbilityUtils {
AbilityUtils.resolveApiAbility(sa, game);
}
private static void resolvePreAbilities(final SpellAbility sa, final Game game) {
Player controller = sa.getActivatingPlayer();
Card source = sa.getHostCard();
if (!sa.isSpell() || source.isPermanent()) {
return;
}
// do blessing there before condition checks
if (source.hasKeyword(Keyword.ASCEND)) {
if (controller.getZone(ZoneType.Battlefield).size() >= 10) {
controller.setBlessing(true);
}
}
if (source.hasKeyword(Keyword.GIFT) && sa.isOptionalCostPaid(OptionalCost.PromiseGift)) {
game.getAction().checkStaticAbilities();
// Is AdditionalAbility available from anything here?
AbilitySub giftAbility = (AbilitySub) sa.getAdditionalAbility("GiftAbility");
if (giftAbility != null) {
giftAbility.setActivatingPlayer(controller);
AbilityUtils.resolveApiAbility(giftAbility, game);
}
}
}
private static void resolveSubAbilities(final SpellAbility sa, final Game game) {
final AbilitySub abSub = sa.getSubAbility();
if (abSub == null || sa.isWrapper()) {
@@ -1378,6 +1406,10 @@ public class AbilityUtils {
bread.setData("SA", sa.toString());
Sentry.addBreadcrumb(bread);
if (!sa.isWrapper() && sa.isKeyword(Keyword.GIFT)) {
game.getTriggerHandler().runTrigger(TriggerType.GiveGift, AbilityKey.mapFromPlayer(sa.getActivatingPlayer()), false);
}
// check conditions
if (sa.metConditions()) {
if (sa.isWrapper() || StringUtils.isBlank(sa.getParam("UnlessCost"))) {

View File

@@ -295,6 +295,7 @@ public class Card extends GameEntity implements Comparable<Card>, IHasSVars {
private List<String> chosenName = new ArrayList<>();
private Integer chosenNumber;
private Player chosenPlayer;
private Player promisedGift;
private Player protectingPlayer;
private EvenOdd chosenEvenOdd = null;
private Direction chosenDirection = null;
@@ -1888,6 +1889,18 @@ public class Card extends GameEntity implements Comparable<Card>, IHasSVars {
view.updateChosenPlayer(this);
}
public final boolean hasPromisedGift() {
return promisedGift != null;
}
public final Player getPromisedGift() {
return promisedGift;
}
public final void setPromisedGift(final Player p) {
if (promisedGift == p) { return; }
promisedGift = p;
view.updatePromisedGift(this);
}
public final Player getProtectingPlayer() {
return protectingPlayer;
}
@@ -2424,6 +2437,12 @@ public class Card extends GameEntity implements Comparable<Card>, IHasSVars {
sbLong.append(". ").append(k[3]);
}
sbLong.append(" (").append(inst.getReminderText()).append(")");
} else if (keyword.equals("Gift")) {
sbLong.append(keyword);
if (inst.getHostCard() != null && inst.getHostCard().getFirstSpellAbility().hasAdditionalAbility("GiftAbility")) {
sbLong.append(" ").append(inst.getHostCard().getFirstSpellAbility().getAdditionalAbility("GiftAbility").getParam("GiftDescription"));
}
sbLong.append("\r\n");
} else if (keyword.startsWith("Starting intensity")) {
sbLong.append(TextUtil.fastReplace(keyword, ":", " "));
} else if (keyword.contains("Haunt")) {
@@ -3069,6 +3088,12 @@ public class Card extends GameEntity implements Comparable<Card>, IHasSVars {
sbCost.append(cost.toSimpleString());
sbAfter.append(sbCost).append(" (").append(inst.getReminderText()).append(")");
sbAfter.append("\r\n");
} else if (keyword.equals("Gift")) {
sbBefore.append(keyword);
if (state.getFirstAbility().hasAdditionalAbility("GiftAbility")) {
sbBefore.append(" ").append(state.getFirstAbility().getAdditionalAbility("GiftAbility").getParam("GiftDescription"));
}
sbBefore.append("\r\n");
} else if (keyword.equals("Remove CARDNAME from your deck before playing if you're not " +
"playing for ante.")) {
sbBefore.append(keyword);

View File

@@ -298,6 +298,7 @@ public class CardCopyService {
newCopy.setRenowned(copyFrom.isRenowned());
newCopy.setSolved(copyFrom.isSolved());
newCopy.setSaddled(copyFrom.isSaddled());
newCopy.setPromisedGift(copyFrom.getPromisedGift());
if (newCopy.isSaddled()) newCopy.setSaddledByThisTurn(copyFrom.getSaddledByThisTurn());
newCopy.setSuspectedTimestamp(copyFrom.getSuspectedTimestamp());

View File

@@ -44,7 +44,9 @@ import forge.item.IPaperCard;
import forge.util.CardTranslation;
import forge.util.TextUtil;
import java.util.*;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
/**
@@ -109,6 +111,7 @@ public class CardFactory {
copy.setXManaCostPaidByColor(original.getXManaCostPaidByColor());
copy.setKickerMagnitude(original.getKickerMagnitude());
copy.setPromisedGift(original.getPromisedGift());
if (targetSA.isBestow()) {
copy.animateBestow();

View File

@@ -17,40 +17,11 @@
*/
package forge.game.card;
import java.util.Arrays;
import java.util.EnumSet;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import forge.GameCommand;
import forge.game.cost.CostExile;
import forge.game.cost.CostPart;
import forge.game.cost.CostPartMana;
import forge.game.event.GameEventCardForetold;
import forge.util.Localizer;
import org.apache.commons.lang3.StringUtils;
import com.google.common.base.Predicate;
import com.google.common.base.Predicates;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import forge.card.CardStateName;
import forge.card.CardType;
import forge.card.CardTypeView;
import forge.card.ColorSet;
import forge.card.ICardFace;
import forge.card.MagicColor;
import com.google.common.collect.*;
import forge.GameCommand;
import forge.card.*;
import forge.card.mana.ManaCost;
import forge.card.mana.ManaCostParser;
import forge.game.CardTraitBase;
@@ -60,22 +31,15 @@ import forge.game.GameLogEntryType;
import forge.game.ability.AbilityFactory;
import forge.game.ability.AbilityKey;
import forge.game.ability.AbilityUtils;
import forge.game.cost.Cost;
import forge.game.cost.CostCollectEvidence;
import forge.game.cost.*;
import forge.game.event.GameEventCardForetold;
import forge.game.keyword.Keyword;
import forge.game.keyword.KeywordInterface;
import forge.game.player.Player;
import forge.game.replacement.ReplacementEffect;
import forge.game.replacement.ReplacementHandler;
import forge.game.replacement.ReplacementLayer;
import forge.game.spellability.AbilityStatic;
import forge.game.spellability.AbilitySub;
import forge.game.spellability.AlternativeCost;
import forge.game.spellability.Spell;
import forge.game.spellability.SpellAbility;
import forge.game.spellability.SpellAbilityRestriction;
import forge.game.spellability.SpellPermanent;
import forge.game.spellability.TargetRestrictions;
import forge.game.spellability.*;
import forge.game.staticability.StaticAbility;
import forge.game.staticability.StaticAbilityCantBeCast;
import forge.game.staticability.StaticAbilityPlotZone;
@@ -83,10 +47,16 @@ import forge.game.trigger.Trigger;
import forge.game.trigger.TriggerHandler;
import forge.game.zone.ZoneType;
import forge.util.Lang;
import forge.util.Localizer;
import forge.util.TextUtil;
import io.sentry.Breadcrumb;
import io.sentry.Sentry;
import org.apache.commons.lang3.StringUtils;
import java.util.*;
import java.util.Map.Entry;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
/**
* <p>
@@ -1255,6 +1225,27 @@ public class CardFactoryUtil {
saRebel.setIntrinsic(intrinsic);
inst.addTrigger(etbTrigger);
} else if (keyword.equals("Gift")) {
// Gift is a special keyword that is used to create a trigger for permanents when they enter the battlefield
// On casting a Gift needs to be promised to an opponent
final SpellAbility saGift = AbilityFactory.getAbility(card.getSVar("GiftAbility"), card);
card.getFirstSpellAbility().setAdditionalAbility("GiftAbility", saGift);
if (!card.isPermanent()) {
saGift.setKeyword(inst);
return;
}
String giftDescription = saGift.getParamOrDefault("GiftDescription", "<missing description>");
final StringBuilder sbTrig = new StringBuilder();
sbTrig.append("Mode$ ChangesZone | Destination$ Battlefield | ");
sbTrig.append("ValidCard$ Card.Self+PromisedGift | Secondary$ True | TriggerDescription$ ");
sbTrig.append("Gift a ").append(giftDescription).append(" to ").append(card.getPromisedGift());
final Trigger etbTrigger = TriggerHandler.parseTrigger(sbTrig.toString(), card, intrinsic);
etbTrigger.setOverridingAbility(saGift);
saGift.setIntrinsic(intrinsic);
inst.addTrigger(etbTrigger);
} else if (keyword.startsWith("Graft")) {
final StringBuilder sb = new StringBuilder();
sb.append("DB$ MoveCounter | Source$ Self | Defined$ TriggeredCardLKICopy");

View File

@@ -20,7 +20,6 @@ import forge.game.combat.AttackRequirement;
import forge.game.combat.AttackingBand;
import forge.game.combat.Combat;
import forge.game.combat.CombatUtil;
import forge.game.keyword.Keyword;
import forge.game.keyword.KeywordInterface;
import forge.game.mana.Mana;
import forge.game.player.Player;
@@ -637,9 +636,6 @@ public class CardProperty {
if (property.endsWith("With") && card.getPairedWith() != source) {
return false;
}
if (property.endsWith("Soulbond") && !card.getPairedWith().hasKeyword(Keyword.SOULBOND)) {
return false;
}
} else if (property.startsWith("Above")) { // "Are Above" Source
final CardCollectionView cards = card.getOwner().getCardsIn(ZoneType.Graveyard);
if (cards.indexOf(source) >= cards.indexOf(card)) {
@@ -1883,6 +1879,9 @@ public class CardProperty {
return false;
}
return card.getCastSA().isEvoke();
} else if (property.equals("PromisedGift")) {
// Do we need this isUnlinked thing like these others?
return card.hasPromisedGift();
} else if (property.equals("impended")) {
if (card.getCastSA() == null) {
return false;

View File

@@ -23,7 +23,10 @@ import forge.trackable.TrackableCollection;
import forge.trackable.TrackableObject;
import forge.trackable.TrackableProperty;
import forge.trackable.Tracker;
import forge.util.*;
import forge.util.CardTranslation;
import forge.util.Lang;
import forge.util.Localizer;
import forge.util.TextUtil;
import forge.util.collect.FCollectionView;
import org.apache.commons.lang3.StringUtils;
@@ -431,6 +434,12 @@ public class CardView extends GameEntityView {
void updateChosenPlayer(Card c) {
set(TrackableProperty.ChosenPlayer, PlayerView.get(c.getChosenPlayer()));
}
public PlayerView getPromisedGift() {
return get(TrackableProperty.PromisedGift);
}
void updatePromisedGift(Card c) {
set(TrackableProperty.PromisedGift, PlayerView.get(c.getPromisedGift()));
}
public PlayerView getProtectingPlayer() {
return get(TrackableProperty.ProtectingPlayer);
}

View File

@@ -17,15 +17,8 @@
*/
package forge.game.cost;
import java.io.Serializable;
import java.util.*;
import forge.card.CardType;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import com.google.common.collect.Lists;
import forge.card.CardType;
import forge.card.mana.ManaCost;
import forge.card.mana.ManaCostParser;
import forge.game.CardTraitBase;
@@ -38,6 +31,11 @@ import forge.game.spellability.SpellAbility;
import forge.game.zone.ZoneType;
import forge.util.Lang;
import forge.util.TextUtil;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import java.io.Serializable;
import java.util.*;
/**
* <p>
@@ -472,6 +470,10 @@ public class Cost implements Serializable {
new ArrayList<>(Arrays.asList(ZoneType.Battlefield, ZoneType.Graveyard)));
}
if (parse.startsWith("PromiseGift")) {
return new CostPromiseGift();
}
if (parse.startsWith("Return<")) {
final String[] splitStr = abCostParse(parse, 3);
final String description = splitStr.length > 2 ? splitStr[2] : null;

View File

@@ -0,0 +1,48 @@
package forge.game.cost;
import forge.game.player.Player;
import forge.game.player.PlayerCollection;
import forge.game.spellability.SpellAbility;
public class CostPromiseGift extends CostPart {
// Promise Gift is a very specific cost. A more generic version might be "Choose Player/Opponent"
@Override
public int paymentOrder() {
// Its just choosing a person
return -1;
}
@Override
public boolean canPay(SpellAbility ability, Player payer, boolean effect) {
// You can always promise a gift
return true;
}
@Override
public <T> T accept(ICostVisitor<T> visitor) {
return visitor.visit(this);
}
@Override
public String toString() {
// Extract the description from the SA
return "Gift something";
}
@Override
public boolean payAsDecided(Player payer, PaymentDecision pd, SpellAbility sa, boolean effect) {
if (pd.players.isEmpty()) {
sa.getHostCard().setPromisedGift(null);
return false;
}
sa.getHostCard().setPromisedGift(pd.players.get(0));
return true;
}
public PlayerCollection getPotentialPlayers(final Player payer, final SpellAbility ability) {
return payer.getOpponents();
}
}

View File

@@ -23,6 +23,7 @@ public interface ICostVisitor<T> {
T visit(CostPayEnergy cost);
T visit(CostGainLife cost);
T visit(CostPartMana cost);
T visit(CostPromiseGift cost);
T visit(CostPutCardToLib cost);
T visit(CostTap cost);
T visit(CostSacrifice cost);
@@ -144,6 +145,9 @@ public interface ICostVisitor<T> {
return null;
}
@Override
public T visit(CostPromiseGift cost) { return null; }
@Override
public T visit(CostPutCardToLib cost) {
return null;

View File

@@ -1,19 +1,11 @@
package forge.game.keyword;
import java.util.ArrayList;
import java.util.Collection;
import java.util.EnumSet;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
import forge.StaticData;
import forge.game.card.Card;
import forge.item.PaperCard;
import java.util.*;
public enum Keyword {
UNDEFINED("", SimpleKeyword.class, false, ""),
ABSORB("Absorb", KeywordWithAmount.class, false, "If a source would deal damage to this creature, prevent %d of that damage."),
@@ -99,6 +91,7 @@ public enum Keyword {
FRENZY("Frenzy", KeywordWithAmount.class, false, "Whenever this creature attacks and isn't blocked, it gets +%d/+0 until end of turn."),
FRIENDS_FOREVER("Friends forever", Partner.class, true, "You can have two commanders if both have friends forever."),
FUSE("Fuse", SimpleKeyword.class, true, "You may cast one or both halves of this card from your hand."),
GIFT("Gift", SimpleKeyword.class, true, "You may promise an opponent a gift as you cast this spell. If you do, when it enters, they %s."),
GRAFT("Graft", KeywordWithAmount.class, false, "This permanent enters the battlefield with {%d:+1/+1 counter} on it. Whenever another creature enters the battlefield, you may move a +1/+1 counter from this permanent onto it."),
GRAVESTORM("Gravestorm", SimpleKeyword.class, false, "When you cast this spell, copy it for each permanent that was put into a graveyard from the battlefield this turn. If the spell has any targets, you may choose new targets for any of the copies."),
HASTE("Haste", SimpleKeyword.class, true, "This creature can attack and {T} as soon as it comes under your control."),

View File

@@ -10,6 +10,7 @@ public enum OptionalCost {
Entwine("Entwine", ""),
Kicker1("Kicker", ""),
Kicker2("Kicker", ""),
PromiseGift("Promise Gift", ""),
Retrace("Retrace", ""),
Jumpstart("Jump-start", ""),
ReduceW("(to reduce white mana)", "W"),

View File

@@ -17,16 +17,7 @@
*/
package forge.game.spellability;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.commons.lang3.StringUtils;
import com.google.common.collect.Iterables;
import forge.card.ColorSet;
import forge.game.Game;
import forge.game.GameObject;
@@ -40,6 +31,9 @@ import forge.game.player.Player;
import forge.game.zone.ZoneType;
import forge.util.Expressions;
import forge.util.collect.FCollection;
import org.apache.commons.lang3.StringUtils;
import java.util.*;
/**
* <p>
@@ -276,7 +270,7 @@ public class SpellAbilityCondition extends SpellAbilityVariables {
if (this.isRevolt() && !activator.hasRevolt()) return false;
if (this.isDesert() && !activator.hasDesert()) return false;
if (this.isBlessing() && !activator.hasBlessing()) return false;
if (this.kicked && !sa.isKicked()) return false;
if (this.kicked1 && !sa.isOptionalCostPaid(OptionalCost.Kicker1)) return false;
if (this.kicked2 && !sa.isOptionalCostPaid(OptionalCost.Kicker2)) return false;

View File

@@ -17,13 +17,13 @@
*/
package forge.game.spellability;
import java.util.EnumSet;
import java.util.Set;
import forge.game.GameType;
import forge.game.phase.PhaseType;
import forge.game.zone.ZoneType;
import java.util.EnumSet;
import java.util.Set;
/**
* <p>
* SpellAbilityVariables class.
@@ -341,9 +341,7 @@ public class SpellAbilityVariables implements Cloneable {
public void setDelirium(boolean delirium) { this.delirium = delirium; }
public void setRevolt(final boolean bRevolt) { revolt = bRevolt; }
public void setDesert(final boolean bDesert) { desert = bDesert; }
public void setBlessing(final boolean bBlessing) { blessing = bBlessing; }
public void setSolved(final boolean bSolved) { solved = bSolved; }

View File

@@ -0,0 +1,69 @@
/*
* Forge: Play Magic: the Gathering.
* Copyright (C) 2011 Forge Team
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package forge.game.trigger;
import java.util.Map;
import forge.game.ability.AbilityKey;
import forge.game.card.Card;
import forge.game.spellability.SpellAbility;
import forge.util.Localizer;
/**
* @author Forge
*/
public class TriggerGiveGift extends Trigger {
/**
*
* @param params
* a {@link java.util.HashMap} object.
* @param host
* a {@link forge.game.card.Card} object.
* @param intrinsic
* the intrinsic
*/
public TriggerGiveGift(final Map<String, String> params, final Card host, final boolean intrinsic) {
super(params, host, intrinsic);
}
@Override
public String getImportantStackObjects(SpellAbility sa) {
StringBuilder sb = new StringBuilder();
sb.append(Localizer.getInstance().getMessage("lblPlayer")).append(": ").append(sa.getTriggeringObject(AbilityKey.Player));
return sb.toString();
}
/** {@inheritDoc} */
@Override
public final void setTriggeringObjects(final SpellAbility sa, Map<AbilityKey, Object> runParams) {
sa.setTriggeringObjectsFrom(runParams, AbilityKey.Player);
}
/** {@inheritDoc}
* @param runParams*/
@Override
public final boolean performTest(final Map<AbilityKey, Object> runParams) {
if (!matchesValidParam("ValidPlayer", runParams.get(AbilityKey.Player))) {
return false;
}
return true;
}
}

View File

@@ -85,6 +85,7 @@ public enum TriggerType {
FlippedCoin(TriggerFlippedCoin.class),
Forage(TriggerForage.class),
Foretell(TriggerForetell.class),
GiveGift(TriggerGiveGift.class),
Immediate(TriggerImmediate.class),
Investigated(TriggerInvestigated.class),
LandPlayed(TriggerLandPlayed.class),

View File

@@ -17,24 +17,9 @@
*/
package forge.game.zone;
import java.util.Deque;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.Stack;
import java.util.TreeSet;
import java.util.concurrent.LinkedBlockingDeque;
import com.esotericsoftware.minlog.Log;
import com.google.common.base.Predicate;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import com.google.common.collect.*;
import forge.GameCommand;
import forge.game.*;
import forge.game.ability.AbilityKey;
@@ -43,12 +28,7 @@ import forge.game.ability.ApiType;
import forge.game.ability.effects.PlayEffect;
import forge.game.card.Card;
import forge.game.card.CardCopyService;
import forge.game.event.EventValueChangeType;
import forge.game.event.GameEventCardStatsChanged;
import forge.game.event.GameEventSpellAbilityCast;
import forge.game.event.GameEventSpellRemovedFromStack;
import forge.game.event.GameEventSpellResolved;
import forge.game.event.GameEventZone;
import forge.game.event.*;
import forge.game.keyword.Keyword;
import forge.game.mana.Mana;
import forge.game.mana.ManaRefundService;
@@ -62,6 +42,10 @@ import forge.game.trigger.Trigger;
import forge.game.trigger.TriggerType;
import forge.util.TextUtil;
import java.util.*;
import java.util.Map.Entry;
import java.util.concurrent.LinkedBlockingDeque;
/**
* <p>
* MagicStack class.
@@ -812,14 +796,14 @@ public class MagicStack /* extends MyObservable */ implements Iterable<SpellAbil
// Grab players in turn order starting with the active player
List<Player> players = game.getPlayersInTurnOrder(playerTurn);
for(Player p : players) {
for (Player p : players) {
if (p.hasLost()) {
continue;
}
result |= chooseOrderOfSimultaneousStackEntry(p, false);
}
for(Player p : players) {
for (Player p : players) {
if (p.hasLost()) {
continue;
}

View File

@@ -69,6 +69,7 @@ public enum TrackableProperty {
ChosenNumber(TrackableTypes.StringType),
StoredRolls(TrackableTypes.StringListType),
ChosenPlayer(TrackableTypes.PlayerViewType),
PromisedGift(TrackableTypes.PlayerViewType),
ProtectingPlayer(TrackableTypes.PlayerViewType),
ChosenDirection(TrackableTypes.EnumType(Direction.class)),
ChosenEvenOdd(TrackableTypes.EnumType(EvenOdd.class)),

View File

@@ -1,7 +1,7 @@
Name:Blizzard Brawl
ManaCost:G
Types:Snow Sorcery
A:SP$ Pump | Cost$ G | AILogic$ Fight | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Choose target creature you control | ConditionPresent$ Permanent.Snow+YouCtrl | ConditionCompare$ GE3 | NumAtt$ +1 | KW$ Indestructible | StackDescription$ None | SubAbility$ DBFight | SpellDescription$ Target creature you control fights target creature you don't control. The creature you control gets +1/+0 and gains indestructible until end of turn before it fights if you control three or more snow permanents.
A:SP$ Pump | AILogic$ Fight | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Choose target creature you control | ConditionPresent$ Permanent.Snow+YouCtrl | ConditionCompare$ GE3 | NumAtt$ +1 | KW$ Indestructible | StackDescription$ None | SubAbility$ DBFight | SpellDescription$ Target creature you control fights target creature you don't control. The creature you control gets +1/+0 and gains indestructible until end of turn before it fights if you control three or more snow permanents.
SVar:DBFight:DB$ Fight | Defined$ ParentTarget | ValidTgts$ Creature.YouDontCtrl | TgtPrompt$ Choose target creature you don't control
DeckHints:Type$Snow
Oracle:Choose target creature you control and target creature you don't control. If you control three or more snow permanents, the creature you control gets +1/+0 and gains indestructible until end of turn. Then those creatures fight each other. (Each deals damage equal to its power to the other.)

View File

@@ -11,7 +11,7 @@ ALTERNATE
Name:Consume
ManaCost:2 W B
Types:Sorcery
A:SP$ Sacrifice | ValidTgts$ Player | SacValid$ Creature.greatestPowerControlledByTargeted | SubAbility$ DBGainLife | SacMessage$ the creature with the highest power | RememberSacrificed$ True | SpellDescription$ Target player sacrifices a creature with the greatest power among creatures they control. You gain life equal to its power.
A:SP$ Sacrifice | ValidTgts$ Player | SacValid$ Creature.greatestPowerControlledByTargeted | SubAbility$ DBGainLife | SacMessage$ the creature with the greatest power | RememberSacrificed$ True | SpellDescription$ Target player sacrifices a creature with the greatest power among creatures they control. You gain life equal to its power.
SVar:DBGainLife:DB$ GainLife | Defined$ You | LifeAmount$ X | SubAbility$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:X:RememberedLKI$CardPower

View File

@@ -4,5 +4,5 @@ Types:Artifact Creature Phyrexian Warrior
PT:2/2
A:AB$ Pump | Cost$ Sac<1/Creature.Other;Artifact.Other/another creature or artifact> | Defined$ Self | NumDef$ 2 | NumAtt$ +2 | AILogic$ Aristocrat | ActivationLimit$ 1 | SpellDescription$ CARDNAME gets +2/+2 until end of turn. Activate only once each turn.
DeckHas:Ability$Sacrifice
SVar:AIPreference:SacCost$Artifact.token,Creature,token,Artifact.cmcEQ0+nonLegendary+notnamedBlack Lotus,Artifact.cmcEQ1,Artifact.cmcEQ2,Artifact.cmcEQ3,Creature.cmcLE3
SVar:AIPreference:SacCost$Artifact.token,Creature.token,Artifact.cmcEQ0+nonLegendary+notnamedBlack Lotus,Artifact.cmcEQ1,Artifact.cmcEQ2,Artifact.cmcEQ3,Creature.cmcLE3
Oracle:Sacrifice another artifact or creature: Cutthroat Centurion gets +2/+2 until end of turn. Activate only once each turn.

View File

@@ -1,5 +1,5 @@
Name:Essence Scatter
ManaCost:1 U
Types:Instant
A:SP$ Counter | TargetType$ Spell | TgtPrompt$ Select target Creature spell | ValidTgts$ Creature | SpellDescription$ Counter target creature spell.
A:SP$ Counter | TargetType$ Spell | TgtPrompt$ Select target creature spell | ValidTgts$ Creature | SpellDescription$ Counter target creature spell.
Oracle:Counter target creature spell.

View File

@@ -2,6 +2,6 @@ Name:Flowering Lumberknot
ManaCost:3 G
Types:Creature Treefolk
PT:5/5
S:Mode$ Continuous | Affected$ Creature.Self+!PairedWithSoulbond | AddHiddenKeyword$ CARDNAME can't attack or block. | Description$ CARDNAME can't attack or block unless it's paired with a creature with soulbond.
S:Mode$ Continuous | Affected$ Creature.Self | IsPresent$ Creature.PairedWith+withSoulbond | PresentCompare$ EQ0 | AddHiddenKeyword$ CARDNAME can't attack or block. | Description$ CARDNAME can't attack or block unless it's paired with a creature with soulbond.
AI:RemoveDeck:Random
Oracle:Flowering Lumberknot can't attack or block unless it's paired with a creature with soulbond.

View File

@@ -0,0 +1,8 @@
Name:Blooming Blast
ManaCost:1 R
Types:Instant
K:Gift
SVar:GiftAbility:DB$ Token | TokenAmount$ 1 | TokenScript$ c_a_treasure_sac | TokenOwner$ Promised | GiftDescription$ a Treasure
A:SP$ DealDamage | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumDmg$ 2 | SubAbility$ DBDealDamage | SpellDescription$ CARDNAME deals 2 damage to target creature. If the gift was promised, CARDNAME also deals 3 damage to that creature's controller.
SVar:DBDealDamage:DB$ DealDamage | Defined$ TargetedController | NumDmg$ 3 | ConditionZone$ Stack | ConditionPresent$ Card.Self+PromisedGift | ConditionCompare$ EQ1
Oracle:Gift a Treasure (You may promise an opponent a gift as you cast this spell. If you do, they create a Treasure token before its other effects. It's an artifact with "{T}, Sacrifice this artifact: Add one mana of any color.")\nBlooming Blast deals 2 damage to target creature. If the gift was promised, Blooming Blast also deals 3 damage to that creature's controller.

View File

@@ -3,7 +3,7 @@ ManaCost:3 B
Types:Creature Rat Berserker
PT:2/4
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters, create a Food token, then you may exile three cards from your graveyard. If you do, repeat this process.
SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenOwner$ You | TokenScript$ c_a_food_sac | SubAbility$ DBSToreSVar
SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenOwner$ You | TokenScript$ c_a_food_sac | SubAbility$ DBStoreSVar
SVar:DBStoreSVar:DB$ StoreSVar | SVar$ CheckNotPaid | Type$ Number | Expression$ 1 | SubAbility$ DBRepeat
SVar:DBRepeat:DB$ Repeat | RepeatSubAbility$ DBToken | RepeatCheckSVar$ CheckNotPaid | RepeatSVarCompare$ GT0
SVar:DBToken:DB$ Token | TokenAmount$ 1 | TokenOwner$ You | UnlessCost$ ExileFromGrave<3/Card> | UnlessPayer$ You | UnlessSwitched$ True | UnlessResolveSubs$ WhenNotPaid | SubAbility$ DBStoreSVar | TokenScript$ c_a_food_sac

View File

@@ -0,0 +1,8 @@
Name:Jolly Gerbils
ManaCost:1 W
Types:Creature Hamster Citizen
PT:2/3
T:Mode$ GiveGift | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigDraw | TriggerDescription$ Whenever you give a gift, draw a card.
SVar:TrigDraw:DB$ Draw
DeckNeeds:Keyword$Gift
Oracle:Whenever you give a gift, draw a card.

View File

@@ -0,0 +1,12 @@
Name:Kitnap
ManaCost:2 U U
Types:Enchantment Aura
K:Gift
K:Enchant creature
SVar:GiftAbility:DB$ Draw | NumCards$ 1 | Defined$ Promised | GiftDescription$ a card
A:SP$ Attach | Cost$ 2 U U | ValidTgts$ Creature | AILogic$ GainControl | GiftAbility$ GiftAbility
S:Mode$ Continuous | Affected$ Card.EnchantedBy | GainControl$ You | Description$ You control enchanted creature.
T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Any | Destination$ Battlefield | Execute$ TrigTap | TriggerDescription$ When CARDNAME enters, tap enchanted creature. If the gift wasn't promised, put three stun counters on it.
SVar:TrigTap:DB$ Tap | Defined$ Enchanted | SubAbility$ DBStun
SVar:DBStun:DB$ PutCounter | Defined$ Enchanted | CounterType$ Stun | CounterNum$ 3 | ConditionDefined$ Self | ConditionPresent$ Card.PromisedGift | ConditionCompare$ EQ0
Oracle:Gift a card (You may promise an opponent a gift as you cast this spell. If you do, when it enters, they draw a card.)\nEnchant creature\nWhen Kitnap enters, tap enchanted creature. If the gift wasn't promised, put three stun counters on it.\nYou control enchanted creature.

View File

@@ -7,7 +7,7 @@ S:Mode$ Continuous | Affected$ Frog.YouCtrl+Other | AddKeyword$ Ward:1 | Descrip
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigUnblockable | TriggerDescription$ When CARDNAME enters, target creature you control can't be blocked this turn. Whenever that creature deals combat damage this turn, you may exile it. If you do, return it to the battlefield under its owner's control.
SVar:TrigUnblockable:DB$ Effect | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control | RememberObjects$ Targeted | ExileOnMoved$ Battlefield | StaticAbilities$ Unblockable | Triggers$ TrigDamage
SVar:Unblockable:Mode$ CantBlockBy | ValidAttacker$ Card.IsRemembered | Description$ This creature can't be blocked this turn.
SVar:Trig:Mode$ DamageDealtOnce | ValidSource$ Creature.IsRemembered | CombatDamage$ True | Execute$ TrigExile | TriggerDescription$ Whenever this creature deals combat damage this turn, you may exile it. If you do, return it to the battlefield under its owner's control.
SVar:TrigDamage:Mode$ DamageDealtOnce | ValidSource$ Creature.IsRemembered | CombatDamage$ True | Execute$ TrigExile | TriggerDescription$ Whenever this creature deals combat damage this turn, you may exile it. If you do, return it to the battlefield under its owner's control.
SVar:TrigExile:DB$ ChangeZone | Origin$ Battlefield | Destination$ Exile | RememberChanged$ True | SubAbility$ DBReturn
SVar:DBReturn:DB$ ChangeZone | Defined$ Remembered | Origin$ Exile | Destination$ Battlefield | SubAbility$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True

View File

@@ -3,11 +3,10 @@ ManaCost:G
Types:Creature Frog Warrior
PT:2/2
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigBounce | TriggerDescription$ At the beginning of your upkeep, return another creature you control to its owner's hand. If you do, put a +1/+1 counter on CARDNAME. Otherwise, you may return CARDNAME to its owner's hand.
SVar:TrigBounce:DB$ ChangeZone | Origin$ Battlefield | Destination$ Hand | ChangeType$ Creature.StrictlyOther+YouCtrl | ChangeNum$ 1 | Mandatory$ True | Hidden$ True | RememberChanged$ True | SubAbility$ DBBranch
SVar:DBBranch:DB$ Branch | BranchConditionSVar$ X | BranchConditionSVarCompare$ GT0 | TrueSubAbility$ DBPutCounter | FalseSubAbility$ DBChangeZone
SVar:DBPutCounter:DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ 1 | SubAbility$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:DBChangeZone:DB$ ChangeZone | Origin$ Battlefield | Destination$ Hand | Hidden$ True | ChangeType$ Card.Self
SVar:TrigBounce:DB$ ChangeZone | Origin$ Battlefield | Destination$ Hand | ChangeType$ Creature.StrictlyOther+YouCtrl | ChangeNum$ 1 | Mandatory$ True | Hidden$ True | RememberChanged$ True | SubAbility$ DBPutCounter
SVar:DBPutCounter:DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ 1 | ConditionCheckSVar$ X | ConditionSVarCompare$ GE1 | SubAbility$ DBChangeZone
SVar:DBChangeZone:DB$ ChangeZone | Origin$ Battlefield | Destination$ Hand | Optional$ True | ConditionCheckSVar$ X | ConditionSVarCompare$ LE0 | SubAbility$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:X:Remembered$Amount
AI:RemoveDeck:All
Oracle:At the beginning of your upkeep, return another creature you control to its owner's hand. If you do, put a +1/+1 counter on Mistbreath Elder. Otherwise, you may return Mistbreath Elder to its owner's hand.

View File

@@ -3,7 +3,7 @@ ManaCost:1 B
Types:Creature Squirrel Warlock
PT:2/2
K:Deathtouch
A:AB$ Effect | Cost$ T PayLife<2> | StaticAbilities$ MayCast | Triggers$ StaticCast | SpellDescription$ Until end of turn, you may cast creature spells from your graveyard by foraging in addition to paying their other costs. If you cast a spell this way, that creature enters with a finality counter on it. (To forage, exile three cards from your graveyard or sacrifice a Food. If a creature with a finality counter on it would die, exile it instead.)
A:AB$ Effect | Cost$ T | StaticAbilities$ MayCast | Triggers$ StaticCast | SpellDescription$ Until end of turn, you may cast creature spells from your graveyard by foraging in addition to paying their other costs. If you cast a spell this way, that creature enters with a finality counter on it. (To forage, exile three cards from your graveyard or sacrifice a Food. If a creature with a finality counter on it would die, exile it instead.)
SVar:MayCast:Mode$ Continuous | Affected$ Creature.nonLand+YouOwn | MayPlay$ True | AffectedZone$ Graveyard | RaiseCost$ Forage | Description$ Until end of turn, you may cast creature spells from your graveyard by foraging in addition to paying their other costs. If you cast a spell this way, that creature enters with a finality counter on it. (To forage, exile three cards from your graveyard or sacrifice a Food. If a creature with a finality counter on it would die, exile it instead.)
SVar:StaticCast:Mode$ SpellCast | ValidCard$ Card.CastSa Spell.MayPlaySource | Execute$ TrigEffect | Static$ True | TriggerZones$ Command
SVar:TrigEffect:DB$ Effect | ReplacementEffects$ ReMoved | RememberObjects$ TriggeredCard

View File

@@ -1,7 +1,7 @@
Name:Persistent Marshstalker
ManaCost:1 B
Types:Creature Rat Berserker
PT:2/1
PT:3/1
S:Mode$ Continuous | Affected$ Card.Self | AddPower$ X | Description$ CARDNAME gets +1/+0 for each other Rat you control.
T:Mode$ AttackersDeclared | ValidAttackers$ Creature.YouCtrl+Rat | TriggerZones$ Graveyard | Execute$ TrigChangeZone | CheckSVar$ Y | SVarCompare$ GE7 | TriggerDescription$ Threshold — Whenever you attack with one or more Rats, if seven of more cards are in your graveyard, you may pay {2}{B}. If you do, return CARDNAME from your graveyard to the battlefield tapped and attacking.
SVar:TrigChangeZone:AB$ ChangeZone | Cost$ 2 B | Origin$ Graveyard | Destination$ Battlefield | Tapped$ True | Attacking$ True

View File

@@ -4,7 +4,7 @@ Types:Creature Rat Rogue
PT:4/3
K:Offspring:3
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigGenericChoice | TriggerDescription$ When this creature enters, target opponent loses 3 life unless they sacrifice a nonland permanent or discard a card.
SVar:TrigGenericChoice:DB$ GenericChoice | Defined$ Targeted | Choices$ PaySac,PayDiscard | FallbackAbility$ LoseLifeFallback | AILogic$ PayUnlessCost
SVar:TrigGenericChoice:DB$ GenericChoice | ValidTgts$ Opponent | Choices$ PaySac,PayDiscard | FallbackAbility$ LoseLifeFallback | AILogic$ PayUnlessCost
SVar:PaySac:DB$ LoseLife | LifeAmount$ 3 | Defined$ Targeted | UnlessCost$ Sac<1/Permanent.nonland/nonland permanent> | UnlessPayer$ Targeted | UnlessAI$ LifeLE3 | SpellDescription$ You lose 3 life unless you sacrifice a nonland permanent
SVar:PayDiscard:DB$ LoseLife | LifeAmount$ 3 | Defined$ Targeted | UnlessCost$ Discard<1/Card> | UnlessPayer$ Targeted | UnlessAI$ LifeLE3 | SpellDescription$ You lose 3 life unless you discard a card
# TODO: Most likely the ChooseGenericEffect code can be simplified somehow to avoid the necessity of having a dedicated fallback ability

View File

@@ -2,7 +2,6 @@ Name:Waterspout Warden
ManaCost:2 U
Types:Creature Frog Soldier
PT:3/2
K:Haste
T:Mode$ Attacks | ValidCard$ Creature.Self | CheckSVar$ X | SVarCompare$ GE1 | Execute$ TrigPump | TriggerDescription$ Whenever CARDNAME attacks, if another creature entered the battlefield under your control this turn, CARDNAME gains flying until end of turn.
SVar:TrigPump:DB$ Pump | Defined$ Self | KW$ Flying
SVar:X:Count$ThisTurnEntered_Battlefield_Creature.YouCtrl+StrictlyOther

View File

@@ -778,6 +778,8 @@ F798 M Discord, Lord of Disharmony @Narendra Bintara Adi
811 M Elesh Norn, Grand Cenobite @Josh Newton & Scott Okumura
820 R Arcane Signet @Rovina Cai
820★ R Arcane Signet @Rovina Cai
825 R Goblin Bombardment @Craig J Spearing
826 R Kezzerdrix @Bill McConkey
827 R Norin the Wary @Jarel Threat
827b R Norin the Wary @Jarel Threat
828 R Keen Duelist @Thanh Tuấn
@@ -1099,6 +1101,10 @@ F798 M Discord, Lord of Disharmony @Narendra Bintara Adi
1314★ R Muxus, Goblin Grandee @Wizard of Barge
1315 M Shattergang Brothers @Wizard of Barge
1315★ M Shattergang Brothers @Wizard of Barge
1316 M Nirkana Revenant @Andrew MacLean
1317 R Arbor Elf @Andrew MacLean
1318 R Terastodon @Andrew MacLean
1319 M Maelstrom Wanderer @Andrew MacLean
1329 R Gargos, Vicious Watcher @CatDirty
1330 M Primordial Hydra @CatDirty
1331 M Unbound Flourishing @CatDirty
@@ -1497,6 +1503,35 @@ F1540 M Rainbow Dash @John Thacker
1645★ M Fiend Artisan @Laura Plansker
1646 M Karador, Ghost Chieftain @Laura Plansker
1646★ M Karador, Ghost Chieftain @Laura Plansker
1647 R Plains @Gage Lindsten
1648 R Island @Gage Lindsten
1649 R Swamp @Gage Lindsten
1650 R Mountain @Gage Lindsten
1651 R Forest @Gage Lindsten
1652 R Plains @Hank Reavis
1653 R Island @Hank Reavis
1654 R Swamp @Hank Reavis
1655 R Mountain @Hank Reavis
1656 R Forest @Hank Reavis
1657 M Consecrated Sphinx @JRZ251
1658 R Chaotic Goo @Gage Lindsten
1659 M Kiki-Jiki, Mirror Breaker @Ema Gaspar
1660 R Meteor Golem @Kogan
1661 M Wurmcoil Engine @Gomzé
1662 R Lightning Greaves @Jackson Epstein
1663 R Skullclamp @Jackson Epstein
1664 R Sol Ring @Bardo Bread
1665 U Thought Vessel @Jackson Epstein
1666 R Command Tower @Jackson Epstein
1672 R Prodigal Sorcerer @Andreas Zafiratos
1673 R Buried Alive @Filipe Pagliuso
1674 R Dismember @Greg Staples
1675 R Birds of Paradise @Stephen Andrade
1675b R Birds of Paradise @Stephen Andrade
1676 R Three Visits @Chris Rallis
1678 R Door to Nothingness @Sam Hogg
1679 R Ashnod's Altar @Dmitry Burmak
1680 M Dark Depths @Craig J Spearing
1687 M Kalitas, Traitor of Ghet @Massiveface
1688 R Magda, Brazen Outlaw @Cabrol
1689 M Dack Fayden @Dibujante Nocturno
@@ -1515,6 +1550,11 @@ F1540 M Rainbow Dash @John Thacker
1696★ R Sol Ring @Lindsey Look
1697 R Command Tower @Titus Lunter
1697★ R Command Tower @Titus Lunter
1698 R Sorin Markov @Leonardo Santanna
1699 M Huatli, Radiant Champion @Nathaniel Himawan
1700 U Kiora, Behemoth Beckoner @Justin Gerard
1701 M Tezzeret, Master of the Bridge @Javier Charro
1702 M Vraska, Golgari Queen @Dmitry Burmak
1703 R Jaxis, the Troublemaker @Bene Rohlmann
1704 R Coffin Queen @Bene Rohlmann
1705 R Goblin King @Bene Rohlmann
@@ -1561,6 +1601,7 @@ g_1_1_squirrel
g_2_2_wolf
g_5_5_wurm_trample
icingdeath_frost_tongue
marit_lage
r_1_1_goblin
w_1_1_cat_lifelink
w_1_1_cat_lifelink

View File

@@ -0,0 +1,6 @@
[format]
Name:Alchemy (BLB)
Type:Archived
Subtype:Arena
Effective:2024-07-30
Sets:ANA, ANB, WOE, YWOE, LCI, YLCI, MKM, YMKM, OTJ, BIG, YOTJ, BLB

View File

@@ -0,0 +1,6 @@
[format]
Name:Arena Standard (BLB)
Type:Archived
Subtype:Standard
Effective:2024-07-30
Sets:DMU, BRO, ONE, MOM, MAT, WOE, LCI, MKM, OTJ, BIG, BLB

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,8 @@
[format]
Name:Historic (BLB)
Type:Archived
Subtype:Arena
Effective:2024-07-30
Sets:KTK, XLN, RIX, DOM, M19, ANA, PANA, GRN, G18, RNA, WAR, M20, ELD, HA1, THB, HA2, IKO, HA3, M21, JMP, AJMP, AKR, ANB, ZNR, KLR, KHM, HA4, STX, STA, HA5, AFR, J21, MID, VOW, YMID, NEO, YNEO, SNC, YSNC, HBG, HA6, EA1, DMU, YDMU, BRO, BRR, YBRO, EA2, ONE, YONE, SIR, SIS, MOM, MUL, MAT, LTR, HA7, EA3, WOE, WOT, YWOE, LCI, YLCI, MKM, YMKM, OTJ, OTP, BIG, YOTJ, MH3, BLB
Banned:Agent of Treachery; Arid Mesa; Blood Moon; Bloodstained Mire; Brainstorm; Channel; Commandeer; Counterspell; Dark Ritual; Demonic Tutor; Endurance; Field of the Dead; Flare of Cultivation; Flare of Denial; Flare of Duplication; Flare of Fortitude; Flare of Malice; Flooded Strand; Force of Vigor; Fury; Grief; Harbinger of the Seas; Intruder Alarm; Land Tax; Lightning Bolt; Mana Drain; Marsh Flats; Memory Lapse; Mishra's Bauble; Misty Rainforest; Natural Order; Necropotence; Nexus of Fate; Oko, Thief of Crowns; Once Upon a Time; Polluted Delta; Ragavan, Nimble Pilferer; Reanimate; Scalding Tarn; Show and Tell; Sneak Attack; Solitude; Spreading Seas; Subtlety; Swords to Plowshares; Thassa's Oracle; Tibalt's Trickery; Time Warp; Uro, Titan of Nature's Wrath; Veil of Summer; Verdant Catacombs; Wilderness Reclamation; Windswept Heath; Winter Moon; Wooded Foothills
Additional:Admiral Brass, Unsinkable; Burden of Guilt; Clavileño, First of the Blessed; Crashing Footfalls; Desert; Desertion; Dismember; Duskmantle, House of Shadow; Enlisted Wurm; Evolutionary Leap; Fabricate; Gamble; Ghostly Prison; Gonti, Canny Acquisitor; Goro-Goro and Satoru; Ixidor, Reality Sculptor; Katilda and Lier; Kuldotha Rebirth; Leonin Relic-Warder; Magmaw; Mass Hysteria; Metalspinner's Puzzleknot; Mistveil Plains; Molten Psyche; Monologue Tax; Mystery Key; Mystic Snake; Notion Thief; Nyx Weaver; Olivia, Opulent Outlaw; Pantlaza, Sun-Favored; Persist; Port Razer; Possibility Storm; Prismatic Ending; Prismatic Vista; Putrid Warrior; Shard of Broken Glass; Slimefoot and Squee; Smuggler's Copter; Spell Snare; Stella Lee, Wild Card; Stoneforge Mystic; Timeless Dragon; Treacherous Terrain; Victimize; Xolatoyac, the Smiling Flood; Yuma, Proud Protector

View File

@@ -0,0 +1,8 @@
[format]
Name:Legacy (BLB)
Type:Archived
Subtype:Legacy
Effective:2024-08-02
Sets:LEA, LEB, 2ED, ARN, ATQ, 3ED, LEG, DRC94, DRK, PHPR, FEM, 4ED, ICE, CHR, HML, ALL, MIR, VIS, 5ED, POR, WTH, TMP, STH, EXO, PO2, USG, ATH, ULG, 6ED, UDS, S99, PTK, MMQ, BRB, NMS, S00, PCY, BTD, INV, PLS, 7ED, APC, ODY, DKM, TOR, JUD, ONS, LGN, SCG, 8ED, MRD, DST, 5DN, CHK, BOK, SOK, 9ED, RAV, GPT, DIS, CSP, TSP, TSB, PLC, FUT, 10E, MED, LRW, DD1, MOR, SHM, EVE, DRB, ME2, ALA, DD2, CFX, DDC, ARB, M10, TD0, FVE, HOP, ME3, ZEN, DDD, PDS, WWK, DDE, ROE, DPA, ARC, M11, FVR, DDF, SOM, TD1, PD2, ME4, MBS, DDG, NPH, TD2, COM, M12, FVL, DDH, ISD, PD3, DKA, DDI, AVR, PC2, M13, V12, DDJ, RTR, CM1, GTC, DDK, DGM, MMA, M14, V13, DDL, THS, C13, BNG, DDM, JOU, MD1, CNS, VMA, M15, V14, DDN, KTK, C14, DVD, EVG, GVL, JVC, FRF, UGF, DDO, DTK, TPR, MM2, ORI, V15, DDP, BFZ, EXP, C15, PZ1, OGW, DDQ, SOI, W16, EMA, EMN, V16, CN2, DDR, KLD, MPS_KLD, C16, PZ2, PCA, AER, MM3, DDS, AKH, MPS_AKH, W17, CMA, E01, HOU, C17, XLN, DDT, IMA, V17, E02, RIX, A25, DDU, DOM, CM2, BBD, SS1, GS1, M19, C18, GRN, MPS_GRN, GK1, G18, GNT, UMA, RNA, MPS_RNA, GK2, WAR, MPS_WAR, MH1, SS2, M20, C19, ELD, MB1, GN2, THB, IKO, C20, SS3, M21, JMP, 2XM, ZNR, ZNE, ZNC, CMR, CC1, KHM, KHC, TSR, STX, STA, C21, MH2, H1R, AFR, AFC, MID, MIC, Q06, VOW, VOC, DBL, CC2, NEO, NEC, SNC, NCC, CLB, 2X2, DMU, DMC, 40K, UNF, GN3, BRO, BRC, BRR, BOT, J22, SCD, DMR, ONE, ONC, MOM, MOC, MUL, MAT, LTR, LTC, CMM, WOE, WOC, WOT, WHO, LCI, LCC, REX, RVR, MKM, MKC, CLU, PIP, OTJ, OTC, OTP, BIG, MH3, M3C, H2R, ACR, BLB, BLC
Banned:"Lifetime" Pass Holder; _____ _____ _____ Trespasser; _____ _____ Rocketship; _____ Balls of Fire; _____ Bird Gets the Worm; _____ Goblin; _____-o-saurus; Adriana's Valor; Advantageous Proclamation; Aerialephant; Ambassador Blorpityblorpboop; Amulet of Quoz; Ancestral Recall; Arcum's Astrolabe; Assemble the Rank and Vile; Baaallerina; Backup Plan; Balance; Bazaar of Baghdad; Bioluminary; Black Lotus; Brago's Favor; Bronze Tablet; Carnival Carnivore; Channel; Chaos Orb; Chicken Troupe; Clandestine Chameleon; Cleanse; Coming Attraction; Command Performance; Complaints Clerk; Contract from Below; Crusade; Darkpact; Deadbeat Attendant; Deathrite Shaman; Dee Kay, Finder of the Lost; Demonic Attorney; Demonic Consultation; Demonic Tutor; Dig Through Time; Discourtesy Clerk; Done for the Day; Double Stroke; Draconian Gate-Bot; Dreadhorde Arcanist; Earthcraft; Echoing Boon; Emissary's Ploy; Expressive Iteration; Falling Star; Fastbond; Fight the _____ Fight; Finishing Move; Flash; Frantic Search; Gitaxian Probe; Glitterflitter; Goblin Recruiter; Gush; Hermit Druid; Hired Heist; Hold the Perimeter; Hymn of the Wilds; Immediate Action; Imperial Seal; Imprison; Incendiary Dissent; Invoke Prejudice; Iterative Analysis; Jeweled Bird; Jihad; Last Voyage of the _____; Library of Alexandria; Line Cutter; Lineprancers; Lurrus of the Dream-Den; Make a _____ Splash; Mana Crypt; Mana Drain; Mana Vault; Memory Jar; Mental Misstep; Mind Twist; Minotaur de Force; Mishra's Workshop; Monitor Monitor; Mox Emerald; Mox Jet; Mox Pearl; Mox Ruby; Mox Sapphire; Muzzio's Preparations; Myra the Magnificent; Mystical Tutor; Natural Unity; Necropotence; Oath of Druids; Oko, Thief of Crowns; Park Bleater; Petting Zookeeper; Pin Collection; Power Play; Pradesh Gypsies; Prize Wall; Proficient Pyrodancer; Quick Fixer; Rad Rascal; Ragavan, Nimble Pilferer; Rebirth; Ride Guide; Robo-Piñata; Roxi, Publicist to the Stars; Scampire; Seasoned Buttoneer; Secret Summoning; Secrets of Paradise; Sensei's Divining Top; Sentinel Dispatch; Shahrazad; Skullclamp; Sol Ring; Soul Swindler; Sovereign's Realm; Spinnerette, Arachnobat; Squirrel Squatters; Step Right Up; Stiltstrider; Stone-Throwing Devils; Strip Mine; Summoner's Bond; Survival of the Fittest; Sword-Swallowing Seraph; Tempest Efreet; The Most Dangerous Gamer; Ticketomaton; Time Vault; Time Walk; Timetwister; Timmerian Fiends; Tinker; Tolarian Academy; Treasure Cruise; Tusk and Whiskers; Underworld Breach; Unexpected Potential; Vampiric Tutor; Weight Advantage; Wheel of Fortune; White Plume Adventurer; Wicker Picker; Windfall; Wizards of the _____; Wolf in _____ Clothing; Worldknit; Wrenn and Six; Yawgmoth's Bargain; Yawgmoth's Will; Zirda, the Dawnwaker
Additional:Aisha of Sparks and Smoke; Arden Angel; Arvinox, the Mind Flail; Baldin, Century Herdmaster; Bjorna, Nightfall Alchemist; Blanka, Ferocious Friend; Cecily, Haunted Mage; Chief Jim Hopper; Chun-Li, Countless Kicks; Daryl, Hunter of Walkers; Dhalsim, Pliable Pacifist; Doric, Nature's Warden; Dustin, Gadget Genius; E. Honda, Sumo Champion; Edgin, Larcenous Lutenist; Eleven, the Mage; Elmar, Ulvenwald Informant; Enkira, Hostile Scavenger; Forge, Neverwinter Charlatan; Gisa's Favorite Shovel; Glenn, the Voice of Calm; Gregor, Shrewd Magistrate; Greymond, Avacyn's Stalwart; Guile, Sonic Soldier; Hansk, Slayer Zealot; Hargilde, Kindly Runechanter; Havengul Laboratory; Hawkins National Laboratory; Holga, Relentless Rager; Immard, the Stormcleaver; Ken, Burning Brawler; Lara Croft, Tomb Raider; Lucas, the Sharpshooter; Lucille; Maarika, Brutal Gladiator; Malik, Grim Manipulator; Max, the Daredevil; Michonne, Ruthless Survivor; Mike, the Dungeon Master; Mind Flayer, the Shadow; Negan, the Cold-Blooded; Othelm, Sigardian Outcast; Rick, Steadfast Leader; Rose Noble; Ryu, World Warrior; Simon, Wild Magic Sorcerer; Sophina, Spearsage Deserter; Tadeas, Juniper Ascendant; The Celestial Toymaker; The Fifteenth Doctor; The Fourteenth Doctor; The Howling Abomination; Themberchaud; The Meep; Vikya, Scorching Stalwart; Wernog, Rider's Chaplain; Will the Wise; Xenk, Paladin Unbroken; Zangief, the Red Cyclone; Zethi, Arcane Blademaster

View File

@@ -0,0 +1,7 @@
[format]
Name:Modern (BLB)
Type:Archived
Subtype:Modern
Effective:2024-08-02
Sets:8ED, MRD, DST, 5DN, CHK, BOK, SOK, 9ED, RAV, GPT, DIS, CSP, TSP, TSB, PLC, FUT, 10E, LRW, MOR, SHM, EVE, ALA, CFX, ARB, M10, ZEN, WWK, ROE, DPA, M11, SOM, MBS, NPH, M12, ISD, DKA, AVR, M13, RTR, GTC, DGM, MMA, M14, THS, BNG, JOU, MD1, M15, KTK, FRF, DTK, MM2, ORI, BFZ, OGW, SOI, W16, EMN, KLD, AER, MM3, W17, AKH, HOU, XLN, RIX, DOM, M19, GRN, GK1, G18, RNA, GK2, WAR, MH1, M20, ELD, THB, IKO, M21, ZNR, KHM, STX, MH2, AFR, MID, VOW, DBL, NEO, SNC, DMU, BRO, ONE, MOM, MAT, LTR, WOE, LCI, MKM, OTJ, BIG, MH3, ACR, BLB
Banned:Ancient Den; Arcum's Astrolabe; Birthing Pod; Blazing Shoal; Bridge from Below; Chrome Mox; Cloudpost; Dark Depths; Deathrite Shaman; Dig Through Time; Dread Return; Eye of Ugin; Faithless Looting; Field of the Dead; Fury; Gitaxian Probe; Glimpse of Nature; Golgari Grave-Troll; Great Furnace; Green Sun's Zenith; Hogaak, Arisen Necropolis; Hypergenesis; Krark-Clan Ironworks; Lurrus of the Dream-Den; Mental Misstep; Mox Opal; Mycosynth Lattice; Mystic Sanctuary; Oko, Thief of Crowns; Once Upon a Time; Ponder; Punishing Fire; Rite of Flame; Seat of the Synod; Second Sunrise; Seething Song; Sensei's Divining Top; Simian Spirit Guide; Skullclamp; Splinter Twin; Summer Bloom; Tibalt's Trickery; Treasure Cruise; Tree of Tales; Umezawa's Jitte; Up the Beanstalk; Uro, Titan of Nature's Wrath; Vault of Whispers; Violent Outburst; Yorion, Sky Nomad

View File

@@ -0,0 +1,7 @@
[format]
Name:Pioneer (BLB)
Type:Archived
Subtype:Pioneer
Effective:2024-08-02
Sets:RTR, GTC, DGM, M14, THS, BNG, JOU, M15, KTK, FRF, DTK, ORI, BFZ, OGW, SOI, W16, EMN, KLD, AER, W17, AKH, HOU, XLN, RIX, DOM, M19, GRN, G18, RNA, WAR, M20, ELD, THB, IKO, M21, ZNR, KHM, STX, AFR, MID, Q06, VOW, DBL, NEO, SNC, DMU, BRO, ONE, MOM, MAT, WOE, LCI, MKM, OTJ, BIG, BLB
Banned:Balustrade Spy; Bloodstained Mire; Expressive Iteration; Felidar Guardian; Field of the Dead; Flooded Strand; Geological Appraiser; Inverter of Truth; Karn, the Great Creator; Kethis, the Hidden Hand; Leyline of Abundance; Lurrus of the Dream-Den; Nexus of Fate; Oko, Thief of Crowns; Once Upon a Time; Polluted Delta; Teferi, Time Raveler; Undercity Informer; Underworld Breach; Uro, Titan of Nature's Wrath; Veil of Summer; Walking Ballista; Wilderness Reclamation; Windswept Heath; Winota, Joiner of Forces; Wooded Foothills

View File

@@ -0,0 +1,6 @@
[format]
Name:Standard (BLB)
Type:Archived
Subtype:Standard
Effective:2024-08-02
Sets:DMU, BRO, ONE, MOM, MAT, WOE, LCI, MKM, OTJ, BIG, BLB

View File

@@ -0,0 +1,8 @@
[format]
Name:Timeless (BLB)
Type:Archived
Subtype:Vintage
Effective:2024-07-30
Sets:KTK, XLN, RIX, DOM, M19, ANA, PANA, GRN, G18, RNA, WAR, M20, ELD, HA1, THB, HA2, IKO, HA3, M21, JMP, AJMP, AKR, ANB, ZNR, KLR, KHM, HA4, STX, STA, HA5, AFR, J21, MID, VOW, YMID, NEO, YNEO, SNC, YSNC, HBG, HA6, EA1, DMU, YDMU, BRO, BRR, YBRO, EA2, ONE, YONE, SIR, SIS, MOM, MUL, MAT, LTR, HA7, EA3, WOE, WOT, YWOE, LCI, YLCI, MKM, YMKM, OTJ, OTP, BIG, YOTJ, MH3, BLB
Restricted:Channel; Demonic Tutor; Tibalt's Trickery
Additional:Admiral Brass, Unsinkable; Burden of Guilt; Clavileño, First of the Blessed; Crashing Footfalls; Desert; Desertion; Dismember; Duskmantle, House of Shadow; Endurance; Enlisted Wurm; Evolutionary Leap; Fabricate; Fury; Gamble; Ghostly Prison; Gonti, Canny Acquisitor; Goro-Goro and Satoru; Grief; Ixidor, Reality Sculptor; Katilda and Lier; Kuldotha Rebirth; Leonin Relic-Warder; Magmaw; Mass Hysteria; Metalspinner's Puzzleknot; Mistveil Plains; Molten Psyche; Monologue Tax; Mystery Key; Mystic Snake; Notion Thief; Nyx Weaver; Olivia, Opulent Outlaw; Pantlaza, Sun-Favored; Persist; Port Razer; Possibility Storm; Prismatic Ending; Prismatic Vista; Putrid Warrior; Shard of Broken Glass; Show and Tell; Slimefoot and Squee; Smuggler's Copter; Solitude; Spell Snare; Stella Lee, Wild Card; Stoneforge Mystic; Subtlety; Timeless Dragon; Treacherous Terrain; Victimize; Xolatoyac, the Smiling Flood; Yuma, Proud Protector

View File

@@ -0,0 +1,9 @@
[format]
Name:Vintage (BLB)
Type:Archived
Subtype:Vintage
Effective:2024-08-02
Sets:LEA, LEB, 2ED, ARN, ATQ, 3ED, LEG, DRC94, DRK, PHPR, FEM, 4ED, ICE, CHR, HML, ALL, MIR, VIS, 5ED, POR, WTH, TMP, STH, EXO, PO2, USG, ATH, ULG, 6ED, UDS, S99, PTK, MMQ, BRB, NMS, S00, PCY, BTD, INV, PLS, 7ED, APC, ODY, DKM, TOR, JUD, ONS, LGN, SCG, 8ED, MRD, DST, 5DN, CHK, BOK, SOK, 9ED, RAV, GPT, DIS, CSP, TSP, TSB, PLC, FUT, 10E, MED, LRW, DD1, MOR, SHM, EVE, DRB, ME2, ALA, DD2, CFX, DDC, ARB, M10, TD0, FVE, HOP, ME3, ZEN, DDD, PDS, WWK, DDE, ROE, DPA, ARC, M11, FVR, DDF, SOM, TD1, PD2, ME4, MBS, DDG, NPH, TD2, COM, M12, FVL, DDH, ISD, PD3, DKA, DDI, AVR, PC2, M13, V12, DDJ, RTR, CM1, GTC, DDK, DGM, MMA, M14, V13, DDL, THS, C13, BNG, DDM, JOU, MD1, CNS, VMA, M15, V14, DDN, KTK, C14, DVD, EVG, GVL, JVC, FRF, UGF, DDO, DTK, TPR, MM2, ORI, V15, DDP, BFZ, EXP, C15, PZ1, OGW, DDQ, SOI, W16, EMA, EMN, V16, CN2, DDR, KLD, MPS_KLD, C16, PZ2, PCA, AER, MM3, DDS, AKH, MPS_AKH, W17, CMA, E01, HOU, C17, XLN, DDT, IMA, V17, E02, RIX, A25, DDU, DOM, CM2, BBD, SS1, GS1, M19, C18, GRN, MPS_GRN, GK1, G18, GNT, UMA, RNA, MPS_RNA, GK2, WAR, MPS_WAR, MH1, SS2, M20, C19, ELD, MB1, GN2, THB, IKO, C20, SS3, M21, JMP, 2XM, ZNR, ZNE, ZNC, CMR, CC1, KHM, KHC, TSR, STX, STA, C21, MH2, H1R, AFR, AFC, MID, MIC, Q06, VOW, VOC, DBL, CC2, NEO, NEC, SNC, NCC, CLB, 2X2, DMU, DMC, 40K, UNF, GN3, BRO, BRC, BRR, BOT, J22, SCD, DMR, ONE, ONC, MOM, MOC, MUL, MAT, LTR, LTC, CMM, WOE, WOC, WOT, WHO, LCI, LCC, REX, RVR, MKM, MKC, CLU, PIP, OTJ, OTC, OTP, BIG, MH3, M3C, H2R, ACR, BLB, BLC
Restricted:Ancestral Recall; Balance; Black Lotus; Brainstorm; Chalice of the Void; Channel; Demonic Consultation; Demonic Tutor; Dig Through Time; Flash; Gitaxian Probe; Golgari Grave-Troll; Gush; Imperial Seal; Karn, the Great Creator; Library of Alexandria; Lion's Eye Diamond; Lodestone Golem; Lotus Petal; Mana Crypt; Mana Vault; Memory Jar; Mental Misstep; Merchant Scroll; Mind's Desire; Monastery Mentor; Mox Emerald; Mox Jet; Mox Pearl; Mox Ruby; Mox Sapphire; Mystic Forge; Mystical Tutor; Narset, Parter of Veils; Necropotence; Sol Ring; Strip Mine; Thorn of Amethyst; Time Vault; Time Walk; Timetwister; Tinker; Tolarian Academy; Treasure Cruise; Trinisphere; Vampiric Tutor; Wheel of Fortune; Windfall; Yawgmoth's Will
Banned:"Lifetime" Pass Holder; _____ _____ _____ Trespasser; _____ _____ Rocketship; _____ Balls of Fire; _____ Bird Gets the Worm; _____ Goblin; _____-o-saurus; Adriana's Valor; Advantageous Proclamation; Aerialephant; Ambassador Blorpityblorpboop; Amulet of Quoz; Assemble the Rank and Vile; Baaallerina; Backup Plan; Bioluminary; Brago's Favor; Bronze Tablet; Carnival Carnivore; Chaos Orb; Chicken Troupe; Clandestine Chameleon; Cleanse; Coming Attraction; Command Performance; Complaints Clerk; Contract from Below; Crusade; Darkpact; Deadbeat Attendant; Dee Kay, Finder of the Lost; Demonic Attorney; Discourtesy Clerk; Done for the Day; Double Stroke; Draconian Gate-Bot; Echoing Boon; Emissary's Ploy; Falling Star; Fight the _____ Fight; Finishing Move; Glitterflitter; Hired Heist; Hold the Perimeter; Hymn of the Wilds; Immediate Action; Imprison; Incendiary Dissent; Invoke Prejudice; Iterative Analysis; Jeweled Bird; Jihad; Last Voyage of the _____; Line Cutter; Lineprancers; Make a _____ Splash; Minotaur de Force; Monitor Monitor; Muzzio's Preparations; Myra the Magnificent; Natural Unity; Park Bleater; Petting Zookeeper; Pin Collection; Power Play; Pradesh Gypsies; Prize Wall; Proficient Pyrodancer; Quick Fixer; Rad Rascal; Rebirth; Ride Guide; Robo-Piñata; Roxi, Publicist to the Stars; Scampire; Seasoned Buttoneer; Secret Summoning; Secrets of Paradise; Sentinel Dispatch; Shahrazad; Soul Swindler; Sovereign's Realm; Spinnerette, Arachnobat; Squirrel Squatters; Step Right Up; Stiltstrider; Stone-Throwing Devils; Summoner's Bond; Sword-Swallowing Seraph; Tempest Efreet; The Most Dangerous Gamer; Ticketomaton; Timmerian Fiends; Tusk and Whiskers; Unexpected Potential; Weight Advantage; Wicker Picker; Wizards of the _____; Wolf in _____ Clothing; Worldknit
Additional:Aisha of Sparks and Smoke; Arden Angel; Arvinox, the Mind Flail; Baldin, Century Herdmaster; Bjorna, Nightfall Alchemist; Blanka, Ferocious Friend; Cecily, Haunted Mage; Chief Jim Hopper; Chun-Li, Countless Kicks; Daryl, Hunter of Walkers; Dhalsim, Pliable Pacifist; Doric, Nature's Warden; Dustin, Gadget Genius; E. Honda, Sumo Champion; Edgin, Larcenous Lutenist; Eleven, the Mage; Elmar, Ulvenwald Informant; Enkira, Hostile Scavenger; Forge, Neverwinter Charlatan; Gisa's Favorite Shovel; Glenn, the Voice of Calm; Gregor, Shrewd Magistrate; Greymond, Avacyn's Stalwart; Guile, Sonic Soldier; Hansk, Slayer Zealot; Hargilde, Kindly Runechanter; Havengul Laboratory; Hawkins National Laboratory; Holga, Relentless Rager; Immard, the Stormcleaver; Ken, Burning Brawler; Lara Croft, Tomb Raider; Lucas, the Sharpshooter; Lucille; Maarika, Brutal Gladiator; Malik, Grim Manipulator; Max, the Daredevil; Michonne, Ruthless Survivor; Mike, the Dungeon Master; Mind Flayer, the Shadow; Negan, the Cold-Blooded; Othelm, Sigardian Outcast; Rick, Steadfast Leader; Rose Noble; Ryu, World Warrior; Simon, Wild Magic Sorcerer; Sophina, Spearsage Deserter; Tadeas, Juniper Ascendant; The Celestial Toymaker; The Fifteenth Doctor; The Fourteenth Doctor; The Howling Abomination; Themberchaud; The Meep; Vikya, Scorching Stalwart; Wernog, Rider's Chaplain; Will the Wise; Xenk, Paladin Unbroken; Zangief, the Red Cyclone; Zethi, Arcane Blademaster

View File

@@ -3,6 +3,5 @@ Name:Brawl
Order:101
Type:Casual
Subtype:Commander
Sets:MID, VOW, NEO, SNC, DMU, BRO, ONE, MOM, MAT, WOE, LCI, MKM, OTJ, BIG
Banned:Pithing Needle
Sets:DMU, BRO, ONE, MOM, MAT, WOE, LCI, MKM, OTJ, BIG, BLB
Additional:Arcane Signet; Command Tower

View File

@@ -4,6 +4,6 @@ Type:Digital
Subtype:Arena
Effective:2019-11-21
Order:142
Sets:KTK, XLN, RIX, DOM, M19, ANA, PANA, GRN, G18, RNA, WAR, M20, ELD, HA1, THB, HA2, IKO, HA3, M21, JMP, AJMP, AKR, ANB, ZNR, KLR, KHM, HA4, STX, STA, HA5, AFR, J21, MID, VOW, YMID, NEO, YNEO, SNC, YSNC, HBG, HA6, EA1, DMU, YDMU, BRO, BRR, YBRO, EA2, ONE, YONE, SIR, SIS, MOM, MUL, MAT, LTR, HA7, EA3, WOE, WOT, YWOE, LCI, YLCI, MKM, YMKM, OTJ, OTP, BIG, YOTJ, MH3
Sets:KTK, XLN, RIX, DOM, M19, ANA, PANA, GRN, G18, RNA, WAR, M20, ELD, HA1, THB, HA2, IKO, HA3, M21, JMP, AJMP, AKR, ANB, ZNR, KLR, KHM, HA4, STX, STA, HA5, AFR, J21, MID, VOW, YMID, NEO, YNEO, SNC, YSNC, HBG, HA6, EA1, DMU, YDMU, BRO, BRR, YBRO, EA2, ONE, YONE, SIR, SIS, MOM, MUL, MAT, LTR, HA7, EA3, WOE, WOT, YWOE, LCI, YLCI, MKM, YMKM, OTJ, OTP, BIG, YOTJ, MH3, BLB
Banned:Agent of Treachery; Arid Mesa; Blood Moon; Bloodstained Mire; Brainstorm; Channel; Commandeer; Counterspell; Dark Ritual; Demonic Tutor; Endurance; Field of the Dead; Flare of Cultivation; Flare of Denial; Flare of Duplication; Flare of Fortitude; Flare of Malice; Flooded Strand; Force of Vigor; Fury; Grief; Harbinger of the Seas; Intruder Alarm; Land Tax; Lightning Bolt; Mana Drain; Marsh Flats; Memory Lapse; Mishra's Bauble; Misty Rainforest; Natural Order; Necropotence; Nexus of Fate; Oko, Thief of Crowns; Once Upon a Time; Polluted Delta; Ragavan, Nimble Pilferer; Reanimate; Scalding Tarn; Show and Tell; Sneak Attack; Solitude; Spreading Seas; Subtlety; Swords to Plowshares; Thassa's Oracle; Tibalt's Trickery; Time Warp; Uro, Titan of Nature's Wrath; Veil of Summer; Verdant Catacombs; Wilderness Reclamation; Windswept Heath; Winter Moon; Wooded Foothills
Additional:Admiral Brass, Unsinkable; Burden of Guilt; Clavileño, First of the Blessed; Crashing Footfalls; Desert; Desertion; Dismember; Duskmantle, House of Shadow; Enlisted Wurm; Evolutionary Leap; Fabricate; Gamble; Ghostly Prison; Gonti, Canny Acquisitor; Goro-Goro and Satoru; Ixidor, Reality Sculptor; Katilda and Lier; Kuldotha Rebirth; Leonin Relic-Warder; Magmaw; Mass Hysteria; Metalspinner's Puzzleknot; Mistveil Plains; Molten Psyche; Monologue Tax; Mystery Key; Mystic Snake; Notion Thief; Nyx Weaver; Olivia, Opulent Outlaw; Pantlaza, Sun-Favored; Persist; Port Razer; Possibility Storm; Prismatic Ending; Prismatic Vista; Putrid Warrior; Shard of Broken Glass; Slimefoot and Squee; Smuggler's Copter; Spell Snare; Stella Lee, Wild Card; Stoneforge Mystic; Timeless Dragon; Treacherous Terrain; Victimize; Xolatoyac, the Smiling Flood; Yuma, Proud Protector

View File

@@ -3,5 +3,5 @@ Name:Legacy
Order:105
Subtype:Legacy
Type:Sanctioned
Sets:LEA, LEB, 2ED, ARN, ATQ, 3ED, LEG, DRC94, DRK, PHPR, FEM, 4ED, ICE, CHR, HML, ALL, MIR, VIS, 5ED, POR, WTH, TMP, STH, EXO, PO2, USG, ATH, ULG, 6ED, UDS, S99, PTK, MMQ, BRB, NMS, S00, PCY, BTD, INV, PLS, 7ED, APC, ODY, DKM, TOR, JUD, ONS, LGN, SCG, 8ED, MRD, DST, 5DN, CHK, BOK, SOK, 9ED, RAV, GPT, DIS, CSP, TSP, TSB, PLC, FUT, 10E, MED, LRW, DD1, MOR, SHM, EVE, DRB, ME2, ALA, DD2, CFX, DDC, ARB, M10, TD0, FVE, HOP, ME3, ZEN, DDD, PDS, WWK, DDE, ROE, DPA, ARC, M11, FVR, DDF, SOM, TD1, PD2, ME4, MBS, DDG, NPH, TD2, COM, M12, FVL, DDH, ISD, PD3, DKA, DDI, AVR, PC2, M13, V12, DDJ, RTR, CM1, GTC, DDK, DGM, MMA, M14, V13, DDL, THS, C13, BNG, DDM, JOU, MD1, CNS, VMA, M15, V14, DDN, KTK, C14, DVD, EVG, GVL, JVC, FRF, UGF, DDO, DTK, TPR, MM2, ORI, V15, DDP, BFZ, EXP, C15, PZ1, OGW, DDQ, SOI, W16, EMA, EMN, V16, CN2, DDR, KLD, MPS_KLD, C16, PZ2, PCA, AER, MM3, DDS, AKH, MPS_AKH, W17, CMA, E01, HOU, C17, XLN, DDT, IMA, V17, E02, RIX, A25, DDU, DOM, CM2, BBD, SS1, GS1, M19, C18, GRN, MPS_GRN, GK1, G18, GNT, UMA, RNA, MPS_RNA, GK2, WAR, MPS_WAR, MH1, SS2, M20, C19, ELD, MB1, GN2, SLD, THB, IKO, C20, SS3, M21, JMP, 2XM, ZNR, ZNE, ZNC, CMR, CC1, KHM, KHC, TSR, STX, STA, C21, MH2, H1R, AFR, AFC, MID, MIC, Q06, VOW, VOC, DBL, CC2, NEO, NEC, SNC, NCC, SLX, CLB, 2X2, DMU, DMC, 40K, UNF, GN3, BRO, BRC, BRR, BOT, J22, SCD, DMR, ONE, ONC, MOM, MOC, MUL, MAT, LTR, LTC, CMM, WOE, WOC, WOT, WHO, LCI, LCC, REX, SPG, RVR, MKM, MKC, CLU, PIP, OTJ, OTC, OTP, BIG, MH3, M3C, H2R, ACR
Sets:LEA, LEB, 2ED, ARN, ATQ, 3ED, LEG, DRC94, DRK, PHPR, FEM, 4ED, ICE, CHR, HML, ALL, MIR, VIS, 5ED, POR, WTH, TMP, STH, EXO, PO2, USG, ATH, ULG, 6ED, UDS, S99, PTK, MMQ, BRB, NMS, S00, PCY, BTD, INV, PLS, 7ED, APC, ODY, DKM, TOR, JUD, ONS, LGN, SCG, 8ED, MRD, DST, 5DN, CHK, BOK, SOK, 9ED, RAV, GPT, DIS, CSP, TSP, TSB, PLC, FUT, 10E, MED, LRW, DD1, MOR, SHM, EVE, DRB, ME2, ALA, DD2, CFX, DDC, ARB, M10, TD0, FVE, HOP, ME3, ZEN, DDD, PDS, WWK, DDE, ROE, DPA, ARC, M11, FVR, DDF, SOM, TD1, PD2, ME4, MBS, DDG, NPH, TD2, COM, M12, FVL, DDH, ISD, PD3, DKA, DDI, AVR, PC2, M13, V12, DDJ, RTR, CM1, GTC, DDK, DGM, MMA, M14, V13, DDL, THS, C13, BNG, DDM, JOU, MD1, CNS, VMA, M15, V14, DDN, KTK, C14, DVD, EVG, GVL, JVC, FRF, UGF, DDO, DTK, TPR, MM2, ORI, V15, DDP, BFZ, EXP, C15, PZ1, OGW, DDQ, SOI, W16, EMA, EMN, V16, CN2, DDR, KLD, MPS_KLD, C16, PZ2, PCA, AER, MM3, DDS, AKH, MPS_AKH, W17, CMA, E01, HOU, C17, XLN, DDT, IMA, V17, E02, RIX, A25, DDU, DOM, CM2, BBD, SS1, GS1, M19, C18, GRN, MPS_GRN, GK1, G18, GNT, UMA, RNA, MPS_RNA, GK2, WAR, MPS_WAR, MH1, SS2, M20, C19, ELD, MB1, GN2, SLD, THB, IKO, C20, SS3, M21, JMP, 2XM, ZNR, ZNE, ZNC, CMR, CC1, KHM, KHC, TSR, STX, STA, C21, MH2, H1R, AFR, AFC, MID, MIC, Q06, VOW, VOC, DBL, CC2, NEO, NEC, SNC, NCC, SLX, CLB, 2X2, DMU, DMC, 40K, UNF, GN3, BRO, BRC, BRR, BOT, J22, SCD, DMR, ONE, ONC, MOM, MOC, MUL, MAT, LTR, LTC, CMM, WOE, WOC, WOT, WHO, LCI, LCC, REX, SPG, RVR, MKM, MKC, CLU, PIP, OTJ, OTC, OTP, BIG, MH3, M3C, H2R, ACR, BLB, BLC
Banned:"Lifetime" Pass Holder; _____ _____ _____ Trespasser; _____ _____ Rocketship; _____ Balls of Fire; _____ Bird Gets the Worm; _____ Goblin; _____-o-saurus; Adriana's Valor; Advantageous Proclamation; Aerialephant; Ambassador Blorpityblorpboop; Amulet of Quoz; Ancestral Recall; Arcum's Astrolabe; Assemble the Rank and Vile; Baaallerina; Backup Plan; Balance; Bazaar of Baghdad; Bioluminary; Black Lotus; Brago's Favor; Bronze Tablet; Carnival Carnivore; Channel; Chaos Orb; Chicken Troupe; Clandestine Chameleon; Cleanse; Coming Attraction; Command Performance; Complaints Clerk; Contract from Below; Crusade; Darkpact; Deadbeat Attendant; Deathrite Shaman; Dee Kay, Finder of the Lost; Demonic Attorney; Demonic Consultation; Demonic Tutor; Dig Through Time; Discourtesy Clerk; Done for the Day; Double Stroke; Draconian Gate-Bot; Dreadhorde Arcanist; Earthcraft; Echoing Boon; Emissary's Ploy; Expressive Iteration; Falling Star; Fastbond; Fight the _____ Fight; Finishing Move; Flash; Frantic Search; Gitaxian Probe; Glitterflitter; Goblin Recruiter; Gush; Hermit Druid; Hired Heist; Hold the Perimeter; Hymn of the Wilds; Immediate Action; Imperial Seal; Imprison; Incendiary Dissent; Invoke Prejudice; Iterative Analysis; Jeweled Bird; Jihad; Last Voyage of the _____; Library of Alexandria; Line Cutter; Lineprancers; Lurrus of the Dream-Den; Make a _____ Splash; Mana Crypt; Mana Drain; Mana Vault; Memory Jar; Mental Misstep; Mind Twist; Minotaur de Force; Mishra's Workshop; Monitor Monitor; Mox Emerald; Mox Jet; Mox Pearl; Mox Ruby; Mox Sapphire; Muzzio's Preparations; Myra the Magnificent; Mystical Tutor; Natural Unity; Necropotence; Oath of Druids; Oko, Thief of Crowns; Park Bleater; Petting Zookeeper; Pin Collection; Power Play; Pradesh Gypsies; Prize Wall; Proficient Pyrodancer; Quick Fixer; Rad Rascal; Ragavan, Nimble Pilferer; Rebirth; Ride Guide; Robo-Piñata; Roxi, Publicist to the Stars; Scampire; Seasoned Buttoneer; Secret Summoning; Secrets of Paradise; Sensei's Divining Top; Sentinel Dispatch; Shahrazad; Skullclamp; Sol Ring; Soul Swindler; Sovereign's Realm; Spinnerette, Arachnobat; Squirrel Squatters; Step Right Up; Stiltstrider; Stone-Throwing Devils; Strip Mine; Summoner's Bond; Survival of the Fittest; Sword-Swallowing Seraph; Tempest Efreet; The Most Dangerous Gamer; Ticketomaton; Time Vault; Time Walk; Timetwister; Timmerian Fiends; Tinker; Tolarian Academy; Treasure Cruise; Tusk and Whiskers; Underworld Breach; Unexpected Potential; Vampiric Tutor; Weight Advantage; Wheel of Fortune; White Plume Adventurer; Wicker Picker; Windfall; Wizards of the _____; Wolf in _____ Clothing; Worldknit; Wrenn and Six; Yawgmoth's Bargain; Yawgmoth's Will; Zirda, the Dawnwaker

View File

@@ -3,5 +3,5 @@ Name:Modern
Order:103
Subtype:Modern
Type:Sanctioned
Sets:8ED, MRD, DST, 5DN, CHK, BOK, SOK, 9ED, RAV, GPT, DIS, CSP, TSP, TSB, PLC, FUT, 10E, LRW, MOR, SHM, EVE, ALA, CFX, ARB, M10, ZEN, WWK, ROE, DPA, M11, SOM, MBS, NPH, M12, ISD, DKA, AVR, M13, RTR, GTC, DGM, MMA, M14, THS, BNG, JOU, MD1, M15, KTK, FRF, DTK, MM2, ORI, BFZ, OGW, SOI, W16, EMN, KLD, AER, MM3, W17, AKH, HOU, XLN, RIX, DOM, M19, GRN, GK1, G18, RNA, GK2, WAR, MH1, M20, ELD, THB, IKO, M21, ZNR, KHM, STX, MH2, AFR, MID, VOW, DBL, NEO, SNC, DMU, BRO, ONE, MOM, MAT, LTR, WOE, LCI, MKM, OTJ, BIG, MH3, ACR
Sets:8ED, MRD, DST, 5DN, CHK, BOK, SOK, 9ED, RAV, GPT, DIS, CSP, TSP, TSB, PLC, FUT, 10E, LRW, MOR, SHM, EVE, ALA, CFX, ARB, M10, ZEN, WWK, ROE, DPA, M11, SOM, MBS, NPH, M12, ISD, DKA, AVR, M13, RTR, GTC, DGM, MMA, M14, THS, BNG, JOU, MD1, M15, KTK, FRF, DTK, MM2, ORI, BFZ, OGW, SOI, W16, EMN, KLD, AER, MM3, W17, AKH, HOU, XLN, RIX, DOM, M19, GRN, GK1, G18, RNA, GK2, WAR, MH1, M20, ELD, THB, IKO, M21, ZNR, KHM, STX, MH2, AFR, MID, VOW, DBL, NEO, SNC, DMU, BRO, ONE, MOM, MAT, LTR, WOE, LCI, MKM, OTJ, BIG, MH3, ACR, BLB
Banned:Ancient Den; Arcum's Astrolabe; Birthing Pod; Blazing Shoal; Bridge from Below; Chrome Mox; Cloudpost; Dark Depths; Deathrite Shaman; Dig Through Time; Dread Return; Eye of Ugin; Faithless Looting; Field of the Dead; Fury; Gitaxian Probe; Glimpse of Nature; Golgari Grave-Troll; Great Furnace; Green Sun's Zenith; Hogaak, Arisen Necropolis; Hypergenesis; Krark-Clan Ironworks; Lurrus of the Dream-Den; Mental Misstep; Mox Opal; Mycosynth Lattice; Mystic Sanctuary; Oko, Thief of Crowns; Once Upon a Time; Ponder; Punishing Fire; Rite of Flame; Seat of the Synod; Second Sunrise; Seething Song; Sensei's Divining Top; Simian Spirit Guide; Skullclamp; Splinter Twin; Summer Bloom; Tibalt's Trickery; Treasure Cruise; Tree of Tales; Umezawa's Jitte; Up the Beanstalk; Uro, Titan of Nature's Wrath; Vault of Whispers; Violent Outburst; Yorion, Sky Nomad

View File

@@ -3,5 +3,5 @@ Name:Pioneer
Order:102
Subtype:Pioneer
Type:Sanctioned
Sets:RTR, GTC, DGM, M14, THS, BNG, JOU, M15, KTK, FRF, DTK, ORI, BFZ, OGW, SOI, W16, EMN, KLD, AER, W17, AKH, HOU, XLN, RIX, DOM, M19, GRN, G18, RNA, WAR, M20, ELD, THB, IKO, M21, ZNR, KHM, STX, AFR, MID, Q06, VOW, DBL, NEO, SNC, DMU, BRO, ONE, MOM, MAT, WOE, LCI, MKM, OTJ, BIG
Sets:RTR, GTC, DGM, M14, THS, BNG, JOU, M15, KTK, FRF, DTK, ORI, BFZ, OGW, SOI, W16, EMN, KLD, AER, W17, AKH, HOU, XLN, RIX, DOM, M19, GRN, G18, RNA, WAR, M20, ELD, THB, IKO, M21, ZNR, KHM, STX, AFR, MID, Q06, VOW, DBL, NEO, SNC, DMU, BRO, ONE, MOM, MAT, WOE, LCI, MKM, OTJ, BIG, BLB
Banned:Balustrade Spy; Bloodstained Mire; Expressive Iteration; Felidar Guardian; Field of the Dead; Flooded Strand; Geological Appraiser; Inverter of Truth; Karn, the Great Creator; Kethis, the Hidden Hand; Leyline of Abundance; Lurrus of the Dream-Den; Nexus of Fate; Oko, Thief of Crowns; Once Upon a Time; Polluted Delta; Teferi, Time Raveler; Undercity Informer; Underworld Breach; Uro, Titan of Nature's Wrath; Veil of Summer; Walking Ballista; Wilderness Reclamation; Windswept Heath; Winota, Joiner of Forces; Wooded Foothills

View File

@@ -3,5 +3,4 @@ Name:Standard
Order:101
Subtype:Standard
Type:Sanctioned
Sets:MID, VOW, NEO, SNC, DMU, BRO, ONE, MOM, MAT, WOE, LCI, MKM, OTJ, BIG
Banned:Fable of the Mirror-Breaker; Invoke Despair; Reckoner Bankbuster; The Meathook Massacre
Sets:DMU, BRO, ONE, MOM, MAT, WOE, LCI, MKM, OTJ, BIG, BLB

View File

@@ -3,6 +3,6 @@ Name:Vintage
Order:104
Subtype:Vintage
Type:Sanctioned
Sets:LEA, LEB, 2ED, ARN, ATQ, 3ED, LEG, DRC94, DRK, PHPR, FEM, 4ED, ICE, CHR, HML, ALL, MIR, VIS, 5ED, POR, WTH, TMP, STH, EXO, PO2, USG, ATH, ULG, 6ED, UDS, S99, PTK, MMQ, BRB, NMS, S00, PCY, BTD, INV, PLS, 7ED, APC, ODY, DKM, TOR, JUD, ONS, LGN, SCG, 8ED, MRD, DST, 5DN, CHK, BOK, SOK, 9ED, RAV, GPT, DIS, CSP, TSP, TSB, PLC, FUT, 10E, MED, LRW, DD1, MOR, SHM, EVE, DRB, ME2, ALA, DD2, CFX, DDC, ARB, M10, TD0, FVE, HOP, ME3, ZEN, DDD, PDS, WWK, DDE, ROE, DPA, ARC, M11, FVR, DDF, SOM, TD1, PD2, ME4, MBS, DDG, NPH, TD2, COM, M12, FVL, DDH, ISD, PD3, DKA, DDI, AVR, PC2, M13, V12, DDJ, RTR, CM1, GTC, DDK, DGM, MMA, M14, V13, DDL, THS, C13, BNG, DDM, JOU, MD1, CNS, VMA, M15, V14, DDN, KTK, C14, DVD, EVG, GVL, JVC, FRF, UGF, DDO, DTK, TPR, MM2, ORI, V15, DDP, BFZ, EXP, C15, PZ1, OGW, DDQ, SOI, W16, EMA, EMN, V16, CN2, DDR, KLD, MPS_KLD, C16, PZ2, PCA, AER, MM3, DDS, AKH, MPS_AKH, W17, CMA, E01, HOU, C17, XLN, DDT, IMA, V17, E02, RIX, A25, DDU, DOM, CM2, BBD, SS1, GS1, M19, C18, GRN, MPS_GRN, GK1, G18, GNT, UMA, RNA, MPS_RNA, GK2, WAR, MPS_WAR, MH1, SS2, M20, C19, ELD, MB1, GN2, SLD, THB, IKO, C20, SS3, M21, JMP, 2XM, ZNR, ZNE, ZNC, CMR, CC1, KHM, KHC, TSR, STX, STA, C21, MH2, H1R, AFR, AFC, MID, MIC, Q06, VOW, VOC, DBL, CC2, NEO, NEC, SNC, NCC, SLX, CLB, 2X2, DMU, DMC, 40K, UNF, GN3, BRO, BRC, BRR, BOT, J22, SCD, DMR, ONE, ONC, MOM, MOC, MUL, MAT, LTR, LTC, CMM, WOE, WOC, WOT, WHO, LCI, LCC, REX, SPG, RVR, MKM, MKC, CLU, PIP, OTJ, OTC, OTP, BIG, MH3, M3C, H2R, ACR
Sets:LEA, LEB, 2ED, ARN, ATQ, 3ED, LEG, DRC94, DRK, PHPR, FEM, 4ED, ICE, CHR, HML, ALL, MIR, VIS, 5ED, POR, WTH, TMP, STH, EXO, PO2, USG, ATH, ULG, 6ED, UDS, S99, PTK, MMQ, BRB, NMS, S00, PCY, BTD, INV, PLS, 7ED, APC, ODY, DKM, TOR, JUD, ONS, LGN, SCG, 8ED, MRD, DST, 5DN, CHK, BOK, SOK, 9ED, RAV, GPT, DIS, CSP, TSP, TSB, PLC, FUT, 10E, MED, LRW, DD1, MOR, SHM, EVE, DRB, ME2, ALA, DD2, CFX, DDC, ARB, M10, TD0, FVE, HOP, ME3, ZEN, DDD, PDS, WWK, DDE, ROE, DPA, ARC, M11, FVR, DDF, SOM, TD1, PD2, ME4, MBS, DDG, NPH, TD2, COM, M12, FVL, DDH, ISD, PD3, DKA, DDI, AVR, PC2, M13, V12, DDJ, RTR, CM1, GTC, DDK, DGM, MMA, M14, V13, DDL, THS, C13, BNG, DDM, JOU, MD1, CNS, VMA, M15, V14, DDN, KTK, C14, DVD, EVG, GVL, JVC, FRF, UGF, DDO, DTK, TPR, MM2, ORI, V15, DDP, BFZ, EXP, C15, PZ1, OGW, DDQ, SOI, W16, EMA, EMN, V16, CN2, DDR, KLD, MPS_KLD, C16, PZ2, PCA, AER, MM3, DDS, AKH, MPS_AKH, W17, CMA, E01, HOU, C17, XLN, DDT, IMA, V17, E02, RIX, A25, DDU, DOM, CM2, BBD, SS1, GS1, M19, C18, GRN, MPS_GRN, GK1, G18, GNT, UMA, RNA, MPS_RNA, GK2, WAR, MPS_WAR, MH1, SS2, M20, C19, ELD, MB1, GN2, SLD, THB, IKO, C20, SS3, M21, JMP, 2XM, ZNR, ZNE, ZNC, CMR, CC1, KHM, KHC, TSR, STX, STA, C21, MH2, H1R, AFR, AFC, MID, MIC, Q06, VOW, VOC, DBL, CC2, NEO, NEC, SNC, NCC, SLX, CLB, 2X2, DMU, DMC, 40K, UNF, GN3, BRO, BRC, BRR, BOT, J22, SCD, DMR, ONE, ONC, MOM, MOC, MUL, MAT, LTR, LTC, CMM, WOE, WOC, WOT, WHO, LCI, LCC, REX, SPG, RVR, MKM, MKC, CLU, PIP, OTJ, OTC, OTP, BIG, MH3, M3C, H2R, ACR, BLB, BLC
Restricted:Ancestral Recall; Balance; Black Lotus; Brainstorm; Chalice of the Void; Channel; Demonic Consultation; Demonic Tutor; Dig Through Time; Flash; Gitaxian Probe; Golgari Grave-Troll; Gush; Imperial Seal; Karn, the Great Creator; Library of Alexandria; Lion's Eye Diamond; Lodestone Golem; Lotus Petal; Mana Crypt; Mana Vault; Memory Jar; Mental Misstep; Merchant Scroll; Mind's Desire; Monastery Mentor; Mox Emerald; Mox Jet; Mox Pearl; Mox Ruby; Mox Sapphire; Mystic Forge; Mystical Tutor; Narset, Parter of Veils; Necropotence; Sol Ring; Strip Mine; Thorn of Amethyst; Time Vault; Time Walk; Timetwister; Tinker; Tolarian Academy; Treasure Cruise; Trinisphere; Vampiric Tutor; Wheel of Fortune; Windfall; Yawgmoth's Will
Banned:"Lifetime" Pass Holder; _____ _____ _____ Trespasser; _____ _____ Rocketship; _____ Balls of Fire; _____ Bird Gets the Worm; _____ Goblin; _____-o-saurus; Adriana's Valor; Advantageous Proclamation; Aerialephant; Ambassador Blorpityblorpboop; Amulet of Quoz; Assemble the Rank and Vile; Baaallerina; Backup Plan; Bioluminary; Brago's Favor; Bronze Tablet; Carnival Carnivore; Chaos Orb; Chicken Troupe; Clandestine Chameleon; Cleanse; Coming Attraction; Command Performance; Complaints Clerk; Contract from Below; Crusade; Darkpact; Deadbeat Attendant; Dee Kay, Finder of the Lost; Demonic Attorney; Discourtesy Clerk; Done for the Day; Double Stroke; Draconian Gate-Bot; Echoing Boon; Emissary's Ploy; Falling Star; Fight the _____ Fight; Finishing Move; Glitterflitter; Hired Heist; Hold the Perimeter; Hymn of the Wilds; Immediate Action; Imprison; Incendiary Dissent; Invoke Prejudice; Iterative Analysis; Jeweled Bird; Jihad; Last Voyage of the _____; Line Cutter; Lineprancers; Make a _____ Splash; Minotaur de Force; Monitor Monitor; Muzzio's Preparations; Myra the Magnificent; Natural Unity; Park Bleater; Petting Zookeeper; Pin Collection; Power Play; Pradesh Gypsies; Prize Wall; Proficient Pyrodancer; Quick Fixer; Rad Rascal; Rebirth; Ride Guide; Robo-Piñata; Roxi, Publicist to the Stars; Scampire; Seasoned Buttoneer; Secret Summoning; Secrets of Paradise; Sentinel Dispatch; Shahrazad; Soul Swindler; Sovereign's Realm; Spinnerette, Arachnobat; Squirrel Squatters; Step Right Up; Stiltstrider; Stone-Throwing Devils; Summoner's Bond; Sword-Swallowing Seraph; Tempest Efreet; The Most Dangerous Gamer; Ticketomaton; Timmerian Fiends; Tusk and Whiskers; Unexpected Potential; Weight Advantage; Wicker Picker; Wizards of the _____; Wolf in _____ Clothing; Worldknit

View File

@@ -1,35 +1,17 @@
package forge.player;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import com.google.common.base.Predicates;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import forge.card.CardType;
import forge.card.MagicColor;
import forge.game.Game;
import forge.game.GameEntity;
import forge.game.GameEntityCounterTable;
import forge.game.GameEntityView;
import forge.game.GameEntityViewMap;
import forge.game.*;
import forge.game.ability.AbilityUtils;
import forge.game.card.Card;
import forge.game.card.CardCollection;
import forge.game.card.CardCollectionView;
import forge.game.card.CardFactoryUtil;
import forge.game.card.CardLists;
import forge.game.card.CardPredicates;
import forge.game.card.*;
import forge.game.card.CardPredicates.Presets;
import forge.game.card.CardView;
import forge.game.card.CounterEnumType;
import forge.game.card.CounterType;
import forge.game.cost.*;
import forge.game.player.Player;
import forge.game.player.PlayerCollection;
import forge.game.player.PlayerView;
import forge.game.spellability.SpellAbility;
import forge.game.spellability.SpellAbilityStackInstance;
@@ -42,6 +24,8 @@ import forge.gui.util.SGuiChoose;
import forge.util.*;
import forge.util.collect.FCollectionView;
import java.util.*;
public class HumanCostDecision extends CostDecisionMakerBase {
private final PlayerControllerHuman controller;
private String orString = null;
@@ -726,6 +710,19 @@ public class HumanCostDecision extends CostDecisionMakerBase {
return new PaymentDecision(0);
}
@Override
public PaymentDecision visit(final CostPromiseGift cost) {
// TODO Parse the specific gift
PlayerCollection opponents = cost.getPotentialPlayers(player, ability);
Player giftee = controller.chooseSingleEntityForEffect(opponents, null, ability, "Choose an opponent to promise a gift", false, null, null);
if (giftee == null) {
return null;
}
return PaymentDecision.players(Lists.newArrayList(giftee));
}
@Override
public PaymentDecision visit(final CostPutCardToLib cost) {
Integer c = cost.getAbilityAmount(ability);