updated ManaSpentToCastWatcher to default watcher list, reworked it to be game scope

This commit is contained in:
Evan Kranzler 2021-06-21 20:26:39 -04:00
parent 943c67fbca
commit 91eb324847
190 changed files with 272 additions and 280 deletions

View file

@ -36,7 +36,7 @@ public final class AbandonHope extends CardImpl {
// Look at target opponent's hand and choose X cards from it. That player discards those cards. // Look at target opponent's hand and choose X cards from it. That player discards those cards.
this.getSpellAbility().addEffect( this.getSpellAbility().addEffect(
new DiscardCardYouChooseTargetEffect(ManacostVariableValue.instance, TargetController.ANY) new DiscardCardYouChooseTargetEffect(ManacostVariableValue.REGULAR, TargetController.ANY)
.setText("Look at target opponent's hand and choose X cards from it. That player discards those cards")); .setText("Look at target opponent's hand and choose X cards from it. That player discards those cards"));
this.getSpellAbility().addTarget(new TargetOpponent()); this.getSpellAbility().addTarget(new TargetOpponent());
this.getSpellAbility().setCostAdjuster(AbandonHopeAdjuster.instance); this.getSpellAbility().setCostAdjuster(AbandonHopeAdjuster.instance);

View file

@ -23,10 +23,10 @@ public final class AlabasterPotion extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{X}{W}{W}"); super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{X}{W}{W}");
// Choose one - Target player gains X life; or prevent the next X damage that would be dealt to any target this turn. // Choose one - Target player gains X life; or prevent the next X damage that would be dealt to any target this turn.
this.getSpellAbility().addEffect(new GainLifeTargetEffect(ManacostVariableValue.instance)); this.getSpellAbility().addEffect(new GainLifeTargetEffect(ManacostVariableValue.REGULAR));
this.getSpellAbility().addTarget(new TargetPlayer()); this.getSpellAbility().addTarget(new TargetPlayer());
Mode mode = new Mode(); Mode mode = new Mode();
mode.addEffect(new PreventDamageToTargetEffect(Duration.EndOfTurn, false, true, ManacostVariableValue.instance)); mode.addEffect(new PreventDamageToTargetEffect(Duration.EndOfTurn, false, true, ManacostVariableValue.REGULAR));
mode.addTarget(new TargetAnyTarget()); mode.addTarget(new TargetAnyTarget());
this.getSpellAbility().addMode(mode); this.getSpellAbility().addMode(mode);
} }

View file

