diff --git a/Mage.Sets/src/mage/cards/a/ArchonsGlory.java b/Mage.Sets/src/mage/cards/a/ArchonsGlory.java index 8732635af8a..40ba18e1be1 100644 --- a/Mage.Sets/src/mage/cards/a/ArchonsGlory.java +++ b/Mage.Sets/src/mage/cards/a/ArchonsGlory.java @@ -11,6 +11,7 @@ import mage.abilities.keyword.LifelinkAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; +import mage.target.common.TargetCreaturePermanent; import java.util.UUID; @@ -34,6 +35,7 @@ public final class ArchonsGlory extends CardImpl { ), BargainedCondition.instance, "if this spell was bargained, " + "that creature also gains flying and lifelink until end of turn" )); + this.getSpellAbility().addTarget(new TargetCreaturePermanent()); } private ArchonsGlory(final ArchonsGlory card) { diff --git a/Mage.Sets/src/mage/cards/b/BarrowNaughty.java b/Mage.Sets/src/mage/cards/b/BarrowNaughty.java index 24294b97eb8..4c73c0b173a 100644 --- a/Mage.Sets/src/mage/cards/b/BarrowNaughty.java +++ b/Mage.Sets/src/mage/cards/b/BarrowNaughty.java @@ -48,7 +48,7 @@ public final class BarrowNaughty extends CardImpl { // Barrow Naughty has lifelink as long as you control another Faerie. this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect( new GainAbilitySourceEffect(LifelinkAbility.getInstance()), condition, - "has lifelink as long as you control another Faerie" + "{this} has lifelink as long as you control another Faerie" ))); // {2}{B}: Barrow Naughty gets +1/+0 until end of turn. diff --git a/Mage.Sets/src/mage/cards/b/BraveTheWilds.java b/Mage.Sets/src/mage/cards/b/BraveTheWilds.java index bef7f3297b9..560e6fe4e32 100644 --- a/Mage.Sets/src/mage/cards/b/BraveTheWilds.java +++ b/Mage.Sets/src/mage/cards/b/BraveTheWilds.java @@ -49,7 +49,7 @@ public final class BraveTheWilds extends CardImpl { // Search your library for a basic land card, reveal it, put it into your hand, then shuffle. this.getSpellAbility().addEffect(new SearchLibraryPutInHandEffect( new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_LAND), true - )); + ).concatBy("
")); } private BraveTheWilds(final BraveTheWilds card) { diff --git a/Mage.Sets/src/mage/cards/c/CallousSellSword.java b/Mage.Sets/src/mage/cards/c/CallousSellSword.java index a49d520326f..714b57ebf02 100644 --- a/Mage.Sets/src/mage/cards/c/CallousSellSword.java +++ b/Mage.Sets/src/mage/cards/c/CallousSellSword.java @@ -54,7 +54,7 @@ public final class CallousSellSword extends AdventureCard { this.getSpellCard().getSpellAbility().addEffect(new DamageWithPowerFromOneToAnotherTargetEffect()); this.getSpellCard().getSpellAbility().addTarget(new TargetControlledCreaturePermanent().setTargetTag(1)); this.getSpellCard().getSpellAbility().addTarget(new TargetAnyTarget().setTargetTag(2)); - this.getSpellCard().getSpellAbility().addEffect(new CallousSellSwordSacrificeFirstTargetEffect().concatBy(". Then")); + this.getSpellCard().getSpellAbility().addEffect(new CallousSellSwordSacrificeFirstTargetEffect().concatBy("Then")); } private CallousSellSword(final CallousSellSword card) { @@ -114,4 +114,4 @@ class CallousSellSwordSacrificeFirstTargetEffect extends OneShotEffect { Permanent permanent = game.getPermanent(source.getFirstTarget()); return permanent != null && permanent.sacrifice(source, game); } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/c/CruelSomnophage.java b/Mage.Sets/src/mage/cards/c/CruelSomnophage.java index fa596918f0e..3c72746ee0f 100644 --- a/Mage.Sets/src/mage/cards/c/CruelSomnophage.java +++ b/Mage.Sets/src/mage/cards/c/CruelSomnophage.java @@ -21,7 +21,7 @@ import java.util.UUID; */ public final class CruelSomnophage extends AdventureCard { - private static final DynamicValue xValue = new CardsInAllGraveyardsCount(StaticFilters.FILTER_CARD_CREATURE); + private static final DynamicValue xValue = new CardsInAllGraveyardsCount(StaticFilters.FILTER_CARD_CREATURES); public CruelSomnophage(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, new CardType[]{CardType.SORCERY}, "{1}{B}", "Can't Wake Up", "{1}{U}"); diff --git a/Mage.Sets/src/mage/cards/e/EerieInterference.java b/Mage.Sets/src/mage/cards/e/EerieInterference.java index 7a47d56812e..7d05610141b 100644 --- a/Mage.Sets/src/mage/cards/e/EerieInterference.java +++ b/Mage.Sets/src/mage/cards/e/EerieInterference.java @@ -38,7 +38,7 @@ class EerieInterferenceEffect extends PreventionEffectImpl { EerieInterferenceEffect() { super(Duration.EndOfTurn, Integer.MAX_VALUE, false, false); - staticText = "prevent all damage that would be dealt to you and creatures you control by creatures this turn"; + staticText = "prevent all damage that would be dealt to you and creatures you control this turn by creatures"; } private EerieInterferenceEffect(final EerieInterferenceEffect effect) { diff --git a/Mage.Sets/src/mage/cards/e/ErietteOfTheCharmedApple.java b/Mage.Sets/src/mage/cards/e/ErietteOfTheCharmedApple.java index e5e8edcd4c6..199998fd616 100644 --- a/Mage.Sets/src/mage/cards/e/ErietteOfTheCharmedApple.java +++ b/Mage.Sets/src/mage/cards/e/ErietteOfTheCharmedApple.java @@ -28,7 +28,7 @@ import mage.constants.Duration; */ public final class ErietteOfTheCharmedApple extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creatures enchanted by an Aura you control"); + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("each creature that's enchanted by an Aura you control"); private static final DynamicValue count = new PermanentsOnBattlefieldCount(new FilterControlledPermanent(SubType.AURA)); static { @@ -48,8 +48,10 @@ public final class ErietteOfTheCharmedApple extends CardImpl { this.addAbility(new SimpleStaticAbility(new CantAttackYouAllEffect(Duration.WhileOnBattlefield, filter, true))); // At the beginning of your end step, each opponent loses X life and you gain X life, where X is the number of Auras you control. - Ability ability = new BeginningOfEndStepTriggeredAbility(new LoseLifeOpponentsEffect(count), TargetController.YOU, false); - ability.addEffect(new GainLifeEffect(count)); + Ability ability = new BeginningOfEndStepTriggeredAbility(new LoseLifeOpponentsEffect(count) + .setText("each opponent loses X life"), TargetController.YOU, false); + ability.addEffect(new GainLifeEffect(count) + .setText("and you gain X life, where X is the number of Auras you control")); ability.addHint(new ValueHint("Number of Auras you control", count)); this.addAbility(ability); } @@ -62,4 +64,4 @@ public final class ErietteOfTheCharmedApple extends CardImpl { public ErietteOfTheCharmedApple copy() { return new ErietteOfTheCharmedApple(this); } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/f/FaerieFencing.java b/Mage.Sets/src/mage/cards/f/FaerieFencing.java index 3d3844076b1..24e3f442429 100644 --- a/Mage.Sets/src/mage/cards/f/FaerieFencing.java +++ b/Mage.Sets/src/mage/cards/f/FaerieFencing.java @@ -51,7 +51,7 @@ class FaerieFencingEffect extends OneShotEffect { FaerieFencingEffect() { super(Outcome.UnboostCreature); - this.staticText = "target creature gets -X/-X until end of turn. It gets an additional -3/-3 if you controlled a Faerie as you cast this spell."; + this.staticText = "target creature gets -X/-X until end of turn. That creature gets an additional -3/-3 if you controlled a Faerie as you cast this spell."; } private FaerieFencingEffect(final FaerieFencingEffect effect) { @@ -108,4 +108,4 @@ class ControlledFaerieAsSpellCastWatcher extends Watcher { public int getCount(MageObjectReference mor) { return permanentsWhenCast.getOrDefault(mor, 0); } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/g/GallantPieWielder.java b/Mage.Sets/src/mage/cards/g/GallantPieWielder.java index 8bcff02129e..17ac6b67605 100644 --- a/Mage.Sets/src/mage/cards/g/GallantPieWielder.java +++ b/Mage.Sets/src/mage/cards/g/GallantPieWielder.java @@ -35,7 +35,7 @@ public final class GallantPieWielder extends CardImpl { // Celebration -- Gallant Pie-Wielder has double strike as long as two or more nonland permanents entered the battlefield under your control this turn. this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect( new GainAbilitySourceEffect(DoubleStrikeAbility.getInstance()), - CelebrationCondition.instance, "{this} as double strike as long as two or " + + CelebrationCondition.instance, "{this} has double strike as long as two or " + "more nonland permanents entered the battlefield under your control this turn" )).addHint(CelebrationCondition.getHint()).setAbilityWord(AbilityWord.CELEBRATION), new CelebrationWatcher()); } diff --git a/Mage.Sets/src/mage/cards/g/GretaSweettoothScourge.java b/Mage.Sets/src/mage/cards/g/GretaSweettoothScourge.java index 9954730f26f..78c308f8276 100644 --- a/Mage.Sets/src/mage/cards/g/GretaSweettoothScourge.java +++ b/Mage.Sets/src/mage/cards/g/GretaSweettoothScourge.java @@ -52,7 +52,7 @@ public final class GretaSweettoothScourge extends CardImpl { // {1}{B}, Sacrifice a Food: You draw a card and you lose 1 life. ability = new SimpleActivatedAbility( - new DrawCardSourceControllerEffect(1), + new DrawCardSourceControllerEffect(1, "you"), new ManaCostsImpl<>("{1}{B}") ); ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent(StaticFilters.FILTER_CONTROLLED_FOOD))); diff --git a/Mage.Sets/src/mage/cards/h/HearthElemental.java b/Mage.Sets/src/mage/cards/h/HearthElemental.java index 9fcad96638a..b9ef6557b25 100644 --- a/Mage.Sets/src/mage/cards/h/HearthElemental.java +++ b/Mage.Sets/src/mage/cards/h/HearthElemental.java @@ -49,6 +49,8 @@ public final class HearthElemental extends AdventureCard { // This spell costs X less to cast, where X is the number of cards in your graveyard that are instant cards, sorcery cards, and/or have an Adventure. Ability ability = new SimpleStaticAbility( Zone.ALL, new SpellCostReductionForEachSourceEffect(1, xValue) + .setText("This spell costs {X} less to cast, where X is the number of cards in your graveyard " + + "that are instant cards, sorcery cards, and/or have an Adventure") ).addHint(hint); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/h/HornedLochWhale.java b/Mage.Sets/src/mage/cards/h/HornedLochWhale.java index 8e71b77fa43..5faba9c245c 100644 --- a/Mage.Sets/src/mage/cards/h/HornedLochWhale.java +++ b/Mage.Sets/src/mage/cards/h/HornedLochWhale.java @@ -47,7 +47,7 @@ public final class HornedLochWhale extends AdventureCard { // Horned Loch-Whale enters the battlefield tapped unless it's your turn. this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect( new TapSourceEffect(true), NotMyTurnCondition.instance, - "{this} enters the battlefield tapped unless it's your turn" + "tapped unless it's your turn" ))); // Lagoon Breach diff --git a/Mage.Sets/src/mage/cards/h/HyldaOfTheIcyCrown.java b/Mage.Sets/src/mage/cards/h/HyldaOfTheIcyCrown.java index d274a9521d3..a8b413fd304 100644 --- a/Mage.Sets/src/mage/cards/h/HyldaOfTheIcyCrown.java +++ b/Mage.Sets/src/mage/cards/h/HyldaOfTheIcyCrown.java @@ -47,7 +47,7 @@ public final class HyldaOfTheIcyCrown extends CardImpl { // * Scry 2, then draw a card. Mode mode = new Mode(new ScryEffect(2, false)); - mode.addEffect(new DrawCardSourceControllerEffect(1)); + mode.addEffect(new DrawCardSourceControllerEffect(1).concatBy(", then")); delayed.addMode(mode); this.addAbility(new TapUntappedPermanentTriggeredAbility( diff --git a/Mage.Sets/src/mage/cards/i/ImodaneThePyrohammer.java b/Mage.Sets/src/mage/cards/i/ImodaneThePyrohammer.java index ea496f245f8..6df5010624d 100644 --- a/Mage.Sets/src/mage/cards/i/ImodaneThePyrohammer.java +++ b/Mage.Sets/src/mage/cards/i/ImodaneThePyrohammer.java @@ -63,7 +63,8 @@ class ImodaneThePyrohammerTriggeredAbility extends TriggeredAbilityImpl { private static final Hint hint = new ValuePositiveHint("Damage dealt to the target", ImodaneThePyrohammerDynamicValue.instance); ImodaneThePyrohammerTriggeredAbility() { - super(Zone.BATTLEFIELD, new DamagePlayersEffect(Outcome.Damage, ImodaneThePyrohammerDynamicValue.instance, TargetController.OPPONENT), false); + super(Zone.BATTLEFIELD, new DamagePlayersEffect(Outcome.Damage, ImodaneThePyrohammerDynamicValue.instance, TargetController.OPPONENT) + .setText("{this} deals that much damage to each opponent"), false); setTriggerPhrase("Whenever an instant or sorcery spell you control that targets only a single creature deals damage to that creature, "); addHint(hint); } @@ -140,4 +141,4 @@ enum ImodaneThePyrohammerDynamicValue implements DynamicValue { public String getMessage() { return "that much damage"; } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/m/MonstrousRage.java b/Mage.Sets/src/mage/cards/m/MonstrousRage.java index 92e317805f9..14718f27d0f 100644 --- a/Mage.Sets/src/mage/cards/m/MonstrousRage.java +++ b/Mage.Sets/src/mage/cards/m/MonstrousRage.java @@ -21,7 +21,7 @@ public final class MonstrousRage extends CardImpl { // Target creature gets +2/+0 until end of turn. Create a Monster Role attached to it. this.getSpellAbility().addEffect(new BoostTargetEffect(2, 0)); this.getSpellAbility().addTarget(new TargetCreaturePermanent()); - this.getSpellAbility().addEffect(new CreateRoleAttachedTargetEffect(RoleType.MONSTER).setText("create a Monster Role attached to it")); + this.getSpellAbility().addEffect(new CreateRoleAttachedTargetEffect(RoleType.MONSTER).setText("create a Monster Role token attached to it")); } private MonstrousRage(final MonstrousRage card) { diff --git a/Mage.Sets/src/mage/cards/m/MoonshakerCavalry.java b/Mage.Sets/src/mage/cards/m/MoonshakerCavalry.java index 311d1910053..6f0881e75fe 100644 --- a/Mage.Sets/src/mage/cards/m/MoonshakerCavalry.java +++ b/Mage.Sets/src/mage/cards/m/MoonshakerCavalry.java @@ -37,7 +37,7 @@ public final class MoonshakerCavalry extends CardImpl { Ability ability = new EntersBattlefieldTriggeredAbility(new GainAbilityControlledEffect( FlyingAbility.getInstance(), Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURES - )); + ).setText("creatures you control gain flying")); ability.addEffect(new BoostControlledEffect( CreaturesYouControlCount.instance, CreaturesYouControlCount.instance, Duration.EndOfTurn ).setText("and get +X/+X until end of turn, where X is the number of creatures you control")); diff --git a/Mage.Sets/src/mage/cards/n/NightOfTheSweetsRevenge.java b/Mage.Sets/src/mage/cards/n/NightOfTheSweetsRevenge.java index bb1bc8b1153..c200a3ae57b 100644 --- a/Mage.Sets/src/mage/cards/n/NightOfTheSweetsRevenge.java +++ b/Mage.Sets/src/mage/cards/n/NightOfTheSweetsRevenge.java @@ -18,7 +18,9 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; +import mage.constants.SubType; import mage.filter.StaticFilters; +import mage.filter.common.FilterControlledPermanent; import mage.game.permanent.token.FoodToken; import java.util.UUID; @@ -29,7 +31,9 @@ import java.util.UUID; */ public final class NightOfTheSweetsRevenge extends CardImpl { - private static final DynamicValue xValue = new PermanentsOnBattlefieldCount(StaticFilters.FILTER_CONTROLLED_FOOD); + private static final FilterControlledPermanent filter = new FilterControlledPermanent(SubType.FOOD, "Foods"); + + private static final DynamicValue xValue = new PermanentsOnBattlefieldCount(filter); private static final Hint hint = new ValueHint("Foods you control", xValue); public NightOfTheSweetsRevenge(UUID ownerId, CardSetInfo setInfo) { @@ -41,8 +45,7 @@ public final class NightOfTheSweetsRevenge extends CardImpl { // Foods you control have "{T}: Add {G}." this.addAbility(new SimpleStaticAbility(new GainAbilityControlledEffect( - new GreenManaAbility(), Duration.WhileOnBattlefield, - StaticFilters.FILTER_CONTROLLED_FOOD + new GreenManaAbility(), Duration.WhileOnBattlefield, filter ))); // {5}{G}{G}, Sacrifice Night of the Sweets' Revenge: Creatures you control get +X/+X until end of turn, where X is the number of Foods you control. Activate only as a sorcery. diff --git a/Mage.Sets/src/mage/cards/o/OgreChitterlord.java b/Mage.Sets/src/mage/cards/o/OgreChitterlord.java index 208bbe74383..89b7cccea8f 100644 --- a/Mage.Sets/src/mage/cards/o/OgreChitterlord.java +++ b/Mage.Sets/src/mage/cards/o/OgreChitterlord.java @@ -30,7 +30,7 @@ public final class OgreChitterlord extends CardImpl { private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent(SubType.RAT, "each Rat you control"); private static final FilterControlledPermanent filterCondition = - new FilterControlledPermanent(SubType.RAT, "five or more Rats"); + new FilterControlledPermanent(SubType.RAT, "you control five or more Rats"); private static final Condition condition = new PermanentsOnTheBattlefieldCondition(filterCondition, ComparisonType.OR_GREATER, 5); diff --git a/Mage.Sets/src/mage/cards/o/OldFlitterfang.java b/Mage.Sets/src/mage/cards/o/OldFlitterfang.java index 3e6099dfa45..20496892680 100644 --- a/Mage.Sets/src/mage/cards/o/OldFlitterfang.java +++ b/Mage.Sets/src/mage/cards/o/OldFlitterfang.java @@ -6,7 +6,7 @@ import mage.abilities.common.BeginningOfEndStepTriggeredAbility; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.condition.common.MorbidCondition; import mage.abilities.costs.common.SacrificeTargetCost; -import mage.abilities.costs.mana.GenericManaCost; +import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.effects.common.continuous.BoostSourceEffect; import mage.abilities.hint.common.MorbidHint; @@ -42,9 +42,9 @@ public final class OldFlitterfang extends CardImpl { MorbidCondition.instance, false ).addHint(MorbidHint.instance)); - // {2}, Sacrifice another creature or artifact: Old Flitterfang gets +2/+2 until end of turn. + // {2}{B}, Sacrifice another creature or artifact: Old Flitterfang gets +2/+2 until end of turn. Ability ability = new SimpleActivatedAbility( - new BoostSourceEffect(2, 2, Duration.EndOfTurn), new GenericManaCost(2) + new BoostSourceEffect(2, 2, Duration.EndOfTurn), new ManaCostsImpl<>("{2}{B}") ); ability.addCost(new SacrificeTargetCost(StaticFilters.FILTER_CONTROLLED_ANOTHER_ARTIFACT_OR_CREATURE_SHORT_TEXT)); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/p/PicklockPrankster.java b/Mage.Sets/src/mage/cards/p/PicklockPrankster.java index 8a8a78f96b2..aa6d576adf9 100644 --- a/Mage.Sets/src/mage/cards/p/PicklockPrankster.java +++ b/Mage.Sets/src/mage/cards/p/PicklockPrankster.java @@ -44,7 +44,7 @@ public final class PicklockPrankster extends AdventureCard { // Free the Fae // Mill four cards. Then put an instant, sorcery, or Faerie card from among the milled cards into your hand. - this.getSpellAbility().addEffect(new MillThenPutInHandEffect(4, filter)); + this.getSpellCard().getSpellAbility().addEffect(new MillThenPutInHandEffect(4, filter)); } private PicklockPrankster(final PicklockPrankster card) { diff --git a/Mage.Sets/src/mage/cards/r/RagingBattleMouse.java b/Mage.Sets/src/mage/cards/r/RagingBattleMouse.java index 04583ef1849..fb2d6b4a7d7 100644 --- a/Mage.Sets/src/mage/cards/r/RagingBattleMouse.java +++ b/Mage.Sets/src/mage/cards/r/RagingBattleMouse.java @@ -40,11 +40,11 @@ public final class RagingBattleMouse extends CardImpl { YouCastExactOneSpellThisTurnCondition.instance, "the second spell you cast each turn costs {1} less to cast" ))); - // Celebration -- At the beginning of combat on each of your turns, if two or more nonland permanents entered the battlefield under your control this turn, target creature you control gets +1/+1 until end of turn. + // Celebration -- At the beginning of combat on your turn, if two or more nonland permanents entered the battlefield under your control this turn, target creature you control gets +1/+1 until end of turn. Ability ability = new ConditionalInterveningIfTriggeredAbility( new BeginningOfCombatTriggeredAbility( new BoostTargetEffect(1, 1, Duration.EndOfTurn), TargetController.YOU, false - ), CelebrationCondition.instance, "At the beginning of combat on each of your turns, " + ), CelebrationCondition.instance, "At the beginning of combat on your turn, " + "if two or more nonland permanents entered the battlefield under your control this turn, " + "target creature you control gets +1/+1 until end of turn." ); @@ -72,4 +72,4 @@ enum YouCastExactOneSpellThisTurnCondition implements Condition { SpellsCastWatcher watcher = game.getState().getWatcher(SpellsCastWatcher.class); return watcher != null && watcher.getSpellsCastThisTurn(source.getControllerId()).size() == 1; } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/r/RatOut.java b/Mage.Sets/src/mage/cards/r/RatOut.java index f02a61476c6..a2c3b9e5182 100644 --- a/Mage.Sets/src/mage/cards/r/RatOut.java +++ b/Mage.Sets/src/mage/cards/r/RatOut.java @@ -23,7 +23,7 @@ public final class RatOut extends CardImpl { // Up to one target creature gets -1/-1 until end of turn. You create a 1/1 black Rat creature token with "This creature can't block." this.getSpellAbility().addEffect(new BoostTargetEffect(-1, -1, Duration.EndOfTurn)); this.getSpellAbility().addTarget(new TargetCreaturePermanent(0, 1)); - this.getSpellAbility().addEffect(new CreateTokenEffect(new RatCantBlockToken())); + this.getSpellAbility().addEffect(new CreateTokenEffect(new RatCantBlockToken()).concatBy("You")); } private RatOut(final RatOut card) { diff --git a/Mage.Sets/src/mage/cards/r/RestlessCottage.java b/Mage.Sets/src/mage/cards/r/RestlessCottage.java index 657fc7a1229..e858030e5ed 100644 --- a/Mage.Sets/src/mage/cards/r/RestlessCottage.java +++ b/Mage.Sets/src/mage/cards/r/RestlessCottage.java @@ -45,7 +45,7 @@ public final class RestlessCottage extends CardImpl { // Whenever Restless Cottage attacks, create a Food token and exile up to one target card from a graveyard. Ability ability = new AttacksTriggeredAbility(new CreateTokenEffect(new FoodToken())); - ability.addEffect(new ExileTargetEffect()); + ability.addEffect(new ExileTargetEffect().concatBy("and")); ability.addTarget(new TargetCardInGraveyard(0, 1)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/r/ReturnFromTheWilds.java b/Mage.Sets/src/mage/cards/r/ReturnFromTheWilds.java index 649b1d279f8..2ade25c80bf 100644 --- a/Mage.Sets/src/mage/cards/r/ReturnFromTheWilds.java +++ b/Mage.Sets/src/mage/cards/r/ReturnFromTheWilds.java @@ -27,7 +27,7 @@ public final class ReturnFromTheWilds extends CardImpl { // * Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. this.getSpellAbility().addEffect(new SearchLibraryPutInPlayEffect( - new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_LAND), true, true + new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_LAND), true, false )); // * Create a 1/1 white Human creature token. diff --git a/Mage.Sets/src/mage/cards/r/RimefurReindeer.java b/Mage.Sets/src/mage/cards/r/RimefurReindeer.java index 7c66da5db6b..c3af4a3a6c2 100644 --- a/Mage.Sets/src/mage/cards/r/RimefurReindeer.java +++ b/Mage.Sets/src/mage/cards/r/RimefurReindeer.java @@ -25,7 +25,7 @@ public final class RimefurReindeer extends CardImpl { this.toughness = new MageInt(4); // Whenever an enchantment enters the battlefield under your control, tap target creature an opponent controls. - Ability ability = new ConstellationAbility(new TapTargetEffect()); + Ability ability = new ConstellationAbility(new TapTargetEffect(), false, false); ability.addTarget(new TargetOpponentsCreaturePermanent()); this.addAbility(ability.setAbilityWord(null)); } diff --git a/Mage.Sets/src/mage/cards/s/SongOfTotentanz.java b/Mage.Sets/src/mage/cards/s/SongOfTotentanz.java index 44dd033fa5a..f50e41b354d 100644 --- a/Mage.Sets/src/mage/cards/s/SongOfTotentanz.java +++ b/Mage.Sets/src/mage/cards/s/SongOfTotentanz.java @@ -2,9 +2,13 @@ package mage.cards.s; import mage.abilities.dynamicvalue.common.ManacostVariableValue; import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; +import mage.abilities.keyword.HasteAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; +import mage.constants.Duration; +import mage.filter.StaticFilters; import mage.game.permanent.token.RatCantBlockToken; import java.util.UUID; @@ -19,6 +23,8 @@ public final class SongOfTotentanz extends CardImpl { // Create X 1/1 black Rat creature tokens with “This creature can’t block.” Creatures you control gain haste until end of turn. this.getSpellAbility().addEffect(new CreateTokenEffect(new RatCantBlockToken(), ManacostVariableValue.REGULAR)); + this.getSpellAbility().addEffect(new GainAbilityControlledEffect( + HasteAbility.getInstance(), Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURES)); } private SongOfTotentanz(final SongOfTotentanz card) { diff --git a/Mage.Sets/src/mage/cards/s/SpellStutter.java b/Mage.Sets/src/mage/cards/s/SpellStutter.java index 9b051685a24..dd547cf1558 100644 --- a/Mage.Sets/src/mage/cards/s/SpellStutter.java +++ b/Mage.Sets/src/mage/cards/s/SpellStutter.java @@ -32,7 +32,7 @@ public final class SpellStutter extends CardImpl { // Counter target spell unless its controller pays {2} plus an additional {1} for each Faerie you control. this.getSpellAbility().addEffect(new CounterUnlessPaysEffect(xValue).setText( - "Counter target spell unless its controller pays {2}" + "Counter target spell unless its controller pays {2} " + "plus an additional {1} for each Faerie you control." )); this.getSpellAbility().addTarget(new TargetSpell()); diff --git a/Mage.Sets/src/mage/cards/t/TalionTheKindlyLord.java b/Mage.Sets/src/mage/cards/t/TalionTheKindlyLord.java index 611f2a2550f..3ebba0e0807 100644 --- a/Mage.Sets/src/mage/cards/t/TalionTheKindlyLord.java +++ b/Mage.Sets/src/mage/cards/t/TalionTheKindlyLord.java @@ -54,7 +54,7 @@ public final class TalionTheKindlyLord extends CardImpl { .setText("that player loses 2 life"), filter, false, SetTargetPointer.PLAYER ); - ability.addEffect(new DrawCardSourceControllerEffect(1).concatBy("and")); + ability.addEffect(new DrawCardSourceControllerEffect(1, "you").concatBy("and")); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/t/TatteredRatter.java b/Mage.Sets/src/mage/cards/t/TatteredRatter.java index f5ca923f941..8de80a4f002 100644 --- a/Mage.Sets/src/mage/cards/t/TatteredRatter.java +++ b/Mage.Sets/src/mage/cards/t/TatteredRatter.java @@ -17,7 +17,7 @@ import java.util.UUID; */ public final class TatteredRatter extends CardImpl { - private static final FilterControlledPermanent filter = new FilterControlledPermanent(SubType.RAT, "Rat you control"); + private static final FilterControlledPermanent filter = new FilterControlledPermanent(SubType.RAT, "a Rat you control"); public TatteredRatter(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{R}"); diff --git a/Mage.Sets/src/mage/cards/t/TorchTheTower.java b/Mage.Sets/src/mage/cards/t/TorchTheTower.java index 88d06ed7016..a3005af7973 100644 --- a/Mage.Sets/src/mage/cards/t/TorchTheTower.java +++ b/Mage.Sets/src/mage/cards/t/TorchTheTower.java @@ -39,7 +39,7 @@ public final class TorchTheTower extends CardImpl { // If a permanent dealt damage by Torch the Tower would die this turn, exile it instead. this.getSpellAbility().addEffect(new DealtDamageToCreatureBySourceDies(this, Duration.EndOfTurn) - .setText("if a permanent dealt damage by {this} would die this turn, exile it instead")); + .setText("
If a permanent dealt damage by {this} would die this turn, exile it instead")); this.getSpellAbility().addWatcher(new DamagedByWatcher(false)); } diff --git a/Mage.Sets/src/mage/cards/t/ToughCookie.java b/Mage.Sets/src/mage/cards/t/ToughCookie.java index 072a87d721d..82a12b8ec21 100644 --- a/Mage.Sets/src/mage/cards/t/ToughCookie.java +++ b/Mage.Sets/src/mage/cards/t/ToughCookie.java @@ -54,7 +54,7 @@ public final class ToughCookie extends CardImpl { ).setText("target noncreature artifact you control becomes"), new ManaCostsImpl<>("{2}{G}")); ability.addEffect(new SetBasePowerToughnessTargetEffect( 4, 4, Duration.EndOfTurn - ).setText("a 4/4 artifact creature until end of turn")); + ).setText(" a 4/4 artifact creature until end of turn")); ability.addTarget(new TargetPermanent(filter)); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/t/TroyanGutsyExplorer.java b/Mage.Sets/src/mage/cards/t/TroyanGutsyExplorer.java index 6c59b1cb0bf..f3fd3b2aa34 100644 --- a/Mage.Sets/src/mage/cards/t/TroyanGutsyExplorer.java +++ b/Mage.Sets/src/mage/cards/t/TroyanGutsyExplorer.java @@ -72,14 +72,14 @@ class TroyanGutsyExplorerManaBuilder extends ConditionalManaBuilder { @Override public String getRule() { - return "Spend this mana only to cast spells with mana value 5 or greater or spells with X in their mana costs"; + return "Spend this mana only to cast spells with mana value 5 or greater or spells with {X} in their mana costs"; } } class TroyanGutsyExplorerConditionalMana extends ConditionalMana { TroyanGutsyExplorerConditionalMana(Mana mana) { super(mana); - staticText = "Spend this mana only to cast spells with mana value 5 or greater or spells with X in their mana costs"; + staticText = "Spend this mana only to cast spells with mana value 5 or greater or spells with {X} in their mana costs"; addCondition(TroyanGutsyExplorerCondition.instance); } } diff --git a/Mage.Sets/src/mage/cards/t/TwistedFealty.java b/Mage.Sets/src/mage/cards/t/TwistedFealty.java index 0c544b1e9d1..fa7490d1581 100644 --- a/Mage.Sets/src/mage/cards/t/TwistedFealty.java +++ b/Mage.Sets/src/mage/cards/t/TwistedFealty.java @@ -33,7 +33,7 @@ public final class TwistedFealty extends CardImpl { // Create a Wicked Role token attached to up to one target creature. this.getSpellAbility().addEffect(new CreateRoleAttachedTargetEffect(RoleType.WICKED) - .setTargetPointer(new SecondTargetPointer())); + .setTargetPointer(new SecondTargetPointer()).concatBy("
")); this.getSpellAbility().addTarget(new TargetCreaturePermanent(0, 1)); } diff --git a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java index 2b38b96b52f..6b54a3e82de 100644 --- a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java +++ b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java @@ -62,7 +62,7 @@ public class VerifyCardDataTest { private static final Logger logger = Logger.getLogger(VerifyCardDataTest.class); - private static final String FULL_ABILITIES_CHECK_SET_CODES = "LTR;LTC;CMM"; // check ability text due mtgjson, can use multiple sets like MAT;CMD or * for all + private static final String FULL_ABILITIES_CHECK_SET_CODES = "WOE"; // check ability text due mtgjson, can use multiple sets like MAT;CMD or * for all private static final boolean CHECK_ONLY_ABILITIES_TEXT = false; // use when checking text locally, suppresses unnecessary checks and output messages private static final boolean AUTO_FIX_SAMPLE_DECKS = false; // debug only: auto-fix sample decks by test_checkSampleDecks test run diff --git a/Mage/src/main/java/mage/abilities/common/PayMoreToCastAsThoughtItHadFlashAbility.java b/Mage/src/main/java/mage/abilities/common/PayMoreToCastAsThoughtItHadFlashAbility.java index 7ddb2b327d3..6aa1b8909ad 100644 --- a/Mage/src/main/java/mage/abilities/common/PayMoreToCastAsThoughtItHadFlashAbility.java +++ b/Mage/src/main/java/mage/abilities/common/PayMoreToCastAsThoughtItHadFlashAbility.java @@ -41,7 +41,7 @@ public class PayMoreToCastAsThoughtItHadFlashAbility extends SpellAbility { @Override public String getRule() { - return "You may cast this spell as though it had flash if you pay " + costsToAdd.getText() + " more to cast it. (You may cast it any time you could cast an instant.)"; + return "You may cast {this} as though it had flash if you pay " + costsToAdd.getText() + " more to cast it. (You may cast it any time you could cast an instant.)"; } } diff --git a/Mage/src/main/java/mage/abilities/effects/common/counter/AddCountersAllEffect.java b/Mage/src/main/java/mage/abilities/effects/common/counter/AddCountersAllEffect.java index a67604acb57..a090adfa398 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/counter/AddCountersAllEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/counter/AddCountersAllEffect.java @@ -32,6 +32,7 @@ public class AddCountersAllEffect extends OneShotEffect { this.counter = counter; this.amount = amount; this.filter = filter; + staticText = "put " + counter.getDescription() + " on each " + filter.getMessage(); } protected AddCountersAllEffect(final AddCountersAllEffect effect) { @@ -72,14 +73,6 @@ public class AddCountersAllEffect extends OneShotEffect { return false; } - @Override - public String getText(Mode mode) { - if (!staticText.isEmpty()) { - return staticText; - } - return CardUtil.getAddRemoveCountersText(amount, counter, getTargetPointer().describeTargets(mode.getTargets(), "that creature"), true); - } - @Override public AddCountersAllEffect copy() { return new AddCountersAllEffect(this); diff --git a/Mage/src/main/java/mage/abilities/keyword/BargainAbility.java b/Mage/src/main/java/mage/abilities/keyword/BargainAbility.java index f2bc9074fc0..e60f2821db0 100644 --- a/Mage/src/main/java/mage/abilities/keyword/BargainAbility.java +++ b/Mage/src/main/java/mage/abilities/keyword/BargainAbility.java @@ -53,7 +53,7 @@ public class BargainAbility extends StaticAbility implements OptionalAdditionalS super(Zone.STACK, null); this.additionalCost = new OptionalAdditionalCostImpl(keywordText, reminderText, new SacrificeTargetCost(bargainFilter)); this.additionalCost.setRepeatable(false); - this.rule = additionalCost.getName() + additionalCost.getReminderText(); + this.rule = additionalCost.getName() + ' ' + additionalCost.getReminderText(); this.setRuleAtTheTop(true); this.addHint(BargainCostWasPaidHint.instance); this.activationKey = null; @@ -146,4 +146,4 @@ public class BargainAbility extends StaticAbility implements OptionalAdditionalS public String getRule() { return rule; } -} \ No newline at end of file +}