mirror of
https://github.com/correl/mage.git
synced 2025-01-12 03:00:13 +00:00
Improved interactions between pay X and other effects;
This commit is contained in:
commit
bb1c9c072c
20 changed files with 1051 additions and 2 deletions
84
Mage.Sets/src/mage/cards/c/CeruleanDrake.java
Normal file
84
Mage.Sets/src/mage/cards/c/CeruleanDrake.java
Normal file
|
@ -0,0 +1,84 @@
|
|||
package mage.cards.c;
|
||||
|
||||
import mage.MageInt;
|
||||
import mage.ObjectColor;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.costs.common.SacrificeSourceCost;
|
||||
import mage.abilities.effects.common.CounterTargetEffect;
|
||||
import mage.abilities.keyword.FlyingAbility;
|
||||
import mage.abilities.keyword.ProtectionAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.filter.FilterSpell;
|
||||
import mage.filter.predicate.ObjectPlayer;
|
||||
import mage.filter.predicate.ObjectPlayerPredicate;
|
||||
import mage.game.Game;
|
||||
import mage.game.stack.StackObject;
|
||||
import mage.target.TargetSpell;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class CeruleanDrake extends CardImpl {
|
||||
|
||||
private static final FilterSpell filter = new FilterSpell("spell that targets you");
|
||||
|
||||
static {
|
||||
filter.add(CeruleanDrakePredicate.instance);
|
||||
}
|
||||
|
||||
public CeruleanDrake(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}");
|
||||
|
||||
this.subtype.add(SubType.DRAKE);
|
||||
this.power = new MageInt(1);
|
||||
this.toughness = new MageInt(1);
|
||||
|
||||
// Flying
|
||||
this.addAbility(FlyingAbility.getInstance());
|
||||
|
||||
// Protection from red
|
||||
this.addAbility(ProtectionAbility.from(ObjectColor.RED));
|
||||
|
||||
// Sacrifice Cerulean Drake: Counter target spell that targets you.
|
||||
Ability ability = new SimpleActivatedAbility(new CounterTargetEffect(), new SacrificeSourceCost());
|
||||
ability.addTarget(new TargetSpell(filter));
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
private CeruleanDrake(final CeruleanDrake card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CeruleanDrake copy() {
|
||||
return new CeruleanDrake(this);
|
||||
}
|
||||
}
|
||||
|
||||
enum CeruleanDrakePredicate implements ObjectPlayerPredicate<ObjectPlayer<StackObject>> {
|
||||
instance;
|
||||
|
||||
@Override
|
||||
public boolean apply(ObjectPlayer<StackObject> input, Game game) {
|
||||
if (input.getPlayerId() == null) {
|
||||
return false;
|
||||
}
|
||||
return input
|
||||
.getObject()
|
||||
.getStackAbility()
|
||||
.getTargets()
|
||||
.stream()
|
||||
.anyMatch(
|
||||
target -> target
|
||||
.getTargets()
|
||||
.stream()
|
||||
.anyMatch(uuid -> uuid != null && uuid.equals(input.getPlayerId()))
|
||||
);
|
||||
}
|
||||
}
|
36
Mage.Sets/src/mage/cards/d/DrawnFromDreams.java
Normal file
36
Mage.Sets/src/mage/cards/d/DrawnFromDreams.java
Normal file
|
@ -0,0 +1,36 @@
|
|||
package mage.cards.d;
|
||||
|
||||
import mage.abilities.dynamicvalue.common.StaticValue;
|
||||
import mage.abilities.effects.common.LookLibraryAndPickControllerEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Zone;
|
||||
import mage.filter.StaticFilters;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class DrawnFromDreams extends CardImpl {
|
||||
|
||||
public DrawnFromDreams(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2}{U}{U}");
|
||||
|
||||
// Look at the top seven cards of your library. Put two of them into your hand and the rest on the bottom of your library in a random order.
|
||||
this.getSpellAbility().addEffect(new LookLibraryAndPickControllerEffect(
|
||||
new StaticValue(7), false, new StaticValue(2),
|
||||
StaticFilters.FILTER_CARD, Zone.LIBRARY, false, false
|
||||
).setBackInRandomOrder(true));
|
||||
}
|
||||
|
||||
private DrawnFromDreams(final DrawnFromDreams card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public DrawnFromDreams copy() {
|
||||
return new DrawnFromDreams(this);
|
||||
}
|
||||
}
|
67
Mage.Sets/src/mage/cards/e/ElvishReclaimer.java
Normal file
67
Mage.Sets/src/mage/cards/e/ElvishReclaimer.java
Normal file
|
@ -0,0 +1,67 @@
|
|||
package mage.cards.e;
|
||||
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.condition.Condition;
|
||||
import mage.abilities.condition.common.CardsInControllerGraveCondition;
|
||||
import mage.abilities.costs.common.SacrificeTargetCost;
|
||||
import mage.abilities.costs.common.TapSourceCost;
|
||||
import mage.abilities.costs.mana.GenericManaCost;
|
||||
import mage.abilities.decorator.ConditionalContinuousEffect;
|
||||
import mage.abilities.effects.common.continuous.BoostSourceEffect;
|
||||
import mage.abilities.effects.common.search.SearchLibraryPutInPlayEffect;
|
||||
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.target.common.TargetCardInLibrary;
|
||||
import mage.target.common.TargetControlledPermanent;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class ElvishReclaimer extends CardImpl {
|
||||
|
||||
private static final Condition condition
|
||||
= new CardsInControllerGraveCondition(3, StaticFilters.FILTER_CARD_LAND);
|
||||
|
||||
public ElvishReclaimer(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{G}");
|
||||
|
||||
this.subtype.add(SubType.ELF);
|
||||
this.subtype.add(SubType.WARRIOR);
|
||||
this.power = new MageInt(1);
|
||||
this.toughness = new MageInt(2);
|
||||
|
||||
// Elvish Reclaimer gets +2/+2 as long as there are three or more land cards in your graveyard.
|
||||
this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect(
|
||||
new BoostSourceEffect(2, 2, Duration.WhileOnBattlefield),
|
||||
condition, "{this} gets +2/+2 as long as there are three or more land cards in your graveyard."
|
||||
)));
|
||||
|
||||
// {2}, {T}, Sacrifice a land: Search your library for a land card, put it onto the battlefield tapped, then shuffle your library.
|
||||
Ability ability = new SimpleActivatedAbility(new SearchLibraryPutInPlayEffect(
|
||||
new TargetCardInLibrary(StaticFilters.FILTER_CARD_LAND_A), true
|
||||
), new GenericManaCost(2));
|
||||
ability.addCost(new TapSourceCost());
|
||||
ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent(
|
||||
StaticFilters.FILTER_CONTROLLED_LAND_SHORT_TEXT
|
||||
)));
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
private ElvishReclaimer(final ElvishReclaimer card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ElvishReclaimer copy() {
|
||||
return new ElvishReclaimer(this);
|
||||
}
|
||||
}
|
38
Mage.Sets/src/mage/cards/f/FerociousPup.java
Normal file
38
Mage.Sets/src/mage/cards/f/FerociousPup.java
Normal file
|
@ -0,0 +1,38 @@
|
|||
package mage.cards.f;
|
||||
|
||||
import mage.MageInt;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.effects.common.CreateTokenEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.game.permanent.token.WolfToken;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class FerociousPup extends CardImpl {
|
||||
|
||||
public FerociousPup(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}");
|
||||
|
||||
this.subtype.add(SubType.WOLF);
|
||||
this.power = new MageInt(0);
|
||||
this.toughness = new MageInt(1);
|
||||
|
||||
// When Ferocious Pup enters the battlefield, create a 2/2 green Wolf creature token.
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new CreateTokenEffect(new WolfToken())));
|
||||
}
|
||||
|
||||
private FerociousPup(final FerociousPup card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public FerociousPup copy() {
|
||||
return new FerociousPup(this);
|
||||
}
|
||||
}
|
61
Mage.Sets/src/mage/cards/h/HeraldOfTheSun.java
Normal file
61
Mage.Sets/src/mage/cards/h/HeraldOfTheSun.java
Normal file
|
@ -0,0 +1,61 @@
|
|||
package mage.cards.h;
|
||||
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.effects.common.counter.AddCountersTargetEffect;
|
||||
import mage.abilities.keyword.FlyingAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.counters.CounterType;
|
||||
import mage.filter.FilterPermanent;
|
||||
import mage.filter.common.FilterCreaturePermanent;
|
||||
import mage.filter.predicate.mageobject.AbilityPredicate;
|
||||
import mage.filter.predicate.permanent.AnotherPredicate;
|
||||
import mage.target.TargetPermanent;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class HeraldOfTheSun extends CardImpl {
|
||||
|
||||
private static final FilterPermanent filter
|
||||
= new FilterCreaturePermanent("another target creature with flying");
|
||||
|
||||
static {
|
||||
filter.add(new AbilityPredicate(FlyingAbility.class));
|
||||
filter.add(AnotherPredicate.instance);
|
||||
}
|
||||
|
||||
public HeraldOfTheSun(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{W}{W}");
|
||||
|
||||
this.subtype.add(SubType.ANGEL);
|
||||
this.power = new MageInt(4);
|
||||
this.toughness = new MageInt(4);
|
||||
|
||||
// Flying
|
||||
this.addAbility(FlyingAbility.getInstance());
|
||||
|
||||
// {3}{W}: Put a +1/+1 counter on another target creature with flying.
|
||||
Ability ability = new SimpleActivatedAbility(
|
||||
new AddCountersTargetEffect(CounterType.P1P1.createInstance()), new ManaCostsImpl("{3}{W}")
|
||||
);
|
||||
ability.addTarget(new TargetPermanent(filter));
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
private HeraldOfTheSun(final HeraldOfTheSun card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public HeraldOfTheSun copy() {
|
||||
return new HeraldOfTheSun(this);
|
||||
}
|
||||
}
|
57
Mage.Sets/src/mage/cards/l/LeylineOfAbundance.java
Normal file
57
Mage.Sets/src/mage/cards/l/LeylineOfAbundance.java
Normal file
|
@ -0,0 +1,57 @@
|
|||
package mage.cards.l;
|
||||
|
||||
import mage.Mana;
|
||||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.common.TapForManaAllTriggeredManaAbility;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.effects.common.ManaEffect;
|
||||
import mage.abilities.effects.common.counter.AddCountersAllEffect;
|
||||
import mage.abilities.effects.mana.BasicManaEffect;
|
||||
import mage.abilities.keyword.LeylineAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SetTargetPointer;
|
||||
import mage.counters.CounterType;
|
||||
import mage.filter.FilterPermanent;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.filter.common.FilterCreaturePermanent;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class LeylineOfAbundance extends CardImpl {
|
||||
|
||||
private static final FilterPermanent filter = new FilterCreaturePermanent("you tap a creature");
|
||||
|
||||
public LeylineOfAbundance(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{G}{G}");
|
||||
|
||||
// If Leyline of Abundance is in your opening hand, you may begin the game with it on the battlefield.
|
||||
this.addAbility(LeylineAbility.getInstance());
|
||||
|
||||
// Whenever you tap a creature for mana, add an additional {G}.
|
||||
this.addAbility(new TapForManaAllTriggeredManaAbility(
|
||||
(ManaEffect) new BasicManaEffect(Mana.GreenMana(1))
|
||||
.setText("add an additional {G}"),
|
||||
filter, SetTargetPointer.NONE
|
||||
));
|
||||
|
||||
// {6}{G}{G}: Put a +1/+1 counter on each creature you control.
|
||||
this.addAbility(new SimpleActivatedAbility(new AddCountersAllEffect(
|
||||
CounterType.P1P1.createInstance(),
|
||||
StaticFilters.FILTER_CONTROLLED_CREATURE
|
||||
), new ManaCostsImpl("{6}{G}{G}")));
|
||||
}
|
||||
|
||||
private LeylineOfAbundance(final LeylineOfAbundance card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public LeylineOfAbundance copy() {
|
||||
return new LeylineOfAbundance(this);
|
||||
}
|
||||
}
|
51
Mage.Sets/src/mage/cards/l/LotusField.java
Normal file
51
Mage.Sets/src/mage/cards/l/LotusField.java
Normal file
|
@ -0,0 +1,51 @@
|
|||
package mage.cards.l;
|
||||
|
||||
import mage.abilities.common.EntersBattlefieldTappedAbility;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.costs.common.TapSourceCost;
|
||||
import mage.abilities.effects.common.SacrificeControllerEffect;
|
||||
import mage.abilities.effects.mana.AddManaOfAnyColorEffect;
|
||||
import mage.abilities.keyword.HexproofAbility;
|
||||
import mage.abilities.mana.SimpleManaAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Zone;
|
||||
import mage.filter.StaticFilters;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class LotusField extends CardImpl {
|
||||
|
||||
public LotusField(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
|
||||
|
||||
// Hexproof
|
||||
this.addAbility(HexproofAbility.getInstance());
|
||||
|
||||
// Lotus Field enters the battlefield tapped.
|
||||
this.addAbility(new EntersBattlefieldTappedAbility());
|
||||
|
||||
// When Lotus Field enters the battlefield, sacrifice two lands.
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(
|
||||
new SacrificeControllerEffect(StaticFilters.FILTER_LAND, 2, "")
|
||||
));
|
||||
|
||||
// {T}: Add three mana of any color.
|
||||
this.addAbility(new SimpleManaAbility(
|
||||
Zone.BATTLEFIELD, new AddManaOfAnyColorEffect(3), new TapSourceCost()
|
||||
));
|
||||
}
|
||||
|
||||
private LotusField(final LotusField card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public LotusField copy() {
|
||||
return new LotusField(this);
|
||||
}
|
||||
}
|
56
Mage.Sets/src/mage/cards/m/ManifoldKey.java
Normal file
56
Mage.Sets/src/mage/cards/m/ManifoldKey.java
Normal file
|
@ -0,0 +1,56 @@
|
|||
package mage.cards.m;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.costs.common.TapSourceCost;
|
||||
import mage.abilities.costs.mana.GenericManaCost;
|
||||
import mage.abilities.effects.common.UntapTargetEffect;
|
||||
import mage.abilities.effects.common.combat.CantBeBlockedTargetEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.filter.FilterPermanent;
|
||||
import mage.filter.common.FilterArtifactPermanent;
|
||||
import mage.filter.predicate.permanent.AnotherPredicate;
|
||||
import mage.target.TargetPermanent;
|
||||
import mage.target.common.TargetCreaturePermanent;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class ManifoldKey extends CardImpl {
|
||||
|
||||
private static final FilterPermanent filter = new FilterArtifactPermanent("another target artifact");
|
||||
|
||||
static {
|
||||
filter.add(AnotherPredicate.instance);
|
||||
}
|
||||
|
||||
public ManifoldKey(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{1}");
|
||||
|
||||
// {1}, {T}: Untap another target artifact.
|
||||
Ability ability = new SimpleActivatedAbility(new UntapTargetEffect(), new GenericManaCost(1));
|
||||
ability.addCost(new TapSourceCost());
|
||||
ability.addTarget(new TargetPermanent(filter));
|
||||
this.addAbility(ability);
|
||||
|
||||
// {3}, {T}: Target creature can't be blocked this turn.
|
||||
ability = new SimpleActivatedAbility(new CantBeBlockedTargetEffect(Duration.EndOfTurn), new GenericManaCost(3));
|
||||
ability.addCost(new TapSourceCost());
|
||||
ability.addTarget(new TargetCreaturePermanent());
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
private ManifoldKey(final ManifoldKey card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ManifoldKey copy() {
|
||||
return new ManifoldKey(this);
|
||||
}
|
||||
}
|
60
Mage.Sets/src/mage/cards/m/MuYanlingSkyDancer.java
Normal file
60
Mage.Sets/src/mage/cards/m/MuYanlingSkyDancer.java
Normal file
|
@ -0,0 +1,60 @@
|
|||
package mage.cards.m;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.LoyaltyAbility;
|
||||
import mage.abilities.common.PlaneswalkerEntersWithLoyaltyCountersAbility;
|
||||
import mage.abilities.effects.common.CreateTokenEffect;
|
||||
import mage.abilities.effects.common.GetEmblemEffect;
|
||||
import mage.abilities.effects.common.continuous.BoostTargetEffect;
|
||||
import mage.abilities.effects.common.continuous.LoseAbilityTargetEffect;
|
||||
import mage.abilities.keyword.FlyingAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.SuperType;
|
||||
import mage.game.command.emblems.MuYanlingSkyDancerEmblem;
|
||||
import mage.game.permanent.token.MuYanlingSkyDancerToken;
|
||||
import mage.target.common.TargetCreaturePermanent;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class MuYanlingSkyDancer extends CardImpl {
|
||||
|
||||
public MuYanlingSkyDancer(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{1}{U}{U}");
|
||||
|
||||
this.addSuperType(SuperType.LEGENDARY);
|
||||
this.subtype.add(SubType.YANLING);
|
||||
this.addAbility(new PlaneswalkerEntersWithLoyaltyCountersAbility(2));
|
||||
|
||||
// +2: Until your next turn, up to one target creature gets -2/-0 and loses flying.
|
||||
Ability ability = new LoyaltyAbility(new BoostTargetEffect(
|
||||
-2, 0, Duration.UntilYourNextTurn
|
||||
).setText("Until your next turn, up to one target creature gets -2/-0"), 2);
|
||||
ability.addEffect(new LoseAbilityTargetEffect(
|
||||
FlyingAbility.getInstance(), Duration.UntilYourNextTurn
|
||||
).setText("and loses flying"));
|
||||
ability.addTarget(new TargetCreaturePermanent(0, 1));
|
||||
this.addAbility(ability);
|
||||
|
||||
// −3: Create a 4/4 blue Elemental Bird creature token with flying.
|
||||
this.addAbility(new LoyaltyAbility(new CreateTokenEffect(new MuYanlingSkyDancerToken()), -3));
|
||||
|
||||
// −8: You get an emblem with "Islands you control have '{T}: Draw a card'."
|
||||
this.addAbility(new LoyaltyAbility(new GetEmblemEffect(new MuYanlingSkyDancerEmblem())));
|
||||
}
|
||||
|
||||
private MuYanlingSkyDancer(final MuYanlingSkyDancer card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public MuYanlingSkyDancer copy() {
|
||||
return new MuYanlingSkyDancer(this);
|
||||
}
|
||||
}
|
53
Mage.Sets/src/mage/cards/o/OgreSiegebreaker.java
Normal file
53
Mage.Sets/src/mage/cards/o/OgreSiegebreaker.java
Normal file
|
@ -0,0 +1,53 @@
|
|||
package mage.cards.o;
|
||||
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.effects.common.DestroyTargetEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.filter.FilterPermanent;
|
||||
import mage.filter.common.FilterCreaturePermanent;
|
||||
import mage.filter.predicate.permanent.WasDealtDamageThisTurnPredicate;
|
||||
import mage.target.TargetPermanent;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class OgreSiegebreaker extends CardImpl {
|
||||
|
||||
private static final FilterPermanent filter
|
||||
= new FilterCreaturePermanent("creature that was dealt damage this turn");
|
||||
|
||||
static {
|
||||
filter.add(new WasDealtDamageThisTurnPredicate());
|
||||
}
|
||||
|
||||
public OgreSiegebreaker(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}{R}");
|
||||
|
||||
this.subtype.add(SubType.OGRE);
|
||||
this.subtype.add(SubType.BERSERKER);
|
||||
this.power = new MageInt(4);
|
||||
this.toughness = new MageInt(3);
|
||||
|
||||
// {2}{B}{R}: Destroy target creature that was dealt damage this turn.
|
||||
Ability ability = new SimpleActivatedAbility(new DestroyTargetEffect(), new ManaCostsImpl("{2}{B}{R}"));
|
||||
ability.addTarget(new TargetPermanent(filter));
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
private OgreSiegebreaker(final OgreSiegebreaker card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public OgreSiegebreaker copy() {
|
||||
return new OgreSiegebreaker(this);
|
||||
}
|
||||
}
|
46
Mage.Sets/src/mage/cards/r/RetributiveWand.java
Normal file
46
Mage.Sets/src/mage/cards/r/RetributiveWand.java
Normal file
|
@ -0,0 +1,46 @@
|
|||
package mage.cards.r;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.PutIntoGraveFromBattlefieldSourceTriggeredAbility;
|
||||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
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.target.common.TargetAnyTarget;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class RetributiveWand extends CardImpl {
|
||||
|
||||
public RetributiveWand(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{3}");
|
||||
|
||||
// {3}, {T}: Retributive Wand deals 1 damage to any target.
|
||||
Ability ability = new SimpleActivatedAbility(new DamageTargetEffect(1), new GenericManaCost(3));
|
||||
ability.addCost(new TapSourceCost());
|
||||
ability.addTarget(new TargetAnyTarget());
|
||||
this.addAbility(ability);
|
||||
|
||||
// When Retributive Wand is put into a graveyard from the battlefield, it deals 5 damage to any target.
|
||||
ability = new PutIntoGraveFromBattlefieldSourceTriggeredAbility(
|
||||
new DamageTargetEffect(5, "it")
|
||||
);
|
||||
ability.addTarget(new TargetAnyTarget());
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
private RetributiveWand(final RetributiveWand card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public RetributiveWand copy() {
|
||||
return new RetributiveWand(this);
|
||||
}
|
||||
}
|
49
Mage.Sets/src/mage/cards/s/SpectralSailor.java
Normal file
49
Mage.Sets/src/mage/cards/s/SpectralSailor.java
Normal file
|
@ -0,0 +1,49 @@
|
|||
package mage.cards.s;
|
||||
|
||||
import mage.MageInt;
|
||||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||
import mage.abilities.keyword.FlashAbility;
|
||||
import mage.abilities.keyword.FlyingAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class SpectralSailor extends CardImpl {
|
||||
|
||||
public SpectralSailor(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{U}");
|
||||
|
||||
this.subtype.add(SubType.SPIRIT);
|
||||
this.subtype.add(SubType.PIRATE);
|
||||
this.power = new MageInt(1);
|
||||
this.toughness = new MageInt(1);
|
||||
|
||||
// Flash
|
||||
this.addAbility(FlashAbility.getInstance());
|
||||
|
||||
// Flying
|
||||
this.addAbility(FlyingAbility.getInstance());
|
||||
|
||||
// {3}{U}: Draw a card.
|
||||
this.addAbility(new SimpleActivatedAbility(
|
||||
new DrawCardSourceControllerEffect(1), new ManaCostsImpl("{3}{U}")
|
||||
));
|
||||
}
|
||||
|
||||
private SpectralSailor(final SpectralSailor card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public SpectralSailor copy() {
|
||||
return new SpectralSailor(this);
|
||||
}
|
||||
}
|
104
Mage.Sets/src/mage/cards/v/VoraciousHydra.java
Normal file
104
Mage.Sets/src/mage/cards/v/VoraciousHydra.java
Normal file
|
@ -0,0 +1,104 @@
|
|||
package mage.cards.v;
|
||||
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.Mode;
|
||||
import mage.abilities.common.EntersBattlefieldAbility;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.EntersBattlefieldWithXCountersEffect;
|
||||
import mage.abilities.effects.common.FightTargetSourceEffect;
|
||||
import mage.abilities.keyword.TrampleAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.TargetController;
|
||||
import mage.counters.CounterType;
|
||||
import mage.filter.FilterPermanent;
|
||||
import mage.filter.common.FilterCreaturePermanent;
|
||||
import mage.filter.predicate.permanent.ControllerPredicate;
|
||||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.target.TargetPermanent;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class VoraciousHydra extends CardImpl {
|
||||
|
||||
private static final FilterPermanent filter = new FilterCreaturePermanent("creature you don't control");
|
||||
|
||||
static {
|
||||
filter.add(new ControllerPredicate(TargetController.NOT_YOU));
|
||||
}
|
||||
|
||||
public VoraciousHydra(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{X}{G}{G}");
|
||||
|
||||
this.subtype.add(SubType.HYDRA);
|
||||
this.power = new MageInt(0);
|
||||
this.toughness = new MageInt(1);
|
||||
|
||||
// Trample
|
||||
this.addAbility(TrampleAbility.getInstance());
|
||||
|
||||
// Voracious Hydra enters the battlefield with X +1/+1 counters on it.
|
||||
this.addAbility(new EntersBattlefieldAbility(
|
||||
new EntersBattlefieldWithXCountersEffect(CounterType.P1P1.createInstance())
|
||||
));
|
||||
|
||||
// When Voracious Hydra enters the battlefield, choose one —
|
||||
// • Double the number of +1/+1 counters on Voracious Hydra.
|
||||
Ability ability = new EntersBattlefieldTriggeredAbility(new VoraciousHydraEffect(), false);
|
||||
|
||||
// • Voracious Hydra fights target creature you don't control.
|
||||
Mode mode = new Mode(
|
||||
new FightTargetSourceEffect()
|
||||
.setText("{this} fights target creature you don't control")
|
||||
);
|
||||
mode.addTarget(new TargetPermanent(filter));
|
||||
ability.addMode(mode);
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
private VoraciousHydra(final VoraciousHydra card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public VoraciousHydra copy() {
|
||||
return new VoraciousHydra(this);
|
||||
}
|
||||
}
|
||||
|
||||
class VoraciousHydraEffect extends OneShotEffect {
|
||||
|
||||
VoraciousHydraEffect() {
|
||||
super(Outcome.Benefit);
|
||||
staticText = "Double the number of +1/+1 counters on {this}";
|
||||
}
|
||||
|
||||
private VoraciousHydraEffect(final VoraciousHydraEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public VoraciousHydraEffect copy() {
|
||||
return new VoraciousHydraEffect(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
Permanent permanent = game.getPermanent(source.getSourceId());
|
||||
if (permanent == null) {
|
||||
return false;
|
||||
}
|
||||
return permanent.addCounters(CounterType.P1P1.createInstance(
|
||||
permanent.getCounters(game).getCount(CounterType.P1P1)
|
||||
), source, game);
|
||||
}
|
||||
}
|
86
Mage.Sets/src/mage/cards/w/WolfridersSaddle.java
Normal file
86
Mage.Sets/src/mage/cards/w/WolfridersSaddle.java
Normal file
|
@ -0,0 +1,86 @@
|
|||
package mage.cards.w;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.effects.common.CreateTokenEffect;
|
||||
import mage.abilities.effects.common.combat.CantBeBlockedByMoreThanOneSourceEffect;
|
||||
import mage.abilities.effects.common.continuous.BoostEquippedEffect;
|
||||
import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect;
|
||||
import mage.abilities.keyword.EquipAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.AttachmentType;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.game.permanent.token.WolfToken;
|
||||
import mage.players.Player;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class WolfridersSaddle extends CardImpl {
|
||||
|
||||
public WolfridersSaddle(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{3}{G}");
|
||||
|
||||
this.subtype.add(SubType.EQUIPMENT);
|
||||
|
||||
// When Wolfrider's Saddle enters the battlefield, create a 2/2 green Wolf creature token, then attach Wolfrider's Saddle to it.
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new WolfridersSaddleEffect()));
|
||||
|
||||
// Equipped creature gets +1/+1 and can't be blocked by more than one creature.
|
||||
Ability ability = new SimpleStaticAbility(new BoostEquippedEffect(1, 1));
|
||||
ability.addEffect(new GainAbilityAttachedEffect(
|
||||
new SimpleStaticAbility(new CantBeBlockedByMoreThanOneSourceEffect()), AttachmentType.EQUIPMENT
|
||||
).setText("and can't be blocked by more than one creature"));
|
||||
this.addAbility(ability);
|
||||
|
||||
// Equip {3}
|
||||
this.addAbility(new EquipAbility(3));
|
||||
}
|
||||
|
||||
private WolfridersSaddle(final WolfridersSaddle card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public WolfridersSaddle copy() {
|
||||
return new WolfridersSaddle(this);
|
||||
}
|
||||
}
|
||||
|
||||
class WolfridersSaddleEffect extends CreateTokenEffect {
|
||||
|
||||
WolfridersSaddleEffect() {
|
||||
super(new WolfToken());
|
||||
staticText = "create a 2/2 green Wolf creature token, then attach {this} to it.";
|
||||
}
|
||||
|
||||
private WolfridersSaddleEffect(final WolfridersSaddleEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
Player controller = game.getPlayer(source.getControllerId());
|
||||
if (controller == null == !super.apply(game, source)) {
|
||||
return false;
|
||||
}
|
||||
Permanent p = game.getPermanent(this.getLastAddedTokenId());
|
||||
if (p == null) {
|
||||
return false;
|
||||
}
|
||||
p.addAttachment(source.getSourceId(), game);
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public WolfridersSaddleEffect copy() {
|
||||
return new WolfridersSaddleEffect(this);
|
||||
}
|
||||
}
|
101
Mage.Sets/src/mage/cards/y/YarokTheDesecrated.java
Normal file
101
Mage.Sets/src/mage/cards/y/YarokTheDesecrated.java
Normal file
|
@ -0,0 +1,101 @@
|
|||
package mage.cards.y;
|
||||
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.effects.ReplacementEffectImpl;
|
||||
import mage.abilities.keyword.DeathtouchAbility;
|
||||
import mage.abilities.keyword.LifelinkAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.*;
|
||||
import mage.game.Game;
|
||||
import mage.game.events.EntersTheBattlefieldEvent;
|
||||
import mage.game.events.GameEvent;
|
||||
import mage.game.events.NumberOfTriggersEvent;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class YarokTheDesecrated extends CardImpl {
|
||||
|
||||
public YarokTheDesecrated(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}{G}{U}");
|
||||
|
||||
this.addSuperType(SuperType.LEGENDARY);
|
||||
this.subtype.add(SubType.ELEMENTAL);
|
||||
this.subtype.add(SubType.HORROR);
|
||||
this.power = new MageInt(3);
|
||||
this.toughness = new MageInt(5);
|
||||
|
||||
// Deathtouch
|
||||
this.addAbility(DeathtouchAbility.getInstance());
|
||||
|
||||
// Lifelink
|
||||
this.addAbility(LifelinkAbility.getInstance());
|
||||
|
||||
// If a permanent entering the battlefield causes a triggered ability of a permanent you control to trigger, that ability triggers an additional time.
|
||||
this.addAbility(new SimpleStaticAbility(new YarokTheDesecratedEffect()));
|
||||
}
|
||||
|
||||
private YarokTheDesecrated(final YarokTheDesecrated card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public YarokTheDesecrated copy() {
|
||||
return new YarokTheDesecrated(this);
|
||||
}
|
||||
}
|
||||
|
||||
class YarokTheDesecratedEffect extends ReplacementEffectImpl {
|
||||
|
||||
YarokTheDesecratedEffect() {
|
||||
super(Duration.WhileOnBattlefield, Outcome.Benefit);
|
||||
staticText = "If a permanent entering the battlefield causes a triggered ability " +
|
||||
"of a permanent you control to trigger, that ability triggers an additional time";
|
||||
}
|
||||
|
||||
private YarokTheDesecratedEffect(final YarokTheDesecratedEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public YarokTheDesecratedEffect copy() {
|
||||
return new YarokTheDesecratedEffect(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checksEventType(GameEvent event, Game game) {
|
||||
return event.getType() == GameEvent.EventType.NUMBER_OF_TRIGGERS;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean applies(GameEvent event, Ability source, Game game) {
|
||||
if (!(event instanceof NumberOfTriggersEvent)) {
|
||||
return false;
|
||||
}
|
||||
NumberOfTriggersEvent numberOfTriggersEvent = (NumberOfTriggersEvent) event;
|
||||
if (!source.isControlledBy(event.getPlayerId())) {
|
||||
return false;
|
||||
}
|
||||
GameEvent sourceEvent = numberOfTriggersEvent.getSourceEvent();
|
||||
// Only EtB triggers
|
||||
if (sourceEvent == null
|
||||
|| sourceEvent.getType() != GameEvent.EventType.ENTERS_THE_BATTLEFIELD
|
||||
|| !(sourceEvent instanceof EntersTheBattlefieldEvent)) {
|
||||
return false;
|
||||
}
|
||||
EntersTheBattlefieldEvent entersTheBattlefieldEvent = (EntersTheBattlefieldEvent) sourceEvent;
|
||||
// Only for triggers of permanents
|
||||
return game.getPermanent(numberOfTriggersEvent.getSourceId()) != null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean replaceEvent(GameEvent event, Ability source, Game game) {
|
||||
event.setAmount(event.getAmount() + 1);
|
||||
return false;
|
||||
}
|
||||
}
|
|
@ -36,6 +36,7 @@ public final class CoreSet2020 extends ExpansionSet {
|
|||
cards.add(new SetCardInfo("Bloodthirsty Aerialist", 91, Rarity.UNCOMMON, mage.cards.b.BloodthirstyAerialist.class));
|
||||
cards.add(new SetCardInfo("Bone Splinters", 92, Rarity.COMMON, mage.cards.b.BoneSplinters.class));
|
||||
cards.add(new SetCardInfo("Captivating Gyre", 51, Rarity.UNCOMMON, mage.cards.c.CaptivatingGyre.class));
|
||||
cards.add(new SetCardInfo("Cerulean Drake", 53, Rarity.UNCOMMON, mage.cards.c.CeruleanDrake.class));
|
||||
cards.add(new SetCardInfo("Chandra's Embercat", 129, Rarity.COMMON, mage.cards.c.ChandrasEmbercat.class));
|
||||
cards.add(new SetCardInfo("Chandra's Spitfire", 132, Rarity.UNCOMMON, mage.cards.c.ChandrasSpitfire.class));
|
||||
cards.add(new SetCardInfo("Chandra, Acolyte of Flame", 126, Rarity.RARE, mage.cards.c.ChandraAcolyteOfFlame.class));
|
||||
|
@ -50,10 +51,13 @@ public final class CoreSet2020 extends ExpansionSet {
|
|||
cards.add(new SetCardInfo("Disenchant", 14, Rarity.COMMON, mage.cards.d.Disenchant.class));
|
||||
cards.add(new SetCardInfo("Disfigure", 95, Rarity.UNCOMMON, mage.cards.d.Disfigure.class));
|
||||
cards.add(new SetCardInfo("Dragon Mage", 135, Rarity.UNCOMMON, mage.cards.d.DragonMage.class));
|
||||
cards.add(new SetCardInfo("Drawn from Dreams", 56, Rarity.RARE, mage.cards.d.DrawnFromDreams.class));
|
||||
cards.add(new SetCardInfo("Dread Presence", 96, Rarity.RARE, mage.cards.d.DreadPresence.class));
|
||||
cards.add(new SetCardInfo("Dungeon Geists", 57, Rarity.RARE, mage.cards.d.DungeonGeists.class));
|
||||
cards.add(new SetCardInfo("Elvish Reclaimer", 169, Rarity.RARE, mage.cards.e.ElvishReclaimer.class));
|
||||
cards.add(new SetCardInfo("Ember Hauler", 137, Rarity.UNCOMMON, mage.cards.e.EmberHauler.class));
|
||||
cards.add(new SetCardInfo("Empyrean Eagle", 208, Rarity.UNCOMMON, mage.cards.e.EmpyreanEagle.class));
|
||||
cards.add(new SetCardInfo("Ferocious Pup", 171, Rarity.COMMON, mage.cards.f.FerociousPup.class));
|
||||
cards.add(new SetCardInfo("Field of the Dead", 247, Rarity.RARE, mage.cards.f.FieldOfTheDead.class));
|
||||
cards.add(new SetCardInfo("Flame Sweep", 139, Rarity.UNCOMMON, mage.cards.f.FlameSweep.class));
|
||||
cards.add(new SetCardInfo("Flood of Tears", 59, Rarity.RARE, mage.cards.f.FloodOfTears.class));
|
||||
|
@ -62,31 +66,42 @@ public final class CoreSet2020 extends ExpansionSet {
|
|||
cards.add(new SetCardInfo("Goblin Ringleader", 143, Rarity.UNCOMMON, mage.cards.g.GoblinRingleader.class));
|
||||
cards.add(new SetCardInfo("Growth Cycle", 175, Rarity.COMMON, mage.cards.g.GrowthCycle.class));
|
||||
cards.add(new SetCardInfo("Hanged Executioner", 22, Rarity.RARE, mage.cards.h.HangedExecutioner.class));
|
||||
cards.add(new SetCardInfo("Heart-Piercer Bow", 228, Rarity.COMMON, mage.cards.h.HeartPiercerBow.class));
|
||||
cards.add(new SetCardInfo("Herald of the Sun", 23, Rarity.UNCOMMON, mage.cards.h.HeraldOfTheSun.class));
|
||||
cards.add(new SetCardInfo("Infuriate", 145, Rarity.COMMON, mage.cards.i.Infuriate.class));
|
||||
cards.add(new SetCardInfo("Ironroot Warlord", 209, Rarity.UNCOMMON, mage.cards.i.IronrootWarlord.class));
|
||||
cards.add(new SetCardInfo("Kaalia, Zenith Seeker", 210, Rarity.MYTHIC, mage.cards.k.KaaliaZenithSeeker.class));
|
||||
cards.add(new SetCardInfo("Kykar, Wind's Fury", 212, Rarity.MYTHIC, mage.cards.k.KykarWindsFury.class));
|
||||
cards.add(new SetCardInfo("Leyline of Abundance", 179, Rarity.RARE, mage.cards.l.LeylineOfAbundance.class));
|
||||
cards.add(new SetCardInfo("Leyline of Anticipation", 64, Rarity.RARE, mage.cards.l.LeylineOfAnticipation.class));
|
||||
cards.add(new SetCardInfo("Leyline of Sanctity", 26, Rarity.RARE, mage.cards.l.LeylineOfSanctity.class));
|
||||
cards.add(new SetCardInfo("Leyline of the Void", 107, Rarity.RARE, mage.cards.l.LeylineOfTheVoid.class));
|
||||
cards.add(new SetCardInfo("Loaming Shaman", 180, Rarity.UNCOMMON, mage.cards.l.LoamingShaman.class));
|
||||
cards.add(new SetCardInfo("Lotus Field", 249, Rarity.RARE, mage.cards.l.LotusField.class));
|
||||
cards.add(new SetCardInfo("Loxodon Lifechanter", 27, Rarity.RARE, mage.cards.l.LoxodonLifechanter.class));
|
||||
cards.add(new SetCardInfo("Loyal Pegasus", 28, Rarity.UNCOMMON, mage.cards.l.LoyalPegasus.class));
|
||||
cards.add(new SetCardInfo("Manifold Key", 230, Rarity.UNCOMMON, mage.cards.m.ManifoldKey.class));
|
||||
cards.add(new SetCardInfo("Moldervine Reclamation", 214, Rarity.UNCOMMON, mage.cards.m.MoldervineReclamation.class));
|
||||
cards.add(new SetCardInfo("Mu Yanling, Sky Dancer", 68, Rarity.MYTHIC, mage.cards.m.MuYanlingSkyDancer.class));
|
||||
cards.add(new SetCardInfo("Negate", 69, Rarity.COMMON, mage.cards.n.Negate.class));
|
||||
cards.add(new SetCardInfo("Octoprophet", 70, Rarity.COMMON, mage.cards.o.Octoprophet.class));
|
||||
cards.add(new SetCardInfo("Ogre Siegebreaker", 215, Rarity.UNCOMMON, mage.cards.o.OgreSiegebreaker.class));
|
||||
cards.add(new SetCardInfo("Pacifism", 32, Rarity.COMMON, mage.cards.p.Pacifism.class));
|
||||
cards.add(new SetCardInfo("Planar Cleansing", 33, Rarity.RARE, mage.cards.p.PlanarCleansing.class));
|
||||
cards.add(new SetCardInfo("Pulse of Murasa", 189, Rarity.UNCOMMON, mage.cards.p.PulseOfMurasa.class));
|
||||
cards.add(new SetCardInfo("Raise the Alarm", 34, Rarity.COMMON, mage.cards.r.RaiseTheAlarm.class));
|
||||
cards.add(new SetCardInfo("Reckless Air Strike", 154, Rarity.COMMON, mage.cards.r.RecklessAirStrike.class));
|
||||
cards.add(new SetCardInfo("Renowned Weaponsmith", 72, Rarity.UNCOMMON, mage.cards.r.RenownedWeaponsmith.class));
|
||||
cards.add(new SetCardInfo("Retributive Wand", 236, Rarity.UNCOMMON, mage.cards.r.RetributiveWand.class));
|
||||
cards.add(new SetCardInfo("Rotting Regisaur", 111, Rarity.RARE, mage.cards.r.RottingRegisaur.class));
|
||||
cards.add(new SetCardInfo("Rule of Law", 35, Rarity.UNCOMMON, mage.cards.r.RuleOfLaw.class));
|
||||
cards.add(new SetCardInfo("Scholar of the Ages", 74, Rarity.UNCOMMON, mage.cards.s.ScholarOfTheAges.class));
|
||||
cards.add(new SetCardInfo("Scuttlemutt", 238, Rarity.UNCOMMON, mage.cards.s.Scuttlemutt.class));
|
||||
cards.add(new SetCardInfo("Silverback Shaman", 195, Rarity.COMMON, mage.cards.s.SilverbackShaman.class));
|
||||
cards.add(new SetCardInfo("Sorin, Imperious Bloodlord", 115, Rarity.MYTHIC, mage.cards.s.SorinImperiousBloodlord.class));
|
||||
cards.add(new SetCardInfo("Spectral Sailor", 76, Rarity.UNCOMMON, mage.cards.s.SpectralSailor.class));
|
||||
cards.add(new SetCardInfo("Starfield Mystic", 39, Rarity.RARE, mage.cards.s.StarfieldMystic.class));
|
||||
cards.add(new SetCardInfo("Steel Overseer", 239, Rarity.RARE, mage.cards.s.SteelOverseer.class));
|
||||
cards.add(new SetCardInfo("Temple of Epiphany", 253, Rarity.RARE, mage.cards.t.TempleOfEpiphany.class));
|
||||
cards.add(new SetCardInfo("Temple of Malady", 254, Rarity.RARE, mage.cards.t.TempleOfMalady.class));
|
||||
cards.add(new SetCardInfo("Temple of Mystery", 255, Rarity.RARE, mage.cards.t.TempleOfMystery.class));
|
||||
|
@ -98,7 +113,12 @@ public final class CoreSet2020 extends ExpansionSet {
|
|||
cards.add(new SetCardInfo("Unchained Berserker", 164, Rarity.UNCOMMON, mage.cards.u.UnchainedBerserker.class));
|
||||
cards.add(new SetCardInfo("Unsummon", 78, Rarity.COMMON, mage.cards.u.Unsummon.class));
|
||||
cards.add(new SetCardInfo("Vampire of the Dire Moon", 120, Rarity.UNCOMMON, mage.cards.v.VampireOfTheDireMoon.class));
|
||||
cards.add(new SetCardInfo("Vial of Dragonfire", 241, Rarity.COMMON, mage.cards.v.VialOfDragonfire.class));
|
||||
cards.add(new SetCardInfo("Voracious Hydra", 200, Rarity.RARE, mage.cards.v.VoraciousHydra.class));
|
||||
cards.add(new SetCardInfo("Wakeroot Elemental", 202, Rarity.RARE, mage.cards.w.WakerootElemental.class));
|
||||
cards.add(new SetCardInfo("Wolfkin Bond", 203, Rarity.COMMON, mage.cards.w.WolfkinBond.class));
|
||||
cards.add(new SetCardInfo("Wolfrider's Saddle", 204, Rarity.UNCOMMON, mage.cards.w.WolfridersSaddle.class));
|
||||
cards.add(new SetCardInfo("Yarok's Fenlurker", 123, Rarity.UNCOMMON, mage.cards.y.YaroksFenlurker.class));
|
||||
cards.add(new SetCardInfo("Yarok, the Desecrated", 220, Rarity.MYTHIC, mage.cards.y.YarokTheDesecrated.class));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,33 @@
|
|||
package mage.game.command.emblems;
|
||||
|
||||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.costs.common.TapSourceCost;
|
||||
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||
import mage.abilities.effects.common.continuous.GainAbilityControlledEffect;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.Zone;
|
||||
import mage.filter.FilterPermanent;
|
||||
import mage.filter.common.FilterControlledPermanent;
|
||||
import mage.game.command.Emblem;
|
||||
|
||||
/**
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class MuYanlingSkyDancerEmblem extends Emblem {
|
||||
|
||||
private static final FilterPermanent filter
|
||||
= new FilterControlledPermanent(SubType.ISLAND, "Islands you control");
|
||||
|
||||
// "Islands you control have '{T}: Draw a card'."
|
||||
public MuYanlingSkyDancerEmblem() {
|
||||
this.setName("Emblem Yanling");
|
||||
this.getAbilities().add(new SimpleStaticAbility(
|
||||
Zone.COMMAND,
|
||||
new GainAbilityControlledEffect(new SimpleActivatedAbility(
|
||||
new DrawCardSourceControllerEffect(1), new TapSourceCost()
|
||||
), Duration.EndOfGame, filter)
|
||||
));
|
||||
}
|
||||
}
|
|
@ -0,0 +1,28 @@
|
|||
package mage.game.permanent.token;
|
||||
|
||||
import mage.MageInt;
|
||||
import mage.abilities.keyword.FlyingAbility;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
|
||||
public final class MuYanlingSkyDancerToken extends TokenImpl {
|
||||
|
||||
public MuYanlingSkyDancerToken() {
|
||||
super("Elemental Bird", "4/4 blue Elemental Bird creature token with flying");
|
||||
cardType.add(CardType.CREATURE);
|
||||
color.setBlue(true);
|
||||
subtype.add(SubType.ELEMENTAL);
|
||||
subtype.add(SubType.BIRD);
|
||||
power = new MageInt(4);
|
||||
toughness = new MageInt(4);
|
||||
addAbility(FlyingAbility.getInstance());
|
||||
}
|
||||
|
||||
private MuYanlingSkyDancerToken(final MuYanlingSkyDancerToken token) {
|
||||
super(token);
|
||||
}
|
||||
|
||||
public MuYanlingSkyDancerToken copy() {
|
||||
return new MuYanlingSkyDancerToken(this);
|
||||
}
|
||||
}
|
|
@ -499,7 +499,7 @@ public final class ManaUtil {
|
|||
}
|
||||
|
||||
/**
|
||||
* all ability/effect code with "new GenericManaCost" must be replaced by createManaCost call
|
||||
* all ability/effect code with "= new GenericManaCost" must be replaced by createManaCost call
|
||||
*/
|
||||
public static ManaCost createManaCost(int genericManaCount, boolean payAsX) {
|
||||
if (payAsX) {
|
||||
|
|
|
@ -35372,9 +35372,11 @@ Flusterstorm|Modern Horizons|255|R|{U}|Instant|||Counter target instant or sorce
|
|||
Ajani, Strength of the Pride|Core Set 2020|2|M|{2}{W}{W}|Legendary Planeswalker - Ajani|5|+1: You gain life equal to the number of creatures you control plus the number of planeswalkers you control.$−2: Create a 2/2 white Cat Soldier creature token named Ajani's Pridemate with "Whenever you gain life, put a +1/+1 counter on Ajani's Pridemate."$0: If you have at least 15 life more than your starting life total, exile Ajani, Strength of the Pride and each artifact and creature your opponents control.|
|
||||
Angel of Vitality|Core Set 2020|4|U|{2}{W}|Creature - Angel|2|2|Flying$If you would gain life, you gain that much life plus 1 instead.$Angel of Vitality gets +2/+2 as long as you have 25 or more life.|
|
||||
Bishop of Wings|Core Set 2020|8|R|{W}{W}|Creature - Human Cleric|1|4|Whenever an Angel enters the battlefield under your control, you gain 4 life.$Whenever an Angel you control dies, create a 1/1 white Spirit creature token with flying.|
|
||||
Cavalier of Dawn|Core Set 2020|10|M|{2}{W}{W}{W}|Creature - Elemental Knight|4|6|Vigilance$When Cavalier of Dawn enters the battlefield, destroy up to one target nonland permanent. Its controller creates a 3/3 colorless Golem artifact creature token.$When Cavalier of Dawn dies, return target artifact or enchantment card from your graveyard to your hand.|
|
||||
Devout Decree|Core Set 2020|13|U|{1}{W}|Sorcery|||Exile target creature or planeswalker that's black or red. Scry 1.|
|
||||
Disenchant|Core Set 2020|14|C|{1}{W}|Instant|||Destroy target artifact or enchantment.|
|
||||
Hanged Executioner|Core Set 2020|22|R|{2}{W}|Creature - Spirit|1|1|Flying$When Hanged Executioner enters the battlefield, create a 1/1 white Spirit creature token with flying.${3}{W}, Exile Hanged Executioner: Exile target creature.|
|
||||
Herald of the Sun|Core Set 2020|23|U|{4}{W}{W}|Creature - Angel|4|4|Flying${3}{W}: Put a +1/+1 counter on another target creature with flying.|
|
||||
Leyline of Sanctity|Core Set 2020|26|R|{2}{W}{W}|Enchantment|||If Leyline of Sanctity is in your opening hand, you may begin the game with it on the battlefield.$You have hexproof.|
|
||||
Loxodon Lifechanter|Core Set 2020|27|R|{5}{W}|Creature - Elephant Cleric|4|6|When Loxodon Lifechanter enters the battlefield, you may have your life total become the total toughness of creatures you control.${5}{W}: Loxodon Lifechanter gets +X/+X until end of turn, where X is your life total.|
|
||||
Loyal Pegasus|Core Set 2020|28|U|{W}|Creature - Pegasus|2|1|Flying$Loyal Pegasus can't attack or block alone.|
|
||||
|
@ -35384,8 +35386,10 @@ Raise the Alarm|Core Set 2020|34|C|{1}{W}|Instant|||Create two 1/1 white Soldier
|
|||
Rule of Law|Core Set 2020|35|U|{2}{W}|Enchantment|||Each player can't cast more than one spell each turn.|
|
||||
Starfield Mystic|Core Set 2020|39|R|{1}{W}|Creature - Human Cleric|2|2|Enchantment spells you cast cost {1} less to cast.$Whenever an enchantment you control is put into a graveyard from the battlefield, put a +1/+1 counter on Starfield Mystic.|
|
||||
Aether Gust|Core Set 2020|42|U|{1}{U}|Instant|||Choose target spell or permanent that's red or green. Its owner puts it on the top or bottom of their library.|
|
||||
Agent of Treachery|Core Set 2020|43|R|{5}{U}{U}|Creature - Human Rogue|2|3|When Agent of Treachery enters the battlefield, gain control of target permanent.$At the beginning of your end step, if you control three or more permanents you don't own, draw three cards.|
|
||||
Atemsis, All-Seeing|Core Set 2020|46|R|{3}{U}{U}{U}|Legendary Creature - Sphinx|4|5|Flying${2}{U}, {T}: Draw two cards, then discard a card.$Whenever Atemsis, All-Seeing deals damage to an opponent, you may reveal your hand. If cards with at least six different converted mana costs are revealed this way, that player loses the game.|
|
||||
Captivating Gyre|Core Set 2020|51|U|{4}{U}{U}|Sorcery|||Return up to three target creatures to their owners' hands.|
|
||||
Cerulean Drake|Core Set 2020|53|U|{1}{U}|Creature - Drake|1|1|Flying$Protection from red$Sacrifice Cerulean Drake: Counter target spell that targets you.|
|
||||
Convolute|Core Set 2020|55|C|{2}{U}|Instant|||Counter target spell unless its controller pays {4}.|
|
||||
Drawn from Dreams|Core Set 2020|56|R|{2}{U}{U}|Sorcery|||Look at the top seven cards of your library. Put two of them into your hand and the rest on the bottom of your library in a random order.|
|
||||
Dungeon Geists|Core Set 2020|57|R|{2}{U}{U}|Creature - Spirit|3|3|Flying$When Dungeon Geists enters the battlefield, tap target creature an opponent controls. That creature doesn't untap during its controller's untap step for as long as you control Dungeon Geists.|
|
||||
|
@ -35396,18 +35400,22 @@ Mu Yanling, Sky Dancer|Core Set 2020|68|M|{1}{U}{U}|Legendary Planeswalker - Yan
|
|||
Negate|Core Set 2020|69|C|{1}{U}|Instant|||Counter target noncreature spell.|
|
||||
Octoprophet|Core Set 2020|70|C|{3}{U}|Creature - Octopus|3|3|When Octoprophet enters the battlefield, scry 2.|
|
||||
Portal of Sanctuary|Core Set 2020|71|U|{2}{U}|Artifact|||{1}, {T}: Return target creature you control and each Aura attached to it to their owners' hands. Activate this ability only during your turn.|
|
||||
Renowned Weaponsmith|Core Set 2020|72|U|{1}{U}|Creature - Human Artificer|1|3|{T}: Add {C}{C}. Spend this mana only to cast artifact spells or activate abilities of artifacts.${U}, {T}: Search your library for a card named Heart-Piercer Bow or Vial of Dragonfire, reveal it, put it into your hand, then shuffle your library.|
|
||||
Scholar of the Ages|Core Set 2020|74|U|{5}{U}{U}|Creature - Human Wizard|3|3|When Scholar of the Ages enters the battlefield, return up to two target instant and/or sorcery cards from your graveyard to your hand.|
|
||||
Spectral Sailor|Core Set 2020|76|U|{U}|Creature - Spirit Pirate|1|1|Flash$Flying${3}{U}: Draw a card.|
|
||||
Unsummon|Core Set 2020|78|C|{U}|Instant|||Return target creature to its owner's hand.|
|
||||
Blightbeetle|Core Set 2020|87|U|{1}{B}|Creature - Insect|1|1|Protection from green$Creatures your opponents control can't have +1/+1 counters put on them.|
|
||||
Bloodthirsty Aerialist|Core Set 2020|91|U|{1}{B}{B}|Creature - Vampire Rogue|2|3|Flying$Whenever you gain life, put a +1/+1 counter on Bloodthirsty Aerialist.|
|
||||
Bone Splinters|Core Set 2020|92|C|{B}|Sorcery|||As an additional cost to cast this spell, sacrifice a creature.$Destroy target creature.|
|
||||
Cavalier of Night|Core Set 2020|94|M|{2}{B}{B}{B}|Creature - Elemental Knight|4|5|Lifelink$When Cavalier of Night enters the battlefield, you may sacrifice another creature. When you do, destroy target creature an opponent controls.$When Cavalier of Night dies, return target creature card with converted mana cost 3 or less from your graveyard to the battlefield.|
|
||||
Disfigure|Core Set 2020|95|U|{B}|Instant|||Target creature gets -2/-2 until end of turn.|
|
||||
Dread Presence|Core Set 2020|96|R|{3}{B}|Creature - Nightmare|3|3|Whenever a Swamp enters the battlefield under your control, choose one —$• You draw a card and you lose 1 life.$• Dread Presence deals 2 damage to any target and you gain 2 life.|
|
||||
Knight of the Ebon Legion|Core Set 2020|105|R|{B}|Creature - Vampire Knight|1|2|{2}{B}: Knight of the Ebon Legion gets +3/+3 and gains deathtouch until end of turn.$At the beginning of your end step, if a player lost 4 or more life this turn, put a +1/+1 counter on Knight of the Ebon Legion.|
|
||||
Legion's End|Core Set 2020|106|R|{1}{B}|Sorcery|||Exile target creature an opponent controls with converted mana cost 2 or less and all other creatures that player controls with the same name as that creature. Then that player reveals their hand and exiles all cards with that name from their hand and graveyard.|
|
||||
Leyline of the Void|Core Set 2020|107|R|{2}{B}{B}|Enchantment|||If Leyline of the Void is in your opening hand, you may begin the game with it on the battlefield.$If a card would be put into an opponent's graveyard from anywhere, exile it instead.|
|
||||
Rotting Regisaur|Core Set 2020|111|R|{2}{B}|Creature - Zombie Dinosaur|7|6|At the beginning of your upkeep, discard a card.|
|
||||
Scheming Symmetry|Core Set 2020|113|R|{B}|Sorcery|||Choose two target players. Each of them searches their library for a card, then shuffles their library and puts that card on top of it.|
|
||||
Sorin, Imperious Bloodlord|Core Set 2020|115|M|{2}{B}|Legendary Planeswalker - Sorin|4|+1: Target creature you control gains deathtouch and lifelink until end of turn. If it's a Vampire, put a +1/+1 counter on it.$+1: You may sacrifice a Vampire. When you do, Sorin, Imperious Bloodlord deals 3 damage to any target and you gain 3 life.$−3: You may put a vampire creature card from your hand onto the battlefield.|
|
||||
Sorin, Imperious Bloodlord|Core Set 2020|115|M|{2}{B}|Legendary Planeswalker - Sorin|4|+1: Target creature you control gains deathtouch and lifelink until end of turn. If it's a Vampire, put a +1/+1 counter on it.$+1: You may sacrifice a Vampire. When you do, Sorin, Imperious Bloodlord deals 3 damage to any target and you gain 3 life.$−3: You may put a Vampire creature card from your hand onto the battlefield.|
|
||||
Thought Distortion|Core Set 2020|117|U|{4}{B}{B}|Sorcery|||This spell can't be countered.$Target opponent reveals their hand. Exile all noncreature, nonland cards from that player's hand and graveyard.|
|
||||
Vampire of the Dire Moon|Core Set 2020|120|U|{B}|Creature - Vampire|1|1|Deathtouch$Lifelink|
|
||||
Yarok's Fenlurker|Core Set 2020|123|U|{B}{B}|Creature - Horror|1|1|When Yarok's Fenlurker enters the battlefield, each opponent exiles a card from their hand.${2}{B}: Yarok's Fenlurker gets +1/+1 until end of turn.|
|
||||
|
@ -35434,17 +35442,21 @@ Uncaged Fury|Core Set 2020|163|U|{2}{R}|Instant|||Target creature gets +1/+1 and
|
|||
Unchained Berserker|Core Set 2020|164|U|{1}{R}|Creature - Human Berserker|1|1|Protection from white$Unchained Berserker gets +2/+0 as long as it's attacking.|
|
||||
Barkhide Troll|Core Set 2020|165|U|{G}{G}|Creature - Troll|2|2|Barkhide Troll enters the battlefield with a +1/+1 counter on it.${1}, Remove a +1/+1 counter from Barkhide Troll: Barkhide Troll gains hexproof until end of turn.|
|
||||
Elvish Reclaimer|Core Set 2020|169|R|{G}|Creature - Elf Warrior|1|2|Elvish Reclaimer gets +2/+2 as long as there are three or more land cards in your graveyard.${2}, {T}, Sacrifice a land: Search your library for a land card, put it onto the battlefield tapped, then shuffle your library.|
|
||||
Ferocious Pup|Core Set 2020|171|C|{2}{G}|Creature - Wolf|0|1|When Ferocious Pup enters the battlefield, create a 2/2 green Wolf creature token.|
|
||||
Growth Cycle|Core Set 2020|175|C|{1}{G}|Instant|||Target creature gets +3/+3 until end of turn. It gets an additional +2/+2 until end of turn for each card named Growth Cycle in your graveyard.|
|
||||
Leyline of Abundance|Core Set 2020|179|R|{2}{G}{G}|Enchantment|||If Leyline of Abundance is in your opening hand, you may begin the game with it on the battlefield.$Whenever you tap a creature for mana, add an additional {G}.${6}{G}{G}: Put a +1/+1 counter on each creature you control.|
|
||||
Loaming Shaman|Core Set 2020|180|U|{2}{G}|Creature - Centaur Shaman|3|2|When Loaming Shaman enters the battlefield, target player shuffles any number of target cards from their graveyard into their library.|
|
||||
Nightpack Ambusher|Core Set 2020|185|R|{2}{G}{G}|Creature - Wolf|4|4|Flash$Other Wolves and Werewolves you control get +1/+1.$At the beginning of your end step, if you didn't cast a spell this turn, create a 2/2 green Wolf creature token.|
|
||||
Overgrowth Elemental|Core Set 2020|187|U|{2}{G}|Creature - Elemental|3|2|When Overgrowth Elemental enters the battlefield, put a +1/+1 counter on another target Elemental you control.$Whenever another creature you control dies, you gain 1 life. If that creature was an Elemental, put a +1/+1 counter on Overgrowth Elemental.|
|
||||
Pulse of Murasa|Core Set 2020|189|U|{2}{G}|Instant|||Return target creature or land card from a graveyard to its owner's hand. You gain 6 life.|
|
||||
Season of Growth|Core Set 2020|191|U|{1}{G}|Enchantment|||Whenever a creature enters the battlefield under your control, scry 1.$Whenever you cast a spell that targets a creature you control, draw a card.|
|
||||
Shifting Ceratops|Core Set 2020|194|R|{2}{G}{G}|Creature - Dinosaur|5|4|This spell can't be countered.$Protection from blue${G}: Shifting Ceratops gains your choice of reach, trample, or haste until end of turn.|
|
||||
Silverback Shaman|Core Set 2020|195|C|{3}{G}{G}|Creature - Ape Shaman|5|4|Trample$When Silverback Shaman dies, draw a card.|
|
||||
Thrashing Brontodon|Core Set 2020|197|U|{1}{G}{G}|Creature - Dinosaur|3|4|{1}, Sacrifice Thrashing Brontodon: Destroy target artifact or enchantment.|
|
||||
Veil of Summer|Core Set 2020|198|U|{G}|Instant|||Draw a card if an opponent has cast a blue or black spell this turn. Spells you control can't be countered this turn. You and permanents you control gain hexproof from blue and from black until end of turn.|
|
||||
Voracious Hydra|Core Set 2020|200|R|{X}{G}{G}|Creature - Hydra|0|1|Trample$Voracious Hydra enters the battlefield with X +1/+1 counters on it.$When Voracious Hydra enters the battlefield, choose one —$• Double the number of +1/+1 counters on Voracious Hydra.$• Voracious Hydra fights target creature you don't control.|
|
||||
Wakeroot Elemental|Core Set 2020|202|R|{4}{G}{G}|Creature - Elemental|5|5|{G}{G}{G}{G}{G}: Untap target land you control. It becomes a 5/5 Elemental creature with haste. It's still a land.|
|
||||
Wolfkin Bond|Core Set 2020|203|C|{4}{G}|Enchantment - Aura|||Enchant creature$When Wolfkin Bond enters the battlefield, create a 2/2 green Wolf creature token.$Enchanted creature gets +2/+2.|
|
||||
Wolfrider's Saddle|Core Set 2020|204|U|{3}{G}|Artifact - Equipment|||When Wolfrider's Saddle enters the battlefield, create a 2/2 green Wolf creature token, then attach Wolfrider's Saddle to it.$Equipped creature gets +1/+1 and can't be blocked by more than one creature.$Equip {3}|
|
||||
Woodland Champion|Core Set 2020|205|U|{1}{G}|Creature - Elf Scout|2|2|Whenever one or more tokens enter the battlefield under your control, put that many +1/+1 counters on Woodland Champion.|
|
||||
Corpse Knight|Core Set 2020|206|U|{W}{B}|Creature - Zombie Knight|2|2|Whenever another creature enters the battlefield under your control, each opponent loses 1 life.|
|
||||
|
@ -35454,13 +35466,20 @@ Ironroot Warlord|Core Set 2020|209|U|{1}{G}{W}|Creature - Treefolk Soldier|*|5|I
|
|||
Kaalia, Zenith Seeker|Core Set 2020|210|M|{R}{W}{B}|Legendary Creature - Human Cleric|3|3|Flying, vigilance$When Kaalia, Zenith Seeker enters the battlefield, look at the top six cards of your library. You may reveal an Angel card, a Demon card, and/or a Dragon card from among them and put them into your hand. Put the rest on the bottom of your library in a random order.|
|
||||
Kykar, Wind's Fury|Core Set 2020|212|M|{1}{U}{R}{W}|Legendary Creature - Bird Wizard|3|3|Flying$Whenever you cast a noncreature spell, create a 1/1 white Spirit creature token with flying.$Sacrifice a Spirit: Add {R}.|
|
||||
Moldervine Reclamation|Core Set 2020|214|U|{3}{B}{G}|Enchantment|||Whenever a creature you control dies, you gain 1 life and draw a card.|
|
||||
Ogre Siegebreaker|Core Set 2020|215|U|{2}{B}{R}|Creature - Ogre Berserker|4|3|{2}{B}{R}: Destroy target creature that was dealt damage this turn.|
|
||||
Omnath, Locus of the Roil|Core Set 2020|216|M|{1}{G}{U}{R}|Legendary Creature - Elemental|3|3|When Omnath, Locus of the Roil enters the battlefield, it deals damage to any target equal to the number of Elementals you control.$Whenever a land enters the battlefield under your control, put a +1/+1 counter on target Elemental you control. If you control eight or more lands, draw a card.|
|
||||
Risen Reef|Core Set 2020|217|U|{1}{G}{U}|Creature - Elemental|1|1|Whenever Risen Reef or another Elemental enters the battlefield under your control, look at the top card of your library. If it's a land card, you may put it onto the battlefield tapped. If you don't put the card onto the battlefield, put it into your hand.|
|
||||
Yarok, the Desecrated|Core Set 2020|220|M|{2}{B}{G}{U}|Legendary Creature - Elemental Horror|3|5|Deathtouch, lifelink$If a permanent entering the battlefield causes a triggered ability of a permanent you control to trigger, that ability triggers an additional time.|
|
||||
Golos, Tireless Pilgrim|Core Set 2020|226|R|{5}|Legendary Artifact Creature - Scout|3|5|When Golos, Tireless Pilgrim enters the battlefield, you may search your library for a land card, put that card onto the battlefield tapped, then shuffle your library.${2}{W}{U}{B}{R}{G}: Exile the top three cards of your library. You may play them this turn without paying their mana costs.|
|
||||
Heart-Piercer Bow|Core Set 2020|228|C|{2}|Artifact - Equipment|||Whenever equipped creature attacks, Heart-Piercer Bow deals 1 damage to target creature defending player controls.$Equip {1}|
|
||||
Manifold Key|Core Set 2020|230|U|{1}|Artifact|||{1}, {T}: Untap another target artifact.${3}, {T}: Target creature can't be blocked this turn.|
|
||||
Retributive Wand|Core Set 2020|236|U|{3}|Artifact|||{3}, {T}: Retributive Wand deals 1 damage to any target.$When Retributive Wand is put into a graveyard from the battlefield, it deals 5 damage to any target.|
|
||||
Scuttlemutt|Core Set 2020|238|U|{3}|Artifact Creature - Scarecrow|2|2|{T}: Add one mana of any color.${T}: Target creature becomes the color or colors of your choice until end of turn.|
|
||||
Steel Overseer|Core Set 2020|239|R|{2}|Artifact Creature - Construct|1|1|{T}: Put a +1/+1 counter on each artifact creature you control.|
|
||||
Vial of Dragonfire|Core Set 2020|241|C|{2}|Artifact|||{2}, {T}, Sacrifice Vial of Dragonfire: It deals 2 damage to target creature.|
|
||||
Cryptic Caves|Core Set 2020|244|U||Land|||{T}: Add {C}.${1}, {T}, Sacrifice Cryptic Caves: Draw a card. Activate this ability only if you control five or more lands.|
|
||||
Field of the Dead|Core Set 2020|247|R||Land|||Field of the Dead enters the battlefield tapped.${T}: Add {C}.$Whenever Field of the Dead or another land enters the battlefield under your control, if you control seven or more lands with different names, create a 2/2 black Zombie creature token.|
|
||||
Lotus Field|Core Set 2020|249|R||Land|||Hexproof$Lotus Field enters the battlefield tapped.$When Lotus Field enters the battlefield, sacrifice two lands.${T}: Add three mana of any color.|
|
||||
Temple of Epiphany|Core Set 2020|253|R||Land|||Temple of Epiphany enters the battlefield tapped.$When Temple of Epiphany enters the battlefield, scry 1.${T}: Add {U} or {R}.|
|
||||
Temple of Malady|Core Set 2020|254|R||Land|||Temple of Malady enters the battlefield tapped.$When Temple of Malady enters the battlefield, scry 1.${T}: Add {B} or {G}.|
|
||||
Temple of Mystery|Core Set 2020|255|R||Land|||Temple of Mystery enters the battlefield tapped.$When Temple of Mystery enters the battlefield, scry 1.${T}: Add {G} or {U}.|
|
||||
|
|
Loading…
Reference in a new issue