Merge origin/master

This commit is contained in:
USER 2019-09-05 08:46:15 +08:00
commit 26a741580c
15 changed files with 608 additions and 9 deletions

View file

@ -0,0 +1,47 @@
package mage.cards.c;
import mage.abilities.Ability;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.effects.common.continuous.BoostEquippedEffect;
import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect;
import mage.abilities.keyword.EquipAbility;
import mage.abilities.keyword.HasteAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.AttachmentType;
import mage.constants.CardType;
import mage.constants.Outcome;
import mage.constants.SubType;
import java.util.UUID;
/**
* @author jmharmon
*/
public final class CrystalSlipper extends CardImpl {
public CrystalSlipper(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{1}{R}");
this.subtype.add(SubType.EQUIPMENT);
// Equipped creature gets +1/+0 and has haste.
Ability ability = new SimpleStaticAbility(new BoostEquippedEffect(1, 0));
ability.addEffect(new GainAbilityAttachedEffect(
HasteAbility.getInstance(), AttachmentType.EQUIPMENT).setText("and has haste")
);
// Equip {1}
this.addAbility(new EquipAbility(Outcome.BoostCreature, new GenericManaCost(1)));
}
public CrystalSlipper(final CrystalSlipper card) {
super(card);
}
@Override
public CrystalSlipper copy() {
return new CrystalSlipper(this);
}
}

View file

@ -0,0 +1,71 @@
package mage.cards.g;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.SacrificeTargetCost;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.keyword.FlyingAbility;
import mage.abilities.mana.ActivatedManaAbilityImpl;
import mage.abilities.mana.AnyColorManaAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Zone;
import mage.filter.common.FilterControlledPermanent;
import mage.filter.predicate.mageobject.SubtypePredicate;
import mage.game.permanent.token.custom.FoodToken;
import mage.target.common.TargetControlledPermanent;
import java.util.UUID;
/**
*
* @author jmharmon
*/
public final class GildedGoose extends CardImpl {
private static final FilterControlledPermanent filter = new FilterControlledPermanent("a Food");
static {
filter.add(new SubtypePredicate(SubType.FOOD));
}
public GildedGoose(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{G}");
this.subtype.add(SubType.BIRD);
this.power = new MageInt(0);
this.toughness = new MageInt(2);
// Flying
this.addAbility(FlyingAbility.getInstance());
// When Gilded Goose enters the battlefield, create a Food token. (Its an artifact with {2}, {T}, Sacrifice this artifact: You gain 3 life.)
this.addAbility(new EntersBattlefieldTriggeredAbility(new CreateTokenEffect(new FoodToken()), false));
// {1}{G}, {T}: Create a Food token.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new FoodToken()), new ManaCostsImpl("{1}{G}"));
ability.addCost(new TapSourceCost());
this.addAbility(ability);
// {T}, Sacrifice a Food: Add one mana of any color.
ActivatedManaAbilityImpl ability1 = new AnyColorManaAbility(new TapSourceCost());
ability1.addCost(new SacrificeTargetCost(new TargetControlledPermanent(filter)));
this.addAbility(ability1);
}
public GildedGoose(final GildedGoose card) {
super(card);
}
@Override
public GildedGoose copy() {
return new GildedGoose(this);
}
}

View file

@ -0,0 +1,56 @@
package mage.cards.g;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.SacrificeSourceCost;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.effects.common.GainLifeEffect;
import mage.abilities.mana.AnyColorManaAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Zone;
import java.util.UUID;
/**
*
* @author jmharmon
*/
public final class GoldenEgg extends CardImpl {
public GoldenEgg(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{2}");
this.subtype.add(SubType.FOOD);
// When Golden Egg enters the battlefield, draw a card.
this.addAbility(new EntersBattlefieldTriggeredAbility(new DrawCardSourceControllerEffect(1)));
// {1}, {T}: Sacrifice Golden Egg: Add one mana of any color.
Ability ability = new AnyColorManaAbility(new GenericManaCost(1));
ability.addCost(new TapSourceCost());
ability.addCost(new SacrificeSourceCost());
this.addAbility(ability);
// {2}, {T}, Sacrifice Golden Egg: You gain 3 life.
Ability ability1 = new SimpleActivatedAbility(Zone.BATTLEFIELD, new GainLifeEffect(3), new ManaCostsImpl("{2}"));
ability1.addCost(new TapSourceCost());
ability1.addCost(new SacrificeSourceCost());
this.addAbility(ability1);
}
public GoldenEgg(final GoldenEgg card) {
super(card);
}
@Override
public GoldenEgg copy() {
return new GoldenEgg(this);
}
}

