text fixes

This commit is contained in:
Evan Kranzler 2021-04-30 07:58:19 -04:00
parent b27f2f04c1
commit 8f9afcb617
79 changed files with 158 additions and 177 deletions

View file

@ -57,7 +57,7 @@ public final class AyliEternalPilgrim extends CardImpl {
new ExileTargetEffect(), new ExileTargetEffect(),
new ManaCostsImpl("{1}{W}{B}"), new ManaCostsImpl("{1}{W}{B}"),
new AyliEternalPilgrimCondition(), new AyliEternalPilgrimCondition(),
"{1}{W}{B}, Sacrifice another creature: Exile target nonland permanent. Activate only if you have at least 10 life more than your starting life total"); "{1}{W}{B}, Sacrifice another creature: Exile target nonland permanent. Activate only if you have at least 10 life more than your starting life total.");
ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent(StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE))); ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent(StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE)));
ability.addTarget(new TargetNonlandPermanent()); ability.addTarget(new TargetNonlandPermanent());
this.addAbility(ability); this.addAbility(ability);

View file

@ -25,7 +25,7 @@ import mage.target.common.TargetOpponent;
*/ */
public final class BafflingEnd extends CardImpl { public final class BafflingEnd extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with mana value 3 or less an opponent controls"); private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature an opponent controls with mana value 3 or less");
static { static {
filter.add(new ManaValuePredicate(ComparisonType.FEWER_THAN, 4)); filter.add(new ManaValuePredicate(ComparisonType.FEWER_THAN, 4));

View file

@ -32,7 +32,7 @@ public final class BaralsExpertise extends CardImpl {
getSpellAbility().addTarget(new TargetPermanent(0, 3, filter, false)); getSpellAbility().addTarget(new TargetPermanent(0, 3, filter, false));
// You may cast a card with converted mana cost 4 or less from your hand without paying its mana cost. // You may cast a card with converted mana cost 4 or less from your hand without paying its mana cost.
getSpellAbility().addEffect(new CastWithoutPayingManaCostEffect(4)); getSpellAbility().addEffect(new CastWithoutPayingManaCostEffect(4).concatBy("<br>"));
} }
private BaralsExpertise(final BaralsExpertise card) { private BaralsExpertise(final BaralsExpertise card) {

View file

@ -27,7 +27,7 @@ public final class BorderlandRanger extends CardImpl {
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
// When Borderland Ranger enters the battlefield, you may search your library for a basic land card, reveal it, and put it into your hand. If you do, shuffle your library. // When Borderland Ranger enters the battlefield, you may search your library for a basic land card, reveal it, and put it into your hand. If you do, shuffle your library.
this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInHandEffect(new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_LAND), true, false), true)); this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInHandEffect(new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_LAND), true, true), true));
} }
private BorderlandRanger(final BorderlandRanger card) { private BorderlandRanger(final BorderlandRanger card) {

View file

@ -70,8 +70,8 @@ class BrainInAJarCastEffect extends OneShotEffect {
public BrainInAJarCastEffect() { public BrainInAJarCastEffect() {
super(Outcome.PlayForFree); super(Outcome.PlayForFree);
this.staticText = ", then you may cast an instant or sorcery card " this.staticText = ", then you may cast an instant or sorcery spell "
+ "with mana values equal to the number of charge " + "with mana value equal to the number of charge "
+ "counters on {this} from your hand without paying its mana cost"; + "counters on {this} from your hand without paying its mana cost";
} }

View file

@ -84,6 +84,6 @@ class ActivateAsSorceryConditionalActivatedAbility extends ActivatedAbilityImpl
@Override @Override
public String getRule() { public String getRule() {
return super.getRule() + " Activate only as a sorcery, and only if seven or more cards are in your graveyard."; return super.getRule() + " Activate only as a sorcery and only if seven or more cards are in your graveyard.";
} }
} }

View file

@ -88,7 +88,7 @@ class CharmedPendantManaEffect extends ManaEffect {
public CharmedPendantManaEffect() { public CharmedPendantManaEffect() {
super(); super();
staticText = "For each colored mana symbol in that card's mana cost, add one mana of that color"; staticText = "For each colored mana symbol in the milled card's mana cost, add one mana of that color";
} }
public CharmedPendantManaEffect(final CharmedPendantManaEffect effect) { public CharmedPendantManaEffect(final CharmedPendantManaEffect effect) {

View file

@ -25,7 +25,7 @@ public final class Conflux extends CardImpl {
this.getSpellAbility().addEffect(new SearchLibraryPutInHandEffect( this.getSpellAbility().addEffect(new SearchLibraryPutInHandEffect(
new ConfluxTarget(), true, true new ConfluxTarget(), true, true
).setText("search your library for a white card, a blue card, a black card, a red card, and a green card. " + ).setText("search your library for a white card, a blue card, a black card, a red card, and a green card. " +
"Reveal those cards and put them into your hand. Then shuffle")); "Reveal those cards, put them into your hand, then shuffle"));
} }
private Conflux(final Conflux card) { private Conflux(final Conflux card) {

View file

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

View file

@ -27,7 +27,7 @@ public final class DisasterRadius extends CardImpl {
// As an additional cost to cast Disaster Radius, reveal a creature card from your hand. // As an additional cost to cast Disaster Radius, reveal a creature card from your hand.
TargetCardInHand targetCard = new TargetCardInHand(new FilterCreatureCard("a creature card")); TargetCardInHand targetCard = new TargetCardInHand(new FilterCreatureCard("a creature card from your hand"));
this.getSpellAbility().addCost(new RevealTargetFromHandCost(targetCard)); this.getSpellAbility().addCost(new RevealTargetFromHandCost(targetCard));
// Disaster Radius deals X damage to each creature your opponents control, where X is the revealed card's converted mana cost. // Disaster Radius deals X damage to each creature your opponents control, where X is the revealed card's converted mana cost.

View file

@ -38,7 +38,7 @@ public final class Dispossess extends CardImpl {
class DispossessEffect extends SearchTargetGraveyardHandLibraryForCardNameAndExileEffect { class DispossessEffect extends SearchTargetGraveyardHandLibraryForCardNameAndExileEffect {
public DispossessEffect() { public DispossessEffect() {
super(true, "target opponent's", "any number of cards with that name"); super(true, "target opponent's", "any number of cards with the chosen name");
} }
public DispossessEffect(final DispossessEffect effect) { public DispossessEffect(final DispossessEffect effect) {

View file

@ -40,8 +40,8 @@ class DistantMemoriesEffect extends OneShotEffect {
public DistantMemoriesEffect() { public DistantMemoriesEffect() {
super(Outcome.DrawCard); super(Outcome.DrawCard);
this.staticText = "Search your library for a card, exile it, then shuffle " this.staticText = "Search your library for a card, exile it, then shuffle. "
+ "your library. Any opponent may have you put that card into " + "Any opponent may have you put that card into "
+ "your hand. If no player does, you draw three cards"; + "your hand. If no player does, you draw three cards";
} }

View file

@ -27,7 +27,7 @@ import java.util.UUID;
*/ */
public final class EdificeOfAuthority extends CardImpl { public final class EdificeOfAuthority extends CardImpl {
private static final String rule = "{1}, {T}: Until your next turn, target creature can't attack or block and its activated abilities can't be activated. Activate only if there are three or more brick counter on {this}."; private static final String rule = "{1}, {T}: Until your next turn, target creature can't attack or block and its activated abilities can't be activated. Activate only if there are three or more brick counters on {this}.";
public EdificeOfAuthority(UUID ownerId, CardSetInfo setInfo) { public EdificeOfAuthority(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{3}"); super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{3}");

View file

@ -33,7 +33,7 @@ public final class EmberwildeAugur extends CardImpl {
// Sacrifice Emberwilde Augur: Emberwilde Augur deals 3 damage to target player. Activate this ability only during your upkeep. // Sacrifice Emberwilde Augur: Emberwilde Augur deals 3 damage to target player. Activate this ability only during your upkeep.
Ability ability = new ActivateIfConditionActivatedAbility( Ability ability = new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD, Zone.BATTLEFIELD,
new DamageTargetEffect(3), new DamageTargetEffect(3, "it"),
new SacrificeSourceCost(), new SacrificeSourceCost(),
new IsStepCondition(PhaseStep.UPKEEP)); new IsStepCondition(PhaseStep.UPKEEP));
ability.addTarget(new TargetPlayerOrPlaneswalker()); ability.addTarget(new TargetPlayerOrPlaneswalker());

View file

@ -1,48 +1,38 @@
package mage.cards.f; package mage.cards.f;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.MageObject;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.ActivatedAbilityImpl;
import mage.abilities.costs.common.SacrificeSourceCost; import mage.abilities.costs.common.SacrificeSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.OneShotEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.cards.Cards; import mage.constants.*;
import mage.cards.CardsImpl; import mage.filter.FilterCard;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.ComparisonType;
import mage.constants.Outcome;
import mage.constants.TimingRule;
import mage.constants.Zone;
import mage.filter.common.FilterCreatureCard; import mage.filter.common.FilterCreatureCard;
import mage.filter.predicate.mageobject.ManaValuePredicate; import mage.filter.predicate.mageobject.ManaValuePredicate;
import mage.game.Game; import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.players.Player; import mage.players.Player;
import mage.target.common.TargetCardInLibrary; import mage.target.common.TargetCardInLibrary;
import java.util.UUID;
/** /**
*
* @author escplan9 (Derek Monturo - dmontur1 at gmail dot com) * @author escplan9 (Derek Monturo - dmontur1 at gmail dot com)
*/ */
public final class Fleshwrither extends CardImpl { public final class Fleshwrither extends CardImpl {
public Fleshwrither(UUID ownerId, CardSetInfo setInfo) { public Fleshwrither(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{B}{B}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}{B}");
this.subtype.add(SubType.HORROR); this.subtype.add(SubType.HORROR);
this.power = new MageInt(3); this.power = new MageInt(3);
this.toughness = new MageInt(3); this.toughness = new MageInt(3);
// Transfigure {1}{B}{B}: Sacrifice this creature: Search your library for a creature card with the same converted mana cost as this // Transfigure {1}{B}{B}: Sacrifice this creature: Search your library for a creature card with the same converted mana cost as this
// creature and put that card onto the battlefield. Then shuffle your library. Transfigure only as a sorcery. // creature and put that card onto the battlefield. Then shuffle your library. Transfigure only as a sorcery.
SimpleActivatedAbility ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new FleshwritherEffect(), new ManaCostsImpl("{1}{B}{B}")); this.addAbility(new FleshwritherAbility());
ability.addCost(new SacrificeSourceCost());
ability.setTiming(TimingRule.SORCERY);
this.addAbility(ability);
} }
private Fleshwrither(final Fleshwrither card) { private Fleshwrither(final Fleshwrither card) {
@ -55,11 +45,35 @@ public final class Fleshwrither extends CardImpl {
} }
} }
class FleshwritherAbility extends ActivatedAbilityImpl {
FleshwritherAbility() {
super(Zone.BATTLEFIELD, new FleshwritherEffect(), new ManaCostsImpl<>("{1}{B}{B}"));
this.addCost(new SacrificeSourceCost());
this.setTiming(TimingRule.SORCERY);
}
private FleshwritherAbility(final FleshwritherAbility ability) {
super(ability);
}
@Override
public FleshwritherAbility copy() {
return new FleshwritherAbility(this);
}
@Override
public String getRule() {
return "Transfigure {1}{B}{B} <i>({1}{B}{B}, Sacrifice this creature: " +
"Search your library for a creature card with the same mana value as this creature, " +
"put that card onto the battlefield, then shuffle. Transfigure only as a sorcery.)</i>";
}
}
class FleshwritherEffect extends OneShotEffect { class FleshwritherEffect extends OneShotEffect {
FleshwritherEffect() { FleshwritherEffect() {
super(Outcome.Benefit); super(Outcome.Benefit);
staticText = "Transfigure: Sacrifice this creature: Search your library for a creature card with the same mana value as this creature and put that card onto the battlefield";
} }
FleshwritherEffect(final FleshwritherEffect effect) { FleshwritherEffect(final FleshwritherEffect effect) {
@ -69,24 +83,19 @@ class FleshwritherEffect extends OneShotEffect {
@Override @Override
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());
MageObject sourceObject = game.getObject(source.getSourceId()); Permanent sourcePermanent = source.getSourcePermanentOrLKI(game);
if (sourceObject != null && controller != null) { if (sourcePermanent == null || controller == null) {
FilterCreatureCard filter = new FilterCreatureCard("creature with mana value " + sourceObject.getManaValue()); return false;
filter.add(new ManaValuePredicate(ComparisonType.EQUAL_TO, sourceObject.getManaValue()));
TargetCardInLibrary target = new TargetCardInLibrary(1, filter);
if (controller.searchLibrary(target, source, game)) {
if (!target.getTargets().isEmpty()) {
Cards chosen = new CardsImpl(target.getTargets());
controller.moveCards(chosen, Zone.BATTLEFIELD, source, game);
}
} }
FilterCard filter = new FilterCreatureCard("creature card with mana value " + sourcePermanent.getManaValue());
filter.add(new ManaValuePredicate(ComparisonType.EQUAL_TO, sourcePermanent.getManaValue()));
TargetCardInLibrary target = new TargetCardInLibrary(filter);
controller.searchLibrary(target, source, game);
controller.moveCards(controller.getLibrary().getCard(target.getFirstTarget(), game), Zone.BATTLEFIELD, source, game);
controller.shuffleLibrary(source, game); controller.shuffleLibrary(source, game);
return true; return true;
} }
return false;
}
@Override @Override
public FleshwritherEffect copy() { public FleshwritherEffect copy() {
return new FleshwritherEffect(this); return new FleshwritherEffect(this);

View file

@ -24,7 +24,7 @@ import java.util.UUID;
*/ */
public final class ForerunnerOfTheEmpire extends CardImpl { public final class ForerunnerOfTheEmpire extends CardImpl {
private static final FilterCreaturePermanent filterAnyDinosaur = new FilterCreaturePermanent(SubType.DINOSAUR, SubType.DINOSAUR.toString()); private static final FilterCreaturePermanent filterAnyDinosaur = new FilterCreaturePermanent(SubType.DINOSAUR, "a " + SubType.DINOSAUR.toString());
static { static {
filterAnyDinosaur.add(TargetController.YOU.getControllerPredicate()); filterAnyDinosaur.add(TargetController.YOU.getControllerPredicate());

View file

@ -28,7 +28,7 @@ public final class Foresight extends CardImpl {
this.getSpellAbility().addEffect(new ForesightEffect()); this.getSpellAbility().addEffect(new ForesightEffect());
// Draw a card at the beginning of the next turn's upkeep. // Draw a card at the beginning of the next turn's upkeep.
this.getSpellAbility().addEffect(new CreateDelayedTriggeredAbilityEffect(new AtTheBeginOfNextUpkeepDelayedTriggeredAbility(new DrawCardSourceControllerEffect(1)), false)); this.getSpellAbility().addEffect(new CreateDelayedTriggeredAbilityEffect(new AtTheBeginOfNextUpkeepDelayedTriggeredAbility(new DrawCardSourceControllerEffect(1)), false).concatBy("<br>"));
} }
private Foresight(final Foresight card) { private Foresight(final Foresight card) {

View file

@ -16,7 +16,7 @@ import mage.target.common.TargetCardInLibrary;
*/ */
public final class GaeasBounty extends CardImpl { public final class GaeasBounty extends CardImpl {
private static final FilterLandCard filter = new FilterLandCard("Forest"); private static final FilterLandCard filter = new FilterLandCard("Forest cards");
static { static {
filter.add(SubType.FOREST.getPredicate()); filter.add(SubType.FOREST.getPredicate());

View file

@ -1,7 +1,6 @@
package mage.cards.g; package mage.cards.g;
import java.util.UUID;
import mage.Mana; import mage.Mana;
import mage.abilities.common.LimitedTimesPerTurnActivatedAbility; import mage.abilities.common.LimitedTimesPerTurnActivatedAbility;
import mage.abilities.costs.common.SacrificeSourceCost; import mage.abilities.costs.common.SacrificeSourceCost;
@ -13,21 +12,28 @@ import mage.cards.CardSetInfo;
import mage.constants.*; import mage.constants.*;
import mage.filter.FilterCard; import mage.filter.FilterCard;
import java.util.UUID;
/** /**
*
* @author spjspj * @author spjspj
*/ */
public final class GaeasTouch extends CardImpl { public final class GaeasTouch extends CardImpl {
private static final FilterCard filter = new FilterCard("a basic Forest card");
static {
filter.add(SuperType.BASIC.getPredicate());
filter.add(SubType.FOREST.getPredicate());
}
public GaeasTouch(UUID ownerId, CardSetInfo setInfo) { public GaeasTouch(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{G}{G}"); super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{G}{G}");
// You may put a basic Forest card from your hand onto the battlefield. Activate this ability only any time you could cast a sorcery and only once each turn. // You may put a basic Forest card from your hand onto the battlefield. Activate this ability only any time you could cast a sorcery and only once each turn.
FilterCard filter = new FilterCard("basic Forest card"); LimitedTimesPerTurnActivatedAbility ability = new LimitedTimesPerTurnActivatedAbility(
filter.add(SuperType.BASIC.getPredicate()); Zone.BATTLEFIELD, new PutCardFromHandOntoBattlefieldEffect(filter),
filter.add(SubType.FOREST.getPredicate()); new GenericManaCost(0), 1
LimitedTimesPerTurnActivatedAbility ability = new LimitedTimesPerTurnActivatedAbility(Zone.BATTLEFIELD, );
new PutCardFromHandOntoBattlefieldEffect(filter), new GenericManaCost(0), 1);
ability.setTiming(TimingRule.SORCERY); ability.setTiming(TimingRule.SORCERY);
addAbility(ability); addAbility(ability);

View file

@ -56,7 +56,7 @@ public final class GateToTheAfterlife extends CardImpl {
// {2}, {T}, Sacrifice Gate to the Afterlife: Search your graveyard, hand, and/or library for a card named God-Pharaoh's Gift and put it onto the battlefield. If you seearch your library this way, shuffle it. Activate this ability only if there are six or more creature cards in your graveyard. // {2}, {T}, Sacrifice Gate to the Afterlife: Search your graveyard, hand, and/or library for a card named God-Pharaoh's Gift and put it onto the battlefield. If you seearch your library this way, shuffle it. Activate this ability only if there are six or more creature cards in your graveyard.
ability = new ConditionalActivatedAbility( ability = new ConditionalActivatedAbility(
Zone.BATTLEFIELD, new GateToTheAfterlifeEffect(), new GenericManaCost(2), Zone.BATTLEFIELD, new GateToTheAfterlifeEffect(), new GenericManaCost(2),
new CardsInControllerGraveyardCondition(6, StaticFilters.FILTER_CARD_CREATURE) new CardsInControllerGraveyardCondition(6, StaticFilters.FILTER_CARD_CREATURES)
); );
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());
ability.addCost(new SacrificeSourceCost()); ability.addCost(new SacrificeSourceCost());

View file

@ -66,7 +66,7 @@ class GryffsBoonEffect extends OneShotEffect {
public GryffsBoonEffect() { public GryffsBoonEffect() {
super(Outcome.PutCardInPlay); super(Outcome.PutCardInPlay);
staticText = "Return {this} from your graveyard to the battlefield attached to target creatur"; staticText = "Return {this} from your graveyard to the battlefield attached to target creature";
} }
public GryffsBoonEffect(final GryffsBoonEffect effect) { public GryffsBoonEffect(final GryffsBoonEffect effect) {

View file

@ -55,7 +55,7 @@ class HarvestSeasonEffect extends OneShotEffect {
HarvestSeasonEffect() { HarvestSeasonEffect() {
super(Outcome.Benefit); super(Outcome.Benefit);
this.staticText = "Search your library for up to X basic land cards, where X is the number of tapped creatures you control," this.staticText = "Search your library for up to X basic land cards, where X is the number of tapped creatures you control,"
+ " and put those cards onto the battlefield tapped, then shuffle."; + " put those cards onto the battlefield tapped, then shuffle.";
} }
HarvestSeasonEffect(final HarvestSeasonEffect effect) { HarvestSeasonEffect(final HarvestSeasonEffect effect) {

View file

@ -39,7 +39,7 @@ public final class KariZevsExpertise extends CardImpl {
this.getSpellAbility().addEffect(new GainAbilityTargetEffect(HasteAbility.getInstance(), Duration.EndOfTurn).setText("It gains haste until end of turn")); this.getSpellAbility().addEffect(new GainAbilityTargetEffect(HasteAbility.getInstance(), Duration.EndOfTurn).setText("It gains haste until end of turn"));
// You may cast a card with converted mana cost 2 or less from your hand without paying its mana cost. // You may cast a card with converted mana cost 2 or less from your hand without paying its mana cost.
this.getSpellAbility().addEffect(new CastWithoutPayingManaCostEffect(2)); this.getSpellAbility().addEffect(new CastWithoutPayingManaCostEffect(2).concatBy("<br>"));
} }
private KariZevsExpertise(final KariZevsExpertise card) { private KariZevsExpertise(final KariZevsExpertise card) {

View file

@ -29,7 +29,7 @@ public final class KhalniHeartExpedition extends CardImpl {
this.addAbility(new SimpleActivatedAbility( this.addAbility(new SimpleActivatedAbility(
new SearchLibraryPutInPlayEffect(new TargetCardInLibrary( new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(
0, 2, StaticFilters.FILTER_CARD_BASIC_LAND 0, 2, StaticFilters.FILTER_CARD_BASIC_LANDS
), true, Outcome.PutLandInPlay), ), true, Outcome.PutLandInPlay),
new CompositeCost( new CompositeCost(
new RemoveCountersSourceCost(CounterType.QUEST.createInstance(3)), new RemoveCountersSourceCost(CounterType.QUEST.createInstance(3)),

View file

@ -34,7 +34,7 @@ public final class KindlyStranger extends CardImpl {
this.addAbility(new ConditionalActivatedAbility( this.addAbility(new ConditionalActivatedAbility(
Zone.BATTLEFIELD, new TransformSourceEffect(true), new ManaCostsImpl<>("{2}{B}"), Zone.BATTLEFIELD, new TransformSourceEffect(true), new ManaCostsImpl<>("{2}{B}"),
DeliriumCondition.instance, "<i>Delirium</i> &mdash; {2}{B}: Transform {this}. " + DeliriumCondition.instance, "<i>Delirium</i> &mdash; {2}{B}: Transform {this}. " +
"Activate this ability only if there are four or more card types among cards in your graveyard." "Activate only if there are four or more card types among cards in your graveyard."
).addHint(DeliriumHint.instance)); ).addHint(DeliriumHint.instance));
} }

View file

@ -36,7 +36,7 @@ public final class KuldothaPhoenix extends CardImpl {
// <i>Metalcraft</i> &mdash; {4}: Return Kuldotha Phoenix from your graveyard to the battlefield. // <i>Metalcraft</i> &mdash; {4}: Return Kuldotha Phoenix from your graveyard to the battlefield.
// Activate this ability only during your upkeep and only if you control three or more artifacts. // Activate this ability only during your upkeep and only if you control three or more artifacts.
Ability ability = new ConditionalActivatedAbility(Zone.GRAVEYARD, Ability ability = new ConditionalActivatedAbility(Zone.GRAVEYARD,
new ReturnSourceFromGraveyardToBattlefieldEffect(false, true), new ReturnSourceFromGraveyardToBattlefieldEffect(false, false),
new ManaCostsImpl("{4}"), new ManaCostsImpl("{4}"),
new CompoundCondition("during your upkeep and only if you control three or more artifacts", new CompoundCondition("during your upkeep and only if you control three or more artifacts",
new IsStepCondition(PhaseStep.UPKEEP), MetalcraftCondition.instance) new IsStepCondition(PhaseStep.UPKEEP), MetalcraftCondition.instance)

View file

@ -1,40 +1,41 @@
package mage.cards.l; package mage.cards.l;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.costs.Cost;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.DoIfCostPaid;
import mage.abilities.effects.common.search.SearchLibraryPutInPlayEffect; import mage.abilities.effects.common.search.SearchLibraryPutInPlayEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.Outcome;
import mage.filter.FilterCard; import mage.filter.FilterCard;
import mage.filter.predicate.mageobject.NamePredicate; import mage.filter.predicate.mageobject.NamePredicate;
import mage.game.Game;
import mage.players.Player;
import mage.target.common.TargetCardInLibrary; import mage.target.common.TargetCardInLibrary;
/** import java.util.UUID;
*
* @author LoneFox
/**
* @author LoneFox
*/ */
public final class LlanowarSentinel extends CardImpl { public final class LlanowarSentinel extends CardImpl {
private static final FilterCard filter = new FilterCard("a card named Llanowar Sentinel");
static {
filter.add(new NamePredicate("Llanowar Sentinel"));
}
public LlanowarSentinel(UUID ownerId, CardSetInfo setInfo) { public LlanowarSentinel(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{G}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}");
this.subtype.add(SubType.ELF); this.subtype.add(SubType.ELF);
this.power = new MageInt(2); this.power = new MageInt(2);
this.toughness = new MageInt(3); this.toughness = new MageInt(3);
// When Llanowar Sentinel enters the battlefield, you may pay {1}{G}. If you do, search your library for a card named Llanowar Sentinel and put that card onto the battlefield. Then shuffle your library. // When Llanowar Sentinel enters the battlefield, you may pay {1}{G}. If you do, search your library for a card named Llanowar Sentinel and put that card onto the battlefield. Then shuffle your library.
this.addAbility(new EntersBattlefieldTriggeredAbility(new LlanowarSentinelEffect())); this.addAbility(new EntersBattlefieldTriggeredAbility(new DoIfCostPaid(
new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(filter)), new ManaCostsImpl<>("{1}{G}")
)));
} }
private LlanowarSentinel(final LlanowarSentinel card) { private LlanowarSentinel(final LlanowarSentinel card) {
@ -46,36 +47,3 @@ public final class LlanowarSentinel extends CardImpl {
return new LlanowarSentinel(this); return new LlanowarSentinel(this);
} }
} }
class LlanowarSentinelEffect extends OneShotEffect {
LlanowarSentinelEffect() {
super(Outcome.Benefit);
this.staticText = "you may pay {1}{G}. If you do, search your library for a card named Llanowar Sentinel and put that card onto the battlefield. Then shuffle"; }
LlanowarSentinelEffect(final LlanowarSentinelEffect effect) {
super(effect);
}
@Override
public LlanowarSentinelEffect copy() {
return new LlanowarSentinelEffect(this);
}
@Override
public boolean apply(Game game, Ability source) {
Player player = game.getPlayer(source.getControllerId());
if(player != null) {
if(player.chooseUse(Outcome.BoostCreature, "Do you want to to pay {1}{G}?", source, game)) {
Cost cost = new ManaCostsImpl("{1}{G}");
if(cost.pay(source, game, source, source.getControllerId(), false, null)) {
FilterCard filter = new FilterCard("card named Llanowar Sentinel");
filter.add(new NamePredicate("Llanowar Sentinel"));
new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(0, 1, filter), false, true).apply(game, source);
}
return true;
}
}
return false;
}
}

View file

@ -43,7 +43,7 @@ class ManaSeveranceEffect extends SearchEffect {
public ManaSeveranceEffect() { public ManaSeveranceEffect() {
super(new TargetCardInLibrary(0, Integer.MAX_VALUE, new FilterLandCard()), Outcome.Exile); super(new TargetCardInLibrary(0, Integer.MAX_VALUE, new FilterLandCard()), Outcome.Exile);
this.staticText = "Search your library for any number of land cards and remove them from the game. Shuffle your library afterwards."; this.staticText = "search your library for any number of land cards, exile them, then shuffle";
} }
public ManaSeveranceEffect(final ManaSeveranceEffect effect) { public ManaSeveranceEffect(final ManaSeveranceEffect effect) {

View file

@ -17,7 +17,7 @@ import java.util.UUID;
*/ */
public final class OpenTheGates extends CardImpl { public final class OpenTheGates extends CardImpl {
private static final FilterCard filter = new FilterCard("basic land card or a Gate card"); private static final FilterCard filter = new FilterCard("a basic land card or a Gate card");
static { static {
filter.add(Predicates.or( filter.add(Predicates.or(

View file

@ -68,7 +68,7 @@ class OracleEnVecEffect extends OneShotEffect {
super(Outcome.Benefit); super(Outcome.Benefit);
this.staticText = "Target opponent chooses any number of creatures they control. During that player's next turn, " + this.staticText = "Target opponent chooses any number of creatures they control. During that player's next turn, " +
"the chosen creatures attack if able, and other creatures can't attack. At the beginning of that turn's end step, " + "the chosen creatures attack if able, and other creatures can't attack. At the beginning of that turn's end step, " +
"destroy each of the chosen creatures that didn't attack"; "destroy each of the chosen creatures that didn't attack this turn";
} }
OracleEnVecEffect(final OracleEnVecEffect effect) { OracleEnVecEffect(final OracleEnVecEffect effect) {

View file

@ -42,7 +42,7 @@ public final class OraclesVault extends CardImpl {
this.addAbility(new ConditionalActivatedAbility(Zone.BATTLEFIELD, this.addAbility(new ConditionalActivatedAbility(Zone.BATTLEFIELD,
new OraclesVaultFreeEffect(), new TapSourceCost(), new SourceHasCounterCondition(CounterType.BRICK, 3, Integer.MAX_VALUE), new OraclesVaultFreeEffect(), new TapSourceCost(), new SourceHasCounterCondition(CounterType.BRICK, 3, Integer.MAX_VALUE),
"{T}: Exile the top card of your library. Until end of turn, you may play that card without paying its mana cost. " "{T}: Exile the top card of your library. Until end of turn, you may play that card without paying its mana cost. "
+ "Activate only if there are three or more brick counters on {this}")); + "Activate only if there are three or more brick counters on {this}."));
} }
private OraclesVault(final OraclesVault card) { private OraclesVault(final OraclesVault card) {

View file

@ -37,7 +37,7 @@ public final class ParallaxNexus extends CardImpl {
this.addAbility(ability); this.addAbility(ability);
// When Parallax Nexus leaves the battlefield, each player returns to their hand all cards they own exiled with Parallax Nexus. // When Parallax Nexus leaves the battlefield, each player returns to their hand all cards they own exiled with Parallax Nexus.
this.addAbility(new LeavesBattlefieldTriggeredAbility(new ReturnFromExileEffect(Zone.HAND), false)); this.addAbility(new LeavesBattlefieldTriggeredAbility(new ReturnFromExileEffect(Zone.HAND).setText("each player returns to their hand all cards they own exiled with {this}"), false));
} }
private ParallaxNexus(final ParallaxNexus card) { private ParallaxNexus(final ParallaxNexus card) {

View file

@ -53,7 +53,7 @@ class PutridCyclopEffect extends OneShotEffect {
public PutridCyclopEffect() { public PutridCyclopEffect() {
super(Outcome.Detriment); super(Outcome.Detriment);
this.staticText = "scry 1, then reveal the top card of your library. {this} gets -X/-X until end of turn, where X is that card's mana value" this.staticText = "scry 1, then reveal the top card of your library. {this} gets -X/-X until end of turn, where X is that card's mana value."
+ " <i>(To scry 1, look at the top card of your library, then you may put that card on the bottom of your library.)</i>"; + " <i>(To scry 1, look at the top card of your library, then you may put that card on the bottom of your library.)</i>";
} }

View file

@ -24,7 +24,7 @@ public final class RishkarsExpertise extends CardImpl {
this.getSpellAbility().addEffect(effect); this.getSpellAbility().addEffect(effect);
// You may cast a card with converted mana cost 5 or less from your hand without paying its mana cost. // You may cast a card with converted mana cost 5 or less from your hand without paying its mana cost.
this.getSpellAbility().addEffect(new CastWithoutPayingManaCostEffect(5)); this.getSpellAbility().addEffect(new CastWithoutPayingManaCostEffect(5).concatBy("<br>"));
} }
private RishkarsExpertise(final RishkarsExpertise card) { private RishkarsExpertise(final RishkarsExpertise card) {

View file

@ -44,8 +44,8 @@ class RitesOfSpringEffect extends OneShotEffect {
RitesOfSpringEffect() { RitesOfSpringEffect() {
super(Outcome.DrawCard); super(Outcome.DrawCard);
this.staticText = "Discard any number of cards. Search your library for up to that many basic land cards, " + this.staticText = "discard any number of cards. Search your library for up to that many basic land cards, " +
"reveal those cards, and put them into your hand. Then shuffle."; "reveal them, put them into your hand, then shuffle";
} }
private RitesOfSpringEffect(final RitesOfSpringEffect effect) { private RitesOfSpringEffect(final RitesOfSpringEffect effect) {

View file

@ -63,7 +63,7 @@ class ChooseNumberEffect 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());
if (controller != null) { if (controller != null) {
int numberChoice = controller.announceXMana(0, Integer.MAX_VALUE, "Choose a number. Noncreature spells with the chosen mana value can't be cast", game, source); int numberChoice = controller.announceXMana(0, Integer.MAX_VALUE, "Choose a number.", game, source);
game.getState().setValue(source.getSourceId().toString(), numberChoice); game.getState().setValue(source.getSourceId().toString(), numberChoice);
Permanent permanent = game.getPermanentEntering(source.getSourceId()); Permanent permanent = game.getPermanentEntering(source.getSourceId());
@ -82,7 +82,7 @@ class ChooseNumberEffect extends OneShotEffect {
} }
private String setText() { private String setText() {
return "Choose a number. Noncreature spells with the chosen mana value can't be cast"; return "Choose a number. Noncreature spells with mana value equal to the chosen number can't be cast";
} }
} }
@ -92,7 +92,7 @@ class SanctumPrelateReplacementEffect extends ContinuousRuleModifyingEffectImpl
public SanctumPrelateReplacementEffect() { public SanctumPrelateReplacementEffect() {
super(Duration.WhileOnBattlefield, Outcome.Detriment); super(Duration.WhileOnBattlefield, Outcome.Detriment);
staticText = "Noncreature spells with the chosen mana value can't be cast"; staticText = "Noncreature spells with mana value equal to the chosen number can't be cast";
} }
public SanctumPrelateReplacementEffect(final SanctumPrelateReplacementEffect effect) { public SanctumPrelateReplacementEffect(final SanctumPrelateReplacementEffect effect) {

View file

@ -47,7 +47,7 @@ class ScatteringStrokeEffect extends OneShotEffect {
public ScatteringStrokeEffect() { public ScatteringStrokeEffect() {
super(Outcome.Benefit); super(Outcome.Benefit);
this.staticText = "Counter target spell. Clash with an opponent. If you win, at the beginning of your next main phase, you may add {X}, where X is that spell's mana value"; this.staticText = "Counter target spell. Clash with an opponent. If you win, at the beginning of your next main phase, you may add an amount of {C} equal to that spell's mana value";
} }
public ScatteringStrokeEffect(final ScatteringStrokeEffect effect) { public ScatteringStrokeEffect(final ScatteringStrokeEffect effect) {

View file

@ -42,7 +42,7 @@ class SchemingSymmetryEffect extends OneShotEffect {
SchemingSymmetryEffect() { SchemingSymmetryEffect() {
super(Outcome.Benefit); super(Outcome.Benefit);
staticText = "Choose two target players. Each of them searches their library for a card, " + staticText = "Choose two target players. Each of them searches their library for a card, " +
"then shuffles and puts that card on top of it."; "then shuffles and puts that card on top";
} }
private SchemingSymmetryEffect(final SchemingSymmetryEffect effect) { private SchemingSymmetryEffect(final SchemingSymmetryEffect effect) {

View file

@ -25,7 +25,8 @@ public final class ShardConvergence extends CardImpl {
// Search your library for a Plains card, an Island card, a Swamp card, and a Mountain card. Reveal those cards and put them into your hand. Then shuffle your library. // Search your library for a Plains card, an Island card, a Swamp card, and a Mountain card. Reveal those cards and put them into your hand. Then shuffle your library.
this.getSpellAbility().addEffect(new SearchLibraryPutInHandEffect( this.getSpellAbility().addEffect(new SearchLibraryPutInHandEffect(
new ShardConvergenceTarget(), true new ShardConvergenceTarget(), true
)); ).setText("search your library for a Plains card, an Island card, a Swamp card, and a Mountain card. " +
"Reveal those cards, put them into your hand, then shuffle"));
} }
private ShardConvergence(final ShardConvergence card) { private ShardConvergence(final ShardConvergence card) {

View file

@ -23,7 +23,7 @@ public final class SramsExpertise extends CardImpl {
this.getSpellAbility().addEffect(new CreateTokenEffect(new ServoToken(), 3)); this.getSpellAbility().addEffect(new CreateTokenEffect(new ServoToken(), 3));
// You may cast a card with converted mana cost 3 or less from your hand without paying its mana cost. // You may cast a card with converted mana cost 3 or less from your hand without paying its mana cost.
this.getSpellAbility().addEffect(new CastWithoutPayingManaCostEffect(3)); this.getSpellAbility().addEffect(new CastWithoutPayingManaCostEffect(3).concatBy("<br>"));
} }
private SramsExpertise(final SramsExpertise card) { private SramsExpertise(final SramsExpertise card) {

View file

@ -1,7 +1,5 @@
package mage.cards.s; package mage.cards.s;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.condition.common.DeliriumCondition; import mage.abilities.condition.common.DeliriumCondition;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
@ -10,10 +8,9 @@ import mage.abilities.effects.common.continuous.BoostSourceEffect;
import mage.abilities.hint.common.DeliriumHint; import mage.abilities.hint.common.DeliriumHint;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.*;
import mage.constants.SubType;
import mage.constants.Duration; import java.util.UUID;
import mage.constants.Zone;
/** /**
* @author fireshoes * @author fireshoes
@ -32,9 +29,8 @@ public final class StallionOfAshmouth extends CardImpl {
this.addAbility(new ConditionalActivatedAbility( this.addAbility(new ConditionalActivatedAbility(
Zone.BATTLEFIELD, Zone.BATTLEFIELD,
new BoostSourceEffect(1, 1, Duration.EndOfTurn), new BoostSourceEffect(1, 1, Duration.EndOfTurn),
new ManaCostsImpl("{1}{B}"), new ManaCostsImpl<>("{1}{B}"), DeliriumCondition.instance
DeliriumCondition.instance) ).setAbilityWord(AbilityWord.DELIRIUM).addHint(DeliriumHint.instance));
.addHint(DeliriumHint.instance));
} }
private StallionOfAshmouth(final StallionOfAshmouth card) { private StallionOfAshmouth(final StallionOfAshmouth card) {

View file

@ -51,7 +51,7 @@ class TariffEffect extends OneShotEffect {
public TariffEffect() { public TariffEffect() {
super(Outcome.DestroyPermanent); super(Outcome.DestroyPermanent);
this.staticText = "Each player sacrifices the creature they control with the highest mana value unless they pay that creature's mana cost. If two or more creatures a player controls are tied for highest cost, that player chooses one."; this.staticText = "Each player sacrifices the creature they control with the highest mana value unless they pay that creature's mana cost. If two or more creatures a player controls are tied for highest, that player chooses one.";
} }
public TariffEffect(final TariffEffect effect) { public TariffEffect(final TariffEffect effect) {

View file

@ -50,7 +50,8 @@ class TrenchGorgerEffect extends OneShotEffect {
public TrenchGorgerEffect() { public TrenchGorgerEffect() {
super(Outcome.BoostCreature); super(Outcome.BoostCreature);
this.staticText = "you may search your library for any number of land cards, exile them, then shuffle. If you do, {this}'s power and toughness each become equal to the number of cards exiled this way"; this.staticText = "search your library for any number of land cards, exile them, then shuffle. " +
"If you do, {this} has base power and base toughness each equal to the number of cards exiled this way";
} }
public TrenchGorgerEffect(final TrenchGorgerEffect effect) { public TrenchGorgerEffect(final TrenchGorgerEffect effect) {

View file

@ -95,7 +95,7 @@ class VerdantSuccessionTriggeredAbility extends TriggeredAbilityImpl {
@Override @Override
public String getRule() { public String getRule() {
return "Whenever a green nontoken creature dies, that creature's controller may search their library for a card with the same name as that creature and put it onto the battlefield. If that player does, they shuffle."; return "Whenever a green nontoken creature dies, that creature's controller may search their library for a card with the same name as that creature, put it onto the battlefield, then shuffle.";
} }
} }

View file

@ -31,7 +31,7 @@ public final class WarpedLandscape extends CardImpl {
// {2}, {T}, Sacrifice Warped Landscape: Search your library for a basic land card and put it onto the battlefield tapped. Then shuffle your library. // {2}, {T}, Sacrifice Warped Landscape: Search your library for a basic land card and put it onto the battlefield tapped. Then shuffle your library.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD,
new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(0, 1, StaticFilters.FILTER_CARD_BASIC_LAND), true, true), new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_LAND), true, true),
new GenericManaCost(2)); new GenericManaCost(2));
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());
ability.addCost(new SacrificeSourceCost()); ability.addCost(new SacrificeSourceCost());

View file

@ -34,7 +34,7 @@ public final class WildFieldScarecrow extends CardImpl {
// {2}, Sacrifice Wild-Field Scarecrow: Search your library for up to two basic land cards, reveal them, and put them into your hand. Then shuffle your library. // {2}, Sacrifice Wild-Field Scarecrow: Search your library for up to two basic land cards, reveal them, and put them into your hand. Then shuffle your library.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD,
new SearchLibraryPutInHandEffect(new TargetCardInLibrary(0, 2, StaticFilters.FILTER_CARD_BASIC_LAND), true, true), new SearchLibraryPutInHandEffect(new TargetCardInLibrary(0, 2, StaticFilters.FILTER_CARD_BASIC_LANDS), true, true),
new GenericManaCost(2)); new GenericManaCost(2));
ability.addCost(new SacrificeSourceCost()); ability.addCost(new SacrificeSourceCost());
this.addAbility(ability); this.addAbility(ability);

View file

@ -42,7 +42,7 @@ public final class WolfOfDevilsBreach extends CardImpl {
toPay.add(new DiscardCardCost()); toPay.add(new DiscardCardCost());
Ability ability = new AttacksTriggeredAbility(new DoIfCostPaid(new DamageTargetEffect(new WolfOfDevilsBreachDiscardCostCardConvertedMana()), toPay, Ability ability = new AttacksTriggeredAbility(new DoIfCostPaid(new DamageTargetEffect(new WolfOfDevilsBreachDiscardCostCardConvertedMana()), toPay,
"Pay {1}{R} and discard a card to let {this} do damage to target creature or planeswalker equal to the discarded card's mana value?", true), false, "Pay {1}{R} and discard a card to let {this} do damage to target creature or planeswalker equal to the discarded card's mana value?", true), false,
"Whenever {this} attacks you may pay {1}{R} and discard a card. If you do, {this} deals damage to target creature or planeswalker " "Whenever {this} attacks, you may pay {1}{R} and discard a card. If you do, {this} deals damage to target creature or planeswalker "
+ "equal to the discarded card's mana value."); + "equal to the discarded card's mana value.");
ability.addTarget(new TargetCreatureOrPlaneswalker()); ability.addTarget(new TargetCreatureOrPlaneswalker());
this.addAbility(ability); this.addAbility(ability);

View file

@ -23,7 +23,7 @@ public final class YahennisExpertise extends CardImpl {
this.getSpellAbility().addEffect(new BoostAllEffect(-3, -3, Duration.EndOfTurn)); this.getSpellAbility().addEffect(new BoostAllEffect(-3, -3, Duration.EndOfTurn));
// You may cast a card with converted mana cost 3 or less from your hand without paying its mana cost. // You may cast a card with converted mana cost 3 or less from your hand without paying its mana cost.
this.getSpellAbility().addEffect(new CastWithoutPayingManaCostEffect(3)); this.getSpellAbility().addEffect(new CastWithoutPayingManaCostEffect(3).concatBy("<br>"));
} }
private YahennisExpertise(final YahennisExpertise card) { private YahennisExpertise(final YahennisExpertise card) {

View file

@ -188,7 +188,7 @@ public class BecomesCreatureTargetEffect extends ContinuousEffectImpl {
sb.append(". It's still a land"); sb.append(". It's still a land");
} }
} }
return sb.toString(); return sb.toString().replace(" .", ".");
} }
} }

View file

@ -39,7 +39,7 @@ public class CastWithoutPayingManaCostEffect extends OneShotEffect {
public CastWithoutPayingManaCostEffect(DynamicValue maxCost) { public CastWithoutPayingManaCostEffect(DynamicValue maxCost) {
super(Outcome.PlayForFree); super(Outcome.PlayForFree);
this.manaCost = maxCost; this.manaCost = maxCost;
this.staticText = "you may cast a card with mana value " this.staticText = "you may cast a spell with mana value "
+ maxCost + " or less from your hand without paying its mana cost"; + maxCost + " or less from your hand without paying its mana cost";
} }

View file

@ -55,7 +55,7 @@ public class GravestormAbility extends TriggeredAbilityImpl {
@Override @Override
public String getRule() { public String getRule() {
return "Gravestorm <i>(When you cast this spell, copy it for each permanent put into a graveyard this turn. You may choose new targets for the copies.</i>)"; return "Gravestorm <i>(When you cast this spell, copy it for each permanent put into a graveyard this turn. You may choose new targets for the copies.)</i>";
} }
} }