From 01b336a27f3131cd2d12ed390a5f3769b51ef3d4 Mon Sep 17 00:00:00 2001 From: Susucre <34709007+Susucre@users.noreply.github.com> Date: Fri, 29 Sep 2023 00:49:32 +0200 Subject: [PATCH] [LTR] Implement Minas Tirith Garrison (#11220) --- .../src/mage/cards/m/MinasTirithGarrison.java | 107 ++++++++++++++++++ .../TheLordOfTheRingsTalesOfMiddleEarth.java | 1 + 2 files changed, 108 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/m/MinasTirithGarrison.java diff --git a/Mage.Sets/src/mage/cards/m/MinasTirithGarrison.java b/Mage.Sets/src/mage/cards/m/MinasTirithGarrison.java new file mode 100644 index 00000000000..20c4ac70836 --- /dev/null +++ b/Mage.Sets/src/mage/cards/m/MinasTirithGarrison.java @@ -0,0 +1,107 @@ +package mage.cards.m; + +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.AttacksTriggeredAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.dynamicvalue.common.CardsInControllerHandCount; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.abilities.effects.common.continuous.SetBasePowerSourceEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.SubType; +import mage.constants.Zone; +import mage.filter.common.FilterControlledPermanent; +import mage.filter.predicate.permanent.TappedPredicate; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.players.Player; +import mage.target.TargetPermanent; +import mage.target.common.TargetControlledPermanent; + +import java.util.UUID; + +/** + * @author Susucr + */ +public final class MinasTirithGarrison extends CardImpl { + + public MinasTirithGarrison(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{U}"); + + this.subtype.add(SubType.HUMAN); + this.subtype.add(SubType.SOLDIER); + this.power = new MageInt(0); + this.toughness = new MageInt(5); + + // Minas Tirith Garrison's power is equal to the number of cards in your hand. + this.addAbility(new SimpleStaticAbility( + Zone.ALL, new SetBasePowerSourceEffect(CardsInControllerHandCount.instance) + )); + + // Whenever Minas Tirith Garrison attacks, you may tap any number of untapped Humans you control. Draw a card for each Human tapped this way. + this.addAbility(new AttacksTriggeredAbility( + new MinasTirithGarrisonEffect(), true + )); + } + + private MinasTirithGarrison(final MinasTirithGarrison card) { + super(card); + } + + @Override + public MinasTirithGarrison copy() { + return new MinasTirithGarrison(this); + } +} + +// Based of Devout Invocation. +class MinasTirithGarrisonEffect extends OneShotEffect { + + static final FilterControlledPermanent filter = new FilterControlledPermanent(SubType.HUMAN, "untapped Humans you control"); + + static { + filter.add(TappedPredicate.UNTAPPED); + } + + public MinasTirithGarrisonEffect() { + super(Outcome.AIDontUseIt); + staticText = "tap any number of untapped Humans you control. Draw a card for each Human tapped this way"; + } + + private MinasTirithGarrisonEffect(final MinasTirithGarrisonEffect effect) { + super(effect); + } + + @Override + public MinasTirithGarrisonEffect copy() { + return new MinasTirithGarrisonEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + if (controller == null) { + return false; + } + + TargetPermanent target = new TargetControlledPermanent(0, Integer.MAX_VALUE, filter, true); + controller.choose(outcome, target, source, game); + if (target.getTargets().isEmpty()) { + return false; + } + + int tappedAmount = 0; + for (UUID permanentId : target.getTargets()) { + Permanent permanent = game.getPermanent(permanentId); + if (permanent != null && permanent.tap(source, game)) { + tappedAmount++; + } + } + + return new DrawCardSourceControllerEffect(tappedAmount).apply(game, source); + } +} diff --git a/Mage.Sets/src/mage/sets/TheLordOfTheRingsTalesOfMiddleEarth.java b/Mage.Sets/src/mage/sets/TheLordOfTheRingsTalesOfMiddleEarth.java index 09414ff9073..cea7a73f2a3 100644 --- a/Mage.Sets/src/mage/sets/TheLordOfTheRingsTalesOfMiddleEarth.java +++ b/Mage.Sets/src/mage/sets/TheLordOfTheRingsTalesOfMiddleEarth.java @@ -280,6 +280,7 @@ public final class TheLordOfTheRingsTalesOfMiddleEarth extends ExpansionSet { cards.add(new SetCardInfo("Minas Tirith", 256, Rarity.RARE, mage.cards.m.MinasTirith.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Minas Tirith", 341, Rarity.RARE, mage.cards.m.MinasTirith.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Minas Tirith", 420, Rarity.RARE, mage.cards.m.MinasTirith.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Minas Tirith Garrison", 825, Rarity.RARE, mage.cards.m.MinasTirithGarrison.class)); cards.add(new SetCardInfo("Mines of Moria", 257, Rarity.RARE, mage.cards.m.MinesOfMoria.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Mines of Moria", 342, Rarity.RARE, mage.cards.m.MinesOfMoria.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Mines of Moria", 753, Rarity.RARE, mage.cards.m.MinesOfMoria.class, NON_FULL_USE_VARIOUS));