View file

@ -0,0 +1,42 @@
package mage.cards.m;
import mage.MageInt;
import mage.abilities.keyword.FlyingAbility;
import mage.abilities.mana.BlueManaAbility;
import mage.abilities.mana.GreenManaAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import java.util.UUID;
/**
* @author TheElk801
*/
public final class MaraleafPixie extends CardImpl {
public MaraleafPixie(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{G}{U}");
this.subtype.add(SubType.FAERIE);
this.power = new MageInt(2);
this.toughness = new MageInt(2);
// Flying
this.addAbility(FlyingAbility.getInstance());
// {T}: Add {G} or {U}.
this.addAbility(new GreenManaAbility());
this.addAbility(new BlueManaAbility());
}
private MaraleafPixie(final MaraleafPixie card) {
super(card);
}
@Override
public MaraleafPixie copy() {
return new MaraleafPixie(this);
}
}

View file

@ -0,0 +1,67 @@
package mage.cards.r;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.Mode;
import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility;
import mage.abilities.effects.common.DrawCardAllEffect;
import mage.abilities.effects.common.LoseLifeAllPlayersEffect;
import mage.abilities.effects.common.SacrificeAllEffect;
import mage.abilities.effects.common.discard.DiscardEachPlayerEffect;
import mage.abilities.keyword.FlyingAbility;
import mage.abilities.keyword.HasteAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.SuperType;
import mage.filter.StaticFilters;
import java.util.UUID;
/**
* @author TheElk801
*/
public final class RankleMasterOfPranks extends CardImpl {
public RankleMasterOfPranks(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}{B}");
this.addSuperType(SuperType.LEGENDARY);
this.subtype.add(SubType.FAERIE);
this.subtype.add(SubType.ROGUE);
this.power = new MageInt(3);
this.toughness = new MageInt(3);
// Flying
this.addAbility(FlyingAbility.getInstance());
// Haste
this.addAbility(HasteAbility.getInstance());
// Whenever Rankle, Master of Pranks deals combat damage to a player, choose any number
// Each player discards a card.
Ability ability = new DealsCombatDamageToAPlayerTriggeredAbility(new DiscardEachPlayerEffect(), false);
// Each player loses 1 life and draws a card.
Mode mode = new Mode(new LoseLifeAllPlayersEffect(1));
mode.addEffect(new DrawCardAllEffect(1).setText("and draws a card"));
ability.addMode(mode);
// Each player sacrifices a creature.
ability.addMode(new Mode(new SacrificeAllEffect(StaticFilters.FILTER_CONTROLLED_CREATURE_SHORT_TEXT)));
ability.getModes().setMinModes(0);
ability.getModes().setMaxModes(3);
this.addAbility(ability);
}
private RankleMasterOfPranks(final RankleMasterOfPranks card) {
super(card);
}
@Override
public RankleMasterOfPranks copy() {
return new RankleMasterOfPranks(this);
}
}

View file

