[TLA] various text fixes

This commit is contained in:
theelk801 2025-11-18 09:21:40 -05:00
parent 00c5daa5ea
commit 790361f59f
33 changed files with 68 additions and 47 deletions

View file

@ -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) {

View file

@ -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) {

View file

@ -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);
}

View file

@ -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);

View file

@ -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) {

View file

@ -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);

View file

@ -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()));

View file

@ -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) {

View file

@ -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));
}

View file

@ -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);
}

View file

@ -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}");

View file

@ -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)
));
}

View file

@ -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)
));
}

View file

@ -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()));

View file

@ -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()));

View file

@ -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);

View file

@ -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);
}

View file

@ -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) {

View file

@ -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}"));

View file

@ -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());

View file

@ -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));

View file

@ -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()

View file

@ -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());

View file

@ -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}");

View file

@ -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);
}

View file

@ -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()));
}

View file

@ -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 <T> boolean eqSet(Collection<T> a, Collection<T> b) {

View file

@ -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;
}

View file

@ -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));

View file

@ -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());

View file

@ -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(". <i>(Target land you control becomes a 0/0 creature with haste that's still a land. Put ");

View file

@ -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();
}
}

View file

@ -84,7 +84,7 @@ public final class CardUtil {
public static final SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss.SSS");
private static final List<String> 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"