Merge pull request #6513 from etpalmer63/GlitterLionTextFix

Fixed punctuation in many cards
This commit is contained in:
18ths 2020-07-01 10:19:01 +02:00 committed by GitHub
commit 2d5e1fdc34
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
59 changed files with 107 additions and 74 deletions

View file

@ -44,7 +44,7 @@ public final class AjaniValiantProtector extends CardImpl {
// -11: Put X +1/+1 counters on target creature, where X is your life total. That creature gains trample until end of turn. // -11: Put X +1/+1 counters on target creature, where X is your life total. That creature gains trample until end of turn.
Effect effect = new AddCountersTargetEffect(CounterType.P1P1.createInstance(), ControllerLifeCount.instance); Effect effect = new AddCountersTargetEffect(CounterType.P1P1.createInstance(), ControllerLifeCount.instance);
effect.setText("Put X +1/+1 counters on target creature, where X is your life total."); effect.setText("Put X +1/+1 counters on target creature, where X is your life total");
ability = new LoyaltyAbility(effect, -11); ability = new LoyaltyAbility(effect, -11);
effect = new GainAbilityTargetEffect(TrampleAbility.getInstance(), Duration.EndOfTurn); effect = new GainAbilityTargetEffect(TrampleAbility.getInstance(), Duration.EndOfTurn);
effect.setText("That creature gains trample until end of turn"); effect.setText("That creature gains trample until end of turn");

View file

@ -30,7 +30,7 @@ public final class AncientAnimus extends CardImpl {
new AddCountersTargetEffect(CounterType.P1P1.createInstance()), new AddCountersTargetEffect(CounterType.P1P1.createInstance()),
new TargetHasSuperTypeCondition(SuperType.LEGENDARY) new TargetHasSuperTypeCondition(SuperType.LEGENDARY)
); );
effect.setText("Put a +1/+1 counter on target creature you control if it's legendary."); effect.setText("Put a +1/+1 counter on target creature you control if it's legendary");
this.getSpellAbility().addEffect(effect); this.getSpellAbility().addEffect(effect);
effect = new FightTargetsEffect(); effect = new FightTargetsEffect();
effect.setText("Then it fights target creature an opponent controls"); effect.setText("Then it fights target creature an opponent controls");

View file

@ -47,7 +47,7 @@ public final class AnimatingFaerie extends AdventureCard {
).setText("Target noncreature artifact you control becomes")); ).setText("Target noncreature artifact you control becomes"));
this.getSpellCard().getSpellAbility().addEffect(new SetPowerToughnessTargetEffect( this.getSpellCard().getSpellAbility().addEffect(new SetPowerToughnessTargetEffect(
0, 0, Duration.EndOfGame 0, 0, Duration.EndOfGame
).setText("a 0/0 artifact creature.")); ).setText("a 0/0 artifact creature"));
this.getSpellCard().getSpellAbility().addEffect(new AddCountersTargetEffect( this.getSpellCard().getSpellAbility().addEffect(new AddCountersTargetEffect(
CounterType.P1P1.createInstance(4) CounterType.P1P1.createInstance(4)
).setText("Put four +1/+1 counters on it.")); ).setText("Put four +1/+1 counters on it."));

View file

@ -25,7 +25,7 @@ public final class BattlefieldPromotion extends CardImpl {
this.getSpellAbility().addEffect(new AddCountersTargetEffect(CounterType.P1P1.createInstance())); this.getSpellAbility().addEffect(new AddCountersTargetEffect(CounterType.P1P1.createInstance()));
this.getSpellAbility().addEffect(new GainAbilityTargetEffect( this.getSpellAbility().addEffect(new GainAbilityTargetEffect(
FirstStrikeAbility.getInstance(), Duration.EndOfTurn FirstStrikeAbility.getInstance(), Duration.EndOfTurn
).setText("That creature gains first strike until end of turn.")); ).setText("That creature gains first strike until end of turn"));
this.getSpellAbility().addEffect(new GainLifeEffect(2)); this.getSpellAbility().addEffect(new GainLifeEffect(2));
this.getSpellAbility().addTarget(new TargetCreaturePermanent()); this.getSpellAbility().addTarget(new TargetCreaturePermanent());
} }

View file

@ -75,6 +75,6 @@ class BenefactorsDraughtTriggeredAbility extends DelayedTriggeredAbility {
@Override @Override
public String getRule() { public String getRule() {
return "Until end of turn, whenever a creature an opponent controls blocks, draw a card."; return "Until end of turn, whenever a creature an opponent controls blocks, draw a card";
} }
} }

View file

@ -30,7 +30,7 @@ public final class BlindFury extends CardImpl {
this.getSpellAbility().addEffect(new LoseAbilityAllEffect( this.getSpellAbility().addEffect(new LoseAbilityAllEffect(
TrampleAbility.getInstance(), Duration.EndOfTurn, TrampleAbility.getInstance(), Duration.EndOfTurn,
StaticFilters.FILTER_PERMANENT_CREATURES StaticFilters.FILTER_PERMANENT_CREATURES
).setText("All creatures lose trample until end of turn.")); ).setText("All creatures lose trample until end of turn"));
this.getSpellAbility().addEffect(new FurnaceOfRathEffect()); this.getSpellAbility().addEffect(new FurnaceOfRathEffect());
} }

View file

