diff --git a/Mage.Sets/src/mage/cards/s/SwiftReconfiguration.java b/Mage.Sets/src/mage/cards/s/SwiftReconfiguration.java new file mode 100644 index 00000000000..afb72f1ef1b --- /dev/null +++ b/Mage.Sets/src/mage/cards/s/SwiftReconfiguration.java @@ -0,0 +1,112 @@ +package mage.cards.s; + +import mage.abilities.Ability; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.ContinuousEffectImpl; +import mage.abilities.effects.common.AttachEffect; +import mage.abilities.keyword.CrewAbility; +import mage.abilities.keyword.EnchantAbility; +import mage.abilities.keyword.FlashAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.*; +import mage.filter.FilterPermanent; +import mage.filter.predicate.Predicates; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.target.TargetPermanent; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class SwiftReconfiguration extends CardImpl { + + private static final FilterPermanent filter = new FilterPermanent("creature or Vehicle"); + + static { + filter.add(Predicates.or( + CardType.CREATURE.getPredicate(), + SubType.VEHICLE.getPredicate() + )); + } + + public SwiftReconfiguration(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{W}"); + + this.subtype.add(SubType.AURA); + + // Flash + this.addAbility(FlashAbility.getInstance()); + + // Enchant creature or Vehicle + TargetPermanent auraTarget = new TargetPermanent(filter); + this.getSpellAbility().addTarget(auraTarget); + this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature)); + this.addAbility(new EnchantAbility(auraTarget.getTargetName())); + + // Enchanted permanent is a Vehicle artifact with crew 5 and it loses all other card types. + this.addAbility(new SimpleStaticAbility(new SwiftReconfigurationEffect())); + } + + private SwiftReconfiguration(final SwiftReconfiguration card) { + super(card); + } + + @Override + public SwiftReconfiguration copy() { + return new SwiftReconfiguration(this); + } +} + +class SwiftReconfigurationEffect extends ContinuousEffectImpl { + + SwiftReconfigurationEffect() { + super(Duration.WhileOnBattlefield, Outcome.Detriment); + staticText = "enchanted permanent is a Vehicle artifact with crew 5 and it loses all other card types"; + } + + private SwiftReconfigurationEffect(final SwiftReconfigurationEffect effect) { + super(effect); + } + + @Override + public SwiftReconfigurationEffect copy() { + return new SwiftReconfigurationEffect(this); + } + + @Override + public boolean apply(Layer layer, SubLayer sublayer, Ability source, Game game) { + Permanent aura = source.getSourcePermanentIfItStillExists(game); + if (aura == null) { + return false; + } + Permanent permanent = game.getPermanent(aura.getAttachedTo()); + if (permanent == null) { + return false; + } + switch (layer) { + case TypeChangingEffects_4: + permanent.removeAllCardTypes(game); + permanent.addCardType(game, CardType.ARTIFACT); + permanent.addSubType(game, SubType.VEHICLE); + return true; + case AbilityAddingRemovingEffects_6: + permanent.addAbility(new CrewAbility(5)); + return true; + } + return false; + } + + @Override + public boolean apply(Game game, Ability source) { + return false; + } + + @Override + public boolean hasLayer(Layer layer) { + return layer == Layer.TypeChangingEffects_4 + || layer == Layer.AbilityAddingRemovingEffects_6; + } +} diff --git a/Mage.Sets/src/mage/sets/NeonDynastyCommander.java b/Mage.Sets/src/mage/sets/NeonDynastyCommander.java index 07b55ed3497..8151c167e70 100644 --- a/Mage.Sets/src/mage/sets/NeonDynastyCommander.java +++ b/Mage.Sets/src/mage/sets/NeonDynastyCommander.java @@ -133,6 +133,7 @@ public final class NeonDynastyCommander extends ExpansionSet { cards.add(new SetCardInfo("Spire of Industry", 178, Rarity.RARE, mage.cards.s.SpireOfIndustry.class)); cards.add(new SetCardInfo("Sram, Senior Edificer", 88, Rarity.RARE, mage.cards.s.SramSeniorEdificer.class)); cards.add(new SetCardInfo("Starstorm", 110, Rarity.RARE, mage.cards.s.Starstorm.class)); + cards.add(new SetCardInfo("Swift Reconfiguration", 10, Rarity.RARE, mage.cards.s.SwiftReconfiguration.class)); cards.add(new SetCardInfo("Swiftfoot Boots", 163, Rarity.UNCOMMON, mage.cards.s.SwiftfootBoots.class)); cards.add(new SetCardInfo("Sword of Vengeance", 164, Rarity.RARE, mage.cards.s.SwordOfVengeance.class)); cards.add(new SetCardInfo("Swords to Plowshares", 89, Rarity.UNCOMMON, mage.cards.s.SwordsToPlowshares.class));