diff --git a/Mage.Sets/src/mage/cards/a/AngelOfFlightAlabaster.java b/Mage.Sets/src/mage/cards/a/AngelOfFlightAlabaster.java
index 82147b452b..9234c9ebc4 100644
--- a/Mage.Sets/src/mage/cards/a/AngelOfFlightAlabaster.java
+++ b/Mage.Sets/src/mage/cards/a/AngelOfFlightAlabaster.java
@@ -1,10 +1,9 @@
package mage.cards.a;
-import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.BeginningOfUpkeepTriggeredAbility;
-import mage.abilities.effects.common.ReturnToHandTargetEffect;
+import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect;
import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
@@ -15,7 +14,10 @@ import mage.filter.FilterCard;
import mage.target.Target;
import mage.target.common.TargetCardInYourGraveyard;
+import java.util.UUID;
+
public final class AngelOfFlightAlabaster extends CardImpl {
+
private static final FilterCard filter = new FilterCard("Spirit card from your graveyard");
static {
@@ -23,19 +25,18 @@ public final class AngelOfFlightAlabaster extends CardImpl {
}
public AngelOfFlightAlabaster(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{W}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{W}");
this.subtype.add(SubType.ANGEL);
this.power = new MageInt(4);
this.toughness = new MageInt(4);
this.addAbility(FlyingAbility.getInstance());
- Ability ability = new BeginningOfUpkeepTriggeredAbility(new ReturnToHandTargetEffect(), TargetController.YOU, false);
- Target target = new TargetCardInYourGraveyard(filter);
- ability.addTarget(target);
+ Ability ability = new BeginningOfUpkeepTriggeredAbility(
+ new ReturnFromGraveyardToHandTargetEffect(), TargetController.YOU, false
+ );
+ ability.addTarget(new TargetCardInYourGraveyard(filter));
this.addAbility(ability);
-
-
}
private AngelOfFlightAlabaster(final AngelOfFlightAlabaster card) {
diff --git a/Mage.Sets/src/mage/cards/a/ArcaneDenial.java b/Mage.Sets/src/mage/cards/a/ArcaneDenial.java
index 5e99149b23..57e617ef0e 100644
--- a/Mage.Sets/src/mage/cards/a/ArcaneDenial.java
+++ b/Mage.Sets/src/mage/cards/a/ArcaneDenial.java
@@ -1,6 +1,5 @@
package mage.cards.a;
-import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.DelayedTriggeredAbility;
import mage.abilities.common.delayed.AtTheBeginOfNextUpkeepDelayedTriggeredAbility;
@@ -19,8 +18,9 @@ import mage.players.Player;
import mage.target.TargetSpell;
import mage.target.targetpointer.FixedTarget;
+import java.util.UUID;
+
/**
- *
* @author LevelX2
*/
public final class ArcaneDenial extends CardImpl {
@@ -35,7 +35,10 @@ public final class ArcaneDenial extends CardImpl {
// You draw a card at the beginning of the next turn's upkeep.
this.getSpellAbility().addEffect(new CreateDelayedTriggeredAbilityEffect(
new AtTheBeginOfNextUpkeepDelayedTriggeredAbility(
- new DrawCardSourceControllerEffect(1)), false));
+ new DrawCardSourceControllerEffect(1)
+ .setText("you draw a card")
+ ), false).concatBy("
")
+ );
}
private ArcaneDenial(final ArcaneDenial card) {
diff --git a/Mage.Sets/src/mage/cards/a/ArterialAlchemy.java b/Mage.Sets/src/mage/cards/a/ArterialAlchemy.java
index 042831df34..9fc51df6f9 100644
--- a/Mage.Sets/src/mage/cards/a/ArterialAlchemy.java
+++ b/Mage.Sets/src/mage/cards/a/ArterialAlchemy.java
@@ -31,6 +31,7 @@ public final class ArterialAlchemy extends CardImpl {
// When Arterial Alchemy enters the battlefield, create a Blood token for each opponent you have.
this.addAbility(new EntersBattlefieldTriggeredAbility(
new CreateTokenEffect(new BloodToken(), OpponentsCount.instance)
+ .setText("create a Blood token for each opponent you have")
));
// Blood tokens you control are Equipment in addition to their other types and have "Equipped creature gets +2/+0" and equip {2}.
diff --git a/Mage.Sets/src/mage/cards/a/AvacynsJudgment.java b/Mage.Sets/src/mage/cards/a/AvacynsJudgment.java
index 4465bb2899..3fe86e5fb3 100644
--- a/Mage.Sets/src/mage/cards/a/AvacynsJudgment.java
+++ b/Mage.Sets/src/mage/cards/a/AvacynsJudgment.java
@@ -32,7 +32,7 @@ public final class AvacynsJudgment extends CardImpl {
// Avacyn's Judgment deals 2 damage divided as you choose among any number of target creatures and/or players. If Avacyn's Judgment's madness cost was paid, it deals X damage divided as you choose among those creatures and/or players instead.
DynamicValue xValue = new AvacynsJudgmentManacostVariableValue();
Effect effect = new DamageMultiEffect(xValue);
- effect.setText("{this} deals 2 damage divided as you choose among any number of target creatures and/or players. If {this}'s madness cost was paid, it deals X damage divided as you choose among those creatures and/or players instead.");
+ effect.setText("{this} deals 2 damage divided as you choose among any number of targets. If this spell's madness cost was paid, it deals X damage divided as you choose among those permanents and/or players instead.");
this.getSpellAbility().addEffect(effect);
this.getSpellAbility().addTarget(new TargetAnyTargetAmount(xValue));
}
diff --git a/Mage.Sets/src/mage/cards/b/BenevolentOffering.java b/Mage.Sets/src/mage/cards/b/BenevolentOffering.java
index d454671c0f..c6bd066c46 100644
--- a/Mage.Sets/src/mage/cards/b/BenevolentOffering.java
+++ b/Mage.Sets/src/mage/cards/b/BenevolentOffering.java
@@ -83,7 +83,7 @@ class BenevolentOfferingEffect2 extends OneShotEffect {
BenevolentOfferingEffect2() {
super(Outcome.Sacrifice);
- this.staticText = "Choose an opponent. You gain 2 life for each creature you control and that player gains 2 life for each creature they control";
+ this.staticText = "
Choose an opponent. You gain 2 life for each creature you control and that player gains 2 life for each creature they control";
}
BenevolentOfferingEffect2(final BenevolentOfferingEffect2 effect) {
diff --git a/Mage.Sets/src/mage/cards/c/ChampionOfDusk.java b/Mage.Sets/src/mage/cards/c/ChampionOfDusk.java
index 7a39738d1f..2deaf20a98 100644
--- a/Mage.Sets/src/mage/cards/c/ChampionOfDusk.java
+++ b/Mage.Sets/src/mage/cards/c/ChampionOfDusk.java
@@ -1,4 +1,3 @@
-
package mage.cards.c;
import mage.MageInt;
@@ -8,6 +7,8 @@ import mage.abilities.dynamicvalue.DynamicValue;
import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount;
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.effects.common.LoseLifeSourceControllerEffect;
+import mage.abilities.hint.Hint;
+import mage.abilities.hint.ValueHint;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
@@ -17,7 +18,6 @@ import mage.filter.common.FilterControlledPermanent;
import java.util.UUID;
/**
- *
* @author L_J
*/
public final class ChampionOfDusk extends CardImpl {
@@ -28,6 +28,9 @@ public final class ChampionOfDusk extends CardImpl {
filter.add(SubType.VAMPIRE.getPredicate());
}
+ private static final DynamicValue xCount = new PermanentsOnBattlefieldCount(filter);
+ private static final Hint hint = new ValueHint("Vampires you control", xCount);
+
public ChampionOfDusk(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{B}{B}");
this.subtype.add(SubType.VAMPIRE);
@@ -36,10 +39,12 @@ public final class ChampionOfDusk extends CardImpl {
this.toughness = new MageInt(4);
// When Champion of Dusk enters the battlefield, you draw X cards and you lose X life, where X is the number of Vampires you control.
- DynamicValue xCount = new PermanentsOnBattlefieldCount(filter);
- Ability ability = new EntersBattlefieldTriggeredAbility(new DrawCardSourceControllerEffect(xCount));
- ability.addEffect(new LoseLifeSourceControllerEffect(xCount));
- this.addAbility(ability);
+ Ability ability = new EntersBattlefieldTriggeredAbility(
+ new DrawCardSourceControllerEffect(xCount).setText("you draw X cards")
+ );
+ ability.addEffect(new LoseLifeSourceControllerEffect(xCount)
+ .setText("and you lose X life, where X is the number of Vampires you control"));
+ this.addAbility(ability.addHint(hint));
}
private ChampionOfDusk(final ChampionOfDusk card) {
diff --git a/Mage.Sets/src/mage/cards/c/CrimsonHonorGuard.java b/Mage.Sets/src/mage/cards/c/CrimsonHonorGuard.java
index 0118e9df1d..9e4ef9f7b5 100644
--- a/Mage.Sets/src/mage/cards/c/CrimsonHonorGuard.java
+++ b/Mage.Sets/src/mage/cards/c/CrimsonHonorGuard.java
@@ -4,7 +4,6 @@ import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.Mode;
import mage.abilities.common.BeginningOfEndStepTriggeredAbility;
-import mage.abilities.effects.Effect;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.keyword.TrampleAbility;
import mage.cards.CardImpl;
@@ -37,7 +36,7 @@ public final class CrimsonHonorGuard extends CardImpl {
this.addAbility(TrampleAbility.getInstance());
// At the beginning of each player's end step, Crimson Honor Guard deals 4 damage to that player unless they control a commander.
- this.addAbility(new BeginningOfEndStepTriggeredAbility(new CrimsonHonorGuardEffect(), TargetController.ANY, false));
+ this.addAbility(new BeginningOfEndStepTriggeredAbility(new CrimsonHonorGuardEffect(), TargetController.EACH_PLAYER, false));
}
private CrimsonHonorGuard(final CrimsonHonorGuard card) {
diff --git a/Mage.Sets/src/mage/cards/d/DrogskolCaptain.java b/Mage.Sets/src/mage/cards/d/DrogskolCaptain.java
index 9ec6bd1fb8..33ff8aefc1 100644
--- a/Mage.Sets/src/mage/cards/d/DrogskolCaptain.java
+++ b/Mage.Sets/src/mage/cards/d/DrogskolCaptain.java
@@ -22,7 +22,7 @@ import mage.filter.common.FilterCreaturePermanent;
*/
public final class DrogskolCaptain extends CardImpl {
- private static final FilterCreaturePermanent filter = new FilterCreaturePermanent(SubType.SPIRIT, "Spirits");
+ private static final FilterCreaturePermanent filter = new FilterCreaturePermanent(SubType.SPIRIT, "Spirit creatures");
public DrogskolCaptain(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{W}{U}");
diff --git a/Mage.Sets/src/mage/cards/d/DrogskolReinforcements.java b/Mage.Sets/src/mage/cards/d/DrogskolReinforcements.java
index 0a558f2bd0..50fe982f00 100644
--- a/Mage.Sets/src/mage/cards/d/DrogskolReinforcements.java
+++ b/Mage.Sets/src/mage/cards/d/DrogskolReinforcements.java
@@ -11,7 +11,6 @@ import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.SubType;
import mage.filter.FilterPermanent;
-import mage.filter.StaticFilters;
import mage.filter.common.FilterControlledPermanent;
import java.util.UUID;
@@ -38,12 +37,12 @@ public final class DrogskolReinforcements extends CardImpl {
// Other Spirits you control have melee.
this.addAbility(new SimpleStaticAbility(new GainAbilityAllEffect(
new MeleeAbility(), Duration.WhileOnBattlefield, filter, true
- )));
+ ).setText("other Spirits you control have melee")));
// Prevent all noncombat damage that would be dealt to Spirits you control.
- this.addAbility(new SimpleStaticAbility(new PreventAllNonCombatDamageToAllEffect(
- Duration.WhileOnBattlefield, StaticFilters.FILTER_CONTROLLED_CREATURES
- )));
+ this.addAbility(new SimpleStaticAbility(
+ new PreventAllNonCombatDamageToAllEffect(Duration.WhileOnBattlefield, filter)
+ ));
}
private DrogskolReinforcements(final DrogskolReinforcements card) {
diff --git a/Mage.Sets/src/mage/cards/f/FalkenrathGorger.java b/Mage.Sets/src/mage/cards/f/FalkenrathGorger.java
index d3a75de7a2..d18775a0eb 100644
--- a/Mage.Sets/src/mage/cards/f/FalkenrathGorger.java
+++ b/Mage.Sets/src/mage/cards/f/FalkenrathGorger.java
@@ -69,7 +69,7 @@ class FalkenrathGorgerEffect extends ContinuousEffectImpl {
public FalkenrathGorgerEffect() {
super(Duration.WhileOnBattlefield, Layer.AbilityAddingRemovingEffects_6, SubLayer.NA, Outcome.AddAbility);
- this.staticText = "Each Vampire creature card you own that isn't on the battlefield has madness. Its madness cost is equal to its mana cost";
+ this.staticText = "Each Vampire creature card you own that isn't on the battlefield has madness. The madness cost is equal to its mana cost";
}
public FalkenrathGorgerEffect(final FalkenrathGorgerEffect effect) {
diff --git a/Mage.Sets/src/mage/cards/g/GeistOfSaintTraft.java b/Mage.Sets/src/mage/cards/g/GeistOfSaintTraft.java
index f05a55c3d1..2b49fb8e29 100644
--- a/Mage.Sets/src/mage/cards/g/GeistOfSaintTraft.java
+++ b/Mage.Sets/src/mage/cards/g/GeistOfSaintTraft.java
@@ -52,7 +52,7 @@ class GeistOfSaintTraftEffect extends OneShotEffect {
GeistOfSaintTraftEffect() {
super(Outcome.PutCreatureInPlay);
- staticText = "create a 4/4 white Angel creature token with flying tapped and attacking. Exile that token at end of combat";
+ staticText = "create a 4/4 white Angel creature token with flying that's tapped and attacking. Exile that token at end of combat";
}
GeistOfSaintTraftEffect(final GeistOfSaintTraftEffect effect) {
diff --git a/Mage.Sets/src/mage/cards/k/KamberThePlunderer.java b/Mage.Sets/src/mage/cards/k/KamberThePlunderer.java
index 5ff05678d4..723876e742 100644
--- a/Mage.Sets/src/mage/cards/k/KamberThePlunderer.java
+++ b/Mage.Sets/src/mage/cards/k/KamberThePlunderer.java
@@ -41,7 +41,7 @@ public final class KamberThePlunderer extends CardImpl {
Ability ability = new DiesCreatureTriggeredAbility(
new GainLifeEffect(1), false, StaticFilters.FILTER_OPPONENTS_PERMANENT_A_CREATURE
);
- ability.addEffect(new CreateTokenEffect(new BloodToken()));
+ ability.addEffect(new CreateTokenEffect(new BloodToken()).concatBy("and"));
this.addAbility(ability);
}
diff --git a/Mage.Sets/src/mage/cards/k/KamiOfTheCrescentMoon.java b/Mage.Sets/src/mage/cards/k/KamiOfTheCrescentMoon.java
index 8b73b4f474..fd6ad2c89d 100644
--- a/Mage.Sets/src/mage/cards/k/KamiOfTheCrescentMoon.java
+++ b/Mage.Sets/src/mage/cards/k/KamiOfTheCrescentMoon.java
@@ -1,7 +1,5 @@
-
package mage.cards.k;
-import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.BeginningOfDrawTriggeredAbility;
import mage.abilities.effects.common.DrawCardTargetEffect;
@@ -12,14 +10,15 @@ import mage.constants.SubType;
import mage.constants.SuperType;
import mage.constants.TargetController;
+import java.util.UUID;
+
/**
- *
* @author LevelX2
*/
public final class KamiOfTheCrescentMoon extends CardImpl {
public KamiOfTheCrescentMoon(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{U}{U}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{U}{U}");
addSuperType(SuperType.LEGENDARY);
this.subtype.add(SubType.SPIRIT);
@@ -27,7 +26,7 @@ public final class KamiOfTheCrescentMoon extends CardImpl {
this.toughness = new MageInt(3);
// At the beginning of each player's draw step, that player draws an additional card.
- this.addAbility(new BeginningOfDrawTriggeredAbility(new DrawCardTargetEffect(1), TargetController.ANY, false));
+ this.addAbility(new BeginningOfDrawTriggeredAbility(new DrawCardTargetEffect(1).setText("that player draws an additional card"), TargetController.ANY, false));
}
private KamiOfTheCrescentMoon(final KamiOfTheCrescentMoon card) {
diff --git a/Mage.Sets/src/mage/cards/n/NightsWhisper.java b/Mage.Sets/src/mage/cards/n/NightsWhisper.java
index 98c35080b6..2f5a296d98 100644
--- a/Mage.Sets/src/mage/cards/n/NightsWhisper.java
+++ b/Mage.Sets/src/mage/cards/n/NightsWhisper.java
@@ -19,8 +19,8 @@ public final class NightsWhisper extends CardImpl {
// You draw two cards and you lose 2 life.
- this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(2));
- this.getSpellAbility().addEffect(new LoseLifeSourceControllerEffect(2));
+ this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(2).setText("you draw two cards"));
+ this.getSpellAbility().addEffect(new LoseLifeSourceControllerEffect(2).concatBy("and"));
}
private NightsWhisper(final NightsWhisper card) {
diff --git a/Mage.Sets/src/mage/cards/p/PatronOfTheVein.java b/Mage.Sets/src/mage/cards/p/PatronOfTheVein.java
index 477afb8afd..06e7ea7320 100644
--- a/Mage.Sets/src/mage/cards/p/PatronOfTheVein.java
+++ b/Mage.Sets/src/mage/cards/p/PatronOfTheVein.java
@@ -112,7 +112,7 @@ class PatronOfTheVeinCreatureDiesTriggeredAbility extends TriggeredAbilityImpl {
@Override
public String getRule() {
- return "Whenever a creature an opponent controls dies, exile it and put a +1/+1 counter on each Vampire you control";
+ return "Whenever a creature an opponent controls dies, exile it and put a +1/+1 counter on each Vampire you control.";
}
}
diff --git a/Mage.Sets/src/mage/cards/p/PromiseOfBunrei.java b/Mage.Sets/src/mage/cards/p/PromiseOfBunrei.java
index 917810c002..db97ebe9d5 100644
--- a/Mage.Sets/src/mage/cards/p/PromiseOfBunrei.java
+++ b/Mage.Sets/src/mage/cards/p/PromiseOfBunrei.java
@@ -1,7 +1,5 @@
-
package mage.cards.p;
-import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.common.DiesCreatureTriggeredAbility;
import mage.abilities.effects.OneShotEffect;
@@ -17,23 +15,26 @@ import mage.game.permanent.Permanent;
import mage.game.permanent.token.SpiritToken;
import mage.players.Player;
+import java.util.UUID;
+
/**
- *
* @author LevelX2
*/
public final class PromiseOfBunrei extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("a creature you control");
-
+
static {
filter.add(TargetController.YOU.getControllerPredicate());
}
-
+
public PromiseOfBunrei(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{2}{W}");
+ super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{W}");
// When a creature you control dies, sacrifice Promise of Bunrei. If you do, create four 1/1 colorless Spirit creature tokens.
- this.addAbility(new DiesCreatureTriggeredAbility(new PromiseOfBunreiEffect(), false, filter));
+ this.addAbility(new DiesCreatureTriggeredAbility(
+ new PromiseOfBunreiEffect(), false, filter
+ ).setTriggerPhrase("When a creature you control dies, "));
}
private PromiseOfBunrei(final PromiseOfBunrei card) {
@@ -47,21 +48,21 @@ public final class PromiseOfBunrei extends CardImpl {
}
class PromiseOfBunreiEffect extends OneShotEffect {
-
+
public PromiseOfBunreiEffect() {
super(Outcome.Benefit);
this.staticText = "sacrifice {this}. If you do, create four 1/1 colorless Spirit creature tokens";
}
-
+
public PromiseOfBunreiEffect(final PromiseOfBunreiEffect effect) {
super(effect);
}
-
+
@Override
public PromiseOfBunreiEffect copy() {
return new PromiseOfBunreiEffect(this);
}
-
+
@Override
public boolean apply(Game game, Ability source) {
Player controller = game.getPlayer(source.getControllerId());
diff --git a/Mage.Sets/src/mage/cards/r/ReconnaissanceMission.java b/Mage.Sets/src/mage/cards/r/ReconnaissanceMission.java
index a435aa9e8d..6ffe195fe0 100644
--- a/Mage.Sets/src/mage/cards/r/ReconnaissanceMission.java
+++ b/Mage.Sets/src/mage/cards/r/ReconnaissanceMission.java
@@ -23,7 +23,7 @@ public final class ReconnaissanceMission extends CardImpl {
// Whenever a creature you control deals combat damage to a player, you may draw a card.
this.addAbility(new DealsDamageToAPlayerAllTriggeredAbility(
new DrawCardSourceControllerEffect(1),
- StaticFilters.FILTER_CONTROLLED_CREATURE,
+ StaticFilters.FILTER_CONTROLLED_A_CREATURE,
true, SetTargetPointer.NONE, true
));
diff --git a/Mage.Sets/src/mage/cards/s/ScionOfOpulence.java b/Mage.Sets/src/mage/cards/s/ScionOfOpulence.java
index c4375c613e..2233763e73 100644
--- a/Mage.Sets/src/mage/cards/s/ScionOfOpulence.java
+++ b/Mage.Sets/src/mage/cards/s/ScionOfOpulence.java
@@ -13,7 +13,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.filter.FilterPermanent;
-import mage.filter.StaticFilters;
+import mage.filter.common.FilterControlledArtifactPermanent;
import mage.filter.common.FilterControlledPermanent;
import mage.filter.predicate.permanent.TokenPredicate;
import mage.game.permanent.token.TreasureToken;
@@ -28,6 +28,8 @@ public final class ScionOfOpulence extends CardImpl {
private static final FilterPermanent filter
= new FilterControlledPermanent(SubType.VAMPIRE, "nontoken Vampire you control");
+ private static final FilterControlledPermanent filter2
+ = new FilterControlledArtifactPermanent("artifacts");
static {
filter.add(TokenPredicate.FALSE);
@@ -50,9 +52,7 @@ public final class ScionOfOpulence extends CardImpl {
Ability ability = new SimpleActivatedAbility(
new ExileTopXMayPlayUntilEndOfTurnEffect(1), new ManaCostsImpl<>("{R}")
);
- ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent(
- 2, StaticFilters.FILTER_CONTROLLED_PERMANENT_ARTIFACT_AN
- )));
+ ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent(2, filter2)));
this.addAbility(ability);
}
diff --git a/Mage.Sets/src/mage/cards/s/SpectralShepherd.java b/Mage.Sets/src/mage/cards/s/SpectralShepherd.java
index 998cad5702..0805892178 100644
--- a/Mage.Sets/src/mage/cards/s/SpectralShepherd.java
+++ b/Mage.Sets/src/mage/cards/s/SpectralShepherd.java
@@ -1,7 +1,5 @@
-
package mage.cards.s;
-import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
@@ -12,35 +10,29 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
-import mage.constants.TargetController;
-import mage.constants.Zone;
import mage.filter.common.FilterControlledPermanent;
import mage.target.common.TargetControlledPermanent;
+import java.util.UUID;
+
/**
- *
* @author escplan9 (Derek Monturo - dmontur1 at gmail dot com)
*/
public final class SpectralShepherd extends CardImpl {
-
- private static final FilterControlledPermanent filter = new FilterControlledPermanent("Spirit");
- static {
- filter.add(TargetController.YOU.getControllerPredicate());
- filter.add(SubType.SPIRIT.getPredicate());
- }
+ private static final FilterControlledPermanent filter = new FilterControlledPermanent(SubType.SPIRIT);
public SpectralShepherd(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{W}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}");
this.subtype.add(SubType.SPIRIT);
this.power = new MageInt(2);
this.toughness = new MageInt(2);
// Flying
this.addAbility(FlyingAbility.getInstance());
-
+
// {1}{U}: Return target Spirit you control to its owner's hand.
- Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ReturnToHandTargetEffect(), new ManaCostsImpl("{1}{U}"));
+ Ability ability = new SimpleActivatedAbility(new ReturnToHandTargetEffect(), new ManaCostsImpl<>("{1}{U}"));
ability.addTarget(new TargetControlledPermanent(filter));
this.addAbility(ability);
}
diff --git a/Mage.Sets/src/mage/cards/s/StromkirkCaptain.java b/Mage.Sets/src/mage/cards/s/StromkirkCaptain.java
index 9382b75134..690c079a8a 100644
--- a/Mage.Sets/src/mage/cards/s/StromkirkCaptain.java
+++ b/Mage.Sets/src/mage/cards/s/StromkirkCaptain.java
@@ -1,8 +1,7 @@
-
package mage.cards.s;
-import java.util.UUID;
import mage.MageInt;
+import mage.abilities.Ability;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.continuous.BoostControlledEffect;
import mage.abilities.effects.common.continuous.GainAbilityControlledEffect;
@@ -12,22 +11,20 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.SubType;
-import mage.constants.Zone;
import mage.filter.common.FilterCreaturePermanent;
+import java.util.UUID;
+
/**
- *
* @author Loki
*/
public final class StromkirkCaptain extends CardImpl {
- private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Vampire creatures");
- static {
- filter.add(SubType.VAMPIRE.getPredicate());
- }
+ private static final FilterCreaturePermanent filter
+ = new FilterCreaturePermanent(SubType.VAMPIRE, "Vampire creatures");
public StromkirkCaptain(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{B}{R}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{B}{R}");
this.subtype.add(SubType.VAMPIRE);
this.subtype.add(SubType.SOLDIER);
@@ -36,8 +33,13 @@ public final class StromkirkCaptain extends CardImpl {
this.addAbility(FirstStrikeAbility.getInstance());
// Other Vampire creatures you control get +1/+1 and have first strike.
- this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostControlledEffect(1, 1, Duration.WhileOnBattlefield, filter, true)));
- this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityControlledEffect(FirstStrikeAbility.getInstance(), Duration.WhileOnBattlefield, filter, true)));
+ Ability ability = new SimpleStaticAbility(new BoostControlledEffect(
+ 1, 1, Duration.WhileOnBattlefield, filter, true
+ ));
+ ability.addEffect(new GainAbilityControlledEffect(
+ FirstStrikeAbility.getInstance(), Duration.WhileOnBattlefield, filter, true
+ ).setText("and have first strike"));
+ this.addAbility(ability);
}
private StromkirkCaptain(final StromkirkCaptain card) {
diff --git a/Mage.Sets/src/mage/cards/s/StromkirkOccultist.java b/Mage.Sets/src/mage/cards/s/StromkirkOccultist.java
index 6ecdc25ecb..7489eaaf92 100644
--- a/Mage.Sets/src/mage/cards/s/StromkirkOccultist.java
+++ b/Mage.Sets/src/mage/cards/s/StromkirkOccultist.java
@@ -62,7 +62,7 @@ class StromkirkOccultistExileEffect extends OneShotEffect {
public StromkirkOccultistExileEffect() {
super(Outcome.Detriment);
- this.staticText = "Exile the top card of your library. Until end of turn, you may play that card";
+ this.staticText = "exile the top card of your library. Until end of turn, you may play that card";
}
public StromkirkOccultistExileEffect(final StromkirkOccultistExileEffect effect) {
diff --git a/Mage.Sets/src/mage/cards/t/TiminYouthfulGeist.java b/Mage.Sets/src/mage/cards/t/TiminYouthfulGeist.java
index 9e5797e053..e2e3582ba7 100644
--- a/Mage.Sets/src/mage/cards/t/TiminYouthfulGeist.java
+++ b/Mage.Sets/src/mage/cards/t/TiminYouthfulGeist.java
@@ -37,7 +37,8 @@ public final class TiminYouthfulGeist extends CardImpl {
// At the beginning of each combat, tap up to one target creature.
Ability ability = new BeginningOfCombatTriggeredAbility(
- new TapTargetEffect(), TargetController.ANY, false
+ new TapTargetEffect().setText("tap up to one target creature"),
+ TargetController.ANY, false
);
ability.addTarget(new TargetCreaturePermanent(0, 1));
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 2a6b597c0e..84988f7daf 100644
--- a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java
+++ b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java
@@ -58,7 +58,7 @@ public class VerifyCardDataTest {
private static final Logger logger = Logger.getLogger(VerifyCardDataTest.class);
- private static final String FULL_ABILITIES_CHECK_SET_CODE = "VOW"; // check all abilities and output cards with wrong abilities texts;
+ private static final String FULL_ABILITIES_CHECK_SET_CODE = "VOC"; // 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 boolean ONLY_TEXT = false; // use when checking text locally, suppresses unnecessary checks and output messages
diff --git a/Mage/src/main/java/mage/abilities/effects/keyword/InvestigateEffect.java b/Mage/src/main/java/mage/abilities/effects/keyword/InvestigateEffect.java
index e4b04c1af8..1ac4c6fc9b 100644
--- a/Mage/src/main/java/mage/abilities/effects/keyword/InvestigateEffect.java
+++ b/Mage/src/main/java/mage/abilities/effects/keyword/InvestigateEffect.java
@@ -67,13 +67,13 @@ public class InvestigateEffect extends OneShotEffect {
message = ". (C";
break;
case 2:
- message = "twice. (To investigate, c";
+ message = " twice. (To investigate, c";
break;
default:
- message = CardUtil.numberToText(value) + " times. (To investigate, c";
+ message = ' ' + CardUtil.numberToText(value) + " times. (To investigate, c";
}
} else {
- message = "X times, where X is the " + amount.getMessage() + ". (To investigate, c";
+ message = " X times, where X is the " + amount.getMessage() + ". (To investigate, c";
}
return "investigate" + message + "reate a colorless Clue artifact token " +
"with \"{2}, Sacrifice this artifact: Draw a card.\")";