@ -19,7 +19,7 @@ import java.util.UUID;
public final class BondOfDiscipline extends CardImpl { public final class BondOfDiscipline extends CardImpl {
private static final FilterPermanent filter private static final FilterPermanent filter
= new FilterOpponentsCreaturePermanent("creatures your opponents control."); = new FilterOpponentsCreaturePermanent("creatures your opponents control");
public BondOfDiscipline(UUID ownerId, CardSetInfo setInfo) { public BondOfDiscipline(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{4}{W}"); super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{4}{W}");

View file

@ -41,11 +41,11 @@ public final class BringerOfTheRedDawn extends CardImpl {
Ability ability = new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD, effect, TargetController.YOU, true); Ability ability = new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD, effect, TargetController.YOU, true);
effect = new GainControlTargetEffect(Duration.EndOfTurn); effect = new GainControlTargetEffect(Duration.EndOfTurn);
effect.setText("and gain control of it until end of turn."); effect.setText("and gain control of it until end of turn");
ability.addEffect(effect); ability.addEffect(effect);
effect = new GainAbilityTargetEffect(HasteAbility.getInstance(), Duration.EndOfTurn); effect = new GainAbilityTargetEffect(HasteAbility.getInstance(), Duration.EndOfTurn);
effect.setText("That creature gains haste until end of turn."); effect.setText("That creature gains haste until end of turn");
ability.addEffect(effect); ability.addEffect(effect);
ability.addTarget(new TargetCreaturePermanent()); ability.addTarget(new TargetCreaturePermanent());

View file

@ -23,7 +23,7 @@ public final class ChanceForGlory extends CardImpl {
this.getSpellAbility().addEffect(new GainAbilityAllEffect( this.getSpellAbility().addEffect(new GainAbilityAllEffect(
IndestructibleAbility.getInstance(), Duration.EndOfGame, IndestructibleAbility.getInstance(), Duration.EndOfGame,
StaticFilters.FILTER_CONTROLLED_CREATURES StaticFilters.FILTER_CONTROLLED_CREATURES
).setText("Creatures you control gain indestructible.")); ).setText("Creatures you control gain indestructible"));
this.getSpellAbility().addEffect(new AddExtraTurnControllerEffect(true)); this.getSpellAbility().addEffect(new AddExtraTurnControllerEffect(true));
} }

View file

@ -50,12 +50,12 @@ public final class ChromiumTheMutable extends CardImpl {
false, false, null, null, true false, false, null, null, true
).setText("Until end of turn, {this} becomes " ).setText("Until end of turn, {this} becomes "
+ "a Human with base power and toughness 1/1, " + "a Human with base power and toughness 1/1, "
+ "loses all abilities, and gains hexproof."), + "loses all abilities, and gains hexproof"),
new DiscardCardCost() new DiscardCardCost()
); );
ability.addEffect( ability.addEffect(
new CantBeBlockedSourceEffect(Duration.EndOfTurn) new CantBeBlockedSourceEffect(Duration.EndOfTurn)
.setText("It can't be blocked this turn.") .setText("It can't be blocked this turn")
); );
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -44,7 +44,7 @@ class ClearTheMindEffect extends OneShotEffect {
ClearTheMindEffect() { ClearTheMindEffect() {
super(Outcome.Benefit); super(Outcome.Benefit);
staticText = "Target player shuffles their graveyard into their library."; staticText = "Target player shuffles their graveyard into their library";
} }
private ClearTheMindEffect(final ClearTheMindEffect effect) { private ClearTheMindEffect(final ClearTheMindEffect effect) {

View file

@ -26,10 +26,10 @@ public final class CollapsingBorders extends CardImpl {
// Domain - At the beginning of each player's upkeep, that player gains 1 life for each basic land type among lands they control. Then Collapsing Borders deals 3 damage to that player. // Domain - At the beginning of each player's upkeep, that player gains 1 life for each basic land type among lands they control. Then Collapsing Borders deals 3 damage to that player.
Effect effect = new GainLifeTargetEffect(new DomainValue(true)); Effect effect = new GainLifeTargetEffect(new DomainValue(true));
effect.setText("that player gains 1 life for each basic land type among lands they control."); effect.setText("that player gains 1 life for each basic land type among lands they control");
Ability ability = new BeginningOfUpkeepTriggeredAbility(effect, TargetController.ANY, false); Ability ability = new BeginningOfUpkeepTriggeredAbility(effect, TargetController.ANY, false);
effect = new DamageTargetEffect(3); effect = new DamageTargetEffect(3);
effect.setText("Then {this} deals 3 damage to that player."); effect.setText("Then {this} deals 3 damage to that player");
ability.addEffect(effect); ability.addEffect(effect);
ability.setAbilityWord(AbilityWord.DOMAIN); ability.setAbilityWord(AbilityWord.DOMAIN);
this.addAbility(ability); this.addAbility(ability);

View file

@ -25,7 +25,7 @@ public final class ColossalHeroics extends CardImpl {
this.addAbility(new StriveAbility("{1}{G}")); this.addAbility(new StriveAbility("{1}{G}"));
// Any number of target creatures each get +2/+2 until end of turn. Untap those creatures. // Any number of target creatures each get +2/+2 until end of turn. Untap those creatures.
Effect effect = new BoostTargetEffect(2, 2, Duration.EndOfTurn); Effect effect = new BoostTargetEffect(2, 2, Duration.EndOfTurn);
effect.setText("Any number of target creatures each get +2/+2 until end of turn."); effect.setText("Any number of target creatures each get +2/+2 until end of turn");
this.getSpellAbility().addEffect(effect); this.getSpellAbility().addEffect(effect);
effect = new UntapTargetEffect(); effect = new UntapTargetEffect();
effect.setText("Untap those creatures"); effect.setText("Untap those creatures");

View file

@ -20,7 +20,7 @@ public final class Deathsprout extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{B}{B}{G}"); super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{B}{B}{G}");
// Destroy target creature. Search your library for a basic land card, put it onto the battlefield tapped, then shuffle your library. // Destroy target creature. Search your library for a basic land card, put it onto the battlefield tapped, then shuffle your library.
this.getSpellAbility().addEffect(new DestroyTargetEffect().setText("Destroy target creature. ")); this.getSpellAbility().addEffect(new DestroyTargetEffect().setText("Destroy target creature"));
this.getSpellAbility().addEffect(new SearchLibraryPutInPlayEffect( this.getSpellAbility().addEffect(new SearchLibraryPutInPlayEffect(
new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_LAND), true new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_LAND), true
)); ));

View file

@ -26,7 +26,7 @@ public final class DesperateLunge extends CardImpl {
).setText("Target creature gets +2/+2")); ).setText("Target creature gets +2/+2"));
this.getSpellAbility().addEffect(new GainAbilityTargetEffect( this.getSpellAbility().addEffect(new GainAbilityTargetEffect(
FlyingAbility.getInstance(), Duration.EndOfTurn FlyingAbility.getInstance(), Duration.EndOfTurn
).setText("and gains flying until end of turn.")); ).setText("and gains flying until end of turn"));
this.getSpellAbility().addEffect(new GainLifeEffect(2)); this.getSpellAbility().addEffect(new GainLifeEffect(2));
this.getSpellAbility().addTarget(new TargetCreaturePermanent()); this.getSpellAbility().addTarget(new TargetCreaturePermanent());
} }

View file

@ -36,7 +36,7 @@ public final class FatalFrenzy extends CardImpl {
.setText("Until end of turn, target creature you control gains trample") .setText("Until end of turn, target creature you control gains trample")
); );
this.getSpellAbility().addEffect(new BoostTargetEffect(TargetPermanentPowerCount.instance, StaticValue.get(0), Duration.EndOfTurn, true) this.getSpellAbility().addEffect(new BoostTargetEffect(TargetPermanentPowerCount.instance, StaticValue.get(0), Duration.EndOfTurn, true)
.setText("and gets +X/+0, where X is its power.") .setText("and gets +X/+0, where X is its power")
); );
this.getSpellAbility().addEffect(new FatalFrenzyEffect()); this.getSpellAbility().addEffect(new FatalFrenzyEffect());
this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent()); this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent());

View file

@ -18,7 +18,7 @@ public final class FatefulEnd extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{2}{R}"); super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{2}{R}");
// Fateful End deals 3 damage to any target. Scry 1. // Fateful End deals 3 damage to any target. Scry 1.
this.getSpellAbility().addEffect(new DamageTargetEffect(3, true, "any target.")); this.getSpellAbility().addEffect(new DamageTargetEffect(3, true, "any target"));
this.getSpellAbility().addTarget(new TargetAnyTarget()); this.getSpellAbility().addTarget(new TargetAnyTarget());
this.getSpellAbility().addEffect(new ScryEffect(1)); this.getSpellAbility().addEffect(new ScryEffect(1));
} }

View file

