[VOW] various text fixes

This commit is contained in:
Evan Kranzler 2021-11-11 21:59:56 -05:00
parent 8de8a24227
commit 38f0e83274
52 changed files with 102 additions and 105 deletions

View file

@ -32,7 +32,7 @@ import mage.game.permanent.token.BloodToken;
*/
public final class AnjeMaidOfDishonor extends CardImpl {
private static final FilterControlledPermanent filter = new FilterControlledPermanent("another creature or a Blood Token");
private static final FilterControlledPermanent filter = new FilterControlledPermanent("another creature or a Blood token");
static {
filter.add(AnjeMaidOfDishonorPredicate.instance);

View file

@ -37,7 +37,6 @@ public final class BallistaWielder extends CardImpl {
// {2}{R}: Ballista Wielder deals 1 damage to any target. A creature dealt damage this way can't block this turn.
Ability ability = new SimpleActivatedAbility(new BallistaWielderEffect(), new ManaCostsImpl<>("{2}{R}"));
ability.addCost(new TapSourceCost());
ability.addTarget(new TargetAnyTarget());
this.addAbility(ability);

View file

@ -1,29 +1,33 @@
package mage.cards.b;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.costs.common.DiscardCardCost;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.dynamicvalue.DynamicValue;
import mage.abilities.dynamicvalue.common.CardsInControllerGraveyardCount;
import mage.abilities.effects.common.TapSourceEffect;
import mage.abilities.effects.common.continuous.GainAbilitySourceEffect;
import mage.abilities.effects.common.continuous.SetPowerToughnessSourceEffect;
import mage.abilities.keyword.IndestructibleAbility;
import mage.constants.Duration;
import mage.constants.SubType;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.SubType;
import mage.filter.StaticFilters;
import java.util.UUID;
/**
*
* @author weirddan455
*/
public final class BloodswornKnight extends CardImpl {
private static final DynamicValue xValue = new CardsInControllerGraveyardCount(StaticFilters.FILTER_CARD_CREATURES);
public BloodswornKnight(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "");
@ -37,7 +41,7 @@ public final class BloodswornKnight extends CardImpl {
this.nightCard = true;
// Bloodsworn Knight's power and toughness are each equal to the number of creature cards in your graveyard.
this.addAbility(new SimpleStaticAbility(new SetPowerToughnessSourceEffect(new CardsInControllerGraveyardCount(), Duration.EndOfGame)));
this.addAbility(new SimpleStaticAbility(new SetPowerToughnessSourceEffect(xValue, Duration.EndOfGame)));
// {1}{B}, Discard a card: Bloodsworn Knight gains indestructible until end of turn. Tap it.
Ability ability = new SimpleActivatedAbility(

View file

@ -52,9 +52,9 @@ public final class BloodtitheHarvester extends CardImpl {
this.addAbility(new EntersBattlefieldTriggeredAbility(new CreateTokenEffect(new BloodToken())));
// {T}, Sacrifice Bloodtithe Harvester: Target creature gets -X/-X until end of turn, where X is twice the number of Blood tokens you control. Activate only as a sorcery.
Ability ability = new ActivateAsSorceryActivatedAbility(
new BoostTargetEffect(xValue, xValue, Duration.EndOfTurn), new TapSourceCost()
);
Ability ability = new ActivateAsSorceryActivatedAbility(new BoostTargetEffect(
xValue, xValue, Duration.EndOfTurn
).setText("target creature gets -X/-X until end of turn, where X is twice the number of Blood tokens you control"), new TapSourceCost());
ability.addCost(new SacrificeSourceCost());
ability.addTarget(new TargetCreaturePermanent());
this.addAbility(ability.addHint(hint));

View file

@ -89,6 +89,6 @@ class BrineComberTriggeredAbility extends TriggeredAbilityImpl {
@Override
public String getRule() {
return "Whenever {this} enters the battlefield or becomes the target " +
"of an Aura spell, create a 1/1 white Spirit creature token with flying";
"of an Aura spell, create a 1/1 white Spirit creature token with flying.";
}
}

View file

@ -102,6 +102,6 @@ class BrineboundGiftTriggeredAbility extends TriggeredAbilityImpl {
@Override
public String getRule() {
return "Whenever {this} enters the battlefield or enchanted creature becomes the target " +
"of an Aura spell, create a 1/1 white Spirit creature token with flying";
"of an Aura spell, create a 1/1 white Spirit creature token with flying.";
}
}

View file

@ -33,7 +33,7 @@ public final class BrutalCathar extends CardImpl {
// When this creature enters the battlefield or transforms into Brutal Cathar, exile target creature an opponent controls until this creature leaves the battlefield.
Ability ability = new TransformsOrEntersTriggeredAbility(
new ExileUntilSourceLeavesEffect("creature an opponent controls"), false
);
).setTriggerPhrase("Whenever this creature enters the battlefield or transforms into {this}, ");
ability.addTarget(new TargetOpponentsCreaturePermanent());
ability.addEffect(new CreateDelayedTriggeredAbilityEffect(new OnLeaveReturnExiledToBattlefieldAbility()));
this.addAbility(ability);

View file

@ -33,7 +33,7 @@ public final class CacklingCulprit extends CardImpl {
// Whenever Cackling Culprit or another creature you control dies, you gain 1 life.
this.addAbility(new DiesThisOrAnotherCreatureTriggeredAbility(
new GainLifeEffect(1), false, StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE
new GainLifeEffect(1), false, StaticFilters.FILTER_CONTROLLED_CREATURE
));
// {1}{B}: Cackling Culprit gains deathtouch until end of turn.

View file

@ -24,7 +24,7 @@ public final class ChangeOfFortune extends CardImpl {
// Discard your hand, then draw a card for each card you've discarded this turn.
this.getSpellAbility().addEffect(new DiscardHandControllerEffect());
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(ChangeOfFortuneValue.instance));
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(ChangeOfFortuneValue.instance).concatBy(", then"));
this.getSpellAbility().addWatcher(new DiscardedCardWatcher());
}

View file

@ -43,7 +43,7 @@ public final class ChillOfTheGrave extends CardImpl {
this.getSpellAbility().addEffect(new DontUntapInControllersNextUntapStepTargetEffect("It"));
// Draw a card.
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1));
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1).concatBy("<br>"));
}
private ChillOfTheGrave(final ChillOfTheGrave card) {

View file

@ -33,7 +33,7 @@ public final class CrashingTide extends CardImpl {
this.addAbility(new SimpleStaticAbility(Zone.ALL,
new ConditionalContinuousEffect(new GainAbilitySourceEffect(FlashAbility.getInstance(), Duration.WhileOnBattlefield, true),
new PermanentsOnTheBattlefieldCondition(filter),
"{this} has flash as long as you control a Merfolk")).setRuleAtTheTop(true));
"this spell has flash as long as you control a Merfolk")).setRuleAtTheTop(true));
// Return target creature to it's owner's hand.
this.getSpellAbility().addEffect(new ReturnToHandTargetEffect());

View file

@ -44,8 +44,9 @@ public final class DeadlyDancer extends CardImpl {
// {R}{R}: Deadly Dancer and another target creature each get +1/+0 until end of turn.
Ability ability = new SimpleActivatedAbility(new BoostSourceEffect(
1, 0, Duration.EndOfTurn
).setText("{this} and another target creature"), new ManaCostsImpl<>("{R}{R}"));
ability.addEffect(new BoostTargetEffect(1, 0).setText("each get +1/+0 until end of turn"));
).setText("{this}"), new ManaCostsImpl<>("{R}{R}"));
ability.addEffect(new BoostTargetEffect(1, 0)
.setText("and another target creature each get +1/+0 until end of turn"));
this.addAbility(ability);
}

