[DMU] Implemented all currently previewed cards (#9304)

This commit is contained in:
Evan Kranzler 2022-08-14 21:02:16 -04:00 committed by GitHub
parent d392cfba0b
commit 6cfefeea95
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
13 changed files with 630 additions and 0 deletions

View file

@ -512,6 +512,8 @@ public class ScryfallImageSupportCards {
add("SLX"); // Universes Within
add("CLB"); // Commander Legends: Battle for Baldur's Gate
add("2X2"); // Double Masters 2022
add("DMU"); // Dominaria United
add("DMC"); // Dominaria United Commander
add("40K"); // Warhammer 40,000
}
};

View file

@ -0,0 +1,127 @@
package mage.cards.e;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.continuous.AddCardSubTypeSourceEffect;
import mage.abilities.effects.common.continuous.SetPowerToughnessSourceEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.*;
import mage.counters.CounterType;
import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.players.Player;
import java.util.UUID;
/**
* @author TheElk801
*/
public final class EvolvedSleeper extends CardImpl {
public EvolvedSleeper(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{B}");
this.subtype.add(SubType.HUMAN);
this.power = new MageInt(1);
this.toughness = new MageInt(1);
// {B}: Evolved Sleeper becomes a Human Cleric with base power and toughness 2/2.
Ability ability = new SimpleActivatedAbility(new AddCardSubTypeSourceEffect(
Duration.Custom, SubType.HUMAN, SubType.CLERIC
).setText("{this} becomes a Human Cleric"), new ManaCostsImpl<>("{B}"));
ability.addEffect(new SetPowerToughnessSourceEffect(
2, 2, Duration.Custom, SubLayer.SetPT_7b
).setText("with base power and toughness 2/2"));
this.addAbility(ability);
// {1}{B}: If Evolved Sleeper is a Cleric, put a deathtouch counter on it and it becomes a Phyrexian Human Cleric with base power and toughness 3/3.
this.addAbility(new SimpleActivatedAbility(
new EvolvedSleeperClericEffect(), new ManaCostsImpl<>("{1}{B}")
));
// {1}{B}{B}: If Evolved Sleeper is a Phyrexian, put a +1/+1 counter on it, then you draw a card and you lose 1 life.
this.addAbility(new SimpleActivatedAbility(
new EvolvedSleeperPhyrexianEffect(), new ManaCostsImpl<>("{1}{B}{B}")
));
}
private EvolvedSleeper(final EvolvedSleeper card) {
super(card);
}
@Override
public EvolvedSleeper copy() {
return new EvolvedSleeper(this);
}
}
class EvolvedSleeperClericEffect extends OneShotEffect {
EvolvedSleeperClericEffect() {
super(Outcome.Benefit);
staticText = "if {this} is a Cleric, put a deathtouch counter on it " +
"and it becomes a Phyrexian Human Cleric with base power and toughness 3/3";
}
private EvolvedSleeperClericEffect(final EvolvedSleeperClericEffect effect) {
super(effect);
}
@Override
public EvolvedSleeperClericEffect copy() {
return new EvolvedSleeperClericEffect(this);
}
@Override
public boolean apply(Game game, Ability source) {
Permanent permanent = source.getSourcePermanentIfItStillExists(game);
if (permanent == null || !permanent.hasSubtype(SubType.CLERIC, game)) {
return false;
}
permanent.addCounters(CounterType.DEATHTOUCH.createInstance(), source.getControllerId(), source, game);
game.addEffect(new AddCardSubTypeSourceEffect(
Duration.Custom, SubType.PHYREXIAN, SubType.HUMAN, SubType.CLERIC
), source);
game.addEffect(new SetPowerToughnessSourceEffect(
3, 3, Duration.Custom, SubLayer.SetPT_7b
), source);
return true;
}
}
class EvolvedSleeperPhyrexianEffect extends OneShotEffect {
EvolvedSleeperPhyrexianEffect() {
super(Outcome.Benefit);
staticText = "if {this} is a Phyrexian, put a +1/+1 counter on it, then you draw a card and you lose 1 life";
}
private EvolvedSleeperPhyrexianEffect(final EvolvedSleeperPhyrexianEffect effect) {
super(effect);
}
@Override
public EvolvedSleeperPhyrexianEffect copy() {
return new EvolvedSleeperPhyrexianEffect(this);
}
@Override
public boolean apply(Game game, Ability source) {
Permanent permanent = source.getSourcePermanentOrLKI(game);
if (permanent == null || !permanent.hasSubtype(SubType.PHYREXIAN, game)) {
return false;
}
if (source.getSourcePermanentIfItStillExists(game) != null) {
permanent.addCounters(CounterType.P1P1.createInstance(), source.getControllerId(), source, game);
}
Player player = game.getPlayer(source.getControllerId());
game.applyEffects();
player.drawCards(1, source, game);
player.loseLife(1, game, source, false);
return true;
}
}