@ -0,0 +1,71 @@
package mage.cards.r;
import mage.abilities.Ability;
import mage.abilities.effects.common.ReturnToHandTargetEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.filter.StaticFilters;
import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.target.common.TargetCreaturePermanent;
import java.util.UUID;
/**
* @author TheElk801
*/
public final class RunAwayTogether extends CardImpl {
public RunAwayTogether(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{U}");
// Choose two target creatures controlled by different players. Return those creatures to their owners' hands.
this.getSpellAbility().addEffect(new ReturnToHandTargetEffect(true));
this.getSpellAbility().addTarget(new RunAwayTogetherTarget());
}
private RunAwayTogether(final RunAwayTogether card) {
super(card);
}
@Override
public RunAwayTogether copy() {
return new RunAwayTogether(this);
}
}
class RunAwayTogetherTarget extends TargetCreaturePermanent {
RunAwayTogetherTarget() {
super(2, 2, StaticFilters.FILTER_PERMANENT_CREATURE, false);
}
private RunAwayTogetherTarget(final RunAwayTogetherTarget target) {
super(target);
}
@Override
public RunAwayTogetherTarget copy() {
return new RunAwayTogetherTarget(this);
}
@Override
public boolean canTarget(UUID controllerId, UUID id, Ability source, Game game) {
if (!super.canTarget(controllerId, id, source, game)) {
return false;
}
Permanent creature = game.getPermanent(id);
if (creature == null) {
return false;
}
return !this.getTargets()
.stream()
.map(game::getPermanent)
.anyMatch(permanent -> permanent != null
&& !creature.getId().equals(permanent.getId())
&& !creature.isControlledBy(permanent.getControllerId())
);
}
}
// give carly rae jepsen a sword

View file

@ -0,0 +1,41 @@
package mage.cards.t;
import mage.MageInt;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import java.util.UUID;
/**
* @author TheElk801
*/
public final class TomeRaider extends CardImpl {
public TomeRaider(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{U}");
this.subtype.add(SubType.FAERIE);
this.power = new MageInt(1);
this.toughness = new MageInt(1);
// Flying
this.addAbility(FlyingAbility.getInstance());
// When Tome Raider enters the battlefield, draw a card.
this.addAbility(new EntersBattlefieldTriggeredAbility(new DrawCardSourceControllerEffect(1)));
}
private TomeRaider(final TomeRaider card) {
super(card);
}
@Override
public TomeRaider copy() {
return new TomeRaider(this);
}
}

View file

@ -0,0 +1,65 @@
package mage.cards.w;
import mage.MageInt;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.continuous.BecomesCreatureSourceEffect;
import mage.abilities.keyword.DefenderAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.*;
import mage.game.permanent.token.TokenImpl;
import java.util.UUID;
/**
*
* @author jmharmon
*/
public final class WishfulMerfolk extends CardImpl {
public WishfulMerfolk(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}");
this.subtype.add(SubType.MERFOLK);
this.power = new MageInt(3);
this.toughness = new MageInt(2);
// Defender
this.addAbility(DefenderAbility.getInstance());
// {1}{U}: Wishful Merfolk loses defender and becomes a Human until end of turn.
//this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new WishfulMerfolkEffect(), new ManaCostsImpl("{1}{U}")));
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BecomesCreatureSourceEffect(new WishfulMerfolkToken(), "", Duration.EndOfTurn), new ManaCostsImpl("{1}{U}")));
}
public WishfulMerfolk(final WishfulMerfolk card) {
super(card);
}
@Override
public WishfulMerfolk copy() {
return new WishfulMerfolk(this);
}
}
class WishfulMerfolkToken extends TokenImpl {
public WishfulMerfolkToken() {
super("Wishful Merfolk", "");
this.cardType.add(CardType.CREATURE);
this.subtype.add(SubType.HUMAN);
this.color.setBlue(true);
this.power = new MageInt(3);
this.toughness = new MageInt(2);
}
public WishfulMerfolkToken(final WishfulMerfolkToken token) {
super(token);
}
public WishfulMerfolkToken copy() {
return new WishfulMerfolkToken(this);
}
}

View file

@ -0,0 +1,44 @@
package mage.cards.w;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.SacrificeSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.effects.keyword.ScryEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Zone;
import java.util.UUID;
/**
*
* @author jmharmon
*/
public final class WitchingWell extends CardImpl {
public WitchingWell(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{U}");
// When Witching Well enters the battlefield, scry 2.
this.addAbility(new EntersBattlefieldTriggeredAbility(new ScryEffect(2)));
// {3}{U}, Sacrifice Witching Well: Draw two cards.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(2), new ManaCostsImpl("{3}{U}"));
ability.addCost(new SacrificeSourceCost());
this.addAbility(ability);
}
public WitchingWell(final WitchingWell card) {
super(card);
}
@Override
public WitchingWell copy() {
return new WitchingWell(this);
}
}

