From e429a0b2457ef9ede3a6e62c9be69bd0cbf830f9 Mon Sep 17 00:00:00 2001 From: Evan Kranzler Date: Sun, 6 Nov 2022 13:48:55 -0500 Subject: [PATCH] [BRO] Implement Tocasia, Dig Site Mentor --- .../mage/cards/t/TocasiaDigSiteMentor.java | 111 ++++++++++++++++++ Mage.Sets/src/mage/sets/TheBrothersWar.java | 1 + 2 files changed, 112 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/t/TocasiaDigSiteMentor.java diff --git a/Mage.Sets/src/mage/cards/t/TocasiaDigSiteMentor.java b/Mage.Sets/src/mage/cards/t/TocasiaDigSiteMentor.java new file mode 100644 index 00000000000..e4e5798bcb4 --- /dev/null +++ b/Mage.Sets/src/mage/cards/t/TocasiaDigSiteMentor.java @@ -0,0 +1,111 @@ +package mage.cards.t; + +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.ActivateAsSorceryActivatedAbility; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.costs.common.ExileSourceFromGraveCost; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.ReturnFromGraveyardToBattlefieldTargetEffect; +import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; +import mage.abilities.effects.keyword.SurveilEffect; +import mage.abilities.keyword.VigilanceAbility; +import mage.cards.Card; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.*; +import mage.filter.FilterCard; +import mage.filter.StaticFilters; +import mage.filter.common.FilterArtifactCard; +import mage.filter.predicate.mageobject.ManaValuePredicate; +import mage.game.Game; +import mage.target.common.TargetCardInYourGraveyard; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class TocasiaDigSiteMentor extends CardImpl { + + public TocasiaDigSiteMentor(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G}{W}{U}"); + + this.addSuperType(SuperType.LEGENDARY); + this.subtype.add(SubType.HUMAN); + this.subtype.add(SubType.ARTIFICER); + this.power = new MageInt(4); + this.toughness = new MageInt(3); + + // Creatures you control have vigilance and "{T}: Surveil 1." + Ability ability = new SimpleStaticAbility(new GainAbilityControlledEffect( + VigilanceAbility.getInstance(), Duration.WhileOnBattlefield, + StaticFilters.FILTER_PERMANENT_CREATURES + )); + ability.addEffect(new GainAbilityControlledEffect( + new SimpleActivatedAbility( + new SurveilEffect(1, false), new TapSourceCost() + ), Duration.WhileOnBattlefield, StaticFilters.FILTER_PERMANENT_CREATURES + ).setText("and \"{T}: Surveil 1.\"")); + this.addAbility(ability); + + // {2}{G}{G}{W}{W}{U}{U}, Exile Tocasia, Dig Site Mentor from your graveyard: Return any number of target artifact cards with total mana value 10 or less from your graveyard to the battlefield. Activate only as a sorcery. + ability = new ActivateAsSorceryActivatedAbility( + Zone.GRAVEYARD, + new ReturnFromGraveyardToBattlefieldTargetEffect(), + new ManaCostsImpl<>("{2}{G}{G}{W}{W}{U}{U}") + ); + ability.addCost(new ExileSourceFromGraveCost()); + ability.addTarget(new TocasiaDigSiteMentorTarget()); + this.addAbility(ability); + } + + private TocasiaDigSiteMentor(final TocasiaDigSiteMentor card) { + super(card); + } + + @Override + public TocasiaDigSiteMentor copy() { + return new TocasiaDigSiteMentor(this); + } +} + +class TocasiaDigSiteMentorTarget extends TargetCardInYourGraveyard { + + private static final FilterCard filter = new FilterArtifactCard( + "artifact cards with total mana value 10 or less from your graveyard" + ); + + static { + filter.add(new ManaValuePredicate(ComparisonType.FEWER_THAN, 11)); + } + + TocasiaDigSiteMentorTarget() { + super(0, Integer.MAX_VALUE, filter, false); + } + + private TocasiaDigSiteMentorTarget(final TocasiaDigSiteMentorTarget target) { + super(target); + } + + @Override + public TocasiaDigSiteMentorTarget copy() { + return new TocasiaDigSiteMentorTarget(this); + } + + @Override + public boolean canTarget(UUID controllerId, UUID id, Ability source, Game game) { + if (!super.canTarget(controllerId, id, source, game)) { + return false; + } + Card card = game.getCard(id); + return card != null && + this.getTargets() + .stream() + .map(game::getCard) + .mapToInt(Card::getManaValue) + .sum() + card.getManaValue() <= 10; + } +} diff --git a/Mage.Sets/src/mage/sets/TheBrothersWar.java b/Mage.Sets/src/mage/sets/TheBrothersWar.java index cebcadcdd87..16874f0c511 100644 --- a/Mage.Sets/src/mage/sets/TheBrothersWar.java +++ b/Mage.Sets/src/mage/sets/TheBrothersWar.java @@ -255,6 +255,7 @@ public final class TheBrothersWar extends ExpansionSet { cards.add(new SetCardInfo("Tocasia's Dig Site", 266, Rarity.COMMON, mage.cards.t.TocasiasDigSite.class)); cards.add(new SetCardInfo("Tocasia's Onulet", 39, Rarity.COMMON, mage.cards.t.TocasiasOnulet.class)); cards.add(new SetCardInfo("Tocasia's Welcome", 30, Rarity.RARE, mage.cards.t.TocasiasWelcome.class)); + cards.add(new SetCardInfo("Tocasia, Dig Site Mentor", 224, Rarity.RARE, mage.cards.t.TocasiaDigSiteMentor.class)); cards.add(new SetCardInfo("Tomakul Honor Guard", 195, Rarity.COMMON, mage.cards.t.TomakulHonorGuard.class)); cards.add(new SetCardInfo("Tomakul Scrapsmith", 153, Rarity.COMMON, mage.cards.t.TomakulScrapsmith.class)); cards.add(new SetCardInfo("Tower Worker", 255, Rarity.COMMON, mage.cards.t.TowerWorker.class));