diff --git a/Mage.Sets/src/mage/cards/b/BankruptInBlood.java b/Mage.Sets/src/mage/cards/b/BankruptInBlood.java
index f858051b679..7b59afbfc5c 100644
--- a/Mage.Sets/src/mage/cards/b/BankruptInBlood.java
+++ b/Mage.Sets/src/mage/cards/b/BankruptInBlood.java
@@ -5,7 +5,9 @@ import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
-import mage.target.common.TargetControlledCreaturePermanent;
+import mage.filter.common.FilterControlledCreaturePermanent;
+import mage.filter.common.FilterControlledPermanent;
+import mage.target.common.TargetControlledPermanent;
import java.util.UUID;
@@ -14,11 +16,14 @@ import java.util.UUID;
*/
public final class BankruptInBlood extends CardImpl {
+ private static final FilterControlledPermanent filter
+ = new FilterControlledCreaturePermanent("creatures");
+
public BankruptInBlood(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{1}{B}");
// As an additional cost to cast this spell, sacrifice two creatures.
- this.getSpellAbility().addCost(new SacrificeTargetCost(new TargetControlledCreaturePermanent(2)));
+ this.getSpellAbility().addCost(new SacrificeTargetCost(new TargetControlledPermanent(2, filter)));
// Draw three cards.
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(3));
diff --git a/Mage.Sets/src/mage/cards/b/BestialFury.java b/Mage.Sets/src/mage/cards/b/BestialFury.java
index 8946f54ad4b..9f7ee4f8f2f 100644
--- a/Mage.Sets/src/mage/cards/b/BestialFury.java
+++ b/Mage.Sets/src/mage/cards/b/BestialFury.java
@@ -43,7 +43,8 @@ public final class BestialFury extends CardImpl {
// When Bestial Fury enters the battlefield, draw a card at the beginning of the next turn's upkeep.
this.addAbility(new EntersBattlefieldTriggeredAbility(new CreateDelayedTriggeredAbilityEffect(
- new AtTheBeginOfNextUpkeepDelayedTriggeredAbility(new DrawCardSourceControllerEffect(1), Duration.OneUse)), false));
+ new AtTheBeginOfNextUpkeepDelayedTriggeredAbility(new DrawCardSourceControllerEffect(1), Duration.OneUse))
+ .setText("draw a card at the beginning of the next turn's upkeep"), false));
// Whenever enchanted creature becomes blocked, it gets +4/+0 and gains trample until end of turn.
Ability pumpAbility = new BecomesBlockedAttachedTriggeredAbility(new BoostEnchantedEffect(4, 0, Duration.EndOfTurn), false);
diff --git a/Mage.Sets/src/mage/cards/b/BogDown.java b/Mage.Sets/src/mage/cards/b/BogDown.java
index b4885e20d0c..6ea18fb5bcb 100644
--- a/Mage.Sets/src/mage/cards/b/BogDown.java
+++ b/Mage.Sets/src/mage/cards/b/BogDown.java
@@ -8,7 +8,8 @@ import mage.abilities.keyword.KickerAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
-import mage.filter.StaticFilters;
+import mage.filter.common.FilterControlledLandPermanent;
+import mage.filter.common.FilterControlledPermanent;
import mage.target.TargetPlayer;
import mage.target.common.TargetControlledPermanent;
@@ -19,12 +20,14 @@ import java.util.UUID;
*/
public final class BogDown extends CardImpl {
+ private static final FilterControlledPermanent filter
+ = new FilterControlledLandPermanent("lands");
+
public BogDown(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2}{B}");
// Kicker-Sacrifice two lands.
- this.addAbility(new KickerAbility(new SacrificeTargetCost(new TargetControlledPermanent(2, 2,
- StaticFilters.FILTER_CONTROLLED_LAND_SHORT_TEXT, true))));
+ this.addAbility(new KickerAbility(new SacrificeTargetCost(new TargetControlledPermanent(2, filter))));
// Target player discards two cards. If Bog Down was kicked, that player discards three cards instead.
this.getSpellAbility().addEffect(new ConditionalOneShotEffect(new DiscardTargetEffect(3),
diff --git a/Mage.Sets/src/mage/cards/c/CarrierPigeons.java b/Mage.Sets/src/mage/cards/c/CarrierPigeons.java
index e05912afe5c..47d1873b5b1 100644
--- a/Mage.Sets/src/mage/cards/c/CarrierPigeons.java
+++ b/Mage.Sets/src/mage/cards/c/CarrierPigeons.java
@@ -31,7 +31,8 @@ public final class CarrierPigeons extends CardImpl {
// When Carrier Pigeons enters the battlefield, draw a card at the beginning of the next turn's upkeep.
this.addAbility(new EntersBattlefieldTriggeredAbility(new CreateDelayedTriggeredAbilityEffect(
- new AtTheBeginOfNextUpkeepDelayedTriggeredAbility(new DrawCardSourceControllerEffect(1), Duration.OneUse), false)));
+ new AtTheBeginOfNextUpkeepDelayedTriggeredAbility(new DrawCardSourceControllerEffect(1), Duration.OneUse), false)
+ .setText("draw a card at the beginning of the next turn's upkeep")));
}
private CarrierPigeons(final CarrierPigeons card) {
diff --git a/Mage.Sets/src/mage/cards/c/CoralColony.java b/Mage.Sets/src/mage/cards/c/CoralColony.java
index fdccb4f6115..9f8875fcd48 100644
--- a/Mage.Sets/src/mage/cards/c/CoralColony.java
+++ b/Mage.Sets/src/mage/cards/c/CoralColony.java
@@ -47,11 +47,12 @@ public final class CoralColony extends CardImpl {
// Defender
this.addAbility(DefenderAbility.getInstance());
- // {1}{U}, {T}: Target player mills X cards, where X is the number of cards you control with defender.
- Ability ability = new SimpleActivatedAbility(new MillCardsTargetEffect(xValue), new ManaCostsImpl<>("{1}{U}"));
+ // {1}{U}, {T}: Target player mills X cards, where X is the number of creatures you control with defender.
+ String ruleText = "target player mills X cards, where X is the number of creatures you control with defender";
+ Ability ability = new SimpleActivatedAbility(new MillCardsTargetEffect(xValue).setText(ruleText), new ManaCostsImpl<>("{1}{U}"));
ability.addCost(new TapSourceCost());
ability.addTarget(new TargetPlayer());
- this.addAbility(ability);
+ this.addAbility(ability.addHint(hint));
}
private CoralColony(final CoralColony card) {
diff --git a/Mage.Sets/src/mage/cards/c/CorpseHarvester.java b/Mage.Sets/src/mage/cards/c/CorpseHarvester.java
index 31ed6ac0813..414d5560230 100644
--- a/Mage.Sets/src/mage/cards/c/CorpseHarvester.java
+++ b/Mage.Sets/src/mage/cards/c/CorpseHarvester.java
@@ -35,9 +35,10 @@ public final class CorpseHarvester extends CardImpl {
this.toughness = new MageInt(3);
// {1}{B}, {tap}, Sacrifice a creature: Search your library for a Zombie card and a Swamp card, reveal them, and put them into your hand. Then shuffle your library.
+ String ruleText = "Search your library for a Zombie card and a Swamp card, reveal them, put them into your hand, then shuffle.";
Ability ability = new SimpleActivatedAbility(new SearchLibraryPutInHandEffect(
new CorpseHarvesterTarget(), true
- ), new ManaCostsImpl<>("{1}{B}"));
+ ).setText(ruleText), new ManaCostsImpl<>("{1}{B}"));
ability.addCost(new TapSourceCost());
ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent(FILTER_CONTROLLED_CREATURE_SHORT_TEXT)));
this.addAbility(ability);
diff --git a/Mage.Sets/src/mage/cards/e/ElspethUndauntedHero.java b/Mage.Sets/src/mage/cards/e/ElspethUndauntedHero.java
index cb21d7facd4..05c76249022 100644
--- a/Mage.Sets/src/mage/cards/e/ElspethUndauntedHero.java
+++ b/Mage.Sets/src/mage/cards/e/ElspethUndauntedHero.java
@@ -41,7 +41,7 @@ public final class ElspethUndauntedHero extends CardImpl {
this.setStartingLoyalty(5);
// +2: Put a +1/+1 counter on each of up to two target creatures.
- Ability ability = new LoyaltyAbility(new AddCountersTargetEffect(CounterType.P1P1.createInstance()), 2);
+ Ability ability = new LoyaltyAbility(new AddCountersTargetEffect(CounterType.P1P1.createInstance()).setText("put a +1/+1 counter on each of up to two target creatures"), 2);
ability.addTarget(new TargetPermanent(0, 2, StaticFilters.FILTER_PERMANENT_CREATURES));
this.addAbility(ability);
diff --git a/Mage.Sets/src/mage/cards/g/GaeasBalance.java b/Mage.Sets/src/mage/cards/g/GaeasBalance.java
index 624f8541c35..4a9939805aa 100644
--- a/Mage.Sets/src/mage/cards/g/GaeasBalance.java
+++ b/Mage.Sets/src/mage/cards/g/GaeasBalance.java
@@ -8,7 +8,8 @@ import mage.cards.*;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.filter.FilterCard;
-import mage.filter.StaticFilters;
+import mage.filter.common.FilterControlledLandPermanent;
+import mage.filter.common.FilterControlledPermanent;
import mage.filter.common.FilterLandCard;
import mage.filter.predicate.Predicates;
import mage.game.Game;
@@ -22,16 +23,20 @@ import java.util.UUID;
*/
public final class GaeasBalance extends CardImpl {
+ private static final FilterControlledPermanent filter
+ = new FilterControlledLandPermanent("lands");
+
public GaeasBalance(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{3}{G}");
// As an additional cost to cast Gaea's Balance, sacrifice five lands.
this.getSpellAbility().addCost(new SacrificeTargetCost(
- new TargetControlledPermanent(5, StaticFilters.FILTER_CONTROLLED_LAND_SHORT_TEXT)
+ new TargetControlledPermanent(5, filter)
));
// Search your library for a land card of each basic land type and put them onto the battlefield. Then shuffle your library.
- this.getSpellAbility().addEffect(new SearchLibraryPutInPlayEffect(new GaeasBalanceTarget()));
+ String ruleText = "Search your library for a land card of each basic land type, put those cards onto the battlefield, then shuffle.";
+ this.getSpellAbility().addEffect(new SearchLibraryPutInPlayEffect(new GaeasBalanceTarget()).setText(ruleText));
}
private GaeasBalance(final GaeasBalance card) {
diff --git a/Mage.Sets/src/mage/cards/g/GideonChampionOfJustice.java b/Mage.Sets/src/mage/cards/g/GideonChampionOfJustice.java
index 99270065921..84b9b3da218 100644
--- a/Mage.Sets/src/mage/cards/g/GideonChampionOfJustice.java
+++ b/Mage.Sets/src/mage/cards/g/GideonChampionOfJustice.java
@@ -49,8 +49,9 @@ public final class GideonChampionOfJustice extends CardImpl {
// 0: Until end of turn, Gideon becomes an indestructible Human Soldier creature with power and toughness each equal to the number of loyalty counters on him. He's still a planeswalker. Prevent all damage that would be dealt to him this turn.
LockedInDynamicValue loyaltyCount = new LockedInDynamicValue(new CountersSourceCount(CounterType.LOYALTY));
LoyaltyAbility ability2 = new LoyaltyAbility(new BecomesCreatureSourceEffect(
- new GideonChampionOfJusticeToken(), "planeswalker", Duration.EndOfTurn, false, false, loyaltyCount, loyaltyCount), 0);
- ability2.addEffect(new PreventAllDamageToSourceEffect(Duration.EndOfTurn));
+ new GideonChampionOfJusticeToken(), "planeswalker", Duration.EndOfTurn, false, false, loyaltyCount, loyaltyCount)
+ .setText("Until end of turn, {this} becomes a Human Soldier creature with power and toughness each equal to the number of loyalty counters on him and gains indestructible. He's still a planeswalker."), 0);
+ ability2.addEffect(new PreventAllDamageToSourceEffect(Duration.EndOfTurn).setText("prevent all damage that would be dealt to him this turn"));
this.addAbility(ability2);
// -15: Exile all other permanents.
diff --git a/Mage.Sets/src/mage/cards/h/Hecatomb.java b/Mage.Sets/src/mage/cards/h/Hecatomb.java
index 57473ed4d2f..dd50ccda807 100644
--- a/Mage.Sets/src/mage/cards/h/Hecatomb.java
+++ b/Mage.Sets/src/mage/cards/h/Hecatomb.java
@@ -14,9 +14,10 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Zone;
+import mage.filter.common.FilterControlledCreaturePermanent;
import mage.filter.common.FilterControlledLandPermanent;
+import mage.filter.common.FilterControlledPermanent;
import mage.filter.predicate.permanent.TappedPredicate;
-import mage.target.common.TargetControlledCreaturePermanent;
import mage.target.common.TargetControlledPermanent;
import mage.target.common.TargetAnyTarget;
@@ -32,13 +33,15 @@ public final class Hecatomb extends CardImpl {
filter.add(SubType.SWAMP.getPredicate());
filter.add(TappedPredicate.UNTAPPED);
}
+
+ private static final FilterControlledPermanent filter2
+ = new FilterControlledCreaturePermanent("creatures");
public Hecatomb(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{1}{B}{B}");
-
// When Hecatomb enters the battlefield, sacrifice Hecatomb unless you sacrifice four creatures.
- this.addAbility(new EntersBattlefieldTriggeredAbility(new SacrificeSourceUnlessPaysEffect(new SacrificeTargetCost(new TargetControlledCreaturePermanent(4))), false));
+ this.addAbility(new EntersBattlefieldTriggeredAbility(new SacrificeSourceUnlessPaysEffect(new SacrificeTargetCost(new TargetControlledPermanent(4, filter2)))));
// Tap an untapped Swamp you control: Hecatomb deals 1 damage to any target.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(1), new TapTargetCost(new TargetControlledPermanent(1, 1, filter, true)));
diff --git a/Mage.Sets/src/mage/cards/i/Invigorate.java b/Mage.Sets/src/mage/cards/i/Invigorate.java
index 9c4d9123d02..8ddfe1cec49 100644
--- a/Mage.Sets/src/mage/cards/i/Invigorate.java
+++ b/Mage.Sets/src/mage/cards/i/Invigorate.java
@@ -28,8 +28,9 @@ public final class Invigorate extends CardImpl {
public Invigorate(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{2}{G}");
- // If you control a Forest, rather than pay Invigorate's mana cost, you may have an opponent gain 3 life.
- this.addAbility(new AlternativeCostSourceAbility(new GainLifeOpponentCost(3), new PermanentsOnTheBattlefieldCondition(filter)));
+ // If you control a Forest, rather than pay this spell's mana cost, you may have an opponent gain 3 life.
+ this.addAbility(new AlternativeCostSourceAbility(new GainLifeOpponentCost(3), new PermanentsOnTheBattlefieldCondition(filter),
+ "If you control a Forest, rather than pay this spell's mana cost, you may have an opponent gain 3 life."));
// Target creature gets +4/+4 until end of turn.
this.getSpellAbility().addEffect(new BoostTargetEffect(4,4,Duration.EndOfTurn));
diff --git a/Mage.Sets/src/mage/cards/j/JeweledAmulet.java b/Mage.Sets/src/mage/cards/j/JeweledAmulet.java
index 4f276ce14e7..18bf34b7950 100644
--- a/Mage.Sets/src/mage/cards/j/JeweledAmulet.java
+++ b/Mage.Sets/src/mage/cards/j/JeweledAmulet.java
@@ -29,7 +29,7 @@ import java.util.UUID;
*/
public final class JeweledAmulet extends CardImpl {
- private static final String rule = "{1}, {T}: Put a charge counter on {this}. Note the type of mana spent to pay this activation cost. Activate only if there are no charge counters on {this}";
+ private static final String rule = "{1}, {T}: Put a charge counter on {this}. Note the type of mana spent to pay this activation cost. Activate only if there are no charge counters on {this}.";
public JeweledAmulet(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{0}");
diff --git a/Mage.Sets/src/mage/cards/k/KrovikanFetish.java b/Mage.Sets/src/mage/cards/k/KrovikanFetish.java
index edf0ce3395e..4b0ab67c8e9 100644
--- a/Mage.Sets/src/mage/cards/k/KrovikanFetish.java
+++ b/Mage.Sets/src/mage/cards/k/KrovikanFetish.java
@@ -40,7 +40,8 @@ public final class KrovikanFetish extends CardImpl {
// When Krovikan Fetish enters the battlefield, draw a card at the beginning of the next turn's upkeep.
this.addAbility(new EntersBattlefieldTriggeredAbility(new CreateDelayedTriggeredAbilityEffect(
- new AtTheBeginOfNextUpkeepDelayedTriggeredAbility(new DrawCardSourceControllerEffect(1), Duration.OneUse)), false));
+ new AtTheBeginOfNextUpkeepDelayedTriggeredAbility(new DrawCardSourceControllerEffect(1), Duration.OneUse))
+ .setText("draw a card at the beginning of the next turn's upkeep"), false));
// Enchanted creature gets +1/+1.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(1, 1, Duration.WhileOnBattlefield)));
diff --git a/Mage.Sets/src/mage/cards/k/KrovikanPlague.java b/Mage.Sets/src/mage/cards/k/KrovikanPlague.java
index c8f5e89894f..ea0ee8d0be0 100644
--- a/Mage.Sets/src/mage/cards/k/KrovikanPlague.java
+++ b/Mage.Sets/src/mage/cards/k/KrovikanPlague.java
@@ -61,7 +61,8 @@ public final class KrovikanPlague extends CardImpl {
// When Krovikan Plague enters the battlefield, draw a card at the beginning of the next turn's upkeep.
this.addAbility(new EntersBattlefieldTriggeredAbility(new CreateDelayedTriggeredAbilityEffect(
- new AtTheBeginOfNextUpkeepDelayedTriggeredAbility(new DrawCardSourceControllerEffect(1), Duration.OneUse)), false));
+ new AtTheBeginOfNextUpkeepDelayedTriggeredAbility(new DrawCardSourceControllerEffect(1), Duration.OneUse))
+ .setText("draw a card at the beginning of the next turn's upkeep"), false));
// Tap enchanted creature: Tap enchanted creature: Krovikan Plague deals 1 damage to any target. Put a -0/-1 counter on enchanted creature. Activate this ability only if enchanted creature is untapped.
Ability ability2 = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD,
diff --git a/Mage.Sets/src/mage/cards/m/MaliciousAdvice.java b/Mage.Sets/src/mage/cards/m/MaliciousAdvice.java
index 5355c6eab5f..a222baacb1d 100644
--- a/Mage.Sets/src/mage/cards/m/MaliciousAdvice.java
+++ b/Mage.Sets/src/mage/cards/m/MaliciousAdvice.java
@@ -27,7 +27,7 @@ public final class MaliciousAdvice extends CardImpl {
// Tap X target artifacts, creatures, and/or lands. You lose X life.
Effect effect = new TapTargetEffect();
- effect.setText("X target artifacts, creatures, and/or lands");
+ effect.setText("Tap X target artifacts, creatures, and/or lands");
this.getSpellAbility().addEffect(effect);
this.getSpellAbility().addEffect(new LoseLifeSourceControllerEffect(ManacostVariableValue.REGULAR));
this.getSpellAbility().setTargetAdjuster(MaliciousAdviceAdjuster.instance);
diff --git a/Mage.Sets/src/mage/cards/p/PhantasmalSphere.java b/Mage.Sets/src/mage/cards/p/PhantasmalSphere.java
index dee5c767021..d91235b2001 100644
--- a/Mage.Sets/src/mage/cards/p/PhantasmalSphere.java
+++ b/Mage.Sets/src/mage/cards/p/PhantasmalSphere.java
@@ -69,8 +69,8 @@ class PhantasmalSphereEffect extends OneShotEffect {
public PhantasmalSphereEffect() {
super(Outcome.PutCreatureInPlay);
- this.staticText = "target opponent puts an X/X blue Orb creature token "
- + "with flying onto the battlefield, where X is the number "
+ this.staticText = "target opponent creates an X/X blue Orb creature token "
+ + "with flying, where X is the number "
+ "of +1/+1 counters on {this}";
}
diff --git a/Mage.Sets/src/mage/cards/p/PhyrexianTribute.java b/Mage.Sets/src/mage/cards/p/PhyrexianTribute.java
index 28beb9e3b40..e9685c06e38 100644
--- a/Mage.Sets/src/mage/cards/p/PhyrexianTribute.java
+++ b/Mage.Sets/src/mage/cards/p/PhyrexianTribute.java
@@ -7,8 +7,10 @@ import mage.abilities.effects.common.DestroyTargetEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
+import mage.filter.common.FilterControlledCreaturePermanent;
+import mage.filter.common.FilterControlledPermanent;
import mage.target.common.TargetArtifactPermanent;
-import mage.target.common.TargetControlledCreaturePermanent;
+import mage.target.common.TargetControlledPermanent;
/**
*
@@ -16,11 +18,14 @@ import mage.target.common.TargetControlledCreaturePermanent;
*/
public final class PhyrexianTribute extends CardImpl {
+ private static final FilterControlledPermanent filter
+ = new FilterControlledCreaturePermanent("creatures");
+
public PhyrexianTribute(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{2}{B}");
// As an additional cost to cast Phyrexian Tribute, sacrifice two creatures.
- this.getSpellAbility().addCost(new SacrificeTargetCost(new TargetControlledCreaturePermanent(2)));
+ this.getSpellAbility().addCost(new SacrificeTargetCost(new TargetControlledPermanent(2, filter)));
// Destroy target artifact.
this.getSpellAbility().addEffect(new DestroyTargetEffect());
this.getSpellAbility().addTarget(new TargetArtifactPermanent());
diff --git a/Mage.Sets/src/mage/cards/p/Pyknite.java b/Mage.Sets/src/mage/cards/p/Pyknite.java
index fd1c86b15a2..be3d97a9ae0 100644
--- a/Mage.Sets/src/mage/cards/p/Pyknite.java
+++ b/Mage.Sets/src/mage/cards/p/Pyknite.java
@@ -27,7 +27,8 @@ public final class Pyknite extends CardImpl {
// When Pyknite enters the battlefield, draw a card at the beginning of the next turn's upkeep.
this.addAbility(new EntersBattlefieldTriggeredAbility(new CreateDelayedTriggeredAbilityEffect(
- new AtTheBeginOfNextUpkeepDelayedTriggeredAbility(new DrawCardSourceControllerEffect(1), Duration.OneUse)), false));
+ new AtTheBeginOfNextUpkeepDelayedTriggeredAbility(new DrawCardSourceControllerEffect(1), Duration.OneUse))
+ .setText("draw a card at the beginning of the next turn's upkeep"), false));
}
private Pyknite(final Pyknite card) {
diff --git a/Mage.Sets/src/mage/cards/r/RayOfCommand.java b/Mage.Sets/src/mage/cards/r/RayOfCommand.java
index 1823b23cacd..b7904aa97b2 100644
--- a/Mage.Sets/src/mage/cards/r/RayOfCommand.java
+++ b/Mage.Sets/src/mage/cards/r/RayOfCommand.java
@@ -29,8 +29,8 @@ public final class RayOfCommand extends CardImpl {
// Untap target creature an opponent controls and gain control of it until end of turn. That creature gains haste until end of turn. When you lose control of the creature, tap it.
this.getSpellAbility().addEffect(new UntapTargetEffect());
- this.getSpellAbility().addEffect(new GainControlTargetEffect(Duration.EndOfTurn));
- this.getSpellAbility().addEffect(new GainAbilityTargetEffect(HasteAbility.getInstance(), Duration.EndOfTurn));
+ this.getSpellAbility().addEffect(new GainControlTargetEffect(Duration.EndOfTurn).setText("and gain control of it until end of turn"));
+ this.getSpellAbility().addEffect(new GainAbilityTargetEffect(HasteAbility.getInstance(), Duration.EndOfTurn).setText("that creature gains haste until end of turn"));
this.getSpellAbility().addEffect(new CreateDelayedTriggeredAbilityEffect(new RayOfCommandDelayedTriggeredAbility(), true));
this.getSpellAbility().addTarget(new TargetCreaturePermanent(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE));
}
diff --git a/Mage.Sets/src/mage/cards/r/Retaliation.java b/Mage.Sets/src/mage/cards/r/Retaliation.java
index 173af8330ed..16253cc2b83 100644
--- a/Mage.Sets/src/mage/cards/r/Retaliation.java
+++ b/Mage.Sets/src/mage/cards/r/Retaliation.java
@@ -31,7 +31,7 @@ public final class Retaliation extends CardImpl {
Duration.EndOfTurn), false),
Duration.WhileOnBattlefield, StaticFilters.FILTER_PERMANENT_CREATURES);
effect.setText("Creatures you control have \"Whenever this creature becomes blocked by a creature, "
- + "this creature gets +1/+1 until end of turn.");
+ + "this creature gets +1/+1 until end of turn.\"");
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD,
effect));
}
diff --git a/Mage.Sets/src/mage/cards/r/RetreatToHagra.java b/Mage.Sets/src/mage/cards/r/RetreatToHagra.java
index f93977fbc5f..303d5257400 100644
--- a/Mage.Sets/src/mage/cards/r/RetreatToHagra.java
+++ b/Mage.Sets/src/mage/cards/r/RetreatToHagra.java
@@ -27,7 +27,7 @@ public final class RetreatToHagra extends CardImpl {
// Landfall- Whenever a land enters the battlefield under your control,
// choose one - Target creature gets +1/+0 and gains deathtouch until end of turn;
- LandfallAbility ability = new LandfallAbility(new BoostTargetEffect(1, 0, Duration.EndOfTurn), false);
+ LandfallAbility ability = new LandfallAbility(new BoostTargetEffect(1, 0, Duration.EndOfTurn).setText("target creature gets +1/+0"), false);
Effect effect = new GainAbilityTargetEffect(DeathtouchAbility.getInstance(), Duration.EndOfTurn).setText("and gains deathtouch until end of turn");
effect.setOutcome(Outcome.Benefit);
ability.addEffect(effect);
diff --git a/Mage.Sets/src/mage/cards/r/RitualOfSteel.java b/Mage.Sets/src/mage/cards/r/RitualOfSteel.java
index 914cf1012ec..5e1adf6e8c5 100644
--- a/Mage.Sets/src/mage/cards/r/RitualOfSteel.java
+++ b/Mage.Sets/src/mage/cards/r/RitualOfSteel.java
@@ -39,7 +39,9 @@ public final class RitualOfSteel extends CardImpl {
this.addAbility(ability);
// When Ritual of Steel enters the battlefield, draw a card at the beginning of the next turn's upkeep.
- this.addAbility(new EntersBattlefieldTriggeredAbility(new CreateDelayedTriggeredAbilityEffect(new AtTheBeginOfNextUpkeepDelayedTriggeredAbility(new DrawCardSourceControllerEffect(1)), false)));
+ this.addAbility(new EntersBattlefieldTriggeredAbility(new CreateDelayedTriggeredAbilityEffect(
+ new AtTheBeginOfNextUpkeepDelayedTriggeredAbility(new DrawCardSourceControllerEffect(1)), false)
+ .setText("draw a card at the beginning of the next turn's upkeep")));
// Enchanted creature gets +0/+2.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(0,2, Duration.WhileOnBattlefield)));
diff --git a/Mage.Sets/src/mage/cards/s/SidewinderNaga.java b/Mage.Sets/src/mage/cards/s/SidewinderNaga.java
index e97a4cf85d8..8edb0c6b1ca 100644
--- a/Mage.Sets/src/mage/cards/s/SidewinderNaga.java
+++ b/Mage.Sets/src/mage/cards/s/SidewinderNaga.java
@@ -1,28 +1,21 @@
package mage.cards.s;
-import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.SimpleStaticAbility;
-import mage.abilities.condition.Condition;
import mage.abilities.condition.common.DesertControlledOrGraveyardCondition;
import mage.abilities.decorator.ConditionalContinuousEffect;
-import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount;
import mage.abilities.effects.common.continuous.BoostSourceEffect;
import mage.abilities.effects.common.continuous.GainAbilitySourceEffect;
import mage.abilities.keyword.TrampleAbility;
-import mage.cards.Card;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.SubType;
-import mage.constants.Zone;
-import mage.filter.FilterCard;
-import mage.filter.common.FilterControlledLandPermanent;
-import mage.game.Game;
-import mage.players.Player;
+
+import java.util.UUID;
/**
*
@@ -41,8 +34,8 @@ public final class SidewinderNaga extends CardImpl {
// As long as you control a Desert or there is a Desert card in your graveyard, Sidewinder Naga gets +1/+0 and has trample.
Ability ability = new SimpleStaticAbility(new ConditionalContinuousEffect(
new BoostSourceEffect(1, 0, Duration.WhileOnBattlefield),
- DesertControlledOrGraveyardCondition.instance, "As long as you control a Desert " +
- "or there is a Desert card in your graveyard, {this} gets +1/+0 "
+ DesertControlledOrGraveyardCondition.instance, "As long as you control a Desert " +
+ "or there is a Desert card in your graveyard, {this} gets +1/+0"
));
ability.addEffect(new ConditionalContinuousEffect(new GainAbilitySourceEffect(
TrampleAbility.getInstance(), Duration.WhileOnBattlefield
diff --git a/Mage.Sets/src/mage/cards/s/SolitaryCamel.java b/Mage.Sets/src/mage/cards/s/SolitaryCamel.java
index 9290f217c4b..93c5d62f8f5 100644
--- a/Mage.Sets/src/mage/cards/s/SolitaryCamel.java
+++ b/Mage.Sets/src/mage/cards/s/SolitaryCamel.java
@@ -29,7 +29,7 @@ public final class SolitaryCamel extends CardImpl {
this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect(
new GainAbilitySourceEffect(LifelinkAbility.getInstance()),
DesertControlledOrGraveyardCondition.instance, "{this} has lifelink as long as " +
- "you control a desert or there is a desert card in your graveyard."
+ "you control a Desert or there is a Desert card in your graveyard."
)).addHint(DesertControlledOrGraveyardCondition.getHint()));
}
diff --git a/Mage.Sets/src/mage/cards/s/SoulSeparator.java b/Mage.Sets/src/mage/cards/s/SoulSeparator.java
index 277323fe23d..5d3cdf8e5c9 100644
--- a/Mage.Sets/src/mage/cards/s/SoulSeparator.java
+++ b/Mage.Sets/src/mage/cards/s/SoulSeparator.java
@@ -42,7 +42,7 @@ public final class SoulSeparator extends CardImpl {
CreateTokenCopyTargetEffect copyEffect = new CreateTokenCopyTargetEffect(null, null, false, 1, false, false, null, 1, 1, true);
copyEffect.setAdditionalSubType(SubType.SPIRIT);
- copyEffect.setText("Create a token that's a copy of that card except it's 1/1, it's a Spirit in addition to its other types, and it has flying");
+ copyEffect.setText("Exile target creature card from your graveyard. Create a token that's a copy of that card, except it's 1/1, it's a Spirit in addition to its other types, and it has flying");
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, copyEffect, new ManaCostsImpl<>("{5}"));
ability.addCost(new TapSourceCost());
ability.addCost(new SacrificeSourceCost());
@@ -65,7 +65,7 @@ class SoulSeparatorEffect extends OneShotEffect {
public SoulSeparatorEffect() {
super(Outcome.PutCreatureInPlay);
- this.staticText = "Create a black Zombie creature token with power equal to that card's power and toughness equal that card's toughness";
+ this.staticText = "Create a black Zombie creature token with power equal to that card's power and toughness equal to that card's toughness";
}
public SoulSeparatorEffect(final SoulSeparatorEffect effect) {
diff --git a/Mage.Sets/src/mage/cards/t/ThundermawHellkite.java b/Mage.Sets/src/mage/cards/t/ThundermawHellkite.java
index 2f2c43df000..53d4087608a 100644
--- a/Mage.Sets/src/mage/cards/t/ThundermawHellkite.java
+++ b/Mage.Sets/src/mage/cards/t/ThundermawHellkite.java
@@ -26,7 +26,7 @@ import mage.game.permanent.Permanent;
*/
public final class ThundermawHellkite extends CardImpl {
- static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creatures with flying your opponents control");
+ static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with flying your opponents control");
static {
filter.add(new AbilityPredicate(FlyingAbility.class));
diff --git a/Mage.Sets/src/mage/cards/t/TormentOfHailfire.java b/Mage.Sets/src/mage/cards/t/TormentOfHailfire.java
index 0b74d497d6f..8e9d6d48e4e 100644
--- a/Mage.Sets/src/mage/cards/t/TormentOfHailfire.java
+++ b/Mage.Sets/src/mage/cards/t/TormentOfHailfire.java
@@ -42,7 +42,7 @@ class TormentOfHailfireEffect extends OneShotEffect {
public TormentOfHailfireEffect() {
super(Outcome.LoseLife);
- this.staticText = "Repeat the following process X times. Each opponent loses 3 life unless they sacrifice a nonland permanent or discards a card";
+ this.staticText = "Repeat the following process X times. Each opponent loses 3 life unless that player sacrifices a nonland permanent or discards a card";
}
public TormentOfHailfireEffect(final TormentOfHailfireEffect effect) {
diff --git a/Mage.Sets/src/mage/cards/t/TwilightProphet.java b/Mage.Sets/src/mage/cards/t/TwilightProphet.java
index b449319217d..260bfbc114e 100644
--- a/Mage.Sets/src/mage/cards/t/TwilightProphet.java
+++ b/Mage.Sets/src/mage/cards/t/TwilightProphet.java
@@ -44,7 +44,7 @@ public final class TwilightProphet extends CardImpl {
// Each opponent loses X life and you gain X life, where X is that card's converted mana cost.
this.addAbility(new ConditionalInterveningIfTriggeredAbility(new BeginningOfUpkeepTriggeredAbility(
new TwilightProphetEffect(), TargetController.YOU, false), CitysBlessingCondition.instance,
- "At the beginning of your upkeep, if you have the city's blessing, reveal the top card of your library and put it into your hand."
+ "At the beginning of your upkeep, if you have the city's blessing, reveal the top card of your library and put it into your hand. "
+ "Each opponent loses X life and you gain X life, where X is that card's mana value.")
.addHint(CitysBlessingHint.instance));
diff --git a/Mage.Sets/src/mage/cards/v/Vampirism.java b/Mage.Sets/src/mage/cards/v/Vampirism.java
index 82c45df60af..d246e31c698 100644
--- a/Mage.Sets/src/mage/cards/v/Vampirism.java
+++ b/Mage.Sets/src/mage/cards/v/Vampirism.java
@@ -41,7 +41,8 @@ public final class Vampirism extends CardImpl {
// When Vampirism enters the battlefield, draw a card at the beginning of the next turn's upkeep.
this.addAbility(new EntersBattlefieldTriggeredAbility(new CreateDelayedTriggeredAbilityEffect(
- new AtTheBeginOfNextUpkeepDelayedTriggeredAbility(new DrawCardSourceControllerEffect(1), Duration.OneUse)), false));
+ new AtTheBeginOfNextUpkeepDelayedTriggeredAbility(new DrawCardSourceControllerEffect(1), Duration.OneUse))
+ .setText("draw a card at the beginning of the next turn's upkeep"), false));
// Enchanted creature gets +1/+1 for each other creature you control.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new VampirismBoostEnchantedEffect()));
diff --git a/Mage.Sets/src/mage/cards/v/VensersJournal.java b/Mage.Sets/src/mage/cards/v/VensersJournal.java
index 8bae562c8d1..2aa634c5073 100644
--- a/Mage.Sets/src/mage/cards/v/VensersJournal.java
+++ b/Mage.Sets/src/mage/cards/v/VensersJournal.java
@@ -30,7 +30,8 @@ public final class VensersJournal extends CardImpl {
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect));
// At the beginning of your upkeep, you gain 1 life for each card in your hand.
- this.addAbility(new BeginningOfUpkeepTriggeredAbility(new GainLifeEffect(CardsInControllerHandCount.instance), TargetController.YOU, false));
+ this.addAbility(new BeginningOfUpkeepTriggeredAbility(new GainLifeEffect(CardsInControllerHandCount.instance)
+ .setText("you gain 1 life for each card in your hand"), TargetController.YOU, false));
}
private VensersJournal(final VensersJournal card) {
diff --git a/Mage/src/main/java/mage/abilities/condition/common/SourceHasCounterCondition.java b/Mage/src/main/java/mage/abilities/condition/common/SourceHasCounterCondition.java
index 61ee7102a07..e5d3bf49f5a 100644
--- a/Mage/src/main/java/mage/abilities/condition/common/SourceHasCounterCondition.java
+++ b/Mage/src/main/java/mage/abilities/condition/common/SourceHasCounterCondition.java
@@ -69,10 +69,16 @@ public class SourceHasCounterCondition implements Condition {
@Override
public String toString() {
if (from != -1) {
- if (to == Integer.MAX_VALUE) {
- return "{this} has equal to or more than " + from + " " + this.counterType.toString() + " counters";
+ if (from == 0) {
+ if (to == 0) {
+ return "{this} has no " + this.counterType.toString() + " counters on it";
+ }
+ return "{this} has " + CardUtil.numberToText(to) + " or fewer " + this.counterType.toString() + " counters on it";
}
- return "{this} has between " + from + " and " + to + " " + this.counterType.toString() + " counters";
+ if (to == Integer.MAX_VALUE) {
+ return "{this} has " + CardUtil.numberToText(from) + " or more " + this.counterType.toString() + " counters on it";
+ }
+ return "{this} has between " + from + " and " + to + " " + this.counterType.toString() + " counters on it";
} else {
return "{this} has " + CardUtil.numberToText(amount) + " or more " + this.counterType.toString() + " counters on it";
}
diff --git a/Mage/src/main/java/mage/abilities/costs/common/DiscardXTargetCost.java b/Mage/src/main/java/mage/abilities/costs/common/DiscardXTargetCost.java
index 2a21808b72b..e28034e9d02 100644
--- a/Mage/src/main/java/mage/abilities/costs/common/DiscardXTargetCost.java
+++ b/Mage/src/main/java/mage/abilities/costs/common/DiscardXTargetCost.java
@@ -23,7 +23,7 @@ public class DiscardXTargetCost extends VariableCostImpl {
public DiscardXTargetCost(FilterCard filter, boolean useAsAdditionalCost) {
super(useAsAdditionalCost ? VariableCostType.ADDITIONAL : VariableCostType.NORMAL,
filter.getMessage() + " to discard");
- this.text = (useAsAdditionalCost ? "as an additional cost to cast this spell, discard " : "Discard ") + xText + ' ' + filter.getMessage();
+ this.text = (useAsAdditionalCost ? "discard " : "Discard ") + xText + ' ' + filter.getMessage();
this.filter = filter;
}
diff --git a/Mage/src/main/java/mage/abilities/effects/common/EndTurnEffect.java b/Mage/src/main/java/mage/abilities/effects/common/EndTurnEffect.java
index 978bad8b6fa..74162eec4ac 100644
--- a/Mage/src/main/java/mage/abilities/effects/common/EndTurnEffect.java
+++ b/Mage/src/main/java/mage/abilities/effects/common/EndTurnEffect.java
@@ -10,7 +10,7 @@ public class EndTurnEffect extends OneShotEffect {
public EndTurnEffect() {
super(Outcome.Detriment);
- staticText = "End the turn. (Exile all spells and abilities on the stack, including this card. The player whose turn it is discards down to their maximum hand size. Damage wears off, and \"this turn\" and \"until end of turn\" effects end.)";
+ staticText = "End the turn. (Exile all spells and abilities from the stack, including this card. The player whose turn it is discards down to their maximum hand size. Damage wears off, and \"this turn\" and \"until end of turn\" effects end.)";
}
public EndTurnEffect(EndTurnEffect effect) {