[FIC] various text fixes

This commit is contained in:
theelk801 2025-05-30 22:14:50 -04:00
parent 9ef2aac469
commit 1051ccbe9d
24 changed files with 92 additions and 79 deletions

View file

@ -54,7 +54,7 @@ class AlteredEgoCopyApplier extends CopyApplier {
@Override
public String getText() {
return ", except it enters with an additional X +1/+1 counters on it";
return ", except it enters with X additional +1/+1 counters on it";
}
@Override

View file

@ -1,12 +1,11 @@
package mage.cards.a;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.condition.Condition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.decorator.ConditionalContinuousEffect;
import mage.abilities.effects.ContinuousEffect;
import mage.abilities.effects.common.continuous.GainAbilityControlledEffect;
import mage.abilities.keyword.HasteAbility;
import mage.cards.CardImpl;
@ -15,23 +14,17 @@ import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.SubType;
import mage.constants.Zone;
import mage.filter.StaticFilters;
import mage.filter.common.FilterControlledPermanent;
import mage.filter.common.FilterCreaturePermanent;
import java.util.UUID;
/**
*
* @author Backfir3
*/
public final class Anger extends CardImpl {
private static final String ruleText = "As long as Anger is in your graveyard and you control a Mountain, creatures you control have haste";
private static final FilterControlledPermanent filter = new FilterControlledPermanent("Mountain");
static {
filter.add(CardType.LAND.getPredicate());
filter.add(SubType.MOUNTAIN.getPredicate());
}
private static final Condition condition = new PermanentsOnTheBattlefieldCondition(new FilterControlledPermanent(SubType.MOUNTAIN));
public Anger(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{R}");
@ -44,11 +37,16 @@ public final class Anger extends CardImpl {
this.addAbility(HasteAbility.getInstance());
// As long as Anger is in your graveyard and you control a Mountain, creatures you control have haste
ContinuousEffect effect = new GainAbilityControlledEffect(HasteAbility.getInstance(),
Duration.WhileOnBattlefield, new FilterCreaturePermanent());
ConditionalContinuousEffect angerEffect = new ConditionalContinuousEffect(effect,
new PermanentsOnTheBattlefieldCondition(filter), ruleText);
this.addAbility(new SimpleStaticAbility(Zone.GRAVEYARD, angerEffect));
this.addAbility(new SimpleStaticAbility(
Zone.GRAVEYARD,
new ConditionalContinuousEffect(
new GainAbilityControlledEffect(
HasteAbility.getInstance(), Duration.WhileOnBattlefield,
StaticFilters.FILTER_PERMANENT_CREATURE
), condition, "as long as this card is in your graveyard " +
"and you control a Mountain, creatures you control have haste"
)
));
}
private Anger(final Anger card) {

View file

@ -4,7 +4,6 @@ import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldAllTriggeredAbility;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.condition.Condition;
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
import mage.abilities.effects.common.PutCardFromHandOntoBattlefieldEffect;
import mage.abilities.effects.common.search.SearchLibraryPutInHandEffect;
import mage.cards.CardImpl;
@ -28,7 +27,7 @@ import java.util.UUID;
public final class ArchaeomancersMap extends CardImpl {
private static final FilterCard filter = new FilterCard("basic Plains cards");
private static final FilterPermanent filter2 = new FilterLandPermanent();
private static final FilterPermanent filter2 = new FilterLandPermanent("a land an opponent controls");
static {
filter.add(SubType.PLAINS.getPredicate());
@ -45,13 +44,9 @@ public final class ArchaeomancersMap extends CardImpl {
));
// Whenever a land enters the battlefield under an opponent's control, if that player controls more lands than you, you may put a land card from your hand onto the battlefield.
this.addAbility(new ConditionalInterveningIfTriggeredAbility(
new EntersBattlefieldAllTriggeredAbility(
this.addAbility(new EntersBattlefieldAllTriggeredAbility(
new PutCardFromHandOntoBattlefieldEffect(StaticFilters.FILTER_CARD_LAND_A), filter2
), ArchaeomancersMapCondition.instance, "Whenever a land enters the battlefield " +
"under an opponent's control, if that player controls more lands than you, " +
"you may put a land card from your hand onto the battlefield."
));
).withInterveningIf(ArchaeomancersMapCondition.instance));
}
private ArchaeomancersMap(final ArchaeomancersMap card) {
@ -78,4 +73,9 @@ enum ArchaeomancersMapCondition implements Condition {
source.getControllerId(), source, game
);
}
@Override
public String toString() {
return "that player controls more lands than you";
}
}

View file

@ -1,10 +1,6 @@
package mage.cards.b;
import java.util.UUID;
import mage.ApprovingObject;
import mage.abilities.Ability;
import mage.abilities.SpellAbility;
import mage.abilities.common.AttacksTriggeredAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.costs.mana.ManaCostsImpl;
@ -13,11 +9,11 @@ import mage.abilities.effects.common.continuous.AddCardSubtypeAttachedEffect;
import mage.abilities.effects.common.continuous.BoostEquippedEffect;
import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect;
import mage.abilities.keyword.EquipAbility;
import mage.cards.Card;
import mage.constants.*;
import mage.abilities.keyword.JobSelectAbility;
import mage.cards.Card;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.*;
import mage.filter.common.FilterInstantOrSorceryCard;
import mage.filter.predicate.card.DefendingPlayerOwnsCardPredicate;
import mage.game.Game;
@ -25,6 +21,8 @@ import mage.players.Player;
import mage.target.common.TargetCardInGraveyard;
import mage.util.CardUtil;
import java.util.UUID;
/**
* @author balazskristof
*/
@ -54,7 +52,7 @@ public final class BlueMagesCane extends CardImpl {
Ability attackAbility = new AttacksTriggeredAbility(new BlueMagesCaneEffect());
attackAbility.addTarget(new TargetCardInGraveyard(0, 1, filter));
ability.addEffect(new GainAbilityAttachedEffect(attackAbility, AttachmentType.EQUIPMENT)
.setText("and has \"Whenever this creature attacks, exile up to one target instant or sorcery card from defending player's graveyard. "
.setText(", and has \"Whenever this creature attacks, exile up to one target instant or sorcery card from defending player's graveyard. "
+ "If you do, copy it. You may cast the copy by paying {3} rather than paying its mana cost.\"")
);
this.addAbility(ability);

View file

@ -87,7 +87,7 @@ class CloudExSOLDIEREntersEffect extends OneShotEffect {
CloudExSOLDIEREntersEffect() {
super(Outcome.Benefit);
staticText = "attach up to one target Equipment you control to {this}";
staticText = "attach up to one target Equipment you control to it";
}
private CloudExSOLDIEREntersEffect(final CloudExSOLDIEREntersEffect effect) {

View file

@ -1,13 +1,11 @@
package mage.cards.c;
import java.util.Set;
import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.ExileFromGraveCost;
import mage.abilities.costs.common.SacrificeSourceCost;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.BecomesMonarchSourceEffect;
@ -24,6 +22,9 @@ import mage.target.TargetCard;
import mage.target.common.TargetCardInYourGraveyard;
import mage.target.common.TargetOpponent;
import java.util.Set;
import java.util.UUID;
/**
* @author balazskristof
*/
@ -37,9 +38,10 @@ public final class CoinOfFate extends CardImpl {
// {3}{W},{T}, Exile two creature cards from your graveyard, Sacrifice this artifact: An opponent chooses one of the exiled cards. You put that card on the bottom of your library and return the other to the battlefield tapped. You become the monarch.
Ability ability = new SimpleActivatedAbility(new CoinOfFateEffect(), new ManaCostsImpl<>("{3}{W}")).addHint(MonarchHint.instance);
ability.addEffect(new BecomesMonarchSourceEffect());
ability.addCost(new TapSourceCost());
ability.addCost(new ExileFromGraveCost(new TargetCardInYourGraveyard(2, StaticFilters.FILTER_CARD_CREATURES), true));
ability.addCost(new SacrificeSourceCost());
ability.addEffect(new BecomesMonarchSourceEffect());
this.addAbility(ability);
}

View file

@ -2,10 +2,12 @@ package mage.cards.e;
import mage.MageIdentifier;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.AttacksTriggeredAbility;
import mage.abilities.common.CastFromGraveyardOnceDuringEachOfYourTurnAbility;
import mage.abilities.dynamicvalue.common.GreatestAmongPermanentsValue;
import mage.abilities.dynamicvalue.common.StaticValue;
import mage.abilities.effects.common.InfoEffect;
import mage.abilities.effects.common.continuous.BoostSourceEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
@ -36,7 +38,9 @@ public final class EdgarMasterMachinist extends CardImpl {
this.toughness = new MageInt(4);
// Once during each of your turns, you may cast an artifact spell from your graveyard. If you cast a spell this way, that artifact enters tapped.
this.addAbility(new CastFromGraveyardOnceDuringEachOfYourTurnAbility(filter, MageIdentifier.OnceOnYourTurnCastFromGraveyardEntersTapped));
Ability ability = new CastFromGraveyardOnceDuringEachOfYourTurnAbility(filter, MageIdentifier.OnceOnYourTurnCastFromGraveyardEntersTapped);
ability.addEffect(new InfoEffect("If you cast a spell this way, that artifact enters tapped"));
this.addAbility(ability);
// Tools -- Whenever Edgar attacks, it gets +X/+0 until end of turn, where X is the greatest mana value among artifacts you control.
this.addAbility(new AttacksTriggeredAbility(

View file

@ -44,7 +44,9 @@ public final class GeneralLeoCristophe extends CardImpl {
// When General Leo Cristophe enters, return up to one target creature card with mana value 3 or less from your graveyard to the battlefield. Then put a +1/+1 counter on General Leo Cristophe for each creature you control.
Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnFromGraveyardToBattlefieldTargetEffect());
ability.addTarget(new TargetCardInYourGraveyard(0, 1, filter));
ability.addEffect(new AddCountersSourceEffect(CounterType.P1P1.createInstance(), CreaturesYouControlCount.instance));
ability.addEffect(new AddCountersSourceEffect(
CounterType.P1P1.createInstance(), CreaturesYouControlCount.instance
).setText("Then put a +1/+1 counter on {this} for each creature you control"));
this.addAbility(ability.addHint(CreaturesYouControlHint.instance));
}

View file

@ -48,7 +48,7 @@ public final class GrahaTiaScionReborn extends CardImpl {
new GrahaTiaScionRebornEffect(),
new PayLifeCost(
GrahaTiaScionRebornValue.instance,
"pay X life, where X is that spell's mana value"
"X life, where X is that spell's mana value"
)
), StaticFilters.FILTER_SPELL_A_NON_CREATURE, false).setDoOnlyOnceEachTurn(true).withFlavorWord("Throw Wide the Gates"));
}

View file

@ -1,26 +1,27 @@
package mage.cards.h;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.common.SpellCastControllerTriggeredAbility;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.combat.CantBeBlockedTargetEffect;
import mage.abilities.effects.common.continuous.BoostTargetEffect;
import mage.abilities.meta.OrTriggeredAbility;
import mage.constants.SubType;
import mage.constants.SuperType;
import mage.abilities.keyword.FlyingAbility;
import mage.abilities.keyword.VigilanceAbility;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.keyword.WardAbility;
import mage.abilities.meta.OrTriggeredAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.SuperType;
import mage.constants.Zone;
import mage.filter.StaticFilters;
import mage.target.common.TargetCreaturePermanent;
import java.util.UUID;
/**
* @author balazskristof
*/
@ -52,7 +53,7 @@ public final class HraesvelgrOfTheFirstBrood extends CardImpl {
);
ability.addEffect(new CantBeBlockedTargetEffect().setText("can't be blocked this turn").concatBy("and"));
ability.addTarget(new TargetCreaturePermanent());
this.addAbility(ability);
this.addAbility(ability.withFlavorWord("Shiva's Aid"));
}
private HraesvelgrOfTheFirstBrood(final HraesvelgrOfTheFirstBrood card) {

View file

@ -36,7 +36,7 @@ public final class InterceptorShadowsHound extends CardImpl {
// Assassins you control have menace.
this.addAbility(new SimpleStaticAbility(new GainAbilityControlledEffect(
new MenaceAbility(false), Duration.WhileControlled, filter
new MenaceAbility(false), Duration.WhileOnBattlefield, filter
)));
// Whenever you attack with one or more legendary creatures, you may pay {2}{B}. If you do, return this card from your graveyard to the battlefield tapped and attacking.

View file

@ -10,10 +10,7 @@ import mage.abilities.keyword.FlyingAbility;
import mage.abilities.triggers.BeginningOfEndStepTriggeredAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.SuperType;
import mage.constants.WatcherScope;
import mage.constants.*;
import mage.game.Game;
import mage.game.events.GameEvent;
import mage.game.permanent.Permanent;
@ -41,7 +38,7 @@ public final class LordJyscalGuado extends CardImpl {
this.addAbility(FlyingAbility.getInstance());
// At the beginning of each end step, if you put a counter on a creature this turn, investigate.
this.addAbility(new BeginningOfEndStepTriggeredAbility(new InvestigateEffect())
this.addAbility(new BeginningOfEndStepTriggeredAbility(TargetController.ANY, new InvestigateEffect(), false)
.withInterveningIf(LordJyscalGuadoCondition.instance)
.addHint(LordJyscalGuadoCondition.getHint()),
new LordJyscalGuadoWatcher()

View file

@ -31,6 +31,7 @@ public final class SOLDIERMilitaryProgram extends CardImpl {
// At the beginning of combat on your turn, choose one. If you control a commander, you may choose both instead.
// * Create a 1/1 white Soldier creature token.
Ability ability = new BeginningOfCombatTriggeredAbility(new CreateTokenEffect(new SoldierToken()));
ability.getModes().setChooseText("choose one. If you control a commander, you may choose both instead.");
ability.getModes().setMoreCondition(2, ControlACommanderCondition.instance);
// * Put a +1/+1 counter on each of up to two Soldiers you control.

View file

@ -28,12 +28,10 @@ import java.util.UUID;
*/
public final class SephirothFallenHero extends CardImpl {
private static final FilterPermanent filter = new FilterControlledCreaturePermanent();
private static final FilterPermanent filter2 = new FilterPermanent("a modified creature");
private static final FilterPermanent filter = new FilterControlledCreaturePermanent("a modified creature");
static {
filter.add(ModifiedPredicate.instance);
filter2.add(ModifiedPredicate.instance);
}
public SephirothFallenHero(UUID ownerId, CardSetInfo setInfo) {
@ -48,7 +46,9 @@ public final class SephirothFallenHero extends CardImpl {
// Jenova Cells -- Whenever Sephiroth attacks, you may put a cell counter on target creature. Until end of turn, each modified creature you control has base power and toughness 7/5.
Ability ability = new AttacksTriggeredAbility(new SephirothFallenHeroEffect());
ability.addEffect(new SetBasePowerToughnessAllEffect(7, 5, Duration.EndOfTurn, filter));
ability.addEffect(new SetBasePowerToughnessAllEffect(
7, 5, Duration.EndOfTurn, filter
).setText("until end of turn, each modified creature you control has base power and toughness 7/5"));
ability.addTarget(new TargetCreaturePermanent());
this.addAbility(ability.withFlavorWord("Jenova Cells"));
@ -56,7 +56,7 @@ public final class SephirothFallenHero extends CardImpl {
ability = new SimpleActivatedAbility(
Zone.GRAVEYARD, new ReturnSourceFromGraveyardToBattlefieldEffect(true), new GenericManaCost(3)
);
ability.addCost(new SacrificeTargetCost(filter2));
ability.addCost(new SacrificeTargetCost(filter));
this.addAbility(ability.withFlavorWord("The Reunion"));
}

View file

@ -37,7 +37,7 @@ public final class TataruTaru extends CardImpl {
this.toughness = new MageInt(3);
// When Tataru Taru enters, you draw a card and target opponent may draw a card.
Ability ability = new EntersBattlefieldTriggeredAbility(new DrawCardSourceControllerEffect(1));
Ability ability = new EntersBattlefieldTriggeredAbility(new DrawCardSourceControllerEffect(1, true));
ability.addEffect(new TataruTaruEffect());
ability.addTarget(new TargetOpponent());
this.addAbility(ability);
@ -68,6 +68,11 @@ enum TataruTaruCondition implements Condition {
.map(game::isActivePlayer)
.orElse(true);
}
@Override
public String toString() {
return "it isn't that player's turn";
}
}
class TataruTaruEffect extends OneShotEffect {

View file

@ -21,7 +21,6 @@ import mage.constants.SubType;
import mage.constants.SuperType;
import mage.counters.CounterType;
import mage.filter.FilterPermanent;
import mage.filter.StaticFilters;
import mage.filter.common.FilterControlledCreaturePermanent;
import mage.filter.predicate.permanent.EnteredThisTurnPredicate;
import mage.filter.predicate.permanent.TokenPredicate;
@ -34,6 +33,12 @@ import java.util.UUID;
*/
public final class TromellSeymoursButler extends CardImpl {
private static final FilterPermanent filter = new FilterPermanent("nontoken creature");
static {
filter.add(TokenPredicate.FALSE);
}
public TromellSeymoursButler(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}");
@ -45,8 +50,7 @@ public final class TromellSeymoursButler extends CardImpl {
// Each other nontoken creature you control enters with an additional +1/+1 counter on it.
this.addAbility(new SimpleStaticAbility(new EntersWithCountersControlledEffect(
StaticFilters.FILTER_CONTROLLED_CREATURE_NON_TOKEN,
CounterType.P1P1.createInstance(), true
filter, CounterType.P1P1.createInstance(), true
)));
// {1}, {T}: Proliferate X times, where X is the number of nontoken creatures you control that entered this turn.

View file

@ -42,7 +42,7 @@ public final class UmaroRagingYeti extends CardImpl {
// * Other creatures you control get +3/+0 and gain trample until end of turn.
Ability ability = new BeginningOfCombatTriggeredAbility(new BoostControlledEffect(
3, 0, Duration.EndOfTurn, true
));
).setText("other creatures you control get +3/+0"));
ability.addEffect(new GainAbilityControlledEffect(
TrampleAbility.getInstance(), Duration.EndOfTurn,
StaticFilters.FILTER_PERMANENT_CREATURE, true

View file

@ -44,7 +44,7 @@ public final class VincentVengefulAtoner extends CardImpl {
// Chaos -- Whenever Vincent deals combat damage to an opponent, it deals that much damage to each other opponent if Vincent's power is 7 or greater.
this.addAbility(new DealsDamageToOpponentTriggeredAbility(
new VincentVengefulAtonerEffect(), false, true, true
));
).withFlavorWord("Chaos"));
}
private VincentVengefulAtoner(final VincentVengefulAtoner card) {

View file

@ -69,7 +69,7 @@ public final class WakkaDevotedGuardian extends CardImpl {
// Blitzball Captain -- At the beginning of your end step, if a counter was put on Wakka this turn, put a +1/+1 counter on each other creature you control.
this.addAbility(new BeginningOfEndStepTriggeredAbility(new AddCountersAllEffect(
CounterType.P1P1.createInstance(), StaticFilters.FILTER_OTHER_CONTROLLED_CREATURE
)).withInterveningIf(WakkaDevotedGuardianCondition.instance), new WakkaDevotedGuardianWatcher());
)).withInterveningIf(WakkaDevotedGuardianCondition.instance).withFlavorWord("Blitzball Captain"), new WakkaDevotedGuardianWatcher());
}
private WakkaDevotedGuardian(final WakkaDevotedGuardian card) {

View file

@ -32,7 +32,7 @@ public final class WreckingBallArm extends CardImpl {
));
ability.addEffect(new CantBeBlockedByCreaturesAttachedEffect(
Duration.WhileControlled, DauntAbility.getFilter(), AttachmentType.EQUIPMENT
));
).setText("and can't be blocked by creatures with power 2 or less"));
this.addAbility(ability);
// Equip legendary creature {3}

View file

@ -71,7 +71,7 @@ public class VerifyCardDataTest {
private static final Logger logger = Logger.getLogger(VerifyCardDataTest.class);
private static final String FULL_ABILITIES_CHECK_SET_CODES = "FIN"; // check ability text due mtgjson, can use multiple sets like MAT;CMD or * for all
private static final String FULL_ABILITIES_CHECK_SET_CODES = "FIC"; // check ability text due mtgjson, can use multiple sets like MAT;CMD or * for all
private static final boolean CHECK_ONLY_ABILITIES_TEXT = false; // use when checking text locally, suppresses unnecessary checks and output messages
private static final boolean CHECK_COPYABLE_FIELDS = true; // disable for better verify test performance

View file

@ -22,6 +22,7 @@ public class WonCoinFlipControllerTriggeredAbility extends TriggeredAbilityImpl
public WonCoinFlipControllerTriggeredAbility(Zone zone, Effect effect, boolean optional) {
super(zone, effect, optional);
this.setTriggerPhrase("Whenever you win a coin flip, ");
}
private WonCoinFlipControllerTriggeredAbility(final WonCoinFlipControllerTriggeredAbility ability) {

View file

@ -103,7 +103,7 @@ public class MoveCounterTargetsEffect extends OneShotEffect {
.ofNullable(counterType)
.map(c -> counterType.getArticle() + ' ' + counterType.getName())
.orElse("a"));
sb.append(" counter from target ");
sb.append(" counter from ");
sb.append(mode.getTargets().get(0).getDescription());
sb.append(" onto ");
sb.append(mode.getTargets().get(1).getDescription());

View file

@ -59,7 +59,7 @@ public class ScryEffect extends OneShotEffect {
private String generateText() {
StringBuilder sb = new StringBuilder("scry ");
String value = amount.toString();
sb.append(CardUtil.numberToText(value));
sb.append(value);
String message = amount.getMessage();
if (!message.isEmpty()) {
sb.append(value.equals("X") ? ", where X is " : " for each ");