View file

@ -29,5 +29,14 @@ public final class ThroneOfEldraine extends ExpansionSet {
cards.add(new SetCardInfo("Arcane Signet", 331, Rarity.COMMON, mage.cards.a.ArcaneSignet.class)); cards.add(new SetCardInfo("Arcane Signet", 331, Rarity.COMMON, mage.cards.a.ArcaneSignet.class));
cards.add(new SetCardInfo("Chulane, Teller of Tales", 326, Rarity.MYTHIC, mage.cards.c.ChulaneTellerOfTales.class)); cards.add(new SetCardInfo("Chulane, Teller of Tales", 326, Rarity.MYTHIC, mage.cards.c.ChulaneTellerOfTales.class));
cards.add(new SetCardInfo("Crystal Slipper", 119, Rarity.COMMON, mage.cards.c.CrystalSlipper.class));
cards.add(new SetCardInfo("Gilded Goose", 160, Rarity.RARE, mage.cards.g.GildedGoose.class));
cards.add(new SetCardInfo("Golden Egg", 220, Rarity.COMMON, mage.cards.g.GoldenEgg.class));
cards.add(new SetCardInfo("Maraleaf Pixie", 196, Rarity.UNCOMMON, mage.cards.m.MaraleafPixie.class));
cards.add(new SetCardInfo("Rankle, Master of Pranks", 356, Rarity.MYTHIC, mage.cards.r.RankleMasterOfPranks.class));
cards.add(new SetCardInfo("Run Away Together", 62, Rarity.COMMON, mage.cards.r.RunAwayTogether.class));
cards.add(new SetCardInfo("Tome Raider", 68, Rarity.COMMON, mage.cards.t.TomeRaider.class));
cards.add(new SetCardInfo("Wishful Merfolk", 73, Rarity.COMMON, mage.cards.w.WishfulMerfolk.class));
cards.add(new SetCardInfo("Witching Well", 74, Rarity.COMMON, mage.cards.w.WitchingWell.class));
} }
} }

View file

