From 81e348360c6c47ad993f20973fd0a01c1ba991d9 Mon Sep 17 00:00:00 2001 From: Thomas Winwood Date: Tue, 14 Jul 2020 06:58:14 +0100 Subject: [PATCH] Fix a bunch of card text errors (magefree#6643) --- .../src/mage/cards/a/AlpineHoundmaster.java | 6 +- .../mage/cards/b/BarrinTolarianArchmage.java | 7 +-- .../src/mage/cards/b/BattleRattleShaman.java | 4 +- Mage.Sets/src/mage/cards/c/CagedZombie.java | 4 +- .../src/mage/cards/c/ChandraHeartOfFire.java | 6 +- Mage.Sets/src/mage/cards/d/Discontinuity.java | 1 + .../mage/cards/e/ExperimentalOverload.java | 4 +- Mage.Sets/src/mage/cards/f/FierceEmpath.java | 4 +- .../src/mage/cards/g/GoblinArsonist.java | 2 +- Mage.Sets/src/mage/cards/g/GrimTutor.java | 4 +- .../src/mage/cards/k/KaervekTheSpiteful.java | 2 +- .../src/mage/cards/l/LightOfPromise.java | 3 +- Mage.Sets/src/mage/cards/m/MaleficScythe.java | 2 +- .../src/mage/cards/m/MangaraTheDiplomat.java | 2 +- Mage.Sets/src/mage/cards/p/Pridemalkin.java | 2 +- Mage.Sets/src/mage/cards/r/RiseAgain.java | 2 +- .../src/mage/cards/r/RoamingGhostlight.java | 7 +-- Mage.Sets/src/mage/cards/r/RunedHalo.java | 10 ++-- Mage.Sets/src/mage/cards/s/SanctumOfAll.java | 6 +- .../src/mage/cards/s/SanguineIndulgence.java | 6 +- .../src/mage/cards/s/SelflessSavior.java | 4 +- .../src/mage/cards/s/SolemnSimulacrum.java | 6 +- .../src/mage/cards/s/SpeakerOfTheHeavens.java | 4 +- .../src/mage/cards/s/StormwingEntity.java | 57 ++++++------------- Mage.Sets/src/mage/cards/s/SwiftResponse.java | 2 +- .../mage/cards/t/TeferisAgelessInsight.java | 2 +- .../src/mage/cards/t/TraitorousGreed.java | 2 +- .../src/mage/cards/u/UginTheSpiritDragon.java | 4 +- Mage.Sets/src/mage/cards/v/VolcanicSalvo.java | 2 +- .../src/mage/cards/w/WildwoodScourge.java | 2 +- .../effects/common/EndTurnEffect.java | 2 +- .../main/java/mage/filter/StaticFilters.java | 2 +- 32 files changed, 79 insertions(+), 94 deletions(-) diff --git a/Mage.Sets/src/mage/cards/a/AlpineHoundmaster.java b/Mage.Sets/src/mage/cards/a/AlpineHoundmaster.java index 5bf4ad432d..a25790ff0e 100644 --- a/Mage.Sets/src/mage/cards/a/AlpineHoundmaster.java +++ b/Mage.Sets/src/mage/cards/a/AlpineHoundmaster.java @@ -29,13 +29,13 @@ import java.util.UUID; */ public final class AlpineHoundmaster extends CardImpl { - private static final FilterPermanent filter = new FilterAttackingCreature("the number of other attacking creatures"); + private static final FilterPermanent filter = new FilterAttackingCreature(); static { filter.add(AnotherPredicate.instance); } - private static final DynamicValue xValue = new PermanentsOnBattlefieldCount(filter, null); + private static final DynamicValue xValue = new PermanentsOnBattlefieldCount(filter); public AlpineHoundmaster(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{R}{W}"); @@ -50,7 +50,7 @@ public final class AlpineHoundmaster extends CardImpl { // Whenever Alpine Houndmaster attacks, it gets +X/+0 until end of turn, where X is the number of other attacking creatures. this.addAbility(new AttacksTriggeredAbility(new BoostSourceEffect( - xValue, StaticValue.get(0), Duration.EndOfTurn, true + xValue, StaticValue.get(0), Duration.EndOfTurn ), false)); } diff --git a/Mage.Sets/src/mage/cards/b/BarrinTolarianArchmage.java b/Mage.Sets/src/mage/cards/b/BarrinTolarianArchmage.java index 77dc1727ab..7bdf6f46fd 100644 --- a/Mage.Sets/src/mage/cards/b/BarrinTolarianArchmage.java +++ b/Mage.Sets/src/mage/cards/b/BarrinTolarianArchmage.java @@ -11,13 +11,12 @@ import mage.abilities.effects.common.ReturnToHandTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; -import mage.filter.FilterPermanent; import mage.filter.common.FilterCreatureOrPlaneswalkerPermanent; import mage.filter.predicate.permanent.AnotherPredicate; import mage.game.Game; import mage.game.events.GameEvent; import mage.game.events.ZoneChangeEvent; -import mage.target.TargetPermanent; +import mage.target.common.TargetCreatureOrPlaneswalker; import mage.watchers.Watcher; import java.util.HashSet; @@ -29,7 +28,7 @@ import java.util.UUID; */ public final class BarrinTolarianArchmage extends CardImpl { - private static final FilterPermanent filter + private static final FilterCreatureOrPlaneswalkerPermanent filter = new FilterCreatureOrPlaneswalkerPermanent("other target creature or planeswalker"); static { @@ -47,7 +46,7 @@ public final class BarrinTolarianArchmage extends CardImpl { // When Barrin, Tolarian Archmage enters the battlefield, return up to one other target creature or planeswalker to its owner's hand. Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnToHandTargetEffect()); - ability.addTarget(new TargetPermanent(0, 1, filter, false)); + ability.addTarget(new TargetCreatureOrPlaneswalker(0, 1, filter, false)); this.addAbility(ability); // At the beginning of your end step, if a permanent was put into your hand from the battlefield this turn, draw a card. diff --git a/Mage.Sets/src/mage/cards/b/BattleRattleShaman.java b/Mage.Sets/src/mage/cards/b/BattleRattleShaman.java index 56340538ce..db8fe09bdd 100644 --- a/Mage.Sets/src/mage/cards/b/BattleRattleShaman.java +++ b/Mage.Sets/src/mage/cards/b/BattleRattleShaman.java @@ -26,7 +26,9 @@ public final class BattleRattleShaman extends CardImpl { this.toughness = new MageInt(2); // At the beginning of combat on your turn, you may have target creature get +2/+0 until end of turn. - Ability ability = new BeginningOfCombatTriggeredAbility(Zone.BATTLEFIELD, new BoostTargetEffect(2, 0, Duration.EndOfTurn), TargetController.YOU, true, false); + Ability ability = new BeginningOfCombatTriggeredAbility(Zone.BATTLEFIELD, + new BoostTargetEffect(2, 0, Duration.EndOfTurn).setText("you may have target creature get +2/+0 until end of turn"), + TargetController.YOU, true, false); ability.addTarget(new TargetCreaturePermanent()); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/c/CagedZombie.java b/Mage.Sets/src/mage/cards/c/CagedZombie.java index a505d648ad..c3fffd077e 100644 --- a/Mage.Sets/src/mage/cards/c/CagedZombie.java +++ b/Mage.Sets/src/mage/cards/c/CagedZombie.java @@ -2,10 +2,10 @@ package mage.cards.c; import mage.MageInt; import mage.abilities.Ability; +import mage.abilities.common.ActivateIfConditionActivatedAbility; import mage.abilities.condition.common.MorbidCondition; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.decorator.ConditionalActivatedAbility; import mage.abilities.effects.common.LoseLifeOpponentsEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -29,7 +29,7 @@ public final class CagedZombie extends CardImpl { this.toughness = new MageInt(3); // {1}{B}, {T}: Each opponent loses 2 life. Activate this ability only if a creature died this turn. - Ability ability = new ConditionalActivatedAbility( + Ability ability = new ActivateIfConditionActivatedAbility( Zone.BATTLEFIELD, new LoseLifeOpponentsEffect(2), new ManaCostsImpl("{1}{B}"), MorbidCondition.instance ); diff --git a/Mage.Sets/src/mage/cards/c/ChandraHeartOfFire.java b/Mage.Sets/src/mage/cards/c/ChandraHeartOfFire.java index 169b6fcd4a..0ae6aba9dd 100644 --- a/Mage.Sets/src/mage/cards/c/ChandraHeartOfFire.java +++ b/Mage.Sets/src/mage/cards/c/ChandraHeartOfFire.java @@ -54,7 +54,7 @@ public final class ChandraHeartOfFire extends CardImpl { damageAbility.addTarget(new TargetAnyTarget()); this.addAbility(damageAbility); - // −9: Search your graveyard and library for any number of red instant and/or sorcery spells, exile them, then shuffle your library. You may cast them this turn. Add six {R}. + // −9: Search your graveyard and library for any number of red instant and/or sorcery cards, exile them, then shuffle your library. You may cast them this turn. Add six {R}. Ability ultimateAbility = new LoyaltyAbility(new ChandraHeartOfFireUltimateEffect(), -9); ultimateAbility.addEffect(new BasicManaEffect(Mana.RedMana(6)).setText("Add six {R}")); this.addAbility(ultimateAbility); @@ -81,7 +81,7 @@ class ChandraHeartOfFireUltimateEffect extends OneShotEffect { ChandraHeartOfFireUltimateEffect() { super(Outcome.Benefit); - staticText = "Search your graveyard and library for any number of red instant and/or sorcery spells, exile them, then shuffle your library. You may cast them this turn"; + staticText = "Search your graveyard and library for any number of red instant and/or sorcery cards, exile them, then shuffle your library. You may cast them this turn"; } private ChandraHeartOfFireUltimateEffect(ChandraHeartOfFireUltimateEffect effect) { @@ -131,4 +131,4 @@ class ChandraHeartOfFireUltimateEffect extends OneShotEffect { return false; } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/d/Discontinuity.java b/Mage.Sets/src/mage/cards/d/Discontinuity.java index 87f82cc923..3f3a039594 100644 --- a/Mage.Sets/src/mage/cards/d/Discontinuity.java +++ b/Mage.Sets/src/mage/cards/d/Discontinuity.java @@ -25,6 +25,7 @@ public final class Discontinuity extends CardImpl { this.addAbility(new SimpleStaticAbility(Zone.ALL, new SpellCostReductionSourceEffect( new ManaCostsImpl("{2}{U}{U}"), MyTurnCondition.instance ).setText("as long as it's your turn, this spell costs {2}{U}{U} less to cast")) + .setRuleAtTheTop(true) .addHint(MyTurnHint.instance)); // End the turn. diff --git a/Mage.Sets/src/mage/cards/e/ExperimentalOverload.java b/Mage.Sets/src/mage/cards/e/ExperimentalOverload.java index ae7d41f907..4361081e01 100644 --- a/Mage.Sets/src/mage/cards/e/ExperimentalOverload.java +++ b/Mage.Sets/src/mage/cards/e/ExperimentalOverload.java @@ -46,7 +46,7 @@ class ExperimentalOverloadEffect extends OneShotEffect { super(Outcome.Benefit); staticText = "Create an X/X blue and red Weird creature token, " + "where X is the number of instant and sorcery cards in your graveyard. " + - "Then you may return an instant or sorcery card from your graveyard to your hand."; + "Then you may return an instant or sorcery card from your graveyard to your hand"; } private ExperimentalOverloadEffect(final ExperimentalOverloadEffect effect) { @@ -75,4 +75,4 @@ class ExperimentalOverloadEffect extends OneShotEffect { player.choose(outcome, player.getGraveyard(), target, game); return player.moveCards(game.getCard(target.getFirstTarget()), Zone.HAND, source, game); } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/f/FierceEmpath.java b/Mage.Sets/src/mage/cards/f/FierceEmpath.java index ad93f9b746..a10d09552d 100644 --- a/Mage.Sets/src/mage/cards/f/FierceEmpath.java +++ b/Mage.Sets/src/mage/cards/f/FierceEmpath.java @@ -34,7 +34,9 @@ public final class FierceEmpath extends CardImpl { // When Fierce Empath enters the battlefield, you may search your library for a creature card with converted mana cost 6 or greater, reveal it, put it into your hand, then shuffle your library. this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInHandEffect( - new TargetCardInLibrary(filter), true, true), true)); + new TargetCardInLibrary(filter), true, true) + .setText("search your library for a creature card with converted mana cost 6 or greater, reveal it, put it into your hand, then shuffle your library"), + true)); } public FierceEmpath(final FierceEmpath card) { diff --git a/Mage.Sets/src/mage/cards/g/GoblinArsonist.java b/Mage.Sets/src/mage/cards/g/GoblinArsonist.java index 3e6e67a7ff..1cbec84aef 100644 --- a/Mage.Sets/src/mage/cards/g/GoblinArsonist.java +++ b/Mage.Sets/src/mage/cards/g/GoblinArsonist.java @@ -27,7 +27,7 @@ public final class GoblinArsonist extends CardImpl { this.toughness = new MageInt(1); // When Goblin Arsonist dies, you may have it deal 1 damage to any target. - Ability ability = new DiesSourceTriggeredAbility(new DamageTargetEffect(1), true); + Ability ability = new DiesSourceTriggeredAbility(new DamageTargetEffect(1).setText("it deal 1 damage to any target"), true); ability.addTarget(new TargetAnyTarget()); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/g/GrimTutor.java b/Mage.Sets/src/mage/cards/g/GrimTutor.java index afbce6238f..408e447391 100644 --- a/Mage.Sets/src/mage/cards/g/GrimTutor.java +++ b/Mage.Sets/src/mage/cards/g/GrimTutor.java @@ -21,10 +21,10 @@ public final class GrimTutor extends CardImpl { // Search your library for a card and put that card into your hand, then shuffle your library. TargetCardInLibrary target = new TargetCardInLibrary(); - this.getSpellAbility().addEffect(new SearchLibraryPutInHandEffect(target)); + this.getSpellAbility().addEffect(new SearchLibraryPutInHandEffect(target).setText("search your library for a card and put that card into your hand, then shuffle your library")); // You lose 3 life. this.getSpellAbility().addEffect(new LoseLifeSourceControllerEffect(3)); - + } public GrimTutor(final GrimTutor card) { diff --git a/Mage.Sets/src/mage/cards/k/KaervekTheSpiteful.java b/Mage.Sets/src/mage/cards/k/KaervekTheSpiteful.java index 493dd68b22..7f95219b03 100644 --- a/Mage.Sets/src/mage/cards/k/KaervekTheSpiteful.java +++ b/Mage.Sets/src/mage/cards/k/KaervekTheSpiteful.java @@ -29,7 +29,7 @@ public final class KaervekTheSpiteful extends CardImpl { // Other creatures get -1/-1. this.addAbility(new SimpleStaticAbility(new BoostAllEffect( -1, -1, Duration.WhileOnBattlefield, true - ))); + ).setText("other creatures get +1/+1"))); } private KaervekTheSpiteful(final KaervekTheSpiteful card) { diff --git a/Mage.Sets/src/mage/cards/l/LightOfPromise.java b/Mage.Sets/src/mage/cards/l/LightOfPromise.java index 622f7ee7ea..8a08286613 100644 --- a/Mage.Sets/src/mage/cards/l/LightOfPromise.java +++ b/Mage.Sets/src/mage/cards/l/LightOfPromise.java @@ -11,6 +11,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.AttachmentType; import mage.constants.CardType; +import mage.constants.Duration; import mage.constants.Outcome; import mage.constants.SubType; import mage.counters.CounterType; @@ -42,7 +43,7 @@ public final class LightOfPromise extends CardImpl { this.addAbility(new SimpleStaticAbility(new GainAbilityAttachedEffect( new GainLifeControllerTriggeredAbility( new LightOfPromiseEffect(), false, true - ), AttachmentType.AURA + ), AttachmentType.AURA, Duration.WhileOnBattlefield, "Enchanted creature has \"Whenever you gain life, put that many +1/+1 counters on this creature.\"" ))); } diff --git a/Mage.Sets/src/mage/cards/m/MaleficScythe.java b/Mage.Sets/src/mage/cards/m/MaleficScythe.java index d89b4cc62e..c0f003be57 100644 --- a/Mage.Sets/src/mage/cards/m/MaleficScythe.java +++ b/Mage.Sets/src/mage/cards/m/MaleficScythe.java @@ -40,7 +40,7 @@ public final class MaleficScythe extends CardImpl { // Whenever equipped creature dies, put a soul counter on Malefic Scythe. this.addAbility(new DiesAttachedTriggeredAbility( - new AddCountersSourceEffect(CounterType.SOUL.createInstance()), "equipped" + new AddCountersSourceEffect(CounterType.SOUL.createInstance()), "equipped creature" )); // Equip {1} diff --git a/Mage.Sets/src/mage/cards/m/MangaraTheDiplomat.java b/Mage.Sets/src/mage/cards/m/MangaraTheDiplomat.java index 6ecfbad160..7b1d5b3135 100644 --- a/Mage.Sets/src/mage/cards/m/MangaraTheDiplomat.java +++ b/Mage.Sets/src/mage/cards/m/MangaraTheDiplomat.java @@ -89,7 +89,7 @@ class MangaraTheDiplomatAttackTriggeredAbility extends TriggeredAbilityImpl { public String getRule() { return "Whenever an opponent attacks with creatures, " + "if two or more of those creatures are attacking you " + - "and/or a planeswalker you control, draw a card."; + "and/or planeswalkers you control, draw a card."; } } diff --git a/Mage.Sets/src/mage/cards/p/Pridemalkin.java b/Mage.Sets/src/mage/cards/p/Pridemalkin.java index fab9b798b1..d1cecc076b 100644 --- a/Mage.Sets/src/mage/cards/p/Pridemalkin.java +++ b/Mage.Sets/src/mage/cards/p/Pridemalkin.java @@ -26,7 +26,7 @@ import java.util.UUID; public final class Pridemalkin extends CardImpl { private static final FilterPermanent filter - = new FilterControlledCreaturePermanent("creature you control with a +1/+1 counter on it"); + = new FilterControlledCreaturePermanent("each creature you control with a +1/+1 counter on it"); static { filter.add(new CounterPredicate(CounterType.P1P1)); diff --git a/Mage.Sets/src/mage/cards/r/RiseAgain.java b/Mage.Sets/src/mage/cards/r/RiseAgain.java index a87bc57396..11e7c1e6a8 100644 --- a/Mage.Sets/src/mage/cards/r/RiseAgain.java +++ b/Mage.Sets/src/mage/cards/r/RiseAgain.java @@ -18,7 +18,7 @@ public final class RiseAgain extends CardImpl { super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{4}{B}"); // Return target creature card from your graveyard to the battlefield. - this.getSpellAbility().addEffect(new ReturnFromGraveyardToBattlefieldTargetEffect()); + this.getSpellAbility().addEffect(new ReturnFromGraveyardToBattlefieldTargetEffect(false, false)); this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD)); } diff --git a/Mage.Sets/src/mage/cards/r/RoamingGhostlight.java b/Mage.Sets/src/mage/cards/r/RoamingGhostlight.java index 75f7bf1158..3eb1a648a1 100644 --- a/Mage.Sets/src/mage/cards/r/RoamingGhostlight.java +++ b/Mage.Sets/src/mage/cards/r/RoamingGhostlight.java @@ -9,10 +9,9 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.filter.FilterPermanent; import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.Predicates; -import mage.target.TargetPermanent; +import mage.target.common.TargetCreaturePermanent; import java.util.UUID; @@ -21,7 +20,7 @@ import java.util.UUID; */ public final class RoamingGhostlight extends CardImpl { - private static final FilterPermanent filter = new FilterCreaturePermanent("non-Spirit creature"); + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("non-Spirit creature"); static { filter.add(Predicates.not(SubType.SPIRIT.getPredicate())); @@ -39,7 +38,7 @@ public final class RoamingGhostlight extends CardImpl { // When Roaming Ghostlight enters the battlefield, return up to one target non-Spirit creature to its owner's hand. Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnToHandTargetEffect()); - ability.addTarget(new TargetPermanent(0, 1, filter, false)); + ability.addTarget(new TargetCreaturePermanent(0, 1, filter, false)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/r/RunedHalo.java b/Mage.Sets/src/mage/cards/r/RunedHalo.java index 50861691d1..b2e2a59cea 100644 --- a/Mage.Sets/src/mage/cards/r/RunedHalo.java +++ b/Mage.Sets/src/mage/cards/r/RunedHalo.java @@ -38,7 +38,7 @@ public final class RunedHalo extends CardImpl { // As Runed Halo enters the battlefield, name a card. Ability ability = new AsEntersBattlefieldAbility(new ChooseACardNameEffect(ChooseACardNameEffect.TypeOfName.ALL)); - // You have protection from the chosen name. + // You have protection from the chosen card name. ability.addEffect(new RunedHaloSetProtectionEffect()); this.addAbility(ability); } @@ -57,7 +57,7 @@ class RunedHaloSetProtectionEffect extends OneShotEffect { public RunedHaloSetProtectionEffect() { super(Outcome.Protect); - staticText = "

You have protection from the chosen card name (You can't be targeted, dealt damage, or enchanted by anything with that name.)"; + staticText = "

You have protection from the chosen card name. (You can't be targeted, dealt damage, or enchanted by anything with that name.)"; } public RunedHaloSetProtectionEffect(final RunedHaloSetProtectionEffect effect) { @@ -68,9 +68,9 @@ class RunedHaloSetProtectionEffect extends OneShotEffect { public boolean apply(Game game, Ability source) { Player controller = game.getPlayer(source.getControllerId()); String cardName = (String) game.getState().getValue(source.getSourceId().toString() + ChooseACardNameEffect.INFO_KEY); - if (controller != null && cardName != null && !cardName.isEmpty()) { - FilterObject filter = new FilterObject("the name [" + cardName + ']'); - filter.add(new NamePredicate(cardName)); + if (controller != null && cardName != null && !cardName.isEmpty()) { + FilterObject filter = new FilterObject("the card name [" + cardName + ']'); + filter.add(new NamePredicate(cardName)); ContinuousEffect effect = new GainAbilityControllerEffect(new ProtectionAbility(filter), Duration.Custom); game.addEffect(effect, source); return true; diff --git a/Mage.Sets/src/mage/cards/s/SanctumOfAll.java b/Mage.Sets/src/mage/cards/s/SanctumOfAll.java index 97386229b2..c514d5b9da 100644 --- a/Mage.Sets/src/mage/cards/s/SanctumOfAll.java +++ b/Mage.Sets/src/mage/cards/s/SanctumOfAll.java @@ -31,7 +31,7 @@ import java.util.UUID; public final class SanctumOfAll extends CardImpl { private static final FilterPermanent filter = new FilterControlledPermanent(); - private static final FilterCard filterCard = new FilterCard("a Shrine card"); + private static final FilterCard filterCard = new FilterCard("Shrine card"); static final PermanentsOnBattlefieldCount count = new PermanentsOnBattlefieldCount(filter); @@ -42,7 +42,7 @@ public final class SanctumOfAll extends CardImpl { public SanctumOfAll(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{W}{U}{B}{R}{G}"); - + this.addSuperType(SuperType.LEGENDARY); this.subtype.add(SubType.SHRINE); @@ -106,4 +106,4 @@ class SanctumOfAllTriggerEffect extends ReplacementEffectImpl { } return false; } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/s/SanguineIndulgence.java b/Mage.Sets/src/mage/cards/s/SanguineIndulgence.java index 1b17df6ac3..27777156f8 100644 --- a/Mage.Sets/src/mage/cards/s/SanguineIndulgence.java +++ b/Mage.Sets/src/mage/cards/s/SanguineIndulgence.java @@ -14,7 +14,6 @@ import mage.constants.ComparisonType; import mage.constants.Zone; import mage.filter.StaticFilters; import mage.target.common.TargetCardInYourGraveyard; -import mage.watchers.common.PlayerGainedLifeWatcher; import java.util.UUID; @@ -31,9 +30,8 @@ public final class SanguineIndulgence extends CardImpl { // This spell costs {3} less to cast if you've gained 3 or more life this turn. this.addAbility(new SimpleStaticAbility( - Zone.ALL, new SpellCostReductionSourceEffect(3, condition) - ).addHint(hint).setRuleAtTheTop(true), - new PlayerGainedLifeWatcher()); + Zone.ALL, new SpellCostReductionSourceEffect(3, condition) + ).setRuleAtTheTop(true).addHint(hint)); // Return up to two target creature cards from your graveyard to your hand. this.getSpellAbility().addEffect(new ReturnFromGraveyardToHandTargetEffect()); diff --git a/Mage.Sets/src/mage/cards/s/SelflessSavior.java b/Mage.Sets/src/mage/cards/s/SelflessSavior.java index fe9c603a64..b5fd97e4bc 100644 --- a/Mage.Sets/src/mage/cards/s/SelflessSavior.java +++ b/Mage.Sets/src/mage/cards/s/SelflessSavior.java @@ -24,7 +24,7 @@ import java.util.UUID; public final class SelflessSavior extends CardImpl { private static final FilterPermanent filter - = new FilterControlledCreaturePermanent("another target creature"); + = new FilterControlledCreaturePermanent("another target creature you control"); static { filter.add(AnotherPredicate.instance); @@ -37,7 +37,7 @@ public final class SelflessSavior extends CardImpl { this.power = new MageInt(1); this.toughness = new MageInt(1); - // Sacrifice Selfless Savior: Another target creature gains indestructible until end of turn. + // Sacrifice Selfless Savior: Another target creature you control gains indestructible until end of turn. Ability ability = new SimpleActivatedAbility(new GainAbilityTargetEffect( IndestructibleAbility.getInstance(), Duration.EndOfTurn ), new SacrificeSourceCost()); diff --git a/Mage.Sets/src/mage/cards/s/SolemnSimulacrum.java b/Mage.Sets/src/mage/cards/s/SolemnSimulacrum.java index 2783e4d2e3..31430e10bc 100644 --- a/Mage.Sets/src/mage/cards/s/SolemnSimulacrum.java +++ b/Mage.Sets/src/mage/cards/s/SolemnSimulacrum.java @@ -25,7 +25,11 @@ public final class SolemnSimulacrum extends CardImpl { this.subtype.add(SubType.GOLEM); this.power = new MageInt(2); this.toughness = new MageInt(2); - this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_LAND), true), true)); + this.addAbility(new EntersBattlefieldTriggeredAbility( + new SearchLibraryPutInPlayEffect( + new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_LAND), true) + .setText("search your library for a basic land card, put that card onto the battlefield tapped, then shuffle your library"), + true)); this.addAbility(new DiesSourceTriggeredAbility(new DrawCardSourceControllerEffect(1), true)); } diff --git a/Mage.Sets/src/mage/cards/s/SpeakerOfTheHeavens.java b/Mage.Sets/src/mage/cards/s/SpeakerOfTheHeavens.java index b269c73a90..da068397a0 100644 --- a/Mage.Sets/src/mage/cards/s/SpeakerOfTheHeavens.java +++ b/Mage.Sets/src/mage/cards/s/SpeakerOfTheHeavens.java @@ -74,6 +74,6 @@ enum SpeakerOfTheHeavensCondition implements Condition { @Override public String toString() { - return "if you have at least 7 more life than your starting life total and only any time you could cast a sorcery"; + return "you have at least 7 more life than your starting life total and only any time you could cast a sorcery"; } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/s/StormwingEntity.java b/Mage.Sets/src/mage/cards/s/StormwingEntity.java index 45e90a6e14..d5c107d3f8 100644 --- a/Mage.Sets/src/mage/cards/s/StormwingEntity.java +++ b/Mage.Sets/src/mage/cards/s/StormwingEntity.java @@ -1,7 +1,6 @@ package mage.cards.s; -import java.util.HashSet; -import java.util.Set; +import java.util.List; import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; @@ -18,12 +17,10 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.constants.WatcherScope; import mage.constants.Zone; import mage.game.Game; -import mage.game.events.GameEvent; import mage.game.stack.Spell; -import mage.watchers.Watcher; +import mage.watchers.common.SpellsCastWatcher; /** * @author TheElk801 @@ -44,7 +41,7 @@ public final class StormwingEntity extends CardImpl { // This spell costs {2}{U} less to cast if you've cast an instant or sorcery spell this turn. this.addAbility(new SimpleStaticAbility(Zone.ALL, new SpellCostReductionSourceEffect( new ManaCostsImpl("{2}{U}"), StormwingEntityCondition.instance - )).setRuleAtTheTop(true).addHint(hint), new StormwingEntityWatcher()); + )).setRuleAtTheTop(true).addHint(hint), new SpellsCastWatcher()); // Flying this.addAbility(FlyingAbility.getInstance()); @@ -71,38 +68,20 @@ enum StormwingEntityCondition implements Condition { @Override public boolean apply(Game game, Ability source) { - StormwingEntityWatcher watcher = game.getState().getWatcher(StormwingEntityWatcher.class); - return watcher != null && watcher.checkPlayer(source.getControllerId()); - } -} - -class StormwingEntityWatcher extends Watcher { - - private final Set playerMap = new HashSet<>(); - - StormwingEntityWatcher() { - super(WatcherScope.GAME); - } - - @Override - public void watch(GameEvent event, Game game) { - if (event.getType() != GameEvent.EventType.SPELL_CAST) { - return; - } - Spell spell = game.getSpell(event.getTargetId()); - if (spell == null || !spell.isInstantOrSorcery()) { - return; - } - playerMap.add(event.getPlayerId()); - } - - @Override - public void reset() { - playerMap.clear(); - super.reset(); - } - - boolean checkPlayer(UUID playerId) { - return playerMap.contains(playerId); + SpellsCastWatcher watcher = game.getState().getWatcher(SpellsCastWatcher.class); + if (watcher == null) { + return false; + } + List spells = watcher.getSpellsCastThisTurn(source.getControllerId()); + if (spells == null) { + return false; + } + for (Spell spell : spells) { + if (!spell.getSourceId().equals(source.getSourceId()) + && spell.isInstantOrSorcery()) { + return true; + } + } + return false; } } diff --git a/Mage.Sets/src/mage/cards/s/SwiftResponse.java b/Mage.Sets/src/mage/cards/s/SwiftResponse.java index 1deee7a4ba..6e34b4e6a7 100644 --- a/Mage.Sets/src/mage/cards/s/SwiftResponse.java +++ b/Mage.Sets/src/mage/cards/s/SwiftResponse.java @@ -16,7 +16,7 @@ import java.util.UUID; */ public final class SwiftResponse extends CardImpl { - private static final FilterPermanent filter = new FilterCreaturePermanent("tapped permanent"); + private static final FilterPermanent filter = new FilterCreaturePermanent("tapped creature"); static { filter.add(TappedPredicate.instance); diff --git a/Mage.Sets/src/mage/cards/t/TeferisAgelessInsight.java b/Mage.Sets/src/mage/cards/t/TeferisAgelessInsight.java index 4f1d57dc94..42e2249712 100644 --- a/Mage.Sets/src/mage/cards/t/TeferisAgelessInsight.java +++ b/Mage.Sets/src/mage/cards/t/TeferisAgelessInsight.java @@ -40,7 +40,7 @@ class TeferisAgelessInsightEffect extends ReplacementEffectImpl { TeferisAgelessInsightEffect() { super(Duration.WhileOnBattlefield, Outcome.Neutral); - staticText = "If you draw a card except the first one you draw in each of your draw steps, draw two cards instead"; + staticText = "If you would draw a card except the first one you draw in each of your draw steps, draw two cards instead"; } private TeferisAgelessInsightEffect(final TeferisAgelessInsightEffect effect) { diff --git a/Mage.Sets/src/mage/cards/t/TraitorousGreed.java b/Mage.Sets/src/mage/cards/t/TraitorousGreed.java index 86870ecba2..16d624ce57 100644 --- a/Mage.Sets/src/mage/cards/t/TraitorousGreed.java +++ b/Mage.Sets/src/mage/cards/t/TraitorousGreed.java @@ -26,7 +26,7 @@ public final class TraitorousGreed extends CardImpl { this.getSpellAbility().addEffect(new UntapTargetEffect().setText("Untap that creature")); this.getSpellAbility().addEffect(new GainAbilityTargetEffect( HasteAbility.getInstance(), Duration.EndOfTurn - ).setText("It gains haste until end of turn.")); + ).setText("It gains haste until end of turn")); this.getSpellAbility().addEffect(new AddManaOfAnyColorEffect(2)); this.getSpellAbility().addTarget(new TargetCreaturePermanent()); } diff --git a/Mage.Sets/src/mage/cards/u/UginTheSpiritDragon.java b/Mage.Sets/src/mage/cards/u/UginTheSpiritDragon.java index fa5a3d07f6..67db8d01eb 100644 --- a/Mage.Sets/src/mage/cards/u/UginTheSpiritDragon.java +++ b/Mage.Sets/src/mage/cards/u/UginTheSpiritDragon.java @@ -52,7 +52,7 @@ public final class UginTheSpiritDragon extends CardImpl { // -X: Exile each permanent with converted mana cost X or less that's one or more colors. this.addAbility(new LoyaltyAbility(new UginTheSpiritDragonEffect2())); - // -10: You gain 7 life, draw 7 cards, then put up to seven permanent cards from your hand onto the battlefield. + // -10: You gain 7 life, draw seven cards, then put up to seven permanent cards from your hand onto the battlefield. this.addAbility(new LoyaltyAbility(new UginTheSpiritDragonEffect3(), -10)); } @@ -112,7 +112,7 @@ class UginTheSpiritDragonEffect3 extends OneShotEffect { public UginTheSpiritDragonEffect3() { super(Outcome.Benefit); - this.staticText = "You gain 7 life, draw 7 cards, then put up to seven permanent cards from your hand onto the battlefield"; + this.staticText = "You gain 7 life, draw seven cards, then put up to seven permanent cards from your hand onto the battlefield"; } public UginTheSpiritDragonEffect3(final UginTheSpiritDragonEffect3 effect) { diff --git a/Mage.Sets/src/mage/cards/v/VolcanicSalvo.java b/Mage.Sets/src/mage/cards/v/VolcanicSalvo.java index 7c17f54e1d..f0ba5bd65b 100644 --- a/Mage.Sets/src/mage/cards/v/VolcanicSalvo.java +++ b/Mage.Sets/src/mage/cards/v/VolcanicSalvo.java @@ -26,7 +26,7 @@ public final class VolcanicSalvo extends CardImpl { super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{10}{R}{R}"); // This spell costs {X} less to cast, where X is the total power of creatures you control. - this.addAbility(new SimpleStaticAbility(Zone.ALL, new VolcanicSalvoCostReductionEffect())); + this.addAbility(new SimpleStaticAbility(Zone.ALL, new VolcanicSalvoCostReductionEffect()).setRuleAtTheTop(true)); // Volcanic Salvo deals 6 damage to each of up to two target creatures and/or planeswalkers. this.getSpellAbility().addEffect(new DamageTargetEffect(6) diff --git a/Mage.Sets/src/mage/cards/w/WildwoodScourge.java b/Mage.Sets/src/mage/cards/w/WildwoodScourge.java index 737b4d5b49..b0899dedbb 100644 --- a/Mage.Sets/src/mage/cards/w/WildwoodScourge.java +++ b/Mage.Sets/src/mage/cards/w/WildwoodScourge.java @@ -30,7 +30,7 @@ public final class WildwoodScourge extends CardImpl { this.toughness = new MageInt(0); // Wildwood Scourge enters the battlefield with X +1/+1 counters on it. - this.addAbility(new EntersBattlefieldAbility(new EntersBattlefieldWithXCountersEffect(CounterType.P1P1.createInstance()))); + this.addAbility(new EntersBattlefieldAbility(new EntersBattlefieldWithXCountersEffect(CounterType.P1P1.createInstance()).setText("enters the battlefield with X +1/+1 counters"))); // Whenever one or more +1/+1 counters are put on another non-Hydra creature you control, put a +1/+1 counter on Wildwood Scourge. this.addAbility(new EnduringScalelordTriggeredAbility()); diff --git a/Mage/src/main/java/mage/abilities/effects/common/EndTurnEffect.java b/Mage/src/main/java/mage/abilities/effects/common/EndTurnEffect.java index 4a3e6047a2..978bad8b6f 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/EndTurnEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/EndTurnEffect.java @@ -10,7 +10,7 @@ public class EndTurnEffect extends OneShotEffect { public EndTurnEffect() { super(Outcome.Detriment); - staticText = "End the turn (Exile all spells and abilities on the stack. Discard down to your maximum hand size. Damage wears off, and \"this turn\" and \"until end of turn\" effects end.)"; + staticText = "End the turn. (Exile all spells and abilities on the stack, including this card. The player whose turn it is discards down to their maximum hand size. Damage wears off, and \"this turn\" and \"until end of turn\" effects end.)"; } public EndTurnEffect(EndTurnEffect effect) { diff --git a/Mage/src/main/java/mage/filter/StaticFilters.java b/Mage/src/main/java/mage/filter/StaticFilters.java index 1727c44168..f0c6f1b150 100644 --- a/Mage/src/main/java/mage/filter/StaticFilters.java +++ b/Mage/src/main/java/mage/filter/StaticFilters.java @@ -507,7 +507,7 @@ public final class StaticFilters { FILTER_PERMANENTS_NON_LAND.setLockedFilter(true); } - public static final FilterStackObject FILTER_SPELL_OR_ABILITY_OPPONENTS = new FilterStackObject("spell or ability and opponent controls"); + public static final FilterStackObject FILTER_SPELL_OR_ABILITY_OPPONENTS = new FilterStackObject("a spell or ability an opponent controls"); static { FILTER_SPELL_OR_ABILITY_OPPONENTS.add(TargetController.OPPONENT.getControllerPredicate());