@ -43,13 +43,13 @@ public final class ArashiTheSkyAsunder extends CardImpl {
this.toughness = new MageInt(5); this.toughness = new MageInt(5);
// {X}{G}, {tap}: Arashi, the Sky Asunder deals X damage to target creature with flying. // {X}{G}, {tap}: Arashi, the Sky Asunder deals X damage to target creature with flying.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(ManacostVariableValue.instance), new ManaCostsImpl("{X}{G}")); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(ManacostVariableValue.REGULAR), new ManaCostsImpl("{X}{G}"));
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());
ability.addTarget(new TargetPermanent(filter)); ability.addTarget(new TargetPermanent(filter));
this.addAbility(ability); this.addAbility(ability);
// Channel - {X}{G}{G}, Discard Arashi: Arashi deals X damage to each creature with flying. // Channel - {X}{G}{G}, Discard Arashi: Arashi deals X damage to each creature with flying.
this.addAbility(new ChannelAbility("{X}{G}{G}", new DamageAllEffect(ManacostVariableValue.instance, filter))); this.addAbility(new ChannelAbility("{X}{G}{G}", new DamageAllEffect(ManacostVariableValue.REGULAR, filter)));
} }
private ArashiTheSkyAsunder(final ArashiTheSkyAsunder card) { private ArashiTheSkyAsunder(final ArashiTheSkyAsunder card) {

View file

@ -41,7 +41,7 @@ public final class AtalyaSamiteMaster extends CardImpl {
this.toughness = new MageInt(3); this.toughness = new MageInt(3);
// {X}, {tap}: Choose one - Prevent the next X damage that would be dealt to target creature this turn; or you gain X life. Spend only white mana on X. // {X}, {tap}: Choose one - Prevent the next X damage that would be dealt to target creature this turn; or you gain X life. Spend only white mana on X.
PreventDamageToTargetEffect effect = new PreventDamageToTargetEffect(Duration.EndOfTurn, false, true, ManacostVariableValue.instance); PreventDamageToTargetEffect effect = new PreventDamageToTargetEffect(Duration.EndOfTurn, false, true, ManacostVariableValue.REGULAR);
effect.setText("Prevent the next X damage that would be dealt to target creature this turn. Spend only white mana on X."); effect.setText("Prevent the next X damage that would be dealt to target creature this turn. Spend only white mana on X.");
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, effect, new ManaCostsImpl("{X}")); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, effect, new ManaCostsImpl("{X}"));
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());
@ -55,7 +55,7 @@ public final class AtalyaSamiteMaster extends CardImpl {
// or you gain X life // or you gain X life
Mode mode = new Mode(); Mode mode = new Mode();
mode.addEffect(new GainLifeEffect(ManacostVariableValue.instance).setText("You gain X life. Spend only white mana on X.")); mode.addEffect(new GainLifeEffect(ManacostVariableValue.REGULAR).setText("You gain X life. Spend only white mana on X."));
ability.addMode(mode); ability.addMode(mode);
this.addAbility(ability); this.addAbility(ability);

View file

@ -61,7 +61,7 @@ public final class AureliasFury extends CardImpl {
// Aurelia's Fury deals X damage divided as you choose among any number of target creatures and/or players. // Aurelia's Fury deals X damage divided as you choose among any number of target creatures and/or players.
// Tap each creature dealt damage this way. Players dealt damage this way can't cast noncreature spells this turn. // Tap each creature dealt damage this way. Players dealt damage this way can't cast noncreature spells this turn.
DynamicValue xValue = ManacostVariableValue.instance; DynamicValue xValue = ManacostVariableValue.REGULAR;
this.getSpellAbility().addEffect(new DamageMultiEffect(xValue)); this.getSpellAbility().addEffect(new DamageMultiEffect(xValue));
this.getSpellAbility().addEffect(new AureliasFuryEffect()); this.getSpellAbility().addEffect(new AureliasFuryEffect());
this.getSpellAbility().addTarget(new TargetAnyTargetAmount(xValue)); this.getSpellAbility().addTarget(new TargetAnyTargetAmount(xValue));

View file

@ -25,7 +25,7 @@ public final class BalduvianRage extends CardImpl {
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{X}{R}"); super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{X}{R}");
// Target attacking creature gets +X/+0 until end of turn. // Target attacking creature gets +X/+0 until end of turn.
this.getSpellAbility().addEffect(new BoostTargetEffect(ManacostVariableValue.instance, StaticValue.get(0), Duration.EndOfTurn)); this.getSpellAbility().addEffect(new BoostTargetEffect(ManacostVariableValue.REGULAR, StaticValue.get(0), Duration.EndOfTurn));
this.getSpellAbility().addTarget(new TargetCreaturePermanent(new FilterAttackingCreature())); this.getSpellAbility().addTarget(new TargetCreaturePermanent(new FilterAttackingCreature()));
// Draw a card at the beginning of the next turn's upkeep. // Draw a card at the beginning of the next turn's upkeep.

View file

@ -30,7 +30,7 @@ public final class BallistaSquad extends CardImpl {
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
// {X}{W}, {T}: Ballista Squad deals X damage to target attacking or blocking creature. // {X}{W}, {T}: Ballista Squad deals X damage to target attacking or blocking creature.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(ManacostVariableValue.instance), new ManaCostsImpl("{X}{W}")); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(ManacostVariableValue.REGULAR), new ManaCostsImpl("{X}{W}"));
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());
ability.addTarget(new TargetAttackingOrBlockingCreature()); ability.addTarget(new TargetAttackingOrBlockingCreature());
this.addAbility(ability); this.addAbility(ability);

View file

@ -17,7 +17,6 @@ import mage.constants.Outcome;
import mage.constants.Zone; import mage.constants.Zone;
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.game.stack.Spell; import mage.game.stack.Spell;
import mage.players.Player; import mage.players.Player;
@ -106,7 +105,7 @@ class BaneFireEffect extends OneShotEffect {
class BanefireCantCounterEffect extends ContinuousRuleModifyingEffectImpl { class BanefireCantCounterEffect extends ContinuousRuleModifyingEffectImpl {
Condition condition = new testCondition(ManacostVariableValue.instance, 5); Condition condition = new testCondition(ManacostVariableValue.REGULAR, 5);
public BanefireCantCounterEffect() { public BanefireCantCounterEffect() {
super(Duration.WhileOnStack, Outcome.Benefit); super(Duration.WhileOnStack, Outcome.Benefit);

View file

@ -31,9 +31,9 @@ public final class Banshee extends CardImpl {
this.toughness = new MageInt(1); this.toughness = new MageInt(1);
// {X}, {T}: Banshee deals half X damage, rounded down, to any target, and half X damage, rounded up, to you. // {X}, {T}: Banshee deals half X damage, rounded down, to any target, and half X damage, rounded up, to you.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(new HalfValue(ManacostVariableValue.instance, false)).setText("Banshee deals half X damage, rounded down, to any target,"), new ManaCostsImpl("{X}")); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(new HalfValue(ManacostVariableValue.REGULAR, false)).setText("Banshee deals half X damage, rounded down, to any target,"), new ManaCostsImpl("{X}"));
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());
ability.addEffect(new DamageControllerEffect(new HalfValue(ManacostVariableValue.instance, true)).setText(" and half X damage, rounded up, to you")); ability.addEffect(new DamageControllerEffect(new HalfValue(ManacostVariableValue.REGULAR, true)).setText(" and half X damage, rounded up, to you"));
ability.addTarget(new TargetAnyTarget()); ability.addTarget(new TargetAnyTarget());
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -27,10 +27,10 @@ public final class BattleAtTheBridge extends CardImpl {
addAbility(new ImproviseAbility()); addAbility(new ImproviseAbility());
// Target creature gets -X/-X until end of turn. You gain X life. // Target creature gets -X/-X until end of turn. You gain X life.
DynamicValue x = new SignInversionDynamicValue(ManacostVariableValue.instance); DynamicValue x = new SignInversionDynamicValue(ManacostVariableValue.REGULAR);
this.getSpellAbility().addEffect(new BoostTargetEffect(x, x, Duration.EndOfTurn, true)); this.getSpellAbility().addEffect(new BoostTargetEffect(x, x, Duration.EndOfTurn, true));
this.getSpellAbility().addTarget(new TargetCreaturePermanent()); this.getSpellAbility().addTarget(new TargetCreaturePermanent());
this.getSpellAbility().addEffect(new GainLifeEffect(ManacostVariableValue.instance)); this.getSpellAbility().addEffect(new GainLifeEffect(ManacostVariableValue.REGULAR));
} }
private BattleAtTheBridge(final BattleAtTheBridge card) { private BattleAtTheBridge(final BattleAtTheBridge card) {

View file

@ -25,8 +25,8 @@ public final class BelbesArmor extends CardImpl {
// {X}, {tap}: Target creature gets -X/+X until end of turn. // {X}, {tap}: Target creature gets -X/+X until end of turn.
Ability ability = new SimpleActivatedAbility(new BoostTargetEffect( Ability ability = new SimpleActivatedAbility(new BoostTargetEffect(
new MultipliedValue(ManacostVariableValue.instance, -1), new MultipliedValue(ManacostVariableValue.REGULAR, -1),
ManacostVariableValue.instance, Duration.EndOfTurn ManacostVariableValue.REGULAR, Duration.EndOfTurn
).setText("Target creature gets -X/+X until end of turn"), new ManaCostsImpl("{X}")); ).setText("Target creature gets -X/+X until end of turn"), new ManaCostsImpl("{X}"));
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());
ability.addTarget(new TargetCreaturePermanent()); ability.addTarget(new TargetCreaturePermanent());

View file

@ -79,13 +79,11 @@ class BergStriderEffect extends OneShotEffect {
@Override @Override
public boolean apply(Game game, Ability source) { public boolean apply(Game game, Ability source) {
ManaSpentToCastWatcher watcher = game.getState().getWatcher( ManaSpentToCastWatcher watcher = game.getState().getWatcher(ManaSpentToCastWatcher.class);
ManaSpentToCastWatcher.class, source.getSourceId()
);
if (watcher == null) { if (watcher == null) {
return false; return false;
} }
Mana payment = watcher.getAndResetLastPayment(); Mana payment = watcher.getAndResetLastPayment(source.getSourceId());
if (payment == null || payment.getSnow() < 1) { if (payment == null || payment.getSnow() < 1) {
return false; return false;
} }

View file

@ -22,7 +22,7 @@ public final class BiomassMutation extends CardImpl {
// Creatures you control have base power and toughness X/X until end of turn. // Creatures you control have base power and toughness X/X until end of turn.
DynamicValue variableMana = ManacostVariableValue.instance; DynamicValue variableMana = ManacostVariableValue.REGULAR;
this.getSpellAbility().addEffect(new SetPowerToughnessAllEffect(variableMana, variableMana, Duration.EndOfTurn, new FilterControlledCreaturePermanent("Creatures you control"), true)); this.getSpellAbility().addEffect(new SetPowerToughnessAllEffect(variableMana, variableMana, Duration.EndOfTurn, new FilterControlledCreaturePermanent("Creatures you control"), true));
} }

View file

@ -46,7 +46,7 @@ public final class BlastZone extends CardImpl {
// {X}{X}, {T}: Put X charge counters on Blast Zone. // {X}{X}, {T}: Put X charge counters on Blast Zone.
Ability ability = new SimpleActivatedAbility(new AddCountersSourceEffect( Ability ability = new SimpleActivatedAbility(new AddCountersSourceEffect(
CounterType.CHARGE.createInstance(), ManacostVariableValue.instance, true CounterType.CHARGE.createInstance(), ManacostVariableValue.REGULAR, true
), new ManaCostsImpl("{X}{X}")); ), new ManaCostsImpl("{X}{X}"));
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());
this.addAbility(ability); this.addAbility(ability);

View file

@ -20,7 +20,7 @@ public final class Blaze extends CardImpl {
// Blaze deals X damage to any target. // Blaze deals X damage to any target.
this.getSpellAbility().addEffect(new DamageTargetEffect(ManacostVariableValue.instance)); this.getSpellAbility().addEffect(new DamageTargetEffect(ManacostVariableValue.REGULAR));
this.getSpellAbility().addTarget(new TargetAnyTarget()); this.getSpellAbility().addTarget(new TargetAnyTarget());
} }

View file

@ -33,7 +33,7 @@ public final class BlotOutTheSky extends CardImpl {
// Create X tapped 2/1 white and black Inkling creature tokens with flying. If X is 6 or more, destroy all noncreature, nonland permanents. // Create X tapped 2/1 white and black Inkling creature tokens with flying. If X is 6 or more, destroy all noncreature, nonland permanents.
this.getSpellAbility().addEffect(new CreateTokenEffect( this.getSpellAbility().addEffect(new CreateTokenEffect(
new SilverquillToken(), ManacostVariableValue.instance, true, false new SilverquillToken(), ManacostVariableValue.REGULAR, true, false
)); ));
this.getSpellAbility().addEffect(new ConditionalOneShotEffect( this.getSpellAbility().addEffect(new ConditionalOneShotEffect(
new DestroyAllEffect(filter), BlotOutTheSkyCondition.instance, new DestroyAllEffect(filter), BlotOutTheSkyCondition.instance,

View file

@ -21,7 +21,7 @@ public final class BlueSunsZenith extends CardImpl {
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{X}{U}{U}{U}"); super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{X}{U}{U}{U}");
// Target player draws X cards. Shuffle Blue Sun's Zenith into its owner's library. // Target player draws X cards. Shuffle Blue Sun's Zenith into its owner's library.
this.getSpellAbility().addEffect(new DrawCardTargetEffect(ManacostVariableValue.instance)); this.getSpellAbility().addEffect(new DrawCardTargetEffect(ManacostVariableValue.REGULAR));
this.getSpellAbility().addEffect(ShuffleSpellEffect.getInstance()); this.getSpellAbility().addEffect(ShuffleSpellEffect.getInstance());
this.getSpellAbility().addTarget(new TargetPlayer()); this.getSpellAbility().addTarget(new TargetPlayer());
} }

View file

@ -18,7 +18,7 @@ public final class BondOfAgony extends CardImpl {
public BondOfAgony(UUID ownerId, CardSetInfo setInfo) { public BondOfAgony(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{X}{B}"); super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{X}{B}");
DynamicValue xValue = ManacostVariableValue.instance; DynamicValue xValue = ManacostVariableValue.REGULAR;
// As an additional cost to cast Bond of Agony, pay X life. // As an additional cost to cast Bond of Agony, pay X life.
// magenoxx: here we don't use PayVariableLifeCost as {X} shouldn't actually be announced // magenoxx: here we don't use PayVariableLifeCost as {X} shouldn't actually be announced

View file

@ -27,7 +27,7 @@ public final class BorrowingTheEastWind extends CardImpl {
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{X}{G}{G}"); super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{X}{G}{G}");
// Borrowing the East Wind deals X damage to each creature with horsemanship and each player. // Borrowing the East Wind deals X damage to each creature with horsemanship and each player.
this.getSpellAbility().addEffect(new DamageEverythingEffect(ManacostVariableValue.instance, filter)); } this.getSpellAbility().addEffect(new DamageEverythingEffect(ManacostVariableValue.REGULAR, filter)); }
private BorrowingTheEastWind(final BorrowingTheEastWind card) { private BorrowingTheEastWind(final BorrowingTheEastWind card) {
super(card); super(card);

View file

@ -21,7 +21,7 @@ public final class Braingeyser extends CardImpl {
// Target player draws X cards. // Target player draws X cards.
this.getSpellAbility().addEffect(new DrawCardTargetEffect(ManacostVariableValue.instance)); this.getSpellAbility().addEffect(new DrawCardTargetEffect(ManacostVariableValue.REGULAR));
this.getSpellAbility().addTarget(new TargetPlayer()); this.getSpellAbility().addTarget(new TargetPlayer());
} }

View file

@ -27,7 +27,7 @@ public final class Brightflame extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{X}{R}{R}{W}{W}"); super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{X}{R}{R}{W}{W}");
// Radiance - Brightflame deals X damage to target creature and each other creature that shares a color with it. You gain life equal to the damage dealt this way. // Radiance - Brightflame deals X damage to target creature and each other creature that shares a color with it. You gain life equal to the damage dealt this way.
this.getSpellAbility().addEffect(new BrightflameEffect(ManacostVariableValue.instance)); this.getSpellAbility().addEffect(new BrightflameEffect(ManacostVariableValue.REGULAR));
this.getSpellAbility().addTarget(new TargetCreaturePermanent()); this.getSpellAbility().addTarget(new TargetCreaturePermanent());
this.getSpellAbility().setAbilityWord(AbilityWord.RADIANCE); this.getSpellAbility().setAbilityWord(AbilityWord.RADIANCE);
} }

View file

@ -25,7 +25,7 @@ public final class BrokenAmbitions extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{X}{U}"); super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{X}{U}");
// Counter target spell unless its controller pays {X}. Clash with an opponent. If you win, that spell's controller puts the top four cards of their library into their graveyard. // Counter target spell unless its controller pays {X}. Clash with an opponent. If you win, that spell's controller puts the top four cards of their library into their graveyard.
this.getSpellAbility().addEffect(new CounterUnlessPaysEffect(ManacostVariableValue.instance)); this.getSpellAbility().addEffect(new CounterUnlessPaysEffect(ManacostVariableValue.REGULAR));
this.getSpellAbility().addEffect(new BrokenAmbitionsEffect()); this.getSpellAbility().addEffect(new BrokenAmbitionsEffect());
this.getSpellAbility().addTarget(new TargetSpell()); this.getSpellAbility().addTarget(new TargetSpell());
} }

View file

@ -78,7 +78,7 @@ class CabalInterrogatorEffect extends OneShotEffect {
return false; return false;
} }
int amountToReveal = (ManacostVariableValue.instance).calculate(game, source, this); int amountToReveal = (ManacostVariableValue.REGULAR).calculate(game, source, this);
Cards revealedCards = new CardsImpl(); Cards revealedCards = new CardsImpl();
if (amountToReveal > 0 && targetPlayer.getHand().size() > amountToReveal) { if (amountToReveal > 0 && targetPlayer.getHand().size() > amountToReveal) {

View file

@ -33,7 +33,7 @@ public final class CacklingWitch extends CardImpl {
this.toughness = new MageInt(1); this.toughness = new MageInt(1);
// {X}{B}, {tap}, Discard a card: Target creature gets +X/+0 until end of turn. // {X}{B}, {tap}, Discard a card: Target creature gets +X/+0 until end of turn.
ManacostVariableValue manaX = ManacostVariableValue.instance; ManacostVariableValue manaX = ManacostVariableValue.REGULAR;
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD,
new BoostTargetEffect(manaX, StaticValue.get(0), Duration.EndOfTurn), new BoostTargetEffect(manaX, StaticValue.get(0), Duration.EndOfTurn),
new ManaCostsImpl("{X}{B}")); new ManaCostsImpl("{X}{B}"));

View file

@ -44,7 +44,7 @@ public final class ChamberSentry extends CardImpl {
"with a +1/+1 counter on it for each color of mana spent to cast it")); "with a +1/+1 counter on it for each color of mana spent to cast it"));
// {X}, {T}, Remove X +1/+1 counters from Chamber Sentry: It deals X damage to any target. // {X}, {T}, Remove X +1/+1 counters from Chamber Sentry: It deals X damage to any target.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(ManacostVariableValue.instance) Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(ManacostVariableValue.REGULAR)
.setText("It deals X damage to any target"), .setText("It deals X damage to any target"),
new ManaCostsImpl("{X}")); new ManaCostsImpl("{X}"));
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());

View file

@ -31,7 +31,7 @@ public final class CinderElemental extends CardImpl {
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
// {X}{R}, {tap}, Sacrifice Cinder Elemental: Cinder Elemental deals X damage to any target. // {X}{R}, {tap}, Sacrifice Cinder Elemental: Cinder Elemental deals X damage to any target.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(ManacostVariableValue.instance), new ManaCostsImpl("{X}{R}")); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(ManacostVariableValue.REGULAR), new ManaCostsImpl("{X}{R}"));
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());
ability.addCost(new SacrificeSourceCost()); ability.addCost(new SacrificeSourceCost());
ability.addTarget(new TargetAnyTarget()); ability.addTarget(new TargetAnyTarget());

View file

@ -35,16 +35,16 @@ public final class ClanDefiance extends CardImpl {
this.getSpellAbility().getModes().setMinModes(1); this.getSpellAbility().getModes().setMinModes(1);
this.getSpellAbility().getModes().setMaxModes(3); this.getSpellAbility().getModes().setMaxModes(3);
// Clan Defiance deals X damage to target creature with flying; // Clan Defiance deals X damage to target creature with flying;
this.getSpellAbility().addEffect(new DamageTargetEffect(ManacostVariableValue.instance)); this.getSpellAbility().addEffect(new DamageTargetEffect(ManacostVariableValue.REGULAR));
this.getSpellAbility().addTarget(new TargetCreaturePermanent(filterFlying).withChooseHint("deals X damage, with flying")); this.getSpellAbility().addTarget(new TargetCreaturePermanent(filterFlying).withChooseHint("deals X damage, with flying"));
// Clan Defiance deals X damage to target creature without flying; // Clan Defiance deals X damage to target creature without flying;
Mode mode1 = new Mode(); Mode mode1 = new Mode();
mode1.addEffect(new DamageTargetEffect(ManacostVariableValue.instance)); mode1.addEffect(new DamageTargetEffect(ManacostVariableValue.REGULAR));
mode1.addTarget(new TargetCreaturePermanent(filterWithoutFlying).withChooseHint("deals X damage, without flying")); mode1.addTarget(new TargetCreaturePermanent(filterWithoutFlying).withChooseHint("deals X damage, without flying"));
this.getSpellAbility().addMode(mode1); this.getSpellAbility().addMode(mode1);
// and/or Clan Defiance deals X damage to target player. // and/or Clan Defiance deals X damage to target player.
Mode mode2 = new Mode(); Mode mode2 = new Mode();
mode2.addEffect(new DamageTargetEffect(ManacostVariableValue.instance)); mode2.addEffect(new DamageTargetEffect(ManacostVariableValue.REGULAR));
mode2.addTarget(new TargetPlayerOrPlaneswalker().withChooseHint("deals X damage")); mode2.addTarget(new TargetPlayerOrPlaneswalker().withChooseHint("deals X damage"));
this.getSpellAbility().addMode(mode2); this.getSpellAbility().addMode(mode2);

View file

@ -19,7 +19,7 @@ public final class ClashOfWills extends CardImpl {
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{X}{U}"); super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{X}{U}");
// Counter target spell unless its controller pays {X}. // Counter target spell unless its controller pays {X}.
this.getSpellAbility().addEffect(new CounterUnlessPaysEffect(ManacostVariableValue.instance)); this.getSpellAbility().addEffect(new CounterUnlessPaysEffect(ManacostVariableValue.REGULAR));
this.getSpellAbility().addTarget(new TargetSpell()); this.getSpellAbility().addTarget(new TargetSpell());
} }