View file

@ -9,9 +9,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.filter.FilterPermanent;
import mage.filter.common.FilterControlledCreaturePermanent;
import mage.filter.predicate.mageobject.AnotherPredicate;
import mage.filter.StaticFilters;
import java.util.UUID;
@ -20,13 +18,6 @@ import java.util.UUID;
*/
public final class DesperateFarmer extends CardImpl {
private static final FilterPermanent filter
= new FilterControlledCreaturePermanent("another creature you control");
static {
filter.add(AnotherPredicate.instance);
}
public DesperateFarmer(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}");
@ -41,7 +32,10 @@ public final class DesperateFarmer extends CardImpl {
// When another creature you control dies, transform Desperate Farmer.
this.addAbility(new TransformAbility());
this.addAbility(new DiesCreatureTriggeredAbility(new TransformSourceEffect(), false, filter));
this.addAbility(new DiesCreatureTriggeredAbility(
new TransformSourceEffect(), false,
StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE
).setTriggerPhrase("When another creature you control dies, "));
}
private DesperateFarmer(final DesperateFarmer card) {

View file

@ -1,7 +1,7 @@
package mage.cards.d;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.common.ActivateAsSorceryActivatedAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.costs.common.ExileFromGraveCost;
import mage.abilities.costs.common.TapSourceCost;
@ -36,7 +36,9 @@ public final class DollhouseOfHorrors extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{5}");
// {1}, {T}, Exile a creature card from your graveyard: Create a token that's a copy of the exiled card, except it's a 0/0 Construct artifact in addition to its other types and it has "This creature gets +1/+1 for each Construct you control." It gains haste until end of turn. Activate only as a sorcery.
Ability ability = new SimpleActivatedAbility(new DollhouseOfHorrorsEffect(), new GenericManaCost(1));
Ability ability = new ActivateAsSorceryActivatedAbility(
new DollhouseOfHorrorsEffect(), new GenericManaCost(1)
);
ability.addCost(new TapSourceCost());
ability.addCost(new ExileFromGraveCost(new TargetCardInYourGraveyard(
StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD

View file

@ -36,7 +36,7 @@ public final class DorotheaVengefulVictim extends CardImpl {
// When Dorothea, Vengeful Victim attacks or blocks, sacrifice it at end of combat.
this.addAbility(new AttacksOrBlocksTriggeredAbility(new CreateDelayedTriggeredAbilityEffect(
new AtTheEndOfCombatDelayedTriggeredAbility(new SacrificeSourceEffect())
), false));
).setText("sacrifice it at end of combat"), false));
// Disturb {1}{W}{U}
this.addAbility(new DisturbAbility(this, "{1}{W}{U}"));

View file

@ -60,7 +60,7 @@ class DreadFugueEffect extends OneShotEffect {
public DreadFugueEffect(FilterCard filter) {
super(Outcome.Discard);
this.filter = filter;
staticText = "Target player reveals their hand. You may choose a nonland card from it [with mana value 2 or less]. That player discards that card";
staticText = "Target player reveals their hand. You choose a nonland card from it [with mana value 2 or less]. That player discards that card";
}
private DreadFugueEffect(final DreadFugueEffect effect) {

View file

@ -13,7 +13,6 @@ import mage.constants.Zone;
import mage.filter.StaticFilters;
import mage.game.Game;
import mage.game.events.GameEvent;
import mage.target.common.TargetCardInGraveyard;
import mage.target.common.TargetCardInYourGraveyard;
import java.util.UUID;
@ -28,7 +27,7 @@ public final class EdgarsAwakening extends CardImpl {
// Return target creature card from your graveyard to the battlefield.
this.getSpellAbility().addEffect(new ReturnFromGraveyardToBattlefieldTargetEffect());
this.getSpellAbility().addTarget(new TargetCardInGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD));
this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD));
// When you discard Edgar's Awakening, you may pay {B}. When you do, return target creature card from your graveyard to your hand.
this.addAbility(new EdgarsAwakeningTriggeredAbility());

View file

@ -36,7 +36,7 @@ public final class FellStinger extends CardImpl {
// When Fell Stinger exploits a creature, target player draws two cards and loses 2 life.
Ability ability = new ExploitCreatureTriggeredAbility(new DrawCardTargetEffect(2));
ability.addEffect(new LoseLifeTargetEffect(2));
ability.addEffect(new LoseLifeTargetEffect(2).setText("and loses 2 life"));
ability.addTarget(new TargetPlayer());
this.addAbility(ability);
}

View file

@ -50,7 +50,7 @@ public final class GeralfVisionaryStitcher extends CardImpl {
// Zombies you control have flying.
this.addAbility(new SimpleStaticAbility(new GainAbilityControlledEffect(FlyingAbility.getInstance(), Duration.WhileOnBattlefield, filter)));
// {U}, {T}, Sacrifice another nontoken creature: Create an X/X blue Zombie token, where X is the sacrificed creature's power.
// {U}, {T}, Sacrifice another nontoken creature: Create an X/X blue Zombie token, where X is the sacrificed creature's toughness.
Ability ability = new SimpleActivatedAbility(new GeralfVisionaryStitcherEffect(), new ManaCostsImpl<>("{U}"));
ability.addCost(new TapSourceCost());
ability.addCost(new SacrificeTargetCost(filter2));
@ -71,7 +71,7 @@ class GeralfVisionaryStitcherEffect extends OneShotEffect {
public GeralfVisionaryStitcherEffect() {
super(Outcome.PutCreatureInPlay);
staticText = "Create an X/X blue Zombie token, where X is the sacrificed creature's power";
staticText = "Create an X/X blue Zombie creature token, where X is the sacrificed creature's toughness";
}
private GeralfVisionaryStitcherEffect(final GeralfVisionaryStitcherEffect effect) {
@ -89,7 +89,7 @@ class GeralfVisionaryStitcherEffect extends OneShotEffect {
for (Cost cost : source.getCosts()) {
if (cost instanceof SacrificeTargetCost) {
for (Permanent permanent : ((SacrificeTargetCost) cost).getPermanents()) {
xValue += permanent.getPower().getValue();
xValue += permanent.getToughness().getValue();
}
}
}

View file

@ -51,7 +51,7 @@ public final class GloriousSunrise extends CardImpl {
// Creatures you control get +1/+1 and gain trample until end of turn.
Ability ability = new BeginningOfCombatTriggeredAbility(new BoostControlledEffect(
1, 1, Duration.EndOfTurn
).setText("reatures you control get +1/+1"), TargetController.YOU, false);
).setText("creatures you control get +1/+1"), TargetController.YOU, false);
ability.addEffect(new GainAbilityControlledEffect(
TrampleAbility.getInstance(), Duration.EndOfTurn,
StaticFilters.FILTER_PERMANENT_CREATURE

View file

@ -44,7 +44,7 @@ public final class HalanaAndAlenaPartners extends CardImpl {
// At the beginning of combat on your turn, put X +1/+1 counters on another target creature you control, where X is Halana and Alena's power. That creature gains haste until end of turn.
Ability ability = new BeginningOfCombatTriggeredAbility(
new AddCountersTargetEffect(CounterType.P1P1.createInstance(0), xValue)
.setText("put X +1/+1 counters on another target creature you control, where X is {this} power"),
.setText("put X +1/+1 counters on another target creature you control, where X is {this}'s power"),
TargetController.YOU, false
);
ability.addEffect(new GainAbilityTargetEffect(

View file

@ -47,9 +47,10 @@ public final class HenrikaDomnathi extends CardImpl {
// You draw a card and you lose 1 life.
Mode mode = new Mode(new DrawCardSourceControllerEffect(1).setText("you draw a card"));
mode.addEffect(new LoseLifeSourceControllerEffect(1).concatBy("and"));
ability.addMode(mode);
// Transform Henrika Domnathi.
ability.addEffect(new TransformSourceEffect());
ability.addMode(new Mode(new TransformSourceEffect()));
this.addAbility(new TransformAbility());
this.addAbility(ability);
}

View file

@ -21,8 +21,7 @@ import java.util.UUID;
*/
public final class HenrikaInfernalSeer extends CardImpl {
private static final FilterCreaturePermanent filter
= new FilterCreaturePermanent("creature you control with flying, deathtouch, and/or lifelink");
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent();
static {
filter.add(TargetController.YOU.getControllerPredicate());
@ -55,7 +54,7 @@ public final class HenrikaInfernalSeer extends CardImpl {
// {1}{B}{B}: Each creature you control with flying, deathtouch, and/or lifelink gets +1/+0 until end of turn.
this.addAbility(new SimpleActivatedAbility(new BoostAllEffect(
0, 1, Duration.EndOfTurn, filter, false
), new ManaCostsImpl<>("{1}{B}{B}")));
).setText("each creature you control with flying, deathtouch, and/or lifelink gets +1/+0 until end of turn"), new ManaCostsImpl<>("{1}{B}{B}")));
}
private HenrikaInfernalSeer(final HenrikaInfernalSeer card) {

View file

@ -5,6 +5,7 @@ import mage.abilities.ActivatedAbility;
import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.condition.Condition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.costs.common.ExileSourceFromGraveCost;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.hint.ConditionHint;
@ -16,7 +17,7 @@ import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.TimingRule;
import mage.constants.Zone;
import mage.filter.StaticFilters;
import mage.filter.common.FilterEnchantmentPermanent;
import mage.game.permanent.token.SpiritWhiteToken;
import java.util.UUID;
@ -26,8 +27,9 @@ import java.util.UUID;
*/
public final class HeronBlessedGeist extends CardImpl {
private static final Condition condition
= new PermanentsOnTheBattlefieldCondition(StaticFilters.FILTER_ENCHANTMENT_PERMANENT);
private static final Condition condition = new PermanentsOnTheBattlefieldCondition(
new FilterEnchantmentPermanent("you control an enchantment and only as a sorcery")
);
private static final Hint hint = new ConditionHint(condition, "You control an enchantment");
public HeronBlessedGeist(UUID ownerId, CardSetInfo setInfo) {
@ -45,6 +47,7 @@ public final class HeronBlessedGeist extends CardImpl {
Zone.GRAVEYARD, new CreateTokenEffect(new SpiritWhiteToken(), 2),
new ManaCostsImpl<>("{3}{W}"), condition
);
ability.addCost(new ExileSourceFromGraveCost());
ability.setTiming(TimingRule.SORCERY);
this.addAbility(ability.addHint(hint));
}

View file

@ -2,13 +2,13 @@ package mage.cards.h;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.ActivateAsSorceryActivatedAbility;
import mage.abilities.common.AttacksTriggeredAbility;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.dynamicvalue.DynamicValue;
import mage.abilities.dynamicvalue.common.DomainValue;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.search.SearchLibraryPutInHandEffect;
import mage.abilities.effects.common.search.SearchLibraryPutInPlayEffect;
import mage.abilities.hint.common.DomainHint;
import mage.cards.Card;
import mage.cards.CardImpl;
@ -52,12 +52,12 @@ public final class HiveheartShaman extends CardImpl {
this.toughness = new MageInt(5);
// Whenever Hiveheart Shaman attacks, you may search your library for a basic land card that doesn't share a land type with a land you control, put that card onto the battlefield, then shuffle.
this.addAbility(new AttacksTriggeredAbility(new SearchLibraryPutInHandEffect(
new TargetCardInLibrary(filter), true, true
)));
this.addAbility(new AttacksTriggeredAbility(
new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(filter)), true
));
// {5}{G}: Create a 1/1 green Insect creature token. Put X +1/+1 counters on it, where X is the number of basic land types among lands you control. Activate only as a sorcery.
this.addAbility(new SimpleActivatedAbility(
this.addAbility(new ActivateAsSorceryActivatedAbility(
new HiveheartShamanEffect(), new ManaCostsImpl<>("{5}{G}")
).addHint(DomainHint.instance));
}

View file

@ -34,7 +34,7 @@ public final class HoneymoonHearse extends CardImpl {
this.addAbility(new SimpleActivatedAbility(
new AddCardTypeSourceEffect(
Duration.EndOfTurn, CardType.ARTIFACT, CardType.CREATURE
),
).setText("{this} becomes an artifact creature until end of turn"),
new TapTargetCost(new TargetControlledPermanent(
2, StaticFilters.FILTER_CONTROLLED_UNTAPPED_CREATURES
))

View file

@ -31,9 +31,7 @@ public final class HuntmasterOfTheFells extends CardImpl {
this.toughness = new MageInt(2);
// Whenever this creature enters the battlefield or transforms into Huntmaster of the Fells, create a 2/2 green Wolf creature token and you gain 2 life.
Ability ability = new TransformsOrEntersTriggeredAbility(
new CreateTokenEffect(new WolfToken()), false, true
);
Ability ability = new TransformsOrEntersTriggeredAbility(new CreateTokenEffect(new WolfToken()), false);
ability.addEffect(new GainLifeEffect(2).concatBy("and"));
this.addAbility(ability);

View file

@ -33,7 +33,7 @@ public final class LanternFlare extends CardImpl {
// Lantern Flare deals X damage to target creature or planeswalker and you gain X life. [X is the number of creatures you control.]
this.getSpellAbility().addEffect(new DamageTargetEffect(
CreaturesYouControlCount.instance
).setText("deals X damage to target creature or planeswalker"));
).setText("{this} deals X damage to target creature or planeswalker"));
this.getSpellAbility().addEffect(new GainLifeEffect(
CreaturesYouControlCount.instance,
"and you gain X life. [X is the number of creatures you control.]"

View file

@ -2,6 +2,7 @@ package mage.cards.m;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.common.delayed.ReflexiveTriggeredAbility;
import mage.abilities.effects.PreventionEffectImpl;
@ -33,7 +34,7 @@ public final class MagmaPummeler extends CardImpl {
this.toughness = new MageInt(0);
// Magma Pummeler enters the battlefield with X +1/+1 counters on it.
this.addAbility(new SimpleStaticAbility(new EntersBattlefieldWithXCountersEffect(CounterType.P1P1.createInstance())));
this.addAbility(new EntersBattlefieldAbility(new EntersBattlefieldWithXCountersEffect(CounterType.P1P1.createInstance())));
// If damage would be dealt to Magma Pummeler while it has a +1/+1 counter on it, prevent that damage and remove that many +1/+1 counters from it. When one or more counters are removed from Magma Pummeler this way, it deals that much damage to any target.
this.addAbility(new SimpleStaticAbility(new MagmaPummelerEffect()));

View file

@ -34,7 +34,7 @@ public final class MirrorhallMimic extends CardImpl {
this.addAbility(new EntersBattlefieldAbility(new CopyPermanentEffect(
StaticFilters.FILTER_PERMANENT_CREATURE, new MirrorhallMimicApplier()
), true, null, "You may have {this} enter the battlefield as a copy of " +
"any creature on the battlefield, except it's a Spirit in addition to its other types", null));
"any creature on the battlefield, except it's a Spirit in addition to its other types.", null));
// Disturb {3}{U}{U}
this.addAbility(new DisturbAbility(this, "{3}{U}{U}"));

View file

@ -34,7 +34,7 @@ public final class PanickedBystander extends CardImpl {
// Whenever Panicked Bystander or another creature you control dies, you gain 1 life.
this.addAbility(new DiesThisOrAnotherCreatureTriggeredAbility(
new GainLifeEffect(1), false, StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE
new GainLifeEffect(1), false, StaticFilters.FILTER_CONTROLLED_CREATURE
));
// At the beginning of your end step, if you gained 3 or more life this turn, transform Panicked Bystander.

View file

@ -20,7 +20,7 @@ public final class PointedDiscussion extends CardImpl {
// You draw two cards, lose 2 life, then create a Blood token.
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(2).setText("you draw two cards"));
this.getSpellAbility().addEffect(new LoseLifeSourceControllerEffect(2).concatBy(","));
this.getSpellAbility().addEffect(new LoseLifeSourceControllerEffect(2).setText(", lose 2 life"));
this.getSpellAbility().addEffect(new CreateTokenEffect(new BloodToken()).concatBy(", then"));
}

View file

@ -30,7 +30,7 @@ public final class RestlessBloodseeker extends CardImpl {
private static final Condition condition = new YouGainedLifeCondition(ComparisonType.MORE_THAN, 0);
private static final Hint hint = new ConditionHint(condition, "You gained life this turn");
private static final FilterControlledPermanent filter
= new FilterControlledPermanent(SubType.BLOOD, "Blood token");
= new FilterControlledPermanent(SubType.BLOOD, "Blood tokens");
static {
filter.add(TokenPredicate.TRUE);

View file

@ -41,7 +41,7 @@ public final class RunoStromkirk extends CardImpl {
// When Runo Stromkirk enters the battlefield, put up to one target creature card from your graveyard on top of your library.
Ability ability = new EntersBattlefieldTriggeredAbility(new PutOnLibraryTargetEffect(true));
ability.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD));
ability.addTarget(new TargetCardInYourGraveyard(0, 1, StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD));
this.addAbility(ability);
// At the beginning of your upkeep, look at the top card of your library. You may reveal that card. If a creature card with mana value 6 or greater is revealed this way, transform Runo Stromkirk.

View file

@ -42,7 +42,7 @@ public final class SanguineStatuette extends CardImpl {
.withSubType(SubType.VAMPIRE)
.withAbility(HasteAbility.getInstance()),
"", Duration.EndOfTurn
), filter, false, true));
).setText("have {this} become a 3/3 Vampire artifact creature with haste until end of turn"), filter, false, true));
}
private SanguineStatuette(final SanguineStatuette card) {

View file

@ -23,7 +23,7 @@ import java.util.UUID;
public final class SawbladeSlinger extends CardImpl {
private static final FilterPermanent filter = new FilterArtifactPermanent("artifact an opponent controls");
private static final FilterPermanent filter2 = new FilterPermanent(SubType.ZOMBIE, "Zombie and opponent controls");
private static final FilterPermanent filter2 = new FilterPermanent(SubType.ZOMBIE, "Zombie an opponent controls");
static {
filter.add(TargetController.OPPONENT.getControllerPredicate());

View file

@ -24,7 +24,7 @@ import mage.filter.common.FilterControlledPermanent;
*/
public final class SpikedRipsaw extends CardImpl {
private static final FilterControlledPermanent filter = new FilterControlledPermanent(SubType.FOREST, "forest");
private static final FilterControlledPermanent filter = new FilterControlledPermanent(SubType.FOREST, "Forest");
public SpikedRipsaw(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{2}{G}");

View file

@ -9,7 +9,8 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.SubType;
import mage.filter.StaticFilters;
import mage.filter.FilterPermanent;
import mage.filter.common.FilterEnchantmentPermanent;
import java.util.UUID;
@ -18,6 +19,8 @@ import java.util.UUID;
*/
public final class SteelcladSpirit extends CardImpl {
private static final FilterPermanent filter = new FilterEnchantmentPermanent("an enchantment");
public SteelcladSpirit(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}");
@ -30,8 +33,7 @@ public final class SteelcladSpirit extends CardImpl {
// Whenever an enchantment enters the battlefield under your control, Steelclad Spirit can attack this turn as though it didn't have defender.
this.addAbility(new EntersBattlefieldControlledTriggeredAbility(
new CanAttackAsThoughItDidntHaveDefenderSourceEffect(Duration.EndOfTurn),
StaticFilters.FILTER_ENCHANTMENT_PERMANENT
new CanAttackAsThoughItDidntHaveDefenderSourceEffect(Duration.EndOfTurn), filter
));
}

View file

@ -1,7 +1,7 @@
package mage.cards.s;
import mage.abilities.Ability;
import mage.abilities.common.BeginningOfUpkeepTriggeredAbility;
import mage.abilities.common.BeginningOfEndStepTriggeredAbility;
import mage.abilities.common.delayed.ReflexiveTriggeredAbility;
import mage.abilities.condition.Condition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
@ -47,7 +47,7 @@ public final class StensiaUprising extends CardImpl {
new DamageTargetEffect(7), false, "{this} deals 7 damage to any target"
);
reflexiveTrigger.addTarget(new TargetAnyTarget());
Ability ability = new BeginningOfUpkeepTriggeredAbility(
Ability ability = new BeginningOfEndStepTriggeredAbility(
new CreateTokenEffect(new RedHumanToken()), TargetController.YOU, false
);
ability.addEffect(new ConditionalOneShotEffect(

View file

@ -1,19 +1,19 @@
package mage.cards.s;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.BecomesTargetTriggeredAbility;
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.constants.SubType;
import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.TargetController;
import mage.filter.FilterSpell;
import java.util.UUID;
/**
*
* @author weirddan455
*/
public final class StormchaserDrake extends CardImpl {
@ -35,7 +35,9 @@ public final class StormchaserDrake extends CardImpl {
this.addAbility(FlyingAbility.getInstance());
// Whenever Stormchaser Drake becomes the target of a spell you control, draw a card.
this.addAbility(new BecomesTargetTriggeredAbility(new DrawCardSourceControllerEffect(1), filter));
this.addAbility(new BecomesTargetTriggeredAbility(
new DrawCardSourceControllerEffect(1), filter
).setTriggerPhrase("Whenever {this} becomes the target of a spell you control, "));
}
private StormchaserDrake(final StormchaserDrake card) {

View file

@ -44,7 +44,7 @@ public final class SupernaturalRescue extends CardImpl {
Zone.ALL,
new ConditionalContinuousEffect(new GainAbilitySourceEffect(
FlashAbility.getInstance(), Duration.WhileOnBattlefield, true
), condition, "{this} has flash as long as you control a Merfolk")
), condition, "this spell has flash as long as you control a Spirit")
).setRuleAtTheTop(true).addHint(hint));
// When you cast this spell, tap up to two target creatures you don't control.

View file

@ -32,7 +32,7 @@ public final class UlrichOfTheKrallenhorde extends CardImpl {
// Whenever this creature enters the battlefield or transforms into Ulrich of the Krallenhorde, target creature gets +4/+4 until end of turn.
Ability ability = new TransformsOrEntersTriggeredAbility(
new BoostTargetEffect(4, 4), false, true
new BoostTargetEffect(4, 4), false
);
ability.addTarget(new TargetCreaturePermanent());
this.addAbility(ability);

View file

@ -38,7 +38,7 @@ public final class UndeadButler extends CardImpl {
);
ability.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD));
this.addAbility(new DiesSourceTriggeredAbility(new DoWhenCostPaid(
ability, new ExileSourceFromGraveCost(), "Exile {this}?"
ability, new ExileSourceFromGraveCost().setText("exile it"), "Exile {this}?"
)));
}

View file

@ -27,9 +27,9 @@ public final class VoldarenEpicure extends CardImpl {
this.toughness = new MageInt(1);
// When Voldaren Epicure enters the battlefield, it deals 1 damage to each opponent. Create a Blood token.
Ability ability = new EntersBattlefieldTriggeredAbility(
new DamagePlayersEffect(1, TargetController.OPPONENT)
);
Ability ability = new EntersBattlefieldTriggeredAbility(new DamagePlayersEffect(
1, TargetController.OPPONENT, "it"
));
ability.addEffect(new CreateTokenEffect(new BloodToken()));
this.addAbility(ability);
}

View file

@ -22,8 +22,8 @@ public final class WitchsWeb extends CardImpl {
// Target creature gets +3/+3 and gains reach until end of turn. Untap it.
this.getSpellAbility().addEffect(new BoostTargetEffect(
1, 2, Duration.EndOfTurn
).setText("Target creature gets +1/+2"));
3, 3, Duration.EndOfTurn
).setText("Target creature gets +3/+3"));
this.getSpellAbility().addEffect(new GainAbilityTargetEffect(
ReachAbility.getInstance(), Duration.EndOfTurn
).setText("and gains reach until end of turn"));

View file

@ -18,7 +18,7 @@ import java.util.UUID;
*/
public final class WretchedThrong extends CardImpl {
private static final FilterCard filter = new FilterCard("a card name Wretched Throng");
private static final FilterCard filter = new FilterCard("a card named Wretched Throng");
static {
filter.add(new NamePredicate("Wretched Throng"));

View file

@ -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 = "SLD"; // check all abilities and output cards with wrong abilities texts;
private static final String FULL_ABILITIES_CHECK_SET_CODE = "VOW"; // 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
@ -1581,9 +1581,8 @@ public class VerifyCardDataTest {
refText = refText.substring(1, refText.length() - 1);
}
// planeswalker fix [-7]: xxx
if (refText.contains("[") && refText.contains("]")) {
refText = refText.replace("[", "").replace("]", "");
}
refText = refText.replaceAll("\\[([\\\\+]?\\d*)\\]\\: ", "$1: ");
// evergreen keyword fix
for (String s : refText.split("[\\$\\\n]")) {
if (Arrays

View file

@ -10,7 +10,6 @@ import mage.constants.Zone;
import mage.util.CardUtil;
/**
*
* @author LevelX2
*/
public class PayMoreToCastAsThoughtItHadFlashAbility extends SpellAbility {
@ -42,7 +41,7 @@ public class PayMoreToCastAsThoughtItHadFlashAbility extends SpellAbility {
@Override
public String getRule() {
return "You may cast {this} as though it had flash if you pay " + costsToAdd.getText() + " more to cast it. <i>(You may cast it any time you could cast an instant.)</i>";
return "You may cast this spell as though it had flash if you pay " + costsToAdd.getText() + " more to cast it. <i>(You may cast it any time you could cast an instant.)</i>";
}
}

View file

@ -53,6 +53,6 @@ public class TransformIntoSourceTriggeredAbility extends TriggeredAbilityImpl {
@Override
public String getTriggerPhrase() {
return "When" + (whenever ? "ever" : "") + " this creature transforms into this {this}, ";
return "When" + (whenever ? "ever" : "") + " this creature transforms into {this}, ";
}
}

View file

@ -12,20 +12,12 @@ import mage.game.permanent.Permanent;
*/
public class TransformsOrEntersTriggeredAbility extends TriggeredAbilityImpl {
private final boolean whenever;
public TransformsOrEntersTriggeredAbility(Effect effect, boolean optional) {
this(effect, optional, false);
}
public TransformsOrEntersTriggeredAbility(Effect effect, boolean optional, boolean whenever) {
super(Zone.BATTLEFIELD, effect, optional);
this.whenever = whenever;
}
private TransformsOrEntersTriggeredAbility(final TransformsOrEntersTriggeredAbility ability) {
super(ability);
this.whenever = ability.whenever;
}
@Override
@ -56,6 +48,6 @@ public class TransformsOrEntersTriggeredAbility extends TriggeredAbilityImpl {
@Override
public String getTriggerPhrase() {
return "When" + (whenever ? "ever" : "") + " this creature enters the battlefield or transforms into {this}, ";
return "Whenever this creature enters the battlefield or transforms into {this}, ";
}
}

View file

@ -17,7 +17,7 @@ import mage.players.Player;
public class ExileSourceFromGraveCost extends CostImpl {
public ExileSourceFromGraveCost() {
this.text = "Exile {this} from your graveyard";
this.text = "exile {this} from your graveyard";
}
public ExileSourceFromGraveCost(ExileSourceFromGraveCost cost) {

View file

@ -7,6 +7,8 @@ import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.target.targetpointer.FixedTarget;
import java.util.Locale;
/**
* @author BetaSteward_at_googlemail.com
*/
@ -115,7 +117,7 @@ public class GainAbilityAttachedEffect extends ContinuousEffectImpl {
private void setText() {
StringBuilder sb = new StringBuilder();
sb.append(attachmentType.verb());
sb.append(attachmentType.verb().toLowerCase());
sb.append(" " + targetObjectName + " ");
if (duration == Duration.WhileOnBattlefield) {
sb.append("has ");