From 35a22527f1bc0c862ad4024007e48695e89d99d0 Mon Sep 17 00:00:00 2001 From: xenohedron Date: Thu, 4 Apr 2024 23:03:58 -0400 Subject: [PATCH] another batch of text fixes --- Mage.Sets/src/mage/cards/b/BiteDownOnCrime.java | 5 +---- Mage.Sets/src/mage/cards/b/BristlebudFarmer.java | 2 +- Mage.Sets/src/mage/cards/e/Entomb.java | 2 +- Mage.Sets/src/mage/cards/f/FleetingReflection.java | 2 +- Mage.Sets/src/mage/cards/f/FortuneLoyalSteed.java | 6 ++---- Mage.Sets/src/mage/cards/g/GeralfTheFleshwright.java | 4 ++-- Mage.Sets/src/mage/cards/g/GravebreakerLamia.java | 3 +-- Mage.Sets/src/mage/cards/i/InventiveWingsmith.java | 2 +- Mage.Sets/src/mage/cards/i/IrascibleWolverine.java | 5 ++++- Mage.Sets/src/mage/cards/l/LivelyDirge.java | 2 +- Mage.Sets/src/mage/cards/m/MetamorphicBlast.java | 3 ++- Mage.Sets/src/mage/cards/m/MournersSurprise.java | 2 +- Mage.Sets/src/mage/cards/m/MysticalTether.java | 2 +- Mage.Sets/src/mage/cards/o/OneLastJob.java | 6 +++--- Mage.Sets/src/mage/cards/r/RamblingPossum.java | 2 +- Mage.Sets/src/mage/cards/r/RikuOfManyPaths.java | 3 ++- Mage.Sets/src/mage/cards/s/StubbornBurrowfiend.java | 5 +++-- Mage.Sets/src/mage/cards/t/ThrowFromTheSaddle.java | 4 ++-- Mage.Sets/src/mage/cards/t/TinybonesJoinsUp.java | 3 ++- Mage.Sets/src/mage/cards/v/VileEntomber.java | 2 +- .../effects/common/LoseHalfLifeTargetEffect.java | 12 ++++++++++-- .../effects/common/MillThenPutInHandEffect.java | 2 +- .../common/continuous/AddCardSubtypeAllEffect.java | 4 ++++ .../search/SearchLibraryPutInGraveyardEffect.java | 7 ++++--- .../abilities/keyword/CollectEvidenceAbility.java | 5 ++++- Mage/src/main/java/mage/constants/SubType.java | 5 +++++ .../mage/target/common/TargetNonlandPermanent.java | 2 +- 27 files changed, 62 insertions(+), 40 deletions(-) diff --git a/Mage.Sets/src/mage/cards/b/BiteDownOnCrime.java b/Mage.Sets/src/mage/cards/b/BiteDownOnCrime.java index 17408d3d23b..98e460eadb2 100644 --- a/Mage.Sets/src/mage/cards/b/BiteDownOnCrime.java +++ b/Mage.Sets/src/mage/cards/b/BiteDownOnCrime.java @@ -6,7 +6,6 @@ import mage.abilities.costs.CostAdjuster; import mage.abilities.costs.OptionalAdditionalCost; import mage.abilities.effects.Effect; import mage.abilities.effects.common.DamageWithPowerFromOneToAnotherTargetEffect; -import mage.abilities.effects.common.InfoEffect; import mage.abilities.effects.common.continuous.BoostTargetEffect; import mage.abilities.keyword.CollectEvidenceAbility; import mage.cards.CardImpl; @@ -31,9 +30,7 @@ public final class BiteDownOnCrime extends CardImpl { super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{3}{G}"); // As an additional cost to cast this spell, you may collect evidence 6. This spell costs {2} less to cast if evidence was collected. - this.addAbility(new CollectEvidenceAbility(6)); - - this.getSpellAbility().addEffect(new InfoEffect("this spell costs {2} less to cast if evidence was collected")); + this.addAbility(new CollectEvidenceAbility(6,"This spell costs {2} less to cast if evidence was collected")); this.getSpellAbility().setCostAdjuster(BiteDownOnCrimeAdjuster.instance); // Target creature you control gets +2/+0 until end of turn. diff --git a/Mage.Sets/src/mage/cards/b/BristlebudFarmer.java b/Mage.Sets/src/mage/cards/b/BristlebudFarmer.java index 380daa4d80b..167583e9e21 100644 --- a/Mage.Sets/src/mage/cards/b/BristlebudFarmer.java +++ b/Mage.Sets/src/mage/cards/b/BristlebudFarmer.java @@ -38,7 +38,7 @@ public final class BristlebudFarmer extends CardImpl { // Whenever Bristlebud Farmer attacks, you may sacrifice a Food. If you do, mill three cards. You may put a permanent card from among them into your hand. this.addAbility(new AttacksTriggeredAbility(new DoIfCostPaid( - new MillThenPutInHandEffect(3, StaticFilters.FILTER_CARD_PERMANENT), + new MillThenPutInHandEffect(3, StaticFilters.FILTER_CARD_A_PERMANENT).withTextOptions("them"), new SacrificeTargetCost(StaticFilters.FILTER_CONTROLLED_FOOD) ))); } diff --git a/Mage.Sets/src/mage/cards/e/Entomb.java b/Mage.Sets/src/mage/cards/e/Entomb.java index aeff5ad3242..4517331235d 100644 --- a/Mage.Sets/src/mage/cards/e/Entomb.java +++ b/Mage.Sets/src/mage/cards/e/Entomb.java @@ -16,7 +16,7 @@ public final class Entomb extends CardImpl { super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{B}"); // Search your library for a card and put that card into your graveyard. Then shuffle your library. - this.getSpellAbility().addEffect(new SearchLibraryPutInGraveyardEffect()); + this.getSpellAbility().addEffect(new SearchLibraryPutInGraveyardEffect(true)); } private Entomb(final Entomb card) { diff --git a/Mage.Sets/src/mage/cards/f/FleetingReflection.java b/Mage.Sets/src/mage/cards/f/FleetingReflection.java index 85ae0aa4047..6f0fa97ed61 100644 --- a/Mage.Sets/src/mage/cards/f/FleetingReflection.java +++ b/Mage.Sets/src/mage/cards/f/FleetingReflection.java @@ -38,7 +38,7 @@ public final class FleetingReflection extends CardImpl { this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent().setTargetTag(1)); this.getSpellAbility().addTarget(new TargetCreaturePermanent(0, 1, filter, false).setTargetTag(2)); this.getSpellAbility().addEffect(new GainAbilityTargetEffect(HexproofAbility.getInstance(), Duration.EndOfTurn)); - this.getSpellAbility().addEffect(new UntapTargetEffect()); + this.getSpellAbility().addEffect(new UntapTargetEffect().setText("Untap that creature")); this.getSpellAbility().addEffect(new FleetingReflectionEffect()); } diff --git a/Mage.Sets/src/mage/cards/f/FortuneLoyalSteed.java b/Mage.Sets/src/mage/cards/f/FortuneLoyalSteed.java index 5b08cd4f2cf..b9ed19dcdec 100644 --- a/Mage.Sets/src/mage/cards/f/FortuneLoyalSteed.java +++ b/Mage.Sets/src/mage/cards/f/FortuneLoyalSteed.java @@ -49,7 +49,7 @@ public final class FortuneLoyalSteed extends CardImpl { // Whenever Fortune attacks while saddled, at end of combat, exile it and up to one creature that saddled it this turn, then return those cards to the battlefield under their owner's control. this.addAbility(new AttacksWhileSaddledTriggeredAbility(new CreateDelayedTriggeredAbilityEffect( - new AtTheEndOfCombatDelayedTriggeredAbility(new FortuneLoyalSteedEffect()) + new AtTheEndOfCombatDelayedTriggeredAbility(new FortuneLoyalSteedEffect()).setTriggerPhrase("at end of combat") ))); // Saddle 1 @@ -101,9 +101,7 @@ class FortuneLoyalSteedEffect extends OneShotEffect { player.choose(outcome, target, source, game); permanents.add(game.getPermanent(target.getFirstTarget())); permanents.removeIf(Objects::isNull); - return permanents.isEmpty() - ? false - : new ExileThenReturnTargetEffect(false, false) + return !permanents.isEmpty() && new ExileThenReturnTargetEffect(false, false) .setTargetPointer(new FixedTargets(permanents, game)) .apply(game, source); } diff --git a/Mage.Sets/src/mage/cards/g/GeralfTheFleshwright.java b/Mage.Sets/src/mage/cards/g/GeralfTheFleshwright.java index 5f6a40b7c5e..c4c179a2eac 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 thhat turn, "); + setTriggerPhrase("Whenever you cast a spell during your turn other than your first spell that turn, "); } private GeralfTheFleshwrightTriggeredAbility(final GeralfTheFleshwrightTriggeredAbility ability) { @@ -208,4 +208,4 @@ class GeralfTheFleshwrightEffect extends OneShotEffect { } return true; } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/g/GravebreakerLamia.java b/Mage.Sets/src/mage/cards/g/GravebreakerLamia.java index c4914b0d7f1..24127391333 100644 --- a/Mage.Sets/src/mage/cards/g/GravebreakerLamia.java +++ b/Mage.Sets/src/mage/cards/g/GravebreakerLamia.java @@ -40,8 +40,7 @@ public final class GravebreakerLamia extends CardImpl { this.addAbility(LifelinkAbility.getInstance()); // When Gravebreaker Lamia enters the battlefield, search your library for a card, put it into your graveyard, then shuffle your library. - this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInGraveyardEffect() - .setText("search your library for a card, put it into your graveyard, then shuffle"), false)); + this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInGraveyardEffect(false), false)); // Spells you cast from your graveyard cost {1} less to cast. this.addAbility(new SimpleStaticAbility(new SpellsCostReductionControllerEffect(filter, 1))); diff --git a/Mage.Sets/src/mage/cards/i/InventiveWingsmith.java b/Mage.Sets/src/mage/cards/i/InventiveWingsmith.java index a760254efc7..592978c318f 100644 --- a/Mage.Sets/src/mage/cards/i/InventiveWingsmith.java +++ b/Mage.Sets/src/mage/cards/i/InventiveWingsmith.java @@ -40,7 +40,7 @@ public final class InventiveWingsmith extends CardImpl { this.addAbility(new BeginningOfEndStepTriggeredAbility( Zone.BATTLEFIELD, new AddCountersSourceEffect(CounterType.FLYING.createInstance()), TargetController.YOU, condition, false - ).addHint(HaventCastSpellFromHandThisTurnCondition.hint)); + ).withRuleTextReplacement(true).addHint(HaventCastSpellFromHandThisTurnCondition.hint)); } private InventiveWingsmith(final InventiveWingsmith card) { diff --git a/Mage.Sets/src/mage/cards/i/IrascibleWolverine.java b/Mage.Sets/src/mage/cards/i/IrascibleWolverine.java index ce1f26af64c..24bc28ea2de 100644 --- a/Mage.Sets/src/mage/cards/i/IrascibleWolverine.java +++ b/Mage.Sets/src/mage/cards/i/IrascibleWolverine.java @@ -25,7 +25,10 @@ public final class IrascibleWolverine extends CardImpl { this.toughness = new MageInt(2); // When Irascible Wolverine enters the battlefield, exile the top card of your library. Until end of turn, you may play that card. - this.addAbility(new EntersBattlefieldTriggeredAbility(new ExileTopXMayPlayUntilEffect(1, Duration.EndOfTurn))); + this.addAbility(new EntersBattlefieldTriggeredAbility( + new ExileTopXMayPlayUntilEffect(1, Duration.EndOfTurn) + .withTextOptions("that card", false) + )); // Plot {2}{R} this.addAbility(new PlotAbility("{2}{R}")); diff --git a/Mage.Sets/src/mage/cards/l/LivelyDirge.java b/Mage.Sets/src/mage/cards/l/LivelyDirge.java index 20654a2bb55..dd73357b2e5 100644 --- a/Mage.Sets/src/mage/cards/l/LivelyDirge.java +++ b/Mage.Sets/src/mage/cards/l/LivelyDirge.java @@ -33,7 +33,7 @@ public final class LivelyDirge extends CardImpl { this.addAbility(new SpreeAbility(this)); // + {1} -- Search your library for a card, put it into your graveyard, then shuffle. - this.getSpellAbility().addEffect(new SearchLibraryPutInGraveyardEffect()); + this.getSpellAbility().addEffect(new SearchLibraryPutInGraveyardEffect(false)); this.getSpellAbility().withFirstModeCost(new GenericManaCost(1)); // + {2} -- Return up to two creature cards with total mana value 4 or less from your graveyard to the battlefield. diff --git a/Mage.Sets/src/mage/cards/m/MetamorphicBlast.java b/Mage.Sets/src/mage/cards/m/MetamorphicBlast.java index ae30b2d8617..6ad8f0b793e 100644 --- a/Mage.Sets/src/mage/cards/m/MetamorphicBlast.java +++ b/Mage.Sets/src/mage/cards/m/MetamorphicBlast.java @@ -30,7 +30,8 @@ public final class MetamorphicBlast extends CardImpl { // + {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" - ).withSubType(SubType.RABBIT).withColor("W"), false, false, Duration.EndOfTurn)); + ).withSubType(SubType.RABBIT).withColor("W"), false, false, Duration.EndOfTurn) + .withDurationRuleAtStart(true)); this.getSpellAbility().addTarget(new TargetCreaturePermanent()); this.getSpellAbility().withFirstModeCost(new GenericManaCost(1)); diff --git a/Mage.Sets/src/mage/cards/m/MournersSurprise.java b/Mage.Sets/src/mage/cards/m/MournersSurprise.java index 2aa637f24bd..958e3be8029 100644 --- a/Mage.Sets/src/mage/cards/m/MournersSurprise.java +++ b/Mage.Sets/src/mage/cards/m/MournersSurprise.java @@ -22,7 +22,7 @@ public final class MournersSurprise extends CardImpl { // Return up to one target creature card from your graveyard to your hand. Create a 1/1 red Mercenary creature token with "{T}: Target creature you control gets +1/+0 until end of turn. Activate only as a sorcery." this.getSpellAbility().addEffect(new ReturnFromGraveyardToHandTargetEffect()); this.getSpellAbility().addEffect(new CreateTokenEffect(new MercenaryToken())); - this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD)); + this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(0, 1, StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD)); } private MournersSurprise(final MournersSurprise card) { diff --git a/Mage.Sets/src/mage/cards/m/MysticalTether.java b/Mage.Sets/src/mage/cards/m/MysticalTether.java index e2a7884c151..e1af5168013 100644 --- a/Mage.Sets/src/mage/cards/m/MysticalTether.java +++ b/Mage.Sets/src/mage/cards/m/MysticalTether.java @@ -22,7 +22,7 @@ public final class MysticalTether extends CardImpl { super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{W}"); // You may cast Mystical Tether as though it had flash if you pay {2} more to cast it. - this.addAbility(new PayMoreToCastAsThoughtItHadFlashAbility(this, new ManaCostsImpl<>("{2}{W}")).setRuleAtTheTop(true)); + this.addAbility(new PayMoreToCastAsThoughtItHadFlashAbility(this, new ManaCostsImpl<>("{2}")).setRuleAtTheTop(true)); // When Mystical Tether enters the battlefield, exile target artifact or creature an opponent controls until Mystical Tether leaves the battlefield. Ability ability = new EntersBattlefieldTriggeredAbility(new ExileUntilSourceLeavesEffect()); diff --git a/Mage.Sets/src/mage/cards/o/OneLastJob.java b/Mage.Sets/src/mage/cards/o/OneLastJob.java index 30298136606..7bb09834455 100644 --- a/Mage.Sets/src/mage/cards/o/OneLastJob.java +++ b/Mage.Sets/src/mage/cards/o/OneLastJob.java @@ -35,7 +35,7 @@ import java.util.UUID; */ public final class OneLastJob extends CardImpl { - private static final FilterCard filter = new FilterCard("Mount or Vehicle card"); + private static final FilterCard filter = new FilterCard("Mount or Vehicle card from your graveyard"); private static final FilterCard filter2 = new FilterCard("Aura or Equipment card"); static { @@ -51,7 +51,7 @@ public final class OneLastJob extends CardImpl { // + {2} -- Return target creature card from your graveyard to the battlefield. this.getSpellAbility().addEffect(new ReturnFromGraveyardToBattlefieldTargetEffect()); - this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE)); + this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD)); this.getSpellAbility().withFirstModeCost(new GenericManaCost(2)); // + {1} -- Return target Mount or Vehicle card from your graveyard to the battlefield. @@ -140,4 +140,4 @@ class OneLastJobEffect extends OneShotEffect { controller.moveCards(cardToReturn, Zone.BATTLEFIELD, source, game); return true; } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/r/RamblingPossum.java b/Mage.Sets/src/mage/cards/r/RamblingPossum.java index 83ab173cced..7694b337ed3 100644 --- a/Mage.Sets/src/mage/cards/r/RamblingPossum.java +++ b/Mage.Sets/src/mage/cards/r/RamblingPossum.java @@ -66,7 +66,7 @@ class RamblingPossumEffect extends OneShotEffect { RamblingPossumEffect() { super(Outcome.Benefit); - staticText = "then you may return any number of creatures that saddled it this turn to their owner's hand"; + staticText = "Then you may return any number of creatures that saddled it this turn to their owner's hand"; } private RamblingPossumEffect(final RamblingPossumEffect effect) { diff --git a/Mage.Sets/src/mage/cards/r/RikuOfManyPaths.java b/Mage.Sets/src/mage/cards/r/RikuOfManyPaths.java index b5cc995ff0b..7145f8eb16b 100644 --- a/Mage.Sets/src/mage/cards/r/RikuOfManyPaths.java +++ b/Mage.Sets/src/mage/cards/r/RikuOfManyPaths.java @@ -53,7 +53,8 @@ public final class RikuOfManyPaths extends CardImpl { class RikuOfManyPathsTriggeredAbility extends TriggeredAbilityImpl { RikuOfManyPathsTriggeredAbility() { - super(Zone.BATTLEFIELD, new ExileTopXMayPlayUntilEffect(1, Duration.UntilEndOfYourNextTurn)); + super(Zone.BATTLEFIELD, new ExileTopXMayPlayUntilEffect(1, Duration.UntilEndOfYourNextTurn) + .withTextOptions("it", false)); this.setTriggerPhrase("Whenever you cast a modal spell, "); this.getModes().setChooseText("choose up to X, where X is the number of times you chose a mode for that spell —"); this.addMode(new Mode(new AddCountersSourceEffect(CounterType.P1P1.createInstance())) diff --git a/Mage.Sets/src/mage/cards/s/StubbornBurrowfiend.java b/Mage.Sets/src/mage/cards/s/StubbornBurrowfiend.java index 0f107c0c4e1..22d914d4118 100644 --- a/Mage.Sets/src/mage/cards/s/StubbornBurrowfiend.java +++ b/Mage.Sets/src/mage/cards/s/StubbornBurrowfiend.java @@ -42,7 +42,8 @@ public final class StubbornBurrowfiend extends CardImpl { // Whenever Stubborn Burrowfiend becomes saddled for the first time each turn, mill two cards, then Stubborn Burrowfiend gets +X/+X until end of turn, where X is the number of creature cards in your graveyard. Ability ability = new StubbornBurrowfiendTriggeredAbility(new MillCardsControllerEffect(2)); - ability.addEffect(new BoostSourceEffect(xValue, xValue, Duration.EndOfTurn)); + ability.addEffect(new BoostSourceEffect(xValue, xValue, Duration.EndOfTurn) + .setText(", then {this} gets +X/+X until end of turn, where X is the number of creature cards in your graveyard")); ability.addHint(hint); this.addAbility(ability, new StubbornBurrowFiendWatcher()); @@ -94,7 +95,7 @@ class StubbornBurrowfiendTriggeredAbility extends TriggeredAbilityImpl { StubbornBurrowfiendTriggeredAbility(Effect effect) { super(Zone.BATTLEFIELD, effect, false); - setTriggerPhrase("When {this} becomes saddled for the first time this turn, "); + setTriggerPhrase("Whenever {this} becomes saddled for the first time each turn, "); } private StubbornBurrowfiendTriggeredAbility(final StubbornBurrowfiendTriggeredAbility ability) { diff --git a/Mage.Sets/src/mage/cards/t/ThrowFromTheSaddle.java b/Mage.Sets/src/mage/cards/t/ThrowFromTheSaddle.java index 16e87668ce4..e010cdcca59 100644 --- a/Mage.Sets/src/mage/cards/t/ThrowFromTheSaddle.java +++ b/Mage.Sets/src/mage/cards/t/ThrowFromTheSaddle.java @@ -31,7 +31,7 @@ public final class ThrowFromTheSaddle extends CardImpl { this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent()); this.getSpellAbility().addTarget(new TargetCreaturePermanent(StaticFilters.FILTER_CREATURE_YOU_DONT_CONTROL)); this.getSpellAbility().addEffect(new ThrowFromTheSaddleEffect()); - this.getSpellAbility().addEffect(new DamageWithPowerFromOneToAnotherTargetEffect().concatBy("Then")); + this.getSpellAbility().addEffect(new DamageWithPowerFromOneToAnotherTargetEffect("it").concatBy("Then")); } private ThrowFromTheSaddle(final ThrowFromTheSaddle card) { @@ -79,4 +79,4 @@ class ThrowFromTheSaddleEffect extends OneShotEffect { return true; } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/t/TinybonesJoinsUp.java b/Mage.Sets/src/mage/cards/t/TinybonesJoinsUp.java index 00c6b96c299..3d9ce8c04b7 100644 --- a/Mage.Sets/src/mage/cards/t/TinybonesJoinsUp.java +++ b/Mage.Sets/src/mage/cards/t/TinybonesJoinsUp.java @@ -32,7 +32,8 @@ public final class TinybonesJoinsUp extends CardImpl { this.supertype.add(SuperType.LEGENDARY); // When Tinybones Joins Up enters the battlefield, any number of target players each discard a card. - Ability ability = new EntersBattlefieldTriggeredAbility(new DiscardTargetEffect(1)); + Ability ability = new EntersBattlefieldTriggeredAbility(new DiscardTargetEffect(1) + .setText("any number of target players each discard a card")); ability.addTarget(new TargetPlayer(0, Integer.MAX_VALUE, false)); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/v/VileEntomber.java b/Mage.Sets/src/mage/cards/v/VileEntomber.java index 144ad9a5c6c..d338cd86553 100644 --- a/Mage.Sets/src/mage/cards/v/VileEntomber.java +++ b/Mage.Sets/src/mage/cards/v/VileEntomber.java @@ -28,7 +28,7 @@ public final class VileEntomber extends CardImpl { this.addAbility(DeathtouchAbility.getInstance()); // When Vile Entomber enters the battlefield, search your library for a card, put that card into your graveyard, then shuffle. - this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInGraveyardEffect())); + this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInGraveyardEffect(true))); } private VileEntomber(final VileEntomber card) { diff --git a/Mage/src/main/java/mage/abilities/effects/common/LoseHalfLifeTargetEffect.java b/Mage/src/main/java/mage/abilities/effects/common/LoseHalfLifeTargetEffect.java index 783bd56dfaa..ffe07705f58 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/LoseHalfLifeTargetEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/LoseHalfLifeTargetEffect.java @@ -2,6 +2,7 @@ package mage.abilities.effects.common; import mage.abilities.Ability; +import mage.abilities.Mode; import mage.abilities.effects.OneShotEffect; import mage.constants.Outcome; import mage.game.Game; @@ -14,7 +15,6 @@ public class LoseHalfLifeTargetEffect extends OneShotEffect { public LoseHalfLifeTargetEffect() { super(Outcome.Damage); - staticText = "that player loses half their life, rounded up"; } protected LoseHalfLifeTargetEffect(final LoseHalfLifeTargetEffect effect) { @@ -30,7 +30,7 @@ public class LoseHalfLifeTargetEffect extends OneShotEffect { public boolean apply(Game game, Ability source) { Player player = game.getPlayer(getTargetPointer().getFirst(game, source)); if (player != null) { - Integer amount = (int) Math.ceil(player.getLife() / 2f); + int amount = (int) Math.ceil(player.getLife() / 2f); if (amount > 0) { player.loseLife(amount, game, source, false); return true; @@ -38,4 +38,12 @@ public class LoseHalfLifeTargetEffect extends OneShotEffect { } return false; } + + @Override + public String getText(Mode mode) { + if (staticText != null && !staticText.isEmpty()) { + return staticText; + } + return getTargetPointer().describeTargets(mode.getTargets(), "that player") + " loses half their life, rounded up"; + } } diff --git a/Mage/src/main/java/mage/abilities/effects/common/MillThenPutInHandEffect.java b/Mage/src/main/java/mage/abilities/effects/common/MillThenPutInHandEffect.java index 6fe59413224..343b77ea07b 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/MillThenPutInHandEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/MillThenPutInHandEffect.java @@ -138,7 +138,7 @@ public class MillThenPutInHandEffect extends OneShotEffect { sb.append("put "); if (maxAmountReturned > 1) { sb.append(optional ? "up to " : ""); - sb.append(CardUtil.numberToText(amount) + " "); + sb.append(CardUtil.numberToText(maxAmountReturned) + " "); } sb.append(filter.getMessage()); sb.append(" from among "); diff --git a/Mage/src/main/java/mage/abilities/effects/common/continuous/AddCardSubtypeAllEffect.java b/Mage/src/main/java/mage/abilities/effects/common/continuous/AddCardSubtypeAllEffect.java index f725618209d..526075f937a 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/continuous/AddCardSubtypeAllEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/continuous/AddCardSubtypeAllEffect.java @@ -15,10 +15,14 @@ public class AddCardSubtypeAllEffect extends ContinuousEffectImpl { private final FilterPermanent filter; private final SubType addedSubtype; + /** + * Note: must set text manually + */ public AddCardSubtypeAllEffect(FilterPermanent filter, SubType addedSubtype, DependencyType dependency) { super(Duration.WhileOnBattlefield, Layer.TypeChangingEffects_4, SubLayer.NA, Outcome.Benefit); this.filter = filter; this.addedSubtype = addedSubtype; + this.staticText = filter.getMessage() + " are " + addedSubtype.getPluralName() + " in addition to their other types"; addDependencyType(dependency); } diff --git a/Mage/src/main/java/mage/abilities/effects/common/search/SearchLibraryPutInGraveyardEffect.java b/Mage/src/main/java/mage/abilities/effects/common/search/SearchLibraryPutInGraveyardEffect.java index 97f250d04a6..03b09ed1a4c 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/search/SearchLibraryPutInGraveyardEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/search/SearchLibraryPutInGraveyardEffect.java @@ -14,9 +14,10 @@ import mage.target.common.TargetCardInLibrary; */ public class SearchLibraryPutInGraveyardEffect extends SearchEffect { - public SearchLibraryPutInGraveyardEffect() { + public SearchLibraryPutInGraveyardEffect(boolean textThatCard) { super(new TargetCardInLibrary(StaticFilters.FILTER_CARD), Outcome.Neutral); - staticText = "search your library for a card, put that card into your graveyard, then shuffle"; + staticText = "search your library for a card, put " + (textThatCard ? "that card" : "it") + + " into your graveyard, then shuffle"; } protected SearchLibraryPutInGraveyardEffect(final SearchLibraryPutInGraveyardEffect effect) { @@ -41,4 +42,4 @@ public class SearchLibraryPutInGraveyardEffect extends SearchEffect { return true; } -} \ No newline at end of file +} diff --git a/Mage/src/main/java/mage/abilities/keyword/CollectEvidenceAbility.java b/Mage/src/main/java/mage/abilities/keyword/CollectEvidenceAbility.java index a0883b671d1..d2fb0681fb7 100644 --- a/Mage/src/main/java/mage/abilities/keyword/CollectEvidenceAbility.java +++ b/Mage/src/main/java/mage/abilities/keyword/CollectEvidenceAbility.java @@ -41,9 +41,12 @@ public class CollectEvidenceAbility extends StaticAbility implements OptionalAdd } public CollectEvidenceAbility(int amount) { + this(amount, null); + } + public CollectEvidenceAbility(int amount, String extraInfoText) { super(Zone.STACK, null); this.additionalCost = makeCost(amount); - this.rule = additionalCost.getName() + ". " + additionalCost.getReminderText(); + this.rule = additionalCost.getName() + ". " + (extraInfoText == null ? "" : extraInfoText + ". ") + additionalCost.getReminderText(); this.setRuleAtTheTop(true); this.addHint(hint); this.amount = amount; diff --git a/Mage/src/main/java/mage/constants/SubType.java b/Mage/src/main/java/mage/constants/SubType.java index 551a4d608de..40d0087fbca 100644 --- a/Mage/src/main/java/mage/constants/SubType.java +++ b/Mage/src/main/java/mage/constants/SubType.java @@ -585,6 +585,11 @@ public enum SubType { return description; } + // note: does not account for irregular plurals + public String getPluralName() { + return description.endsWith("y") ? description.substring(0, description.length() - 1) + "ies" : description + 's'; + } + @Override public String toString() { return description; diff --git a/Mage/src/main/java/mage/target/common/TargetNonlandPermanent.java b/Mage/src/main/java/mage/target/common/TargetNonlandPermanent.java index f88ea4463d9..b5333668777 100644 --- a/Mage/src/main/java/mage/target/common/TargetNonlandPermanent.java +++ b/Mage/src/main/java/mage/target/common/TargetNonlandPermanent.java @@ -26,7 +26,7 @@ public class TargetNonlandPermanent extends TargetPermanent { } public TargetNonlandPermanent(int minNumTargets, int maxNumTargets, boolean notTarget) { - this(minNumTargets, maxNumTargets, StaticFilters.FILTER_PERMANENT_NON_LAND, notTarget); + this(minNumTargets, maxNumTargets, (maxNumTargets > 1 ? StaticFilters.FILTER_PERMANENTS_NON_LAND : StaticFilters.FILTER_PERMANENT_NON_LAND), notTarget); } public TargetNonlandPermanent(int minNumTargets, int maxNumTargets, FilterNonlandPermanent filter, boolean notTarget) {