View file

@ -63,7 +63,7 @@ public final class ClockworkAvian extends CardImpl {
Zone.BATTLEFIELD, Zone.BATTLEFIELD,
new AvianAddCountersSourceEffect( new AvianAddCountersSourceEffect(
CounterType.P1P0.createInstance(), CounterType.P1P0.createInstance(),
ManacostVariableValue.instance, ManacostVariableValue.REGULAR,
true, true true, true
), ),
new ManaCostsImpl("{X}"), new ManaCostsImpl("{X}"),

View file

@ -59,7 +59,7 @@ public final class ClockworkBeast extends CardImpl {
Zone.BATTLEFIELD, Zone.BATTLEFIELD,
new BeastAddCountersSourceEffect( new BeastAddCountersSourceEffect(
CounterType.P1P0.createInstance(), CounterType.P1P0.createInstance(),
ManacostVariableValue.instance, ManacostVariableValue.REGULAR,
true, true true, true
), ),
new ManaCostsImpl("{X}"), new ManaCostsImpl("{X}"),

View file

@ -69,7 +69,7 @@ public final class ClockworkSteed extends CardImpl {
Zone.BATTLEFIELD, Zone.BATTLEFIELD,
new ClockworkSteedAddCountersSourceEffect( new ClockworkSteedAddCountersSourceEffect(
CounterType.P1P0.createInstance(), CounterType.P1P0.createInstance(),
ManacostVariableValue.instance, ManacostVariableValue.REGULAR,
true, true true, true
), ),
new ManaCostsImpl("{X}"), new ManaCostsImpl("{X}"),

View file

@ -72,7 +72,7 @@ public final class ClockworkSwarm extends CardImpl {
Zone.BATTLEFIELD, Zone.BATTLEFIELD,
new SwarmAddCountersSourceEffect( new SwarmAddCountersSourceEffect(
CounterType.P1P0.createInstance(), CounterType.P1P0.createInstance(),
ManacostVariableValue.instance, ManacostVariableValue.REGULAR,
true, true true, true
), ),
new ManaCostsImpl("{X}"), new ManaCostsImpl("{X}"),

View file

@ -21,7 +21,7 @@ public final class Condescend extends CardImpl {
// Counter target spell unless its controller pays {X}. // Counter target spell unless its controller pays {X}.
this.getSpellAbility().addEffect(new CounterUnlessPaysEffect(ManacostVariableValue.instance)); this.getSpellAbility().addEffect(new CounterUnlessPaysEffect(ManacostVariableValue.REGULAR));
this.getSpellAbility().addTarget(new TargetSpell()); this.getSpellAbility().addTarget(new TargetSpell());
// Scry 2. // Scry 2.
this.getSpellAbility().addEffect(new ScryEffect(2)); this.getSpellAbility().addEffect(new ScryEffect(2));

View file

@ -38,8 +38,8 @@ public final class ConsumeSpirit extends CardImpl {
// Consume Spirit deals X damage to any target and you gain X life. // Consume Spirit deals X damage to any target and you gain X life.
this.getSpellAbility().addTarget(new TargetAnyTarget()); this.getSpellAbility().addTarget(new TargetAnyTarget());
this.getSpellAbility().addEffect(new DamageTargetEffect(ManacostVariableValue.instance)); this.getSpellAbility().addEffect(new DamageTargetEffect(ManacostVariableValue.REGULAR));
this.getSpellAbility().addEffect(new GainLifeEffect(ManacostVariableValue.instance).concatBy("and")); this.getSpellAbility().addEffect(new GainLifeEffect(ManacostVariableValue.REGULAR).concatBy("and"));
VariableCost variableCost = this.getSpellAbility().getManaCostsToPay().getVariableCosts().get(0); VariableCost variableCost = this.getSpellAbility().getManaCostsToPay().getVariableCosts().get(0);
if (variableCost instanceof VariableManaCost) { if (variableCost instanceof VariableManaCost) {
((VariableManaCost) variableCost).setFilter(filterBlack); ((VariableManaCost) variableCost).setFilter(filterBlack);

View file

@ -27,7 +27,7 @@ public final class CorrosiveGale extends CardImpl {
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{X}{G/P}"); super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{X}{G/P}");
this.getSpellAbility().addEffect(new DamageAllEffect(ManacostVariableValue.instance, filter)); this.getSpellAbility().addEffect(new DamageAllEffect(ManacostVariableValue.REGULAR, filter));
} }
private CorrosiveGale(final CorrosiveGale card) { private CorrosiveGale(final CorrosiveGale card) {

View file

@ -19,7 +19,7 @@ import java.util.UUID;
*/ */
public final class CrackleWithPower extends CardImpl { public final class CrackleWithPower extends CardImpl {
private static final DynamicValue value = new MultipliedValue(ManacostVariableValue.instance, 5); private static final DynamicValue value = new MultipliedValue(ManacostVariableValue.REGULAR, 5);
public CrackleWithPower(UUID ownerId, CardSetInfo setInfo) { public CrackleWithPower(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{X}{X}{X}{R}{R}"); super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{X}{X}{X}{R}{R}");

View file

@ -24,8 +24,8 @@ public final class CratersClaws extends CardImpl {
// Crater's Claws deals X damage to any target. // Crater's Claws deals X damage to any target.
// <i>Ferocious</i> &mdash; Crater's Claws deals X plus 2 damage to that creature or player instead if you control a creature with power 4 or greater. // <i>Ferocious</i> &mdash; Crater's Claws deals X plus 2 damage to that creature or player instead if you control a creature with power 4 or greater.
this.getSpellAbility().addEffect(new ConditionalOneShotEffect( this.getSpellAbility().addEffect(new ConditionalOneShotEffect(
new DamageTargetEffect(new IntPlusDynamicValue(2, ManacostVariableValue.instance)), new DamageTargetEffect(new IntPlusDynamicValue(2, ManacostVariableValue.REGULAR)),
new DamageTargetEffect(ManacostVariableValue.instance), new DamageTargetEffect(ManacostVariableValue.REGULAR),
FerociousCondition.instance, FerociousCondition.instance,
"{this} deals X damage to any target." "{this} deals X damage to any target."
+ "<br><i>Ferocious</i> &mdash; {this} deals X plus 2 damage instead if you control a creature with power 4 or greater")); + "<br><i>Ferocious</i> &mdash; {this} deals X plus 2 damage instead if you control a creature with power 4 or greater"));

View file

@ -43,7 +43,7 @@ public final class CrimsonHellkite extends CardImpl {
// Flying // Flying
this.addAbility(FlyingAbility.getInstance()); this.addAbility(FlyingAbility.getInstance());
// {X}, {tap}: Crimson Hellkite deals X damage to target creature. Spend only red mana on X. // {X}, {tap}: Crimson Hellkite deals X damage to target creature. Spend only red mana on X.
Effect effect = new DamageTargetEffect(ManacostVariableValue.instance); Effect effect = new DamageTargetEffect(ManacostVariableValue.REGULAR);
effect.setText("{this} deals X damage to target creature. Spend only red mana on X"); effect.setText("{this} deals X damage to target creature. Spend only red mana on X");
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, effect, new ManaCostsImpl("{X}")); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, effect, new ManaCostsImpl("{X}"));
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());

View file

@ -38,7 +38,7 @@ public final class CryptRats extends CardImpl {
this.toughness = new MageInt(1); this.toughness = new MageInt(1);
// {X}: Crypt Rats deals X damage to each creature and each player. Spend only black mana on X. // {X}: Crypt Rats deals X damage to each creature and each player. Spend only black mana on X.
Effect effect = new DamageEverythingEffect(ManacostVariableValue.instance); Effect effect = new DamageEverythingEffect(ManacostVariableValue.REGULAR);
effect.setText("{this} deals X damage to each creature and each player. Spend only black mana on X"); effect.setText("{this} deals X damage to each creature and each player. Spend only black mana on X");
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, effect,new ManaCostsImpl("{X}")); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, effect,new ManaCostsImpl("{X}"));
VariableCost variableCost = ability.getManaCostsToPay().getVariableCosts().get(0); VariableCost variableCost = ability.getManaCostsToPay().getVariableCosts().get(0);

View file

@ -28,7 +28,7 @@ public final class CutRibbons extends SplitCard {
// Ribbons // Ribbons
// Each opponent loses X life. // Each opponent loses X life.
getRightHalfCard().addAbility(new AftermathAbility().setRuleAtTheTop(true)); getRightHalfCard().addAbility(new AftermathAbility().setRuleAtTheTop(true));
getRightHalfCard().getSpellAbility().addEffect(new LoseLifeOpponentsEffect(ManacostVariableValue.instance)); getRightHalfCard().getSpellAbility().addEffect(new LoseLifeOpponentsEffect(ManacostVariableValue.REGULAR));
} }

View file

@ -33,7 +33,7 @@ public final class DarkSalvation extends CardImpl {
// Target player creates X 2/2 black Zombie creature tokens, then up to one target creature gets -1/-1 until end of turn for each Zombie that player controls. // Target player creates X 2/2 black Zombie creature tokens, then up to one target creature gets -1/-1 until end of turn for each Zombie that player controls.
this.getSpellAbility().addTarget(new TargetPlayer()); this.getSpellAbility().addTarget(new TargetPlayer());
Effect effect = new CreateTokenTargetEffect(new ZombieToken(), ManacostVariableValue.instance); Effect effect = new CreateTokenTargetEffect(new ZombieToken(), ManacostVariableValue.REGULAR);
effect.setText("Target player creates X 2/2 black Zombie creature tokens"); effect.setText("Target player creates X 2/2 black Zombie creature tokens");
this.getSpellAbility().addEffect(effect); this.getSpellAbility().addEffect(effect);
DynamicValue value = new ZombiesControlledByTargetPlayerCount(); DynamicValue value = new ZombiesControlledByTargetPlayerCount();

View file

@ -24,7 +24,7 @@ public final class DawnglowInfusion extends CardImpl {
// You gain X life if {G} was spent to cast Dawnglow Infusion and X life if {W} was spent to cast it. // You gain X life if {G} was spent to cast Dawnglow Infusion and X life if {W} was spent to cast it.
DynamicValue xValue = ManacostVariableValue.instance; DynamicValue xValue = ManacostVariableValue.REGULAR;
this.getSpellAbility().addEffect(new ConditionalOneShotEffect( this.getSpellAbility().addEffect(new ConditionalOneShotEffect(
new GainLifeEffect(xValue), new GainLifeEffect(xValue),
new ManaWasSpentCondition(ColoredManaSymbol.G), "You gain X life if {G} was spent to cast this spell")); new ManaWasSpentCondition(ColoredManaSymbol.G), "You gain X life if {G} was spent to cast this spell"));

View file

@ -25,7 +25,7 @@ public final class DeathCloud extends CardImpl {
// Each player loses X life, discards X cards, sacrifices X creatures, then sacrifices X lands. // Each player loses X life, discards X cards, sacrifices X creatures, then sacrifices X lands.
DynamicValue xValue = ManacostVariableValue.instance; DynamicValue xValue = ManacostVariableValue.REGULAR;
this.getSpellAbility().addEffect(new LoseLifeAllPlayersEffect(xValue)); this.getSpellAbility().addEffect(new LoseLifeAllPlayersEffect(xValue));
Effect effect = new DiscardEachPlayerEffect(xValue, false); Effect effect = new DiscardEachPlayerEffect(xValue, false);
effect.setText(", discards X cards"); effect.setText(", discards X cards");

View file

@ -21,8 +21,8 @@ public final class DeathGrasp extends CardImpl {
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{X}{W}{B}"); super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{X}{W}{B}");
this.getSpellAbility().addEffect(new DamageTargetEffect(ManacostVariableValue.instance)); this.getSpellAbility().addEffect(new DamageTargetEffect(ManacostVariableValue.REGULAR));
this.getSpellAbility().addEffect(new GainLifeEffect(ManacostVariableValue.instance)); this.getSpellAbility().addEffect(new GainLifeEffect(ManacostVariableValue.REGULAR));
this.getSpellAbility().addTarget(new TargetAnyTarget()); this.getSpellAbility().addTarget(new TargetAnyTarget());
} }

View file

@ -22,7 +22,7 @@ public final class DeathWind extends CardImpl {
// Target creature gets -X/-X until end of turn. // Target creature gets -X/-X until end of turn.
DynamicValue x = new SignInversionDynamicValue(ManacostVariableValue.instance); DynamicValue x = new SignInversionDynamicValue(ManacostVariableValue.REGULAR);
this.getSpellAbility().addEffect(new BoostTargetEffect(x, x, Duration.EndOfTurn, true)); this.getSpellAbility().addEffect(new BoostTargetEffect(x, x, Duration.EndOfTurn, true));
this.getSpellAbility().addTarget(new TargetCreaturePermanent()); this.getSpellAbility().addTarget(new TargetCreaturePermanent());
} }

View file

@ -28,7 +28,7 @@ public final class DecreeOfJustice extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{X}{X}{2}{W}{W}"); super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{X}{X}{2}{W}{W}");
// Create X 4/4 white Angel creature tokens with flying. // Create X 4/4 white Angel creature tokens with flying.
this.getSpellAbility().addEffect(new CreateTokenEffect(new AngelToken(), ManacostVariableValue.instance)); this.getSpellAbility().addEffect(new CreateTokenEffect(new AngelToken(), ManacostVariableValue.REGULAR));
// Cycling {2}{W} // Cycling {2}{W}
this.addAbility(new CyclingAbility(new ManaCostsImpl<>("{2}{W}"))); this.addAbility(new CyclingAbility(new ManaCostsImpl<>("{2}{W}")));

View file

@ -31,7 +31,7 @@ public final class Demonfire extends CardImpl {
// Demonfire deals X damage to any target. // Demonfire deals X damage to any target.
this.getSpellAbility().addEffect(new ConditionalOneShotEffect( this.getSpellAbility().addEffect(new ConditionalOneShotEffect(
new DamageTargetEffect(ManacostVariableValue.instance), new DamageTargetEffect(ManacostVariableValue.REGULAR),
new InvertCondition(HellbentCondition.instance), new InvertCondition(HellbentCondition.instance),
"{this} deals X damage to any target")); "{this} deals X damage to any target"));
@ -41,7 +41,7 @@ public final class Demonfire extends CardImpl {
// Hellbent - If you have no cards in hand, Demonfire can't be countered and the damage can't be prevented. // Hellbent - If you have no cards in hand, Demonfire can't be countered and the damage can't be prevented.
this.getSpellAbility().addEffect(new ConditionalOneShotEffect( this.getSpellAbility().addEffect(new ConditionalOneShotEffect(
new DamageTargetEffect(ManacostVariableValue.instance, false), new DamageTargetEffect(ManacostVariableValue.REGULAR, false),
HellbentCondition.instance, HellbentCondition.instance,
"<br/><i>Hellbent</i> &mdash; If you have no cards in hand, this spell can't be countered and the damage can't be prevented.")); "<br/><i>Hellbent</i> &mdash; If you have no cards in hand, this spell can't be countered and the damage can't be prevented."));
// can't be countered // can't be countered

View file

@ -29,7 +29,7 @@ public final class Detonate extends CardImpl {
// Destroy target artifact with converted mana cost X. It can't be regenerated. Detonate deals X damage to that artifact's controller. // Destroy target artifact with converted mana cost X. It can't be regenerated. Detonate deals X damage to that artifact's controller.
this.getSpellAbility().addEffect(new DestroyTargetEffect(true)); this.getSpellAbility().addEffect(new DestroyTargetEffect(true));
this.getSpellAbility().addTarget(new TargetArtifactPermanent(new FilterArtifactPermanent("artifact with mana value X"))); this.getSpellAbility().addTarget(new TargetArtifactPermanent(new FilterArtifactPermanent("artifact with mana value X")));
Effect effect = new DamageTargetControllerEffect(ManacostVariableValue.instance); Effect effect = new DamageTargetControllerEffect(ManacostVariableValue.REGULAR);
effect.setText("{this} deals X damage to that artifact's controller"); effect.setText("{this} deals X damage to that artifact's controller");
this.getSpellAbility().addEffect(effect); this.getSpellAbility().addEffect(effect);
this.getSpellAbility().setTargetAdjuster(DetonateAdjuster.instance); this.getSpellAbility().setTargetAdjuster(DetonateAdjuster.instance);

View file

@ -23,7 +23,7 @@ public final class DevilsPlay extends CardImpl {
// Devil's Play deals X damage to any target. // Devil's Play deals X damage to any target.
this.getSpellAbility().addEffect(new DamageTargetEffect(ManacostVariableValue.instance)); this.getSpellAbility().addEffect(new DamageTargetEffect(ManacostVariableValue.REGULAR));
this.getSpellAbility().addTarget(new TargetAnyTarget()); this.getSpellAbility().addTarget(new TargetAnyTarget());
// Flashback {X}{R}{R}{R} // Flashback {X}{R}{R}{R}
this.addAbility(new FlashbackAbility(new ManaCostsImpl("{X}{R}{R}{R}"), TimingRule.SORCERY)); this.addAbility(new FlashbackAbility(new ManaCostsImpl("{X}{R}{R}{R}"), TimingRule.SORCERY));

View file

@ -23,7 +23,7 @@ public final class Disintegrate extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{X}{R}"); super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{X}{R}");
// Disintegrate deals X damage to any target. That creature can't be regenerated this turn. If the creature would die this turn, exile it instead. // Disintegrate deals X damage to any target. That creature can't be regenerated this turn. If the creature would die this turn, exile it instead.
this.getSpellAbility().addEffect(new DamageTargetEffect(ManacostVariableValue.instance)); this.getSpellAbility().addEffect(new DamageTargetEffect(ManacostVariableValue.REGULAR));
this.getSpellAbility().addEffect(new CantRegenerateTargetEffect(Duration.EndOfTurn, "That creature")); this.getSpellAbility().addEffect(new CantRegenerateTargetEffect(Duration.EndOfTurn, "That creature"));
Effect effect = new ExileTargetIfDiesEffect(); Effect effect = new ExileTargetIfDiesEffect();
effect.setText("If the creature would die this turn, exile it instead"); effect.setText("If the creature would die this turn, exile it instead");

View file

@ -37,8 +37,8 @@ public final class DranaKalastriaBloodchief extends CardImpl {
this.toughness = new MageInt(4); this.toughness = new MageInt(4);
this.addAbility(FlyingAbility.getInstance()); this.addAbility(FlyingAbility.getInstance());
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostTargetEffect(StaticValue.get(0), new SignInversionDynamicValue(ManacostVariableValue.instance), Duration.EndOfTurn), new ManaCostsImpl("{X}{B}{B}")); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostTargetEffect(StaticValue.get(0), new SignInversionDynamicValue(ManacostVariableValue.REGULAR), Duration.EndOfTurn), new ManaCostsImpl("{X}{B}{B}"));
ability.addEffect(new BoostSourceEffect(ManacostVariableValue.instance, StaticValue.get(0), Duration.EndOfTurn)); ability.addEffect(new BoostSourceEffect(ManacostVariableValue.REGULAR, StaticValue.get(0), Duration.EndOfTurn));
ability.addTarget(new TargetCreaturePermanent()); ability.addTarget(new TargetCreaturePermanent());
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -28,7 +28,7 @@ public final class DregsOfSorrow extends CardImpl {
// Destroy X target nonblack creatures. Draw X cards. // Destroy X target nonblack creatures. Draw X cards.
this.getSpellAbility().addEffect(new DestroyTargetEffect("Destroy X target nonblack creatures")); this.getSpellAbility().addEffect(new DestroyTargetEffect("Destroy X target nonblack creatures"));
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(ManacostVariableValue.instance)); this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(ManacostVariableValue.REGULAR));
this.getSpellAbility().setTargetAdjuster(DregsOfSorrowAdjuster.instance); this.getSpellAbility().setTargetAdjuster(DregsOfSorrowAdjuster.instance);
} }

View file

@ -29,7 +29,7 @@ public final class Earthquake extends CardImpl {
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{X}{R}"); super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{X}{R}");
// Hurricane deals X damage to each creature with flying and each player. // Hurricane deals X damage to each creature with flying and each player.
this.getSpellAbility().addEffect(new DamageEverythingEffect(ManacostVariableValue.instance, filter)); this.getSpellAbility().addEffect(new DamageEverythingEffect(ManacostVariableValue.REGULAR, filter));
} }
private Earthquake(final Earthquake card) { private Earthquake(final Earthquake card) {

View file

@ -19,9 +19,9 @@ public final class Electrodominance extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{X}{R}{R}"); super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{X}{R}{R}");
// Electrodominance deals X damage to any target. You may cast a card with converted mana cost X or less from your hand without paying its mana cost. // Electrodominance deals X damage to any target. You may cast a card with converted mana cost X or less from your hand without paying its mana cost.
this.getSpellAbility().addEffect(new DamageTargetEffect(ManacostVariableValue.instance)); this.getSpellAbility().addEffect(new DamageTargetEffect(ManacostVariableValue.REGULAR));
this.getSpellAbility().addTarget(new TargetAnyTarget()); this.getSpellAbility().addTarget(new TargetAnyTarget());
this.getSpellAbility().addEffect(new CastWithoutPayingManaCostEffect(ManacostVariableValue.instance)); this.getSpellAbility().addEffect(new CastWithoutPayingManaCostEffect(ManacostVariableValue.REGULAR));
} }
private Electrodominance(final Electrodominance card) { private Electrodominance(final Electrodominance card) {

View file

@ -24,7 +24,7 @@ public final class EmptyThePits extends CardImpl {
this.addAbility(new DelveAbility()); this.addAbility(new DelveAbility());
// create X 2/2 black Zombie creature tokens tapped. // create X 2/2 black Zombie creature tokens tapped.
this.getSpellAbility().addEffect(new CreateTokenEffect(new ZombieToken(), ManacostVariableValue.instance, true, false)); this.getSpellAbility().addEffect(new CreateTokenEffect(new ZombieToken(), ManacostVariableValue.REGULAR, true, false));
} }
private EmptyThePits(final EmptyThePits card) { private EmptyThePits(final EmptyThePits card) {

View file

@ -22,10 +22,10 @@ public final class EnergyBolt extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{X}{R}{W}"); super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{X}{R}{W}");
// Choose one - Energy Bolt deals X damage to target player; or target player gains X life. // Choose one - Energy Bolt deals X damage to target player; or target player gains X life.
this.getSpellAbility().addEffect(new DamageTargetEffect(ManacostVariableValue.instance)); this.getSpellAbility().addEffect(new DamageTargetEffect(ManacostVariableValue.REGULAR));
this.getSpellAbility().addTarget(new TargetPlayerOrPlaneswalker()); this.getSpellAbility().addTarget(new TargetPlayerOrPlaneswalker());
Mode mode = new Mode(); Mode mode = new Mode();
mode.addEffect(new GainLifeTargetEffect(ManacostVariableValue.instance)); mode.addEffect(new GainLifeTargetEffect(ManacostVariableValue.REGULAR));
mode.addTarget(new TargetPlayer()); mode.addTarget(new TargetPlayer());
this.getSpellAbility().addMode(mode); this.getSpellAbility().addMode(mode);
} }

View file

@ -56,7 +56,7 @@ public final class EnergyVortex extends CardImpl {
Zone.BATTLEFIELD, Zone.BATTLEFIELD,
new AddCountersSourceEffect( new AddCountersSourceEffect(
CounterType.VORTEX.createInstance(), CounterType.VORTEX.createInstance(),
ManacostVariableValue.instance, true ManacostVariableValue.REGULAR, true
), new ManaCostsImpl("{X}"), ), new ManaCostsImpl("{X}"),
new IsStepCondition(PhaseStep.UPKEEP) new IsStepCondition(PhaseStep.UPKEEP)
)); ));