View file

@ -0,0 +1,149 @@
package mage.cards.j;
import mage.abilities.Ability;
import mage.abilities.DelayedTriggeredAbility;
import mage.abilities.LoyaltyAbility;
import mage.abilities.dynamicvalue.DynamicValue;
import mage.abilities.dynamicvalue.common.AttackingCreatureCount;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.CreateDelayedTriggeredAbilityEffect;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.DamageTargetEffect;
import mage.abilities.effects.common.GetEmblemEffect;
import mage.cards.*;
import mage.constants.*;
import mage.game.Controllable;
import mage.game.Game;
import mage.game.command.emblems.JayaFieryNegotiatorEmblem;
import mage.game.events.GameEvent;
import mage.game.permanent.token.MonkRedToken;
import mage.players.Player;
import mage.target.common.TargetOpponentsCreaturePermanent;
import mage.util.CardUtil;
import java.util.Iterator;
import java.util.Objects;
import java.util.UUID;
/**
* @author TheElk801
*/
public final class JayaFieryNegotiator extends CardImpl {
public JayaFieryNegotiator(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{2}{R}{R}");
this.addSuperType(SuperType.LEGENDARY);
this.subtype.add(SubType.JAYA);
this.setStartingLoyalty(4);
// +1: Create a 1/1 red Monk creature token with prowess.
this.addAbility(new LoyaltyAbility(new CreateTokenEffect(new MonkRedToken()), 1));
// 1: Exile the top two cards of your library. Choose one of them. You may play that card this turn.
this.addAbility(new LoyaltyAbility(new JayaFieryNegotiatorExileEffect(), -1));
// 2: Choose target creature an opponent controls. Whenever you attack this turn, Jaya, Fiery Negotiator deals damage equal to the number of attacking creatures to that creature.
Ability ability = new LoyaltyAbility(new CreateDelayedTriggeredAbilityEffect(
new JayaFieryNegotiatorTriggeredAbility()
).setText("choose target creature an opponent controls. Whenever you attack this turn, " +
"{this} deals damage equal to the number of attacking creatures to that creature"), -2);
ability.addTarget(new TargetOpponentsCreaturePermanent());
this.addAbility(ability);
// 8: You get an emblem with "Whenever you cast a red instant or sorcery spell, copy it twice. You may choose new targets for the copies."
this.addAbility(new LoyaltyAbility(new GetEmblemEffect(new JayaFieryNegotiatorEmblem()), -8));
}
private JayaFieryNegotiator(final JayaFieryNegotiator card) {
super(card);
}
@Override
public JayaFieryNegotiator copy() {
return new JayaFieryNegotiator(this);
}
}
class JayaFieryNegotiatorExileEffect extends OneShotEffect {
JayaFieryNegotiatorExileEffect() {
super(Outcome.Benefit);
staticText = "exile the top two cards of your library. Choose one of them. You may play that card this turn";
}
private JayaFieryNegotiatorExileEffect(final JayaFieryNegotiatorExileEffect effect) {
super(effect);
}
@Override
public JayaFieryNegotiatorExileEffect copy() {
return new JayaFieryNegotiatorExileEffect(this);
}
@Override
public boolean apply(Game game, Ability source) {
Player player = game.getPlayer(source.getControllerId());
if (player == null) {
return false;
}
Cards cards = new CardsImpl(player.getLibrary().getTopCards(game, 2));
Card card;
if (cards.size() < 2) {
card = cards.getRandom(game);
} else {
Iterator<Card> iterator = cards.getCards(game).iterator();
Card card1 = iterator.next();
Card card2 = iterator.next();
card = player.chooseUse(
outcome, "Choose a card to play this turn", null,
card1.getName(), card2.getName(), source, game
) ? card1 : card2;
}
if (card != null) {
CardUtil.makeCardPlayable(game, source, card, Duration.EndOfTurn, false);
}
return true;
}
}
class JayaFieryNegotiatorTriggeredAbility extends DelayedTriggeredAbility {
private static final DynamicValue xValue = new AttackingCreatureCount();
JayaFieryNegotiatorTriggeredAbility() {
super(new DamageTargetEffect(xValue), Duration.EndOfTurn, false, false);
}
private JayaFieryNegotiatorTriggeredAbility(final JayaFieryNegotiatorTriggeredAbility ability) {
super(ability);
}
@Override
public JayaFieryNegotiatorTriggeredAbility copy() {
return new JayaFieryNegotiatorTriggeredAbility(this);
}
@Override
public boolean checkEventType(GameEvent event, Game game) {
return event.getType() == GameEvent.EventType.DECLARED_ATTACKERS;
}
@Override
public boolean checkTrigger(GameEvent event, Game game) {
return isControlledBy(game.getCombat().getAttackingPlayerId())
&& game
.getCombat()
.getAttackers()
.stream()
.map(game::getPermanent)
.filter(Objects::nonNull)
.map(Controllable::getControllerId)
.anyMatch(this::isControlledBy);
}
@Override
public String getRule() {
return "Whenever you attack this turn, {this} deals damage equal to the number of attacking creatures to that creature.";
}
}

