diff --git a/Mage.Sets/src/mage/cards/d/DragonwingGlider.java b/Mage.Sets/src/mage/cards/d/DragonwingGlider.java new file mode 100644 index 00000000000..5d55315a63c --- /dev/null +++ b/Mage.Sets/src/mage/cards/d/DragonwingGlider.java @@ -0,0 +1,57 @@ +package mage.cards.d; + +import java.util.UUID; + +import mage.abilities.Ability; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.costs.mana.ManaCostImpl; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.continuous.BoostEquippedEffect; +import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect; +import mage.abilities.keyword.EquipAbility; +import mage.abilities.keyword.FlyingAbility; +import mage.abilities.keyword.HasteAbility; +import mage.constants.AttachmentType; +import mage.constants.Outcome; +import mage.constants.SubType; +import mage.abilities.keyword.ForMirrodinAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; + +/** + * @author TheElk801 + */ +public final class DragonwingGlider extends CardImpl { + + public DragonwingGlider(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{3}{R}{R}"); + + this.subtype.add(SubType.EQUIPMENT); + + // For Mirrodin! + this.addAbility(new ForMirrodinAbility()); + + // Equipped creature gets +2/+2 and has flying and haste. + Ability ability = new SimpleStaticAbility(new BoostEquippedEffect(2, 2)); + ability.addEffect(new GainAbilityAttachedEffect( + FlyingAbility.getInstance(), AttachmentType.EQUIPMENT + ).setText("and has flying")); + ability.addEffect(new GainAbilityAttachedEffect( + HasteAbility.getInstance(), AttachmentType.EQUIPMENT + ).setText("and haste")); + this.addAbility(ability); + + // Equip {3}{R}{R} + this.addAbility(new EquipAbility(Outcome.AddAbility, new ManaCostsImpl<>("{3}{R}{R}"))); + } + + private DragonwingGlider(final DragonwingGlider card) { + super(card); + } + + @Override + public DragonwingGlider copy() { + return new DragonwingGlider(this); + } +} diff --git a/Mage.Sets/src/mage/sets/PhyrexiaAllWillBeOne.java b/Mage.Sets/src/mage/sets/PhyrexiaAllWillBeOne.java index 9055aeb5202..a8ee1ae9e45 100644 --- a/Mage.Sets/src/mage/sets/PhyrexiaAllWillBeOne.java +++ b/Mage.Sets/src/mage/sets/PhyrexiaAllWillBeOne.java @@ -23,6 +23,7 @@ public final class PhyrexiaAllWillBeOne extends ExpansionSet { cards.add(new SetCardInfo("Blackcleave Cliffs", 248, Rarity.RARE, mage.cards.b.BlackcleaveCliffs.class)); cards.add(new SetCardInfo("Blue Sun's Twilight", 43, Rarity.RARE, mage.cards.b.BlueSunsTwilight.class)); cards.add(new SetCardInfo("Copperline Gorge", 249, Rarity.RARE, mage.cards.c.CopperlineGorge.class)); + cards.add(new SetCardInfo("Dragonwing Glider", 126, Rarity.RARE, mage.cards.d.DragonwingGlider.class)); cards.add(new SetCardInfo("Forest", 276, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Island", 273, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Mountain", 275, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); diff --git a/Mage/src/main/java/mage/abilities/keyword/ForMirrodinAbility.java b/Mage/src/main/java/mage/abilities/keyword/ForMirrodinAbility.java new file mode 100644 index 00000000000..371c1672213 --- /dev/null +++ b/Mage/src/main/java/mage/abilities/keyword/ForMirrodinAbility.java @@ -0,0 +1,31 @@ +package mage.abilities.keyword; + +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.effects.common.CreateTokenAttachSourceEffect; +import mage.game.permanent.token.PhyrexianGermToken; +import mage.game.permanent.token.RebelRedToken; + +/** + * @author TheElk801 + */ +public class ForMirrodinAbility extends EntersBattlefieldTriggeredAbility { + + public ForMirrodinAbility() { + super(new CreateTokenAttachSourceEffect(new RebelRedToken())); + } + + public ForMirrodinAbility(final ForMirrodinAbility ability) { + super(ability); + } + + @Override + public String getRule() { + return "For Mirrodin! (When this Equipment enters the battlefield, " + + "create a 2/2 red Rebel creature token, then attach this to it.)"; + } + + @Override + public ForMirrodinAbility copy() { + return new ForMirrodinAbility(this); + } +} diff --git a/Mage/src/main/java/mage/abilities/keyword/LivingWeaponAbility.java b/Mage/src/main/java/mage/abilities/keyword/LivingWeaponAbility.java index b7f0d1495b7..27548f7f4be 100644 --- a/Mage/src/main/java/mage/abilities/keyword/LivingWeaponAbility.java +++ b/Mage/src/main/java/mage/abilities/keyword/LivingWeaponAbility.java @@ -21,7 +21,7 @@ public class LivingWeaponAbility extends EntersBattlefieldTriggeredAbility { } @Override - public EntersBattlefieldTriggeredAbility copy() { + public LivingWeaponAbility copy() { return new LivingWeaponAbility(this); } } diff --git a/Mage/src/main/java/mage/game/permanent/token/RebelRedToken.java b/Mage/src/main/java/mage/game/permanent/token/RebelRedToken.java new file mode 100644 index 00000000000..a269bc1831e --- /dev/null +++ b/Mage/src/main/java/mage/game/permanent/token/RebelRedToken.java @@ -0,0 +1,28 @@ +package mage.game.permanent.token; + +import mage.MageInt; +import mage.constants.CardType; +import mage.constants.SubType; + +/** + * @author TheElk801 + */ +public final class RebelRedToken extends TokenImpl { + + public RebelRedToken() { + super("Rebel Token", "2/2 red Rebel creature token"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + cardType.add(CardType.CREATURE); + color.setRed(true); + subtype.add(SubType.REBEL); + } + + public RebelRedToken(final RebelRedToken token) { + super(token); + } + + public RebelRedToken copy() { + return new RebelRedToken(this); + } +} diff --git a/Utils/keywords.txt b/Utils/keywords.txt index 2d724cd3fe6..c40fe2820f0 100644 --- a/Utils/keywords.txt +++ b/Utils/keywords.txt @@ -53,6 +53,7 @@ Flying|instance| Forestcycling|cost| Forestwalk|new| Foretell|card, manaString| +For Mirrodin!|new| Friends forever|instance| Haste|instance| Hexproof|instance|