From 920fde5c464e6fff247605e3711b10d6b81b0493 Mon Sep 17 00:00:00 2001 From: Muz Date: Fri, 9 Jan 2026 20:05:07 -0600 Subject: [PATCH] [ECL] Implement Firdoch Core (#14196) * [ECL] Implement Firdoch Core * Refactor Soulstone Sanctuary to not use a custom class. --- Mage.Sets/src/mage/cards/f/FirdochCore.java | 52 +++++++++++++++++++ .../src/mage/cards/s/SoulstoneSanctuary.java | 37 ++++--------- Mage.Sets/src/mage/sets/LorwynEclipsed.java | 1 + 3 files changed, 63 insertions(+), 27 deletions(-) create mode 100644 Mage.Sets/src/mage/cards/f/FirdochCore.java diff --git a/Mage.Sets/src/mage/cards/f/FirdochCore.java b/Mage.Sets/src/mage/cards/f/FirdochCore.java new file mode 100644 index 00000000000..3b4b1a578fe --- /dev/null +++ b/Mage.Sets/src/mage/cards/f/FirdochCore.java @@ -0,0 +1,52 @@ +package mage.cards.f; + +import java.util.UUID; +import mage.constants.SubType; +import mage.game.permanent.token.custom.CreatureToken; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.mana.GenericManaCost; +import mage.abilities.effects.common.continuous.BecomesCreatureSourceEffect; +import mage.abilities.keyword.ChangelingAbility; +import mage.abilities.mana.AnyColorManaAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Duration; + +/** + * + * @author muz + */ +public final class FirdochCore extends CardImpl { + + public FirdochCore(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.KINDRED, CardType.ARTIFACT}, "{3}"); + + this.subtype.add(SubType.SHAPESHIFTER); + + // Changeling + this.addAbility(new ChangelingAbility()); + + // {T}: Add one mana of any color. + this.addAbility(new AnyColorManaAbility()); + + // {4}: This artifact becomes a 4/4 artifact creature until end of turn. + this.addAbility(new SimpleActivatedAbility( + new BecomesCreatureSourceEffect( + new CreatureToken(4, 4).withType(CardType.ARTIFACT).withSubType(SubType.SHAPESHIFTER), + CardType.ARTIFACT, + Duration.EndOfTurn + ).setText("this artifact becomes a 4/4 artifact creature until end of turn"), + new GenericManaCost(4) + )); + } + + private FirdochCore(final FirdochCore card) { + super(card); + } + + @Override + public FirdochCore copy() { + return new FirdochCore(this); + } +} diff --git a/Mage.Sets/src/mage/cards/s/SoulstoneSanctuary.java b/Mage.Sets/src/mage/cards/s/SoulstoneSanctuary.java index 3dd2fc68c01..e6c226f0780 100644 --- a/Mage.Sets/src/mage/cards/s/SoulstoneSanctuary.java +++ b/Mage.Sets/src/mage/cards/s/SoulstoneSanctuary.java @@ -1,6 +1,5 @@ package mage.cards.s; -import mage.MageInt; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.effects.common.continuous.BecomesCreatureSourceEffect; @@ -10,8 +9,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; -import mage.constants.Zone; -import mage.game.permanent.token.TokenImpl; +import mage.game.permanent.token.custom.CreatureToken; import java.util.UUID; @@ -23,16 +21,21 @@ public final class SoulstoneSanctuary extends CardImpl { public SoulstoneSanctuary(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); - + // {T}: Add {C}. this.addAbility(new ColorlessManaAbility()); // {4}: This land becomes a 3/3 creature with vigilance and all creature types. It's still a land. this.addAbility(new SimpleActivatedAbility( - new BecomesCreatureSourceEffect(new SoulStoneSanctuaryToken(), CardType.LAND, Duration.WhileOnBattlefield) - .setText("this land becomes a 3/3 creature with vigilance and all creature types. It's still a land"), - new GenericManaCost(4) + new BecomesCreatureSourceEffect( + new CreatureToken(3, 3) + .withAbility(VigilanceAbility.getInstance()) + .withAllCreatureTypes(true), + CardType.LAND, + Duration.WhileOnBattlefield + ).setText("this land becomes a 3/3 creature with vigilance and all creature types. It's still a land"), + new GenericManaCost(4) )); } @@ -45,23 +48,3 @@ public final class SoulstoneSanctuary extends CardImpl { return new SoulstoneSanctuary(this); } } - -class SoulStoneSanctuaryToken extends TokenImpl { - - public SoulStoneSanctuaryToken() { - super("", "3/3 creature with vigilance and all creature types"); - cardType.add(CardType.CREATURE); - subtype.setIsAllCreatureTypes(true); - power = new MageInt(3); - toughness = new MageInt(3); - - this.addAbility(VigilanceAbility.getInstance()); - } - private SoulStoneSanctuaryToken(final SoulStoneSanctuaryToken token) { - super(token); - } - - public SoulStoneSanctuaryToken copy() { - return new SoulStoneSanctuaryToken(this); - } -} diff --git a/Mage.Sets/src/mage/sets/LorwynEclipsed.java b/Mage.Sets/src/mage/sets/LorwynEclipsed.java index 484db5c7685..62a4b72d361 100644 --- a/Mage.Sets/src/mage/sets/LorwynEclipsed.java +++ b/Mage.Sets/src/mage/sets/LorwynEclipsed.java @@ -124,6 +124,7 @@ public final class LorwynEclipsed extends ExpansionSet { cards.add(new SetCardInfo("Feisty Spikeling", 223, Rarity.COMMON, mage.cards.f.FeistySpikeling.class)); cards.add(new SetCardInfo("Figure of Fable", 224, Rarity.RARE, mage.cards.f.FigureOfFable.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Figure of Fable", 372, Rarity.RARE, mage.cards.f.FigureOfFable.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Firdoch Core", 255, Rarity.COMMON, mage.cards.f.FirdochCore.class)); cards.add(new SetCardInfo("Flame-Chain Mauler", 138, Rarity.COMMON, mage.cards.f.FlameChainMauler.class)); cards.add(new SetCardInfo("Flamebraider", 139, Rarity.UNCOMMON, mage.cards.f.Flamebraider.class)); cards.add(new SetCardInfo("Flamekin Gildweaver", 140, Rarity.COMMON, mage.cards.f.FlamekinGildweaver.class));