diff --git a/Mage.Sets/src/mage/cards/a/AcererakTheArchlich.java b/Mage.Sets/src/mage/cards/a/AcererakTheArchlich.java index 3ef3b906c9f..7e2a4356737 100644 --- a/Mage.Sets/src/mage/cards/a/AcererakTheArchlich.java +++ b/Mage.Sets/src/mage/cards/a/AcererakTheArchlich.java @@ -41,12 +41,10 @@ public final class AcererakTheArchlich extends CardImpl { this.toughness = new MageInt(5); // When Acererak the Archlich enters the battlefield, if you have not completed Tomb of Annihilation, return Acererak the Archlich to its owner's hand and venture into the dungeon. - Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnToHandSourceEffect(true).setText("return it to its owner's hand")) + Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnToHandSourceEffect(true)) .withInterveningIf(AcererakTheArchlichCondition.instance); ability.addEffect(new VentureIntoTheDungeonEffect().concatBy("and")); - ability.addHint(CurrentDungeonHint.instance); - ability.addHint(CompletedDungeonCondition.getHint()); - this.addAbility(ability, new CompletedDungeonWatcher()); + this.addAbility(ability.addHint(CurrentDungeonHint.instance).addHint(CompletedDungeonCondition.getHint()), new CompletedDungeonWatcher()); // Whenever Acererak the Archlich attacks, for each opponent, you create a 2/2 black Zombie creature token unless that player sacrifices a creature. this.addAbility(new AttacksTriggeredAbility(new AcererakTheArchlichEffect())); diff --git a/Mage.Sets/src/mage/cards/a/AdaptiveTrainingPost.java b/Mage.Sets/src/mage/cards/a/AdaptiveTrainingPost.java index 36f48cb6f75..b53f18cfd23 100644 --- a/Mage.Sets/src/mage/cards/a/AdaptiveTrainingPost.java +++ b/Mage.Sets/src/mage/cards/a/AdaptiveTrainingPost.java @@ -31,7 +31,7 @@ public final class AdaptiveTrainingPost extends CardImpl { this.addAbility(new SpellCastControllerTriggeredAbility( new AddCountersSourceEffect(CounterType.CHARGE.createInstance()), StaticFilters.FILTER_SPELL_AN_INSTANT_OR_SORCERY, false - ).withInterveningIf(condition)); + ).withInterveningIf(condition).withRuleTextReplacement(true)); // Remove three charge counters from this artifact: When you next cast an instant or sorcery spell this turn, copy it and you may choose new targets for the copy. this.addAbility(new SimpleActivatedAbility( diff --git a/Mage.Sets/src/mage/cards/a/AkutaBornOfAsh.java b/Mage.Sets/src/mage/cards/a/AkutaBornOfAsh.java index 44822285a72..7be6f3b471a 100644 --- a/Mage.Sets/src/mage/cards/a/AkutaBornOfAsh.java +++ b/Mage.Sets/src/mage/cards/a/AkutaBornOfAsh.java @@ -1,12 +1,12 @@ package mage.cards.a; import mage.MageInt; -import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility; import mage.abilities.condition.common.MoreCardsInHandThanOpponentsCondition; import mage.abilities.costs.common.SacrificeTargetCost; import mage.abilities.effects.common.DoIfCostPaid; import mage.abilities.effects.common.ReturnSourceFromGraveyardToBattlefieldEffect; import mage.abilities.keyword.HasteAbility; +import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; @@ -15,18 +15,14 @@ import mage.filter.common.FilterControlledPermanent; import java.util.UUID; /** - * * @author LevelX2 */ public final class AkutaBornOfAsh extends CardImpl { - private static final FilterControlledPermanent filterSwamp = new FilterControlledPermanent("a Swamp"); - static { - filterSwamp.add(SubType.SWAMP.getPredicate()); - } + private static final FilterControlledPermanent filterSwamp = new FilterControlledPermanent(SubType.SWAMP, "a Swamp"); public AkutaBornOfAsh(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{B}{B}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}{B}"); this.supertype.add(SuperType.LEGENDARY); this.subtype.add(SubType.SPIRIT); @@ -37,9 +33,14 @@ public final class AkutaBornOfAsh extends CardImpl { this.addAbility(HasteAbility.getInstance()); // At the beginning of your upkeep, if you have more cards in hand than each opponent, you may sacrifice a Swamp. If you do, return Akuta, Born of Ash from your graveyard to the battlefield. - this.addAbility(new BeginningOfUpkeepTriggeredAbility(Zone.GRAVEYARD, - TargetController.YOU, new DoIfCostPaid(new ReturnSourceFromGraveyardToBattlefieldEffect(), new SacrificeTargetCost(filterSwamp)), - false).withInterveningIf(MoreCardsInHandThanOpponentsCondition.instance)); + this.addAbility(new BeginningOfUpkeepTriggeredAbility( + Zone.GRAVEYARD, TargetController.YOU, + new DoIfCostPaid( + new ReturnSourceFromGraveyardToBattlefieldEffect() + .setText("return {this} from your graveyard to the battlefield"), + new SacrificeTargetCost(filterSwamp) + ), false + ).withInterveningIf(MoreCardsInHandThanOpponentsCondition.instance)); } private AkutaBornOfAsh(final AkutaBornOfAsh card) { diff --git a/Mage.Sets/src/mage/cards/b/BorealOutrider.java b/Mage.Sets/src/mage/cards/b/BorealOutrider.java index ea29e8c11d6..d220f910a7d 100644 --- a/Mage.Sets/src/mage/cards/b/BorealOutrider.java +++ b/Mage.Sets/src/mage/cards/b/BorealOutrider.java @@ -61,7 +61,7 @@ enum BorealOutriderCondition implements Condition { @Override public String toString() { - return "{S} of any of that spell's color was spent to cast it"; + return "{S} of any of that spell's colors was spent to cast it"; } } diff --git a/Mage.Sets/src/mage/cards/c/CurseOfTheCabal.java b/Mage.Sets/src/mage/cards/c/CurseOfTheCabal.java index eb06102b228..cb5eefc9879 100644 --- a/Mage.Sets/src/mage/cards/c/CurseOfTheCabal.java +++ b/Mage.Sets/src/mage/cards/c/CurseOfTheCabal.java @@ -104,7 +104,7 @@ class CurseOfTheCabalTriggeredAbilityConditionalDelay extends AddCountersSourceE public CurseOfTheCabalTriggeredAbilityConditionalDelay() { super(CounterType.TIME.createInstance(), StaticValue.get(2), false, true); - staticText = "that player may sacrifice a permanent. If the player does, put two time counters on {this}"; + staticText = "that player may sacrifice a permanent of their choice. If the player does, put two time counters on this card"; } @Override diff --git a/Mage.Sets/src/mage/cards/d/DarigaazReincarnated.java b/Mage.Sets/src/mage/cards/d/DarigaazReincarnated.java index 630fd95f02d..45f2e5e18aa 100644 --- a/Mage.Sets/src/mage/cards/d/DarigaazReincarnated.java +++ b/Mage.Sets/src/mage/cards/d/DarigaazReincarnated.java @@ -113,7 +113,7 @@ class DarigaazReincarnatedReturnEffect extends OneShotEffect { DarigaazReincarnatedReturnEffect() { super(Outcome.Benefit); - this.staticText = "remove an egg counter from it. Then if {this} has no egg counters on it, return it to the battlefield"; + this.staticText = "remove an egg counter from it. Then if this card has no egg counters on it, return it to the battlefield"; } private DarigaazReincarnatedReturnEffect(final DarigaazReincarnatedReturnEffect effect) { diff --git a/Mage.Sets/src/mage/cards/e/EowynShieldmaiden.java b/Mage.Sets/src/mage/cards/e/EowynShieldmaiden.java index 0f0b388d636..a8a82a056ab 100644 --- a/Mage.Sets/src/mage/cards/e/EowynShieldmaiden.java +++ b/Mage.Sets/src/mage/cards/e/EowynShieldmaiden.java @@ -79,6 +79,11 @@ enum EowynShieldmaidenCondition implements Condition { source.getSourcePermanentOrLKI(game), source.getControllerId()); } + + @Override + public String toString() { + return "another Human entered the battlefield under your control this turn"; + } } class EowynShieldmaidenWatcher extends Watcher { diff --git a/Mage.Sets/src/mage/cards/n/NetherSpirit.java b/Mage.Sets/src/mage/cards/n/NetherSpirit.java index d56d77917a4..77c06aec98b 100644 --- a/Mage.Sets/src/mage/cards/n/NetherSpirit.java +++ b/Mage.Sets/src/mage/cards/n/NetherSpirit.java @@ -33,7 +33,7 @@ public final class NetherSpirit extends CardImpl { // At the beginning of your upkeep, if Nether Spirit is the only creature card in your graveyard, you may return Nether Spirit to the battlefield. this.addAbility(new BeginningOfUpkeepTriggeredAbility(Zone.GRAVEYARD, - TargetController.YOU, new ReturnSourceFromGraveyardToBattlefieldEffect().setText("return {this} to the battlefield"), + TargetController.YOU, new ReturnSourceFromGraveyardToBattlefieldEffect().setText("return this card to the battlefield"), true).withInterveningIf(NetherSpiritCondition.instance)); } diff --git a/Mage.Sets/src/mage/cards/o/OchreJelly.java b/Mage.Sets/src/mage/cards/o/OchreJelly.java index 9893be1bf26..c14906a72d4 100644 --- a/Mage.Sets/src/mage/cards/o/OchreJelly.java +++ b/Mage.Sets/src/mage/cards/o/OchreJelly.java @@ -45,7 +45,7 @@ public final class OchreJelly extends CardImpl { this.addAbility(new DiesSourceTriggeredAbility(new CreateDelayedTriggeredAbilityEffect( new AtTheBeginOfNextEndStepDelayedTriggeredAbility(new OchreJellyEffect()) ).setText("create a token that's a copy of it at the beginning of the next end step. " + - "That token enters the battlefield with half that many +1/+1 counters on it, rounded down")) + "The token enters with half that many +1/+1 counters on it, rounded down")) .withInterveningIf(OchreJellyCondition.instance).withFlavorWord("Split")); } diff --git a/Mage.Sets/src/mage/cards/r/RoseCutthroatRaider.java b/Mage.Sets/src/mage/cards/r/RoseCutthroatRaider.java index 8bd014f9b2c..0144f57bf14 100644 --- a/Mage.Sets/src/mage/cards/r/RoseCutthroatRaider.java +++ b/Mage.Sets/src/mage/cards/r/RoseCutthroatRaider.java @@ -43,7 +43,9 @@ public final class RoseCutthroatRaider extends CardImpl { // Raid -- At end of combat on your turn, if you attacked this turn, create a Junk token for each opponent you attacked. this.addAbility(new EndOfCombatTriggeredAbility( - new CreateTokenEffect(new JunkToken(), AttackedThisTurnOpponentsCount.instance), TargetController.YOU, false + new CreateTokenEffect(new JunkToken(), AttackedThisTurnOpponentsCount.instance) + .setText("create a Junk token for each opponent you attacked"), + TargetController.YOU, false ).withInterveningIf(RaidCondition.instance).setAbilityWord(AbilityWord.RAID).addHint(AttackedThisTurnOpponentsCount.getHint()), new PlayersAttackedThisTurnWatcher()); // Whenever you sacrifice a Junk, add {R}. diff --git a/Mage.Sets/src/mage/cards/s/StarseerMentor.java b/Mage.Sets/src/mage/cards/s/StarseerMentor.java index 790287eef7d..a176893417c 100644 --- a/Mage.Sets/src/mage/cards/s/StarseerMentor.java +++ b/Mage.Sets/src/mage/cards/s/StarseerMentor.java @@ -50,7 +50,7 @@ public final class StarseerMentor extends CardImpl { new DiscardCardCost() ), "Sacrifice a nonland permanent or discard a card to prevent losing 3 life?" - ) + ).setText("target opponent loses 3 life unless they sacrifice a nonland permanent of their choice or discard a card") ).withInterveningIf(YouGainedOrLostLifeCondition.instance); ability.addTarget(new TargetOpponent()); this.addAbility(ability.addHint(YouGainedOrLostLifeCondition.getHint()), new PlayerGainedLifeWatcher()); diff --git a/Mage.Sets/src/mage/cards/t/TwistsAndTurns.java b/Mage.Sets/src/mage/cards/t/TwistsAndTurns.java index 04ef05a01f4..76c33e1b534 100644 --- a/Mage.Sets/src/mage/cards/t/TwistsAndTurns.java +++ b/Mage.Sets/src/mage/cards/t/TwistsAndTurns.java @@ -51,7 +51,7 @@ public final class TwistsAndTurns extends CardImpl { this.addAbility(new TransformAbility()); this.addAbility(new EntersBattlefieldControlledTriggeredAbility( new TransformSourceEffect(), StaticFilters.FILTER_LAND - ).withInterveningIf(condition)); + ).withInterveningIf(condition).setTriggerPhrase("When a land you control enters, ")); } private TwistsAndTurns(final TwistsAndTurns card) { diff --git a/Mage.Sets/src/mage/cards/v/VesselOfTheAllConsuming.java b/Mage.Sets/src/mage/cards/v/VesselOfTheAllConsuming.java index ab1e2184daa..a4ac3365a20 100644 --- a/Mage.Sets/src/mage/cards/v/VesselOfTheAllConsuming.java +++ b/Mage.Sets/src/mage/cards/v/VesselOfTheAllConsuming.java @@ -50,7 +50,7 @@ public final class VesselOfTheAllConsuming extends CardImpl { // Whenever Vessel of the All-Consuming deals damage to a player, if it has dealt 10 or more damage to that player this turn, they lose the game. this.addAbility(new DealsDamageToAPlayerTriggeredAbility( - new LoseGameTargetPlayerEffect(), false, true + new LoseGameTargetPlayerEffect().setText("they lose the game"), false, true ).withInterveningIf(VesselOfTheAllConsumingCondition.instance)); } diff --git a/Mage.Sets/src/mage/cards/w/WallOfResistance.java b/Mage.Sets/src/mage/cards/w/WallOfResistance.java index 1286a1bba54..0e06738f15d 100644 --- a/Mage.Sets/src/mage/cards/w/WallOfResistance.java +++ b/Mage.Sets/src/mage/cards/w/WallOfResistance.java @@ -40,7 +40,7 @@ public final class WallOfResistance extends CardImpl { this.addAbility(new BeginningOfEndStepTriggeredAbility( TargetController.ANY, new AddCountersSourceEffect(CounterType.P0P1.createInstance()), false, WallOfResistanceCondition.instance - )); + ).withRuleTextReplacement(true)); } private WallOfResistance(final WallOfResistance card) { diff --git a/Mage/src/main/java/mage/abilities/common/DiesCreatureTriggeredAbility.java b/Mage/src/main/java/mage/abilities/common/DiesCreatureTriggeredAbility.java index 7df6846dc67..30e3b9c6e58 100644 --- a/Mage/src/main/java/mage/abilities/common/DiesCreatureTriggeredAbility.java +++ b/Mage/src/main/java/mage/abilities/common/DiesCreatureTriggeredAbility.java @@ -12,6 +12,7 @@ import mage.game.Game; import mage.game.events.GameEvent; import mage.game.events.ZoneChangeEvent; import mage.target.targetpointer.FixedTarget; +import mage.util.CardUtil; /** * @author North @@ -52,12 +53,13 @@ public class DiesCreatureTriggeredAbility extends TriggeredAbilityImpl { public DiesCreatureTriggeredAbility(Zone zone, Effect effect, boolean optional, FilterPermanent filter, boolean setTargetPointer) { this(zone, effect, optional, filter, (setTargetPointer ? SetTargetPointer.PERMANENT : SetTargetPointer.NONE)); } + public DiesCreatureTriggeredAbility(Zone zone, Effect effect, boolean optional, FilterPermanent filter, SetTargetPointer setTargetPointer) { super(zone, effect, optional); this.filter = filter; this.setTargetPointer = setTargetPointer; setLeavesTheBattlefieldTrigger(true); - setTriggerPhrase("Whenever " + filter.getMessage() + (filter.getMessage().startsWith("one or more") ? " die, " : " dies, ")); + setTriggerPhrase("Whenever " + CardUtil.addArticle(filter.getMessage()) + (filter.getMessage().startsWith("one or more") ? " die, " : " dies, ")); } protected DiesCreatureTriggeredAbility(final DiesCreatureTriggeredAbility ability) { diff --git a/Mage/src/main/java/mage/abilities/common/EntersBattlefieldAttachToTarget.java b/Mage/src/main/java/mage/abilities/common/EntersBattlefieldAttachToTarget.java index d2f45004c13..91a0e644e63 100644 --- a/Mage/src/main/java/mage/abilities/common/EntersBattlefieldAttachToTarget.java +++ b/Mage/src/main/java/mage/abilities/common/EntersBattlefieldAttachToTarget.java @@ -16,7 +16,7 @@ public class EntersBattlefieldAttachToTarget extends EntersBattlefieldTriggeredA } public EntersBattlefieldAttachToTarget(FilterPermanent filter) { - super(new AttachEffect(Outcome.BoostCreature, "attach it to target " + filter.getMessage())); + super(new AttachEffect(Outcome.BoostCreature, "attach {this} to target " + filter.getMessage())); this.addTarget(new TargetPermanent(filter)); } diff --git a/Mage/src/main/java/mage/abilities/effects/CreateTokenCopySourceEffect.java b/Mage/src/main/java/mage/abilities/effects/CreateTokenCopySourceEffect.java index 1973604f84e..deebf3897d7 100644 --- a/Mage/src/main/java/mage/abilities/effects/CreateTokenCopySourceEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/CreateTokenCopySourceEffect.java @@ -29,7 +29,7 @@ public class CreateTokenCopySourceEffect extends OneShotEffect { this.number = copies; this.tapped = tapped; staticText = "create " + CardUtil.numberToText(copies, "a") + " " + (tapped ? "tapped " : "") - + (copies > 1 ? "tokens that are" : "token that's") + " a copy of {this}"; + + (copies > 1 ? "tokens that are copies of " : "token that's a copy of ") + "{this}"; } protected CreateTokenCopySourceEffect(final CreateTokenCopySourceEffect effect) { diff --git a/Mage/src/main/java/mage/abilities/effects/common/continuous/GainAbilityControllerEffect.java b/Mage/src/main/java/mage/abilities/effects/common/continuous/GainAbilityControllerEffect.java index cd961af75b6..50784744666 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/continuous/GainAbilityControllerEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/continuous/GainAbilityControllerEffect.java @@ -34,7 +34,7 @@ public class GainAbilityControllerEffect extends ContinuousEffectImpl { public GainAbilityControllerEffect(Ability ability, Duration duration) { super(duration, Layer.PlayerEffects, SubLayer.NA, Outcome.AddAbility); this.ability = ability; - staticText = "you " + (duration == Duration.WhileOnBattlefield ? "have" : "gain") + ability.getRule(); + staticText = "you " + (duration == Duration.WhileOnBattlefield ? "have" : "gain") + ' ' + ability.getRule(); if (!duration.toString().isEmpty()) { staticText += ' ' + duration.toString(); }