[OTJ][BIG] Various Fixes (mostly Text)

This commit is contained in:
Susucre 2024-04-03 22:24:53 +02:00
parent ea0a2c8528
commit 73287e3878
23 changed files with 39 additions and 26 deletions

View file

@ -46,7 +46,7 @@ class AnotherRoundEffect extends OneShotEffect {
super(Outcome.Benefit);
staticText = "Exile any number of creatures you control, "
+ "then return them to the battlefield under their owner's control. "
+ "Then repeat this process X times.";
+ "Then repeat this process X more times.";
}
private AnotherRoundEffect(final AnotherRoundEffect effect) {

View file

@ -31,9 +31,11 @@ public final class ArmoredArmadillo extends CardImpl {
this.addAbility(new WardAbility(new ManaCostsImpl<>("{1}")));
// {3}{W}: Armored Armadillo gets +X/+0 until end of turn, where X is its toughness.
this.addAbility(new SimpleActivatedAbility(new BoostSourceEffect(
SourcePermanentToughnessValue.getInstance(), StaticValue.get(0), Duration.EndOfTurn
), new ManaCostsImpl<>("{3}{W}")));
this.addAbility(new SimpleActivatedAbility(
new BoostSourceEffect(
SourcePermanentToughnessValue.getInstance(), StaticValue.get(0), Duration.EndOfTurn
).setText("{this} gets +X/+0 until end of turn, where X is its toughness."),
new ManaCostsImpl<>("{3}{W}")));
}
private ArmoredArmadillo(final ArmoredArmadillo card) {

View file

@ -62,7 +62,7 @@ class AssimilationAegisETBEffect extends OneShotEffect {
AssimilationAegisETBEffect() {
super(Outcome.Exile);
staticText = "exile up to one other target creature until {this} leaves the battlefield.";
staticText = "exile up to one target creature until {this} leaves the battlefield.";
}
private AssimilationAegisETBEffect(final AssimilationAegisETBEffect effect) {
@ -95,7 +95,7 @@ class AssimilationAegisEffect extends OneShotEffect {
AssimilationAegisEffect() {
super(Outcome.Benefit);
staticText = "for as long as {this} remains attached to it, " +
"that creature become a copy of a creature exiled with {this}";
"that creature becomes a copy of a creature card exiled with {this}";
}
private AssimilationAegisEffect(final AssimilationAegisEffect effect) {

View file

@ -28,7 +28,7 @@ import java.util.UUID;
*/
public final class AvenInterrupter extends CardImpl {
private static final FilterCard filter = new FilterCard("spells your opponent cast from graveyards or from exile");
private static final FilterCard filter = new FilterCard("spells your opponents cast from graveyards or from exile");
static {
filter.add(Predicates.or(

View file

@ -35,7 +35,7 @@ public final class CollectorsCage extends CardImpl {
);
ability.addCost(new TapSourceCost());
ability.addEffect(new ConditionalOneShotEffect(
new HideawayPlayEffect(), CovenCondition.instance, "then if you control three or more " +
new HideawayPlayEffect(), CovenCondition.instance, "Then if you control three or more " +
"creatures with different powers, you may play the exiled card without paying its mana cost"
));
ability.addTarget(new TargetControlledCreaturePermanent());

View file

@ -46,7 +46,7 @@ public final class DanceOfTheTumbleweeds extends CardImpl {
// + {1} -- Search your library for a basic land card or a Desert card, put it onto the battlefield, then shuffle.
this.getSpellAbility().addEffect(new SearchLibraryPutInPlayEffect(
new TargetCardInLibrary(0, 1, filter)
new TargetCardInLibrary(filter)
));
this.getSpellAbility().withFirstModeCost(new GenericManaCost(1));

View file

@ -38,6 +38,7 @@ public final class DuelistOfTheMind extends CardImpl {
// Duelist of the Mind's power is equal to the number of cards you've drawn this turn.
this.addAbility(new SimpleStaticAbility(
Zone.ALL, new SetBasePowerSourceEffect(CardsDrawnThisTurnDynamicValue.instance)
.setText("{this}'s power is equal to the number of cards you've drawn this turn")
).addHint(CardsDrawnThisTurnDynamicValue.getHint()));
// Whenever you commit a crime, you may draw a card. If you do, discard a card. This ability triggers only once each turn.

View file

@ -72,7 +72,7 @@ class GeralfTheFleshwrightTriggeredAbility extends TriggeredAbilityImpl {
public GeralfTheFleshwrightTriggeredAbility() {
super(Zone.BATTLEFIELD, new CreateTokenEffect(new ZombieRogueToken()));
setTriggerPhrase("Whenever you cast a spell during your turn other than your first spell each turn, ");
setTriggerPhrase("Whenever you cast a spell during your turn other than your first spell thhat turn, ");
}
private GeralfTheFleshwrightTriggeredAbility(final GeralfTheFleshwrightTriggeredAbility ability) {
@ -178,6 +178,7 @@ class GeralfTheFleshwrightEffect extends OneShotEffect {
GeralfTheFleshwrightEffect() {
super(Outcome.BoostCreature);
staticText = "put a +1/+1 counter on it for each other Zombie that entered the battlefield under your control this turn";
}
private GeralfTheFleshwrightEffect(final GeralfTheFleshwrightEffect effect) {

View file

@ -94,6 +94,9 @@ class KambalProfiteeringMayorTriggeredAbility extends TriggeredAbilityImpl {
public boolean checkTrigger(GameEvent event, Game game) {
ZoneChangeBatchEvent zEvent = (ZoneChangeBatchEvent) event;
Player controller = game.getPlayer(this.controllerId);
if (controller == null) {
return false;
}
List<UUID> tokensIds = zEvent.getEvents()
.stream()
.filter(zce -> zce.getToZone() == Zone.BATTLEFIELD // keep enter the battlefield

View file

@ -93,7 +93,7 @@ class LilahUndefeatedSlickshotTriggeredAbility extends TriggeredAbilityImpl {
@Override
public String getRule() {
return "Whenever you cast an instant or sorcery spell from your hand, "
return "Whenever you cast a multicolored instant or sorcery spell from your hand, "
+ "exile that spell instead of putting it into your graveyard as it resolves. "
+ "If you do, it becomes plotted.";
}

View file

@ -31,7 +31,7 @@ public final class LonghornSharpshooter extends CardImpl {
this.addAbility(ReachAbility.getInstance());
// When Longhorn Sharpshooter becomes plotted, it deals 2 damage to any target.
Ability ability = new BecomesPlottedSourceTriggeredAbility(new DamageTargetEffect(2));
Ability ability = new BecomesPlottedSourceTriggeredAbility(new DamageTargetEffect(2, "it"));
ability.addTarget(new TargetAnyTarget());
this.addAbility(ability);

View file

@ -4,6 +4,7 @@ import mage.abilities.Mode;
import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.effects.common.DrawCardTargetEffect;
import mage.abilities.effects.common.continuous.BecomesCreatureTargetEffect;
import mage.abilities.keyword.SpreeAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
@ -24,6 +25,8 @@ public final class MetamorphicBlast extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{U}");
// Spree
this.addAbility(new SpreeAbility(this));
// + {1} -- Until end of turn, target creature becomes a white Rabbit with base power and toughness 0/1.
this.getSpellAbility().addEffect(new BecomesCreatureTargetEffect(new CreatureToken(
0, 1, "white Rabbit with base power and toughness 0/1"

View file

@ -27,7 +27,7 @@ public final class MirageMesa extends CardImpl {
// Mirage Mesa enters the battlefield tapped. As it enters, choose a color.
Ability ability = new EntersBattlefieldTappedAbility(
"{this} enters the battlefield tapped. As it enters, choose a color"
"{this} enters the battlefield tapped. As it enters, choose a color."
);
ability.addEffect(new ChooseColorEffect(Outcome.Benefit));
this.addAbility(ability);

View file

@ -47,7 +47,7 @@ class PitilessCarnageEffect extends OneShotEffect {
PitilessCarnageEffect() {
super(Outcome.Benefit);
staticText = "sacrifice any number of permanents you control, then that many cards";
staticText = "sacrifice any number of permanents you control, then draw that many cards";
}
private PitilessCarnageEffect(final PitilessCarnageEffect effect) {

View file

@ -24,7 +24,7 @@ public final class RiseOfTheVarmints extends CardImpl {
this.getSpellAbility().addEffect(new CreateTokenEffect(
new VarmintToken(),
new CardsInControllerGraveyardCount(StaticFilters.FILTER_CARD_CREATURE)
));
).setText("Create X 2/1 green Varmint creature tokens, where X is the number of creature cards in your graveyard."));
// Plot {2}{G}
this.addAbility(new PlotAbility("{2}{G}"));

View file

@ -22,7 +22,7 @@ import java.util.UUID;
public final class SimulacrumSynthesizer extends CardImpl {
private static final FilterPermanent filter =
new FilterArtifactPermanent("another artifact with mana value 3 or more");
new FilterArtifactPermanent("another artifact with mana value 3 or greater");
static {
filter.add(AnotherPredicate.instance);

View file

@ -51,7 +51,7 @@ public final class SmugglersSurprise extends CardImpl {
// + {2} -- Mill four cards. You may put up to two creature and/or land cards from among the milled cards into your hand.
this.getSpellAbility().addEffect(new MillThenPutInHandEffect(
4, filterCard, null, true, 4
4, filterCard, null, true, 2
));
this.getSpellAbility().withFirstModeCost(new GenericManaCost(2));

View file

@ -40,8 +40,7 @@ public final class StingerbackTerror extends CardImpl {
// Stingerback Terror gets -1/-1 for each card in your hand.
this.addAbility(new SimpleStaticAbility(new BoostSourceEffect(
xValue, xValue, Duration.WhileOnBattlefield,
"{this} gets -1/-1 for each card in your hand"
xValue, xValue, Duration.WhileOnBattlefield
)));
// Plot {2}{R}

View file

@ -40,7 +40,7 @@ public final class StopCold extends CardImpl {
this.addAbility(new EnchantAbility(auraTarget));
// When Stop Cold enters the battlefield, tap enchanted permanent.
this.addAbility(new EntersBattlefieldTriggeredAbility(new TapEnchantedEffect()));
this.addAbility(new EntersBattlefieldTriggeredAbility(new TapEnchantedEffect("permanent")));
// Enchanted permanent loses all abilities and doesn't untap during its controller's untap step.
Ability ability = new SimpleStaticAbility(new StopColdEffect());

View file

@ -38,9 +38,10 @@ public final class TinybonesJoinsUp extends CardImpl {
// Whenever a legendary creature enters the battlefield under your control, any number of target players each mill a card and lose 1 life.
ability = new EntersBattlefieldControlledTriggeredAbility(
new MillCardsTargetEffect(1), filter
new MillCardsTargetEffect(1).setText("any number of target players each mill a card"),
filter
);
ability.addEffect(new LoseLifeTargetEffect(1));
ability.addEffect(new LoseLifeTargetEffect(1).setText("and lose 1 life"));
ability.addTarget(new TargetPlayer(0, Integer.MAX_VALUE, false));
this.addAbility(ability);
}

View file

@ -28,7 +28,7 @@ public final class VaultPlunderer extends CardImpl {
// When Vault Plunderer enters the battlefield, target player draws a card and loses 1 life.
Ability ability = new EntersBattlefieldTriggeredAbility(new DrawCardTargetEffect(1));
ability.addEffect(new LoseLifeTargetEffect(1).concatBy("and"));
ability.addEffect(new LoseLifeTargetEffect(1).setText("and loses 1 life"));
ability.addTarget(new TargetPlayer());
this.addAbility(ability);
}

View file

@ -70,7 +70,7 @@ public class VerifyCardDataTest {
private static final Logger logger = Logger.getLogger(VerifyCardDataTest.class);
private static final String FULL_ABILITIES_CHECK_SET_CODES = "WHO;LTC;LCI;LCC;REX"; // check ability text due mtgjson, can use multiple sets like MAT;CMD or * for all
private static final String FULL_ABILITIES_CHECK_SET_CODES = "OTJ;BIG"; // 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 AUTO_FIX_SAMPLE_DECKS = false; // debug only: auto-fix sample decks by test_checkSampleDecks test run

View file

@ -47,13 +47,16 @@ public class SpellsCostIncreasingAllEffect extends CostModificationEffectImpl {
private void setText() {
StringBuilder sb = new StringBuilder();
sb.append(filter.getMessage());
String filterMessage = filter.getMessage();
sb.append(filterMessage);
switch (this.targetController) {
case YOU:
sb.append(" you cast");
break;
case OPPONENT:
sb.append(" your opponents cast");
if (!filterMessage.contains("your opponents cast")) {
sb.append(" your opponents cast");
}
break;
case ACTIVE:
sb.append(" the active player casts");