From 4959ef4d49f0a0c84151ee6181652d6b7920ebc7 Mon Sep 17 00:00:00 2001 From: xenohedron Date: Sat, 20 Jan 2024 23:13:03 -0500 Subject: [PATCH] another batch of text cleanup (#11694) * minor refactor EntersBattlefieldEffect * more minor refactoring * text fix * fix more text * more text adjustments * more text discrepancy fixes * continue the text fixes * followup fixes and more fixes --- .../src/mage/cards/a/AmberGristleOMaul.java | 2 +- Mage.Sets/src/mage/cards/a/AngelsTrumpet.java | 5 ++-- .../mage/cards/a/AngrathMinotaurPirate.java | 2 +- Mage.Sets/src/mage/cards/a/Antagonism.java | 7 ++--- .../src/mage/cards/a/ApocalypseDemon.java | 4 +-- .../src/mage/cards/a/ArchfiendOfIfnir.java | 2 +- .../src/mage/cards/b/BanewhipPunisher.java | 2 +- Mage.Sets/src/mage/cards/b/BlazeOfGlory.java | 3 +- .../src/mage/cards/b/BurningOfXinye.java | 12 ++++---- .../mage/cards/c/CelestialConvergence.java | 2 +- .../mage/cards/c/ChancellorOfTheAnnex.java | 3 +- Mage.Sets/src/mage/cards/c/Cryptoplasm.java | 2 +- Mage.Sets/src/mage/cards/d/Draco.java | 3 +- .../mage/cards/e/ElbrusTheBindingBlade.java | 6 ++-- Mage.Sets/src/mage/cards/e/Elminster.java | 2 +- .../src/mage/cards/f/FeveredVisions.java | 2 +- .../src/mage/cards/f/FirbolgFlutist.java | 4 +-- .../src/mage/cards/f/FlameKinWarScout.java | 2 +- Mage.Sets/src/mage/cards/f/Foil.java | 3 +- Mage.Sets/src/mage/cards/g/GemstoneMine.java | 3 +- .../src/mage/cards/g/GhituFireEater.java | 3 +- .../mage/cards/g/GideonMartialParagon.java | 5 ++-- Mage.Sets/src/mage/cards/g/GisaAndGeralf.java | 2 +- Mage.Sets/src/mage/cards/g/GleamOfBattle.java | 5 ++-- .../src/mage/cards/g/GravebreakerLamia.java | 3 +- .../mage/cards/h/HalsinEmeraldArchdruid.java | 2 +- .../src/mage/cards/h/HandsOfBinding.java | 3 +- .../src/mage/cards/h/HistoriansBoon.java | 8 ++--- .../mage/cards/h/HorrorOfTheBrokenLands.java | 3 +- Mage.Sets/src/mage/cards/h/HowlpackAlpha.java | 4 +-- Mage.Sets/src/mage/cards/i/Ichorid.java | 4 +-- Mage.Sets/src/mage/cards/i/Immerwolf.java | 2 +- Mage.Sets/src/mage/cards/i/InsidiousMist.java | 3 +- Mage.Sets/src/mage/cards/j/JunkGolem.java | 2 +- Mage.Sets/src/mage/cards/k/KaerveksTorch.java | 2 +- .../src/mage/cards/k/KeldonBattlewagon.java | 7 +++-- Mage.Sets/src/mage/cards/k/KembasLegion.java | 2 +- .../mage/cards/k/KorvoldGleefulGlutton.java | 10 +++---- .../src/mage/cards/k/KragmaWarcaller.java | 3 +- .../src/mage/cards/l/LegionLoyalist.java | 24 ++++++++------- .../src/mage/cards/l/LimitsOfSolidarity.java | 2 +- Mage.Sets/src/mage/cards/l/LoomingSpires.java | 10 +++---- Mage.Sets/src/mage/cards/m/Mise.java | 2 +- .../src/mage/cards/m/MoltenPrimordial.java | 2 +- Mage.Sets/src/mage/cards/n/NeeraWildMage.java | 5 +++- .../src/mage/cards/o/OnakkeOathkeeper.java | 4 ++- .../src/mage/cards/o/OswaldFiddlebender.java | 3 +- .../src/mage/cards/o/OverchargedAmalgam.java | 3 +- Mage.Sets/src/mage/cards/p/Painiac.java | 2 +- Mage.Sets/src/mage/cards/p/PyreZombie.java | 2 +- Mage.Sets/src/mage/cards/r/ReadyWilling.java | 24 +++++++-------- Mage.Sets/src/mage/cards/r/RiotControl.java | 7 ++--- .../src/mage/cards/s/ScionOfHalaster.java | 2 +- .../src/mage/cards/s/SimicManipulator.java | 2 +- .../src/mage/cards/s/SkarrgTheRagePits.java | 6 ++-- .../src/mage/cards/s/SkirkDrillSergeant.java | 2 +- .../mage/cards/s/SmeltWardGatekeepers.java | 2 +- Mage.Sets/src/mage/cards/s/SoulBurn.java | 2 +- Mage.Sets/src/mage/cards/s/SoulRansom.java | 3 +- .../src/mage/cards/s/SpellbindingSoprano.java | 3 +- Mage.Sets/src/mage/cards/s/StickTogether.java | 12 ++++---- .../src/mage/cards/s/StructuralCollapse.java | 2 +- .../src/mage/cards/s/SwoopingPteranodon.java | 6 ++-- Mage.Sets/src/mage/cards/t/TheFallen.java | 4 +-- .../mage/cards/t/TheSpaceFamilyGoblinson.java | 5 +--- Mage.Sets/src/mage/cards/t/ThiefOfBlood.java | 4 +-- .../src/mage/cards/t/TinStreetMarket.java | 4 +-- .../src/mage/cards/t/TreacherousVampire.java | 2 +- .../src/mage/cards/u/UbulSarGatekeepers.java | 2 +- .../src/mage/cards/u/UndercellarSweep.java | 4 +-- .../src/mage/cards/u/UnderworldFires.java | 3 +- .../mage/cards/v/VaevictisAsmadiTheDire.java | 11 ++----- Mage.Sets/src/mage/cards/v/Vebulid.java | 7 +++-- .../src/mage/cards/v/ViashinoCutthroat.java | 2 +- .../src/mage/cards/w/WheelOfTorture.java | 11 ++++--- .../src/mage/cards/w/WindingCanyons.java | 2 +- Mage.Sets/src/mage/cards/w/WormfangManta.java | 3 +- .../mage/abilities/TriggeredAbilityImpl.java | 2 +- ...BecomesAttachedToCreatureSourceEffect.java | 7 +++-- .../effects/EntersBattlefieldEffect.java | 20 +++++-------- .../common/AddContinuousEffectToGame.java | 3 ++ ...nControllersNextUntapStepSourceEffect.java | 1 + ...xileCardYouChooseTargetOpponentEffect.java | 2 +- ...anBlockAdditionalCreatureTargetEffect.java | 29 ++++++------------- 84 files changed, 192 insertions(+), 212 deletions(-) diff --git a/Mage.Sets/src/mage/cards/a/AmberGristleOMaul.java b/Mage.Sets/src/mage/cards/a/AmberGristleOMaul.java index 947d7a117cd..316a695aca8 100644 --- a/Mage.Sets/src/mage/cards/a/AmberGristleOMaul.java +++ b/Mage.Sets/src/mage/cards/a/AmberGristleOMaul.java @@ -87,7 +87,7 @@ enum AmberGristleOMaulValue implements DynamicValue { @Override public String getMessage() { - return "player you're attacking"; + return "player being attacked"; } @Override diff --git a/Mage.Sets/src/mage/cards/a/AngelsTrumpet.java b/Mage.Sets/src/mage/cards/a/AngelsTrumpet.java index 8826d33a545..f0858261980 100644 --- a/Mage.Sets/src/mage/cards/a/AngelsTrumpet.java +++ b/Mage.Sets/src/mage/cards/a/AngelsTrumpet.java @@ -11,7 +11,6 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; import mage.filter.StaticFilters; -import mage.filter.common.FilterCreaturePermanent; import mage.game.Game; import mage.game.permanent.Permanent; import mage.players.Player; @@ -28,10 +27,10 @@ public final class AngelsTrumpet extends CardImpl { super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{3}"); // All creatures have vigilance. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAllEffect(VigilanceAbility.getInstance(), Duration.WhileOnBattlefield, new FilterCreaturePermanent()))); + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAllEffect(VigilanceAbility.getInstance(), Duration.WhileOnBattlefield, StaticFilters.FILTER_PERMANENT_ALL_CREATURES))); // At the beginning of each player's end step, tap all untapped creatures that player controls that didn't attack this turn. Angel's Trumpet deals damage to the player equal to the number of creatures tapped this way. - this.addAbility(new BeginningOfEndStepTriggeredAbility(new AngelsTrumpetTapEffect(), TargetController.ANY, false)); + this.addAbility(new BeginningOfEndStepTriggeredAbility(new AngelsTrumpetTapEffect(), TargetController.EACH_PLAYER, false)); } private AngelsTrumpet(final AngelsTrumpet card) { diff --git a/Mage.Sets/src/mage/cards/a/AngrathMinotaurPirate.java b/Mage.Sets/src/mage/cards/a/AngrathMinotaurPirate.java index e94da3eddbd..5f1dadc61a5 100644 --- a/Mage.Sets/src/mage/cards/a/AngrathMinotaurPirate.java +++ b/Mage.Sets/src/mage/cards/a/AngrathMinotaurPirate.java @@ -72,7 +72,7 @@ class AngrathMinotaurPirateThirdAbilityEffect extends OneShotEffect { AngrathMinotaurPirateThirdAbilityEffect() { super(Outcome.DestroyPermanent); - this.staticText = "Destroy all creature target opponent controls. {this} deals damage to that player equal to their total power"; + this.staticText = "Destroy all creatures target opponent controls. {this} deals damage to that player equal to their total power"; } private AngrathMinotaurPirateThirdAbilityEffect(final AngrathMinotaurPirateThirdAbilityEffect effect) { diff --git a/Mage.Sets/src/mage/cards/a/Antagonism.java b/Mage.Sets/src/mage/cards/a/Antagonism.java index 9c3da9d05ab..081acc91a4b 100644 --- a/Mage.Sets/src/mage/cards/a/Antagonism.java +++ b/Mage.Sets/src/mage/cards/a/Antagonism.java @@ -26,7 +26,7 @@ public final class Antagonism extends CardImpl { // At the beginning of each player's end step, Antagonism deals 2 damage to that player unless one of their opponents was dealt damage this turn. this.addAbility(new BeginningOfEndStepTriggeredAbility(new ConditionalOneShotEffect(new DamageTargetEffect(2), - new OpponentWasNotDealtDamageCondition(), rule), TargetController.ANY, false)); + AntagonismCondition.instance, rule), TargetController.EACH_PLAYER, false)); } @@ -40,10 +40,9 @@ public final class Antagonism extends CardImpl { } } -class OpponentWasNotDealtDamageCondition implements Condition { +enum AntagonismCondition implements Condition { - public OpponentWasNotDealtDamageCondition() { - } + instance; @Override public boolean apply(Game game, Ability source) { diff --git a/Mage.Sets/src/mage/cards/a/ApocalypseDemon.java b/Mage.Sets/src/mage/cards/a/ApocalypseDemon.java index 099dc99680b..8d391b9dd9d 100644 --- a/Mage.Sets/src/mage/cards/a/ApocalypseDemon.java +++ b/Mage.Sets/src/mage/cards/a/ApocalypseDemon.java @@ -1,4 +1,3 @@ - package mage.cards.a; import java.util.UUID; @@ -13,7 +12,6 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; import mage.filter.StaticFilters; -import mage.target.common.TargetControlledPermanent; /** * @@ -29,7 +27,7 @@ public final class ApocalypseDemon extends CardImpl { this.addAbility(FlyingAbility.getInstance()); // Apocalypse Demon's power and toughness are each equal to the number of cards in your graveyard. - this.addAbility(new SimpleStaticAbility(Zone.ALL, new SetBasePowerToughnessSourceEffect(new CardsInControllerGraveyardCount()))); + this.addAbility(new SimpleStaticAbility(Zone.ALL, new SetBasePowerToughnessSourceEffect(new CardsInControllerGraveyardCount(StaticFilters.FILTER_CARD_CARDS)))); // At the beginning of your upkeep, tap Apocalypse Demon unless you sacrifice another creature. TapSourceUnlessPaysEffect tapEffect = new TapSourceUnlessPaysEffect(new SacrificeTargetCost(StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE)); diff --git a/Mage.Sets/src/mage/cards/a/ArchfiendOfIfnir.java b/Mage.Sets/src/mage/cards/a/ArchfiendOfIfnir.java index 7f21c1c5e21..be1c4d15775 100644 --- a/Mage.Sets/src/mage/cards/a/ArchfiendOfIfnir.java +++ b/Mage.Sets/src/mage/cards/a/ArchfiendOfIfnir.java @@ -37,7 +37,7 @@ public final class ArchfiendOfIfnir extends CardImpl { CounterType.M1M1.createInstance(1), new FilterOpponentsCreaturePermanent("creature your opponents control") ) - )); + ).setTriggerPhrase("Whenever you cycle or discard another card, ")); // Cycling {2} this.addAbility(new CyclingAbility(new ManaCostsImpl<>("{2}"))); diff --git a/Mage.Sets/src/mage/cards/b/BanewhipPunisher.java b/Mage.Sets/src/mage/cards/b/BanewhipPunisher.java index 586e3b3168c..50aaa7cb01b 100644 --- a/Mage.Sets/src/mage/cards/b/BanewhipPunisher.java +++ b/Mage.Sets/src/mage/cards/b/BanewhipPunisher.java @@ -21,7 +21,7 @@ import mage.target.common.TargetCreaturePermanent; public final class BanewhipPunisher extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with a -1/-1 counter on it"); + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature that has a -1/-1 counter on it"); static { filter.add(CounterType.M1M1.getPredicate()); diff --git a/Mage.Sets/src/mage/cards/b/BlazeOfGlory.java b/Mage.Sets/src/mage/cards/b/BlazeOfGlory.java index 0b7b64e250c..d28d802762e 100644 --- a/Mage.Sets/src/mage/cards/b/BlazeOfGlory.java +++ b/Mage.Sets/src/mage/cards/b/BlazeOfGlory.java @@ -37,7 +37,8 @@ public final class BlazeOfGlory extends CardImpl { // Target creature defending player controls can block any number of creatures this turn. It blocks each attacking creature this turn if able. this.getSpellAbility().addTarget(new TargetCreaturePermanent(filter)); - this.getSpellAbility().addEffect(new CanBlockAdditionalCreatureTargetEffect(Duration.EndOfTurn, 0)); + this.getSpellAbility().addEffect(new CanBlockAdditionalCreatureTargetEffect(Duration.EndOfTurn, 0) + .setText("target creature defending player controls can block any number of creatures this turn")); this.getSpellAbility().addEffect(new BlazeOfGloryRequirementEffect()); } diff --git a/Mage.Sets/src/mage/cards/b/BurningOfXinye.java b/Mage.Sets/src/mage/cards/b/BurningOfXinye.java index f898f531b96..d0c1ff41a4c 100644 --- a/Mage.Sets/src/mage/cards/b/BurningOfXinye.java +++ b/Mage.Sets/src/mage/cards/b/BurningOfXinye.java @@ -1,4 +1,3 @@ - package mage.cards.b; import java.util.UUID; @@ -9,15 +8,14 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Outcome; +import mage.filter.StaticFilters; import mage.filter.common.FilterControlledLandPermanent; -import mage.filter.common.FilterCreaturePermanent; import mage.game.Game; import mage.game.permanent.Permanent; import mage.players.Player; import mage.target.Target; import mage.target.common.TargetControlledPermanent; import mage.target.common.TargetOpponent; -import mage.target.common.TargetSacrifice; /** * @@ -32,7 +30,7 @@ public final class BurningOfXinye extends CardImpl { // You destroy four lands you control, then target opponent destroys four lands they control. Then Burning of Xinye deals 4 damage to each creature. this.getSpellAbility().addTarget(new TargetOpponent()); this.getSpellAbility().addEffect(new BurningOfXinyeEffect()); - this.getSpellAbility().addEffect(new DamageAllEffect(4, new FilterCreaturePermanent())); + this.getSpellAbility().addEffect(new DamageAllEffect(4, StaticFilters.FILTER_PERMANENT_CREATURE).concatBy("Then")); } private BurningOfXinye(final BurningOfXinye card) { @@ -50,7 +48,7 @@ class BurningOfXinyeEffect extends OneShotEffect{ private static final FilterControlledLandPermanent filter = new FilterControlledLandPermanent(); - public BurningOfXinyeEffect() { + BurningOfXinyeEffect() { super(Outcome.DestroyPermanent); staticText = "You destroy four lands you control, then target opponent destroys four lands they control"; } @@ -82,10 +80,10 @@ class BurningOfXinyeEffect extends OneShotEffect{ int realCount = game.getBattlefield().countAll(filter, player.getId(), game); int amount = Math.min(4, realCount); - Target target = new TargetSacrifice(amount, filter); + Target target = new TargetControlledPermanent(amount, amount, filter, true); if (amount > 0 && target.canChoose(player.getId(), source, game)) { while (!target.isChosen() && target.canChoose(player.getId(), source, game) && player.canRespond()) { - player.choose(Outcome.Sacrifice, target, source, game); + player.choose(Outcome.DestroyPermanent, target, source, game); } for (UUID targetId : target.getTargets()) { diff --git a/Mage.Sets/src/mage/cards/c/CelestialConvergence.java b/Mage.Sets/src/mage/cards/c/CelestialConvergence.java index 03fb1e1fe7d..ed0959b0b18 100644 --- a/Mage.Sets/src/mage/cards/c/CelestialConvergence.java +++ b/Mage.Sets/src/mage/cards/c/CelestialConvergence.java @@ -30,7 +30,7 @@ public final class CelestialConvergence extends CardImpl { // Celestial Convergence enters the battlefield with seven omen counters on it. Effect effect = new AddCountersSourceEffect(CounterType.OMEN.createInstance(7)); - this.addAbility(new EntersBattlefieldAbility(effect, "with seven omen counters")); + this.addAbility(new EntersBattlefieldAbility(effect, "with seven omen counters on it")); // At the beginning of your upkeep, remove an omen counter from Celestial Convergence. If there are no omen counters on Celestial Convergence, the player with the highest life total wins the game. If two or more players are tied for highest life total, the game is a draw. Ability ability = new BeginningOfUpkeepTriggeredAbility( diff --git a/Mage.Sets/src/mage/cards/c/ChancellorOfTheAnnex.java b/Mage.Sets/src/mage/cards/c/ChancellorOfTheAnnex.java index 8e9f7acbd32..a7032fb1b60 100644 --- a/Mage.Sets/src/mage/cards/c/ChancellorOfTheAnnex.java +++ b/Mage.Sets/src/mage/cards/c/ChancellorOfTheAnnex.java @@ -21,7 +21,6 @@ import mage.constants.Zone; import mage.filter.StaticFilters; import mage.game.Game; import mage.game.events.GameEvent; -import mage.game.events.GameEvent.EventType; import mage.target.targetpointer.FixedTarget; /** @@ -44,7 +43,7 @@ public final class ChancellorOfTheAnnex extends CardImpl { this.addAbility(FlyingAbility.getInstance()); // Whenever an opponent casts a spell, counter it unless that player pays {1}. - this.addAbility(new SpellCastOpponentTriggeredAbility(Zone.BATTLEFIELD, new CounterUnlessPaysEffect(new GenericManaCost(1)), StaticFilters.FILTER_SPELL, false, SetTargetPointer.SPELL)); + this.addAbility(new SpellCastOpponentTriggeredAbility(Zone.BATTLEFIELD, new CounterUnlessPaysEffect(new GenericManaCost(1)), StaticFilters.FILTER_SPELL_A, false, SetTargetPointer.SPELL)); } private ChancellorOfTheAnnex(final ChancellorOfTheAnnex card) { diff --git a/Mage.Sets/src/mage/cards/c/Cryptoplasm.java b/Mage.Sets/src/mage/cards/c/Cryptoplasm.java index c9659f99e2f..9045046ba4d 100644 --- a/Mage.Sets/src/mage/cards/c/Cryptoplasm.java +++ b/Mage.Sets/src/mage/cards/c/Cryptoplasm.java @@ -60,7 +60,7 @@ class CryptoplasmEffect extends OneShotEffect { CryptoplasmEffect() { super(Outcome.Copy); - this.staticText = "you may have {this} become a copy of another target creature, except it gains this ability"; + this.staticText = "you may have {this} become a copy of another target creature, except it has this ability"; } private CryptoplasmEffect(final CryptoplasmEffect effect) { diff --git a/Mage.Sets/src/mage/cards/d/Draco.java b/Mage.Sets/src/mage/cards/d/Draco.java index 2d5b091d559..53ae686def5 100644 --- a/Mage.Sets/src/mage/cards/d/Draco.java +++ b/Mage.Sets/src/mage/cards/d/Draco.java @@ -39,7 +39,8 @@ public final class Draco extends CardImpl { this.addAbility(new SimpleStaticAbility(Zone.ALL, new DracoCostReductionEffect()).addHint(DomainHint.instance)); // Domain - At the beginning of your upkeep, sacrifice Draco unless you pay {10}. This cost is reduced by {2} for each basic land type among lands you control. - this.addAbility(new BeginningOfUpkeepTriggeredAbility(new DracoSacrificeUnlessPaysEffect(), TargetController.YOU, false)); + this.addAbility(new BeginningOfUpkeepTriggeredAbility(new DracoSacrificeUnlessPaysEffect(), TargetController.YOU, false) + .setAbilityWord(AbilityWord.DOMAIN)); } private Draco(final Draco card) { diff --git a/Mage.Sets/src/mage/cards/e/ElbrusTheBindingBlade.java b/Mage.Sets/src/mage/cards/e/ElbrusTheBindingBlade.java index 176f13a307f..46a39195b04 100644 --- a/Mage.Sets/src/mage/cards/e/ElbrusTheBindingBlade.java +++ b/Mage.Sets/src/mage/cards/e/ElbrusTheBindingBlade.java @@ -37,7 +37,7 @@ public final class ElbrusTheBindingBlade extends CardImpl { // Equipped creature gets +1/+0. this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEquippedEffect(1, 0))); // When equipped creature deals combat damage to a player, unattach Elbrus, the Binding Blade, then transform it. - this.addAbility(new DealsDamageToAPlayerAttachedTriggeredAbility(new ElbrusTheBindingBladeEffect(), "equipped", true)); + this.addAbility(new DealsDamageToAPlayerAttachedTriggeredAbility(new ElbrusTheBindingBladeEffect(), "equipped", false)); // Equip {1} this.addAbility(new EquipAbility(Outcome.BoostCreature, new GenericManaCost(1), new TargetControlledCreaturePermanent(), false)); } @@ -53,7 +53,7 @@ public final class ElbrusTheBindingBlade extends CardImpl { } class ElbrusTheBindingBladeEffect extends OneShotEffect { - public ElbrusTheBindingBladeEffect() { + ElbrusTheBindingBladeEffect() { super(Outcome.BecomeCreature); staticText = "unattach {this}, then transform it"; } @@ -80,4 +80,4 @@ class ElbrusTheBindingBladeEffect extends OneShotEffect { return new ElbrusTheBindingBladeEffect(this); } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/e/Elminster.java b/Mage.Sets/src/mage/cards/e/Elminster.java index e3f07c4d147..a4939e82ef8 100644 --- a/Mage.Sets/src/mage/cards/e/Elminster.java +++ b/Mage.Sets/src/mage/cards/e/Elminster.java @@ -68,7 +68,7 @@ class ElminsterReductionEffect extends CostModificationEffectImpl { ElminsterReductionEffect() { super(Duration.EndOfTurn, Outcome.Benefit, CostModificationType.REDUCE_COST); - staticText = " the next instant or sorcery spell you cast this turn costs {X} less to cast, " + + staticText = "the next instant or sorcery spell you cast this turn costs {X} less to cast, " + "where X is the number of cards looked at while scrying this way"; } diff --git a/Mage.Sets/src/mage/cards/f/FeveredVisions.java b/Mage.Sets/src/mage/cards/f/FeveredVisions.java index 8a7fa9c970d..70b7d981553 100644 --- a/Mage.Sets/src/mage/cards/f/FeveredVisions.java +++ b/Mage.Sets/src/mage/cards/f/FeveredVisions.java @@ -24,7 +24,7 @@ public final class FeveredVisions extends CardImpl { // At the beginning of each player's end step, that player draws a card. If the player is your opponent and has four or more cards in hand, // Fevered Visions deals 2 damage to that player. - this.addAbility(new BeginningOfEndStepTriggeredAbility(new FeveredVisionsEffect(), TargetController.ANY, false)); + this.addAbility(new BeginningOfEndStepTriggeredAbility(new FeveredVisionsEffect(), TargetController.EACH_PLAYER, false)); } private FeveredVisions(final FeveredVisions card) { diff --git a/Mage.Sets/src/mage/cards/f/FirbolgFlutist.java b/Mage.Sets/src/mage/cards/f/FirbolgFlutist.java index c86198abb5a..ad9f3e92b5d 100644 --- a/Mage.Sets/src/mage/cards/f/FirbolgFlutist.java +++ b/Mage.Sets/src/mage/cards/f/FirbolgFlutist.java @@ -35,7 +35,7 @@ public final class FirbolgFlutist extends CardImpl { Ability ability = new EntersBattlefieldTriggeredAbility( new GainControlTargetEffect(Duration.EndOfTurn), false ); - ability.addEffect(new UntapTargetEffect().setText("Untap that creature")); + ability.addEffect(new UntapTargetEffect().setText("Untap it")); ability.addEffect(new GainAbilityTargetEffect( HasteAbility.getInstance(), Duration.EndOfTurn ).setText("It gains haste")); @@ -43,7 +43,7 @@ public final class FirbolgFlutist extends CardImpl { new MyriadAbility(), Duration.EndOfTurn ).setText("and myriad until end of turn")); ability.addTarget(new TargetCreaturePermanent(StaticFilters.FILTER_CREATURE_YOU_DONT_CONTROL)); - this.addAbility(ability.withFlavorWord("Captivating Performance")); + this.addAbility(ability.withFlavorWord("Enthralling Performance")); } private FirbolgFlutist(final FirbolgFlutist card) { diff --git a/Mage.Sets/src/mage/cards/f/FlameKinWarScout.java b/Mage.Sets/src/mage/cards/f/FlameKinWarScout.java index 11ba2ab376b..657891e617d 100644 --- a/Mage.Sets/src/mage/cards/f/FlameKinWarScout.java +++ b/Mage.Sets/src/mage/cards/f/FlameKinWarScout.java @@ -34,7 +34,7 @@ public final class FlameKinWarScout extends CardImpl { Zone.BATTLEFIELD, new FlameKinWarScourEffect(), StaticFilters.FILTER_ANOTHER_CREATURE, false, SetTargetPointer.PERMANENT - )); + ).setTriggerPhrase("When another creature enters the battlefield, ")); } diff --git a/Mage.Sets/src/mage/cards/f/Foil.java b/Mage.Sets/src/mage/cards/f/Foil.java index 33d59d124bd..a654286aef4 100644 --- a/Mage.Sets/src/mage/cards/f/Foil.java +++ b/Mage.Sets/src/mage/cards/f/Foil.java @@ -28,10 +28,9 @@ public final class Foil extends CardImpl { public Foil(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{2}{U}{U}"); - // You may discard an Island card and another card rather than pay Foil's mana cost. Ability ability = new AlternativeCostSourceAbility(new DiscardTargetCost(new TargetCardInHand(filter))); - ability.addCost(new DiscardTargetCost(new TargetCardInHand(new FilterCard("another card")))); + ability.addCost(new DiscardTargetCost(new TargetCardInHand(new FilterCard("another card"))).setText("another card")); this.addAbility(ability); // Counter target spell. diff --git a/Mage.Sets/src/mage/cards/g/GemstoneMine.java b/Mage.Sets/src/mage/cards/g/GemstoneMine.java index 3362f4643fe..50c2aa87f78 100644 --- a/Mage.Sets/src/mage/cards/g/GemstoneMine.java +++ b/Mage.Sets/src/mage/cards/g/GemstoneMine.java @@ -25,7 +25,8 @@ public final class GemstoneMine extends CardImpl { super(ownerId,setInfo,new CardType[]{CardType.LAND},""); // Gemstone Mine enters the battlefield with three mining counters on it. - this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.MINING.createInstance(3)))); + this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.MINING.createInstance(3)), + "with three mining counters on it")); // {T}, Remove a mining counter from Gemstone Mine: Add one mana of any color. If there are no mining counters on Gemstone Mine, sacrifice it. Ability ability = new AnyColorManaAbility(); diff --git a/Mage.Sets/src/mage/cards/g/GhituFireEater.java b/Mage.Sets/src/mage/cards/g/GhituFireEater.java index ee860c85641..05e2e35baec 100644 --- a/Mage.Sets/src/mage/cards/g/GhituFireEater.java +++ b/Mage.Sets/src/mage/cards/g/GhituFireEater.java @@ -31,7 +31,8 @@ public final class GhituFireEater extends CardImpl { this.toughness = new MageInt(2); // {T}, Sacrifice Ghitu Fire-Eater: Ghitu Fire-Eater deals damage equal to its power to any target. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(new SourcePermanentPowerCount()), new TapSourceCost()); + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(new SourcePermanentPowerCount()) + .setText("it deals damage equal to its power to any target"), new TapSourceCost()); ability.addCost(new SacrificeSourceCost()); ability.addTarget(new TargetAnyTarget()); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/g/GideonMartialParagon.java b/Mage.Sets/src/mage/cards/g/GideonMartialParagon.java index 3816fe18765..ee10c321e5b 100644 --- a/Mage.Sets/src/mage/cards/g/GideonMartialParagon.java +++ b/Mage.Sets/src/mage/cards/g/GideonMartialParagon.java @@ -1,4 +1,3 @@ - package mage.cards.g; import java.util.UUID; @@ -17,7 +16,7 @@ import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Duration; import mage.constants.SuperType; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.StaticFilters; import mage.filter.common.FilterOpponentsCreaturePermanent; import mage.game.permanent.token.TokenImpl; @@ -36,7 +35,7 @@ public final class GideonMartialParagon extends CardImpl { this.setStartingLoyalty(5); // +2: Untap all creatures you control. Those creatures get +1/+1 until end of turn. - LoyaltyAbility ability = new LoyaltyAbility(new UntapAllEffect(new FilterControlledCreaturePermanent()), 2); + LoyaltyAbility ability = new LoyaltyAbility(new UntapAllEffect(StaticFilters.FILTER_CONTROLLED_CREATURES), 2); Effect effect = new BoostControlledEffect(1, 1, Duration.EndOfTurn); effect.setText("Those creatures get +1/+1 until end of turn"); ability.addEffect(effect); diff --git a/Mage.Sets/src/mage/cards/g/GisaAndGeralf.java b/Mage.Sets/src/mage/cards/g/GisaAndGeralf.java index 07bd25c2985..8cab6cf72f9 100644 --- a/Mage.Sets/src/mage/cards/g/GisaAndGeralf.java +++ b/Mage.Sets/src/mage/cards/g/GisaAndGeralf.java @@ -58,7 +58,7 @@ class GisaAndGeralfCastFromGraveyardEffect extends AsThoughEffectImpl { GisaAndGeralfCastFromGraveyardEffect() { super(AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, Duration.WhileOnBattlefield, Outcome.PutCreatureInPlay); - staticText = "During each of your turns, you may cast a Zombie creature spell from your graveyard"; + staticText = "Once during each of your turns, you may cast a Zombie creature spell from your graveyard"; } private GisaAndGeralfCastFromGraveyardEffect(final GisaAndGeralfCastFromGraveyardEffect effect) { diff --git a/Mage.Sets/src/mage/cards/g/GleamOfBattle.java b/Mage.Sets/src/mage/cards/g/GleamOfBattle.java index 8854d909ebe..9a8cae2925c 100644 --- a/Mage.Sets/src/mage/cards/g/GleamOfBattle.java +++ b/Mage.Sets/src/mage/cards/g/GleamOfBattle.java @@ -1,4 +1,3 @@ - package mage.cards.g; import java.util.UUID; @@ -18,9 +17,9 @@ public final class GleamOfBattle extends CardImpl { public GleamOfBattle(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{4}{R}{W}"); - // Whenever a creature you control attacks, put a +1/+1 counter on it. - this.addAbility(new AttacksCreatureYouControlTriggeredAbility(new AddCountersTargetEffect(CounterType.P1P1.createInstance()), false, true)); + this.addAbility(new AttacksCreatureYouControlTriggeredAbility(new AddCountersTargetEffect(CounterType.P1P1.createInstance()) + .setText("put a +1/+1 counter on it"), false, true)); } private GleamOfBattle(final GleamOfBattle card) { diff --git a/Mage.Sets/src/mage/cards/g/GravebreakerLamia.java b/Mage.Sets/src/mage/cards/g/GravebreakerLamia.java index a769bc31a85..c4914b0d7f1 100644 --- a/Mage.Sets/src/mage/cards/g/GravebreakerLamia.java +++ b/Mage.Sets/src/mage/cards/g/GravebreakerLamia.java @@ -40,7 +40,8 @@ public final class GravebreakerLamia extends CardImpl { this.addAbility(LifelinkAbility.getInstance()); // When Gravebreaker Lamia enters the battlefield, search your library for a card, put it into your graveyard, then shuffle your library. - this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInGraveyardEffect(), false)); + this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInGraveyardEffect() + .setText("search your library for a card, put it into your graveyard, then shuffle"), false)); // Spells you cast from your graveyard cost {1} less to cast. this.addAbility(new SimpleStaticAbility(new SpellsCostReductionControllerEffect(filter, 1))); diff --git a/Mage.Sets/src/mage/cards/h/HalsinEmeraldArchdruid.java b/Mage.Sets/src/mage/cards/h/HalsinEmeraldArchdruid.java index d924c3dea2b..28627014685 100644 --- a/Mage.Sets/src/mage/cards/h/HalsinEmeraldArchdruid.java +++ b/Mage.Sets/src/mage/cards/h/HalsinEmeraldArchdruid.java @@ -62,7 +62,7 @@ class HalsinEmeraldArchdruidEffect extends ContinuousEffectImpl { HalsinEmeraldArchdruidEffect() { super(Duration.EndOfTurn, Outcome.Benefit); staticText = "until end of turn, target token you control becomes a green Bear creature " + - "with base power and toughness 4/4 in addition to its other types and colors"; + "with base power and toughness 4/4 in addition to its other colors and types"; } private HalsinEmeraldArchdruidEffect(final HalsinEmeraldArchdruidEffect effect) { diff --git a/Mage.Sets/src/mage/cards/h/HandsOfBinding.java b/Mage.Sets/src/mage/cards/h/HandsOfBinding.java index 2823bc74225..78aa695dd1a 100644 --- a/Mage.Sets/src/mage/cards/h/HandsOfBinding.java +++ b/Mage.Sets/src/mage/cards/h/HandsOfBinding.java @@ -7,7 +7,6 @@ import mage.abilities.effects.common.TapTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.constants.TargetController; import mage.filter.StaticFilters; import mage.target.common.TargetCreaturePermanent; @@ -22,7 +21,7 @@ public final class HandsOfBinding extends CardImpl { //Tap target creature an opponent controls. That creature doesn't untap during its controller's next untap step. this.getSpellAbility().addEffect(new TapTargetEffect()); - this.getSpellAbility().addEffect(new DontUntapInControllersNextUntapStepTargetEffect()); + this.getSpellAbility().addEffect(new DontUntapInControllersNextUntapStepTargetEffect("that creature")); this.getSpellAbility().addTarget(new TargetCreaturePermanent(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE)); //Cipher this.getSpellAbility().addEffect(new CipherEffect()); diff --git a/Mage.Sets/src/mage/cards/h/HistoriansBoon.java b/Mage.Sets/src/mage/cards/h/HistoriansBoon.java index 5302f5ce476..c7e68127155 100644 --- a/Mage.Sets/src/mage/cards/h/HistoriansBoon.java +++ b/Mage.Sets/src/mage/cards/h/HistoriansBoon.java @@ -29,7 +29,7 @@ import java.util.UUID; public final class HistoriansBoon extends CardImpl { private static final FilterPermanent filter - = new FilterControlledEnchantmentPermanent("another nontoken enchantment"); + = new FilterControlledEnchantmentPermanent("nontoken enchantment"); static { filter.add(TokenPredicate.FALSE); @@ -61,6 +61,7 @@ class HistoriansBoonTriggeredAbility extends TriggeredAbilityImpl { HistoriansBoonTriggeredAbility() { super(Zone.BATTLEFIELD, new CreateTokenEffect(new AngelVigilanceToken())); + setTriggerPhrase("Whenever the final chapter ability of a Saga you control triggers, "); } private HistoriansBoonTriggeredAbility(final HistoriansBoonTriggeredAbility ability) { @@ -95,9 +96,4 @@ class HistoriansBoonTriggeredAbility extends TriggeredAbilityImpl { return SagaAbility.isFinalAbility(stackObject.getStackAbility(), maxChapter); } - @Override - public String getRule() { - return "Whenever the final chapter of a Saga you control triggers, " + - "create a 4/4 white Angel creature token with flying and vigilance."; - } } diff --git a/Mage.Sets/src/mage/cards/h/HorrorOfTheBrokenLands.java b/Mage.Sets/src/mage/cards/h/HorrorOfTheBrokenLands.java index c9b1006d2a4..f5e597c7751 100644 --- a/Mage.Sets/src/mage/cards/h/HorrorOfTheBrokenLands.java +++ b/Mage.Sets/src/mage/cards/h/HorrorOfTheBrokenLands.java @@ -27,7 +27,8 @@ public final class HorrorOfTheBrokenLands extends CardImpl { this.toughness = new MageInt(4); // Whenever you cycle or discard another card, Horror of the Broken Lands gets +2/+1 until end of turn. - this.addAbility(new CycleOrDiscardControllerTriggeredAbility(new BoostSourceEffect(2, 1, Duration.EndOfTurn))); + this.addAbility(new CycleOrDiscardControllerTriggeredAbility(new BoostSourceEffect(2, 1, Duration.EndOfTurn)) + .setTriggerPhrase("Whenever you cycle or discard another card, ")); // Cycling {B} this.addAbility(new CyclingAbility(new ManaCostsImpl<>("{B}"))); diff --git a/Mage.Sets/src/mage/cards/h/HowlpackAlpha.java b/Mage.Sets/src/mage/cards/h/HowlpackAlpha.java index 8ac3ceb528c..a029036ad52 100644 --- a/Mage.Sets/src/mage/cards/h/HowlpackAlpha.java +++ b/Mage.Sets/src/mage/cards/h/HowlpackAlpha.java @@ -22,10 +22,8 @@ import java.util.UUID; */ public final class HowlpackAlpha extends CardImpl { - private static final String ruleText = "At the beginning of your end step, create a 2/2 green Wolf creature token"; - private static final FilterCreaturePermanent filter - = new FilterCreaturePermanent("Werewolf and Wolf creatures"); + = new FilterCreaturePermanent("each other creature you control that's a Werewolf or a Wolf"); static { filter.add(Predicates.or( diff --git a/Mage.Sets/src/mage/cards/i/Ichorid.java b/Mage.Sets/src/mage/cards/i/Ichorid.java index 32300ca63b1..000dc81d113 100644 --- a/Mage.Sets/src/mage/cards/i/Ichorid.java +++ b/Mage.Sets/src/mage/cards/i/Ichorid.java @@ -3,8 +3,8 @@ package mage.cards.i; import mage.MageInt; import mage.MageObject; import mage.ObjectColor; +import mage.abilities.common.BeginningOfEndStepTriggeredAbility; import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; -import mage.abilities.common.BeginningOfYourEndStepTriggeredAbility; import mage.abilities.costs.common.ExileFromGraveCost; import mage.abilities.effects.common.DoIfCostPaid; import mage.abilities.effects.common.ReturnSourceFromGraveyardToBattlefieldEffect; @@ -41,7 +41,7 @@ public final class Ichorid extends CardImpl { this.addAbility(HasteAbility.getInstance()); // At the beginning of the end step, sacrifice Ichorid. - this.addAbility(new BeginningOfYourEndStepTriggeredAbility(new SacrificeSourceEffect(), false)); + this.addAbility(new BeginningOfEndStepTriggeredAbility(new SacrificeSourceEffect(), TargetController.NEXT, false)); // At the beginning of your upkeep, if Ichorid is in your graveyard, you may exile a black creature card other than Ichorid from your graveyard. If you do, return Ichorid to the battlefield. this.addAbility(new IchoridTriggerdAbility()); diff --git a/Mage.Sets/src/mage/cards/i/Immerwolf.java b/Mage.Sets/src/mage/cards/i/Immerwolf.java index 823799f54c6..cc62359f98f 100644 --- a/Mage.Sets/src/mage/cards/i/Immerwolf.java +++ b/Mage.Sets/src/mage/cards/i/Immerwolf.java @@ -24,7 +24,7 @@ import mage.game.permanent.Permanent; */ public final class Immerwolf extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Wolf and Werewolf creatures"); + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Each other creature you control that's a Wolf or a Werewolf"); static { filter.add(Predicates.or(SubType.WOLF.getPredicate(), SubType.WEREWOLF.getPredicate())); diff --git a/Mage.Sets/src/mage/cards/i/InsidiousMist.java b/Mage.Sets/src/mage/cards/i/InsidiousMist.java index 44802b492d6..e4bd1287e9a 100644 --- a/Mage.Sets/src/mage/cards/i/InsidiousMist.java +++ b/Mage.Sets/src/mage/cards/i/InsidiousMist.java @@ -52,7 +52,8 @@ public final class InsidiousMist extends CardImpl { // Whenever Insideous Mist attacks and isn't blocked, you may pay {2}{B}. If you do, transform it. this.addAbility(new TransformAbility()); - this.addAbility(new AttacksAndIsNotBlockedTriggeredAbility(new DoIfCostPaid(new TransformSourceEffect(), new ManaCostsImpl<>("{2}{B}"), "Pay {2}{B} to transform?"))); + this.addAbility(new AttacksAndIsNotBlockedTriggeredAbility(new DoIfCostPaid(new TransformSourceEffect() + .setText("transform it"), new ManaCostsImpl<>("{2}{B}"), "Pay {2}{B} to transform?"))); } private InsidiousMist(final InsidiousMist card) { diff --git a/Mage.Sets/src/mage/cards/j/JunkGolem.java b/Mage.Sets/src/mage/cards/j/JunkGolem.java index 49bd9a0e5d3..3e5c308ec4d 100644 --- a/Mage.Sets/src/mage/cards/j/JunkGolem.java +++ b/Mage.Sets/src/mage/cards/j/JunkGolem.java @@ -38,7 +38,7 @@ public final class JunkGolem extends CardImpl { // At the beginning of your upkeep, sacrifice Junk Golem unless you remove a +1/+1 counter from it. this.addAbility(new BeginningOfUpkeepTriggeredAbility( new SacrificeSourceUnlessPaysEffect( - new RemoveCountersSourceCost(CounterType.P1P1.createInstance()) + new RemoveCountersSourceCost(CounterType.P1P1.createInstance()).setText("remove a +1/+1 counter from it") ), TargetController.YOU, false )); diff --git a/Mage.Sets/src/mage/cards/k/KaerveksTorch.java b/Mage.Sets/src/mage/cards/k/KaerveksTorch.java index b15fe35f92c..31d55b058f8 100644 --- a/Mage.Sets/src/mage/cards/k/KaerveksTorch.java +++ b/Mage.Sets/src/mage/cards/k/KaerveksTorch.java @@ -52,7 +52,7 @@ class KaerveksTorchCostIncreaseEffect extends CostModificationEffectImpl { KaerveksTorchCostIncreaseEffect() { super(Duration.WhileOnStack, Outcome.Benefit, CostModificationType.INCREASE_COST); - staticText = "Spells that target {this} cost {2} more to cast"; + staticText = "As long as {this} is on the stack, spells that target it cost {2} more to cast"; } private KaerveksTorchCostIncreaseEffect(final KaerveksTorchCostIncreaseEffect effect) { diff --git a/Mage.Sets/src/mage/cards/k/KeldonBattlewagon.java b/Mage.Sets/src/mage/cards/k/KeldonBattlewagon.java index 2648a07b3bc..2f903e31c04 100644 --- a/Mage.Sets/src/mage/cards/k/KeldonBattlewagon.java +++ b/Mage.Sets/src/mage/cards/k/KeldonBattlewagon.java @@ -54,7 +54,8 @@ public final class KeldonBattlewagon extends CardImpl { this.addAbility(new CantBlockAbility()); // When Keldon Battlewagon attacks, sacrifice it at end of combat. - this.addAbility(new AttacksTriggeredAbility(new CreateDelayedTriggeredAbilityEffect(new AtTheEndOfCombatDelayedTriggeredAbility(new SacrificeSourceEffect())), false)); + this.addAbility(new AttacksTriggeredAbility(new CreateDelayedTriggeredAbilityEffect(new AtTheEndOfCombatDelayedTriggeredAbility(new SacrificeSourceEffect())) + .setText("sacrifice it at end of combat"), false).setTriggerPhrase("When {this} attacks, ")); // Tap an untapped creature you control: Keldon Battlewagon gets +X/+0 until end of turn, where X is the power of the creature tapped this way. this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new KeldonBattlewagonBoostEffect(), new KeldonBattlewagonCost(new TargetControlledPermanent(filter)))); @@ -126,9 +127,9 @@ class KeldonBattlewagonBoostEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { - Permanent KeldonBattlewagon = game.getPermanent(source.getSourceId()); + Permanent keldonBattlewagon = game.getPermanent(source.getSourceId()); Permanent tappedCreature = getTargetPointer().getFirstTargetPermanentOrLKI(game, source); - if (tappedCreature != null && KeldonBattlewagon != null) { + if (tappedCreature != null && keldonBattlewagon != null) { int amount = tappedCreature.getPower().getValue(); game.addEffect(new BoostSourceEffect(amount, 0, Duration.EndOfTurn), source); } diff --git a/Mage.Sets/src/mage/cards/k/KembasLegion.java b/Mage.Sets/src/mage/cards/k/KembasLegion.java index ddd573a7185..acb27275693 100644 --- a/Mage.Sets/src/mage/cards/k/KembasLegion.java +++ b/Mage.Sets/src/mage/cards/k/KembasLegion.java @@ -48,7 +48,7 @@ class KembasLegionEffect extends ContinuousEffectImpl { KembasLegionEffect() { super(Duration.WhileOnBattlefield, Outcome.Benefit); - staticText = "{this} can block an additional creature for each Equipment attached to Kemba's Legion"; + staticText = "{this} can block an additional creature each combat for each Equipment attached to {this}"; } private KembasLegionEffect(final KembasLegionEffect effect) { diff --git a/Mage.Sets/src/mage/cards/k/KorvoldGleefulGlutton.java b/Mage.Sets/src/mage/cards/k/KorvoldGleefulGlutton.java index f6074c44fb7..2b25018b1ad 100644 --- a/Mage.Sets/src/mage/cards/k/KorvoldGleefulGlutton.java +++ b/Mage.Sets/src/mage/cards/k/KorvoldGleefulGlutton.java @@ -66,7 +66,7 @@ public final class KorvoldGleefulGlutton extends CardImpl { new AddCountersSourceEffect(CounterType.P1P1.createInstance(), PermanentTypesInGraveyardCount.instance, true) .setText("put X +1/+1 counters on {this}"), false - ); + ).withRuleTextReplacement(false); combatDamageAbility.addEffect(new DrawCardSourceControllerEffect(PermanentTypesInGraveyardCount.instance).setText("and draw X cards, where X is the number of permanent types among cards in your graveyard")); combatDamageAbility.addHint(new ValueHint("Permanent types among cards in your graveyard", PermanentTypesInGraveyardCount.instance)); this.addAbility(combatDamageAbility); @@ -100,7 +100,7 @@ class KorvoldGleefulGluttonWatcher extends Watcher { if (permanent != null) { permanent.getCardType(game).forEach(type -> - map.computeIfAbsent(event.getPlayerId(), (key) -> new HashSet<>()).add(type) + map.computeIfAbsent(event.getPlayerId(), k -> new HashSet<>()).add(type) ); } } @@ -112,8 +112,8 @@ class KorvoldGleefulGluttonWatcher extends Watcher { } public int getNumberOfTypes(UUID playerId) { - return map.computeIfAbsent(playerId, (key) -> new HashSet<>()).size(); - }; + return map.computeIfAbsent(playerId, k -> new HashSet<>()).size(); + } } enum CardTypesAmongSacrificedPermanentsCount implements DynamicValue { @@ -164,4 +164,4 @@ enum PermanentTypesInGraveyardCount implements DynamicValue { return "permanent types among cards in your graveyard"; } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/k/KragmaWarcaller.java b/Mage.Sets/src/mage/cards/k/KragmaWarcaller.java index 18c3e51d3ac..244c14ba996 100644 --- a/Mage.Sets/src/mage/cards/k/KragmaWarcaller.java +++ b/Mage.Sets/src/mage/cards/k/KragmaWarcaller.java @@ -27,6 +27,7 @@ public final class KragmaWarcaller extends CardImpl { private static final FilterControlledCreaturePermanent filter2 = new FilterControlledCreaturePermanent("Minotaur you control"); static { filter1.add(SubType.MINOTAUR.getPredicate()); + filter2.add(SubType.MINOTAUR.getPredicate()); } public KragmaWarcaller(UUID ownerId, CardSetInfo setInfo) { @@ -43,7 +44,7 @@ public final class KragmaWarcaller extends CardImpl { // Whenever a Minotaur you control attacks, it gets +2/+0 until end of turn. Effect effect = new BoostTargetEffect(2,0, Duration.EndOfTurn); effect.setText("it gets +2/+0 until end of turn"); - this.addAbility(new AttacksCreatureYouControlTriggeredAbility(effect, false, filter1, true)); + this.addAbility(new AttacksCreatureYouControlTriggeredAbility(effect, false, filter2, true)); } private KragmaWarcaller(final KragmaWarcaller card) { diff --git a/Mage.Sets/src/mage/cards/l/LegionLoyalist.java b/Mage.Sets/src/mage/cards/l/LegionLoyalist.java index b197eabd18d..6cd4fd68ec9 100644 --- a/Mage.Sets/src/mage/cards/l/LegionLoyalist.java +++ b/Mage.Sets/src/mage/cards/l/LegionLoyalist.java @@ -14,7 +14,7 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.SubType; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.StaticFilters; import mage.game.Game; import mage.game.permanent.Permanent; import mage.game.permanent.PermanentToken; @@ -38,9 +38,11 @@ public final class LegionLoyalist extends CardImpl { this.addAbility(HasteAbility.getInstance()); //Battalion - Whenever Legion Loyalist and at least two other creatures attack, //creatures you control gain first strike and trample until end of turn and can't be blocked by tokens this turn. - Ability ability = new BattalionAbility(new GainAbilityAllEffect(FirstStrikeAbility.getInstance(), Duration.EndOfTurn, new FilterControlledCreaturePermanent())); - ability.addEffect(new GainAbilityAllEffect(TrampleAbility.getInstance(), Duration.EndOfTurn, new FilterControlledCreaturePermanent())); - ability.addEffect(new CantBeBlockedByTokenEffect()); + Ability ability = new BattalionAbility(new GainAbilityAllEffect(FirstStrikeAbility.getInstance(), Duration.EndOfTurn, StaticFilters.FILTER_CONTROLLED_CREATURES) + .setText("creatures you control gain first strike")); + ability.addEffect(new GainAbilityAllEffect(TrampleAbility.getInstance(), Duration.EndOfTurn, StaticFilters.FILTER_CONTROLLED_CREATURES) + .setText("and trample until end of turn")); + ability.addEffect(new LegionLoyalistCantBeBlockedByTokensEffect()); this.addAbility(ability); } @@ -54,21 +56,21 @@ public final class LegionLoyalist extends CardImpl { } } -class CantBeBlockedByTokenEffect extends RestrictionEffect { +class LegionLoyalistCantBeBlockedByTokensEffect extends RestrictionEffect { - CantBeBlockedByTokenEffect() { + LegionLoyalistCantBeBlockedByTokensEffect() { super(Duration.EndOfTurn); - staticText = "Creatures you control can't be blocked by tokens this turn"; + staticText = "and can't be blocked by creature tokens this turn"; } - private CantBeBlockedByTokenEffect(final CantBeBlockedByTokenEffect effect) { + private LegionLoyalistCantBeBlockedByTokensEffect(final LegionLoyalistCantBeBlockedByTokensEffect effect) { super(effect); } @Override public void init(Ability source, Game game) { affectedObjectsSet = true; - for (Permanent perm : game.getBattlefield().getActivePermanents(new FilterControlledCreaturePermanent(), source.getControllerId(), source, game)) { + for (Permanent perm : game.getBattlefield().getActivePermanents(StaticFilters.FILTER_CONTROLLED_CREATURES, source.getControllerId(), source, game)) { affectedObjectList.add(new MageObjectReference(perm, game)); } } @@ -84,7 +86,7 @@ class CantBeBlockedByTokenEffect extends RestrictionEffect { } @Override - public CantBeBlockedByTokenEffect copy() { - return new CantBeBlockedByTokenEffect(this); + public LegionLoyalistCantBeBlockedByTokensEffect copy() { + return new LegionLoyalistCantBeBlockedByTokensEffect(this); } } diff --git a/Mage.Sets/src/mage/cards/l/LimitsOfSolidarity.java b/Mage.Sets/src/mage/cards/l/LimitsOfSolidarity.java index 24e41d25111..8f344932fb5 100644 --- a/Mage.Sets/src/mage/cards/l/LimitsOfSolidarity.java +++ b/Mage.Sets/src/mage/cards/l/LimitsOfSolidarity.java @@ -28,7 +28,7 @@ public final class LimitsOfSolidarity extends CardImpl { this.getSpellAbility().addTarget(new TargetCreaturePermanent()); this.getSpellAbility().addEffect(new GainControlTargetEffect(Duration.EndOfTurn)); Effect effect = new UntapTargetEffect(); - effect.setText("Untap it"); + effect.setText("Untap that creature"); this.getSpellAbility().addEffect(effect); effect = new GainAbilityTargetEffect(HasteAbility.getInstance(), Duration.EndOfTurn); effect.setText("It gains haste until end of turn"); diff --git a/Mage.Sets/src/mage/cards/l/LoomingSpires.java b/Mage.Sets/src/mage/cards/l/LoomingSpires.java index 5c3863f8bff..6fb33cfe302 100644 --- a/Mage.Sets/src/mage/cards/l/LoomingSpires.java +++ b/Mage.Sets/src/mage/cards/l/LoomingSpires.java @@ -1,11 +1,9 @@ - package mage.cards.l; import java.util.UUID; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTappedAbility; import mage.abilities.common.EntersBattlefieldTriggeredAbility; -import mage.abilities.effects.Effect; import mage.abilities.effects.common.continuous.BoostTargetEffect; import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; import mage.abilities.keyword.FirstStrikeAbility; @@ -29,10 +27,10 @@ public final class LoomingSpires extends CardImpl { this.addAbility(new EntersBattlefieldTappedAbility()); // When Looming Spires enters the battlefield, target creature gets +1/+1 and gain first strike until end of turn. - Effect effect = new GainAbilityTargetEffect(FirstStrikeAbility.getInstance(), Duration.EndOfTurn); - effect.setText("and gains first strike"); - Ability ability = new EntersBattlefieldTriggeredAbility(new BoostTargetEffect(1, 1, Duration.EndOfTurn), false); - ability.addEffect(effect); + Ability ability = new EntersBattlefieldTriggeredAbility(new BoostTargetEffect(1, 1, Duration.EndOfTurn) + .setText("target creature gets +1/+1"), false); + ability.addEffect(new GainAbilityTargetEffect(FirstStrikeAbility.getInstance(), Duration.EndOfTurn) + .setText("and gains first strike until end of turn")); ability.addTarget(new TargetCreaturePermanent()); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/m/Mise.java b/Mage.Sets/src/mage/cards/m/Mise.java index 35da0ed40ab..cda014fefe3 100644 --- a/Mage.Sets/src/mage/cards/m/Mise.java +++ b/Mage.Sets/src/mage/cards/m/Mise.java @@ -42,7 +42,7 @@ class MiseEffect extends OneShotEffect { MiseEffect() { super(Outcome.Detriment); - staticText = "then reveal the top card of your library. If that card has the chosen name, you draw three cards"; + staticText = ", then reveal the top card of your library. If that card has the chosen name, you draw three cards"; } private MiseEffect(final MiseEffect effect) { diff --git a/Mage.Sets/src/mage/cards/m/MoltenPrimordial.java b/Mage.Sets/src/mage/cards/m/MoltenPrimordial.java index eb28d2b516d..dbd48ca315a 100644 --- a/Mage.Sets/src/mage/cards/m/MoltenPrimordial.java +++ b/Mage.Sets/src/mage/cards/m/MoltenPrimordial.java @@ -80,7 +80,7 @@ class MoltenPrimordialEffect extends OneShotEffect { MoltenPrimordialEffect() { super(Outcome.GainControl); - this.staticText = "for each opponent, take control of up to one target creature that player controls until end of turn. Untap those creatures. They have haste until end of turn"; + this.staticText = "for each opponent, gain control of up to one target creature that player controls until end of turn. Untap those creatures. They gain haste until end of turn"; } private MoltenPrimordialEffect(final MoltenPrimordialEffect effect) { diff --git a/Mage.Sets/src/mage/cards/n/NeeraWildMage.java b/Mage.Sets/src/mage/cards/n/NeeraWildMage.java index 8a216c9571b..86228e28c61 100644 --- a/Mage.Sets/src/mage/cards/n/NeeraWildMage.java +++ b/Mage.Sets/src/mage/cards/n/NeeraWildMage.java @@ -53,7 +53,10 @@ class NeeraWildMageEffect extends OneShotEffect { NeeraWildMageEffect() { super(Outcome.Neutral); - staticText = "you may put it on the bottom of its owner's library. If you do, reveal cards from the top of your library until you reveal a nonland card. You may cast that card without paying its mana cost. Then put the rest on the bottom of your library in a random order. This ability triggers only once each turn."; + staticText = "you may put it on the bottom of its owner's library. " + + "If you do, reveal cards from the top of your library until you reveal a nonland card. " + + "You may cast that card without paying its mana cost. " + + "Then put all revealed cards not cast this way on the bottom of your library in a random order"; } private NeeraWildMageEffect(final NeeraWildMageEffect effect) { diff --git a/Mage.Sets/src/mage/cards/o/OnakkeOathkeeper.java b/Mage.Sets/src/mage/cards/o/OnakkeOathkeeper.java index 0d2924acc93..1c5efa0f498 100644 --- a/Mage.Sets/src/mage/cards/o/OnakkeOathkeeper.java +++ b/Mage.Sets/src/mage/cards/o/OnakkeOathkeeper.java @@ -24,6 +24,8 @@ import java.util.UUID; */ public final class OnakkeOathkeeper extends CardImpl { + private static final FilterPlaneswalkerCard filter = new FilterPlaneswalkerCard("planeswalker card from your graveyard"); + public OnakkeOathkeeper(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{W}"); @@ -47,7 +49,7 @@ public final class OnakkeOathkeeper extends CardImpl { Zone.GRAVEYARD, new ReturnFromGraveyardToBattlefieldTargetEffect(), new ManaCostsImpl<>("{4}{W}{W}") ); ability.addCost(new ExileSourceFromGraveCost()); - ability.addTarget(new TargetCardInYourGraveyard(new FilterPlaneswalkerCard())); + ability.addTarget(new TargetCardInYourGraveyard(filter)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/o/OswaldFiddlebender.java b/Mage.Sets/src/mage/cards/o/OswaldFiddlebender.java index 34b51eb2bb3..e9e0cb4ed91 100644 --- a/Mage.Sets/src/mage/cards/o/OswaldFiddlebender.java +++ b/Mage.Sets/src/mage/cards/o/OswaldFiddlebender.java @@ -19,7 +19,6 @@ import mage.game.Game; import mage.game.permanent.Permanent; import mage.players.Player; import mage.target.common.TargetCardInLibrary; -import mage.target.common.TargetControlledPermanent; import java.util.Collection; import java.util.UUID; @@ -62,7 +61,7 @@ class OswaldFiddlebenderEffect extends OneShotEffect { OswaldFiddlebenderEffect() { super(Outcome.Benefit); staticText = "search your library for an artifact card with mana value equal to 1 plus the " + - "sacrificed artifact's mana value. Put that card onto the battlefield, then shuffle"; + "sacrificed artifact's mana value, put it onto the battlefield, then shuffle"; } private OswaldFiddlebenderEffect(final OswaldFiddlebenderEffect effect) { diff --git a/Mage.Sets/src/mage/cards/o/OverchargedAmalgam.java b/Mage.Sets/src/mage/cards/o/OverchargedAmalgam.java index 07d37b74848..3b87c934e7a 100644 --- a/Mage.Sets/src/mage/cards/o/OverchargedAmalgam.java +++ b/Mage.Sets/src/mage/cards/o/OverchargedAmalgam.java @@ -38,7 +38,8 @@ public final class OverchargedAmalgam extends CardImpl { this.addAbility(new ExploitAbility()); // When Overcharged Amalgam exploits a creature, counter target spell, activated ability, or triggered ability. - Ability ability = new ExploitCreatureTriggeredAbility(new CounterTargetEffect()); + Ability ability = new ExploitCreatureTriggeredAbility(new CounterTargetEffect() + .setText("counter target spell, activated ability, or triggered ability")); ability.addTarget(new TargetStackObject()); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/p/Painiac.java b/Mage.Sets/src/mage/cards/p/Painiac.java index e23443ad74d..04a0d5614a1 100644 --- a/Mage.Sets/src/mage/cards/p/Painiac.java +++ b/Mage.Sets/src/mage/cards/p/Painiac.java @@ -49,7 +49,7 @@ class PainiacEffect extends OneShotEffect { PainiacEffect() { super(Outcome.Benefit); - this.staticText = "Roll a six-sided die. {this} gets +X/+0 until end of turn, where X is the result"; + this.staticText = "roll a six-sided die. {this} gets +X/+0 until end of turn, where X is the result"; } private PainiacEffect(final PainiacEffect effect) { diff --git a/Mage.Sets/src/mage/cards/p/PyreZombie.java b/Mage.Sets/src/mage/cards/p/PyreZombie.java index 8d292fa6711..7db45356df9 100644 --- a/Mage.Sets/src/mage/cards/p/PyreZombie.java +++ b/Mage.Sets/src/mage/cards/p/PyreZombie.java @@ -36,7 +36,7 @@ public final class PyreZombie extends CardImpl { new DoIfCostPaid(new ReturnToHandSourceEffect().setText("return {this} to your hand"), new ManaCostsImpl<>("{1}{B}{B}")), TargetController.YOU, false)); // {1}{R}{R}, Sacrifice Pyre Zombie: Pyre Zombie deals 2 damage to any target. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(2), new ManaCostsImpl<>("{1}{R}{R}")); + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(2, "it"), new ManaCostsImpl<>("{1}{R}{R}")); ability.addCost(new SacrificeSourceCost()); ability.addTarget(new TargetAnyTarget()); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/r/ReadyWilling.java b/Mage.Sets/src/mage/cards/r/ReadyWilling.java index 4c02bfc1b74..36885236816 100644 --- a/Mage.Sets/src/mage/cards/r/ReadyWilling.java +++ b/Mage.Sets/src/mage/cards/r/ReadyWilling.java @@ -1,8 +1,5 @@ - package mage.cards.r; -import java.util.UUID; -import mage.abilities.effects.Effect; import mage.abilities.effects.common.UntapAllControllerEffect; import mage.abilities.effects.common.continuous.GainAbilityAllEffect; import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; @@ -15,7 +12,8 @@ import mage.constants.CardType; import mage.constants.Duration; import mage.constants.SpellAbilityType; import mage.filter.StaticFilters; -import mage.filter.common.FilterControlledCreaturePermanent; + +import java.util.UUID; /** * @@ -28,17 +26,19 @@ public final class ReadyWilling extends SplitCard { // Ready // Creatures you control are indestructible this turn. Untap each creature you control. - Effect effect = new GainAbilityAllEffect(IndestructibleAbility.getInstance(), Duration.EndOfTurn, new FilterControlledCreaturePermanent("Creatures you controll"), false); - effect.setText("Creatures you control are indestructible this turn"); - getLeftHalfCard().getSpellAbility().addEffect(effect); - getLeftHalfCard().getSpellAbility().addEffect(new UntapAllControllerEffect(new FilterControlledCreaturePermanent(), "Untap each creature you control")); + getLeftHalfCard().getSpellAbility().addEffect(new GainAbilityAllEffect(IndestructibleAbility.getInstance(), + Duration.EndOfTurn, StaticFilters.FILTER_CONTROLLED_CREATURES, false)); + getLeftHalfCard().getSpellAbility().addEffect(new UntapAllControllerEffect(StaticFilters.FILTER_CONTROLLED_CREATURES, + "Untap each creature you control")); // Willing // Creatures you control gain deathtouch and lifelink until end of turn. - getRightHalfCard().getSpellAbility().addEffect(new GainAbilityControlledEffect(DeathtouchAbility.getInstance(), Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURES)); - effect = new GainAbilityControlledEffect(LifelinkAbility.getInstance(), Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURES); - effect.setText("Creatures you control gain lifelink until end of turn"); - getRightHalfCard().getSpellAbility().addEffect(effect); + getRightHalfCard().getSpellAbility().addEffect(new GainAbilityControlledEffect(DeathtouchAbility.getInstance(), + Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURES) + .setText("creatures you control gain deathtouch")); + getRightHalfCard().getSpellAbility().addEffect(new GainAbilityControlledEffect(LifelinkAbility.getInstance(), + Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURES) + .setText("and lifelink until end of turn")); } diff --git a/Mage.Sets/src/mage/cards/r/RiotControl.java b/Mage.Sets/src/mage/cards/r/RiotControl.java index e623534ffda..67af7258379 100644 --- a/Mage.Sets/src/mage/cards/r/RiotControl.java +++ b/Mage.Sets/src/mage/cards/r/RiotControl.java @@ -1,5 +1,3 @@ - - package mage.cards.r; import java.util.UUID; @@ -18,7 +16,6 @@ import mage.filter.common.FilterCreaturePermanent; * @author LevelX2 */ - public final class RiotControl extends CardImpl { private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature your opponents control"); @@ -29,9 +26,9 @@ public final class RiotControl extends CardImpl { public RiotControl(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{2}{W}"); - // Gain 1 life for each creature your opponents control. Prevent all damage that would be dealt to you this turn. - this.getSpellAbility().addEffect(new GainLifeEffect(new PermanentsOnBattlefieldCount(filter))); + this.getSpellAbility().addEffect(new GainLifeEffect(new PermanentsOnBattlefieldCount(filter)) + .setText("You gain 1 life for each creature your opponents control")); this.getSpellAbility().addEffect(new PreventDamageToControllerEffect(Duration.EndOfTurn)); } diff --git a/Mage.Sets/src/mage/cards/s/ScionOfHalaster.java b/Mage.Sets/src/mage/cards/s/ScionOfHalaster.java index 16b49e90acf..cd931f0e147 100644 --- a/Mage.Sets/src/mage/cards/s/ScionOfHalaster.java +++ b/Mage.Sets/src/mage/cards/s/ScionOfHalaster.java @@ -31,7 +31,7 @@ public final class ScionOfHalaster extends CardImpl { this.addAbility(new SimpleStaticAbility(new GainAbilityAllEffect( new SimpleStaticAbility(new ScionOfHalasterReplacementEffect()), Duration.WhileOnBattlefield, StaticFilters.FILTER_CREATURES_OWNED_COMMANDER - ))); + ).withForceQuotes())); } private ScionOfHalaster(final ScionOfHalaster card) { diff --git a/Mage.Sets/src/mage/cards/s/SimicManipulator.java b/Mage.Sets/src/mage/cards/s/SimicManipulator.java index 1d81682973e..7b6bf1ae443 100644 --- a/Mage.Sets/src/mage/cards/s/SimicManipulator.java +++ b/Mage.Sets/src/mage/cards/s/SimicManipulator.java @@ -38,7 +38,7 @@ import mage.target.targetadjustment.TargetAdjuster; */ public final class SimicManipulator extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("with power less than or equal to the number of +1/+1 counters removed this way"); + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with power less than or equal to the number of +1/+1 counters removed this way"); public SimicManipulator(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}{U}"); diff --git a/Mage.Sets/src/mage/cards/s/SkarrgTheRagePits.java b/Mage.Sets/src/mage/cards/s/SkarrgTheRagePits.java index 92d48aa5a08..a5a02dfa033 100644 --- a/Mage.Sets/src/mage/cards/s/SkarrgTheRagePits.java +++ b/Mage.Sets/src/mage/cards/s/SkarrgTheRagePits.java @@ -26,9 +26,11 @@ public final class SkarrgTheRagePits extends CardImpl { public SkarrgTheRagePits(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.LAND},""); this.addAbility(new ColorlessManaAbility()); - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostTargetEffect(1, 1, Duration.EndOfTurn), new ManaCostsImpl<>("{R}{G}")); + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostTargetEffect(1, 1, Duration.EndOfTurn) + .setText("target creature gets +1/+1"), new ManaCostsImpl<>("{R}{G}")); ability.addCost(new TapSourceCost()); - ability.addEffect(new GainAbilityTargetEffect(TrampleAbility.getInstance(), Duration.EndOfTurn)); + ability.addEffect(new GainAbilityTargetEffect(TrampleAbility.getInstance(), Duration.EndOfTurn) + .setText("and gains trample until end of turn")); ability.addTarget(new TargetCreaturePermanent()); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/s/SkirkDrillSergeant.java b/Mage.Sets/src/mage/cards/s/SkirkDrillSergeant.java index 001d53ee159..fd43cfc0ed2 100644 --- a/Mage.Sets/src/mage/cards/s/SkirkDrillSergeant.java +++ b/Mage.Sets/src/mage/cards/s/SkirkDrillSergeant.java @@ -29,7 +29,7 @@ import java.util.UUID; */ public final class SkirkDrillSergeant extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("or another Goblin"); + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Goblin"); static { filter.add(SubType.GOBLIN.getPredicate()); diff --git a/Mage.Sets/src/mage/cards/s/SmeltWardGatekeepers.java b/Mage.Sets/src/mage/cards/s/SmeltWardGatekeepers.java index eaa2738d83d..d2eaabf2e74 100644 --- a/Mage.Sets/src/mage/cards/s/SmeltWardGatekeepers.java +++ b/Mage.Sets/src/mage/cards/s/SmeltWardGatekeepers.java @@ -48,7 +48,7 @@ public final class SmeltWardGatekeepers extends CardImpl { Ability ability = new ConditionalInterveningIfTriggeredAbility( new EntersBattlefieldTriggeredAbility(new GainControlTargetEffect(Duration.EndOfTurn)), gatesCondition, - "When {this} enters the battlefield, if you control two or more Gates, gain control of target creature an opponent controls until end of turn. Untap that creature. That creature gains haste until end of turn."); + "When {this} enters the battlefield, if you control two or more Gates, gain control of target creature an opponent controls until end of turn. Untap that creature. It gains haste until end of turn."); ability.addEffect(new UntapTargetEffect()); ability.addEffect(new GainAbilityTargetEffect(HasteAbility.getInstance(), Duration.EndOfTurn)); Target target = new TargetCreaturePermanent(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE); diff --git a/Mage.Sets/src/mage/cards/s/SoulBurn.java b/Mage.Sets/src/mage/cards/s/SoulBurn.java index 3aebdbbc301..ba4f4650d13 100644 --- a/Mage.Sets/src/mage/cards/s/SoulBurn.java +++ b/Mage.Sets/src/mage/cards/s/SoulBurn.java @@ -37,7 +37,7 @@ public final class SoulBurn extends CardImpl { // Spend only black or red mana on X. this.addAbility(new SimpleStaticAbility( - Zone.ALL, new InfoEffect("Spend only black or red mana on X")).setRuleAtTheTop(true) + Zone.ALL, new InfoEffect("Spend only black and/or red mana on X")).setRuleAtTheTop(true) ); // Soul Burn deals X damage to any target. You gain life equal to the damage dealt for each black mana spent on X; not more life than the player's life total before Soul Burn dealt damage, or the creature's toughness. diff --git a/Mage.Sets/src/mage/cards/s/SoulRansom.java b/Mage.Sets/src/mage/cards/s/SoulRansom.java index 6beafcb6239..c6ea15df6db 100644 --- a/Mage.Sets/src/mage/cards/s/SoulRansom.java +++ b/Mage.Sets/src/mage/cards/s/SoulRansom.java @@ -13,7 +13,6 @@ import mage.abilities.keyword.EnchantAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; -import mage.filter.FilterCard; import mage.filter.StaticFilters; import mage.game.Game; import mage.game.permanent.Permanent; @@ -68,7 +67,7 @@ class SoulRansomEffect extends OneShotEffect { SoulRansomEffect() { super(Outcome.Benefit); - this.staticText = "{this}'s controller sacrifices it, then draws two cards. Only any opponent may activate this ability"; + this.staticText = "{this}'s controller sacrifices it, then draws two cards. Only your opponents may activate this ability"; } private SoulRansomEffect(final SoulRansomEffect effect) { diff --git a/Mage.Sets/src/mage/cards/s/SpellbindingSoprano.java b/Mage.Sets/src/mage/cards/s/SpellbindingSoprano.java index bcf248ac1f1..27fb4bbab25 100644 --- a/Mage.Sets/src/mage/cards/s/SpellbindingSoprano.java +++ b/Mage.Sets/src/mage/cards/s/SpellbindingSoprano.java @@ -38,7 +38,8 @@ public final class SpellbindingSoprano extends CardImpl { this.toughness = new MageInt(2); // Whenever Spellbinding Soprano attacks, instant and sorcery spells you cast this turn cost {1} less to cast. - this.addAbility(new AttacksTriggeredAbility(new SpellsCostReductionControllerEffect(filter, 1).setDuration(Duration.EndOfTurn))); + this.addAbility(new AttacksTriggeredAbility(new SpellsCostReductionControllerEffect(filter, 1).setDuration(Duration.EndOfTurn) + .setText("instant and sorcery spells you cast this turn cost {1} less to cast"))); // Encore {3}{R} this.addAbility(new EncoreAbility(new ManaCostsImpl<>("{3}{R}"))); diff --git a/Mage.Sets/src/mage/cards/s/StickTogether.java b/Mage.Sets/src/mage/cards/s/StickTogether.java index 8a0ebb5b720..50306a36717 100644 --- a/Mage.Sets/src/mage/cards/s/StickTogether.java +++ b/Mage.Sets/src/mage/cards/s/StickTogether.java @@ -50,7 +50,7 @@ class StickTogetherEffect extends OneShotEffect { StickTogetherEffect() { super(Outcome.Benefit); - staticText = "each player choose a party from among creatures they control, then sacrifices the rest"; + staticText = "each player chooses a party from among creatures they control, then sacrifices the rest"; } private StickTogetherEffect(final StickTogetherEffect effect) { @@ -66,7 +66,7 @@ class StickTogetherEffect extends OneShotEffect { public boolean apply(Game game, Ability source) { Set toKeep = new HashSet<>(); for (UUID playerId : game.getState().getPlayersInRange(source.getControllerId(), game)) { - Player player = game.getPlayer(source.getControllerId()); + Player player = game.getPlayer(playerId); if (player == null) { continue; } @@ -94,10 +94,10 @@ class StickTogetherTarget extends TargetPermanent { SubType.WARRIOR, SubType.WIZARD ); - private static final FilterPermanent filter = new FilterControlledPermanent("a party"); + private static final FilterPermanent filterParty = new FilterControlledPermanent("a party"); static { - filter.add(Predicates.or( + filterParty.add(Predicates.or( SubType.CLERIC.getPredicate(), SubType.ROGUE.getPredicate(), SubType.WARRIOR.getPredicate(), @@ -106,7 +106,7 @@ class StickTogetherTarget extends TargetPermanent { } StickTogetherTarget() { - super(0, 4, filter, true); + super(0, 4, filterParty, true); } private StickTogetherTarget(final StickTogetherTarget target) { @@ -146,7 +146,7 @@ class StickTogetherTarget extends TargetPermanent { static int checkTargetCount(Ability source, Game game) { List permanents = game .getBattlefield() - .getActivePermanents(filter, source.getControllerId(), source, game); + .getActivePermanents(filterParty, source.getControllerId(), source, game); return subTypeAssigner.getRoleCount(new CardsImpl(permanents), game); } } diff --git a/Mage.Sets/src/mage/cards/s/StructuralCollapse.java b/Mage.Sets/src/mage/cards/s/StructuralCollapse.java index 71968fe0135..433a2850ec7 100644 --- a/Mage.Sets/src/mage/cards/s/StructuralCollapse.java +++ b/Mage.Sets/src/mage/cards/s/StructuralCollapse.java @@ -25,7 +25,7 @@ public final class StructuralCollapse extends CardImpl { this.getSpellAbility().addEffect(new SacrificeEffect(new FilterArtifactPermanent(), 1, "Target player")); this.getSpellAbility().addEffect(new SacrificeEffect(StaticFilters.FILTER_LANDS, 1, "Target player") .setText("and a land")); - this.getSpellAbility().addEffect(new DamageTargetEffect(2)); + this.getSpellAbility().addEffect(new DamageTargetEffect(2, true, "that player")); this.getSpellAbility().addTarget(new TargetPlayer()); } diff --git a/Mage.Sets/src/mage/cards/s/SwoopingPteranodon.java b/Mage.Sets/src/mage/cards/s/SwoopingPteranodon.java index 274323b9a5a..63187c62f7c 100644 --- a/Mage.Sets/src/mage/cards/s/SwoopingPteranodon.java +++ b/Mage.Sets/src/mage/cards/s/SwoopingPteranodon.java @@ -55,9 +55,9 @@ public final class SwoopingPteranodon extends CardImpl { // It gains flying and haste until end of turn. // At the beginning of the next end step, target land deals 3 damage to that creature. Ability ability = new EntersBattlefieldThisOrAnotherTriggeredAbility( - new GainControlTargetEffect(Duration.EndOfTurn), filter, true, true); + new GainControlTargetEffect(Duration.EndOfTurn), filter, false, true); ability.addEffect(new UntapTargetEffect().setText("Untap that creature")); - ability.addEffect(new GainAbilityTargetEffect(FlyingAbility.getInstance(), Duration.EndOfTurn).setText("It gains flying ")); + ability.addEffect(new GainAbilityTargetEffect(FlyingAbility.getInstance(), Duration.EndOfTurn).setText("It gains flying")); ability.addEffect(new GainAbilityTargetEffect(HasteAbility.getInstance(), Duration.EndOfTurn).setText("and haste until end of turn.")); ability.addEffect(new SwoopingPteranodonCreateDelayedTriggerEffect()); @@ -149,4 +149,4 @@ class SwoopingPteranodonDamageEffect extends OneShotEffect { return new SwoopingPteranodonDamageEffect(this); } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/t/TheFallen.java b/Mage.Sets/src/mage/cards/t/TheFallen.java index df7db6f671a..03c13416787 100644 --- a/Mage.Sets/src/mage/cards/t/TheFallen.java +++ b/Mage.Sets/src/mage/cards/t/TheFallen.java @@ -44,7 +44,7 @@ class TheFallenEffect extends OneShotEffect { TheFallenEffect() { super(Outcome.Damage); - this.staticText = "{this} deals 1 damage to each opponent or planeswalker it has dealt damage to this game"; + this.staticText = "{this} deals 1 damage to each opponent and planeswalker it has dealt damage to this game"; } private TheFallenEffect(final TheFallenEffect effect) { @@ -73,7 +73,7 @@ class TheFallenEffect extends OneShotEffect { class TheFallenWatcher extends Watcher { - private Map> playersAndWalkersDealtDamageThisGame = new HashMap<>(); // Map> + private final Map> playersAndWalkersDealtDamageThisGame = new HashMap<>(); // Map> public TheFallenWatcher() { super(WatcherScope.GAME); diff --git a/Mage.Sets/src/mage/cards/t/TheSpaceFamilyGoblinson.java b/Mage.Sets/src/mage/cards/t/TheSpaceFamilyGoblinson.java index 7d846ac1b9f..4a81378e370 100644 --- a/Mage.Sets/src/mage/cards/t/TheSpaceFamilyGoblinson.java +++ b/Mage.Sets/src/mage/cards/t/TheSpaceFamilyGoblinson.java @@ -127,6 +127,7 @@ class TheSpaceFamilyGoblinsonTriggeredAbility extends TriggeredAbilityImpl { TheSpaceFamilyGoblinsonTriggeredAbility() { super(Zone.BATTLEFIELD, new AddCountersSourceEffect(CounterType.P1P1.createInstance())); + setTriggerPhrase("Whenever you roll a die, "); } private TheSpaceFamilyGoblinsonTriggeredAbility(final TheSpaceFamilyGoblinsonTriggeredAbility ability) { @@ -148,8 +149,4 @@ class TheSpaceFamilyGoblinsonTriggeredAbility extends TriggeredAbilityImpl { return isControlledBy(event.getPlayerId()); } - @Override - public String getRule() { - return "Whenever you roll a die, put a +1/+1 counter on {this}"; - } } diff --git a/Mage.Sets/src/mage/cards/t/ThiefOfBlood.java b/Mage.Sets/src/mage/cards/t/ThiefOfBlood.java index 501fd3852e9..409b50f5504 100644 --- a/Mage.Sets/src/mage/cards/t/ThiefOfBlood.java +++ b/Mage.Sets/src/mage/cards/t/ThiefOfBlood.java @@ -2,7 +2,7 @@ package mage.cards.t; import mage.MageInt; import mage.abilities.Ability; -import mage.abilities.common.EntersBattlefieldAbility; +import mage.abilities.common.AsEntersBattlefieldAbility; import mage.abilities.effects.OneShotEffect; import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; @@ -35,7 +35,7 @@ public final class ThiefOfBlood extends CardImpl { this.addAbility(FlyingAbility.getInstance()); // As Thief of Blood enters the battlefield, remove all counters from all permanents. Thief of Blood enters the battlefield with a +1/+1 counter on it for each counter removed this way. - this.addAbility(new EntersBattlefieldAbility(new ThiefOfBloodEffect(), null, "As {this} enters the battlefield, remove all counters from all permanents. {this} enters the battlefield with a +1/+1 counter on it for each counter removed this way", null)); + this.addAbility(new AsEntersBattlefieldAbility(new ThiefOfBloodEffect())); } private ThiefOfBlood(final ThiefOfBlood card) { diff --git a/Mage.Sets/src/mage/cards/t/TinStreetMarket.java b/Mage.Sets/src/mage/cards/t/TinStreetMarket.java index 23fd504c25d..ca164fdca72 100644 --- a/Mage.Sets/src/mage/cards/t/TinStreetMarket.java +++ b/Mage.Sets/src/mage/cards/t/TinStreetMarket.java @@ -40,7 +40,8 @@ public final class TinStreetMarket extends CardImpl { // Enchanted land has "{T}, Discard a card: Draw a card." Ability gainAbility = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(1), new TapSourceCost()); gainAbility.addCost(new DiscardCardCost()); - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(gainAbility, AttachmentType.AURA))); + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(gainAbility, AttachmentType.AURA, + Duration.WhileOnBattlefield, null, "land"))); } @@ -53,4 +54,3 @@ public final class TinStreetMarket extends CardImpl { return new TinStreetMarket(this); } } - diff --git a/Mage.Sets/src/mage/cards/t/TreacherousVampire.java b/Mage.Sets/src/mage/cards/t/TreacherousVampire.java index f01fa1006da..07036f4d692 100644 --- a/Mage.Sets/src/mage/cards/t/TreacherousVampire.java +++ b/Mage.Sets/src/mage/cards/t/TreacherousVampire.java @@ -43,7 +43,7 @@ public final class TreacherousVampire extends CardImpl { new DoUnlessControllerPaysEffect( new SacrificeSourceEffect(), new ExileFromGraveCost(new TargetCardInYourGraveyard()) - ), false + ).setText("sacrifice it unless you exile a card from your graveyard"), false )); // Threshold - As long as seven or more cards are in your graveyard, Treacherous Vampire gets +2/+2 and has "When Treacherous Vampire dies, you lose 6 life." diff --git a/Mage.Sets/src/mage/cards/u/UbulSarGatekeepers.java b/Mage.Sets/src/mage/cards/u/UbulSarGatekeepers.java index 71db6dc49eb..9d08afb4915 100644 --- a/Mage.Sets/src/mage/cards/u/UbulSarGatekeepers.java +++ b/Mage.Sets/src/mage/cards/u/UbulSarGatekeepers.java @@ -43,7 +43,7 @@ public final class UbulSarGatekeepers extends CardImpl { Ability ability = new ConditionalInterveningIfTriggeredAbility( new EntersBattlefieldTriggeredAbility(new BoostTargetEffect(-2, -2, Duration.EndOfTurn)), gatesCondition, - "Whenever {this} enters the battlefield, if you control two or more Gates, target creature an opponent controls gets -2/-2 until end of turn."); + "When {this} enters the battlefield, if you control two or more Gates, target creature an opponent controls gets -2/-2 until end of turn."); Target target = new TargetCreaturePermanent(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE); ability.addTarget(target); ability.addHint(new ConditionHint(gatesCondition, "You control two or more Gates")); diff --git a/Mage.Sets/src/mage/cards/u/UndercellarSweep.java b/Mage.Sets/src/mage/cards/u/UndercellarSweep.java index f5e5331ea17..7e098e7423e 100644 --- a/Mage.Sets/src/mage/cards/u/UndercellarSweep.java +++ b/Mage.Sets/src/mage/cards/u/UndercellarSweep.java @@ -32,7 +32,7 @@ public final class UndercellarSweep extends CardImpl { new AttacksWithCreaturesTriggeredAbility( new CreateTokenEffect(new SoldierToken(), 2, true, true), 1 ), UndercellarSweepCondition.instance, "Whenever you attack, if you or a player you're attacking " + - "has the initiative, you create two 1/1 white Soldier creature token that are tapped and attacking." + "has the initiative, you create two 1/1 white Soldier creature tokens that are tapped and attacking." )); } @@ -63,4 +63,4 @@ enum UndercellarSweepCondition implements Condition { .map(game.getCombat()::getDefenderId) .anyMatch(game.getInitiativeId()::equals); } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/u/UnderworldFires.java b/Mage.Sets/src/mage/cards/u/UnderworldFires.java index 1df3b09d319..6509b3da636 100644 --- a/Mage.Sets/src/mage/cards/u/UnderworldFires.java +++ b/Mage.Sets/src/mage/cards/u/UnderworldFires.java @@ -24,7 +24,8 @@ public final class UnderworldFires extends CardImpl { new FilterCreatureOrPlaneswalkerPermanent("creature and each planeswalker"))); // If a permanent dealt damage this way would die this turn, exile it instead. - this.getSpellAbility().addEffect(new DealtDamageToCreatureBySourceDies(this, Duration.EndOfTurn)); + this.getSpellAbility().addEffect(new DealtDamageToCreatureBySourceDies(this, Duration.EndOfTurn) + .setText("If a permanent dealt damage this way would die this turn, exile it instead")); this.getSpellAbility().addWatcher(new DamagedByWatcher(false)); } diff --git a/Mage.Sets/src/mage/cards/v/VaevictisAsmadiTheDire.java b/Mage.Sets/src/mage/cards/v/VaevictisAsmadiTheDire.java index 90e794336d0..b84030a6822 100644 --- a/Mage.Sets/src/mage/cards/v/VaevictisAsmadiTheDire.java +++ b/Mage.Sets/src/mage/cards/v/VaevictisAsmadiTheDire.java @@ -60,8 +60,9 @@ public final class VaevictisAsmadiTheDire extends CardImpl { class VaevictisAsmadiTheDireTriggeredAbility extends TriggeredAbilityImpl { - public VaevictisAsmadiTheDireTriggeredAbility() { + VaevictisAsmadiTheDireTriggeredAbility() { super(Zone.BATTLEFIELD, new VaevictisAsmadiTheDireEffect(), false); + setTriggerPhrase("Whenever {this} attacks, "); } private VaevictisAsmadiTheDireTriggeredAbility(final VaevictisAsmadiTheDireTriggeredAbility ability) { @@ -97,14 +98,6 @@ class VaevictisAsmadiTheDireTriggeredAbility extends TriggeredAbilityImpl { return true; } - @Override - public String getRule() { - return "Whenever {this} attacks, for each player, " - + "choose target permanent that player controls. " - + "Those players sacrifice those permanents. " - + "Each player who sacrificed a permanent this way reveals the top card of their library, " - + "then puts it onto the battlefield if it's a permanent card"; - } } class VaevictisAsmadiTheDireEffect extends OneShotEffect { diff --git a/Mage.Sets/src/mage/cards/v/Vebulid.java b/Mage.Sets/src/mage/cards/v/Vebulid.java index 6f36e1fcb4d..a6373fef2c3 100644 --- a/Mage.Sets/src/mage/cards/v/Vebulid.java +++ b/Mage.Sets/src/mage/cards/v/Vebulid.java @@ -32,13 +32,16 @@ public final class Vebulid extends CardImpl { this.toughness = new MageInt(0); // Vebulid enters the battlefield with a +1/+1 counter on it. - this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance(1)))); + this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance(1)), + "with a +1/+1 counter on it")); // At the beginning of your upkeep, you may put a +1/+1 counter on Vebulid. this.addAbility(new BeginningOfUpkeepTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), TargetController.YOU, true)); // When Vebulid attacks or blocks, destroy it at end of combat. - this.addAbility(new AttacksOrBlocksTriggeredAbility(new CreateDelayedTriggeredAbilityEffect(new AtTheEndOfCombatDelayedTriggeredAbility(new DestroySourceEffect())), false)); + this.addAbility(new AttacksOrBlocksTriggeredAbility(new CreateDelayedTriggeredAbilityEffect( + new AtTheEndOfCombatDelayedTriggeredAbility(new DestroySourceEffect())) + .setText("destroy it at end of combat"), false)); } private Vebulid(final Vebulid card) { diff --git a/Mage.Sets/src/mage/cards/v/ViashinoCutthroat.java b/Mage.Sets/src/mage/cards/v/ViashinoCutthroat.java index 208b738208e..aef7d23bd5b 100644 --- a/Mage.Sets/src/mage/cards/v/ViashinoCutthroat.java +++ b/Mage.Sets/src/mage/cards/v/ViashinoCutthroat.java @@ -28,7 +28,7 @@ public final class ViashinoCutthroat extends CardImpl { // Haste this.addAbility(HasteAbility.getInstance()); // At the beginning of the end step, return Viashino Cutthroat to its owner's hand. - this.addAbility(new BeginningOfEndStepTriggeredAbility(new ReturnToHandSourceEffect(true), TargetController.ANY, false)); + this.addAbility(new BeginningOfEndStepTriggeredAbility(new ReturnToHandSourceEffect(true), TargetController.NEXT, false)); } private ViashinoCutthroat(final ViashinoCutthroat card) { diff --git a/Mage.Sets/src/mage/cards/w/WheelOfTorture.java b/Mage.Sets/src/mage/cards/w/WheelOfTorture.java index 73ceb5e5310..f328525b68c 100644 --- a/Mage.Sets/src/mage/cards/w/WheelOfTorture.java +++ b/Mage.Sets/src/mage/cards/w/WheelOfTorture.java @@ -1,7 +1,6 @@ package mage.cards.w; import mage.abilities.Ability; -import mage.abilities.Mode; import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; import mage.abilities.effects.OneShotEffect; import mage.cards.CardImpl; @@ -39,13 +38,13 @@ public final class WheelOfTorture extends CardImpl { class WheelOfTortureEffect extends OneShotEffect { - private WheelOfTortureEffect(final WheelOfTortureEffect effect) { - super(effect); - this.staticText = "Wheel of Torture deals X damage to that player, where X is 3 minus the number of cards in their hand"; + WheelOfTortureEffect() { + super(Outcome.Damage); + this.staticText = "{this} deals X damage to that player, where X is 3 minus the number of cards in their hand"; } - public WheelOfTortureEffect() { - super(Outcome.Damage); + private WheelOfTortureEffect(final WheelOfTortureEffect effect) { + super(effect); } @Override diff --git a/Mage.Sets/src/mage/cards/w/WindingCanyons.java b/Mage.Sets/src/mage/cards/w/WindingCanyons.java index ff4854f390a..ee54a4e251d 100644 --- a/Mage.Sets/src/mage/cards/w/WindingCanyons.java +++ b/Mage.Sets/src/mage/cards/w/WindingCanyons.java @@ -30,7 +30,7 @@ public final class WindingCanyons extends CardImpl { // {2}, {tap}: Until end of turn, you may cast creature spells as though they had flash. Effect effect = new AddContinuousEffectToGame(new CastAsThoughItHadFlashAllEffect(Duration.EndOfTurn, StaticFilters.FILTER_CARD_CREATURE)); - effect.setText("Until end of turn, you may cast creature spells as though they had flash."); + effect.setText("you may cast creature spells this turn as though they had flash"); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, effect, new GenericManaCost(2)); ability.addCost(new TapSourceCost()); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/w/WormfangManta.java b/Mage.Sets/src/mage/cards/w/WormfangManta.java index 568f95ddc49..399d624e57e 100644 --- a/Mage.Sets/src/mage/cards/w/WormfangManta.java +++ b/Mage.Sets/src/mage/cards/w/WormfangManta.java @@ -32,7 +32,8 @@ public final class WormfangManta extends CardImpl { // When Wormfang Manta enters the battlefield, you skip your next turn. this.addAbility(new EntersBattlefieldTriggeredAbility(new SkipNextTurnSourceEffect())); // When Wormfang Manta leaves the battlefield, you take an extra turn after this one. - this.addAbility(new LeavesBattlefieldTriggeredAbility(new AddExtraTurnControllerEffect(), false)); + this.addAbility(new LeavesBattlefieldTriggeredAbility(new AddExtraTurnControllerEffect() + .setText("you take an extra turn after this one"), false)); } private WormfangManta(final WormfangManta card) { diff --git a/Mage/src/main/java/mage/abilities/TriggeredAbilityImpl.java b/Mage/src/main/java/mage/abilities/TriggeredAbilityImpl.java index 6890c061e38..1ac02b3c0ad 100644 --- a/Mage/src/main/java/mage/abilities/TriggeredAbilityImpl.java +++ b/Mage/src/main/java/mage/abilities/TriggeredAbilityImpl.java @@ -226,7 +226,7 @@ public abstract class TriggeredAbilityImpl extends AbilityImpl implements Trigge } } if (replaceRuleText && triggerPhrase != null) { - superRule = superRule.replaceFirst("^((?:you may )?sacrifice |(put|remove) an? [^ ]+ counter (on|from) |return |transform |untap |regenerate )?\\{this\\}", "$1it"); + superRule = superRule.replaceFirst("^((?:you may )?sacrifice |(put|remove) [^ ]+ [^ ]+ counters? (on|from) |return |transform |untap |regenerate )?\\{this\\}", "$1it"); } sb.append(superRule); if (triggersOnceEachTurn) { diff --git a/Mage/src/main/java/mage/abilities/effects/BecomesAttachedToCreatureSourceEffect.java b/Mage/src/main/java/mage/abilities/effects/BecomesAttachedToCreatureSourceEffect.java index db9b8ece34d..2699038fc22 100644 --- a/Mage/src/main/java/mage/abilities/effects/BecomesAttachedToCreatureSourceEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/BecomesAttachedToCreatureSourceEffect.java @@ -18,9 +18,9 @@ import mage.game.events.GameEvent; */ public class BecomesAttachedToCreatureSourceEffect extends ReplacementEffectImpl { - protected Effects baseEffects = new Effects(); - protected String text; - protected Condition condition; + private final Effects baseEffects; + private final String text; + private final Condition condition; public BecomesAttachedToCreatureSourceEffect(Effect baseEffect) { this(baseEffect, ""); @@ -32,6 +32,7 @@ public class BecomesAttachedToCreatureSourceEffect extends ReplacementEffectImpl public BecomesAttachedToCreatureSourceEffect(Effect baseEffect, Condition condition, String text) { super(Duration.WhileOnBattlefield, baseEffect.getOutcome(), false); + this.baseEffects = new Effects(); this.baseEffects.add(baseEffect); this.text = text; this.condition = condition; diff --git a/Mage/src/main/java/mage/abilities/effects/EntersBattlefieldEffect.java b/Mage/src/main/java/mage/abilities/effects/EntersBattlefieldEffect.java index d5ab0afa094..1025668103b 100644 --- a/Mage/src/main/java/mage/abilities/effects/EntersBattlefieldEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/EntersBattlefieldEffect.java @@ -1,4 +1,3 @@ - package mage.abilities.effects; import mage.MageObject; @@ -20,11 +19,11 @@ import mage.players.Player; */ public class EntersBattlefieldEffect extends ReplacementEffectImpl { - protected Effects baseEffects = new Effects(); - protected String text; - protected Condition condition; - protected boolean optional; - protected EnterEventType enterEventType; + private final Effects baseEffects; + private final String text; + private final Condition condition; + private final boolean optional; + private final EnterEventType enterEventType; public static final String SOURCE_CAST_SPELL_ABILITY = "sourceCastSpellAbility"; @@ -46,6 +45,7 @@ public class EntersBattlefieldEffect extends ReplacementEffectImpl { public EntersBattlefieldEffect(Effect baseEffect, Condition condition, String text, boolean selfScope, boolean optional, EnterEventType enterEventType) { super(Duration.WhileOnBattlefield, baseEffect.getOutcome(), selfScope); + this.baseEffects = new Effects(); this.baseEffects.add(baseEffect); this.enterEventType = enterEventType; this.text = text; @@ -83,12 +83,8 @@ public class EntersBattlefieldEffect extends ReplacementEffectImpl { @Override public boolean applies(GameEvent event, Ability source, Game game) { - if (event.getTargetId().equals(source.getSourceId())) { - if (condition == null || condition.apply(game, source)) { - return true; - } - } - return false; + return event.getTargetId().equals(source.getSourceId()) + && (condition == null || condition.apply(game, source)); } @Override diff --git a/Mage/src/main/java/mage/abilities/effects/common/AddContinuousEffectToGame.java b/Mage/src/main/java/mage/abilities/effects/common/AddContinuousEffectToGame.java index c8f34946d5c..4b968b0b3c1 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/AddContinuousEffectToGame.java +++ b/Mage/src/main/java/mage/abilities/effects/common/AddContinuousEffectToGame.java @@ -43,6 +43,9 @@ public class AddContinuousEffectToGame extends OneShotEffect { @Override public String getText(Mode mode) { + if (staticText != null && !staticText.isEmpty()) { + return staticText; + } return effects.getText(mode); } } diff --git a/Mage/src/main/java/mage/abilities/effects/common/DontUntapInControllersNextUntapStepSourceEffect.java b/Mage/src/main/java/mage/abilities/effects/common/DontUntapInControllersNextUntapStepSourceEffect.java index 7612d72c83e..8f45c962192 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/DontUntapInControllersNextUntapStepSourceEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/DontUntapInControllersNextUntapStepSourceEffect.java @@ -21,6 +21,7 @@ public class DontUntapInControllersNextUntapStepSourceEffect extends ContinuousR protected DontUntapInControllersNextUntapStepSourceEffect(final DontUntapInControllersNextUntapStepSourceEffect effect) { super(effect); + this.validForTurnNum = effect.validForTurnNum; } @Override diff --git a/Mage/src/main/java/mage/abilities/effects/common/ExileCardYouChooseTargetOpponentEffect.java b/Mage/src/main/java/mage/abilities/effects/common/ExileCardYouChooseTargetOpponentEffect.java index 4a5bd1355a9..1375fc13077 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/ExileCardYouChooseTargetOpponentEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/ExileCardYouChooseTargetOpponentEffect.java @@ -20,7 +20,7 @@ public class ExileCardYouChooseTargetOpponentEffect extends OneShotEffect { public ExileCardYouChooseTargetOpponentEffect(FilterCard filter) { super(Outcome.Discard); this.staticText = "target opponent reveals their hand. You choose " - + filter.getMessage() + " from it and exile that card"; + + filter.getMessage() + (filter.getMessage().contains("from it") ? "" : " from it") + " and exile that card"; this.filter = filter; } diff --git a/Mage/src/main/java/mage/abilities/effects/common/combat/CanBlockAdditionalCreatureTargetEffect.java b/Mage/src/main/java/mage/abilities/effects/common/combat/CanBlockAdditionalCreatureTargetEffect.java index d0129459a92..b67f696c637 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/combat/CanBlockAdditionalCreatureTargetEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/combat/CanBlockAdditionalCreatureTargetEffect.java @@ -8,7 +8,6 @@ import mage.constants.Outcome; import mage.constants.SubLayer; import mage.game.Game; import mage.game.permanent.Permanent; -import mage.util.CardUtil; /** * @author mzulch @@ -17,14 +16,22 @@ public class CanBlockAdditionalCreatureTargetEffect extends ContinuousEffectImpl protected int amount; + /** + * Need to set text manually + * Target can block an additional creature this turn + */ public CanBlockAdditionalCreatureTargetEffect() { this(Duration.EndOfTurn, 1); } + /** + * Need to set text manually + * @param duration of effect + * @param amount 0 = any number + */ public CanBlockAdditionalCreatureTargetEffect(Duration duration, int amount) { super(duration, Outcome.Benefit); this.amount = amount; - staticText = setText(); } protected CanBlockAdditionalCreatureTargetEffect(final CanBlockAdditionalCreatureTargetEffect effect) { @@ -59,24 +66,6 @@ public class CanBlockAdditionalCreatureTargetEffect extends ContinuousEffectImpl return false; } - private String setText() { - String text = "target can block "; - switch (amount) { - case 0: - text += "any number of creatures"; - break; - default: - text += CardUtil.numberToText(amount, "an") + " additional creature" + (amount > 1 ? "s" : ""); - } - if (duration == Duration.EndOfTurn) { - text += " this turn"; - } - if (duration == Duration.WhileOnBattlefield) { - text += " each combat"; - } - return text; - } - @Override public boolean hasLayer(Layer layer) { return layer == Layer.RulesEffects;