View file

@ -0,0 +1,55 @@
package mage.cards.l;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.ActivateAsSorceryActivatedAbility;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.effects.common.continuous.BecomesCreatureTargetEffect;
import mage.abilities.keyword.HasteAbility;
import mage.abilities.mana.AnyColorManaAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.SubType;
import mage.filter.StaticFilters;
import mage.game.permanent.token.custom.CreatureToken;
import mage.target.TargetPermanent;
import java.util.UUID;
/**
* @author TheElk801
*/
public final class LlanowarLoamspeaker extends CardImpl {
public LlanowarLoamspeaker(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G}");
this.subtype.add(SubType.ELF);
this.subtype.add(SubType.DRUID);
this.power = new MageInt(1);
this.toughness = new MageInt(3);
// {T}: Add one mana of any color.
this.addAbility(new AnyColorManaAbility());
// {T}: Target land you control becomes a 3/3 Elemental creature with haste until end of turn. It's still a land. Activate only as as sorcery.
Ability ability = new ActivateAsSorceryActivatedAbility(new BecomesCreatureTargetEffect(
new CreatureToken(
3, 3, "3/3 Elemental creature with haste", SubType.ELEMENTAL
).withAbility(HasteAbility.getInstance()), false, true, Duration.EndOfTurn
), new TapSourceCost());
ability.addTarget(new TargetPermanent(StaticFilters.FILTER_CONTROLLED_PERMANENT_LAND));
this.addAbility(ability);
}
private LlanowarLoamspeaker(final LlanowarLoamspeaker card) {
super(card);
}
@Override
public LlanowarLoamspeaker copy() {
return new LlanowarLoamspeaker(this);
}
}

View file

@ -0,0 +1,47 @@
package mage.cards.s;
import mage.MageInt;
import mage.abilities.common.EntersBattlefieldAbility;
import mage.abilities.effects.common.EntersBattlefieldWithXCountersEffect;
import mage.abilities.keyword.FlyingAbility;
import mage.abilities.keyword.HasteAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.counters.CounterType;
import java.util.UUID;
/**
* @author TheElk801
*/
public final class ShivanDevastator extends CardImpl {
public ShivanDevastator(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{X}{R}");
this.subtype.add(SubType.DRAGON);
this.subtype.add(SubType.HYDRA);
this.power = new MageInt(0);
this.toughness = new MageInt(0);
// Flying
this.addAbility(FlyingAbility.getInstance());
// Haste
this.addAbility(HasteAbility.getInstance());
// Shivan Devastator enters the battlefield with X +1/+1 counters on it.
this.addAbility(new EntersBattlefieldAbility(new EntersBattlefieldWithXCountersEffect(CounterType.P1P1.createInstance())));
}
private ShivanDevastator(final ShivanDevastator card) {
super(card);
}
@Override
public ShivanDevastator copy() {
return new ShivanDevastator(this);
}
}

View file

