From 0b5144d0d2d8f27b59808120542be957bd6ada34 Mon Sep 17 00:00:00 2001 From: theelk801 Date: Mon, 28 Apr 2025 11:08:42 -0400 Subject: [PATCH] [TDM] various text fixes --- .../cards/a/AnafenzaUnyieldingLineage.java | 2 +- .../src/mage/cards/a/ArashinSunshield.java | 2 +- .../src/mage/cards/a/ArmamentDragon.java | 5 +- Mage.Sets/src/mage/cards/b/BetorKinToAll.java | 85 ++++++++----------- Mage.Sets/src/mage/cards/c/CruelTruths.java | 2 +- .../src/mage/cards/d/DesperateMeasures.java | 2 + Mage.Sets/src/mage/cards/l/LasydProwler.java | 2 +- .../src/mage/cards/m/MarduSiegebreaker.java | 13 ++- Mage.Sets/src/mage/cards/p/Perennation.java | 7 +- .../mage/cards/r/ReverberatingSummons.java | 5 ++ .../mage/cards/r/RevivalOfTheAncestors.java | 4 +- Mage.Sets/src/mage/cards/r/RiteOfRenewal.java | 6 +- .../src/mage/cards/r/RunescaleStormbrood.java | 2 +- .../src/mage/cards/s/SaltRoadSkirmish.java | 3 +- .../mage/cards/s/SidisiRegentOfTheMire.java | 4 +- .../src/mage/cards/s/SongcrafterMage.java | 2 +- .../src/mage/cards/s/StillnessInMotion.java | 2 +- Mage.Sets/src/mage/cards/t/TemurMonument.java | 2 +- .../mage/cards/t/TevalArbiterOfVirtue.java | 16 ++-- .../src/mage/cards/u/UnderfootUnderdogs.java | 2 + .../src/mage/cards/w/WhirlwingStormbrood.java | 19 ++--- Mage/src/main/java/mage/abilities/Modes.java | 2 +- .../common/CreateTokenAttachSourceEffect.java | 2 +- ...ateXXTokenExiledEffectManaValueEffect.java | 2 +- .../GainAnchorWordAbilitySourceEffect.java | 3 +- .../mana/AddManaFromColorChoicesEffect.java | 2 +- .../java/mage/cards/AdventureSpellCard.java | 3 +- .../main/java/mage/cards/OmenSpellCard.java | 3 +- 28 files changed, 106 insertions(+), 98 deletions(-) diff --git a/Mage.Sets/src/mage/cards/a/AnafenzaUnyieldingLineage.java b/Mage.Sets/src/mage/cards/a/AnafenzaUnyieldingLineage.java index fb921218f6d..181374897ac 100644 --- a/Mage.Sets/src/mage/cards/a/AnafenzaUnyieldingLineage.java +++ b/Mage.Sets/src/mage/cards/a/AnafenzaUnyieldingLineage.java @@ -47,7 +47,7 @@ public final class AnafenzaUnyieldingLineage extends CardImpl { // Whenever another nontoken creature you control dies, Anafenza endures 2. this.addAbility(new DiesCreatureTriggeredAbility( - new EndureSourceEffect(2, "{this}"), true, filter + new EndureSourceEffect(2, "{this}"), false, filter )); } diff --git a/Mage.Sets/src/mage/cards/a/ArashinSunshield.java b/Mage.Sets/src/mage/cards/a/ArashinSunshield.java index 3ea6618a2aa..f99069039d0 100644 --- a/Mage.Sets/src/mage/cards/a/ArashinSunshield.java +++ b/Mage.Sets/src/mage/cards/a/ArashinSunshield.java @@ -33,7 +33,7 @@ public final class ArashinSunshield extends CardImpl { // When this creature enters, exile up to two target cards from a single graveyard. Ability ability = new EntersBattlefieldTriggeredAbility(new ExileTargetEffect()); - ability.addTarget(new TargetCardInASingleGraveyard(0, 2, StaticFilters.FILTER_CARDS_NON_LAND)); + ability.addTarget(new TargetCardInASingleGraveyard(0, 2, StaticFilters.FILTER_CARD_CARDS)); this.addAbility(ability); // {W}, {T}: Tap target creature. diff --git a/Mage.Sets/src/mage/cards/a/ArmamentDragon.java b/Mage.Sets/src/mage/cards/a/ArmamentDragon.java index db243795b2e..0f401af606a 100644 --- a/Mage.Sets/src/mage/cards/a/ArmamentDragon.java +++ b/Mage.Sets/src/mage/cards/a/ArmamentDragon.java @@ -10,7 +10,8 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.counters.CounterType; -import mage.target.common.TargetCreaturePermanentAmount; +import mage.filter.StaticFilters; +import mage.target.common.TargetPermanentAmount; import java.util.UUID; @@ -31,7 +32,7 @@ public final class ArmamentDragon extends CardImpl { // When this creature enters, distribute three +1/+1 counters among one, two, or three target creatures you control. Ability ability = new EntersBattlefieldTriggeredAbility(new DistributeCountersEffect(CounterType.P1P1)); - ability.addTarget(new TargetCreaturePermanentAmount(3)); + ability.addTarget(new TargetPermanentAmount(3, 1, StaticFilters.FILTER_CONTROLLED_CREATURES)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/b/BetorKinToAll.java b/Mage.Sets/src/mage/cards/b/BetorKinToAll.java index 923f3db7a30..30b5a617f89 100644 --- a/Mage.Sets/src/mage/cards/b/BetorKinToAll.java +++ b/Mage.Sets/src/mage/cards/b/BetorKinToAll.java @@ -1,15 +1,15 @@ package mage.cards.b; -import java.util.UUID; - import mage.MageInt; import mage.MageObject; import mage.abilities.Ability; import mage.abilities.condition.Condition; +import mage.abilities.decorator.ConditionalOneShotEffect; import mage.abilities.dynamicvalue.DynamicValue; import mage.abilities.effects.Effect; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.abilities.effects.common.UntapAllEffect; import mage.abilities.hint.Hint; import mage.abilities.hint.ValueHint; import mage.abilities.keyword.FlyingAbility; @@ -21,22 +21,22 @@ import mage.constants.Outcome; import mage.constants.SubType; import mage.constants.SuperType; import mage.filter.StaticFilters; -import mage.filter.common.FilterCreaturePermanent; import mage.game.Game; -import mage.game.permanent.Permanent; import mage.players.Player; +import java.util.UUID; + /** - * * @author androosss */ public final class BetorKinToAll extends CardImpl { private static final Hint hint = new ValueHint( - "Total toughness of creatures you control", ControlledCreaturesToughnessValue.instance); + "Total toughness of creatures you control", ControlledCreaturesToughnessValue.instance + ); public BetorKinToAll(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[] { CardType.CREATURE }, "{2}{W}{B}{G}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}{B}{G}"); this.supertype.add(SuperType.LEGENDARY); this.subtype.add(SubType.SPIRIT); @@ -47,15 +47,18 @@ public final class BetorKinToAll extends CardImpl { // Flying this.addAbility(FlyingAbility.getInstance()); - // At the beginning of your end step, if creatures you control have total - // toughness 10 or greater, draw a card. Then if creatures you control have - // total toughness 20 or greater, untap each creature you control. Then if - // creatures you control have total toughness 40 or greater, each opponent loses - // half their life, rounded up. - Ability betorAbility = new BeginningOfEndStepTriggeredAbility(new DrawCardSourceControllerEffect(1)) - .withInterveningIf(BetorKinToAllCondition.instance).addHint(hint); - betorAbility.addEffect(new BetorKinToAllEffect()); - this.addAbility(betorAbility); + // At the beginning of your end step, if creatures you control have total toughness 10 or greater, draw a card. Then if creatures you control have total toughness 20 or greater, untap each creature you control. Then if creatures you control have total toughness 40 or greater, each opponent loses half their life, rounded up. + Ability ability = new BeginningOfEndStepTriggeredAbility(new DrawCardSourceControllerEffect(1)) + .withInterveningIf(BetorKinToAllCondition.TEN); + ability.addEffect(new ConditionalOneShotEffect( + new UntapAllEffect(StaticFilters.FILTER_CONTROLLED_CREATURE), BetorKinToAllCondition.TWENTY, + "Then if creatures you control have total toughness 20 or greater, untap each creature you control" + )); + ability.addEffect(new ConditionalOneShotEffect( + new BetorKinToAllEffect(), BetorKinToAllCondition.FORTY, "Then if creatures you control " + + "have total toughness 40 or greater, each opponent loses half their life, rounded up" + )); + this.addAbility(ability.addHint(hint)); } private BetorKinToAll(final BetorKinToAll card) { @@ -69,22 +72,30 @@ public final class BetorKinToAll extends CardImpl { } enum BetorKinToAllCondition implements Condition { - instance; + TEN(10), + TWENTY(20), + FORTY(40); + private final int amount; + + private BetorKinToAllCondition(int amount) { + this.amount = amount; + } @Override public boolean apply(Game game, Ability source) { - return ControlledCreaturesToughnessValue.instance.calculate(game, source, null) >= 10; + return ControlledCreaturesToughnessValue.instance.calculate(game, source, null) >= amount; } + @Override + public String toString() { + return "creatures you control have total toughness " + amount + " or greater"; + } } class BetorKinToAllEffect extends OneShotEffect { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent(); - BetorKinToAllEffect() { super(Outcome.Benefit); - this.staticText = "Then if creatures you control have total toughness 20 or greater, untap each creature you control. Then if creatures you control have total toughness 40 or greater, each opponent loses half their life, rounded up."; } private BetorKinToAllEffect(final BetorKinToAllEffect effect) { @@ -98,36 +109,12 @@ class BetorKinToAllEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { - Player controller = game.getPlayer(source.getControllerId()); - if (controller == null) { - return false; - } - - int sumToughness = ControlledCreaturesToughnessValue.instance.calculate(game, source, null); - - if (sumToughness < 20) { - return true; - } - for (Permanent permanent : game.getBattlefield().getAllActivePermanents(filter, source.getControllerId(), - game)) { - permanent.untap(game); - } - - if (sumToughness < 40) { - return true; - } - - for (UUID playerId : game.getOpponents(controller.getId())) { + for (UUID playerId : game.getOpponents(source.getControllerId())) { Player opponent = game.getPlayer(playerId); - if (opponent == null) { - continue; - } - int amount = (int) Math.ceil(opponent.getLife() / 2f); - if (amount > 0) { - opponent.loseLife(amount, game, source, false); + if (opponent != null) { + opponent.loseLife(opponent.getLife() / 2 + opponent.getLife() % 2, game, source, false); } } - return true; } } @@ -162,4 +149,4 @@ enum ControlledCreaturesToughnessValue implements DynamicValue { public String toString() { return "X"; } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/c/CruelTruths.java b/Mage.Sets/src/mage/cards/c/CruelTruths.java index d2434e39a1f..5bed94d32b6 100644 --- a/Mage.Sets/src/mage/cards/c/CruelTruths.java +++ b/Mage.Sets/src/mage/cards/c/CruelTruths.java @@ -18,7 +18,7 @@ public final class CruelTruths extends CardImpl { super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{3}{B}"); // Surveil 2, then draw two cards. You lose 2 life. - this.getSpellAbility().addEffect(new SurveilEffect(2)); + this.getSpellAbility().addEffect(new SurveilEffect(2, false)); this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(2).concatBy(", then")); this.getSpellAbility().addEffect(new LoseLifeSourceControllerEffect(2)); } diff --git a/Mage.Sets/src/mage/cards/d/DesperateMeasures.java b/Mage.Sets/src/mage/cards/d/DesperateMeasures.java index 446b737329c..4be289078eb 100644 --- a/Mage.Sets/src/mage/cards/d/DesperateMeasures.java +++ b/Mage.Sets/src/mage/cards/d/DesperateMeasures.java @@ -9,6 +9,7 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.SetTargetPointer; +import mage.target.common.TargetCreaturePermanent; import java.util.UUID; @@ -28,6 +29,7 @@ public final class DesperateMeasures extends CardImpl { SetTargetPointer.NONE, true ), true )); + this.getSpellAbility().addTarget(new TargetCreaturePermanent()); } private DesperateMeasures(final DesperateMeasures card) { diff --git a/Mage.Sets/src/mage/cards/l/LasydProwler.java b/Mage.Sets/src/mage/cards/l/LasydProwler.java index 1971addf543..6bc9ea3e2d1 100644 --- a/Mage.Sets/src/mage/cards/l/LasydProwler.java +++ b/Mage.Sets/src/mage/cards/l/LasydProwler.java @@ -30,7 +30,7 @@ import java.util.UUID; */ public final class LasydProwler extends CardImpl { - private static final DynamicValue xValue = new CardsInControllerGraveyardCount(StaticFilters.FILTER_CARD_LAND, null); + private static final DynamicValue xValue = new CardsInControllerGraveyardCount(StaticFilters.FILTER_CARD_LANDS, null); private static final Hint hint = new ValueHint("Land cards in your graveyard", xValue); public LasydProwler(UUID ownerId, CardSetInfo setInfo) { diff --git a/Mage.Sets/src/mage/cards/m/MarduSiegebreaker.java b/Mage.Sets/src/mage/cards/m/MarduSiegebreaker.java index ead29290170..f101314369a 100644 --- a/Mage.Sets/src/mage/cards/m/MarduSiegebreaker.java +++ b/Mage.Sets/src/mage/cards/m/MarduSiegebreaker.java @@ -18,7 +18,10 @@ import mage.cards.Cards; import mage.constants.CardType; import mage.constants.Outcome; import mage.constants.SubType; +import mage.filter.FilterPermanent; import mage.filter.StaticFilters; +import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.predicate.mageobject.AnotherPredicate; import mage.game.Game; import mage.game.GameState; import mage.game.permanent.token.Token; @@ -39,6 +42,12 @@ import java.util.UUID; */ public final class MarduSiegebreaker extends CardImpl { + private static final FilterPermanent filter = new FilterControlledCreaturePermanent("other target creature you control"); + + static { + filter.add(AnotherPredicate.instance); + } + public MarduSiegebreaker(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{R}{W}{B}"); @@ -55,7 +64,7 @@ public final class MarduSiegebreaker extends CardImpl { // When this creature enters, exile up to one other target creature you control until this creature leaves the battlefield. Ability ability = new EntersBattlefieldTriggeredAbility(new ExileUntilSourceLeavesEffect()); - ability.addTarget(new TargetPermanent(0, 1, StaticFilters.FILTER_OTHER_CONTROLLED_CREATURE)); + ability.addTarget(new TargetPermanent(0, 1, filter)); this.addAbility(ability); // Whenever this creature attacks, for each opponent, create a tapped token that's a copy of the exiled card attacking that opponent. At the beginning of your end step, sacrifice those tokens. @@ -77,7 +86,7 @@ class MarduSiegebreakerEffect extends OneShotEffect { MarduSiegebreakerEffect() { super(Outcome.Benefit); staticText = "for each opponent, create a tapped token that's a copy of the exiled card " + - "attacking that opponent. At the beginning of your end step, sacrifice those tokens"; + "attacking that opponent. At the beginning of your next end step, sacrifice those tokens"; } private MarduSiegebreakerEffect(final MarduSiegebreakerEffect effect) { diff --git a/Mage.Sets/src/mage/cards/p/Perennation.java b/Mage.Sets/src/mage/cards/p/Perennation.java index ad266c96dce..d289bcd9144 100644 --- a/Mage.Sets/src/mage/cards/p/Perennation.java +++ b/Mage.Sets/src/mage/cards/p/Perennation.java @@ -5,7 +5,8 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.counters.CounterType; -import mage.filter.StaticFilters; +import mage.filter.FilterCard; +import mage.filter.common.FilterPermanentCard; import mage.target.common.TargetCardInYourGraveyard; import java.util.UUID; @@ -15,6 +16,8 @@ import java.util.UUID; */ public final class Perennation extends CardImpl { + private static final FilterCard filter = new FilterPermanentCard("permanent card from your graveyard"); + public Perennation(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{3}{W}{B}{G}"); @@ -22,7 +25,7 @@ public final class Perennation extends CardImpl { this.getSpellAbility().addEffect(new ReturnFromGraveyardToBattlefieldWithCounterTargetEffect( CounterType.HEXPROOF.createInstance(), CounterType.INDESTRUCTIBLE.createInstance() )); - this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_PERMANENT)); + this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(filter)); } private Perennation(final Perennation card) { diff --git a/Mage.Sets/src/mage/cards/r/ReverberatingSummons.java b/Mage.Sets/src/mage/cards/r/ReverberatingSummons.java index 4ca6b91c46f..28ba609a62d 100644 --- a/Mage.Sets/src/mage/cards/r/ReverberatingSummons.java +++ b/Mage.Sets/src/mage/cards/r/ReverberatingSummons.java @@ -70,4 +70,9 @@ enum ReverberatingSummonsCondition implements Condition { .getWatcher(SpellsCastWatcher.class) .getCount(source.getControllerId()) >= 2; } + + @Override + public String toString() { + return "you've cast two or more spells this turn"; + } } diff --git a/Mage.Sets/src/mage/cards/r/RevivalOfTheAncestors.java b/Mage.Sets/src/mage/cards/r/RevivalOfTheAncestors.java index 9f73504a426..a706d550cb4 100644 --- a/Mage.Sets/src/mage/cards/r/RevivalOfTheAncestors.java +++ b/Mage.Sets/src/mage/cards/r/RevivalOfTheAncestors.java @@ -15,7 +15,7 @@ import mage.constants.SubType; import mage.counters.CounterType; import mage.filter.StaticFilters; import mage.game.permanent.token.NoFlyingSpiritWhiteToken; -import mage.target.common.TargetCreaturePermanentAmount; +import mage.target.common.TargetPermanentAmount; import java.util.UUID; @@ -42,7 +42,7 @@ public final class RevivalOfTheAncestors extends CardImpl { sagaAbility.addChapterEffect( this, SagaChapter.CHAPTER_II, new DistributeCountersEffect(CounterType.P1P1), - new TargetCreaturePermanentAmount(3) + new TargetPermanentAmount(3, 1, StaticFilters.FILTER_CONTROLLED_CREATURES) ); // III -- Creatures you control gain trample and lifelink until end of turn. diff --git a/Mage.Sets/src/mage/cards/r/RiteOfRenewal.java b/Mage.Sets/src/mage/cards/r/RiteOfRenewal.java index cfc8ade8917..d4e695db1a6 100644 --- a/Mage.Sets/src/mage/cards/r/RiteOfRenewal.java +++ b/Mage.Sets/src/mage/cards/r/RiteOfRenewal.java @@ -1,7 +1,7 @@ package mage.cards.r; import mage.abilities.effects.common.ExileSpellEffect; -import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.abilities.effects.common.TargetPlayerShufflesTargetCardsEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -22,13 +22,13 @@ public final class RiteOfRenewal extends CardImpl { super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{3}{G}"); // Return up to two target permanent cards from your graveyard to your hand. Target player shuffles up to four target cards from their graveyard into their library. Exile Rite of Renewal. - this.getSpellAbility().addEffect(new ReturnToHandTargetEffect()); + this.getSpellAbility().addEffect(new ReturnFromGraveyardToHandTargetEffect()); this.getSpellAbility().addTarget(new TargetCardInYourGraveyard( 0, 2, StaticFilters.FILTER_CARD_PERMANENTS )); this.getSpellAbility().addEffect(new TargetPlayerShufflesTargetCardsEffect(1)); this.getSpellAbility().addTarget(new TargetPlayer()); - this.getSpellAbility().addTarget(new TargetCardInTargetPlayersGraveyard(3, 1)); + this.getSpellAbility().addTarget(new TargetCardInTargetPlayersGraveyard(4, 1)); this.getSpellAbility().addEffect(new ExileSpellEffect()); } diff --git a/Mage.Sets/src/mage/cards/r/RunescaleStormbrood.java b/Mage.Sets/src/mage/cards/r/RunescaleStormbrood.java index bb106ea73e4..cb39af52c3d 100644 --- a/Mage.Sets/src/mage/cards/r/RunescaleStormbrood.java +++ b/Mage.Sets/src/mage/cards/r/RunescaleStormbrood.java @@ -24,7 +24,7 @@ import mage.target.TargetSpell; public final class RunescaleStormbrood extends OmenCard { private static final FilterSpell filter = new FilterSpell("spell with mana value 2 or less"); - private static final FilterSpell castFilter = new FilterSpell("noncreature spell or Dragon spell"); + private static final FilterSpell castFilter = new FilterSpell("a noncreature spell or a Dragon spell"); static { filter.add(new ManaValuePredicate(ComparisonType.OR_LESS, 2)); diff --git a/Mage.Sets/src/mage/cards/s/SaltRoadSkirmish.java b/Mage.Sets/src/mage/cards/s/SaltRoadSkirmish.java index 5f8189291b5..504bdfd698e 100644 --- a/Mage.Sets/src/mage/cards/s/SaltRoadSkirmish.java +++ b/Mage.Sets/src/mage/cards/s/SaltRoadSkirmish.java @@ -47,7 +47,8 @@ class SaltRoadSkirmishEffect extends OneShotEffect { SaltRoadSkirmishEffect() { super(Outcome.Benefit); - staticText = ""; + staticText = "create two 1/1 red Warrior creature tokens. " + + "They gain haste until end of turn. Sacrifice them at the beginning of the next end step"; } private SaltRoadSkirmishEffect(final SaltRoadSkirmishEffect effect) { diff --git a/Mage.Sets/src/mage/cards/s/SidisiRegentOfTheMire.java b/Mage.Sets/src/mage/cards/s/SidisiRegentOfTheMire.java index ac7656de699..9bf7c2f7a9d 100644 --- a/Mage.Sets/src/mage/cards/s/SidisiRegentOfTheMire.java +++ b/Mage.Sets/src/mage/cards/s/SidisiRegentOfTheMire.java @@ -75,7 +75,7 @@ class SidisiRegentOfTheMireCost extends VariableCostImpl { public SidisiRegentOfTheMireCost() { super(VariableCostType.NORMAL, "mana value X"); - this.text = "Sacrifice a creature with mana value X"; + this.text = "Sacrifice a creature you control with mana value X other than {this}"; } protected SidisiRegentOfTheMireCost(final SidisiRegentOfTheMireCost cost) { @@ -103,4 +103,4 @@ class SidisiRegentOfTheMireCost extends VariableCostImpl { ).stream().mapToInt(MageObject::getManaValue).max().orElse(0); } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/s/SongcrafterMage.java b/Mage.Sets/src/mage/cards/s/SongcrafterMage.java index 900b6a01d16..a20c7f2eb9b 100644 --- a/Mage.Sets/src/mage/cards/s/SongcrafterMage.java +++ b/Mage.Sets/src/mage/cards/s/SongcrafterMage.java @@ -53,7 +53,7 @@ class SongcrafterMageEffect extends ContinuousEffectImpl { SongcrafterMageEffect() { super(Duration.EndOfTurn, Layer.AbilityAddingRemovingEffects_6, SubLayer.NA, Outcome.AddAbility); this.staticText = "target instant or sorcery card in your graveyard gains harmonize until end of turn. " + - "The harmonize cost is equal to its mana cost"; + "Its harmonize cost is equal to its mana cost"; } private SongcrafterMageEffect(final SongcrafterMageEffect effect) { diff --git a/Mage.Sets/src/mage/cards/s/StillnessInMotion.java b/Mage.Sets/src/mage/cards/s/StillnessInMotion.java index 7a436bf0a0c..ddf6474eb94 100644 --- a/Mage.Sets/src/mage/cards/s/StillnessInMotion.java +++ b/Mage.Sets/src/mage/cards/s/StillnessInMotion.java @@ -46,7 +46,7 @@ class StillnessInMotionEffect extends OneShotEffect { StillnessInMotionEffect() { super(Outcome.Benefit); - staticText = "Then if you have no cards in your library, exile this enchantment " + + staticText = "Then if your library has no cards in it, exile this enchantment " + "and put five cards from your graveyard on top of your library in any order"; } diff --git a/Mage.Sets/src/mage/cards/t/TemurMonument.java b/Mage.Sets/src/mage/cards/t/TemurMonument.java index 90e414f7fd1..9507d1c5c5a 100644 --- a/Mage.Sets/src/mage/cards/t/TemurMonument.java +++ b/Mage.Sets/src/mage/cards/t/TemurMonument.java @@ -46,7 +46,7 @@ public final class TemurMonument extends CardImpl { // {3}{G}{U}{R}, {T}, Sacrifice this artifact: Create a 5/5 green Elephant creature token. Activate only as a sorcery. Ability ability = new ActivateAsSorceryActivatedAbility( - new CreateTokenEffect(new Elephant55Token(), 2), new ManaCostsImpl<>("{3}{G}{U}{R}") + new CreateTokenEffect(new Elephant55Token()), new ManaCostsImpl<>("{3}{G}{U}{R}") ); ability.addCost(new TapSourceCost()); ability.addCost(new SacrificeSourceCost()); diff --git a/Mage.Sets/src/mage/cards/t/TevalArbiterOfVirtue.java b/Mage.Sets/src/mage/cards/t/TevalArbiterOfVirtue.java index c172f35b82b..c6e156a8fde 100644 --- a/Mage.Sets/src/mage/cards/t/TevalArbiterOfVirtue.java +++ b/Mage.Sets/src/mage/cards/t/TevalArbiterOfVirtue.java @@ -1,8 +1,5 @@ package mage.cards.t; -import java.util.Objects; -import java.util.Optional; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; @@ -12,21 +9,24 @@ import mage.abilities.effects.Effect; import mage.abilities.effects.common.LoseLifeSourceControllerEffect; import mage.abilities.effects.common.continuous.GainAbilityControlledSpellsEffect; import mage.abilities.keyword.DelveAbility; -import mage.constants.SubType; -import mage.constants.SuperType; import mage.abilities.keyword.FlyingAbility; import mage.abilities.keyword.LifelinkAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; +import mage.constants.SubType; +import mage.constants.SuperType; import mage.filter.common.FilterNonlandCard; import mage.filter.predicate.Predicates; import mage.filter.predicate.mageobject.AbilityPredicate; import mage.game.Game; import mage.game.stack.Spell; +import java.util.Objects; +import java.util.Optional; +import java.util.UUID; + /** - * * @author Grath */ public final class TevalArbiterOfVirtue extends CardImpl { @@ -39,7 +39,7 @@ public final class TevalArbiterOfVirtue extends CardImpl { public TevalArbiterOfVirtue(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}{G}{U}"); - + this.supertype.add(SuperType.LEGENDARY); this.subtype.add(SubType.SPIRIT); this.subtype.add(SubType.DRAGON); @@ -56,7 +56,7 @@ public final class TevalArbiterOfVirtue extends CardImpl { this.addAbility(new SimpleStaticAbility(new GainAbilityControlledSpellsEffect(new DelveAbility(false), filter))); // Whenever you cast a spell, you lose life equal to its mana value. - this.addAbility(new SpellCastControllerTriggeredAbility(new LoseLifeSourceControllerEffect(TevalArbiterOfVirtueValue.instance), false)); + this.addAbility(new SpellCastControllerTriggeredAbility(new LoseLifeSourceControllerEffect(TevalArbiterOfVirtueValue.instance).setText("you lose life equal to its mana value"), false)); } private TevalArbiterOfVirtue(final TevalArbiterOfVirtue card) { diff --git a/Mage.Sets/src/mage/cards/u/UnderfootUnderdogs.java b/Mage.Sets/src/mage/cards/u/UnderfootUnderdogs.java index 6c57550fe6b..94622b6c05f 100644 --- a/Mage.Sets/src/mage/cards/u/UnderfootUnderdogs.java +++ b/Mage.Sets/src/mage/cards/u/UnderfootUnderdogs.java @@ -4,6 +4,7 @@ import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.effects.common.combat.CantBeBlockedTargetEffect; @@ -45,6 +46,7 @@ public final class UnderfootUnderdogs extends CardImpl { // {1}, {T}: Target creature you control with power 2 or less can't be blocked this turn. Ability ability = new SimpleActivatedAbility(new CantBeBlockedTargetEffect(), new GenericManaCost(1)); + ability.addCost(new TapSourceCost()); ability.addTarget(new TargetPermanent(filter)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/w/WhirlwingStormbrood.java b/Mage.Sets/src/mage/cards/w/WhirlwingStormbrood.java index aa95f5123da..126fbf83ee5 100644 --- a/Mage.Sets/src/mage/cards/w/WhirlwingStormbrood.java +++ b/Mage.Sets/src/mage/cards/w/WhirlwingStormbrood.java @@ -1,30 +1,25 @@ package mage.cards.w; -import java.util.UUID; import mage.MageInt; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.dynamicvalue.common.StaticValue; import mage.abilities.effects.common.continuous.CastAsThoughItHadFlashAllEffect; import mage.abilities.effects.common.counter.AddCountersTargetEffect; -import mage.cards.OmenCard; -import mage.constants.Duration; -import mage.constants.SubType; import mage.abilities.keyword.FlashAbility; import mage.abilities.keyword.FlyingAbility; -import mage.cards.CardImpl; import mage.cards.CardSetInfo; +import mage.cards.OmenCard; import mage.constants.CardType; -import mage.constants.Zone; +import mage.constants.Duration; +import mage.constants.SubType; import mage.counters.CounterType; import mage.filter.FilterCard; -import mage.filter.FilterSpell; -import mage.filter.StaticFilters; import mage.filter.predicate.Predicates; import mage.target.common.TargetControlledCreaturePermanent; -import mage.target.common.TargetCreaturePermanent; + +import java.util.UUID; /** - * * @author Jmlundeen */ public final class WhirlwingStormbrood extends OmenCard { @@ -40,7 +35,7 @@ public final class WhirlwingStormbrood extends OmenCard { public WhirlwingStormbrood(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, new CardType[]{CardType.SORCERY}, "{4}{U}", "Dynamic Soar", "{2}{G}"); - + this.subtype.add(SubType.DRAGON); this.power = new MageInt(4); this.toughness = new MageInt(3); @@ -56,7 +51,7 @@ public final class WhirlwingStormbrood extends OmenCard { // Dynamic Soar // Put three +1/+1 counters on target creature you control. - this.getSpellCard().getSpellAbility().addEffect(new AddCountersTargetEffect(CounterType.P1P1.createInstance(), StaticValue.get(3))); + this.getSpellCard().getSpellAbility().addEffect(new AddCountersTargetEffect(CounterType.P1P1.createInstance(3), StaticValue.get(3))); this.getSpellCard().getSpellAbility().addTarget(new TargetControlledCreaturePermanent()); this.finalizeOmen(); } diff --git a/Mage/src/main/java/mage/abilities/Modes.java b/Mage/src/main/java/mage/abilities/Modes.java index fa84ea9e0db..35523807260 100644 --- a/Mage/src/main/java/mage/abilities/Modes.java +++ b/Mage/src/main/java/mage/abilities/Modes.java @@ -628,7 +628,7 @@ public class Modes extends LinkedHashMap implements Copyable } sb.append(" — "); } else { - sb.append("&bull "); + sb.append("&bull "); } sb.append(mode.getEffects().getTextStartingUpperCase(mode)); sb.append("
"); diff --git a/Mage/src/main/java/mage/abilities/effects/common/CreateTokenAttachSourceEffect.java b/Mage/src/main/java/mage/abilities/effects/common/CreateTokenAttachSourceEffect.java index 0d9c34e9c5b..11d45ac59f1 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/CreateTokenAttachSourceEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/CreateTokenAttachSourceEffect.java @@ -26,7 +26,7 @@ public class CreateTokenAttachSourceEffect extends CreateTokenEffect { public CreateTokenAttachSourceEffect(Token token, String innerConcat, boolean optional) { super(token); this.optional = optional; - staticText = staticText.concat(innerConcat + (optional ? " you may" : "") + " attach {this} to it"); + staticText = staticText.concat(innerConcat + (optional ? ". You may" : "") + " attach {this} to it"); } private CreateTokenAttachSourceEffect(final CreateTokenAttachSourceEffect effect) { diff --git a/Mage/src/main/java/mage/abilities/effects/common/CreateXXTokenExiledEffectManaValueEffect.java b/Mage/src/main/java/mage/abilities/effects/common/CreateXXTokenExiledEffectManaValueEffect.java index 3b58617a27c..5166c9e6fb6 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/CreateXXTokenExiledEffectManaValueEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/CreateXXTokenExiledEffectManaValueEffect.java @@ -27,7 +27,7 @@ public class CreateXXTokenExiledEffectManaValueEffect extends OneShotEffect { super(Outcome.Benefit); this.tokenMaker = tokenMaker; staticText = "the exiled card's owner creates an X/X " + description + - "creature token, where X is the mana value of the exiled card"; + " creature token, where X is the mana value of the exiled card"; } private CreateXXTokenExiledEffectManaValueEffect(final CreateXXTokenExiledEffectManaValueEffect effect) { diff --git a/Mage/src/main/java/mage/abilities/effects/common/continuous/GainAnchorWordAbilitySourceEffect.java b/Mage/src/main/java/mage/abilities/effects/common/continuous/GainAnchorWordAbilitySourceEffect.java index f4af6963691..2106accaa73 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/continuous/GainAnchorWordAbilitySourceEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/continuous/GainAnchorWordAbilitySourceEffect.java @@ -7,6 +7,7 @@ import mage.abilities.effects.Effect; import mage.constants.*; import mage.game.Game; import mage.game.permanent.Permanent; +import mage.util.CardUtil; /** * @author TheElk801 @@ -22,7 +23,7 @@ public class GainAnchorWordAbilitySourceEffect extends ContinuousEffectImpl { public GainAnchorWordAbilitySourceEffect(Ability ability, ModeChoice modeChoice) { super(Duration.WhileOnBattlefield, Layer.AbilityAddingRemovingEffects_6, SubLayer.NA, Outcome.AddAbility); - this.staticText = "&bull " + modeChoice + " — " + ability.getRule(); + this.staticText = "&bull " + modeChoice + " — " + CardUtil.getTextWithFirstCharUpperCase(ability.getRule()); this.ability = ability; this.modeChoice = modeChoice; this.ability.setRuleVisible(false); diff --git a/Mage/src/main/java/mage/abilities/effects/mana/AddManaFromColorChoicesEffect.java b/Mage/src/main/java/mage/abilities/effects/mana/AddManaFromColorChoicesEffect.java index 709bf7f0d6d..6f40375b9b7 100644 --- a/Mage/src/main/java/mage/abilities/effects/mana/AddManaFromColorChoicesEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/mana/AddManaFromColorChoicesEffect.java @@ -32,7 +32,7 @@ public class AddManaFromColorChoicesEffect extends ManaEffect { .map(Mana::new) .forEach(netMana::add); staticText = "add " + CardUtil - .concatWithOr(this.netMana.stream().map(s -> "{" + s + '}').collect(Collectors.toList())); + .concatWithOr(this.netMana.stream().map(Mana::toString).collect(Collectors.toList())); } private AddManaFromColorChoicesEffect(final AddManaFromColorChoicesEffect effect) { diff --git a/Mage/src/main/java/mage/cards/AdventureSpellCard.java b/Mage/src/main/java/mage/cards/AdventureSpellCard.java index c2c2a45efcb..1b372db7415 100644 --- a/Mage/src/main/java/mage/cards/AdventureSpellCard.java +++ b/Mage/src/main/java/mage/cards/AdventureSpellCard.java @@ -9,6 +9,7 @@ import mage.constants.SubType; import mage.constants.Zone; import mage.game.ExileZone; import mage.game.Game; +import mage.util.CardUtil; import java.util.Arrays; import java.util.List; @@ -166,7 +167,7 @@ class AdventureCardSpellAbility extends SpellAbility { + " " + getManaCosts().getText() + " — " - + super.getRule(false) // without cost + + CardUtil.getTextWithFirstCharUpperCase(super.getRule(false)) // without cost + " (Then exile this card. You may cast the creature later from exile.)"; } diff --git a/Mage/src/main/java/mage/cards/OmenSpellCard.java b/Mage/src/main/java/mage/cards/OmenSpellCard.java index 04fcdd5d725..49181b0a38c 100644 --- a/Mage/src/main/java/mage/cards/OmenSpellCard.java +++ b/Mage/src/main/java/mage/cards/OmenSpellCard.java @@ -9,6 +9,7 @@ import mage.constants.SpellAbilityType; import mage.constants.SubType; import mage.constants.Zone; import mage.game.Game; +import mage.util.CardUtil; import java.util.Arrays; import java.util.List; @@ -151,7 +152,7 @@ class OmenCardSpellAbility extends SpellAbility { + " " + getManaCosts().getText() + " — " - + super.getRule(false) // without cost + + CardUtil.getTextWithFirstCharUpperCase(super.getRule(false)) // without cost + " (Then shuffle this card into its owner's library.)"; }