diff --git a/Mage.Sets/src/mage/cards/c/CallousBloodmage.java b/Mage.Sets/src/mage/cards/c/CallousBloodmage.java index a38e08b78bf..243c2b55c78 100644 --- a/Mage.Sets/src/mage/cards/c/CallousBloodmage.java +++ b/Mage.Sets/src/mage/cards/c/CallousBloodmage.java @@ -40,7 +40,7 @@ public final class CallousBloodmage extends CardImpl { ability.addMode(mode); // • Exile target player's graveyard. - mode = new Mode(new ExileGraveyardAllTargetPlayerEffect()); + mode = new Mode(new ExileGraveyardAllTargetPlayerEffect().setText("exile target player's graveyard")); mode.addTarget(new TargetPlayer()); ability.addMode(mode); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/c/CampusGuide.java b/Mage.Sets/src/mage/cards/c/CampusGuide.java index b6da310fd96..7c22b7956db 100644 --- a/Mage.Sets/src/mage/cards/c/CampusGuide.java +++ b/Mage.Sets/src/mage/cards/c/CampusGuide.java @@ -26,7 +26,7 @@ public final class CampusGuide extends CardImpl { // When Campus Guide enters the battlefield, you may search your library for a basic land card, reveal it, then shuffle and put that card on top. this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutOnLibraryEffect( - new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_LAND_A), true, true + new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_LAND), true, true ), true)); } diff --git a/Mage.Sets/src/mage/cards/c/ChargeThrough.java b/Mage.Sets/src/mage/cards/c/ChargeThrough.java index b48d9a39e57..7f4dd51fdd1 100644 --- a/Mage.Sets/src/mage/cards/c/ChargeThrough.java +++ b/Mage.Sets/src/mage/cards/c/ChargeThrough.java @@ -1,5 +1,6 @@ package mage.cards.c; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; import mage.abilities.effects.common.DrawCardTargetEffect; import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; import mage.abilities.keyword.TrampleAbility; @@ -24,7 +25,7 @@ public final class ChargeThrough extends CardImpl { this.getSpellAbility().addTarget(new TargetCreaturePermanent()); // Draw a card. - this.getSpellAbility().addEffect(new DrawCardTargetEffect(1)); + this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1).concatBy("
")); } private ChargeThrough(final ChargeThrough card) { diff --git a/Mage.Sets/src/mage/cards/c/CombatProfessor.java b/Mage.Sets/src/mage/cards/c/CombatProfessor.java index 0cdddacd454..16e67fdb78a 100644 --- a/Mage.Sets/src/mage/cards/c/CombatProfessor.java +++ b/Mage.Sets/src/mage/cards/c/CombatProfessor.java @@ -35,7 +35,9 @@ public final class CombatProfessor extends CardImpl { // At the beginning of combat on your turn, target creature you control gets +1/+0 and gains vigilance until end of turn. Ability ability = new BeginningOfCombatTriggeredAbility( - new BoostTargetEffect(1, 0), TargetController.YOU, false + new BoostTargetEffect(1, 0) + .setText("target creature you control gets +1/+0"), + TargetController.YOU, false ); ability.addEffect(new GainAbilityTargetEffect( VigilanceAbility.getInstance(), Duration.EndOfTurn diff --git a/Mage.Sets/src/mage/cards/c/CreativeOutburst.java b/Mage.Sets/src/mage/cards/c/CreativeOutburst.java index 0505190bc3e..2c39e9e4dfc 100644 --- a/Mage.Sets/src/mage/cards/c/CreativeOutburst.java +++ b/Mage.Sets/src/mage/cards/c/CreativeOutburst.java @@ -31,7 +31,8 @@ public final class CreativeOutburst extends CardImpl { this.getSpellAbility().addEffect(new LookLibraryAndPickControllerEffect( StaticValue.get(5), false, StaticValue.get(1), StaticFilters.FILTER_CARD, Zone.LIBRARY, false, false - )); + ).setBackInRandomOrder(true).setText("Look at the top five cards of your library. " + + "Put one of them into your hand and the rest on the bottom of your library in a random order")); this.getSpellAbility().addTarget(new TargetAnyTarget()); // {U/R}{U/R}, Discard Creative Outburst: Create a Treasure token. diff --git a/Mage.Sets/src/mage/cards/d/DragonsApproach.java b/Mage.Sets/src/mage/cards/d/DragonsApproach.java index af58d8c6425..1ce8ad9f156 100644 --- a/Mage.Sets/src/mage/cards/d/DragonsApproach.java +++ b/Mage.Sets/src/mage/cards/d/DragonsApproach.java @@ -25,7 +25,7 @@ import java.util.UUID; */ public final class DragonsApproach extends CardImpl { - private static final FilterCard filter = new FilterCreatureCard("a Dragon creature card"); + private static final FilterCard filter = new FilterCreatureCard("Dragon creature card"); private static final FilterCard filter2 = new FilterCard("cards named Dragon's Approach"); static { @@ -39,7 +39,7 @@ public final class DragonsApproach extends CardImpl { // Dragon's Approach deals 3 damage to each opponent. You may exile Dragon's Approach and four cards named Dragon's Approach from your graveyard. If you do, search your library for a Dragon creature card, put it onto the battlefield, then shuffle. this.getSpellAbility().addEffect(new DamagePlayersEffect(3, TargetController.OPPONENT)); this.getSpellAbility().addEffect(new DoIfCostPaid( - new SearchLibraryPutInPlayEffect(new TargetCardInLibrary()), + new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(filter)), new CompositeCost( new ExileSourceCost(), new ExileFromGraveCost(new TargetCardInYourGraveyard(filter2)), "exile {this} and four cards named Dragon's Approach from your graveyard" diff --git a/Mage.Sets/src/mage/cards/e/EnthusiasticStudy.java b/Mage.Sets/src/mage/cards/e/EnthusiasticStudy.java index 51705594ff6..6a283b1a70d 100644 --- a/Mage.Sets/src/mage/cards/e/EnthusiasticStudy.java +++ b/Mage.Sets/src/mage/cards/e/EnthusiasticStudy.java @@ -21,7 +21,9 @@ public final class EnthusiasticStudy extends CardImpl { super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{2}{R}"); // Target creature gets +3/+1 and gains trample until end of turn. - this.getSpellAbility().addEffect(new BoostTargetEffect(3, 1)); + this.getSpellAbility().addEffect(new BoostTargetEffect( + 3, 1 + ).setText("target creature gets +3/+1")); this.getSpellAbility().addEffect(new GainAbilityTargetEffect( TrampleAbility.getInstance(), Duration.EndOfTurn ).setText("and gains trample until end of turn")); diff --git a/Mage.Sets/src/mage/cards/e/ExtusOriqOverlord.java b/Mage.Sets/src/mage/cards/e/ExtusOriqOverlord.java index bd7ce32d286..72c64a97f29 100644 --- a/Mage.Sets/src/mage/cards/e/ExtusOriqOverlord.java +++ b/Mage.Sets/src/mage/cards/e/ExtusOriqOverlord.java @@ -64,11 +64,12 @@ public final class ExtusOriqOverlord extends ModalDoubleFacesCard { // Sorcery // As an additional cost to cast this spell, you may sacrifice any number of creatures. This spell costs {2} less to cast for each creature sacrificed this way. Cost cost = new SacrificeXTargetCost(StaticFilters.FILTER_CONTROLLED_CREATURE_SHORT_TEXT); - cost.setText("As an additional cost to cast this spell, you may sacrifice any number of creatures"); + cost.setText("As an additional cost to cast this spell, you may sacrifice any number of creatures. " + + "This spell costs {2} less to cast for each creature sacrificed this way"); this.getRightHalfCard().getSpellAbility().addCost(cost); - this.getRightHalfCard().addAbility(new SimpleStaticAbility( - Zone.ALL, new AwakenTheBloodAvatarCostReductionEffect() - )); + ability = new SimpleStaticAbility(Zone.ALL, new AwakenTheBloodAvatarCostReductionEffect()); + ability.setRuleVisible(false); + this.getRightHalfCard().addAbility(ability); // Each opponent sacrifices a creature. Create a 3/6 black and red Avatar creature token with haste and "Whenever this creature attacks, it deals 3 damage to each opponent." this.getRightHalfCard().getSpellAbility().addEffect(new SacrificeOpponentsEffect( @@ -91,7 +92,6 @@ class AwakenTheBloodAvatarCostReductionEffect extends CostModificationEffectImpl AwakenTheBloodAvatarCostReductionEffect() { super(Duration.WhileOnStack, Outcome.Benefit, CostModificationType.REDUCE_COST); - staticText = "This spell costs {2} less to cast for each creature sacrificed this way"; } private AwakenTheBloodAvatarCostReductionEffect(final AwakenTheBloodAvatarCostReductionEffect effect) { diff --git a/Mage.Sets/src/mage/cards/k/KelpieGuide.java b/Mage.Sets/src/mage/cards/k/KelpieGuide.java index 3368a814c16..71dc527d5ee 100644 --- a/Mage.Sets/src/mage/cards/k/KelpieGuide.java +++ b/Mage.Sets/src/mage/cards/k/KelpieGuide.java @@ -18,6 +18,7 @@ import mage.constants.SubType; import mage.constants.Zone; import mage.filter.FilterPermanent; import mage.filter.common.FilterControlledLandPermanent; +import mage.filter.common.FilterControlledPermanent; import mage.target.TargetPermanent; import java.util.UUID; @@ -29,6 +30,8 @@ public final class KelpieGuide extends CardImpl { private static final FilterPermanent filter = new FilterControlledLandPermanent("you control eight or more lands"); + private static final FilterPermanent filter2 + = new FilterControlledPermanent("another target permanent you control"); private static final Condition condition = new PermanentsOnTheBattlefieldCondition(filter, ComparisonType.MORE_THAN, 7); @@ -41,7 +44,7 @@ public final class KelpieGuide extends CardImpl { // {T}: Untap another target permanent you control. Ability ability = new SimpleActivatedAbility(new UntapTargetEffect(), new TapSourceCost()); - ability.addTarget(new TargetPermanent(filter)); + ability.addTarget(new TargetPermanent(filter2)); this.addAbility(ability); // {T}: Tap target permanent. Activate only if you control eight or more lands. diff --git a/Mage.Sets/src/mage/cards/l/LoreholdExcavation.java b/Mage.Sets/src/mage/cards/l/LoreholdExcavation.java index cf6f1966569..985faf4194b 100644 --- a/Mage.Sets/src/mage/cards/l/LoreholdExcavation.java +++ b/Mage.Sets/src/mage/cards/l/LoreholdExcavation.java @@ -39,7 +39,7 @@ public final class LoreholdExcavation extends CardImpl { Ability ability = new SimpleActivatedAbility(new CreateTokenEffect( new LoreholdToken(), 1, true, false ), new GenericManaCost(5)); - ability.addCost(new ExileFromGraveCost(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE))); + ability.addCost(new ExileFromGraveCost(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_A))); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/m/MascotInterception.java b/Mage.Sets/src/mage/cards/m/MascotInterception.java index a2363a9cc13..8ece1fda2d2 100644 --- a/Mage.Sets/src/mage/cards/m/MascotInterception.java +++ b/Mage.Sets/src/mage/cards/m/MascotInterception.java @@ -47,10 +47,10 @@ public final class MascotInterception extends CardImpl { this.getSpellAbility().addEffect(new UntapTargetEffect().setText("Untap that creature")); this.getSpellAbility().addEffect(new BoostTargetEffect( 2, 0, Duration.EndOfTurn - ).setText("Until end of turn, it gets +2/+0")); + ).setText("It gets +2/+0")); this.getSpellAbility().addEffect(new GainAbilityTargetEffect( HasteAbility.getInstance(), Duration.EndOfTurn - ).setText("and gains haste")); + ).setText("and gains haste until end of turn")); this.getSpellAbility().addTarget(new TargetCreaturePermanent()); } diff --git a/Mage.Sets/src/mage/cards/m/MasterSymmetrist.java b/Mage.Sets/src/mage/cards/m/MasterSymmetrist.java index c0028cf30f4..509f691f765 100644 --- a/Mage.Sets/src/mage/cards/m/MasterSymmetrist.java +++ b/Mage.Sets/src/mage/cards/m/MasterSymmetrist.java @@ -21,7 +21,7 @@ import java.util.UUID; public final class MasterSymmetrist extends CardImpl { private static final FilterCreaturePermanent filter - = new FilterCreaturePermanent("a creature you control with power equal to its toughness"); + = new FilterCreaturePermanent("creature you control with power equal to its toughness"); static { filter.add(TargetController.YOU.getControllerPredicate()); diff --git a/Mage.Sets/src/mage/cards/n/NecroticFumes.java b/Mage.Sets/src/mage/cards/n/NecroticFumes.java index 961760b9f4b..0443d479648 100644 --- a/Mage.Sets/src/mage/cards/n/NecroticFumes.java +++ b/Mage.Sets/src/mage/cards/n/NecroticFumes.java @@ -6,7 +6,9 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; +import mage.filter.StaticFilters; import mage.target.common.TargetControlledCreaturePermanent; +import mage.target.common.TargetControlledPermanent; import mage.target.common.TargetCreatureOrPlaneswalker; import java.util.UUID; @@ -22,7 +24,7 @@ public final class NecroticFumes extends CardImpl { this.subtype.add(SubType.LESSON); // As an additional cost to cast this spell, exile a creature you control. - this.getSpellAbility().addCost(new ExileTargetCost(new TargetControlledCreaturePermanent())); + this.getSpellAbility().addCost(new ExileTargetCost(new TargetControlledPermanent(StaticFilters.FILTER_CONTROLLED_A_CREATURE))); // Exile target creature or planeswalker. this.getSpellAbility().addEffect(new ExileTargetEffect()); diff --git a/Mage.Sets/src/mage/cards/p/PestilentCauldron.java b/Mage.Sets/src/mage/cards/p/PestilentCauldron.java index 828a6611b74..2a90e0d08b1 100644 --- a/Mage.Sets/src/mage/cards/p/PestilentCauldron.java +++ b/Mage.Sets/src/mage/cards/p/PestilentCauldron.java @@ -72,7 +72,7 @@ public final class PestilentCauldron extends ModalDoubleFacesCard { ability = new SimpleActivatedAbility(new ExileTargetEffect(), new GenericManaCost(4)); ability.addCost(new TapSourceCost()); ability.addTarget(new TargetCardInASingleGraveyard( - 0, 4, StaticFilters.FILTER_CARD_CARDS + 4, 4, StaticFilters.FILTER_CARD_CARDS )); ability.addEffect(new DrawCardSourceControllerEffect(1)); this.getLeftHalfCard().addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/p/PracticalResearch.java b/Mage.Sets/src/mage/cards/p/PracticalResearch.java index 0e5c59f8be2..7400485360e 100644 --- a/Mage.Sets/src/mage/cards/p/PracticalResearch.java +++ b/Mage.Sets/src/mage/cards/p/PracticalResearch.java @@ -25,7 +25,7 @@ public final class PracticalResearch extends CardImpl { this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(4)); this.getSpellAbility().addEffect(new DoIfCostPaid( null, new DiscardControllerEffect(2), cost - ).setText("Then discard two cards unless you discard an enchantment card")); + ).setText("Then discard two cards unless you discard an instant or sorcery card")); } private PracticalResearch(final PracticalResearch card) { diff --git a/Mage.Sets/src/mage/cards/r/ReduceToMemory.java b/Mage.Sets/src/mage/cards/r/ReduceToMemory.java index 0640bbbbfbb..443e93b14d9 100644 --- a/Mage.Sets/src/mage/cards/r/ReduceToMemory.java +++ b/Mage.Sets/src/mage/cards/r/ReduceToMemory.java @@ -45,7 +45,7 @@ class ReduceToMemoryEffect extends OneShotEffect { ReduceToMemoryEffect() { super(Outcome.Benefit); - staticText = "exile target nonland permanent. Its controller creates a 3/2 red and white spirit creature token"; + staticText = "exile target nonland permanent. Its controller creates a 3/2 red and white Spirit creature token"; } private ReduceToMemoryEffect(final ReduceToMemoryEffect effect) { diff --git a/Mage.Sets/src/mage/cards/r/RetrieverPhoenix.java b/Mage.Sets/src/mage/cards/r/RetrieverPhoenix.java index 5d60ef4a535..518e2e28397 100644 --- a/Mage.Sets/src/mage/cards/r/RetrieverPhoenix.java +++ b/Mage.Sets/src/mage/cards/r/RetrieverPhoenix.java @@ -42,7 +42,7 @@ public final class RetrieverPhoenix extends CardImpl { // When Retriever Phoenix enters the battlefield, if you cast it, learn. this.addAbility(new ConditionalInterveningIfTriggeredAbility( new EntersBattlefieldTriggeredAbility(new LearnEffect()), CastFromEverywhereSourceCondition.instance, - "When {thi} enters the battlefield, if you cast it, " + LearnEffect.getDefaultText() + "When {this} enters the battlefield, if you cast it, " + LearnEffect.getDefaultText() )); // As long as Retriever Phoenix is in your graveyard, if you would learn, you may instead return Retriever Phoenix to the battlefield. diff --git a/Mage.Sets/src/mage/cards/r/RowanScholarOfSparks.java b/Mage.Sets/src/mage/cards/r/RowanScholarOfSparks.java index 6fac8997a84..4e412594c99 100644 --- a/Mage.Sets/src/mage/cards/r/RowanScholarOfSparks.java +++ b/Mage.Sets/src/mage/cards/r/RowanScholarOfSparks.java @@ -41,7 +41,7 @@ import java.util.stream.Collectors; */ public final class RowanScholarOfSparks extends ModalDoubleFacesCard { - private static final FilterCard filter = new FilterInstantOrSorceryCard(""); + private static final FilterCard filter = new FilterInstantOrSorceryCard("instant and sorcery spells"); public RowanScholarOfSparks(UUID ownerId, CardSetInfo setInfo) { super( diff --git a/Mage.Sets/src/mage/cards/s/ShadewingLaureate.java b/Mage.Sets/src/mage/cards/s/ShadewingLaureate.java index c65e0537245..959b93c2b13 100644 --- a/Mage.Sets/src/mage/cards/s/ShadewingLaureate.java +++ b/Mage.Sets/src/mage/cards/s/ShadewingLaureate.java @@ -14,7 +14,7 @@ import mage.filter.FilterPermanent; import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.predicate.mageobject.AbilityPredicate; import mage.filter.predicate.mageobject.AnotherPredicate; -import mage.target.common.TargetCreaturePermanent; +import mage.target.common.TargetControlledCreaturePermanent; import java.util.UUID; @@ -46,7 +46,7 @@ public final class ShadewingLaureate extends CardImpl { Ability ability = new DiesCreatureTriggeredAbility( new AddCountersTargetEffect(CounterType.P1P1.createInstance()), false, filter ); - ability.addTarget(new TargetCreaturePermanent()); + ability.addTarget(new TargetControlledCreaturePermanent()); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/s/SilverquillCommand.java b/Mage.Sets/src/mage/cards/s/SilverquillCommand.java index 4543da487ee..aea201b4180 100644 --- a/Mage.Sets/src/mage/cards/s/SilverquillCommand.java +++ b/Mage.Sets/src/mage/cards/s/SilverquillCommand.java @@ -53,7 +53,7 @@ public final class SilverquillCommand extends CardImpl { this.getSpellAbility().addTarget(new TargetCreaturePermanent()); // • Return target creature card with mana value 2 or less from your graveyard to the battlefield. - Mode mode = new Mode(new ReturnFromGraveyardToBattlefieldTargetEffect()); + Mode mode = new Mode(new ReturnFromGraveyardToBattlefieldTargetEffect(false, false)); mode.addTarget(new TargetCardInYourGraveyard(filter)); this.getSpellAbility().addMode(mode); diff --git a/Mage.Sets/src/mage/cards/s/SnowDay.java b/Mage.Sets/src/mage/cards/s/SnowDay.java index 48ef292944d..b61ca17f77f 100644 --- a/Mage.Sets/src/mage/cards/s/SnowDay.java +++ b/Mage.Sets/src/mage/cards/s/SnowDay.java @@ -1,6 +1,7 @@ package mage.cards.s; import mage.abilities.effects.common.DontUntapInControllersNextUntapStepTargetEffect; +import mage.abilities.effects.common.DrawDiscardControllerEffect; import mage.abilities.effects.common.DrawDiscardTargetEffect; import mage.abilities.effects.common.TapTargetEffect; import mage.cards.CardImpl; @@ -24,7 +25,7 @@ public final class SnowDay extends CardImpl { this.getSpellAbility().addTarget(new TargetCreaturePermanent(0, 2)); // Draw two cards, then discard a card. - this.getSpellAbility().addEffect(new DrawDiscardTargetEffect(2, 1).concatBy("
")); + this.getSpellAbility().addEffect(new DrawDiscardControllerEffect(2, 1).concatBy("
")); } private SnowDay(final SnowDay card) { diff --git a/Mage.Sets/src/mage/cards/s/SpectacleMage.java b/Mage.Sets/src/mage/cards/s/SpectacleMage.java index 746bb6589ff..debd1d8371d 100644 --- a/Mage.Sets/src/mage/cards/s/SpectacleMage.java +++ b/Mage.Sets/src/mage/cards/s/SpectacleMage.java @@ -20,7 +20,7 @@ import java.util.UUID; */ public final class SpectacleMage extends CardImpl { - private static final FilterCard filter = new FilterInstantOrSorceryCard("instant and sorcery spells"); + private static final FilterCard filter = new FilterInstantOrSorceryCard(); static { filter.add(new ManaValuePredicate(ComparisonType.MORE_THAN, 4)); @@ -38,7 +38,8 @@ public final class SpectacleMage extends CardImpl { this.addAbility(FlyingAbility.getInstance()); // Instant and sorcery spells you cast with mana value 5 or greater cost {1} less to cast. - this.addAbility(new SimpleStaticAbility(new SpellsCostReductionControllerEffect(filter, 1))); + this.addAbility(new SimpleStaticAbility(new SpellsCostReductionControllerEffect(filter, 1) + .setText("instant and sorcery spells you cast with mana value 5 or greater cost {1} less to cast"))); } private SpectacleMage(final SpectacleMage card) { diff --git a/Mage.Sets/src/mage/cards/t/TendThePests.java b/Mage.Sets/src/mage/cards/t/TendThePests.java index d347d9ca0ad..4aa54770310 100644 --- a/Mage.Sets/src/mage/cards/t/TendThePests.java +++ b/Mage.Sets/src/mage/cards/t/TendThePests.java @@ -26,7 +26,10 @@ public final class TendThePests extends CardImpl { )); // Create X 1/1 black and green Pest creature tokens with "When this creature dies, you gain 1 life," where X is the sacrificed creature's power. - this.getSpellAbility().addEffect(new CreateTokenEffect(new WitherbloomToken(), SacrificeCostCreaturesPower.instance)); + this.getSpellAbility().addEffect(new CreateTokenEffect( + new WitherbloomToken(), SacrificeCostCreaturesPower.instance + ).setText("create X 1/1 black and green Pest creature tokens with " + + "\"When this creature dies, you gain 1 life,\" where X is the sacrificed creature's power")); } private TendThePests(final TendThePests card) { diff --git a/Mage.Sets/src/mage/cards/t/TomeShredder.java b/Mage.Sets/src/mage/cards/t/TomeShredder.java index 39831e43f65..58603883d19 100644 --- a/Mage.Sets/src/mage/cards/t/TomeShredder.java +++ b/Mage.Sets/src/mage/cards/t/TomeShredder.java @@ -24,7 +24,7 @@ import java.util.UUID; public final class TomeShredder extends CardImpl { private static final FilterCard filter - = new FilterInstantOrSorceryCard("instant or sorcery card from your graveyard"); + = new FilterInstantOrSorceryCard("an instant or sorcery card from your graveyard"); public TomeShredder(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{R}"); diff --git a/Mage.Sets/src/mage/cards/z/ZephyrBoots.java b/Mage.Sets/src/mage/cards/z/ZephyrBoots.java index f46d1e64839..984af9fb599 100644 --- a/Mage.Sets/src/mage/cards/z/ZephyrBoots.java +++ b/Mage.Sets/src/mage/cards/z/ZephyrBoots.java @@ -31,7 +31,8 @@ public final class ZephyrBoots extends CardImpl { // Whenever equipped creature deals combat damage to a player, draw a card, then discard a card. this.addAbility(new DealsDamageToAPlayerAttachedTriggeredAbility( - new DrawDiscardControllerEffect(1, 1), "equipped", false + new DrawDiscardControllerEffect(1, 1), + "equipped creature", false )); // Equip {2} diff --git a/Mage.Sets/src/mage/cards/z/ZimoneQuandrixProdigy.java b/Mage.Sets/src/mage/cards/z/ZimoneQuandrixProdigy.java index 57a85e9078a..a4173f1c1e5 100644 --- a/Mage.Sets/src/mage/cards/z/ZimoneQuandrixProdigy.java +++ b/Mage.Sets/src/mage/cards/z/ZimoneQuandrixProdigy.java @@ -41,7 +41,9 @@ public final class ZimoneQuandrixProdigy extends CardImpl { // {1}, {T}: You may put a land card from your hand onto the battlefield tapped. Ability ability = new SimpleActivatedAbility( - new PutCardFromHandOntoBattlefieldEffect(StaticFilters.FILTER_CARD_LAND_A), new GenericManaCost(1) + new PutCardFromHandOntoBattlefieldEffect( + StaticFilters.FILTER_CARD_LAND_A, false, true + ), new GenericManaCost(1) ); ability.addCost(new TapSourceCost()); this.addAbility(ability); diff --git a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java index 87222526e3b..0dce89ab8aa 100644 --- a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java +++ b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java @@ -56,7 +56,7 @@ public class VerifyCardDataTest { private static final Logger logger = Logger.getLogger(VerifyCardDataTest.class); - private static final String FULL_ABILITIES_CHECK_SET_CODE = "STA"; // check all abilities and output cards with wrong abilities texts; + private static final String FULL_ABILITIES_CHECK_SET_CODE = "STX"; // 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 HashMap> skipCheckLists = new HashMap<>(); diff --git a/Mage/src/main/java/mage/abilities/common/LimitedTimesPerTurnActivatedAbility.java b/Mage/src/main/java/mage/abilities/common/LimitedTimesPerTurnActivatedAbility.java index 78e0aec13b3..8f43b20284c 100644 --- a/Mage/src/main/java/mage/abilities/common/LimitedTimesPerTurnActivatedAbility.java +++ b/Mage/src/main/java/mage/abilities/common/LimitedTimesPerTurnActivatedAbility.java @@ -42,12 +42,12 @@ public class LimitedTimesPerTurnActivatedAbility extends ActivatedAbilityImpl { @Override public String getRule() { - StringBuilder sb = new StringBuilder(super.getRule()).append(" Activate this ability "); + StringBuilder sb = new StringBuilder(super.getRule()).append(" Activate "); if (condition != null) { sb.append("only ").append(condition.toString()).append(" and "); } if (getTiming() == TimingRule.SORCERY) { - sb.append("only any time you could cast a sorcery and "); + sb.append("only as a sorcery and "); } switch (maxActivationsPerTurn) { case 1: diff --git a/Mage/src/main/java/mage/abilities/effects/common/CounterUnlessPaysEffect.java b/Mage/src/main/java/mage/abilities/effects/common/CounterUnlessPaysEffect.java index 1419a03210c..d8534377cff 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/CounterUnlessPaysEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/CounterUnlessPaysEffect.java @@ -121,7 +121,7 @@ public class CounterUnlessPaysEffect extends OneShotEffect { sb.append(genericMana.getMessage()); } if (exile) { - sb.append(". If that spell is countered this way, exile it instead of putting into its owner's graveyard."); + sb.append(". If that spell is countered this way, exile it instead of putting it into its owner's graveyard."); } return sb.toString(); } diff --git a/Mage/src/main/java/mage/abilities/effects/common/PutOnLibraryTargetEffect.java b/Mage/src/main/java/mage/abilities/effects/common/PutOnLibraryTargetEffect.java index 8f1455f2ab2..e4746b0dd7b 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/PutOnLibraryTargetEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/PutOnLibraryTargetEffect.java @@ -12,6 +12,7 @@ import mage.game.Game; import mage.game.permanent.Permanent; import mage.players.Player; import mage.target.Target; +import mage.target.common.TargetCardInYourGraveyard; import mage.util.CardUtil; import java.util.ArrayList; @@ -138,7 +139,7 @@ public class PutOnLibraryTargetEffect extends OneShotEffect { sb.append(CardUtil.numberToText(target.getMaxNumberOfTargets())).append(' '); } sb.append("target ").append(mode.getTargets().get(0).getTargetName()).append(" on "); - sb.append(onTop ? "top" : "the bottom").append(" of its owner's library"); + sb.append(onTop ? "top" : "the bottom").append(" of ").append(mode.getTargets().get(0) instanceof TargetCardInYourGraveyard ? "your" : "its owner's").append(" library"); return sb.toString(); diff --git a/Mage/src/main/java/mage/abilities/effects/common/SacrificeEffect.java b/Mage/src/main/java/mage/abilities/effects/common/SacrificeEffect.java index 01ae1dd1702..9115e6ba862 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/SacrificeEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/SacrificeEffect.java @@ -98,7 +98,9 @@ public class SacrificeEffect extends OneShotEffect { sb.append(" sacrifice "); } } - if (!filter.getMessage().startsWith("another")) { + if (!filter.getMessage().startsWith("another") + && !filter.getMessage().startsWith("a ") + && !filter.getMessage().startsWith("an ")) { sb.append(CardUtil.numberToText(count.toString(), "a")).append(' '); } sb.append(filter.getMessage()); diff --git a/Mage/src/main/java/mage/abilities/effects/common/search/SearchLibraryPutOnLibraryEffect.java b/Mage/src/main/java/mage/abilities/effects/common/search/SearchLibraryPutOnLibraryEffect.java index d9923a55b0e..1c1a86dbe41 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/search/SearchLibraryPutOnLibraryEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/search/SearchLibraryPutOnLibraryEffect.java @@ -12,7 +12,6 @@ import mage.players.Player; import mage.target.common.TargetCardInLibrary; /** - * * @author BetaSteward_at_googlemail.com */ public class SearchLibraryPutOnLibraryEffect extends SearchEffect { @@ -72,12 +71,9 @@ public class SearchLibraryPutOnLibraryEffect extends SearchEffect { StringBuilder sb = new StringBuilder(); sb.append("search your library for a ").append(target.getTargetName()); if (reveal) { - sb.append(" and reveal that card. Shuffle"); - } else { - sb.append(", then shuffle"); + sb.append(", reveal it"); } - sb.append(" your library and put that card on top of it"); + sb.append(", then shuffle and put that card on top of it"); staticText = sb.toString(); } - } diff --git a/Mage/src/main/java/mage/abilities/mana/ActivateAsSorceryManaAbility.java b/Mage/src/main/java/mage/abilities/mana/ActivateAsSorceryManaAbility.java index 050854678f2..7f8f3a361ec 100644 --- a/Mage/src/main/java/mage/abilities/mana/ActivateAsSorceryManaAbility.java +++ b/Mage/src/main/java/mage/abilities/mana/ActivateAsSorceryManaAbility.java @@ -30,6 +30,6 @@ public class ActivateAsSorceryManaAbility extends SimpleManaAbility { @Override public String getRule() { - return super.getRule() + " Activate this ability only any time you could cast a sorcery."; + return super.getRule() + " Activate only as a sorcery."; } }