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