From 3a0695833dfccdf9b05e6d71b24a65a229dd9e8f Mon Sep 17 00:00:00 2001 From: theelk801 Date: Wed, 7 Jan 2026 21:42:12 -0500 Subject: [PATCH] [ECL] Implement Trystan, Callous Cultivator / Trystan, Penitent Culler --- .../cards/t/TrystanCallousCultivator.java | 89 +++++++++++++++++++ Mage.Sets/src/mage/sets/LorwynEclipsed.java | 2 + 2 files changed, 91 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/t/TrystanCallousCultivator.java diff --git a/Mage.Sets/src/mage/cards/t/TrystanCallousCultivator.java b/Mage.Sets/src/mage/cards/t/TrystanCallousCultivator.java new file mode 100644 index 00000000000..f717b709f84 --- /dev/null +++ b/Mage.Sets/src/mage/cards/t/TrystanCallousCultivator.java @@ -0,0 +1,89 @@ +package mage.cards.t; + +import mage.abilities.Ability; +import mage.abilities.common.TransformIntoSourceTriggeredAbility; +import mage.abilities.common.TransformsOrEntersTriggeredAbility; +import mage.abilities.condition.Condition; +import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.costs.common.ExileFromGraveCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.decorator.ConditionalOneShotEffect; +import mage.abilities.effects.common.*; +import mage.abilities.hint.ConditionHint; +import mage.abilities.hint.Hint; +import mage.abilities.keyword.DeathtouchAbility; +import mage.abilities.triggers.BeginningOfFirstMainTriggeredAbility; +import mage.cards.CardSetInfo; +import mage.cards.TransformingDoubleFacedCard; +import mage.constants.CardType; +import mage.constants.SubType; +import mage.constants.SuperType; +import mage.filter.FilterCard; +import mage.target.common.TargetCardInYourGraveyard; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class TrystanCallousCultivator extends TransformingDoubleFacedCard { + + private static final FilterCard filter = new FilterCard(SubType.ELF); + private static final Condition condition = new CardsInControllerGraveyardCondition(1, filter); + private static final Hint hint = new ConditionHint(condition, "There is an Elf card in your graveyard"); + + public TrystanCallousCultivator(UUID ownerId, CardSetInfo setInfo) { + super( + ownerId, setInfo, + new SuperType[]{SuperType.LEGENDARY}, new CardType[]{CardType.CREATURE}, new SubType[]{SubType.ELF, SubType.DRUID}, "{2}{G}", + "Trystan, Penitent Culler", + new SuperType[]{SuperType.LEGENDARY}, new CardType[]{CardType.CREATURE}, new SubType[]{SubType.ELF, SubType.WARLOCK}, "B" + ); + this.getLeftHalfCard().setPT(3, 4); + this.getRightHalfCard().setPT(3, 4); + + // Deathtouch + this.getLeftHalfCard().addAbility(DeathtouchAbility.getInstance()); + + // Whenever this creature enters or transforms into Trystan, Callous Cultivator, mill three cards. Then if there is an Elf card in your graveyard, you gain 2 life. + Ability ability = new TransformsOrEntersTriggeredAbility( + new MillCardsControllerEffect(3), false + ); + ability.addEffect(new ConditionalOneShotEffect( + new GainLifeEffect(2), condition, "Then if there is " + + "an Elf card in your graveyard, you gain 2 life" + )); + this.getLeftHalfCard().addAbility(ability.addHint(hint)); + + // At the beginning of your first main phase, you may pay {B}. If you do, transform Trystan. + this.getLeftHalfCard().addAbility(new BeginningOfFirstMainTriggeredAbility( + new DoIfCostPaid(new TransformSourceEffect(), new ManaCostsImpl<>("{B}")) + )); + + // Deathtouch + this.getRightHalfCard().addAbility(DeathtouchAbility.getInstance()); + + // Trystan, Penitent Culler + // Whenever this creature transforms into Trystan, Penitent Culler, mill three cards, then you may exile an Elf card from your graveyard. If you do, each opponent loses 2 life. + ability = new TransformIntoSourceTriggeredAbility(new MillCardsControllerEffect(3)); + ability.addEffect(new DoIfCostPaid( + new LoseLifeOpponentsEffect(2), + new ExileFromGraveCost(new TargetCardInYourGraveyard(filter)) + )); + this.getRightHalfCard().addAbility(ability); + + // At the beginning of your first main phase, you may pay {G}. If you do, transform Trystan. + this.getRightHalfCard().addAbility(new BeginningOfFirstMainTriggeredAbility( + new DoIfCostPaid(new TransformSourceEffect(), new ManaCostsImpl<>("{G}")) + )); + } + + private TrystanCallousCultivator(final TrystanCallousCultivator card) { + super(card); + } + + @Override + public TrystanCallousCultivator copy() { + return new TrystanCallousCultivator(this); + } +} diff --git a/Mage.Sets/src/mage/sets/LorwynEclipsed.java b/Mage.Sets/src/mage/sets/LorwynEclipsed.java index 53d450630ef..d2efcc56f64 100644 --- a/Mage.Sets/src/mage/sets/LorwynEclipsed.java +++ b/Mage.Sets/src/mage/sets/LorwynEclipsed.java @@ -161,6 +161,8 @@ public final class LorwynEclipsed extends ExpansionSet { cards.add(new SetCardInfo("Tend the Sprigs", 197, Rarity.COMMON, mage.cards.t.TendTheSprigs.class)); cards.add(new SetCardInfo("Thoughtweft Lieutenant", 246, Rarity.UNCOMMON, mage.cards.t.ThoughtweftLieutenant.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Thoughtweft Lieutenant", 343, Rarity.UNCOMMON, mage.cards.t.ThoughtweftLieutenant.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Trystan, Callous Cultivator", 199, Rarity.RARE, mage.cards.t.TrystanCallousCultivator.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Trystan, Callous Cultivator", 291, Rarity.RARE, mage.cards.t.TrystanCallousCultivator.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Tweeze", 162, Rarity.COMMON, mage.cards.t.Tweeze.class)); cards.add(new SetCardInfo("Unexpected Assistance", 80, Rarity.COMMON, mage.cards.u.UnexpectedAssistance.class)); cards.add(new SetCardInfo("Unwelcome Sprite", 81, Rarity.UNCOMMON, mage.cards.u.UnwelcomeSprite.class));