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.";
}
}