@ -20,7 +20,7 @@ import java.util.UUID;
public final class FellThePheasant extends CardImpl { public final class FellThePheasant extends CardImpl {
private static final FilterPermanent filter = new FilterCreaturePermanent("creature with flying. "); private static final FilterPermanent filter = new FilterCreaturePermanent("creature with flying");
static { static {
filter.add(new AbilityPredicate(FlyingAbility.class)); filter.add(new AbilityPredicate(FlyingAbility.class));

View file

@ -45,7 +45,7 @@ class FinaleOfRevelationEffect extends OneShotEffect {
FinaleOfRevelationEffect() { FinaleOfRevelationEffect() {
super(Outcome.Benefit); super(Outcome.Benefit);
staticText = "Draw X cards. If X is 10 or more, instead shuffle your graveyard into your library, " + staticText = "Draw X cards. If X is 10 or more, instead shuffle your graveyard into your library, " +
"draw X cards, untap up to five lands, and you have no maximum hand size for the rest of the game."; "draw X cards, untap up to five lands, and you have no maximum hand size for the rest of the game";
} }
private FinaleOfRevelationEffect(final FinaleOfRevelationEffect effect) { private FinaleOfRevelationEffect(final FinaleOfRevelationEffect effect) {

View file

@ -28,13 +28,13 @@ public final class ForceDenial extends CardImpl {
this.getSpellAbility().addEffect(new ConditionalOneShotEffect( this.getSpellAbility().addEffect(new ConditionalOneShotEffect(
new CounterUnlessPaysEffect(new GenericManaCost(1)), new CounterUnlessPaysEffect(new GenericManaCost(1)),
new InvertCondition(HateCondition.instance), new InvertCondition(HateCondition.instance),
"Counter target spell unless its controller pays {1}.")); "Counter target spell unless its controller pays {1}"));
// <i>Hate</i> &mdash; If an opponent lost life from a source other then combat damage this turn, counter that spell instead. // <i>Hate</i> &mdash; If an opponent lost life from a source other then combat damage this turn, counter that spell instead.
this.getSpellAbility().addEffect(new ConditionalOneShotEffect( this.getSpellAbility().addEffect(new ConditionalOneShotEffect(
new CounterTargetEffect(), new CounterTargetEffect(),
HateCondition.instance, HateCondition.instance,
"<br><i>Hate</i> &mdash; If an opponent lost life from a source other than combat damage this turn, counter that spell instead.")); "<br><i>Hate</i> &mdash; If an opponent lost life from a source other than combat damage this turn, counter that spell instead"));
this.getSpellAbility().addTarget(new TargetSpell()); this.getSpellAbility().addTarget(new TargetSpell());
this.getSpellAbility().addWatcher(new LifeLossOtherFromCombatWatcher()); this.getSpellAbility().addWatcher(new LifeLossOtherFromCombatWatcher());

View file

@ -48,7 +48,7 @@ class ForesightEffect extends SearchEffect {
ForesightEffect() { ForesightEffect() {
super(new TargetCardInLibrary(3, new FilterCard()), Outcome.Benefit); super(new TargetCardInLibrary(3, new FilterCard()), Outcome.Benefit);
staticText = "Search your library for three cards, exile them, then shuffle your library."; staticText = "Search your library for three cards, exile them, then shuffle your library";
} }
ForesightEffect(final ForesightEffect effect) { ForesightEffect(final ForesightEffect effect) {

View file

@ -51,7 +51,7 @@ class ForeverYoungEffect extends OneShotEffect {
ForeverYoungEffect() { ForeverYoungEffect() {
super(Outcome.Benefit); super(Outcome.Benefit);
staticText = "Put any number of target creature cards from your graveyard on top of your library."; staticText = "Put any number of target creature cards from your graveyard on top of your library";
} }
private ForeverYoungEffect(final ForeverYoungEffect effect) { private ForeverYoungEffect(final ForeverYoungEffect effect) {

View file

@ -34,7 +34,7 @@ public final class FromUnderTheFloorboards extends CardImpl {
// If From Under the Floorboards's madness cost was paid, instead create X of those tokens tapped and you gain X life. // If From Under the Floorboards's madness cost was paid, instead create X of those tokens tapped and you gain X life.
DynamicValue xValue = new FromUnderTheFloorboardsManacostVariableValue(); DynamicValue xValue = new FromUnderTheFloorboardsManacostVariableValue();
Effect effect = new CreateTokenEffect(new ZombieToken(), xValue, true, false); Effect effect = new CreateTokenEffect(new ZombieToken(), xValue, true, false);
effect.setText("Create three 2/2 black Zombie creature tokens tapped and you gain 3 life. If {this} madness cost was paid, instead create X of those tokens tapped and you gain X life."); effect.setText("Create three 2/2 black Zombie creature tokens tapped and you gain 3 life. If {this} madness cost was paid, instead create X of those tokens tapped and you gain X life");
this.getSpellAbility().addEffect(effect); this.getSpellAbility().addEffect(effect);
this.getSpellAbility().addEffect(new GainLifeEffect(xValue)); this.getSpellAbility().addEffect(new GainLifeEffect(xValue));
} }

View file

@ -47,7 +47,7 @@ public final class GenjuOfTheFields extends CardImpl {
"Until end of turn, enchanted Plains becomes a 2/5 white Spirit creature", Duration.EndOfTurn); "Until end of turn, enchanted Plains becomes a 2/5 white Spirit creature", Duration.EndOfTurn);
Ability ability2 = new SimpleActivatedAbility(Zone.BATTLEFIELD, effect, new GenericManaCost(2)); Ability ability2 = new SimpleActivatedAbility(Zone.BATTLEFIELD, effect, new GenericManaCost(2));
effect = new GainAbilityAttachedEffect(new DealsDamageGainLifeSourceTriggeredAbility(), AttachmentType.AURA, Duration.EndOfTurn); effect = new GainAbilityAttachedEffect(new DealsDamageGainLifeSourceTriggeredAbility(), AttachmentType.AURA, Duration.EndOfTurn);
effect.setText("with \"Whenever this creature deals damage, its controller gains that much life.\". It's still a land"); effect.setText("with \"Whenever this creature deals damage, its controller gains that much life.\" It's still a land");
ability2.addEffect(effect); ability2.addEffect(effect);
this.addAbility(ability2); this.addAbility(ability2);

View file

@ -35,9 +35,8 @@ public final class GlitteringLion extends CardImpl {
// Prevent all damage that would be dealt to Glittering Lion. // Prevent all damage that would be dealt to Glittering Lion.
this.addAbility(GlitteringLionAbility.getInstance()); this.addAbility(GlitteringLionAbility.getInstance());
// {3}: Until end of turn, Glittering Lion loses "Prevent all damage that would be dealt to Glittering Lion." Any player may activate this ability. // {3}: Until end of turn, Glittering Lion loses "Prevent all damage that would be dealt to Glittering Lion." Any player may activate this ability.
SimpleActivatedAbility ability2 = new SimpleActivatedAbility(Zone.BATTLEFIELD, new LoseAbilitySourceEffect(GlitteringLionAbility.getInstance(), Duration.EndOfTurn).setText("Until end of turn, {this} loses \"Prevent all damage that would be dealt to {this}.\""), new ManaCostsImpl("{3}")); SimpleActivatedAbility ability2 = new SimpleActivatedAbility(Zone.BATTLEFIELD, new LoseAbilitySourceEffect(GlitteringLionAbility.getInstance(), Duration.EndOfTurn).setText("Until end of turn, {this} loses \"Prevent all damage that would be dealt to {this}.\" Any player may activate this ability"), new ManaCostsImpl("{3}"));
ability2.setMayActivate(TargetController.ANY); ability2.setMayActivate(TargetController.ANY);
ability2.addEffect(new InfoEffect("Any player may activate this ability"));
this.addAbility(ability2); this.addAbility(ability2);
} }

View file

@ -33,7 +33,7 @@ public final class Goatnap extends CardImpl {
this.getSpellAbility().addEffect(new UntapTargetEffect().setText("Untap that creature")); this.getSpellAbility().addEffect(new UntapTargetEffect().setText("Untap that creature"));
this.getSpellAbility().addEffect(new GainAbilityTargetEffect( this.getSpellAbility().addEffect(new GainAbilityTargetEffect(
HasteAbility.getInstance(), Duration.EndOfTurn HasteAbility.getInstance(), Duration.EndOfTurn
).setText("It gains haste until end of turn.")); ).setText("It gains haste until end of turn"));
this.getSpellAbility().addEffect(new GoatnapEffect()); this.getSpellAbility().addEffect(new GoatnapEffect());
} }

View file

@ -32,7 +32,7 @@ public final class InsultInjury extends SplitCard {
// Insult // Insult
// Damage can't be prevented this turn. If a source you control would deal damage this turn it deals // Damage can't be prevented this turn. If a source you control would deal damage this turn it deals
// double that damage instead. // double that damage instead.
getLeftHalfCard().getSpellAbility().addEffect(new DamageCantBePreventedEffect(Duration.EndOfTurn, "Damage can't be prevented this turn.", true, false)); getLeftHalfCard().getSpellAbility().addEffect(new DamageCantBePreventedEffect(Duration.EndOfTurn, "Damage can't be prevented this turn", true, false));
getLeftHalfCard().getSpellAbility().addEffect(new InsultDoubleDamageEffect()); getLeftHalfCard().getSpellAbility().addEffect(new InsultDoubleDamageEffect());
// to // to

View file

@ -29,8 +29,8 @@ public final class Juxtapose extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{3}{U}"); super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{3}{U}");
// You and target player exchange control of the creature you each control with the highest converted mana cost. Then exchange control of artifacts the same way. If two or more permanents a player controls are tied for highest cost, their controller chooses one of them. // You and target player exchange control of the creature you each control with the highest converted mana cost. Then exchange control of artifacts the same way. If two or more permanents a player controls are tied for highest cost, their controller chooses one of them.
this.getSpellAbility().addEffect(new JuxtaposeEffect(StaticFilters.FILTER_PERMANENT_CREATURE, "You and target player exchange control of the creature you each control with the highest converted mana cost.")); this.getSpellAbility().addEffect(new JuxtaposeEffect(StaticFilters.FILTER_PERMANENT_CREATURE, "You and target player exchange control of the creature you each control with the highest converted mana cost"));
this.getSpellAbility().addEffect(new JuxtaposeEffect(new FilterArtifactPermanent(), "Then exchange control of artifacts the same way. If two or more permanents a player controls are tied for highest cost, their controller chooses one of them.")); this.getSpellAbility().addEffect(new JuxtaposeEffect(new FilterArtifactPermanent(), "Then exchange control of artifacts the same way. If two or more permanents a player controls are tied for highest cost, their controller chooses one of them"));
this.getSpellAbility().addTarget(new TargetPlayer()); this.getSpellAbility().addTarget(new TargetPlayer());
} }

View file

@ -36,7 +36,7 @@ public final class KariZevsExpertise extends CardImpl {
this.getSpellAbility().addTarget(new TargetPermanent(filter)); this.getSpellAbility().addTarget(new TargetPermanent(filter));
this.getSpellAbility().addEffect(new GainControlTargetEffect(Duration.EndOfTurn)); this.getSpellAbility().addEffect(new GainControlTargetEffect(Duration.EndOfTurn));
this.getSpellAbility().addEffect(new UntapTargetEffect().setText("Untap it")); this.getSpellAbility().addEffect(new UntapTargetEffect().setText("Untap it"));
this.getSpellAbility().addEffect(new GainAbilityTargetEffect(HasteAbility.getInstance(), Duration.EndOfTurn).setText("It gans haste until end of turn.")); this.getSpellAbility().addEffect(new GainAbilityTargetEffect(HasteAbility.getInstance(), Duration.EndOfTurn).setText("It gains haste until end of turn"));
// You may cast a card with converted mana cost 2 or less from your hand without paying its mana cost. // You may cast a card with converted mana cost 2 or less from your hand without paying its mana cost.
this.getSpellAbility().addEffect(new CastWithoutPayingManaCostEffect(2)); this.getSpellAbility().addEffect(new CastWithoutPayingManaCostEffect(2));

View file

@ -52,7 +52,7 @@ class LeadershipVacuumEffect extends OneShotEffect {
LeadershipVacuumEffect() { LeadershipVacuumEffect() {
super(Outcome.Detriment); super(Outcome.Detriment);
staticText = "Target player returns each commander they control from the battlefield to the command zone."; staticText = "Target player returns each commander they control from the battlefield to the command zone";
} }
private LeadershipVacuumEffect(final LeadershipVacuumEffect effect) { private LeadershipVacuumEffect(final LeadershipVacuumEffect effect) {

View file

@ -27,7 +27,7 @@ public final class MaliciousAdvice extends CardImpl {
// Tap X target artifacts, creatures, and/or lands. You lose X life. // Tap X target artifacts, creatures, and/or lands. You lose X life.
Effect effect = new TapTargetEffect(); Effect effect = new TapTargetEffect();
effect.setText("X target artifacts, creatures, and/or lands."); effect.setText("X target artifacts, creatures, and/or lands");
this.getSpellAbility().addEffect(effect); this.getSpellAbility().addEffect(effect);
this.getSpellAbility().addEffect(new LoseLifeSourceControllerEffect(ManacostVariableValue.instance)); this.getSpellAbility().addEffect(new LoseLifeSourceControllerEffect(ManacostVariableValue.instance));
this.getSpellAbility().setTargetAdjuster(MaliciousAdviceAdjuster.instance); this.getSpellAbility().setTargetAdjuster(MaliciousAdviceAdjuster.instance);

View file

@ -54,7 +54,7 @@ class MandateOfPeaceOpponentsCantCastSpellsEffect extends ContinuousRuleModifyin
public MandateOfPeaceOpponentsCantCastSpellsEffect() { public MandateOfPeaceOpponentsCantCastSpellsEffect() {
super(Duration.EndOfTurn, Outcome.Benefit); super(Duration.EndOfTurn, Outcome.Benefit);
staticText = "Your opponents can't cast spells this turn."; staticText = "Your opponents can't cast spells this turn";
} }
public MandateOfPeaceOpponentsCantCastSpellsEffect(final MandateOfPeaceOpponentsCantCastSpellsEffect effect) { public MandateOfPeaceOpponentsCantCastSpellsEffect(final MandateOfPeaceOpponentsCantCastSpellsEffect 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 converted mana cost X.", true)); this.getSpellAbility().addEffect(new DestroyTargetEffect("Destroy target artifact or enchantment with converted mana cost X", true));
this.getSpellAbility().addEffect(new GainLifeEffect(ManacostVariableValue.instance)); this.getSpellAbility().addEffect(new GainLifeEffect(ManacostVariableValue.instance));
this.getSpellAbility().setTargetAdjuster(MolderAdjuster.instance); this.getSpellAbility().setTargetAdjuster(MolderAdjuster.instance);
} }

View file

@ -74,7 +74,7 @@ public final class NajeelaTheBladeBlossom extends CardImpl {
HasteAbility.getInstance(), HasteAbility.getInstance(),
Duration.EndOfTurn, Duration.EndOfTurn,
StaticFilters.FILTER_ATTACKING_CREATURES StaticFilters.FILTER_ATTACKING_CREATURES
).setText(", and haste until end of turn.")); ).setText(", and haste until end of turn"));
ability.addEffect(new AdditionalCombatPhaseEffect()); ability.addEffect(new AdditionalCombatPhaseEffect());
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -43,7 +43,7 @@ public final class OkoTheTrickster extends CardImpl {
// 0: Until end of turn, Oko, the Trickster becomes a copy of target creature you control. Prevent all damage that would be dealt to him this turn. // 0: Until end of turn, Oko, the Trickster becomes a copy of target creature you control. Prevent all damage that would be dealt to him this turn.
ability = new LoyaltyAbility(new OkoTheTricksterCopyEffect(), 0); ability = new LoyaltyAbility(new OkoTheTricksterCopyEffect(), 0);
ability.addEffect(new PreventAllDamageToSourceEffect(Duration.EndOfTurn) ability.addEffect(new PreventAllDamageToSourceEffect(Duration.EndOfTurn)
.setText("Prevent all damage that would be dealt to him this turn.")); .setText("Prevent all damage that would be dealt to him this turn"));
ability.addTarget(new TargetControlledCreaturePermanent()); ability.addTarget(new TargetControlledCreaturePermanent());
this.addAbility(ability); this.addAbility(ability);
@ -72,7 +72,7 @@ class OkoTheTricksterCopyEffect extends OneShotEffect {
OkoTheTricksterCopyEffect() { OkoTheTricksterCopyEffect() {
super(Outcome.Copy); super(Outcome.Copy);
this.staticText = "Until end of turn, {this} becomes a copy of target creature you control."; this.staticText = "Until end of turn, {this} becomes a copy of target creature you control";
} }
private OkoTheTricksterCopyEffect(final OkoTheTricksterCopyEffect effect) { private OkoTheTricksterCopyEffect(final OkoTheTricksterCopyEffect effect) {

View file

@ -47,7 +47,7 @@ class PortentEffect extends OneShotEffect {
public PortentEffect() { public PortentEffect() {
super(Outcome.DrawCard); super(Outcome.DrawCard);
this.staticText = "look at the top three cards of target player's library, then put them back in any order. You may have that player shuffle their library."; this.staticText = "look at the top three cards of target player's library, then put them back in any order. You may have that player shuffle their library";
} }
public PortentEffect(final PortentEffect effect) { public PortentEffect(final PortentEffect effect) {

View file

@ -30,13 +30,13 @@ public final class PrepareFight extends SplitCard {
// Untap target creature. It gets +2/+2 and gains lifelink until end of turn. // Untap target creature. It gets +2/+2 and gains lifelink until end of turn.
getLeftHalfCard().getSpellAbility().addTarget(new TargetCreaturePermanent()); getLeftHalfCard().getSpellAbility().addTarget(new TargetCreaturePermanent());
Effect effect = new UntapTargetEffect(); Effect effect = new UntapTargetEffect();
effect.setText("Untap target creature."); effect.setText("Untap target creature");
getLeftHalfCard().getSpellAbility().addEffect(effect); getLeftHalfCard().getSpellAbility().addEffect(effect);
effect = new BoostTargetEffect(2, 2, Duration.EndOfTurn); effect = new BoostTargetEffect(2, 2, Duration.EndOfTurn);
effect.setText("It gets +2/+2"); effect.setText("It gets +2/+2");
getLeftHalfCard().getSpellAbility().addEffect(effect); getLeftHalfCard().getSpellAbility().addEffect(effect);
effect = new GainAbilityTargetEffect(LifelinkAbility.getInstance(), Duration.EndOfTurn); effect = new GainAbilityTargetEffect(LifelinkAbility.getInstance(), Duration.EndOfTurn);
effect.setText("and gains lifelink until end of turn."); effect.setText("and gains lifelink until end of turn");
getLeftHalfCard().getSpellAbility().addEffect(effect); getLeftHalfCard().getSpellAbility().addEffect(effect);
// to // to

View file

@ -29,7 +29,7 @@ public final class QueenOfIce extends AdventureCard {
// Whenever Queen of Ice deals combat damage to a creature, tap that creature. It doesn't untap during its controller's next untap step. // Whenever Queen of Ice deals combat damage to a creature, tap that creature. It doesn't untap during its controller's next untap step.
Ability ability = new DealsDamageToACreatureTriggeredAbility( Ability ability = new DealsDamageToACreatureTriggeredAbility(
new TapTargetEffect().setText("tap that creature."), new TapTargetEffect().setText("tap that creature"),
true, false, true true, false, true
); );
ability.addEffect(new DontUntapInControllersNextUntapStepTargetEffect() ability.addEffect(new DontUntapInControllersNextUntapStepTargetEffect()

View file

@ -39,7 +39,7 @@ public final class RovingKeep extends CardImpl {
); );
ability.addEffect(new GainAbilitySourceEffect( ability.addEffect(new GainAbilitySourceEffect(
TrampleAbility.getInstance(), Duration.EndOfTurn TrampleAbility.getInstance(), Duration.EndOfTurn
).setText("and gains trample until end of turn.")); ).setText("and gains trample until end of turn"));
ability.addEffect(new CanAttackAsThoughItDidntHaveDefenderSourceEffect(Duration.EndOfTurn) ability.addEffect(new CanAttackAsThoughItDidntHaveDefenderSourceEffect(Duration.EndOfTurn)
.setText("It can attack this turn as though it didn't have defender")); .setText("It can attack this turn as though it didn't have defender"));
this.addAbility(ability); this.addAbility(ability);

View file

@ -60,7 +60,7 @@ class SingleCombatEffect extends OneShotEffect {
SingleCombatEffect() { SingleCombatEffect() {
super(Outcome.Benefit); super(Outcome.Benefit);
staticText = "Each player chooses a creature or planeswalker they control, then sacrifices the rest."; staticText = "Each player chooses a creature or planeswalker they control, then sacrifices the rest";
} }
private SingleCombatEffect(final SingleCombatEffect effect) { private SingleCombatEffect(final SingleCombatEffect effect) {
@ -97,7 +97,7 @@ class SingleCombatRestrictionEffect extends ContinuousRuleModifyingEffectImpl {
SingleCombatRestrictionEffect() { SingleCombatRestrictionEffect() {
super(Duration.UntilEndOfYourNextTurn, Outcome.Neutral); super(Duration.UntilEndOfYourNextTurn, Outcome.Neutral);
staticText = "Players can't cast creature or planeswalker spells until the end of your next turn."; staticText = "Players can't cast creature or planeswalker spells until the end of your next turn";
} }
private SingleCombatRestrictionEffect(final SingleCombatRestrictionEffect effect) { private SingleCombatRestrictionEffect(final SingleCombatRestrictionEffect effect) {

View file

@ -43,7 +43,7 @@ public final class SoldeviGolem extends CardImpl {
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new DontUntapInControllersUntapStepSourceEffect())); this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new DontUntapInControllersUntapStepSourceEffect()));
// At the beginning of your upkeep, you may untap target tapped creature an opponent controls. If you do, untap Soldevi Golem. // At the beginning of your upkeep, you may untap target tapped creature an opponent controls. If you do, untap Soldevi Golem.
Ability ability = new BeginningOfUpkeepTriggeredAbility(new UntapTargetEffect().setText("untap target tapped creature an opponent controls."), TargetController.YOU, true); Ability ability = new BeginningOfUpkeepTriggeredAbility(new UntapTargetEffect().setText("untap target tapped creature an opponent controls"), TargetController.YOU, true);
ability.addEffect(new UntapSourceEffect().setText("If you do, untap {this}")); ability.addEffect(new UntapSourceEffect().setText("If you do, untap {this}"));
ability.addTarget(new TargetCreaturePermanent()); ability.addTarget(new TargetCreaturePermanent());
this.addAbility(ability); this.addAbility(ability);

View file

@ -49,7 +49,7 @@ class SolfataraEffect extends ContinuousRuleModifyingEffectImpl {
public SolfataraEffect() { public SolfataraEffect() {
super(Duration.EndOfTurn, Outcome.Detriment); super(Duration.EndOfTurn, Outcome.Detriment);
staticText = "Target player can't play land cards this turn."; staticText = "Target player can't play land cards this turn";
} }
public SolfataraEffect(final SolfataraEffect effect) { public SolfataraEffect(final SolfataraEffect effect) {

View file

@ -47,7 +47,7 @@ public final class SorinVengefulBloodlord extends CardImpl {
LifelinkAbility.getInstance(), Duration.WhileOnBattlefield, LifelinkAbility.getInstance(), Duration.WhileOnBattlefield,
StaticFilters.FILTER_PERMANENT_CREATURE_OR_PLANESWALKER_A StaticFilters.FILTER_PERMANENT_CREATURE_OR_PLANESWALKER_A
), MyTurnCondition.instance, "As long as it's your turn, " + ), MyTurnCondition.instance, "As long as it's your turn, " +
"creatures and planeswalkers you control have lifelink." "creatures and planeswalkers you control have lifelink"
)).addHint(MyTurnHint.instance)); )).addHint(MyTurnHint.instance));
// +2: Sorin, Vengeful Bloodlord deals 1 damage to target player or planeswalker. // +2: Sorin, Vengeful Bloodlord deals 1 damage to target player or planeswalker.
@ -57,7 +57,7 @@ public final class SorinVengefulBloodlord extends CardImpl {
// -X: Return target creature card with converted mana cost X from your graveyard to the battlefield. That creature is a vampire in addition to its other types. // -X: Return target creature card with converted mana cost X from your graveyard to the battlefield. That creature is a vampire in addition to its other types.
ability = new LoyaltyAbility(new ReturnFromGraveyardToBattlefieldTargetEffect().setText( ability = new LoyaltyAbility(new ReturnFromGraveyardToBattlefieldTargetEffect().setText(
"Return target creature card with converted mana cost X from your graveyard to the battlefield." "Return target creature card with converted mana cost X from your graveyard to the battlefield"
)); ));
ability.addEffect(new SorinVengefulBloodlordEffect()); ability.addEffect(new SorinVengefulBloodlordEffect());
ability.setTargetAdjuster(SorinVengefulBloodlordAdjuster.instance); ability.setTargetAdjuster(SorinVengefulBloodlordAdjuster.instance);
@ -95,7 +95,7 @@ enum SorinVengefulBloodlordAdjuster implements TargetAdjuster {
class SorinVengefulBloodlordEffect extends ContinuousEffectImpl { class SorinVengefulBloodlordEffect extends ContinuousEffectImpl {
SorinVengefulBloodlordEffect() { SorinVengefulBloodlordEffect() {
super(Duration.Custom, Outcome.Neutral); super(Duration.Custom, Outcome.Neutral);
staticText = "That creature is a vampire in addition to its other types."; staticText = "That creature is a vampire in addition to its other types";
} }
private SorinVengefulBloodlordEffect(final SorinVengefulBloodlordEffect effect) { private SorinVengefulBloodlordEffect(final SorinVengefulBloodlordEffect effect) {

View file

@ -33,10 +33,16 @@ public final class SoulSeparator extends CardImpl {
// {5}, {T}, Sacrifice Soul Separator: Exile target creature card from your graveyard. // {5}, {T}, Sacrifice Soul Separator: Exile target creature card from your graveyard.
// Create a token that's a copy of that card except it's 1/1, it's a Spirit in addition to its other types, and it has flying. // Create a token that's a copy of that card except it's 1/1, it's a Spirit in addition to its other types, and it has flying.
// Create a black Zombie creature token with power equal to that card's power and toughness equal that card's toughness. // Put a black Zombie creature token onto the battlefield with power equal to that card's power and toughness equal that card's toughness.
// 20200601 - 701.6c
// Previously, an effect that created tokens instructed a player to put [those tokens] onto the battlefield.
// Cards that were printed with that text have received errata in the Oracle card reference so they now
// create those tokens.
CreateTokenCopyTargetEffect copyEffect = new CreateTokenCopyTargetEffect(null, null, false, 1, false, false, null, 1, 1, true); CreateTokenCopyTargetEffect copyEffect = new CreateTokenCopyTargetEffect(null, null, false, 1, false, false, null, 1, 1, true);
copyEffect.setAdditionalSubType(SubType.SPIRIT); copyEffect.setAdditionalSubType(SubType.SPIRIT);
copyEffect.setText("Create a token that's a copy of that card except it's 1/1, it's a Spirit in addition to its other types, and it has flying. "); copyEffect.setText("Create a token that's a copy of that card except it's 1/1, it's a Spirit in addition to its other types, and it has flying");
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, copyEffect, new ManaCostsImpl("{5}")); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, copyEffect, new ManaCostsImpl("{5}"));
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());
ability.addCost(new SacrificeSourceCost()); ability.addCost(new SacrificeSourceCost());

View file

@ -27,9 +27,9 @@ public final class StolenByTheFae extends CardImpl {
// Return target creature with converted mana cost X to its owner's hand. You create X 1/1 blue Faerie creature tokens with flying. // Return target creature with converted mana cost X to its owner's hand. You create X 1/1 blue Faerie creature tokens with flying.
this.getSpellAbility().addEffect(new ReturnToHandTargetEffect() this.getSpellAbility().addEffect(new ReturnToHandTargetEffect()
.setText("Return target creature with converted mana cost X to its owner's hand.")); .setText("Return target creature with converted mana cost X to its owner's hand"));
this.getSpellAbility().addEffect(new CreateTokenEffect(new FaerieToken(), ManacostVariableValue.instance) this.getSpellAbility().addEffect(new CreateTokenEffect(new FaerieToken(), ManacostVariableValue.instance)
.setText("You create X 1/1 blue Faerie creature tokens with flying.")); .setText("You create X 1/1 blue Faerie creature tokens with flying"));
this.getSpellAbility().setTargetAdjuster(StolenByTheFaeAdjuster.instance); this.getSpellAbility().setTargetAdjuster(StolenByTheFaeAdjuster.instance);
} }

View file

@ -67,9 +67,9 @@ class SuncleanserRemoveCountersEffect extends OneShotEffect {
public SuncleanserRemoveCountersEffect(boolean player) { public SuncleanserRemoveCountersEffect(boolean player) {
super(Outcome.Benefit); super(Outcome.Benefit);
if (player) { if (player) {
staticText = "Target opponent loses all counters."; staticText = "Target opponent loses all counters";
} else { } else {
staticText = "Remove all counters from target creature."; staticText = "Remove all counters from target creature";
} }
} }

View file

@ -19,7 +19,7 @@ import java.util.UUID;
public final class TriumphantSurge extends CardImpl { public final class TriumphantSurge extends CardImpl {
private static final FilterPermanent filter private static final FilterPermanent filter
= new FilterCreaturePermanent("creature with power 4 or greater."); = new FilterCreaturePermanent("creature with power 4 or greater");
static { static {
filter.add(new PowerPredicate(ComparisonType.MORE_THAN, 3)); filter.add(new PowerPredicate(ComparisonType.MORE_THAN, 3));

View file

@ -46,7 +46,7 @@ class TurfWoundEffect extends ContinuousRuleModifyingEffectImpl {
public TurfWoundEffect() { public TurfWoundEffect() {
super(Duration.EndOfTurn, Outcome.Detriment); super(Duration.EndOfTurn, Outcome.Detriment);
staticText = "Target player can't play land cards this turn."; staticText = "Target player can't play land cards this turn";
} }
public TurfWoundEffect(final TurfWoundEffect effect) { public TurfWoundEffect(final TurfWoundEffect effect) {

View file

@ -39,10 +39,10 @@ public final class VraskaRegalGorgon extends CardImpl {
// +2: Put a +1/+1 counter on up to one target creature. That creature gains menace until end of turn. // +2: Put a +1/+1 counter on up to one target creature. That creature gains menace until end of turn.
Ability ability = new LoyaltyAbility(new AddCountersTargetEffect( Ability ability = new LoyaltyAbility(new AddCountersTargetEffect(
CounterType.P1P1.createInstance() CounterType.P1P1.createInstance()
).setText("Put a +1/+1 counter on up to one target creature."), 2); ).setText("Put a +1/+1 counter on up to one target creature"), 2);
ability.addEffect(new GainAbilityTargetEffect( ability.addEffect(new GainAbilityTargetEffect(
new MenaceAbility(), Duration.EndOfTurn new MenaceAbility(), Duration.EndOfTurn
).setText("That creature gains menace until end of turn.")); ).setText("That creature gains menace until end of turn"));
ability.addTarget(new TargetCreaturePermanent(0, 1)); ability.addTarget(new TargetCreaturePermanent(0, 1));
this.addAbility(ability); this.addAbility(ability);

View file

@ -44,7 +44,7 @@ public final class Wellspring extends CardImpl {
// At the beginning of your upkeep, untap enchanted land. You gain control of that land until end of turn. // At the beginning of your upkeep, untap enchanted land. You gain control of that land until end of turn.
ability = new BeginningOfUpkeepTriggeredAbility( ability = new BeginningOfUpkeepTriggeredAbility(
new UntapEnchantedEffect().setText("untap enchanted land."), TargetController.YOU, false new UntapEnchantedEffect().setText("untap enchanted land"), TargetController.YOU, false
); );
ability.addEffect(new WellspringEffect("You gain control of that land until end of turn")); ability.addEffect(new WellspringEffect("You gain control of that land until end of turn"));
this.addAbility(ability); this.addAbility(ability);

View file

@ -52,7 +52,7 @@ public final class WickedWolf extends CardImpl {
); );
ability.addEffect(new GainAbilitySourceEffect( ability.addEffect(new GainAbilitySourceEffect(
IndestructibleAbility.getInstance(), Duration.EndOfTurn IndestructibleAbility.getInstance(), Duration.EndOfTurn
).setText("it gains indestructible until end of turn.")); ).setText("it gains indestructible until end of turn"));
ability.addEffect(new TapSourceEffect().setText("Tap it")); ability.addEffect(new TapSourceEffect().setText("Tap it"));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -45,7 +45,7 @@ class WinnowEffect extends DestroyTargetEffect {
public WinnowEffect() { public WinnowEffect() {
super(); super();
staticText = "Destroy target nonland permanent if another permanent with the same name is on the battlefield."; staticText = "Destroy target nonland permanent if another permanent with the same name is on the battlefield";
} }
public WinnowEffect(final WinnowEffect effect) { public WinnowEffect(final WinnowEffect effect) {

View file

@ -57,10 +57,10 @@ public final class WorkshopElders extends CardImpl {
).setText("have target noncreature artifact you control become"), TargetController.YOU, true); ).setText("have target noncreature artifact you control become"), TargetController.YOU, true);
ability.addEffect(new SetPowerToughnessTargetEffect( ability.addEffect(new SetPowerToughnessTargetEffect(
0, 0, Duration.EndOfGame 0, 0, Duration.EndOfGame
).setText("a 0/0 artifact creature.")); ).setText("a 0/0 artifact creature"));
ability.addEffect(new AddCountersTargetEffect( ability.addEffect(new AddCountersTargetEffect(
CounterType.P1P1.createInstance(4) CounterType.P1P1.createInstance(4)
).setText("If you do, put four +1/+1 counters on it.")); ).setText("If you do, put four +1/+1 counters on it"));
ability.addTarget(new TargetPermanent(filter2)); ability.addTarget(new TargetPermanent(filter2));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -60,7 +60,7 @@ class ZirilanOfTheClawEffect extends OneShotEffect {
public ZirilanOfTheClawEffect() { public ZirilanOfTheClawEffect() {
super(Outcome.PutCreatureInPlay); super(Outcome.PutCreatureInPlay);
this.staticText = "Search your library for a Dragon permanent card and put that card onto the battlefield. Then shuffle your library." this.staticText = "Search your library for a Dragon permanent card and put that card onto the battlefield. Then shuffle your library."
+ "That Dragon gains haste until end of turn. Exile it at the beginning of the next end step"; + " That Dragon gains haste until end of turn. Exile it at the beginning of the next end step";
} }
public ZirilanOfTheClawEffect(final ZirilanOfTheClawEffect effect) { public ZirilanOfTheClawEffect(final ZirilanOfTheClawEffect effect) {

View file

@ -103,6 +103,7 @@ public class BeginningOfEndStepTriggeredAbility extends TriggeredAbilityImpl {
@Override @Override
public String getRule() { public String getRule() {
StringBuilder sb = new StringBuilder(getEffects().getText(modes.getMode())); StringBuilder sb = new StringBuilder(getEffects().getText(modes.getMode()));
if (this.optional) { if (this.optional) {
if (sb.substring(0, 6).toLowerCase(Locale.ENGLISH).equals("target")) { if (sb.substring(0, 6).toLowerCase(Locale.ENGLISH).equals("target")) {
sb.insert(0, "you may have "); sb.insert(0, "you may have ");
@ -114,6 +115,7 @@ public class BeginningOfEndStepTriggeredAbility extends TriggeredAbilityImpl {
if (abilityWord != null) { if (abilityWord != null) {
abilityWordRule = "<i>" + abilityWord.toString() + "</i> &mdash "; abilityWordRule = "<i>" + abilityWord.toString() + "</i> &mdash ";
} }
switch (targetController) { switch (targetController) {
case YOU: case YOU:
return sb.insert(0, generateConditionString()).insert(0, abilityWordRule + "At the beginning of your end step, ").toString(); return sb.insert(0, generateConditionString()).insert(0, abilityWordRule + "At the beginning of your end step, ").toString();
@ -134,6 +136,13 @@ public class BeginningOfEndStepTriggeredAbility extends TriggeredAbilityImpl {
private String generateConditionString() { private String generateConditionString() {
if (interveningIfClauseCondition != null) { if (interveningIfClauseCondition != null) {
if (interveningIfClauseCondition.toString().startsWith("if")) { if (interveningIfClauseCondition.toString().startsWith("if")) {
//Fixes punctuation on multiple sentence if-then construction
// see -- Colfenor's Urn
if (interveningIfClauseCondition.toString().endsWith(".")){
return interveningIfClauseCondition.toString() + " ";
}
return interveningIfClauseCondition.toString() + ", "; return interveningIfClauseCondition.toString() + ", ";
} else { } else {
return "if {this} is " + interveningIfClauseCondition.toString() + ", "; return "if {this} is " + interveningIfClauseCondition.toString() + ", ";

View file

@ -53,17 +53,27 @@ public class Effects extends ArrayList<Effect> {
// concat effects (default: each effect with a new sentence) // concat effects (default: each effect with a new sentence)
String concatPrefix = effect.getConcatPrefix(); String concatPrefix = effect.getConcatPrefix();
if (effectNum > 1 && !concatPrefix.isEmpty() && !concatPrefix.equals(".")) { if (effectNum > 1 && !concatPrefix.isEmpty() && !concatPrefix.equals(".")) {
nextRule = concatPrefix + " " + nextRule; nextRule = concatPrefix + " " + nextRule;
} }
if (nextRule != null) { if (nextRule != null) {
//check if nextRule is a new sentence or not.
if (nextRule.startsWith("and ") || nextRule.startsWith("with ") || nextRule.startsWith("then ")) { if (nextRule.startsWith("and ") || nextRule.startsWith("with ") || nextRule.startsWith("then ")) {
endString = " "; endString = " ";
} else if (nextRule.startsWith(",") || nextRule.startsWith(" ")) { } else if (nextRule.startsWith(",") || nextRule.startsWith(" ")) {
endString = ""; endString = "";
// nextRule determined to be a new sentence, now check ending of lastRule
} else if (lastRule != null && lastRule.length() > 3) { } else if (lastRule != null && lastRule.length() > 3) {
if (!lastRule.endsWith(".") && !lastRule.endsWith("<br>")) { //check if lastRule already has appropriate punctuation, if so, add a space.
if (lastRule.endsWith(".\"") ||
lastRule.endsWith(".)") ||
lastRule.endsWith(".)</i>") ||
lastRule.endsWith(".")){
endString = " ";
// if lastRule does not have appropriate punctuation, add the default ". "
} else if (!lastRule.endsWith(".") && !lastRule.endsWith("<br>")) {
endString = ". "; endString = ". ";
} }
if (nextRule.length() > 3) { if (nextRule.length() > 3) {
@ -83,9 +93,12 @@ public class Effects extends ArrayList<Effect> {
sbText.append(currentRule); sbText.append(currentRule);
} }
lastRule = nextRule; lastRule = nextRule;
} }
//add punctuation to very last rule.
if (lastRule != null && lastRule.length() > 3 if (lastRule != null && lastRule.length() > 3
&& !lastRule.endsWith(".") && !lastRule.endsWith(".")
&& !lastRule.endsWith("\"") && !lastRule.endsWith("\"")
@ -96,6 +109,7 @@ public class Effects extends ArrayList<Effect> {
} }
return sbText.toString(); return sbText.toString();
} }
public boolean hasOutcome(Ability source, Outcome outcome) { public boolean hasOutcome(Ability source, Outcome outcome) {

View file

@ -16,7 +16,12 @@ public class PreventAllDamageToSourceEffect extends PreventionEffectImpl {
public PreventAllDamageToSourceEffect(Duration duration) { public PreventAllDamageToSourceEffect(Duration duration) {
super(duration, Integer.MAX_VALUE, false); super(duration, Integer.MAX_VALUE, false);
staticText = "Prevent all damage that would be dealt to {this} " + duration.toString(); //Some durations have no text
if ( duration.toString().length()>0){
staticText = "Prevent all damage that would be dealt to {this} " + duration.toString();
} else {
staticText = "Prevent all damage that would be dealt to {this}";
}
} }
public PreventAllDamageToSourceEffect(final PreventAllDamageToSourceEffect effect) { public PreventAllDamageToSourceEffect(final PreventAllDamageToSourceEffect effect) {

View file

@ -135,7 +135,7 @@ public class RevealCardsFromLibraryUntilEffect extends OneShotEffect {
sb.append("a random"); sb.append("a random");
} }
sb.append(" order."); sb.append(" order");
} }
break; break;
} }

View file

@ -76,7 +76,7 @@ public class DistributeCountersEffect extends OneShotEffect {
} }
String name = counterType.getName(); String name = counterType.getName();
String text = "distribute " + CardUtil.numberToText(amount) + ' ' + name + " counters among " + targetDescription + '.'; String text = "distribute " + CardUtil.numberToText(amount) + ' ' + name + " counters among " + targetDescription;
if (removeAtEndOfTurn) { if (removeAtEndOfTurn) {
text += " For each " + name + " counter you put on a creature this way, remove a " text += " For each " + name + " counter you put on a creature this way, remove a "
+ name + " counter from that creature at the beginning of the next cleanup step."; + name + " counter from that creature at the beginning of the next cleanup step.";