all text and no fix makes elk a dull boy

This commit is contained in:
Evan Kranzler 2021-04-29 09:32:22 -04:00
parent af59cea62c
commit 0297a00156
35 changed files with 106 additions and 92 deletions

View file

@ -29,7 +29,7 @@ public final class AetherTide extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{X}{U}");
// As an additional cost to cast Aether Tide, discard X creature cards.
Ability ability = new SimpleStaticAbility(Zone.ALL, new InfoEffect("As an additional cost to cast {this}, discard X creature cards"));
Ability ability = new SimpleStaticAbility(Zone.ALL, new InfoEffect("As an additional cost to cast this spell, discard X creature cards"));
ability.setRuleAtTheTop(true);
this.addAbility(ability);

View file

@ -1,7 +1,5 @@
package mage.cards.a;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.common.SimpleActivatedAbility;
@ -14,38 +12,41 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.SubType;
import mage.constants.Zone;
import mage.filter.FilterCard;
import mage.filter.predicate.mageobject.NamePredicate;
import mage.target.common.TargetCardInLibrary;
import java.util.UUID;
/**
*
* @author fireshoes
*/
public final class Avarax extends CardImpl {
private static final FilterCard filter = new FilterCard("card named Avarax");
private static final FilterCard filter = new FilterCard("a card named Avarax");
static {
filter.add(new NamePredicate("Avarax"));
}
public Avarax(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{R}{R}");
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{R}{R}");
this.subtype.add(SubType.BEAST);
this.power = new MageInt(3);
this.toughness = new MageInt(3);
// Haste
this.addAbility(HasteAbility.getInstance());
// When Avarax enters the battlefield, you may search your library for a card named Avarax, reveal it, and put it into your hand. If you do, shuffle your library.
TargetCardInLibrary target = new TargetCardInLibrary(0, 1, filter);
this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInHandEffect(target, true, true), true));
this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInHandEffect(
new TargetCardInLibrary(1, filter), true, true
), true));
// {1}{R}: Avarax gets +1/+0 until end of turn.
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(1, 0, Duration.EndOfTurn), new ManaCostsImpl("{1}{R}")));
this.addAbility(new SimpleActivatedAbility(
new BoostSourceEffect(1, 0, Duration.EndOfTurn), new ManaCostsImpl<>("{1}{R}")
));
}
private Avarax(final Avarax card) {

View file

@ -23,7 +23,7 @@ public final class BrilliantSpectrum extends CardImpl {
// <i>Converge</i> &mdash; Draw X cards, where X is the number of colors of mana spent to cast Brilliant Spectrum. Then discard two cards.
this.getSpellAbility().setAbilityWord(AbilityWord.CONVERGE);
Effect effect = new DrawCardSourceControllerEffect(ColorsOfManaSpentToCastCount.getInstance());
effect.setText("Draw X cards, where X is the number of colors of mana spent to cast {this}");
effect.setText("Draw X cards, where X is the number of colors of mana spent to cast this spell");
this.getSpellAbility().addEffect(effect);
this.getSpellAbility().addEffect(new DiscardControllerEffect(2));
}

View file

@ -48,7 +48,7 @@ class BringToLightEffect extends OneShotEffect {
public BringToLightEffect() {
super(Outcome.PlayForFree);
this.staticText = "<i>Converge</i> &mdash; Search your library for a creature, instant, or sorcery card with mana "
+ "value less than or equal to the number of colors of mana spent to cast {this}, exile that card, "
+ "value less than or equal to the number of colors of mana spent to cast this spell, exile that card, "
+ "then shuffle. You may cast that card without paying its mana cost";
}

View file

@ -42,7 +42,7 @@ class BuriedAliveEffect extends SearchEffect {
public BuriedAliveEffect() {
super(new TargetCardInLibrary(0, 3, StaticFilters.FILTER_CARD_CREATURE), Outcome.Detriment);
staticText = "Search your library for up to three creature cards and put them into your graveyard. Then shuffle";
staticText = "search your library for up to three creature cards, put them into your graveyard, then shuffle";
}
public BuriedAliveEffect(final BuriedAliveEffect effect) {

View file

@ -56,7 +56,7 @@ class ConfiscationCoupEffect extends OneShotEffect {
public ConfiscationCoupEffect() {
super(Outcome.GainControl);
this.staticText = "Choose target creature or artifact. You get {E}{E}{E}{E}, then you may pay an amount of {E} equal to that permanent's mana value. If you do, gain control of it";
this.staticText = "Choose target artifact or creature. You get {E}{E}{E}{E}, then you may pay an amount of {E} equal to that permanent's mana value. If you do, gain control of it";
}
public ConfiscationCoupEffect(final ConfiscationCoupEffect effect) {

View file

@ -1,11 +1,9 @@
package mage.cards.d;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.ActivateAsSorceryActivatedAbility;
import mage.abilities.costs.common.SacrificeTargetCost;
import mage.abilities.effects.common.ReturnToHandSourceEffect;
import mage.abilities.effects.common.ReturnSourceFromGraveyardToHandEffect;
import mage.abilities.keyword.VigilanceAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
@ -13,11 +11,11 @@ import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Zone;
import mage.filter.common.FilterControlledPermanent;
import mage.filter.predicate.Predicates;
import mage.target.common.TargetControlledPermanent;
import java.util.UUID;
/**
*
* @author fireshoes
*/
public final class DeathlessBehemoth extends CardImpl {
@ -25,13 +23,12 @@ public final class DeathlessBehemoth extends CardImpl {
private static final FilterControlledPermanent filter = new FilterControlledPermanent("Eldrazi Scions");
static {
filter.add(Predicates.and(
SubType.ELDRAZI.getPredicate(),
SubType.SCION.getPredicate()));
filter.add(SubType.ELDRAZI.getPredicate());
filter.add(SubType.SCION.getPredicate());
}
public DeathlessBehemoth(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{6}");
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{6}");
this.subtype.add(SubType.ELDRAZI);
this.power = new MageInt(6);
this.toughness = new MageInt(6);
@ -40,8 +37,10 @@ public final class DeathlessBehemoth extends CardImpl {
this.addAbility(VigilanceAbility.getInstance());
// Sacrifice two Eldrazi Scions: Return Deathless Behemoth from your graveyard to your hand. Activate this ability only any time you could cast a sorcery.
this.addAbility(new ActivateAsSorceryActivatedAbility(Zone.GRAVEYARD,
new ReturnToHandSourceEffect(), new SacrificeTargetCost(new TargetControlledPermanent(2, 2, filter, true))));
this.addAbility(new ActivateAsSorceryActivatedAbility(
Zone.GRAVEYARD, new ReturnSourceFromGraveyardToHandEffect(),
new SacrificeTargetCost(new TargetControlledPermanent(2, filter))
));
}
private DeathlessBehemoth(final DeathlessBehemoth card) {

View file

@ -18,7 +18,7 @@ import mage.filter.predicate.mageobject.ManaValuePredicate;
*/
public final class EmrakulsInfluence extends CardImpl {
private static final FilterSpell filterSpell = new FilterSpell("Eldrazi creature spell with mana value 7 or greater");
private static final FilterSpell filterSpell = new FilterSpell("an Eldrazi creature spell with mana value 7 or greater");
static {
filterSpell.add(SubType.ELDRAZI.getPredicate());

View file

@ -42,7 +42,7 @@ class SearchLibraryPutInGraveyard extends SearchEffect {
public SearchLibraryPutInGraveyard() {
super(new TargetCardInLibrary(new FilterCard()), Outcome.Neutral);
staticText = "Search your library for a card and put that card into your graveyard, then shuffle";
staticText = "search your library for a card, put that card into your graveyard, then shuffle";
}
public SearchLibraryPutInGraveyard(final SearchLibraryPutInGraveyard effect) {

View file

@ -48,7 +48,7 @@ class ExertInfluenceEffect extends OneShotEffect {
public ExertInfluenceEffect() {
super(Outcome.GainControl);
this.staticText = "Gain control of target creature if its power is less than or equal to the number of colors spent to cast {this}";
this.staticText = "Gain control of target creature if its power is less than or equal to the number of colors spent to cast this spell";
}
public ExertInfluenceEffect(final ExertInfluenceEffect effect) {

View file

@ -48,7 +48,7 @@ class GaddockTeegReplacementEffect4 extends ContinuousRuleModifyingEffectImpl {
public GaddockTeegReplacementEffect4() {
super(Duration.WhileOnBattlefield, Outcome.Detriment);
staticText = "Noncreature spells with mana value 4 or greater can't be cast. Noncreature spells with {X} in their mana costs can't be cast";
staticText = "Noncreature spells with mana value 4 or greater can't be cast";
}
public GaddockTeegReplacementEffect4(final GaddockTeegReplacementEffect4 effect) {

View file

@ -16,7 +16,7 @@ import mage.filter.predicate.mageobject.ColorPredicate;
*/
public final class GreenSunsZenith extends CardImpl {
private static final FilterCard filter = new FilterCard("green creature");
private static final FilterCard filter = new FilterCard("green creature card");
static {
filter.add(new ColorPredicate(ObjectColor.GREEN));

View file

@ -27,7 +27,7 @@ public final class InfuseWithTheElements extends CardImpl {
// <i>Converge</i> &mdash; Put X +1/+1 counters on target creature, where X is the number of colors of mana spent to cast Infuse with the Elements.
this.getSpellAbility().setAbilityWord(AbilityWord.CONVERGE);
Effect effect = new AddCountersTargetEffect(CounterType.P1P1.createInstance(0), ColorsOfManaSpentToCastCount.getInstance());
effect.setText("Put X +1/+1 counters on target creature, where X is the number of colors of mana spent to cast {this}");
effect.setText("Put X +1/+1 counters on target creature, where X is the number of colors of mana spent to cast this spell");
this.getSpellAbility().addEffect(effect);
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
// That creature gains trample until end of turn.

View file

@ -72,7 +72,7 @@ class JelevaNephaliasScourgeEffect extends OneShotEffect {
public JelevaNephaliasScourgeEffect() {
super(Outcome.Benefit);
this.staticText = "each player exiles the top X cards of their library, "
+ "where X is the amount of mana spent to cast {this}";
+ "where X is the amount of mana spent to cast this spell";
}
public JelevaNephaliasScourgeEffect(final JelevaNephaliasScourgeEffect effect) {

View file

@ -8,7 +8,7 @@ import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.DiscardCardCost;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.dynamicvalue.common.DiscardCostCardConvertedMana;
import mage.abilities.dynamicvalue.common.DiscardCostCardManaValue;
import mage.abilities.effects.common.DamageTargetEffect;
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.cards.CardImpl;
@ -39,7 +39,7 @@ public final class MercurialChemister extends CardImpl {
this.addAbility(ability);
// {R}, {T}, Discard a card: Mercurial Chemister deals damage to target creature equal to the discarded card's converted mana cost.
ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(DiscardCostCardConvertedMana.instance), new ManaCostsImpl("{R}"));
ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(DiscardCostCardManaValue.instance), new ManaCostsImpl("{R}"));
ability.addTarget(new TargetCreaturePermanent());
ability.addCost(new TapSourceCost());
ability.addCost(new DiscardCardCost());

View file

@ -1,7 +1,5 @@
package mage.cards.m;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.SpellAbility;
@ -12,28 +10,27 @@ import mage.abilities.effects.common.ReturnSourceFromGraveyardToHandEffect;
import mage.abilities.effects.common.cost.CostModificationEffectImpl;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.CostModificationType;
import mage.constants.Duration;
import mage.constants.Outcome;
import mage.constants.Zone;
import mage.constants.*;
import mage.filter.FilterPermanent;
import mage.filter.common.FilterControlledArtifactPermanent;
import mage.filter.common.FilterControlledPermanent;
import mage.filter.predicate.Predicates;
import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.target.common.TargetControlledPermanent;
import mage.util.CardUtil;
import java.util.UUID;
/**
*
* @author emerald000
*/
public final class MetalworkColossus extends CardImpl {
private static final FilterControlledPermanent filter = new FilterControlledArtifactPermanent("artifacts");
public MetalworkColossus(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT,CardType.CREATURE},"{11}");
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{11}");
this.subtype.add(SubType.CONSTRUCT);
this.power = new MageInt(10);
this.toughness = new MageInt(10);
@ -42,7 +39,7 @@ public final class MetalworkColossus extends CardImpl {
this.addAbility(new SimpleStaticAbility(Zone.ALL, new MetalworkColossusCostReductionEffect()));
// Sacrifice two artifacts: Return Metalwork Colossus from your graveyard to your hand.
this.addAbility(new SimpleActivatedAbility(Zone.GRAVEYARD, new ReturnSourceFromGraveyardToHandEffect(), new SacrificeTargetCost(new TargetControlledPermanent(2, 2, new FilterControlledArtifactPermanent("two artifacts"), true))));
this.addAbility(new SimpleActivatedAbility(Zone.GRAVEYARD, new ReturnSourceFromGraveyardToHandEffect(), new SacrificeTargetCost(new TargetControlledPermanent(2, filter))));
}
private MetalworkColossus(final MetalworkColossus card) {
@ -58,6 +55,7 @@ public final class MetalworkColossus extends CardImpl {
class MetalworkColossusCostReductionEffect extends CostModificationEffectImpl {
private static final FilterPermanent filter = new FilterControlledArtifactPermanent("noncreature artifacts you control");
static {
filter.add(Predicates.not(CardType.CREATURE.getPredicate()));
}

View file

@ -27,7 +27,7 @@ public final class MyrSuperion extends CardImpl {
this.toughness = new MageInt(6);
// Spend only mana produced by creatures to cast Myr Superion.
this.addAbility(new SimpleStaticAbility(Zone.ALL, new InfoEffect("Spend only mana produced by creatures to cast {this}")));
this.addAbility(new SimpleStaticAbility(Zone.ALL, new InfoEffect("Spend only mana produced by creatures to cast this spell")));
this.getSpellAbility().getManaCostsToPay().setSourceFilter(StaticFilters.FILTER_PERMANENT_CREATURES);
this.getSpellAbility().getManaCosts().setSourceFilter(StaticFilters.FILTER_PERMANENT_CREATURES);
}

View file

@ -6,7 +6,7 @@ import mage.abilities.costs.Cost;
import mage.abilities.costs.VariableCost;
import mage.abilities.costs.VariableCostImpl;
import mage.abilities.costs.common.DiscardTargetCost;
import mage.abilities.dynamicvalue.common.DiscardCostCardConvertedMana;
import mage.abilities.dynamicvalue.common.DiscardCostCardManaValue;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.DamageTargetEffect;
import mage.cards.CardImpl;
@ -34,7 +34,7 @@ public final class NahirisWrath extends CardImpl {
this.getSpellAbility().addCost(new NahirisWrathAdditionalCost());
// Nahiri's Wrath deals damage equal to the total converted mana cost of the discarded cards to each of up to X target creatures and/or planeswalkers.
Effect effect = new DamageTargetEffect(DiscardCostCardConvertedMana.instance);
Effect effect = new DamageTargetEffect(DiscardCostCardManaValue.instance);
effect.setText("{this} deals damage equal to the total mana value of the discarded cards to each of up to X target creatures and/or planeswalkers");
this.getSpellAbility().addEffect(effect);
this.getSpellAbility().setTargetAdjuster(NahirisWrathAdjuster.instance);
@ -73,7 +73,7 @@ class NahirisWrathAdditionalCost extends VariableCostImpl {
NahirisWrathAdditionalCost() {
super("cards to discard");
this.text = "as an additional cost to cast this spell, discard X cards";
this.text = "discard X cards";
}
NahirisWrathAdditionalCost(final NahirisWrathAdditionalCost cost) {

View file

@ -1,11 +1,9 @@
package mage.cards.p;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.BeginningOfUpkeepTriggeredAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.condition.Condition;
import mage.abilities.condition.common.ControlsPermanentGreatestCMCCondition;
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
@ -14,16 +12,20 @@ import mage.abilities.keyword.HexproofAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.*;
import mage.filter.common.FilterArtifactPermanent;
import mage.filter.StaticFilters;
import java.util.UUID;
/**
*
* @author LevelX2
*/
public final class PadeemConsulOfInnovation extends CardImpl {
private static final Condition condition
= new ControlsPermanentGreatestCMCCondition(StaticFilters.FILTER_PERMANENT_ARTIFACT);
public PadeemConsulOfInnovation(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{U}");
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{U}");
addSuperType(SuperType.LEGENDARY);
this.subtype.add(SubType.VEDALKEN);
this.subtype.add(SubType.ARTIFICER);
@ -31,15 +33,18 @@ public final class PadeemConsulOfInnovation extends CardImpl {
this.toughness = new MageInt(4);
// Artifacts you control have hexproof.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD,
new GainAbilityControlledEffect(HexproofAbility.getInstance(), Duration.WhileOnBattlefield, new FilterArtifactPermanent(), false)));
this.addAbility(new SimpleStaticAbility(new GainAbilityControlledEffect(
HexproofAbility.getInstance(), Duration.WhileOnBattlefield,
StaticFilters.FILTER_CONTROLLED_PERMANENT_ARTIFACTS, false
)));
// At the beginning of your upkeep, if you control the artifact with the highest converted mana cost or tied for the highest converted mana cost, draw a card.
Ability ability = new ConditionalInterveningIfTriggeredAbility(new BeginningOfUpkeepTriggeredAbility(new DrawCardSourceControllerEffect(1), TargetController.YOU, false),
new ControlsPermanentGreatestCMCCondition(new FilterArtifactPermanent()),
"At the beginning of your upkeep, if you control the artifact with the highest mana value or tied for the highest mana value, draw a card.");
this.addAbility(ability);
this.addAbility(new ConditionalInterveningIfTriggeredAbility(
new BeginningOfUpkeepTriggeredAbility(
new DrawCardSourceControllerEffect(1), TargetController.YOU, false
), condition, "At the beginning of your upkeep, if you control the artifact " +
"with the highest mana value or tied for the highest mana value, draw a card."
));
}
private PadeemConsulOfInnovation(final PadeemConsulOfInnovation card) {

View file

@ -6,7 +6,7 @@ import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.DiscardCardCost;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.dynamicvalue.common.DiscardCostCardConvertedMana;
import mage.abilities.dynamicvalue.common.DiscardCostCardManaValue;
import mage.abilities.effects.common.DamageTargetEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
@ -25,7 +25,7 @@ public final class Pyromancy extends CardImpl {
super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{2}{R}{R}");
// {3}, Discard a card at random: Pyromancy deals damage to any target equal to the converted mana cost of the discarded card.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(DiscardCostCardConvertedMana.instance), new ManaCostsImpl("{3}"));
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(DiscardCostCardManaValue.instance), new ManaCostsImpl("{3}"));
ability.addTarget(new TargetAnyTarget());
ability.addCost(new DiscardCardCost(true));
this.addAbility(ability);

View file

@ -34,7 +34,7 @@ public final class RoilmagesTrick extends CardImpl {
this.getSpellAbility().setAbilityWord(AbilityWord.CONVERGE);
this.getSpellAbility().addEffect(new BoostAllEffect(
new SignInversionDynamicValue(ColorsOfManaSpentToCastCount.getInstance()), StaticValue.get(-0), Duration.EndOfTurn, filter, false,
"Creatures your opponents control get -X/-0 until end of turn, where X is the number of colors of mana spent to cast {this}.<br>", true));
"Creatures your opponents control get -X/-0 until end of turn, where X is the number of colors of mana spent to cast this spell.<br>", true));
// Draw a card.
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1));

View file

@ -24,7 +24,7 @@ import mage.target.common.TargetCardInLibrary;
public final class SanctumOfUgin extends CardImpl {
private static final FilterCreatureCard filter = new FilterCreatureCard("colorless creature card");
private static final FilterSpell filterSpells = new FilterSpell("colorless spell with mana value 7 or greater");
private static final FilterSpell filterSpells = new FilterSpell("a colorless spell with mana value 7 or greater");
static {
filter.add(ColorlessPredicate.instance);

View file

@ -43,7 +43,7 @@ public final class ShardPhoenix extends CardImpl {
this.addAbility(FlyingAbility.getInstance());
// Sacrifice Shard Phoenix: Shard Phoenix deals 2 damage to each creature without flying.
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageAllEffect(2, filter), new SacrificeSourceCost()));
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageAllEffect(2, "it", filter), new SacrificeSourceCost()));
// {R}{R}{R}: Return Shard Phoenix from your graveyard to your hand. Activate this ability only during your upkeep.
this.addAbility(new ConditionalActivatedAbility(Zone.GRAVEYARD,

View file

@ -23,7 +23,7 @@ public final class UnifiedFront extends CardImpl {
// <i>Converge</i> &mdash; Create a 1/1 white Kor Ally creature token for each color of mana spent to cast Unified Front.
getSpellAbility().setAbilityWord(AbilityWord.CONVERGE);
Effect effect = new CreateTokenEffect(new KorAllyToken(), ColorsOfManaSpentToCastCount.getInstance());
effect.setText("Create a 1/1 white Kor Ally creature token for each color of mana spent to cast {this}");
effect.setText("Create a 1/1 white Kor Ally creature token for each color of mana spent to cast this spell");
getSpellAbility().addEffect(effect);
}

View file

@ -49,7 +49,7 @@ class VoidWinnowerCantCastEffect extends ContinuousRuleModifyingEffectImpl {
public VoidWinnowerCantCastEffect() {
super(Duration.WhileOnBattlefield, Outcome.Benefit);
staticText = "Your opponent can't cast spells with even mana values. <i>(Zero is even.)</i>";
staticText = "Your opponents can't cast spells with even mana values. <i>(Zero is even.)</i>";
}
public VoidWinnowerCantCastEffect(final VoidWinnowerCantCastEffect effect) {

View file

@ -6,7 +6,7 @@ import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.DiscardCardCost;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.dynamicvalue.common.DiscardCostCardConvertedMana;
import mage.abilities.dynamicvalue.common.DiscardCostCardManaValue;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.continuous.BoostSourceEffect;
import mage.cards.CardImpl;
@ -33,7 +33,7 @@ public final class VolrathTheFallen extends CardImpl {
// {1}{B}, Discard a creature card:
// Volrath the Fallen gets +X/+X until end of turn, where X is the discarded card's converted mana cost.
Effect effect = new BoostSourceEffect(DiscardCostCardConvertedMana.instance, DiscardCostCardConvertedMana.instance, Duration.EndOfTurn);
Effect effect = new BoostSourceEffect(DiscardCostCardManaValue.instance, DiscardCostCardManaValue.instance, Duration.EndOfTurn);
effect.setText("{this} gets +X/+X until end of turn, where X is the discarded card's mana value");
Ability ability = new SimpleActivatedAbility(

View file

@ -1,16 +1,15 @@
package mage.cards.w;
import java.util.UUID;
import mage.abilities.effects.common.search.SearchLibraryWithLessCMCPutInPlayEffect;
import mage.abilities.keyword.ImproviseAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.filter.common.FilterArtifactCard;
import mage.filter.StaticFilters;
import java.util.UUID;
/**
*
* @author fireshoes
*/
public final class WhirOfInvention extends CardImpl {
@ -19,10 +18,10 @@ public final class WhirOfInvention extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{X}{U}{U}{U}");
// Improvise <i>(Your artifacts can help cast this spell. Each artifact you tap after you're done activating mana abilities pays for {1}.)
addAbility(new ImproviseAbility());
this.addAbility(new ImproviseAbility());
// Search your library for an artifact card with converted mana cost X or less, put it onto the battlefield, then shuffle your library.
this.getSpellAbility().addEffect(new SearchLibraryWithLessCMCPutInPlayEffect(new FilterArtifactCard()));
this.getSpellAbility().addEffect(new SearchLibraryWithLessCMCPutInPlayEffect(StaticFilters.FILTER_CARD_ARTIFACT));
}
private WhirOfInvention(final WhirOfInvention card) {

View file

@ -241,6 +241,10 @@ public class VerifyCardDataTest {
return skipCheckLists.get(listName).contains(set);
}
private static boolean evergreenCheck(String s) {
return evergreenKeywords.contains(s) || s.startsWith("protection from") || s.startsWith("hexproof from");
}
private static <T> boolean eqSet(Collection<T> a, Collection<T> b) {
if (a == null || a.isEmpty()) {
return b == null || b.isEmpty();
@ -1493,7 +1497,7 @@ public class VerifyCardDataTest {
if (Arrays
.stream(s.split(", "))
.map(String::toLowerCase)
.allMatch(evergreenKeywords::contains)) {
.allMatch(VerifyCardDataTest::evergreenCheck)) {
String replacement = Arrays
.stream(s.split(", "))
.map(CardUtil::getTextWithFirstCharUpperCase)

View file

@ -37,9 +37,9 @@ public class CardsInControllerGraveyardCondition implements Condition {
@Override
public String toString() {
return "there are " + CardUtil.numberToText(value, "one") + " or more "
return CardUtil.numberToText(value, "one") + " or more "
+ (filter == null ? "cards" : filter.getMessage())
+ " in your graveyard";
+ " are in your graveyard";
}
}

View file

@ -70,7 +70,7 @@ public class ColorsOfManaSpentToCastCount implements DynamicValue {
@Override
public String getMessage() {
return "the number of colors of mana spent to cast {this}";
return "the number of colors of mana spent to cast this spell";
}
}

View file

@ -11,7 +11,7 @@ import mage.game.Game;
/**
* @author LevelX2
*/
public enum DiscardCostCardConvertedMana implements DynamicValue {
public enum DiscardCostCardManaValue implements DynamicValue {
instance;
@Override
@ -26,8 +26,8 @@ public enum DiscardCostCardConvertedMana implements DynamicValue {
}
@Override
public DiscardCostCardConvertedMana copy() {
return DiscardCostCardConvertedMana.instance;
public DiscardCostCardManaValue copy() {
return DiscardCostCardManaValue.instance;
}
@Override
@ -37,6 +37,6 @@ public enum DiscardCostCardConvertedMana implements DynamicValue {
@Override
public String getMessage() {
return "the discarded card's mana value";
return "the mana value of the discarded card";
}
}

View file

@ -152,9 +152,9 @@ public class DamageTargetEffect extends OneShotEffect {
String message = amount.getMessage();
sb.append(this.sourceName).append(" deals ");
if (message.isEmpty() || !message.equals("1")) {
sb.append(amount);
sb.append(amount).append(' ');
}
sb.append(" damage to ");
sb.append("damage to ");
if (!targetDescription.isEmpty()) {
sb.append(targetDescription);
} else {

View file

@ -9,6 +9,7 @@ import mage.game.permanent.Permanent;
import mage.players.Player;
import mage.target.Target;
import mage.target.TargetPermanent;
import mage.util.CardUtil;
import java.util.UUID;
@ -60,7 +61,7 @@ public class ExileTargetAndSearchGraveyardHandLibraryEffect extends SearchTarget
public String getText(Mode mode) {
StringBuilder sb = new StringBuilder();
sb.append("Exile target ").append(mode.getTargets().get(0).getTargetName()).append(". ");
sb.append(super.getText(mode));
sb.append(CardUtil.getTextWithFirstCharUpperCase(super.getText(mode)));
return sb.toString();
}
}

View file

@ -12,6 +12,7 @@ import mage.filter.predicate.mageobject.ManaValuePredicate;
import mage.game.Game;
import mage.players.Player;
import mage.target.common.TargetCardInLibrary;
import mage.util.CardUtil;
/**
*
@ -28,7 +29,7 @@ public class SearchLibraryWithLessCMCPutInPlayEffect extends OneShotEffect {
public SearchLibraryWithLessCMCPutInPlayEffect(FilterCard filter) {
super(Outcome.PutCreatureInPlay);
this.filter = filter;
staticText = "Search your library for a " + filter.getMessage() + " with mana value X or less, put it onto the battlefield, then shuffle";
staticText = "Search your library for " + CardUtil.addArticle(filter.getMessage()) + " with mana value X or less, put it onto the battlefield, then shuffle";
}
public SearchLibraryWithLessCMCPutInPlayEffect(final SearchLibraryWithLessCMCPutInPlayEffect effect) {

View file

@ -322,6 +322,12 @@ public final class StaticFilters {
FILTER_CONTROLLED_PERMANENT_ARTIFACT.setLockedFilter(true);
}
public static final FilterControlledPermanent FILTER_CONTROLLED_PERMANENT_ARTIFACTS = new FilterControlledArtifactPermanent("artifacts you control");
static {
FILTER_CONTROLLED_PERMANENT_ARTIFACTS.setLockedFilter(true);
}
public static final FilterControlledPermanent FILTER_CONTROLLED_PERMANENT_ARTIFACT_AN = new FilterControlledArtifactPermanent("an artifact");
static {