View file

@ -22,7 +22,7 @@ public final class Enrage extends CardImpl {
// Target creature gets +X/+0 until end of turn. // Target creature gets +X/+0 until end of turn.
this.getSpellAbility().addEffect(new BoostTargetEffect(ManacostVariableValue.instance, StaticValue.get(0), Duration.EndOfTurn)); this.getSpellAbility().addEffect(new BoostTargetEffect(ManacostVariableValue.REGULAR, StaticValue.get(0), Duration.EndOfTurn));
this.getSpellAbility().addTarget(new TargetCreaturePermanent()); this.getSpellAbility().addTarget(new TargetCreaturePermanent());
} }

View file

@ -19,7 +19,7 @@ public final class EnshrinedMemories extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{X}{G}"); super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{X}{G}");
// Reveal the top X cards of your library. Put all creature cards revealed this way into your hand and the rest on the bottom of your library in any order. // Reveal the top X cards of your library. Put all creature cards revealed this way into your hand and the rest on the bottom of your library in any order.
this.getSpellAbility().addEffect(new RevealLibraryPutIntoHandEffect(ManacostVariableValue.instance, StaticFilters.FILTER_CARD_CREATURE, Zone.LIBRARY, true)); this.getSpellAbility().addEffect(new RevealLibraryPutIntoHandEffect(ManacostVariableValue.REGULAR, StaticFilters.FILTER_CARD_CREATURE, Zone.LIBRARY, true));
} }
private EnshrinedMemories(final EnshrinedMemories card) { private EnshrinedMemories(final EnshrinedMemories card) {

View file

@ -22,7 +22,7 @@ public final class EntreatTheAngels extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{X}{X}{W}{W}{W}"); super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{X}{X}{W}{W}{W}");
// Create X 4/4 white Angel creature tokens with flying. // Create X 4/4 white Angel creature tokens with flying.
this.getSpellAbility().addEffect(new CreateTokenEffect(new AngelToken(), ManacostVariableValue.instance)); this.getSpellAbility().addEffect(new CreateTokenEffect(new AngelToken(), ManacostVariableValue.REGULAR));
// Miracle {X}{W}{W} // Miracle {X}{W}{W}
this.addAbility(new MiracleAbility(this, new ManaCostsImpl("{X}{W}{W}"))); this.addAbility(new MiracleAbility(this, new ManaCostsImpl("{X}{W}{W}")));

View file

@ -30,9 +30,9 @@ public final class ErebossIntervention extends CardImpl {
// Choose one // Choose one
// Target creature gets -X/-X until end of turn. You gain X life. // Target creature gets -X/-X until end of turn. You gain X life.
DynamicValue x = new SignInversionDynamicValue(ManacostVariableValue.instance); DynamicValue x = new SignInversionDynamicValue(ManacostVariableValue.REGULAR);
this.getSpellAbility().addEffect(new BoostTargetEffect(x,x,Duration.EndOfTurn)); this.getSpellAbility().addEffect(new BoostTargetEffect(x,x,Duration.EndOfTurn));
this.getSpellAbility().addEffect(new GainLifeEffect(ManacostVariableValue.instance) this.getSpellAbility().addEffect(new GainLifeEffect(ManacostVariableValue.REGULAR)
.setText("You gain X life")); .setText("You gain X life"));
this.getSpellAbility().addTarget(new TargetCreaturePermanent()); this.getSpellAbility().addTarget(new TargetCreaturePermanent());

View file

@ -28,7 +28,7 @@ public final class Excise extends CardImpl {
// Excise target nonwhite attacking creature unless its controller pays {X}. // Excise target nonwhite attacking creature unless its controller pays {X}.
this.getSpellAbility().addTarget(new TargetCreaturePermanent(filter)); this.getSpellAbility().addTarget(new TargetCreaturePermanent(filter));
this.getSpellAbility().addEffect(new DoUnlessTargetPlayerOrTargetsControllerPaysEffect(new ExileTargetEffect(), ManacostVariableValue.instance)); this.getSpellAbility().addEffect(new DoUnlessTargetPlayerOrTargetsControllerPaysEffect(new ExileTargetEffect(), ManacostVariableValue.REGULAR));
} }
private Excise(final Excise card) { private Excise(final Excise card) {

View file

@ -21,7 +21,7 @@ public final class FallOfTheTitans extends CardImpl {
// Fall of the Titans deals X damage to each of up to two target creatures and/or players. // Fall of the Titans deals X damage to each of up to two target creatures and/or players.
this.getSpellAbility().addTarget(new TargetAnyTarget(0, 2)); this.getSpellAbility().addTarget(new TargetAnyTarget(0, 2));
this.getSpellAbility().addEffect(new DamageTargetEffect(ManacostVariableValue.instance)); this.getSpellAbility().addEffect(new DamageTargetEffect(ManacostVariableValue.REGULAR));
// Surge {X}{R} // Surge {X}{R}
addAbility(new SurgeAbility(this, "{X}{R}")); addAbility(new SurgeAbility(this, "{X}{R}"));

View file

@ -23,7 +23,7 @@ public final class FanningTheFlames extends CardImpl {
this.addAbility(new BuybackAbility("{3}")); this.addAbility(new BuybackAbility("{3}"));
// Fanning the Flames deals X damage to any target. // Fanning the Flames deals X damage to any target.
this.getSpellAbility().addEffect(new DamageTargetEffect(ManacostVariableValue.instance)); this.getSpellAbility().addEffect(new DamageTargetEffect(ManacostVariableValue.REGULAR));
this.getSpellAbility().addTarget(new TargetAnyTarget()); this.getSpellAbility().addTarget(new TargetAnyTarget());
} }

View file

@ -22,11 +22,11 @@ public final class Fascination extends CardImpl {
// Choose one - // Choose one -
// * Each player draws X cards. // * Each player draws X cards.
this.getSpellAbility().addEffect(new DrawCardAllEffect(ManacostVariableValue.instance)); this.getSpellAbility().addEffect(new DrawCardAllEffect(ManacostVariableValue.REGULAR));
// * Each player puts the top X cards of their library into their graveyard. // * Each player puts the top X cards of their library into their graveyard.
Mode mode = new Mode(); Mode mode = new Mode();
mode.addEffect(new MillCardsEachPlayerEffect(ManacostVariableValue.instance, TargetController.ANY)); mode.addEffect(new MillCardsEachPlayerEffect(ManacostVariableValue.REGULAR, TargetController.ANY));
this.getSpellAbility().addMode(mode); this.getSpellAbility().addMode(mode);
} }

View file

@ -20,7 +20,7 @@ public final class FestivalOfTheGuildpact extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{X}{W}"); super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{X}{W}");
// Prevent the next X damage that would be dealt to you this turn. // Prevent the next X damage that would be dealt to you this turn.
this.getSpellAbility().addEffect(new PreventDamageToControllerEffect(Duration.EndOfTurn, false, true, ManacostVariableValue.instance)); this.getSpellAbility().addEffect(new PreventDamageToControllerEffect(Duration.EndOfTurn, false, true, ManacostVariableValue.REGULAR));
// Draw a card. // Draw a card.
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1)); this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1));

