From 73287e38786ffa2745e6b1aa12742bec701fb113 Mon Sep 17 00:00:00 2001 From: Susucre <34709007+Susucre@users.noreply.github.com> Date: Wed, 3 Apr 2024 22:24:53 +0200 Subject: [PATCH] [OTJ][BIG] Various Fixes (mostly Text) --- Mage.Sets/src/mage/cards/a/AnotherRound.java | 2 +- Mage.Sets/src/mage/cards/a/ArmoredArmadillo.java | 8 +++++--- Mage.Sets/src/mage/cards/a/AssimilationAegis.java | 4 ++-- Mage.Sets/src/mage/cards/a/AvenInterrupter.java | 2 +- Mage.Sets/src/mage/cards/c/CollectorsCage.java | 2 +- Mage.Sets/src/mage/cards/d/DanceOfTheTumbleweeds.java | 2 +- Mage.Sets/src/mage/cards/d/DuelistOfTheMind.java | 1 + Mage.Sets/src/mage/cards/g/GeralfTheFleshwright.java | 3 ++- Mage.Sets/src/mage/cards/k/KambalProfiteeringMayor.java | 3 +++ Mage.Sets/src/mage/cards/l/LilahUndefeatedSlickshot.java | 2 +- Mage.Sets/src/mage/cards/l/LonghornSharpshooter.java | 2 +- Mage.Sets/src/mage/cards/m/MetamorphicBlast.java | 3 +++ Mage.Sets/src/mage/cards/m/MirageMesa.java | 2 +- Mage.Sets/src/mage/cards/p/PitilessCarnage.java | 2 +- Mage.Sets/src/mage/cards/r/RiseOfTheVarmints.java | 2 +- Mage.Sets/src/mage/cards/s/SimulacrumSynthesizer.java | 2 +- Mage.Sets/src/mage/cards/s/SmugglersSurprise.java | 2 +- Mage.Sets/src/mage/cards/s/StingerbackTerror.java | 3 +-- Mage.Sets/src/mage/cards/s/StopCold.java | 2 +- Mage.Sets/src/mage/cards/t/TinybonesJoinsUp.java | 5 +++-- Mage.Sets/src/mage/cards/v/VaultPlunderer.java | 2 +- .../src/test/java/mage/verify/VerifyCardDataTest.java | 2 +- .../common/cost/SpellsCostIncreasingAllEffect.java | 7 +++++-- 23 files changed, 39 insertions(+), 26 deletions(-) diff --git a/Mage.Sets/src/mage/cards/a/AnotherRound.java b/Mage.Sets/src/mage/cards/a/AnotherRound.java index 39aad7a0469..7bc6ff5d281 100644 --- a/Mage.Sets/src/mage/cards/a/AnotherRound.java +++ b/Mage.Sets/src/mage/cards/a/AnotherRound.java @@ -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) { diff --git a/Mage.Sets/src/mage/cards/a/ArmoredArmadillo.java b/Mage.Sets/src/mage/cards/a/ArmoredArmadillo.java index 7fee71e977e..535ad5a0f9e 100644 --- a/Mage.Sets/src/mage/cards/a/ArmoredArmadillo.java +++ b/Mage.Sets/src/mage/cards/a/ArmoredArmadillo.java @@ -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) { diff --git a/Mage.Sets/src/mage/cards/a/AssimilationAegis.java b/Mage.Sets/src/mage/cards/a/AssimilationAegis.java index aceec649dcb..bb51f0d4341 100644 --- a/Mage.Sets/src/mage/cards/a/AssimilationAegis.java +++ b/Mage.Sets/src/mage/cards/a/AssimilationAegis.java @@ -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) { diff --git a/Mage.Sets/src/mage/cards/a/AvenInterrupter.java b/Mage.Sets/src/mage/cards/a/AvenInterrupter.java index 60cdf09124c..95cfe5a1ed4 100644 --- a/Mage.Sets/src/mage/cards/a/AvenInterrupter.java +++ b/Mage.Sets/src/mage/cards/a/AvenInterrupter.java @@ -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( diff --git a/Mage.Sets/src/mage/cards/c/CollectorsCage.java b/Mage.Sets/src/mage/cards/c/CollectorsCage.java index 34beff9893f..76e2dd62285 100644 --- a/Mage.Sets/src/mage/cards/c/CollectorsCage.java +++ b/Mage.Sets/src/mage/cards/c/CollectorsCage.java @@ -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()); diff --git a/Mage.Sets/src/mage/cards/d/DanceOfTheTumbleweeds.java b/Mage.Sets/src/mage/cards/d/DanceOfTheTumbleweeds.java index 4f984af6793..9a158a24685 100644 --- a/Mage.Sets/src/mage/cards/d/DanceOfTheTumbleweeds.java +++ b/Mage.Sets/src/mage/cards/d/DanceOfTheTumbleweeds.java @@ -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)); diff --git a/Mage.Sets/src/mage/cards/d/DuelistOfTheMind.java b/Mage.Sets/src/mage/cards/d/DuelistOfTheMind.java index 1c8d6eabef5..f3034f78410 100644 --- a/Mage.Sets/src/mage/cards/d/DuelistOfTheMind.java +++ b/Mage.Sets/src/mage/cards/d/DuelistOfTheMind.java @@ -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. diff --git a/Mage.Sets/src/mage/cards/g/GeralfTheFleshwright.java b/Mage.Sets/src/mage/cards/g/GeralfTheFleshwright.java index 99d85c23edc..5f6a40b7c5e 100644 --- a/Mage.Sets/src/mage/cards/g/GeralfTheFleshwright.java +++ b/Mage.Sets/src/mage/cards/g/GeralfTheFleshwright.java @@ -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) { diff --git a/Mage.Sets/src/mage/cards/k/KambalProfiteeringMayor.java b/Mage.Sets/src/mage/cards/k/KambalProfiteeringMayor.java index fc9169f919b..ae5d6c91e28 100644 --- a/Mage.Sets/src/mage/cards/k/KambalProfiteeringMayor.java +++ b/Mage.Sets/src/mage/cards/k/KambalProfiteeringMayor.java @@ -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 tokensIds = zEvent.getEvents() .stream() .filter(zce -> zce.getToZone() == Zone.BATTLEFIELD // keep enter the battlefield diff --git a/Mage.Sets/src/mage/cards/l/LilahUndefeatedSlickshot.java b/Mage.Sets/src/mage/cards/l/LilahUndefeatedSlickshot.java index 7924d1bfdfa..5f17d65ae2d 100644 --- a/Mage.Sets/src/mage/cards/l/LilahUndefeatedSlickshot.java +++ b/Mage.Sets/src/mage/cards/l/LilahUndefeatedSlickshot.java @@ -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."; } diff --git a/Mage.Sets/src/mage/cards/l/LonghornSharpshooter.java b/Mage.Sets/src/mage/cards/l/LonghornSharpshooter.java index 24ce06f80e6..014948b0369 100644 --- a/Mage.Sets/src/mage/cards/l/LonghornSharpshooter.java +++ b/Mage.Sets/src/mage/cards/l/LonghornSharpshooter.java @@ -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); diff --git a/Mage.Sets/src/mage/cards/m/MetamorphicBlast.java b/Mage.Sets/src/mage/cards/m/MetamorphicBlast.java index 4252782f89b..ae30b2d8617 100644 --- a/Mage.Sets/src/mage/cards/m/MetamorphicBlast.java +++ b/Mage.Sets/src/mage/cards/m/MetamorphicBlast.java @@ -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" diff --git a/Mage.Sets/src/mage/cards/m/MirageMesa.java b/Mage.Sets/src/mage/cards/m/MirageMesa.java index 79acdf83f04..92d3d6bb41e 100644 --- a/Mage.Sets/src/mage/cards/m/MirageMesa.java +++ b/Mage.Sets/src/mage/cards/m/MirageMesa.java @@ -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); diff --git a/Mage.Sets/src/mage/cards/p/PitilessCarnage.java b/Mage.Sets/src/mage/cards/p/PitilessCarnage.java index 9c5c21dedd5..54310f9c908 100644 --- a/Mage.Sets/src/mage/cards/p/PitilessCarnage.java +++ b/Mage.Sets/src/mage/cards/p/PitilessCarnage.java @@ -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) { diff --git a/Mage.Sets/src/mage/cards/r/RiseOfTheVarmints.java b/Mage.Sets/src/mage/cards/r/RiseOfTheVarmints.java index 45ce19edc63..e74d6392cca 100644 --- a/Mage.Sets/src/mage/cards/r/RiseOfTheVarmints.java +++ b/Mage.Sets/src/mage/cards/r/RiseOfTheVarmints.java @@ -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}")); diff --git a/Mage.Sets/src/mage/cards/s/SimulacrumSynthesizer.java b/Mage.Sets/src/mage/cards/s/SimulacrumSynthesizer.java index 8aa50d4a45b..11fca4d2a84 100644 --- a/Mage.Sets/src/mage/cards/s/SimulacrumSynthesizer.java +++ b/Mage.Sets/src/mage/cards/s/SimulacrumSynthesizer.java @@ -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); diff --git a/Mage.Sets/src/mage/cards/s/SmugglersSurprise.java b/Mage.Sets/src/mage/cards/s/SmugglersSurprise.java index 115fdfb429c..c62f9a50522 100644 --- a/Mage.Sets/src/mage/cards/s/SmugglersSurprise.java +++ b/Mage.Sets/src/mage/cards/s/SmugglersSurprise.java @@ -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)); diff --git a/Mage.Sets/src/mage/cards/s/StingerbackTerror.java b/Mage.Sets/src/mage/cards/s/StingerbackTerror.java index 8c6be9699be..dcef50e3f04 100644 --- a/Mage.Sets/src/mage/cards/s/StingerbackTerror.java +++ b/Mage.Sets/src/mage/cards/s/StingerbackTerror.java @@ -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} diff --git a/Mage.Sets/src/mage/cards/s/StopCold.java b/Mage.Sets/src/mage/cards/s/StopCold.java index aa9ebf9df45..9e4ba5d1425 100644 --- a/Mage.Sets/src/mage/cards/s/StopCold.java +++ b/Mage.Sets/src/mage/cards/s/StopCold.java @@ -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()); diff --git a/Mage.Sets/src/mage/cards/t/TinybonesJoinsUp.java b/Mage.Sets/src/mage/cards/t/TinybonesJoinsUp.java index 09c80f84802..00c6b96c299 100644 --- a/Mage.Sets/src/mage/cards/t/TinybonesJoinsUp.java +++ b/Mage.Sets/src/mage/cards/t/TinybonesJoinsUp.java @@ -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); } diff --git a/Mage.Sets/src/mage/cards/v/VaultPlunderer.java b/Mage.Sets/src/mage/cards/v/VaultPlunderer.java index 0c51d7f4c24..25d96b4c814 100644 --- a/Mage.Sets/src/mage/cards/v/VaultPlunderer.java +++ b/Mage.Sets/src/mage/cards/v/VaultPlunderer.java @@ -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); } diff --git a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java index f3b370ac07a..19041b3c468 100644 --- a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java +++ b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java @@ -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 diff --git a/Mage/src/main/java/mage/abilities/effects/common/cost/SpellsCostIncreasingAllEffect.java b/Mage/src/main/java/mage/abilities/effects/common/cost/SpellsCostIncreasingAllEffect.java index ae01a4f8cf7..492bd8ebc6e 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/cost/SpellsCostIncreasingAllEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/cost/SpellsCostIncreasingAllEffect.java @@ -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");