From 790361f59f8604d46fe97250967aef2708d7d07b Mon Sep 17 00:00:00 2001 From: theelk801 Date: Tue, 18 Nov 2025 09:21:40 -0500 Subject: [PATCH] [TLA] various text fixes --- .../src/mage/cards/a/AangAndLaOceansFury.java | 2 +- .../src/mage/cards/a/AangAtTheCrossroads.java | 3 ++- .../src/mage/cards/a/AppaLoyalSkyBison.java | 17 ++++++++++++++--- .../src/mage/cards/a/AzulaCunningUsurper.java | 2 +- Mage.Sets/src/mage/cards/b/Badgermole.java | 2 +- .../src/mage/cards/b/BoilingRockRioter.java | 2 +- .../src/mage/cards/b/BumiKingOfThreeTrials.java | 2 +- Mage.Sets/src/mage/cards/b/BumiUnleashed.java | 2 +- Mage.Sets/src/mage/cards/c/CycleOfRenewal.java | 2 +- Mage.Sets/src/mage/cards/d/DaiLiAgents.java | 4 ++-- .../src/mage/cards/e/EarthKingdomGeneral.java | 2 +- .../src/mage/cards/f/FireNationCadets.java | 2 +- .../src/mage/cards/f/FlexibleWaterbender.java | 2 +- Mage.Sets/src/mage/cards/i/IrohTeaMaster.java | 2 +- .../src/mage/cards/i/IrohsDemonstration.java | 3 ++- .../src/mage/cards/j/JetFreedomFighter.java | 4 +++- .../src/mage/cards/k/KataraWaterTribesHope.java | 2 ++ Mage.Sets/src/mage/cards/o/OstrichHorse.java | 2 +- Mage.Sets/src/mage/cards/s/SozinsComet.java | 2 +- Mage.Sets/src/mage/cards/t/TeamAvatar.java | 3 ++- .../mage/cards/t/TheBoulderReadyToRumble.java | 2 +- .../src/mage/cards/t/TheLegendOfKyoshi.java | 4 +++- Mage.Sets/src/mage/cards/t/TheLegendOfRoku.java | 5 ++--- Mage.Sets/src/mage/cards/t/TigerDillo.java | 6 ++---- .../src/mage/cards/v/VengefulVillagers.java | 2 +- Mage.Sets/src/mage/cards/w/WhiteLotusTile.java | 9 ++++++--- .../java/mage/verify/VerifyCardDataTest.java | 3 ++- .../abilities/costs/common/WaterbendCost.java | 6 +++--- .../PutOnTopOrBottomLibraryTargetEffect.java | 2 +- .../continuous/BoostControlledEffect.java | 2 +- .../effects/keyword/EarthbendTargetEffect.java | 7 ++++--- .../effects/keyword/ScryTargetEffect.java | 3 +-- Mage/src/main/java/mage/util/CardUtil.java | 2 +- 33 files changed, 68 insertions(+), 47 deletions(-) diff --git a/Mage.Sets/src/mage/cards/a/AangAndLaOceansFury.java b/Mage.Sets/src/mage/cards/a/AangAndLaOceansFury.java index cd195db2c64..315af7574d7 100644 --- a/Mage.Sets/src/mage/cards/a/AangAndLaOceansFury.java +++ b/Mage.Sets/src/mage/cards/a/AangAndLaOceansFury.java @@ -46,7 +46,7 @@ public final class AangAndLaOceansFury extends CardImpl { this.addAbility(TrampleAbility.getInstance()); // Whenever Aang and La attack, put a +1/+1 counter on each tapped creature you control. - this.addAbility(new AttacksTriggeredAbility(new AddCountersAllEffect(CounterType.P1P1.createInstance(), filter))); + this.addAbility(new AttacksTriggeredAbility(new AddCountersAllEffect(CounterType.P1P1.createInstance(), filter)).setTriggerPhrase("Whenever {this} attack, ")); } private AangAndLaOceansFury(final AangAndLaOceansFury card) { diff --git a/Mage.Sets/src/mage/cards/a/AangAtTheCrossroads.java b/Mage.Sets/src/mage/cards/a/AangAtTheCrossroads.java index 4418a5a1ef8..59d407de672 100644 --- a/Mage.Sets/src/mage/cards/a/AangAtTheCrossroads.java +++ b/Mage.Sets/src/mage/cards/a/AangAtTheCrossroads.java @@ -53,7 +53,8 @@ public final class AangAtTheCrossroads extends CardImpl { this.addAbility(new TransformAbility()); this.addAbility(new LeavesBattlefieldAllTriggeredAbility(new CreateDelayedTriggeredAbilityEffect( new AtTheBeginOfNextUpkeepDelayedTriggeredAbility(new TransformSourceEffect()) - ).setText("transform {this} at the beginning of the next upkeep"), StaticFilters.FILTER_ANOTHER_CREATURE_YOU_CONTROL)); + ).setText("transform {this} at the beginning of the next upkeep"), StaticFilters.FILTER_ANOTHER_CREATURE_YOU_CONTROL) + .setTriggerPhrase("When another creature you control leaves the battlefield, ")); } private AangAtTheCrossroads(final AangAtTheCrossroads card) { diff --git a/Mage.Sets/src/mage/cards/a/AppaLoyalSkyBison.java b/Mage.Sets/src/mage/cards/a/AppaLoyalSkyBison.java index 1be12ec9283..337f02de580 100644 --- a/Mage.Sets/src/mage/cards/a/AppaLoyalSkyBison.java +++ b/Mage.Sets/src/mage/cards/a/AppaLoyalSkyBison.java @@ -12,8 +12,12 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.constants.SuperType; +import mage.constants.TargetController; +import mage.filter.FilterPermanent; +import mage.filter.common.FilterNonlandPermanent; +import mage.filter.predicate.mageobject.AnotherPredicate; +import mage.target.TargetPermanent; import mage.target.common.TargetControlledCreaturePermanent; -import mage.target.common.TargetNonlandPermanent; import java.util.UUID; @@ -22,6 +26,13 @@ import java.util.UUID; */ public final class AppaLoyalSkyBison extends CardImpl { + private static final FilterPermanent filter = new FilterNonlandPermanent("another target nonland permanent you control"); + + static { + filter.add(AnotherPredicate.instance); + filter.add(TargetController.YOU.getControllerPredicate()); + } + public AppaLoyalSkyBison(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{W}{W}"); @@ -39,8 +50,8 @@ public final class AppaLoyalSkyBison extends CardImpl { Ability ability = new EntersBattlefieldOrAttacksSourceTriggeredAbility(new GainAbilityTargetEffect(FlyingAbility.getInstance())); ability.addTarget(new TargetControlledCreaturePermanent()); - // * Airbend another target nonland permanent you control.. - ability.addMode(new Mode(new AirbendTargetEffect()).addTarget(new TargetNonlandPermanent())); + // * Airbend another target nonland permanent you control. + ability.addMode(new Mode(new AirbendTargetEffect()).addTarget(new TargetPermanent(filter))); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/a/AzulaCunningUsurper.java b/Mage.Sets/src/mage/cards/a/AzulaCunningUsurper.java index 8b21f94deb0..2efc85c5dc7 100644 --- a/Mage.Sets/src/mage/cards/a/AzulaCunningUsurper.java +++ b/Mage.Sets/src/mage/cards/a/AzulaCunningUsurper.java @@ -47,7 +47,7 @@ public final class AzulaCunningUsurper extends CardImpl { this.addAbility(ability); // During your turn, you may cast cards exiled with Azula and you may cast them as though they had flash. Mana of any type can be spent to cast those spells. - ability = new SimpleStaticAbility(new AzulaCunningUsurperFlashEffect()); + ability = new SimpleStaticAbility(new AzulaCunningUsurperCastEffect()); ability.addEffect(new AzulaCunningUsurperFlashEffect()); ability.addEffect(new AzulaCunningUsurperManaEffect()); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/b/Badgermole.java b/Mage.Sets/src/mage/cards/b/Badgermole.java index 24d46635ab7..e849ecf4ea9 100644 --- a/Mage.Sets/src/mage/cards/b/Badgermole.java +++ b/Mage.Sets/src/mage/cards/b/Badgermole.java @@ -39,7 +39,7 @@ public final class Badgermole extends CardImpl { this.addAbility(new SimpleStaticAbility(new GainAbilityAllEffect( TrampleAbility.getInstance(), Duration.WhileOnBattlefield, StaticFilters.FILTER_CONTROLLED_CREATURES_P1P1 - ))); + ).setText("creatures you control with +1/+1 counters on them have trample"))); } private Badgermole(final Badgermole card) { diff --git a/Mage.Sets/src/mage/cards/b/BoilingRockRioter.java b/Mage.Sets/src/mage/cards/b/BoilingRockRioter.java index 3c703be49a6..117abeba8e4 100644 --- a/Mage.Sets/src/mage/cards/b/BoilingRockRioter.java +++ b/Mage.Sets/src/mage/cards/b/BoilingRockRioter.java @@ -32,7 +32,7 @@ import java.util.UUID; public final class BoilingRockRioter extends CardImpl { private static final FilterControlledPermanent filter - = new FilterControlledPermanent(SubType.ALLY, "untaped Ally you control"); + = new FilterControlledPermanent(SubType.ALLY, "untapped Ally you control"); static { filter.add(TappedPredicate.UNTAPPED); diff --git a/Mage.Sets/src/mage/cards/b/BumiKingOfThreeTrials.java b/Mage.Sets/src/mage/cards/b/BumiKingOfThreeTrials.java index 17b18557907..66ac62d7a24 100644 --- a/Mage.Sets/src/mage/cards/b/BumiKingOfThreeTrials.java +++ b/Mage.Sets/src/mage/cards/b/BumiKingOfThreeTrials.java @@ -60,7 +60,7 @@ class BumiKingOfThreeTrialsTriggeredAbility extends EntersBattlefieldTriggeredAb private static final DynamicValue xValue = new CardsInControllerGraveyardCount(new FilterCard(SubType.LESSON)); BumiKingOfThreeTrialsTriggeredAbility() { - super(new AddCountersSourceEffect(CounterType.P1P1.createInstance())); + super(new AddCountersSourceEffect(CounterType.P1P1.createInstance(3))); this.getModes().setChooseText("choose up to X, where X is the number of Lesson cards in your graveyard —"); this.getModes().setMinModes(0); this.addMode(new Mode(new ScryTargetEffect(3)).addTarget(new TargetPlayer())); diff --git a/Mage.Sets/src/mage/cards/b/BumiUnleashed.java b/Mage.Sets/src/mage/cards/b/BumiUnleashed.java index 663f06b4641..06938b8f27d 100644 --- a/Mage.Sets/src/mage/cards/b/BumiUnleashed.java +++ b/Mage.Sets/src/mage/cards/b/BumiUnleashed.java @@ -67,7 +67,7 @@ class BumiUnleashedEffect extends OneShotEffect { BumiUnleashedEffect() { super(Outcome.Benefit); - staticText = "After this main phase, there is an additional combat phase. Only land creatures can attack during that combat phase"; + staticText = "After this phase, there is an additional combat phase. Only land creatures can attack during that combat phase"; } private BumiUnleashedEffect(final BumiUnleashedEffect effect) { diff --git a/Mage.Sets/src/mage/cards/c/CycleOfRenewal.java b/Mage.Sets/src/mage/cards/c/CycleOfRenewal.java index 29c8d2ae227..5b3d1d6ebb2 100644 --- a/Mage.Sets/src/mage/cards/c/CycleOfRenewal.java +++ b/Mage.Sets/src/mage/cards/c/CycleOfRenewal.java @@ -24,7 +24,7 @@ public final class CycleOfRenewal extends CardImpl { // Sacrifice a land. Search your library for up to two basic land cards, put them onto the battlefield tapped, then shuffle. this.getSpellAbility().addEffect(new SacrificeControllerEffect(StaticFilters.FILTER_LAND, 1, "")); this.getSpellAbility().addEffect(new SearchLibraryPutInPlayEffect(new TargetCardInLibrary( - 0, 2, StaticFilters.FILTER_CARD_BASIC_LAND + 0, 2, StaticFilters.FILTER_CARD_BASIC_LANDS ), true)); } diff --git a/Mage.Sets/src/mage/cards/d/DaiLiAgents.java b/Mage.Sets/src/mage/cards/d/DaiLiAgents.java index fda6379c4cb..a5f62bd0d16 100644 --- a/Mage.Sets/src/mage/cards/d/DaiLiAgents.java +++ b/Mage.Sets/src/mage/cards/d/DaiLiAgents.java @@ -46,7 +46,7 @@ public final class DaiLiAgents extends CardImpl { this.toughness = new MageInt(4); // When this creature enters, earthbend 1, then earthbend 1. - Ability ability = new EntersBattlefieldTriggeredAbility(new EarthbendTargetEffect(1).setText("earhbend 1")); + Ability ability = new EntersBattlefieldTriggeredAbility(new EarthbendTargetEffect(1).setText("earthbend 1")); ability.addEffect(new EarthbendTargetEffect(1) .setTargetPointer(new SecondTargetPointer()) .concatBy(", then")); @@ -56,7 +56,7 @@ public final class DaiLiAgents extends CardImpl { // Whenever this creature attacks, each opponent loses X life and you gain X life, where X is the number of creatures you control with +1/+1 counters on them. ability = new AttacksTriggeredAbility(new LoseLifeOpponentsEffect(xValue).setText("each opponent loses X life")); - ability.addEffect(new GainLifeEffect(xValue).concatBy("and")); + ability.addEffect(new GainLifeEffect(xValue).setText("and you gain X life, where X is the number of creatures you control with +1/+1 counters on them")); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/e/EarthKingdomGeneral.java b/Mage.Sets/src/mage/cards/e/EarthKingdomGeneral.java index c497d0e1b5b..72f9f07455d 100644 --- a/Mage.Sets/src/mage/cards/e/EarthKingdomGeneral.java +++ b/Mage.Sets/src/mage/cards/e/EarthKingdomGeneral.java @@ -23,7 +23,7 @@ import java.util.UUID; */ public final class EarthKingdomGeneral extends CardImpl { - private static final DynamicValue xValue = new EffectKeyValue("countersAdded", "that many"); + private static final DynamicValue xValue = new EffectKeyValue("countersAdded", "that much"); public EarthKingdomGeneral(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{G}"); diff --git a/Mage.Sets/src/mage/cards/f/FireNationCadets.java b/Mage.Sets/src/mage/cards/f/FireNationCadets.java index 8b5a49df213..99fac01ed27 100644 --- a/Mage.Sets/src/mage/cards/f/FireNationCadets.java +++ b/Mage.Sets/src/mage/cards/f/FireNationCadets.java @@ -38,7 +38,7 @@ public final class FireNationCadets extends CardImpl { // {2}: This creature gets +1/+0 until end of turn. this.addAbility(new SimpleActivatedAbility( - new BoostSourceEffect(2, 0, Duration.EndOfTurn), new GenericManaCost(2) + new BoostSourceEffect(1, 0, Duration.EndOfTurn), new GenericManaCost(2) )); } diff --git a/Mage.Sets/src/mage/cards/f/FlexibleWaterbender.java b/Mage.Sets/src/mage/cards/f/FlexibleWaterbender.java index c315c30d5e6..5ccc0816900 100644 --- a/Mage.Sets/src/mage/cards/f/FlexibleWaterbender.java +++ b/Mage.Sets/src/mage/cards/f/FlexibleWaterbender.java @@ -32,7 +32,7 @@ public final class FlexibleWaterbender extends CardImpl { // Waterbend {3}: This creature has base power and toughness 5/2 until end of turn. this.addAbility(new SimpleActivatedAbility( - new SetBasePowerToughnessSourceEffect(3, 2, Duration.EndOfTurn), new WaterbendCost(3) + new SetBasePowerToughnessSourceEffect(5, 2, Duration.EndOfTurn), new WaterbendCost(3) )); } diff --git a/Mage.Sets/src/mage/cards/i/IrohTeaMaster.java b/Mage.Sets/src/mage/cards/i/IrohTeaMaster.java index 4bf0edd1053..d153c830fa7 100644 --- a/Mage.Sets/src/mage/cards/i/IrohTeaMaster.java +++ b/Mage.Sets/src/mage/cards/i/IrohTeaMaster.java @@ -49,7 +49,7 @@ public final class IrohTeaMaster extends CardImpl { this.addAbility(new EntersBattlefieldTriggeredAbility(new CreateTokenEffect(new FoodToken()))); // At the beginning of combat on your turn, you may have target opponent gain control of target permanent you control. When you do, create a 1/1 white Ally creature token. Put a +1/+1 counter on that token for each permanent you own that your opponents control. - Ability ability = new BeginningOfCombatTriggeredAbility(new IrohTeaMasterControlEffect()); + Ability ability = new BeginningOfCombatTriggeredAbility(new IrohTeaMasterControlEffect(), true); ability.addTarget(new TargetOpponent()); ability.addTarget(new TargetControlledPermanent()); this.addAbility(ability.addHint(IrohTeaMasterTokenEffect.getHint())); diff --git a/Mage.Sets/src/mage/cards/i/IrohsDemonstration.java b/Mage.Sets/src/mage/cards/i/IrohsDemonstration.java index b9c39d21f6c..4af1b269bab 100644 --- a/Mage.Sets/src/mage/cards/i/IrohsDemonstration.java +++ b/Mage.Sets/src/mage/cards/i/IrohsDemonstration.java @@ -24,7 +24,8 @@ public final class IrohsDemonstration extends CardImpl { // Choose one -- // * Iroh's Demonstration deals 1 damage to each creature your opponents control. - this.getSpellAbility().addEffect(new DamageAllEffect(1, StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE)); + this.getSpellAbility().addEffect(new DamageAllEffect(1, StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE) + .setText("{this} deals 1 damage to each creature your opponents control")); // * Iroh's Demonstration deals 4 damage to target creature. this.getSpellAbility().addMode(new Mode(new DamageTargetEffect(4)).addTarget(new TargetCreaturePermanent())); diff --git a/Mage.Sets/src/mage/cards/j/JetFreedomFighter.java b/Mage.Sets/src/mage/cards/j/JetFreedomFighter.java index 51d031ae5c7..d1427af3158 100644 --- a/Mage.Sets/src/mage/cards/j/JetFreedomFighter.java +++ b/Mage.Sets/src/mage/cards/j/JetFreedomFighter.java @@ -35,7 +35,9 @@ public final class JetFreedomFighter extends CardImpl { // When Jet enters, he deals damage equal to the number of creatures you control to target creature an opponent controls. Ability ability = new EntersBattlefieldTriggeredAbility( - new DamageTargetEffect(CreaturesYouControlCount.PLURAL, "he") + new DamageTargetEffect(CreaturesYouControlCount.PLURAL) + .setText("he deals damage equal to the number of creatures " + + "you control to target creature an opponent controls") ); ability.addTarget(new TargetOpponentsCreaturePermanent()); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/k/KataraWaterTribesHope.java b/Mage.Sets/src/mage/cards/k/KataraWaterTribesHope.java index 35f78ab4521..d637cb6b178 100644 --- a/Mage.Sets/src/mage/cards/k/KataraWaterTribesHope.java +++ b/Mage.Sets/src/mage/cards/k/KataraWaterTribesHope.java @@ -9,6 +9,7 @@ import mage.abilities.costs.common.WaterbendCost; import mage.abilities.costs.mana.VariableManaCost; import mage.abilities.dynamicvalue.common.GetXValue; import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.effects.common.InfoEffect; import mage.abilities.effects.common.continuous.SetBasePowerToughnessAllEffect; import mage.abilities.keyword.VigilanceAbility; import mage.cards.CardImpl; @@ -49,6 +50,7 @@ public final class KataraWaterTribesHope extends CardImpl { GetXValue.instance, GetXValue.instance, Duration.EndOfTurn, StaticFilters.FILTER_CONTROLLED_CREATURES ), new WaterbendCost("{X}"), MyTurnCondition.instance); + ability.addEffect(new InfoEffect("X can't be 0")); CardUtil.castStream(ability.getCosts(), VariableManaCost.class).forEach(cost -> cost.setMinX(1)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/o/OstrichHorse.java b/Mage.Sets/src/mage/cards/o/OstrichHorse.java index 4c4131db6f5..5ed227bafca 100644 --- a/Mage.Sets/src/mage/cards/o/OstrichHorse.java +++ b/Mage.Sets/src/mage/cards/o/OstrichHorse.java @@ -29,7 +29,7 @@ public final class OstrichHorse extends CardImpl { // When this creature enters, mill three cards. You may put a land card from among them into your hand. If you don't, put a +1/+1 counter on this creature. this.addAbility(new EntersBattlefieldTriggeredAbility(new MillThenPutInHandEffect( 3, StaticFilters.FILTER_CARD_LAND, new AddCountersSourceEffect(CounterType.P1P1.createInstance()) - ))); + ).withTextOptions("them"))); } private OstrichHorse(final OstrichHorse card) { diff --git a/Mage.Sets/src/mage/cards/s/SozinsComet.java b/Mage.Sets/src/mage/cards/s/SozinsComet.java index 5bcfeb3608a..c318072ab96 100644 --- a/Mage.Sets/src/mage/cards/s/SozinsComet.java +++ b/Mage.Sets/src/mage/cards/s/SozinsComet.java @@ -22,7 +22,7 @@ public final class SozinsComet extends CardImpl { // Each creature you control gains firebending 5 until end of turn. this.getSpellAbility().addEffect(new GainAbilityControlledEffect( new FirebendingAbility(5), Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURE - )); + ).setText("each creature you control gains firebending 5 until end of turn")); // Foretell {2}{R} this.addAbility(new ForetellAbility(this, "{2}{R}")); diff --git a/Mage.Sets/src/mage/cards/t/TeamAvatar.java b/Mage.Sets/src/mage/cards/t/TeamAvatar.java index 3267b0d5ba3..016451df906 100644 --- a/Mage.Sets/src/mage/cards/t/TeamAvatar.java +++ b/Mage.Sets/src/mage/cards/t/TeamAvatar.java @@ -35,7 +35,8 @@ public final class TeamAvatar extends CardImpl { // {2}{W}, Discard this card: It deals damage equal to the number of creatures you control to target creature. Ability ability = new SimpleActivatedAbility( Zone.HAND, - new DamageTargetEffect(CreaturesYouControlCount.PLURAL, "it"), + new DamageTargetEffect(CreaturesYouControlCount.PLURAL) + .setText("it deals damage equal to the number of creatures you control to target creature"), new ManaCostsImpl<>("{2}{W}") ); ability.addCost(new DiscardSourceCost()); diff --git a/Mage.Sets/src/mage/cards/t/TheBoulderReadyToRumble.java b/Mage.Sets/src/mage/cards/t/TheBoulderReadyToRumble.java index 1d84e42f907..431af27aec0 100644 --- a/Mage.Sets/src/mage/cards/t/TheBoulderReadyToRumble.java +++ b/Mage.Sets/src/mage/cards/t/TheBoulderReadyToRumble.java @@ -26,7 +26,7 @@ import java.util.UUID; */ public final class TheBoulderReadyToRumble extends CardImpl { - private static final FilterPermanent filter = new FilterControlledCreaturePermanent("creatures you control with power 4 or greater"); + private static final FilterPermanent filter = new FilterControlledCreaturePermanent("the number of creatures you control with power 4 or greater"); static { filter.add(new PowerPredicate(ComparisonType.MORE_THAN, 3)); diff --git a/Mage.Sets/src/mage/cards/t/TheLegendOfKyoshi.java b/Mage.Sets/src/mage/cards/t/TheLegendOfKyoshi.java index 1ba57a2371b..bc0cd44a347 100644 --- a/Mage.Sets/src/mage/cards/t/TheLegendOfKyoshi.java +++ b/Mage.Sets/src/mage/cards/t/TheLegendOfKyoshi.java @@ -37,13 +37,15 @@ public final class TheLegendOfKyoshi extends CardImpl { sagaAbility.addChapterEffect( this, SagaChapter.CHAPTER_I, new DrawCardSourceControllerEffect(GreatestAmongPermanentsValue.POWER_CONTROLLED_CREATURES) + .setText("draw cards equal to the greatest power among creatures you control") ); // II -- Earthbend X, where X is the number of cards in your hand. That land becomes an Island in addition to its other types. sagaAbility.addChapterEffect( this, SagaChapter.CHAPTER_II, new Effects( - new EarthbendTargetEffect(CardsInControllerHandCount.ANY), + new EarthbendTargetEffect(CardsInControllerHandCount.ANY) + .setText("earthbend X, where X is the number of cards in your hand"), new AddCardSubTypeTargetEffect(SubType.ISLAND, Duration.Custom) .setText("That land becomes an Island in addition to its other types") ), new TargetControlledLandPermanent() diff --git a/Mage.Sets/src/mage/cards/t/TheLegendOfRoku.java b/Mage.Sets/src/mage/cards/t/TheLegendOfRoku.java index 7b87b91d5ff..37aa1bd902f 100644 --- a/Mage.Sets/src/mage/cards/t/TheLegendOfRoku.java +++ b/Mage.Sets/src/mage/cards/t/TheLegendOfRoku.java @@ -1,10 +1,9 @@ package mage.cards.t; -import mage.Mana; import mage.abilities.common.SagaAbility; import mage.abilities.effects.common.ExileSagaAndReturnTransformedEffect; import mage.abilities.effects.common.ExileTopXMayPlayUntilEffect; -import mage.abilities.effects.mana.BasicManaEffect; +import mage.abilities.effects.mana.AddManaOfAnyColorEffect; import mage.abilities.keyword.TransformAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -36,7 +35,7 @@ public final class TheLegendOfRoku extends CardImpl { ); // II -- Add one mana of any color. - sagaAbility.addChapterEffect(this, SagaChapter.CHAPTER_II, new BasicManaEffect(Mana.AnyMana(1))); + sagaAbility.addChapterEffect(this, SagaChapter.CHAPTER_II, new AddManaOfAnyColorEffect(1)); // III -- Exile this Saga, then return it to the battlefield transformed under your control. this.addAbility(new TransformAbility()); diff --git a/Mage.Sets/src/mage/cards/t/TigerDillo.java b/Mage.Sets/src/mage/cards/t/TigerDillo.java index 7738560091a..ba03f8c3142 100644 --- a/Mage.Sets/src/mage/cards/t/TigerDillo.java +++ b/Mage.Sets/src/mage/cards/t/TigerDillo.java @@ -24,7 +24,7 @@ import java.util.UUID; */ public final class TigerDillo extends CardImpl { - private static final FilterPermanent filter = new FilterControlledCreaturePermanent(); + private static final FilterPermanent filter = new FilterControlledCreaturePermanent("you control another creature with power 4 or greater"); static { filter.add(AnotherPredicate.instance); @@ -32,9 +32,7 @@ public final class TigerDillo extends CardImpl { } private static final Condition condition = new PermanentsOnTheBattlefieldCondition(filter); - private static final Hint hint = new ConditionHint( - condition, "You control another creature with power 4 or greature" - ); + private static final Hint hint = new ConditionHint(condition); public TigerDillo(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{R}"); diff --git a/Mage.Sets/src/mage/cards/v/VengefulVillagers.java b/Mage.Sets/src/mage/cards/v/VengefulVillagers.java index 287c86f2764..88bd7151378 100644 --- a/Mage.Sets/src/mage/cards/v/VengefulVillagers.java +++ b/Mage.Sets/src/mage/cards/v/VengefulVillagers.java @@ -36,7 +36,7 @@ public final class VengefulVillagers extends CardImpl { new AddCountersTargetEffect(CounterType.STUN.createInstance()) .setText("put a stun counter on the chosen creature"), new SacrificeTargetCost(StaticFilters.FILTER_PERMANENT_ARTIFACT_OR_CREATURE) - )); + ).concatBy(", then")); ability.addTarget(new TargetOpponentsCreaturePermanent()); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/w/WhiteLotusTile.java b/Mage.Sets/src/mage/cards/w/WhiteLotusTile.java index 54c99b2fb84..2ab64090343 100644 --- a/Mage.Sets/src/mage/cards/w/WhiteLotusTile.java +++ b/Mage.Sets/src/mage/cards/w/WhiteLotusTile.java @@ -1,9 +1,10 @@ package mage.cards.w; +import mage.Mana; import mage.abilities.common.EntersBattlefieldTappedAbility; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.dynamicvalue.common.GreatestSharedCreatureTypeCount; -import mage.abilities.mana.AnyColorManaAbility; +import mage.abilities.mana.DynamicManaAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -22,8 +23,10 @@ public final class WhiteLotusTile extends CardImpl { this.addAbility(new EntersBattlefieldTappedAbility()); // {T}: Add X mana of any one color, where X is the greatest number of creatures you control that have a creature type in common. - this.addAbility(new AnyColorManaAbility( - new TapSourceCost(), GreatestSharedCreatureTypeCount.instance, false + this.addAbility(new DynamicManaAbility( + Mana.AnyMana(1), GreatestSharedCreatureTypeCount.instance, new TapSourceCost(), + "Add X mana of any one color, where X is the greatest number of " + + "creatures you control that have a creature type in common.", true ).addHint(GreatestSharedCreatureTypeCount.getHint())); } diff --git a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java index a8dd1572a39..0e907ba999f 100644 --- a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java +++ b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java @@ -304,7 +304,8 @@ public class VerifyCardDataTest { */ private static boolean evergreenCheck(String s) { return evergreenKeywords.contains(s) || s.startsWith("protection from") || s.startsWith("hexproof from") - || s.startsWith("ward ") || s.startsWith("rampage ") || s.startsWith("annihilator"); + || s.startsWith("ward ") || s.startsWith("rampage ") || s.startsWith("annihilator") + || s.matches("^firebending \\d"); } private static boolean eqSet(Collection a, Collection b) { diff --git a/Mage/src/main/java/mage/abilities/costs/common/WaterbendCost.java b/Mage/src/main/java/mage/abilities/costs/common/WaterbendCost.java index e1ea59d094a..db762f8a0cd 100644 --- a/Mage/src/main/java/mage/abilities/costs/common/WaterbendCost.java +++ b/Mage/src/main/java/mage/abilities/costs/common/WaterbendCost.java @@ -2,7 +2,7 @@ package mage.abilities.costs.common; import mage.abilities.Ability; import mage.abilities.costs.Cost; -import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.costs.CostImpl; import mage.game.Game; import java.util.UUID; @@ -12,14 +12,14 @@ import java.util.UUID; * * @author TheElk801 */ -public class WaterbendCost extends ManaCostsImpl { +public class WaterbendCost extends CostImpl { public WaterbendCost(int amount) { this("{" + amount + '}'); } public WaterbendCost(String mana) { - super(""); + super(); this.text = "waterbend " + mana; } diff --git a/Mage/src/main/java/mage/abilities/effects/common/PutOnTopOrBottomLibraryTargetEffect.java b/Mage/src/main/java/mage/abilities/effects/common/PutOnTopOrBottomLibraryTargetEffect.java index 45dfa70ed00..76314453b36 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/PutOnTopOrBottomLibraryTargetEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/PutOnTopOrBottomLibraryTargetEffect.java @@ -68,7 +68,7 @@ public class PutOnTopOrBottomLibraryTargetEffect extends OneShotEffect { sb.append(targetText); sb.append("'s owner"); } - sb.append(" puts it"); + sb.append(" puts it "); if (position > 1) { sb.append("into their library "); sb.append(CardUtil.numberToOrdinalText(position)); diff --git a/Mage/src/main/java/mage/abilities/effects/common/continuous/BoostControlledEffect.java b/Mage/src/main/java/mage/abilities/effects/common/continuous/BoostControlledEffect.java index c1db549eaaf..36537f5a62b 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/continuous/BoostControlledEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/continuous/BoostControlledEffect.java @@ -116,7 +116,7 @@ public class BoostControlledEffect extends ContinuousEffectImpl { StringBuilder sb = new StringBuilder(); String message = filter.getMessage().toLowerCase(Locale.ENGLISH); boolean each = message.startsWith("each"); - if (excludeSource && !each && !message.startsWith("all")) { + if (excludeSource && !each && !message.startsWith("all ")) { sb.append("other "); } sb.append(filter.getMessage()); diff --git a/Mage/src/main/java/mage/abilities/effects/keyword/EarthbendTargetEffect.java b/Mage/src/main/java/mage/abilities/effects/keyword/EarthbendTargetEffect.java index f9d73740e2d..849400a6219 100644 --- a/Mage/src/main/java/mage/abilities/effects/keyword/EarthbendTargetEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/keyword/EarthbendTargetEffect.java @@ -79,9 +79,10 @@ public class EarthbendTargetEffect extends OneShotEffect { return staticText; } StringBuilder sb = new StringBuilder("earthbend "); - sb.append(amount); - if (!(amount instanceof StaticValue)) { - sb.append(", where X is "); + if (amount instanceof StaticValue) { + sb.append(amount); + } else { + sb.append("X, where X is "); sb.append(amount.getMessage()); } sb.append(". (Target land you control becomes a 0/0 creature with haste that's still a land. Put "); diff --git a/Mage/src/main/java/mage/abilities/effects/keyword/ScryTargetEffect.java b/Mage/src/main/java/mage/abilities/effects/keyword/ScryTargetEffect.java index 634b2da4d30..ee17ef00cea 100644 --- a/Mage/src/main/java/mage/abilities/effects/keyword/ScryTargetEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/keyword/ScryTargetEffect.java @@ -8,7 +8,6 @@ import mage.abilities.effects.OneShotEffect; import mage.constants.Outcome; import mage.game.Game; import mage.players.Player; -import mage.util.CardUtil; import java.util.UUID; @@ -57,7 +56,7 @@ public class ScryTargetEffect extends OneShotEffect { } StringBuilder sb = new StringBuilder(getTargetPointer().describeTargets(mode.getTargets(), "that player")); sb.append(" scries "); - sb.append(CardUtil.numberToText(amount.toString())); + sb.append(amount.toString()); return sb.toString(); } } diff --git a/Mage/src/main/java/mage/util/CardUtil.java b/Mage/src/main/java/mage/util/CardUtil.java index db9ff9e8543..cdf2b25307e 100644 --- a/Mage/src/main/java/mage/util/CardUtil.java +++ b/Mage/src/main/java/mage/util/CardUtil.java @@ -84,7 +84,7 @@ public final class CardUtil { public static final SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss.SSS"); private static final List costWords = Arrays.asList( - "put", "return", "exile", "discard", "mill", "sacrifice", "remove", "tap", "reveal", "pay", "have", "collect", "forage" + "put", "return", "exile", "discard", "mill", "sacrifice", "remove", "tap", "reveal", "pay", "have", "collect", "forage", "transform" ); // search set code in commands like "set_code-card_name"