[TSP] various text fixes

This commit is contained in:
Evan Kranzler 2022-04-01 08:42:38 -04:00
parent 46f98a0f88
commit 24478afbe1
29 changed files with 121 additions and 112 deletions

View file

@ -1,34 +1,32 @@
package mage.cards.a; package mage.cards.a;
import mage.abilities.Ability;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.AsThoughEffectImpl;
import mage.abilities.effects.common.AttachEffect;
import mage.abilities.effects.common.continuous.BoostEnchantedEffect;
import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect;
import mage.abilities.keyword.EnchantAbility;
import mage.abilities.keyword.FlashAbility;
import mage.abilities.keyword.ReachAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.*;
import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.target.TargetPermanent;
import mage.target.common.TargetCreaturePermanent;
import java.util.UUID; import java.util.UUID;
import mage.abilities.StaticAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.AsThoughEffectImpl;
import mage.abilities.effects.common.continuous.BoostEnchantedEffect;
import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect;
import mage.abilities.keyword.ReachAbility;
import mage.constants.*;
import mage.abilities.keyword.FlashAbility;
import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.target.common.TargetCreaturePermanent;
import mage.abilities.Ability;
import mage.abilities.effects.common.AttachEffect;
import mage.target.TargetPermanent;
import mage.abilities.keyword.EnchantAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
/** /**
*
* @author noahg * @author noahg
*/ */
public final class AetherWeb extends CardImpl { public final class AetherWeb extends CardImpl {
public AetherWeb(UUID ownerId, CardSetInfo setInfo) { public AetherWeb(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{G}"); super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{G}");
this.subtype.add(SubType.AURA); this.subtype.add(SubType.AURA);
// Flash // Flash
@ -38,15 +36,15 @@ public final class AetherWeb extends CardImpl {
TargetPermanent auraTarget = new TargetCreaturePermanent(); TargetPermanent auraTarget = new TargetCreaturePermanent();
this.getSpellAbility().addTarget(auraTarget); this.getSpellAbility().addTarget(auraTarget);
this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature)); this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature));
Ability ability = new EnchantAbility(auraTarget.getTargetName()); this.addAbility(new EnchantAbility(auraTarget.getTargetName()));
this.addAbility(ability);
// Enchanted creature gets +1/+1, has reach, and can block creatures with shadow as though they didn't have shadow. // Enchanted creature gets +1/+1, has reach, and can block creatures with shadow as though they didn't have shadow.
StaticAbility staticAbility = new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(1, 1) Ability ability = new SimpleStaticAbility(new BoostEnchantedEffect(1, 1));
.setText("Enchanted creature gets +1/+1, has reach, and can block creatures with shadow as though they didn't have shadow.")); ability.addEffect(new GainAbilityAttachedEffect(
staticAbility.addEffect(new GainAbilityAttachedEffect(ReachAbility.getInstance(), AttachmentType.AURA).setText("")); ReachAbility.getInstance(), AttachmentType.AURA
staticAbility.addEffect(new AetherWebEffect()); ).setText(", has reach"));
this.addAbility(staticAbility); ability.addEffect(new AetherWebEffect());
this.addAbility(ability);
} }
private AetherWeb(final AetherWeb card) { private AetherWeb(final AetherWeb card) {
@ -63,7 +61,7 @@ class AetherWebEffect extends AsThoughEffectImpl {
public AetherWebEffect() { public AetherWebEffect() {
super(AsThoughEffectType.BLOCK_SHADOW, Duration.WhileOnBattlefield, Outcome.Benefit); super(AsThoughEffectType.BLOCK_SHADOW, Duration.WhileOnBattlefield, Outcome.Benefit);
staticText = ""; staticText = ", and can block creatures with shadow as though they didn't have shadow";
} }
public AetherWebEffect(final AetherWebEffect effect) { public AetherWebEffect(final AetherWebEffect effect) {
@ -85,4 +83,4 @@ class AetherWebEffect extends AsThoughEffectImpl {
Permanent sourcePermanent = source.getSourcePermanentIfItStillExists(game); Permanent sourcePermanent = source.getSourcePermanentIfItStillExists(game);
return sourcePermanent != null && sourceId.equals(sourcePermanent.getAttachedTo()); return sourcePermanent != null && sourceId.equals(sourcePermanent.getAttachedTo());
} }
} }

View file

@ -12,19 +12,17 @@ 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.constants.Zone;
import java.util.UUID; import java.util.UUID;
/** /**
*
* @author noahg * @author noahg
*/ */
public final class AetherflameWall extends CardImpl { public final class AetherflameWall extends CardImpl {
public AetherflameWall(UUID ownerId, CardSetInfo setInfo) { public AetherflameWall(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{R}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{R}");
this.subtype.add(SubType.WALL); this.subtype.add(SubType.WALL);
this.power = new MageInt(0); this.power = new MageInt(0);
this.toughness = new MageInt(4); this.toughness = new MageInt(4);
@ -33,10 +31,13 @@ public final class AetherflameWall extends CardImpl {
this.addAbility(DefenderAbility.getInstance()); this.addAbility(DefenderAbility.getInstance());
// Aetherflame Wall can block creatures with shadow as though they didnt have shadow. // Aetherflame Wall can block creatures with shadow as though they didnt have shadow.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new CanBlockAsThoughtItHadShadowEffect(Duration.WhileOnBattlefield))); this.addAbility(new SimpleStaticAbility(new CanBlockAsThoughtItHadShadowEffect(Duration.WhileOnBattlefield)
.setText("{this} can block creatures with shadow as though they didn't have shadow")));
// {R}: Aetherflame Wall gets +1/+0 until end of turn. // {R}: Aetherflame Wall gets +1/+0 until end of turn.
this.addAbility(new SimpleActivatedAbility(new BoostSourceEffect(1, 0, Duration.EndOfTurn), new ManaCostsImpl("{R}"))); this.addAbility(new SimpleActivatedAbility(
new BoostSourceEffect(1, 0, Duration.EndOfTurn), new ManaCostsImpl<>("{R}")
));
} }
private AetherflameWall(final AetherflameWall card) { private AetherflameWall(final AetherflameWall card) {

View file

@ -31,8 +31,11 @@ public final class BarbedShocker extends CardImpl {
this.addAbility(TrampleAbility.getInstance()); this.addAbility(TrampleAbility.getInstance());
// Haste // Haste
this.addAbility(HasteAbility.getInstance()); this.addAbility(HasteAbility.getInstance());
// Whenever Barbed Shocker deals damage to a player, that player discards all the cards in their hand, then draws that many cards. // Whenever Barbed Shocker deals damage to a player, that player discards all the cards in their hand, then draws that many cards.
this.addAbility(new DealsDamageToAPlayerTriggeredAbility(new BarbedShockerEffect(), false, true)); this.addAbility(new DealsDamageToAPlayerTriggeredAbility(
new BarbedShockerEffect(), false, true
));
} }
private BarbedShocker(final BarbedShocker card) { private BarbedShocker(final BarbedShocker card) {
@ -49,7 +52,7 @@ class BarbedShockerEffect extends OneShotEffect {
BarbedShockerEffect() { BarbedShockerEffect() {
super(Outcome.Discard); super(Outcome.Discard);
this.staticText = " that player discards all the cards in their hand, then draws that many cards"; this.staticText = "that player discards all the cards in their hand, then draws that many cards";
} }
private BarbedShockerEffect(final BarbedShockerEffect effect) { private BarbedShockerEffect(final BarbedShockerEffect effect) {
@ -64,11 +67,12 @@ class BarbedShockerEffect extends OneShotEffect {
@Override @Override
public boolean apply(Game game, Ability source) { public boolean apply(Game game, Ability source) {
Player targetPlayer = game.getPlayer(targetPointer.getFirst(game, source)); Player targetPlayer = game.getPlayer(targetPointer.getFirst(game, source));
if (targetPlayer == null) { if (targetPlayer == null || targetPlayer.getHand().isEmpty()) {
return false; return false;
} }
int count = targetPlayer.discard(targetPlayer.getHand(), false, source, game).size(); targetPlayer.drawCards(targetPlayer.discard(
targetPlayer.drawCards(count, source, game); targetPlayer.getHand(), false, source, game
).size(), source, game);
return true; return true;
} }
} }

View file

@ -1,7 +1,5 @@
package mage.cards.b; package mage.cards.b;
import java.util.UUID;
import mage.abilities.effects.common.DrawCardSourceControllerEffect; import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.effects.common.continuous.BoostTargetEffect; import mage.abilities.effects.common.continuous.BoostTargetEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
@ -10,21 +8,22 @@ import mage.constants.CardType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
import java.util.UUID;
/** /**
*
* @author Loki * @author Loki
*/ */
public final class Bewilder extends CardImpl { public final class Bewilder extends CardImpl {
public Bewilder(UUID ownerId, CardSetInfo setInfo) { public Bewilder(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{2}{U}"); super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{2}{U}");
// Target creature gets -3/-0 until end of turn. // Target creature gets -3/-0 until end of turn.
this.getSpellAbility().addEffect(new BoostTargetEffect(-3, 0, Duration.EndOfTurn)); this.getSpellAbility().addEffect(new BoostTargetEffect(-3, 0, Duration.EndOfTurn));
this.getSpellAbility().addTarget(new TargetCreaturePermanent()); this.getSpellAbility().addTarget(new TargetCreaturePermanent());
// Draw a card. // Draw a card.
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1)); this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1).concatBy("<br>"));
} }
private Bewilder(final Bewilder card) { private Bewilder(final Bewilder card) {

View file

@ -111,7 +111,7 @@ class CurseOfTheCabalInterveningIfTriggeredAbility extends ConditionalIntervenin
), ),
SuspendedCondition.instance, SuspendedCondition.instance,
"At the beginning of each player's upkeep, if {this} is suspended, " "At the beginning of each player's upkeep, if {this} is suspended, "
+ "that player may sacrifice a permanent. If they do, " + "that player may sacrifice a permanent. If the player does, "
+ "put two time counters on {this}." + "put two time counters on {this}."
); );
// controller has to sac a permanent // controller has to sac a permanent

View file

@ -1,7 +1,5 @@
package mage.cards.d; package mage.cards.d;
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;
@ -11,14 +9,14 @@ import mage.abilities.effects.common.PreventDamageToTargetEffect;
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.Duration; import mage.constants.Duration;
import mage.constants.Zone; import mage.constants.SubType;
import mage.target.common.TargetAnyTarget;
import mage.target.common.TargetAttackingOrBlockingCreature; import mage.target.common.TargetAttackingOrBlockingCreature;
import mage.target.common.TargetCreatureOrPlayer;
import java.util.UUID;
/** /**
*
* @author LoneFox * @author LoneFox
*/ */
public final class DAvenantHealer extends CardImpl { public final class DAvenantHealer extends CardImpl {
@ -32,12 +30,15 @@ public final class DAvenantHealer extends CardImpl {
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
// {T}: D'Avenant Healer deals 1 damage to target attacking or blocking creature. // {T}: D'Avenant Healer deals 1 damage to target attacking or blocking creature.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(1), new TapSourceCost()); Ability ability = new SimpleActivatedAbility(new DamageTargetEffect(1), new TapSourceCost());
ability.addTarget(new TargetAttackingOrBlockingCreature()); ability.addTarget(new TargetAttackingOrBlockingCreature());
this.addAbility(ability); this.addAbility(ability);
// {T}: Prevent the next 1 damage that would be dealt to any target this turn. // {T}: Prevent the next 1 damage that would be dealt to any target this turn.
ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new PreventDamageToTargetEffect(Duration.EndOfTurn, 1), new TapSourceCost()); ability = new SimpleActivatedAbility(
ability.addTarget(new TargetCreatureOrPlayer()); new PreventDamageToTargetEffect(Duration.EndOfTurn, 1), new TapSourceCost()
);
ability.addTarget(new TargetAnyTarget());
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -1,13 +1,10 @@
package mage.cards.f; package mage.cards.f;
import java.util.UUID;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.PutIntoGraveFromBattlefieldSourceTriggeredAbility; import mage.abilities.common.PutIntoGraveFromBattlefieldSourceTriggeredAbility;
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.SacrificeTargetCost; import mage.abilities.costs.common.SacrificeTargetCost;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.AttachEffect; import mage.abilities.effects.common.AttachEffect;
import mage.abilities.effects.common.ReturnToHandSourceEffect; import mage.abilities.effects.common.ReturnToHandSourceEffect;
import mage.abilities.effects.common.continuous.BoostSourceEffect; import mage.abilities.effects.common.continuous.BoostSourceEffect;
@ -17,13 +14,15 @@ import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.*; import mage.constants.*;
import static mage.filter.StaticFilters.FILTER_CONTROLLED_CREATURE_SHORT_TEXT;
import mage.target.TargetPermanent; import mage.target.TargetPermanent;
import mage.target.common.TargetControlledCreaturePermanent; import mage.target.common.TargetControlledPermanent;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
import java.util.UUID;
import static mage.filter.StaticFilters.FILTER_CONTROLLED_CREATURE_SHORT_TEXT;
/** /**
*
* @author fireshoes * @author fireshoes
*/ */
public final class FallenIdeal extends CardImpl { public final class FallenIdeal extends CardImpl {
@ -36,18 +35,19 @@ public final class FallenIdeal extends CardImpl {
TargetPermanent auraTarget = new TargetCreaturePermanent(); TargetPermanent auraTarget = new TargetCreaturePermanent();
this.getSpellAbility().addTarget(auraTarget); this.getSpellAbility().addTarget(auraTarget);
this.getSpellAbility().addEffect(new AttachEffect(Outcome.AddAbility)); this.getSpellAbility().addEffect(new AttachEffect(Outcome.AddAbility));
Ability ability = new EnchantAbility(auraTarget.getTargetName()); this.addAbility(new EnchantAbility(auraTarget.getTargetName()));
this.addAbility(ability);
// Enchanted creature has flying and "Sacrifice a creature: This creature gets +2/+1 until end of turn." // Enchanted creature has flying and "Sacrifice a creature: This creature gets +2/+1 until end of turn."
Effect effect = new GainAbilityAttachedEffect(FlyingAbility.getInstance(), AttachmentType.AURA, Duration.WhileOnBattlefield); Ability ability = new SimpleStaticAbility(new GainAbilityAttachedEffect(
Ability gainedAbility = new SimpleStaticAbility(Zone.BATTLEFIELD, effect); FlyingAbility.getInstance(), AttachmentType.AURA, Duration.WhileOnBattlefield
this.addAbility(gainedAbility); ));
gainedAbility = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(2, 1, Duration.EndOfTurn), ability.addEffect(new GainAbilityAttachedEffect(
new SacrificeTargetCost(new TargetControlledCreaturePermanent(FILTER_CONTROLLED_CREATURE_SHORT_TEXT))); new SimpleActivatedAbility(
effect = new GainAbilityAttachedEffect(gainedAbility, AttachmentType.AURA, Duration.WhileOnBattlefield); new BoostSourceEffect(2, 1, Duration.EndOfTurn),
effect.setText("Enchanted creature has \"Sacrifice a creature: This creature gets +2/+1 until end of turn.\""); new SacrificeTargetCost(new TargetControlledPermanent(FILTER_CONTROLLED_CREATURE_SHORT_TEXT))
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect)); ), AttachmentType.AURA, Duration.WhileOnBattlefield
).setText("and \"Sacrifice a creature: This creature gets +2/+1 until end of turn.\""));
this.addAbility(ability);
// When Fallen Ideal is put into a graveyard from the battlefield, return Fallen Ideal to its owner's hand. // When Fallen Ideal is put into a graveyard from the battlefield, return Fallen Ideal to its owner's hand.
this.addAbility(new PutIntoGraveFromBattlefieldSourceTriggeredAbility(new ReturnToHandSourceEffect())); this.addAbility(new PutIntoGraveFromBattlefieldSourceTriggeredAbility(new ReturnToHandSourceEffect()));

View file

@ -32,7 +32,7 @@ public final class FlagstonesOfTrokair extends CardImpl {
this.addAbility(new WhiteManaAbility()); this.addAbility(new WhiteManaAbility());
// When Flagstones of Trokair is put into a graveyard from the battlefield, you may search your library for a Plains card and put it onto the battlefield tapped. If you do, shuffle your library. // When Flagstones of Trokair is put into a graveyard from the battlefield, you may search your library for a Plains card and put it onto the battlefield tapped. If you do, shuffle your library.
this.addAbility(new PutIntoGraveFromBattlefieldSourceTriggeredAbility(new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(FILTER), true, false), true, false)); this.addAbility(new PutIntoGraveFromBattlefieldSourceTriggeredAbility(new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(FILTER), true, true), true, false));
} }
private FlagstonesOfTrokair(final FlagstonesOfTrokair card) { private FlagstonesOfTrokair(final FlagstonesOfTrokair card) {

View file

@ -82,7 +82,7 @@ class GemstoneCavernsAbility extends StaticAbility implements OpeningHandAction
@Override @Override
public String getRule() { public String getRule() {
return "If {this} is in your opening hand and you're not playing first, you may begin the game with {this} on the battlefield with a luck counter on it. If you do, exile a card from your hand."; return "If {this} is in your opening hand and you're not the starting player, you may begin the game with {this} on the battlefield with a luck counter on it. If you do, exile a card from your hand.";
} }
@Override @Override

View file

@ -28,7 +28,7 @@ public final class GlassAsp extends CardImpl {
// Whenever Glass Asp deals combat damage to a player, that player loses 2 life at the beginning of their next draw step unless they pay {2} before that step. // Whenever Glass Asp deals combat damage to a player, that player loses 2 life at the beginning of their next draw step unless they pay {2} before that step.
this.addAbility(new DealsCombatDamageToAPlayerTriggeredAbility(new UnlessPaysDelayedEffect( this.addAbility(new DealsCombatDamageToAPlayerTriggeredAbility(new UnlessPaysDelayedEffect(
new ManaCostsImpl("{2}"), new LoseLifeTargetEffect(2), PhaseStep.DRAW, true, new ManaCostsImpl("{2}"), new LoseLifeTargetEffect(2), PhaseStep.DRAW, true,
"that player loses 2 life at the beginning of their next draw step unless they pay {2} before that draw step."), "that player loses 2 life at the beginning of their next draw step unless they pay {2} before that step."),
false, true)); false, true));
} }

View file

@ -40,7 +40,7 @@ public final class GoblinSkycutter extends CardImpl {
this.toughness = new MageInt(1); this.toughness = new MageInt(1);
// Sacrifice Goblin Skycutter: Goblin Skycutter deals 2 damage to target creature with flying. That creature loses flying until end of turn. // Sacrifice Goblin Skycutter: Goblin Skycutter deals 2 damage to target creature with flying. That creature loses flying until end of turn.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(2), new SacrificeSourceCost()); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(2, "it"), new SacrificeSourceCost());
ability.addEffect(new LoseAbilityTargetEffect(FlyingAbility.getInstance(), Duration.EndOfTurn).setText("that creature loses flying until end of turn")); ability.addEffect(new LoseAbilityTargetEffect(FlyingAbility.getInstance(), Duration.EndOfTurn).setText("that creature loses flying until end of turn"));
ability.addTarget(new TargetCreaturePermanent(filter)); ability.addTarget(new TargetCreaturePermanent(filter));
this.addAbility(ability); this.addAbility(ability);

View file

@ -29,7 +29,7 @@ import mage.target.common.TargetControlledPermanent;
*/ */
public final class IbHalfheartGoblinTactician extends CardImpl { public final class IbHalfheartGoblinTactician extends CardImpl {
private static final FilterControlledPermanent filter = new FilterControlledPermanent("two Mountains"); private static final FilterControlledPermanent filter = new FilterControlledPermanent("Mountains");
private static final FilterCreaturePermanent filterGoblin = new FilterCreaturePermanent("another Goblin you control"); private static final FilterCreaturePermanent filterGoblin = new FilterCreaturePermanent("another Goblin you control");
static { static {

View file

@ -3,6 +3,7 @@ package mage.cards.i;
import java.util.UUID; import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.common.AsEntersBattlefieldAbility;
import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.common.EntersBattlefieldAbility;
import mage.abilities.common.SimpleStaticAbility; import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount; import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount;
@ -43,7 +44,7 @@ public final class Ixidron extends CardImpl {
this.toughness = new MageInt(0); this.toughness = new MageInt(0);
// As Ixidron enters the battlefield, turn all other nontoken creatures face down. // As Ixidron enters the battlefield, turn all other nontoken creatures face down.
this.addAbility(new EntersBattlefieldAbility(new BecomesFaceDownCreatureAllEffect(filterTurnFaceDown))); this.addAbility(new AsEntersBattlefieldAbility(new BecomesFaceDownCreatureAllEffect(filterTurnFaceDown)));
// Ixidron's power and toughness are each equal to the number of face-down creatures on the battlefield. // Ixidron's power and toughness are each equal to the number of face-down creatures on the battlefield.
this.addAbility(new SimpleStaticAbility(Zone.ALL, new SetPowerToughnessSourceEffect(new PermanentsOnBattlefieldCount(filter), Duration.EndOfGame))); this.addAbility(new SimpleStaticAbility(Zone.ALL, new SetPowerToughnessSourceEffect(new PermanentsOnBattlefieldCount(filter), Duration.EndOfGame)));

View file

@ -51,7 +51,7 @@ class KaervekTheMercilessEffect extends OneShotEffect {
public KaervekTheMercilessEffect() { public KaervekTheMercilessEffect() {
super(Outcome.Benefit); super(Outcome.Benefit);
this.staticText = "{this} deals damage to any target equal to that spell's mana value"; this.staticText = "{this} deals damage equal to that spell's mana value to any target";
} }
public KaervekTheMercilessEffect(final KaervekTheMercilessEffect effect) { public KaervekTheMercilessEffect(final KaervekTheMercilessEffect effect) {

View file

@ -57,7 +57,7 @@ class LiegeOfThePitEffect extends OneShotEffect {
public LiegeOfThePitEffect() { public LiegeOfThePitEffect() {
super(Outcome.Damage); super(Outcome.Damage);
this.staticText = "Sacrifice a creature other than {this}. If you can't {this} deals 7 damage to you."; this.staticText = "sacrifice a creature other than {this}. If you can't, {this} deals 7 damage to you.";
} }
public LiegeOfThePitEffect(final LiegeOfThePitEffect effect) { public LiegeOfThePitEffect(final LiegeOfThePitEffect effect) {

View file

@ -27,7 +27,7 @@ public final class Molder extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{X}{G}"); super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{X}{G}");
// Destroy target artifact or enchantment with converted mana cost X. It can't be regenerated. You gain X life. // Destroy target artifact or enchantment with converted mana cost X. It can't be regenerated. You gain X life.
this.getSpellAbility().addEffect(new DestroyTargetEffect("Destroy target artifact or enchantment with mana value X", true)); this.getSpellAbility().addEffect(new DestroyTargetEffect("Destroy target artifact or enchantment with mana value X. It can't be regenerated", true));
this.getSpellAbility().addEffect(new GainLifeEffect(ManacostVariableValue.REGULAR)); this.getSpellAbility().addEffect(new GainLifeEffect(ManacostVariableValue.REGULAR));
this.getSpellAbility().setTargetAdjuster(MolderAdjuster.instance); this.getSpellAbility().setTargetAdjuster(MolderAdjuster.instance);
} }

View file

@ -27,7 +27,7 @@ public final class OrcishCannonade extends CardImpl {
effect.setText("and 3 damage to you"); effect.setText("and 3 damage to you");
this.getSpellAbility().addEffect(effect); this.getSpellAbility().addEffect(effect);
// Draw a card. // Draw a card.
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1)); this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1).concatBy("<br>"));
} }
private OrcishCannonade(final OrcishCannonade card) { private OrcishCannonade(final OrcishCannonade card) {

View file

@ -57,7 +57,7 @@ class SaffiEriksdotterEffect extends OneShotEffect {
public SaffiEriksdotterEffect() { public SaffiEriksdotterEffect() {
super(Outcome.PutCreatureInPlay); super(Outcome.PutCreatureInPlay);
this.staticText = "When target creature is put into your graveyard from the battlefield this turn, return that card to the battlefield"; this.staticText = "When target creature is put into your graveyard this turn, return that card to the battlefield";
} }
public SaffiEriksdotterEffect(final SaffiEriksdotterEffect effect) { public SaffiEriksdotterEffect(final SaffiEriksdotterEffect effect) {

View file

@ -28,7 +28,7 @@ public final class SkulkingKnight extends CardImpl {
// Flanking // Flanking
this.addAbility(new FlankingAbility()); this.addAbility(new FlankingAbility());
// When Skulking Knight becomes the target of a spell or ability, sacrifice it. // When Skulking Knight becomes the target of a spell or ability, sacrifice it.
this.addAbility(new BecomesTargetTriggeredAbility(new SacrificeSourceEffect())); this.addAbility(new BecomesTargetTriggeredAbility(new SacrificeSourceEffect().setText("sacrifice it")));
} }
private SkulkingKnight(final SkulkingKnight card) { private SkulkingKnight(final SkulkingKnight card) {

View file

@ -45,7 +45,7 @@ public final class SpikeTiller extends CardImpl {
this.addAbility(ability); this.addAbility(ability);
// {2}, Remove a +1/+1 counter from Spike Tiller: Target land becomes a 2/2 creature that's still a land. Put a +1/+1 counter on it. // {2}, Remove a +1/+1 counter from Spike Tiller: Target land becomes a 2/2 creature that's still a land. Put a +1/+1 counter on it.
Ability ability2 = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BecomesCreatureTargetEffect(new CreatureToken(2, 2), false, true, Duration.EndOfGame).setText("Target land becomes a 2/2 creature that's still a land. "), new GenericManaCost(2)); Ability ability2 = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BecomesCreatureTargetEffect(new CreatureToken(2, 2), false, true, Duration.EndOfGame).setText("Target land becomes a 2/2 creature that's still a land"), new GenericManaCost(2));
ability2.addCost(new RemoveCountersSourceCost(CounterType.P1P1.createInstance())); ability2.addCost(new RemoveCountersSourceCost(CounterType.P1P1.createInstance()));
ability2.addEffect(new AddCountersTargetEffect(CounterType.P1P1.createInstance()).setText("Put a +1/+1 counter on it.")); ability2.addEffect(new AddCountersTargetEffect(CounterType.P1P1.createInstance()).setText("Put a +1/+1 counter on it."));
ability2.addTarget(new TargetLandPermanent()); ability2.addTarget(new TargetLandPermanent());

View file

@ -4,14 +4,14 @@ import mage.MageInt;
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.TapSourceCost; import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.effects.common.continuous.BoostControlledEffect; import mage.abilities.effects.common.continuous.BoostAllEffect;
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.Duration; import mage.constants.Duration;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.Zone; import mage.constants.TargetController;
import mage.filter.common.FilterCreaturePermanent; import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.mageobject.AbilityPredicate; import mage.filter.predicate.mageobject.AbilityPredicate;
@ -22,9 +22,11 @@ import java.util.UUID;
*/ */
public final class SpriteNoble extends CardImpl { public final class SpriteNoble extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Creatures you control with flying"); private static final FilterCreaturePermanent filter
= new FilterCreaturePermanent("creatures you control with flying");
static { static {
filter.add(TargetController.YOU.getControllerPredicate());
filter.add(new AbilityPredicate(FlyingAbility.class)); filter.add(new AbilityPredicate(FlyingAbility.class));
} }
@ -36,11 +38,16 @@ public final class SpriteNoble extends CardImpl {
// Flying // Flying
this.addAbility(FlyingAbility.getInstance()); this.addAbility(FlyingAbility.getInstance());
// Other creatures you control with flying get +0/+1. // Other creatures you control with flying get +0/+1.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostControlledEffect(0, 1, Duration.WhileOnBattlefield, filter, true))); this.addAbility(new SimpleStaticAbility(new BoostAllEffect(
0, 1, Duration.WhileOnBattlefield, filter, true
)));
// {tap}: Other creatures you control with flying get +1/+0 until end of turn. // {tap}: Other creatures you control with flying get +1/+0 until end of turn.
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostControlledEffect(1, 0, Duration.EndOfTurn, filter, true), this.addAbility(new SimpleActivatedAbility(new BoostAllEffect(
new TapSourceCost())); 1, 0, Duration.EndOfTurn, filter, true
), new TapSourceCost()));
} }
private SpriteNoble(final SpriteNoble card) { private SpriteNoble(final SpriteNoble card) {

View file

@ -23,7 +23,7 @@ import java.util.UUID;
*/ */
public final class StonebrowKrosanHero extends CardImpl { public final class StonebrowKrosanHero extends CardImpl {
private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent(" creature you control with trample"); private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("creature you control with trample");
static { static {
filter.add(new AbilityPredicate(TrampleAbility.class)); filter.add(new AbilityPredicate(TrampleAbility.class));
} }

View file

@ -1,10 +1,7 @@
package mage.cards.t; package mage.cards.t;
import java.util.UUID;
import mage.ObjectColor; import mage.ObjectColor;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.continuous.BecomesColorTargetEffect; import mage.abilities.effects.common.continuous.BecomesColorTargetEffect;
import mage.abilities.effects.common.continuous.BoostTargetEffect; import mage.abilities.effects.common.continuous.BoostTargetEffect;
import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; import mage.abilities.effects.common.continuous.GainAbilityTargetEffect;
@ -14,31 +11,32 @@ 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.Duration;
import mage.constants.TimingRule;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
import java.util.UUID;
/** /**
*
* @author LevelX2 * @author LevelX2
*/ */
public final class TraitorsClutch extends CardImpl { public final class TraitorsClutch extends CardImpl {
public TraitorsClutch(UUID ownerId, CardSetInfo setInfo) { public TraitorsClutch(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{4}{B}"); super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{4}{B}");
// Target creature gets +1/+0, becomes black, and gains shadow until end of turn. // Target creature gets +1/+0, becomes black, and gains shadow until end of turn.
this.getSpellAbility().addEffect(new BoostTargetEffect(1,0, Duration.EndOfTurn)); this.getSpellAbility().addEffect(new BoostTargetEffect(
Effect effect = new BecomesColorTargetEffect(ObjectColor.BLACK, Duration.EndOfTurn); 1, 0, Duration.EndOfTurn
effect.setText(", becomes black"); ).setText("target creature gets +1/+0"));
this.getSpellAbility().addEffect(effect); this.getSpellAbility().addEffect(new BecomesColorTargetEffect(
effect = new GainAbilityTargetEffect(ShadowAbility.getInstance(), Duration.EndOfTurn); ObjectColor.BLACK, Duration.EndOfTurn
effect.setText(", and gains shadow until end of turn"); ).setText(", becomes black"));
this.getSpellAbility().addEffect(effect); this.getSpellAbility().addEffect(new GainAbilityTargetEffect(
ShadowAbility.getInstance(), Duration.EndOfTurn
).setText(", and gains shadow until end of turn"));
this.getSpellAbility().addTarget(new TargetCreaturePermanent()); this.getSpellAbility().addTarget(new TargetCreaturePermanent());
// Flashback {1}{B} // Flashback {1}{B}
this.addAbility(new FlashbackAbility(this, new ManaCostsImpl("{1}{B}"))); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl<>("{1}{B}")));
} }
private TraitorsClutch(final TraitorsClutch card) { private TraitorsClutch(final TraitorsClutch card) {

View file

@ -35,7 +35,7 @@ public final class UnyaroBees extends CardImpl {
// {G}: Unyaro Bees gets +1/+1 until end of turn. // {G}: Unyaro Bees gets +1/+1 until end of turn.
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(1, 1, Duration.EndOfTurn), new ManaCostsImpl("{G}"))); this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(1, 1, Duration.EndOfTurn), new ManaCostsImpl("{G}")));
// {3}{G}, Sacrifice Unyaro Bees: Unyaro Bees deals 2 damage to any target. // {3}{G}, Sacrifice Unyaro Bees: Unyaro Bees deals 2 damage to any target.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(2), new ManaCostsImpl("{3}{G}")); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(2, "it"), new ManaCostsImpl("{3}{G}"));
ability.addCost(new SacrificeSourceCost()); ability.addCost(new SacrificeSourceCost());
ability.addTarget(new TargetAnyTarget()); ability.addTarget(new TargetAnyTarget());
this.addAbility(ability); this.addAbility(ability);

View file

@ -60,7 +60,7 @@ class YavimayaDryadEffect extends SearchEffect {
public YavimayaDryadEffect(TargetCardInLibrary target) { public YavimayaDryadEffect(TargetCardInLibrary target) {
super(target, Outcome.PutLandInPlay); super(target, Outcome.PutLandInPlay);
staticText = "you may search your library for a Forest card and put it onto the battlefield tapped under target player's control. If you do, shuffle"; staticText = "you may search your library for a Forest card, put it onto the battlefield tapped under target player's control, then shuffle";
} }
public YavimayaDryadEffect(final YavimayaDryadEffect effect) { public YavimayaDryadEffect(final YavimayaDryadEffect effect) {

View file

@ -62,7 +62,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 = "AFC"; // check all abilities and output cards with wrong abilities texts; private static final String FULL_ABILITIES_CHECK_SET_CODE = "TSP"; // 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

View file

@ -29,6 +29,6 @@ public class ActivateOnlyByOpponentActivatedAbility extends ActivatedAbilityImpl
@Override @Override
public String getRule() { public String getRule() {
return super.getRule() + " Only any opponent may activate this ability."; return super.getRule() + " Only your opponents may activate this ability.";
} }
} }

View file

@ -27,7 +27,7 @@ public class ProtectionChosenColorAttachedEffect extends ContinuousEffectImpl {
public ProtectionChosenColorAttachedEffect(boolean notRemoveItself) { public ProtectionChosenColorAttachedEffect(boolean notRemoveItself) {
super(Duration.WhileOnBattlefield, Layer.AbilityAddingRemovingEffects_6, SubLayer.NA, Outcome.AddAbility); super(Duration.WhileOnBattlefield, Layer.AbilityAddingRemovingEffects_6, SubLayer.NA, Outcome.AddAbility);
this.notRemoveItself = notRemoveItself; this.notRemoveItself = notRemoveItself;
staticText = "{this} has protection from the chosen color" + (notRemoveItself ? ". This effect doesn't remove {this}" : ""); staticText = "enchanted creature has protection from the chosen color" + (notRemoveItself ? ". This effect doesn't remove {this}" : "");
} }
public ProtectionChosenColorAttachedEffect(final ProtectionChosenColorAttachedEffect effect) { public ProtectionChosenColorAttachedEffect(final ProtectionChosenColorAttachedEffect effect) {

View file

@ -169,7 +169,7 @@ public class AddManaInAnyCombinationEffect extends ManaEffect {
sb.append('{').append(coloredManaSymbol.toString()).append('}'); sb.append('{').append(coloredManaSymbol.toString()).append('}');
} }
} }
if (amountString.equals("X")) { if (amountString.equals("X") && !amount.getMessage().isEmpty()) {
sb.append(", where X is "); sb.append(", where X is ");
sb.append(amount.getMessage()); sb.append(amount.getMessage());
} }