text fixes [ODY] [TOR] [JUD] [ONS] [LGN] [SCG]

This commit is contained in:
xenohedron 2025-05-31 14:04:42 -04:00
parent 1abaeaabdb
commit 99189ea7a3
58 changed files with 135 additions and 126 deletions

View file

@ -29,7 +29,7 @@ public final class AnuridBarkripper extends CardImpl {
// Threshold - Anurid Barkripper gets +2/+2 as long as seven or more cards are in your graveyard. // Threshold - Anurid Barkripper gets +2/+2 as long as seven or more cards are in your graveyard.
this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect( this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect(
new BoostSourceEffect(2, 2, Duration.WhileOnBattlefield), ThresholdCondition.instance, new BoostSourceEffect(2, 2, Duration.WhileOnBattlefield), ThresholdCondition.instance,
"as long as seven or more cards are in your graveyard, {this} gets +2/+2" "{this} gets +2/+2 as long as seven or more cards are in your graveyard"
)).setAbilityWord(AbilityWord.THRESHOLD)); )).setAbilityWord(AbilityWord.THRESHOLD));
} }

View file

@ -48,7 +48,7 @@ class BamboozleEffect extends OneShotEffect {
BamboozleEffect() { BamboozleEffect() {
super(Outcome.Discard); super(Outcome.Discard);
staticText = "Target player reveals the top four cards of their library. You choose two of those cards and put them into their graveyard. Put the rest on top of their library in any order"; staticText = "Target player reveals the top four cards of their library. You choose two of those cards and put them into that player's graveyard. Put the rest on top of their library in any order";
} }
private BamboozleEffect(final BamboozleEffect effect) { private BamboozleEffect(final BamboozleEffect effect) {

View file

@ -41,7 +41,7 @@ public final class Bloodcurdler extends CardImpl {
// Threshold - As long as seven or more cards are in your graveyard, Bloodcurdler gets +1/+1 and has "At the beginning of your end step, exile two cards from your graveyard." // Threshold - As long as seven or more cards are in your graveyard, Bloodcurdler gets +1/+1 and has "At the beginning of your end step, exile two cards from your graveyard."
Ability thresholdAbility = new SimpleStaticAbility(new ConditionalContinuousEffect( Ability thresholdAbility = new SimpleStaticAbility(new ConditionalContinuousEffect(
new BoostSourceEffect(1, 1, Duration.WhileOnBattlefield), ThresholdCondition.instance, new BoostSourceEffect(1, 1, Duration.WhileOnBattlefield), ThresholdCondition.instance,
"If seven or more cards are in your graveyard, {this} gets +1/+1" "As long as seven or more cards are in your graveyard, {this} gets +1/+1"
)); ));
thresholdAbility.addEffect(new ConditionalContinuousEffect( thresholdAbility.addEffect(new ConditionalContinuousEffect(
new GainAbilitySourceEffect(new BeginningOfEndStepTriggeredAbility( new GainAbilitySourceEffect(new BeginningOfEndStepTriggeredAbility(

View file

@ -24,7 +24,7 @@ import mage.filter.common.FilterCreaturePermanent;
*/ */
public final class Brawn extends CardImpl { public final class Brawn extends CardImpl {
private static final String ruleText = "As long as Brawn is in your graveyard and you control a Forest, creatures you control have trample"; private static final String ruleText = "As long as this card is in your graveyard and you control a Forest, creatures you control have trample";
private static final FilterControlledPermanent filter = new FilterControlledPermanent("Forest"); private static final FilterControlledPermanent filter = new FilterControlledPermanent("Forest");

View file

@ -48,7 +48,7 @@ public final class CallousOppressor extends CardImpl {
ConditionalContinuousEffect effect = new ConditionalContinuousEffect( ConditionalContinuousEffect effect = new ConditionalContinuousEffect(
new GainControlTargetEffect(Duration.OneUse), new GainControlTargetEffect(Duration.OneUse),
SourceTappedCondition.TAPPED, SourceTappedCondition.TAPPED,
"Gain control of target creature for as long as {this} remains tapped"); "Gain control of target creature that isn't of the chosen type for as long as {this} remains tapped");
Ability ability = new SimpleActivatedAbility(effect, new TapSourceCost()); Ability ability = new SimpleActivatedAbility(effect, new TapSourceCost());
ability.addTarget(new TargetCreaturePermanent(new CallousOppressorFilter())); ability.addTarget(new TargetCreaturePermanent(new CallousOppressorFilter()));
this.addAbility(ability); this.addAbility(ability);

View file

@ -1,17 +1,24 @@
package mage.cards.c; package mage.cards.c;
import java.util.UUID; import mage.MageObjectReference;
import mage.abilities.Ability;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.DamageTargetEffect; import mage.abilities.effects.common.DamageTargetEffect;
import mage.abilities.effects.common.ExileTargetIfDiesEffect; import mage.abilities.effects.common.replacement.DiesReplacementEffect;
import mage.abilities.effects.common.ruleModifying.CantRegenerateTargetEffect; import mage.abilities.effects.common.ruleModifying.CantRegenerateTargetEffect;
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.Outcome;
import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.target.common.TargetAnyTarget; import mage.target.common.TargetAnyTarget;
import mage.target.targetpointer.FixedTarget;
import mage.watchers.common.DamagedByWatcher; import mage.watchers.common.DamagedByWatcher;
import java.util.UUID;
/** /**
* *
* @author markedagain * @author markedagain
@ -21,12 +28,10 @@ public final class Carbonize extends CardImpl {
public Carbonize(UUID ownerId, CardSetInfo setInfo) { public Carbonize(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{2}{R}"); super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{2}{R}");
// Carbonize deals 3 damage to any target. That creature can't be regenerated this turn. If the creature would die this turn, exile it instead. // Carbonize deals 3 damage to any target. If it's a creature, it can't be regenerated this turn, and if it would die this turn, exile it instead.
this.getSpellAbility().addEffect(new DamageTargetEffect(3)); this.getSpellAbility().addEffect(new DamageTargetEffect(3));
this.getSpellAbility().addEffect(new CantRegenerateTargetEffect(Duration.EndOfTurn, "That creature")); this.getSpellAbility().addEffect(new CarbonizeEffect());
this.getSpellAbility().addEffect(new ExileTargetIfDiesEffect().setText("If the creature would die this turn, exile it instead"));
this.getSpellAbility().addTarget(new TargetAnyTarget()); this.getSpellAbility().addTarget(new TargetAnyTarget());
this.getSpellAbility().addWatcher(new DamagedByWatcher(false));
} }
@ -39,3 +44,32 @@ public final class Carbonize extends CardImpl {
return new Carbonize(this); return new Carbonize(this);
} }
} }
class CarbonizeEffect extends OneShotEffect {
CarbonizeEffect() {
super(Outcome.Benefit);
staticText = "If it's a creature, it can't be regenerated this turn, and if it would die this turn, exile it instead";
}
private CarbonizeEffect(final CarbonizeEffect effect) {
super(effect);
}
@Override
public CarbonizeEffect copy() {
return new CarbonizeEffect(this);
}
@Override
public boolean apply(Game game, Ability source) {
Permanent permanent = game.getPermanent(getTargetPointer().getFirst(game, source));
if (permanent == null || !permanent.isCreature(game)) {
return false;
}
game.addEffect(new CantRegenerateTargetEffect(Duration.EndOfTurn, "")
.setTargetPointer(new FixedTarget(permanent, game)), source);
game.addEffect(new DiesReplacementEffect(new MageObjectReference(permanent, game), Duration.EndOfTurn), source);
return true;
}
}

View file

@ -53,7 +53,7 @@ class CatalystStoneCostReductionEffect extends CostModificationEffectImpl {
CatalystStoneCostReductionEffect() { CatalystStoneCostReductionEffect() {
super(Duration.WhileOnBattlefield, Outcome.Benefit, CostModificationType.REDUCE_COST); super(Duration.WhileOnBattlefield, Outcome.Benefit, CostModificationType.REDUCE_COST);
this.staticText = "Flashback costs you pay cost up to {2} less"; this.staticText = "Flashback costs you pay cost {2} less";
} }
protected CatalystStoneCostReductionEffect(final CatalystStoneCostReductionEffect effect) { protected CatalystStoneCostReductionEffect(final CatalystStoneCostReductionEffect effect) {

View file

@ -49,7 +49,7 @@ class ChainOfSilenceEffect extends OneShotEffect {
ChainOfSilenceEffect() { ChainOfSilenceEffect() {
super(Outcome.PreventDamage); super(Outcome.PreventDamage);
this.staticText = "Prevent all damage target creature would deal this turn. That creature's controller may sacrifice a land. If the player does, they may copy this spell and may choose a new target for that copy"; this.staticText = "Prevent all damage target creature would deal this turn. That creature's controller may sacrifice a land of their choice. If the player does, they may copy this spell and may choose a new target for that copy";
} }
private ChainOfSilenceEffect(final ChainOfSilenceEffect effect) { private ChainOfSilenceEffect(final ChainOfSilenceEffect effect) {

View file

@ -48,7 +48,7 @@ class ChainOfVaporEffect extends OneShotEffect {
ChainOfVaporEffect() { ChainOfVaporEffect() {
super(Outcome.ReturnToHand); super(Outcome.ReturnToHand);
this.staticText = "Return target nonland permanent to its owner's hand. Then that permanent's controller may sacrifice a land. If the player does, they may copy this spell and may choose a new target for that copy"; this.staticText = "Return target nonland permanent to its owner's hand. Then that permanent's controller may sacrifice a land of their choice. If the player does, they may copy this spell and may choose a new target for that copy";
} }
private ChainOfVaporEffect(final ChainOfVaporEffect effect) { private ChainOfVaporEffect(final ChainOfVaporEffect effect) {

View file

@ -36,7 +36,7 @@ import mage.target.targetpointer.FixedTarget;
*/ */
public final class ChainerDementiaMaster extends CardImpl { public final class ChainerDementiaMaster extends CardImpl {
private static final FilterCreaturePermanent filterCreature = new FilterCreaturePermanent("Nightmare creatures"); private static final FilterCreaturePermanent filterCreature = new FilterCreaturePermanent("All Nightmares");
private static final FilterPermanent filterPermanent = new FilterPermanent("Nightmares"); private static final FilterPermanent filterPermanent = new FilterPermanent("Nightmares");
static { static {
filterCreature.add(SubType.NIGHTMARE.getPredicate()); filterCreature.add(SubType.NIGHTMARE.getPredicate());

View file

@ -36,7 +36,7 @@ public final class ChildhoodHorror extends CardImpl {
// Threshold - As long as seven or more cards are in your graveyard, Childhood Horror gets +2/+2 and can't block. // Threshold - As long as seven or more cards are in your graveyard, Childhood Horror gets +2/+2 and can't block.
Ability thresholdAbility = new SimpleStaticAbility(new ConditionalContinuousEffect( Ability thresholdAbility = new SimpleStaticAbility(new ConditionalContinuousEffect(
new BoostSourceEffect(2, 2, Duration.WhileOnBattlefield), new BoostSourceEffect(2, 2, Duration.WhileOnBattlefield),
ThresholdCondition.instance, "If seven or more cards are in your graveyard, {this} gets +2/+2" ThresholdCondition.instance, "As long as seven or more cards are in your graveyard, {this} gets +2/+2"
)); ));
thresholdAbility.addEffect(new ConditionalRestrictionEffect( thresholdAbility.addEffect(new ConditionalRestrictionEffect(
new CantBlockSourceEffect(Duration.WhileOnBattlefield), ThresholdCondition.instance new CantBlockSourceEffect(Duration.WhileOnBattlefield), ThresholdCondition.instance

View file

@ -38,7 +38,7 @@ public final class DaruCavalier extends CardImpl {
this.addAbility(FirstStrikeAbility.getInstance()); this.addAbility(FirstStrikeAbility.getInstance());
// When Daru Cavalier enters the battlefield, you may search your library for a card named Daru Cavalier, reveal it, and put it into your hand. If you do, shuffle your library. // When Daru Cavalier enters the battlefield, you may search your library for a card named Daru Cavalier, reveal it, and put it into your hand. If you do, shuffle your library.
TargetCardInLibrary target = new TargetCardInLibrary(0, 1, filter); TargetCardInLibrary target = new TargetCardInLibrary(filter);
this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInHandEffect(target, true), true)); this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInHandEffect(target, true), true));
} }

View file

@ -26,7 +26,7 @@ import mage.target.common.TargetControlledPermanent;
*/ */
public final class DevotedCaretaker extends CardImpl { public final class DevotedCaretaker extends CardImpl {
private static final FilterSpell filter = new FilterSpell("instant spells and sorcery spells"); private static final FilterSpell filter = new FilterSpell("instant spells and from sorcery spells");
static{ static{
filter.add(Predicates.or(CardType.SORCERY.getPredicate(), CardType.INSTANT.getPredicate())); filter.add(Predicates.or(CardType.SORCERY.getPredicate(), CardType.INSTANT.getPredicate()));

View file

@ -43,7 +43,7 @@ public final class DirtyWererat extends CardImpl {
// Threshold - As long as seven or more cards are in your graveyard, Dirty Wererat gets +2/+2 and can't block. // Threshold - As long as seven or more cards are in your graveyard, Dirty Wererat gets +2/+2 and can't block.
Ability thresholdAbility = new SimpleStaticAbility(new ConditionalContinuousEffect( Ability thresholdAbility = new SimpleStaticAbility(new ConditionalContinuousEffect(
new BoostSourceEffect(2, 2, Duration.WhileOnBattlefield), new BoostSourceEffect(2, 2, Duration.WhileOnBattlefield),
ThresholdCondition.instance, "If seven or more cards are in your graveyard, {this} gets +2/+2" ThresholdCondition.instance, "As long as seven or more cards are in your graveyard, {this} gets +2/+2"
)); ));
thresholdAbility.addEffect(new ConditionalRestrictionEffect( thresholdAbility.addEffect(new ConditionalRestrictionEffect(
new CantBlockSourceEffect(Duration.WhileOnBattlefield), ThresholdCondition.instance new CantBlockSourceEffect(Duration.WhileOnBattlefield), ThresholdCondition.instance

View file

@ -37,7 +37,7 @@ public final class DivineSacrament extends CardImpl {
// Threshold - White creatures get an additional +1/+1 as long as seven or more cards are in your graveyard. // Threshold - White creatures get an additional +1/+1 as long as seven or more cards are in your graveyard.
this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect( this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect(
new BoostAllEffect(1, 1, Duration.WhileOnBattlefield, filter, false), new BoostAllEffect(1, 1, Duration.WhileOnBattlefield, filter, false),
ThresholdCondition.instance, "If seven or more cards are in your graveyard, white creatures get an additional +1/+1." ThresholdCondition.instance, "white creatures get an additional +1/+1 as long as seven or more cards are in your graveyard"
)).setAbilityWord(AbilityWord.THRESHOLD)); )).setAbilityWord(AbilityWord.THRESHOLD));
} }

View file

@ -32,7 +32,7 @@ public final class Epicenter extends CardImpl {
// Target player sacrifices a land. // Target player sacrifices a land.
this.getSpellAbility().addEffect(new ConditionalOneShotEffect( this.getSpellAbility().addEffect(new ConditionalOneShotEffect(
new SacrificeEffect(StaticFilters.FILTER_LAND, 1, "Target player"), new SacrificeEffect(StaticFilters.FILTER_LAND, 1, "Target player"),
condition, "Target player sacrifices a land" condition, "Target player sacrifices a land of their choice"
)); ));
this.getSpellAbility().addTarget(new TargetPlayer()); this.getSpellAbility().addTarget(new TargetPlayer());

View file

@ -23,7 +23,7 @@ import mage.filter.common.FilterControlledPermanent;
*/ */
public final class Filth extends CardImpl { public final class Filth extends CardImpl {
private static final String ruleText = "As long as Filth is in your graveyard and you control a Swamp, creatures you control have swampwalk"; private static final String ruleText = "As long as this card is in your graveyard and you control a Swamp, creatures you control have swampwalk";
private static final FilterControlledPermanent filter = new FilterControlledPermanent("Swamp"); private static final FilterControlledPermanent filter = new FilterControlledPermanent("Swamp");

View file

@ -64,7 +64,7 @@ public final class FlameBurst extends CardImpl {
class CountAsFlameBurstAbility extends SimpleStaticAbility { class CountAsFlameBurstAbility extends SimpleStaticAbility {
public CountAsFlameBurstAbility() { public CountAsFlameBurstAbility() {
super(Zone.GRAVEYARD, new InfoEffect("If {this} is in a graveyard, effects from spells named Flame Burst count it as a card named Flame Burst")); super(Zone.GRAVEYARD, new InfoEffect("If this card is in a graveyard, effects from spells named Flame Burst count it as a card named Flame Burst"));
} }
private CountAsFlameBurstAbility(CountAsFlameBurstAbility ability) { private CountAsFlameBurstAbility(CountAsFlameBurstAbility ability) {

View file

@ -36,7 +36,7 @@ public final class Frightcrawler extends CardImpl {
// Threshold - As long as seven or more cards are in your graveyard, Frightcrawler gets +2/+2 and can't block. // Threshold - As long as seven or more cards are in your graveyard, Frightcrawler gets +2/+2 and can't block.
Ability ability = new SimpleStaticAbility(new ConditionalContinuousEffect( Ability ability = new SimpleStaticAbility(new ConditionalContinuousEffect(
new BoostSourceEffect(2, 2, Duration.WhileOnBattlefield), new BoostSourceEffect(2, 2, Duration.WhileOnBattlefield),
ThresholdCondition.instance, "If seven or more cards are in your graveyard, {this} gets +2/+2 " ThresholdCondition.instance, "As long as seven or more cards are in your graveyard, {this} gets +2/+2"
)); ));
ability.addEffect(new ConditionalRestrictionEffect( ability.addEffect(new ConditionalRestrictionEffect(
new CantBlockSourceEffect(Duration.WhileOnBattlefield), new CantBlockSourceEffect(Duration.WhileOnBattlefield),

View file

@ -37,7 +37,8 @@ public final class GempalmIncinerator extends CardImpl {
// Cycling {1}{R} // Cycling {1}{R}
this.addAbility(new CyclingAbility(new ManaCostsImpl<>("{1}{R}"))); this.addAbility(new CyclingAbility(new ManaCostsImpl<>("{1}{R}")));
// When you cycle Gempalm Incinerator, you may have it deal X damage to target creature, where X is the number of Goblins on the battlefield. // When you cycle Gempalm Incinerator, you may have it deal X damage to target creature, where X is the number of Goblins on the battlefield.
Ability ability = new CycleTriggeredAbility(new DamageTargetEffect(new PermanentsOnBattlefieldCount(filter)),true); Ability ability = new CycleTriggeredAbility(new DamageTargetEffect(new PermanentsOnBattlefieldCount(filter))
.setText("you may have it deal X damage to target creature, where X is the number of Goblins on the battlefield"),true);
ability.addTarget(new TargetCreaturePermanent()); ability.addTarget(new TargetCreaturePermanent());
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -35,7 +35,7 @@ public final class GhastlyRemains extends CardImpl {
// At the beginning of your upkeep, if Ghastly Remains is in your graveyard, you may pay {B}{B}{B}. If you do, return Ghastly Remains to your hand. // At the beginning of your upkeep, if Ghastly Remains is in your graveyard, you may pay {B}{B}{B}. If you do, return Ghastly Remains to your hand.
this.addAbility(new BeginningOfUpkeepTriggeredAbility(Zone.GRAVEYARD, this.addAbility(new BeginningOfUpkeepTriggeredAbility(Zone.GRAVEYARD,
TargetController.YOU, new DoIfCostPaid(new ReturnSourceFromGraveyardToHandEffect().setText("return {this} to your hand"), new ManaCostsImpl<>("{B}{B}{B}")), TargetController.YOU, new DoIfCostPaid(new ReturnSourceFromGraveyardToHandEffect().setText("return it to your hand"), new ManaCostsImpl<>("{B}{B}{B}")),
false).withInterveningIf(SourceInGraveyardCondition.instance)); false).withInterveningIf(SourceInGraveyardCondition.instance));
} }

View file

@ -34,7 +34,7 @@ public final class Gigapede extends CardImpl {
// At the beginning of your upkeep, if Gigapede is in your graveyard, you may discard a card. If you do, return Gigapede to your hand. // At the beginning of your upkeep, if Gigapede is in your graveyard, you may discard a card. If you do, return Gigapede to your hand.
this.addAbility(new BeginningOfUpkeepTriggeredAbility(Zone.GRAVEYARD, this.addAbility(new BeginningOfUpkeepTriggeredAbility(Zone.GRAVEYARD,
TargetController.YOU, new DoIfCostPaid(new ReturnSourceFromGraveyardToHandEffect().setText("return {this} to your hand"), new DiscardCardCost()), TargetController.YOU, new DoIfCostPaid(new ReturnSourceFromGraveyardToHandEffect().setText("return this card to your hand"), new DiscardCardCost()),
false).withInterveningIf(SourceInGraveyardCondition.instance)); false).withInterveningIf(SourceInGraveyardCondition.instance));
} }

View file

@ -32,7 +32,7 @@ public final class Glory extends CardImpl {
this.addAbility(FlyingAbility.getInstance()); this.addAbility(FlyingAbility.getInstance());
// {2}{W}: Choose a color. Creatures you control gain protection from the chosen color until end of turn. Activate this ability only if Glory is in your graveyard. // {2}{W}: Choose a color. Creatures you control gain protection from the chosen color until end of turn. Activate this ability only if Glory is in your graveyard.
Effect effect = new GainProtectionFromColorAllEffect(Duration.EndOfTurn, StaticFilters.FILTER_CONTROLLED_CREATURES); Effect effect = new GainProtectionFromColorAllEffect(Duration.EndOfTurn, StaticFilters.FILTER_CONTROLLED_CREATURES);
effect.setText("Choose a color. Creatures you control gain protection from the chosen color until end of turn. Activate only if {this} is in your graveyard."); effect.setText("Choose a color. Creatures you control gain protection from the chosen color until end of turn. Activate only if this card is in your graveyard.");
this.addAbility(new SimpleActivatedAbility(Zone.GRAVEYARD, effect, new ManaCostsImpl<>("{2}{W}"))); this.addAbility(new SimpleActivatedAbility(Zone.GRAVEYARD, effect, new ManaCostsImpl<>("{2}{W}")));
} }

View file

@ -54,7 +54,7 @@ class GoblinAssassinTriggeredEffect extends OneShotEffect {
GoblinAssassinTriggeredEffect() { GoblinAssassinTriggeredEffect() {
super(Outcome.Sacrifice); super(Outcome.Sacrifice);
staticText = "each player flips a coin. Each player whose coin comes up tails sacrifices a creature"; staticText = "each player flips a coin. Each player whose coin comes up tails sacrifices a creature of their choice";
} }
private GoblinAssassinTriggeredEffect(final GoblinAssassinTriggeredEffect effect) { private GoblinAssassinTriggeredEffect(final GoblinAssassinTriggeredEffect effect) {

View file

@ -29,7 +29,7 @@ public final class GoblinWarStrike extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{R}"); super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{R}");
// Goblin War Strike deals damage equal to the number of Goblins you control to target player. // Goblin War Strike deals damage equal to the number of Goblins you control to target player.
this.getSpellAbility().addEffect(new DamageTargetEffect(new PermanentsOnBattlefieldCount(filter))); this.getSpellAbility().addEffect(new DamageTargetEffect(new PermanentsOnBattlefieldCount(filter, null)));
this.getSpellAbility().addTarget(new TargetPlayerOrPlaneswalker()); this.getSpellAbility().addTarget(new TargetPlayerOrPlaneswalker());
} }

View file

@ -47,7 +47,7 @@ class GravestormEffect extends OneShotEffect {
GravestormEffect() { GravestormEffect() {
super(Outcome.Exile); super(Outcome.Exile);
this.staticText = "At the beginning of your upkeep, target opponent may exile a card from their graveyard. If that player doesn't, you may draw a card."; this.staticText = "target opponent may exile a card from their graveyard. If that player doesn't, you may draw a card.";
} }
private GravestormEffect(final GravestormEffect effect) { private GravestormEffect(final GravestormEffect effect) {

View file

@ -44,7 +44,7 @@ public final class Gurzigost extends CardImpl {
// {G}{G}, Discard a card: You may have Gurzigost assign its combat damage this turn as though it weren't blocked. // {G}{G}, Discard a card: You may have Gurzigost assign its combat damage this turn as though it weren't blocked.
Effect effect = new GainAbilitySourceEffect(DamageAsThoughNotBlockedAbility.getInstance(), Duration.EndOfTurn); Effect effect = new GainAbilitySourceEffect(DamageAsThoughNotBlockedAbility.getInstance(), Duration.EndOfTurn);
effect.setText("You may have Gurzigost assign its combat damage this turn as though it weren't blocked"); effect.setText("You may have {this} assign its combat damage this turn as though it weren't blocked");
Ability ability = new SimpleActivatedAbility(effect, new ManaCostsImpl<>("{G}{G}")); Ability ability = new SimpleActivatedAbility(effect, new ManaCostsImpl<>("{G}{G}"));
ability.addCost(new DiscardCardCost()); ability.addCost(new DiscardCardCost());
this.addAbility(ability); this.addAbility(ability);

View file

@ -29,7 +29,7 @@ import java.util.UUID;
*/ */
public final class Ichorid extends CardImpl { public final class Ichorid extends CardImpl {
private static final FilterCard filter = new FilterCreatureCard("a black creature card other than {this}"); private static final FilterCard filter = new FilterCreatureCard("a black creature card other than this card");
static { static {
filter.add(AnotherPredicate.instance); filter.add(AnotherPredicate.instance);
@ -51,7 +51,7 @@ public final class Ichorid extends CardImpl {
// At the beginning of your upkeep, if Ichorid is in your graveyard, you may exile a black creature card other than Ichorid from your graveyard. If you do, return Ichorid to the battlefield. // At the beginning of your upkeep, if Ichorid is in your graveyard, you may exile a black creature card other than Ichorid from your graveyard. If you do, return Ichorid to the battlefield.
this.addAbility(new BeginningOfUpkeepTriggeredAbility(Zone.GRAVEYARD, TargetController.YOU, new DoIfCostPaid( this.addAbility(new BeginningOfUpkeepTriggeredAbility(Zone.GRAVEYARD, TargetController.YOU, new DoIfCostPaid(
new ReturnSourceFromGraveyardToBattlefieldEffect().setText("return {this} to the battlefield"), new ReturnSourceFromGraveyardToBattlefieldEffect().setText("return this card to the battlefield"),
new ExileFromGraveCost(new TargetCardInYourGraveyard(filter)) new ExileFromGraveCost(new TargetCardInYourGraveyard(filter))
), false).withInterveningIf(SourceInGraveyardCondition.instance)); ), false).withInterveningIf(SourceInGraveyardCondition.instance));
} }

View file

@ -63,7 +63,7 @@ class InfectiousRageReattachEffect extends OneShotEffect {
InfectiousRageReattachEffect() { InfectiousRageReattachEffect() {
super(Outcome.PutCardInPlay); super(Outcome.PutCardInPlay);
this.staticText = "choose a creature at random {this} can enchant. Return {this} to the battlefield attached to that creature."; this.staticText = "choose a creature at random {this} can enchant. Return this card to the battlefield attached to that creature.";
} }
private InfectiousRageReattachEffect(final InfectiousRageReattachEffect effect) { private InfectiousRageReattachEffect(final InfectiousRageReattachEffect effect) {

View file

@ -20,7 +20,7 @@ import mage.filter.predicate.mageobject.ColorPredicate;
*/ */
public final class IridescentAngel extends CardImpl { public final class IridescentAngel extends CardImpl {
private static final FilterCard filter = new FilterCard("all colors"); private static final FilterCard filter = new FilterCard("each color");
static { static {
filter.add(Predicates.or( filter.add(Predicates.or(

View file

@ -22,7 +22,7 @@ import mage.game.events.GameEvent;
*/ */
public final class LastLaugh extends CardImpl { public final class LastLaugh extends CardImpl {
private static final FilterPermanent filter = new FilterPermanent("a permanent other than Last Laugh"); private static final FilterPermanent filter = new FilterPermanent("a permanent other than {this}");
static { static {
filter.add(AnotherPredicate.instance); filter.add(AnotherPredicate.instance);
} }

View file

@ -67,7 +67,7 @@ public final class MuscleBurst extends CardImpl {
class CountAsMuscleBurstAbility extends SimpleStaticAbility { class CountAsMuscleBurstAbility extends SimpleStaticAbility {
public CountAsMuscleBurstAbility() { public CountAsMuscleBurstAbility() {
super(Zone.GRAVEYARD, new InfoEffect("If {this} is in a graveyard, effects from spells named Muscle Burst count it as a card named Muscle Burst")); super(Zone.GRAVEYARD, new InfoEffect("If this card is in a graveyard, effects from spells named Muscle Burst count it as a card named Muscle Burst"));
} }
private CountAsMuscleBurstAbility(CountAsMuscleBurstAbility ability) { private CountAsMuscleBurstAbility(CountAsMuscleBurstAbility ability) {

View file

@ -39,7 +39,7 @@ public final class MysticEnforcer extends CardImpl {
// Threshold - As long as seven or more cards are in your graveyard, Mystic Enforcer gets +3/+3 and has flying. // Threshold - As long as seven or more cards are in your graveyard, Mystic Enforcer gets +3/+3 and has flying.
Ability ability = new SimpleStaticAbility(new ConditionalContinuousEffect( Ability ability = new SimpleStaticAbility(new ConditionalContinuousEffect(
new BoostSourceEffect(3, 3, Duration.WhileOnBattlefield), ThresholdCondition.instance, new BoostSourceEffect(3, 3, Duration.WhileOnBattlefield), ThresholdCondition.instance,
" as long as seven or more cards are in your graveyard, {this} gets +3/+3" "as long as seven or more cards are in your graveyard, {this} gets +3/+3"
)); ));
ability.addEffect(new ConditionalContinuousEffect( ability.addEffect(new ConditionalContinuousEffect(
new GainAbilitySourceEffect(FlyingAbility.getInstance()), new GainAbilitySourceEffect(FlyingAbility.getInstance()),

View file

@ -1,4 +1,3 @@
package mage.cards.n; package mage.cards.n;
import java.util.UUID; import java.util.UUID;
@ -18,8 +17,6 @@ import mage.target.common.TargetCreaturePermanent;
* @author jeffwadsworth * @author jeffwadsworth
*/ */
public final class Nefashu extends CardImpl { public final class Nefashu extends CardImpl {
static final String rule = "Whenever Nefashu attacks, up to five target creatures each get -1/-1 until end of turn.";
public Nefashu(UUID ownerId, CardSetInfo setInfo) { public Nefashu(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{B}{B}"); super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{B}{B}");
@ -30,7 +27,7 @@ public final class Nefashu extends CardImpl {
this.toughness = new MageInt(3); this.toughness = new MageInt(3);
// Whenever Nefashu attacks, up to five target creatures each get -1/-1 until end of turn. // Whenever Nefashu attacks, up to five target creatures each get -1/-1 until end of turn.
Ability ability = new AttacksTriggeredAbility(new BoostTargetEffect(-1, -1, Duration.EndOfTurn), false, rule); Ability ability = new AttacksTriggeredAbility(new BoostTargetEffect(-1, -1, Duration.EndOfTurn), false);
ability.addTarget(new TargetCreaturePermanent(0, 5)); ability.addTarget(new TargetCreaturePermanent(0, 5));
this.addAbility(ability); this.addAbility(ability);
} }
@ -43,4 +40,4 @@ public final class Nefashu extends CardImpl {
public Nefashu copy() { public Nefashu copy() {
return new Nefashu(this); return new Nefashu(this);
} }
} }

View file

@ -43,7 +43,7 @@ public final class NutCollector extends CardImpl {
// Threshold - Squirrel creatures get +2/+2 as long as seven or more cards are in your graveyard. // Threshold - Squirrel creatures get +2/+2 as long as seven or more cards are in your graveyard.
Ability ability = new SimpleStaticAbility(new ConditionalContinuousEffect( Ability ability = new SimpleStaticAbility(new ConditionalContinuousEffect(
new BoostAllEffect(2, 2, Duration.WhileOnBattlefield, filter, false), new BoostAllEffect(2, 2, Duration.WhileOnBattlefield, filter, false),
ThresholdCondition.instance, "Squirrel creatures get +2/+2 as long as seven or more cards are in your graveyard" ThresholdCondition.instance, "All Squirrels get +2/+2 as long as seven or more cards are in your graveyard"
)); ));
ability.setAbilityWord(AbilityWord.THRESHOLD); ability.setAbilityWord(AbilityWord.THRESHOLD);
this.addAbility(ability); this.addAbility(ability);

View file

@ -38,7 +38,8 @@ public final class Painbringer extends CardImpl {
Effect effect = new BoostTargetEffect(X, X, Duration.EndOfTurn); Effect effect = new BoostTargetEffect(X, X, Duration.EndOfTurn);
effect.setText("Target creature gets -X/-X until end of turn, where X is the number of cards exiled this way"); effect.setText("Target creature gets -X/-X until end of turn, where X is the number of cards exiled this way");
Ability ability = new SimpleActivatedAbility(effect, new TapSourceCost()); Ability ability = new SimpleActivatedAbility(effect, new TapSourceCost());
ability.addCost(new ExileXFromYourGraveCost(new FilterCard("any number of cards from your graveyard"))); ability.addCost(new ExileXFromYourGraveCost(new FilterCard("any number of cards from your graveyard"))
.setText("Exile any number of cards from your graveyard"));
ability.addTarget(new TargetCreaturePermanent()); ability.addTarget(new TargetCreaturePermanent());
this.addAbility(ability); this.addAbility(ability);

View file

@ -114,7 +114,7 @@ class ParallelThoughtsReplacementEffect extends ReplacementEffectImpl {
ParallelThoughtsReplacementEffect() { ParallelThoughtsReplacementEffect() {
super(Duration.WhileOnBattlefield, Outcome.DrawCard); super(Duration.WhileOnBattlefield, Outcome.DrawCard);
staticText = "If you would draw a card, you may instead put the top card of the pile you exiled with {this} into your hand"; staticText = "If you would draw a card, you may instead put the top card of the pile you exiled into your hand";
} }
private ParallelThoughtsReplacementEffect(final ParallelThoughtsReplacementEffect effect) { private ParallelThoughtsReplacementEffect(final ParallelThoughtsReplacementEffect effect) {

View file

@ -35,7 +35,7 @@ public final class PardicArsonist extends CardImpl {
this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect( this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect(
new GainAbilitySourceEffect(ability), ThresholdCondition.instance, "As long as " + new GainAbilitySourceEffect(ability), ThresholdCondition.instance, "As long as " +
"seven or more cards are in your graveyard, {this} has \"When {this} " + "seven or more cards are in your graveyard, {this} has \"When {this} " +
"enters the battlefield, it deals 3 damage to any target.\"" "enters, it deals 3 damage to any target.\""
)).setAbilityWord(AbilityWord.THRESHOLD)); )).setAbilityWord(AbilityWord.THRESHOLD));
} }

View file

@ -2,6 +2,8 @@
package mage.cards.p; package mage.cards.p;
import java.util.UUID; import java.util.UUID;
import mage.abilities.dynamicvalue.DynamicValue;
import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount; import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount;
import mage.abilities.effects.common.DamageTargetEffect; import mage.abilities.effects.common.DamageTargetEffect;
import mage.abilities.effects.common.GainLifeEffect; import mage.abilities.effects.common.GainLifeEffect;
@ -23,14 +25,18 @@ public final class ProfanePrayers extends CardImpl {
static { static {
filter.add(SubType.CLERIC.getPredicate()); filter.add(SubType.CLERIC.getPredicate());
} }
private static final DynamicValue xValue = new PermanentsOnBattlefieldCount(filter);
public ProfanePrayers(UUID ownerId, CardSetInfo setInfo) { public ProfanePrayers(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{2}{B}{B}"); super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{2}{B}{B}");
// Profane Prayers deals X damage to any target and you gain X life, where X is the number of Clerics on the battlefield. // Profane Prayers deals X damage to any target and you gain X life, where X is the number of Clerics on the battlefield.
this.getSpellAbility().addEffect(new DamageTargetEffect(new PermanentsOnBattlefieldCount(filter))); this.getSpellAbility().addEffect(new DamageTargetEffect(xValue)
.setText("{this} deals X damage to any target"));
this.getSpellAbility().addTarget(new TargetAnyTarget()); this.getSpellAbility().addTarget(new TargetAnyTarget());
this.getSpellAbility().addEffect(new GainLifeEffect(new PermanentsOnBattlefieldCount(filter))); this.getSpellAbility().addEffect(new GainLifeEffect(xValue)
.setText("and you gain X life, where X is the number of Clerics on the battlefield"));
} }
private ProfanePrayers(final ProfanePrayers card) { private ProfanePrayers(final ProfanePrayers card) {

View file

@ -49,7 +49,7 @@ class ProwlingPangolinEffect extends OneShotEffect {
ProwlingPangolinEffect() { ProwlingPangolinEffect() {
super(Outcome.Sacrifice); super(Outcome.Sacrifice);
this.staticText = "any player may sacrifice two creatures. If a player does, sacrifice {this}"; this.staticText = "any player may sacrifice two creatures of their choice. If a player does, sacrifice {this}";
} }
private ProwlingPangolinEffect(final ProwlingPangolinEffect effect) { private ProwlingPangolinEffect(final ProwlingPangolinEffect effect) {

View file

@ -40,7 +40,7 @@ public final class RebornHero extends CardImpl {
new ReturnSourceFromGraveyardToBattlefieldEffect(), new ManaCostsImpl<>("{W}{W}") new ReturnSourceFromGraveyardToBattlefieldEffect(), new ManaCostsImpl<>("{W}{W}")
))), ThresholdCondition.instance, "As long as seven or more cards are in " + ))), ThresholdCondition.instance, "As long as seven or more cards are in " +
"your graveyard, {this} has \"When {this} dies, you may pay {W}{W}. If you do, " + "your graveyard, {this} has \"When {this} dies, you may pay {W}{W}. If you do, " +
"return {this} to the battlefield under your control.\"" "return this card to the battlefield under your control.\""
)).setAbilityWord(AbilityWord.THRESHOLD)); )).setAbilityWord(AbilityWord.THRESHOLD));
} }

View file

@ -31,7 +31,7 @@ public final class RiftstonePortal extends CardImpl {
// As long as Riftstone Portal is in your graveyard, lands you control have "{T}: Add {G} or {W}." // As long as Riftstone Portal is in your graveyard, lands you control have "{T}: Add {G} or {W}."
ContinuousEffect effect = new GainAbilityControlledEffect(new GreenManaAbility(), ContinuousEffect effect = new GainAbilityControlledEffect(new GreenManaAbility(),
Duration.WhileOnBattlefield, new FilterControlledLandPermanent()); Duration.WhileOnBattlefield, new FilterControlledLandPermanent());
effect.setText("As long as Riftstone Portal is in your graveyard, lands you control have \"{T}: Add {G} or {W}.\""); effect.setText("As long as this card is in your graveyard, lands you control have \"{T}: Add {G} or {W}.\"");
Ability ability = new SimpleStaticAbility(Zone.GRAVEYARD, effect); Ability ability = new SimpleStaticAbility(Zone.GRAVEYARD, effect);
effect = new GainAbilityControlledEffect(new WhiteManaAbility(), effect = new GainAbilityControlledEffect(new WhiteManaAbility(),
Duration.WhileOnBattlefield, new FilterControlledLandPermanent()); Duration.WhileOnBattlefield, new FilterControlledLandPermanent());

View file

@ -35,7 +35,7 @@ public final class SetonsScout extends CardImpl {
// Threshold - Seton's Scout gets +2/+2 as long as seven or more cards are in your graveyard. // Threshold - Seton's Scout gets +2/+2 as long as seven or more cards are in your graveyard.
this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect( this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect(
new BoostSourceEffect(2, 2, Duration.WhileOnBattlefield), ThresholdCondition.instance, new BoostSourceEffect(2, 2, Duration.WhileOnBattlefield), ThresholdCondition.instance,
"As long as seven or more cards are in your graveyard, {this} gets +2/+2" "{this} gets +2/+2 as long as seven or more cards are in your graveyard"
)).setAbilityWord(AbilityWord.THRESHOLD)); )).setAbilityWord(AbilityWord.THRESHOLD));
} }

View file

@ -58,7 +58,7 @@ class ShiftyDoppelgangerExileEffect extends OneShotEffect {
super(Outcome.PutCreatureInPlay); super(Outcome.PutCreatureInPlay);
this.staticText = "You may put a creature card from your hand onto the battlefield. If you do, " + this.staticText = "You may put a creature card from your hand onto the battlefield. If you do, " +
"that creature gains haste until end of turn. At the beginning of the next end step, " + "that creature gains haste until end of turn. At the beginning of the next end step, " +
"sacrifice that creature. If you do, return {this} to the battlefield"; "sacrifice that creature. If you do, return this card to the battlefield";
} }
private ShiftyDoppelgangerExileEffect(final ShiftyDoppelgangerExileEffect effect) { private ShiftyDoppelgangerExileEffect(final ShiftyDoppelgangerExileEffect effect) {

View file

@ -88,7 +88,7 @@ class SoulgorgerOrggGainLifeEffect extends OneShotEffect {
SoulgorgerOrggGainLifeEffect() { SoulgorgerOrggGainLifeEffect() {
super(Outcome.GainLife); super(Outcome.GainLife);
staticText = "you gain life equal to the life you lost when it entered the battlefield"; staticText = "you gain life equal to the life you lost when it entered";
} }
private SoulgorgerOrggGainLifeEffect(final SoulgorgerOrggGainLifeEffect effect) { private SoulgorgerOrggGainLifeEffect(final SoulgorgerOrggGainLifeEffect effect) {

View file

@ -6,6 +6,7 @@ import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.dynamicvalue.DynamicValue;
import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount; import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount;
import mage.abilities.effects.common.DamageControllerEffect; import mage.abilities.effects.common.DamageControllerEffect;
import mage.abilities.effects.common.DamageTargetEffect; import mage.abilities.effects.common.DamageTargetEffect;
@ -27,6 +28,7 @@ public final class Sparksmith extends CardImpl {
static { static {
filter.add(SubType.GOBLIN.getPredicate()); filter.add(SubType.GOBLIN.getPredicate());
} }
private static final DynamicValue xValue = new PermanentsOnBattlefieldCount(filter);
public Sparksmith(UUID ownerId, CardSetInfo setInfo) { public Sparksmith(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{R}"); super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{R}");
@ -36,9 +38,11 @@ public final class Sparksmith extends CardImpl {
this.toughness = new MageInt(1); this.toughness = new MageInt(1);
// {tap}: Sparksmith deals X damage to target creature and X damage to you, where X is the number of Goblins on the battlefield. // {tap}: Sparksmith deals X damage to target creature and X damage to you, where X is the number of Goblins on the battlefield.
Ability ability = new SimpleActivatedAbility(new DamageTargetEffect(new PermanentsOnBattlefieldCount(filter)), new TapSourceCost()); Ability ability = new SimpleActivatedAbility(new DamageTargetEffect(xValue)
.setText("{this} deals X damage to target creature"), new TapSourceCost());
ability.addTarget(new TargetCreaturePermanent()); ability.addTarget(new TargetCreaturePermanent());
ability.addEffect(new DamageControllerEffect(new PermanentsOnBattlefieldCount(filter))); ability.addEffect(new DamageControllerEffect(xValue)
.setText("and X damage to you, where X is the number of Goblins on the battlefield"));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -1,23 +1,22 @@
package mage.cards.s; package mage.cards.s;
import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.DelayedTriggeredAbility; import mage.abilities.DelayedTriggeredAbility;
import mage.abilities.dynamicvalue.common.SavedDamageValue; import mage.abilities.dynamicvalue.common.SavedDamageValue;
import mage.abilities.effects.Effect; import mage.abilities.effects.Effect;
import mage.abilities.effects.common.GainLifeEffect;
import mage.abilities.effects.common.CreateDelayedTriggeredAbilityEffect; import mage.abilities.effects.common.CreateDelayedTriggeredAbilityEffect;
import mage.abilities.effects.common.DrawCardSourceControllerEffect; import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.effects.common.GainLifeEffect;
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.game.Game; import mage.game.Game;
import mage.game.events.GameEvent; import mage.game.events.GameEvent;
import mage.game.events.GameEvent.EventType;
import mage.game.permanent.Permanent; import mage.game.permanent.Permanent;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
import java.util.UUID;
/** /**
* *
* @author cbt33, Unknown (Glimpse of Nature), LevelX2 (Armadillo Cloak) * @author cbt33, Unknown (Glimpse of Nature), LevelX2 (Armadillo Cloak)
@ -47,9 +46,9 @@ public final class Spiritualize extends CardImpl {
class SpiritualizeTriggeredAbility extends DelayedTriggeredAbility { class SpiritualizeTriggeredAbility extends DelayedTriggeredAbility {
public SpiritualizeTriggeredAbility() { SpiritualizeTriggeredAbility() {
super(new GainLifeEffect(SavedDamageValue.MUCH), Duration.EndOfTurn, false); super(new GainLifeEffect(SavedDamageValue.MUCH), Duration.EndOfTurn, false);
setTriggerPhrase("Whenever target creature deals damage, "); setTriggerPhrase("Until end of turn, whenever target creature deals damage, ");
} }
private SpiritualizeTriggeredAbility(final SpiritualizeTriggeredAbility ability) { private SpiritualizeTriggeredAbility(final SpiritualizeTriggeredAbility ability) {

View file

@ -1,34 +1,32 @@
package mage.cards.s; package mage.cards.s;
import java.util.UUID;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.TriggeredAbilityImpl; import mage.abilities.common.SpellCastAllTriggeredAbility;
import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.OneShotEffect;
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.Outcome; import mage.constants.Outcome;
import mage.constants.Zone; import mage.constants.SetTargetPointer;
import mage.filter.StaticFilters;
import mage.game.Game; import mage.game.Game;
import mage.game.events.GameEvent;
import mage.game.events.GameEvent.EventType;
import mage.game.permanent.Permanent; import mage.game.permanent.Permanent;
import mage.players.Player; import mage.players.Player;
import mage.target.targetpointer.FixedTarget;
import java.util.UUID;
/** /**
*
* @author Plopman * @author Plopman
*/ */
public final class Standstill extends CardImpl { public final class Standstill extends CardImpl {
public Standstill(UUID ownerId, CardSetInfo setInfo) { public Standstill(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{1}{U}"); super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{U}");
// When a player casts a spell, sacrifice Standstill. If you do, each of that player's opponents draws three cards. // When a player casts a spell, sacrifice Standstill. If you do, each of that player's opponents draws three cards.
this.addAbility(new SpellCastTriggeredAbility()); this.addAbility(new SpellCastAllTriggeredAbility(
new StandstillEffect(), StaticFilters.FILTER_SPELL_A, false, SetTargetPointer.PLAYER
).setTriggerPhrase("When a player casts a spell, "));
} }
private Standstill(final Standstill card) { private Standstill(final Standstill card) {
@ -41,38 +39,6 @@ public final class Standstill extends CardImpl {
} }
} }
class SpellCastTriggeredAbility extends TriggeredAbilityImpl {
public SpellCastTriggeredAbility() {
super(Zone.BATTLEFIELD, new StandstillEffect(), false);
}
private SpellCastTriggeredAbility(final SpellCastTriggeredAbility ability) {
super(ability);
}
@Override
public boolean checkEventType(GameEvent event, Game game) {
return event.getType() == GameEvent.EventType.SPELL_CAST;
}
@Override
public boolean checkTrigger(GameEvent event, Game game) {
this.getEffects().get(0).setTargetPointer(new FixedTarget(event.getPlayerId()));
return true;
}
@Override
public String getRule() {
return "When a player casts a spell, sacrifice Standstill. If you do, each of that player's opponents draws three cards.";
}
@Override
public SpellCastTriggeredAbility copy() {
return new SpellCastTriggeredAbility(this);
}
}
class StandstillEffect extends OneShotEffect { class StandstillEffect extends OneShotEffect {
StandstillEffect() { StandstillEffect() {
@ -91,17 +57,15 @@ class StandstillEffect extends OneShotEffect {
@Override @Override
public boolean apply(Game game, Ability source) { public boolean apply(Game game, Ability source) {
Permanent permanent = game.getPermanent(source.getSourceId()); Permanent permanent = source.getSourcePermanentIfItStillExists(game);
if (permanent != null) { if (permanent != null && permanent.sacrifice(source, game)) {
if (permanent.sacrifice(source, game)) { for (UUID uuid : game.getOpponents(this.getTargetPointer().getFirst(game, source))) {
for (UUID uuid : game.getOpponents(this.getTargetPointer().getFirst(game, source))) { Player player = game.getPlayer(uuid);
Player player = game.getPlayer(uuid); if (player != null) {
if (player != null) { player.drawCards(3, source, game);
player.drawCards(3, source, game);
}
} }
return true;
} }
return true;
} }
return false; return false;
} }

View file

@ -43,7 +43,8 @@ public final class SteamVines extends CardImpl {
// When enchanted land becomes tapped, destroy it and Steam Vines deals 1 damage to that land's controller. // When enchanted land becomes tapped, destroy it and Steam Vines deals 1 damage to that land's controller.
// That player attaches Steam Vines to a land of their choice. // That player attaches Steam Vines to a land of their choice.
this.addAbility(new BecomesTappedAttachedTriggeredAbility(new SteamVinesEffect(), "enchanted land")); this.addAbility(new BecomesTappedAttachedTriggeredAbility(new SteamVinesEffect(), "enchanted land")
.setTriggerPhrase("When enchanted land becomes tapped, "));
} }

View file

@ -36,7 +36,7 @@ public final class StoneTongueBasilisk extends CardImpl {
// Threshold - As long as seven or more cards are in your graveyard, all creatures able to block Stone-Tongue Basilisk do so. // Threshold - As long as seven or more cards are in your graveyard, all creatures able to block Stone-Tongue Basilisk do so.
this.addAbility(new SimpleStaticAbility(new ConditionalRequirementEffect( this.addAbility(new SimpleStaticAbility(new ConditionalRequirementEffect(
new MustBeBlockedByAllSourceEffect(), ThresholdCondition.instance, "As long as seven " + new MustBeBlockedByAllSourceEffect(), ThresholdCondition.instance, "As long as seven " +
"or more cards are in your graveyard, all creatures able to block {this} do so" "or more cards are in your graveyard, all creatures able to block {this} do so"
)).setAbilityWord(AbilityWord.THRESHOLD)); )).setAbilityWord(AbilityWord.THRESHOLD));
} }

View file

@ -32,7 +32,7 @@ public final class TemporaryInsanity extends CardImpl {
// and gain control of it until end of turn. // and gain control of it until end of turn.
Effect effect = new GainControlTargetEffect(Duration.EndOfTurn); Effect 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");
this.getSpellAbility().addEffect(effect); this.getSpellAbility().addEffect(effect);
// That creature gains haste until end of turn. // That creature gains haste until end of turn.

View file

@ -31,7 +31,8 @@ public final class UncontrolledInfestation extends CardImpl {
Ability ability = new EnchantAbility(auraTarget); Ability ability = new EnchantAbility(auraTarget);
this.addAbility(ability); this.addAbility(ability);
// When enchanted land becomes tapped, destroy it. // When enchanted land becomes tapped, destroy it.
this.addAbility(new BecomesTappedAttachedTriggeredAbility(new DestroyAttachedToEffect("it"), "enchanted land")); this.addAbility(new BecomesTappedAttachedTriggeredAbility(new DestroyAttachedToEffect("it"), "enchanted land")
.setTriggerPhrase("When enchanted land becomes tapped, "));
} }
private UncontrolledInfestation(final UncontrolledInfestation card) { private UncontrolledInfestation(final UncontrolledInfestation card) {

View file

@ -24,7 +24,7 @@ import mage.filter.common.FilterCreaturePermanent;
*/ */
public final class Valor extends CardImpl { public final class Valor extends CardImpl {
private static final String ruleText = "As long as Valor is in your graveyard and you control a Plains, creatures you control have first strike"; private static final String ruleText = "As long as this card is in your graveyard and you control a Plains, creatures you control have first strike";
private static final FilterControlledPermanent filter = new FilterControlledPermanent("Plains"); private static final FilterControlledPermanent filter = new FilterControlledPermanent("Plains");

View file

@ -56,7 +56,7 @@ public final class WaywardAngel extends CardImpl {
); );
ability.addEffect(new ConditionalContinuousEffect( ability.addEffect(new ConditionalContinuousEffect(
new GainAbilitySourceEffect(gainedAbility), ThresholdCondition.instance, new GainAbilitySourceEffect(gainedAbility), ThresholdCondition.instance,
"and has \"At the beginning of your upkeep, sacrifice a creature.\"" ", and has \"At the beginning of your upkeep, sacrifice a creature.\""
)); ));
ability.setAbilityWord(AbilityWord.THRESHOLD); ability.setAbilityWord(AbilityWord.THRESHOLD);
this.addAbility(ability); this.addAbility(ability);

View file

@ -74,7 +74,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_CODES = "FIN"; // check ability text due mtgjson, can use multiple sets like MAT;CMD or * for all private static final String FULL_ABILITIES_CHECK_SET_CODES = "ODY,TOR,JUD,ONS,LGN,SCG"; // check ability text due mtgjson, can use multiple sets like MAT;CMD or * for all
private static final boolean CHECK_ONLY_ABILITIES_TEXT = false; // use when checking text locally, suppresses unnecessary checks and output messages private static final boolean CHECK_ONLY_ABILITIES_TEXT = false; // use when checking text locally, suppresses unnecessary checks and output messages
private static final boolean CHECK_COPYABLE_FIELDS = true; // disable for better verify test performance private static final boolean CHECK_COPYABLE_FIELDS = true; // disable for better verify test performance

View file

@ -20,7 +20,7 @@ public enum SourceInGraveyardCondition implements Condition {
@Override @Override
public String toString() { public String toString() {
return "{this} is in your graveyard"; return "this card is in your graveyard";
} }
} }

View file

@ -44,6 +44,7 @@ public class DiscardXTargetCost extends VariableCostImpl {
public DiscardXTargetCost withRandom() { public DiscardXTargetCost withRandom() {
this.isRandom = true; this.isRandom = true;
this.text += " at random";
return this; return this;
} }

View file

@ -18,7 +18,7 @@ public class RemoveAllCountersSourceEffect extends OneShotEffect {
public RemoveAllCountersSourceEffect(CounterType counterType) { public RemoveAllCountersSourceEffect(CounterType counterType) {
super(Outcome.Neutral); super(Outcome.Neutral);
this.counterType = counterType; this.counterType = counterType;
staticText = "remove all " + counterType.getName() + " counters from it."; staticText = "remove all " + counterType.getName() + " counters from {this}";
} }
protected RemoveAllCountersSourceEffect(final RemoveAllCountersSourceEffect effect) { protected RemoveAllCountersSourceEffect(final RemoveAllCountersSourceEffect effect) {