@ -0,0 +1,71 @@
package mage.cards.t;
import mage.abilities.Ability;
import mage.abilities.dynamicvalue.common.MultikickerCount;
import mage.abilities.effects.common.DamageAllEffect;
import mage.abilities.effects.common.PhaseOutTargetEffect;
import mage.abilities.keyword.KickerAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.TargetController;
import mage.filter.FilterPermanent;
import mage.filter.StaticFilters;
import mage.filter.common.FilterCreatureOrPlaneswalkerPermanent;
import mage.game.Game;
import mage.target.TargetPermanent;
import mage.target.targetadjustment.TargetAdjuster;
import java.util.UUID;
/**
* @author TheElk801
*/
public final class TemporalFirestorm extends CardImpl {
public TemporalFirestorm(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{3}{R}{R}");
// Kicker {1}{W} and/or {1}{U}
KickerAbility kickerAbility = new KickerAbility("{1}{W}");
kickerAbility.addKickerCost("{1}{U}");
this.addAbility(kickerAbility);
// Choose up to X creatures and/or planeswalkers you control, where X is the number of times this spell was kicked. Those permanents phase out.
this.getSpellAbility().addEffect(new PhaseOutTargetEffect().setText("choose up to X creatures and/or " +
"planeswalkers you control, where X is the number of times this spell was kicked. Those permanents phase out"));
this.getSpellAbility().setTargetAdjuster(TemporalFirestormAdjuster.instance);
// Temporal Firestorm deals 5 damage to each creature and each planeswalker.
this.getSpellAbility().addEffect(new DamageAllEffect(
5, StaticFilters.FILTER_PERMANENT_CREATURE_OR_PLANESWALKER
).setText("{this} deals 5 damage to each creature and each planeswalker"));
}
private TemporalFirestorm(final TemporalFirestorm card) {
super(card);
}
@Override
public TemporalFirestorm copy() {
return new TemporalFirestorm(this);
}
}
enum TemporalFirestormAdjuster implements TargetAdjuster {
instance;
private static final FilterPermanent filter = new FilterCreatureOrPlaneswalkerPermanent("creatures and/or planeswalkers you control");
static {
filter.add(TargetController.YOU.getControllerPredicate());
}
@Override
public void adjustTargets(Ability ability, Game game) {
int kickedCount = MultikickerCount.instance.calculate(game, ability, null);
if (kickedCount > 0) {
ability.getTargets().clear();
ability.addTarget(new TargetPermanent(0, kickedCount, filter));
}
}
}

View file

@ -0,0 +1,46 @@
package mage.sets;
import mage.cards.ExpansionSet;
import mage.constants.Rarity;
import mage.constants.SetType;
/**
* @author TheElk801
*/
public final class DominariaUnited extends ExpansionSet {
private static final DominariaUnited instance = new DominariaUnited();
public static DominariaUnited getInstance() {
return instance;
}
private DominariaUnited() {
super("Dominaria United", "DMU", ExpansionSet.buildDate(2022, 11, 9), SetType.EXPANSION);
this.blockName = "Dominaria United";
this.hasBoosters = false; // temporary
this.hasBasicLands = true;
this.numBoosterLands = 1;
this.numBoosterCommon = 10;
this.numBoosterUncommon = 3;
this.numBoosterRare = 1;
this.ratioBoosterMythic = 7;
this.maxCardNumberInBooster = 281;
cards.add(new SetCardInfo("Evolved Sleeper", 93, Rarity.RARE, mage.cards.e.EvolvedSleeper.class));
cards.add(new SetCardInfo("Forest", 281, Rarity.LAND, mage.cards.basiclands.Forest.class, FULL_ART_BFZ_VARIOUS));
cards.add(new SetCardInfo("Island", 278, Rarity.LAND, mage.cards.basiclands.Island.class, FULL_ART_BFZ_VARIOUS));
cards.add(new SetCardInfo("Jaya, Fiery Negotiator", 133, Rarity.MYTHIC, mage.cards.j.JayaFieryNegotiator.class));
cards.add(new SetCardInfo("Llanowar Loamspeaker", 170, Rarity.RARE, mage.cards.l.LlanowarLoamspeaker.class));
cards.add(new SetCardInfo("Mountain", 280, Rarity.LAND, mage.cards.basiclands.Mountain.class, FULL_ART_BFZ_VARIOUS));
cards.add(new SetCardInfo("Plains", 277, Rarity.LAND, mage.cards.basiclands.Plains.class, FULL_ART_BFZ_VARIOUS));
cards.add(new SetCardInfo("Shivan Devastator", 143, Rarity.MYTHIC, mage.cards.s.ShivanDevastator.class));
cards.add(new SetCardInfo("Swamp", 279, Rarity.LAND, mage.cards.basiclands.Swamp.class, FULL_ART_BFZ_VARIOUS));
cards.add(new SetCardInfo("Temporal Firestorm", 147, Rarity.RARE, mage.cards.t.TemporalFirestorm.class));
}
// @Override
// public BoosterCollator createCollator() {
// return new DominariaUnitedCollator();
// }
}

