From b54c9f47a2ccdc23ede164388dd1e54decb9a256 Mon Sep 17 00:00:00 2001 From: Muz Date: Sat, 10 Jan 2026 18:33:18 -0600 Subject: [PATCH] [ECL] Implement Chronicle of Victory (#14223) --- .../src/mage/cards/c/ChronicleOfVictory.java | 83 +++++++++++++++++++ Mage.Sets/src/mage/sets/LorwynEclipsed.java | 2 + 2 files changed, 85 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/c/ChronicleOfVictory.java diff --git a/Mage.Sets/src/mage/cards/c/ChronicleOfVictory.java b/Mage.Sets/src/mage/cards/c/ChronicleOfVictory.java new file mode 100644 index 00000000000..12c9dcb9c50 --- /dev/null +++ b/Mage.Sets/src/mage/cards/c/ChronicleOfVictory.java @@ -0,0 +1,83 @@ +package mage.cards.c; + +import java.util.UUID; +import mage.constants.SuperType; +import mage.constants.TargetController; +import mage.filter.FilterSpell; +import mage.filter.StaticFilters; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.mageobject.ChosenSubtypePredicate; +import mage.abilities.common.AsEntersBattlefieldAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.common.SpellCastControllerTriggeredAbility; +import mage.abilities.effects.common.ChooseCreatureTypeEffect; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.abilities.effects.common.continuous.BoostAllOfChosenSubtypeEffect; +import mage.abilities.effects.common.continuous.GainAbilityAllOfChosenSubtypeEffect; +import mage.abilities.keyword.FirstStrikeAbility; +import mage.abilities.keyword.TrampleAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Outcome; + +/** + * + * @author muz + */ +public final class ChronicleOfVictory extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creatures you control of the chosen type"); + private static final FilterSpell filterSpell = new FilterSpell("a spell of the chosen type"); + + static { + filter.add(TargetController.YOU.getControllerPredicate()); + filterSpell.add(ChosenSubtypePredicate.TRUE); + } + + public ChronicleOfVictory(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{6}"); + + this.supertype.add(SuperType.LEGENDARY); + + // As Chronicle of Victory enters, choose a creature type. + this.addAbility(new AsEntersBattlefieldAbility(new ChooseCreatureTypeEffect(Outcome.BoostCreature))); + + // Creatures you control of the chosen type get +2/+2 and have first strike and trample. + SimpleStaticAbility buffAbility = new SimpleStaticAbility(new BoostAllOfChosenSubtypeEffect( + 2, 2, Duration.WhileOnBattlefield, filter, false + ).setText("creatures you control of the chosen type get +2/+2")); + buffAbility.addEffect( + new GainAbilityAllOfChosenSubtypeEffect( + FirstStrikeAbility.getInstance(), + Duration.WhileOnBattlefield, + StaticFilters.FILTER_PERMANENT_CREATURES_CONTROLLED + ).setText("and have first strike") + ); + buffAbility.addEffect( + new GainAbilityAllOfChosenSubtypeEffect( + TrampleAbility.getInstance(), + Duration.WhileOnBattlefield, + StaticFilters.FILTER_PERMANENT_CREATURES_CONTROLLED + ).setText("and trample") + ); + this.addAbility(buffAbility); + + // Whenever you cast a spell of the chosen type, draw a card. + this.addAbility( + new SpellCastControllerTriggeredAbility( + new DrawCardSourceControllerEffect(1), filterSpell, false + ) + ); + } + + private ChronicleOfVictory(final ChronicleOfVictory card) { + super(card); + } + + @Override + public ChronicleOfVictory copy() { + return new ChronicleOfVictory(this); + } +} diff --git a/Mage.Sets/src/mage/sets/LorwynEclipsed.java b/Mage.Sets/src/mage/sets/LorwynEclipsed.java index e3f5972d341..55de934936c 100644 --- a/Mage.Sets/src/mage/sets/LorwynEclipsed.java +++ b/Mage.Sets/src/mage/sets/LorwynEclipsed.java @@ -85,6 +85,8 @@ public final class LorwynEclipsed extends ExpansionSet { cards.add(new SetCardInfo("Chaos Spewer", 210, Rarity.COMMON, mage.cards.c.ChaosSpewer.class)); cards.add(new SetCardInfo("Chitinous Graspling", 211, Rarity.COMMON, mage.cards.c.ChitinousGraspling.class)); cards.add(new SetCardInfo("Chomping Changeling", 172, Rarity.UNCOMMON, mage.cards.c.ChompingChangeling.class)); + cards.add(new SetCardInfo("Chronicle of Victory", 253, Rarity.MYTHIC, mage.cards.c.ChronicleOfVictory.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Chronicle of Victory", 346, Rarity.MYTHIC, mage.cards.c.ChronicleOfVictory.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Cinder Strike", 131, Rarity.COMMON, mage.cards.c.CinderStrike.class)); cards.add(new SetCardInfo("Clachan Festival", 10, Rarity.UNCOMMON, mage.cards.c.ClachanFestival.class)); cards.add(new SetCardInfo("Creakwood Safewright", 96, Rarity.UNCOMMON, mage.cards.c.CreakwoodSafewright.class));