diff --git a/Mage.Sets/src/mage/cards/h/HalanaKessigRanger.java b/Mage.Sets/src/mage/cards/h/HalanaKessigRanger.java new file mode 100644 index 00000000000..fa9cf2e1495 --- /dev/null +++ b/Mage.Sets/src/mage/cards/h/HalanaKessigRanger.java @@ -0,0 +1,120 @@ +package mage.cards.h; + +import java.util.UUID; + +import mage.MageInt; +import mage.MageObjectReference; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility; +import mage.abilities.common.delayed.ReflexiveTriggeredAbility; +import mage.abilities.costs.mana.GenericManaCost; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.DoIfCostPaid; +import mage.abilities.keyword.PartnerAbility; +import mage.constants.*; +import mage.abilities.keyword.ReachAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.filter.StaticFilters; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.target.common.TargetCreaturePermanent; + +/** + * @author TheElk801 + */ +public final class HalanaKessigRanger extends CardImpl { + + public HalanaKessigRanger(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{G}"); + + this.addSuperType(SuperType.LEGENDARY); + this.subtype.add(SubType.HUMAN); + this.subtype.add(SubType.ARCHER); + this.power = new MageInt(3); + this.toughness = new MageInt(4); + + // Reach + this.addAbility(ReachAbility.getInstance()); + + // Whenever another creature enters the battlefield under your control, you may pay {2}. When you do, that creature deals damage equal to its power to target creature. + this.addAbility(new EntersBattlefieldControlledTriggeredAbility( + Zone.BATTLEFIELD, new DoIfCostPaid(new HalanaKessigRangerTriggerEffect(), new GenericManaCost(2)), + StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE, false, SetTargetPointer.PERMANENT_TARGET, + "Whenever another creature enters the battlefield under your control, you may pay {2}. " + + "When you do, that creature deals damage equal to its power to target creature." + )); + + // Partner + this.addAbility(PartnerAbility.getInstance()); + } + + private HalanaKessigRanger(final HalanaKessigRanger card) { + super(card); + } + + @Override + public HalanaKessigRanger copy() { + return new HalanaKessigRanger(this); + } +} + +class HalanaKessigRangerTriggerEffect extends OneShotEffect { + + HalanaKessigRangerTriggerEffect() { + super(Outcome.Benefit); + staticText = "that creature deals damage equal to its power to target creature"; + } + + private HalanaKessigRangerTriggerEffect(final HalanaKessigRangerTriggerEffect effect) { + super(effect); + } + + @Override + public HalanaKessigRangerTriggerEffect copy() { + return new HalanaKessigRangerTriggerEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + ReflexiveTriggeredAbility ability = new ReflexiveTriggeredAbility( + new HalanaKessigRangerDamageEffect( + new MageObjectReference(targetPointer.getFirst(game, source), game) + ), false, "that creature deals damage equal to its power to target creature" + ); + ability.addTarget(new TargetCreaturePermanent()); + game.fireReflexiveTriggeredAbility(ability, source); + return true; + } +} + +class HalanaKessigRangerDamageEffect extends OneShotEffect { + + private final MageObjectReference mor; + + HalanaKessigRangerDamageEffect(MageObjectReference mor) { + super(Outcome.Benefit); + this.mor = mor; + } + + private HalanaKessigRangerDamageEffect(final HalanaKessigRangerDamageEffect effect) { + super(effect); + this.mor = effect.mor; + } + + @Override + public HalanaKessigRangerDamageEffect copy() { + return new HalanaKessigRangerDamageEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Permanent permanent1 = mor.getPermanentOrLKIBattlefield(game); + Permanent permanent2 = game.getPermanent(source.getFirstTarget()); + if (permanent1 == null || !permanent1.isCreature() || permanent2 == null) { + return false; + } + permanent2.damage(permanent1.getPower().getValue(), permanent1.getId(), game); + return true; + } +} diff --git a/Mage.Sets/src/mage/sets/CommanderLegends.java b/Mage.Sets/src/mage/sets/CommanderLegends.java index d18e83856a5..6c5d45e4047 100644 --- a/Mage.Sets/src/mage/sets/CommanderLegends.java +++ b/Mage.Sets/src/mage/sets/CommanderLegends.java @@ -30,6 +30,7 @@ public final class CommanderLegends extends ExpansionSet { cards.add(new SetCardInfo("Alena, Kessig Trapper", 160, Rarity.UNCOMMON, mage.cards.a.AlenaKessigTrapper.class)); cards.add(new SetCardInfo("Command Tower", 350, Rarity.COMMON, mage.cards.c.CommandTower.class)); cards.add(new SetCardInfo("Commander's Sphere", 306, Rarity.COMMON, mage.cards.c.CommandersSphere.class)); + cards.add(new SetCardInfo("Halana, Kessig Ranger", 231, Rarity.UNCOMMON, mage.cards.h.HalanaKessigRanger.class)); cards.add(new SetCardInfo("Keeper of the Accord", 27, Rarity.RARE, mage.cards.k.KeeperOfTheAccord.class)); cards.add(new SetCardInfo("Mana Confluence", 721, Rarity.MYTHIC, mage.cards.m.ManaConfluence.class)); cards.add(new SetCardInfo("Prossh, Skyraider of Kher", 530, Rarity.MYTHIC, mage.cards.p.ProsshSkyraiderOfKher.class));