diff --git a/Mage.Sets/src/mage/sets/fatereforged/FlamerushRider.java b/Mage.Sets/src/mage/sets/fatereforged/FlamerushRider.java
new file mode 100644
index 0000000000..6775848ca0
--- /dev/null
+++ b/Mage.Sets/src/mage/sets/fatereforged/FlamerushRider.java
@@ -0,0 +1,126 @@
+/*
+ * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification, are
+ * permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this list of
+ * conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice, this list
+ * of conditions and the following disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * The views and conclusions contained in the software and documentation are those of the
+ * authors and should not be interpreted as representing official policies, either expressed
+ * or implied, of BetaSteward_at_googlemail.com.
+ */
+package mage.sets.fatereforged;
+
+import java.util.UUID;
+import mage.MageInt;
+import mage.abilities.Ability;
+import mage.abilities.common.AttacksTriggeredAbility;
+import mage.abilities.common.delayed.AtTheEndOfCombatDelayedTriggeredAbility;
+import mage.abilities.effects.Effect;
+import mage.abilities.effects.OneShotEffect;
+import mage.abilities.effects.common.CreateDelayedTriggeredAbilityEffect;
+import mage.abilities.effects.common.ExileTargetEffect;
+import mage.abilities.keyword.DashAbility;
+import mage.cards.CardImpl;
+import mage.constants.CardType;
+import mage.constants.Outcome;
+import mage.constants.Rarity;
+import mage.filter.common.FilterCreaturePermanent;
+import mage.filter.predicate.permanent.AnotherPredicate;
+import mage.filter.predicate.permanent.AttackingPredicate;
+import mage.game.Game;
+import mage.game.permanent.Permanent;
+import mage.game.permanent.token.EmptyToken;
+import mage.players.Player;
+import mage.target.TargetPermanent;
+import mage.target.targetpointer.FixedTarget;
+import mage.util.CardUtil;
+
+/**
+ *
+ * @author LevelX2
+ */
+public class FlamerushRider extends CardImpl {
+
+ private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("another target attacking creature");
+
+ static {
+ filter.add(new AnotherPredicate());
+ filter.add(new AttackingPredicate());
+ }
+
+ public FlamerushRider(UUID ownerId) {
+ super(ownerId, 99, "Flamerush Rider", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{4}{R}");
+ this.expansionSetCode = "FRF";
+ this.subtype.add("Human");
+ this.subtype.add("Warrior");
+ this.power = new MageInt(3);
+ this.toughness = new MageInt(3);
+
+ // Whenever Flamerush Rider attacks, put a token onto the battlefield tapped and attacking that's a copy of another target attacking creature. Exile the token at end of combat.
+ Ability ability = new AttacksTriggeredAbility(new FlamerushRiderEffect(), false);
+ ability.addTarget(new TargetPermanent(filter));
+ this.addAbility(ability);
+
+ // Dash {2}{R}{R}
+ this.addAbility(new DashAbility(this, "{2}{R}{R}"));
+ }
+
+ public FlamerushRider(final FlamerushRider card) {
+ super(card);
+ }
+
+ @Override
+ public FlamerushRider copy() {
+ return new FlamerushRider(this);
+ }
+}
+
+class FlamerushRiderEffect extends OneShotEffect {
+
+ public FlamerushRiderEffect() {
+ super(Outcome.Copy);
+ this.staticText = "put a token onto the battlefield tapped and attacking that's a copy of another target attacking creature. Exile the token at end of combat";
+ }
+
+ public FlamerushRiderEffect(final FlamerushRiderEffect effect) {
+ super(effect);
+ }
+
+ @Override
+ public FlamerushRiderEffect copy() {
+ return new FlamerushRiderEffect(this);
+ }
+
+ @Override
+ public boolean apply(Game game, Ability source) {
+ Player controller = game.getPlayer(source.getControllerId());
+ Permanent permanent = game.getPermanentOrLKIBattlefield(getTargetPointer().getFirst(game, source));
+ if (controller != null && permanent != null) {
+ EmptyToken token = new EmptyToken();
+ CardUtil.copyTo(token).from(permanent);
+ token.putOntoBattlefield(1, game, source.getSourceId(), source.getControllerId(), true, true);
+ Effect effect = new ExileTargetEffect();
+ effect.setTargetPointer(new FixedTarget(token.getLastAddedToken()));
+ new CreateDelayedTriggeredAbilityEffect(new AtTheEndOfCombatDelayedTriggeredAbility(effect), false).apply(game, source);
+ return true;
+ }
+ return false;
+ }
+}
diff --git a/Mage.Sets/src/mage/sets/fatereforged/FlamewakePhoenix.java b/Mage.Sets/src/mage/sets/fatereforged/FlamewakePhoenix.java
new file mode 100644
index 0000000000..6253286a82
--- /dev/null
+++ b/Mage.Sets/src/mage/sets/fatereforged/FlamewakePhoenix.java
@@ -0,0 +1,87 @@
+/*
+ * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification, are
+ * permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this list of
+ * conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice, this list
+ * of conditions and the following disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * The views and conclusions contained in the software and documentation are those of the
+ * authors and should not be interpreted as representing official policies, either expressed
+ * or implied, of BetaSteward_at_googlemail.com.
+ */
+package mage.sets.fatereforged;
+
+import java.util.UUID;
+import mage.MageInt;
+import mage.abilities.common.AttacksEachTurnStaticAbility;
+import mage.abilities.common.BeginningOfCombatTriggeredAbility;
+import mage.abilities.condition.common.FerociousCondition;
+import mage.abilities.costs.mana.ManaCostsImpl;
+import mage.abilities.decorator.ConditionalTriggeredAbility;
+import mage.abilities.effects.common.DoIfCostPaid;
+import mage.abilities.effects.common.ReturnToBattlefieldUnderOwnerControlSourceEffect;
+import mage.abilities.keyword.FlyingAbility;
+import mage.abilities.keyword.HasteAbility;
+import mage.cards.CardImpl;
+import mage.constants.CardType;
+import mage.constants.Rarity;
+import mage.constants.TargetController;
+import mage.constants.Zone;
+
+/**
+ *
+ * @author LevelX2
+ */
+public class FlamewakePhoenix extends CardImpl {
+
+ public FlamewakePhoenix(UUID ownerId) {
+ super(ownerId, 100, "Flamewake Phoenix", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{1}{R}{R}");
+ this.expansionSetCode = "FRF";
+ this.subtype.add("Phoenix");
+ this.power = new MageInt(2);
+ this.toughness = new MageInt(2);
+
+ // Flying
+ this.addAbility(FlyingAbility.getInstance());
+ // Haste
+ this.addAbility(HasteAbility.getInstance());
+ // Flamewake Phoenix attacks each turn if able.
+ this.addAbility(new AttacksEachTurnStaticAbility());
+
+ // Ferocious - At the beginning of combat on your turn, if you control a creature with power 4 or greater, you may pay {R}. If you do, return Flamewake Phoenix from your graveyard to the battlefield.
+ this.addAbility(new ConditionalTriggeredAbility(
+ new BeginningOfCombatTriggeredAbility(
+ Zone.GRAVEYARD,
+ new DoIfCostPaid(new ReturnToBattlefieldUnderOwnerControlSourceEffect(), new ManaCostsImpl("{R")),
+ TargetController.YOU, false, false),
+ FerociousCondition.getInstance(),
+ "Ferocious — At the beginning of combat on your turn, if you control a creature with power 4 or greater, you may pay {R}. If you do, return {this} from your graveyard to the battlefield.",
+ false
+ ));
+ }
+
+ public FlamewakePhoenix(final FlamewakePhoenix card) {
+ super(card);
+ }
+
+ @Override
+ public FlamewakePhoenix copy() {
+ return new FlamewakePhoenix(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/sets/fatereforged/Lightform.java b/Mage.Sets/src/mage/sets/fatereforged/Lightform.java
index 68ee88e080..63a3bc150a 100644
--- a/Mage.Sets/src/mage/sets/fatereforged/Lightform.java
+++ b/Mage.Sets/src/mage/sets/fatereforged/Lightform.java
@@ -28,37 +28,20 @@
package mage.sets.fatereforged;
import java.util.UUID;
-import mage.MageObjectReference;
import mage.abilities.Ability;
+import mage.abilities.common.BecomesAuraAttachToManifestSourceEffect;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.common.SimpleStaticAbility;
-import mage.abilities.effects.ContinuousEffectImpl;
import mage.abilities.effects.Effect;
-import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.continious.GainAbilityAttachedEffect;
-import mage.abilities.effects.common.continious.SourceEffect;
-import mage.abilities.effects.keyword.ManifestEffect;
-import mage.abilities.keyword.EnchantAbility;
import mage.abilities.keyword.FlyingAbility;
import mage.abilities.keyword.LifelinkAbility;
-import mage.cards.Card;
import mage.cards.CardImpl;
import mage.constants.AttachmentType;
import mage.constants.CardType;
import mage.constants.Duration;
-import mage.constants.Layer;
-import static mage.constants.Layer.AbilityAddingRemovingEffects_6;
-import static mage.constants.Layer.TypeChangingEffects_4;
-import mage.constants.Outcome;
import mage.constants.Rarity;
-import mage.constants.SubLayer;
import mage.constants.Zone;
-import mage.filter.common.FilterCreaturePermanent;
-import mage.game.Game;
-import mage.game.permanent.Permanent;
-import mage.players.Player;
-import mage.target.Target;
-import mage.target.common.TargetCreaturePermanent;
/**
*
@@ -71,7 +54,7 @@ public class Lightform extends CardImpl {
this.expansionSetCode = "FRF";
// When Lightform enters the battlefield, it becomes an Aura with enchant creature. Manifest the top card of your library and attach Lightform to it.
- this.addAbility(new EntersBattlefieldTriggeredAbility(new BecomesAuraManifestAttachToEffect()));
+ this.addAbility(new EntersBattlefieldTriggeredAbility(new BecomesAuraAttachToManifestSourceEffect()));
// Enchanted creature has flying and lifelink.
Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(FlyingAbility.getInstance(), AttachmentType.AURA, Duration.WhileOnBattlefield));
@@ -79,7 +62,6 @@ public class Lightform extends CardImpl {
effect.setText("and lifelink");
ability.addEffect(effect);
this.addAbility(ability);
-
}
public Lightform(final Lightform card) {
@@ -92,111 +74,4 @@ public class Lightform extends CardImpl {
}
}
-class BecomesAuraManifestAttachToEffect extends OneShotEffect {
- public BecomesAuraManifestAttachToEffect() {
- super(Outcome.Benefit);
- this.staticText = "it becomes an Aura with enchant creature. Manifest the top card of your library and attach {this} to it";
- }
-
- public BecomesAuraManifestAttachToEffect(final BecomesAuraManifestAttachToEffect effect) {
- super(effect);
- }
-
- @Override
- public BecomesAuraManifestAttachToEffect copy() {
- return new BecomesAuraManifestAttachToEffect(this);
- }
-
- @Override
- public boolean apply(Game game, Ability source) {
- Player controller = game.getPlayer(source.getControllerId());
- Permanent enchantment = game.getPermanent(source.getSourceId());
- if (controller != null && enchantment != null) {
- // manifest top card
- Card card = controller.getLibrary().getFromTop(game);
- if (card != null) {
- new ManifestEffect(1).apply(game, source);
- Permanent enchantedCreature = game.getPermanent(card.getId());
- if (enchantedCreature != null) {
- enchantedCreature.addAttachment(enchantment.getId(), game);
- FilterCreaturePermanent filter = new FilterCreaturePermanent();
- Target target = new TargetCreaturePermanent(filter);
- target.addTarget(enchantedCreature.getId(), source, game);
- game.addEffect(new BecomesAuraEffect(target), source);
- }
- }
- return true;
- }
- return false;
- }
-}
-
-class BecomesAuraEffect extends ContinuousEffectImpl implements SourceEffect {
-
- private Ability newAbility;
- Target target;
-
- public BecomesAuraEffect(Target target) {
- super(Duration.Custom, Outcome.AddAbility);
- this.target = target;
- newAbility = new EnchantAbility(target.getTargetName());
- newAbility.setRuleAtTheTop(true);
- staticText = "it becomes an Aura with enchant " + target.getTargetName();
-
- }
-
-
- public BecomesAuraEffect(final BecomesAuraEffect effect) {
- super(effect);
- this.target = effect.target;
- this.newAbility = effect.newAbility;
- }
-
- @Override
- public BecomesAuraEffect copy() {
- return new BecomesAuraEffect(this);
- }
-
- @Override
- public void init(Ability source, Game game) {
- super.init(source, game);
- affectedObjectList.add(new MageObjectReference(source.getSourceId(), game));
- }
-
- @Override
- public boolean apply(Layer layer, SubLayer sublayer, Ability source, Game game) {
- Permanent permanent = affectedObjectList.get(0).getPermanent(game);
- if (permanent != null) {
- switch (layer) {
- case TypeChangingEffects_4:
- if (sublayer == SubLayer.NA) {
- if (!permanent.getSubtype().contains("Aura")) {
- permanent.getSubtype().add("Aura");
- }
- }
- break;
- case AbilityAddingRemovingEffects_6:
- if (sublayer == SubLayer.NA) {
- permanent.addAbility(newAbility, source.getSourceId(), game);
- permanent.getSpellAbility().getTargets().clear();
- permanent.getSpellAbility().getTargets().add(target);
- }
- }
- return true;
- }
- this.discard();
- return false;
- }
-
- @Override
- public boolean apply(Game game, Ability source) {
- return false;
- }
-
- @Override
- public boolean hasLayer(Layer layer) {
- return Layer.AbilityAddingRemovingEffects_6.equals(layer) || Layer.TypeChangingEffects_4.equals(layer);
- }
-
-}
diff --git a/Mage.Sets/src/mage/sets/fatereforged/Rageform.java b/Mage.Sets/src/mage/sets/fatereforged/Rageform.java
new file mode 100644
index 0000000000..936bb2b08f
--- /dev/null
+++ b/Mage.Sets/src/mage/sets/fatereforged/Rageform.java
@@ -0,0 +1,73 @@
+/*
+ * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification, are
+ * permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this list of
+ * conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice, this list
+ * of conditions and the following disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * The views and conclusions contained in the software and documentation are those of the
+ * authors and should not be interpreted as representing official policies, either expressed
+ * or implied, of BetaSteward_at_googlemail.com.
+ */
+package mage.sets.fatereforged;
+
+import java.util.UUID;
+import mage.abilities.Ability;
+import mage.abilities.common.BecomesAuraAttachToManifestSourceEffect;
+import mage.abilities.common.EntersBattlefieldTriggeredAbility;
+import mage.abilities.common.SimpleStaticAbility;
+import mage.abilities.effects.Effect;
+import mage.abilities.effects.common.continious.GainAbilityAttachedEffect;
+import mage.abilities.keyword.DoubleStrikeAbility;
+import mage.abilities.keyword.FlyingAbility;
+import mage.abilities.keyword.LifelinkAbility;
+import mage.cards.CardImpl;
+import mage.constants.AttachmentType;
+import mage.constants.CardType;
+import mage.constants.Duration;
+import mage.constants.Rarity;
+import mage.constants.Zone;
+
+/**
+ *
+ * @author LevelX2
+ */
+public class Rageform extends CardImpl {
+
+ public Rageform(UUID ownerId) {
+ super(ownerId, 112, "Rageform", Rarity.UNCOMMON, new CardType[]{CardType.ENCHANTMENT}, "{2}{R}{R}");
+ this.expansionSetCode = "FRF";
+
+ // When Rageform enters the battlefield, it becomes an Aura with enchant creature. Manifest the top card of your library and attach Rageform to it.
+ this.addAbility(new EntersBattlefieldTriggeredAbility(new BecomesAuraAttachToManifestSourceEffect()));
+
+ // Enchanted creature has double strike.
+ this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD,
+ new GainAbilityAttachedEffect(DoubleStrikeAbility.getInstance(), AttachmentType.AURA, Duration.WhileOnBattlefield)));
+ }
+
+ public Rageform(final Rageform card) {
+ super(card);
+ }
+
+ @Override
+ public Rageform copy() {
+ return new Rageform(this);
+ }
+}
diff --git a/Mage/src/mage/abilities/common/BecomesAuraAttachToManifestSourceEffect.java b/Mage/src/mage/abilities/common/BecomesAuraAttachToManifestSourceEffect.java
new file mode 100644
index 0000000000..9a38f90e2e
--- /dev/null
+++ b/Mage/src/mage/abilities/common/BecomesAuraAttachToManifestSourceEffect.java
@@ -0,0 +1,85 @@
+/*
+ * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification, are
+ * permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this list of
+ * conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice, this list
+ * of conditions and the following disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * The views and conclusions contained in the software and documentation are those of the
+ * authors and should not be interpreted as representing official policies, either expressed
+ * or implied, of BetaSteward_at_googlemail.com.
+ */
+package mage.abilities.common;
+
+import mage.abilities.Ability;
+import mage.abilities.effects.OneShotEffect;
+import mage.abilities.effects.common.continious.BecomesAuraSourceEffect;
+import mage.abilities.effects.keyword.ManifestEffect;
+import mage.cards.Card;
+import mage.constants.Outcome;
+import mage.filter.common.FilterCreaturePermanent;
+import mage.game.Game;
+import mage.game.permanent.Permanent;
+import mage.players.Player;
+import mage.target.Target;
+import mage.target.common.TargetCreaturePermanent;
+
+/**
+ *
+ * @author LevelX2
+ */
+public class BecomesAuraAttachToManifestSourceEffect extends OneShotEffect {
+
+ public BecomesAuraAttachToManifestSourceEffect() {
+ super(Outcome.Benefit);
+ this.staticText = "it becomes an Aura with enchant creature. Manifest the top card of your library and attach {this} to it";
+ }
+
+ public BecomesAuraAttachToManifestSourceEffect(final BecomesAuraAttachToManifestSourceEffect effect) {
+ super(effect);
+ }
+
+ @Override
+ public BecomesAuraAttachToManifestSourceEffect copy() {
+ return new BecomesAuraAttachToManifestSourceEffect(this);
+ }
+
+ @Override
+ public boolean apply(Game game, Ability source) {
+ Player controller = game.getPlayer(source.getControllerId());
+ Permanent enchantment = game.getPermanent(source.getSourceId());
+ if (controller != null && enchantment != null) {
+ // manifest top card
+ Card card = controller.getLibrary().getFromTop(game);
+ if (card != null) {
+ new ManifestEffect(1).apply(game, source);
+ Permanent enchantedCreature = game.getPermanent(card.getId());
+ if (enchantedCreature != null) {
+ enchantedCreature.addAttachment(enchantment.getId(), game);
+ FilterCreaturePermanent filter = new FilterCreaturePermanent();
+ Target target = new TargetCreaturePermanent(filter);
+ target.addTarget(enchantedCreature.getId(), source, game);
+ game.addEffect(new BecomesAuraSourceEffect(target), source);
+ }
+ }
+ return true;
+ }
+ return false;
+ }
+}
diff --git a/Mage/src/mage/abilities/effects/common/continious/BecomesAuraSourceEffect.java b/Mage/src/mage/abilities/effects/common/continious/BecomesAuraSourceEffect.java
new file mode 100644
index 0000000000..cb32216c50
--- /dev/null
+++ b/Mage/src/mage/abilities/effects/common/continious/BecomesAuraSourceEffect.java
@@ -0,0 +1,115 @@
+/*
+ * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification, are
+ * permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this list of
+ * conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice, this list
+ * of conditions and the following disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * The views and conclusions contained in the software and documentation are those of the
+ * authors and should not be interpreted as representing official policies, either expressed
+ * or implied, of BetaSteward_at_googlemail.com.
+ */
+package mage.abilities.effects.common.continious;
+
+import mage.MageObjectReference;
+import mage.abilities.Ability;
+import mage.abilities.effects.ContinuousEffectImpl;
+import mage.abilities.keyword.EnchantAbility;
+import mage.constants.Duration;
+import mage.constants.Layer;
+import static mage.constants.Layer.AbilityAddingRemovingEffects_6;
+import static mage.constants.Layer.TypeChangingEffects_4;
+import mage.constants.Outcome;
+import mage.constants.SubLayer;
+import mage.game.Game;
+import mage.game.permanent.Permanent;
+import mage.target.Target;
+
+/**
+ *
+ * @author LevelX2
+ */
+public class BecomesAuraSourceEffect extends ContinuousEffectImpl implements SourceEffect {
+
+ private final Ability newAbility;
+ private final Target target;
+
+ public BecomesAuraSourceEffect(Target target) {
+ super(Duration.Custom, Outcome.AddAbility);
+ this.target = target;
+ newAbility = new EnchantAbility(target.getTargetName());
+ newAbility.setRuleAtTheTop(true);
+ staticText = "it becomes an Aura with enchant " + target.getTargetName();
+
+ }
+
+
+ public BecomesAuraSourceEffect(final BecomesAuraSourceEffect effect) {
+ super(effect);
+ this.target = effect.target;
+ this.newAbility = effect.newAbility;
+ }
+
+ @Override
+ public BecomesAuraSourceEffect copy() {
+ return new BecomesAuraSourceEffect(this);
+ }
+
+ @Override
+ public void init(Ability source, Game game) {
+ super.init(source, game);
+ affectedObjectList.add(new MageObjectReference(source.getSourceId(), game));
+ }
+
+ @Override
+ public boolean apply(Layer layer, SubLayer sublayer, Ability source, Game game) {
+ Permanent permanent = affectedObjectList.get(0).getPermanent(game);
+ if (permanent != null) {
+ switch (layer) {
+ case TypeChangingEffects_4:
+ if (sublayer == SubLayer.NA) {
+ if (!permanent.getSubtype().contains("Aura")) {
+ permanent.getSubtype().add("Aura");
+ }
+ }
+ break;
+ case AbilityAddingRemovingEffects_6:
+ if (sublayer == SubLayer.NA) {
+ permanent.addAbility(newAbility, source.getSourceId(), game);
+ permanent.getSpellAbility().getTargets().clear();
+ permanent.getSpellAbility().getTargets().add(target);
+ }
+ }
+ return true;
+ }
+ this.discard();
+ return false;
+ }
+
+ @Override
+ public boolean apply(Game game, Ability source) {
+ return false;
+ }
+
+ @Override
+ public boolean hasLayer(Layer layer) {
+ return Layer.AbilityAddingRemovingEffects_6.equals(layer) || Layer.TypeChangingEffects_4.equals(layer);
+ }
+
+}
\ No newline at end of file