From a87b28f348900ef554f6f5136c402614a82d1c77 Mon Sep 17 00:00:00 2001 From: Evan Kranzler Date: Sun, 26 Sep 2021 14:34:32 -0400 Subject: [PATCH] [MID] various text fixes --- Mage.Sets/src/mage/cards/b/Bladebrand.java | 2 +- .../mage/cards/f/FalkenrathPitFighter.java | 2 +- Mage.Sets/src/mage/cards/j/JackOLantern.java | 6 ++-- .../mage/cards/k/KatildaDawnhartPrime.java | 24 ++++++++++------ .../src/mage/cards/m/MightOfTheOldWays.java | 2 ++ .../src/mage/cards/o/OdricsOutrider.java | 4 ++- .../src/mage/cards/o/OldStickfingers.java | 2 +- .../src/mage/cards/r/RootcoilCreeper.java | 12 ++++++-- .../src/mage/cards/s/SarythTheVipersFang.java | 6 ++-- .../src/mage/cards/s/SlaughterSpecialist.java | 2 +- .../src/mage/cards/s/SlogurkTheOverslime.java | 13 ++++++--- Mage.Sets/src/mage/cards/s/Startle.java | 2 +- .../mage/cards/t/TeferiWhoSlowsTheSunset.java | 28 ++++++++++--------- .../src/mage/cards/t/TheMeathookMassacre.java | 2 +- .../src/mage/cards/t/ThermoAlchemist.java | 22 ++++++++------- .../src/mage/cards/w/WinterthornBlessing.java | 2 +- .../java/mage/verify/VerifyCardDataTest.java | 2 +- ...ThisOrAnotherCreatureTriggeredAbility.java | 13 +++++---- .../costs/common/DiscardHandCost.java | 2 +- ...ToHandChosenControlledPermanentEffect.java | 3 +- .../abilities/mana/AnyColorManaAbility.java | 14 ++++++---- .../main/java/mage/filter/StaticFilters.java | 9 +++++- .../permanent/token/ConsumingBlobToken.java | 2 +- 23 files changed, 108 insertions(+), 68 deletions(-) diff --git a/Mage.Sets/src/mage/cards/b/Bladebrand.java b/Mage.Sets/src/mage/cards/b/Bladebrand.java index 472d4cc809..737bd290b2 100644 --- a/Mage.Sets/src/mage/cards/b/Bladebrand.java +++ b/Mage.Sets/src/mage/cards/b/Bladebrand.java @@ -26,7 +26,7 @@ public final class Bladebrand extends CardImpl { this.getSpellAbility().addTarget(new TargetCreaturePermanent()); // Draw a card. - this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1)); + this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1).concatBy("
")); } private Bladebrand(final Bladebrand card) { diff --git a/Mage.Sets/src/mage/cards/f/FalkenrathPitFighter.java b/Mage.Sets/src/mage/cards/f/FalkenrathPitFighter.java index 8309aefdfc..48587739a1 100644 --- a/Mage.Sets/src/mage/cards/f/FalkenrathPitFighter.java +++ b/Mage.Sets/src/mage/cards/f/FalkenrathPitFighter.java @@ -24,7 +24,7 @@ import java.util.UUID; */ public final class FalkenrathPitFighter extends CardImpl { - private static final FilterControlledPermanent filter = new FilterControlledPermanent(SubType.VAMPIRE); + private static final FilterControlledPermanent filter = new FilterControlledPermanent(SubType.VAMPIRE, "Vampire"); public FalkenrathPitFighter(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{R}"); diff --git a/Mage.Sets/src/mage/cards/j/JackOLantern.java b/Mage.Sets/src/mage/cards/j/JackOLantern.java index 0ef4aae1f9..99d3651b68 100644 --- a/Mage.Sets/src/mage/cards/j/JackOLantern.java +++ b/Mage.Sets/src/mage/cards/j/JackOLantern.java @@ -1,15 +1,15 @@ package mage.cards.j; -import mage.Mana; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.ExileSourceFromGraveCost; import mage.abilities.costs.common.SacrificeSourceCost; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.mana.GenericManaCost; +import mage.abilities.dynamicvalue.common.StaticValue; import mage.abilities.effects.common.DrawCardSourceControllerEffect; import mage.abilities.effects.common.ExileTargetEffect; -import mage.abilities.mana.SimpleManaAbility; +import mage.abilities.mana.AnyColorManaAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -35,7 +35,7 @@ public final class JackOLantern extends CardImpl { this.addAbility(ability); // {1}, Exile Jack-o'-Lantern from your graveyard: Add one mana of any color. - ability = new SimpleManaAbility(Zone.GRAVEYARD, Mana.AnyMana(1), new GenericManaCost(1)); + ability = new AnyColorManaAbility(Zone.GRAVEYARD, new GenericManaCost(1), StaticValue.get(1), false); ability.addCost(new ExileSourceFromGraveCost()); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/k/KatildaDawnhartPrime.java b/Mage.Sets/src/mage/cards/k/KatildaDawnhartPrime.java index 7f2294002c..1a80e57098 100644 --- a/Mage.Sets/src/mage/cards/k/KatildaDawnhartPrime.java +++ b/Mage.Sets/src/mage/cards/k/KatildaDawnhartPrime.java @@ -1,8 +1,5 @@ package mage.cards.k; -import java.util.ArrayList; -import java.util.List; -import java.util.UUID; import mage.MageInt; import mage.Mana; import mage.ObjectColor; @@ -16,11 +13,11 @@ import mage.abilities.effects.common.counter.AddCountersAllEffect; import mage.abilities.effects.mana.ManaEffect; import mage.abilities.keyword.ProtectionAbility; import mage.abilities.mana.ActivatedManaAbilityImpl; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; import mage.choices.Choice; import mage.choices.ChoiceImpl; import mage.constants.*; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; import mage.counters.CounterType; import mage.filter.FilterPermanent; import mage.filter.StaticFilters; @@ -29,14 +26,17 @@ import mage.game.Game; import mage.game.permanent.Permanent; import mage.players.Player; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + /** - * * @author weirddan455 */ public final class KatildaDawnhartPrime extends CardImpl { private static final FilterPermanent filter = new FilterPermanent(SubType.WEREWOLF, "Werewolves"); - private static final FilterControlledCreaturePermanent filter2 = new FilterControlledCreaturePermanent(SubType.HUMAN, "Human creatures you control"); + private static final FilterPermanent filter2 = new FilterControlledCreaturePermanent(SubType.HUMAN, "Human creatures"); public KatildaDawnhartPrime(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{G}{W}"); @@ -51,10 +51,16 @@ public final class KatildaDawnhartPrime extends CardImpl { this.addAbility(new ProtectionAbility(filter)); // Human creatures you control have "{T}: Add one mana of any of this creature's colors." - this.addAbility(new SimpleStaticAbility(new GainAbilityControlledEffect(new KatildaDawnhartPrimeManaAbility(), Duration.WhileOnBattlefield, filter2))); + this.addAbility(new SimpleStaticAbility(new GainAbilityControlledEffect( + new KatildaDawnhartPrimeManaAbility(), Duration.WhileOnBattlefield, filter2 + ))); // {4}{G}{W}, {T}: Put a +1/+1 counter on each creature you control. - this.addAbility(new SimpleActivatedAbility(new AddCountersAllEffect(CounterType.P1P1.createInstance(), StaticFilters.FILTER_CONTROLLED_CREATURE), new ManaCostsImpl<>("{4}{G}{W}"))); + Ability ability = new SimpleActivatedAbility(new AddCountersAllEffect( + CounterType.P1P1.createInstance(), StaticFilters.FILTER_CONTROLLED_CREATURE + ), new ManaCostsImpl<>("{4}{G}{W}")); + ability.addCost(new TapSourceCost()); + this.addAbility(ability); } private KatildaDawnhartPrime(final KatildaDawnhartPrime card) { diff --git a/Mage.Sets/src/mage/cards/m/MightOfTheOldWays.java b/Mage.Sets/src/mage/cards/m/MightOfTheOldWays.java index e56f49a014..a340f3c818 100644 --- a/Mage.Sets/src/mage/cards/m/MightOfTheOldWays.java +++ b/Mage.Sets/src/mage/cards/m/MightOfTheOldWays.java @@ -9,6 +9,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.AbilityWord; import mage.constants.CardType; +import mage.target.common.TargetCreaturePermanent; import java.util.UUID; @@ -22,6 +23,7 @@ public final class MightOfTheOldWays extends CardImpl { // Target creature gets +2/+2 until end of turn. this.getSpellAbility().addEffect(new BoostTargetEffect(2, 2)); + this.getSpellAbility().addTarget(new TargetCreaturePermanent()); // Coven — Then if you control three or more creatures with different powers, draw a card. this.getSpellAbility().addEffect(new ConditionalOneShotEffect( diff --git a/Mage.Sets/src/mage/cards/o/OdricsOutrider.java b/Mage.Sets/src/mage/cards/o/OdricsOutrider.java index 1a8a042d80..28c5a7ef0d 100644 --- a/Mage.Sets/src/mage/cards/o/OdricsOutrider.java +++ b/Mage.Sets/src/mage/cards/o/OdricsOutrider.java @@ -9,6 +9,7 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.counters.CounterType; +import mage.filter.StaticFilters; import mage.target.common.TargetControlledCreaturePermanent; import java.util.UUID; @@ -28,7 +29,8 @@ public final class OdricsOutrider extends CardImpl { // Whenever Odric's Outrider or another creature you control dies, put a +1/+1 counter on target creature you control. Ability ability = new DiesThisOrAnotherCreatureTriggeredAbility( - new AddCountersTargetEffect(CounterType.P1P1.createInstance()), false + new AddCountersTargetEffect(CounterType.P1P1.createInstance()), + false, StaticFilters.FILTER_CONTROLLED_CREATURE ); ability.addTarget(new TargetControlledCreaturePermanent()); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/o/OldStickfingers.java b/Mage.Sets/src/mage/cards/o/OldStickfingers.java index 09c0cc178d..64bf0dbb52 100644 --- a/Mage.Sets/src/mage/cards/o/OldStickfingers.java +++ b/Mage.Sets/src/mage/cards/o/OldStickfingers.java @@ -33,7 +33,7 @@ public final class OldStickfingers extends CardImpl { this.addAbility(new CastSourceTriggeredAbility(new OldStickfingersEffect())); // Old Stickfingers' power and toughness are equal to the number of creature cards in your graveyard. - DynamicValue value = new CardsInControllerGraveyardCount(StaticFilters.FILTER_CARD_CREATURE); + DynamicValue value = new CardsInControllerGraveyardCount(StaticFilters.FILTER_CARD_CREATURES); this.addAbility(new SimpleStaticAbility(Zone.ALL, new SetPowerToughnessSourceEffect(value, Duration.EndOfGame))); } diff --git a/Mage.Sets/src/mage/cards/r/RootcoilCreeper.java b/Mage.Sets/src/mage/cards/r/RootcoilCreeper.java index 5439d14ac1..248b8e5a93 100644 --- a/Mage.Sets/src/mage/cards/r/RootcoilCreeper.java +++ b/Mage.Sets/src/mage/cards/r/RootcoilCreeper.java @@ -33,7 +33,7 @@ import java.util.UUID; */ public final class RootcoilCreeper extends CardImpl { - private static final FilterCard filter = new FilterOwnedCard("card with flashback you own in exile"); + private static final FilterCard filter = new FilterOwnedCard("card with flashback you own from exile"); static { filter.add(new AbilityPredicate(FlashbackAbility.class)); @@ -51,10 +51,16 @@ public final class RootcoilCreeper extends CardImpl { this.addAbility(new AnyColorManaAbility()); // {T}: Add two mana of any one color. Spend this mana only to cast spells from your graveyard. - this.addAbility(new ConditionalAnyColorManaAbility(2, new RootcoilCreeperManaBuilder())); + this.addAbility(new ConditionalAnyColorManaAbility( + new TapSourceCost(), 2, new RootcoilCreeperManaBuilder(), true + )); // {G}{U}, {T}, Exile Rootcoil Creeper: Return target card with flashback you own in exile to your hand. - Ability ability = new SimpleActivatedAbility(new ReturnToHandTargetEffect(), new ManaCostsImpl<>("{G}{U}")); + Ability ability = new SimpleActivatedAbility( + new ReturnToHandTargetEffect() + .setText("return target card with flashback you own in exile to your hand"), + new ManaCostsImpl<>("{G}{U}") + ); ability.addCost(new TapSourceCost()); ability.addCost(new ExileSourceCost()); ability.addTarget(new TargetCardInExile(filter)); diff --git a/Mage.Sets/src/mage/cards/s/SarythTheVipersFang.java b/Mage.Sets/src/mage/cards/s/SarythTheVipersFang.java index be8a2d116e..37ca203149 100644 --- a/Mage.Sets/src/mage/cards/s/SarythTheVipersFang.java +++ b/Mage.Sets/src/mage/cards/s/SarythTheVipersFang.java @@ -18,6 +18,7 @@ import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.common.FilterControlledPermanent; import mage.filter.common.FilterUntappedCreature; import mage.filter.predicate.Predicates; +import mage.filter.predicate.mageobject.AnotherPredicate; import mage.filter.predicate.permanent.TappedPredicate; import mage.target.TargetPermanent; @@ -28,8 +29,8 @@ import java.util.UUID; */ public final class SarythTheVipersFang extends CardImpl { - private static final FilterPermanent filterTapped = new FilterControlledCreaturePermanent("tapped creatures you control"); - private static final FilterPermanent filterAbility = new FilterControlledPermanent("creature or land you control"); + private static final FilterPermanent filterTapped = new FilterControlledCreaturePermanent("tapped creatures"); + private static final FilterPermanent filterAbility = new FilterControlledPermanent("another target creature or land you control"); static { filterTapped.add(TappedPredicate.TAPPED); @@ -37,6 +38,7 @@ public final class SarythTheVipersFang extends CardImpl { CardType.CREATURE.getPredicate(), CardType.LAND.getPredicate() )); + filterAbility.add(AnotherPredicate.instance); } public SarythTheVipersFang(UUID ownerId, CardSetInfo setInfo) { diff --git a/Mage.Sets/src/mage/cards/s/SlaughterSpecialist.java b/Mage.Sets/src/mage/cards/s/SlaughterSpecialist.java index 2546bfbe79..6987cc67ef 100644 --- a/Mage.Sets/src/mage/cards/s/SlaughterSpecialist.java +++ b/Mage.Sets/src/mage/cards/s/SlaughterSpecialist.java @@ -38,7 +38,7 @@ public final class SlaughterSpecialist extends CardImpl { // Whenever a creature an opponent controls dies, put a +1/+1 counter on Slaughter Specialist. this.addAbility(new DiesCreatureTriggeredAbility( new AddCountersSourceEffect(CounterType.P1P1.createInstance()), - false, StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE + false, StaticFilters.FILTER_OPPONENTS_PERMANENT_A_CREATURE )); } diff --git a/Mage.Sets/src/mage/cards/s/SlogurkTheOverslime.java b/Mage.Sets/src/mage/cards/s/SlogurkTheOverslime.java index 292337f839..11f66bc327 100644 --- a/Mage.Sets/src/mage/cards/s/SlogurkTheOverslime.java +++ b/Mage.Sets/src/mage/cards/s/SlogurkTheOverslime.java @@ -12,7 +12,10 @@ import mage.abilities.effects.common.counter.AddCountersSourceEffect; import mage.abilities.keyword.TrampleAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.*; +import mage.constants.CardType; +import mage.constants.SubType; +import mage.constants.SuperType; +import mage.constants.TargetController; import mage.counters.CounterType; import mage.filter.StaticFilters; import mage.filter.common.FilterLandCard; @@ -27,7 +30,7 @@ public final class SlogurkTheOverslime extends CardImpl { public SlogurkTheOverslime(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G}{U}"); - + this.addSuperType(SuperType.LEGENDARY); this.subtype.add(SubType.OOZE); this.power = new MageInt(3); @@ -43,8 +46,10 @@ public final class SlogurkTheOverslime extends CardImpl { )); // Remove three +1/+1 counters from Slogurk: Return it to its owner's hand. - this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new ReturnToHandSourceEffect(), - new RemoveCountersSourceCost(CounterType.P1P1.createInstance(3)))); + this.addAbility(new SimpleActivatedAbility( + new ReturnToHandSourceEffect().setText("return it to its owner's hand"), + new RemoveCountersSourceCost(CounterType.P1P1.createInstance(3)) + )); // When Slogurk leaves the battlefield, return up to three target land cards from your graveyard to your hand. Ability ability = new LeavesBattlefieldTriggeredAbility(new ReturnToHandTargetEffect() diff --git a/Mage.Sets/src/mage/cards/s/Startle.java b/Mage.Sets/src/mage/cards/s/Startle.java index 58d3d8fe40..c9ba316a27 100644 --- a/Mage.Sets/src/mage/cards/s/Startle.java +++ b/Mage.Sets/src/mage/cards/s/Startle.java @@ -25,7 +25,7 @@ public final class Startle extends CardImpl { this.getSpellAbility().addEffect(new CreateTokenEffect(new ZombieDecayedToken())); // Draw a card. - this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1)); + this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1).concatBy("
")); } private Startle(final Startle card) { diff --git a/Mage.Sets/src/mage/cards/t/TeferiWhoSlowsTheSunset.java b/Mage.Sets/src/mage/cards/t/TeferiWhoSlowsTheSunset.java index bcbbc31e51..995228baba 100644 --- a/Mage.Sets/src/mage/cards/t/TeferiWhoSlowsTheSunset.java +++ b/Mage.Sets/src/mage/cards/t/TeferiWhoSlowsTheSunset.java @@ -5,6 +5,7 @@ import mage.abilities.LoyaltyAbility; import mage.abilities.common.PlaneswalkerEntersWithLoyaltyCountersAbility; import mage.abilities.dynamicvalue.common.StaticValue; import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.GainLifeEffect; import mage.abilities.effects.common.GetEmblemEffect; import mage.abilities.effects.common.LookLibraryAndPickControllerEffect; import mage.cards.CardImpl; @@ -13,11 +14,10 @@ import mage.constants.CardType; import mage.constants.Outcome; import mage.constants.SubType; import mage.constants.SuperType; -import mage.filter.FilterCard; +import mage.filter.StaticFilters; import mage.game.Game; import mage.game.command.emblems.TeferiWhoSlowsTheSunsetEmblem; import mage.game.permanent.Permanent; -import mage.players.Player; import mage.target.Target; import mage.target.common.TargetArtifactPermanent; import mage.target.common.TargetCreaturePermanent; @@ -39,13 +39,17 @@ public final class TeferiWhoSlowsTheSunset extends CardImpl { // +1: Choose up to one target artifact, up to one target creature, and up to one target land. Untap the chosen permanents you control. Tap the chosen permanents you don't control. You gain 2 life. Ability ability = new LoyaltyAbility(new TeferiWhoSlowsTheSunsetEffect(), 1); + ability.addEffect(new GainLifeEffect(2)); ability.addTarget(new TargetArtifactPermanent()); ability.addTarget(new TargetCreaturePermanent()); ability.addTarget(new TargetLandPermanent()); this.addAbility(ability); // −2: Look at the top three cards of your library. Put one of them into your hand and the rest on the bottom of your library in any order. - this.addAbility(new LoyaltyAbility(new LookLibraryAndPickControllerEffect(StaticValue.get(3), false, StaticValue.get(1), new FilterCard("card"), false, false), -2)); + this.addAbility(new LoyaltyAbility(new LookLibraryAndPickControllerEffect( + StaticValue.get(3), false, StaticValue.get(1), + StaticFilters.FILTER_CARD, false, false + ), -2)); // −7: You get an emblem with "Untap all permanents you control during each opponent's untap step" and "You draw a card during each opponent's draw step." this.addAbility(new LoyaltyAbility(new GetEmblemEffect(new TeferiWhoSlowsTheSunsetEmblem()), -7)); @@ -67,7 +71,7 @@ class TeferiWhoSlowsTheSunsetEffect extends OneShotEffect { super(Outcome.Benefit); staticText = "Choose up to one target artifact, up to one target creature, and up to one target land. " + "Untap the chosen permanents you control. " + - "Tap the chosen permanents you don't control. "; + "Tap the chosen permanents you don't control."; } private TeferiWhoSlowsTheSunsetEffect(final TeferiWhoSlowsTheSunsetEffect effect) { @@ -81,19 +85,17 @@ class TeferiWhoSlowsTheSunsetEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { - Player player = game.getPlayer(source.getControllerId()); for (Target target : source.getTargets()) { Permanent targetPermanent = game.getPermanent(target.getFirstTarget()); - if (targetPermanent != null) { - if (targetPermanent.getControllerId() == player.getId()) { - targetPermanent.untap(game); - } else { - targetPermanent.tap(source, game); - } + if (targetPermanent == null) { + continue; + } + if (targetPermanent.isControlledBy(source.getControllerId())) { + targetPermanent.untap(game); + } else { + targetPermanent.tap(source, game); } } - - player.gainLife(2, game, source); return true; } } diff --git a/Mage.Sets/src/mage/cards/t/TheMeathookMassacre.java b/Mage.Sets/src/mage/cards/t/TheMeathookMassacre.java index def254de98..0401c6a736 100644 --- a/Mage.Sets/src/mage/cards/t/TheMeathookMassacre.java +++ b/Mage.Sets/src/mage/cards/t/TheMeathookMassacre.java @@ -43,7 +43,7 @@ public final class TheMeathookMassacre extends CardImpl { // Whenever a creature an opponent controls dies, you gain 1 life. this.addAbility(new DiesCreatureTriggeredAbility( new GainLifeEffect(1), false, - StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE + StaticFilters.FILTER_OPPONENTS_PERMANENT_A_CREATURE )); } diff --git a/Mage.Sets/src/mage/cards/t/ThermoAlchemist.java b/Mage.Sets/src/mage/cards/t/ThermoAlchemist.java index ecf22e3535..5eb6080817 100644 --- a/Mage.Sets/src/mage/cards/t/ThermoAlchemist.java +++ b/Mage.Sets/src/mage/cards/t/ThermoAlchemist.java @@ -1,9 +1,6 @@ - package mage.cards.t; -import java.util.UUID; import mage.MageInt; -import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SpellCastControllerTriggeredAbility; import mage.abilities.costs.common.TapSourceCost; @@ -15,17 +12,17 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.constants.TargetController; -import mage.constants.Zone; -import mage.filter.common.FilterInstantOrSorcerySpell; +import mage.filter.StaticFilters; + +import java.util.UUID; /** - * * @author LevelX2 */ public final class ThermoAlchemist extends CardImpl { public ThermoAlchemist(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{R}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{R}"); this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.SHAMAN); this.power = new MageInt(0); @@ -33,11 +30,16 @@ public final class ThermoAlchemist extends CardImpl { // Defender this.addAbility(DefenderAbility.getInstance()); + // {T}: Thermo-Alchemist deals 1 damage to each opponent. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamagePlayersEffect(1, TargetController.OPPONENT), new TapSourceCost()); - this.addAbility(ability); + this.addAbility(new SimpleActivatedAbility( + new DamagePlayersEffect(1, TargetController.OPPONENT), new TapSourceCost() + )); + // Whenever you cast an instant or sorcery spell, untap Thermo-Alchemist. - this.addAbility(new SpellCastControllerTriggeredAbility(new UntapSourceEffect(), new FilterInstantOrSorcerySpell(), false)); + this.addAbility(new SpellCastControllerTriggeredAbility( + new UntapSourceEffect(), StaticFilters.FILTER_SPELL_AN_INSTANT_OR_SORCERY, false + )); } private ThermoAlchemist(final ThermoAlchemist card) { diff --git a/Mage.Sets/src/mage/cards/w/WinterthornBlessing.java b/Mage.Sets/src/mage/cards/w/WinterthornBlessing.java index 1f7fdb490c..e1d11051f5 100644 --- a/Mage.Sets/src/mage/cards/w/WinterthornBlessing.java +++ b/Mage.Sets/src/mage/cards/w/WinterthornBlessing.java @@ -30,7 +30,7 @@ public final class WinterthornBlessing extends CardImpl { this.getSpellAbility().addTarget(new TargetPermanent(0, 1, StaticFilters.FILTER_CREATURE_YOU_DONT_CONTROL)); this.getSpellAbility().addEffect(new AddCountersTargetEffect(CounterType.P1P1.createInstance()).setTargetPointer(new FirstTargetPointer())); this.getSpellAbility().addEffect(new TapTargetEffect().setTargetPointer(new SecondTargetPointer()).setText("tap up to one target creature you don't control")); - this.getSpellAbility().addEffect(new DontUntapInControllersNextUntapStepTargetEffect().setTargetPointer(new SecondTargetPointer()).setText("that creature doesn't untap during its controller's next untap step")); + this.getSpellAbility().addEffect(new DontUntapInControllersNextUntapStepTargetEffect().setTargetPointer(new SecondTargetPointer()).setText(", and that creature doesn't untap during its controller's next untap step")); // Flashback {1}{G}{U} this.addAbility(new FlashbackAbility(this, new ManaCostsImpl<>("{1}{G}{U}"))); diff --git a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java index bb32451f2e..b6c610ef3e 100644 --- a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java +++ b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java @@ -58,7 +58,7 @@ public class VerifyCardDataTest { private static final Logger logger = Logger.getLogger(VerifyCardDataTest.class); - private static final String FULL_ABILITIES_CHECK_SET_CODE = "AFR"; // check all abilities and output cards with wrong abilities texts; + private static final String FULL_ABILITIES_CHECK_SET_CODE = "MID"; // check all abilities and output cards with wrong abilities texts; private static final boolean AUTO_FIX_SAMPLE_DECKS = false; // debug only: auto-fix sample decks by test_checkSampleDecks test run private static final boolean ONLY_TEXT = false; // use when checking text locally, suppresses unnecessary checks and output messages diff --git a/Mage/src/main/java/mage/abilities/common/DiesThisOrAnotherCreatureTriggeredAbility.java b/Mage/src/main/java/mage/abilities/common/DiesThisOrAnotherCreatureTriggeredAbility.java index 1fc842ee8b..bccded75fc 100644 --- a/Mage/src/main/java/mage/abilities/common/DiesThisOrAnotherCreatureTriggeredAbility.java +++ b/Mage/src/main/java/mage/abilities/common/DiesThisOrAnotherCreatureTriggeredAbility.java @@ -4,7 +4,8 @@ import mage.MageObject; import mage.abilities.TriggeredAbilityImpl; import mage.abilities.effects.Effect; import mage.constants.Zone; -import mage.filter.common.FilterCreaturePermanent; +import mage.filter.FilterPermanent; +import mage.filter.StaticFilters; import mage.game.Game; import mage.game.events.GameEvent; import mage.game.events.ZoneChangeEvent; @@ -14,14 +15,14 @@ import mage.game.events.ZoneChangeEvent; */ public class DiesThisOrAnotherCreatureTriggeredAbility extends TriggeredAbilityImpl { - protected FilterCreaturePermanent filter; + protected FilterPermanent filter; private boolean applyFilterOnSource = false; public DiesThisOrAnotherCreatureTriggeredAbility(Effect effect, boolean optional) { - this(effect, optional, new FilterCreaturePermanent()); + this(effect, optional, StaticFilters.FILTER_PERMANENT_CREATURE); } - public DiesThisOrAnotherCreatureTriggeredAbility(Effect effect, boolean optional, FilterCreaturePermanent filter) { + public DiesThisOrAnotherCreatureTriggeredAbility(Effect effect, boolean optional, FilterPermanent filter) { super(Zone.ALL, effect, optional); // Needs "ALL" if the source itself should trigger or multiple (incl. source go to grave) this.filter = filter; } @@ -63,7 +64,7 @@ public class DiesThisOrAnotherCreatureTriggeredAbility extends TriggeredAbilityI } return false; } - + @Override public boolean isInUseableZone(Game game, MageObject source, GameEvent event) { return TriggeredAbilityImpl.isInUseableZoneDiesTrigger(this, event, game); @@ -71,6 +72,6 @@ public class DiesThisOrAnotherCreatureTriggeredAbility extends TriggeredAbilityI @Override public String getTriggerPhrase() { - return "Whenever {this} or another " + filter.getMessage() + " dies, " ; + return "Whenever {this} or another " + filter.getMessage() + " dies, "; } } diff --git a/Mage/src/main/java/mage/abilities/costs/common/DiscardHandCost.java b/Mage/src/main/java/mage/abilities/costs/common/DiscardHandCost.java index ec4c6a7c9f..74dbc145f3 100644 --- a/Mage/src/main/java/mage/abilities/costs/common/DiscardHandCost.java +++ b/Mage/src/main/java/mage/abilities/costs/common/DiscardHandCost.java @@ -44,6 +44,6 @@ public class DiscardHandCost extends CostImpl { @Override public String getText() { - return "Discard your hand"; + return "discard your hand"; } } \ No newline at end of file diff --git a/Mage/src/main/java/mage/abilities/effects/common/ReturnToHandChosenControlledPermanentEffect.java b/Mage/src/main/java/mage/abilities/effects/common/ReturnToHandChosenControlledPermanentEffect.java index 0af04bc69f..1f7e6ae523 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/ReturnToHandChosenControlledPermanentEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/ReturnToHandChosenControlledPermanentEffect.java @@ -38,8 +38,9 @@ public class ReturnToHandChosenControlledPermanentEffect extends ReturnToHandCho @Override protected String getText() { - StringBuilder sb = new StringBuilder("return "); + StringBuilder sb = new StringBuilder("return"); if (!filter.getMessage().startsWith("another")) { + sb.append(' '); if(filter.getMessage().startsWith("a")){ sb.append("an"); } diff --git a/Mage/src/main/java/mage/abilities/mana/AnyColorManaAbility.java b/Mage/src/main/java/mage/abilities/mana/AnyColorManaAbility.java index 1dc32fb383..942fcded4b 100644 --- a/Mage/src/main/java/mage/abilities/mana/AnyColorManaAbility.java +++ b/Mage/src/main/java/mage/abilities/mana/AnyColorManaAbility.java @@ -1,17 +1,18 @@ package mage.abilities.mana; -import java.util.ArrayList; -import java.util.List; import mage.Mana; import mage.abilities.costs.Cost; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.dynamicvalue.DynamicValue; import mage.abilities.effects.Effect; -import mage.abilities.effects.mana.ManaEffect; import mage.abilities.effects.mana.AddManaOfAnyColorEffect; +import mage.abilities.effects.mana.ManaEffect; import mage.constants.Zone; import mage.game.Game; +import java.util.ArrayList; +import java.util.List; + public class AnyColorManaAbility extends ActivatedManaAbilityImpl { public AnyColorManaAbility() { @@ -28,14 +29,17 @@ public class AnyColorManaAbility extends ActivatedManaAbilityImpl { } /** - * * @param cost * @param netAmount dynamic value used during available mana calculation to * set the max possible amount the source can produce * @param setFlag */ public AnyColorManaAbility(Cost cost, DynamicValue netAmount, boolean setFlag) { - super(Zone.BATTLEFIELD, new AddManaOfAnyColorEffect(1, netAmount, setFlag), cost); + this(Zone.BATTLEFIELD, cost, netAmount, setFlag); + } + + public AnyColorManaAbility(Zone zone, Cost cost, DynamicValue netAmount, boolean setFlag) { + super(zone, new AddManaOfAnyColorEffect(1, netAmount, setFlag), cost); this.netMana.add(new Mana(0, 0, 0, 0, 0, 0, 1, 0)); } diff --git a/Mage/src/main/java/mage/filter/StaticFilters.java b/Mage/src/main/java/mage/filter/StaticFilters.java index 4b66c81727..c0717cec1f 100644 --- a/Mage/src/main/java/mage/filter/StaticFilters.java +++ b/Mage/src/main/java/mage/filter/StaticFilters.java @@ -389,6 +389,13 @@ public final class StaticFilters { FILTER_OPPONENTS_PERMANENT_CREATURE.setLockedFilter(true); } + public static final FilterCreaturePermanent FILTER_OPPONENTS_PERMANENT_A_CREATURE = new FilterCreaturePermanent("a creature an opponent controls"); + + static { + FILTER_OPPONENTS_PERMANENT_A_CREATURE.add(TargetController.OPPONENT.getControllerPredicate()); + FILTER_OPPONENTS_PERMANENT_A_CREATURE.setLockedFilter(true); + } + public static final FilterPermanent FILTER_OPPONENTS_PERMANENT_ARTIFACT = new FilterPermanent("artifact an opponent controls"); static { @@ -447,7 +454,7 @@ public final class StaticFilters { FILTER_CONTROLLED_ANOTHER_CREATURE.setLockedFilter(true); } - public static final FilterControlledCreaturePermanent FILTER_CONTROLLED_UNTAPPED_CREATURES = new FilterControlledCreaturePermanent("untapped creature you control"); + public static final FilterControlledCreaturePermanent FILTER_CONTROLLED_UNTAPPED_CREATURES = new FilterControlledCreaturePermanent("untapped creatures you control"); static { FILTER_CONTROLLED_UNTAPPED_CREATURES.add(TappedPredicate.UNTAPPED); diff --git a/Mage/src/main/java/mage/game/permanent/token/ConsumingBlobToken.java b/Mage/src/main/java/mage/game/permanent/token/ConsumingBlobToken.java index d3d113fc66..c64de22555 100644 --- a/Mage/src/main/java/mage/game/permanent/token/ConsumingBlobToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/ConsumingBlobToken.java @@ -16,7 +16,7 @@ import mage.game.Game; public final class ConsumingBlobToken extends TokenImpl { public ConsumingBlobToken() { - super("Ooze", "green Ooze creature token with \"This creature's power is equal to the number of card types among cards in your graveyard and its toughness is equal to that number plus 1.\""); + super("Ooze", "green Ooze creature token with \"This creature's power is equal to the number of card types among cards in your graveyard and its toughness is equal to that number plus 1\"."); setOriginalExpansionSetCode("MID"); cardType.add(CardType.CREATURE); subtype.add(SubType.OOZE);