From 0f7db0c69d4bb02a9320073dcb1f6030118639e4 Mon Sep 17 00:00:00 2001 From: theelk801 Date: Fri, 27 Oct 2023 19:30:30 -0400 Subject: [PATCH] [LCI] Implement Quintorius Kand --- .../src/mage/cards/q/QuintoriusKand.java | 97 +++++++++++++++++++ .../src/mage/sets/TheLostCavernsOfIxalan.java | 1 + .../src/main/java/mage/constants/SubType.java | 1 + 3 files changed, 99 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/q/QuintoriusKand.java diff --git a/Mage.Sets/src/mage/cards/q/QuintoriusKand.java b/Mage.Sets/src/mage/cards/q/QuintoriusKand.java new file mode 100644 index 00000000000..f44f6334178 --- /dev/null +++ b/Mage.Sets/src/mage/cards/q/QuintoriusKand.java @@ -0,0 +1,97 @@ +package mage.cards.q; + +import mage.Mana; +import mage.abilities.Ability; +import mage.abilities.LoyaltyAbility; +import mage.abilities.common.SpellCastControllerTriggeredAbility; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.effects.common.DamagePlayersEffect; +import mage.abilities.effects.common.GainLifeEffect; +import mage.abilities.effects.keyword.DiscoverEffect; +import mage.cards.*; +import mage.constants.*; +import mage.filter.StaticFilters; +import mage.game.Game; +import mage.game.permanent.token.Spirit32Token; +import mage.players.Player; +import mage.target.common.TargetCardInYourGraveyard; +import mage.util.CardUtil; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class QuintoriusKand extends CardImpl { + + public QuintoriusKand(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{3}{R}{W}"); + + this.supertype.add(SuperType.LEGENDARY); + this.subtype.add(SubType.QUINTORIUS); + this.setStartingLoyalty(4); + + // Whenever you cast a spell from exile, Quintorius Kand deals 2 damage to each opponent and you gain 2 life. + Ability ability = new SpellCastControllerTriggeredAbility( + Zone.BATTLEFIELD, new DamagePlayersEffect(2, TargetController.OPPONENT), + StaticFilters.FILTER_SPELL_A, false, SetTargetPointer.NONE, Zone.EXILED + ); + ability.addEffect(new GainLifeEffect(2).concatBy("and")); + this.addAbility(ability); + + // +1: Create a 3/2 red and white Spirit creature token. + this.addAbility(new LoyaltyAbility(new CreateTokenEffect(new Spirit32Token()), 1)); + + // -3: Discover 4. + this.addAbility(new LoyaltyAbility(new DiscoverEffect(4), -3)); + + // -6: Exile any number of target cards from your graveyard. Add {R} for each card exiled this way. You may play those cards this turn. + ability = new LoyaltyAbility(new QuintoriusKandEffect(), -6); + ability.addTarget(new TargetCardInYourGraveyard(0, Integer.MAX_VALUE)); + this.addAbility(ability); + } + + private QuintoriusKand(final QuintoriusKand card) { + super(card); + } + + @Override + public QuintoriusKand copy() { + return new QuintoriusKand(this); + } +} + +class QuintoriusKandEffect extends OneShotEffect { + + QuintoriusKandEffect() { + super(Outcome.Benefit); + staticText = "exile any number of target cards from your graveyard. " + + "Add {R} for each card exiled this way. You may play those cards this turn"; + } + + private QuintoriusKandEffect(final QuintoriusKandEffect effect) { + super(effect); + } + + @Override + public QuintoriusKandEffect copy() { + return new QuintoriusKandEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player player = game.getPlayer(source.getControllerId()); + Cards cards = new CardsImpl(getTargetPointer().getTargets(game, source)); + if (player == null || cards.isEmpty()) { + return false; + } + player.moveCards(cards, Zone.EXILED, source, game); + player.getManaPool().addMana(Mana.RedMana(cards.size()), game, source); + for (Card card : cards.getCards(game)) { + CardUtil.makeCardPlayable(game, source, card, Duration.EndOfTurn, false); + } + return true; + } +} + diff --git a/Mage.Sets/src/mage/sets/TheLostCavernsOfIxalan.java b/Mage.Sets/src/mage/sets/TheLostCavernsOfIxalan.java index d0e6006e338..83832a4a4ff 100644 --- a/Mage.Sets/src/mage/sets/TheLostCavernsOfIxalan.java +++ b/Mage.Sets/src/mage/sets/TheLostCavernsOfIxalan.java @@ -65,6 +65,7 @@ public final class TheLostCavernsOfIxalan extends ExpansionSet { cards.add(new SetCardInfo("Plains", 393, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Poison Dart Frog", 207, Rarity.COMMON, mage.cards.p.PoisonDartFrog.class)); cards.add(new SetCardInfo("Pugnacious Hammerskull", 208, Rarity.RARE, mage.cards.p.PugnaciousHammerskull.class)); + cards.add(new SetCardInfo("Quintorius Kand", 238, Rarity.MYTHIC, mage.cards.q.QuintoriusKand.class)); cards.add(new SetCardInfo("Rampaging Spiketail", 116, Rarity.COMMON, mage.cards.r.RampagingSpiketail.class)); cards.add(new SetCardInfo("Restless Prairie", 281, Rarity.RARE, mage.cards.r.RestlessPrairie.class)); cards.add(new SetCardInfo("Roar of the Fifth People", 189, Rarity.MYTHIC, mage.cards.r.RoarOfTheFifthPeople.class)); diff --git a/Mage/src/main/java/mage/constants/SubType.java b/Mage/src/main/java/mage/constants/SubType.java index 965467b3505..01c17a9ca85 100644 --- a/Mage/src/main/java/mage/constants/SubType.java +++ b/Mage/src/main/java/mage/constants/SubType.java @@ -483,6 +483,7 @@ public enum SubType { NIXILIS("Nixilis", SubTypeSet.PlaneswalkerType), OBI_WAN("Obi-Wan", SubTypeSet.PlaneswalkerType, true), // Star Wars OKO("Oko", SubTypeSet.PlaneswalkerType), + QUINTORIUS("Quintorius", SubTypeSet.PlaneswalkerType), RAL("Ral", SubTypeSet.PlaneswalkerType), REY("Rey", SubTypeSet.PlaneswalkerType, true), // Star Wars, ROWAN("Rowan", SubTypeSet.PlaneswalkerType),