mirror of
https://github.com/correl/mage.git
synced 2024-11-17 11:09:32 +00:00
Merge origin/master
This commit is contained in:
commit
f081f8f41d
47 changed files with 1920 additions and 88 deletions
79
Mage.Sets/src/mage/cards/a/AlelaArtfulProvocateur.java
Normal file
79
Mage.Sets/src/mage/cards/a/AlelaArtfulProvocateur.java
Normal file
|
@ -0,0 +1,79 @@
|
||||||
|
package mage.cards.a;
|
||||||
|
|
||||||
|
import mage.MageInt;
|
||||||
|
import mage.abilities.common.SimpleStaticAbility;
|
||||||
|
import mage.abilities.common.SpellCastControllerTriggeredAbility;
|
||||||
|
import mage.abilities.effects.common.CreateTokenEffect;
|
||||||
|
import mage.abilities.effects.common.continuous.BoostAllEffect;
|
||||||
|
import mage.abilities.keyword.DeathtouchAbility;
|
||||||
|
import mage.abilities.keyword.FlyingAbility;
|
||||||
|
import mage.abilities.keyword.LifelinkAbility;
|
||||||
|
import mage.cards.CardImpl;
|
||||||
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.constants.*;
|
||||||
|
import mage.filter.FilterSpell;
|
||||||
|
import mage.filter.common.FilterCreaturePermanent;
|
||||||
|
import mage.filter.predicate.Predicates;
|
||||||
|
import mage.filter.predicate.mageobject.AbilityPredicate;
|
||||||
|
import mage.filter.predicate.mageobject.CardTypePredicate;
|
||||||
|
import mage.filter.predicate.permanent.ControllerPredicate;
|
||||||
|
import mage.game.permanent.token.FaerieToken;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author TheElk801
|
||||||
|
*/
|
||||||
|
public final class AlelaArtfulProvocateur extends CardImpl {
|
||||||
|
|
||||||
|
private static final FilterCreaturePermanent filter
|
||||||
|
= new FilterCreaturePermanent("creatures you control with flying");
|
||||||
|
private static final FilterSpell filter2 = new FilterSpell("an artifact or enchantment spell");
|
||||||
|
|
||||||
|
static {
|
||||||
|
filter.add(new AbilityPredicate(FlyingAbility.class));
|
||||||
|
filter.add(new ControllerPredicate(TargetController.YOU));
|
||||||
|
filter2.add(Predicates.or(
|
||||||
|
new CardTypePredicate(CardType.ARTIFACT),
|
||||||
|
new CardTypePredicate(CardType.ENCHANTMENT)
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
public AlelaArtfulProvocateur(UUID ownerId, CardSetInfo setInfo) {
|
||||||
|
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{W}{U}{B}");
|
||||||
|
|
||||||
|
this.addSuperType(SuperType.LEGENDARY);
|
||||||
|
this.subtype.add(SubType.FAERIE);
|
||||||
|
this.subtype.add(SubType.WARLOCK);
|
||||||
|
this.power = new MageInt(2);
|
||||||
|
this.toughness = new MageInt(3);
|
||||||
|
|
||||||
|
// Flying
|
||||||
|
this.addAbility(FlyingAbility.getInstance());
|
||||||
|
|
||||||
|
// Deathtouch
|
||||||
|
this.addAbility(DeathtouchAbility.getInstance());
|
||||||
|
|
||||||
|
// Lifelink
|
||||||
|
this.addAbility(LifelinkAbility.getInstance());
|
||||||
|
|
||||||
|
// Other creatures you control with flying get +1/+0.
|
||||||
|
this.addAbility(new SimpleStaticAbility(new BoostAllEffect(
|
||||||
|
1, 0, Duration.WhileOnBattlefield, filter, true
|
||||||
|
)));
|
||||||
|
|
||||||
|
// Whenever you cast an artifact or enchantment spell, create a 1/1 blue Faerie creature token with flying.
|
||||||
|
this.addAbility(new SpellCastControllerTriggeredAbility(
|
||||||
|
new CreateTokenEffect(new FaerieToken()), filter2, false
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
private AlelaArtfulProvocateur(final AlelaArtfulProvocateur card) {
|
||||||
|
super(card);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public AlelaArtfulProvocateur copy() {
|
||||||
|
return new AlelaArtfulProvocateur(this);
|
||||||
|
}
|
||||||
|
}
|
61
Mage.Sets/src/mage/cards/a/AllThatGlitters.java
Normal file
61
Mage.Sets/src/mage/cards/a/AllThatGlitters.java
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
package mage.cards.a;
|
||||||
|
|
||||||
|
import mage.abilities.Ability;
|
||||||
|
import mage.abilities.common.SimpleStaticAbility;
|
||||||
|
import mage.abilities.dynamicvalue.DynamicValue;
|
||||||
|
import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount;
|
||||||
|
import mage.abilities.effects.common.AttachEffect;
|
||||||
|
import mage.abilities.effects.common.continuous.BoostEnchantedEffect;
|
||||||
|
import mage.abilities.keyword.EnchantAbility;
|
||||||
|
import mage.cards.CardImpl;
|
||||||
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.constants.*;
|
||||||
|
import mage.filter.FilterPermanent;
|
||||||
|
import mage.filter.common.FilterArtifactOrEnchantmentPermanent;
|
||||||
|
import mage.filter.predicate.permanent.ControllerPredicate;
|
||||||
|
import mage.target.TargetPermanent;
|
||||||
|
import mage.target.common.TargetCreaturePermanent;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author TheElk801
|
||||||
|
*/
|
||||||
|
public final class AllThatGlitters extends CardImpl {
|
||||||
|
|
||||||
|
private static final FilterPermanent filter = new FilterArtifactOrEnchantmentPermanent();
|
||||||
|
|
||||||
|
static {
|
||||||
|
filter.add(new ControllerPredicate(TargetController.YOU));
|
||||||
|
}
|
||||||
|
|
||||||
|
private static final DynamicValue xValue = new PermanentsOnBattlefieldCount(filter);
|
||||||
|
|
||||||
|
public AllThatGlitters(UUID ownerId, CardSetInfo setInfo) {
|
||||||
|
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{W}");
|
||||||
|
|
||||||
|
this.subtype.add(SubType.AURA);
|
||||||
|
|
||||||
|
// Enchant creature
|
||||||
|
TargetPermanent auraTarget = new TargetCreaturePermanent();
|
||||||
|
this.getSpellAbility().addTarget(auraTarget);
|
||||||
|
this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature));
|
||||||
|
Ability ability = new EnchantAbility(auraTarget.getTargetName());
|
||||||
|
this.addAbility(ability);
|
||||||
|
|
||||||
|
// Enchanted creature gets +1/+1 for each artifact and/or enchantment you control.
|
||||||
|
this.addAbility(new SimpleStaticAbility(new BoostEnchantedEffect(
|
||||||
|
xValue, xValue, Duration.WhileOnBattlefield
|
||||||
|
).setText("enchanted creature gets +1/+1 for each artifact and/or enchantment you control")));
|
||||||
|
}
|
||||||
|
|
||||||
|
private AllThatGlitters(final AllThatGlitters card) {
|
||||||
|
super(card);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public AllThatGlitters copy() {
|
||||||
|
return new AllThatGlitters(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// someBODY
|
54
Mage.Sets/src/mage/cards/a/ArcanistsOwl.java
Normal file
54
Mage.Sets/src/mage/cards/a/ArcanistsOwl.java
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
package mage.cards.a;
|
||||||
|
|
||||||
|
import mage.MageInt;
|
||||||
|
import mage.abilities.dynamicvalue.common.StaticValue;
|
||||||
|
import mage.abilities.effects.common.LookLibraryAndPickControllerEffect;
|
||||||
|
import mage.abilities.keyword.FlyingAbility;
|
||||||
|
import mage.cards.CardImpl;
|
||||||
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.constants.CardType;
|
||||||
|
import mage.constants.SubType;
|
||||||
|
import mage.constants.Zone;
|
||||||
|
import mage.filter.FilterCard;
|
||||||
|
import mage.filter.common.FilterArtifactOrEnchantmentCard;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author TheElk801
|
||||||
|
*/
|
||||||
|
public final class ArcanistsOwl extends CardImpl {
|
||||||
|
|
||||||
|
private static final FilterCard filter = new FilterArtifactOrEnchantmentCard();
|
||||||
|
|
||||||
|
public ArcanistsOwl(UUID ownerId, CardSetInfo setInfo) {
|
||||||
|
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{W/U}{W/U}{W/U}{W/U}");
|
||||||
|
|
||||||
|
this.subtype.add(SubType.BIRD);
|
||||||
|
this.power = new MageInt(3);
|
||||||
|
this.toughness = new MageInt(3);
|
||||||
|
|
||||||
|
// Flying
|
||||||
|
this.addAbility(FlyingAbility.getInstance());
|
||||||
|
|
||||||
|
// When Arcanist's Owl enters the battlefield, look at the top four cards of your library. You may reveal an artifact or enchantment card from among them and put it into your hand. Put the rest on the bottom of your library in a random order.
|
||||||
|
this.getSpellAbility().addEffect(
|
||||||
|
new LookLibraryAndPickControllerEffect(
|
||||||
|
new StaticValue(4), false, new StaticValue(1), filter,
|
||||||
|
Zone.LIBRARY, false, true, false, Zone.HAND,
|
||||||
|
true, false, false
|
||||||
|
).setBackInRandomOrder(true).setText("Look at the top four cards of your library. " +
|
||||||
|
"You may reveal an artifact or enchantment from among them and put it into your hand. " +
|
||||||
|
"Put the rest on the bottom of your library in a random order.")
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
private ArcanistsOwl(final ArcanistsOwl card) {
|
||||||
|
super(card);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ArcanistsOwl copy() {
|
||||||
|
return new ArcanistsOwl(this);
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,6 +1,7 @@
|
||||||
|
|
||||||
package mage.cards.a;
|
package mage.cards.a;
|
||||||
|
|
||||||
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.TriggeredAbilityImpl;
|
import mage.abilities.TriggeredAbilityImpl;
|
||||||
import mage.abilities.common.SimpleStaticAbility;
|
import mage.abilities.common.SimpleStaticAbility;
|
||||||
import mage.abilities.costs.mana.GenericManaCost;
|
import mage.abilities.costs.mana.GenericManaCost;
|
||||||
|
@ -32,10 +33,15 @@ public final class AvacynsCollar extends CardImpl {
|
||||||
this.subtype.add(SubType.EQUIPMENT);
|
this.subtype.add(SubType.EQUIPMENT);
|
||||||
|
|
||||||
// Equipped creature gets +1/+0 and has vigilance.
|
// Equipped creature gets +1/+0 and has vigilance.
|
||||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEquippedEffect(1, 0)));
|
Ability ability = new SimpleStaticAbility(new BoostEquippedEffect(1, 0));
|
||||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(VigilanceAbility.getInstance(), AttachmentType.EQUIPMENT)));
|
ability.addEffect(new GainAbilityAttachedEffect(
|
||||||
|
VigilanceAbility.getInstance(), AttachmentType.EQUIPMENT).setText("and has vigilance")
|
||||||
|
);
|
||||||
|
this.addAbility(ability);
|
||||||
|
|
||||||
// Whenever equipped creature dies, if it was a Human, create a 1/1 white Spirit creature token with flying.
|
// Whenever equipped creature dies, if it was a Human, create a 1/1 white Spirit creature token with flying.
|
||||||
this.addAbility(new AvacynsCollarTriggeredAbility());
|
this.addAbility(new AvacynsCollarTriggeredAbility());
|
||||||
|
|
||||||
// Equip {2}
|
// Equip {2}
|
||||||
this.addAbility(new EquipAbility(Outcome.BoostCreature, new GenericManaCost(2)));
|
this.addAbility(new EquipAbility(Outcome.BoostCreature, new GenericManaCost(2)));
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,7 +5,7 @@ import mage.abilities.effects.common.DestroyTargetEffect;
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.game.permanent.token.custom.FoodToken;
|
import mage.game.permanent.token.FoodToken;
|
||||||
import mage.target.common.TargetCreaturePermanent;
|
import mage.target.common.TargetCreaturePermanent;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
49
Mage.Sets/src/mage/cards/b/BelleOfTheBrawl.java
Normal file
49
Mage.Sets/src/mage/cards/b/BelleOfTheBrawl.java
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
package mage.cards.b;
|
||||||
|
|
||||||
|
import mage.MageInt;
|
||||||
|
import mage.abilities.common.AttacksTriggeredAbility;
|
||||||
|
import mage.abilities.effects.common.continuous.BoostControlledEffect;
|
||||||
|
import mage.abilities.keyword.MenaceAbility;
|
||||||
|
import mage.cards.CardImpl;
|
||||||
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.constants.CardType;
|
||||||
|
import mage.constants.Duration;
|
||||||
|
import mage.constants.SubType;
|
||||||
|
import mage.filter.common.FilterCreaturePermanent;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author TheElk801
|
||||||
|
*/
|
||||||
|
public final class BelleOfTheBrawl extends CardImpl {
|
||||||
|
|
||||||
|
private static final FilterCreaturePermanent filter
|
||||||
|
= new FilterCreaturePermanent(SubType.KNIGHT, "Knights");
|
||||||
|
|
||||||
|
public BelleOfTheBrawl(UUID ownerId, CardSetInfo setInfo) {
|
||||||
|
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}");
|
||||||
|
|
||||||
|
this.subtype.add(SubType.HUMAN);
|
||||||
|
this.subtype.add(SubType.KNIGHT);
|
||||||
|
this.power = new MageInt(3);
|
||||||
|
this.toughness = new MageInt(2);
|
||||||
|
|
||||||
|
// Menace
|
||||||
|
this.addAbility(new MenaceAbility());
|
||||||
|
|
||||||
|
// Whenever Belle of the Brawl attacks, other Knights you control get +1/+0 until end of turn.
|
||||||
|
this.addAbility(new AttacksTriggeredAbility(new BoostControlledEffect(
|
||||||
|
1, 0, Duration.EndOfTurn, filter, true
|
||||||
|
), false));
|
||||||
|
}
|
||||||
|
|
||||||
|
private BelleOfTheBrawl(final BelleOfTheBrawl card) {
|
||||||
|
super(card);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BelleOfTheBrawl copy() {
|
||||||
|
return new BelleOfTheBrawl(this);
|
||||||
|
}
|
||||||
|
}
|
|
@ -2,6 +2,8 @@
|
||||||
package mage.cards.b;
|
package mage.cards.b;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.common.SimpleStaticAbility;
|
import mage.abilities.common.SimpleStaticAbility;
|
||||||
import mage.abilities.costs.mana.GenericManaCost;
|
import mage.abilities.costs.mana.GenericManaCost;
|
||||||
import mage.abilities.effects.common.continuous.BoostEquippedEffect;
|
import mage.abilities.effects.common.continuous.BoostEquippedEffect;
|
||||||
|
@ -23,8 +25,13 @@ public final class BlightSickle extends CardImpl {
|
||||||
this.subtype.add(SubType.EQUIPMENT);
|
this.subtype.add(SubType.EQUIPMENT);
|
||||||
|
|
||||||
// Equipped creature gets +1/+0 and has wither.
|
// Equipped creature gets +1/+0 and has wither.
|
||||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEquippedEffect(1, 0)));
|
Ability ability = new SimpleStaticAbility(new BoostEquippedEffect(1, 0));
|
||||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(WitherAbility.getInstance(), AttachmentType.EQUIPMENT)));
|
ability.addEffect(new GainAbilityAttachedEffect(
|
||||||
|
WitherAbility.getInstance(), AttachmentType.EQUIPMENT).setText("and has wither")
|
||||||
|
);
|
||||||
|
this.addAbility(ability);
|
||||||
|
|
||||||
|
// Equip {2}
|
||||||
this.addAbility(new EquipAbility(Outcome.BoostCreature, new GenericManaCost(2)));
|
this.addAbility(new EquipAbility(Outcome.BoostCreature, new GenericManaCost(2)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,8 +4,8 @@ import mage.abilities.Ability;
|
||||||
import mage.abilities.common.ActivateAsSorceryActivatedAbility;
|
import mage.abilities.common.ActivateAsSorceryActivatedAbility;
|
||||||
import mage.abilities.common.SimpleStaticAbility;
|
import mage.abilities.common.SimpleStaticAbility;
|
||||||
import mage.abilities.costs.mana.GenericManaCost;
|
import mage.abilities.costs.mana.GenericManaCost;
|
||||||
import mage.abilities.effects.OneShotEffect;
|
|
||||||
import mage.abilities.effects.RestrictionEffect;
|
import mage.abilities.effects.RestrictionEffect;
|
||||||
|
import mage.abilities.effects.common.AttachEffect;
|
||||||
import mage.abilities.effects.common.combat.AttacksIfAbleAttachedEffect;
|
import mage.abilities.effects.common.combat.AttacksIfAbleAttachedEffect;
|
||||||
import mage.abilities.effects.common.continuous.BoostEquippedEffect;
|
import mage.abilities.effects.common.continuous.BoostEquippedEffect;
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
|
@ -17,8 +17,6 @@ import mage.target.common.TargetOpponentsCreaturePermanent;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
import static mage.constants.Outcome.Benefit;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author TheElk801
|
* @author TheElk801
|
||||||
*/
|
*/
|
||||||
|
@ -39,7 +37,10 @@ public final class BloodthirstyBlade extends CardImpl {
|
||||||
|
|
||||||
// {1}: Attach Bloodthirsty Blade to target creature an opponent controls. Active this ability only any time you could cast a sorcery.
|
// {1}: Attach Bloodthirsty Blade to target creature an opponent controls. Active this ability only any time you could cast a sorcery.
|
||||||
ability = new ActivateAsSorceryActivatedAbility(
|
ability = new ActivateAsSorceryActivatedAbility(
|
||||||
Zone.BATTLEFIELD, new BloodthirstyBladeEffect(), new GenericManaCost(1)
|
Zone.BATTLEFIELD,
|
||||||
|
new AttachEffect(
|
||||||
|
Outcome.Benefit, "Attach {this} to target creature an opponent controls"
|
||||||
|
), new GenericManaCost(1)
|
||||||
);
|
);
|
||||||
ability.addTarget(new TargetOpponentsCreaturePermanent());
|
ability.addTarget(new TargetOpponentsCreaturePermanent());
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
|
@ -86,30 +87,3 @@ class BloodthirstyBladeAttackEffect extends RestrictionEffect {
|
||||||
return !defenderId.equals(source.getControllerId());
|
return !defenderId.equals(source.getControllerId());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class BloodthirstyBladeEffect extends OneShotEffect {
|
|
||||||
|
|
||||||
BloodthirstyBladeEffect() {
|
|
||||||
super(Benefit);
|
|
||||||
staticText = "attach {this} to target creature an opponent controls";
|
|
||||||
}
|
|
||||||
|
|
||||||
private BloodthirstyBladeEffect(final BloodthirstyBladeEffect effect) {
|
|
||||||
super(effect);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public BloodthirstyBladeEffect copy() {
|
|
||||||
return new BloodthirstyBladeEffect(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean apply(Game game, Ability source) {
|
|
||||||
Permanent permanent = game.getPermanent(source.getSourceId());
|
|
||||||
if (permanent == null) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
permanent.attachTo(source.getFirstTarget(), game);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
55
Mage.Sets/src/mage/cards/c/CorridorMonitor.java
Normal file
55
Mage.Sets/src/mage/cards/c/CorridorMonitor.java
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
package mage.cards.c;
|
||||||
|
|
||||||
|
import mage.MageInt;
|
||||||
|
import mage.abilities.Ability;
|
||||||
|
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||||
|
import mage.abilities.effects.common.UntapTargetEffect;
|
||||||
|
import mage.cards.CardImpl;
|
||||||
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.constants.CardType;
|
||||||
|
import mage.constants.SubType;
|
||||||
|
import mage.filter.FilterPermanent;
|
||||||
|
import mage.filter.common.FilterControlledPermanent;
|
||||||
|
import mage.filter.predicate.Predicates;
|
||||||
|
import mage.filter.predicate.mageobject.CardTypePredicate;
|
||||||
|
import mage.target.TargetPermanent;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author TheElk801
|
||||||
|
*/
|
||||||
|
public final class CorridorMonitor extends CardImpl {
|
||||||
|
|
||||||
|
private static final FilterPermanent filter
|
||||||
|
= new FilterControlledPermanent("artifact or creature you control");
|
||||||
|
|
||||||
|
static {
|
||||||
|
filter.add(Predicates.or(
|
||||||
|
new CardTypePredicate(CardType.ARTIFACT),
|
||||||
|
new CardTypePredicate(CardType.CREATURE)
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
public CorridorMonitor(UUID ownerId, CardSetInfo setInfo) {
|
||||||
|
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{1}{U}");
|
||||||
|
|
||||||
|
this.subtype.add(SubType.CONSTRUCT);
|
||||||
|
this.power = new MageInt(1);
|
||||||
|
this.toughness = new MageInt(4);
|
||||||
|
|
||||||
|
// When Corridor Monitor enters the battlefield, untap target artifact or creature you control.
|
||||||
|
Ability ability = new EntersBattlefieldTriggeredAbility(new UntapTargetEffect());
|
||||||
|
ability.addTarget(new TargetPermanent(filter));
|
||||||
|
this.addAbility(ability);
|
||||||
|
}
|
||||||
|
|
||||||
|
private CorridorMonitor(final CorridorMonitor card) {
|
||||||
|
super(card);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CorridorMonitor copy() {
|
||||||
|
return new CorridorMonitor(this);
|
||||||
|
}
|
||||||
|
}
|
|
@ -31,6 +31,7 @@ public final class CrystalSlipper extends CardImpl {
|
||||||
ability.addEffect(new GainAbilityAttachedEffect(
|
ability.addEffect(new GainAbilityAttachedEffect(
|
||||||
HasteAbility.getInstance(), AttachmentType.EQUIPMENT).setText("and has haste")
|
HasteAbility.getInstance(), AttachmentType.EQUIPMENT).setText("and has haste")
|
||||||
);
|
);
|
||||||
|
this.addAbility(ability);
|
||||||
|
|
||||||
// Equip {1}
|
// Equip {1}
|
||||||
this.addAbility(new EquipAbility(Outcome.BoostCreature, new GenericManaCost(1)));
|
this.addAbility(new EquipAbility(Outcome.BoostCreature, new GenericManaCost(1)));
|
||||||
|
|
49
Mage.Sets/src/mage/cards/e/EmberethPaladin.java
Normal file
49
Mage.Sets/src/mage/cards/e/EmberethPaladin.java
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
package mage.cards.e;
|
||||||
|
|
||||||
|
import mage.MageInt;
|
||||||
|
import mage.abilities.common.EntersBattlefieldAbility;
|
||||||
|
import mage.abilities.condition.common.AdamantCondition;
|
||||||
|
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
|
||||||
|
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 mage.watchers.common.ManaSpentToCastWatcher;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author TheElk801
|
||||||
|
*/
|
||||||
|
public final class EmberethPaladin extends CardImpl {
|
||||||
|
|
||||||
|
public EmberethPaladin(UUID ownerId, CardSetInfo setInfo) {
|
||||||
|
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{R}");
|
||||||
|
|
||||||
|
this.subtype.add(SubType.HUMAN);
|
||||||
|
this.subtype.add(SubType.KNIGHT);
|
||||||
|
this.power = new MageInt(4);
|
||||||
|
this.toughness = new MageInt(1);
|
||||||
|
|
||||||
|
// Haste
|
||||||
|
this.addAbility(HasteAbility.getInstance());
|
||||||
|
|
||||||
|
// Adamant — If at least three red mana was spent to cast this spell, Embereth Paladin enters the battlefield with a +1/+1 counter on it.
|
||||||
|
this.addAbility(new EntersBattlefieldAbility(
|
||||||
|
new AddCountersSourceEffect(CounterType.P1P1.createInstance()), false, AdamantCondition.RED,
|
||||||
|
"<br><i>Adamant</i> — If at least three red mana was spent to cast this spell, " +
|
||||||
|
"{this} enters the battlefield with a +1/+1 counter on it.", ""
|
||||||
|
), new ManaSpentToCastWatcher());
|
||||||
|
}
|
||||||
|
|
||||||
|
private EmberethPaladin(final EmberethPaladin card) {
|
||||||
|
super(card);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public EmberethPaladin copy() {
|
||||||
|
return new EmberethPaladin(this);
|
||||||
|
}
|
||||||
|
}
|
40
Mage.Sets/src/mage/cards/e/EmberethShieldbreaker.java
Normal file
40
Mage.Sets/src/mage/cards/e/EmberethShieldbreaker.java
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
package mage.cards.e;
|
||||||
|
|
||||||
|
import mage.MageInt;
|
||||||
|
import mage.abilities.effects.common.DestroyTargetEffect;
|
||||||
|
import mage.cards.AdventureCard;
|
||||||
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.constants.CardType;
|
||||||
|
import mage.constants.SubType;
|
||||||
|
import mage.target.common.TargetArtifactPermanent;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author TheElk801
|
||||||
|
*/
|
||||||
|
public final class EmberethShieldbreaker extends AdventureCard {
|
||||||
|
|
||||||
|
public EmberethShieldbreaker(UUID ownerId, CardSetInfo setInfo) {
|
||||||
|
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, new CardType[]{CardType.SORCERY}, "{1}{R}", "Battle Display", "{R}");
|
||||||
|
|
||||||
|
this.subtype.add(SubType.HUMAN);
|
||||||
|
this.subtype.add(SubType.KNIGHT);
|
||||||
|
this.power = new MageInt(2);
|
||||||
|
this.toughness = new MageInt(1);
|
||||||
|
|
||||||
|
// Battle Display
|
||||||
|
// Destroy target artifact.
|
||||||
|
this.getAdventureSpellAbility().addEffect(new DestroyTargetEffect());
|
||||||
|
this.getAdventureSpellAbility().addTarget(new TargetArtifactPermanent());
|
||||||
|
}
|
||||||
|
|
||||||
|
private EmberethShieldbreaker(final EmberethShieldbreaker card) {
|
||||||
|
super(card);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public EmberethShieldbreaker copy() {
|
||||||
|
return new EmberethShieldbreaker(this);
|
||||||
|
}
|
||||||
|
}
|
61
Mage.Sets/src/mage/cards/e/EmberethSkyblazer.java
Normal file
61
Mage.Sets/src/mage/cards/e/EmberethSkyblazer.java
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
package mage.cards.e;
|
||||||
|
|
||||||
|
import mage.MageInt;
|
||||||
|
import mage.abilities.common.AttacksTriggeredAbility;
|
||||||
|
import mage.abilities.common.SimpleStaticAbility;
|
||||||
|
import mage.abilities.condition.common.MyTurnCondition;
|
||||||
|
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||||
|
import mage.abilities.decorator.ConditionalContinuousEffect;
|
||||||
|
import mage.abilities.dynamicvalue.common.OpponentsCount;
|
||||||
|
import mage.abilities.dynamicvalue.common.StaticValue;
|
||||||
|
import mage.abilities.effects.common.DoIfCostPaid;
|
||||||
|
import mage.abilities.effects.common.continuous.BoostControlledEffect;
|
||||||
|
import mage.abilities.effects.common.continuous.GainAbilitySourceEffect;
|
||||||
|
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.filter.StaticFilters;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author TheElk801
|
||||||
|
*/
|
||||||
|
public final class EmberethSkyblazer extends CardImpl {
|
||||||
|
|
||||||
|
public EmberethSkyblazer(UUID ownerId, CardSetInfo setInfo) {
|
||||||
|
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{R}");
|
||||||
|
|
||||||
|
this.subtype.add(SubType.HUMAN);
|
||||||
|
this.subtype.add(SubType.KNIGHT);
|
||||||
|
this.power = new MageInt(4);
|
||||||
|
this.toughness = new MageInt(3);
|
||||||
|
|
||||||
|
// As long as it's your turn, Embereth Skyblazer has flying.
|
||||||
|
this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect(
|
||||||
|
new GainAbilitySourceEffect(FlyingAbility.getInstance(), Duration.WhileOnBattlefield),
|
||||||
|
MyTurnCondition.instance, "As long as it's your turn, {this} has flying."
|
||||||
|
)));
|
||||||
|
|
||||||
|
// Whenever Embereth Skyblazer attacks, you may pay {2}{R}. If you do, creatures you control get +X/+0 until end of turn, where X is the number of opponents you have.
|
||||||
|
this.addAbility(new AttacksTriggeredAbility(new DoIfCostPaid(
|
||||||
|
new BoostControlledEffect(
|
||||||
|
OpponentsCount.instance, StaticValue.getZeroValue(), Duration.EndOfTurn,
|
||||||
|
StaticFilters.FILTER_PERMANENT_CREATURE, false, true
|
||||||
|
).setText("creatures you control get +X/+0 until end of turn, where X is the number of opponents you have"),
|
||||||
|
new ManaCostsImpl("{2}{R}")
|
||||||
|
), false));
|
||||||
|
}
|
||||||
|
|
||||||
|
private EmberethSkyblazer(final EmberethSkyblazer card) {
|
||||||
|
super(card);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public EmberethSkyblazer copy() {
|
||||||
|
return new EmberethSkyblazer(this);
|
||||||
|
}
|
||||||
|
}
|
82
Mage.Sets/src/mage/cards/e/EyeCollector.java
Normal file
82
Mage.Sets/src/mage/cards/e/EyeCollector.java
Normal file
|
@ -0,0 +1,82 @@
|
||||||
|
package mage.cards.e;
|
||||||
|
|
||||||
|
import mage.MageInt;
|
||||||
|
import mage.abilities.Ability;
|
||||||
|
import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility;
|
||||||
|
import mage.abilities.effects.OneShotEffect;
|
||||||
|
import mage.abilities.keyword.FlyingAbility;
|
||||||
|
import mage.cards.CardImpl;
|
||||||
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.cards.CardsImpl;
|
||||||
|
import mage.constants.CardType;
|
||||||
|
import mage.constants.Outcome;
|
||||||
|
import mage.constants.SubType;
|
||||||
|
import mage.constants.Zone;
|
||||||
|
import mage.game.Game;
|
||||||
|
import mage.players.Player;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author TheElk801
|
||||||
|
*/
|
||||||
|
public final class EyeCollector extends CardImpl {
|
||||||
|
|
||||||
|
public EyeCollector(UUID ownerId, CardSetInfo setInfo) {
|
||||||
|
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{B}");
|
||||||
|
|
||||||
|
this.subtype.add(SubType.FAERIE);
|
||||||
|
this.power = new MageInt(1);
|
||||||
|
this.toughness = new MageInt(1);
|
||||||
|
|
||||||
|
// Flying
|
||||||
|
this.addAbility(FlyingAbility.getInstance());
|
||||||
|
|
||||||
|
// Whenever Eye Collector deals combat damage to a player, each player puts the top card of their library into their graveyard.
|
||||||
|
this.addAbility(new DealsCombatDamageToAPlayerTriggeredAbility(new EyeCollectorEffect(), false));
|
||||||
|
}
|
||||||
|
|
||||||
|
private EyeCollector(final EyeCollector card) {
|
||||||
|
super(card);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public EyeCollector copy() {
|
||||||
|
return new EyeCollector(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class EyeCollectorEffect extends OneShotEffect {
|
||||||
|
|
||||||
|
EyeCollectorEffect() {
|
||||||
|
super(Outcome.Benefit);
|
||||||
|
staticText = "each player puts the top card of their library into their graveyard";
|
||||||
|
}
|
||||||
|
|
||||||
|
private EyeCollectorEffect(final EyeCollectorEffect effect) {
|
||||||
|
super(effect);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public EyeCollectorEffect copy() {
|
||||||
|
return new EyeCollectorEffect(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean apply(Game game, Ability source) {
|
||||||
|
Player controller = game.getPlayer(source.getControllerId());
|
||||||
|
if (controller == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return controller.moveCards(new CardsImpl(game.getState()
|
||||||
|
.getPlayersInRange(controller.getId(), game)
|
||||||
|
.stream()
|
||||||
|
.map(game::getPlayer)
|
||||||
|
.filter(player -> player != null)
|
||||||
|
.map(Player::getLibrary)
|
||||||
|
.map(library -> library.getFromTop(game))
|
||||||
|
.collect(Collectors.toSet())
|
||||||
|
), Zone.GRAVEYARD, source, game);
|
||||||
|
}
|
||||||
|
}
|
47
Mage.Sets/src/mage/cards/f/FaerieFormation.java
Normal file
47
Mage.Sets/src/mage/cards/f/FaerieFormation.java
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
package mage.cards.f;
|
||||||
|
|
||||||
|
import mage.MageInt;
|
||||||
|
import mage.abilities.Ability;
|
||||||
|
import mage.abilities.common.SimpleActivatedAbility;
|
||||||
|
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||||
|
import mage.abilities.effects.common.CreateTokenEffect;
|
||||||
|
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||||
|
import mage.abilities.keyword.FlyingAbility;
|
||||||
|
import mage.cards.CardImpl;
|
||||||
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.constants.CardType;
|
||||||
|
import mage.constants.SubType;
|
||||||
|
import mage.game.permanent.token.FaerieToken;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author TheElk801
|
||||||
|
*/
|
||||||
|
public final class FaerieFormation extends CardImpl {
|
||||||
|
|
||||||
|
public FaerieFormation(UUID ownerId, CardSetInfo setInfo) {
|
||||||
|
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{U}");
|
||||||
|
|
||||||
|
this.subtype.add(SubType.FAERIE);
|
||||||
|
this.power = new MageInt(5);
|
||||||
|
this.toughness = new MageInt(4);
|
||||||
|
|
||||||
|
// Flying
|
||||||
|
this.addAbility(FlyingAbility.getInstance());
|
||||||
|
|
||||||
|
// {3}{U}: Create a 1/1 blue Faerie creature token with flying. Draw a card.
|
||||||
|
Ability ability = new SimpleActivatedAbility(new CreateTokenEffect(new FaerieToken()), new ManaCostsImpl("{3}{U}"));
|
||||||
|
ability.addEffect(new DrawCardSourceControllerEffect(1).setText("Draw a card"));
|
||||||
|
this.addAbility(ability);
|
||||||
|
}
|
||||||
|
|
||||||
|
private FaerieFormation(final FaerieFormation card) {
|
||||||
|
super(card);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public FaerieFormation copy() {
|
||||||
|
return new FaerieFormation(this);
|
||||||
|
}
|
||||||
|
}
|
113
Mage.Sets/src/mage/cards/f/FlaxenIntruder.java
Normal file
113
Mage.Sets/src/mage/cards/f/FlaxenIntruder.java
Normal file
|
@ -0,0 +1,113 @@
|
||||||
|
package mage.cards.f;
|
||||||
|
|
||||||
|
import mage.MageInt;
|
||||||
|
import mage.abilities.Ability;
|
||||||
|
import mage.abilities.DelayedTriggeredAbility;
|
||||||
|
import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility;
|
||||||
|
import mage.abilities.costs.common.SacrificeSourceCost;
|
||||||
|
import mage.abilities.effects.OneShotEffect;
|
||||||
|
import mage.abilities.effects.common.CreateTokenEffect;
|
||||||
|
import mage.abilities.effects.common.DestroyTargetEffect;
|
||||||
|
import mage.abilities.effects.common.DoIfCostPaid;
|
||||||
|
import mage.abilities.effects.common.SendOptionUsedEventEffect;
|
||||||
|
import mage.cards.AdventureCard;
|
||||||
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.constants.CardType;
|
||||||
|
import mage.constants.Duration;
|
||||||
|
import mage.constants.Outcome;
|
||||||
|
import mage.constants.SubType;
|
||||||
|
import mage.filter.StaticFilters;
|
||||||
|
import mage.game.Game;
|
||||||
|
import mage.game.events.GameEvent;
|
||||||
|
import mage.game.permanent.token.BearToken;
|
||||||
|
import mage.target.TargetPermanent;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author TheElk801
|
||||||
|
*/
|
||||||
|
public final class FlaxenIntruder extends AdventureCard {
|
||||||
|
|
||||||
|
public FlaxenIntruder(UUID ownerId, CardSetInfo setInfo) {
|
||||||
|
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, new CardType[]{CardType.SORCERY}, "{G}", "Welcome Home", "{5}{G}{G}");
|
||||||
|
|
||||||
|
this.subtype.add(SubType.HUMAN);
|
||||||
|
this.subtype.add(SubType.BERSERKER);
|
||||||
|
this.power = new MageInt(1);
|
||||||
|
this.toughness = new MageInt(2);
|
||||||
|
|
||||||
|
// Whenever Flaxen Intruder deals combat damage to a player, you may sacrifice it. When you do, destroy target artifact or enchantment.
|
||||||
|
this.addAbility(new DealsCombatDamageToAPlayerTriggeredAbility(new DoIfCostPaid(
|
||||||
|
new FlaxenIntruderCreateReflexiveTriggerEffect(), new SacrificeSourceCost()
|
||||||
|
).setText("you may sacrifice it. When you do, destroy target artifact or enchantment."), false));
|
||||||
|
|
||||||
|
// Welcome Home
|
||||||
|
// Create three 2/2 green Bear creature tokens.
|
||||||
|
this.getAdventureSpellAbility().addEffect(new CreateTokenEffect(new BearToken(), 3));
|
||||||
|
}
|
||||||
|
|
||||||
|
private FlaxenIntruder(final FlaxenIntruder card) {
|
||||||
|
super(card);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public FlaxenIntruder copy() {
|
||||||
|
return new FlaxenIntruder(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class FlaxenIntruderCreateReflexiveTriggerEffect extends OneShotEffect {
|
||||||
|
|
||||||
|
FlaxenIntruderCreateReflexiveTriggerEffect() {
|
||||||
|
super(Outcome.Benefit);
|
||||||
|
}
|
||||||
|
|
||||||
|
private FlaxenIntruderCreateReflexiveTriggerEffect(final FlaxenIntruderCreateReflexiveTriggerEffect effect) {
|
||||||
|
super(effect);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public FlaxenIntruderCreateReflexiveTriggerEffect copy() {
|
||||||
|
return new FlaxenIntruderCreateReflexiveTriggerEffect(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean apply(Game game, Ability source) {
|
||||||
|
game.addDelayedTriggeredAbility(new FlaxenIntruderReflexiveTriggeredAbility(), source);
|
||||||
|
return new SendOptionUsedEventEffect().apply(game, source);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class FlaxenIntruderReflexiveTriggeredAbility extends DelayedTriggeredAbility {
|
||||||
|
|
||||||
|
FlaxenIntruderReflexiveTriggeredAbility() {
|
||||||
|
super(new DestroyTargetEffect(), Duration.OneUse, true);
|
||||||
|
this.addTarget(new TargetPermanent(StaticFilters.FILTER_PERMANENT_ARTIFACT_OR_ENCHANTMENT));
|
||||||
|
}
|
||||||
|
|
||||||
|
private FlaxenIntruderReflexiveTriggeredAbility(final FlaxenIntruderReflexiveTriggeredAbility ability) {
|
||||||
|
super(ability);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public FlaxenIntruderReflexiveTriggeredAbility copy() {
|
||||||
|
return new FlaxenIntruderReflexiveTriggeredAbility(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean checkEventType(GameEvent event, Game game) {
|
||||||
|
return event.getType() == GameEvent.EventType.OPTION_USED;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean checkTrigger(GameEvent event, Game game) {
|
||||||
|
return event.getPlayerId().equals(this.getControllerId())
|
||||||
|
&& event.getSourceId().equals(this.getSourceId());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getRule() {
|
||||||
|
return "When you do, destroy target artifact or enchantment.";
|
||||||
|
}
|
||||||
|
}
|
44
Mage.Sets/src/mage/cards/f/FoulmireKnight.java
Normal file
44
Mage.Sets/src/mage/cards/f/FoulmireKnight.java
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
package mage.cards.f;
|
||||||
|
|
||||||
|
import mage.MageInt;
|
||||||
|
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||||
|
import mage.abilities.effects.common.LoseLifeSourceControllerEffect;
|
||||||
|
import mage.abilities.keyword.DeathtouchAbility;
|
||||||
|
import mage.cards.AdventureCard;
|
||||||
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.constants.CardType;
|
||||||
|
import mage.constants.SubType;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author TheElk801
|
||||||
|
*/
|
||||||
|
public final class FoulmireKnight extends AdventureCard {
|
||||||
|
|
||||||
|
public FoulmireKnight(UUID ownerId, CardSetInfo setInfo) {
|
||||||
|
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, new CardType[]{CardType.INSTANT}, "{B}", "Profane Insight", "{2}{B}");
|
||||||
|
|
||||||
|
this.subtype.add(SubType.ZOMBIE);
|
||||||
|
this.subtype.add(SubType.KNIGHT);
|
||||||
|
this.power = new MageInt(1);
|
||||||
|
this.toughness = new MageInt(1);
|
||||||
|
|
||||||
|
// Deathtouch
|
||||||
|
this.addAbility(DeathtouchAbility.getInstance());
|
||||||
|
|
||||||
|
// Profane Insight
|
||||||
|
// You draw a card and you lose 1 life.
|
||||||
|
this.getAdventureSpellAbility().addEffect(new DrawCardSourceControllerEffect(1).setText("You draw a card and"));
|
||||||
|
this.getAdventureSpellAbility().addEffect(new LoseLifeSourceControllerEffect(1));
|
||||||
|
}
|
||||||
|
|
||||||
|
private FoulmireKnight(final FoulmireKnight card) {
|
||||||
|
super(card);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public FoulmireKnight copy() {
|
||||||
|
return new FoulmireKnight(this);
|
||||||
|
}
|
||||||
|
}
|
54
Mage.Sets/src/mage/cards/g/GarrukCursedHuntsman.java
Normal file
54
Mage.Sets/src/mage/cards/g/GarrukCursedHuntsman.java
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
package mage.cards.g;
|
||||||
|
|
||||||
|
import mage.abilities.Ability;
|
||||||
|
import mage.abilities.LoyaltyAbility;
|
||||||
|
import mage.abilities.common.PlaneswalkerEntersWithLoyaltyCountersAbility;
|
||||||
|
import mage.abilities.effects.common.CreateTokenEffect;
|
||||||
|
import mage.abilities.effects.common.DestroyTargetEffect;
|
||||||
|
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||||
|
import mage.abilities.effects.common.GetEmblemEffect;
|
||||||
|
import mage.cards.CardImpl;
|
||||||
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.constants.CardType;
|
||||||
|
import mage.constants.SubType;
|
||||||
|
import mage.constants.SuperType;
|
||||||
|
import mage.game.command.emblems.GarrukCursedHuntsmanEmblem;
|
||||||
|
import mage.game.permanent.token.GarrukCursedHuntsmanToken;
|
||||||
|
import mage.target.common.TargetCreaturePermanent;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author TheElk801
|
||||||
|
*/
|
||||||
|
public final class GarrukCursedHuntsman extends CardImpl {
|
||||||
|
|
||||||
|
public GarrukCursedHuntsman(UUID ownerId, CardSetInfo setInfo) {
|
||||||
|
super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{4}{B}{G}");
|
||||||
|
|
||||||
|
this.addSuperType(SuperType.LEGENDARY);
|
||||||
|
this.subtype.add(SubType.GARRUK);
|
||||||
|
this.addAbility(new PlaneswalkerEntersWithLoyaltyCountersAbility(5));
|
||||||
|
|
||||||
|
// 0: Create two 2/2 black and green Wolf creature tokens with "When this creature dies, put a loyalty counter on each Garruk you control."
|
||||||
|
this.addAbility(new LoyaltyAbility(new CreateTokenEffect(new GarrukCursedHuntsmanToken(), 2), 0));
|
||||||
|
|
||||||
|
// −3: Destroy target creature. Draw a card.
|
||||||
|
Ability ability = new LoyaltyAbility(new DestroyTargetEffect(), -3);
|
||||||
|
ability.addEffect(new DrawCardSourceControllerEffect(1).setText("Draw a card"));
|
||||||
|
ability.addTarget(new TargetCreaturePermanent());
|
||||||
|
this.addAbility(ability);
|
||||||
|
|
||||||
|
// −6: You get an emblem with "Creatures you control get +3/+3 and have trample."
|
||||||
|
this.addAbility(new LoyaltyAbility(new GetEmblemEffect(new GarrukCursedHuntsmanEmblem()), -6));
|
||||||
|
}
|
||||||
|
|
||||||
|
private GarrukCursedHuntsman(final GarrukCursedHuntsman card) {
|
||||||
|
super(card);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public GarrukCursedHuntsman copy() {
|
||||||
|
return new GarrukCursedHuntsman(this);
|
||||||
|
}
|
||||||
|
}
|
|
@ -18,13 +18,12 @@ import mage.constants.SubType;
|
||||||
import mage.constants.Zone;
|
import mage.constants.Zone;
|
||||||
import mage.filter.common.FilterControlledPermanent;
|
import mage.filter.common.FilterControlledPermanent;
|
||||||
import mage.filter.predicate.mageobject.SubtypePredicate;
|
import mage.filter.predicate.mageobject.SubtypePredicate;
|
||||||
import mage.game.permanent.token.custom.FoodToken;
|
import mage.game.permanent.token.FoodToken;
|
||||||
import mage.target.common.TargetControlledPermanent;
|
import mage.target.common.TargetControlledPermanent;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author jmharmon
|
* @author jmharmon
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
71
Mage.Sets/src/mage/cards/g/GluttonousTroll.java
Normal file
71
Mage.Sets/src/mage/cards/g/GluttonousTroll.java
Normal file
|
@ -0,0 +1,71 @@
|
||||||
|
package mage.cards.g;
|
||||||
|
|
||||||
|
import mage.MageInt;
|
||||||
|
import mage.abilities.Ability;
|
||||||
|
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||||
|
import mage.abilities.common.SimpleActivatedAbility;
|
||||||
|
import mage.abilities.costs.common.SacrificeTargetCost;
|
||||||
|
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||||
|
import mage.abilities.dynamicvalue.common.OpponentsCount;
|
||||||
|
import mage.abilities.effects.common.CreateTokenEffect;
|
||||||
|
import mage.abilities.effects.common.continuous.BoostSourceEffect;
|
||||||
|
import mage.abilities.keyword.TrampleAbility;
|
||||||
|
import mage.cards.CardImpl;
|
||||||
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.constants.CardType;
|
||||||
|
import mage.constants.Duration;
|
||||||
|
import mage.constants.SubType;
|
||||||
|
import mage.filter.common.FilterControlledPermanent;
|
||||||
|
import mage.filter.predicate.Predicates;
|
||||||
|
import mage.filter.predicate.mageobject.CardTypePredicate;
|
||||||
|
import mage.filter.predicate.permanent.AnotherPredicate;
|
||||||
|
import mage.game.permanent.token.FoodToken;
|
||||||
|
import mage.target.common.TargetControlledPermanent;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author TheElk801
|
||||||
|
*/
|
||||||
|
public final class GluttonousTroll extends CardImpl {
|
||||||
|
|
||||||
|
private static final FilterControlledPermanent filter
|
||||||
|
= new FilterControlledPermanent("another nonland permanent");
|
||||||
|
|
||||||
|
static {
|
||||||
|
filter.add(Predicates.not(new CardTypePredicate(CardType.LAND)));
|
||||||
|
filter.add(AnotherPredicate.instance);
|
||||||
|
}
|
||||||
|
|
||||||
|
public GluttonousTroll(UUID ownerId, CardSetInfo setInfo) {
|
||||||
|
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}{G}");
|
||||||
|
|
||||||
|
this.subtype.add(SubType.TROLL);
|
||||||
|
this.power = new MageInt(3);
|
||||||
|
this.toughness = new MageInt(3);
|
||||||
|
|
||||||
|
// Trample
|
||||||
|
this.addAbility(TrampleAbility.getInstance());
|
||||||
|
|
||||||
|
// When Gluttonous Troll enters the battlefield, create a number of Food tokens equal to the number of opponents you have.
|
||||||
|
this.addAbility(new EntersBattlefieldTriggeredAbility(new CreateTokenEffect(
|
||||||
|
new FoodToken(), OpponentsCount.instance
|
||||||
|
).setText("create a number of Food tokens equal to the number of opponents you have")));
|
||||||
|
|
||||||
|
// {1}{G}, Sacrifice another nonland permanent: Gluttonous Troll gets +2/+2 until end of turn.
|
||||||
|
Ability ability = new SimpleActivatedAbility(
|
||||||
|
new BoostSourceEffect(2, 2, Duration.EndOfTurn), new ManaCostsImpl("{1}{G}")
|
||||||
|
);
|
||||||
|
ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent(filter)));
|
||||||
|
this.addAbility(ability);
|
||||||
|
}
|
||||||
|
|
||||||
|
private GluttonousTroll(final GluttonousTroll card) {
|
||||||
|
super(card);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public GluttonousTroll copy() {
|
||||||
|
return new GluttonousTroll(this);
|
||||||
|
}
|
||||||
|
}
|
45
Mage.Sets/src/mage/cards/i/InspiringVeteran.java
Normal file
45
Mage.Sets/src/mage/cards/i/InspiringVeteran.java
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
package mage.cards.i;
|
||||||
|
|
||||||
|
import mage.MageInt;
|
||||||
|
import mage.abilities.common.SimpleStaticAbility;
|
||||||
|
import mage.abilities.effects.common.continuous.BoostControlledEffect;
|
||||||
|
import mage.cards.CardImpl;
|
||||||
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.constants.CardType;
|
||||||
|
import mage.constants.Duration;
|
||||||
|
import mage.constants.SubType;
|
||||||
|
import mage.filter.common.FilterCreaturePermanent;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author TheElk801
|
||||||
|
*/
|
||||||
|
public final class InspiringVeteran extends CardImpl {
|
||||||
|
|
||||||
|
private static final FilterCreaturePermanent filter
|
||||||
|
= new FilterCreaturePermanent(SubType.KNIGHT, "Knights");
|
||||||
|
|
||||||
|
public InspiringVeteran(UUID ownerId, CardSetInfo setInfo) {
|
||||||
|
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{R}{W}");
|
||||||
|
|
||||||
|
this.subtype.add(SubType.HUMAN);
|
||||||
|
this.subtype.add(SubType.KNIGHT);
|
||||||
|
this.power = new MageInt(2);
|
||||||
|
this.toughness = new MageInt(2);
|
||||||
|
|
||||||
|
// Other Knights you control get +1/+1.
|
||||||
|
this.addAbility(new SimpleStaticAbility(
|
||||||
|
new BoostControlledEffect(1, 1, Duration.WhileOnBattlefield, filter)
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
private InspiringVeteran(final InspiringVeteran card) {
|
||||||
|
super(card);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public InspiringVeteran copy() {
|
||||||
|
return new InspiringVeteran(this);
|
||||||
|
}
|
||||||
|
}
|
|
@ -2,6 +2,8 @@
|
||||||
package mage.cards.k;
|
package mage.cards.k;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.common.SimpleStaticAbility;
|
import mage.abilities.common.SimpleStaticAbility;
|
||||||
import mage.abilities.costs.mana.GenericManaCost;
|
import mage.abilities.costs.mana.GenericManaCost;
|
||||||
import mage.abilities.effects.common.continuous.BoostEquippedEffect;
|
import mage.abilities.effects.common.continuous.BoostEquippedEffect;
|
||||||
|
@ -22,8 +24,14 @@ public final class Kitesail extends CardImpl {
|
||||||
super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{2}");
|
super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{2}");
|
||||||
this.subtype.add(SubType.EQUIPMENT);
|
this.subtype.add(SubType.EQUIPMENT);
|
||||||
|
|
||||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEquippedEffect(1, 0)));
|
// Equipped creature gets +1/+0 and has flying.
|
||||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(FlyingAbility.getInstance(), AttachmentType.EQUIPMENT)));
|
Ability ability = new SimpleStaticAbility(new BoostEquippedEffect(1, 0));
|
||||||
|
ability.addEffect(new GainAbilityAttachedEffect(
|
||||||
|
FlyingAbility.getInstance(), AttachmentType.EQUIPMENT).setText("and has flying")
|
||||||
|
);
|
||||||
|
this.addAbility(ability);
|
||||||
|
|
||||||
|
// Equip {2}
|
||||||
this.addAbility(new EquipAbility(Outcome.AddAbility, new GenericManaCost(2)));
|
this.addAbility(new EquipAbility(Outcome.AddAbility, new GenericManaCost(2)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
88
Mage.Sets/src/mage/cards/l/LovestruckBeast.java
Normal file
88
Mage.Sets/src/mage/cards/l/LovestruckBeast.java
Normal file
|
@ -0,0 +1,88 @@
|
||||||
|
package mage.cards.l;
|
||||||
|
|
||||||
|
import mage.MageInt;
|
||||||
|
import mage.abilities.Ability;
|
||||||
|
import mage.abilities.common.SimpleStaticAbility;
|
||||||
|
import mage.abilities.effects.RestrictionEffect;
|
||||||
|
import mage.abilities.effects.common.CreateTokenEffect;
|
||||||
|
import mage.cards.AdventureCard;
|
||||||
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.constants.CardType;
|
||||||
|
import mage.constants.ComparisonType;
|
||||||
|
import mage.constants.Duration;
|
||||||
|
import mage.constants.SubType;
|
||||||
|
import mage.filter.FilterPermanent;
|
||||||
|
import mage.filter.common.FilterCreaturePermanent;
|
||||||
|
import mage.filter.predicate.mageobject.PowerPredicate;
|
||||||
|
import mage.filter.predicate.mageobject.ToughnessPredicate;
|
||||||
|
import mage.game.Game;
|
||||||
|
import mage.game.permanent.Permanent;
|
||||||
|
import mage.game.permanent.token.HumanToken;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author TheElk801
|
||||||
|
*/
|
||||||
|
public final class LovestruckBeast extends AdventureCard {
|
||||||
|
|
||||||
|
public LovestruckBeast(UUID ownerId, CardSetInfo setInfo) {
|
||||||
|
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, new CardType[]{CardType.SORCERY}, "{2}{G}", "Heart's Desire", "{G}");
|
||||||
|
|
||||||
|
this.subtype.add(SubType.BEAST);
|
||||||
|
this.subtype.add(SubType.NOBLE);
|
||||||
|
this.power = new MageInt(5);
|
||||||
|
this.toughness = new MageInt(5);
|
||||||
|
|
||||||
|
// Lovestruck Beast can't attack unless you control a 1/1 creature.
|
||||||
|
this.addAbility(new SimpleStaticAbility(new LovestruckBeastEffect()));
|
||||||
|
|
||||||
|
// Heart's Desire
|
||||||
|
// Create a 1/1 white Human creature token.
|
||||||
|
this.getAdventureSpellAbility().addEffect(new CreateTokenEffect(new HumanToken()));
|
||||||
|
}
|
||||||
|
|
||||||
|
private LovestruckBeast(final LovestruckBeast card) {
|
||||||
|
super(card);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public LovestruckBeast copy() {
|
||||||
|
return new LovestruckBeast(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class LovestruckBeastEffect extends RestrictionEffect {
|
||||||
|
|
||||||
|
private static final FilterPermanent filter = new FilterCreaturePermanent();
|
||||||
|
|
||||||
|
static {
|
||||||
|
filter.add(new PowerPredicate(ComparisonType.EQUAL_TO, 1));
|
||||||
|
filter.add(new ToughnessPredicate(ComparisonType.EQUAL_TO, 1));
|
||||||
|
}
|
||||||
|
|
||||||
|
LovestruckBeastEffect() {
|
||||||
|
super(Duration.WhileOnBattlefield);
|
||||||
|
staticText = "{this} can't attack unless you control a 1/1 creature";
|
||||||
|
}
|
||||||
|
|
||||||
|
private LovestruckBeastEffect(final LovestruckBeastEffect effect) {
|
||||||
|
super(effect);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public LovestruckBeastEffect copy() {
|
||||||
|
return new LovestruckBeastEffect(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean canAttack(Game game, boolean canUseChooseDialogs) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean applies(Permanent permanent, Ability source, Game game) {
|
||||||
|
return permanent.getId().equals(source.getSourceId())
|
||||||
|
&& game.getBattlefield().countAll(filter, source.getControllerId(), game) <= 0;
|
||||||
|
}
|
||||||
|
}
|
60
Mage.Sets/src/mage/cards/m/MaceOfTheValiant.java
Normal file
60
Mage.Sets/src/mage/cards/m/MaceOfTheValiant.java
Normal file
|
@ -0,0 +1,60 @@
|
||||||
|
package mage.cards.m;
|
||||||
|
|
||||||
|
import mage.abilities.Ability;
|
||||||
|
import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
|
||||||
|
import mage.abilities.common.SimpleStaticAbility;
|
||||||
|
import mage.abilities.dynamicvalue.DynamicValue;
|
||||||
|
import mage.abilities.dynamicvalue.common.CountersSourceCount;
|
||||||
|
import mage.abilities.effects.common.continuous.BoostEquippedEffect;
|
||||||
|
import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect;
|
||||||
|
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
|
||||||
|
import mage.abilities.keyword.EquipAbility;
|
||||||
|
import mage.abilities.keyword.VigilanceAbility;
|
||||||
|
import mage.cards.CardImpl;
|
||||||
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.constants.AttachmentType;
|
||||||
|
import mage.constants.CardType;
|
||||||
|
import mage.constants.SubType;
|
||||||
|
import mage.counters.CounterType;
|
||||||
|
import mage.filter.StaticFilters;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author TheElk801
|
||||||
|
*/
|
||||||
|
public final class MaceOfTheValiant extends CardImpl {
|
||||||
|
|
||||||
|
private static final DynamicValue xValue = new CountersSourceCount(CounterType.CHARGE);
|
||||||
|
|
||||||
|
public MaceOfTheValiant(UUID ownerId, CardSetInfo setInfo) {
|
||||||
|
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{2}{W}");
|
||||||
|
|
||||||
|
this.subtype.add(SubType.EQUIPMENT);
|
||||||
|
|
||||||
|
// Equipped creature gets +1/+1 for each charge counter on Mace of the Valiant and has vigilance.
|
||||||
|
Ability ability = new SimpleStaticAbility(new BoostEquippedEffect(xValue, xValue));
|
||||||
|
ability.addEffect(new GainAbilityAttachedEffect(
|
||||||
|
VigilanceAbility.getInstance(), AttachmentType.EQUIPMENT
|
||||||
|
).setText("and has vigilance"));
|
||||||
|
this.addAbility(ability);
|
||||||
|
|
||||||
|
// Whenever a creature enters the battlefield under your control, put a charge counter on Mace of the Valiant.
|
||||||
|
this.addAbility(new EntersBattlefieldControlledTriggeredAbility(
|
||||||
|
new AddCountersSourceEffect(CounterType.CHARGE.createInstance()),
|
||||||
|
StaticFilters.FILTER_PERMANENT_A_CREATURE
|
||||||
|
));
|
||||||
|
|
||||||
|
// Equip {3}
|
||||||
|
this.addAbility(new EquipAbility(3));
|
||||||
|
}
|
||||||
|
|
||||||
|
private MaceOfTheValiant(final MaceOfTheValiant card) {
|
||||||
|
super(card);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public MaceOfTheValiant copy() {
|
||||||
|
return new MaceOfTheValiant(this);
|
||||||
|
}
|
||||||
|
}
|
49
Mage.Sets/src/mage/cards/o/OrderOfMidnight.java
Normal file
49
Mage.Sets/src/mage/cards/o/OrderOfMidnight.java
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
package mage.cards.o;
|
||||||
|
|
||||||
|
import mage.MageInt;
|
||||||
|
import mage.abilities.common.CantBlockAbility;
|
||||||
|
import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect;
|
||||||
|
import mage.abilities.keyword.FlyingAbility;
|
||||||
|
import mage.cards.AdventureCard;
|
||||||
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.constants.CardType;
|
||||||
|
import mage.constants.SubType;
|
||||||
|
import mage.filter.StaticFilters;
|
||||||
|
import mage.target.common.TargetCardInYourGraveyard;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author TheElk801
|
||||||
|
*/
|
||||||
|
public final class OrderOfMidnight extends AdventureCard {
|
||||||
|
|
||||||
|
public OrderOfMidnight(UUID ownerId, CardSetInfo setInfo) {
|
||||||
|
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, new CardType[]{CardType.SORCERY}, "{1}{B}","Alter Fate", "{1}{B}");
|
||||||
|
|
||||||
|
this.subtype.add(SubType.HUMAN);
|
||||||
|
this.subtype.add(SubType.KNIGHT);
|
||||||
|
this.power = new MageInt(2);
|
||||||
|
this.toughness = new MageInt(2);
|
||||||
|
|
||||||
|
// Flying
|
||||||
|
this.addAbility(FlyingAbility.getInstance());
|
||||||
|
|
||||||
|
// Order of Midnight can't block.
|
||||||
|
this.addAbility(new CantBlockAbility());
|
||||||
|
|
||||||
|
// Alter Fate
|
||||||
|
// Return target creature card from your graveyard to your hand.
|
||||||
|
this.getAdventureSpellAbility().addEffect(new ReturnFromGraveyardToHandTargetEffect());
|
||||||
|
this.getAdventureSpellAbility().addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD));
|
||||||
|
}
|
||||||
|
|
||||||
|
private OrderOfMidnight(final OrderOfMidnight card) {
|
||||||
|
super(card);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public OrderOfMidnight copy() {
|
||||||
|
return new OrderOfMidnight(this);
|
||||||
|
}
|
||||||
|
}
|
|
@ -144,6 +144,6 @@ class RayamiFirstOfTheFallenReplacementEffect extends ReplacementEffectImpl {
|
||||||
ZoneChangeEvent zce = (ZoneChangeEvent) event;
|
ZoneChangeEvent zce = (ZoneChangeEvent) event;
|
||||||
return zce.isDiesEvent()
|
return zce.isDiesEvent()
|
||||||
&& zce.getTarget().isCreature()
|
&& zce.getTarget().isCreature()
|
||||||
&& zce.getTarget() instanceof PermanentToken;
|
&& !(zce.getTarget() instanceof PermanentToken);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
42
Mage.Sets/src/mage/cards/r/RosethornAcolyte.java
Normal file
42
Mage.Sets/src/mage/cards/r/RosethornAcolyte.java
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
package mage.cards.r;
|
||||||
|
|
||||||
|
import mage.MageInt;
|
||||||
|
import mage.abilities.effects.mana.AddManaOfAnyColorEffect;
|
||||||
|
import mage.abilities.mana.AnyColorManaAbility;
|
||||||
|
import mage.cards.AdventureCard;
|
||||||
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.constants.CardType;
|
||||||
|
import mage.constants.SubType;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author TheElk801
|
||||||
|
*/
|
||||||
|
public final class RosethornAcolyte extends AdventureCard {
|
||||||
|
|
||||||
|
public RosethornAcolyte(UUID ownerId, CardSetInfo setInfo) {
|
||||||
|
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, new CardType[]{CardType.SORCERY}, "{2}{G}", "Seasonal Ritual", "{G}");
|
||||||
|
|
||||||
|
this.subtype.add(SubType.ELF);
|
||||||
|
this.subtype.add(SubType.DRUID);
|
||||||
|
this.power = new MageInt(2);
|
||||||
|
this.toughness = new MageInt(3);
|
||||||
|
|
||||||
|
// {T}: Add one mana of any color.
|
||||||
|
this.addAbility(new AnyColorManaAbility());
|
||||||
|
|
||||||
|
// Seasonal Ritual
|
||||||
|
// Add one mana of any color.
|
||||||
|
this.getAdventureSpellAbility().addEffect(new AddManaOfAnyColorEffect());
|
||||||
|
}
|
||||||
|
|
||||||
|
private RosethornAcolyte(final RosethornAcolyte card) {
|
||||||
|
super(card);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public RosethornAcolyte copy() {
|
||||||
|
return new RosethornAcolyte(this);
|
||||||
|
}
|
||||||
|
}
|
52
Mage.Sets/src/mage/cards/s/SavvyHunter.java
Normal file
52
Mage.Sets/src/mage/cards/s/SavvyHunter.java
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
package mage.cards.s;
|
||||||
|
|
||||||
|
import mage.MageInt;
|
||||||
|
import mage.abilities.common.AttacksOrBlocksTriggeredAbility;
|
||||||
|
import mage.abilities.common.SimpleActivatedAbility;
|
||||||
|
import mage.abilities.costs.common.SacrificeTargetCost;
|
||||||
|
import mage.abilities.effects.common.CreateTokenEffect;
|
||||||
|
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||||
|
import mage.cards.CardImpl;
|
||||||
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.constants.CardType;
|
||||||
|
import mage.constants.SubType;
|
||||||
|
import mage.filter.common.FilterControlledPermanent;
|
||||||
|
import mage.game.permanent.token.FoodToken;
|
||||||
|
import mage.target.common.TargetControlledPermanent;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author TheElk801
|
||||||
|
*/
|
||||||
|
public final class SavvyHunter extends CardImpl {
|
||||||
|
|
||||||
|
private static final FilterControlledPermanent filter = new FilterControlledPermanent(SubType.FOOD, "Foods");
|
||||||
|
|
||||||
|
public SavvyHunter(UUID ownerId, CardSetInfo setInfo) {
|
||||||
|
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{B}{G}");
|
||||||
|
|
||||||
|
this.subtype.add(SubType.HUMAN);
|
||||||
|
this.subtype.add(SubType.WARRIOR);
|
||||||
|
this.power = new MageInt(3);
|
||||||
|
this.toughness = new MageInt(3);
|
||||||
|
|
||||||
|
// Whenever Savvy Hunter attacks or blocks, create a Food token.
|
||||||
|
this.addAbility(new AttacksOrBlocksTriggeredAbility(new CreateTokenEffect(new FoodToken()), false));
|
||||||
|
|
||||||
|
// Sacrifice two Foods: Draw a card.
|
||||||
|
this.addAbility(new SimpleActivatedAbility(
|
||||||
|
new DrawCardSourceControllerEffect(1),
|
||||||
|
new SacrificeTargetCost(new TargetControlledPermanent(2, filter))
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
private SavvyHunter(final SavvyHunter card) {
|
||||||
|
super(card);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SavvyHunter copy() {
|
||||||
|
return new SavvyHunter(this);
|
||||||
|
}
|
||||||
|
}
|
76
Mage.Sets/src/mage/cards/s/ShimmerDragon.java
Normal file
76
Mage.Sets/src/mage/cards/s/ShimmerDragon.java
Normal file
|
@ -0,0 +1,76 @@
|
||||||
|
package mage.cards.s;
|
||||||
|
|
||||||
|
import mage.MageInt;
|
||||||
|
import mage.abilities.common.SimpleActivatedAbility;
|
||||||
|
import mage.abilities.common.SimpleStaticAbility;
|
||||||
|
import mage.abilities.condition.Condition;
|
||||||
|
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
|
||||||
|
import mage.abilities.costs.common.TapTargetCost;
|
||||||
|
import mage.abilities.decorator.ConditionalContinuousEffect;
|
||||||
|
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||||
|
import mage.abilities.effects.common.continuous.GainAbilitySourceEffect;
|
||||||
|
import mage.abilities.keyword.FlyingAbility;
|
||||||
|
import mage.abilities.keyword.HexproofAbility;
|
||||||
|
import mage.cards.CardImpl;
|
||||||
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.constants.CardType;
|
||||||
|
import mage.constants.ComparisonType;
|
||||||
|
import mage.constants.Duration;
|
||||||
|
import mage.constants.SubType;
|
||||||
|
import mage.filter.StaticFilters;
|
||||||
|
import mage.filter.common.FilterControlledArtifactPermanent;
|
||||||
|
import mage.filter.common.FilterControlledPermanent;
|
||||||
|
import mage.filter.predicate.Predicates;
|
||||||
|
import mage.filter.predicate.permanent.TappedPredicate;
|
||||||
|
import mage.target.common.TargetControlledPermanent;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author TheElk801
|
||||||
|
*/
|
||||||
|
public final class ShimmerDragon extends CardImpl {
|
||||||
|
|
||||||
|
private static final Condition condition = new PermanentsOnTheBattlefieldCondition(
|
||||||
|
StaticFilters.FILTER_CONTROLLED_PERMANENT_ARTIFACT, ComparisonType.MORE_THAN, 3
|
||||||
|
);
|
||||||
|
private static final FilterControlledPermanent filter
|
||||||
|
= new FilterControlledArtifactPermanent("untapped artifacts you control");
|
||||||
|
|
||||||
|
static {
|
||||||
|
filter.add(Predicates.not(TappedPredicate.instance));
|
||||||
|
}
|
||||||
|
|
||||||
|
public ShimmerDragon(UUID ownerId, CardSetInfo setInfo) {
|
||||||
|
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{U}{U}");
|
||||||
|
|
||||||
|
this.subtype.add(SubType.DRAGON);
|
||||||
|
this.power = new MageInt(5);
|
||||||
|
this.toughness = new MageInt(6);
|
||||||
|
|
||||||
|
// Flying
|
||||||
|
this.addAbility(FlyingAbility.getInstance());
|
||||||
|
|
||||||
|
// As long as you control four or more artifacts, Shimmer Dragon has hexproof.
|
||||||
|
this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect(
|
||||||
|
new GainAbilitySourceEffect(
|
||||||
|
HexproofAbility.getInstance(), Duration.WhileOnBattlefield
|
||||||
|
), condition, "as long as you control four or more artifacts, {this} has hexproof"
|
||||||
|
)));
|
||||||
|
|
||||||
|
// Tap two untapped artifacts you control: Draw a card.
|
||||||
|
this.addAbility(new SimpleActivatedAbility(
|
||||||
|
new DrawCardSourceControllerEffect(1),
|
||||||
|
new TapTargetCost(new TargetControlledPermanent(2, filter))
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
private ShimmerDragon(final ShimmerDragon card) {
|
||||||
|
super(card);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ShimmerDragon copy() {
|
||||||
|
return new ShimmerDragon(this);
|
||||||
|
}
|
||||||
|
}
|
55
Mage.Sets/src/mage/cards/s/Shinechaser.java
Normal file
55
Mage.Sets/src/mage/cards/s/Shinechaser.java
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
package mage.cards.s;
|
||||||
|
|
||||||
|
import mage.MageInt;
|
||||||
|
import mage.abilities.common.SimpleStaticAbility;
|
||||||
|
import mage.abilities.effects.common.continuous.BoostSourceWhileControlsEffect;
|
||||||
|
import mage.abilities.keyword.FlyingAbility;
|
||||||
|
import mage.abilities.keyword.VigilanceAbility;
|
||||||
|
import mage.cards.CardImpl;
|
||||||
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.constants.CardType;
|
||||||
|
import mage.constants.SubType;
|
||||||
|
import mage.filter.FilterPermanent;
|
||||||
|
import mage.filter.StaticFilters;
|
||||||
|
import mage.filter.common.FilterEnchantmentPermanent;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author TheElk801
|
||||||
|
*/
|
||||||
|
public final class Shinechaser extends CardImpl {
|
||||||
|
|
||||||
|
private static final FilterPermanent filter = new FilterEnchantmentPermanent("an enchantment");
|
||||||
|
|
||||||
|
public Shinechaser(UUID ownerId, CardSetInfo setInfo) {
|
||||||
|
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{W}{U}");
|
||||||
|
|
||||||
|
this.subtype.add(SubType.FAERIE);
|
||||||
|
this.power = new MageInt(1);
|
||||||
|
this.toughness = new MageInt(1);
|
||||||
|
|
||||||
|
// Flying
|
||||||
|
this.addAbility(FlyingAbility.getInstance());
|
||||||
|
|
||||||
|
// Vigilance
|
||||||
|
this.addAbility(VigilanceAbility.getInstance());
|
||||||
|
|
||||||
|
// Shinechaser gets +1/+1 as long as you control an artifact.
|
||||||
|
this.addAbility(new SimpleStaticAbility(
|
||||||
|
new BoostSourceWhileControlsEffect(StaticFilters.FILTER_PERMANENT_ARTIFACT_AN, 1, 1)
|
||||||
|
));
|
||||||
|
|
||||||
|
// Shinechaser gets +1/+1 as long as you control an enchantment.
|
||||||
|
this.addAbility(new SimpleStaticAbility(new BoostSourceWhileControlsEffect(filter, 1, 1)));
|
||||||
|
}
|
||||||
|
|
||||||
|
private Shinechaser(final Shinechaser card) {
|
||||||
|
super(card);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Shinechaser copy() {
|
||||||
|
return new Shinechaser(this);
|
||||||
|
}
|
||||||
|
}
|
65
Mage.Sets/src/mage/cards/s/ShiningArmor.java
Normal file
65
Mage.Sets/src/mage/cards/s/ShiningArmor.java
Normal file
|
@ -0,0 +1,65 @@
|
||||||
|
package mage.cards.s;
|
||||||
|
|
||||||
|
import mage.abilities.Ability;
|
||||||
|
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||||
|
import mage.abilities.common.SimpleStaticAbility;
|
||||||
|
import mage.abilities.effects.common.AttachEffect;
|
||||||
|
import mage.abilities.effects.common.continuous.BoostEquippedEffect;
|
||||||
|
import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect;
|
||||||
|
import mage.abilities.keyword.EquipAbility;
|
||||||
|
import mage.abilities.keyword.FlashAbility;
|
||||||
|
import mage.abilities.keyword.VigilanceAbility;
|
||||||
|
import mage.cards.CardImpl;
|
||||||
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.constants.AttachmentType;
|
||||||
|
import mage.constants.CardType;
|
||||||
|
import mage.constants.Outcome;
|
||||||
|
import mage.constants.SubType;
|
||||||
|
import mage.filter.FilterPermanent;
|
||||||
|
import mage.filter.common.FilterControlledPermanent;
|
||||||
|
import mage.target.TargetPermanent;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author TheElk801
|
||||||
|
*/
|
||||||
|
public final class ShiningArmor extends CardImpl {
|
||||||
|
|
||||||
|
private static final FilterPermanent filter = new FilterControlledPermanent(SubType.KNIGHT);
|
||||||
|
|
||||||
|
public ShiningArmor(UUID ownerId, CardSetInfo setInfo) {
|
||||||
|
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{1}{W}");
|
||||||
|
|
||||||
|
this.subtype.add(SubType.EQUIPMENT);
|
||||||
|
|
||||||
|
// Flash
|
||||||
|
this.addAbility(FlashAbility.getInstance());
|
||||||
|
|
||||||
|
// When Shining Armor enters the battlefield, attach it to target Knight you control.
|
||||||
|
Ability ability = new EntersBattlefieldTriggeredAbility(
|
||||||
|
new AttachEffect(Outcome.Benefit, "attach it to target Knight you control")
|
||||||
|
);
|
||||||
|
ability.addTarget(new TargetPermanent(filter));
|
||||||
|
this.addAbility(ability);
|
||||||
|
|
||||||
|
// Equipped creature gets +0/+2 and has vigilance.
|
||||||
|
ability = new SimpleStaticAbility(new BoostEquippedEffect(0, 2));
|
||||||
|
ability.addEffect(new GainAbilityAttachedEffect(
|
||||||
|
VigilanceAbility.getInstance(), AttachmentType.EQUIPMENT
|
||||||
|
).setText("and has vigilance"));
|
||||||
|
this.addAbility(ability);
|
||||||
|
|
||||||
|
// Equip {3}
|
||||||
|
this.addAbility(new EquipAbility(3));
|
||||||
|
}
|
||||||
|
|
||||||
|
private ShiningArmor(final ShiningArmor card) {
|
||||||
|
super(card);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ShiningArmor copy() {
|
||||||
|
return new ShiningArmor(this);
|
||||||
|
}
|
||||||
|
}
|
49
Mage.Sets/src/mage/cards/s/SteelbaneHydra.java
Normal file
49
Mage.Sets/src/mage/cards/s/SteelbaneHydra.java
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
package mage.cards.s;
|
||||||
|
|
||||||
|
import mage.abilities.Ability;
|
||||||
|
import mage.abilities.common.EntersBattlefieldAbility;
|
||||||
|
import mage.abilities.common.SimpleActivatedAbility;
|
||||||
|
import mage.abilities.costs.common.RemoveCountersSourceCost;
|
||||||
|
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||||
|
import mage.abilities.effects.common.DestroyTargetEffect;
|
||||||
|
import mage.abilities.effects.common.EntersBattlefieldWithXCountersEffect;
|
||||||
|
import mage.cards.CardImpl;
|
||||||
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.constants.CardType;
|
||||||
|
import mage.constants.SubType;
|
||||||
|
import mage.counters.CounterType;
|
||||||
|
import mage.filter.StaticFilters;
|
||||||
|
import mage.target.TargetPermanent;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author TheElk801
|
||||||
|
*/
|
||||||
|
public final class SteelbaneHydra extends CardImpl {
|
||||||
|
|
||||||
|
public SteelbaneHydra(UUID ownerId, CardSetInfo setInfo) {
|
||||||
|
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{X}{G}{G}");
|
||||||
|
|
||||||
|
this.subtype.add(SubType.TURTLE);
|
||||||
|
this.subtype.add(SubType.HYDRA);
|
||||||
|
|
||||||
|
// Steelbane Hydra enters the battlefield with X +1/+1 counters on it.
|
||||||
|
this.addAbility(new EntersBattlefieldAbility(new EntersBattlefieldWithXCountersEffect(CounterType.P1P1.createInstance())));
|
||||||
|
|
||||||
|
// {2}{G}, Remove a +1/+1 counter from Steelbane Hydra: Destroy target artifact or enchantment.
|
||||||
|
Ability ability = new SimpleActivatedAbility(new DestroyTargetEffect(), new ManaCostsImpl("{2}{G}"));
|
||||||
|
ability.addCost(new RemoveCountersSourceCost(CounterType.P1P1.createInstance(1)));
|
||||||
|
ability.addTarget(new TargetPermanent(StaticFilters.FILTER_PERMANENT_ARTIFACT_OR_ENCHANTMENT));
|
||||||
|
this.addAbility(ability);
|
||||||
|
}
|
||||||
|
|
||||||
|
private SteelbaneHydra(final SteelbaneHydra card) {
|
||||||
|
super(card);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SteelbaneHydra copy() {
|
||||||
|
return new SteelbaneHydra(this);
|
||||||
|
}
|
||||||
|
}
|
37
Mage.Sets/src/mage/cards/t/TasteOfDeath.java
Normal file
37
Mage.Sets/src/mage/cards/t/TasteOfDeath.java
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
package mage.cards.t;
|
||||||
|
|
||||||
|
import mage.abilities.effects.common.CreateTokenEffect;
|
||||||
|
import mage.abilities.effects.common.SacrificeAllEffect;
|
||||||
|
import mage.cards.CardImpl;
|
||||||
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.constants.CardType;
|
||||||
|
import mage.filter.common.FilterControlledCreaturePermanent;
|
||||||
|
import mage.filter.common.FilterControlledPermanent;
|
||||||
|
import mage.game.permanent.token.FoodToken;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author TheElk801
|
||||||
|
*/
|
||||||
|
public final class TasteOfDeath extends CardImpl {
|
||||||
|
|
||||||
|
private static final FilterControlledPermanent filter = new FilterControlledCreaturePermanent("creatures");
|
||||||
|
|
||||||
|
public TasteOfDeath(UUID ownerId, CardSetInfo setInfo) {
|
||||||
|
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{4}{B}{B}");
|
||||||
|
|
||||||
|
// Each player sacrifices three creatures. You create three Food tokens.
|
||||||
|
this.getSpellAbility().addEffect(new SacrificeAllEffect(3, filter));
|
||||||
|
this.getSpellAbility().addEffect(new CreateTokenEffect(new FoodToken(), 3).concatBy("You"));
|
||||||
|
}
|
||||||
|
|
||||||
|
private TasteOfDeath(final TasteOfDeath card) {
|
||||||
|
super(card);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TasteOfDeath copy() {
|
||||||
|
return new TasteOfDeath(this);
|
||||||
|
}
|
||||||
|
}
|
104
Mage.Sets/src/mage/cards/t/TheCircleOfLoyalty.java
Normal file
104
Mage.Sets/src/mage/cards/t/TheCircleOfLoyalty.java
Normal file
|
@ -0,0 +1,104 @@
|
||||||
|
package mage.cards.t;
|
||||||
|
|
||||||
|
import mage.abilities.Ability;
|
||||||
|
import mage.abilities.SpellAbility;
|
||||||
|
import mage.abilities.common.SimpleActivatedAbility;
|
||||||
|
import mage.abilities.common.SimpleStaticAbility;
|
||||||
|
import mage.abilities.common.SpellCastControllerTriggeredAbility;
|
||||||
|
import mage.abilities.costs.common.TapSourceCost;
|
||||||
|
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||||
|
import mage.abilities.effects.common.CreateTokenEffect;
|
||||||
|
import mage.abilities.effects.common.continuous.BoostControlledEffect;
|
||||||
|
import mage.abilities.effects.common.cost.CostModificationEffectImpl;
|
||||||
|
import mage.cards.CardImpl;
|
||||||
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.constants.*;
|
||||||
|
import mage.filter.FilterPermanent;
|
||||||
|
import mage.filter.FilterSpell;
|
||||||
|
import mage.filter.common.FilterControlledPermanent;
|
||||||
|
import mage.filter.predicate.mageobject.SupertypePredicate;
|
||||||
|
import mage.game.Game;
|
||||||
|
import mage.game.permanent.token.KnightToken;
|
||||||
|
import mage.util.CardUtil;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author TheElk801
|
||||||
|
*/
|
||||||
|
public final class TheCircleOfLoyalty extends CardImpl {
|
||||||
|
|
||||||
|
private static final FilterSpell filter = new FilterSpell("a legendary spell");
|
||||||
|
|
||||||
|
static {
|
||||||
|
filter.add(new SupertypePredicate(SuperType.LEGENDARY));
|
||||||
|
}
|
||||||
|
|
||||||
|
public TheCircleOfLoyalty(UUID ownerId, CardSetInfo setInfo) {
|
||||||
|
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{4}{W}{W}");
|
||||||
|
|
||||||
|
this.addSuperType(SuperType.LEGENDARY);
|
||||||
|
|
||||||
|
// This spell costs {1} less to cast for each Knight you control.
|
||||||
|
this.addAbility(new SimpleStaticAbility(Zone.ALL, new TheCircleOfLoyaltyCostReductionEffect()));
|
||||||
|
|
||||||
|
// Creatures you control get +1/+1.
|
||||||
|
this.addAbility(new SimpleStaticAbility(
|
||||||
|
new BoostControlledEffect(1, 1, Duration.WhileOnBattlefield)
|
||||||
|
));
|
||||||
|
|
||||||
|
// Whenever you cast a legendary spell, create a 2/2 white Knight creature token with vigilance.
|
||||||
|
this.addAbility(new SpellCastControllerTriggeredAbility(
|
||||||
|
new CreateTokenEffect(new KnightToken()), filter, false
|
||||||
|
));
|
||||||
|
|
||||||
|
// {3}{W}, {T}: Create a 2/2 white Knight creature token with vigilance.
|
||||||
|
Ability ability = new SimpleActivatedAbility(
|
||||||
|
new CreateTokenEffect(new KnightToken()), new ManaCostsImpl("{3}{W}")
|
||||||
|
);
|
||||||
|
ability.addCost(new TapSourceCost());
|
||||||
|
this.addAbility(ability);
|
||||||
|
}
|
||||||
|
|
||||||
|
private TheCircleOfLoyalty(final TheCircleOfLoyalty card) {
|
||||||
|
super(card);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TheCircleOfLoyalty copy() {
|
||||||
|
return new TheCircleOfLoyalty(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class TheCircleOfLoyaltyCostReductionEffect extends CostModificationEffectImpl {
|
||||||
|
|
||||||
|
private static final FilterPermanent filter = new FilterControlledPermanent(SubType.KNIGHT);
|
||||||
|
|
||||||
|
TheCircleOfLoyaltyCostReductionEffect() {
|
||||||
|
super(Duration.WhileOnStack, Outcome.Benefit, CostModificationType.REDUCE_COST);
|
||||||
|
staticText = "This spell costs {1} less to cast for each Knight you control";
|
||||||
|
}
|
||||||
|
|
||||||
|
private TheCircleOfLoyaltyCostReductionEffect(final TheCircleOfLoyaltyCostReductionEffect effect) {
|
||||||
|
super(effect);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean apply(Game game, Ability source, Ability abilityToModify) {
|
||||||
|
int reductionAmount = game.getBattlefield().count(filter, source.getSourceId(), source.getControllerId(), game);
|
||||||
|
CardUtil.reduceCost(abilityToModify, reductionAmount);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean applies(Ability abilityToModify, Ability source, Game game) {
|
||||||
|
return abilityToModify instanceof SpellAbility
|
||||||
|
&& abilityToModify.getSourceId().equals(source.getSourceId())
|
||||||
|
&& game.getCard(abilityToModify.getSourceId()) != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TheCircleOfLoyaltyCostReductionEffect copy() {
|
||||||
|
return new TheCircleOfLoyaltyCostReductionEffect(this);
|
||||||
|
}
|
||||||
|
}
|
62
Mage.Sets/src/mage/cards/t/TomeOfLegends.java
Normal file
62
Mage.Sets/src/mage/cards/t/TomeOfLegends.java
Normal file
|
@ -0,0 +1,62 @@
|
||||||
|
package mage.cards.t;
|
||||||
|
|
||||||
|
import mage.abilities.Ability;
|
||||||
|
import mage.abilities.common.EntersBattlefieldAbility;
|
||||||
|
import mage.abilities.common.EntersBattlefieldOrAttacksAllTriggeredAbility;
|
||||||
|
import mage.abilities.common.SimpleActivatedAbility;
|
||||||
|
import mage.abilities.costs.common.RemoveCountersSourceCost;
|
||||||
|
import mage.abilities.costs.common.TapSourceCost;
|
||||||
|
import mage.abilities.costs.mana.GenericManaCost;
|
||||||
|
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||||
|
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
|
||||||
|
import mage.cards.CardImpl;
|
||||||
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.constants.CardType;
|
||||||
|
import mage.counters.CounterType;
|
||||||
|
import mage.filter.FilterPermanent;
|
||||||
|
import mage.filter.predicate.permanent.CommanderPredicate;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author TheElk801
|
||||||
|
*/
|
||||||
|
public final class TomeOfLegends extends CardImpl {
|
||||||
|
|
||||||
|
private static final FilterPermanent filter = new FilterPermanent("your commander");
|
||||||
|
|
||||||
|
static {
|
||||||
|
filter.add(CommanderPredicate.instance);
|
||||||
|
}
|
||||||
|
|
||||||
|
public TomeOfLegends(UUID ownerId, CardSetInfo setInfo) {
|
||||||
|
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{2}");
|
||||||
|
|
||||||
|
// Tome of Legends enters the battlefield with a page counter on it.
|
||||||
|
this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(
|
||||||
|
CounterType.PAGE.createInstance()
|
||||||
|
), "with a page counter on it"));
|
||||||
|
|
||||||
|
// Whenever your commander enters the battlefield or attacks, put a page counter on Tome of Legends.
|
||||||
|
this.addAbility(new EntersBattlefieldOrAttacksAllTriggeredAbility(
|
||||||
|
new AddCountersSourceEffect(CounterType.PAGE.createInstance()), filter
|
||||||
|
));
|
||||||
|
|
||||||
|
// {1}, {T}, Remove a page counter from Tome of Legends: Draw a card.
|
||||||
|
Ability ability = new SimpleActivatedAbility(
|
||||||
|
new DrawCardSourceControllerEffect(1), new GenericManaCost(1)
|
||||||
|
);
|
||||||
|
ability.addCost(new TapSourceCost());
|
||||||
|
ability.addCost(new RemoveCountersSourceCost(CounterType.PAGE.createInstance()));
|
||||||
|
this.addAbility(ability);
|
||||||
|
}
|
||||||
|
|
||||||
|
private TomeOfLegends(final TomeOfLegends card) {
|
||||||
|
super(card);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TomeOfLegends copy() {
|
||||||
|
return new TomeOfLegends(this);
|
||||||
|
}
|
||||||
|
}
|
|
@ -3,6 +3,8 @@
|
||||||
package mage.cards.v;
|
package mage.cards.v;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.common.SimpleStaticAbility;
|
import mage.abilities.common.SimpleStaticAbility;
|
||||||
import mage.abilities.costs.mana.GenericManaCost;
|
import mage.abilities.costs.mana.GenericManaCost;
|
||||||
import mage.abilities.effects.common.continuous.BoostEquippedEffect;
|
import mage.abilities.effects.common.continuous.BoostEquippedEffect;
|
||||||
|
@ -26,9 +28,16 @@ public final class ViridianClaw extends CardImpl {
|
||||||
public ViridianClaw (UUID ownerId, CardSetInfo setInfo) {
|
public ViridianClaw (UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{2}");
|
super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{2}");
|
||||||
this.subtype.add(SubType.EQUIPMENT);
|
this.subtype.add(SubType.EQUIPMENT);
|
||||||
|
|
||||||
|
// Equipped creature gets +1/+0 and has first strike.
|
||||||
|
Ability ability = new SimpleStaticAbility(new BoostEquippedEffect(1, 0));
|
||||||
|
ability.addEffect(new GainAbilityAttachedEffect(
|
||||||
|
FirstStrikeAbility.getInstance(), AttachmentType.EQUIPMENT).setText("and has first strike")
|
||||||
|
);
|
||||||
|
this.addAbility(ability);
|
||||||
|
|
||||||
|
// Equip {1}
|
||||||
this.addAbility(new EquipAbility(Outcome.AddAbility, new GenericManaCost(1)));
|
this.addAbility(new EquipAbility(Outcome.AddAbility, new GenericManaCost(1)));
|
||||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEquippedEffect(1, 0)));
|
|
||||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(FirstStrikeAbility.getInstance(), AttachmentType.EQUIPMENT)));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public ViridianClaw (final ViridianClaw card) {
|
public ViridianClaw (final ViridianClaw card) {
|
||||||
|
|
|
@ -1,14 +1,16 @@
|
||||||
package mage.cards.w;
|
package mage.cards.w;
|
||||||
|
|
||||||
import mage.MageInt;
|
import mage.MageInt;
|
||||||
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.common.SimpleActivatedAbility;
|
import mage.abilities.common.SimpleActivatedAbility;
|
||||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||||
import mage.abilities.effects.common.continuous.BecomesCreatureSourceEffect;
|
import mage.abilities.effects.ContinuousEffectImpl;
|
||||||
import mage.abilities.keyword.DefenderAbility;
|
import mage.abilities.keyword.DefenderAbility;
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
import mage.constants.*;
|
import mage.constants.*;
|
||||||
import mage.game.permanent.token.TokenImpl;
|
import mage.game.Game;
|
||||||
|
import mage.game.permanent.Permanent;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
|
@ -30,8 +32,7 @@ public final class WishfulMerfolk extends CardImpl {
|
||||||
this.addAbility(DefenderAbility.getInstance());
|
this.addAbility(DefenderAbility.getInstance());
|
||||||
|
|
||||||
// {1}{U}: Wishful Merfolk loses defender and becomes a Human until end of turn.
|
// {1}{U}: Wishful Merfolk loses defender and becomes a Human until end of turn.
|
||||||
//this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new WishfulMerfolkEffect(), new ManaCostsImpl("{1}{U}")));
|
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new WishfulMerfolkEffect(), new ManaCostsImpl("{1}{U}")));
|
||||||
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BecomesCreatureSourceEffect(new WishfulMerfolkToken(), "", Duration.EndOfTurn), new ManaCostsImpl("{1}{U}")));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public WishfulMerfolk(final WishfulMerfolk card) {
|
public WishfulMerfolk(final WishfulMerfolk card) {
|
||||||
|
@ -44,22 +45,52 @@ public final class WishfulMerfolk extends CardImpl {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class WishfulMerfolkToken extends TokenImpl {
|
class WishfulMerfolkEffect extends ContinuousEffectImpl {
|
||||||
|
|
||||||
public WishfulMerfolkToken() {
|
public WishfulMerfolkEffect() {
|
||||||
super("Wishful Merfolk", "");
|
super(Duration.EndOfTurn, Outcome.AddAbility);
|
||||||
this.cardType.add(CardType.CREATURE);
|
staticText = "{this} loses defender and becomes a Human until end of turn";
|
||||||
this.subtype.add(SubType.HUMAN);
|
|
||||||
this.color.setBlue(true);
|
|
||||||
this.power = new MageInt(3);
|
|
||||||
this.toughness = new MageInt(2);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public WishfulMerfolkToken(final WishfulMerfolkToken token) {
|
public WishfulMerfolkEffect(final WishfulMerfolkEffect effect) {
|
||||||
super(token);
|
super(effect);
|
||||||
}
|
}
|
||||||
|
|
||||||
public WishfulMerfolkToken copy() {
|
@Override
|
||||||
return new WishfulMerfolkToken(this);
|
public WishfulMerfolkEffect copy() {
|
||||||
|
return new WishfulMerfolkEffect(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean apply(Layer layer, SubLayer sublayer, Ability source, Game game) {
|
||||||
|
Permanent permanent = game.getPermanent(source.getSourceId());
|
||||||
|
if (permanent != null) {
|
||||||
|
switch (layer) {
|
||||||
|
case AbilityAddingRemovingEffects_6:
|
||||||
|
if (sublayer == SubLayer.NA) {
|
||||||
|
permanent.getAbilities().removeIf(entry -> entry.getId().equals(DefenderAbility.getInstance().getId()));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case TypeChangingEffects_4:
|
||||||
|
if (permanent.getSubtype(game).contains(SubType.MERFOLK)) {
|
||||||
|
permanent.getSubtype(game).clear();
|
||||||
|
permanent.getSubtype(game).add(SubType.HUMAN);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean apply(Game game, Ability source) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasLayer(Layer layer) {
|
||||||
|
return layer == Layer.AbilityAddingRemovingEffects_6
|
||||||
|
|| layer == Layer.TypeChangingEffects_4;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package mage.sets;
|
package mage.sets;
|
||||||
|
|
||||||
|
import mage.cards.AdventureCard;
|
||||||
import mage.cards.ExpansionSet;
|
import mage.cards.ExpansionSet;
|
||||||
import mage.constants.Rarity;
|
import mage.constants.Rarity;
|
||||||
import mage.constants.SetType;
|
import mage.constants.SetType;
|
||||||
|
@ -27,22 +28,55 @@ public final class ThroneOfEldraine extends ExpansionSet {
|
||||||
this.ratioBoosterMythic = 8;
|
this.ratioBoosterMythic = 8;
|
||||||
this.maxCardNumberInBooster = 269; // unconfirmed for now
|
this.maxCardNumberInBooster = 269; // unconfirmed for now
|
||||||
|
|
||||||
|
cards.add(new SetCardInfo("Alela, Artful Provocateur", 324, Rarity.MYTHIC, mage.cards.a.AlelaArtfulProvocateur.class));
|
||||||
|
cards.add(new SetCardInfo("All That Glitters", 2, Rarity.UNCOMMON, mage.cards.a.AllThatGlitters.class));
|
||||||
cards.add(new SetCardInfo("Arcane Signet", 331, Rarity.COMMON, mage.cards.a.ArcaneSignet.class));
|
cards.add(new SetCardInfo("Arcane Signet", 331, Rarity.COMMON, mage.cards.a.ArcaneSignet.class));
|
||||||
|
cards.add(new SetCardInfo("Arcanist's Owl", 206, Rarity.UNCOMMON, mage.cards.a.ArcanistsOwl.class));
|
||||||
cards.add(new SetCardInfo("Bake into a Pie", 76, Rarity.COMMON, mage.cards.b.BakeIntoAPie.class));
|
cards.add(new SetCardInfo("Bake into a Pie", 76, Rarity.COMMON, mage.cards.b.BakeIntoAPie.class));
|
||||||
|
cards.add(new SetCardInfo("Belle of the Brawl", 78, Rarity.UNCOMMON, mage.cards.b.BelleOfTheBrawl.class));
|
||||||
cards.add(new SetCardInfo("Chittering Witch", 319, Rarity.RARE, mage.cards.c.ChitteringWitch.class));
|
cards.add(new SetCardInfo("Chittering Witch", 319, Rarity.RARE, mage.cards.c.ChitteringWitch.class));
|
||||||
cards.add(new SetCardInfo("Chulane, Teller of Tales", 326, Rarity.MYTHIC, mage.cards.c.ChulaneTellerOfTales.class));
|
cards.add(new SetCardInfo("Chulane, Teller of Tales", 326, Rarity.MYTHIC, mage.cards.c.ChulaneTellerOfTales.class));
|
||||||
|
cards.add(new SetCardInfo("Command Tower", 333, Rarity.COMMON, mage.cards.c.CommandTower.class));
|
||||||
|
cards.add(new SetCardInfo("Corridor Monitor", 41, Rarity.COMMON, mage.cards.c.CorridorMonitor.class));
|
||||||
cards.add(new SetCardInfo("Crystal Slipper", 119, Rarity.COMMON, mage.cards.c.CrystalSlipper.class));
|
cards.add(new SetCardInfo("Crystal Slipper", 119, Rarity.COMMON, mage.cards.c.CrystalSlipper.class));
|
||||||
|
cards.add(new SetCardInfo("Embereth Paladin", 121, Rarity.COMMON, mage.cards.e.EmberethPaladin.class));
|
||||||
|
cards.add(new SetCardInfo("Embereth Shieldbreaker", 122, Rarity.UNCOMMON, mage.cards.e.EmberethShieldbreaker.class));
|
||||||
|
cards.add(new SetCardInfo("Embereth Skyblazer", 321, Rarity.RARE, mage.cards.e.EmberethSkyblazer.class));
|
||||||
|
cards.add(new SetCardInfo("Eye Collector", 86, Rarity.COMMON, mage.cards.e.EyeCollector.class));
|
||||||
|
cards.add(new SetCardInfo("Faerie Formation", 316, Rarity.RARE, mage.cards.f.FaerieFormation.class));
|
||||||
cards.add(new SetCardInfo("Fireborn Knight", 210, Rarity.UNCOMMON, mage.cards.f.FirebornKnight.class));
|
cards.add(new SetCardInfo("Fireborn Knight", 210, Rarity.UNCOMMON, mage.cards.f.FirebornKnight.class));
|
||||||
|
cards.add(new SetCardInfo("Flaxen Intruder", 155, Rarity.UNCOMMON, mage.cards.f.FlaxenIntruder.class));
|
||||||
|
cards.add(new SetCardInfo("Foulmire Knight", 90, Rarity.UNCOMMON, mage.cards.f.FoulmireKnight.class));
|
||||||
|
cards.add(new SetCardInfo("Garruk, Cursed Huntsman", 191, Rarity.MYTHIC, mage.cards.g.GarrukCursedHuntsman.class));
|
||||||
cards.add(new SetCardInfo("Gilded Goose", 160, Rarity.RARE, mage.cards.g.GildedGoose.class));
|
cards.add(new SetCardInfo("Gilded Goose", 160, Rarity.RARE, mage.cards.g.GildedGoose.class));
|
||||||
|
cards.add(new SetCardInfo("Gluttonous Troll", 327, Rarity.RARE, mage.cards.g.GluttonousTroll.class));
|
||||||
cards.add(new SetCardInfo("Golden Egg", 220, Rarity.COMMON, mage.cards.g.GoldenEgg.class));
|
cards.add(new SetCardInfo("Golden Egg", 220, Rarity.COMMON, mage.cards.g.GoldenEgg.class));
|
||||||
cards.add(new SetCardInfo("Heraldic Banner", 222, Rarity.UNCOMMON, mage.cards.h.HeraldicBanner.class));
|
cards.add(new SetCardInfo("Heraldic Banner", 222, Rarity.UNCOMMON, mage.cards.h.HeraldicBanner.class));
|
||||||
|
cards.add(new SetCardInfo("Inspiring Veteran", 194, Rarity.UNCOMMON, mage.cards.i.InspiringVeteran.class));
|
||||||
|
cards.add(new SetCardInfo("Lovestruck Beast", 165, Rarity.RARE, mage.cards.l.LovestruckBeast.class));
|
||||||
|
cards.add(new SetCardInfo("Mace of the Valiant", 314, Rarity.RARE, mage.cards.m.MaceOfTheValiant.class));
|
||||||
cards.add(new SetCardInfo("Maraleaf Pixie", 196, Rarity.UNCOMMON, mage.cards.m.MaraleafPixie.class));
|
cards.add(new SetCardInfo("Maraleaf Pixie", 196, Rarity.UNCOMMON, mage.cards.m.MaraleafPixie.class));
|
||||||
cards.add(new SetCardInfo("Rankle, Master of Pranks", 356, Rarity.MYTHIC, mage.cards.r.RankleMasterOfPranks.class));
|
cards.add(new SetCardInfo("Order of Midnight", 99, Rarity.UNCOMMON, mage.cards.o.OrderOfMidnight.class));
|
||||||
|
cards.add(new SetCardInfo("Rankle, Master of Pranks", 101, Rarity.MYTHIC, mage.cards.r.RankleMasterOfPranks.class));
|
||||||
|
cards.add(new SetCardInfo("Rosethorn Acolyte", 174, Rarity.COMMON, mage.cards.r.RosethornAcolyte.class));
|
||||||
cards.add(new SetCardInfo("Run Away Together", 62, Rarity.COMMON, mage.cards.r.RunAwayTogether.class));
|
cards.add(new SetCardInfo("Run Away Together", 62, Rarity.COMMON, mage.cards.r.RunAwayTogether.class));
|
||||||
|
cards.add(new SetCardInfo("Savvy Hunter", 200, Rarity.UNCOMMON, mage.cards.s.SavvyHunter.class));
|
||||||
|
cards.add(new SetCardInfo("Shimmer Dragon", 317, Rarity.RARE, mage.cards.s.ShimmerDragon.class));
|
||||||
|
cards.add(new SetCardInfo("Shinechaser", 201, Rarity.UNCOMMON, mage.cards.s.Shinechaser.class));
|
||||||
|
cards.add(new SetCardInfo("Shining Armor", 29, Rarity.COMMON, mage.cards.s.ShiningArmor.class));
|
||||||
cards.add(new SetCardInfo("Silverflame Ritual", 30, Rarity.COMMON, mage.cards.s.SilverflameRitual.class));
|
cards.add(new SetCardInfo("Silverflame Ritual", 30, Rarity.COMMON, mage.cards.s.SilverflameRitual.class));
|
||||||
cards.add(new SetCardInfo("Slaying Fire", 143, Rarity.COMMON, mage.cards.s.SlayingFire.class));
|
cards.add(new SetCardInfo("Slaying Fire", 143, Rarity.UNCOMMON, mage.cards.s.SlayingFire.class));
|
||||||
|
cards.add(new SetCardInfo("Steelbane Hydra", 322, Rarity.RARE, mage.cards.s.SteelbaneHydra.class));
|
||||||
|
cards.add(new SetCardInfo("Taste of Death", 320, Rarity.RARE, mage.cards.t.TasteOfDeath.class));
|
||||||
|
cards.add(new SetCardInfo("The Circle of Loyalty", 9, Rarity.MYTHIC, mage.cards.t.TheCircleOfLoyalty.class));
|
||||||
|
cards.add(new SetCardInfo("Thornwood Falls", 313, Rarity.COMMON, mage.cards.t.ThornwoodFalls.class));
|
||||||
cards.add(new SetCardInfo("Tome Raider", 68, Rarity.COMMON, mage.cards.t.TomeRaider.class));
|
cards.add(new SetCardInfo("Tome Raider", 68, Rarity.COMMON, mage.cards.t.TomeRaider.class));
|
||||||
|
cards.add(new SetCardInfo("Tome of Legends", 332, Rarity.RARE, mage.cards.t.TomeOfLegends.class));
|
||||||
|
cards.add(new SetCardInfo("Wind-Scarred Crag", 308, Rarity.COMMON, mage.cards.w.WindScarredCrag.class));
|
||||||
cards.add(new SetCardInfo("Wishful Merfolk", 73, Rarity.COMMON, mage.cards.w.WishfulMerfolk.class));
|
cards.add(new SetCardInfo("Wishful Merfolk", 73, Rarity.COMMON, mage.cards.w.WishfulMerfolk.class));
|
||||||
cards.add(new SetCardInfo("Witching Well", 74, Rarity.COMMON, mage.cards.w.WitchingWell.class));
|
cards.add(new SetCardInfo("Witching Well", 74, Rarity.COMMON, mage.cards.w.WitchingWell.class));
|
||||||
|
|
||||||
|
// This is here to prevent the incomplete adventure implementation from causing problems and will be removed
|
||||||
|
cards.removeIf(setCardInfo -> AdventureCard.class.isAssignableFrom(setCardInfo.getCardClass()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
26
Mage/src/main/java/mage/cards/AdventureCard.java
Normal file
26
Mage/src/main/java/mage/cards/AdventureCard.java
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
package mage.cards;
|
||||||
|
|
||||||
|
import mage.abilities.SpellAbility;
|
||||||
|
import mage.constants.CardType;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author TheElk801
|
||||||
|
*/
|
||||||
|
public abstract class AdventureCard extends CardImpl {
|
||||||
|
|
||||||
|
protected SpellAbility adventureSpellAbility = new SpellAbility(null, null);
|
||||||
|
|
||||||
|
public AdventureCard(UUID ownerId, CardSetInfo setInfo, CardType[] typesLeft, CardType[] typesRight, String costsLeft, String adventureName, String costsRight) {
|
||||||
|
super(ownerId, setInfo, typesLeft, costsLeft);
|
||||||
|
}
|
||||||
|
|
||||||
|
public AdventureCard(AdventureCard card) {
|
||||||
|
super(card);
|
||||||
|
}
|
||||||
|
|
||||||
|
public SpellAbility getAdventureSpellAbility() {
|
||||||
|
return adventureSpellAbility;
|
||||||
|
}
|
||||||
|
}
|
|
@ -14,7 +14,8 @@ public enum SpellAbilityType {
|
||||||
SPLIT_LEFT("LeftSplit SpellAbility"),
|
SPLIT_LEFT("LeftSplit SpellAbility"),
|
||||||
SPLIT_RIGHT("RightSplit SpellAbility"),
|
SPLIT_RIGHT("RightSplit SpellAbility"),
|
||||||
MODE("Mode SpellAbility"),
|
MODE("Mode SpellAbility"),
|
||||||
SPLICE("Spliced SpellAbility");
|
SPLICE("Spliced SpellAbility"),
|
||||||
|
ADVENTURE("Adventure SpellAbility");
|
||||||
|
|
||||||
private final String text;
|
private final String text;
|
||||||
|
|
||||||
|
|
|
@ -240,6 +240,7 @@ public enum SubType {
|
||||||
NIGHTMARE("Nightmare", SubTypeSet.CreatureType),
|
NIGHTMARE("Nightmare", SubTypeSet.CreatureType),
|
||||||
NIGHTSTALKER("Nightstalker", SubTypeSet.CreatureType),
|
NIGHTSTALKER("Nightstalker", SubTypeSet.CreatureType),
|
||||||
NINJA("Ninja", SubTypeSet.CreatureType),
|
NINJA("Ninja", SubTypeSet.CreatureType),
|
||||||
|
NOBLE("Noble", SubTypeSet.CreatureType),
|
||||||
NOGGLE("Noggle", SubTypeSet.CreatureType),
|
NOGGLE("Noggle", SubTypeSet.CreatureType),
|
||||||
NOMAD("Nomad", SubTypeSet.CreatureType),
|
NOMAD("Nomad", SubTypeSet.CreatureType),
|
||||||
NYMPH("Nymph", SubTypeSet.CreatureType),
|
NYMPH("Nymph", SubTypeSet.CreatureType),
|
||||||
|
|
|
@ -1,8 +1,3 @@
|
||||||
/*
|
|
||||||
* To change this license header, choose License Headers in Project Properties.
|
|
||||||
* To change this template file, choose Tools | Templates
|
|
||||||
* and open the template in the editor.
|
|
||||||
*/
|
|
||||||
package mage.filter.predicate.permanent;
|
package mage.filter.predicate.permanent;
|
||||||
|
|
||||||
import mage.filter.predicate.Predicate;
|
import mage.filter.predicate.Predicate;
|
||||||
|
|
|
@ -0,0 +1,37 @@
|
||||||
|
package mage.game.command.emblems;
|
||||||
|
|
||||||
|
import mage.abilities.Ability;
|
||||||
|
import mage.abilities.common.SimpleStaticAbility;
|
||||||
|
import mage.abilities.effects.common.continuous.BoostControlledEffect;
|
||||||
|
import mage.abilities.effects.common.continuous.GainAbilityControlledEffect;
|
||||||
|
import mage.abilities.keyword.TrampleAbility;
|
||||||
|
import mage.constants.Duration;
|
||||||
|
import mage.constants.Zone;
|
||||||
|
import mage.filter.StaticFilters;
|
||||||
|
import mage.game.command.Emblem;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author TheElk801
|
||||||
|
*/
|
||||||
|
public final class GarrukCursedHuntsmanEmblem extends Emblem {
|
||||||
|
|
||||||
|
// -6: You get an emblem with "Creatures you control get +3/+3 and have trample."
|
||||||
|
public GarrukCursedHuntsmanEmblem() {
|
||||||
|
this.setName("Emblem Garruk");
|
||||||
|
this.setExpansionSetCodeForImage("ELD");
|
||||||
|
Ability ability = new SimpleStaticAbility(
|
||||||
|
Zone.COMMAND,
|
||||||
|
new BoostControlledEffect(
|
||||||
|
3, 3, Duration.EndOfGame,
|
||||||
|
StaticFilters.FILTER_PERMANENT_CREATURES,
|
||||||
|
false
|
||||||
|
).setText("creatures you control get +3/+3")
|
||||||
|
);
|
||||||
|
ability.addEffect(new GainAbilityControlledEffect(
|
||||||
|
TrampleAbility.getInstance(),
|
||||||
|
Duration.EndOfGame,
|
||||||
|
StaticFilters.FILTER_PERMANENT_CREATURES
|
||||||
|
).setText("and have trample"));
|
||||||
|
this.getAbilities().add(ability);
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
package mage.game.permanent.token.custom;
|
package mage.game.permanent.token;
|
||||||
|
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.common.SimpleActivatedAbility;
|
import mage.abilities.common.SimpleActivatedAbility;
|
||||||
|
@ -9,14 +9,12 @@ import mage.abilities.effects.common.GainLifeEffect;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.constants.SubType;
|
import mage.constants.SubType;
|
||||||
import mage.constants.Zone;
|
import mage.constants.Zone;
|
||||||
import mage.game.permanent.token.TokenImpl;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author jmharmon
|
* @author jmharmon
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,39 @@
|
||||||
|
package mage.game.permanent.token;
|
||||||
|
|
||||||
|
import mage.MageInt;
|
||||||
|
import mage.abilities.common.DiesTriggeredAbility;
|
||||||
|
import mage.abilities.effects.common.counter.AddCountersAllEffect;
|
||||||
|
import mage.constants.CardType;
|
||||||
|
import mage.constants.SubType;
|
||||||
|
import mage.counters.CounterType;
|
||||||
|
import mage.filter.FilterPermanent;
|
||||||
|
import mage.filter.common.FilterControlledPermanent;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author TheElk801
|
||||||
|
*/
|
||||||
|
public final class GarrukCursedHuntsmanToken extends TokenImpl {
|
||||||
|
|
||||||
|
private static final FilterPermanent filter
|
||||||
|
= new FilterControlledPermanent(SubType.GARRUK, "Garruk you control");
|
||||||
|
|
||||||
|
public GarrukCursedHuntsmanToken() {
|
||||||
|
super("Wolf", "2/2 black and green Wolf creature token with \"When this creature dies, put a loyalty counter on each Garruk you control.\"");
|
||||||
|
cardType.add(CardType.CREATURE);
|
||||||
|
color.setBlack(true);
|
||||||
|
color.setGreen(true);
|
||||||
|
subtype.add(SubType.WOLF);
|
||||||
|
power = new MageInt(2);
|
||||||
|
toughness = new MageInt(2);
|
||||||
|
|
||||||
|
this.addAbility(new DiesTriggeredAbility(new AddCountersAllEffect(CounterType.LOYALTY.createInstance(), filter)));
|
||||||
|
}
|
||||||
|
|
||||||
|
public GarrukCursedHuntsmanToken(final GarrukCursedHuntsmanToken token) {
|
||||||
|
super(token);
|
||||||
|
}
|
||||||
|
|
||||||
|
public GarrukCursedHuntsmanToken copy() {
|
||||||
|
return new GarrukCursedHuntsmanToken(this);
|
||||||
|
}
|
||||||
|
}
|
|
@ -5,21 +5,24 @@ import mage.filter.common.FilterControlledPermanent;
|
||||||
import mage.target.TargetPermanent;
|
import mage.target.TargetPermanent;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author BetaSteward_at_googlemail.com
|
* @author BetaSteward_at_googlemail.com
|
||||||
*/
|
*/
|
||||||
public class TargetControlledPermanent extends TargetPermanent {
|
public class TargetControlledPermanent extends TargetPermanent {
|
||||||
|
|
||||||
public TargetControlledPermanent() {
|
public TargetControlledPermanent() {
|
||||||
this(1, 1, StaticFilters.FILTER_CONTROLLED_PERMANENT, false);
|
this(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
public TargetControlledPermanent(int numTargets) {
|
public TargetControlledPermanent(int numTargets) {
|
||||||
this(numTargets, numTargets, StaticFilters.FILTER_CONTROLLED_PERMANENT, false);
|
this(numTargets, StaticFilters.FILTER_CONTROLLED_PERMANENT);
|
||||||
}
|
}
|
||||||
|
|
||||||
public TargetControlledPermanent(FilterControlledPermanent filter) {
|
public TargetControlledPermanent(FilterControlledPermanent filter) {
|
||||||
this(1, 1, filter, false);
|
this(1, filter);
|
||||||
|
}
|
||||||
|
|
||||||
|
public TargetControlledPermanent(int numTargets, FilterControlledPermanent filter) {
|
||||||
|
this(numTargets, numTargets, filter, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public TargetControlledPermanent(int minNumTargets, int maxNumTargets, FilterControlledPermanent filter, boolean notTarget) {
|
public TargetControlledPermanent(int minNumTargets, int maxNumTargets, FilterControlledPermanent filter, boolean notTarget) {
|
||||||
|
|
|
@ -35993,47 +35993,70 @@ Island|Commander 2019|291|C||Basic Land - Island|||({T}: Add {U}.)|
|
||||||
Swamp|Commander 2019|294|C||Basic Land - Swamp|||({T}: Add {B}.)|
|
Swamp|Commander 2019|294|C||Basic Land - Swamp|||({T}: Add {B}.)|
|
||||||
Mountain|Commander 2019|297|C||Basic Land - Mountain|||({T}: Add {R}.)|
|
Mountain|Commander 2019|297|C||Basic Land - Mountain|||({T}: Add {R}.)|
|
||||||
Forest|Commander 2019|300|C||Basic Land - Forest|||({T}: Add {G}.)|
|
Forest|Commander 2019|300|C||Basic Land - Forest|||({T}: Add {G}.)|
|
||||||
Silverflame Ritual|Throne of Eldraine|30|C|{3}{W}|Sorcery|||Put a +1/+1 counter on each creature you control.$Adamant — If at least three white mana was spent to cast this spell, creatures you controol gain vigilance until end of turn.|
|
All That Glitters|Throne of Eldraine|2|U|{1}{W}|Enchantment - Aura|||Enchant creature$Enchanted creature gets +1/+1 for each artifact and/or enchantment you control.|
|
||||||
|
The Circle of Loyalty|Throne of Eldraine|9|M|{4}{W}{W}|Legendary Artifact|||This spell costs {1} less to cast for each Knight you control.$Creatures you control get +1/+1.$Whenever you cast a legendary spell, create a 2/2 white Knight creature token with vigilance.${3}{W}, {T}: Create a 2/2 white Knight creature token with vigilance.|
|
||||||
|
Shining Armor|Throne of Eldraine|29|C|{1}{W}|Artifact - Equipment|||Flash$When Shining Armor enters the battlefield, attach it to target Knight you control.$Equipped creature gets +0/+2 and has vigilance.$Equip {3}|
|
||||||
|
Silverflame Ritual|Throne of Eldraine|30|C|{3}{W}|Sorcery|||Put a +1/+1 counter on each creature you control.$Adamant — If at least three white mana was spent to cast this spell, creatures you control gain vigilance until end of turn.|
|
||||||
|
Animating Faerie|Throne of Eldraine|38|U|{2}{U}|Creature - Faerie|2|2|Flying|
|
||||||
|
Bring to Life|Throne of Eldraine|38|U|{2}{U}|Sorcery - Adventure|2|2|Target noncreature artifact you control becomes a 0/0 artifact creature. Put four +1/+1 counters on it.|
|
||||||
|
Corridor Monitor|Throne of Eldraine|41|C|{1}{U}|Artifact Creature - Construct|1|4|When Corridor Monitor enters the battlefield, untap target artifact or creature you control.|
|
||||||
Faerie Vandal|Throne of Eldraine|45|U|{1}{U}|Creature - Faerie Rogue|1|2|Flash$Flying$Whenever you draw your second card each turn, put a +1/+1 counter on Faerie Vandal.|
|
Faerie Vandal|Throne of Eldraine|45|U|{1}{U}|Creature - Faerie Rogue|1|2|Flash$Flying$Whenever you draw your second card each turn, put a +1/+1 counter on Faerie Vandal.|
|
||||||
|
Frogify|Throne of Eldraine|47|U|{1}{U}|Enchantment - Aura|||Enchant creature$Enchanted creature loses all abilities and is a blue Frog creature with base power and toughness 1/1.|
|
||||||
|
Midnight Clock|Throne of Eldraine|54|R|{2}{U}|Artifact|||{T}: Add {U}.${2}{U}: Put an hour counter on Midnight Clock.$At the beginning of each upkeep, put an hour counter on Midnight Clock.$When the twelfth hour counter is put on Midnight Clock, shuffle your hand and graveyard into your library, then draw seven cards. Exile Midnight Clock.|
|
||||||
Run Away Together|Throne of Eldraine|62|C|{1}{U}|Instant|||Choose two target creatures controlled by different players. Return those creatures to their owners' hands.|
|
Run Away Together|Throne of Eldraine|62|C|{1}{U}|Instant|||Choose two target creatures controlled by different players. Return those creatures to their owners' hands.|
|
||||||
Tome Raider|Throne of Eldraine|68|C|{2}{U}|Creature - Faerie|1|1|Flying$When Tome Raider enters the battlefield, draw a card.|
|
Tome Raider|Throne of Eldraine|68|C|{2}{U}|Creature - Faerie|1|1|Flying$When Tome Raider enters the battlefield, draw a card.|
|
||||||
Wishful Merfolk|Throne of Eldraine|73|C|{1}{U}|Creature - Merfolk|3|2|Defender${1}{U}: Wishful Merfolk loses defender and becomes a Human until end of turn.|
|
Wishful Merfolk|Throne of Eldraine|73|C|{1}{U}|Creature - Merfolk|3|2|Defender${1}{U}: Wishful Merfolk loses defender and becomes a Human until end of turn.|
|
||||||
Witching Well|Throne of Eldraine|74|C|{U}|Artifact|||When Witching Well enters the battlefield, scry 2.${3}{U}, Sacrifice Witching Well: Draw two cards.|
|
Witching Well|Throne of Eldraine|74|C|{U}|Artifact|||When Witching Well enters the battlefield, scry 2.${3}{U}, Sacrifice Witching Well: Draw two cards.|
|
||||||
Bake into a Pie|Throne of Eldraine|76|C|{2}{B}{B}|Instant|||Destroy target creature. Create a Food token.|
|
Bake into a Pie|Throne of Eldraine|76|C|{2}{B}{B}|Instant|||Destroy target creature. Create a Food token.|
|
||||||
|
Belle of the Brawl|Throne of Eldraine|78|U|{2}{B}|Creature - Human Knight|3|2|Menace$Whenever Belle of the Brawl attacks, other Knights you control get +1/+0 until end of turn.|
|
||||||
Eye Collector|Throne of Eldraine|86|C|{B}|Creature - Faerie|1|1|Flying$Whenever Eye Collector deals combat damage to a player, each player puts the top card of their library into their graveyard.|
|
Eye Collector|Throne of Eldraine|86|C|{B}|Creature - Faerie|1|1|Flying$Whenever Eye Collector deals combat damage to a player, each player puts the top card of their library into their graveyard.|
|
||||||
Foulmire Knight|Throne of Eldraine|90|U|{B}|Creature - Zombie Knight|1|1|Deathtouch|
|
Foulmire Knight|Throne of Eldraine|90|U|{B}|Creature - Zombie Knight|1|1|Deathtouch|
|
||||||
Profane Insight|Throne of Eldraine|90|U|{2}{B}|Instant - Adventure|1|1|You draw a card and you lose 1 life.|
|
Profane Insight|Throne of Eldraine|90|U|{2}{B}|Instant - Adventure|1|1|You draw a card and you lose 1 life.|
|
||||||
Alter Fate|Throne of Eldraine|99|U|{1}{B}|Sorcery - Adventure|2|2|Return target creature card from your graveyard to your hand.|
|
Alter Fate|Throne of Eldraine|99|U|{1}{B}|Sorcery - Adventure|2|2|Return target creature card from your graveyard to your hand.|
|
||||||
Order of Midnight|Throne of Eldraine|99|U|{1}{B}|Creature - Human Knight|2|2|Flying$Order of Midnight can't block.|
|
Order of Midnight|Throne of Eldraine|99|U|{1}{B}|Creature - Human Knight|2|2|Flying$Order of Midnight can't block.|
|
||||||
|
Piper of the Swarm|Throne of Eldraine|100|R|{1}{B}|Creature - Human Warlock|1|3|Rats you control have menace.${1}{B}, {T}: Create a 1/1 black Rat creature token.${2}{B}{B}, {T}, Sacrifice three Rats: Gain control of target creature.|
|
||||||
|
Rankle, Master of Pranks|Throne of Eldraine|101|M|{2}{B}{B}|Legendary Creature - Faerie Rogue|3|3|Flying, haste$Whenever Rankle, Master of Pranks deals combat damage to a player, choose any number —$• Each player discards a card.$• Each player loses 1 life and draws a card.$• Each player sacrifices a creature.|
|
||||||
Curry Favor|Throne of Eldraine|105|C|{B}|Sorcery - Adventure|2|1|You gain X life and each opponent loses X life, where X is the number of Knights you control.|
|
Curry Favor|Throne of Eldraine|105|C|{B}|Sorcery - Adventure|2|1|You gain X life and each opponent loses X life, where X is the number of Knights you control.|
|
||||||
Smitten Swordmaster|Throne of Eldraine|105|C|{1}{B}|Creature - Human Knight|2|1|Lifelink|
|
Smitten Swordmaster|Throne of Eldraine|105|C|{1}{B}|Creature - Human Knight|2|1|Lifelink|
|
||||||
Syr Konrad, the Grim|Throne of Eldraine|107|U|{3}{B}{B}|Legendary Creature - Human Knight|5|4|Whenever another creature dies, or a creature card is put into a graveyard from anywhere other than the battlefield, or a creature card leaves your graveyard, Syr Konrad, the Grim deals 1 damage to each opponent.${1}{B}: Each player puts the top card of their library into their graveyard.|
|
Syr Konrad, the Grim|Throne of Eldraine|107|U|{3}{B}{B}|Legendary Creature - Human Knight|5|4|Whenever another creature dies, or a creature card is put into a graveyard from anywhere other than the battlefield, or a creature card leaves your graveyard, Syr Konrad, the Grim deals 1 damage to each opponent.${1}{B}: Each player puts the top card of their library into their graveyard.|
|
||||||
Crystal Slipper|Throne of Eldraine|119|C|{1}{R}|Artifact - Equipment|||Equipped creature gets +1/+0 and has haste.$Equip {1}|
|
Crystal Slipper|Throne of Eldraine|119|C|{1}{R}|Artifact - Equipment|||Equipped creature gets +1/+0 and has haste.$Equip {1}|
|
||||||
Embereth Paladin|Throne of Eldraine|121|C|{3}{R}|Creature - Human Knight|4|1|Haste$Adamant — If at least three red mana was spent to cast this spell, Embereth Paladin enters the battlefield with a +1/+1 counter on it.|
|
Embereth Paladin|Throne of Eldraine|121|C|{3}{R}|Creature - Human Knight|4|1|Haste$Adamant — If at least three red mana was spent to cast this spell, Embereth Paladin enters the battlefield with a +1/+1 counter on it.|
|
||||||
Slaying Fire|Throne of Eldraine|143|C|{2}{R}|Instant|||Slaying Fire deals 3 damage to any target.$Adamant — If at least three red mana was spent to cast this spell, it deals 4 damage instead.|
|
Battle Display|Throne of Eldraine|122|U|{R}|Sorcery - Adventure|2|1|Destroy target artifact.|
|
||||||
|
Embereth Shieldbreaker|Throne of Eldraine|122|U|{1}{R}|Creature - Human Knight|2|1||
|
||||||
|
Slaying Fire|Throne of Eldraine|143|U|{2}{R}|Instant|||Slaying Fire deals 3 damage to any target.$Adamant — If at least three red mana was spent to cast this spell, it deals 4 damage instead.|
|
||||||
Beanstalk Giant|Throne of Eldraine|149|U|{6}{G}|Creature - Giant|*|*|Beanstalk Giant's power and toughness are each equal to the number of lands you control.|
|
Beanstalk Giant|Throne of Eldraine|149|U|{6}{G}|Creature - Giant|*|*|Beanstalk Giant's power and toughness are each equal to the number of lands you control.|
|
||||||
Fertile Footsteps|Throne of Eldraine|149|U|{2}{G}|Sorcery - Adventure|*|*|Search your library for a basic land card, put it onto the battlefield, then shuffle your library.|
|
Fertile Footsteps|Throne of Eldraine|149|U|{2}{G}|Sorcery - Adventure|*|*|Search your library for a basic land card, put it onto the battlefield, then shuffle your library.|
|
||||||
|
Flaxen Intruder|Throne of Eldraine|155|U|{G}|Creature - Human Berserker|1|2|Whenever Flaxen Intruder deals combat damage to a player, you may sacrifice it. When you do, destroy target artifact or enchantment.|
|
||||||
|
Welcome Home|Throne of Eldraine|155|U|{5}{G}{G}|Sorcery - Adventure|1|2|Create three 2/2 green Bear creature tokens.|
|
||||||
Gilded Goose|Throne of Eldraine|160|R|{G}|Creature - Bird|0|2|Flying$When Gilded Goose enters the battlefield, create a Food token.${1}{G}, {T}: Create a Food token.${T}, Sacrifice a Food: Add one mana of any color.|
|
Gilded Goose|Throne of Eldraine|160|R|{G}|Creature - Bird|0|2|Flying$When Gilded Goose enters the battlefield, create a Food token.${1}{G}, {T}: Create a Food token.${T}, Sacrifice a Food: Add one mana of any color.|
|
||||||
|
Keeper of Fables|Throne of Eldraine|163|U|{3}{G}{G}|Creature - Cat|4|5|Whenever one or more non-Human creatures you control deal combat damage to a player, draw a card.|
|
||||||
|
Heart's Desire|Throne of Eldraine|165|R|{G}|Sorcery - Adventure|5|5|Create a 1/1 white Human creature token.|
|
||||||
|
Lovestruck Beast|Throne of Eldraine|165|R|{2}{G}|Creature - Beast Noble|5|5|Lovestruck Beast can't attack unless you control a 1/1 creature.|
|
||||||
|
Rosethorn Acolyte|Throne of Eldraine|174|C|{2}{G}|Creature - Elf Druid|2|3|{T}: Add one mana of any color.|
|
||||||
|
Seasonal Ritual|Throne of Eldraine|174|C|{G}|Sorcery - Adventure|2|3|Add one mana of any color.|
|
||||||
|
Garruk, Cursed Huntsman|Throne of Eldraine|191|M|{4}{B}{G}|Legendary Planeswalker - Garruk|5|0: Create two 2/2 black and green Wolf creature tokens with "When this creature dies, put a loyalty counter on each Garruk you control."$−3: Destroy target creature. Draw a card.$−6: You get an emblem with "Creatures you control get +3/+3 and have trample."|
|
||||||
|
Inspiring Veteran|Throne of Eldraine|194|U|{R}{W}|Creature - Human Knight|2|2|Other Knights you control get +1/+1.|
|
||||||
Maraleaf Pixie|Throne of Eldraine|196|U|{G}{U}|Creature - Faerie|2|2|Flying${T}: Add {G} or {U}.|
|
Maraleaf Pixie|Throne of Eldraine|196|U|{G}{U}|Creature - Faerie|2|2|Flying${T}: Add {G} or {U}.|
|
||||||
Oko, Thief of Crowns|Throne of Eldraine|197|M|{1}{G}{U}|Legendary Planeswalker - Oko|4|+2: Create a Food token.$+1: Target artifact or creature loses all abilities and becomes a green Elk creature with base power and toughness 3/3.$−5: Exchange control of target artifact or creature you control and target creature an opponent controls with power 3 or less.|
|
Oko, Thief of Crowns|Throne of Eldraine|197|M|{1}{G}{U}|Legendary Planeswalker - Oko|4|+2: Create a Food token.$+1: Target artifact or creature loses all abilities and becomes a green Elk creature with base power and toughness 3/3.$−5: Exchange control of target artifact or creature you control and target creature an opponent controls with power 3 or less.|
|
||||||
|
Savvy Hunter|Throne of Eldraine|200|U|{1}{B}{G}|Creature - Human Warrior|3|3|Whenever Savvy Hunter attacks or blocks, create a Food token.$Sacrifice two Foods: Draw a card.|
|
||||||
|
Shinechaser|Throne of Eldraine|201|U|{1}{W}{U}|Creature - Faerie|1|1|Flying, vigilance$Shinechaser gets +1/+1 as long as you control an artifact.$Shinechaser gets +1/+1 as long as you control an enchantment.|
|
||||||
|
Steelclaw Lance|Throne of Eldraine|202|U|{B}{R}|Artifact - Equipment|||Equipped creature gets +2/+2.$Equip Knight {1}$Equip {3}|
|
||||||
Wintermoor Commander|Throne of Eldraine|205|U|{W}{B}|Creature - Human Knight|2|*|Deathtouch$Wintermoor Commander's toughness is equal to the number of Knights you control.$Whenever Wintermoor Commander attacks, another target Knight you control gains indestructible until end of turn.|
|
Wintermoor Commander|Throne of Eldraine|205|U|{W}{B}|Creature - Human Knight|2|*|Deathtouch$Wintermoor Commander's toughness is equal to the number of Knights you control.$Whenever Wintermoor Commander attacks, another target Knight you control gains indestructible until end of turn.|
|
||||||
|
Arcanist's Owl|Throne of Eldraine|206|U|{W/U}{W/U}{W/U}{W/U}|Artifact Creature - Bird|3|3|Flying$When Arcanist's Owl enters the battlefield, look at the top four cards of your library. You may reveal an artifact or enchantment card from among them and put it into your hand. Put the rest on the bottom of your library in a random order.|
|
||||||
Fireborn Knight|Throne of Eldraine|210|U|{R/W}{R/W}{R/W}{R/W}|Creature - Human Knight|2|3|Double strike${R/W}{R/W}{R/W}{R/W}: Fireborn Knight gets +1/+1 until end of turn.|
|
Fireborn Knight|Throne of Eldraine|210|U|{R/W}{R/W}{R/W}{R/W}|Creature - Human Knight|2|3|Double strike${R/W}{R/W}{R/W}{R/W}: Fireborn Knight gets +1/+1 until end of turn.|
|
||||||
Golden Egg|Throne of Eldraine|220|C|{2}|Artifact - Food|||When Golden Egg enters the battlefield, draw a card.${1}, {T}: Sacrifice Golden Egg: Add one mana of any color.${2}, {T}, Sacrifice Golden Egg: You gain 3 life.|
|
Golden Egg|Throne of Eldraine|220|C|{2}|Artifact - Food|||When Golden Egg enters the battlefield, draw a card.${1}, {T}: Sacrifice Golden Egg: Add one mana of any color.${2}, {T}, Sacrifice Golden Egg: You gain 3 life.|
|
||||||
Heraldic Banner|Throne of Eldraine|222|U|{3}|Artifact|||As Heraldic Banner enters the battlefield, choose a color.$Creatures you control of the chosen color get +1/+0.${T}: Add one mana of the chosen color.|
|
Heraldic Banner|Throne of Eldraine|222|U|{3}|Artifact|||As Heraldic Banner enters the battlefield, choose a color.$Creatures you control of the chosen color get +1/+0.${T}: Add one mana of the chosen color.|
|
||||||
Tournament Grounds|Throne of Eldraine|248|U||Land|||{T}: Add {C}.${T}: Add {R}, {W}, or {B}. Spend this mana only to cast a Knight or Equipment spell.|
|
Tournament Grounds|Throne of Eldraine|248|U||Land|||{T}: Add {C}.${T}: Add {R}, {W}, or {B}. Spend this mana only to cast a Knight or Equipment spell.|
|
||||||
Witch's Cottage|Throne of Eldraine|249|C||Land - Swamp|||({T}: Add {B}.)$Witch's Cottage enters the battlefield tapped unless you control three or more other Swamps.$When Witch's Cottage enters the battlefield untapped, you may put target creature card from your graveyard on top of your library.|
|
Witch's Cottage|Throne of Eldraine|249|C||Land - Swamp|||({T}: Add {B}.)$Witch's Cottage enters the battlefield tapped unless you control three or more other Swamps.$When Witch's Cottage enters the battlefield untapped, you may put target creature card from your graveyard on top of your library.|
|
||||||
Garruk, Cursed Huntsman|Throne of Eldraine|270|M|{4}{B}{G}|Legendary Planeswalker - Garruk|5|0: Create two 2/2 black and green Wolf creature tokens with "When this creature dies, put a loyalty counter on each Garruk you control."$−3: Destroy target creature. Draw a card.$−6: You get an emblem with "Creatures you control get +3/+3 and have trample."|
|
Wind-Scarred Crag|Throne of Eldraine|308|C||Land|||Wind-Scarred Crag enters the battlefield tapped.$When Wind-Scarred Crag enters the battlefield, you gain 1 life.${T}: Add {R} or {W}.|
|
||||||
Battle Display|Throne of Eldraine|292|U|{R}|Sorcery - Adventure|2|1|Destroy target artifact.|
|
Thornwood Falls|Throne of Eldraine|313|C||Land|||Thornwood Falls enters the battlefield tapped.$When Thornwood Falls enters the battlefield, you gain 1 life.${T}: Add {G} or {U}.|
|
||||||
Embereth Shieldbreaker|Throne of Eldraine|292|U|{1}{R}|Creature - Human Knight|2|1||
|
|
||||||
Flaxen Intruder|Throne of Eldraine|297|U|{G}|Creature - Human Berserker|1|2|Whenever Flaxen Intruder deals combat damage to a player, you may sacrifice it. When you do, destroy target artifact or enchantment.|
|
|
||||||
Welcome Home|Throne of Eldraine|297|U|{5}{G}{G}|Sorcery - Adventure|1|2|Create three 2/2 green Bear creature tokens.|
|
|
||||||
Heart's Desire|Throne of Eldraine|299|R|{G}|Sorcery - Adventure|5|5|Create a 1/1 white Human creature token.|
|
|
||||||
Lovestruck Beast|Throne of Eldraine|299|R|{2}{G}|Creature - Beast Noble|5|5|Lovestruck Beast can't attack unless you control a 1/1 creature.|
|
|
||||||
Mace of the Valiant|Throne of Eldraine|314|R|{2}{W}|Artifact - Equipment|||Equipped creature gets +1/+1 for each charge counter on Mace of the Valiant and has vigilance.$Whenever a creature enters the battlefield under your control, put a charge counter on Mace of the Valiant.$Equip {3}|
|
Mace of the Valiant|Throne of Eldraine|314|R|{2}{W}|Artifact - Equipment|||Equipped creature gets +1/+1 for each charge counter on Mace of the Valiant and has vigilance.$Whenever a creature enters the battlefield under your control, put a charge counter on Mace of the Valiant.$Equip {3}|
|
||||||
Silverwing Squadron|Throne of Eldraine|315|R|{5}{W}|Creature - Human Knight|*|*|Flying, vigilance$Silverwing Squadron's power and toughness are each equal to the number of creatures you control.$Whenever Silverwing Squadron attacks, create a number of 2/2 white Knight creature tokens with vigilance equal to the number of opponents you have.|
|
Silverwing Squadron|Throne of Eldraine|315|R|{5}{W}|Creature - Human Knight|*|*|Flying, vigilance$Silverwing Squadron's power and toughness are each equal to the number of creatures you control.$Whenever Silverwing Squadron attacks, create a number of 2/2 white Knight creature tokens with vigilance equal to the number of opponents you have.|
|
||||||
|
Faerie Formation|Throne of Eldraine|316|R|{4}{U}|Creature - Faerie|5|4|Flying${3}{U}: Create a 1/1 blue Faerie creature token with flying. Draw a card.|
|
||||||
Shimmer Dragon|Throne of Eldraine|317|R|{4}{U}{U}|Creature - Dragon|5|6|Flying$As long as you control four or more artifacts, Shimmer Dragon has hexproof.$Tap two untapped artifacts you control: Draw a card.|
|
Shimmer Dragon|Throne of Eldraine|317|R|{4}{U}{U}|Creature - Dragon|5|6|Flying$As long as you control four or more artifacts, Shimmer Dragon has hexproof.$Tap two untapped artifacts you control: Draw a card.|
|
||||||
Workshop Elders|Throne of Eldraine|318|R|{6}{U}|Creature - Human Artificer|4|4|Artifact creatures you control have flying.$At the beginning of combat on your turn, you may have target noncreature artifact you control become a 0/0 artifact creature. If you do, put four +1/+1 counters on it.|
|
Workshop Elders|Throne of Eldraine|318|R|{6}{U}|Creature - Human Artificer|4|4|Artifact creatures you control have flying.$At the beginning of combat on your turn, you may have target noncreature artifact you control become a 0/0 artifact creature. If you do, put four +1/+1 counters on it.|
|
||||||
Chittering Witch|Throne of Eldraine|319|R|{3}{B}|Creature - Human Warlock|2|2|When Chittering Witch enters the battlefield, create a number of 1/1 black Rat creature tokens equal to the number of opponents you have.${1}{B}, Sacrifice a creature: Target creature gets -2/-2 until end of turn.|
|
Chittering Witch|Throne of Eldraine|319|R|{3}{B}|Creature - Human Warlock|2|2|When Chittering Witch enters the battlefield, create a number of 1/1 black Rat creature tokens equal to the number of opponents you have.${1}{B}, Sacrifice a creature: Target creature gets -2/-2 until end of turn.|
|
||||||
|
Taste of Death|Throne of Eldraine|320|R|{4}{B}{B}|Sorcery|||Each player sacrifices three creatures. You create three Food tokens.|
|
||||||
Embereth Skyblazer|Throne of Eldraine|321|R|{3}{R}|Creature - Human Knight|4|3|As long as it's your turn, Embereth Skyblazer has flying.$Whenever Embereth Skyblazer attacks, you may pay {2}{R}. If you do, creatures you control get +X/+0 until end of turn, where X is the number of opponents you have.|
|
Embereth Skyblazer|Throne of Eldraine|321|R|{3}{R}|Creature - Human Knight|4|3|As long as it's your turn, Embereth Skyblazer has flying.$Whenever Embereth Skyblazer attacks, you may pay {2}{R}. If you do, creatures you control get +X/+0 until end of turn, where X is the number of opponents you have.|
|
||||||
Steelbane Hydra|Throne of Eldraine|322|R|{X}{G}{G}|Creature - Turtle Hydra|||Steelbane Hydra enters the battlefield with X +1/+1 counters on it.${2}{G}, Remove a +1/+1 counter from Steelbane Hydra: Destroy target artifact or enchantment.|
|
Steelbane Hydra|Throne of Eldraine|322|R|{X}{G}{G}|Creature - Turtle Hydra|||Steelbane Hydra enters the battlefield with X +1/+1 counters on it.${2}{G}, Remove a +1/+1 counter from Steelbane Hydra: Destroy target artifact or enchantment.|
|
||||||
Thorn Mammoth|Throne of Eldraine|323|R|{5}{G}{G}|Creature - Elephant|6|6|Trample$Whenever Thorn Mammoth or another creature enters the battlefield under your control, Thorn Mammoth fights up to one target creature you don't control.|
|
Thorn Mammoth|Throne of Eldraine|323|R|{5}{G}{G}|Creature - Elephant|6|6|Trample$Whenever Thorn Mammoth or another creature enters the battlefield under your control, Thorn Mammoth fights up to one target creature you don't control.|
|
||||||
|
@ -36041,12 +36064,9 @@ Alela, Artful Provocateur|Throne of Eldraine|324|M|{1}{W}{U}{B}|Legendary Creatu
|
||||||
Banish into Fable|Throne of Eldraine|325|R|{4}{W}{U}|Instant|||When you cast this spell from your hand, copy it if you control an artifact, then copy it if you control an enchantment. You may choose new targets for the copies.$Return target nonland permanent to its owner's hand. You create a 2/2 white Knight creature token with vigilance.|
|
Banish into Fable|Throne of Eldraine|325|R|{4}{W}{U}|Instant|||When you cast this spell from your hand, copy it if you control an artifact, then copy it if you control an enchantment. You may choose new targets for the copies.$Return target nonland permanent to its owner's hand. You create a 2/2 white Knight creature token with vigilance.|
|
||||||
Chulane, Teller of Tales|Throne of Eldraine|326|M|{2}{G}{W}{U}|Legendary Creature - Human Druid|2|4|Vigilance$Whenever you cast a creature spell, draw a card, then you may put a land card from your hand onto the battlefield.${3}, {T}: Return target creature you control to its owner's hand.|
|
Chulane, Teller of Tales|Throne of Eldraine|326|M|{2}{G}{W}{U}|Legendary Creature - Human Druid|2|4|Vigilance$Whenever you cast a creature spell, draw a card, then you may put a land card from your hand onto the battlefield.${3}, {T}: Return target creature you control to its owner's hand.|
|
||||||
Gluttonous Troll|Throne of Eldraine|327|R|{2}{B}{G}|Creature - Troll|3|3|Trample$When Gluttonous Troll enters the battlefield, create a number of Food tokens equal to the number of opponents you have.${1}{G}, Sacrifice another nonland permanent: Gluttonous Troll gets +2/+2 until end of turn.|
|
Gluttonous Troll|Throne of Eldraine|327|R|{2}{B}{G}|Creature - Troll|3|3|Trample$When Gluttonous Troll enters the battlefield, create a number of Food tokens equal to the number of opponents you have.${1}{G}, Sacrifice another nonland permanent: Gluttonous Troll gets +2/+2 until end of turn.|
|
||||||
Knight's Charge|Throne of Eldraine|328|R|{1}{W}{B}|Enchantment|||Whenever a Knight you control attacks, each opponent loses 1 life and you gain 1 life.${6}{W}{B}, Sacrifice Knight's Charge: Return all Knight creature cards from your graveyard to the battlefield.|
|
Knights' Charge|Throne of Eldraine|328|R|{1}{W}{B}|Enchantment|||Whenever a Knight you control attacks, each opponent loses 1 life and you gain 1 life.${6}{W}{B}, Sacrifice Knights' Charge: Return all Knight creature cards from your graveyard to the battlefield.|
|
||||||
Korvold, Fae-Cursed King|Throne of Eldraine|329|M|{2}{B}{R}{G}|Legendary Creature - Dragon Noble|4|4|Flying$Whenever Korvold, Fae-Cursed King enters the battlefield or attacks, sacrifice another permanent.$Whenever you sacrifice a permanent, put a +1/+1 counter on Korvold and draw a card.|
|
Korvold, Fae-Cursed King|Throne of Eldraine|329|M|{2}{B}{R}{G}|Legendary Creature - Dragon Noble|4|4|Flying$Whenever Korvold, Fae-Cursed King enters the battlefield or attacks, sacrifice another permanent.$Whenever you sacrifice a permanent, put a +1/+1 counter on Korvold and draw a card.|
|
||||||
Syr Gwyn, Hero of Ashenvale|Throne of Eldraine|330|M|{3}{R}{W}{B}|Legendary Creature - Human Knight|5|5|Vigilance, menace$Whenever an equipped creature you control attacks, you draw a card and you lose 1 life.$Equipment you control have equip Knight {0}.|
|
Syr Gwyn, Hero of Ashenvale|Throne of Eldraine|330|M|{3}{R}{W}{B}|Legendary Creature - Human Knight|5|5|Vigilance, menace$Whenever an equipped creature you control attacks, you draw a card and you lose 1 life.$Equipment you control have equip Knight {0}.|
|
||||||
Arcane Signet|Throne of Eldraine|331|C|{2}|Artifact|||{T}: Add one mana of any color in your commander's color identity.|
|
Arcane Signet|Throne of Eldraine|331|C|{2}|Artifact|||{T}: Add one mana of any color in your commander's color identity.|
|
||||||
Tome of Legends|Throne of Eldraine|332|R|{2}|Artifact|||Tome of Legends enters the battlefield with a page counter on it.$Whenever your commander enters the battlefield or attacks, put a page counter on Tome of Legends.${1}, {T}, Remove a page counter from Tome of Legends: Draw a card.|
|
Tome of Legends|Throne of Eldraine|332|R|{2}|Artifact|||Tome of Legends enters the battlefield with a page counter on it.$Whenever your commander enters the battlefield or attacks, put a page counter on Tome of Legends.${1}, {T}, Remove a page counter from Tome of Legends: Draw a card.|
|
||||||
The Circle of Loyalty|Throne of Eldraine|336|M|{4}{W}{W}|Legendary Artifact|||This spell costs {1} less to cast for each Knight you control.$Creatures you control get +1/+1.$Whenever you cast a legendary spell, create a 2/2 white Knight creature token with vigilance.${3}{W}, {T}: Create a 2/2 white Knight creature token with vigilance.|
|
Command Tower|Throne of Eldraine|333|C||Land|||{T}: Add one mana of any color in your commander's color identity.|
|
||||||
Midnight Clock|Throne of Eldraine|346|R|{2}{U}|Artifact|||{T}: Add {U}.${2}{U}: Put an hour counter on Midnight Clock.$At the beginning of each upkeep, put an hour counter on Midnight Clock.$When the twelfth hour counter is put on Midnight Clock, shuffle your hand and graveyard into your library, then draw seven cards. Exile Midnight Clock.|
|
|
||||||
Piper of the Swarm|Throne of Eldraine|355|R|{1}{B}|Creature - Human Warlock|1|3|Rats you control have menace.${1}{B}, {T}: Create a 1/1 black Rat creature token.${2}{B}{B}, {T}, Sacrifice three Rats: Gain control of target creature.|
|
|
||||||
Rankle, Master of Pranks|Throne of Eldraine|356|M|{2}{B}{B}|Legendary Creature - Faerie Rogue|3|3|Flying, haste$Whenever Rankle, Master of Pranks deals combat damage to a player, choose any number —$• Each player discards a card.$• Each player loses 1 life and draws a card.$• Each player sacrifices a creature.|
|
|
||||||
|
|
Loading…
Reference in a new issue