diff --git a/Mage.Sets/src/mage/cards/a/AcererakTheArchlich.java b/Mage.Sets/src/mage/cards/a/AcererakTheArchlich.java index d429f82da8c..3ef3b906c9f 100644 --- a/Mage.Sets/src/mage/cards/a/AcererakTheArchlich.java +++ b/Mage.Sets/src/mage/cards/a/AcererakTheArchlich.java @@ -41,7 +41,7 @@ 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)) + Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnToHandSourceEffect(true).setText("return it to its owner's hand")) .withInterveningIf(AcererakTheArchlichCondition.instance); ability.addEffect(new VentureIntoTheDungeonEffect().concatBy("and")); ability.addHint(CurrentDungeonHint.instance); @@ -83,7 +83,7 @@ class AcererakTheArchlichEffect extends OneShotEffect { AcererakTheArchlichEffect() { super(Outcome.Benefit); staticText = "for each opponent, you create a 2/2 black Zombie creature " + - "token unless that player sacrifices a creature"; + "token unless that player sacrifices a creature of their choice"; } private AcererakTheArchlichEffect(final AcererakTheArchlichEffect effect) { diff --git a/Mage.Sets/src/mage/cards/a/AerialSurveyor.java b/Mage.Sets/src/mage/cards/a/AerialSurveyor.java index 0aaed9d279b..b8199c1a008 100644 --- a/Mage.Sets/src/mage/cards/a/AerialSurveyor.java +++ b/Mage.Sets/src/mage/cards/a/AerialSurveyor.java @@ -84,7 +84,7 @@ enum AerialSurveyorCondition implements Condition { @Override public String toString() { - return ""; + return "defending player controls more lands than you"; } } diff --git a/Mage.Sets/src/mage/cards/a/AidFromTheCowl.java b/Mage.Sets/src/mage/cards/a/AidFromTheCowl.java index 3cd45e595ad..ade3ca20c8f 100644 --- a/Mage.Sets/src/mage/cards/a/AidFromTheCowl.java +++ b/Mage.Sets/src/mage/cards/a/AidFromTheCowl.java @@ -50,7 +50,7 @@ class AidFromTheCowlEffect extends OneShotEffect { AidFromTheCowlEffect() { super(Outcome.PutCreatureInPlay); this.staticText = "reveal the top card of your library. If it's a permanent card, " + - "you may put it onto the battlefield. Otherwise, you may put that card on the bottom of your library"; + "you may put it onto the battlefield. Otherwise, you may put it on the bottom of your library"; } private AidFromTheCowlEffect(final AidFromTheCowlEffect effect) { diff --git a/Mage.Sets/src/mage/cards/a/AlchemistsTalent.java b/Mage.Sets/src/mage/cards/a/AlchemistsTalent.java index 65dfb59a6c2..47f1f7f5c33 100644 --- a/Mage.Sets/src/mage/cards/a/AlchemistsTalent.java +++ b/Mage.Sets/src/mage/cards/a/AlchemistsTalent.java @@ -66,7 +66,7 @@ public final class AlchemistsTalent extends CardImpl { new SpellCastControllerTriggeredAbility( new DamagePlayersEffect(AlchemistsTalentValue.instance, TargetController.OPPONENT) .setText("{this} deals damage equal to that spell's mana value to each opponent"), - StaticFilters.FILTER_SPELL, false, SetTargetPointer.SPELL + StaticFilters.FILTER_SPELL_A, false, SetTargetPointer.SPELL ).withInterveningIf(AlchemistsTalentCondition.instance), 3 ))); } diff --git a/Mage.Sets/src/mage/cards/a/AnaBattlemage.java b/Mage.Sets/src/mage/cards/a/AnaBattlemage.java index f33df1df178..00ab7cc91b6 100644 --- a/Mage.Sets/src/mage/cards/a/AnaBattlemage.java +++ b/Mage.Sets/src/mage/cards/a/AnaBattlemage.java @@ -76,7 +76,7 @@ class AnaBattlemageEffect extends OneShotEffect { AnaBattlemageEffect() { super(Outcome.Detriment); - this.staticText = "and it deals damage equal to its power to its controller"; + this.staticText = "and that creature deals damage equal to its power to its controller"; } private AnaBattlemageEffect(final AnaBattlemageEffect effect) { diff --git a/Mage.Sets/src/mage/cards/a/ArchmageAscension.java b/Mage.Sets/src/mage/cards/a/ArchmageAscension.java index 2ae3ec86cfd..3437c7391de 100644 --- a/Mage.Sets/src/mage/cards/a/ArchmageAscension.java +++ b/Mage.Sets/src/mage/cards/a/ArchmageAscension.java @@ -30,7 +30,7 @@ public final class ArchmageAscension extends CardImpl { // At the beginning of each end step, if you drew two or more cards this turn, you may put a quest counter on Archmage Ascension. this.addAbility(new BeginningOfEndStepTriggeredAbility( - TargetController.EACH_PLAYER, new AddCountersSourceEffect(CounterType.QUEST.createInstance()), + TargetController.ANY, new AddCountersSourceEffect(CounterType.QUEST.createInstance()), true, ArchmageAscensionCondition.instance ), new CardsAmountDrawnThisTurnWatcher()); diff --git a/Mage.Sets/src/mage/cards/a/ArdenAngel.java b/Mage.Sets/src/mage/cards/a/ArdenAngel.java index b67b4dc5947..2742b2f918f 100644 --- a/Mage.Sets/src/mage/cards/a/ArdenAngel.java +++ b/Mage.Sets/src/mage/cards/a/ArdenAngel.java @@ -49,7 +49,7 @@ class ArdenAngelEffect extends OneShotEffect { ArdenAngelEffect() { super(Outcome.Benefit); - this.staticText = "roll a four-sided die. If the result is 1, return {this} from your graveyard to the battlefield"; + this.staticText = "roll a four-sided die. If the result is 1, return this card from your graveyard to the battlefield"; } private ArdenAngelEffect(final ArdenAngelEffect effect) { diff --git a/Mage.Sets/src/mage/cards/a/AsylumVisitor.java b/Mage.Sets/src/mage/cards/a/AsylumVisitor.java index 3d01de1043e..2e9eafc3189 100644 --- a/Mage.Sets/src/mage/cards/a/AsylumVisitor.java +++ b/Mage.Sets/src/mage/cards/a/AsylumVisitor.java @@ -34,7 +34,7 @@ public final class AsylumVisitor extends CardImpl { // At the beginning of each player's upkeep, if that player has no cards in hand, you draw a card and you lose 1 life. Ability ability = new BeginningOfUpkeepTriggeredAbility( - TargetController.ANY, new DrawCardSourceControllerEffect(1, true), false + TargetController.EACH_PLAYER, new DrawCardSourceControllerEffect(1, true), false ).withInterveningIf(condition); ability.addEffect(new LoseLifeSourceControllerEffect(1).concatBy("and")); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/a/AuntiesSnitch.java b/Mage.Sets/src/mage/cards/a/AuntiesSnitch.java index cc27792c2ed..7f05cabec0f 100644 --- a/Mage.Sets/src/mage/cards/a/AuntiesSnitch.java +++ b/Mage.Sets/src/mage/cards/a/AuntiesSnitch.java @@ -44,7 +44,7 @@ public final class AuntiesSnitch extends CardImpl { // Whenever a Goblin or Rogue you control deals combat damage to a player, if Auntie's Snitch is in your graveyard, you may return Auntie's Snitch to your hand. this.addAbility(new DealsDamageToAPlayerAllTriggeredAbility(Zone.GRAVEYARD, - new ReturnSourceFromGraveyardToHandEffect().setText("return {this} to your hand"), + new ReturnSourceFromGraveyardToHandEffect().setText("return this card to your hand"), filter, true, SetTargetPointer.NONE, true, false ).withInterveningIf(SourceInGraveyardCondition.instance)); } diff --git a/Mage.Sets/src/mage/cards/b/BlizzardStrix.java b/Mage.Sets/src/mage/cards/b/BlizzardStrix.java index b412fd2f57f..f4b0f7f9fd5 100644 --- a/Mage.Sets/src/mage/cards/b/BlizzardStrix.java +++ b/Mage.Sets/src/mage/cards/b/BlizzardStrix.java @@ -52,7 +52,7 @@ public final class BlizzardStrix extends CardImpl { // When Blizzard Strix enters the battlefield, if you control another snow permanent, exile target permanent other than Blizzard Strix. Return that card to the battlefield under its owner's control at the beginning of the next end step. Ability ability = new EntersBattlefieldTriggeredAbility(new ExileReturnBattlefieldNextEndStepTargetEffect() .setText("exile target permanent other than {this}. Return that card to the " + - "battlefield under its owner's control at the beginning of the next end step")); + "battlefield under its owner's control at the beginning of the next end step")).withInterveningIf(condition); ability.addTarget(new TargetPermanent(filter)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/b/BloodOperative.java b/Mage.Sets/src/mage/cards/b/BloodOperative.java index 15708ace750..cfa2b514498 100644 --- a/Mage.Sets/src/mage/cards/b/BloodOperative.java +++ b/Mage.Sets/src/mage/cards/b/BloodOperative.java @@ -1,6 +1,5 @@ package mage.cards.b; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; @@ -18,8 +17,9 @@ import mage.constants.SubType; import mage.constants.Zone; import mage.target.common.TargetCardInGraveyard; +import java.util.UUID; + /** - * * @author LevelX2 */ public final class BloodOperative extends CardImpl { @@ -42,7 +42,7 @@ public final class BloodOperative extends CardImpl { // Whenever you surveil, if Blood Operative is in your graveyard, you may pay 3 life. If you do, return Blood Operative to your hand. this.addAbility(new SurveilTriggeredAbility(Zone.GRAVEYARD, new DoIfCostPaid( - new ReturnSourceFromGraveyardToHandEffect().setText("return {this} to your hand"), new PayLifeCost(3) + new ReturnSourceFromGraveyardToHandEffect().setText("return this card to your hand"), new PayLifeCost(3) )).withInterveningIf(SourceInGraveyardCondition.instance)); } diff --git a/Mage.Sets/src/mage/cards/b/BloodchiefAscension.java b/Mage.Sets/src/mage/cards/b/BloodchiefAscension.java index a93045dbc35..d67884081cd 100644 --- a/Mage.Sets/src/mage/cards/b/BloodchiefAscension.java +++ b/Mage.Sets/src/mage/cards/b/BloodchiefAscension.java @@ -38,7 +38,7 @@ public final class BloodchiefAscension extends CardImpl { // Whenever a card is put into an opponent's graveyard from anywhere, if Bloodchief Ascension has three or more quest counters on it, you may have that player lose 2 life. If you do, you gain 2 life. Ability ability = new PutCardIntoGraveFromAnywhereAllTriggeredAbility( - new LoseLifeTargetEffect(2), true, StaticFilters.FILTER_CARD_A, + new LoseLifeTargetEffect(2).setText("have that player lose 2 life"), true, StaticFilters.FILTER_CARD_A, TargetController.OPPONENT, SetTargetPointer.PLAYER ).withInterveningIf(condition); ability.addEffect(new GainLifeEffect(2).concatBy("If you do,")); diff --git a/Mage.Sets/src/mage/cards/b/BorealOutrider.java b/Mage.Sets/src/mage/cards/b/BorealOutrider.java index 94b9fd62674..ea29e8c11d6 100644 --- a/Mage.Sets/src/mage/cards/b/BorealOutrider.java +++ b/Mage.Sets/src/mage/cards/b/BorealOutrider.java @@ -69,6 +69,7 @@ class BorealOutriderEffect extends ReplacementEffectImpl { BorealOutriderEffect() { super(Duration.EndOfStep, Outcome.BoostCreature); + staticText = "that creature enters with an additional +1/+1 counter on it"; } private BorealOutriderEffect(BorealOutriderEffect effect) { diff --git a/Mage.Sets/src/mage/cards/b/BridgeFromBelow.java b/Mage.Sets/src/mage/cards/b/BridgeFromBelow.java index 0be4df74c26..6fc26f76090 100644 --- a/Mage.Sets/src/mage/cards/b/BridgeFromBelow.java +++ b/Mage.Sets/src/mage/cards/b/BridgeFromBelow.java @@ -1,8 +1,7 @@ package mage.cards.b; -import mage.abilities.TriggeredAbilityImpl; +import mage.abilities.common.DiesCreatureTriggeredAbility; import mage.abilities.condition.common.SourceInGraveyardCondition; -import mage.abilities.effects.Effect; import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.effects.common.ExileSourceEffect; import mage.cards.CardImpl; @@ -10,24 +9,20 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.TargetController; import mage.constants.Zone; +import mage.filter.FilterPermanent; import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.permanent.TokenPredicate; -import mage.game.Game; -import mage.game.events.GameEvent; -import mage.game.events.ZoneChangeEvent; -import mage.game.permanent.Permanent; import mage.game.permanent.token.ZombieToken; import java.util.UUID; /** - * * @author Plopman */ public final class BridgeFromBelow extends CardImpl { - private static final FilterCreaturePermanent filter1 = new FilterCreaturePermanent("Whenever a nontoken creature is put into your graveyard from the battlefield, "); - private static final FilterCreaturePermanent filter2 = new FilterCreaturePermanent("When a creature is put into an opponent's graveyard from the battlefield, "); + private static final FilterPermanent filter1 = new FilterCreaturePermanent(); + private static final FilterPermanent filter2 = new FilterCreaturePermanent(); static { filter1.add(TargetController.YOU.getOwnerPredicate()); @@ -39,11 +34,18 @@ public final class BridgeFromBelow extends CardImpl { super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{B}{B}{B}"); // Whenever a nontoken creature is put into your graveyard from the battlefield, if Bridge from Below is in your graveyard, create a 2/2 black Zombie creature token. - this.addAbility(new BridgeFromBelowAbility(new CreateTokenEffect(new ZombieToken()), filter1)); + this.addAbility(new DiesCreatureTriggeredAbility( + Zone.GRAVEYARD, new CreateTokenEffect(new ZombieToken()), + false, filter1, false + ).setTriggerPhrase("Whenever a nontoken creature is put into your graveyard from the battlefield, ") + .withInterveningIf(SourceInGraveyardCondition.instance)); // When a creature is put into an opponent's graveyard from the battlefield, if Bridge from Below is in your graveyard, exile Bridge from Below. - this.addAbility(new BridgeFromBelowAbility(new ExileSourceEffect(), filter2)); - + this.addAbility(new DiesCreatureTriggeredAbility( + Zone.GRAVEYARD, new ExileSourceEffect().setText("exile this card"), + false, filter2, false + ).setTriggerPhrase("When a creature is put into an opponent's graveyard from the battlefield, ") + .withInterveningIf(SourceInGraveyardCondition.instance)); } private BridgeFromBelow(final BridgeFromBelow card) { @@ -55,41 +57,3 @@ public final class BridgeFromBelow extends CardImpl { return new BridgeFromBelow(this); } } - -class BridgeFromBelowAbility extends TriggeredAbilityImpl { - - private final FilterCreaturePermanent filter; - - BridgeFromBelowAbility(Effect effect, FilterCreaturePermanent filter) { - super(Zone.GRAVEYARD, effect, false); - this.filter = filter; - this.withInterveningIf(SourceInGraveyardCondition.instance); - setTriggerPhrase(filter.getMessage()); - setLeavesTheBattlefieldTrigger(true); // it's not required for Bridge from Below, but better to keep same code style and verify pass - } - - private BridgeFromBelowAbility(final BridgeFromBelowAbility ability) { - super(ability); - this.filter = ability.filter; - } - - @Override - public BridgeFromBelowAbility copy() { - return new BridgeFromBelowAbility(this); - } - - @Override - public boolean checkEventType(GameEvent event, Game game) { - return event.getType() == GameEvent.EventType.ZONE_CHANGE; - } - - @Override - public boolean checkTrigger(GameEvent event, Game game) { - Permanent permanent = (Permanent) game.getLastKnownInformation(event.getTargetId(), Zone.BATTLEFIELD); - if (permanent == null || !((ZoneChangeEvent) event).isDiesEvent()) { - return false; - } - return filter.match(permanent, controllerId, this, game); - } - -} diff --git a/Mage.Sets/src/mage/cards/c/CleavingSkyrider.java b/Mage.Sets/src/mage/cards/c/CleavingSkyrider.java index 7641522e7d1..5ae8dcd5ad5 100644 --- a/Mage.Sets/src/mage/cards/c/CleavingSkyrider.java +++ b/Mage.Sets/src/mage/cards/c/CleavingSkyrider.java @@ -44,7 +44,7 @@ public final class CleavingSkyrider extends CardImpl { // When Cleaving Skyrider enters the battlefield, if it was kicked, it deals X damage to any target, where X is the number of attacking creatures. Ability ability = new EntersBattlefieldTriggeredAbility( - new DamageTargetEffect(xValue, "it") + new DamageTargetEffect(xValue, "it").setText("it deals X damage to any target, where X is the number of attacking creatures") ).withInterveningIf(KickedCondition.ONCE); ability.addTarget(new TargetAnyTarget()); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/c/CurseOfTheCabal.java b/Mage.Sets/src/mage/cards/c/CurseOfTheCabal.java index 9cb6f270e1e..eb06102b228 100644 --- a/Mage.Sets/src/mage/cards/c/CurseOfTheCabal.java +++ b/Mage.Sets/src/mage/cards/c/CurseOfTheCabal.java @@ -44,7 +44,7 @@ public final class CurseOfTheCabal extends CardImpl { // At the beginning of each player's upkeep, if Curse of the Cabal is suspended, that player may sacrifice a permanent. If they do, put two time counters on Curse of the Cabal. this.addAbility(new BeginningOfUpkeepTriggeredAbility( - Zone.EXILED, TargetController.ANY, new CurseOfTheCabalTriggeredAbilityConditionalDelay(), false + Zone.EXILED, TargetController.EACH_PLAYER, new CurseOfTheCabalTriggeredAbilityConditionalDelay(), false ).withInterveningIf(SuspendedCondition.instance)); } @@ -62,7 +62,7 @@ class CurseOfTheCabalSacrificeEffect extends OneShotEffect { CurseOfTheCabalSacrificeEffect() { super(Outcome.Sacrifice); - this.staticText = "Target player sacrifices half the permanents they control, rounded down."; + this.staticText = "Target player sacrifices half the permanents they control of their choice, rounded down."; } private CurseOfTheCabalSacrificeEffect(final CurseOfTheCabalSacrificeEffect effect) { diff --git a/Mage.Sets/src/mage/cards/d/DarigaazReincarnated.java b/Mage.Sets/src/mage/cards/d/DarigaazReincarnated.java index 822e14cdd9e..630fd95f02d 100644 --- a/Mage.Sets/src/mage/cards/d/DarigaazReincarnated.java +++ b/Mage.Sets/src/mage/cards/d/DarigaazReincarnated.java @@ -51,9 +51,9 @@ public final class DarigaazReincarnated extends CardImpl { this.addAbility(new SimpleStaticAbility(new DarigaazReincarnatedDiesEffect())); // At the beginning of your upkeep, if Darigaaz is exiled with an egg counter on it, remove an egg counter from it. Then if Darigaaz has no egg counters on it, return it to the battlefield. - Ability ability = new BeginningOfUpkeepTriggeredAbility( + this.addAbility(new BeginningOfUpkeepTriggeredAbility( Zone.EXILED, TargetController.YOU, new DarigaazReincarnatedReturnEffect(), false - ).withInterveningIf(DarigaazReincarnatedCondition.instance); + ).withInterveningIf(DarigaazReincarnatedCondition.instance)); } private DarigaazReincarnated(final DarigaazReincarnated card) { @@ -154,6 +154,6 @@ enum DarigaazReincarnatedCondition implements Condition { @Override public String toString() { - return "{this} is exiled with an egg counter on it"; + return "this card is exiled with an egg counter on it"; } } diff --git a/Mage.Sets/src/mage/cards/d/DeathSpark.java b/Mage.Sets/src/mage/cards/d/DeathSpark.java index 6975eb8aca6..a0a2ea34509 100644 --- a/Mage.Sets/src/mage/cards/d/DeathSpark.java +++ b/Mage.Sets/src/mage/cards/d/DeathSpark.java @@ -34,7 +34,7 @@ public final class DeathSpark extends CardImpl { // At the beginning of your upkeep, if Death Spark is in your graveyard with a creature card directly above it, you may pay {1}. If you do, return Death Spark to your hand. this.addAbility(new BeginningOfUpkeepTriggeredAbility( Zone.GRAVEYARD, TargetController.YOU, - new DoIfCostPaid(new ReturnSourceFromGraveyardToHandEffect(), new GenericManaCost(1)), false + new DoIfCostPaid(new ReturnSourceFromGraveyardToHandEffect().setText("return this card to your hand"), new GenericManaCost(1)), false ).withInterveningIf(DeathSparkCondition.instance)); } @@ -71,6 +71,6 @@ enum DeathSparkCondition implements Condition { @Override public String toString() { - return "{this} is in your graveyard with a creature card directly above it"; + return "this card is in your graveyard with a creature card directly above it"; } } diff --git a/Mage.Sets/src/mage/cards/d/DefenseOfTheHeart.java b/Mage.Sets/src/mage/cards/d/DefenseOfTheHeart.java index f3ce8f82c72..7278452a172 100644 --- a/Mage.Sets/src/mage/cards/d/DefenseOfTheHeart.java +++ b/Mage.Sets/src/mage/cards/d/DefenseOfTheHeart.java @@ -32,7 +32,7 @@ public final class DefenseOfTheHeart extends CardImpl { // At the beginning of your upkeep, if an opponent controls three or more creatures, sacrifice Defense of the Heart, search your library for up to two creature cards, and put those cards onto the battlefield. Then shuffle your library. Ability ability = new BeginningOfUpkeepTriggeredAbility(new SacrificeSourceEffect()).withInterveningIf(condition); ability.addEffect(new SearchLibraryPutInPlayEffect(new TargetCardInLibrary( - 2, StaticFilters.FILTER_CARD_CREATURES + 0, 2, StaticFilters.FILTER_CARD_CREATURES )).concatBy(",")); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/d/DenryKlinEditorInChief.java b/Mage.Sets/src/mage/cards/d/DenryKlinEditorInChief.java index 2f83f11f11e..94b6e76573d 100644 --- a/Mage.Sets/src/mage/cards/d/DenryKlinEditorInChief.java +++ b/Mage.Sets/src/mage/cards/d/DenryKlinEditorInChief.java @@ -3,7 +3,7 @@ package mage.cards.d; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldAbility; -import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility; +import mage.abilities.common.EntersBattlefieldAllTriggeredAbility; import mage.abilities.condition.common.SourceHasCountersCondition; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.counter.AddCounterChoiceSourceEffect; @@ -42,7 +42,7 @@ public class DenryKlinEditorInChief extends CardImpl { // Whenever a nontoken creature you control enters, // if Denry has counters on it, put the same number of each kind of counter on that creature. - this.addAbility(new EntersBattlefieldControlledTriggeredAbility( + this.addAbility(new EntersBattlefieldAllTriggeredAbility( new DenryKlinEditorInChiefCopyCountersEffect(), StaticFilters.FILTER_CONTROLLED_CREATURE_NON_TOKEN ).withInterveningIf(SourceHasCountersCondition.instance)); diff --git a/Mage.Sets/src/mage/cards/e/EarwigSquad.java b/Mage.Sets/src/mage/cards/e/EarwigSquad.java index fa1ed4663f9..2661f3a0605 100644 --- a/Mage.Sets/src/mage/cards/e/EarwigSquad.java +++ b/Mage.Sets/src/mage/cards/e/EarwigSquad.java @@ -33,7 +33,7 @@ public final class EarwigSquad extends CardImpl { // When Earwig Squad enters the battlefield, if its prowl cost was paid, search target opponent's library for three cards and exile them. Then that player shuffles their library. Ability ability = new EntersBattlefieldTriggeredAbility( - new SearchLibraryAndExileTargetEffect(3, true), false + new SearchLibraryAndExileTargetEffect(3, false), false ).withInterveningIf(ProwlCostWasPaidCondition.instance); ability.addTarget(new TargetOpponent()); this.addAbility(ability.addHint(ProwlCostWasPaidHint.instance)); diff --git a/Mage.Sets/src/mage/cards/e/EowynFearlessKnight.java b/Mage.Sets/src/mage/cards/e/EowynFearlessKnight.java index 007d1481630..2e9583ac6d6 100644 --- a/Mage.Sets/src/mage/cards/e/EowynFearlessKnight.java +++ b/Mage.Sets/src/mage/cards/e/EowynFearlessKnight.java @@ -76,6 +76,11 @@ enum EowynFearlessKnightPredicate implements ObjectSourcePlayerPredicate permanent.getPower().getValue() < input.getObject().getPower().getValue()).orElse(false); } + + @Override + public String toString() { + return "another Human entered the battlefield under your control this turn"; + } } class EowynFearlessKnightEffect extends OneShotEffect { diff --git a/Mage.Sets/src/mage/cards/e/ErgRaiders.java b/Mage.Sets/src/mage/cards/e/ErgRaiders.java index f4a6bf72b5a..8530d6fdf75 100644 --- a/Mage.Sets/src/mage/cards/e/ErgRaiders.java +++ b/Mage.Sets/src/mage/cards/e/ErgRaiders.java @@ -35,7 +35,7 @@ public final class ErgRaiders extends CardImpl { // At the beginning of your end step, if Erg Raiders didn't attack this turn, Erg Raiders deals 2 damage to you unless it came under your control this turn. this.addAbility(new BeginningOfEndStepTriggeredAbility(new ConditionalOneShotEffect( new DamageControllerEffect(2), ErgRaidersCondition.instance, - "{this} deals 2 damage to you unless it came under your control this turn" + "it deals 2 damage to you unless it came under your control this turn" )).withInterveningIf(condition)); } diff --git a/Mage.Sets/src/mage/cards/e/ExcavationElephant.java b/Mage.Sets/src/mage/cards/e/ExcavationElephant.java index c823d084b20..d21f4f50d3f 100644 --- a/Mage.Sets/src/mage/cards/e/ExcavationElephant.java +++ b/Mage.Sets/src/mage/cards/e/ExcavationElephant.java @@ -4,7 +4,7 @@ import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.condition.common.KickedCondition; -import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.abilities.keyword.KickerAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -31,9 +31,7 @@ public final class ExcavationElephant extends CardImpl { this.addAbility(new KickerAbility("{1}{W}")); // When Excavation Elephant enters the battlefield, if it was kicked, return target artifact card from your graveyard to your hand. - Ability ability = new EntersBattlefieldTriggeredAbility( - new ReturnToHandTargetEffect(), false - ).withInterveningIf(KickedCondition.ONCE); + Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnFromGraveyardToHandTargetEffect()).withInterveningIf(KickedCondition.ONCE); ability.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_ARTIFACT_FROM_YOUR_GRAVEYARD)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/f/FearOfMissingOut.java b/Mage.Sets/src/mage/cards/f/FearOfMissingOut.java index a7618ef6afb..7dabdb2455e 100644 --- a/Mage.Sets/src/mage/cards/f/FearOfMissingOut.java +++ b/Mage.Sets/src/mage/cards/f/FearOfMissingOut.java @@ -12,6 +12,7 @@ import mage.abilities.effects.common.UntapTargetEffect; import mage.abilities.effects.common.discard.DiscardControllerEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; +import mage.constants.AbilityWord; import mage.constants.CardType; import mage.constants.SubType; import mage.target.common.TargetCreaturePermanent; @@ -39,8 +40,7 @@ public final class FearOfMissingOut extends CardImpl { ability = new AttacksFirstTimeTriggeredAbility(new UntapTargetEffect(), false).withInterveningIf(DeliriumCondition.instance); ability.addTarget(new TargetCreaturePermanent()); ability.addEffect(new AdditionalCombatPhaseEffect()); - ability.addHint(CardTypesInGraveyardCount.YOU.getHint()); - this.addAbility(ability); + this.addAbility(ability.setAbilityWord(AbilityWord.DELIRIUM).addHint(CardTypesInGraveyardCount.YOU.getHint())); } private FearOfMissingOut(final FearOfMissingOut card) { diff --git a/Mage.Sets/src/mage/cards/f/FoundryHornet.java b/Mage.Sets/src/mage/cards/f/FoundryHornet.java index b4d791fe5ce..2ee71b649b2 100644 --- a/Mage.Sets/src/mage/cards/f/FoundryHornet.java +++ b/Mage.Sets/src/mage/cards/f/FoundryHornet.java @@ -45,7 +45,7 @@ public final class FoundryHornet extends CardImpl { // When Foundry Hornet enters the battlefield, if you control a creature with a +1/+1 counter on it, creatures your opponents control get -1/-1 until end of turn. this.addAbility(new EntersBattlefieldTriggeredAbility(new BoostAllEffect( -1, -1, Duration.EndOfTurn, - StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE, false + StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURES, false ), false).withInterveningIf(condition)); } diff --git a/Mage.Sets/src/mage/cards/f/FunnelWebRecluse.java b/Mage.Sets/src/mage/cards/f/FunnelWebRecluse.java index 0a5080f6a9a..196b73abc90 100644 --- a/Mage.Sets/src/mage/cards/f/FunnelWebRecluse.java +++ b/Mage.Sets/src/mage/cards/f/FunnelWebRecluse.java @@ -8,6 +8,7 @@ import mage.abilities.hint.common.MorbidHint; import mage.abilities.keyword.ReachAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; +import mage.constants.AbilityWord; import mage.constants.CardType; import mage.constants.SubType; @@ -30,7 +31,7 @@ public final class FunnelWebRecluse extends CardImpl { // Morbid — When Funnel-Web Recluse enters the battlefield, if a creature died this turn, investigate. this.addAbility(new EntersBattlefieldTriggeredAbility(new InvestigateEffect()) - .withInterveningIf(MorbidCondition.instance).addHint(MorbidHint.instance)); + .withInterveningIf(MorbidCondition.instance).setAbilityWord(AbilityWord.MORBID).addHint(MorbidHint.instance)); } private FunnelWebRecluse(final FunnelWebRecluse card) { diff --git a/Mage.Sets/src/mage/cards/g/GaeasCourser.java b/Mage.Sets/src/mage/cards/g/GaeasCourser.java index 485f935d89f..d1a4fdde5f8 100644 --- a/Mage.Sets/src/mage/cards/g/GaeasCourser.java +++ b/Mage.Sets/src/mage/cards/g/GaeasCourser.java @@ -19,7 +19,7 @@ import java.util.UUID; public final class GaeasCourser extends CardImpl { private static final Condition condition - = new CardsInControllerGraveyardCondition(3, StaticFilters.FILTER_CARD_CREATURE); + = new CardsInControllerGraveyardCondition(3, StaticFilters.FILTER_CARD_CREATURES); public GaeasCourser(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{G}"); diff --git a/Mage.Sets/src/mage/cards/g/GhirapurOrrery.java b/Mage.Sets/src/mage/cards/g/GhirapurOrrery.java index 5b58c128ad2..e3c02e28f66 100644 --- a/Mage.Sets/src/mage/cards/g/GhirapurOrrery.java +++ b/Mage.Sets/src/mage/cards/g/GhirapurOrrery.java @@ -29,8 +29,8 @@ public final class GhirapurOrrery extends CardImpl { // At the beginning of each player's upkeep, if that player has no cards in hand, that player draws three cards. this.addAbility(new BeginningOfUpkeepTriggeredAbility( - TargetController.ANY, new DrawCardTargetEffect(3), false).withInterveningIf(condition) - ); + TargetController.EACH_PLAYER, new DrawCardTargetEffect(3), false + ).withInterveningIf(condition)); } private GhirapurOrrery(final GhirapurOrrery card) { diff --git a/Mage.Sets/src/mage/cards/g/GougedZealot.java b/Mage.Sets/src/mage/cards/g/GougedZealot.java index a5fb308bfce..4c573cf9ca6 100644 --- a/Mage.Sets/src/mage/cards/g/GougedZealot.java +++ b/Mage.Sets/src/mage/cards/g/GougedZealot.java @@ -8,6 +8,7 @@ import mage.abilities.effects.common.DamageAllControlledTargetEffect; import mage.abilities.keyword.ReachAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; +import mage.constants.AbilityWord; import mage.constants.CardType; import mage.constants.SetTargetPointer; import mage.constants.SubType; @@ -35,7 +36,7 @@ public final class GougedZealot extends CardImpl { new DamageAllControlledTargetEffect(1) .setText("{this} deals 1 damage to each creature defending player controls"), false, null, SetTargetPointer.PLAYER - ).withInterveningIf(DeliriumCondition.instance).addHint(CardTypesInGraveyardCount.YOU.getHint())); + ).withInterveningIf(DeliriumCondition.instance).setAbilityWord(AbilityWord.DELIRIUM).addHint(CardTypesInGraveyardCount.YOU.getHint())); } private GougedZealot(final GougedZealot card) { diff --git a/Mage.Sets/src/mage/cards/g/GreenerPastures.java b/Mage.Sets/src/mage/cards/g/GreenerPastures.java index 41af30b83f1..91388dce603 100644 --- a/Mage.Sets/src/mage/cards/g/GreenerPastures.java +++ b/Mage.Sets/src/mage/cards/g/GreenerPastures.java @@ -1,9 +1,9 @@ package mage.cards.g; import mage.abilities.Ability; -import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility; import mage.abilities.condition.Condition; import mage.abilities.effects.common.CreateTokenTargetEffect; +import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -16,7 +16,6 @@ import mage.players.Player; import java.util.UUID; /** - * * @author TheElk801 */ public final class GreenerPastures extends CardImpl { @@ -26,7 +25,7 @@ public final class GreenerPastures extends CardImpl { // At the beginning of each player's upkeep, if that player controls more lands than each other player, the player creates a 1/1 green Saproling creature token. this.addAbility(new BeginningOfUpkeepTriggeredAbility( - TargetController.EACH_PLAYER, new CreateTokenTargetEffect(new SaprolingToken()), + TargetController.EACH_PLAYER, new CreateTokenTargetEffect(new SaprolingToken()).setText("the player creates a 1/1 green Saproling creature token"), false ).withInterveningIf(ActivePlayerMostLandsCondition.instance)); } diff --git a/Mage.Sets/src/mage/cards/h/HiredHexblade.java b/Mage.Sets/src/mage/cards/h/HiredHexblade.java index c93ff7d26d4..520aa5b3e35 100644 --- a/Mage.Sets/src/mage/cards/h/HiredHexblade.java +++ b/Mage.Sets/src/mage/cards/h/HiredHexblade.java @@ -27,9 +27,9 @@ public final class HiredHexblade extends CardImpl { this.toughness = new MageInt(2); // When Hired Hexblade enters the battlefield, if mana from a Treasure was spent to cast it, you draw a card and you lose 1 life. - Ability ability = new EntersBattlefieldTriggeredAbility(new DrawCardSourceControllerEffect(1)) + Ability ability = new EntersBattlefieldTriggeredAbility(new DrawCardSourceControllerEffect(1, true)) .withInterveningIf(TreasureSpentToCastCondition.instance); - ability.addEffect(new LoseLifeSourceControllerEffect(1)); + ability.addEffect(new LoseLifeSourceControllerEffect(1).concatBy("and")); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/h/HollowhengeScavenger.java b/Mage.Sets/src/mage/cards/h/HollowhengeScavenger.java index 21c0d354fcb..50d49eb4428 100644 --- a/Mage.Sets/src/mage/cards/h/HollowhengeScavenger.java +++ b/Mage.Sets/src/mage/cards/h/HollowhengeScavenger.java @@ -7,6 +7,7 @@ import mage.abilities.effects.common.GainLifeEffect; import mage.abilities.hint.common.MorbidHint; import mage.cards.CardImpl; import mage.cards.CardSetInfo; +import mage.constants.AbilityWord; import mage.constants.CardType; import mage.constants.SubType; @@ -26,7 +27,7 @@ public final class HollowhengeScavenger extends CardImpl { // Morbid — When Hollowhenge Scavenger enters the battlefield, if a creature died this turn, you gain 5 life. this.addAbility(new EntersBattlefieldTriggeredAbility(new GainLifeEffect(5)) - .withInterveningIf(MorbidCondition.instance).addHint(MorbidHint.instance)); + .withInterveningIf(MorbidCondition.instance).setAbilityWord(AbilityWord.MORBID).addHint(MorbidHint.instance)); } private HollowhengeScavenger(final HollowhengeScavenger card) { diff --git a/Mage.Sets/src/mage/cards/k/KeeperOfTheAccord.java b/Mage.Sets/src/mage/cards/k/KeeperOfTheAccord.java index 71a7c7c5ff1..6867dc7a039 100644 --- a/Mage.Sets/src/mage/cards/k/KeeperOfTheAccord.java +++ b/Mage.Sets/src/mage/cards/k/KeeperOfTheAccord.java @@ -64,8 +64,8 @@ public final class KeeperOfTheAccord extends CardImpl { enum KeeperOfTheAccordCondition implements Condition { - CREATURES(StaticFilters.FILTER_PERMANENT_CREATURE), - LANDS(StaticFilters.FILTER_LAND); + CREATURES(StaticFilters.FILTER_PERMANENT_CREATURES), + LANDS(StaticFilters.FILTER_LANDS); private final FilterPermanent filter; diff --git a/Mage.Sets/src/mage/cards/k/KeldonStrikeTeam.java b/Mage.Sets/src/mage/cards/k/KeldonStrikeTeam.java index df094b0a56a..2f30c861bb1 100644 --- a/Mage.Sets/src/mage/cards/k/KeldonStrikeTeam.java +++ b/Mage.Sets/src/mage/cards/k/KeldonStrikeTeam.java @@ -47,7 +47,7 @@ public final class KeldonStrikeTeam extends CardImpl { HasteAbility.getInstance(), Duration.WhileOnBattlefield, StaticFilters.FILTER_CONTROLLED_CREATURE ), SourceEnteredThisTurnCondition.DID, "as long as {this} " + - "entered the battlefield this turn, creatures you control have haste" + "entered this turn, creatures you control have haste" ))); } diff --git a/Mage.Sets/src/mage/cards/k/KodamaOfTheEastTree.java b/Mage.Sets/src/mage/cards/k/KodamaOfTheEastTree.java index 6cb836f93b0..36ef81618e5 100644 --- a/Mage.Sets/src/mage/cards/k/KodamaOfTheEastTree.java +++ b/Mage.Sets/src/mage/cards/k/KodamaOfTheEastTree.java @@ -34,7 +34,7 @@ import java.util.*; */ public final class KodamaOfTheEastTree extends CardImpl { - private static final FilterPermanent filter = new FilterControlledPermanent(); + private static final FilterPermanent filter = new FilterControlledPermanent("another permanent you control"); static { filter.add(AnotherPredicate.instance); diff --git a/Mage.Sets/src/mage/cards/l/LandTax.java b/Mage.Sets/src/mage/cards/l/LandTax.java index 381fb71876b..93bfd709c87 100644 --- a/Mage.Sets/src/mage/cards/l/LandTax.java +++ b/Mage.Sets/src/mage/cards/l/LandTax.java @@ -24,7 +24,7 @@ public final class LandTax extends CardImpl { // At the beginning of your upkeep, if an opponent controls more lands than you, you may search your library for up to three basic land cards, reveal them, and put them into your hand. If you do, shuffle your library. this.addAbility(new BeginningOfUpkeepTriggeredAbility(new SearchLibraryPutInHandEffect( - new TargetCardInLibrary(3, StaticFilters.FILTER_CARD_BASIC_LANDS), true + new TargetCardInLibrary(0, 3, StaticFilters.FILTER_CARD_BASIC_LANDS), true ), true).withInterveningIf(condition)); } diff --git a/Mage.Sets/src/mage/cards/l/Lifeline.java b/Mage.Sets/src/mage/cards/l/Lifeline.java index 0d4bf1e822c..ae0768b795b 100644 --- a/Mage.Sets/src/mage/cards/l/Lifeline.java +++ b/Mage.Sets/src/mage/cards/l/Lifeline.java @@ -36,7 +36,7 @@ public final class Lifeline extends CardImpl { // Whenever a creature dies, if another creature is on the battlefield, return the first card to the battlefield under its owner's control at the beginning of the next end step. this.addAbility(new DiesCreatureTriggeredAbility( new LifelineEffect(), false, - StaticFilters.FILTER_PERMANENT_CREATURE, true + StaticFilters.FILTER_PERMANENT_A_CREATURE, true ).withInterveningIf(condition)); } diff --git a/Mage.Sets/src/mage/cards/m/MaliciousAffliction.java b/Mage.Sets/src/mage/cards/m/MaliciousAffliction.java index 153f8115a49..f96a25df117 100644 --- a/Mage.Sets/src/mage/cards/m/MaliciousAffliction.java +++ b/Mage.Sets/src/mage/cards/m/MaliciousAffliction.java @@ -7,6 +7,7 @@ import mage.abilities.effects.common.DestroyTargetEffect; import mage.abilities.hint.common.MorbidHint; import mage.cards.CardImpl; import mage.cards.CardSetInfo; +import mage.constants.AbilityWord; import mage.constants.CardType; import mage.filter.StaticFilters; import mage.target.common.TargetCreaturePermanent; @@ -24,7 +25,7 @@ public final class MaliciousAffliction extends CardImpl { // Morbid — When you cast Malicious Affliction, if a creature died this turn, you may copy Malicious Affliction and may choose a new target for the copy. this.addAbility(new CastSourceTriggeredAbility( new CopySourceSpellEffect().setText("copy {this} and may choose a new target for the copy"), true - ).withInterveningIf(MorbidCondition.instance).addHint(MorbidHint.instance).setRuleAtTheTop(true)); + ).withInterveningIf(MorbidCondition.instance).setAbilityWord(AbilityWord.MORBID).addHint(MorbidHint.instance).setRuleAtTheTop(true)); // Destroy target nonblack creature. this.getSpellAbility().addEffect(new DestroyTargetEffect()); diff --git a/Mage.Sets/src/mage/cards/m/MarduWarshrieker.java b/Mage.Sets/src/mage/cards/m/MarduWarshrieker.java index 7ddd65d5719..745db07abc7 100644 --- a/Mage.Sets/src/mage/cards/m/MarduWarshrieker.java +++ b/Mage.Sets/src/mage/cards/m/MarduWarshrieker.java @@ -31,7 +31,7 @@ public final class MarduWarshrieker extends CardImpl { // Raid - When Mardu Warshrieker enters the battlefield, if you attacked this turn, add {R}{W}{B}. this.addAbility(new EntersBattlefieldTriggeredAbility(new AddManaToManaPoolSourceControllerEffect( new Mana(1, 0, 1, 1, 0, 0, 0, 0) - )).withInterveningIf(RaidCondition.instance).setAbilityWord(AbilityWord.RAID).addHint(RaidHint.instance), new PlayerAttackedWatcher()); + ).setText("add {R}{W}{B}")).withInterveningIf(RaidCondition.instance).setAbilityWord(AbilityWord.RAID).addHint(RaidHint.instance), new PlayerAttackedWatcher()); } private MarduWarshrieker(final MarduWarshrieker card) { diff --git a/Mage.Sets/src/mage/cards/m/MaskOfIntolerance.java b/Mage.Sets/src/mage/cards/m/MaskOfIntolerance.java index 188560d06ee..b4d4df12080 100644 --- a/Mage.Sets/src/mage/cards/m/MaskOfIntolerance.java +++ b/Mage.Sets/src/mage/cards/m/MaskOfIntolerance.java @@ -24,7 +24,7 @@ public final class MaskOfIntolerance extends CardImpl { // At the beginning of each player's upkeep, if there are four or more basic land types among lands that player controls, Mask of Intolerance deals 3 damage to that player. this.addAbility(new BeginningOfUpkeepTriggeredAbility( - TargetController.ANY, new DamageTargetEffect(3), false + TargetController.EACH_PLAYER, new DamageTargetEffect(3, true, "that player"), false ).withInterveningIf(MaskOfIntoleranceCondition.instance).addHint(DomainHint.instance)); } diff --git a/Mage.Sets/src/mage/cards/m/MastermindPlum.java b/Mage.Sets/src/mage/cards/m/MastermindPlum.java index 5fdc02010da..56dd1c61c84 100644 --- a/Mage.Sets/src/mage/cards/m/MastermindPlum.java +++ b/Mage.Sets/src/mage/cards/m/MastermindPlum.java @@ -51,7 +51,7 @@ public final class MastermindPlum extends CardImpl { // Whenever you cast a spell, if mana from a Treasure was spent to cast it, you draw a card and you lose 1 life. ability = new SpellCastControllerTriggeredAbility( new DrawCardSourceControllerEffect(1, true), - StaticFilters.FILTER_SPELL, false, SetTargetPointer.SPELL + StaticFilters.FILTER_SPELL_A, false, SetTargetPointer.SPELL ).withInterveningIf(MastermindPlumCondition.instance); ability.addEffect(new LoseLifeSourceControllerEffect(1).concatBy("and")); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/m/MirrorSigilSergeant.java b/Mage.Sets/src/mage/cards/m/MirrorSigilSergeant.java index 37c07a72722..2731f6476a7 100644 --- a/Mage.Sets/src/mage/cards/m/MirrorSigilSergeant.java +++ b/Mage.Sets/src/mage/cards/m/MirrorSigilSergeant.java @@ -21,7 +21,7 @@ import java.util.UUID; */ public final class MirrorSigilSergeant extends CardImpl { - private static final FilterControlledPermanent filter = new FilterControlledPermanent("you control blue permanent"); + private static final FilterControlledPermanent filter = new FilterControlledPermanent("you control a blue permanent"); static { filter.add(new ColorPredicate(ObjectColor.BLUE)); diff --git a/Mage.Sets/src/mage/cards/m/MossPitSkeleton.java b/Mage.Sets/src/mage/cards/m/MossPitSkeleton.java index c839f412218..089ee27b195 100644 --- a/Mage.Sets/src/mage/cards/m/MossPitSkeleton.java +++ b/Mage.Sets/src/mage/cards/m/MossPitSkeleton.java @@ -59,7 +59,7 @@ public final class MossPitSkeleton extends CardImpl { class MossPitSkeletonTriggeredAbility extends TriggeredAbilityImpl { MossPitSkeletonTriggeredAbility() { - super(Zone.GRAVEYARD, new PutOnLibrarySourceEffect(true).setText("put {this} on top of your library"), true); + super(Zone.GRAVEYARD, new PutOnLibrarySourceEffect(true).setText("put this card on top of your library"), true); this.withInterveningIf(SourceInGraveyardCondition.instance); setTriggerPhrase("Whenever one or more +1/+1 counters are put on a creature you control, "); } diff --git a/Mage.Sets/src/mage/cards/n/NetherSpirit.java b/Mage.Sets/src/mage/cards/n/NetherSpirit.java index 4dcc774254c..d56d77917a4 100644 --- a/Mage.Sets/src/mage/cards/n/NetherSpirit.java +++ b/Mage.Sets/src/mage/cards/n/NetherSpirit.java @@ -60,6 +60,6 @@ enum NetherSpiritCondition implements Condition { @Override public String toString() { - return "{this} is the only creature card in your graveyard"; + return "this card is the only creature card in your graveyard"; } } diff --git a/Mage.Sets/src/mage/cards/n/Nihilith.java b/Mage.Sets/src/mage/cards/n/Nihilith.java index c869ce92f69..144dfcff9d9 100644 --- a/Mage.Sets/src/mage/cards/n/Nihilith.java +++ b/Mage.Sets/src/mage/cards/n/Nihilith.java @@ -34,7 +34,7 @@ public final class Nihilith extends CardImpl { // Whenever a card is put into an opponent's graveyard from anywhere, if Nihilith is suspended, you may remove a time counter from Nihilith. this.addAbility(new PutCardIntoGraveFromAnywhereAllTriggeredAbility( - Zone.EXILED, new RemoveCounterSourceEffect(CounterType.TIME.createInstance()), true, + Zone.EXILED, new RemoveCounterSourceEffect(CounterType.TIME.createInstance()).setText("remove a time counter from this card"), true, StaticFilters.FILTER_CARD_A, TargetController.OPPONENT, SetTargetPointer.NONE ).withInterveningIf(SuspendedCondition.instance)); } diff --git a/Mage.Sets/src/mage/cards/o/OchreJelly.java b/Mage.Sets/src/mage/cards/o/OchreJelly.java index f1972a64427..9893be1bf26 100644 --- a/Mage.Sets/src/mage/cards/o/OchreJelly.java +++ b/Mage.Sets/src/mage/cards/o/OchreJelly.java @@ -69,6 +69,11 @@ enum OchreJellyCondition implements Condition { .filter(permanent -> permanent.getCounters(game).getCount(CounterType.P1P1) >= 2) .isPresent(); } + + @Override + public String toString() { + return "it had two or more +1/+1 counters on it"; + } } class OchreJellyEffect extends OneShotEffect { diff --git a/Mage.Sets/src/mage/cards/o/OldGrowthTroll.java b/Mage.Sets/src/mage/cards/o/OldGrowthTroll.java index 32c382fa036..b619622e09e 100644 --- a/Mage.Sets/src/mage/cards/o/OldGrowthTroll.java +++ b/Mage.Sets/src/mage/cards/o/OldGrowthTroll.java @@ -89,13 +89,13 @@ class OldGrowthTrollReturnEffect extends OneShotEffect { OldGrowthTrollReturnEffect() { super(Outcome.PutCardInPlay); + staticText = "return it to the battlefield. It's an Aura enchantment with enchant Forest you control " + + "and \"Enchanted Forest has '{T}: Add {G}{G}' and '{1}, {T}, Sacrifice this land: " + + "Create a tapped 4/4 green Troll Warrior creature token with trample.'\""; } private OldGrowthTrollReturnEffect(final OldGrowthTrollReturnEffect effect) { super(effect); - staticText = "return it to the battlefield. It's an Aura enchantment with enchant Forest you control " + - "and \"Enchanted Forest has '{T}: Add {G}{G}' and '{1}, {T}, Sacrifice this land: " + - "Create a tapped 4/4 green Troll Warrior creature token with trample.'\""; } @Override diff --git a/Mage.Sets/src/mage/cards/o/OrvarTheAllForm.java b/Mage.Sets/src/mage/cards/o/OrvarTheAllForm.java index 01ccddbfce2..160f051cb85 100644 --- a/Mage.Sets/src/mage/cards/o/OrvarTheAllForm.java +++ b/Mage.Sets/src/mage/cards/o/OrvarTheAllForm.java @@ -55,7 +55,7 @@ public final class OrvarTheAllForm extends CardImpl { // Whenever you cast an instant or sorcery spell, if it targets one or more other permanents you control, create a token that's a copy of one of those permanents. this.addAbility(new SpellCastControllerTriggeredAbility( new OrvarTheAllFormEffect(), - StaticFilters.FILTER_SPELL_INSTANT_OR_SORCERY, + StaticFilters.FILTER_SPELL_AN_INSTANT_OR_SORCERY, false, SetTargetPointer.SPELL ).withInterveningIf(OrvarTheAllFormCondition.instance)); diff --git a/Mage.Sets/src/mage/cards/o/OversoldCemetery.java b/Mage.Sets/src/mage/cards/o/OversoldCemetery.java index e7a28827a18..b3af14b9f83 100644 --- a/Mage.Sets/src/mage/cards/o/OversoldCemetery.java +++ b/Mage.Sets/src/mage/cards/o/OversoldCemetery.java @@ -18,7 +18,7 @@ import java.util.UUID; */ public final class OversoldCemetery extends CardImpl { - private static final Condition condition = new CardsInControllerGraveyardCondition(4, StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD); + private static final Condition condition = new CardsInControllerGraveyardCondition(4, StaticFilters.FILTER_CARD_CREATURES); public OversoldCemetery(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{B}"); diff --git a/Mage.Sets/src/mage/cards/p/PardicDragon.java b/Mage.Sets/src/mage/cards/p/PardicDragon.java index 111136610b6..c8ebc65bd9f 100644 --- a/Mage.Sets/src/mage/cards/p/PardicDragon.java +++ b/Mage.Sets/src/mage/cards/p/PardicDragon.java @@ -65,7 +65,7 @@ class PardicDragonEffect extends OneShotEffect { PardicDragonEffect() { super(Outcome.Benefit); - this.staticText = "that player may put a time counter on {this}"; + this.staticText = "that player may put a time counter on this card"; } private PardicDragonEffect(final PardicDragonEffect effect) { diff --git a/Mage.Sets/src/mage/cards/p/PaupersCage.java b/Mage.Sets/src/mage/cards/p/PaupersCage.java index a8c58fbb0b0..2c976f03dca 100644 --- a/Mage.Sets/src/mage/cards/p/PaupersCage.java +++ b/Mage.Sets/src/mage/cards/p/PaupersCage.java @@ -24,7 +24,7 @@ public final class PaupersCage extends CardImpl { // At the beginning of each opponent's upkeep, if that player has two or fewer cards in hand, Paupers' Cage deals 2 damage to that player. this.addAbility(new BeginningOfUpkeepTriggeredAbility( - TargetController.OPPONENT, new DamageTargetEffect(2), false + TargetController.OPPONENT, new DamageTargetEffect(2, true, "that player"), false ).withInterveningIf(condition)); } diff --git a/Mage.Sets/src/mage/cards/p/PhyrexianTotem.java b/Mage.Sets/src/mage/cards/p/PhyrexianTotem.java index f03f6d65846..381635784cb 100644 --- a/Mage.Sets/src/mage/cards/p/PhyrexianTotem.java +++ b/Mage.Sets/src/mage/cards/p/PhyrexianTotem.java @@ -41,7 +41,7 @@ public final class PhyrexianTotem extends CardImpl { // Whenever {this} is dealt damage, if it's a creature, sacrifice that many permanents. this.addAbility(new DealtDamageToSourceTriggeredAbility( new SacrificeControllerEffect(StaticFilters.FILTER_PERMANENTS, SavedDamageValue.MANY, ""), false - ).withInterveningIf(PhyrexianTotemCondition.instance)); + ).withInterveningIf(PhyrexianTotemCondition.instance).setTriggerPhrase("Whenever this permanent is dealt damage, ")); } private PhyrexianTotem(final PhyrexianTotem card) { diff --git a/Mage.Sets/src/mage/cards/p/PlanarCollapse.java b/Mage.Sets/src/mage/cards/p/PlanarCollapse.java index ad33205a03d..4228f56e032 100644 --- a/Mage.Sets/src/mage/cards/p/PlanarCollapse.java +++ b/Mage.Sets/src/mage/cards/p/PlanarCollapse.java @@ -30,7 +30,7 @@ public final class PlanarCollapse extends CardImpl { // At the beginning of your upkeep, if there are four or more creatures on the battlefield, sacrifice Planar Collapse and destroy all creatures. They can't be regenerated. Ability ability = new BeginningOfUpkeepTriggeredAbility(new SacrificeSourceEffect()).withInterveningIf(condition); - ability.addEffect(new DestroyAllEffect(StaticFilters.FILTER_PERMANENT_CREATURE, true).concatBy("and")); + ability.addEffect(new DestroyAllEffect(StaticFilters.FILTER_PERMANENT_CREATURES, true).concatBy("and")); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/p/ProgenitorMimic.java b/Mage.Sets/src/mage/cards/p/ProgenitorMimic.java index 9eb47ada682..fd24facb62b 100644 --- a/Mage.Sets/src/mage/cards/p/ProgenitorMimic.java +++ b/Mage.Sets/src/mage/cards/p/ProgenitorMimic.java @@ -45,7 +45,7 @@ public final class ProgenitorMimic extends CardImpl { new BeginningOfUpkeepTriggeredAbility( new CreateTokenCopySourceEffect().setText("create a token that's a copy of this creature") ).withInterveningIf(condition) - )).setText("as a copy of any creature on the battlefield except it has " + + )).setText("as a copy of any creature on the battlefield, except it has " + "\"At the beginning of your upkeep, if this creature isn't a token, " + "create a token that's a copy of this creature.\""), true )); diff --git a/Mage.Sets/src/mage/cards/p/PyreZombie.java b/Mage.Sets/src/mage/cards/p/PyreZombie.java index 9a67214ee97..83fdbc0a4e2 100644 --- a/Mage.Sets/src/mage/cards/p/PyreZombie.java +++ b/Mage.Sets/src/mage/cards/p/PyreZombie.java @@ -34,7 +34,7 @@ public final class PyreZombie extends CardImpl { // At the beginning of your upkeep, if Pyre Zombie is in your graveyard, you may pay {1}{B}{B}. If you do, return Pyre Zombie to your hand. this.addAbility(new BeginningOfUpkeepTriggeredAbility(Zone.GRAVEYARD, - TargetController.YOU, new DoIfCostPaid(new ReturnToHandSourceEffect().setText("return {this} to your hand"), new ManaCostsImpl<>("{1}{B}{B}")), + TargetController.YOU, new DoIfCostPaid(new ReturnToHandSourceEffect().setText("return it to your hand"), new ManaCostsImpl<>("{1}{B}{B}")), false).withInterveningIf(SourceInGraveyardCondition.instance)); // {1}{R}{R}, Sacrifice Pyre Zombie: Pyre Zombie deals 2 damage to any target. diff --git a/Mage.Sets/src/mage/cards/p/PyrewildShaman.java b/Mage.Sets/src/mage/cards/p/PyrewildShaman.java index 93dc40f06c0..9b8a684b8d3 100644 --- a/Mage.Sets/src/mage/cards/p/PyrewildShaman.java +++ b/Mage.Sets/src/mage/cards/p/PyrewildShaman.java @@ -30,7 +30,7 @@ public final class PyrewildShaman extends CardImpl { // Whenever one or more creatures you control deal combat damage to a player, if Pyrewild Shaman is in your graveyard, you may pay {3}. If you do, return Pyrewild Shaman to your hand. this.addAbility(new OneOrMoreCombatDamagePlayerTriggeredAbility(Zone.GRAVEYARD, new DoIfCostPaid( - new ReturnToHandSourceEffect().setText("return {this} to your hand"), + new ReturnToHandSourceEffect().setText("return this card to your hand"), new ManaCostsImpl<>("{3}") ), StaticFilters.FILTER_PERMANENT_CREATURES, SetTargetPointer.NONE, false) .withInterveningIf(SourceInGraveyardCondition.instance)); diff --git a/Mage.Sets/src/mage/cards/q/QueenMarchesa.java b/Mage.Sets/src/mage/cards/q/QueenMarchesa.java index 163c2a229b3..79019ed5ac6 100644 --- a/Mage.Sets/src/mage/cards/q/QueenMarchesa.java +++ b/Mage.Sets/src/mage/cards/q/QueenMarchesa.java @@ -36,7 +36,9 @@ public final class QueenMarchesa extends CardImpl { // Deathtouch this.addAbility(DeathtouchAbility.getInstance()); + // Haste + this.addAbility(HasteAbility.getInstance()); // When Queen Marchesa enters the battlefield, you become the monarch. this.addAbility(new EntersBattlefieldTriggeredAbility(new BecomesMonarchSourceEffect()).addHint(MonarchHint.instance)); diff --git a/Mage.Sets/src/mage/cards/r/RazorPendulum.java b/Mage.Sets/src/mage/cards/r/RazorPendulum.java index 573dd36b191..a611d207e30 100644 --- a/Mage.Sets/src/mage/cards/r/RazorPendulum.java +++ b/Mage.Sets/src/mage/cards/r/RazorPendulum.java @@ -24,7 +24,7 @@ public final class RazorPendulum extends CardImpl { // At the beginning of each player’s end step, if that player has 5 or less life, Razor Pendulum deals 2 damage to that player. this.addAbility(new BeginningOfEndStepTriggeredAbility( - TargetController.ANY, + TargetController.EACH_PLAYER, new DamageTargetEffect(2, true, "that player"), false, condition ).withTargetPointerSet(true)); diff --git a/Mage.Sets/src/mage/cards/r/ReservoirKraken.java b/Mage.Sets/src/mage/cards/r/ReservoirKraken.java index 01aac060b12..82207a22f4f 100644 --- a/Mage.Sets/src/mage/cards/r/ReservoirKraken.java +++ b/Mage.Sets/src/mage/cards/r/ReservoirKraken.java @@ -68,7 +68,7 @@ class ReservoirKrakenEffect extends OneShotEffect { public ReservoirKrakenEffect() { super(Outcome.Tap); - this.staticText = "any opponent may tap an untapped creature they control. If they do, tap {this} and create a 1/1 blue Fish creature token with \"This creature can't be blocked.\""; + this.staticText = "any opponent may tap an untapped creature they control. If they do, tap {this} and create a 1/1 blue Fish creature token with \"This token can't be blocked.\""; } private ReservoirKrakenEffect(final ReservoirKrakenEffect effect) { diff --git a/Mage.Sets/src/mage/cards/r/RetrieverPhoenix.java b/Mage.Sets/src/mage/cards/r/RetrieverPhoenix.java index 26bc61fb437..af5ef5abc79 100644 --- a/Mage.Sets/src/mage/cards/r/RetrieverPhoenix.java +++ b/Mage.Sets/src/mage/cards/r/RetrieverPhoenix.java @@ -60,8 +60,8 @@ class RetrieverPhoenixEffect extends ReplacementEffectImpl { RetrieverPhoenixEffect() { super(Duration.WhileInGraveyard, Outcome.PutCreatureInPlay); - staticText = "as long as {this} is in your graveyard, if you would learn, " + - "you may instead return {this} to the battlefield"; + staticText = "as long as this card is in your graveyard, if you would learn, " + + "you may instead return this card to the battlefield"; } private RetrieverPhoenixEffect(final RetrieverPhoenixEffect effect) { diff --git a/Mage.Sets/src/mage/cards/r/RobberOfTheRich.java b/Mage.Sets/src/mage/cards/r/RobberOfTheRich.java index d25678a8721..7bbfbffefe4 100644 --- a/Mage.Sets/src/mage/cards/r/RobberOfTheRich.java +++ b/Mage.Sets/src/mage/cards/r/RobberOfTheRich.java @@ -74,6 +74,11 @@ enum RobberOfTheRichAttacksCondition implements Condition { && player != null && controller.getHand().size() < player.getHand().size(); } + + @Override + public String toString() { + return "defending player has more cards in hand than you"; + } } class RogueAttackedThisTurnCondition implements Condition { diff --git a/Mage.Sets/src/mage/cards/s/SabertoothOutrider.java b/Mage.Sets/src/mage/cards/s/SabertoothOutrider.java index da4f670e711..6fed07a0aa6 100644 --- a/Mage.Sets/src/mage/cards/s/SabertoothOutrider.java +++ b/Mage.Sets/src/mage/cards/s/SabertoothOutrider.java @@ -9,6 +9,7 @@ import mage.abilities.keyword.FirstStrikeAbility; import mage.abilities.keyword.TrampleAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; +import mage.constants.AbilityWord; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.SubType; @@ -33,7 +34,7 @@ public final class SabertoothOutrider extends CardImpl { // Formidable — Whenever Sabertooth Outrider attacks, if creatures you control have total power 8 or greater, Sabertooth Outrider gains first strike until end of turn. this.addAbility(new AttacksTriggeredAbility(new GainAbilitySourceEffect( FirstStrikeAbility.getInstance(), Duration.EndOfTurn - )).withInterveningIf(FormidableCondition.instance)); + )).withInterveningIf(FormidableCondition.instance).setAbilityWord(AbilityWord.FORMIDABLE)); } private SabertoothOutrider(final SabertoothOutrider card) { diff --git a/Mage.Sets/src/mage/cards/s/SandScout.java b/Mage.Sets/src/mage/cards/s/SandScout.java index 950686234b9..8011c5c3f82 100644 --- a/Mage.Sets/src/mage/cards/s/SandScout.java +++ b/Mage.Sets/src/mage/cards/s/SandScout.java @@ -30,7 +30,7 @@ public final class SandScout extends CardImpl { filter.add(SubType.DESERT.getPredicate()); } - private static final Condition condition = new OpponentControlsMoreCondition(StaticFilters.FILTER_LAND); + private static final Condition condition = new OpponentControlsMoreCondition(StaticFilters.FILTER_LANDS); public SandScout(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{W}"); diff --git a/Mage.Sets/src/mage/cards/s/ScabClanBerserker.java b/Mage.Sets/src/mage/cards/s/ScabClanBerserker.java index a23859be33c..408833a25e4 100644 --- a/Mage.Sets/src/mage/cards/s/ScabClanBerserker.java +++ b/Mage.Sets/src/mage/cards/s/ScabClanBerserker.java @@ -38,7 +38,7 @@ public final class ScabClanBerserker extends CardImpl { this.addAbility(new SpellCastOpponentTriggeredAbility( Zone.BATTLEFIELD, new DamageTargetEffect(2, true, "that player"), - StaticFilters.FILTER_SPELL_A, false, SetTargetPointer.PLAYER + StaticFilters.FILTER_SPELL_A_NON_CREATURE, false, SetTargetPointer.PLAYER ).withInterveningIf(RenownedSourceCondition.THIS)); } diff --git a/Mage.Sets/src/mage/cards/s/ScoutingHawk.java b/Mage.Sets/src/mage/cards/s/ScoutingHawk.java index 9bebaf9a093..e77d45c12f3 100644 --- a/Mage.Sets/src/mage/cards/s/ScoutingHawk.java +++ b/Mage.Sets/src/mage/cards/s/ScoutingHawk.java @@ -29,7 +29,7 @@ public final class ScoutingHawk extends CardImpl { filter.add(SubType.PLAINS.getPredicate()); } - private static final Condition condition = new OpponentControlsMoreCondition(StaticFilters.FILTER_LAND); + private static final Condition condition = new OpponentControlsMoreCondition(StaticFilters.FILTER_LANDS); public ScoutingHawk(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}"); diff --git a/Mage.Sets/src/mage/cards/s/ShelteredValley.java b/Mage.Sets/src/mage/cards/s/ShelteredValley.java index cbc92e8cb01..1b545262731 100644 --- a/Mage.Sets/src/mage/cards/s/ShelteredValley.java +++ b/Mage.Sets/src/mage/cards/s/ShelteredValley.java @@ -41,8 +41,8 @@ public final class ShelteredValley extends CardImpl { // If Sheltered Valley would enter the battlefield, instead sacrifice each other permanent named Sheltered Valley you control, then put Sheltered Valley onto the battlefield. this.addAbility(new SimpleStaticAbility( Zone.ALL, new EnterBattlefieldPayCostOrPutGraveyardEffect(new SacrificeAllCost(filter)) - .setText("If {this} would enter the battlefield, instead sacrifice each other " + - "permanent named Sheltered Valley you control, then put {this} onto the battlefield.") + .setText("If {this} would enter, instead sacrifice each other permanent " + + "named Sheltered Valley you control, then put {this} onto the battlefield.") )); // At the beginning of your upkeep, if you control three or fewer lands, you gain 1 life. diff --git a/Mage.Sets/src/mage/cards/s/ShriekingAffliction.java b/Mage.Sets/src/mage/cards/s/ShriekingAffliction.java index 4d05b10c6ed..13988100edf 100644 --- a/Mage.Sets/src/mage/cards/s/ShriekingAffliction.java +++ b/Mage.Sets/src/mage/cards/s/ShriekingAffliction.java @@ -26,7 +26,7 @@ public final class ShriekingAffliction extends CardImpl { // At the beginning of each opponent's upkeep, if that player has one or fewer cards in hand, they lose 3 life. this.addAbility(new BeginningOfUpkeepTriggeredAbility( - Zone.BATTLEFIELD, TargetController.OPPONENT, new LoseLifeTargetEffect(3), false + Zone.BATTLEFIELD, TargetController.OPPONENT, new LoseLifeTargetEffect(3).setText("they lose 3 life"), false ).withInterveningIf(condition)); } diff --git a/Mage.Sets/src/mage/cards/s/SidequestPlayBlitzball.java b/Mage.Sets/src/mage/cards/s/SidequestPlayBlitzball.java index 394e1f3b6e4..8720da23746 100644 --- a/Mage.Sets/src/mage/cards/s/SidequestPlayBlitzball.java +++ b/Mage.Sets/src/mage/cards/s/SidequestPlayBlitzball.java @@ -48,7 +48,7 @@ public final class SidequestPlayBlitzball extends CardImpl { this.addAbility(new TransformAbility()); ability = new EndOfCombatTriggeredAbility( new TransformSourceEffect(), TargetController.YOU, false - ).withInterveningIf(SidequestPlayBlitzballCondition.instance); + ).withInterveningIf(SidequestPlayBlitzballCondition.instance).setTriggerPhrase("At the end of combat on your turn, "); ability.addEffect(new SidequestPlayBlitzballEffect()); this.addAbility(ability, new SidequestPlayBlitzballWatcher()); } diff --git a/Mage.Sets/src/mage/cards/s/SiegeGangLieutenant.java b/Mage.Sets/src/mage/cards/s/SiegeGangLieutenant.java index fafe03614a8..da67fce3a3d 100644 --- a/Mage.Sets/src/mage/cards/s/SiegeGangLieutenant.java +++ b/Mage.Sets/src/mage/cards/s/SiegeGangLieutenant.java @@ -67,6 +67,7 @@ class SiegeGangLieutenantEffect extends OneShotEffect { SiegeGangLieutenantEffect() { super(Outcome.Benefit); + staticText = "create two 1/1 red Goblin creature tokens. Those tokens gain haste until end of turn"; } private SiegeGangLieutenantEffect(final SiegeGangLieutenantEffect effect) { diff --git a/Mage.Sets/src/mage/cards/s/Skizzik.java b/Mage.Sets/src/mage/cards/s/Skizzik.java index 9dce90f4a7a..608f964e689 100644 --- a/Mage.Sets/src/mage/cards/s/Skizzik.java +++ b/Mage.Sets/src/mage/cards/s/Skizzik.java @@ -42,7 +42,7 @@ public final class Skizzik extends CardImpl { // At the beginning of the end step, if Skizzik wasn't kicked, sacrifice it. this.addAbility(new BeginningOfEndStepTriggeredAbility( - TargetController.NEXT, new SacrificeSourceEffect(), false, condition + TargetController.NEXT, new SacrificeSourceEffect().setText("sacrifice it"), false, condition )); } diff --git a/Mage.Sets/src/mage/cards/s/SkyclaveShade.java b/Mage.Sets/src/mage/cards/s/SkyclaveShade.java index f782c00a4f1..3f984c77990 100644 --- a/Mage.Sets/src/mage/cards/s/SkyclaveShade.java +++ b/Mage.Sets/src/mage/cards/s/SkyclaveShade.java @@ -69,7 +69,7 @@ enum SkyclaveShadeCondition implements Condition { @Override public String toString() { - return "{this} is in your graveyard and it's your turn"; + return "this card is in your graveyard and it's your turn"; } } diff --git a/Mage.Sets/src/mage/cards/s/SorinOfHouseMarkov.java b/Mage.Sets/src/mage/cards/s/SorinOfHouseMarkov.java index 42b23b62781..ccbbb37b09e 100644 --- a/Mage.Sets/src/mage/cards/s/SorinOfHouseMarkov.java +++ b/Mage.Sets/src/mage/cards/s/SorinOfHouseMarkov.java @@ -22,7 +22,7 @@ import java.util.UUID; */ public final class SorinOfHouseMarkov extends CardImpl { - private static final Condition condition = new YouGainedLifeCondition(ComparisonType.OR_GREATER, 3); + private static final Condition condition = new YouGainedLifeCondition(ComparisonType.MORE_THAN, 2); private static final Hint hint = new ConditionHint(condition); public SorinOfHouseMarkov(UUID ownerId, CardSetInfo setInfo) { @@ -45,7 +45,7 @@ public final class SorinOfHouseMarkov extends CardImpl { // At the beginning of your postcombat main phase, if you gained 3 or more life this turn, exile Sorin of House Markov, then return him to the battlefield transformed under his owner's control. this.addAbility(new TransformAbility()); this.addAbility(new BeginningOfPostcombatMainTriggeredAbility( - new ExileAndReturnSourceEffect(PutCards.BATTLEFIELD_TRANSFORMED, Pronoun.SHE), false + new ExileAndReturnSourceEffect(PutCards.BATTLEFIELD_TRANSFORMED, Pronoun.HE), false ).withInterveningIf(condition).addHint(hint), new PlayerGainedLifeWatcher()); } diff --git a/Mage.Sets/src/mage/cards/s/SoulhunterRakshasa.java b/Mage.Sets/src/mage/cards/s/SoulhunterRakshasa.java index 8930584ffee..ed83aaec369 100644 --- a/Mage.Sets/src/mage/cards/s/SoulhunterRakshasa.java +++ b/Mage.Sets/src/mage/cards/s/SoulhunterRakshasa.java @@ -4,7 +4,7 @@ import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.CantBlockAbility; import mage.abilities.common.EntersBattlefieldTriggeredAbility; -import mage.abilities.condition.common.CastFromEverywhereSourceCondition; +import mage.abilities.condition.common.CastFromHandSourcePermanentCondition; import mage.abilities.dynamicvalue.DynamicValue; import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount; import mage.abilities.effects.common.DamageTargetEffect; @@ -37,7 +37,7 @@ public final class SoulhunterRakshasa extends CardImpl { // When Soulhunter Rakshasa enters the battlefield, if you cast it from your hand, it deals 1 damage to target opponent for each Swamp you control. Ability ability = new EntersBattlefieldTriggeredAbility(new DamageTargetEffect(xValue)) - .withInterveningIf(CastFromEverywhereSourceCondition.instance); + .withInterveningIf(CastFromHandSourcePermanentCondition.instance); ability.addTarget(new TargetOpponent()); this.addAbility(ability, new CastFromHandWatcher()); } diff --git a/Mage.Sets/src/mage/cards/s/SpiritualSanctuary.java b/Mage.Sets/src/mage/cards/s/SpiritualSanctuary.java index cfdba3762b8..a29b5f56efe 100644 --- a/Mage.Sets/src/mage/cards/s/SpiritualSanctuary.java +++ b/Mage.Sets/src/mage/cards/s/SpiritualSanctuary.java @@ -31,7 +31,7 @@ public final class SpiritualSanctuary extends CardImpl { // At the beginning of each player's upkeep, if that player controls a Plains, they gain 1 life. this.addAbility(new BeginningOfUpkeepTriggeredAbility( - TargetController.ANY, new GainLifeTargetEffect(1).setText("they gain 1 life"), false + TargetController.EACH_PLAYER, new GainLifeTargetEffect(1).setText("they gain 1 life"), false ).withInterveningIf(condition)); } diff --git a/Mage.Sets/src/mage/cards/s/SurrakTheHuntCaller.java b/Mage.Sets/src/mage/cards/s/SurrakTheHuntCaller.java index 7ba3ed4410c..2b849e7690f 100644 --- a/Mage.Sets/src/mage/cards/s/SurrakTheHuntCaller.java +++ b/Mage.Sets/src/mage/cards/s/SurrakTheHuntCaller.java @@ -8,10 +8,7 @@ import mage.abilities.keyword.HasteAbility; import mage.abilities.triggers.BeginningOfCombatTriggeredAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Duration; -import mage.constants.SubType; -import mage.constants.SuperType; +import mage.constants.*; import mage.target.common.TargetControlledCreaturePermanent; import java.util.UUID; @@ -34,7 +31,7 @@ public final class SurrakTheHuntCaller extends CardImpl { HasteAbility.getInstance(), Duration.EndOfTurn )).withInterveningIf(FormidableCondition.instance); ability.addTarget(new TargetControlledCreaturePermanent()); - this.addAbility(ability); + this.addAbility(ability.setAbilityWord(AbilityWord.FORMIDABLE)); } private SurrakTheHuntCaller(final SurrakTheHuntCaller card) { diff --git a/Mage.Sets/src/mage/cards/t/TazeemRoilmage.java b/Mage.Sets/src/mage/cards/t/TazeemRoilmage.java index 0787cc91043..567ea897247 100644 --- a/Mage.Sets/src/mage/cards/t/TazeemRoilmage.java +++ b/Mage.Sets/src/mage/cards/t/TazeemRoilmage.java @@ -4,7 +4,7 @@ import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.condition.common.KickedCondition; -import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.abilities.keyword.KickerAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -32,7 +32,7 @@ public final class TazeemRoilmage extends CardImpl { this.addAbility(new KickerAbility("{4}")); // When Tazeem Roilmage enters the battlefield, if it was kicked, return target instant or sorcery card from your graveyard to your hand. - Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnToHandTargetEffect()).withInterveningIf(KickedCondition.ONCE); + Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnFromGraveyardToHandTargetEffect()).withInterveningIf(KickedCondition.ONCE); ability.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_INSTANT_OR_SORCERY_FROM_YOUR_GRAVEYARD)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/t/TetsuoImperialChampion.java b/Mage.Sets/src/mage/cards/t/TetsuoImperialChampion.java index 9ad58463482..7f250f63ebf 100644 --- a/Mage.Sets/src/mage/cards/t/TetsuoImperialChampion.java +++ b/Mage.Sets/src/mage/cards/t/TetsuoImperialChampion.java @@ -40,7 +40,7 @@ public final class TetsuoImperialChampion extends CardImpl { static final GreatestAmongPermanentsValue xValue = new GreatestAmongPermanentsValue(GreatestAmongPermanentsValue.Quality.ManaValue, filterEquipment); private static final FilterCard filter = new FilterInstantOrSorceryCard( "an instant or sorcery spell from your hand with mana value " + - "less than or equal to the highest mana value among Equipment attached to {this}" + "less than or equal to the greatest mana value among Equipment attached to {this}" ); static { @@ -62,7 +62,7 @@ public final class TetsuoImperialChampion extends CardImpl { new DamageTargetEffect(xValue, "it") .setText("{this} deals damage equal to the greatest mana value " + "among Equipment attached to it to any target") - ).setTriggerPhrase("Whenever {this} attacks, if it's equipped, ").withInterveningIf(EquippedSourceCondition.instance); + ).withInterveningIf(EquippedSourceCondition.instance); ability.addTarget(new TargetAnyTarget()); // * You may cast an instant or sorcery spell from your hand with mana value less than or equal to the greatest mana value among Equipment attached to Tetsuo without paying its mana cost. diff --git a/Mage.Sets/src/mage/cards/t/TinybonesTrinketThief.java b/Mage.Sets/src/mage/cards/t/TinybonesTrinketThief.java index 2b913a9659a..88169e2b04a 100644 --- a/Mage.Sets/src/mage/cards/t/TinybonesTrinketThief.java +++ b/Mage.Sets/src/mage/cards/t/TinybonesTrinketThief.java @@ -37,7 +37,7 @@ public final class TinybonesTrinketThief extends CardImpl { // At the beginning of each end step, if an opponent discarded a card this turn, you draw a card and you lose 1 life. Ability ability = new BeginningOfEndStepTriggeredAbility( - TargetController.EACH_PLAYER, new DrawCardSourceControllerEffect(1, true), + TargetController.ANY, new DrawCardSourceControllerEffect(1, true), false, TinybonesTrinketThiefCondition.instance ); ability.addEffect(new LoseLifeSourceControllerEffect(1).concatBy("and")); diff --git a/Mage.Sets/src/mage/cards/t/ToolcraftExemplar.java b/Mage.Sets/src/mage/cards/t/ToolcraftExemplar.java index e71c1d69b2b..625984947c9 100644 --- a/Mage.Sets/src/mage/cards/t/ToolcraftExemplar.java +++ b/Mage.Sets/src/mage/cards/t/ToolcraftExemplar.java @@ -3,6 +3,7 @@ package mage.cards.t; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.condition.Condition; +import mage.abilities.condition.common.MetalcraftCondition; import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition; import mage.abilities.decorator.ConditionalOneShotEffect; import mage.abilities.effects.common.AddContinuousEffectToGame; @@ -14,10 +15,8 @@ import mage.abilities.triggers.BeginningOfCombatTriggeredAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.constants.ComparisonType; import mage.constants.Duration; import mage.constants.SubType; -import mage.filter.StaticFilters; import mage.filter.common.FilterControlledArtifactPermanent; import java.util.UUID; @@ -30,9 +29,6 @@ public final class ToolcraftExemplar extends CardImpl { private static final Condition condition = new PermanentsOnTheBattlefieldCondition( new FilterControlledArtifactPermanent("you control an artifact") ); - private static final Condition condition2 = new PermanentsOnTheBattlefieldCondition( - StaticFilters.FILTER_CONTROLLED_PERMANENT_ARTIFACT, ComparisonType.MORE_THAN, 2 - ); public ToolcraftExemplar(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{W}"); @@ -48,7 +44,7 @@ public final class ToolcraftExemplar extends CardImpl { )).withInterveningIf(condition); ability.addEffect(new ConditionalOneShotEffect(new AddContinuousEffectToGame( new GainAbilitySourceEffect(FirstStrikeAbility.getInstance(), Duration.EndOfTurn) - ), condition2, "If you control at least 3 artifacts, it also gains first strike until end of turn")); + ), MetalcraftCondition.instance, "If you control three or more artifacts, it also gains first strike until end of turn")); this.addAbility(ability.addHint(ArtifactYouControlHint.instance)); } diff --git a/Mage.Sets/src/mage/cards/u/UnstoppableSlasher.java b/Mage.Sets/src/mage/cards/u/UnstoppableSlasher.java index 2f3dfccdeb4..a769af4e9e6 100644 --- a/Mage.Sets/src/mage/cards/u/UnstoppableSlasher.java +++ b/Mage.Sets/src/mage/cards/u/UnstoppableSlasher.java @@ -42,7 +42,7 @@ public final class UnstoppableSlasher extends CardImpl { new ReturnSourceFromGraveyardToBattlefieldWithCounterEffect( CounterType.STUN.createInstance(2), true, true, false, false - ), false + ).setText("return it to the battlefield tapped under its owner's control with two stun counters on it") ).withInterveningIf(UnstoppableSlasherCondition.instance)); } diff --git a/Mage.Sets/src/mage/cards/u/UrborgStalker.java b/Mage.Sets/src/mage/cards/u/UrborgStalker.java index 2b364e7ff13..e8550aaf34a 100644 --- a/Mage.Sets/src/mage/cards/u/UrborgStalker.java +++ b/Mage.Sets/src/mage/cards/u/UrborgStalker.java @@ -41,7 +41,7 @@ public final class UrborgStalker extends CardImpl { // At the beginning of each player's upkeep, if that player controls a nonblack, nonland permanent, Urborg Stalker deals 1 damage to that player. this.addAbility(new BeginningOfUpkeepTriggeredAbility( - TargetController.ANY, new DamageTargetEffect(1, true, "that player"), false + TargetController.EACH_PLAYER, new DamageTargetEffect(1, true, "that player"), false ).withInterveningIf(condition)); } diff --git a/Mage.Sets/src/mage/cards/v/VampireSocialite.java b/Mage.Sets/src/mage/cards/v/VampireSocialite.java index 69ee8beba58..41b9b6d906b 100644 --- a/Mage.Sets/src/mage/cards/v/VampireSocialite.java +++ b/Mage.Sets/src/mage/cards/v/VampireSocialite.java @@ -52,7 +52,7 @@ public final class VampireSocialite extends CardImpl { filter, CounterType.P1P1.createInstance(), true ), OpponentsLostLifeCondition.instance ).setText("as long as an opponent lost life this turn, " + - "each other Vampire you control enters the battlefield with an additional +1/+1 counter on it"))); + "each other Vampire you control enters with an additional +1/+1 counter on it"))); } private VampireSocialite(final VampireSocialite card) { diff --git a/Mage.Sets/src/mage/cards/v/VengefulPharaoh.java b/Mage.Sets/src/mage/cards/v/VengefulPharaoh.java index d241d75645a..c16b58cfe3f 100644 --- a/Mage.Sets/src/mage/cards/v/VengefulPharaoh.java +++ b/Mage.Sets/src/mage/cards/v/VengefulPharaoh.java @@ -56,7 +56,7 @@ class VengefulPharaohTriggeredAbility extends TriggeredAbilityImpl implements Ba VengefulPharaohTriggeredAbility() { super(Zone.GRAVEYARD, new DestroyTargetEffect(), false); this.addTarget(new TargetAttackingCreature()); - this.addEffect(new PutOnLibrarySourceEffect(true).setText(", then put {this} on top of your library")); + this.addEffect(new PutOnLibrarySourceEffect(true).setText(", then put this card on top of your library")); this.withInterveningIf(SourceInGraveyardCondition.instance); setTriggerPhrase("Whenever combat damage is dealt to you or a planeswalker you control, "); } @@ -95,5 +95,4 @@ class VengefulPharaohTriggeredAbility extends TriggeredAbilityImpl implements Ba } return false; } - } diff --git a/Mage.Sets/src/mage/cards/v/ViconiaDrowApostate.java b/Mage.Sets/src/mage/cards/v/ViconiaDrowApostate.java index 9557981f2d5..0bf96e52df6 100644 --- a/Mage.Sets/src/mage/cards/v/ViconiaDrowApostate.java +++ b/Mage.Sets/src/mage/cards/v/ViconiaDrowApostate.java @@ -25,7 +25,7 @@ import java.util.UUID; public final class ViconiaDrowApostate extends CardImpl { private static final Condition condition - = new CardsInControllerGraveyardCondition(4, StaticFilters.FILTER_CARD_CREATURE); + = new CardsInControllerGraveyardCondition(4, StaticFilters.FILTER_CARD_CREATURES); private static final Hint hint = new ValueHint( "Creature cards in your graveyard", new CardsInControllerGraveyardCount(StaticFilters.FILTER_CARD_CREATURE) diff --git a/Mage.Sets/src/mage/cards/v/VoldarenAmbusher.java b/Mage.Sets/src/mage/cards/v/VoldarenAmbusher.java index e4ad8663275..c0bdb0337d8 100644 --- a/Mage.Sets/src/mage/cards/v/VoldarenAmbusher.java +++ b/Mage.Sets/src/mage/cards/v/VoldarenAmbusher.java @@ -25,7 +25,7 @@ import java.util.UUID; public final class VoldarenAmbusher extends CardImpl { private static final DynamicValue xValue = new PermanentsOnBattlefieldCount( - new FilterControlledPermanent(SubType.VAMPIRE, "Vampires you control") + new FilterControlledPermanent(SubType.VAMPIRE, "Vampires you control"), null ); private static final Hint hint = new ValueHint("Vampires you control", xValue); diff --git a/Mage.Sets/src/mage/cards/v/VoodooDoll.java b/Mage.Sets/src/mage/cards/v/VoodooDoll.java index 4f681efec34..0698119433b 100644 --- a/Mage.Sets/src/mage/cards/v/VoodooDoll.java +++ b/Mage.Sets/src/mage/cards/v/VoodooDoll.java @@ -49,7 +49,10 @@ public final class VoodooDoll extends CardImpl { // {X}{X}, {T}: Voodoo Doll deals damage equal to the number of pin counters on it to any target. X is the number of pin counters on Voodoo Doll. ability = new SimpleActivatedAbility( - new DamageTargetEffect(new CountersSourceCount(CounterType.PIN)), new ManaCostsImpl<>("{X}{X}") + new DamageTargetEffect(new CountersSourceCount(CounterType.PIN)) + .setText("{this} deals damage equal to the number of pin counters on it " + + "to any target. X is the number of pin counters on {this}"), + new ManaCostsImpl<>("{X}{X}") ); ability.addCost(new TapSourceCost()); ability.addTarget(new TargetAnyTarget()); diff --git a/Mage.Sets/src/mage/cards/w/Wakedancer.java b/Mage.Sets/src/mage/cards/w/Wakedancer.java index aa7cd8793da..ae1bdd2a4d3 100644 --- a/Mage.Sets/src/mage/cards/w/Wakedancer.java +++ b/Mage.Sets/src/mage/cards/w/Wakedancer.java @@ -7,6 +7,7 @@ import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.hint.common.MorbidHint; import mage.cards.CardImpl; import mage.cards.CardSetInfo; +import mage.constants.AbilityWord; import mage.constants.CardType; import mage.constants.SubType; import mage.game.permanent.token.ZombieToken; @@ -29,7 +30,7 @@ public final class Wakedancer extends CardImpl { // Morbid — When Wakedancer enters the battlefield, if a creature died this turn, create a 2/2 black Zombie creature token. this.addAbility(new EntersBattlefieldTriggeredAbility(new CreateTokenEffect(new ZombieToken())) - .withInterveningIf(MorbidCondition.instance).addHint(MorbidHint.instance)); + .withInterveningIf(MorbidCondition.instance).setAbilityWord(AbilityWord.MORBID).addHint(MorbidHint.instance)); } private Wakedancer(final Wakedancer card) { diff --git a/Mage.Sets/src/mage/cards/w/WaveOfRats.java b/Mage.Sets/src/mage/cards/w/WaveOfRats.java index a934f38a9d7..d45d161bfcd 100644 --- a/Mage.Sets/src/mage/cards/w/WaveOfRats.java +++ b/Mage.Sets/src/mage/cards/w/WaveOfRats.java @@ -33,7 +33,7 @@ public class WaveOfRats extends CardImpl { this.addAbility(TrampleAbility.getInstance()); // When Wave of Rats dies, if it dealt combat damage to a player this turn, return it to the battlefield under its owner’s control. - this.addAbility(new DiesSourceTriggeredAbility(new ReturnToBattlefieldUnderOwnerControlSourceEffect()) + this.addAbility(new DiesSourceTriggeredAbility(new ReturnToBattlefieldUnderOwnerControlSourceEffect().setText("return it to the battlefield under its owner's control")) .withInterveningIf(WaveOfRatsDealtDamageToPlayerCondition.instance), new DamageDoneWatcher()); // Blitz {4}{B} (If you cast this spell for its blitz cost, it gains haste and “When this creature dies, draw a card.” Sacrifice it at the beginning of the next end step.) diff --git a/Mage.Sets/src/mage/cards/w/WitheringWisps.java b/Mage.Sets/src/mage/cards/w/WitheringWisps.java index a676d7c7343..9373b77c089 100644 --- a/Mage.Sets/src/mage/cards/w/WitheringWisps.java +++ b/Mage.Sets/src/mage/cards/w/WitheringWisps.java @@ -71,7 +71,7 @@ class WitheringWispsActivatedAbility extends ActivatedAbilityImpl { @Override public String getRule() { - return super.getRule() + " Activate this ability no more times each turn than the number of snow Swamps you control."; + return super.getRule() + " Activate no more times each turn than the number of snow Swamps you control."; } @Override diff --git a/Mage.Sets/src/mage/cards/y/YshtolaNightsBlessed.java b/Mage.Sets/src/mage/cards/y/YshtolaNightsBlessed.java index 8e03c239e26..835f8223562 100644 --- a/Mage.Sets/src/mage/cards/y/YshtolaNightsBlessed.java +++ b/Mage.Sets/src/mage/cards/y/YshtolaNightsBlessed.java @@ -48,7 +48,7 @@ public final class YshtolaNightsBlessed extends CardImpl { // At the beginning of each end step, if a player lost 4 or more life this turn, you draw a card. this.addAbility(new BeginningOfEndStepTriggeredAbility( - TargetController.ANY, new DrawCardSourceControllerEffect(1), + TargetController.ANY, new DrawCardSourceControllerEffect(1, true), false, YshtolaNightsBlessedCondition.instance ).addHint(YshtolaNightsBlessedCondition.getHint())); diff --git a/Mage/src/main/java/mage/abilities/common/DiscardedByOpponentTriggeredAbility.java b/Mage/src/main/java/mage/abilities/common/DiscardedByOpponentTriggeredAbility.java index 0d86a1058c2..dbbd43d354e 100644 --- a/Mage/src/main/java/mage/abilities/common/DiscardedByOpponentTriggeredAbility.java +++ b/Mage/src/main/java/mage/abilities/common/DiscardedByOpponentTriggeredAbility.java @@ -14,7 +14,7 @@ public class DiscardedByOpponentTriggeredAbility extends TriggeredAbilityImpl { public DiscardedByOpponentTriggeredAbility(Effect effect) { super(Zone.GRAVEYARD, effect, false); - setTriggerPhrase("When a spell or ability an opponent controls causes you to discard this card"); + setTriggerPhrase("When a spell or ability an opponent controls causes you to discard this card, "); } protected DiscardedByOpponentTriggeredAbility(final DiscardedByOpponentTriggeredAbility ability) { diff --git a/Mage/src/main/java/mage/abilities/common/EndOfCombatTriggeredAbility.java b/Mage/src/main/java/mage/abilities/common/EndOfCombatTriggeredAbility.java index a6d36c6fa6a..b09494c8ef7 100644 --- a/Mage/src/main/java/mage/abilities/common/EndOfCombatTriggeredAbility.java +++ b/Mage/src/main/java/mage/abilities/common/EndOfCombatTriggeredAbility.java @@ -40,7 +40,7 @@ public class EndOfCombatTriggeredAbility extends AtStepTriggeredAbility { case ANY: return "At end of combat, "; case YOU: - return "At the end of combat on your turn, "; + return "At end of combat on your turn, "; default: throw new UnsupportedOperationException("Unsupported TargetController in EndOfCombatTriggeredAbility: " + targetController); } diff --git a/Mage/src/main/java/mage/abilities/condition/common/AddendumCondition.java b/Mage/src/main/java/mage/abilities/condition/common/AddendumCondition.java index 81324372212..b5c3c8d0131 100644 --- a/Mage/src/main/java/mage/abilities/condition/common/AddendumCondition.java +++ b/Mage/src/main/java/mage/abilities/condition/common/AddendumCondition.java @@ -27,4 +27,9 @@ public enum AddendumCondition implements Condition { Spell spell = game.getSpell(source.getSourceId()); return spell != null && !spell.isCopy(); // copies are not casted } + + @Override + public String toString() { + return "you cast it during your main phase"; + } } diff --git a/Mage/src/main/java/mage/abilities/condition/common/SourceAttackingPlayerWithMostLifeCondition.java b/Mage/src/main/java/mage/abilities/condition/common/SourceAttackingPlayerWithMostLifeCondition.java index 7d066f2e29b..d2e2639c92d 100644 --- a/Mage/src/main/java/mage/abilities/condition/common/SourceAttackingPlayerWithMostLifeCondition.java +++ b/Mage/src/main/java/mage/abilities/condition/common/SourceAttackingPlayerWithMostLifeCondition.java @@ -31,6 +31,6 @@ public enum SourceAttackingPlayerWithMostLifeCondition implements Condition { @Override public String toString() { - return "{this} is attacking the player with the most life or tied for most life"; + return "it's attacking the player with the most life or tied for most life"; } } diff --git a/Mage/src/main/java/mage/abilities/condition/common/SourceEnteredThisTurnCondition.java b/Mage/src/main/java/mage/abilities/condition/common/SourceEnteredThisTurnCondition.java index 2ff18a230b8..8007d430b84 100644 --- a/Mage/src/main/java/mage/abilities/condition/common/SourceEnteredThisTurnCondition.java +++ b/Mage/src/main/java/mage/abilities/condition/common/SourceEnteredThisTurnCondition.java @@ -25,6 +25,6 @@ public enum SourceEnteredThisTurnCondition implements Condition { @Override public String toString() { - return "{this} " + (flag ? "entered" : "didn't enter") + " the battlefield this turn"; + return "{this} " + (flag ? "entered" : "didn't enter the battlefield") + " this turn"; } } diff --git a/Mage/src/main/java/mage/abilities/condition/common/SourceInExileCondition.java b/Mage/src/main/java/mage/abilities/condition/common/SourceInExileCondition.java index 88c82128151..7570560e115 100644 --- a/Mage/src/main/java/mage/abilities/condition/common/SourceInExileCondition.java +++ b/Mage/src/main/java/mage/abilities/condition/common/SourceInExileCondition.java @@ -20,6 +20,6 @@ public enum SourceInExileCondition implements Condition { @Override public String toString() { - return "{this} is exiled"; + return "this card is exiled"; } } diff --git a/Mage/src/main/java/mage/abilities/condition/common/SuspendedCondition.java b/Mage/src/main/java/mage/abilities/condition/common/SuspendedCondition.java index 83dcaad3e73..06bb40c33ce 100644 --- a/Mage/src/main/java/mage/abilities/condition/common/SuspendedCondition.java +++ b/Mage/src/main/java/mage/abilities/condition/common/SuspendedCondition.java @@ -43,7 +43,6 @@ public enum SuspendedCondition implements Condition { @Override public String toString() { - return "{this} is suspended"; + return "this card is suspended"; } - } diff --git a/Mage/src/main/java/mage/abilities/effects/CreateTokenCopySourceEffect.java b/Mage/src/main/java/mage/abilities/effects/CreateTokenCopySourceEffect.java index 2e8b722c0fa..1973604f84e 100644 --- a/Mage/src/main/java/mage/abilities/effects/CreateTokenCopySourceEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/CreateTokenCopySourceEffect.java @@ -6,6 +6,7 @@ import mage.constants.Outcome; import mage.game.Game; import mage.game.permanent.Permanent; import mage.target.targetpointer.FixedTarget; +import mage.util.CardUtil; /** * Created by glerman on 20/6/15. @@ -27,7 +28,7 @@ public class CreateTokenCopySourceEffect extends OneShotEffect { super(Outcome.PutCreatureInPlay); this.number = copies; this.tapped = tapped; - staticText = "create " + (copies > 1 ? copies : "a") + " " + (tapped ? "tapped " : "") + staticText = "create " + CardUtil.numberToText(copies, "a") + " " + (tapped ? "tapped " : "") + (copies > 1 ? "tokens that are" : "token that's") + " a copy of {this}"; } diff --git a/Mage/src/main/java/mage/abilities/effects/common/MeldEffect.java b/Mage/src/main/java/mage/abilities/effects/common/MeldEffect.java index 420f8af1044..0d85288b5dd 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/MeldEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/MeldEffect.java @@ -41,7 +41,7 @@ public class MeldEffect extends OneShotEffect { this.meldWithName = meldWithName; this.meldIntoName = meldIntoName; this.attacking = attacking; - this.staticText = "exile them, then meld them into " + meldWithName; + this.staticText = "exile them, then meld them into " + meldIntoName; } protected MeldEffect(final MeldEffect effect) { diff --git a/Mage/src/main/java/mage/abilities/effects/common/combat/MustBeBlockedByAllTargetEffect.java b/Mage/src/main/java/mage/abilities/effects/common/combat/MustBeBlockedByAllTargetEffect.java index fd41ecea46e..2a227ac59ab 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/combat/MustBeBlockedByAllTargetEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/combat/MustBeBlockedByAllTargetEffect.java @@ -19,7 +19,7 @@ public class MustBeBlockedByAllTargetEffect extends RequirementEffect { public MustBeBlockedByAllTargetEffect(Duration duration) { super(duration); - staticText = "All creatures able to block target creature " + + staticText = "all creatures able to block target creature " + (this.getDuration() == Duration.EndOfTurn ? "this turn " : "") + "do so"; } 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 07a75f3c492..cd961af75b6 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 @@ -2,12 +2,12 @@ package mage.abilities.effects.common.continuous; +import mage.abilities.Ability; +import mage.abilities.effects.ContinuousEffectImpl; import mage.constants.Duration; import mage.constants.Layer; import mage.constants.Outcome; import mage.constants.SubLayer; -import mage.abilities.Ability; -import mage.abilities.effects.ContinuousEffectImpl; import mage.game.Game; import mage.players.Player; @@ -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 have " + ability.getRule(); + staticText = "you " + (duration == Duration.WhileOnBattlefield ? "have" : "gain") + ability.getRule(); if (!duration.toString().isEmpty()) { staticText += ' ' + duration.toString(); } diff --git a/Mage/src/main/java/mage/abilities/effects/common/cost/CastFromHandForFreeEffect.java b/Mage/src/main/java/mage/abilities/effects/common/cost/CastFromHandForFreeEffect.java index 1e984c282c1..f71c5c2796d 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/cost/CastFromHandForFreeEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/cost/CastFromHandForFreeEffect.java @@ -24,7 +24,7 @@ public class CastFromHandForFreeEffect extends OneShotEffect { public CastFromHandForFreeEffect(FilterCard filter) { super(Outcome.PlayForFree); this.filter = filter; - this.staticText = "you may cast " + filter.getMessage() + " from your hand without paying its mana cost"; + this.staticText = "you may cast " + filter.getMessage() + (filter.getMessage().contains("your hand") ? "" : " from your hand") + " without paying its mana cost"; } protected CastFromHandForFreeEffect(final CastFromHandForFreeEffect effect) { diff --git a/Mage/src/main/java/mage/abilities/effects/mana/AddManaInAnyCombinationEffect.java b/Mage/src/main/java/mage/abilities/effects/mana/AddManaInAnyCombinationEffect.java index e81528cfa43..f65cdd8e12d 100644 --- a/Mage/src/main/java/mage/abilities/effects/mana/AddManaInAnyCombinationEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/mana/AddManaInAnyCombinationEffect.java @@ -150,7 +150,7 @@ public class AddManaInAnyCombinationEffect extends ManaEffect { } private String setText() { - StringBuilder sb = new StringBuilder("Add "); + StringBuilder sb = new StringBuilder("add "); String amountString = CardUtil.numberToText(amount.toString()); sb.append(amountString); sb.append(" mana in any combination of "); diff --git a/Mage/src/main/java/mage/game/permanent/token/QueenMarchesaAssassinToken.java b/Mage/src/main/java/mage/game/permanent/token/QueenMarchesaAssassinToken.java index a55a5821e01..da3427f80be 100644 --- a/Mage/src/main/java/mage/game/permanent/token/QueenMarchesaAssassinToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/QueenMarchesaAssassinToken.java @@ -12,7 +12,7 @@ import mage.constants.SubType; public final class QueenMarchesaAssassinToken extends TokenImpl { public QueenMarchesaAssassinToken() { - super("Assassin Token", "1/1 black Assassin creature tokens with deathtouch and haste"); + super("Assassin Token", "1/1 black Assassin creature token with deathtouch and haste"); cardType.add(CardType.CREATURE); color.setBlack(true); subtype.add(SubType.ASSASSIN); diff --git a/Mage/src/main/java/mage/game/permanent/token/SandWarriorToken.java b/Mage/src/main/java/mage/game/permanent/token/SandWarriorToken.java index 609017a96cd..bdcbb823b95 100644 --- a/Mage/src/main/java/mage/game/permanent/token/SandWarriorToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/SandWarriorToken.java @@ -10,7 +10,7 @@ import mage.constants.SubType; public final class SandWarriorToken extends TokenImpl { public SandWarriorToken() { - super("Sand Warrior Token", "1/1 red, green, and white Sand Warrior creature tokens"); + super("Sand Warrior Token", "1/1 red, green, and white Sand Warrior creature token"); cardType.add(CardType.CREATURE); color.setRed(true); color.setGreen(true); diff --git a/Mage/src/main/java/mage/util/CardUtil.java b/Mage/src/main/java/mage/util/CardUtil.java index 8cd26e37641..218444683cd 100644 --- a/Mage/src/main/java/mage/util/CardUtil.java +++ b/Mage/src/main/java/mage/util/CardUtil.java @@ -85,7 +85,7 @@ public final class CardUtil { public static final SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss.SSS"); private static final List costWords = Arrays.asList( - "put", "return", "exile", "discard", "sacrifice", "remove", "tap", "reveal", "pay", "collect", "forage" + "put", "return", "exile", "discard", "mill", "sacrifice", "remove", "tap", "reveal", "pay", "have", "collect", "forage" ); // search set code in commands like "set_code-card_name"