diff --git a/Mage.Sets/src/mage/cards/h/HauntedOne.java b/Mage.Sets/src/mage/cards/h/HauntedOne.java new file mode 100644 index 00000000000..6dc644eb994 --- /dev/null +++ b/Mage.Sets/src/mage/cards/h/HauntedOne.java @@ -0,0 +1,82 @@ +package mage.cards.h; + +import mage.abilities.Ability; +import mage.abilities.common.BecomesTappedSourceTriggeredAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.common.continuous.BoostAllEffect; +import mage.abilities.effects.common.continuous.BoostSourceEffect; +import mage.abilities.effects.common.continuous.GainAbilityAllEffect; +import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; +import mage.abilities.keyword.UndyingAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.*; +import mage.filter.StaticFilters; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.ObjectSourcePlayer; +import mage.filter.predicate.ObjectSourcePlayerPredicate; +import mage.game.Game; +import mage.game.permanent.Permanent; + +import java.util.Objects; +import java.util.Optional; +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class HauntedOne extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent(); + + static { + filter.add(TargetController.YOU.getControllerPredicate()); + filter.add(HauntedOnePredicate.instance); + } + + public HauntedOne(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{B}"); + + this.addSuperType(SuperType.LEGENDARY); + this.subtype.add(SubType.BACKGROUND); + + // Commander creatures you own have "Whenever this creature becomes tapped, it and other creatures you control that share a creature type with it each get +2/+0 and gain undying until end of turn." + Ability ability = new BecomesTappedSourceTriggeredAbility( + new BoostSourceEffect(2, 0, Duration.EndOfTurn).setText("it") + ).setTriggerPhrase("Whenever this creature becomes tapped, "); + ability.addEffect(new GainAbilitySourceEffect( + new UndyingAbility(), Duration.EndOfTurn + ).setText("and other creatures you control that share a creature type with it")); + ability.addEffect(new BoostAllEffect( + 2, 0, Duration.EndOfTurn, filter, true + ).setText("each get +2/+0")); + ability.addEffect(new GainAbilityAllEffect( + new UndyingAbility(), Duration.EndOfTurn, filter, true + ).setText("and gain undying until end of turn")); + this.addAbility(new SimpleStaticAbility(new GainAbilityAllEffect( + ability, Duration.WhileOnBattlefield, + StaticFilters.FILTER_CREATURES_OWNED_COMMANDER + ))); + } + + private HauntedOne(final HauntedOne card) { + super(card); + } + + @Override + public HauntedOne copy() { + return new HauntedOne(this); + } +} + +enum HauntedOnePredicate implements ObjectSourcePlayerPredicate { + instance; + + @Override + public boolean apply(ObjectSourcePlayer input, Game game) { + return Optional.of(input.getSource().getSourcePermanentOrLKI(game)) + .filter(Objects::nonNull) + .map(permanent -> permanent.shareCreatureTypes(game, input.getObject())) + .orElse(false); + } +} diff --git a/Mage.Sets/src/mage/sets/CommanderLegendsBattleForBaldursGate.java b/Mage.Sets/src/mage/sets/CommanderLegendsBattleForBaldursGate.java index 29c42818138..9a69c5f0d0e 100644 --- a/Mage.Sets/src/mage/sets/CommanderLegendsBattleForBaldursGate.java +++ b/Mage.Sets/src/mage/sets/CommanderLegendsBattleForBaldursGate.java @@ -270,6 +270,7 @@ public final class CommanderLegendsBattleForBaldursGate extends ExpansionSet { cards.add(new SetCardInfo("Hammers of Moradin", 25, Rarity.UNCOMMON, mage.cards.h.HammersOfMoradin.class)); cards.add(new SetCardInfo("Hardy Outlander", 235, Rarity.UNCOMMON, mage.cards.h.HardyOutlander.class)); cards.add(new SetCardInfo("Harper Recruiter", 659, Rarity.RARE, mage.cards.h.HarperRecruiter.class)); + cards.add(new SetCardInfo("Haunted One", 654, Rarity.MYTHIC, mage.cards.h.HauntedOne.class)); cards.add(new SetCardInfo("Heap Gate", 354, Rarity.COMMON, mage.cards.h.HeapGate.class)); cards.add(new SetCardInfo("Hedron Archive", 861, Rarity.UNCOMMON, mage.cards.h.HedronArchive.class)); cards.add(new SetCardInfo("Herald's Horn", 862, Rarity.UNCOMMON, mage.cards.h.HeraldsHorn.class));