View file

@ -0,0 +1,21 @@
package mage.sets;
import mage.cards.ExpansionSet;
import mage.constants.SetType;
/**
* @author TheElk801
*/
public final class DominariaUnitedCommander extends ExpansionSet {
private static final DominariaUnitedCommander instance = new DominariaUnitedCommander();
public static DominariaUnitedCommander getInstance() {
return instance;
}
private DominariaUnitedCommander() {
super("Dominaria United Commander", "DMC", ExpansionSet.buildDate(2022, 11, 9), SetType.SUPPLEMENTAL);
this.hasBasicLands = false;
}
}

View file

@ -0,0 +1,61 @@
package mage.game.command.emblems;
import mage.ObjectColor;
import mage.abilities.Ability;
import mage.abilities.common.SpellCastControllerTriggeredAbility;
import mage.abilities.effects.OneShotEffect;
import mage.constants.Outcome;
import mage.filter.FilterSpell;
import mage.filter.common.FilterInstantOrSorcerySpell;
import mage.filter.predicate.mageobject.ColorPredicate;
import mage.game.Game;
import mage.game.command.Emblem;
import mage.game.stack.Spell;
/**
* @author TheElk801
*/
public final class JayaFieryNegotiatorEmblem extends Emblem {
private static final FilterSpell filter = new FilterInstantOrSorcerySpell("a red instant or sorcery spell");
static {
filter.add(new ColorPredicate(ObjectColor.RED));
}
// 8: You get an emblem with "Whenever you cast a red instant or sorcery spell, copy it twice. You may choose new targets for the copies."
public JayaFieryNegotiatorEmblem() {
this.setName("Emblem Jaya");
this.setExpansionSetCodeForImage("DMU");
this.getAbilities().add(new SpellCastControllerTriggeredAbility(
new JayaFieryNegotiatorEmblemEffect(), filter, false
));
}
}
class JayaFieryNegotiatorEmblemEffect extends OneShotEffect {
JayaFieryNegotiatorEmblemEffect() {
super(Outcome.Benefit);
staticText = "copy it twice. You may choose new targets for the copies";
}
private JayaFieryNegotiatorEmblemEffect(final JayaFieryNegotiatorEmblemEffect effect) {
super(effect);
}
@Override
public JayaFieryNegotiatorEmblemEffect copy() {
return new JayaFieryNegotiatorEmblemEffect(this);
}
@Override
public boolean apply(Game game, Ability source) {
Spell spell = (Spell) getValue("spellCast");
if (spell == null) {
return false;
}
spell.createCopyOnStack(game, source, source.getControllerId(), true, 2);
return true;
}
}

View file

@ -0,0 +1,34 @@
package mage.game.permanent.token;
import mage.MageInt;
import mage.abilities.keyword.ProwessAbility;
import mage.constants.CardType;
import mage.constants.SubType;
import java.util.Arrays;
/**
* @author TheElk801
*/
public final class MonkRedToken extends TokenImpl {
public MonkRedToken() {
super("Monk Token", "1/1 red Monk creature token with prowess");
cardType.add(CardType.CREATURE);
color.setRed(true);
subtype.add(SubType.MONK);
power = new MageInt(1);
toughness = new MageInt(1);
addAbility(new ProwessAbility());
availableImageSetCodes = Arrays.asList("DMU");
}
public MonkRedToken(final MonkRedToken token) {
super(token);
}
public MonkRedToken copy() {
return new MonkRedToken(this);
}
}

View file

@ -46,6 +46,8 @@ Dark Ascension|DarkAscension|
Darksteel|Darksteel|
Dissension|Dissension|
Dominaria|Dominaria|
Dominaria United|DominariaUnited|
Dominaria United Commander|DominariaUnitedCommander|
Dragon's Maze|DragonsMaze|
Dragons of Tarkir|DragonsOfTarkir|
Duel Decks: Ajani vs. Nicol Bolas|DuelDecksAjaniVsNicolBolas|

View file

