[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 { 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 { static {
filter.add(AnjeMaidOfDishonorPredicate.instance); 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. // {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 ability = new SimpleActivatedAbility(new BallistaWielderEffect(), new ManaCostsImpl<>("{2}{R}"));
ability.addCost(new TapSourceCost());
ability.addTarget(new TargetAnyTarget()); ability.addTarget(new TargetAnyTarget());
this.addAbility(ability); this.addAbility(ability);

View file

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

View file

@ -52,9 +52,9 @@ public final class BloodtitheHarvester extends CardImpl {
this.addAbility(new EntersBattlefieldTriggeredAbility(new CreateTokenEffect(new BloodToken()))); 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. // {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( Ability ability = new ActivateAsSorceryActivatedAbility(new BoostTargetEffect(
new BoostTargetEffect(xValue, xValue, Duration.EndOfTurn), new TapSourceCost() 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.addCost(new SacrificeSourceCost());
ability.addTarget(new TargetCreaturePermanent()); ability.addTarget(new TargetCreaturePermanent());
this.addAbility(ability.addHint(hint)); this.addAbility(ability.addHint(hint));

View file

@ -89,6 +89,6 @@ class BrineComberTriggeredAbility extends TriggeredAbilityImpl {
@Override @Override
public String getRule() { public String getRule() {
return "Whenever {this} enters the battlefield or becomes the target " + 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 @Override
public String getRule() { public String getRule() {
return "Whenever {this} enters the battlefield or enchanted creature becomes the target " + 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. // 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( Ability ability = new TransformsOrEntersTriggeredAbility(
new ExileUntilSourceLeavesEffect("creature an opponent controls"), false new ExileUntilSourceLeavesEffect("creature an opponent controls"), false
); ).setTriggerPhrase("Whenever this creature enters the battlefield or transforms into {this}, ");
ability.addTarget(new TargetOpponentsCreaturePermanent()); ability.addTarget(new TargetOpponentsCreaturePermanent());
ability.addEffect(new CreateDelayedTriggeredAbilityEffect(new OnLeaveReturnExiledToBattlefieldAbility())); ability.addEffect(new CreateDelayedTriggeredAbilityEffect(new OnLeaveReturnExiledToBattlefieldAbility()));
this.addAbility(ability); 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. // Whenever Cackling Culprit or another creature you control dies, you gain 1 life.
this.addAbility(new DiesThisOrAnotherCreatureTriggeredAbility( 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. // {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. // Discard your hand, then draw a card for each card you've discarded this turn.
this.getSpellAbility().addEffect(new DiscardHandControllerEffect()); 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()); this.getSpellAbility().addWatcher(new DiscardedCardWatcher());
} }

View file

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

View file

@ -33,7 +33,7 @@ public final class CrashingTide extends CardImpl {
this.addAbility(new SimpleStaticAbility(Zone.ALL, this.addAbility(new SimpleStaticAbility(Zone.ALL,
new ConditionalContinuousEffect(new GainAbilitySourceEffect(FlashAbility.getInstance(), Duration.WhileOnBattlefield, true), new ConditionalContinuousEffect(new GainAbilitySourceEffect(FlashAbility.getInstance(), Duration.WhileOnBattlefield, true),
new PermanentsOnTheBattlefieldCondition(filter), 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. // Return target creature to it's owner's hand.
this.getSpellAbility().addEffect(new ReturnToHandTargetEffect()); 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. // {R}{R}: Deadly Dancer and another target creature each get +1/+0 until end of turn.
Ability ability = new SimpleActivatedAbility(new BoostSourceEffect( Ability ability = new SimpleActivatedAbility(new BoostSourceEffect(
1, 0, Duration.EndOfTurn 1, 0, Duration.EndOfTurn
).setText("{this} and another target creature"), new ManaCostsImpl<>("{R}{R}")); ).setText("{this}"), new ManaCostsImpl<>("{R}{R}"));
ability.addEffect(new BoostTargetEffect(1, 0).setText("each get +1/+0 until end of turn")); ability.addEffect(new BoostTargetEffect(1, 0)
.setText("and another target creature each get +1/+0 until end of turn"));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -9,9 +9,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.filter.FilterPermanent; import mage.filter.StaticFilters;
import mage.filter.common.FilterControlledCreaturePermanent;
import mage.filter.predicate.mageobject.AnotherPredicate;
import java.util.UUID; import java.util.UUID;
@ -20,13 +18,6 @@ import java.util.UUID;
*/ */
public final class DesperateFarmer extends CardImpl { 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) { public DesperateFarmer(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}"); 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. // When another creature you control dies, transform Desperate Farmer.
this.addAbility(new TransformAbility()); 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) { private DesperateFarmer(final DesperateFarmer card) {

View file

@ -1,7 +1,7 @@
package mage.cards.d; package mage.cards.d;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.ActivateAsSorceryActivatedAbility;
import mage.abilities.common.SimpleStaticAbility; import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.costs.common.ExileFromGraveCost; import mage.abilities.costs.common.ExileFromGraveCost;
import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.common.TapSourceCost;
@ -36,7 +36,9 @@ public final class DollhouseOfHorrors extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{5}"); 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. // {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 TapSourceCost());
ability.addCost(new ExileFromGraveCost(new TargetCardInYourGraveyard( ability.addCost(new ExileFromGraveCost(new TargetCardInYourGraveyard(
StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD 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. // When Dorothea, Vengeful Victim attacks or blocks, sacrifice it at end of combat.
this.addAbility(new AttacksOrBlocksTriggeredAbility(new CreateDelayedTriggeredAbilityEffect( this.addAbility(new AttacksOrBlocksTriggeredAbility(new CreateDelayedTriggeredAbilityEffect(
new AtTheEndOfCombatDelayedTriggeredAbility(new SacrificeSourceEffect()) new AtTheEndOfCombatDelayedTriggeredAbility(new SacrificeSourceEffect())
), false)); ).setText("sacrifice it at end of combat"), false));
// Disturb {1}{W}{U} // Disturb {1}{W}{U}
this.addAbility(new DisturbAbility(this, "{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) { public DreadFugueEffect(FilterCard filter) {
super(Outcome.Discard); super(Outcome.Discard);
this.filter = filter; 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) { private DreadFugueEffect(final DreadFugueEffect effect) {

View file

@ -13,7 +13,6 @@ import mage.constants.Zone;
import mage.filter.StaticFilters; import mage.filter.StaticFilters;
import mage.game.Game; import mage.game.Game;
import mage.game.events.GameEvent; import mage.game.events.GameEvent;
import mage.target.common.TargetCardInGraveyard;
import mage.target.common.TargetCardInYourGraveyard; import mage.target.common.TargetCardInYourGraveyard;
import java.util.UUID; import java.util.UUID;
@ -28,7 +27,7 @@ public final class EdgarsAwakening extends CardImpl {
// Return target creature card from your graveyard to the battlefield. // Return target creature card from your graveyard to the battlefield.
this.getSpellAbility().addEffect(new ReturnFromGraveyardToBattlefieldTargetEffect()); 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. // 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()); 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. // When Fell Stinger exploits a creature, target player draws two cards and loses 2 life.
Ability ability = new ExploitCreatureTriggeredAbility(new DrawCardTargetEffect(2)); 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()); ability.addTarget(new TargetPlayer());
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -50,7 +50,7 @@ public final class GeralfVisionaryStitcher extends CardImpl {
// Zombies you control have flying. // Zombies you control have flying.
this.addAbility(new SimpleStaticAbility(new GainAbilityControlledEffect(FlyingAbility.getInstance(), Duration.WhileOnBattlefield, filter))); 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 ability = new SimpleActivatedAbility(new GeralfVisionaryStitcherEffect(), new ManaCostsImpl<>("{U}"));
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());
ability.addCost(new SacrificeTargetCost(filter2)); ability.addCost(new SacrificeTargetCost(filter2));
@ -71,7 +71,7 @@ class GeralfVisionaryStitcherEffect extends OneShotEffect {
public GeralfVisionaryStitcherEffect() { public GeralfVisionaryStitcherEffect() {
super(Outcome.PutCreatureInPlay); 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) { private GeralfVisionaryStitcherEffect(final GeralfVisionaryStitcherEffect effect) {
@ -89,7 +89,7 @@ class GeralfVisionaryStitcherEffect extends OneShotEffect {
for (Cost cost : source.getCosts()) { for (Cost cost : source.getCosts()) {
if (cost instanceof SacrificeTargetCost) { if (cost instanceof SacrificeTargetCost) {
for (Permanent permanent : ((SacrificeTargetCost) cost).getPermanents()) { 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. // Creatures you control get +1/+1 and gain trample until end of turn.
Ability ability = new BeginningOfCombatTriggeredAbility(new BoostControlledEffect( Ability ability = new BeginningOfCombatTriggeredAbility(new BoostControlledEffect(
1, 1, Duration.EndOfTurn 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( ability.addEffect(new GainAbilityControlledEffect(
TrampleAbility.getInstance(), Duration.EndOfTurn, TrampleAbility.getInstance(), Duration.EndOfTurn,
StaticFilters.FILTER_PERMANENT_CREATURE 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. // 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( Ability ability = new BeginningOfCombatTriggeredAbility(
new AddCountersTargetEffect(CounterType.P1P1.createInstance(0), xValue) 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 TargetController.YOU, false
); );
ability.addEffect(new GainAbilityTargetEffect( 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. // You draw a card and you lose 1 life.
Mode mode = new Mode(new DrawCardSourceControllerEffect(1).setText("you draw a card")); Mode mode = new Mode(new DrawCardSourceControllerEffect(1).setText("you draw a card"));
mode.addEffect(new LoseLifeSourceControllerEffect(1).concatBy("and")); mode.addEffect(new LoseLifeSourceControllerEffect(1).concatBy("and"));
ability.addMode(mode);
// Transform Henrika Domnathi. // Transform Henrika Domnathi.
ability.addEffect(new TransformSourceEffect()); ability.addMode(new Mode(new TransformSourceEffect()));
this.addAbility(new TransformAbility()); this.addAbility(new TransformAbility());
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -21,8 +21,7 @@ import java.util.UUID;
*/ */
public final class HenrikaInfernalSeer extends CardImpl { public final class HenrikaInfernalSeer extends CardImpl {
private static final FilterCreaturePermanent filter private static final FilterCreaturePermanent filter = new FilterCreaturePermanent();
= new FilterCreaturePermanent("creature you control with flying, deathtouch, and/or lifelink");
static { static {
filter.add(TargetController.YOU.getControllerPredicate()); 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. // {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( this.addAbility(new SimpleActivatedAbility(new BoostAllEffect(
0, 1, Duration.EndOfTurn, filter, false 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) { private HenrikaInfernalSeer(final HenrikaInfernalSeer card) {

View file

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

View file

@ -2,13 +2,13 @@ package mage.cards.h;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.ActivateAsSorceryActivatedAbility;
import mage.abilities.common.AttacksTriggeredAbility; import mage.abilities.common.AttacksTriggeredAbility;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.dynamicvalue.DynamicValue; import mage.abilities.dynamicvalue.DynamicValue;
import mage.abilities.dynamicvalue.common.DomainValue; import mage.abilities.dynamicvalue.common.DomainValue;
import mage.abilities.effects.OneShotEffect; 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.abilities.hint.common.DomainHint;
import mage.cards.Card; import mage.cards.Card;
import mage.cards.CardImpl; import mage.cards.CardImpl;
@ -52,12 +52,12 @@ public final class HiveheartShaman extends CardImpl {
this.toughness = new MageInt(5); 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. // 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( this.addAbility(new AttacksTriggeredAbility(
new TargetCardInLibrary(filter), true, true 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. // {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}") new HiveheartShamanEffect(), new ManaCostsImpl<>("{5}{G}")
).addHint(DomainHint.instance)); ).addHint(DomainHint.instance));
} }

View file

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

View file

@ -31,9 +31,7 @@ public final class HuntmasterOfTheFells extends CardImpl {
this.toughness = new MageInt(2); 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. // 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( Ability ability = new TransformsOrEntersTriggeredAbility(new CreateTokenEffect(new WolfToken()), false);
new CreateTokenEffect(new WolfToken()), false, true
);
ability.addEffect(new GainLifeEffect(2).concatBy("and")); ability.addEffect(new GainLifeEffect(2).concatBy("and"));
this.addAbility(ability); 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.] // 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( this.getSpellAbility().addEffect(new DamageTargetEffect(
CreaturesYouControlCount.instance 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( this.getSpellAbility().addEffect(new GainLifeEffect(
CreaturesYouControlCount.instance, CreaturesYouControlCount.instance,
"and you gain X life. [X is the number of creatures you control.]" "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.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldAbility;
import mage.abilities.common.SimpleStaticAbility; import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.common.delayed.ReflexiveTriggeredAbility; import mage.abilities.common.delayed.ReflexiveTriggeredAbility;
import mage.abilities.effects.PreventionEffectImpl; import mage.abilities.effects.PreventionEffectImpl;
@ -33,7 +34,7 @@ public final class MagmaPummeler extends CardImpl {
this.toughness = new MageInt(0); this.toughness = new MageInt(0);
// Magma Pummeler enters the battlefield with X +1/+1 counters on it. // 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. // 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())); this.addAbility(new SimpleStaticAbility(new MagmaPummelerEffect()));

View file

@ -34,7 +34,7 @@ public final class MirrorhallMimic extends CardImpl {
this.addAbility(new EntersBattlefieldAbility(new CopyPermanentEffect( this.addAbility(new EntersBattlefieldAbility(new CopyPermanentEffect(
StaticFilters.FILTER_PERMANENT_CREATURE, new MirrorhallMimicApplier() StaticFilters.FILTER_PERMANENT_CREATURE, new MirrorhallMimicApplier()
), true, null, "You may have {this} enter the battlefield as a copy of " + ), 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} // Disturb {3}{U}{U}
this.addAbility(new DisturbAbility(this, "{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. // Whenever Panicked Bystander or another creature you control dies, you gain 1 life.
this.addAbility(new DiesThisOrAnotherCreatureTriggeredAbility( 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. // 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. // 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 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")); 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 Condition condition = new YouGainedLifeCondition(ComparisonType.MORE_THAN, 0);
private static final Hint hint = new ConditionHint(condition, "You gained life this turn"); private static final Hint hint = new ConditionHint(condition, "You gained life this turn");
private static final FilterControlledPermanent filter private static final FilterControlledPermanent filter
= new FilterControlledPermanent(SubType.BLOOD, "Blood token"); = new FilterControlledPermanent(SubType.BLOOD, "Blood tokens");
static { static {
filter.add(TokenPredicate.TRUE); 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. // 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 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); 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. // 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) .withSubType(SubType.VAMPIRE)
.withAbility(HasteAbility.getInstance()), .withAbility(HasteAbility.getInstance()),
"", Duration.EndOfTurn "", 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) { private SanguineStatuette(final SanguineStatuette card) {

View file

@ -23,7 +23,7 @@ import java.util.UUID;
public final class SawbladeSlinger extends CardImpl { public final class SawbladeSlinger extends CardImpl {
private static final FilterPermanent filter = new FilterArtifactPermanent("artifact an opponent controls"); 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 { static {
filter.add(TargetController.OPPONENT.getControllerPredicate()); filter.add(TargetController.OPPONENT.getControllerPredicate());

View file

@ -24,7 +24,7 @@ import mage.filter.common.FilterControlledPermanent;
*/ */
public final class SpikedRipsaw extends CardImpl { 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) { public SpikedRipsaw(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{2}{G}"); 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.CardType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.constants.SubType; import mage.constants.SubType;
import mage.filter.StaticFilters; import mage.filter.FilterPermanent;
import mage.filter.common.FilterEnchantmentPermanent;
import java.util.UUID; import java.util.UUID;
@ -18,6 +19,8 @@ import java.util.UUID;
*/ */
public final class SteelcladSpirit extends CardImpl { public final class SteelcladSpirit extends CardImpl {
private static final FilterPermanent filter = new FilterEnchantmentPermanent("an enchantment");
public SteelcladSpirit(UUID ownerId, CardSetInfo setInfo) { public SteelcladSpirit(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}"); 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. // 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( this.addAbility(new EntersBattlefieldControlledTriggeredAbility(
new CanAttackAsThoughItDidntHaveDefenderSourceEffect(Duration.EndOfTurn), new CanAttackAsThoughItDidntHaveDefenderSourceEffect(Duration.EndOfTurn), filter
StaticFilters.FILTER_ENCHANTMENT_PERMANENT
)); ));
} }

View file

@ -1,7 +1,7 @@
package mage.cards.s; package mage.cards.s;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; import mage.abilities.common.BeginningOfEndStepTriggeredAbility;
import mage.abilities.common.delayed.ReflexiveTriggeredAbility; import mage.abilities.common.delayed.ReflexiveTriggeredAbility;
import mage.abilities.condition.Condition; import mage.abilities.condition.Condition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition; 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" new DamageTargetEffect(7), false, "{this} deals 7 damage to any target"
); );
reflexiveTrigger.addTarget(new TargetAnyTarget()); reflexiveTrigger.addTarget(new TargetAnyTarget());
Ability ability = new BeginningOfUpkeepTriggeredAbility( Ability ability = new BeginningOfEndStepTriggeredAbility(
new CreateTokenEffect(new RedHumanToken()), TargetController.YOU, false new CreateTokenEffect(new RedHumanToken()), TargetController.YOU, false
); );
ability.addEffect(new ConditionalOneShotEffect( ability.addEffect(new ConditionalOneShotEffect(

View file

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

View file

@ -44,7 +44,7 @@ public final class SupernaturalRescue extends CardImpl {
Zone.ALL, Zone.ALL,
new ConditionalContinuousEffect(new GainAbilitySourceEffect( new ConditionalContinuousEffect(new GainAbilitySourceEffect(
FlashAbility.getInstance(), Duration.WhileOnBattlefield, true 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)); ).setRuleAtTheTop(true).addHint(hint));
// When you cast this spell, tap up to two target creatures you don't control. // 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. // 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( Ability ability = new TransformsOrEntersTriggeredAbility(
new BoostTargetEffect(4, 4), false, true new BoostTargetEffect(4, 4), false
); );
ability.addTarget(new TargetCreaturePermanent()); ability.addTarget(new TargetCreaturePermanent());
this.addAbility(ability); 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)); ability.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD));
this.addAbility(new DiesSourceTriggeredAbility(new DoWhenCostPaid( 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); this.toughness = new MageInt(1);
// When Voldaren Epicure enters the battlefield, it deals 1 damage to each opponent. Create a Blood token. // When Voldaren Epicure enters the battlefield, it deals 1 damage to each opponent. Create a Blood token.
Ability ability = new EntersBattlefieldTriggeredAbility( Ability ability = new EntersBattlefieldTriggeredAbility(new DamagePlayersEffect(
new DamagePlayersEffect(1, TargetController.OPPONENT) 1, TargetController.OPPONENT, "it"
); ));
ability.addEffect(new CreateTokenEffect(new BloodToken())); ability.addEffect(new CreateTokenEffect(new BloodToken()));
this.addAbility(ability); 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. // Target creature gets +3/+3 and gains reach until end of turn. Untap it.
this.getSpellAbility().addEffect(new BoostTargetEffect( this.getSpellAbility().addEffect(new BoostTargetEffect(
1, 2, Duration.EndOfTurn 3, 3, Duration.EndOfTurn
).setText("Target creature gets +1/+2")); ).setText("Target creature gets +3/+3"));
this.getSpellAbility().addEffect(new GainAbilityTargetEffect( this.getSpellAbility().addEffect(new GainAbilityTargetEffect(
ReachAbility.getInstance(), Duration.EndOfTurn ReachAbility.getInstance(), Duration.EndOfTurn
).setText("and gains reach until end of turn")); ).setText("and gains reach until end of turn"));

View file

@ -18,7 +18,7 @@ import java.util.UUID;
*/ */
public final class WretchedThrong extends CardImpl { 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 { static {
filter.add(new NamePredicate("Wretched Throng")); 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 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 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 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); refText = refText.substring(1, refText.length() - 1);
} }
// planeswalker fix [-7]: xxx // planeswalker fix [-7]: xxx
if (refText.contains("[") && refText.contains("]")) { refText = refText.replaceAll("\\[([\\\\+]?\\d*)\\]\\: ", "$1: ");
refText = refText.replace("[", "").replace("]", "");
}
// evergreen keyword fix // evergreen keyword fix
for (String s : refText.split("[\\$\\\n]")) { for (String s : refText.split("[\\$\\\n]")) {
if (Arrays if (Arrays

View file

@ -10,7 +10,6 @@ import mage.constants.Zone;
import mage.util.CardUtil; import mage.util.CardUtil;
/** /**
*
* @author LevelX2 * @author LevelX2
*/ */
public class PayMoreToCastAsThoughtItHadFlashAbility extends SpellAbility { public class PayMoreToCastAsThoughtItHadFlashAbility extends SpellAbility {
@ -42,7 +41,7 @@ public class PayMoreToCastAsThoughtItHadFlashAbility extends SpellAbility {
@Override @Override
public String getRule() { 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 @Override
public String getTriggerPhrase() { 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 { public class TransformsOrEntersTriggeredAbility extends TriggeredAbilityImpl {
private final boolean whenever;
public TransformsOrEntersTriggeredAbility(Effect effect, boolean optional) { public TransformsOrEntersTriggeredAbility(Effect effect, boolean optional) {
this(effect, optional, false);
}
public TransformsOrEntersTriggeredAbility(Effect effect, boolean optional, boolean whenever) {
super(Zone.BATTLEFIELD, effect, optional); super(Zone.BATTLEFIELD, effect, optional);
this.whenever = whenever;
} }
private TransformsOrEntersTriggeredAbility(final TransformsOrEntersTriggeredAbility ability) { private TransformsOrEntersTriggeredAbility(final TransformsOrEntersTriggeredAbility ability) {
super(ability); super(ability);
this.whenever = ability.whenever;
} }
@Override @Override
@ -56,6 +48,6 @@ public class TransformsOrEntersTriggeredAbility extends TriggeredAbilityImpl {
@Override @Override
public String getTriggerPhrase() { 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 class ExileSourceFromGraveCost extends CostImpl {
public ExileSourceFromGraveCost() { public ExileSourceFromGraveCost() {
this.text = "Exile {this} from your graveyard"; this.text = "exile {this} from your graveyard";
} }
public ExileSourceFromGraveCost(ExileSourceFromGraveCost cost) { public ExileSourceFromGraveCost(ExileSourceFromGraveCost cost) {

View file

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