@ -336,6 +336,8 @@ public class Modes extends LinkedHashMap<UUID, Mode> {
sb.append("choose one or more. Each mode must target ").append(getMaxModesFilter().getMessage()); sb.append("choose one or more. Each mode must target ").append(getMaxModesFilter().getMessage());
} else if (this.getMinModes() == 0 && this.getMaxModes() == 1) { } else if (this.getMinModes() == 0 && this.getMaxModes() == 1) {
sb.append("choose up to one"); sb.append("choose up to one");
} else if (this.getMinModes() == 0 && this.getMaxModes() == 3) {
sb.append("choose any number");
} else if (this.getMinModes() == 1 && this.getMaxModes() > 2) { } else if (this.getMinModes() == 1 && this.getMaxModes() > 2) {
sb.append("choose one or more"); sb.append("choose one or more");
} else if (this.getMinModes() == 1 && this.getMaxModes() == 2) { } else if (this.getMinModes() == 1 && this.getMaxModes() == 2) {

View file

@ -1,9 +1,6 @@
package mage.abilities.effects.common; package mage.abilities.effects.common;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.dynamicvalue.DynamicValue; import mage.abilities.dynamicvalue.DynamicValue;
import mage.abilities.dynamicvalue.common.StaticValue; import mage.abilities.dynamicvalue.common.StaticValue;
@ -16,8 +13,11 @@ import mage.players.Player;
import mage.target.common.TargetControlledPermanent; import mage.target.common.TargetControlledPermanent;
import mage.util.CardUtil; import mage.util.CardUtil;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
/** /**
*
* @author BetaSteward_at_googlemail.com * @author BetaSteward_at_googlemail.com
*/ */
public class SacrificeAllEffect extends OneShotEffect { public class SacrificeAllEffect extends OneShotEffect {
@ -86,10 +86,10 @@ public class SacrificeAllEffect extends OneShotEffect {
sb.append("each player sacrifices "); sb.append("each player sacrifices ");
if (amount.toString().equals("X")) { if (amount.toString().equals("X")) {
sb.append(amount.toString()); sb.append(amount.toString());
} else { sb.append(' ');
sb.append(CardUtil.numberToText(amount.toString(), "a")); } else if (!filter.getMessage().startsWith("a ")) {
sb.append(CardUtil.numberToText(amount.toString(), "a "));
} }
sb.append(' ');
sb.append(filter.getMessage()); sb.append(filter.getMessage());
staticText = sb.toString(); staticText = sb.toString();
} }

View file

@ -37,6 +37,7 @@ public enum SubType {
CLUE("Clue", SubTypeSet.ArtifactType), CLUE("Clue", SubTypeSet.ArtifactType),
CONTRAPTION("Contraption", SubTypeSet.ArtifactType), CONTRAPTION("Contraption", SubTypeSet.ArtifactType),
EQUIPMENT("Equipment", SubTypeSet.ArtifactType), EQUIPMENT("Equipment", SubTypeSet.ArtifactType),
FOOD("Food", SubTypeSet.ArtifactType),
FORTIFICATION("Fortification", SubTypeSet.ArtifactType), FORTIFICATION("Fortification", SubTypeSet.ArtifactType),
TREASURE("Treasure", SubTypeSet.ArtifactType), TREASURE("Treasure", SubTypeSet.ArtifactType),
VEHICLE("Vehicle", SubTypeSet.ArtifactType), VEHICLE("Vehicle", SubTypeSet.ArtifactType),

View file

@ -0,0 +1,62 @@
package mage.game.permanent.token.custom;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.SacrificeSourceCost;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.effects.common.GainLifeEffect;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Zone;
import mage.game.permanent.token.TokenImpl;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
*
* @author jmharmon
*/
public final class FoodToken extends TokenImpl {
static final private List<String> tokenImageSets = new ArrayList<>();
static {
tokenImageSets.addAll(Arrays.asList("ELD"));
}
public FoodToken() {
this(null, 0);
}
public FoodToken(String setCode) {
this(setCode, 0);
}
public FoodToken(String setCode, int tokenType) {
super("Food", "Food token");
availableImageSetCodes = tokenImageSets;
setOriginalExpansionSetCode(setCode);
cardType.add(CardType.ARTIFACT);
subtype.add(SubType.FOOD);
// {2}, {T}, Sacrifice this artifact: You gain 3 life.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new GainLifeEffect(3), new GenericManaCost(2));
ability.addCost(new TapSourceCost());
SacrificeSourceCost cost = new SacrificeSourceCost();
cost.setText("Sacrifice this artifact");
ability.addCost(cost);
this.addAbility(ability);
}
public FoodToken(final FoodToken token) {
super(token);
}
public FoodToken copy() {
return new FoodToken(this);
}
}

View file

@ -35698,8 +35698,6 @@ Oakenform|Core Set 2020|341|C|{2}{G}|Enchantment - Aura|||Enchant creature$Encha
Prized Unicorn|Core Set 2020|342|C|{3}{G}|Creature - Unicorn|2|2|All creatures able to block Prized Unicorn do so.| Prized Unicorn|Core Set 2020|342|C|{3}{G}|Creature - Unicorn|2|2|All creatures able to block Prized Unicorn do so.|
Titanic Growth|Core Set 2020|343|C|{1}{G}|Instant|||Target creature gets +4/+4 until end of turn.| Titanic Growth|Core Set 2020|343|C|{1}{G}|Instant|||Target creature gets +4/+4 until end of turn.|
Woodland Mystic|Core Set 2020|344|C|{1}{G}|Creature - Elf Druid|1|1|{T}: Add {G}.| Woodland Mystic|Core Set 2020|344|C|{1}{G}|Creature - Elf Druid|1|1|{T}: Add {G}.|
Chulane, Teller of Tales|Throne of Eldraine|326|M|{2}{G}{W}{U}|Legendary Creature - Human Druid|2|4|Vigilance$Whenever you cast a creature spell, draw a card, then you may put a land card from your hand onto the battlefield.${3}, {T}: Return target creature you control to its owner's hand.|
Arcane Signet|Throne of Eldraine|331|C|{2}|Artifact|||{T}: Add one mana of any color in your commander's color identity.|
Cliffside Rescuer|Commander 2019|1|U|{1}{W}|Creature - Kor Soldier|2|2|Vigilance${T}, Sacrifice Cliffside Rescuer: Target permanent you control gets protection from each opponent until end of turn.| Cliffside Rescuer|Commander 2019|1|U|{1}{W}|Creature - Kor Soldier|2|2|Vigilance${T}, Sacrifice Cliffside Rescuer: Target permanent you control gets protection from each opponent until end of turn.|
Commander's Insignia|Commander 2019|2|R|{2}{W}{W}|Enchantment|||Creatures you control get +1/+1 for each time you've cast your commander from the command zone this game.| Commander's Insignia|Commander 2019|2|R|{2}{W}{W}|Enchantment|||Creatures you control get +1/+1 for each time you've cast your commander from the command zone this game.|
Doomed Artisan|Commander 2019|3|R|{2}{W}|Creature - Human Artificer|1|1|Sculptures you control can't attack or block.$At the beginning of your end step, create a colorless Sculpture artifact creature token with "This creature's power and toughness are each equal to the number of Sculptures you control."| Doomed Artisan|Commander 2019|3|R|{2}{W}|Creature - Human Artificer|1|1|Sculptures you control can't attack or block.$At the beginning of your end step, create a colorless Sculpture artifact creature token with "This creature's power and toughness are each equal to the number of Sculptures you control."|
@ -35995,3 +35993,26 @@ Island|Commander 2019|291|C||Basic Land - Island|||({T}: Add {U}.)|
Swamp|Commander 2019|294|C||Basic Land - Swamp|||({T}: Add {B}.)| Swamp|Commander 2019|294|C||Basic Land - Swamp|||({T}: Add {B}.)|
Mountain|Commander 2019|297|C||Basic Land - Mountain|||({T}: Add {R}.)| Mountain|Commander 2019|297|C||Basic Land - Mountain|||({T}: Add {R}.)|
Forest|Commander 2019|300|C||Basic Land - Forest|||({T}: Add {G}.)| Forest|Commander 2019|300|C||Basic Land - Forest|||({T}: Add {G}.)|
Faerie Vandal|Throne of Eldraine|45|U|{1}{U}|Creature - Faerie Rogue|1|2|Flash$Flying$Whenever you draw your second card each turn, put a +1/+1 counter on Faerie Vandal.|
Run Away Together|Throne of Eldraine|62|C|{1}{U}|Instant|||Choose two target creatures controlled by different players. Return those creatures to their owners' hands.|
Tome Raider|Throne of Eldraine|68|C|{2}{U}|Creature - Faerie|1|1|Flying$When Tome Raider enters the battlefield, draw a card.|
Wishful Merfolk|Throne of Eldraine|73|C|{1}{U}|Creature - Merfolk|3|2|Defender${1}{U}: Wishful Merfolk loses defender and becomes a Human until end of turn.|
Witching Well|Throne of Eldraine|74|C|{U}|Artifact|||When Witching Well enters the battlefield, scry 2.${3}{U}, Sacrifice Witching Well: Draw two cards.|
Eye Collector|Throne of Eldraine|86|C|{B}|Creature - Faerie|1|1|Flying$Whenever Eye Collector deals combat damage to a player, each player puts the top card of their library into their graveyard.|
Syr Konrad, the Grim|Throne of Eldraine|107|U|{3}{B}{B}|Legendary Creature - Human Knight|5|4|Whenever another creature dies, or a creature card is put into a graveyard from anywhere other than the battlefield, or a creature card leaves your graveyard, Syr Konrad, the Grim deals 1 damage to each opponent.${1}{B}: Each player puts the top card of their library into their graveyard.|
Crystal Slipper|Throne of Eldraine|119|C|{1}{R}|Artifact - Equipment|||Equipped creature gets +1/+0 and has haste.$Equip {1}|
Gilded Goose|Throne of Eldraine|160|R|{G}|Creature - Bird|0|2|Flying$When Gilded Goose enters the battlefield, create a Food token.${1}{G}, {T}: Create a Food token.${T}, Sacrifice a Food: Add one mana of any color.|
Maraleaf Pixie|Throne of Eldraine|196|U|{G}{U}|Creature - Faerie|2|2|Flying${T}: Add {G} or {U}.|
Oko, Thief of Crowns|Throne of Eldraine|197|M|{1}{G}{U}|Legendary Planeswalker - Oko|4|+2: Create a Food token.$+1: Target artifact or creature loses all abilities and becomes a green Elk creature with base power and toughness 3/3.$5: Exchange control of target artifact or creature you control and target creature an opponent controls with power 3 or less.|
Wintermoor Commander|Throne of Eldraine|205|U|{W}{B}|Creature - Human Knight|2|*|Deathtouch$Wintermoor Commander's toughness is equal to the number of Knights you control.$Whenever Wintermoor Commander attacks, another target Knight you control gains indestructible until end of turn.|
Golden Egg|Throne of Eldraine|220|C|{2}|Artifact - Food|||When Golden Egg enters the battlefield, draw a card.${1}, {T}: Sacrifice Golden Egg: Add one mana of any color.${2}, {T}, Sacrifice Golden Egg: You gain 3 life.|
Tournament Grounds|Throne of Eldraine|248|U||Land|||{T}: Add {C}.${T}: Add {R}, {W}, or {B}. Spend this mana only to cast a Knight or Equipment spell.|
Witch's Cottage|Throne of Eldraine|249|C||Land - Swamp|||({T}: Add {B}.)$Witch's Cottage enters the battlefield tapped unless you control three or more other Swamps.$When Witch's Cottage enters the battlefield untapped, you may put target creature card from your graveyard on top of your library.|
Embereth Shieldbreaker|Throne of Eldraine|292|U|{1}{R}|Creature - Human Knight|2|1|Battle Display {R}$Sorcery — Adventure$Destroy target artifact.|
Flaxen Intruder|Throne of Eldraine|297|U|{G}|Creature - Human Berserker|1|2|Whenever Flaxen Intruder deals combat damage to a player, you may sacrifice it. When you do, destroy target artifact or enchantment.$Welcome Home {5}{G}{G}$Sorcery — Adventure$Create three 2/2 green Bear creature tokens.|
Lovestruck Beast|Throne of Eldraine|299|R|{2}{G}|Creature - Beast Noble|5|5|Lovestruck Beast can't attack unless you control a 1/1 creature.$Heart's Desire {G}$Sorcery — Adventure$Create a 1/1 white Human creature token.|
Chulane, Teller of Tales|Throne of Eldraine|326|M|{2}{G}{W}{U}|Legendary Creature - Human Druid|2|4|Vigilance$Whenever you cast a creature spell, draw a card, then you may put a land card from your hand onto the battlefield.${3}, {T}: Return target creature you control to its owner's hand.|
Arcane Signet|Throne of Eldraine|331|C|{2}|Artifact|||{T}: Add one mana of any color in your commander's color identity.|
The Circle of Loyalty|Throne of Eldraine|336|M|{4}{W}{W}|Legendary Artifact|||This spell costs {1} less to cast for each Knight you control.$Creatures you control get +1/+1.$Whenever you cast a legendary spell, create a 2/2 white Knight creature token with vigilance.${3}{W}, {T}: Create a 2/2 white Knight creature token with vigilance.|
Midnight Clock|Throne of Eldraine|346|R|{2}{U}|Artifact|||{T}: Add {U}.${2}{U}: Put an hour counter on Midnight Clock.$At the beginning of your upkeep, put an hour counter on Midnight Clock.$When the twelfth hour counter is put on Midnight Clock, shuffle your hand and graveyard into your library, then draw seven cards. Exile Midnight Clock.|
Rankle, Master of Pranks|Throne of Eldraine|356|M|{2}{B}{B}|Legendary Creature - Faerie Rogue|3|3|Flying, haste$Whenever Rankle, Master of Pranks deals combat damage to a player, choose any number —$• Each player discards a card.$• Each player loses 1 life and draws a card.$• Each player sacrifices a creature.|