@ -45225,3 +45225,16 @@ Vanguard Suppressor|Warhammer 40,000|27|R|{3}{U}|Creature - Astartes Warrior|3|2
Blood for the Blood God!|Warhammer 40,000|108|C|{8}{B}{B}{R}|Instant|||This spell costs {1} less to cast for each creature that died this turn.$Discard your hand, then draw eight cards. Blood for the Blood God! deals 8 damage to each opponent. Exile Blood for the Blood God!.|
Abaddon the Despoiler|Warhammer 40,000|171|M|{2}{U}{B}{R}|Legendary Creature - Astartes Warrior|5|5|Trample$Mark of the Chaos Ascendant — During your turn, spells you cast from your hand with mana value X or less have cascade, where X is the total amount of life your opponents have lost this turn.|
Fabricate|Warhammer 40,000|181|R|{2}{U}|Sorcery|||Search your library for an artifact card, reveal it, put it into your hand, then shuffle.|
Evolved Sleeper|Dominaria United|93|R|{B}|Creature - Human|1|1|{B}: Evolved Sleeper becomes a Human Cleric with base power and toughness 2/2.${1}{B}: If Evolved Sleeper is a Cleric, put a deathtouch counter on it and it becomes a Phyrexian Human Cleric with base power and toughness 3/3.${1}{B}{B}: If Evolved Sleeper is a Phyrexian, put a +1/+1 counter on it, then you draw a card and you lose 1 life.|
Jaya, Fiery Negotiator|Dominaria United|133|M|{2}{R}{R}|Legendary Planeswalker - Jaya|4|+1: Create a 1/1 red Monk creature token with prowess.$1: Exile the top two cards of your library. Choose one of them. You may play that card this turn.$2: Choose target creature an opponent controls. Whenever you attack this turn, Jaya, Fiery Negotiator deals damage equal to the number of attacking creatures to that creature.$8: You get an emblem with "Whenever you cast a red instant or sorcery spell, copy it twice. You may choose new targets for the copies."|
Shivan Devastator|Dominaria United|143|M|{X}{R}|Creature - Dragon Hydra|0|0|Flying, haste$Shivan Devastator enters the battlefield with X +1/+1 counters on it.|
Temporal Firestorm|Dominaria United|147|R|{3}{R}{R}|Sorcery|||Kicker {1}{W} and/or {1}{U}$Choose up to X creatures and/or planeswalkers you control, where X is the number of times this spell was kicked. Those permanents phase out.$Temporal Firestorm deals 5 damage to each creature and each planeswalker.|
Llanowar Loamspeaker|Dominaria United|170|R|{1}{G}|Creature - Elf Druid|1|3|{T}: Add one mana of any color.${T}: Target land you control becomes a 3/3 Elemental creature with haste until end of turn. It's still a land. Activate only as as sorcery.|
Plains|Dominaria United|277|C||Basic Land - Plains|||({T}: Add {W}.)|
Island|Dominaria United|278|C||Basic Land - Island|||({T}: Add {U}.)|
Swamp|Dominaria United|279|C||Basic Land - Swamp|||({T}: Add {B}.)|
Mountain|Dominaria United|280|C||Basic Land - Mountain|||({T}: Add {R}.)|
Forest|Dominaria United|281|C||Basic Land - Forest|||({T}: Add {G}.)|
Jasmine Boreal of the Seven|Dominaria United Commander|33|U|{1}{G}{W}|Legendary Creature - Human Druid|2|4|{T}: Add {G}{W}. Spend this mana only to cast creature spells with no abilities.$Creatures you control with no abilities can't be blocked by creatures with abilities.|
Ramirez DePietro, Pillager|Dominaria United Commander|38|U|{2}{U}{B}|Legendary Creature - Human Pirate|4|3|When Ramirez DePietro, Pillager enters the battlefield, you lose 2 life and create two Treasure tokens.$Whenever one or more Pirates you control deal combat damage to a player, exile the top card of that player's library. You may cast that card for as long as it remains exiled.|
Tor Wauki the Younger|Dominaria United Commander|46|U|{3}{B}{R}|Legendary Creature - Human Archer|3|3|Reach, lifelink$If another source you control would deal noncombat damage to a permanent or player, it deals that much damage plus 1 to that permanent or player instead.$Whenever you cast an instant or sorcery spell, Tor Wauki the Younger deals 2 damage to any target.|

View file

@ -81,6 +81,8 @@ Dissension|DIS|
Dark Ascension|DKA|
Deckmasters|DKM|
Dominaria|DOM|
Dominaria United|DMU|
Dominaria United Commander|DMC|
From the Vault: Dragons|DRB|
The Dark|DRK|
Darksteel|DST|