From bad234a2de86ee5fb21bb9f8c39914587fdca34e Mon Sep 17 00:00:00 2001 From: theelk801 Date: Thu, 29 May 2025 10:48:39 -0400 Subject: [PATCH] [FIN] Implement Tifa's Limit Break --- .../src/mage/cards/t/TifasLimitBreak.java | 104 ++++++++++++++++++ Mage.Sets/src/mage/sets/FinalFantasy.java | 1 + 2 files changed, 105 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/t/TifasLimitBreak.java diff --git a/Mage.Sets/src/mage/cards/t/TifasLimitBreak.java b/Mage.Sets/src/mage/cards/t/TifasLimitBreak.java new file mode 100644 index 00000000000..e8cb50e8c86 --- /dev/null +++ b/Mage.Sets/src/mage/cards/t/TifasLimitBreak.java @@ -0,0 +1,104 @@ +package mage.cards.t; + +import mage.abilities.Ability; +import mage.abilities.Mode; +import mage.abilities.costs.mana.GenericManaCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.continuous.BoostTargetEffect; +import mage.abilities.keyword.TieredAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.target.common.TargetCreaturePermanent; +import mage.target.targetpointer.FixedTarget; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class TifasLimitBreak extends CardImpl { + + public TifasLimitBreak(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{G}"); + + // Tiered + this.addAbility(new TieredAbility(this)); + + // * Somersault -- {0} -- Target creature gets +2/+2 until end of turn. + this.getSpellAbility().addEffect(new BoostTargetEffect(2, 2)); + this.getSpellAbility().addTarget(new TargetCreaturePermanent()); + this.getSpellAbility().withFirstModeCost(new GenericManaCost(0)); + this.getSpellAbility().withFirstModeFlavorWord("Somersault"); + + // * Meteor Strikes -- {2} -- Double target creature's power and toughness until end of turn. + this.getSpellAbility().addMode(new Mode(new TifasLimitBreakEffect(2)) + .addTarget(new TargetCreaturePermanent()) + .withCost(new GenericManaCost(2)) + .withFlavorWord("Meteor Strikes")); + + // * Final Heaven -- {6}{G} -- Triple target creature's power and toughness until end of turn. + this.getSpellAbility().addMode(new Mode(new TifasLimitBreakEffect(3)) + .addTarget(new TargetCreaturePermanent()) + .withCost(new ManaCostsImpl<>("{6}{G}")) + .withFlavorWord("Final Heaven")); + } + + private TifasLimitBreak(final TifasLimitBreak card) { + super(card); + } + + @Override + public TifasLimitBreak copy() { + return new TifasLimitBreak(this); + } +} + +class TifasLimitBreakEffect extends OneShotEffect { + + private final int multiplier; + + TifasLimitBreakEffect(int multiplier) { + super(Outcome.Benefit); + staticText = makeWord(multiplier) + " target creature's power and toughness until end of turn"; + this.multiplier = multiplier; + } + + private TifasLimitBreakEffect(final TifasLimitBreakEffect effect) { + super(effect); + this.multiplier = effect.multiplier; + } + + @Override + public TifasLimitBreakEffect copy() { + return new TifasLimitBreakEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Permanent permanent = game.getPermanent(getTargetPointer().getFirst(game, source)); + if (permanent == null) { + return false; + } + game.addEffect(new BoostTargetEffect( + (multiplier - 1) * permanent.getPower().getValue(), + (multiplier - 1) * permanent.getToughness().getValue() + ).setTargetPointer(new FixedTarget(permanent, game)), source); + return true; + } + + private static String makeWord(int multiplier) { + switch (multiplier) { + case 2: + return "double"; + case 3: + return "triple"; + default: + throw new UnsupportedOperationException("no idea how we got here"); + } + } +} diff --git a/Mage.Sets/src/mage/sets/FinalFantasy.java b/Mage.Sets/src/mage/sets/FinalFantasy.java index b89e379efec..65fbec4684b 100644 --- a/Mage.Sets/src/mage/sets/FinalFantasy.java +++ b/Mage.Sets/src/mage/sets/FinalFantasy.java @@ -562,6 +562,7 @@ public final class FinalFantasy extends ExpansionSet { cards.add(new SetCardInfo("Tifa Lockhart", 391, Rarity.RARE, mage.cards.t.TifaLockhart.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Tifa Lockhart", 473, Rarity.RARE, mage.cards.t.TifaLockhart.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Tifa Lockhart", 536, Rarity.RARE, mage.cards.t.TifaLockhart.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Tifa's Limit Break", 207, Rarity.UNCOMMON, mage.cards.t.TifasLimitBreak.class)); cards.add(new SetCardInfo("Tonberry", 122, Rarity.UNCOMMON, mage.cards.t.Tonberry.class)); cards.add(new SetCardInfo("Torgal, A Fine Hound", 208, Rarity.UNCOMMON, mage.cards.t.TorgalAFineHound.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Torgal, A Fine Hound", 345, Rarity.UNCOMMON, mage.cards.t.TorgalAFineHound.class, NON_FULL_USE_VARIOUS));