View file

@ -66,7 +66,7 @@ enum FinaleOfPromiseAdjuster implements TargetAdjuster {
public void adjustTargets(Ability ability, Game game) { public void adjustTargets(Ability ability, Game game) {
ability.getTargets().clear(); ability.getTargets().clear();
int xValue = ManacostVariableValue.instance.calculate(game, ability, null); int xValue = ManacostVariableValue.REGULAR.calculate(game, ability, null);
// <= must be replaced to &#60;= for html view // <= must be replaced to &#60;= for html view
FilterCard filter1 = FinaleOfPromise.filterInstant.copy(); FilterCard filter1 = FinaleOfPromise.filterInstant.copy();
@ -146,7 +146,7 @@ class FinaleOfPromiseEffect extends OneShotEffect {
} }
// If X is 10 or more, copy each of those spells twice. You may choose new targets for the copies // If X is 10 or more, copy each of those spells twice. You may choose new targets for the copies
int xValue = ManacostVariableValue.instance.calculate(game, source, null); int xValue = ManacostVariableValue.REGULAR.calculate(game, source, null);
if (xValue >= 10) { if (xValue >= 10) {
for (UUID id : cardsToCast) { for (UUID id : cardsToCast) {
Card card = game.getCard(id); Card card = game.getCard(id);

View file

@ -20,8 +20,8 @@ public final class FlowstoneSlide extends CardImpl {
public FlowstoneSlide(UUID ownerId, CardSetInfo setInfo) { public FlowstoneSlide(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{X}{2}{R}{R}"); super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{X}{2}{R}{R}");
DynamicValue xPos = ManacostVariableValue.instance; DynamicValue xPos = ManacostVariableValue.REGULAR;
DynamicValue xNeg = new SignInversionDynamicValue(ManacostVariableValue.instance); DynamicValue xNeg = new SignInversionDynamicValue(ManacostVariableValue.REGULAR);
// All creatures get +X/-X until end of turn. // All creatures get +X/-X until end of turn.
this.getSpellAbility().addEffect(new BoostAllEffect(xPos, xNeg, Duration.EndOfTurn)); this.getSpellAbility().addEffect(new BoostAllEffect(xPos, xNeg, Duration.EndOfTurn));

View file

@ -36,7 +36,7 @@ public final class FolioOfFancies extends CardImpl {
// {X}{X}, {T}: Each player draws X cards. // {X}{X}, {T}: Each player draws X cards.
Ability ability = new SimpleActivatedAbility( Ability ability = new SimpleActivatedAbility(
new DrawCardAllEffect(ManacostVariableValue.instance), new ManaCostsImpl("{X}{X}") new DrawCardAllEffect(ManacostVariableValue.REGULAR), new ManaCostsImpl("{X}{X}")
); );
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());
this.addAbility(ability); this.addAbility(ability);

View file

@ -24,7 +24,7 @@ public final class ForceLightning extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{X}{R}{R}"); super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{X}{R}{R}");
// Force Lightning deals X damage to any target. // Force Lightning deals X damage to any target.
this.getSpellAbility().addEffect(new DamageTargetEffect(ManacostVariableValue.instance)); this.getSpellAbility().addEffect(new DamageTargetEffect(ManacostVariableValue.REGULAR));
this.getSpellAbility().addTarget(new TargetAnyTarget()); this.getSpellAbility().addTarget(new TargetAnyTarget());
// Scry X. // Scry X.

View file

@ -73,7 +73,7 @@ class FractalHarnessTokenEffect extends OneShotEffect {
public boolean apply(Game game, Ability source) { public boolean apply(Game game, Ability source) {
Token token = new QuandrixToken(); Token token = new QuandrixToken();
token.putOntoBattlefield(1, game, source, source.getControllerId()); token.putOntoBattlefield(1, game, source, source.getControllerId());
int xValue = ManacostVariableValue.instance.calculate(game, source, this); int xValue = ManacostVariableValue.ETB.calculate(game, source, this);
boolean flag = true; boolean flag = true;
for (UUID tokenId : token.getLastAddedTokenIds()) { for (UUID tokenId : token.getLastAddedTokenIds()) {
Permanent permanent = game.getPermanent(tokenId); Permanent permanent = game.getPermanent(tokenId);

View file

@ -21,7 +21,7 @@ public final class FractalSummoning extends CardImpl {
// Create a 0/0 green and blue Fractal creature token. Put X +1/+1 counters on it. // Create a 0/0 green and blue Fractal creature token. Put X +1/+1 counters on it.
this.getSpellAbility().addEffect(QuandrixToken.getEffect( this.getSpellAbility().addEffect(QuandrixToken.getEffect(
ManacostVariableValue.instance, "Put X +1/+1 counters on it" ManacostVariableValue.REGULAR, "Put X +1/+1 counters on it"
)); ));
} }

View file

@ -48,7 +48,7 @@ public final class GadwickTheWizened extends CardImpl {
// When Gadwick, the Wizened enters the battlefield, draw X cards. // When Gadwick, the Wizened enters the battlefield, draw X cards.
this.addAbility(new EntersBattlefieldTriggeredAbility( this.addAbility(new EntersBattlefieldTriggeredAbility(
new DrawCardSourceControllerEffect(ManacostVariableValue.instance) new DrawCardSourceControllerEffect(ManacostVariableValue.ETB)
)); ));
// Whenever you cast a blue spell, tap target nonland permanent an opponent controls. // Whenever you cast a blue spell, tap target nonland permanent an opponent controls.

View file

@ -31,7 +31,7 @@ public final class GhiredsBelligerence extends CardImpl {
// Ghired's Belligerence deals X damage divided as you choose among any number of target creatures. Whenever a creature dealt damage this way dies this turn, populate. // Ghired's Belligerence deals X damage divided as you choose among any number of target creatures. Whenever a creature dealt damage this way dies this turn, populate.
this.getSpellAbility().addEffect(new GhiredsBelligerenceEffect()); this.getSpellAbility().addEffect(new GhiredsBelligerenceEffect());
this.getSpellAbility().addTarget(new TargetCreaturePermanentAmount(ManacostVariableValue.instance)); this.getSpellAbility().addTarget(new TargetCreaturePermanentAmount(ManacostVariableValue.REGULAR));
} }
private GhiredsBelligerence(final GhiredsBelligerence card) { private GhiredsBelligerence(final GhiredsBelligerence card) {
@ -46,7 +46,7 @@ public final class GhiredsBelligerence extends CardImpl {
class GhiredsBelligerenceEffect extends OneShotEffect { class GhiredsBelligerenceEffect extends OneShotEffect {
private static final DamageMultiEffect effect = new DamageMultiEffect(ManacostVariableValue.instance); private static final DamageMultiEffect effect = new DamageMultiEffect(ManacostVariableValue.REGULAR);
GhiredsBelligerenceEffect() { GhiredsBelligerenceEffect() {
super(Outcome.Benefit); super(Outcome.Benefit);

View file

@ -23,7 +23,7 @@ public final class GhituFire extends CardImpl {
public GhituFire(UUID ownerId, CardSetInfo setInfo) { public GhituFire(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{X}{R}"); super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{X}{R}");
Effect effect = new DamageTargetEffect(ManacostVariableValue.instance); Effect effect = new DamageTargetEffect(ManacostVariableValue.REGULAR);
// You may cast Ghitu Fire as though it had flash if you pay {2} more to cast it. // You may cast Ghitu Fire as though it had flash if you pay {2} more to cast it.
Ability ability = new PayMoreToCastAsThoughtItHadFlashAbility(this, new ManaCostsImpl("{2}")); Ability ability = new PayMoreToCastAsThoughtItHadFlashAbility(this, new ManaCostsImpl("{2}"));
ability.addEffect(effect); ability.addEffect(effect);

View file

@ -22,7 +22,6 @@ import mage.constants.SubLayer;
import mage.constants.Zone; import mage.constants.Zone;
import mage.filter.StaticFilters; import mage.filter.StaticFilters;
import mage.game.Game; import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.util.functions.CopyApplier; import mage.util.functions.CopyApplier;
/** /**
@ -57,7 +56,7 @@ class GigantoplasmCopyApplier extends CopyApplier {
@Override @Override
public boolean apply(Game game, MageObject blueprint, Ability source, UUID copyToObjectId) { public boolean apply(Game game, MageObject blueprint, Ability source, UUID copyToObjectId) {
DynamicValue variableMana = ManacostVariableValue.instance; DynamicValue variableMana = ManacostVariableValue.REGULAR;
Effect effect = new SetPowerToughnessSourceEffect(variableMana, Duration.WhileOnBattlefield, SubLayer.SetPT_7b); Effect effect = new SetPowerToughnessSourceEffect(variableMana, Duration.WhileOnBattlefield, SubLayer.SetPT_7b);
effect.setText("This creature has base power and toughness X/X"); effect.setText("This creature has base power and toughness X/X");
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, effect, new ManaCostsImpl("{X}")); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, effect, new ManaCostsImpl("{X}"));

View file

@ -35,7 +35,7 @@ public final class GoblinDynamo extends CardImpl {
this.addAbility(ability); this.addAbility(ability);
//{X}{R}, {T}, Sacrifice Goblin Dynamo: Goblin Dynamo deals X damage to any target. //{X}{R}, {T}, Sacrifice Goblin Dynamo: Goblin Dynamo deals X damage to any target.
ability = new SimpleActivatedAbility(Zone.BATTLEFIELD,new DamageTargetEffect(ManacostVariableValue.instance), new ManaCostsImpl("{X}{R}")); ability = new SimpleActivatedAbility(Zone.BATTLEFIELD,new DamageTargetEffect(ManacostVariableValue.REGULAR), new ManaCostsImpl("{X}{R}"));
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());
ability.addTarget(new TargetAnyTarget()); ability.addTarget(new TargetAnyTarget());
this.addAbility(ability); this.addAbility(ability);

View file

@ -19,7 +19,7 @@ public final class GoblinOffensive extends CardImpl {
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{X}{1}{R}{R}"); super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{X}{1}{R}{R}");
// create X 1/1 red Goblin creature tokens. // create X 1/1 red Goblin creature tokens.
this.getSpellAbility().addEffect(new CreateTokenEffect(new GoblinToken(), ManacostVariableValue.instance)); this.getSpellAbility().addEffect(new CreateTokenEffect(new GoblinToken(), ManacostVariableValue.REGULAR));
} }
private GoblinOffensive(final GoblinOffensive card) { private GoblinOffensive(final GoblinOffensive card) {

View file

@ -37,7 +37,7 @@ public final class GreelMindRaker extends CardImpl {
// {X}{B}, {tap}, Discard two cards: Target player discards X cards at random. // {X}{B}, {tap}, Discard two cards: Target player discards X cards at random.
Ability ability = new SimpleActivatedAbility(new DiscardTargetEffect( Ability ability = new SimpleActivatedAbility(new DiscardTargetEffect(
ManacostVariableValue.instance, true ManacostVariableValue.REGULAR, true
), new ManaCostsImpl("{X}{B}")); ), new ManaCostsImpl("{X}{B}"));
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());
ability.addCost(new DiscardTargetCost(new TargetCardInHand(2, filter))); ability.addCost(new DiscardTargetCost(new TargetCardInHand(2, filter)));

View file

@ -20,8 +20,8 @@ public final class HailOfArrows extends CardImpl {
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{X}{W}"); super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{X}{W}");
// Hail of Arrows deals X damage divided as you choose among any number of target attacking creatures. // Hail of Arrows deals X damage divided as you choose among any number of target attacking creatures.
this.getSpellAbility().addEffect(new DamageMultiEffect(ManacostVariableValue.instance)); this.getSpellAbility().addEffect(new DamageMultiEffect(ManacostVariableValue.REGULAR));
this.getSpellAbility().addTarget(new TargetCreaturePermanentAmount(ManacostVariableValue.instance, new FilterAttackingCreature())); this.getSpellAbility().addTarget(new TargetCreaturePermanentAmount(ManacostVariableValue.REGULAR, new FilterAttackingCreature()));
} }
private HailOfArrows(final HailOfArrows card) { private HailOfArrows(final HailOfArrows card) {

View file

@ -19,7 +19,7 @@ public final class HeatRay extends CardImpl {
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{X}{R}"); super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{X}{R}");
this.getSpellAbility().addEffect(new DamageTargetEffect(ManacostVariableValue.instance)); this.getSpellAbility().addEffect(new DamageTargetEffect(ManacostVariableValue.REGULAR));
this.getSpellAbility().addTarget(new TargetCreaturePermanent()); this.getSpellAbility().addTarget(new TargetCreaturePermanent());
} }

View file

@ -32,13 +32,13 @@ public final class HeavenEarth extends SplitCard {
// Falling // Falling
// Falling deals X damage to each creature with flying. // Falling deals X damage to each creature with flying.
getLeftHalfCard().getSpellAbility().addEffect(new DamageAllEffect(ManacostVariableValue.instance, filterFlying)); getLeftHalfCard().getSpellAbility().addEffect(new DamageAllEffect(ManacostVariableValue.REGULAR, filterFlying));
// to // to
// Earth // Earth
// Earth deals X damage to each creature without flying. // Earth deals X damage to each creature without flying.
getRightHalfCard().addAbility(new AftermathAbility().setRuleAtTheTop(true)); getRightHalfCard().addAbility(new AftermathAbility().setRuleAtTheTop(true));
getRightHalfCard().getSpellAbility().addEffect(new DamageAllEffect(ManacostVariableValue.instance, filterWithouFlying)); getRightHalfCard().getSpellAbility().addEffect(new DamageAllEffect(ManacostVariableValue.REGULAR, filterWithouFlying));
} }
private HeavenEarth(final HeavenEarth card) { private HeavenEarth(final HeavenEarth card) {

View file

@ -23,7 +23,7 @@ import java.util.UUID;
*/ */
public final class HeliodsIntervention extends CardImpl { public final class HeliodsIntervention extends CardImpl {
private static final DynamicValue xValue = new MultipliedValue(ManacostVariableValue.instance, 2); private static final DynamicValue xValue = new MultipliedValue(ManacostVariableValue.REGULAR, 2);
public HeliodsIntervention(UUID ownerId, CardSetInfo setInfo) { public HeliodsIntervention(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{X}{W}{W}"); super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{X}{W}{W}");

View file

@ -34,7 +34,7 @@ public final class HelixPinnacle extends CardImpl {
// {X}: Put X tower counters on Helix Pinnacle. // {X}: Put X tower counters on Helix Pinnacle.
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD,
new AddCountersSourceEffect(CounterType.TOWER.createInstance(), ManacostVariableValue.instance, true), new AddCountersSourceEffect(CounterType.TOWER.createInstance(), ManacostVariableValue.REGULAR, true),
new ManaCostsImpl("{X}"))); new ManaCostsImpl("{X}")));
// At the beginning of your upkeep, if there are 100 or more tower counters on Helix Pinnacle, you win the game. // At the beginning of your upkeep, if there are 100 or more tower counters on Helix Pinnacle, you win the game.

View file

@ -69,7 +69,7 @@ class HelmOfObedienceEffect extends OneShotEffect {
public boolean apply(Game game, Ability source) { public boolean apply(Game game, Ability source) {
Player controller = game.getPlayer(source.getControllerId()); Player controller = game.getPlayer(source.getControllerId());
Player targetOpponent = game.getPlayer(source.getFirstTarget()); Player targetOpponent = game.getPlayer(source.getFirstTarget());
int max = ManacostVariableValue.instance.calculate(game, source, this); int max = ManacostVariableValue.REGULAR.calculate(game, source, this);
if (targetOpponent == null || controller == null || max < 1) { if (targetOpponent == null || controller == null || max < 1) {
return false; return false;
} }

View file

@ -23,7 +23,7 @@ public final class HowlFromBeyond extends CardImpl {
// Target creature gets +X/+0 until end of turn. // Target creature gets +X/+0 until end of turn.
this.getSpellAbility().addEffect(new BoostTargetEffect(ManacostVariableValue.instance, StaticValue.get(0), Duration.EndOfTurn)); this.getSpellAbility().addEffect(new BoostTargetEffect(ManacostVariableValue.REGULAR, StaticValue.get(0), Duration.EndOfTurn));
this.getSpellAbility().addTarget(new TargetCreaturePermanent()); this.getSpellAbility().addTarget(new TargetCreaturePermanent());
} }

View file

@ -33,10 +33,10 @@ public final class HuntToExtinction extends CardImpl {
this.getSpellAbility().addTarget(new TargetOpponentsCreaturePermanent(0, 1)); this.getSpellAbility().addTarget(new TargetOpponentsCreaturePermanent(0, 1));
// Hunt to Extinction deals X damage to each creature. // Hunt to Extinction deals X damage to each creature.
this.getSpellAbility().addEffect(new DamageAllEffect(ManacostVariableValue.instance, new FilterCreaturePermanent())); this.getSpellAbility().addEffect(new DamageAllEffect(ManacostVariableValue.REGULAR, new FilterCreaturePermanent()));
// Hunt to Exctinction deals an additional X damage to each creature with a bounty counter on it. // Hunt to Exctinction deals an additional X damage to each creature with a bounty counter on it.
Effect effect = new DamageAllEffect(ManacostVariableValue.instance, new FilterCreaturePermanent(filter)); Effect effect = new DamageAllEffect(ManacostVariableValue.REGULAR, new FilterCreaturePermanent(filter));
effect.setText("Hunt to Exctinction deals an additional X damage to each creature with a bounty counter on it"); effect.setText("Hunt to Exctinction deals an additional X damage to each creature with a bounty counter on it");
this.getSpellAbility().addEffect(effect); this.getSpellAbility().addEffect(effect);

View file

@ -28,7 +28,7 @@ public final class Hurricane extends CardImpl {
// Hurricane deals X damage to each creature with flying and each player. // Hurricane deals X damage to each creature with flying and each player.
this.getSpellAbility().addEffect(new DamageEverythingEffect(ManacostVariableValue.instance, filter)); this.getSpellAbility().addEffect(new DamageEverythingEffect(ManacostVariableValue.REGULAR, filter));
} }
private Hurricane(final Hurricane card) { private Hurricane(final Hurricane card) {

View file

@ -28,14 +28,14 @@ public final class Illuminate extends CardImpl {
kickerAbility.addKickerCost("{3}{U}"); kickerAbility.addKickerCost("{3}{U}");
this.addAbility(kickerAbility); this.addAbility(kickerAbility);
// Illuminate deals X damage to target creature. If Illuminate was kicked with its {2}{R} kicker, it deals X damage to that creature's controller. If Illuminate was kicked with its {3}{U} kicker, you draw X cards. // Illuminate deals X damage to target creature. If Illuminate was kicked with its {2}{R} kicker, it deals X damage to that creature's controller. If Illuminate was kicked with its {3}{U} kicker, you draw X cards.
this.getSpellAbility().addEffect(new DamageTargetEffect(ManacostVariableValue.instance)); this.getSpellAbility().addEffect(new DamageTargetEffect(ManacostVariableValue.REGULAR));
this.getSpellAbility().addTarget(new TargetCreaturePermanent()); this.getSpellAbility().addTarget(new TargetCreaturePermanent());
this.getSpellAbility().addEffect(new ConditionalOneShotEffect( this.getSpellAbility().addEffect(new ConditionalOneShotEffect(
new DamageTargetControllerEffect(ManacostVariableValue.instance), new DamageTargetControllerEffect(ManacostVariableValue.REGULAR),
new KickedCostCondition("{2}{R}"), new KickedCostCondition("{2}{R}"),
"if this spell was kicked with its {2}{R} kicker, it deals X damage to that creature's controller.")); "if this spell was kicked with its {2}{R} kicker, it deals X damage to that creature's controller."));
this.getSpellAbility().addEffect(new ConditionalOneShotEffect( this.getSpellAbility().addEffect(new ConditionalOneShotEffect(
new DrawCardSourceControllerEffect(ManacostVariableValue.instance), new DrawCardSourceControllerEffect(ManacostVariableValue.REGULAR),
new KickedCostCondition("{3}{U}"), new KickedCostCondition("{3}{U}"),
" if this spell was kicked with its {3}{U} kicker, you draw X cards.")); " if this spell was kicked with its {3}{U} kicker, you draw X cards."));

View file

@ -21,9 +21,9 @@ public final class InvokeTheFiremind extends CardImpl {
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{X}{U}{U}{R}"); super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{X}{U}{U}{R}");
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(ManacostVariableValue.instance)); this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(ManacostVariableValue.REGULAR));
Mode mode = new Mode(); Mode mode = new Mode();
mode.addEffect(new DamageTargetEffect(ManacostVariableValue.instance)); mode.addEffect(new DamageTargetEffect(ManacostVariableValue.REGULAR));
mode.addTarget(new TargetAnyTarget()); mode.addTarget(new TargetAnyTarget());
this.getSpellAbility().addMode(mode); this.getSpellAbility().addMode(mode);
} }

View file

@ -25,7 +25,7 @@ public final class JayasImmolatingInferno extends CardImpl {
this.addAbility(new LegendarySpellAbility()); this.addAbility(new LegendarySpellAbility());
// Jaya's Immolating Inferno deals X damage to each of up to three targets. // Jaya's Immolating Inferno deals X damage to each of up to three targets.
Effect effect = new DamageTargetEffect(ManacostVariableValue.instance); Effect effect = new DamageTargetEffect(ManacostVariableValue.REGULAR);
effect.setText("{this} deals X damage to each of up to three targets"); effect.setText("{this} deals X damage to each of up to three targets");
this.getSpellAbility().addEffect(effect); this.getSpellAbility().addEffect(effect);
this.getSpellAbility().addTarget(new TargetAnyTarget(1, 3)); this.getSpellAbility().addTarget(new TargetAnyTarget(1, 3));

View file

@ -44,13 +44,13 @@ public final class JiwariTheEarthAflame extends CardImpl {
this.toughness = new MageInt(3); this.toughness = new MageInt(3);
// {X}{R}, {tap}: Jiwari, the Earth Aflame deals X damage to target creature without flying. // {X}{R}, {tap}: Jiwari, the Earth Aflame deals X damage to target creature without flying.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(ManacostVariableValue.instance), new ManaCostsImpl("{X}{R}")); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(ManacostVariableValue.REGULAR), new ManaCostsImpl("{X}{R}"));
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());
ability.addTarget(new TargetCreaturePermanent(filter)); ability.addTarget(new TargetCreaturePermanent(filter));
this.addAbility(ability); this.addAbility(ability);
// Channel - {X}{R}{R}{R}, Discard Jiwari: Jiwari deals X damage to each creature without flying. // Channel - {X}{R}{R}{R}, Discard Jiwari: Jiwari deals X damage to each creature without flying.
this.addAbility(new ChannelAbility("{X}{R}{R}{R}", new DamageAllEffect(ManacostVariableValue.instance, filter))); this.addAbility(new ChannelAbility("{X}{R}{R}{R}", new DamageAllEffect(ManacostVariableValue.REGULAR, filter)));
} }
private JiwariTheEarthAflame(final JiwariTheEarthAflame card) { private JiwariTheEarthAflame(final JiwariTheEarthAflame card) {

View file

@ -34,7 +34,7 @@ public final class KaerveksTorch extends CardImpl {
// As long as Kaervek's Torch is on the stack, spells that target it cost {2} more to cast. // As long as Kaervek's Torch is on the stack, spells that target it cost {2} more to cast.
this.addAbility(new SimpleStaticAbility(Zone.STACK, new KaerveksTorchCostIncreaseEffect())); this.addAbility(new SimpleStaticAbility(Zone.STACK, new KaerveksTorchCostIncreaseEffect()));
// Kaervek's Torch deals X damage to any target. // Kaervek's Torch deals X damage to any target.
this.getSpellAbility().addEffect(new DamageTargetEffect(ManacostVariableValue.instance)); this.getSpellAbility().addEffect(new DamageTargetEffect(ManacostVariableValue.REGULAR));
this.getSpellAbility().addTarget(new TargetAnyTarget()); this.getSpellAbility().addTarget(new TargetAnyTarget());
} }

View file

@ -34,7 +34,7 @@ public final class KessigWolfRun extends CardImpl {
TrampleAbility.getInstance(), Duration.EndOfTurn TrampleAbility.getInstance(), Duration.EndOfTurn
).setText("Target creature gets +X/+0"), new ManaCostsImpl("{X}{R}{G}")); ).setText("Target creature gets +X/+0"), new ManaCostsImpl("{X}{R}{G}"));
ability.addEffect(new BoostTargetEffect( ability.addEffect(new BoostTargetEffect(
ManacostVariableValue.instance, StaticValue.get(0), Duration.EndOfTurn ManacostVariableValue.REGULAR, StaticValue.get(0), Duration.EndOfTurn
).setText("and gains trample until end of turn")); ).setText("and gains trample until end of turn"));
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());
ability.addTarget(new TargetCreaturePermanent()); ability.addTarget(new TargetCreaturePermanent());

View file

@ -61,7 +61,7 @@ class KillingWaveEffect extends OneShotEffect {
return false; return false;
} }
int amount = (ManacostVariableValue.instance).calculate(game, source, this); int amount = (ManacostVariableValue.REGULAR).calculate(game, source, this);
if (amount > 0) { if (amount > 0) {
List<Permanent> sacrifices = new LinkedList<>(); List<Permanent> sacrifices = new LinkedList<>();
Map<UUID, Integer> lifePaidAmounts = new HashMap<>(); Map<UUID, Integer> lifePaidAmounts = new HashMap<>();

View file

@ -32,7 +32,7 @@ public final class KnollspineInvocation extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{R}{R}"); super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{R}{R}");
// {X}, Discard a card with converted mana cost X: Knollspine Invocation deals X damage to any target. // {X}, Discard a card with converted mana cost X: Knollspine Invocation deals X damage to any target.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(ManacostVariableValue.instance, true), new ManaCostsImpl<>("{X}")); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(ManacostVariableValue.REGULAR, true), new ManaCostsImpl<>("{X}"));
ability.addCost(new DiscardTargetCost(new TargetCardInHand(filter))); ability.addCost(new DiscardTargetCost(new TargetCardInHand(filter)));
ability.addTarget(new TargetAnyTarget()); ability.addTarget(new TargetAnyTarget());
ability.setCostAdjuster(KnollspineInvocationAdjuster.instance); ability.setCostAdjuster(KnollspineInvocationAdjuster.instance);

View file

@ -35,7 +35,7 @@ public final class LatullaKeldonOverseer extends CardImpl {
this.toughness = new MageInt(3); this.toughness = new MageInt(3);
// {X}{R}, {tap}, Discard two cards: Latulla, Keldon Overseer deals X damage to any target. // {X}{R}, {tap}, Discard two cards: Latulla, Keldon Overseer deals X damage to any target.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(ManacostVariableValue.instance), new ManaCostsImpl("{X}{R}")); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(ManacostVariableValue.REGULAR), new ManaCostsImpl("{X}{R}"));
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());
ability.addCost(new DiscardTargetCost(new TargetCardInHand(2, 2, new FilterCard("two cards")))); ability.addCost(new DiscardTargetCost(new TargetCardInHand(2, 2, new FilterCard("two cards"))));
ability.addTarget(new TargetAnyTarget()); ability.addTarget(new TargetAnyTarget());

View file

@ -60,7 +60,7 @@ class LavaclawReachesToken extends TokenImpl {
color.setBlack(true); color.setBlack(true);
power = new MageInt(2); power = new MageInt(2);
toughness = new MageInt(2); toughness = new MageInt(2);
addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(ManacostVariableValue.instance, StaticValue.get(0), Duration.EndOfTurn), new ManaCostsImpl("{X}"))); addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(ManacostVariableValue.REGULAR, StaticValue.get(0), Duration.EndOfTurn), new ManaCostsImpl("{X}")));
} }
public LavaclawReachesToken(final LavaclawReachesToken token) { public LavaclawReachesToken(final LavaclawReachesToken token) {
super(token); super(token);

View file

@ -27,7 +27,7 @@ public final class Lavalanche extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{X}{B}{R}{G}"); super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{X}{B}{R}{G}");
// Lavalanche deals X damage to target player and each creature they control. // Lavalanche deals X damage to target player and each creature they control.
this.getSpellAbility().addEffect(new LavalancheEffect(ManacostVariableValue.instance)); this.getSpellAbility().addEffect(new LavalancheEffect(ManacostVariableValue.REGULAR));
this.getSpellAbility().addTarget(new TargetPlayerOrPlaneswalker()); this.getSpellAbility().addTarget(new TargetPlayerOrPlaneswalker());
} }

View file

@ -37,7 +37,7 @@ public final class LifecraftAwakening extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{X}{G}"); super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{X}{G}");
// Put X +1/+1 counters on target artifact you control. If it isn't a creature or Vehicle, it becomes a 0/0 Construct artifact creature. // Put X +1/+1 counters on target artifact you control. If it isn't a creature or Vehicle, it becomes a 0/0 Construct artifact creature.
ManacostVariableValue manaX = ManacostVariableValue.instance; ManacostVariableValue manaX = ManacostVariableValue.REGULAR;
getSpellAbility().addEffect(new AddCountersTargetEffect(CounterType.P1P1.createInstance(), manaX)); getSpellAbility().addEffect(new AddCountersTargetEffect(CounterType.P1P1.createInstance(), manaX));
getSpellAbility().addTarget(new TargetArtifactPermanent(filter)); getSpellAbility().addTarget(new TargetArtifactPermanent(filter));
getSpellAbility().addEffect(new LifecraftAwakeningEffect()); getSpellAbility().addEffect(new LifecraftAwakeningEffect());

Some files were not shown because too many files have changed in this diff Show more