From 212a7bc1597ed3a81603ef704aa0bc813d6a81a5 Mon Sep 17 00:00:00 2001 From: Matthew Wilson Date: Sat, 13 Jan 2024 22:43:39 +0200 Subject: [PATCH] [LCC] Implement The Grim Captain's Locker (#11645) Co-authored-by: Matthew Wilson --- .../mage/cards/t/TheGrimCaptainsLocker.java | 86 +++++++++++++++++++ .../sets/LostCavernsOfIxalanCommander.java | 1 + 2 files changed, 87 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/t/TheGrimCaptainsLocker.java diff --git a/Mage.Sets/src/mage/cards/t/TheGrimCaptainsLocker.java b/Mage.Sets/src/mage/cards/t/TheGrimCaptainsLocker.java new file mode 100644 index 00000000000..b4a14fa2684 --- /dev/null +++ b/Mage.Sets/src/mage/cards/t/TheGrimCaptainsLocker.java @@ -0,0 +1,86 @@ +package mage.cards.t; + +import java.util.Objects; +import java.util.UUID; + +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.effects.ContinuousEffectImpl; +import mage.abilities.effects.keyword.SurveilEffect; +import mage.abilities.keyword.EscapeAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Layer; +import mage.constants.Outcome; +import mage.constants.SubLayer; +import mage.constants.SuperType; +import mage.game.Game; +import mage.players.Player; + +public class TheGrimCaptainsLocker extends CardImpl { + + public TheGrimCaptainsLocker(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{3}{B}"); + + this.supertype.add(SuperType.LEGENDARY); + + // {T}, Surveil 1. + this.addAbility(new SimpleActivatedAbility(new SurveilEffect(1), new TapSourceCost())); + + // {T}: Until end of turn, each creature card in your graveyard gains "Escape — {3}{B}, Exile four other cards from your graveyard." + Ability ability = new SimpleActivatedAbility(new TheGrimCaptainsLockerEffect(), new TapSourceCost()); + this.addAbility(ability); + + } + + private TheGrimCaptainsLocker(final TheGrimCaptainsLocker card) { + super(card); + } + + @Override + public TheGrimCaptainsLocker copy() { + return new TheGrimCaptainsLocker(this); + } +} + +class TheGrimCaptainsLockerEffect extends ContinuousEffectImpl { + + TheGrimCaptainsLockerEffect() { + super(Duration.EndOfTurn, Layer.AbilityAddingRemovingEffects_6, SubLayer.NA, Outcome.Benefit); + staticText = "Until end of turn, each creature card in your graveyard gains " + + "\"Escape — {3}{B}, Exile four other cards from your graveyard.\""; + } + + private TheGrimCaptainsLockerEffect(final TheGrimCaptainsLockerEffect effect) { + super(effect); + } + + @Override + public TheGrimCaptainsLockerEffect copy() { + return new TheGrimCaptainsLockerEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + if (controller == null) { + return false; + } + controller + .getGraveyard() + .getCards(game) + .stream() + .filter(Objects::nonNull) + .filter(card -> card.isCreature(game)) + .forEach(card -> { + Ability ability = new EscapeAbility(card, "{3}{B}", 4); + ability.setSourceId(card.getId()); + ability.setControllerId(card.getOwnerId()); + game.getState().addOtherAbility(card, ability); + }); + return true; + } +} diff --git a/Mage.Sets/src/mage/sets/LostCavernsOfIxalanCommander.java b/Mage.Sets/src/mage/sets/LostCavernsOfIxalanCommander.java index 25347d462ec..3792a7a468b 100644 --- a/Mage.Sets/src/mage/sets/LostCavernsOfIxalanCommander.java +++ b/Mage.Sets/src/mage/sets/LostCavernsOfIxalanCommander.java @@ -275,6 +275,7 @@ public final class LostCavernsOfIxalanCommander extends ExpansionSet { cards.add(new SetCardInfo("Thassa, God of the Sea", 176, Rarity.MYTHIC, mage.cards.t.ThassaGodOfTheSea.class)); cards.add(new SetCardInfo("The Indomitable", 43, Rarity.RARE, mage.cards.t.TheIndomitable.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("The Indomitable", 75, Rarity.RARE, mage.cards.t.TheIndomitable.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("The Grim Captain's Locker", 82, Rarity.RARE, mage.cards.t.TheGrimCaptainsLocker.class)); cards.add(new SetCardInfo("Thieving Skydiver", 177, Rarity.RARE, mage.cards.t.ThievingSkydiver.class)); cards.add(new SetCardInfo("Thought Vessel", 118, Rarity.UNCOMMON, mage.cards.t.ThoughtVessel.class)); cards.add(new SetCardInfo("Thriving Bluff", 361, Rarity.COMMON, mage.cards.t.ThrivingBluff.class));