diff --git a/Mage.Sets/src/mage/cards/b/BarrierOfBones.java b/Mage.Sets/src/mage/cards/b/BarrierOfBones.java
new file mode 100644
index 0000000000..bde2f7fbf3
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/b/BarrierOfBones.java
@@ -0,0 +1,44 @@
+package mage.cards.b;
+
+import java.util.UUID;
+import mage.MageInt;
+import mage.abilities.common.EntersBattlefieldTriggeredAbility;
+import mage.abilities.effects.keyword.SurveilEffect;
+import mage.constants.SubType;
+import mage.abilities.keyword.DefenderAbility;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+
+/**
+ *
+ * @author TheElk801
+ */
+public final class BarrierOfBones extends CardImpl {
+
+ public BarrierOfBones(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{B}");
+
+ this.subtype.add(SubType.SKELETON);
+ this.subtype.add(SubType.WALL);
+ this.power = new MageInt(0);
+ this.toughness = new MageInt(3);
+
+ // Defender
+ this.addAbility(DefenderAbility.getInstance());
+
+ // When Barrier of Bones enters the battlefield, surveil 1.
+ this.addAbility(new EntersBattlefieldTriggeredAbility(
+ new SurveilEffect(1), false
+ ));
+ }
+
+ public BarrierOfBones(final BarrierOfBones card) {
+ super(card);
+ }
+
+ @Override
+ public BarrierOfBones copy() {
+ return new BarrierOfBones(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/b/BartizanBats.java b/Mage.Sets/src/mage/cards/b/BartizanBats.java
new file mode 100644
index 0000000000..7f9efcaf93
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/b/BartizanBats.java
@@ -0,0 +1,36 @@
+package mage.cards.b;
+
+import java.util.UUID;
+import mage.MageInt;
+import mage.constants.SubType;
+import mage.abilities.keyword.FlyingAbility;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+
+/**
+ *
+ * @author TheElk801
+ */
+public final class BartizanBats extends CardImpl {
+
+ public BartizanBats(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{B}");
+
+ this.subtype.add(SubType.BAT);
+ this.power = new MageInt(3);
+ this.toughness = new MageInt(1);
+
+ // Flying
+ this.addAbility(FlyingAbility.getInstance());
+ }
+
+ public BartizanBats(final BartizanBats card) {
+ super(card);
+ }
+
+ @Override
+ public BartizanBats copy() {
+ return new BartizanBats(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/b/BurglarRat.java b/Mage.Sets/src/mage/cards/b/BurglarRat.java
new file mode 100644
index 0000000000..f6efa16d72
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/b/BurglarRat.java
@@ -0,0 +1,44 @@
+package mage.cards.b;
+
+import java.util.UUID;
+import mage.MageInt;
+import mage.abilities.common.EntersBattlefieldTriggeredAbility;
+import mage.abilities.dynamicvalue.common.StaticValue;
+import mage.abilities.effects.common.discard.DiscardEachPlayerEffect;
+import mage.constants.SubType;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+import mage.constants.TargetController;
+
+/**
+ *
+ * @author TheElk801
+ */
+public final class BurglarRat extends CardImpl {
+
+ public BurglarRat(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{B}");
+
+ this.subtype.add(SubType.RAT);
+ this.power = new MageInt(1);
+ this.toughness = new MageInt(1);
+
+ // When Burglar Rat enters the battlefield, each opponent discards a card.
+ this.addAbility(new EntersBattlefieldTriggeredAbility(
+ new DiscardEachPlayerEffect(
+ new StaticValue(1), false,
+ TargetController.OPPONENT
+ )
+ ));
+ }
+
+ public BurglarRat(final BurglarRat card) {
+ super(card);
+ }
+
+ @Override
+ public BurglarRat copy() {
+ return new BurglarRat(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/c/Camaraderie.java b/Mage.Sets/src/mage/cards/c/Camaraderie.java
new file mode 100644
index 0000000000..505d1de53f
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/c/Camaraderie.java
@@ -0,0 +1,72 @@
+package mage.cards.c;
+
+import java.util.UUID;
+import mage.abilities.Ability;
+import mage.abilities.effects.OneShotEffect;
+import mage.abilities.effects.common.continuous.BoostControlledEffect;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+import mage.constants.Duration;
+import mage.constants.Outcome;
+import mage.filter.StaticFilters;
+import mage.game.Game;
+import mage.players.Player;
+
+/**
+ *
+ * @author TheElk801
+ */
+public final class Camaraderie extends CardImpl {
+
+ public Camaraderie(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{4}{G}{W}");
+
+ // You gain X life and draw X cards, where X is the number of creatures you control. Creatures you control get +1/+1 until end of turn.
+ this.getSpellAbility().addEffect(new CamaraderieEffect());
+ }
+
+ public Camaraderie(final Camaraderie card) {
+ super(card);
+ }
+
+ @Override
+ public Camaraderie copy() {
+ return new Camaraderie(this);
+ }
+}
+
+class CamaraderieEffect extends OneShotEffect {
+
+ public CamaraderieEffect() {
+ super(Outcome.Benefit);
+ this.staticText = "You gain X life and draw X cards, "
+ + "where X is the number of creatures you control. "
+ + "Creatures you control get +1/+1 until end of turn.";
+ }
+
+ public CamaraderieEffect(final CamaraderieEffect effect) {
+ super(effect);
+ }
+
+ @Override
+ public CamaraderieEffect copy() {
+ return new CamaraderieEffect(this);
+ }
+
+ @Override
+ public boolean apply(Game game, Ability source) {
+ Player player = game.getPlayer(source.getSourceId());
+ if (player == null) {
+ return false;
+ }
+ int xValue = game.getBattlefield().count(
+ StaticFilters.FILTER_CONTROLLED_CREATURE,
+ source.getSourceId(), source.getControllerId(), game
+ );
+ player.gainLife(xValue, game, source);
+ player.drawCards(xValue, game);
+ game.addEffect(new BoostControlledEffect(1, 1, Duration.EndOfTurn), source);
+ return true;
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/c/CaptureSphere.java b/Mage.Sets/src/mage/cards/c/CaptureSphere.java
new file mode 100644
index 0000000000..57225284db
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/c/CaptureSphere.java
@@ -0,0 +1,57 @@
+package mage.cards.c;
+
+import java.util.UUID;
+import mage.constants.SubType;
+import mage.abilities.keyword.FlashAbility;
+import mage.target.common.TargetCreaturePermanent;
+import mage.abilities.Ability;
+import mage.abilities.common.EntersBattlefieldTriggeredAbility;
+import mage.abilities.common.SimpleStaticAbility;
+import mage.abilities.effects.common.AttachEffect;
+import mage.abilities.effects.common.DontUntapInControllersUntapStepEnchantedEffect;
+import mage.abilities.effects.common.TapEnchantedEffect;
+import mage.constants.Outcome;
+import mage.target.TargetPermanent;
+import mage.abilities.keyword.EnchantAbility;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+import mage.constants.Zone;
+
+/**
+ *
+ * @author TheElk801
+ */
+public final class CaptureSphere extends CardImpl {
+
+ public CaptureSphere(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{U}");
+
+ this.subtype.add(SubType.AURA);
+
+ // Flash
+ this.addAbility(FlashAbility.getInstance());
+
+ // Enchant creature
+ TargetPermanent auraTarget = new TargetCreaturePermanent();
+ this.getSpellAbility().addTarget(auraTarget);
+ this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature));
+ Ability ability = new EnchantAbility(auraTarget.getTargetName());
+ this.addAbility(ability);
+
+ // When Capture Sphere enters the battlefield, tap enchanted creature.
+ this.addAbility(new EntersBattlefieldTriggeredAbility(new TapEnchantedEffect()));
+
+ // Enchanted creature doesn't untap during its controller's untap step.
+ this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new DontUntapInControllersUntapStepEnchantedEffect()));
+ }
+
+ public CaptureSphere(final CaptureSphere card) {
+ super(card);
+ }
+
+ @Override
+ public CaptureSphere copy() {
+ return new CaptureSphere(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/c/ChanceForGlory.java b/Mage.Sets/src/mage/cards/c/ChanceForGlory.java
new file mode 100644
index 0000000000..c630431bd6
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/c/ChanceForGlory.java
@@ -0,0 +1,36 @@
+package mage.cards.c;
+
+import java.util.UUID;
+import mage.abilities.effects.common.continuous.GainAbilityControlledEffect;
+import mage.abilities.effects.common.turn.AddExtraTurnControllerEffect;
+import mage.abilities.keyword.IndestructibleAbility;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+import mage.constants.Duration;
+
+/**
+ *
+ * @author TheElk801
+ */
+public final class ChanceForGlory extends CardImpl {
+
+ public ChanceForGlory(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{R}{W}");
+
+ // Creatures you control gain indestructible. Take an extra turn after this one. At the beginning of that turn's end step, you lose the game.
+ this.getSpellAbility().addEffect(new GainAbilityControlledEffect(
+ IndestructibleAbility.getInstance(), Duration.EndOfGame
+ ).setText("Creatures you control gain indestructible."));
+ this.getSpellAbility().addEffect(new AddExtraTurnControllerEffect(true));
+ }
+
+ public ChanceForGlory(final ChanceForGlory card) {
+ super(card);
+ }
+
+ @Override
+ public ChanceForGlory copy() {
+ return new ChanceForGlory(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/d/DawnOfHope.java b/Mage.Sets/src/mage/cards/d/DawnOfHope.java
new file mode 100644
index 0000000000..c65faba3be
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/d/DawnOfHope.java
@@ -0,0 +1,49 @@
+package mage.cards.d;
+
+import java.util.UUID;
+import mage.abilities.common.GainLifeControllerTriggeredAbility;
+import mage.abilities.common.SimpleActivatedAbility;
+import mage.abilities.costs.mana.GenericManaCost;
+import mage.abilities.costs.mana.ManaCostsImpl;
+import mage.abilities.effects.common.CreateTokenEffect;
+import mage.abilities.effects.common.DoIfCostPaid;
+import mage.abilities.effects.common.DrawCardSourceControllerEffect;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+import mage.constants.Zone;
+import mage.game.permanent.token.SoldierLifelinkToken;
+
+/**
+ *
+ * @author TheElk801
+ */
+public final class DawnOfHope extends CardImpl {
+
+ public DawnOfHope(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{W}");
+
+ // Whenever you gain life, you may pay {2}. If you do, draw a card.
+ this.addAbility(new GainLifeControllerTriggeredAbility(
+ new DoIfCostPaid(
+ new DrawCardSourceControllerEffect(1),
+ new GenericManaCost(2)), false
+ ));
+
+ // {3}{W}: Create a 1/1 white Soldier creature token with lifelink.
+ this.addAbility(new SimpleActivatedAbility(
+ Zone.BATTLEFIELD,
+ new CreateTokenEffect(new SoldierLifelinkToken()),
+ new ManaCostsImpl("{3}{W}")
+ ));
+ }
+
+ public DawnOfHope(final DawnOfHope card) {
+ super(card);
+ }
+
+ @Override
+ public DawnOfHope copy() {
+ return new DawnOfHope(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/d/DazzlingLights.java b/Mage.Sets/src/mage/cards/d/DazzlingLights.java
new file mode 100644
index 0000000000..eb398cf7e6
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/d/DazzlingLights.java
@@ -0,0 +1,37 @@
+package mage.cards.d;
+
+import java.util.UUID;
+import mage.abilities.effects.common.continuous.BoostTargetEffect;
+import mage.abilities.effects.keyword.SurveilEffect;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+import mage.constants.Duration;
+import mage.target.common.TargetCreaturePermanent;
+
+/**
+ *
+ * @author TheElk801
+ */
+public final class DazzlingLights extends CardImpl {
+
+ public DazzlingLights(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{U}");
+
+ // Target creature gets -3/-0 until end of turn.
+ this.getSpellAbility().addEffect(new BoostTargetEffect(-3, 0, Duration.EndOfTurn));
+ this.getSpellAbility().addTarget(new TargetCreaturePermanent());
+
+ // Surveil 2.
+ this.getSpellAbility().addEffect(new SurveilEffect(2));
+ }
+
+ public DazzlingLights(final DazzlingLights card) {
+ super(card);
+ }
+
+ @Override
+ public DazzlingLights copy() {
+ return new DazzlingLights(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/d/DevkarinDissident.java b/Mage.Sets/src/mage/cards/d/DevkarinDissident.java
new file mode 100644
index 0000000000..95b4baaba7
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/d/DevkarinDissident.java
@@ -0,0 +1,45 @@
+package mage.cards.d;
+
+import java.util.UUID;
+import mage.MageInt;
+import mage.abilities.common.SimpleActivatedAbility;
+import mage.abilities.costs.mana.ManaCostsImpl;
+import mage.abilities.effects.common.continuous.BoostSourceEffect;
+import mage.constants.SubType;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+import mage.constants.Duration;
+import mage.constants.Zone;
+
+/**
+ *
+ * @author TheElk801
+ */
+public final class DevkarinDissident extends CardImpl {
+
+ public DevkarinDissident(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G}");
+
+ this.subtype.add(SubType.ELF);
+ this.subtype.add(SubType.WARRIOR);
+ this.power = new MageInt(2);
+ this.toughness = new MageInt(2);
+
+ // {4}{G}: Devkarin Dissident gets +2/+2 until end of turn.
+ this.addAbility(new SimpleActivatedAbility(
+ Zone.BATTLEFIELD,
+ new BoostSourceEffect(2, 2, Duration.EndOfTurn),
+ new ManaCostsImpl("{4}{G}")
+ ));
+ }
+
+ public DevkarinDissident(final DevkarinDissident card) {
+ super(card);
+ }
+
+ @Override
+ public DevkarinDissident copy() {
+ return new DevkarinDissident(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/d/DivineVisitation.java b/Mage.Sets/src/mage/cards/d/DivineVisitation.java
new file mode 100644
index 0000000000..f7914a8e97
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/d/DivineVisitation.java
@@ -0,0 +1,85 @@
+package mage.cards.d;
+
+import java.util.UUID;
+import mage.abilities.Ability;
+import mage.abilities.common.SimpleStaticAbility;
+import mage.abilities.effects.ReplacementEffectImpl;
+import mage.abilities.effects.common.CopyEffect;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+import mage.constants.Duration;
+import mage.constants.Outcome;
+import mage.constants.Zone;
+import mage.game.Game;
+import mage.game.events.EntersTheBattlefieldEvent;
+import mage.game.events.GameEvent;
+import mage.game.permanent.Permanent;
+import mage.game.permanent.PermanentToken;
+import mage.game.permanent.token.AngelVigilanceToken;
+
+/**
+ *
+ * @author TheElk801
+ */
+public final class DivineVisitation extends CardImpl {
+
+ public DivineVisitation(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{W}{W}");
+
+ // TODO: This implementation is not entirely correct, see https://twitter.com/EliShffrn/status/1042145606582591490
+ // If one or more creature tokens would be created under your control, that many 4/4 white Angel creature tokens with flying and vigilance are created instead.
+ this.addAbility(new SimpleStaticAbility(
+ Zone.BATTLEFIELD, new DivineVisitationEffect()
+ ));
+ }
+
+ public DivineVisitation(final DivineVisitation card) {
+ super(card);
+ }
+
+ @Override
+ public DivineVisitation copy() {
+ return new DivineVisitation(this);
+ }
+}
+
+class DivineVisitationEffect extends ReplacementEffectImpl {
+
+ public DivineVisitationEffect() {
+ super(Duration.WhileOnBattlefield, Outcome.Copy, false);
+ staticText = "If one or more creature tokens would be created "
+ + "under your control, that many 4/4 white Angel creature "
+ + "tokens with flying and vigilance are created instead.";
+ }
+
+ public DivineVisitationEffect(DivineVisitationEffect effect) {
+ super(effect);
+ }
+
+ @Override
+ public boolean checksEventType(GameEvent event, Game game) {
+ return event.getType() == GameEvent.EventType.ENTERS_THE_BATTLEFIELD;
+ }
+
+ @Override
+ public boolean applies(GameEvent event, Ability source, Game game) {
+ Permanent perm = ((EntersTheBattlefieldEvent) event).getTarget();
+ return perm != null
+ && perm.isCreature()
+ && perm instanceof PermanentToken
+ && perm.isControlledBy(source.getControllerId());
+ }
+
+ @Override
+ public boolean replaceEvent(GameEvent event, Ability source, Game game) {
+ game.addEffect(new CopyEffect(Duration.Custom, new AngelVigilanceToken(), event.getTargetId()), source);
+ return false;
+ }
+
+ @Override
+ public DivineVisitationEffect copy() {
+ return new DivineVisitationEffect(this);
+ }
+
+}
diff --git a/Mage.Sets/src/mage/cards/d/DouserOfLights.java b/Mage.Sets/src/mage/cards/d/DouserOfLights.java
new file mode 100644
index 0000000000..cc4b449eb5
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/d/DouserOfLights.java
@@ -0,0 +1,32 @@
+package mage.cards.d;
+
+import java.util.UUID;
+import mage.MageInt;
+import mage.constants.SubType;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+
+/**
+ *
+ * @author TheElk801
+ */
+public final class DouserOfLights extends CardImpl {
+
+ public DouserOfLights(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{B}");
+
+ this.subtype.add(SubType.HORROR);
+ this.power = new MageInt(4);
+ this.toughness = new MageInt(5);
+ }
+
+ public DouserOfLights(final DouserOfLights card) {
+ super(card);
+ }
+
+ @Override
+ public DouserOfLights copy() {
+ return new DouserOfLights(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/d/DrownedSecrets.java b/Mage.Sets/src/mage/cards/d/DrownedSecrets.java
new file mode 100644
index 0000000000..50c5e63527
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/d/DrownedSecrets.java
@@ -0,0 +1,46 @@
+package mage.cards.d;
+
+import java.util.UUID;
+import mage.ObjectColor;
+import mage.abilities.Ability;
+import mage.abilities.common.SpellCastControllerTriggeredAbility;
+import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+import mage.filter.FilterSpell;
+import mage.filter.predicate.mageobject.ColorPredicate;
+import mage.target.TargetPlayer;
+
+/**
+ *
+ * @author TheElk801
+ */
+public final class DrownedSecrets extends CardImpl {
+
+ private static final FilterSpell filter = new FilterSpell("a blue spell");
+
+ static {
+ filter.add(new ColorPredicate(ObjectColor.BLUE));
+ }
+
+ public DrownedSecrets(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{U}");
+
+ // Whenever you cast a blue spell, target player puts the top two cards if their library into their graveyard.
+ Ability ability = new SpellCastControllerTriggeredAbility(
+ new PutLibraryIntoGraveTargetEffect(2), filter, false
+ );
+ ability.addTarget(new TargetPlayer());
+ this.addAbility(ability);
+ }
+
+ public DrownedSecrets(final DrownedSecrets card) {
+ super(card);
+ }
+
+ @Override
+ public DrownedSecrets copy() {
+ return new DrownedSecrets(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/e/ElectrostaticField.java b/Mage.Sets/src/mage/cards/e/ElectrostaticField.java
new file mode 100644
index 0000000000..39347660ea
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/e/ElectrostaticField.java
@@ -0,0 +1,46 @@
+package mage.cards.e;
+
+import java.util.UUID;
+import mage.MageInt;
+import mage.abilities.common.SpellCastControllerTriggeredAbility;
+import mage.abilities.effects.common.DamagePlayersEffect;
+import mage.constants.SubType;
+import mage.abilities.keyword.DefenderAbility;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+import mage.constants.TargetController;
+import mage.filter.StaticFilters;
+
+/**
+ *
+ * @author TheElk801
+ */
+public final class ElectrostaticField extends CardImpl {
+
+ public ElectrostaticField(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{R}");
+
+ this.subtype.add(SubType.WALL);
+ this.power = new MageInt(0);
+ this.toughness = new MageInt(4);
+
+ // Defender
+ this.addAbility(DefenderAbility.getInstance());
+
+ // When you cast an instant or sorcery spell, Electrostatic Field deals 1 damage to each opponent.
+ this.addAbility(new SpellCastControllerTriggeredAbility(
+ new DamagePlayersEffect(1, TargetController.OPPONENT),
+ StaticFilters.FILTER_SPELL_AN_INSTANT_OR_SORCERY, false
+ ));
+ }
+
+ public ElectrostaticField(final ElectrostaticField card) {
+ super(card);
+ }
+
+ @Override
+ public ElectrostaticField copy() {
+ return new ElectrostaticField(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/e/ErstwhileTrooper.java b/Mage.Sets/src/mage/cards/e/ErstwhileTrooper.java
new file mode 100644
index 0000000000..0714681883
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/e/ErstwhileTrooper.java
@@ -0,0 +1,58 @@
+package mage.cards.e;
+
+import java.util.UUID;
+import mage.MageInt;
+import mage.abilities.Ability;
+import mage.abilities.common.LimitedTimesPerTurnActivatedAbility;
+import mage.abilities.costs.common.DiscardTargetCost;
+import mage.abilities.effects.common.continuous.BoostSourceEffect;
+import mage.abilities.effects.common.continuous.GainAbilitySourceEffect;
+import mage.abilities.keyword.TrampleAbility;
+import mage.constants.SubType;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+import mage.constants.Duration;
+import mage.constants.Zone;
+import mage.filter.StaticFilters;
+import mage.target.common.TargetCardInHand;
+
+/**
+ *
+ * @author TheElk801
+ */
+public final class ErstwhileTrooper extends CardImpl {
+
+ public ErstwhileTrooper(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{B}{G}");
+
+ this.subtype.add(SubType.ZOMBIE);
+ this.subtype.add(SubType.SOLDIER);
+ this.power = new MageInt(2);
+ this.toughness = new MageInt(2);
+
+ // Discard a creature card: Erstwhile Trooper gets +2/+2 and gains trample until end of turn. Activate this ability only once each turn.
+ Ability ability = new LimitedTimesPerTurnActivatedAbility(
+ Zone.BATTLEFIELD,
+ new BoostSourceEffect(
+ 2, 2, Duration.EndOfTurn
+ ).setText("{this} gets +2/+2"),
+ new DiscardTargetCost(new TargetCardInHand(
+ StaticFilters.FILTER_CARD_CREATURE_A
+ ))
+ );
+ ability.addEffect(new GainAbilitySourceEffect(
+ TrampleAbility.getInstance(), Duration.EndOfTurn
+ ).setText("and gains trample until end of turn"));
+ this.addAbility(ability);
+ }
+
+ public ErstwhileTrooper(final ErstwhileTrooper card) {
+ super(card);
+ }
+
+ @Override
+ public ErstwhileTrooper copy() {
+ return new ErstwhileTrooper(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/f/FearlessHalberdier.java b/Mage.Sets/src/mage/cards/f/FearlessHalberdier.java
new file mode 100644
index 0000000000..c066ad4cbb
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/f/FearlessHalberdier.java
@@ -0,0 +1,33 @@
+package mage.cards.f;
+
+import java.util.UUID;
+import mage.MageInt;
+import mage.constants.SubType;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+
+/**
+ *
+ * @author TheElk801
+ */
+public final class FearlessHalberdier extends CardImpl {
+
+ public FearlessHalberdier(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{R}");
+
+ this.subtype.add(SubType.HUMAN);
+ this.subtype.add(SubType.WARRIOR);
+ this.power = new MageInt(3);
+ this.toughness = new MageInt(2);
+ }
+
+ public FearlessHalberdier(final FearlessHalberdier card) {
+ super(card);
+ }
+
+ @Override
+ public FearlessHalberdier copy() {
+ return new FearlessHalberdier(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/f/FireUrchin.java b/Mage.Sets/src/mage/cards/f/FireUrchin.java
new file mode 100644
index 0000000000..1dcb78b503
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/f/FireUrchin.java
@@ -0,0 +1,46 @@
+package mage.cards.f;
+
+import java.util.UUID;
+import mage.MageInt;
+import mage.abilities.common.SpellCastControllerTriggeredAbility;
+import mage.abilities.effects.common.continuous.BoostSourceEffect;
+import mage.constants.SubType;
+import mage.abilities.keyword.TrampleAbility;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+import mage.constants.Duration;
+import mage.filter.StaticFilters;
+
+/**
+ *
+ * @author TheElk801
+ */
+public final class FireUrchin extends CardImpl {
+
+ public FireUrchin(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{R}");
+
+ this.subtype.add(SubType.ELEMENTAL);
+ this.power = new MageInt(1);
+ this.toughness = new MageInt(3);
+
+ // Trample
+ this.addAbility(TrampleAbility.getInstance());
+
+ // Whenever you cast an instant or sorcery spell, Fire Urchin gets +1/+0 until end of turn.
+ this.addAbility(new SpellCastControllerTriggeredAbility(
+ new BoostSourceEffect(1, 0, Duration.EndOfTurn),
+ StaticFilters.FILTER_SPELL_AN_INSTANT_OR_SORCERY, false
+ ));
+ }
+
+ public FireUrchin(final FireUrchin card) {
+ super(card);
+ }
+
+ @Override
+ public FireUrchin copy() {
+ return new FireUrchin(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/f/FlightOfEquenauts.java b/Mage.Sets/src/mage/cards/f/FlightOfEquenauts.java
new file mode 100644
index 0000000000..57c3e93547
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/f/FlightOfEquenauts.java
@@ -0,0 +1,41 @@
+package mage.cards.f;
+
+import java.util.UUID;
+import mage.MageInt;
+import mage.constants.SubType;
+import mage.abilities.keyword.ConvokeAbility;
+import mage.abilities.keyword.FlyingAbility;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+
+/**
+ *
+ * @author TheElk801
+ */
+public final class FlightOfEquenauts extends CardImpl {
+
+ public FlightOfEquenauts(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{7}{W}");
+
+ this.subtype.add(SubType.HUMAN);
+ this.subtype.add(SubType.KNIGHT);
+ this.power = new MageInt(4);
+ this.toughness = new MageInt(5);
+
+ // Convoke
+ this.addAbility(new ConvokeAbility());
+
+ // Flying
+ this.addAbility(FlyingAbility.getInstance());
+ }
+
+ public FlightOfEquenauts(final FlightOfEquenauts card) {
+ super(card);
+ }
+
+ @Override
+ public FlightOfEquenauts copy() {
+ return new FlightOfEquenauts(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/f/FlowerFlourish.java b/Mage.Sets/src/mage/cards/f/FlowerFlourish.java
new file mode 100644
index 0000000000..47df1408bc
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/f/FlowerFlourish.java
@@ -0,0 +1,62 @@
+package mage.cards.f;
+
+import java.util.UUID;
+import mage.abilities.effects.common.continuous.BoostControlledEffect;
+import mage.abilities.effects.common.search.SearchLibraryPutInHandEffect;
+import mage.cards.CardSetInfo;
+import mage.cards.SplitCard;
+import mage.constants.CardType;
+import mage.constants.Duration;
+import mage.constants.SpellAbilityType;
+import mage.constants.SubType;
+import mage.constants.SuperType;
+import mage.filter.FilterCard;
+import mage.filter.predicate.Predicates;
+import mage.filter.predicate.mageobject.SubtypePredicate;
+import mage.filter.predicate.mageobject.SupertypePredicate;
+import mage.target.common.TargetCardInLibrary;
+
+/**
+ *
+ * @author TheElk801
+ */
+public final class FlowerFlourish extends SplitCard {
+
+ private static final FilterCard filter
+ = new FilterCard("basic Forest or Plains card");
+
+ static {
+ filter.add(new SupertypePredicate(SuperType.BASIC));
+ filter.add(Predicates.or(
+ new SubtypePredicate(SubType.FOREST),
+ new SubtypePredicate(SubType.PLAINS)
+ ));
+ }
+
+ public FlowerFlourish(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{G/W}", "{4}{G}{W}", SpellAbilityType.SPLIT);
+
+ // Flower
+ // Search your library for a basic Forest or Plains card, reveal it, put it into your hand, then shuffle your library.
+ this.getLeftHalfCard().getSpellAbility().addEffect(
+ new SearchLibraryPutInHandEffect(
+ new TargetCardInLibrary(filter), true, true
+ )
+ );
+
+ // Flourish
+ // Creatures you control get +2/+2 until end of turn.
+ this.getRightHalfCard().getSpellAbility().addEffect(
+ new BoostControlledEffect(2, 2, Duration.EndOfTurn)
+ );
+ }
+
+ public FlowerFlourish(final FlowerFlourish card) {
+ super(card);
+ }
+
+ @Override
+ public FlowerFlourish copy() {
+ return new FlowerFlourish(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/g/GatekeeperGargoyle.java b/Mage.Sets/src/mage/cards/g/GatekeeperGargoyle.java
new file mode 100644
index 0000000000..bc1dc58488
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/g/GatekeeperGargoyle.java
@@ -0,0 +1,57 @@
+package mage.cards.g;
+
+import java.util.UUID;
+import mage.MageInt;
+import mage.abilities.common.EntersBattlefieldAbility;
+import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount;
+import mage.abilities.effects.common.counter.AddCountersSourceEffect;
+import mage.constants.SubType;
+import mage.abilities.keyword.FlyingAbility;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+import mage.counters.CounterType;
+import mage.filter.FilterPermanent;
+import mage.filter.common.FilterControlledPermanent;
+import mage.filter.predicate.mageobject.SubtypePredicate;
+
+/**
+ *
+ * @author TheElk801
+ */
+public final class GatekeeperGargoyle extends CardImpl {
+
+ private static final FilterPermanent filter = new FilterControlledPermanent();
+
+ static {
+ filter.add(new SubtypePredicate(SubType.GATE));
+ }
+
+ public GatekeeperGargoyle(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{6}");
+
+ this.subtype.add(SubType.GARGOYLE);
+ this.power = new MageInt(3);
+ this.toughness = new MageInt(3);
+
+ // Flying
+ this.addAbility(FlyingAbility.getInstance());
+
+ // Gargoyle Guardian enters the battlefield with a +1/+1 counter on it for each Gate you control.
+ this.addAbility(new EntersBattlefieldAbility(
+ new AddCountersSourceEffect(
+ CounterType.P1P1.createInstance(),
+ new PermanentsOnBattlefieldCount(filter), true
+ ), "with a +1/+1 counter on it for each Gate you control"
+ ));
+ }
+
+ public GatekeeperGargoyle(final GatekeeperGargoyle card) {
+ super(card);
+ }
+
+ @Override
+ public GatekeeperGargoyle copy() {
+ return new GatekeeperGargoyle(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/g/GenerousStray.java b/Mage.Sets/src/mage/cards/g/GenerousStray.java
new file mode 100644
index 0000000000..6657cb089c
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/g/GenerousStray.java
@@ -0,0 +1,39 @@
+package mage.cards.g;
+
+import java.util.UUID;
+import mage.MageInt;
+import mage.abilities.common.EntersBattlefieldTriggeredAbility;
+import mage.abilities.effects.common.DrawCardSourceControllerEffect;
+import mage.constants.SubType;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+
+/**
+ *
+ * @author TheElk801
+ */
+public final class GenerousStray extends CardImpl {
+
+ public GenerousStray(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}");
+
+ this.subtype.add(SubType.CAT);
+ this.power = new MageInt(1);
+ this.toughness = new MageInt(2);
+
+ // When Generous Stray enters the battlefield, draw a card.
+ this.addAbility(new EntersBattlefieldTriggeredAbility(
+ new DrawCardSourceControllerEffect(1)
+ ));
+ }
+
+ public GenerousStray(final GenerousStray card) {
+ super(card);
+ }
+
+ @Override
+ public GenerousStray copy() {
+ return new GenerousStray(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/g/GoblinLocksmith.java b/Mage.Sets/src/mage/cards/g/GoblinLocksmith.java
new file mode 100644
index 0000000000..9fa25f47df
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/g/GoblinLocksmith.java
@@ -0,0 +1,51 @@
+package mage.cards.g;
+
+import java.util.UUID;
+import mage.MageInt;
+import mage.abilities.common.AttacksTriggeredAbility;
+import mage.abilities.effects.common.combat.CantBlockAllEffect;
+import mage.abilities.keyword.DefenderAbility;
+import mage.constants.SubType;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+import mage.constants.Duration;
+import mage.filter.common.FilterCreaturePermanent;
+import mage.filter.predicate.mageobject.AbilityPredicate;
+
+/**
+ *
+ * @author TheElk801
+ */
+public final class GoblinLocksmith extends CardImpl {
+
+ private static final FilterCreaturePermanent filter
+ = new FilterCreaturePermanent("creatures with defender");
+
+ static {
+ filter.add(new AbilityPredicate(DefenderAbility.class));
+ }
+
+ public GoblinLocksmith(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{R}");
+
+ this.subtype.add(SubType.GOBLIN);
+ this.subtype.add(SubType.ROGUE);
+ this.power = new MageInt(2);
+ this.toughness = new MageInt(1);
+
+ // Whenever Goblin Locksmith attacks, creatures with defender can't block this turn.
+ this.addAbility(new AttacksTriggeredAbility(
+ new CantBlockAllEffect(filter, Duration.EndOfTurn), false
+ ));
+ }
+
+ public GoblinLocksmith(final GoblinLocksmith card) {
+ super(card);
+ }
+
+ @Override
+ public GoblinLocksmith copy() {
+ return new GoblinLocksmith(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/g/GrapplingSundew.java b/Mage.Sets/src/mage/cards/g/GrapplingSundew.java
new file mode 100644
index 0000000000..961af9c160
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/g/GrapplingSundew.java
@@ -0,0 +1,55 @@
+package mage.cards.g;
+
+import java.util.UUID;
+import mage.MageInt;
+import mage.abilities.common.SimpleActivatedAbility;
+import mage.abilities.costs.mana.ManaCostsImpl;
+import mage.abilities.effects.common.continuous.GainAbilitySourceEffect;
+import mage.constants.SubType;
+import mage.abilities.keyword.DefenderAbility;
+import mage.abilities.keyword.IndestructibleAbility;
+import mage.abilities.keyword.ReachAbility;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+import mage.constants.Duration;
+import mage.constants.Zone;
+
+/**
+ *
+ * @author TheElk801
+ */
+public final class GrapplingSundew extends CardImpl {
+
+ public GrapplingSundew(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G}");
+
+ this.subtype.add(SubType.PLANT);
+ this.power = new MageInt(0);
+ this.toughness = new MageInt(4);
+
+ // Defender
+ this.addAbility(DefenderAbility.getInstance());
+
+ // Reach
+ this.addAbility(ReachAbility.getInstance());
+
+ // {4}{G}: Grappling Sundew gains indestructible until end of turn.
+ this.addAbility(new SimpleActivatedAbility(
+ Zone.BATTLEFIELD,
+ new GainAbilitySourceEffect(
+ IndestructibleAbility.getInstance(),
+ Duration.EndOfTurn
+ ), new ManaCostsImpl("{4}{G}")
+ ));
+ }
+
+ public GrapplingSundew(final GrapplingSundew card) {
+ super(card);
+ }
+
+ @Override
+ public GrapplingSundew copy() {
+ return new GrapplingSundew(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/g/GraviticPunch.java b/Mage.Sets/src/mage/cards/g/GraviticPunch.java
new file mode 100644
index 0000000000..cfd36819b7
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/g/GraviticPunch.java
@@ -0,0 +1,73 @@
+package mage.cards.g;
+
+import java.util.UUID;
+import mage.abilities.Ability;
+import mage.abilities.effects.OneShotEffect;
+import mage.abilities.keyword.JumpStartAbility;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+import mage.constants.Outcome;
+import mage.game.Game;
+import mage.game.permanent.Permanent;
+import mage.players.Player;
+import mage.target.TargetPlayer;
+import mage.target.common.TargetControlledCreaturePermanent;
+
+/**
+ *
+ * @author TheElk801
+ */
+public final class GraviticPunch extends CardImpl {
+
+ public GraviticPunch(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{3}{R}");
+
+ // Target creature you control deals damage equal to its power to target player.
+ this.getSpellAbility().addEffect(new GraviticPunchEffect());
+ this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent());
+ this.getSpellAbility().addTarget(new TargetPlayer());
+
+ // Jump-start
+ this.addAbility(new JumpStartAbility(this));
+
+ }
+
+ public GraviticPunch(final GraviticPunch card) {
+ super(card);
+ }
+
+ @Override
+ public GraviticPunch copy() {
+ return new GraviticPunch(this);
+ }
+}
+
+class GraviticPunchEffect extends OneShotEffect {
+
+ public GraviticPunchEffect() {
+ super(Outcome.Benefit);
+ this.staticText = "Target creature you control deals damage "
+ + "equal to its power to target player.";
+ }
+
+ public GraviticPunchEffect(final GraviticPunchEffect effect) {
+ super(effect);
+ }
+
+ @Override
+ public GraviticPunchEffect copy() {
+ return new GraviticPunchEffect(this);
+ }
+
+ @Override
+ public boolean apply(Game game, Ability source) {
+ Permanent controlledCreature = game.getPermanentOrLKIBattlefield(getTargetPointer().getFirst(game, source));
+ Player player = game.getPlayer(source.getTargets().get(1).getFirstTarget());
+ if (player == null || controlledCreature == null) {
+ return false;
+ }
+ player.damage(controlledCreature.getPower().getValue(), controlledCreature.getId(), game, false, true);
+ return true;
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/g/GruesomeMenagerie.java b/Mage.Sets/src/mage/cards/g/GruesomeMenagerie.java
new file mode 100644
index 0000000000..6f90713868
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/g/GruesomeMenagerie.java
@@ -0,0 +1,109 @@
+package mage.cards.g;
+
+import java.util.UUID;
+import mage.abilities.Ability;
+import mage.abilities.effects.OneShotEffect;
+import mage.cards.Card;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.cards.Cards;
+import mage.cards.CardsImpl;
+import mage.constants.CardType;
+import mage.constants.ComparisonType;
+import mage.constants.Outcome;
+import mage.constants.Zone;
+import mage.filter.FilterCard;
+import mage.filter.common.FilterCreatureCard;
+import mage.filter.predicate.mageobject.ConvertedManaCostPredicate;
+import mage.game.Game;
+import mage.players.Player;
+import mage.target.Target;
+import mage.target.common.TargetCardInYourGraveyard;
+
+/**
+ *
+ * @author TheElk801
+ */
+public final class GruesomeMenagerie extends CardImpl {
+
+ public GruesomeMenagerie(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{3}{B}{B}");
+
+ // Choose a creature card with converted mana cost 1 in your graveyard, then do the same for creature cards with converted mana costs 2 and 3. Return those cards to the battlefield.
+ this.getSpellAbility().addEffect(new GruesomeMenagerieEffect());
+ }
+
+ public GruesomeMenagerie(final GruesomeMenagerie card) {
+ super(card);
+ }
+
+ @Override
+ public GruesomeMenagerie copy() {
+ return new GruesomeMenagerie(this);
+ }
+}
+
+class GruesomeMenagerieEffect extends OneShotEffect {
+
+ private static final FilterCard filter1
+ = new FilterCreatureCard("creature card with converted mana cost 1");
+ private static final FilterCard filter2
+ = new FilterCreatureCard("creature card with converted mana cost 2");
+ private static final FilterCard filter3
+ = new FilterCreatureCard("creature card with converted mana cost 3");
+
+ static {
+ filter1.add(new ConvertedManaCostPredicate(ComparisonType.EQUAL_TO, 1));
+ filter2.add(new ConvertedManaCostPredicate(ComparisonType.EQUAL_TO, 2));
+ filter3.add(new ConvertedManaCostPredicate(ComparisonType.EQUAL_TO, 3));
+ }
+
+ public GruesomeMenagerieEffect() {
+ super(Outcome.Benefit);
+ this.staticText = "Choose a creature card with converted mana cost 1 "
+ + "in your graveyard, then do the same for creature cards "
+ + "with converted mana costs 2 and 3. "
+ + "Return those cards to the battlefield.";
+ }
+
+ public GruesomeMenagerieEffect(final GruesomeMenagerieEffect effect) {
+ super(effect);
+ }
+
+ @Override
+ public GruesomeMenagerieEffect copy() {
+ return new GruesomeMenagerieEffect(this);
+ }
+
+ @Override
+ public boolean apply(Game game, Ability source) {
+ Player player = game.getPlayer(source.getControllerId());
+ if (player == null) {
+ return false;
+ }
+ Cards cards = new CardsImpl();
+ Target target;
+ target = new TargetCardInYourGraveyard(filter1);
+ if (player.choose(outcome, target, source.getSourceId(), game)) {
+ Card card = game.getCard(target.getFirstTarget());
+ if (card != null) {
+ cards.add(card);
+ }
+ }
+ target = new TargetCardInYourGraveyard(filter2);
+ if (player.choose(outcome, target, source.getSourceId(), game)) {
+ Card card = game.getCard(target.getFirstTarget());
+ if (card != null) {
+ cards.add(card);
+ }
+ }
+ target = new TargetCardInYourGraveyard(filter3);
+ if (player.choose(outcome, target, source.getSourceId(), game)) {
+ Card card = game.getCard(target.getFirstTarget());
+ if (card != null) {
+ cards.add(card);
+ }
+ }
+ return player.moveCards(cards, Zone.BATTLEFIELD, source, game);
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/h/HellkiteWhelp.java b/Mage.Sets/src/mage/cards/h/HellkiteWhelp.java
new file mode 100644
index 0000000000..a96308cbdb
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/h/HellkiteWhelp.java
@@ -0,0 +1,57 @@
+package mage.cards.h;
+
+import java.util.UUID;
+import mage.MageInt;
+import mage.abilities.Ability;
+import mage.abilities.common.AttacksTriggeredAbility;
+import mage.abilities.effects.common.DamageTargetEffect;
+import mage.constants.SubType;
+import mage.abilities.keyword.FlyingAbility;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+import mage.filter.FilterPermanent;
+import mage.filter.predicate.mageobject.CardTypePredicate;
+import mage.filter.predicate.permanent.DefendingPlayerControlsPredicate;
+import mage.target.TargetPermanent;
+
+/**
+ *
+ * @author TheElk801
+ */
+public final class HellkiteWhelp extends CardImpl {
+
+ private static final FilterPermanent filter = new FilterPermanent("creature defending player controls");
+
+ static {
+ filter.add(new CardTypePredicate(CardType.CREATURE));
+ filter.add(new DefendingPlayerControlsPredicate());
+ }
+
+ public HellkiteWhelp(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{R}");
+
+ this.subtype.add(SubType.DRAGON);
+ this.power = new MageInt(3);
+ this.toughness = new MageInt(34);
+
+ // Flying
+ this.addAbility(FlyingAbility.getInstance());
+
+ // Whenever Hellkite Whelp attacks, it deals 1 damage to target creature defending player controls.
+ Ability ability = new AttacksTriggeredAbility(
+ new DamageTargetEffect(1, "it"), false
+ );
+ ability.addTarget(new TargetPermanent(filter));
+ this.addAbility(ability);
+ }
+
+ public HellkiteWhelp(final HellkiteWhelp card) {
+ super(card);
+ }
+
+ @Override
+ public HellkiteWhelp copy() {
+ return new HellkiteWhelp(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/h/HiredPoisoner.java b/Mage.Sets/src/mage/cards/h/HiredPoisoner.java
new file mode 100644
index 0000000000..13a1d2a9f2
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/h/HiredPoisoner.java
@@ -0,0 +1,37 @@
+package mage.cards.h;
+
+import java.util.UUID;
+import mage.MageInt;
+import mage.constants.SubType;
+import mage.abilities.keyword.DeathtouchAbility;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+
+/**
+ *
+ * @author TheElk801
+ */
+public final class HiredPoisoner extends CardImpl {
+
+ public HiredPoisoner(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{B}");
+
+ this.subtype.add(SubType.HUMAN);
+ this.subtype.add(SubType.ASSASSIN);
+ this.power = new MageInt(1);
+ this.toughness = new MageInt(1);
+
+ // Deathtouch
+ this.addAbility(DeathtouchAbility.getInstance());
+ }
+
+ public HiredPoisoner(final HiredPoisoner card) {
+ super(card);
+ }
+
+ @Override
+ public HiredPoisoner copy() {
+ return new HiredPoisoner(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/i/InspiringUnicorn.java b/Mage.Sets/src/mage/cards/i/InspiringUnicorn.java
new file mode 100644
index 0000000000..dd1d9a9e56
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/i/InspiringUnicorn.java
@@ -0,0 +1,40 @@
+package mage.cards.i;
+
+import java.util.UUID;
+import mage.MageInt;
+import mage.abilities.common.AttacksTriggeredAbility;
+import mage.abilities.effects.common.continuous.BoostControlledEffect;
+import mage.constants.SubType;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+import mage.constants.Duration;
+
+/**
+ *
+ * @author TheElk801
+ */
+public final class InspiringUnicorn extends CardImpl {
+
+ public InspiringUnicorn(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}{W}");
+
+ this.subtype.add(SubType.UNICORN);
+ this.power = new MageInt(2);
+ this.toughness = new MageInt(2);
+
+ // Whenever Inspiring Unicorn attacks, creatures you control get +1/+1 until end of turn.
+ this.addAbility(new AttacksTriggeredAbility(
+ new BoostControlledEffect(1, 1, Duration.EndOfTurn), false
+ ));
+ }
+
+ public InspiringUnicorn(final InspiringUnicorn card) {
+ super(card);
+ }
+
+ @Override
+ public InspiringUnicorn copy() {
+ return new InspiringUnicorn(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/i/IntrusivePackbeast.java b/Mage.Sets/src/mage/cards/i/IntrusivePackbeast.java
new file mode 100644
index 0000000000..622ac416ae
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/i/IntrusivePackbeast.java
@@ -0,0 +1,45 @@
+package mage.cards.i;
+
+import java.util.UUID;
+import mage.MageInt;
+import mage.abilities.Ability;
+import mage.abilities.common.EntersBattlefieldTriggeredAbility;
+import mage.abilities.effects.common.TapTargetEffect;
+import mage.constants.SubType;
+import mage.abilities.keyword.VigilanceAbility;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+import mage.target.common.TargetOpponentsCreaturePermanent;
+
+/**
+ *
+ * @author TheElk801
+ */
+public final class IntrusivePackbeast extends CardImpl {
+
+ public IntrusivePackbeast(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{W}");
+
+ this.subtype.add(SubType.BEAST);
+ this.power = new MageInt(3);
+ this.toughness = new MageInt(3);
+
+ // Vigilance
+ this.addAbility(VigilanceAbility.getInstance());
+
+ // When Intrusive Packbeast enters the battlefield, tap up to two target creatures your opponents control.
+ Ability ability = new EntersBattlefieldTriggeredAbility(new TapTargetEffect());
+ ability.addTarget(new TargetOpponentsCreaturePermanent(0, 2));
+ this.addAbility(ability);
+ }
+
+ public IntrusivePackbeast(final IntrusivePackbeast card) {
+ super(card);
+ }
+
+ @Override
+ public IntrusivePackbeast copy() {
+ return new IntrusivePackbeast(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/k/KraulForagers.java b/Mage.Sets/src/mage/cards/k/KraulForagers.java
new file mode 100644
index 0000000000..ffb5e6200f
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/k/KraulForagers.java
@@ -0,0 +1,42 @@
+package mage.cards.k;
+
+import java.util.UUID;
+import mage.MageInt;
+import mage.abilities.common.EntersBattlefieldTriggeredAbility;
+import mage.abilities.dynamicvalue.common.CardsInControllerGraveyardCount;
+import mage.abilities.effects.common.GainLifeEffect;
+import mage.constants.SubType;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+
+/**
+ *
+ * @author TheElk801
+ */
+public final class KraulForagers extends CardImpl {
+
+ public KraulForagers(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{G}");
+
+ this.subtype.add(SubType.INSECT);
+ this.subtype.add(SubType.SCOUT);
+ this.power = new MageInt(4);
+ this.toughness = new MageInt(4);
+
+ // Undergrowth — When Kraul Foragers enters the battlefield, you gain 1 life for each creature card in your graveyard.
+ this.addAbility(new EntersBattlefieldTriggeredAbility(
+ new GainLifeEffect(new CardsInControllerGraveyardCount()),
+ false, "Undergrowth — "
+ ));
+ }
+
+ public KraulForagers(final KraulForagers card) {
+ super(card);
+ }
+
+ @Override
+ public KraulForagers copy() {
+ return new KraulForagers(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/k/KraulHarpooner.java b/Mage.Sets/src/mage/cards/k/KraulHarpooner.java
new file mode 100644
index 0000000000..d3a2e8575f
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/k/KraulHarpooner.java
@@ -0,0 +1,105 @@
+package mage.cards.k;
+
+import java.util.UUID;
+import mage.MageInt;
+import mage.abilities.Ability;
+import mage.abilities.common.EntersBattlefieldTriggeredAbility;
+import mage.abilities.effects.OneShotEffect;
+import mage.abilities.effects.common.continuous.BoostSourceEffect;
+import mage.abilities.keyword.FlyingAbility;
+import mage.constants.SubType;
+import mage.abilities.keyword.ReachAbility;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+import mage.constants.Duration;
+import mage.constants.Outcome;
+import mage.constants.TargetController;
+import mage.filter.FilterPermanent;
+import mage.filter.StaticFilters;
+import mage.filter.common.FilterCreaturePermanent;
+import mage.filter.predicate.mageobject.AbilityPredicate;
+import mage.filter.predicate.permanent.ControllerPredicate;
+import mage.game.Game;
+import mage.game.permanent.Permanent;
+import mage.players.Player;
+import mage.target.TargetPermanent;
+
+/**
+ *
+ * @author TheElk801
+ */
+public final class KraulHarpooner extends CardImpl {
+
+ private static final FilterPermanent filter = new FilterCreaturePermanent("creature with flying you don't control");
+
+ static {
+ filter.add(new ControllerPredicate(TargetController.NOT_YOU));
+ filter.add(new AbilityPredicate(FlyingAbility.class));
+ }
+
+ public KraulHarpooner(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G}");
+
+ this.subtype.add(SubType.INSECT);
+ this.subtype.add(SubType.WARRIOR);
+ this.power = new MageInt(3);
+ this.toughness = new MageInt(2);
+
+ // Reach
+ this.addAbility(ReachAbility.getInstance());
+
+ // Undergrowth — When Kraul Harpooner enters the battlefield, choose up to one target creature with flying you don't control. Kraul Harpooner gets +X/+0 until end of turn, where X is the number of creature cards in your graveyard, then you may have Kraul Harpooner fight that creature.
+ Ability ability = new EntersBattlefieldTriggeredAbility(
+ new KraulHarpoonerEffect(), false,
+ "Undergrowth — "
+ );
+ ability.addTarget(new TargetPermanent(0, 1, filter, false));
+ this.addAbility(ability);
+ }
+
+ public KraulHarpooner(final KraulHarpooner card) {
+ super(card);
+ }
+
+ @Override
+ public KraulHarpooner copy() {
+ return new KraulHarpooner(this);
+ }
+}
+
+class KraulHarpoonerEffect extends OneShotEffect {
+
+ public KraulHarpoonerEffect() {
+ super(Outcome.Benefit);
+ this.staticText = "choose up to one target creature with flying "
+ + "you don't control. {this} gets +X/+0 until end of turn, "
+ + "where X is the number of creature cards in your graveyard, "
+ + "then you may have {this} fight that creature.";
+ }
+
+ public KraulHarpoonerEffect(final KraulHarpoonerEffect effect) {
+ super(effect);
+ }
+
+ @Override
+ public KraulHarpoonerEffect copy() {
+ return new KraulHarpoonerEffect(this);
+ }
+
+ @Override
+ public boolean apply(Game game, Ability source) {
+ Permanent sourcePerm = game.getPermanent(source.getSourceId());
+ Player player = game.getPlayer(source.getControllerId());
+ if (sourcePerm == null || player == null) {
+ return false;
+ }
+ int xValue = player.getGraveyard().count(StaticFilters.FILTER_CARD_CREATURE, game);
+ game.addEffect(new BoostSourceEffect(xValue, 0, Duration.EndOfTurn), source);
+ Permanent creature = game.getPermanent(source.getFirstTarget());
+ if (creature == null || !player.chooseUse(outcome, "Have " + sourcePerm.getLogName() + " fight " + creature.getLogName() + "?", source, game)) {
+ return true;
+ }
+ return creature.fight(sourcePerm, source, game);
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/l/LedevChampion.java b/Mage.Sets/src/mage/cards/l/LedevChampion.java
index 51d9b6dfdb..8c5d59ecae 100644
--- a/Mage.Sets/src/mage/cards/l/LedevChampion.java
+++ b/Mage.Sets/src/mage/cards/l/LedevChampion.java
@@ -34,7 +34,7 @@ public final class LedevChampion extends CardImpl {
public LedevChampion(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G}{W}");
- this.subtype.add(SubType.HUMAN);
+ this.subtype.add(SubType.ELF);
this.subtype.add(SubType.KNIGHT);
this.power = new MageInt(2);
this.toughness = new MageInt(2);
diff --git a/Mage.Sets/src/mage/cards/m/MuseDrake.java b/Mage.Sets/src/mage/cards/m/MuseDrake.java
new file mode 100644
index 0000000000..fda50bc5a9
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/m/MuseDrake.java
@@ -0,0 +1,43 @@
+package mage.cards.m;
+
+import java.util.UUID;
+import mage.MageInt;
+import mage.abilities.common.EntersBattlefieldTriggeredAbility;
+import mage.abilities.effects.common.DrawCardSourceControllerEffect;
+import mage.constants.SubType;
+import mage.abilities.keyword.FlyingAbility;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+
+/**
+ *
+ * @author TheElk801
+ */
+public final class MuseDrake extends CardImpl {
+
+ public MuseDrake(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{U}");
+
+ this.subtype.add(SubType.DRAKE);
+ this.power = new MageInt(1);
+ this.toughness = new MageInt(3);
+
+ // Flying
+ this.addAbility(FlyingAbility.getInstance());
+
+ // When Muse Drake enters the battlefield, draw a card.
+ this.addAbility(new EntersBattlefieldTriggeredAbility(
+ new DrawCardSourceControllerEffect(1)
+ ));
+ }
+
+ public MuseDrake(final MuseDrake card) {
+ super(card);
+ }
+
+ @Override
+ public MuseDrake copy() {
+ return new MuseDrake(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/p/PacksFavor.java b/Mage.Sets/src/mage/cards/p/PacksFavor.java
new file mode 100644
index 0000000000..8fe4c69a04
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/p/PacksFavor.java
@@ -0,0 +1,39 @@
+package mage.cards.p;
+
+import java.util.UUID;
+import mage.abilities.effects.common.continuous.BoostTargetEffect;
+import mage.abilities.keyword.ConvokeAbility;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+import mage.constants.Duration;
+import mage.target.common.TargetCreaturePermanent;
+
+/**
+ *
+ * @author TheElk801
+ */
+public final class PacksFavor extends CardImpl {
+
+ public PacksFavor(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{2}{G}");
+
+ // Convoke
+ this.addAbility(new ConvokeAbility());
+
+ // Target creature gets +3/+3 until end of turn.
+ this.getSpellAbility().addEffect(
+ new BoostTargetEffect(3, 3, Duration.EndOfTurn)
+ );
+ this.getSpellAbility().addTarget(new TargetCreaturePermanent());
+ }
+
+ public PacksFavor(final PacksFavor card) {
+ super(card);
+ }
+
+ @Override
+ public PacksFavor copy() {
+ return new PacksFavor(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/p/PauseForReflection.java b/Mage.Sets/src/mage/cards/p/PauseForReflection.java
new file mode 100644
index 0000000000..cb347f93ed
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/p/PauseForReflection.java
@@ -0,0 +1,35 @@
+package mage.cards.p;
+
+import java.util.UUID;
+import mage.abilities.effects.common.PreventAllDamageByAllPermanentsEffect;
+import mage.abilities.keyword.ConvokeAbility;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+import mage.constants.Duration;
+
+/**
+ *
+ * @author TheElk801
+ */
+public final class PauseForReflection extends CardImpl {
+
+ public PauseForReflection(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{2}{G}");
+
+ // Convoke
+ this.addAbility(new ConvokeAbility());
+
+ // Precent all combat damage that would be dealt this turn.
+ this.getSpellAbility().addEffect(new PreventAllDamageByAllPermanentsEffect(Duration.EndOfTurn, true));
+ }
+
+ public PauseForReflection(final PauseForReflection card) {
+ super(card);
+ }
+
+ @Override
+ public PauseForReflection copy() {
+ return new PauseForReflection(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/p/PitilessGorgon.java b/Mage.Sets/src/mage/cards/p/PitilessGorgon.java
new file mode 100644
index 0000000000..62a499ddd6
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/p/PitilessGorgon.java
@@ -0,0 +1,36 @@
+package mage.cards.p;
+
+import java.util.UUID;
+import mage.MageInt;
+import mage.constants.SubType;
+import mage.abilities.keyword.DeathtouchAbility;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+
+/**
+ *
+ * @author TheElk801
+ */
+public final class PitilessGorgon extends CardImpl {
+
+ public PitilessGorgon(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{B/G}{B/G}");
+
+ this.subtype.add(SubType.GORGON);
+ this.power = new MageInt(2);
+ this.toughness = new MageInt(2);
+
+ // Deathtouch
+ this.addAbility(DeathtouchAbility.getInstance());
+ }
+
+ public PitilessGorgon(final PitilessGorgon card) {
+ super(card);
+ }
+
+ @Override
+ public PitilessGorgon copy() {
+ return new PitilessGorgon(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/p/PortcullisVine.java b/Mage.Sets/src/mage/cards/p/PortcullisVine.java
new file mode 100644
index 0000000000..3d72e9e4d6
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/p/PortcullisVine.java
@@ -0,0 +1,64 @@
+package mage.cards.p;
+
+import java.util.UUID;
+import mage.MageInt;
+import mage.abilities.Ability;
+import mage.abilities.common.SimpleActivatedAbility;
+import mage.abilities.costs.common.SacrificeTargetCost;
+import mage.abilities.costs.common.TapSourceCost;
+import mage.abilities.costs.mana.GenericManaCost;
+import mage.abilities.effects.common.DrawCardSourceControllerEffect;
+import mage.constants.SubType;
+import mage.abilities.keyword.DefenderAbility;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+import mage.filter.common.FilterControlledCreaturePermanent;
+import mage.filter.common.FilterControlledPermanent;
+import mage.filter.predicate.mageobject.AbilityPredicate;
+import mage.target.common.TargetControlledPermanent;
+
+/**
+ *
+ * @author TheElk801
+ */
+public final class PortcullisVine extends CardImpl {
+
+ private static final FilterControlledPermanent filter
+ = new FilterControlledCreaturePermanent("a creature with defender");
+
+ static {
+ filter.add(new AbilityPredicate(DefenderAbility.class));
+ }
+
+ public PortcullisVine(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{G}");
+
+ this.subtype.add(SubType.PLANT);
+ this.subtype.add(SubType.WALL);
+ this.power = new MageInt(0);
+ this.toughness = new MageInt(3);
+
+ // Defender
+ this.addAbility(DefenderAbility.getInstance());
+
+ // {2}, {T}, Sacrifice a creature with defender: Draw a card.
+ Ability ability = new SimpleActivatedAbility(
+ new DrawCardSourceControllerEffect(1), new GenericManaCost(2)
+ );
+ ability.addCost(new TapSourceCost());
+ ability.addCost(new SacrificeTargetCost(
+ new TargetControlledPermanent(filter)
+ ));
+ this.addAbility(ability);
+ }
+
+ public PortcullisVine(final PortcullisVine card) {
+ super(card);
+ }
+
+ @Override
+ public PortcullisVine copy() {
+ return new PortcullisVine(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/r/ResplendentAngel.java b/Mage.Sets/src/mage/cards/r/ResplendentAngel.java
index ef40284b69..86160a7236 100644
--- a/Mage.Sets/src/mage/cards/r/ResplendentAngel.java
+++ b/Mage.Sets/src/mage/cards/r/ResplendentAngel.java
@@ -20,7 +20,7 @@ import mage.constants.ComparisonType;
import mage.constants.Duration;
import mage.constants.TargetController;
import mage.constants.Zone;
-import mage.game.permanent.token.AngelToken2;
+import mage.game.permanent.token.AngelVigilanceToken;
import mage.watchers.common.PlayerGainedLifeWatcher;
/**
@@ -42,7 +42,7 @@ public final class ResplendentAngel extends CardImpl {
// At the beginning of each end step, if you gained 5 or more life this turn, create a 4/4 white Angel creature token with flying and vigilance.
this.addAbility(new BeginningOfEndStepTriggeredAbility(
Zone.BATTLEFIELD,
- new CreateTokenEffect(new AngelToken2()),
+ new CreateTokenEffect(new AngelVigilanceToken()),
TargetController.ANY,
new YouGainedLifeCondition(ComparisonType.MORE_THAN, 4),
false
diff --git a/Mage.Sets/src/mage/cards/r/RubblebeltBoar.java b/Mage.Sets/src/mage/cards/r/RubblebeltBoar.java
new file mode 100644
index 0000000000..e627e8674c
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/r/RubblebeltBoar.java
@@ -0,0 +1,44 @@
+package mage.cards.r;
+
+import java.util.UUID;
+import mage.MageInt;
+import mage.abilities.Ability;
+import mage.abilities.common.EntersBattlefieldTriggeredAbility;
+import mage.abilities.effects.common.continuous.BoostTargetEffect;
+import mage.constants.SubType;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+import mage.constants.Duration;
+import mage.target.common.TargetCreaturePermanent;
+
+/**
+ *
+ * @author TheElk801
+ */
+public final class RubblebeltBoar extends CardImpl {
+
+ public RubblebeltBoar(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{R}");
+
+ this.subtype.add(SubType.BOAR);
+ this.power = new MageInt(3);
+ this.toughness = new MageInt(3);
+
+ // When Rubblebelt Boar enters the battlefield, target creature gets +2/+0 until end of turn.
+ Ability ability = new EntersBattlefieldTriggeredAbility(
+ new BoostTargetEffect(2, 0, Duration.EndOfTurn)
+ );
+ ability.addTarget(new TargetCreaturePermanent());
+ this.addAbility(ability);
+ }
+
+ public RubblebeltBoar(final RubblebeltBoar card) {
+ super(card);
+ }
+
+ @Override
+ public RubblebeltBoar copy() {
+ return new RubblebeltBoar(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/s/SilentDart.java b/Mage.Sets/src/mage/cards/s/SilentDart.java
new file mode 100644
index 0000000000..652d65c427
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/s/SilentDart.java
@@ -0,0 +1,45 @@
+package mage.cards.s;
+
+import java.util.UUID;
+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.DamageTargetEffect;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+import mage.constants.Zone;
+import mage.target.common.TargetCreaturePermanent;
+
+/**
+ *
+ * @author TheElk801
+ */
+public final class SilentDart extends CardImpl {
+
+ public SilentDart(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{1}");
+
+ // {4}, {T}, Sacrifice Silent Dart: It deals 3 damage to target creature.
+ Ability ability = new SimpleActivatedAbility(
+ Zone.BATTLEFIELD,
+ new DamageTargetEffect(3, "it"),
+ new GenericManaCost(4)
+ );
+ ability.addCost(new TapSourceCost());
+ ability.addCost(new SacrificeSourceCost());
+ ability.addTarget(new TargetCreaturePermanent());
+ this.addAbility(ability);
+ }
+
+ public SilentDart(final SilentDart card) {
+ super(card);
+ }
+
+ @Override
+ public SilentDart copy() {
+ return new SilentDart(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/s/SpinalCentipede.java b/Mage.Sets/src/mage/cards/s/SpinalCentipede.java
new file mode 100644
index 0000000000..9d5073b48b
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/s/SpinalCentipede.java
@@ -0,0 +1,44 @@
+package mage.cards.s;
+
+import java.util.UUID;
+import mage.MageInt;
+import mage.abilities.Ability;
+import mage.abilities.common.DiesTriggeredAbility;
+import mage.abilities.effects.common.counter.AddCountersTargetEffect;
+import mage.constants.SubType;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+import mage.counters.CounterType;
+import mage.target.common.TargetControlledCreaturePermanent;
+
+/**
+ *
+ * @author TheElk801
+ */
+public final class SpinalCentipede extends CardImpl {
+
+ public SpinalCentipede(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}");
+
+ this.subtype.add(SubType.INSECT);
+ this.power = new MageInt(3);
+ this.toughness = new MageInt(2);
+
+ // When Spinal Centipede dies, put a +1/+1 counter on target creature you control.
+ Ability ability = new DiesTriggeredAbility(new AddCountersTargetEffect(
+ CounterType.P1P1.createInstance()
+ ), false);
+ ability.addTarget(new TargetControlledCreaturePermanent());
+ this.addAbility(ability);
+ }
+
+ public SpinalCentipede(final SpinalCentipede card) {
+ super(card);
+ }
+
+ @Override
+ public SpinalCentipede copy() {
+ return new SpinalCentipede(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/s/SwornCompanions.java b/Mage.Sets/src/mage/cards/s/SwornCompanions.java
new file mode 100644
index 0000000000..52a743c21c
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/s/SwornCompanions.java
@@ -0,0 +1,33 @@
+package mage.cards.s;
+
+import java.util.UUID;
+import mage.abilities.effects.common.CreateTokenEffect;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+import mage.game.permanent.token.SoldierLifelinkToken;
+
+/**
+ *
+ * @author TheElk801
+ */
+public final class SwornCompanions extends CardImpl {
+
+ public SwornCompanions(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2}{W}");
+
+ // Creature two 1/1 white Soldier creature tokens with lifelink.
+ this.getSpellAbility().addEffect(
+ new CreateTokenEffect(new SoldierLifelinkToken(), 2)
+ );
+ }
+
+ public SwornCompanions(final SwornCompanions card) {
+ super(card);
+ }
+
+ @Override
+ public SwornCompanions copy() {
+ return new SwornCompanions(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/t/TajicLegionsEdge.java b/Mage.Sets/src/mage/cards/t/TajicLegionsEdge.java
new file mode 100644
index 0000000000..faa291400c
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/t/TajicLegionsEdge.java
@@ -0,0 +1,77 @@
+package mage.cards.t;
+
+import java.util.UUID;
+import mage.MageInt;
+import mage.abilities.common.SimpleActivatedAbility;
+import mage.abilities.common.SimpleStaticAbility;
+import mage.abilities.costs.mana.ManaCostsImpl;
+import mage.abilities.effects.common.PreventAllNonCombatDamageToAllEffect;
+import mage.abilities.effects.common.continuous.GainAbilitySourceEffect;
+import mage.abilities.keyword.FirstStrikeAbility;
+import mage.constants.SubType;
+import mage.constants.SuperType;
+import mage.abilities.keyword.HasteAbility;
+import mage.abilities.keyword.MentorAbility;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+import mage.constants.Duration;
+import mage.constants.Zone;
+import mage.filter.FilterPermanent;
+import mage.filter.common.FilterControlledCreaturePermanent;
+import mage.filter.predicate.permanent.AnotherPredicate;
+
+/**
+ *
+ * @author TheElk801
+ */
+public final class TajicLegionsEdge extends CardImpl {
+
+ private static final FilterPermanent filter = new FilterControlledCreaturePermanent("other creatures you control");
+
+ static {
+ filter.add(new AnotherPredicate());
+ }
+
+ public TajicLegionsEdge(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{R}{W}");
+
+ this.addSuperType(SuperType.LEGENDARY);
+ this.subtype.add(SubType.HUMAN);
+ this.subtype.add(SubType.SOLDIER);
+ this.power = new MageInt(3);
+ this.toughness = new MageInt(2);
+
+ // Haste
+ this.addAbility(HasteAbility.getInstance());
+
+ // Mentor
+ this.addAbility(new MentorAbility());
+
+ // Prevent all noncombat damage that would be dealt to other creatures you control.
+ this.addAbility(new SimpleStaticAbility(
+ Zone.BATTLEFIELD,
+ new PreventAllNonCombatDamageToAllEffect(
+ Duration.WhileOnBattlefield, filter
+ )
+ ));
+
+ // {R}{W}: Tajic, Legion's Edge gains first strike until end of turn.
+ this.addAbility(new SimpleActivatedAbility(
+ Zone.BATTLEFIELD,
+ new GainAbilitySourceEffect(
+ FirstStrikeAbility.getInstance(),
+ Duration.EndOfTurn
+ ), new ManaCostsImpl("{R}{W}")
+ ));
+ }
+
+ public TajicLegionsEdge(final TajicLegionsEdge card) {
+ super(card);
+ }
+
+ @Override
+ public TajicLegionsEdge copy() {
+ return new TajicLegionsEdge(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/t/TenthDistrictGuard.java b/Mage.Sets/src/mage/cards/t/TenthDistrictGuard.java
new file mode 100644
index 0000000000..805039d804
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/t/TenthDistrictGuard.java
@@ -0,0 +1,45 @@
+package mage.cards.t;
+
+import java.util.UUID;
+import mage.MageInt;
+import mage.abilities.Ability;
+import mage.abilities.common.EntersBattlefieldTriggeredAbility;
+import mage.abilities.effects.common.continuous.BoostTargetEffect;
+import mage.constants.SubType;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+import mage.constants.Duration;
+import mage.target.common.TargetCreaturePermanent;
+
+/**
+ *
+ * @author TheElk801
+ */
+public final class TenthDistrictGuard extends CardImpl {
+
+ public TenthDistrictGuard(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{W}");
+
+ this.subtype.add(SubType.HUMAN);
+ this.subtype.add(SubType.SOLDIER);
+ this.power = new MageInt(2);
+ this.toughness = new MageInt(2);
+
+ // When Tenth District Guard enters the battlefield, target creature gets +0/+1 until end of turn.
+ Ability ability = new EntersBattlefieldTriggeredAbility(
+ new BoostTargetEffect(0, 1, Duration.EndOfTurn)
+ );
+ ability.addTarget(new TargetCreaturePermanent());
+ this.addAbility(ability);
+ }
+
+ public TenthDistrictGuard(final TenthDistrictGuard card) {
+ super(card);
+ }
+
+ @Override
+ public TenthDistrictGuard copy() {
+ return new TenthDistrictGuard(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/u/UrbanUtopia.java b/Mage.Sets/src/mage/cards/u/UrbanUtopia.java
new file mode 100644
index 0000000000..a6b67b50bb
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/u/UrbanUtopia.java
@@ -0,0 +1,63 @@
+package mage.cards.u;
+
+import java.util.UUID;
+import mage.constants.SubType;
+import mage.target.common.TargetLandPermanent;
+import mage.abilities.Ability;
+import mage.abilities.common.EntersBattlefieldTriggeredAbility;
+import mage.abilities.common.SimpleStaticAbility;
+import mage.abilities.effects.common.AttachEffect;
+import mage.abilities.effects.common.DrawCardSourceControllerEffect;
+import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect;
+import mage.constants.Outcome;
+import mage.target.TargetPermanent;
+import mage.abilities.keyword.EnchantAbility;
+import mage.abilities.mana.AnyColorManaAbility;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.AttachmentType;
+import mage.constants.CardType;
+import mage.constants.Zone;
+
+/**
+ *
+ * @author TheElk801
+ */
+public final class UrbanUtopia extends CardImpl {
+
+ public UrbanUtopia(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{G}");
+
+ this.subtype.add(SubType.AURA);
+
+ // Enchant Land
+ TargetPermanent auraTarget = new TargetLandPermanent();
+ this.getSpellAbility().addTarget(auraTarget);
+ this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature));
+ Ability ability = new EnchantAbility(auraTarget.getTargetName());
+ this.addAbility(ability);
+
+ // When Urban Utopia enters the battlefield, draw a card.
+ this.addAbility(new EntersBattlefieldTriggeredAbility(
+ new DrawCardSourceControllerEffect(1)
+ ));
+
+ // Enchanted land has "{T}: Add one mana of any color."
+ this.addAbility(new SimpleStaticAbility(
+ Zone.BATTLEFIELD,
+ new GainAbilityAttachedEffect(
+ new AnyColorManaAbility(), AttachmentType.AURA
+ ).setText("Enchanted land has "
+ + "\"{T}: Add one mana of any color.\"")
+ ));
+ }
+
+ public UrbanUtopia(final UrbanUtopia card) {
+ super(card);
+ }
+
+ @Override
+ public UrbanUtopia copy() {
+ return new UrbanUtopia(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/v/VedalkenMesmerist.java b/Mage.Sets/src/mage/cards/v/VedalkenMesmerist.java
new file mode 100644
index 0000000000..ad7fe4d57e
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/v/VedalkenMesmerist.java
@@ -0,0 +1,45 @@
+package mage.cards.v;
+
+import java.util.UUID;
+import mage.MageInt;
+import mage.abilities.Ability;
+import mage.abilities.common.AttacksTriggeredAbility;
+import mage.abilities.effects.common.continuous.BoostTargetEffect;
+import mage.constants.SubType;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+import mage.constants.Duration;
+import mage.target.common.TargetOpponentsCreaturePermanent;
+
+/**
+ *
+ * @author TheElk801
+ */
+public final class VedalkenMesmerist extends CardImpl {
+
+ public VedalkenMesmerist(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}");
+
+ this.subtype.add(SubType.VEDALKEN);
+ this.subtype.add(SubType.WIZARD);
+ this.power = new MageInt(2);
+ this.toughness = new MageInt(1);
+
+ // Whenever Vedalken Mesmerist attacks, target creature an opponent controls gets -2/-0 until end of turn.
+ Ability ability = new AttacksTriggeredAbility(
+ new BoostTargetEffect(-2, 0, Duration.EndOfTurn), false
+ );
+ ability.addTarget(new TargetOpponentsCreaturePermanent());
+ this.addAbility(ability);
+ }
+
+ public VedalkenMesmerist(final VedalkenMesmerist card) {
+ super(card);
+ }
+
+ @Override
+ public VedalkenMesmerist copy() {
+ return new VedalkenMesmerist(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/v/VeiledShade.java b/Mage.Sets/src/mage/cards/v/VeiledShade.java
new file mode 100644
index 0000000000..9a9e8df4a7
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/v/VeiledShade.java
@@ -0,0 +1,44 @@
+package mage.cards.v;
+
+import java.util.UUID;
+import mage.MageInt;
+import mage.abilities.common.SimpleActivatedAbility;
+import mage.abilities.costs.mana.ManaCostsImpl;
+import mage.abilities.effects.common.continuous.BoostSourceEffect;
+import mage.constants.SubType;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+import mage.constants.Duration;
+import mage.constants.Zone;
+
+/**
+ *
+ * @author TheElk801
+ */
+public final class VeiledShade extends CardImpl {
+
+ public VeiledShade(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}");
+
+ this.subtype.add(SubType.SHADE);
+ this.power = new MageInt(2);
+ this.toughness = new MageInt(2);
+
+ // {1}{B}: Veiled Shade gets +1/+1 until end of turn.
+ this.addAbility(new SimpleActivatedAbility(
+ Zone.BATTLEFIELD,
+ new BoostSourceEffect(1, 1, Duration.EndOfTurn),
+ new ManaCostsImpl("{1}{B}")
+ ));
+ }
+
+ public VeiledShade(final VeiledShade card) {
+ super(card);
+ }
+
+ @Override
+ public VeiledShade copy() {
+ return new VeiledShade(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/v/VernadiShieldmate.java b/Mage.Sets/src/mage/cards/v/VernadiShieldmate.java
new file mode 100644
index 0000000000..37f95d9a57
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/v/VernadiShieldmate.java
@@ -0,0 +1,37 @@
+package mage.cards.v;
+
+import java.util.UUID;
+import mage.MageInt;
+import mage.constants.SubType;
+import mage.abilities.keyword.VigilanceAbility;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+
+/**
+ *
+ * @author TheElk801
+ */
+public final class VernadiShieldmate extends CardImpl {
+
+ public VernadiShieldmate(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G/W}");
+
+ this.subtype.add(SubType.HUMAN);
+ this.subtype.add(SubType.SOLDIER);
+ this.power = new MageInt(2);
+ this.toughness = new MageInt(2);
+
+ // Vigilance
+ this.addAbility(VigilanceAbility.getInstance());
+ }
+
+ public VernadiShieldmate(final VernadiShieldmate card) {
+ super(card);
+ }
+
+ @Override
+ public VernadiShieldmate copy() {
+ return new VernadiShieldmate(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/w/WildCeratok.java b/Mage.Sets/src/mage/cards/w/WildCeratok.java
new file mode 100644
index 0000000000..9d65111665
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/w/WildCeratok.java
@@ -0,0 +1,32 @@
+package mage.cards.w;
+
+import java.util.UUID;
+import mage.MageInt;
+import mage.constants.SubType;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+
+/**
+ *
+ * @author TheElk801
+ */
+public final class WildCeratok extends CardImpl {
+
+ public WildCeratok(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{G}");
+
+ this.subtype.add(SubType.RHINO);
+ this.power = new MageInt(4);
+ this.toughness = new MageInt(3);
+ }
+
+ public WildCeratok(final WildCeratok card) {
+ super(card);
+ }
+
+ @Override
+ public WildCeratok copy() {
+ return new WildCeratok(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/w/WishcoinCrab.java b/Mage.Sets/src/mage/cards/w/WishcoinCrab.java
new file mode 100644
index 0000000000..37c886fe7a
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/w/WishcoinCrab.java
@@ -0,0 +1,32 @@
+package mage.cards.w;
+
+import java.util.UUID;
+import mage.MageInt;
+import mage.constants.SubType;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+
+/**
+ *
+ * @author TheElk801
+ */
+public final class WishcoinCrab extends CardImpl {
+
+ public WishcoinCrab(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{U}");
+
+ this.subtype.add(SubType.CRAB);
+ this.power = new MageInt(2);
+ this.toughness = new MageInt(5);
+ }
+
+ public WishcoinCrab(final WishcoinCrab card) {
+ super(card);
+ }
+
+ @Override
+ public WishcoinCrab copy() {
+ return new WishcoinCrab(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/sets/GuildsOfRavnica.java b/Mage.Sets/src/mage/sets/GuildsOfRavnica.java
index ecfbb93ce1..499a7a7aea 100644
--- a/Mage.Sets/src/mage/sets/GuildsOfRavnica.java
+++ b/Mage.Sets/src/mage/sets/GuildsOfRavnica.java
@@ -31,6 +31,8 @@ public final class GuildsOfRavnica extends ExpansionSet {
cards.add(new SetCardInfo("Attendant of Vraska", 271, Rarity.UNCOMMON, mage.cards.a.AttendantOfVraska.class));
cards.add(new SetCardInfo("Aurelia, Exemplar of Justice", 153, Rarity.MYTHIC, mage.cards.a.AureliaExemplarOfJustice.class));
cards.add(new SetCardInfo("Barging Sergeant", 92, Rarity.COMMON, mage.cards.b.BargingSergeant.class));
+ cards.add(new SetCardInfo("Barrier of Bones", 61, Rarity.COMMON, mage.cards.b.BarrierOfBones.class));
+ cards.add(new SetCardInfo("Bartizan Bats", 62, Rarity.COMMON, mage.cards.b.BartizanBats.class));
cards.add(new SetCardInfo("Beacon Bolt", 154, Rarity.UNCOMMON, mage.cards.b.BeaconBolt.class));
cards.add(new SetCardInfo("Beast Whisperer", 123, Rarity.RARE, mage.cards.b.BeastWhisperer.class));
cards.add(new SetCardInfo("Blade Instructor", 1, Rarity.COMMON, mage.cards.b.BladeInstructor.class));
@@ -41,9 +43,14 @@ public final class GuildsOfRavnica extends ExpansionSet {
cards.add(new SetCardInfo("Boros Guildgate", 244, Rarity.COMMON, mage.cards.b.BorosGuildgate.class));
cards.add(new SetCardInfo("Boros Locket", 231, Rarity.COMMON, mage.cards.b.BorosLocket.class));
cards.add(new SetCardInfo("Bounty Agent", 2, Rarity.RARE, mage.cards.b.BountyAgent.class));
+ cards.add(new SetCardInfo("Burglar Rat", 64, Rarity.COMMON, mage.cards.b.BurglarRat.class));
+ cards.add(new SetCardInfo("Camaraderie", 157, Rarity.RARE, mage.cards.c.Camaraderie.class));
+ cards.add(new SetCardInfo("Capture Sphere", 31, Rarity.COMMON, mage.cards.c.CaptureSphere.class));
cards.add(new SetCardInfo("Centaur Peacemaker", 158, Rarity.COMMON, mage.cards.c.CentaurPeacemaker.class));
+ cards.add(new SetCardInfo("Chance for Glory", 159, Rarity.MYTHIC, mage.cards.c.ChanceForGlory.class));
cards.add(new SetCardInfo("Charnel Troll", 160, Rarity.RARE, mage.cards.c.CharnelTroll.class));
cards.add(new SetCardInfo("Chemister's Insight", 32, Rarity.UNCOMMON, mage.cards.c.ChemistersInsight.class));
+ cards.add(new SetCardInfo("Child of Night", 65, Rarity.COMMON, mage.cards.c.ChildOfNight.class));
cards.add(new SetCardInfo("Chromatic Lantern", 233, Rarity.RARE, mage.cards.c.ChromaticLantern.class));
cards.add(new SetCardInfo("Circuitous Route", 125, Rarity.UNCOMMON, mage.cards.c.CircuitousRoute.class));
cards.add(new SetCardInfo("Citywatch Sphinx", 33, Rarity.UNCOMMON, mage.cards.c.CitywatchSphinx.class));
@@ -55,9 +62,14 @@ public final class GuildsOfRavnica extends ExpansionSet {
cards.add(new SetCardInfo("Connive // Concoct", 222, Rarity.RARE, mage.cards.c.ConniveConcoct.class));
cards.add(new SetCardInfo("Crackling Drake", 163, Rarity.UNCOMMON, mage.cards.c.CracklingDrake.class));
cards.add(new SetCardInfo("Creeping Chill", 66, Rarity.UNCOMMON, mage.cards.c.CreepingChill.class));
+ cards.add(new SetCardInfo("Crushing Canopy", 126, Rarity.COMMON, mage.cards.c.CrushingCanopy.class));
cards.add(new SetCardInfo("Darkblade Agent", 164, Rarity.COMMON, mage.cards.d.DarkbladeAgent.class));
+ cards.add(new SetCardInfo("Dawn of Hope", 8, Rarity.RARE, mage.cards.d.DawnOfHope.class));
+ cards.add(new SetCardInfo("Dazzling Lights", 34, Rarity.COMMON, mage.cards.d.DazzlingLights.class));
+ cards.add(new SetCardInfo("Dead Weight", 67, Rarity.COMMON, mage.cards.d.DeadWeight.class));
cards.add(new SetCardInfo("Deadly Visit", 68, Rarity.COMMON, mage.cards.d.DeadlyVisit.class));
cards.add(new SetCardInfo("Deafening Clarion", 165, Rarity.RARE, mage.cards.d.DeafeningClarion.class));
+ cards.add(new SetCardInfo("Devkarin Dissident", 127, Rarity.COMMON, mage.cards.d.DevkarinDissident.class));
cards.add(new SetCardInfo("Dimir Guildgate", 245, Rarity.COMMON, mage.cards.d.DimirGuildgate.class));
cards.add(new SetCardInfo("Dimir Guildgate", 246, Rarity.COMMON, mage.cards.d.DimirGuildgate.class));
cards.add(new SetCardInfo("Dimir Informant", 36, Rarity.COMMON, mage.cards.d.DimirInformant.class));
@@ -68,43 +80,65 @@ public final class GuildsOfRavnica extends ExpansionSet {
cards.add(new SetCardInfo("Disdainful Stroke", 37, Rarity.COMMON, mage.cards.d.DisdainfulStroke.class));
cards.add(new SetCardInfo("Disinformation Campaign", 167, Rarity.UNCOMMON, mage.cards.d.DisinformationCampaign.class));
cards.add(new SetCardInfo("District Guide", 128, Rarity.UNCOMMON, mage.cards.d.DistrictGuide.class));
+ cards.add(new SetCardInfo("Divine Visitation", 10, Rarity.MYTHIC, mage.cards.d.DivineVisitation.class));
cards.add(new SetCardInfo("Doom Whisperer", 69, Rarity.MYTHIC, mage.cards.d.DoomWhisperer.class));
+ cards.add(new SetCardInfo("Douser of Lights", 70, Rarity.COMMON, mage.cards.d.DouserOfLights.class));
cards.add(new SetCardInfo("Dream Eater", 38, Rarity.MYTHIC, mage.cards.d.DreamEater.class));
+ cards.add(new SetCardInfo("Drowned Secrets", 39, Rarity.RARE, mage.cards.d.DrownedSecrets.class));
+ cards.add(new SetCardInfo("Electrostatic Field", 97, Rarity.UNCOMMON, mage.cards.e.ElectrostaticField.class));
cards.add(new SetCardInfo("Emmara, Soul of the Accord", 168, Rarity.RARE, mage.cards.e.EmmaraSoulOfTheAccord.class));
cards.add(new SetCardInfo("Enhanced Surveillance", 40, Rarity.UNCOMMON, mage.cards.e.EnhancedSurveillance.class));
cards.add(new SetCardInfo("Erratic Cyclops", 98, Rarity.RARE, mage.cards.e.ErraticCyclops.class));
+ cards.add(new SetCardInfo("Erstwhile Trooper", 169, Rarity.COMMON, mage.cards.e.ErstwhileTrooper.class));
cards.add(new SetCardInfo("Etrata, the Silencer", 170, Rarity.RARE, mage.cards.e.EtrataTheSilencer.class));
cards.add(new SetCardInfo("Expansion // Explosion", 224, Rarity.RARE, mage.cards.e.ExpansionExplosion.class));
+ cards.add(new SetCardInfo("Fearless Halberdier", 100, Rarity.COMMON, mage.cards.f.FearlessHalberdier.class));
cards.add(new SetCardInfo("Find // Finality", 225, Rarity.RARE, mage.cards.f.FindFinality.class));
+ cards.add(new SetCardInfo("Fire Urchin", 101, Rarity.COMMON, mage.cards.f.FireUrchin.class));
cards.add(new SetCardInfo("Firemind's Research", 171, Rarity.RARE, mage.cards.f.FiremindsResearch.class));
+ cards.add(new SetCardInfo("Flight of Equenauts", 11, Rarity.UNCOMMON, mage.cards.f.FlightOfEquenauts.class));
+ cards.add(new SetCardInfo("Flower // Flourish", 226, Rarity.UNCOMMON, mage.cards.f.FlowerFlourish.class));
cards.add(new SetCardInfo("Forest", 264, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Fresh-Faced Recruit", 216, Rarity.COMMON, mage.cards.f.FreshFacedRecruit.class));
cards.add(new SetCardInfo("Garrison Sergeant", 172, Rarity.COMMON, mage.cards.g.GarrisonSergeant.class));
+ cards.add(new SetCardInfo("Gatekeeper Gargoyle", 235, Rarity.UNCOMMON, mage.cards.g.GatekeeperGargoyle.class));
cards.add(new SetCardInfo("Gateway Plaza", 247, Rarity.COMMON, mage.cards.g.GatewayPlaza.class));
+ cards.add(new SetCardInfo("Generous Stray", 129, Rarity.COMMON, mage.cards.g.GenerousStray.class));
cards.add(new SetCardInfo("Gird for Battle", 12, Rarity.UNCOMMON, mage.cards.g.GirdForBattle.class));
cards.add(new SetCardInfo("Glaive of the Guildpact", 236, Rarity.UNCOMMON, mage.cards.g.GlaiveOfTheGuildpact.class));
cards.add(new SetCardInfo("Glowspore Shaman", 173, Rarity.UNCOMMON, mage.cards.g.GlowsporeShaman.class));
cards.add(new SetCardInfo("Goblin Banneret", 102, Rarity.UNCOMMON, mage.cards.g.GoblinBanneret.class));
cards.add(new SetCardInfo("Goblin Cratermaker", 103, Rarity.UNCOMMON, mage.cards.g.GoblinCratermaker.class));
cards.add(new SetCardInfo("Goblin Electromancer", 174, Rarity.COMMON, mage.cards.g.GoblinElectromancer.class));
+ cards.add(new SetCardInfo("Goblin Locksmith", 104, Rarity.COMMON, mage.cards.g.GoblinLocksmith.class));
cards.add(new SetCardInfo("Golgari Findbroker", 175, Rarity.UNCOMMON, mage.cards.g.GolgariFindbroker.class));
cards.add(new SetCardInfo("Golgari Guildgate", 248, Rarity.COMMON, mage.cards.g.GolgariGuildgate.class));
cards.add(new SetCardInfo("Golgari Guildgate", 249, Rarity.COMMON, mage.cards.g.GolgariGuildgate.class));
cards.add(new SetCardInfo("Golgari Locket", 237, Rarity.COMMON, mage.cards.g.GolgariLocket.class));
cards.add(new SetCardInfo("Golgari Raiders", 130, Rarity.UNCOMMON, mage.cards.g.GolgariRaiders.class));
+ cards.add(new SetCardInfo("Grappling Sundew", 131, Rarity.UNCOMMON, mage.cards.g.GrapplingSundew.class));
+ cards.add(new SetCardInfo("Gravitic Punch", 105, Rarity.COMMON, mage.cards.g.GraviticPunch.class));
+ cards.add(new SetCardInfo("Gruesome Menagerie", 71, Rarity.RARE, mage.cards.g.GruesomeMenagerie.class));
cards.add(new SetCardInfo("Guild Summit", 41, Rarity.UNCOMMON, mage.cards.g.GuildSummit.class));
cards.add(new SetCardInfo("Haazda Marshal", 13, Rarity.UNCOMMON, mage.cards.h.HaazdaMarshal.class));
cards.add(new SetCardInfo("Hammer Dropper", 176, Rarity.COMMON, mage.cards.h.HammerDropper.class));
cards.add(new SetCardInfo("Hatchery Spider", 132, Rarity.RARE, mage.cards.h.HatcherySpider.class));
cards.add(new SetCardInfo("Healer's Hawk", 14, Rarity.COMMON, mage.cards.h.HealersHawk.class));
+ cards.add(new SetCardInfo("Hellkite Whelp", 106, Rarity.UNCOMMON, mage.cards.h.HellkiteWhelp.class));
+ cards.add(new SetCardInfo("Hired Poisoner", 72, Rarity.COMMON, mage.cards.h.HiredPoisoner.class));
+ cards.add(new SetCardInfo("Hitchclaw Recluse", 133, Rarity.COMMON, mage.cards.h.HitchclawRecluse.class));
cards.add(new SetCardInfo("House Guildmage", 177, Rarity.UNCOMMON, mage.cards.h.HouseGuildmage.class));
cards.add(new SetCardInfo("Hunted Witness", 15, Rarity.COMMON, mage.cards.h.HuntedWitness.class));
cards.add(new SetCardInfo("Hypothesizzle", 178, Rarity.COMMON, mage.cards.h.Hypothesizzle.class));
cards.add(new SetCardInfo("Impervious Greatwurm", 273, Rarity.MYTHIC, mage.cards.i.ImperviousGreatwurm.class));
cards.add(new SetCardInfo("Inescapable Blaze", 107, Rarity.UNCOMMON, mage.cards.i.InescapableBlaze.class));
cards.add(new SetCardInfo("Integrity // Intervention", 227, Rarity.UNCOMMON, mage.cards.i.IntegrityIntervention.class));
+ cards.add(new SetCardInfo("Intrusive Packbeast", 17, Rarity.COMMON, mage.cards.i.IntrusivePackbeast.class));
cards.add(new SetCardInfo("Invert // Invent", 228, Rarity.UNCOMMON, mage.cards.i.InvertInvent.class));
+ cards.add(new SetCardInfo("Inspiring Unicorn", 16, Rarity.UNCOMMON, mage.cards.i.InspiringUnicorn.class));
+ cards.add(new SetCardInfo("Intrusive Packbeast", 17, Rarity.COMMON, mage.cards.i.IntrusivePackbeast.class));
cards.add(new SetCardInfo("Ionize", 179, Rarity.RARE, mage.cards.i.Ionize.class));
+ cards.add(new SetCardInfo("Ironshell Beetle", 134, Rarity.COMMON, mage.cards.i.IronshellBeetle.class));
cards.add(new SetCardInfo("Island", 261, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Izoni, Thousand-Eyed", 180, Rarity.RARE, mage.cards.i.IzoniThousandEyed.class));
cards.add(new SetCardInfo("Izzet Guildgate", 251, Rarity.COMMON, mage.cards.i.IzzetGuildgate.class));
@@ -113,6 +147,8 @@ public final class GuildsOfRavnica extends ExpansionSet {
cards.add(new SetCardInfo("Join Shields", 181, Rarity.UNCOMMON, mage.cards.j.JoinShields.class));
cards.add(new SetCardInfo("Justice Strike", 182, Rarity.UNCOMMON, mage.cards.j.JusticeStrike.class));
cards.add(new SetCardInfo("Knight of Autumn", 183, Rarity.RARE, mage.cards.k.KnightOfAutumn.class));
+ cards.add(new SetCardInfo("Kraul Foragers", 135, Rarity.COMMON, mage.cards.k.KraulForagers.class));
+ cards.add(new SetCardInfo("Kraul Harpooner", 136, Rarity.UNCOMMON, mage.cards.k.KraulHarpooner.class));
cards.add(new SetCardInfo("Lava Coil", 108, Rarity.UNCOMMON, mage.cards.l.LavaCoil.class));
cards.add(new SetCardInfo("Lazav, the Multifarious", 184, Rarity.MYTHIC, mage.cards.l.LazavTheMultifarious.class));
cards.add(new SetCardInfo("League Guildmage", 185, Rarity.UNCOMMON, mage.cards.l.LeagueGuildmage.class));
@@ -123,16 +159,20 @@ public final class GuildsOfRavnica extends ExpansionSet {
cards.add(new SetCardInfo("Light of the Legion", 19, Rarity.RARE, mage.cards.l.LightOfTheLegion.class));
cards.add(new SetCardInfo("Lotleth Giant", 74, Rarity.UNCOMMON, mage.cards.l.LotlethGiant.class));
cards.add(new SetCardInfo("Loxodon Restorer", 20, Rarity.COMMON, mage.cards.l.LoxodonRestorer.class));
+ cards.add(new SetCardInfo("Luminous Bonds", 21, Rarity.COMMON, mage.cards.l.LuminousBonds.class));
+ cards.add(new SetCardInfo("Maniacal Rage", 110, Rarity.COMMON, mage.cards.m.ManiacalRage.class));
cards.add(new SetCardInfo("March of the Multitudes", 188, Rarity.MYTHIC, mage.cards.m.MarchOfTheMultitudes.class));
cards.add(new SetCardInfo("Mausoleum Secrets", 75, Rarity.RARE, mage.cards.m.MausoleumSecrets.class));
cards.add(new SetCardInfo("Maximize Altitude", 43, Rarity.COMMON, mage.cards.m.MaximizeAltitude.class));
cards.add(new SetCardInfo("Maximize Velocity", 111, Rarity.COMMON, mage.cards.m.MaximizeVelocity.class));
cards.add(new SetCardInfo("Midnight Reaper", 77, Rarity.RARE, mage.cards.m.MidnightReaper.class));
+ cards.add(new SetCardInfo("Might of the Masses", 137, Rarity.UNCOMMON, mage.cards.m.MightOfTheMasses.class));
cards.add(new SetCardInfo("Mission Briefing", 44, Rarity.RARE, mage.cards.m.MissionBriefing.class));
cards.add(new SetCardInfo("Molderhulk", 190, Rarity.UNCOMMON, mage.cards.m.Molderhulk.class));
cards.add(new SetCardInfo("Moodmark Painter", 78, Rarity.COMMON, mage.cards.m.MoodmarkPainter.class));
cards.add(new SetCardInfo("Mountain", 263, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Murmuring Mystic", 45, Rarity.UNCOMMON, mage.cards.m.MurmuringMystic.class));
+ cards.add(new SetCardInfo("Muse Drake", 46, Rarity.COMMON, mage.cards.m.MuseDrake.class));
cards.add(new SetCardInfo("Narcomoeba", 47, Rarity.RARE, mage.cards.n.Narcomoeba.class));
cards.add(new SetCardInfo("Necrotic Wound", 79, Rarity.UNCOMMON, mage.cards.n.NecroticWound.class));
cards.add(new SetCardInfo("Never Happened", 80, Rarity.COMMON, mage.cards.n.NeverHappened.class));
@@ -144,10 +184,15 @@ public final class GuildsOfRavnica extends ExpansionSet {
cards.add(new SetCardInfo("Ochran Assassin", 194, Rarity.UNCOMMON, mage.cards.o.OchranAssassin.class));
cards.add(new SetCardInfo("Omnispell Adept", 49, Rarity.RARE, mage.cards.o.OmnispellAdept.class));
cards.add(new SetCardInfo("Overgrown Tomb", 253, Rarity.RARE, mage.cards.o.OvergrownTomb.class));
+ cards.add(new SetCardInfo("Pack's Favor", 139, Rarity.COMMON, mage.cards.p.PacksFavor.class));
cards.add(new SetCardInfo("Parhelion Patrol", 22, Rarity.COMMON, mage.cards.p.ParhelionPatrol.class));
cards.add(new SetCardInfo("Passwall Adept", 50, Rarity.COMMON, mage.cards.p.PasswallAdept.class));
+ cards.add(new SetCardInfo("Pause for Reflection", 140, Rarity.COMMON, mage.cards.p.PauseForReflection.class));
cards.add(new SetCardInfo("Piston-Fist Cyclops", 217, Rarity.COMMON, mage.cards.p.PistonFistCyclops.class));
+ cards.add(new SetCardInfo("Pitiless Gorgon", 218, Rarity.COMMON, mage.cards.p.PitilessGorgon.class));
cards.add(new SetCardInfo("Plains", 260, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Portcullis Vine", 142, Rarity.COMMON, mage.cards.p.PortcullisVine.class));
+ cards.add(new SetCardInfo("Prey Upon", 143, Rarity.COMMON, mage.cards.p.PreyUpon.class));
cards.add(new SetCardInfo("Price of Fame", 83, Rarity.UNCOMMON, mage.cards.p.PriceOfFame.class));
cards.add(new SetCardInfo("Quasiduplicate", 51, Rarity.RARE, mage.cards.q.Quasiduplicate.class));
cards.add(new SetCardInfo("Radical Idea", 52, Rarity.COMMON, mage.cards.r.RadicalIdea.class));
@@ -157,29 +202,37 @@ public final class GuildsOfRavnica extends ExpansionSet {
cards.add(new SetCardInfo("Ral, Izzet Viceroy", 195, Rarity.MYTHIC, mage.cards.r.RalIzzetViceroy.class));
cards.add(new SetCardInfo("Response // Resurgence", 229, Rarity.RARE, mage.cards.r.ResponseResurgence.class));
cards.add(new SetCardInfo("Rhizome Lurcher", 196, Rarity.COMMON, mage.cards.r.RhizomeLurcher.class));
+ cards.add(new SetCardInfo("Righteous Blow", 23, Rarity.COMMON, mage.cards.r.RighteousBlow.class));
cards.add(new SetCardInfo("Risk Factor", 113, Rarity.RARE, mage.cards.r.RiskFactor.class));
cards.add(new SetCardInfo("Ritual of Soot", 84, Rarity.RARE, mage.cards.r.RitualOfSoot.class));
cards.add(new SetCardInfo("Roc Charger", 24, Rarity.UNCOMMON, mage.cards.r.RocCharger.class));
cards.add(new SetCardInfo("Rosemane Centaur", 197, Rarity.COMMON, mage.cards.r.RosemaneCentaur.class));
+ cards.add(new SetCardInfo("Rubblebelt Boar", 114, Rarity.COMMON, mage.cards.r.RubblebeltBoar.class));
cards.add(new SetCardInfo("Runaway Steam-Kin", 115, Rarity.RARE, mage.cards.r.RunawaySteamKin.class));
cards.add(new SetCardInfo("Sacred Foundry", 254, Rarity.RARE, mage.cards.s.SacredFoundry.class));
cards.add(new SetCardInfo("Selesnya Guildgate", 255, Rarity.COMMON, mage.cards.s.SelesnyaGuildgate.class));
cards.add(new SetCardInfo("Selesnya Guildgate", 256, Rarity.COMMON, mage.cards.s.SelesnyaGuildgate.class));
cards.add(new SetCardInfo("Selesnya Locket", 240, Rarity.COMMON, mage.cards.s.SelesnyaLocket.class));
cards.add(new SetCardInfo("Siege Wurm", 144, Rarity.COMMON, mage.cards.s.SiegeWurm.class));
+ cards.add(new SetCardInfo("Silent Dart", 241, Rarity.UNCOMMON, mage.cards.s.SilentDart.class));
cards.add(new SetCardInfo("Sinister Sabotage", 54, Rarity.UNCOMMON, mage.cards.s.SinisterSabotage.class));
cards.add(new SetCardInfo("Skyknight Legionnaire", 198, Rarity.COMMON, mage.cards.s.SkyknightLegionnaire.class));
cards.add(new SetCardInfo("Sonic Assault", 199, Rarity.COMMON, mage.cards.s.SonicAssault.class));
+ cards.add(new SetCardInfo("Spinal Centipede", 86, Rarity.COMMON, mage.cards.s.SpinalCentipede.class));
cards.add(new SetCardInfo("Sprouting Renewal", 145, Rarity.UNCOMMON, mage.cards.s.SproutingRenewal.class));
cards.add(new SetCardInfo("Status // Statue", 230, Rarity.UNCOMMON, mage.cards.s.StatusStatue.class));
cards.add(new SetCardInfo("Steam Vents", 257, Rarity.RARE, mage.cards.s.SteamVents.class));
cards.add(new SetCardInfo("Sumala Woodshaper", 200, Rarity.COMMON, mage.cards.s.SumalaWoodshaper.class));
cards.add(new SetCardInfo("Sunhome Stalwart", 26, Rarity.UNCOMMON, mage.cards.s.SunhomeStalwart.class));
+ cards.add(new SetCardInfo("Sure Strike", 118, Rarity.COMMON, mage.cards.s.SureStrike.class));
cards.add(new SetCardInfo("Swamp", 262, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Swarm Guildmage", 201, Rarity.UNCOMMON, mage.cards.s.SwarmGuildmage.class));
cards.add(new SetCardInfo("Swathcutter Giant", 202, Rarity.UNCOMMON, mage.cards.s.SwathcutterGiant.class));
cards.add(new SetCardInfo("Swiftblade Vindicator", 203, Rarity.RARE, mage.cards.s.SwiftbladeVindicator.class));
+ cards.add(new SetCardInfo("Sworn Companions", 27, Rarity.COMMON, mage.cards.s.SwornCompanions.class));
+ cards.add(new SetCardInfo("Tajic, Legion's Edge", 204, Rarity.RARE, mage.cards.t.TajicLegionsEdge.class));
cards.add(new SetCardInfo("Temple Garden", 258, Rarity.RARE, mage.cards.t.TempleGarden.class));
+ cards.add(new SetCardInfo("Tenth District Guard", 29, Rarity.COMMON, mage.cards.t.TenthDistrictGuard.class));
cards.add(new SetCardInfo("Thought Erasure", 206, Rarity.UNCOMMON, mage.cards.t.ThoughtErasure.class));
cards.add(new SetCardInfo("Thoughtbound Phantasm", 55, Rarity.UNCOMMON, mage.cards.t.ThoughtboundPhantasm.class));
cards.add(new SetCardInfo("Trostani Discordant", 208, Rarity.MYTHIC, mage.cards.t.TrostaniDiscordant.class));
@@ -187,11 +240,16 @@ public final class GuildsOfRavnica extends ExpansionSet {
cards.add(new SetCardInfo("Undercity Uprising", 210, Rarity.COMMON, mage.cards.u.UndercityUprising.class));
cards.add(new SetCardInfo("Underrealm Lich", 211, Rarity.MYTHIC, mage.cards.u.UnderrealmLich.class));
cards.add(new SetCardInfo("Unexplained Disappearance", 56, Rarity.COMMON, mage.cards.u.UnexplainedDisappearance.class));
+ cards.add(new SetCardInfo("Urban Utopia", 146, Rarity.COMMON, mage.cards.u.UrbanUtopia.class));
+ cards.add(new SetCardInfo("Vedalken Mesmerist", 57, Rarity.COMMON, mage.cards.v.VedalkenMesmerist.class));
+ cards.add(new SetCardInfo("Veiled Shade", 88, Rarity.COMMON, mage.cards.v.VeiledShade.class));
cards.add(new SetCardInfo("Venerated Loxodon", 30, Rarity.RARE, mage.cards.v.VeneratedLoxodon.class));
+ cards.add(new SetCardInfo("Vernadi Shieldmate", 219, Rarity.COMMON, mage.cards.v.VernadiShieldmate.class));
cards.add(new SetCardInfo("Vivid Revival", 148, Rarity.RARE, mage.cards.v.VividRevival.class));
cards.add(new SetCardInfo("Vraska's Stoneglare", 272, Rarity.RARE, mage.cards.v.VraskasStoneglare.class));
cards.add(new SetCardInfo("Vraska, Golgari Queen", 213, Rarity.MYTHIC, mage.cards.v.VraskaGolgariQueen.class));
cards.add(new SetCardInfo("Vraska, Regal Gorgon", 269, Rarity.MYTHIC, mage.cards.v.VraskaRegalGorgon.class));
+ cards.add(new SetCardInfo("Wall of Mist", 58, Rarity.COMMON, mage.cards.w.WallOfMist.class));
cards.add(new SetCardInfo("Wand of Vertebrae", 242, Rarity.UNCOMMON, mage.cards.w.WandOfVertebrae.class));
cards.add(new SetCardInfo("Wary Okapi", 149, Rarity.COMMON, mage.cards.w.WaryOkapi.class));
cards.add(new SetCardInfo("Watcher in the Mist", 59, Rarity.COMMON, mage.cards.w.WatcherInTheMist.class));
@@ -199,6 +257,8 @@ public final class GuildsOfRavnica extends ExpansionSet {
cards.add(new SetCardInfo("Wee Dragonauts", 214, Rarity.UNCOMMON, mage.cards.w.WeeDragonauts.class));
cards.add(new SetCardInfo("Whisper Agent", 220, Rarity.COMMON, mage.cards.w.WhisperAgent.class));
cards.add(new SetCardInfo("Whispering Snitch", 90, Rarity.UNCOMMON, mage.cards.w.WhisperingSnitch.class));
+ cards.add(new SetCardInfo("Wild Ceratok", 150, Rarity.COMMON, mage.cards.w.WildCeratok.class));
+ cards.add(new SetCardInfo("Wishcoin Crab", 60, Rarity.COMMON, mage.cards.w.WishcoinCrab.class));
cards.add(new SetCardInfo("Wojek Bodyguard", 120, Rarity.COMMON, mage.cards.w.WojekBodyguard.class));
cards.add(new SetCardInfo("Worldsoul Colossus", 215, Rarity.UNCOMMON, mage.cards.w.WorldsoulColossus.class));
}
diff --git a/Mage/src/main/java/mage/game/permanent/token/AngelToken2.java b/Mage/src/main/java/mage/game/permanent/token/AngelVigilanceToken.java
similarity index 71%
rename from Mage/src/main/java/mage/game/permanent/token/AngelToken2.java
rename to Mage/src/main/java/mage/game/permanent/token/AngelVigilanceToken.java
index 9369b05c36..0167c1a2bb 100644
--- a/Mage/src/main/java/mage/game/permanent/token/AngelToken2.java
+++ b/Mage/src/main/java/mage/game/permanent/token/AngelVigilanceToken.java
@@ -6,9 +6,9 @@ import mage.abilities.keyword.VigilanceAbility;
import mage.constants.CardType;
import mage.constants.SubType;
-public final class AngelToken2 extends TokenImpl {
+public final class AngelVigilanceToken extends TokenImpl {
- public AngelToken2() {
+ public AngelVigilanceToken() {
super("Angel", "4/4 white Angel creature token with flying and vigilance");
cardType.add(CardType.CREATURE);
color.setWhite(true);
@@ -19,11 +19,11 @@ public final class AngelToken2 extends TokenImpl {
addAbility(VigilanceAbility.getInstance());
}
- public AngelToken2(final AngelToken2 token) {
+ public AngelVigilanceToken(final AngelVigilanceToken token) {
super(token);
}
- public AngelToken2 copy() {
- return new AngelToken2(this);
+ public AngelVigilanceToken copy() {
+ return new AngelVigilanceToken(this);
}
}
diff --git a/Utils/mtg-cards-data.txt b/Utils/mtg-cards-data.txt
index da510de815..baaac838bf 100644
--- a/Utils/mtg-cards-data.txt
+++ b/Utils/mtg-cards-data.txt
@@ -34300,86 +34300,163 @@ Tobias Beckett|Star Wars|614|R|{3}{B}|Legendary Creature - Human Hunter|4|3|When
Underground Forum|Star Wars|615|U||Land|||T: Add {1}.${1}, {T}: Add {B}, {R}, or {G}.${2}, {T}: Put a bounty counter on target creature.|
Blade Instructor|Guilds of Ravnica|1|C|{2}{W}|Creature - Human Soldier|3|1|Mentor|
Bounty Agent|Guilds of Ravnica|2|R|{1}{W}|Creature - Human Soldier|2|2|Vigilance${T}, Sacrifice Bounty Agent: Destroy target legendary permanent that's an artifact, creature, or enchantment.|
+Candlelight Vigil|Guilds of Ravnica|3|C|{3}{W}|Enchantment - Aura|||Enchant creature$Enchanted creature gets +3/+2 and has vigilance.|
Citywide Bust|Guilds of Ravnica|4|R|{1}{W}{W}|Sorcery|||Destroy all creatures with toughness 4 or greater.|
+Collar the Culprit|Guilds of Ravnica|5|C|{3}{W}|Instant|||Destroy target creature with toughness 4 or greater.|
Conclave Tribunal|Guilds of Ravnica|6|U|{3}{W}|Enchantment|||Convoke$When Conclave Tribunal enters the battlefield, exile target nonland permanent an opponent controls until Conclave Tribunal leaves the battlefield.|
+Crush Contraband|Guilds of Ravnica|7|U|{3}{W}|Instant|||Choose one or both —$• Exile target artifact.$• Exile target enchantment.|
+Dawn of Hope|Guilds of Ravnica|8|R|{1}{W}|Enchantment|||Whenever you gain life, you may pay {2}. If you do, draw a card.${3}{W}: Create a 1/1 white Soldier creature token with lifelink.|
+Demotion|Guilds of Ravnica|9|U|{W}|Enchantment - Aura|||Enchant creature$Enchanted creature can't block and its activated abilities can't be activated.|
Divine Visitation|Guilds of Ravnica|10|M|{3}{W}{W}|Enchantment|||If one or more creature tokens would be created under your control, that many 4/4 white Angel creature tokens with flying and vigilance are created instead.|
+Flight of Equenauts|Guilds of Ravnica|11|U|{7}{W}|Creature - Human Knight|4|5|Convoke$Flying|
Gird for Battle|Guilds of Ravnica|12|U|{W}|Sorcery|||Put a +1/+1 counter on each of up to two target creatures.|
-Haazda Marshal|Guilds of Ravnica|13|U|{W}|Creature - Human Soldier|1|1|Whenever Haazda Marshal and at least two other creatures attack, create a 1/1 white Solider creature token with lifelink.|
+Haazda Marshal|Guilds of Ravnica|13|U|{W}|Creature - Human Soldier|1|1|Whenever Haazda Marshal and at least two other creatures attack, create a 1/1 white Soldier creature token with lifelink.|
Healer's Hawk|Guilds of Ravnica|14|C|{W}|Creature - Bird|1|1|Flying, lifelink|
Hunted Witness|Guilds of Ravnica|15|C|{W}|Creature - Human|1|1|When Hunted Witness dies, create a 1/1 white Soldier creature token with lifelink.|
+Inspiring Unicorn|Guilds of Ravnica|16|U|{2}{W}{W}|Creature - Unicorn|2|2|Whenever Inspiring Unicorn attacks, creatures you control get +1/+1 until end of turn.|
+Intrusive Packbeast|Guilds of Ravnica|17|C|{4}{W}|Creature - Beast|3|3|Vigilance$When Intrusive Packbeast enters the battlefield, tap up to two target creatures your opponents control.|
Ledev Guardian|Guilds of Ravnica|18|C|{3}{W}|Creature - Human Knight|2|4|Convoke|
Light of the Legion|Guilds of Ravnica|19|R|{4}{W}{W}|Creature - Angel|5|5|Flying$Mentor$When Light of the Legion dies, put a +1/+1 counter on each white creature you control.|
Loxodon Restorer|Guilds of Ravnica|20|C|{4}{W}{W}|Creature - Elephant Cleric|3|4|Convoke$When Loxodon Restorer enters the battlefield, you gain 4 life.|
+Luminous Bonds|Guilds of Ravnica|21|C|{2}{W}|Enchantment - Aura|||Enchant creature$Enchanted creature can't attack or block.|
Parhelion Patrol|Guilds of Ravnica|22|C|{3}{W}|Creature - Human Knight|2|3|Flying, vigilance$Mentor|
+Righteous Blow|Guilds of Ravnica|23|C|{W}|Instant|||Righteous Blow deals 2 damage to target attacking or blocking creature.|
Roc Charger|Guilds of Ravnica|24|U|{2}{W}|Creature - Bird|1|3|Flying$Whenever Roc Charger attacks, target attacking creature without flying gains flying until end of turn.|
+Skyline Scout|Guilds of Ravnica|25|C|{1}{W}|Creature - Human Scout|2|1|Whenever Skyline Scout attacks, you may pay {1}{W}. If you do, it gains flying until end of turn.|
Sunhome Stalwart|Guilds of Ravnica|26|U|{1}{W}|Creature - Human Soldier|2|2|First strike$Mentor|
+Sworn Companions|Guilds of Ravnica|27|C|{2}{W}|Sorcery|||Creature two 1/1 white Soldier creature tokens with lifelink.|
+Take Heart|Guilds of Ravnica|28|C|{W}|Instant|||Target creature gets +2/+2 until end of turn. You gain 1 life for each attacking creature you control.|
+Tenth District Guard|Guilds of Ravnica|29|C|{1}{W}|Creature - Human Soldier|2|2|When Tenth District Guard enters the battlefield, target creature gets +0/+1 until end of turn.|
Venerated Loxodon|Guilds of Ravnica|30|R|{4}{W}|Creature - Elephant Cleric|4|4|Convoke$When Venerated Loxodon enters the battlefield, put a +1/+1 counter on each creature that convoked it.|
+Capture Sphere|Guilds of Ravnica|31|C|{3}{U}|Enchantment - Aura|||Flash$Enchant creature$When Capture Sphere enters the battlefield, tap enchanted creature.$Enchanted creature doesn't untap during its controller's untap step.|
Chemister's Insight|Guilds of Ravnica|32|U|{3}{U}|Instant|||Draw two cards.$Jump-start|
Citywatch Sphinx|Guilds of Ravnica|33|U|{5}{U}|Creature - Sphinx|5|4|Flying$When Citywatch Sphinx dies, surveil 2.|
+Dazzling Lights|Guilds of Ravnica|34|C|{U}|Instant|||Target creature gets -3/-0 until end of turn.$Surveil 2.|
+Devious Cover-up|Guilds of Ravnica|35|C|{2}{U}{U}|Instant|||Counter target spell. If that spell is countered this way, exile it instead of putting it into its owner's graveyard.$You may shuffle up to four target cards from your graveyard into your library.|
Dimir Informant|Guilds of Ravnica|36|C|{2}{U}|Creature - Human Rogue|1|4|When Dimir Informant enters the battlefield, surveil 2.|
Disdainful Stroke|Guilds of Ravnica|37|C|{1}{U}|Instant|||Counter target spell with converted mana cost 4 or greater.|
Dream Eater|Guilds of Ravnica|38|M|{4}{U}{U}|Creature - Nightmare Sphinx|4|3|Flash$Flying$When Dream Eater enters the battlefield, surveil 4. When you do, you may return target nonland permanent an opponent controls to its owner's hand.|
+Drowned Secrets|Guilds of Ravnica|39|R|{1}{U}|Enchantment|||Whenever you cast a blue spell, target player puts the top two cards if their library into their graveyard.|
Enhanced Surveillance|Guilds of Ravnica|40|U|{1}{U}|Enchantment|||You may look at an additional two cards each time you surveil.$Exile Enhanced Surveillance: Shuffle your graveyard into your library.|
Guild Summit|Guilds of Ravnica|41|U|{2}{U}|Enchantment|||When Guild Summit enters the battlefield, you may tap any number of untapped Gates you control. Draw a card for each Gate tapped this way.$Whenever a Gate enters the battlefield under your control, draw a card.|
+Leapfrog|Guilds of Ravnica|42|C|{2}{U}|Creature - Frog|3|1|Leapfrog has flying as long as you've cast and instant or sorcery spell this turn.|
Maximize Altitude|Guilds of Ravnica|43|C|{U}|Sorcery|||Target creature gets +1/+1 and gains flying until end of turn.$Jump-start|
Mission Briefing|Guilds of Ravnica|44|R|{U}{U}|Instant|||Surveil 2, then choose an instant or sorcery card in your graveyard. You may cast that card this turn. If that card would be put into your graveyard this turn, exile it instead.|
Murmuring Mystic|Guilds of Ravnica|45|U|{3}{U}|Creature - Human Wizard|1|5|Whenever you cast an instant or sorcery spell, create a 1/1 blue Bird Illusion creature token with flying.|
+Muse Drake|Guilds of Ravnica|46|C|{3}{U}|Creature - Drake|1|3|Flying$When Muse Drake enters the battlefield, draw a card.|
Narcomoeba|Guilds of Ravnica|47|R|{1}{U}|Creature - Illusion|1|1|Flying$When Narcomoeba is put into your graveyard from your library, you may put it onto the battlefield.|
Nightveil Sprite|Guilds of Ravnica|48|U|{1}{U}|Creature - Faerie Rogue|1|2|Flying$Whenever Nightveil Sprite attacks, surveil 1.|
Omnispell Adept|Guilds of Ravnica|49|R|{4}{U}|Creature - Human Wizard|3|4|{2}{U}, {T}: You may cast an instant or sorcery card from your hand without paying its mana cost.|
Passwall Adept|Guilds of Ravnica|50|C|{1}{U}|Creature - Human Wizard|1|3|{2}{U}: Target creature can't be blocked this turn.|
Quasiduplicate|Guilds of Ravnica|51|R|{1}{U}{U}|Sorcery|||Create a token that's a copy of target creature you control.$Jump-start|
Radical Idea|Guilds of Ravnica|52|C|{1}{U}|Instant|||Draw a card.$Jump-start|
+Selective Snare|Guilds of Ravnica|53|U|{X}{U}|Sorcery|||Return X target creatures of the creature type of your choice to their owner's hand.|
Sinister Sabotage|Guilds of Ravnica|54|U|{1}{U}{U}|Instant|||Counter target spell.$Surveil 1.|
Thoughtbound Phantasm|Guilds of Ravnica|55|U|{U}|Creature - Spirit|2|2|Defender$Whenever you surveil, put a +1/+1 counter on Thoughtbound Phantasm.$As long as Thoughtbound Phantasm has three or more +1/+1 counters on it, it can attack as though it didn't have defender.|
Unexplained Disappearance|Guilds of Ravnica|56|C|{1}{U}|Instant|||Return target creature to its owner's hand.$Surveil 1.|
+Vedalken Mesmerist|Guilds of Ravnica|57|C|{1}{U}|Creature - Vedalken Wizard|2|1|Whenever Vedalken Mesmerist attacks, target creature an opponent controls gets -2/-0 until end of turn.|
+Wall of Mist|Guilds of Ravnica|58|C|{1}{U}|Creature - Wall|0|5|Defender|
Watcher in the Mist|Guilds of Ravnica|59|C|{3}{U}{U}|Creature - Spirit|3|4|Flying$When Watcher in the Mist enters the battlefield, surveil 2.|
+Wishcoin Crab|Guilds of Ravnica|60|C|{3}{U}|Creature - Crab|2|5||
+Barrier of Bones|Guilds of Ravnica|61|C|{B}|Creature - Skeleton Wall|0|3|Defender$When Barrier of Bones enters the battlefield, surveil 1.|
+Bartizan Bats|Guilds of Ravnica|62|C|{3}{B}|Creature - Bat|3|1|Flying|
Blood Operative|Guilds of Ravnica|63|R|{1}{B}{B}|Creature - Vampire Assassin|3|1|Lifelink$When Blood Operative enters the battlefield, you may exile target card from a graveyard.$Whenever you surveil, if Blood Operative is in your graveyard, you may pay 3 life. If you do, return Blood Operative to your hand.|
+Burglar Rat|Guilds of Ravnica|64|C|{1}{B}|Creature - Rat|1|1|When Burglar Rat enters the battlefield, each opponent discards a card.|
+Child of Night|Guilds of Ravnica|65|C|{1}{B}|Creature - Vampire|2|1|Lifelink|
Creeping Chill|Guilds of Ravnica|66|U|{3}{B}|Sorcery|||Creeping Chill deals 3 damage to each opponent and you gain 3 life.$When Creeping Chill is put into your graveyard from your library, you may exile it. If you do, Creeping Chill deals 3 damage to each opponent and you gain 3 life.|
+Dead Weight|Guilds of Ravnica|67|C|{B}|Enchantment - Aura|||Enchant creature$Enchanted creature gets -2/-2.|
Deadly Visit|Guilds of Ravnica|68|C|{3}{B}{B}|Sorcery|||Destroy target creature.$Surveil 2.|
Doom Whisperer|Guilds of Ravnica|69|M|{3}{B}{B}|Creature - Nightmare Demon|6|6|Flying, trample$Pay 2 life: Surveil 2.|
+Douser of Lights|Guilds of Ravnica|70|C|{4}{B}|Creature - Horror|4|5||
+Gruesome Menagerie|Guilds of Ravnica|71|R|{3}{B}{B}|Sorcery|||Choose a creature card with converted mana cost 1 in your graveyard, then do the same for creature cards with converted mana costs 2 and 3. Return those cards to the battlefield.|
+Hired Poisoner|Guilds of Ravnica|72|C|{B}|Creature - Human Assassin|1|1|Deathtouch|
+Kraul Swarm|Guilds of Ravnica|73|U|{4}{B}|Creature - Insect Warrior|4|1|Flying${2}{B}, Discard a creature card: Return Kraul Swarm from your graveyard to your hand.|
Lotleth Giant|Guilds of Ravnica|74|U|{6}{B}|Creature - Zombie Giant|6|5|Undergrowth — When Lotleth Giant enters the battlefield, it deals 1 damage to target opponent for each creature card in your graveyard.|
Mausoleum Secrets|Guilds of Ravnica|75|R|{1}{B}|Instant|||Undergrowth — Search your library for a black card with converted mana cost less than or equal to the number of creature cards in your graveyard, reveal it, put it into your hand, then shuffle your library.|
+Mephitic Vapors|Guilds of Ravnica|76|C|{2}{B}|Sorcery|||All creatures get -1/-1 until end of turn.$Surveil 2.|
Midnight Reaper|Guilds of Ravnica|77|R|{2}{B}|Creature - Zombie Knight|3|2|Whenever a nontoken creature you control dies, Midnight Reaper deals 1 damage to you and you draw a card.|
Moodmark Painter|Guilds of Ravnica|78|C|{2}{B}{B}|Creature - Human Shaman|2|3|Undergrowth — When Moodmark Painter enters the battlefield, target creature gains menace and gets +X/+0 until end of turn, where X is the number of creature cards in your graveyard.|
Necrotic Wound|Guilds of Ravnica|79|U|{B}|Instant|||Undergrowth — Target creature gets -X/-X until end of turn, where X is the number of creature cards in your graveyard. If that creature would die this turn, exile it instead.|
Never Happened|Guilds of Ravnica|80|C|{2}{B}|Sorcery|||Target opponent reveals their hand. You choose a nonland card from that player's graveyard or hand and exile it.|
+Pilfering Imp|Guilds of Ravnica|81|U|{B}|Creature - Imp|||Flying${1}{B}, {T}, Sacrifice Pilfering Imp: Target opponent reveals their hand|
+Plaguecrafter|Guilds of Ravnica|82|U|{2}{B}|Creature - Human Shaman|3|2|When Plaguecrafter enters the battlefield, each player sacrifices a creature or planeswalker. Each player who can't discards a card.|
Price of Fame|Guilds of Ravnica|83|U|{3}{B}|Instant|||This spell costs {2} less to cast if it targets a legendary creature.$Destroy target creature.$Surveil 2.|
Ritual of Soot|Guilds of Ravnica|84|R|{2}{B}{B}|Sorcery|||Destroy all creatures with converted mana cost 3 or less.|
+Severed Strands|Guilds of Ravnica|85|C|{1}{B}|Sorcery|||As an additional cost to cast this spell, sacrifice a creature.$You gain life equal to that sacrificed creature's toughness. Destroy target creature an opponent controls.|
+Spinal Centipede|Guilds of Ravnica|86|C|{2}{B}|Creature - Insect|3|2|When Spinal Centipede dies, put a +1/+1 counter on target creature you control.|
+Undercity Necrolisk|Guilds of Ravnica|87|U|{3}{B}|Creature - Zombie Lizard|3|3|{1}, Sacrifice another creature: Put a +1/+1 counter on Undercity Necrolisk. It gains menace until end of turn. Activate this ability only any time you could cast a sorcery.|
+Veiled Shade|Guilds of Ravnica|88|C|{2}{B}|Creature - Shade|2|2|{1}{B}: Veiled Shade gets +1/+1 until end of turn.|
+Vicious Rumors|Guilds of Ravnica|89|C|{B}|Sorcery|||Vicious Rumors deals 1 damage to each opponent. Each opponent discards a card, the puts the top card of their library into their graveyard. You gain 1 life.|
Whispering Snitch|Guilds of Ravnica|90|U|{1}{B}|Creature - Vampire Rogue|1|3|Whenever you surveil for the first time each turn, Whispering Snitch deals 1 damage to each opponent and you gain 1 life.|
Arclight Phoenix|Guilds of Ravnica|91|M|{3}{R}|Creature - Phoenix|3|2|Flying, haste$At the beginning of combat on your turn, if you've cast three or more instant and sorcery spells this turn, you may return Arclight Phoenix from your graveyard to the battlefield.|
Barging Sergeant|Guilds of Ravnica|92|C|{4}{R}|Creature - Minotaur Soldier|4|2|Haste$Mentor|
Book Devourer|Guilds of Ravnica|93|U|{5}{R}|Creature - Beast|4|5|Trample$Whenever Book Devourer deals combat damage to a player, you may discard all the cards in your hand. If you do, draw that many cards.|
Command the Storm|Guilds of Ravnica|94|C|{4}{R}|Instant|||Command the Storm deals 5 damage to target creature.|
+Cosmotronic Wave|Guilds of Ravnica|95|C|{3}{B}|Sorcery|||Cosmotronic Wave deals 1 damage to each creature your opponents control. Creatures your opponents control can't block this turn.|
Direct Current|Guilds of Ravnica|96|C|{1}{R}{R}|Sorcery|||Direct Current deals 2 damage to any target.$Jump-start|
+Electrostatic Field|Guilds of Ravnica|97|U|{1}{R}|Creature - Wall|0|4|Defender$When you cast an instant or sorcery spell, Electrostatic Field deals 1 damage to each opponent.|
Erratic Cyclops|Guilds of Ravnica|98|R|{3}{R}|Creature - Cyclops Shaman|0|8|Trample$Whenever you cast an instant or sorcery spell, Erratic Cyclops gets +X/+0 until end of turn, where X is that spell's converted mana cost.|
+Experimental Frenzy|Guilds of Ravnica|99|R|{3}{R}|Enchantment|||You may look at the top card of your library any time.$You may play the top card of your library.$You can't play cards from your hand.${3}{R}: Destroy Experimental Frenzy.|
+Fearless Halberdier|Guilds of Ravnica|100|C|{2}{R}|Creature - Human Warrior|3|2||
+Fire Urchin|Guilds of Ravnica|101|C|{1}{R}|Creature - Elemental|1|3|Trample$Whenever you cast an instant or sorcery spell, Fire Urchin gets +1/+0 until end of turn.|
Goblin Banneret|Guilds of Ravnica|102|U|{R}|Creature - Goblin Soldier|1|1|Mentor${1}{R}: Goblin Banneret gets +2/+0 until end of turn.|
Goblin Cratermaker|Guilds of Ravnica|103|U|{1}{R}|Creature - Goblin Warrior|2|2|{1}, Sacrifice Goblin Cratermaker: Choose one —$• Goblin Cratermaker deals 2 damage to target creature.$• Destroy target colorless nonland permanent.|
+Goblin Locksmith|Guilds of Ravnica|104|C|{1}{R}|Creature - Goblin Rogue|2|1|Whenever Goblin Locksmith attacks, creatures with defender can't block this turn.|
+Gravitic Punch|Guilds of Ravnica|105|C|{3}{R}|Sorcery|||Target creature you control deals damage equal to its power to target player.$Jump-start|
+Hellkite Whelp|Guilds of Ravnica|106|U|{4}{R}|Creature - Dragon|3|34|Flying$Whenever Hellkite Whelp attacks, it deals 1 damage to target creature defending player controls.|
Inescapable Blaze|Guilds of Ravnica|107|U|{4}{R}{R}|Instant|||This spell can't be countered.$Inescapable Flame deals 6 damage to any target.|
Lava Coil|Guilds of Ravnica|108|U|{1}{R}|Sorcery|||Lava Coil deals 4 damage to target creature. If that creature would die this turn, exile it instead.|
Legion Warboss|Guilds of Ravnica|109|R|{2}{R}|Creature - Goblin Soldier|2|2|Mentor$At the beginning of combat on your turn, create a 1/1 red Goblin creature token. That token gains haste until end of turn and attacks this combat if able.|
+Maniacal Rage|Guilds of Ravnica|110|C|{1}{R}|Enchantment - Aura|||Enchant creature$Enchanted creature gets +2/+2 and can't block.|
Maximize Velocity|Guilds of Ravnica|111|C|{R}|Sorcery|||Target creature gets +1/+1 and gains haste until end of turn.$Jump-start|
+Ornery Goblin|Guilds of Ravnica|112|C|{1}{R}|Creature - Goblin Warrior|2|1|Whenever Ornery Goblin blocks or becomes blocked by a creature, Ornery Goblin deals 1 damage to that creature.|
Risk Factor|Guilds of Ravnica|113|R|{2}{R}|Instant|||Target opponent may have Risk Factor deal 4 damage to them. If that player doesn't, you draw three cards.$Jump-start|
+Rubblebelt Boar|Guilds of Ravnica|114|C|{3}{R}|Creature - Boar|3|3|When Rubblebelt Boar enters the battlefield, target creature gets +2/+0 until end of turn.|
Runaway Steam-Kin|Guilds of Ravnica|115|R|{1}{R}|Creature - Elemental|1|1|Whenever you cast a red spell, if Runaway Steam-Kin has fewer than three +1/+1 counters on it, put a +1/+1 counter on Runaway Steam-Kin.$Remove three +1/+1 counters from Runaway Steam-Kin: Add {R}{R}{R}.|
+Smelt-War Minotaur|Guilds of Ravnica|116|U|{2}{R}|Creature - Minotaur Warrior|2|3|Whenever you cast an instant or sorcery spell, target creature an opponent controls can't block this turn.|
+Street Riot|Guilds of Ravnica|117|U|{4}{R}|Enchantment|||As long as it's your turn, creatures you control get +1/+0 and have trample.|
+Sure Strike|Guilds of Ravnica|118|C|{1}{R}|Instant|||Target creature gets +3/+0 and gains first strike until end of turn.|
+Torch Courier|Guilds of Ravnica|119|C|{R}|Creature - Goblin|1|1|Haste$Sacrifice Torch Courier: Another target creature gains haste until end of turn.|
Wojek Bodyguard|Guilds of Ravnica|120|C|{2}{R}|Creature - Human Soldier|3|3|Mentor$Wojek Bodyguard can't attack or block alone.|
Affectionate Indrik|Guilds of Ravnica|121|U|{5}{G}|Creature - Beast|4|4|When Affectionate Indrik enters the battlefield, you may have it fight target creature you don't control.|
Arboretum Elemental|Guilds of Ravnica|122|U|{7}{G}{G}|Creature - Elemental|7|5|Convoke$Hexproof|
Beast Whisperer|Guilds of Ravnica|123|R|{2}{G}{G}|Creature - Elf Druid|2|3|Whenever you cast a creature spell, draw a card.|
+Bounty of Might|Guilds of Ravnica|124|R|{4}{G}{G}|Instant|||Target creature gets +3/+3 until end of turn.$Target creature gets +3/+3 until end of turn.$Target creature gets +3/+3 until end of turn.|
Circuitous Route|Guilds of Ravnica|125|U|{3}{G}|Sorcery|||Search your library for up to two basic land cards and/or Gate cards and put them onto the battlefield tapped, then shuffle your library.|
+Crushing Canopy|Guilds of Ravnica|126|C|{2}{G}|Instant|||Choose one —$• Destroy target creature with flying.$• Destroy target enchantment.|
+Devkarin Dissident|Guilds of Ravnica|127|C|{1}{G}|Creature - Elf Warrior|2|2|{4}{G}: Devkarin Dissident gets +2/+2 until end of turn.|
District Guide|Guilds of Ravnica|128|U|{2}{G}|Creature - Elf Scout|2|2|When District Guide enters the battlefield, you may search your library for a basic land card or Gate card, reveal it, put it into your hand, then shuffle your library.|
+Generous Stray|Guilds of Ravnica|129|C|{2}{G}|Creature - Cat|1|2|When Generous Stray enters the battlefield, draw a card.|
Golgari Raiders|Guilds of Ravnica|130|U|{3}{G}|Creature - Elf Warrior|0|0|Haste$Undergrowth — Golgari Raiders enters the battlefield with a +1/+1 counter on it for each creature card in your graveyard.|
+Grappling Sundew|Guilds of Ravnica|131|U|{1}{G}|Creature - Plant|0|4|Defender, reach${4}{G}: Grappling Sundew gains indestructible until end of turn.|
Hatchery Spider|Guilds of Ravnica|132|R|{5}{G}{G}|Creature - Spider|5|7|Reach$Undergrowth — When you cast this spell, reveal the top X cards of your library, where X is the number of creature cards in your graveyard. You may put a green permanent card with converted mana cost X or less from among them onto the battlefield. Put the rest on the bottom of your library in a random order.|
+Hitchclaw Recluse|Guilds of Ravnica|133|C|{2}{G}|Creature - Spider|1|4|Reach|
+Ironshell Beetle|Guilds of Ravnica|134|C|{1}{G}|Creature - Insect|1|1|When Ironshell Beetle enters the battlefield, put a +1/+1 counter on target creature.|
+Kraul Foragers|Guilds of Ravnica|135|C|{4}{G}|Creature - Insect Scout|4|4|Undergrowth — When Kraul Foragers enters the battlefield, you gain 1 life for each creature card in your graveyard.|
+Kraul Harpooner|Guilds of Ravnica|136|U|{1}{G}|Creature - Insect Warrior|3|2|Reach$Undergrowth — When Kraul Harpooner enters the battlefield, choose up to one target creature with flying you don't control. Kraul Harpooner gets +X/+0 until end of turn, where X is the number of creature cards in your graveyard, then you may have Kraul Harpooner fight that creature.|
+Might of the Masses|Guilds of Ravnica|137|U|{G}|Instant|||Target creature gets +1/+1 until end of turn for each creature you control.|
Nullhide Ferox|Guilds of Ravnica|138|M|{2}{G}{G}|Creature - Beast|6|6|Hexproof$You can't cast noncreature spells.${2}: Nullhide Ferox loses all abilities until end of turn. Any player may activate this ability.$If a spell or ability an opponent controls causes you to discard Nullhide Ferox, put it onto the battlefield instead of putting it into your graveyard.|
+Pack's Favor|Guilds of Ravnica|139|C|{2}{G}|Instant|||Convoke$Target creature gets +3/+3 until end of turn.|
+Pause for Reflection|Guilds of Ravnica|140|C|{2}{G}|Instant|||Convoke$Precent all combat damage that would be dealt this turn.|
+Pelt Collector|Guilds of Ravnica|141|R|{G}|Creature - Elf Warrior|1|1|Whenever another creature you control enters the battlefield or dies, if that creature's power is greater than Pelt Collector's, put a +1/+1 counter on Pelt Collector.$As long as Pelt Collector has three or more +1/+1 counters on it, it has trample.|
+Portcullis Vine|Guilds of Ravnica|142|C|{G}|Creature - Plant Wall|0|3|Defender${2}, {T}, Sacrifice a creature with defender: Draw a card.|
+Prey Upon|Guilds of Ravnica|143|C|{G}|Sorcery|||Target creature you control fights target creature you don't control.|
Siege Wurm|Guilds of Ravnica|144|C|{5}{G}{G}|Creature - Wurm|5|5|Convoke$Trample|
Sprouting Renewal|Guilds of Ravnica|145|U|{2}{G}|Sorcery|||Convoke$Choose one —$• Create a 2/2 green and white Elf Knight creature token with vigilance.$• Destroy target artifact or enchantment.|
+Urban Utopia|Guilds of Ravnica|146|C|{1}{G}|Enchantment - Aura|||Enchant Land$When Urban Utopia enters the battlefield, draw a card.$Enchanted land has "{T}: Add one mana of any color."|
+Vigorspore Wurm|Guilds of Ravnica|147|C|{5}{G}|Creature - Wurm|6|4|Undergrowth — When Vigorspore Wurm enters the battlefield, target creature gains vigilance and gets +X/+X until end of turn, where X is the number of creature cards in your graveyard.$Vigorspore Wurm can't be blocked by more than one creature.|
Vivid Revival|Guilds of Ravnica|148|R|{4}{G}|Sorcery|||Return up to three target multicolor cards from your graveyard to your hand. Exile Vivid Revival.|
Wary Okapi|Guilds of Ravnica|149|C|{2}{G}|Creature - Antelope|3|2|Vigilance|
+Wild Ceratok|Guilds of Ravnica|150|C|{3}{G}|Creature - Rhino|4|3||
Artful Takedown|Guilds of Ravnica|151|C|{2}{U}{B}|Instant|||Choose one or both —$• Tap target creature.$• Target creature gets -2/-4 until end of turn.|
Assassin's Trophy|Guilds of Ravnica|152|R|{B}{G}|Instant|||Destroy target permanent an opponent controls. Its controller may search their library for a basic land card, put it onto the battlefield, then shuffle their library.|
Aurelia, Exemplar of Justice|Guilds of Ravnica|153|M|{2}{R}{W}|Legendary Creature - Angel|2|5|Flying$Mentor$At the beginning of combat on your turn, choose up to one target creature you control. Until end of turn, that creature gets +2/+0, gains trample if it's red, and gains vigilance if it's white.|
Beacon Bolt|Guilds of Ravnica|154|U|{1}{U}{R}|Sorcery|||Beacon Bolt deals damage to target creature equal to the total number of instant and sorcery cards you own in exile and in your graveyard.$Jump-start|
+Beamsplitter Mage|Guilds of Ravnica|155|U|{U}{R}|Creature - Vedalken Wizard|2|2|Whenever you cast an instant or sorcery that targets only Beamsplitter Mage, if you control one or more creatures that the spell could target, choose one of them. Copy the spell and it targets the chosen creature.|
Boros Challenger|Guilds of Ravnica|156|U|{R}{W}|Creature - Human Soldier|2|3|Mentor${2}{R}{W}: Boros Challenger gets +1/+1 until end of turn.|
+Camaraderie|Guilds of Ravnica|157|R|{4}{G}{W}|Sorcery|||You gain X life and draw X cards, where X is the number of creatures you control. Creatures you control get +1/+1 until end of turn.|
Centaur Peacemaker|Guilds of Ravnica|158|C|{1}{G}{W}|Creature - Centaur Cleric|3|3|When Centaur Peacemaker enters the battlefield, each player gains 4 life.|
+Chance for Glory|Guilds of Ravnica|159|M|{1}{R}{W}|Instant|||Creatures you control gain indestructible. Take an extra turn after this one. At the beginning of that turn's end step, you lose the game.|
Charnel Troll|Guilds of Ravnica|160|R|{1}{B}{G}|Creature - Troll|4|4|Trample$At the beginning of your upkeep, exile a creature card from your graveyard. If you do, put a +1/+1 counter on Charnel Troll. Otherwise sacrifice it.${B}{G}, Discard a creature card: Put a +1/+1 counter on Charnel Troll.|
Conclave Cavalier|Guilds of Ravnica|161|U|{G}{G}{W}{W}|Creature - Centaur Knight|4|4|Vigilance$When Conclave Cavalier dies, create two green and white 2/2 Elf Knight creature tokens with vigilance.|
Conclave Guildmage|Guilds of Ravnica|162|U|{G}{W}|Creature - Elf Cleric|2|2|{G}, {T}: Creatures you control gain trample until end of turn.${5}{W}, {T}: Create a 2/2 green and white Elf Knight creature token with vigilance.|
@@ -34389,7 +34466,8 @@ Deafening Clarion|Guilds of Ravnica|165|R|{1}{R}{W}|Sorcery|||Choose one or both
Dimir Spybug|Guilds of Ravnica|166|U|{U}{B}|Creature - Insect|1|1|Flying$Menace$Whenever you surveil, put a +1/+1 counter on Dimir Spybug.|
Disinformation Campaign|Guilds of Ravnica|167|U|{1}{U}{B}|Enchantment|||When Disinformation Campaign enters the battlefield, you draw a card and each opponent discards a card.$Whenever you surveil, return Disinformation Campaign to its owner's hand.|
Emmara, Soul of the Accord|Guilds of Ravnica|168|R|{G}{W}|Legendary Creature - Elf Cleric|2|2|Whenever Emmara, Soul of the Accord becomes tapped, create a 1/1 white Soldier creature token with lifelink.|
-Etrata, the Silencer|Guilds of Ravnica|170|R|{2}{U}{B}|Legendary Creature - Vampire Assassin|3|5|Etrata, the Silencer can't be blocked.$Whenever Etrata deals combat damage to a player, exile target creature that player controls and put a hit counter on that card. That player loses the game if they own three or more exiled card with hit counters on them. Etrata's owner shuffles Etrata into their library.|
+Erstwhile Trooper|Guilds of Ravnica|169|C|{1}{B}{G}|Creature - Zombie Soldier|2|2|Discard a creature card: Erstwhile Trooper gets +2/+2 and gains trample until end of turn. Activate this ability only once each turn.|
+Etrata, the Silencer|Guilds of Ravnica|170|R|{2}{U}{B}|Legendary Creature - Vampire Assassin|3|5|Etrata, the Silencer can't be blocked.$Whenever Etrata deals combat damage to a player, exile target creature that player controls and put a hit counter on that card. That player loses the game if they own three or more exiled cards with hit counters on them. Etrata's owner shuffles Etrata into their library.|
Firemind's Research|Guilds of Ravnica|171|R|{U}{R}|Enchantment|||Whenever you cast an instant or sorcery spell, put a charge counter on Firemind's Research.${1}{U}, Remove two charge counters from Firemind's Research: Draw a card.${1}{R}, Remove five charge counters from Firemind's Research: It deals 5 damage to any target.|
Garrison Sergeant|Guilds of Ravnica|172|C|{3}{R}{W}|Creature - Viashino Soldier|3|3|Garrison Sergeant has double strike as long as you control a Gate.|
Glowspore Shaman|Guilds of Ravnica|173|U|{B}{G}|Creature - Elf Shaman|3|1|When Glowspore Shaman enters the battlefield, put the top three cards of your library into your graveyard. You may put a land card from your graveyard on top of your library.|
@@ -34405,9 +34483,10 @@ Justice Strike|Guilds of Ravnica|182|U|{R}{W}|Instant|||Target creature deals da
Knight of Autumn|Guilds of Ravnica|183|R|{1}{G}{W}|Creature - Dryad Knight|2|1|When Knight of Autumn enters the battlefield, choose one —$• Put two +1/+1 counters on Knight of Autumn.$• Destroy target artifact or enchantment.$• You gain 4 life.|
Lazav, the Multifarious|Guilds of Ravnica|184|M|{U}{B}|Legendary Creature - Shapeshifter|1|3|When Lazav, the Multifarious enters the battlefield, surveil 1.${X}: Lazav, the Multifarious becomes a copy of target creature card in your graveyard with converted mana cost X, except its name is Lazav, the Multifarious, it's legendary in addition to its other types, and it has this ability.|
League Guildmage|Guilds of Ravnica|185|U|{U}{R}|Creature - Human Wizard|2|2|{3}{U}, {T}: Draw a card.${X}{R}, {T}: Copy target instant or sorcery spell you control with converted mana cost X. You may choose new targets for the copy.|
-Ledev Champion|Guilds of Ravnica|186|U|{1}{G}{W}|Creature - Human Knight|2|2|Whenever Ledev Champion attacks, you may tap any number of untapped creatures you control. Ledev Champion gets +1/+1 until end of turn for each creature tapped this way.${3}{G}{W}: Create a 1/1 white soldier creature token with lifelink.|
+Ledev Champion|Guilds of Ravnica|186|U|{1}{G}{W}|Creature - Elf Knight|2|2|Whenever Ledev Champion attacks, you may tap any number of untapped creatures you control. Ledev Champion gets +1/+1 until end of turn for each creature tapped this way.${3}{G}{W}: Create a 1/1 white soldier creature token with lifelink.|
Legion Guildmage|Guilds of Ravnica|187|U|{R}{W}|Creature - Human Wizard|2|2|{5}{R}, {T}: Legion Guildmage deals 3 damage to each opponent.${2}{W}, {T}: Tap another target creature.|
March of the Multitudes|Guilds of Ravnica|188|M|{X}{G}{W}{W}|Instant|||Convoke$Create X 1/1 white Soldier creature tokens with lifelink.|
+Mnemonic Betrayal|Guilds of Ravnica|189|M|{1}{U}{B}|Sorcery|||Exile all card from all opponents' graveyards. You may cast those cards this turn, and you may spend mana as though it were mana of any type to cast those spells. At the beginning of the next end step, if any of those cards remain exiled, return them to their owner's graveyards.$Exile Mnemonic Betrayal.|
Molderhulk|Guilds of Ravnica|190|U|{7}{B}{G}|Creature - Fungus Zombie|6|6|Undergrowth — This spell costs {1} less to cast for each creature card in your graveyard.$When Molderhulk enters the battlefield, return target land card from your graveyard to the battlefield.|
Nightveil Predator|Guilds of Ravnica|191|U|{U}{U}{B}{B}|Creature - Vampire|3|3|Flying, deathtouch$Hexproof|
Niv-Mizzet, Parun|Guilds of Ravnica|192|R|{U}{U}{U}{R}{R}{R}|Legendary Creature - Dragon Wizard|5|5|This spell can't be countered.$Flying$Whenever you draw a card, Niv-Mizzet, Parun deals 1 damage to any target.$Whenever a player casts an instant or sorcery spell, you draw a card.|
@@ -34422,6 +34501,7 @@ Sumala Woodshaper|Guilds of Ravnica|200|C|{2}{G}{W}|Creature - Elf Druid|2|1|Whe
Swarm Guildmage|Guilds of Ravnica|201|U|{B}{G}|Creature - Elf Shaman|2|2|{4}{B}, {T}: Creatures you control get +1/+0 and gain menace until end of turn.${1}{G}, {T}: You gain 2 life.|
Swathcutter Giant|Guilds of Ravnica|202|U|{4}{R}{W}|Creature - Giant Soldier|5|5|Vigilance$Whenever Swathcutter Giant attacks, it deals 1 damage to each creature defending player controls.|
Swiftblade Vindicator|Guilds of Ravnica|203|R|{R}{W}|Creature - Human Soldier|1|1|Double strike, vigilance, trample|
+Tajic, Legion's Edge|Guilds of Ravnica|204|R|{1}{R}{W}|Legendary Creature - Human Soldier|3|2|Haste$Mentor$Prevent all noncombat damage that would be dealt to other creatures you control.${R}{W}: Tajic, Legion's Edge gains first strike until end of turn.|
Thief of Sanity|Guilds of Ravnica|205|R|{1}{U}{B}|Creature - Specter|2|2|Flying$Whenever Thief of Sanity deals combat damage to a player, look at the top three cards of that player's library, exile one of them face down, then put the rest into their graveyard. For as long as that card remains exiled, you may look at it, you may cast it, and you may spend mana as though it were mana of any type to cast it.|
Thought Erasure|Guilds of Ravnica|206|U|{U}{B}|Sorcery|||Target opponent reveals their hand. You choose a nonland card from it. That player discards that card.$Surveil 1.|
Thousand-Year Storm|Guilds of Ravnica|207|M|{4}{U}{R}|Enchantment|||Whenever you cast an instant or sorcery spell, copy it for each other instant and sorcery spell you've cast before it this turn. You may choose new targets for the copies.|
@@ -34435,6 +34515,8 @@ Wee Dragonauts|Guilds of Ravnica|214|U|{1}{U}{R}|Creature - Faerie Wizard|1|3|Fl
Worldsoul Colossus|Guilds of Ravnica|215|U|{X}{G}{W}|Creature - Elemental|0|0|Convoke$Worldsoul Colossus enters the battlefield with X +1/+1 counters on it.|
Fresh-Faced Recruit|Guilds of Ravnica|216|C|{1}{R/W}|Creature - Human Soldier|2|1|As long as it's your turn, Fresh-Faced Recruit has first strike.|
Piston-Fist Cyclops|Guilds of Ravnica|217|C|{1}{U/R}{U/R}|Creature - Cyclops|4|3|Defender$As long as you've cast an instant or sorcery spell this turn, Piston-Fist Cyclops can attack as though it didn't have defender.|
+Pitiless Gorgon|Guilds of Ravnica|218|C|{1}{B/G}{B/G}|Creature - Gorgon|2|2|Deathtouch|
+Vernadi Shieldmate|Guilds of Ravnica|219|C|{1}{G/W}|Creature - Human Soldier|2|2|Vigilance|
Whisper Agent|Guilds of Ravnica|220|C|{1}{U/B}{U/B}|Creature - Human Rogue|3|2|Flash$When Whisper Agent enters the battlefield, surveil 1.|
Assemble|Guilds of Ravnica|221|R|{4}{G}{W}|Instant|||Create three 2/2 green and white Elf Knight creature tokens with vigilance.|
Assure|Guilds of Ravnica|221|R|{G/W}{G/W}|Instant|||Put a +1/+1 counter on target creature. It gains indestructible until end of turn.|
@@ -34446,6 +34528,8 @@ Expansion|Guilds of Ravnica|224|R|{U/R}{U/R}|Instant|||Copy target instant or so
Explosion|Guilds of Ravnica|224|R|{X}{U}{U}{R}{R}|Instant|||Explosion deals X damage to any target. Target player draws X cards.|
Finality|Guilds of Ravnica|225|R|{4}{B}{G}|Sorcery|||You may put two +1/+1 counters on a creature you control. Then all creatures get -4/-4 until end of turn.|
Find|Guilds of Ravnica|225|R|{B/G}{B/G}|Sorcery|||Return up to two target creature cards from your graveyard to your hand.|
+Flourish|Guilds of Ravnica|226|U|{4}{G}{W}|Sorcery|||Creatures you control get +2/+2 until end of turn.|
+Flower|Guilds of Ravnica|226|U|{G/W}|Sorcery|||Search your library for a basic Forest or Plains card, reveal it, put it into your hand, then shuffle your library.|
Integrity|Guilds of Ravnica|227|U|{R/W}|Instant|||Target creature gets +2/+2 until end of turn.|
Intervention|Guilds of Ravnica|227|U|{2}{R}{W}|Instant|||Intervention deals 3 damage to any target and you gain 3 life.|
Invent|Guilds of Ravnica|228|U|{4}{U}{R}|Instant|||Search your library for an instant card and/or a sorcery card, reveal them, put them into your hand, then shuffle your library.|
@@ -34455,12 +34539,16 @@ Resurgence|Guilds of Ravnica|229|R|{3}{R}{W}|Sorcery|||Creatures you control gai
Statue|Guilds of Ravnica|230|U|{2}{B}{G}|Instant|||Destroy target artifact, creature, or enchantment.|
Status|Guilds of Ravnica|230|U|{B/G}|Instant|||Target creature gets +1/+1 and gains deathtouch until end of turn.|
Boros Locket|Guilds of Ravnica|231|C|{3}|Artifact|||{T}: Add {R} or {W}.${R/W}{R/W}{R/W}{R/W}, {T}, Sacrifice Boros Locket: Draw two cards.|
+Chamber Sentry|Guilds of Ravnica|232|R|{X}|Artifact Creature - Construct|0|0|Chamber Sentry enters the battlefield with a +1/+1 counter on it for each color of mana spent to cast it.${X}, {T}, Remove X +1/+1 counters from Chamber Sentry: It deals X damage to any target.${W}{U}{B}{R}{G}: Return Chamber Sentry from your graveyard to your hand.|
Chromatic Lantern|Guilds of Ravnica|233|R|{3}|Artifact|||Lands you control have "{T}: Add one mana of any color."${T}: Add one mana of any color.|
Dimir Locket|Guilds of Ravnica|234|C|{3}|Artifact|||{T}: Add {U} or {B}.${U/B}{U/B}{U/B}{U/B}, {T}, Sacrifice Dimir Locket: Draw two cards.|
+Gatekeeper Gargoyle|Guilds of Ravnica|235|U|{6}|Artifact Creature - Gargoyle|3|3|Flying$Gargoyle Guardian enters the battlefield with a +1/+1 counter on it for each Gate you control.|
Glaive of the Guildpact|Guilds of Ravnica|236|U|{2}|Artifact - Equipment|||Equipped creature gets +1/+0 for each Gate you control and has vigilance and menace.$Equip {3}|
Golgari Locket|Guilds of Ravnica|237|C|{3}|Artifact|||{T}: Add {B} or {G}.${B/G}{B/G}{B/G}{B/G}, {T}, Sacrifice Golgari Locket: Draw two cards.|
Izzet Locket|Guilds of Ravnica|238|C|{3}|Artifact|||{T}: Add {U} or {R}.${U/R}{U/R}{U/R}{U/R}, {T}, Sacrifice Izzet Locket: Draw two cards.|
+Rampaging Monument|Guilds of Ravnica|239|U|{4}|Artifact Creature - Cleric|0|0|Trample$Rampaging Monument enters the battlefield with three +1/+1 counters on it.$Whenever you cast a multicolored spell, put a +1/+1 counter on Rampaging Monument.|
Selesnya Locket|Guilds of Ravnica|240|C|{3}|Artifact|||{T}: Add {G} or {W}.${G/W}{G/W}{G/W}{G/W}, {T}, Sacrifice Selesnya Locket: Draw two cards.|
+Silent Dart|Guilds of Ravnica|241|U|{1}|Artifact|||{4}, {T}, Sacrifice Silent Dart: It deals 3 damage to target creature.|
Wand of Vertebrae|Guilds of Ravnica|242|U|{1}|Artifact|||{T}: Put the top card of your library into your graveyard.${2}, {T}, Exile Wand of Vertebrae: Shuffle up to five target cards from your graveyard into your library.|
Boros Guildgate|Guilds of Ravnica|243|C||Land - Gate|||Boros Guildgate enters the battlefield tapped.${T}: Add {R} or {W}.|
Dimir Guildgate|Guilds of Ravnica|245|C||Land - Gate|||Dimir Guildgate enters the battlefield tapped.${T}: Add {U} or {B}.|