diff --git a/Mage.Sets/src/mage/cards/a/AvatarDestiny.java b/Mage.Sets/src/mage/cards/a/AvatarDestiny.java index 29cf9a53374..c3e3e34b5bf 100644 --- a/Mage.Sets/src/mage/cards/a/AvatarDestiny.java +++ b/Mage.Sets/src/mage/cards/a/AvatarDestiny.java @@ -71,7 +71,8 @@ class AvatarDestinyEffect extends OneShotEffect { AvatarDestinyEffect() { super(Outcome.Benefit); - staticText = ""; + staticText = "mill cards equal to its power. Return this card to its owner's hand and up to one " + + "creature card milled this way to the battlefield under your control"; } private AvatarDestinyEffect(final AvatarDestinyEffect effect) { @@ -95,6 +96,7 @@ class AvatarDestinyEffect extends OneShotEffect { .map(MageInt::getValue) .orElse(0); Cards cards = player.millCards(count, source, game); + game.processAction(); new ReturnToHandSourceEffect(false, true).apply(game, source); TargetCard target = new TargetCard(0, 1, Zone.ALL, StaticFilters.FILTER_CARD_CREATURE); target.withNotTarget(true); diff --git a/Mage.Sets/src/mage/cards/d/DuelistsFlame.java b/Mage.Sets/src/mage/cards/d/DuelistsFlame.java index 01eae7cd35d..83c3d6b6475 100644 --- a/Mage.Sets/src/mage/cards/d/DuelistsFlame.java +++ b/Mage.Sets/src/mage/cards/d/DuelistsFlame.java @@ -42,7 +42,7 @@ public final class DuelistsFlame extends CardImpl { // Until end of turn, target blocked creature you control gets +X/+0 and gains trample and "Whenever this creature deals combat damage to a player, look at that many cards from the top of your library. Exile up to one nonland card from among them and put the rest on the bottom of your library in a random order. You may cast the exiled card without paying its mana cost." this.getSpellAbility().addEffect(new BoostTargetEffect(GetXValue.instance, StaticValue.get(0)) .setText("until end of turn, target blocked creature you control gets +X/+0")); - this.getSpellAbility().addEffect(new GainAbilityTargetEffect(TrampleAbility.getInstance()).setText("and has trample")); + this.getSpellAbility().addEffect(new GainAbilityTargetEffect(TrampleAbility.getInstance()).setText("and gains trample")); this.getSpellAbility().addEffect(new GainAbilityTargetEffect( new DealsCombatDamageToAPlayerTriggeredAbility(new DuelistsFlameEffect()) ).setText("and \"Whenever this creature deals combat damage to a player, " + diff --git a/Mage.Sets/src/mage/cards/f/FatedClash.java b/Mage.Sets/src/mage/cards/f/FatedClash.java index 4d582e3651c..ebfd5bd0388 100644 --- a/Mage.Sets/src/mage/cards/f/FatedClash.java +++ b/Mage.Sets/src/mage/cards/f/FatedClash.java @@ -33,7 +33,7 @@ public final class FatedClash extends CardImpl { // You may cast this spell as though it had flash if a creature is attacking and a creature is blocking. this.addAbility(new CastAsThoughItHadFlashIfConditionAbility( condition, "you may cast this spell as though it had flash " + - "if a creature is attacking and a creature is blocking" + "if a creature is attacking and a creature is blocking." )); // Target creature you control and target creature an opponent controls each gain indestructible until end of turn. Then destroy all creatures. diff --git a/Mage.Sets/src/mage/cards/f/FlashPhotography.java b/Mage.Sets/src/mage/cards/f/FlashPhotography.java index 871cf8e8514..c3fbb6955bb 100644 --- a/Mage.Sets/src/mage/cards/f/FlashPhotography.java +++ b/Mage.Sets/src/mage/cards/f/FlashPhotography.java @@ -26,7 +26,7 @@ public final class FlashPhotography extends CardImpl { // You may cast this spell as though it had flash if it targets a permanent you control. this.addAbility(new CastAsThoughItHadFlashIfConditionAbility( - condition, "you may cast this spell as though it had flash if it targets a permanent you control" + condition, "you may cast this spell as though it had flash if it targets a permanent you control." )); // Create a token that's a copy of target permanent. diff --git a/Mage.Sets/src/mage/cards/g/GwenomRemorseless.java b/Mage.Sets/src/mage/cards/g/GwenomRemorseless.java index dc637d370e3..a6b24fab20e 100644 --- a/Mage.Sets/src/mage/cards/g/GwenomRemorseless.java +++ b/Mage.Sets/src/mage/cards/g/GwenomRemorseless.java @@ -46,7 +46,7 @@ public final class GwenomRemorseless extends CardImpl { // Whenever Gwenom attacks, until end of turn you may look at the top card of your library any time and you may play cards from the top of your library. If you cast a spell this way, pay life equal to its mana value rather than pay its mana cost. ContinuousEffect libraryAnyTimeEffect = new LookAtTopCardOfLibraryAnyTimeEffect(Duration.EndOfTurn); - libraryAnyTimeEffect.setText("until end of turn you may look at the top card of your library any time"); + libraryAnyTimeEffect.setText("until end of turn, you may look at the top card of your library any time"); libraryAnyTimeEffect.concatBy(" "); AsThoughEffectImpl playCardEffect = new GwenomRemorselessPlayTopCardEffect(); playCardEffect.concatBy("and"); diff --git a/Mage.Sets/src/mage/cards/k/KappaCannoneer.java b/Mage.Sets/src/mage/cards/k/KappaCannoneer.java index a2c29c94268..5094609202b 100644 --- a/Mage.Sets/src/mage/cards/k/KappaCannoneer.java +++ b/Mage.Sets/src/mage/cards/k/KappaCannoneer.java @@ -43,7 +43,7 @@ public final class KappaCannoneer extends CardImpl { StaticFilters.FILTER_PERMANENT_ARTIFACT, false, true ); ability.addEffect(new CantBeBlockedSourceEffect(Duration.EndOfTurn) - .setText("and it can't be blocked this turn")); + .setText("It can't be blocked this turn")); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/k/KratosStoicFather.java b/Mage.Sets/src/mage/cards/k/KratosStoicFather.java index edd10bbbf1b..ede9a3f28c0 100644 --- a/Mage.Sets/src/mage/cards/k/KratosStoicFather.java +++ b/Mage.Sets/src/mage/cards/k/KratosStoicFather.java @@ -48,7 +48,7 @@ public final class KratosStoicFather extends CardImpl { // At the beginning of your end step, put a number of +1/+1 counters on target creature equal to the number of experience counters you have. Ability ability = new BeginningOfEndStepTriggeredAbility( new AddCountersTargetEffect(CounterType.P1P1.createInstance(), xValue) - .setText(" put a number of +1/+1 counters on target creature " + + .setText("put a number of +1/+1 counters on target creature " + "equal to the number of experience counters you have") ); ability.addTarget(new TargetCreaturePermanent()); diff --git a/Mage.Sets/src/mage/cards/m/MisterNegative.java b/Mage.Sets/src/mage/cards/m/MisterNegative.java index 47f035eccda..01f556e6c58 100644 --- a/Mage.Sets/src/mage/cards/m/MisterNegative.java +++ b/Mage.Sets/src/mage/cards/m/MisterNegative.java @@ -59,7 +59,7 @@ class MisterNegativeEffect extends OneShotEffect { MisterNegativeEffect() { super(Outcome.Neutral); - staticText = "When {this} enters, you may exchange your life total with target opponent. If you lose life this way, draw that many cards."; + staticText = "you may exchange life totals with target opponent. If you lose life this way, draw that many cards."; } protected MisterNegativeEffect(final MisterNegativeEffect effect) { @@ -82,6 +82,7 @@ class MisterNegativeEffect extends OneShotEffect { controller.exchangeLife(player, source, game); int lifeChange = startingLife - controller.getLife(); if (lifeChange > 0) { + game.processAction(); controller.drawCards(lifeChange, source, game); } return true; diff --git a/Mage.Sets/src/mage/cards/p/PrisonBreak.java b/Mage.Sets/src/mage/cards/p/PrisonBreak.java index 3ac0e4aacef..f4786cd2ec3 100644 --- a/Mage.Sets/src/mage/cards/p/PrisonBreak.java +++ b/Mage.Sets/src/mage/cards/p/PrisonBreak.java @@ -19,8 +19,8 @@ public final class PrisonBreak extends CardImpl { public PrisonBreak(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{4}{B}"); - // Return target creature card from your graveyard to the battlefield with a +1/+1 counter on it. - this.getSpellAbility().addEffect(new ReturnFromGraveyardToBattlefieldWithCounterTargetEffect(CounterType.P1P1.createInstance())); + // Return target creature card from your graveyard to the battlefield with an additional +1/+1 counter on it. + this.getSpellAbility().addEffect(new ReturnFromGraveyardToBattlefieldWithCounterTargetEffect(true, CounterType.P1P1.createInstance())); this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD)); // Mayhem {3}{B} diff --git a/Mage.Sets/src/mage/cards/s/SaltRoadPackbeast.java b/Mage.Sets/src/mage/cards/s/SaltRoadPackbeast.java index 4abb51be552..5d04c5a6172 100644 --- a/Mage.Sets/src/mage/cards/s/SaltRoadPackbeast.java +++ b/Mage.Sets/src/mage/cards/s/SaltRoadPackbeast.java @@ -7,8 +7,10 @@ import mage.abilities.dynamicvalue.common.CreaturesYouControlCount; import mage.abilities.effects.common.DrawCardSourceControllerEffect; import mage.abilities.effects.common.cost.SpellCostReductionForEachSourceEffect; import mage.abilities.hint.common.CreaturesYouControlHint; +import mage.abilities.keyword.AffinityAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; +import mage.constants.AffinityType; import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Zone; @@ -27,10 +29,8 @@ public final class SaltRoadPackbeast extends CardImpl { this.power = new MageInt(4); this.toughness = new MageInt(3); - // This spell costs {1} less to cast for each creature you control. - this.addAbility(new SimpleStaticAbility( - Zone.ALL, new SpellCostReductionForEachSourceEffect(1, CreaturesYouControlCount.SINGULAR) - ).addHint(CreaturesYouControlHint.instance)); + // Affinity for creatures + this.addAbility(new AffinityAbility(AffinityType.CREATURES)); // When this creature enters, draw a card. this.addAbility(new EntersBattlefieldTriggeredAbility(new DrawCardSourceControllerEffect(1))); diff --git a/Mage.Sets/src/mage/cards/s/SearchForDagger.java b/Mage.Sets/src/mage/cards/s/SearchForDagger.java index 07812507446..1e7aa9d87d5 100644 --- a/Mage.Sets/src/mage/cards/s/SearchForDagger.java +++ b/Mage.Sets/src/mage/cards/s/SearchForDagger.java @@ -21,7 +21,7 @@ import java.util.UUID; public final class SearchForDagger extends CardImpl { private static final FilterCard filter = new FilterCreatureCard("a legendary creature card"); - private static final FilterPermanent filter2 = new FilterPermanent("you commander"); + private static final FilterPermanent filter2 = new FilterPermanent("your commander"); static { filter.add(SuperType.LEGENDARY.getPredicate()); diff --git a/Mage.Sets/src/mage/cards/s/ShorikaiGenesisEngine.java b/Mage.Sets/src/mage/cards/s/ShorikaiGenesisEngine.java index 6a4bcfce98b..3fbd5358212 100644 --- a/Mage.Sets/src/mage/cards/s/ShorikaiGenesisEngine.java +++ b/Mage.Sets/src/mage/cards/s/ShorikaiGenesisEngine.java @@ -41,9 +41,6 @@ public final class ShorikaiGenesisEngine extends CardImpl { // Crew 8 this.addAbility(new CrewAbility(8)); - - // Shorikai, Genesis Engine can be your commander. - this.addAbility(CanBeYourCommanderAbility.getInstance()); } private ShorikaiGenesisEngine(final ShorikaiGenesisEngine card) { diff --git a/Mage.Sets/src/mage/cards/s/SuperiorSpiderMan.java b/Mage.Sets/src/mage/cards/s/SuperiorSpiderMan.java index 1e7959688c6..d3224526610 100644 --- a/Mage.Sets/src/mage/cards/s/SuperiorSpiderMan.java +++ b/Mage.Sets/src/mage/cards/s/SuperiorSpiderMan.java @@ -41,7 +41,8 @@ public final class SuperiorSpiderMan extends CardImpl { this.toughness = new MageInt(4); // Mind Swap -- You may have Superior Spider-Man enter as a copy of any creature card in a graveyard, except his name is Superior Spider-Man and he's a 4/4 Spider Human Hero in addition to his other types. When you do, exile that card. - this.addAbility(new EntersBattlefieldAbility(new SuperiorSpiderManCopyEffect(), true)); + this.addAbility(new EntersBattlefieldAbility(new SuperiorSpiderManCopyEffect(), true) + .withFlavorWord("Mind Swap")); } private SuperiorSpiderMan(final SuperiorSpiderMan card) { diff --git a/Mage.Sets/src/mage/cards/v/VivisPersistence.java b/Mage.Sets/src/mage/cards/v/VivisPersistence.java index 683cda73419..6eb766d062c 100644 --- a/Mage.Sets/src/mage/cards/v/VivisPersistence.java +++ b/Mage.Sets/src/mage/cards/v/VivisPersistence.java @@ -21,7 +21,7 @@ import java.util.UUID; */ public final class VivisPersistence extends CardImpl { - private static final FilterPermanent filter = new FilterPermanent("you commander"); + private static final FilterPermanent filter = new FilterPermanent("your commander"); static { filter.add(TargetController.YOU.getOwnerPredicate()); diff --git a/Mage.Sets/src/mage/cards/w/WarriorsResolve.java b/Mage.Sets/src/mage/cards/w/WarriorsResolve.java index 0c384a11e75..eef11172417 100644 --- a/Mage.Sets/src/mage/cards/w/WarriorsResolve.java +++ b/Mage.Sets/src/mage/cards/w/WarriorsResolve.java @@ -40,7 +40,7 @@ public final class WarriorsResolve extends CardImpl { // Creatures you control have training. this.addAbility(new SimpleStaticAbility(new GainAbilityControlledEffect( - new TrainingAbility(), Duration.WhileControlled, StaticFilters.FILTER_PERMANENT_CREATURES + new TrainingAbility(), Duration.WhileOnBattlefield, StaticFilters.FILTER_PERMANENT_CREATURES ))); // At the beginning of your end step, if you control a creature with a +1/+1 counter on it that attacked this turn, draw a card. diff --git a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java index bcd8dfd2b96..b809a69f574 100644 --- a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java +++ b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java @@ -2638,14 +2638,14 @@ public class VerifyCardDataTest { if (mageObject.isCreature(game)) { return "this creature"; } - if (mageObject.isLand(game)) { - return "this land"; - } for (SubType subType : selfRefNamedSubtypes) { if (mageObject.hasSubtype(subType, game)) { return "this " + subType.getDescription(); } } + if (mageObject.isLand(game)) { + return "this land"; + } if (mageObject.isBattle(game)) { return "this battle"; }