diff --git a/Mage.Sets/src/mage/cards/x/XuIfitOsteoharmonist.java b/Mage.Sets/src/mage/cards/x/XuIfitOsteoharmonist.java new file mode 100644 index 00000000000..fa26080b401 --- /dev/null +++ b/Mage.Sets/src/mage/cards/x/XuIfitOsteoharmonist.java @@ -0,0 +1,100 @@ +package mage.cards.x; + +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.ActivateAsSorceryActivatedAbility; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.effects.ContinuousEffectImpl; +import mage.abilities.effects.common.ReturnFromGraveyardToBattlefieldTargetEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.*; +import mage.filter.StaticFilters; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.target.common.TargetCardInYourGraveyard; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class XuIfitOsteoharmonist extends CardImpl { + + public XuIfitOsteoharmonist(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{B}{B}"); + + this.supertype.add(SuperType.LEGENDARY); + this.subtype.add(SubType.HUMAN); + this.subtype.add(SubType.WIZARD); + this.power = new MageInt(2); + this.toughness = new MageInt(3); + + // {T}: Return target creature card from your graveyard to the battlefield. It's a Skeleton in addition to its other types and has no abilities. Activate only as a sorcery. + Ability ability = new ActivateAsSorceryActivatedAbility( + new ReturnFromGraveyardToBattlefieldTargetEffect(), new TapSourceCost() + ); + ability.addEffect(new XuIfitOsteoharmonistEffect()); + ability.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD)); + this.addAbility(ability); + } + + private XuIfitOsteoharmonist(final XuIfitOsteoharmonist card) { + super(card); + } + + @Override + public XuIfitOsteoharmonist copy() { + return new XuIfitOsteoharmonist(this); + } +} + +class XuIfitOsteoharmonistEffect extends ContinuousEffectImpl { + + XuIfitOsteoharmonistEffect() { + super(Duration.Custom, Outcome.LoseAbility); + staticText = "It's a Skeleton in addition to its other types and has no abilities"; + } + + private XuIfitOsteoharmonistEffect(final XuIfitOsteoharmonistEffect effect) { + super(effect); + } + + @Override + public XuIfitOsteoharmonistEffect copy() { + return new XuIfitOsteoharmonistEffect(this); + } + + @Override + public boolean hasLayer(Layer layer) { + switch (layer) { + case TypeChangingEffects_4: + case AbilityAddingRemovingEffects_6: + return true; + default: + return false; + } + } + + @Override + public boolean apply(Layer layer, SubLayer sublayer, Ability source, Game game) { + Permanent permanent = game.getPermanent(getTargetPointer().getFirst(game, source)); + if (permanent == null) { + discard(); + return false; + } + switch (layer) { + case TypeChangingEffects_4: + permanent.addSubType(game, SubType.SKELETON); + break; + case AbilityAddingRemovingEffects_6: + permanent.removeAllAbilities(source.getSourceId(), game); + } + return true; + } + + @Override + public boolean apply(Game game, Ability source) { + return false; + } +} diff --git a/Mage.Sets/src/mage/sets/EdgeOfEternities.java b/Mage.Sets/src/mage/sets/EdgeOfEternities.java index 22bb3a46978..fa6380a72fd 100644 --- a/Mage.Sets/src/mage/sets/EdgeOfEternities.java +++ b/Mage.Sets/src/mage/sets/EdgeOfEternities.java @@ -285,6 +285,7 @@ public final class EdgeOfEternities extends ExpansionSet { cards.add(new SetCardInfo("Weftwalking", 330, Rarity.MYTHIC, mage.cards.w.Weftwalking.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Weftwalking", 86, Rarity.MYTHIC, mage.cards.w.Weftwalking.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Wurmwall Sweeper", 249, Rarity.COMMON, mage.cards.w.WurmwallSweeper.class)); + cards.add(new SetCardInfo("Xu-Ifit, Osteoharmonist", 127, Rarity.RARE, mage.cards.x.XuIfitOsteoharmonist.class)); cards.add(new SetCardInfo("Zero Point Ballad", 335, Rarity.RARE, mage.cards.z.ZeroPointBallad.class)); cards.removeIf(setCardInfo -> unfinished.contains(setCardInfo.getName())); diff --git a/Utils/mtg-cards-data.txt b/Utils/mtg-cards-data.txt index f7b86cd7f8b..44e044f0314 100644 --- a/Utils/mtg-cards-data.txt +++ b/Utils/mtg-cards-data.txt @@ -59175,6 +59175,7 @@ Tragic Trajectory|Edge of Eternities|122|U|{B}|Sorcery|||Target creature gets -2 Umbral Collar Zealot|Edge of Eternities|123|U|{1}{B}|Creature - Human Cleric|3|2|Sacrifice another creature or artifact: Surveil 1.| Virus Beetle|Edge of Eternities|124|C|{1}{B}|Artifact Creature - Insect|1|1|When this creature enters, each opponent discards a card.| Voidforged Titan|Edge of Eternities|125|U|{4}{B}|Artifact Creature - Robot Warrior|5|4|Void -- At the beginning of your end step, if a nonland permanent left the battlefield this turn or a spell was warped this turn, you draw a card and lose 1 life.| +Xu-Ifit, Osteoharmonist|Edge of Eternities|127|R|{1}{B}{B}|Legendary Creature - Human Wizard|2|3|{T}: Return target creature card from your graveyard to the battlefield. It's a Skeleton in addition to its other types and has no abilities. Activate only as a sorcery.| Cut Propulsion|Edge of Eternities|130|U|{2}{R}|Instant|||Target creature deals damage to itself equal to its power. If that creature has flying, it deals twice that much damage to itself instead.| Debris Field Crusher|Edge of Eternities|131|U|{4}{R}|Artifact - Spacecraft|||When this Spacecraft enters, it deals 3 damage to any target.$Station$STATION 8+$Flying${1}{R}: This Spacecraft gets +2/+0 until end of turn.$1/5| Galvanizing Sawship|Edge of Eternities|136|U|{5}{R}|Artifact - Spacecraft|||Station$STATION 3+$Flying, haste$6/5|