mirror of
https://github.com/correl/mage.git
synced 2024-12-24 11:50:45 +00:00
[DMU] Implemented all currently previewed cards (#9304)
This commit is contained in:
parent
d392cfba0b
commit
6cfefeea95
13 changed files with 630 additions and 0 deletions
|
@ -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
|
||||
}
|
||||
};
|
||||
|
|
127
Mage.Sets/src/mage/cards/e/EvolvedSleeper.java
Normal file
127
Mage.Sets/src/mage/cards/e/EvolvedSleeper.java
Normal 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;
|
||||
}
|
||||
}
|
149
Mage.Sets/src/mage/cards/j/JayaFieryNegotiator.java
Normal file
149
Mage.Sets/src/mage/cards/j/JayaFieryNegotiator.java
Normal 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.";
|
||||
}
|
||||
}
|
55
Mage.Sets/src/mage/cards/l/LlanowarLoamspeaker.java
Normal file
55
Mage.Sets/src/mage/cards/l/LlanowarLoamspeaker.java
Normal 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);
|
||||
}
|
||||
}
|
47
Mage.Sets/src/mage/cards/s/ShivanDevastator.java
Normal file
47
Mage.Sets/src/mage/cards/s/ShivanDevastator.java
Normal 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);
|
||||
}
|
||||
}
|
71
Mage.Sets/src/mage/cards/t/TemporalFirestorm.java
Normal file
71
Mage.Sets/src/mage/cards/t/TemporalFirestorm.java
Normal 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));
|
||||
}
|
||||
}
|
||||
}
|
46
Mage.Sets/src/mage/sets/DominariaUnited.java
Normal file
46
Mage.Sets/src/mage/sets/DominariaUnited.java
Normal 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();
|
||||
// }
|
||||
}
|
21
Mage.Sets/src/mage/sets/DominariaUnitedCommander.java
Normal file
21
Mage.Sets/src/mage/sets/DominariaUnitedCommander.java
Normal 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;
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
|
@ -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|
|
||||
|
|
|
@ -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.|
|
||||
|
|
|
@ -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|
|
||||
|
|
Loading…
Reference in a new issue