From 508c5348845c6fdf66068b81af7e818a3abc92db Mon Sep 17 00:00:00 2001 From: theelk801 Date: Sat, 5 Apr 2025 13:57:40 -0400 Subject: [PATCH] [TDM] Implement Temur Battlecrier --- .../src/mage/cards/t/TemurBattlecrier.java | 104 ++++++++++++++++++ .../src/mage/sets/TarkirDragonstorm.java | 7 +- 2 files changed, 108 insertions(+), 3 deletions(-) create mode 100644 Mage.Sets/src/mage/cards/t/TemurBattlecrier.java diff --git a/Mage.Sets/src/mage/cards/t/TemurBattlecrier.java b/Mage.Sets/src/mage/cards/t/TemurBattlecrier.java new file mode 100644 index 00000000000..03c8765bbcf --- /dev/null +++ b/Mage.Sets/src/mage/cards/t/TemurBattlecrier.java @@ -0,0 +1,104 @@ +package mage.cards.t; + +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.SpellAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount; +import mage.abilities.effects.common.cost.CostModificationEffectImpl; +import mage.abilities.hint.Hint; +import mage.abilities.hint.ValueHint; +import mage.cards.Card; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.*; +import mage.filter.FilterPermanent; +import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.predicate.mageobject.PowerPredicate; +import mage.game.Game; +import mage.util.CardUtil; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class TemurBattlecrier extends CardImpl { + + public TemurBattlecrier(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{G}{U}{R}"); + + this.subtype.add(SubType.ORC); + this.subtype.add(SubType.RANGER); + this.power = new MageInt(4); + this.toughness = new MageInt(3); + + // During your turn, spells you cast cost {1} less to cast for each creature you control with power 4 or greater. + this.addAbility(new SimpleStaticAbility(new TemurBattlecrierEffect()).addHint(TemurBattlecrierEffect.getHint())); + } + + private TemurBattlecrier(final TemurBattlecrier card) { + super(card); + } + + @Override + public TemurBattlecrier copy() { + return new TemurBattlecrier(this); + } +} + +class TemurBattlecrierEffect extends CostModificationEffectImpl { + + private static final FilterPermanent filter = new FilterControlledCreaturePermanent(); + + static { + filter.add(new PowerPredicate(ComparisonType.MORE_THAN, 3)); + } + + private static final Hint hint = new ValueHint( + "Creatures you control with power 4 or greater", new PermanentsOnBattlefieldCount(filter) + ); + + public static Hint getHint() { + return hint; + } + + TemurBattlecrierEffect() { + super(Duration.WhileOnBattlefield, Outcome.Benefit, CostModificationType.REDUCE_COST); + staticText = "during your turn, spells you cast cost {1} less to cast " + + "for each creature you control with power 4 or greater"; + } + + private TemurBattlecrierEffect(final TemurBattlecrierEffect effect) { + super(effect); + } + + @Override + public boolean apply(Game game, Ability source, Ability abilityToModify) { + Ability spellAbility = abilityToModify; + if (spellAbility == null) { + return false; + } + int amount = game.getBattlefield().count(filter, source.getControllerId(), source, game); + if (amount > 0) { + CardUtil.reduceCost(spellAbility, amount); + } + return true; + } + + @Override + public boolean applies(Ability abilityToModify, Ability source, Game game) { + if (!(abilityToModify instanceof SpellAbility) + || !abilityToModify.isControlledBy(source.getControllerId()) + || !game.isActivePlayer(source.getControllerId())) { + return false; + } + Card spellCard = ((SpellAbility) abilityToModify).getCharacteristics(game); + return spellCard != null; + } + + @Override + public TemurBattlecrierEffect copy() { + return new TemurBattlecrierEffect(this); + } +} diff --git a/Mage.Sets/src/mage/sets/TarkirDragonstorm.java b/Mage.Sets/src/mage/sets/TarkirDragonstorm.java index ebb85007cdf..b5fe3c80cc2 100644 --- a/Mage.Sets/src/mage/sets/TarkirDragonstorm.java +++ b/Mage.Sets/src/mage/sets/TarkirDragonstorm.java @@ -1,12 +1,12 @@ package mage.sets; -import java.util.Arrays; -import java.util.List; - import mage.cards.ExpansionSet; import mage.constants.Rarity; import mage.constants.SetType; +import java.util.Arrays; +import java.util.List; + /** * @author TheElk801 */ @@ -209,6 +209,7 @@ public final class TarkirDragonstorm extends ExpansionSet { cards.add(new SetCardInfo("Swiftwater Cliffs", 268, Rarity.COMMON, mage.cards.s.SwiftwaterCliffs.class)); cards.add(new SetCardInfo("Teeming Dragonstorm", 30, Rarity.UNCOMMON, mage.cards.t.TeemingDragonstorm.class)); cards.add(new SetCardInfo("Tempest Hawk", 31, Rarity.COMMON, mage.cards.t.TempestHawk.class)); + cards.add(new SetCardInfo("Temur Battlecrier", 228, Rarity.RARE, mage.cards.t.TemurBattlecrier.class)); cards.add(new SetCardInfo("Temur Devotee", 61, Rarity.COMMON, mage.cards.t.TemurDevotee.class)); cards.add(new SetCardInfo("Temur Monument", 248, Rarity.UNCOMMON, mage.cards.t.TemurMonument.class)); cards.add(new SetCardInfo("Temur Tawnyback", 229, Rarity.COMMON, mage.cards.t.TemurTawnyback.class));