[SLD] various text fixes

This commit is contained in:
Evan Kranzler 2021-10-23 09:27:42 -04:00
parent 9407d15dad
commit a55cfe2589
24 changed files with 95 additions and 125 deletions

View file

@ -38,7 +38,7 @@ class AllIsDustEffect extends OneShotEffect {
AllIsDustEffect() { AllIsDustEffect() {
super(Outcome.DestroyPermanent); super(Outcome.DestroyPermanent);
staticText = "Each player sacrifices all colored permanents they control"; staticText = "Each player sacrifices all permanents they control that are one or more colors";
} }
AllIsDustEffect(final AllIsDustEffect effect) { AllIsDustEffect(final AllIsDustEffect effect) {

View file

@ -57,7 +57,7 @@ public final class ArahboRoarOfTheWorld extends CardImpl {
Ability ability = new ConditionalInterveningIfTriggeredAbility( Ability ability = new ConditionalInterveningIfTriggeredAbility(
new BeginningOfCombatTriggeredAbility(Zone.ALL, new BoostTargetEffect(3, 3, Duration.EndOfTurn), TargetController.YOU, false, false), new BeginningOfCombatTriggeredAbility(Zone.ALL, new BoostTargetEffect(3, 3, Duration.EndOfTurn), TargetController.YOU, false, false),
SourceOnBattlefieldOrCommandZoneCondition.instance, SourceOnBattlefieldOrCommandZoneCondition.instance,
"<i>Eminence</i> &mdash; At the beginning of combat on your turn, if Arahbo, Roar of the World is in the command zone or on the battlefield, another target Cat you control gets +3/+3 until end of turn."); "At the beginning of combat on your turn, if {this} is in the command zone or on the battlefield, another target Cat you control gets +3/+3 until end of turn.");
ability.addTarget(new TargetCreaturePermanent(filter)); ability.addTarget(new TargetCreaturePermanent(filter));
ability.setAbilityWord(AbilityWord.EMINENCE); ability.setAbilityWord(AbilityWord.EMINENCE);
this.addAbility(ability); this.addAbility(ability);

View file

@ -25,7 +25,7 @@ public final class Bitterblossom extends CardImpl {
// At the beginning of your upkeep, you lose 1 life and create a 1/1 black Faerie Rogue creature token with flying. // At the beginning of your upkeep, you lose 1 life and create a 1/1 black Faerie Rogue creature token with flying.
Ability ability = new BeginningOfUpkeepTriggeredAbility(new LoseLifeSourceControllerEffect(1), TargetController.YOU, false); Ability ability = new BeginningOfUpkeepTriggeredAbility(new LoseLifeSourceControllerEffect(1), TargetController.YOU, false);
ability.addEffect(new CreateTokenEffect(new FaerieRogueToken(), 1)); ability.addEffect(new CreateTokenEffect(new FaerieRogueToken(), 1).concatBy("and"));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -1,7 +1,6 @@
package mage.cards.b; package mage.cards.b;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.common.CantBlockAbility; import mage.abilities.common.CantBlockAbility;
import mage.abilities.common.LandfallAbility; import mage.abilities.common.LandfallAbility;
@ -19,14 +18,15 @@ import mage.constants.Duration;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.Zone; import mage.constants.Zone;
import java.util.UUID;
/** /**
*
* @author maurer.it_at_gmail.com * @author maurer.it_at_gmail.com
*/ */
public final class Bloodghast extends CardImpl { public final class Bloodghast extends CardImpl {
public Bloodghast(UUID ownerId, CardSetInfo setInfo) { public Bloodghast(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{B}{B}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{B}{B}");
this.subtype.add(SubType.VAMPIRE, SubType.SPIRIT); this.subtype.add(SubType.VAMPIRE, SubType.SPIRIT);
this.power = new MageInt(2); this.power = new MageInt(2);
@ -38,9 +38,9 @@ public final class Bloodghast extends CardImpl {
ContinuousEffect effect = new GainAbilitySourceEffect(HasteAbility.getInstance(), Duration.WhileOnBattlefield); ContinuousEffect effect = new GainAbilitySourceEffect(HasteAbility.getInstance(), Duration.WhileOnBattlefield);
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect(effect, this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect(effect,
new XorLessLifeCondition(XorLessLifeCondition.CheckType.AN_OPPONENT, 10), new XorLessLifeCondition(XorLessLifeCondition.CheckType.AN_OPPONENT, 10),
"Bloodghast has haste as long as an opponent has 10 or less life"))); "{this} has haste as long as an opponent has 10 or less life")));
// Landfall Whenever a land enters the battlefield under your control, you may return Bloodghast from your graveyard to the battlefield. // Landfall Whenever a land enters the battlefield under your control, you may return Bloodghast from your graveyard to the battlefield.
this.addAbility(new LandfallAbility(Zone.GRAVEYARD, new ReturnSourceFromGraveyardToBattlefieldEffect(), true)); this.addAbility(new LandfallAbility(Zone.GRAVEYARD, new ReturnSourceFromGraveyardToBattlefieldEffect(false, false), true));
} }
private Bloodghast(final Bloodghast card) { private Bloodghast(final Bloodghast card) {

View file

@ -25,7 +25,7 @@ public final class CrashThrough extends CardImpl {
getSpellAbility().addEffect(new GainAbilityAllEffect(TrampleAbility.getInstance(), Duration.EndOfTurn, new FilterControlledCreaturePermanent(), "Creatures you control gain trample until end of turn")); getSpellAbility().addEffect(new GainAbilityAllEffect(TrampleAbility.getInstance(), Duration.EndOfTurn, new FilterControlledCreaturePermanent(), "Creatures you control gain trample until end of turn"));
// Draw a card. // Draw a card.
getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1)); getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1).concatBy("<br>"));
} }
private CrashThrough(final CrashThrough card) { private CrashThrough(final CrashThrough card) {

View file

@ -40,8 +40,13 @@ public final class CraterhoofBehemoth extends CardImpl {
this.addAbility(HasteAbility.getInstance()); this.addAbility(HasteAbility.getInstance());
// When Craterhoof Behemoth enters the battlefield, creatures you control gain trample and get +X/+X until end of turn, where X is the number of creatures you control. // When Craterhoof Behemoth enters the battlefield, creatures you control gain trample and get +X/+X until end of turn, where X is the number of creatures you control.
Ability ability = new EntersBattlefieldTriggeredAbility(new GainAbilityControlledEffect(TrampleAbility.getInstance(), Duration.EndOfTurn, filter)); Ability ability = new EntersBattlefieldTriggeredAbility(new GainAbilityControlledEffect(
ability.addEffect(new BoostControlledEffect(CreaturesYouControlCount.instance, CreaturesYouControlCount.instance, Duration.EndOfTurn, filter, false, true)); TrampleAbility.getInstance(), Duration.EndOfTurn, filter
).setText("creatures you control gain trample"));
ability.addEffect(new BoostControlledEffect(
CreaturesYouControlCount.instance, CreaturesYouControlCount.instance,
Duration.EndOfTurn, filter, false, true
).setText("and get +X/+X until end of turn, where X is the number of creatures you control"));
ability.addHint(CreaturesYouControlHint.instance); ability.addHint(CreaturesYouControlHint.instance);
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -1,14 +1,11 @@
package mage.cards.e; package mage.cards.e;
import java.util.UUID;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.OnEventTriggeredAbility; import mage.abilities.common.BeginningOfUpkeepTriggeredAbility;
import mage.abilities.common.SimpleStaticAbility; import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.Effect; import mage.abilities.costs.common.SacrificeTargetCost;
import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.SacrificeSourceUnlessPaysEffect;
import mage.abilities.effects.common.continuous.BoostControlledEffect; import mage.abilities.effects.common.continuous.BoostControlledEffect;
import mage.abilities.effects.common.continuous.GainAbilityAllEffect;
import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; import mage.abilities.effects.common.continuous.GainAbilityControlledEffect;
import mage.abilities.keyword.FlyingAbility; import mage.abilities.keyword.FlyingAbility;
import mage.abilities.keyword.IndestructibleAbility; import mage.abilities.keyword.IndestructibleAbility;
@ -16,20 +13,13 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.constants.Outcome; import mage.constants.TargetController;
import mage.constants.Zone;
import mage.filter.StaticFilters; import mage.filter.StaticFilters;
import mage.filter.common.FilterControlledCreaturePermanent;
import mage.filter.common.FilterCreaturePermanent;
import mage.game.Game;
import mage.game.events.GameEvent.EventType;
import mage.game.permanent.Permanent;
import mage.players.Player;
import mage.target.common.TargetControlledCreaturePermanent;
import mage.target.common.TargetControlledPermanent; import mage.target.common.TargetControlledPermanent;
import java.util.UUID;
/** /**
*
* @author BetaSteward_at_googlemail.com * @author BetaSteward_at_googlemail.com
*/ */
public final class EldraziMonument extends CardImpl { public final class EldraziMonument extends CardImpl {
@ -38,13 +28,26 @@ public final class EldraziMonument extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{5}"); super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{5}");
// Creatures you control get +1/+1, have flying, and are indestructible. // Creatures you control get +1/+1, have flying, and are indestructible.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostControlledEffect(1, 1, Duration.WhileOnBattlefield, StaticFilters.FILTER_PERMANENT_CREATURE, false))); Ability ability = new SimpleStaticAbility(new BoostControlledEffect(
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityControlledEffect(FlyingAbility.getInstance(), Duration.WhileOnBattlefield, new FilterCreaturePermanent()))); 1, 1, Duration.WhileOnBattlefield,
Effect effect = new GainAbilityAllEffect(IndestructibleAbility.getInstance(), Duration.WhileOnBattlefield, new FilterControlledCreaturePermanent("Creatures you control"), false); StaticFilters.FILTER_PERMANENT_CREATURES, false
effect.setText("Creatures you control are indestructible"); ));
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect)); ability.addEffect(new GainAbilityControlledEffect(
FlyingAbility.getInstance(), Duration.WhileOnBattlefield,
StaticFilters.FILTER_PERMANENT_CREATURES
).setText("and have flying"));
ability.addEffect(new GainAbilityControlledEffect(
IndestructibleAbility.getInstance(), Duration.WhileOnBattlefield,
StaticFilters.FILTER_PERMANENT_CREATURES
).setText("and indestructible"));
this.addAbility(ability);
// At the beginning of your upkeep, sacrifice a creature. If you can't, sacrifice Eldrazi Monument. // At the beginning of your upkeep, sacrifice a creature. If you can't, sacrifice Eldrazi Monument.
this.addAbility(new OnEventTriggeredAbility(EventType.UPKEEP_STEP_PRE, "beginning of your upkeep", new EldraziMonumentEffect())); this.addAbility(new BeginningOfUpkeepTriggeredAbility(
new SacrificeSourceUnlessPaysEffect(new SacrificeTargetCost(
new TargetControlledPermanent(StaticFilters.FILTER_CONTROLLED_CREATURE_SHORT_TEXT)
)).setText("sacrifice a creature. If you can't, sacrifice {this}"), TargetController.YOU, false
));
} }
private EldraziMonument(final EldraziMonument card) { private EldraziMonument(final EldraziMonument card) {
@ -55,42 +58,4 @@ public final class EldraziMonument extends CardImpl {
public EldraziMonument copy() { public EldraziMonument copy() {
return new EldraziMonument(this); return new EldraziMonument(this);
} }
}
class EldraziMonumentEffect extends OneShotEffect {
public EldraziMonumentEffect() {
super(Outcome.Sacrifice);
staticText = "sacrifice a creature. If you can't, sacrifice {this}";
}
public EldraziMonumentEffect(final EldraziMonumentEffect ability) {
super(ability);
}
@Override
public EldraziMonumentEffect copy() {
return new EldraziMonumentEffect(this);
}
@Override
public boolean apply(Game game, Ability source) {
TargetControlledPermanent target = new TargetControlledCreaturePermanent();
Player player = game.getPlayer(source.getControllerId());
if (target.canChoose(source.getSourceId(), source.getControllerId(), game)) {
player.choose(this.outcome, target, source.getSourceId(), game);
Permanent permanent = game.getPermanent(target.getFirstTarget());
if (permanent != null) {
return permanent.sacrifice(source, game);
}
}
Permanent permanent = game.getPermanent(source.getSourceId());
if (permanent != null) {
return permanent.sacrifice(source, game);
}
return false;
}
} }

View file

@ -48,7 +48,7 @@ class FleetSwallowerEffect extends OneShotEffect {
public FleetSwallowerEffect() { public FleetSwallowerEffect() {
super(Outcome.Detriment); super(Outcome.Detriment);
staticText = "target player puts the top half of their library, rounded up, into their graveyard"; staticText = "target player mills half their library, rounded up";
} }
public FleetSwallowerEffect(final FleetSwallowerEffect effect) { public FleetSwallowerEffect(final FleetSwallowerEffect effect) {

View file

@ -31,7 +31,7 @@ public final class GoblinKing extends CardImpl {
// Other Goblin creatures get +1/+1 and have mountainwalk. // Other Goblin creatures get +1/+1 and have mountainwalk.
Effect effect = new BoostAllEffect(1, 1, Duration.WhileOnBattlefield, StaticFilters.FILTER_PERMANENT_CREATURE_GOBLINS, true); Effect effect = new BoostAllEffect(1, 1, Duration.WhileOnBattlefield, StaticFilters.FILTER_PERMANENT_CREATURE_GOBLINS, true);
effect.setText("Other Goblin creatures get +1/+1"); effect.setText("Other Goblins get +1/+1");
Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, effect); Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, effect);
effect = new GainAbilityAllEffect(new MountainwalkAbility(), Duration.WhileOnBattlefield, StaticFilters.FILTER_PERMANENT_CREATURE_GOBLINS, true); effect = new GainAbilityAllEffect(new MountainwalkAbility(), Duration.WhileOnBattlefield, StaticFilters.FILTER_PERMANENT_CREATURE_GOBLINS, true);
effect.setText("and have mountainwalk"); effect.setText("and have mountainwalk");

View file

@ -1,28 +1,28 @@
package mage.cards.g; package mage.cards.g;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.common.AttacksTriggeredAbility; import mage.abilities.common.AttacksTriggeredAbility;
import mage.abilities.common.BeginningOfCombatTriggeredAbility; import mage.abilities.common.BeginningOfCombatTriggeredAbility;
import mage.abilities.common.SimpleStaticAbility; import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount; import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount;
import mage.abilities.dynamicvalue.common.StaticValue; import mage.abilities.dynamicvalue.common.StaticValue;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.combat.AttacksIfAbleAllEffect; import mage.abilities.effects.common.combat.AttacksIfAbleAllEffect;
import mage.abilities.effects.common.continuous.BoostSourceEffect; import mage.abilities.effects.common.continuous.BoostSourceEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.*; import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.SubType;
import mage.constants.TargetController;
import mage.filter.common.FilterCreaturePermanent; import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.mageobject.AnotherPredicate; import mage.filter.predicate.mageobject.AnotherPredicate;
import mage.filter.predicate.permanent.AttackingPredicate; import mage.filter.predicate.permanent.AttackingPredicate;
import mage.game.permanent.token.GoblinToken; import mage.game.permanent.token.GoblinToken;
import mage.watchers.common.AttackedThisTurnWatcher;
import java.util.UUID;
/** /**
*
* @author Quercitron * @author Quercitron
*/ */
public final class GoblinRabblemaster extends CardImpl { public final class GoblinRabblemaster extends CardImpl {
@ -47,8 +47,7 @@ public final class GoblinRabblemaster extends CardImpl {
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
// Other Goblin creatures you control attack each turn if able. // Other Goblin creatures you control attack each turn if able.
Effect effect = new AttacksIfAbleAllEffect(otherGoblinFilter); this.addAbility(new SimpleStaticAbility(new AttacksIfAbleAllEffect(otherGoblinFilter, Duration.WhileOnBattlefield, true)));
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect), new AttackedThisTurnWatcher());
// At the beginning of combat on your turn, create a 1/1 red Goblin creature token with haste. // At the beginning of combat on your turn, create a 1/1 red Goblin creature token with haste.
this.addAbility(new BeginningOfCombatTriggeredAbility(new CreateTokenEffect(new GoblinToken(true)), TargetController.YOU, false)); this.addAbility(new BeginningOfCombatTriggeredAbility(new CreateTokenEffect(new GoblinToken(true)), TargetController.YOU, false));

View file

@ -26,7 +26,7 @@ import mage.target.common.TargetControlledPermanent;
public final class GoblinTrashmaster extends CardImpl { public final class GoblinTrashmaster extends CardImpl {
private static final FilterCreaturePermanent filter private static final FilterCreaturePermanent filter
= new FilterCreaturePermanent(SubType.GOBLIN, "Goblins you control"); = new FilterCreaturePermanent(SubType.GOBLIN, "Goblins");
private static final FilterControlledCreaturePermanent filter2 private static final FilterControlledCreaturePermanent filter2
= new FilterControlledCreaturePermanent(SubType.GOBLIN, "a Goblin"); = new FilterControlledCreaturePermanent(SubType.GOBLIN, "a Goblin");

View file

@ -44,7 +44,7 @@ public final class HeliodGodOfTheSun extends CardImpl {
// Other creatures you control have vigilance. // Other creatures you control have vigilance.
this.addAbility(new SimpleStaticAbility(new GainAbilityControlledEffect( this.addAbility(new SimpleStaticAbility(new GainAbilityControlledEffect(
VigilanceAbility.getInstance(), Duration.WhileOnBattlefield, VigilanceAbility.getInstance(), Duration.WhileOnBattlefield,
StaticFilters.FILTER_PERMANENT_CREATURE, true StaticFilters.FILTER_PERMANENT_CREATURES, true
))); )));
// {2}{W}{W}: Create a 2/1 white Cleric enchantment creature token. // {2}{W}{W}: Create a 2/1 white Cleric enchantment creature token.

View file

@ -48,9 +48,9 @@ public final class KothophedSoulHoarder extends CardImpl {
// Whenever a permanent owned by another player is put into the graveyard from the battlefield, you draw one card and lose 1 life. // Whenever a permanent owned by another player is put into the graveyard from the battlefield, you draw one card and lose 1 life.
Effect effect = new DrawCardSourceControllerEffect(1); Effect effect = new DrawCardSourceControllerEffect(1);
effect.setText("you draw one card"); effect.setText("you draw a card");
Ability ability = new ZoneChangeAllTriggeredAbility(Zone.BATTLEFIELD, Zone.BATTLEFIELD, Zone.GRAVEYARD, effect, filter, Ability ability = new ZoneChangeAllTriggeredAbility(Zone.BATTLEFIELD, Zone.BATTLEFIELD, Zone.GRAVEYARD, effect, filter,
"Whenever a permanent owned by another player is put into the graveyard from the battlefield, ", false); "Whenever a permanent owned by another player is put into a graveyard from the battlefield, ", false);
effect = new LoseLifeSourceControllerEffect(1); effect = new LoseLifeSourceControllerEffect(1);
effect.setText("and lose 1 life"); effect.setText("and lose 1 life");
ability.addEffect(effect); ability.addEffect(effect);

View file

@ -1,8 +1,6 @@
package mage.cards.l; package mage.cards.l;
import java.util.UUID; import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect;
import mage.abilities.effects.common.ReturnToHandTargetEffect;
import mage.abilities.keyword.DredgeAbility; import mage.abilities.keyword.DredgeAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
@ -10,18 +8,18 @@ import mage.constants.CardType;
import mage.filter.common.FilterLandCard; import mage.filter.common.FilterLandCard;
import mage.target.common.TargetCardInYourGraveyard; import mage.target.common.TargetCardInYourGraveyard;
import java.util.UUID;
/** /**
*
* @author jonubuu * @author jonubuu
*/ */
public final class LifeFromTheLoam extends CardImpl { public final class LifeFromTheLoam extends CardImpl {
public LifeFromTheLoam(UUID ownerId, CardSetInfo setInfo) { public LifeFromTheLoam(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{1}{G}"); super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{1}{G}");
// Return up to three target land cards from your graveyard to your hand. // Return up to three target land cards from your graveyard to your hand.
this.getSpellAbility().addEffect(new ReturnToHandTargetEffect()); this.getSpellAbility().addEffect(new ReturnFromGraveyardToHandTargetEffect());
this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(0, 3, new FilterLandCard("land cards from your graveyard"))); this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(0, 3, new FilterLandCard("land cards from your graveyard")));
// Dredge 3 (If you would draw a card, instead you may put exactly three cards from the top of your library into your graveyard. If you do, return this card from your graveyard to your hand. Otherwise, draw a card.) // Dredge 3 (If you would draw a card, instead you may put exactly three cards from the top of your library into your graveyard. If you do, return this card from your graveyard to your hand. Otherwise, draw a card.)
this.addAbility(new DredgeAbility(3)); this.addAbility(new DredgeAbility(3));

View file

@ -15,6 +15,7 @@ import mage.cards.CardSetInfo;
import mage.constants.*; import mage.constants.*;
import mage.game.Game; import mage.game.Game;
import mage.game.events.GameEvent; import mage.game.events.GameEvent;
import mage.game.permanent.token.WalkerToken;
import mage.game.permanent.token.ZombieToken; import mage.game.permanent.token.ZombieToken;
import java.util.Objects; import java.util.Objects;
@ -35,7 +36,7 @@ public final class MichonneRuthlessSurvivor extends CardImpl {
this.toughness = new MageInt(3); this.toughness = new MageInt(3);
// When Michonne enters the battlefield, create two Walker tokens. // When Michonne enters the battlefield, create two Walker tokens.
this.addAbility(new EntersBattlefieldTriggeredAbility(new CreateTokenEffect(new ZombieToken(), 2))); this.addAbility(new EntersBattlefieldTriggeredAbility(new CreateTokenEffect(new WalkerToken(), 2)));
// As long as Michonne is equipped, she must be blocked if able. // As long as Michonne is equipped, she must be blocked if able.
this.addAbility(new SimpleStaticAbility(new ConditionalRequirementEffect( this.addAbility(new SimpleStaticAbility(new ConditionalRequirementEffect(
@ -44,7 +45,7 @@ public final class MichonneRuthlessSurvivor extends CardImpl {
))); )));
// Whenever Michonne and at least two Zombies attack, she gains indestructible until end of turn. // Whenever Michonne and at least two Zombies attack, she gains indestructible until end of turn.
this.addAbility(new BattalionAbility()); this.addAbility(new MichonneRuthlessSurvivorAbility());
} }
private MichonneRuthlessSurvivor(final MichonneRuthlessSurvivor card) { private MichonneRuthlessSurvivor(final MichonneRuthlessSurvivor card) {
@ -57,19 +58,19 @@ public final class MichonneRuthlessSurvivor extends CardImpl {
} }
} }
class BattalionAbility extends TriggeredAbilityImpl { class MichonneRuthlessSurvivorAbility extends TriggeredAbilityImpl {
public BattalionAbility() { public MichonneRuthlessSurvivorAbility() {
super(Zone.BATTLEFIELD, new GainAbilitySourceEffect(IndestructibleAbility.getInstance(), Duration.EndOfTurn)); super(Zone.BATTLEFIELD, new GainAbilitySourceEffect(IndestructibleAbility.getInstance(), Duration.EndOfTurn));
} }
public BattalionAbility(final BattalionAbility ability) { public MichonneRuthlessSurvivorAbility(final MichonneRuthlessSurvivorAbility ability) {
super(ability); super(ability);
} }
@Override @Override
public BattalionAbility copy() { public MichonneRuthlessSurvivorAbility copy() {
return new BattalionAbility(this); return new MichonneRuthlessSurvivorAbility(this);
} }
@Override @Override

View file

@ -46,7 +46,7 @@ public final class NeganTheColdBlooded extends CardImpl {
// Whenever an opponent sacrifices a creature, you create a Treasure token. // Whenever an opponent sacrifices a creature, you create a Treasure token.
this.addAbility(new SacrificeAllTriggeredAbility( this.addAbility(new SacrificeAllTriggeredAbility(
new CreateTokenEffect(new TreasureToken()), new CreateTokenEffect(new TreasureToken()).setText("you create a Treasure token"),
StaticFilters.FILTER_PERMANENT_A_CREATURE, StaticFilters.FILTER_PERMANENT_A_CREATURE,
TargetController.OPPONENT, false TargetController.OPPONENT, false
)); ));

View file

@ -45,7 +45,7 @@ public final class NyleaGodOfTheHunt extends CardImpl {
// Other creatures you control have trample. // Other creatures you control have trample.
this.addAbility(new SimpleStaticAbility(new GainAbilityControlledEffect( this.addAbility(new SimpleStaticAbility(new GainAbilityControlledEffect(
TrampleAbility.getInstance(), Duration.WhileOnBattlefield, TrampleAbility.getInstance(), Duration.WhileOnBattlefield,
StaticFilters.FILTER_PERMANENT_CREATURE, true StaticFilters.FILTER_PERMANENT_CREATURES, true
))); )));
// {3}{G}: Target creature gets +2/+2 until end of turn. // {3}{G}: Target creature gets +2/+2 until end of turn.

View file

@ -18,7 +18,7 @@ import mage.filter.FilterSpell;
*/ */
public final class RekiTheHistoryOfKamigawa extends CardImpl { public final class RekiTheHistoryOfKamigawa extends CardImpl {
private static final FilterSpell filter = new FilterSpell("legendary spell"); private static final FilterSpell filter = new FilterSpell("a legendary spell");
static { static {
filter.add(SuperType.LEGENDARY.getPredicate()); filter.add(SuperType.LEGENDARY.getPredicate());

View file

@ -1,14 +1,12 @@
package mage.cards.s; package mage.cards.s;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.SacrificeTargetCost; import mage.abilities.costs.common.SacrificeTargetCost;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.continuous.BoostControlledEffect; import mage.abilities.effects.common.continuous.BoostAllEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
@ -20,8 +18,9 @@ import mage.filter.common.FilterCreaturePermanent;
import mage.game.permanent.token.SquirrelToken; import mage.game.permanent.token.SquirrelToken;
import mage.target.common.TargetControlledPermanent; import mage.target.common.TargetControlledPermanent;
import java.util.UUID;
/** /**
*
* @author LevelX2 * @author LevelX2
*/ */
public final class SquirrelWrangler extends CardImpl { public final class SquirrelWrangler extends CardImpl {
@ -29,7 +28,7 @@ public final class SquirrelWrangler extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent(SubType.SQUIRREL, "Squirrel creatures"); private static final FilterCreaturePermanent filter = new FilterCreaturePermanent(SubType.SQUIRREL, "Squirrel creatures");
public SquirrelWrangler(UUID ownerId, CardSetInfo setInfo) { public SquirrelWrangler(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{G}{G}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}{G}");
this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.HUMAN);
this.subtype.add(SubType.DRUID); this.subtype.add(SubType.DRUID);
@ -42,7 +41,7 @@ public final class SquirrelWrangler extends CardImpl {
this.addAbility(ability); this.addAbility(ability);
// {1}{G}, Sacrifice a land: Squirrel creatures get +1/+1 until end of turn. // {1}{G}, Sacrifice a land: Squirrel creatures get +1/+1 until end of turn.
ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostControlledEffect(1,1,Duration.EndOfTurn, filter), new ManaCostsImpl("{1}{G}")); ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostAllEffect(1, 1, Duration.EndOfTurn, filter, false), new ManaCostsImpl("{1}{G}"));
ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent(new FilterControlledLandPermanent("a land")))); ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent(new FilterControlledLandPermanent("a land"))));
this.addAbility(ability); this.addAbility(ability);

View file

@ -22,7 +22,7 @@ import mage.target.TargetSpell;
*/ */
public final class SwanSong extends CardImpl { public final class SwanSong extends CardImpl {
private static final FilterSpell filter = new FilterSpell("enchantment, instant or sorcery spell"); private static final FilterSpell filter = new FilterSpell("enchantment, instant, or sorcery spell");
static { static {
filter.add(Predicates.or(CardType.ENCHANTMENT.getPredicate(), filter.add(Predicates.or(CardType.ENCHANTMENT.getPredicate(),
@ -52,7 +52,7 @@ class SwanSongEffect extends OneShotEffect {
public SwanSongEffect() { public SwanSongEffect() {
super(Outcome.Benefit); super(Outcome.Benefit);
this.staticText = "Counter target enchantment, instant or sorcery spell. Its controller creates a 2/2 blue Bird creature token with flying"; this.staticText = "Counter target enchantment, instant, or sorcery spell. Its controller creates a 2/2 blue Bird creature token with flying";
} }
public SwanSongEffect(final SwanSongEffect effect) { public SwanSongEffect(final SwanSongEffect effect) {

View file

@ -96,7 +96,7 @@ class ThraximundarTriggeredAbility extends TriggeredAbilityImpl {
} }
@Override @Override
public String getTriggerPhrase() { public String getRule() {
return "Whenever {this} attacks, defending player sacrifices a creature."; return "Whenever {this} attacks, defending player sacrifices a creature.";
} }
} }
@ -123,7 +123,7 @@ class PlayerSacrificesCreatureTriggeredAbility extends TriggeredAbilityImpl {
} }
@Override @Override
public String getRule() { public String getTriggerPhrase() {
return "Whenever a player sacrifices a creature, " ; return "Whenever a player sacrifices a creature, " ;
} }

View file

@ -72,8 +72,8 @@ class ToshiroUmezawaEffect extends OneShotEffect {
public ToshiroUmezawaEffect() { public ToshiroUmezawaEffect() {
super(Outcome.Benefit); super(Outcome.Benefit);
this.staticText = "cast target instant card from your graveyard. " this.staticText = "you may cast target instant card from your graveyard. "
+ "If that card would be put into a graveyard this turn, exile it instead"; + "If that spell would be put into a graveyard this turn, exile it instead";
} }
public ToshiroUmezawaEffect(final ToshiroUmezawaEffect effect) { public ToshiroUmezawaEffect(final ToshiroUmezawaEffect effect) {

View file

@ -1,7 +1,5 @@
package mage.cards.v; package mage.cards.v;
import java.util.UUID;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.common.TapSourceCost;
@ -14,25 +12,30 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.constants.Zone; import mage.filter.StaticFilters;
import mage.filter.common.FilterControlledCreaturePermanent;
import java.util.UUID;
/** /**
*
* @author North * @author North
*/ */
public final class VaultOfTheArchangel extends CardImpl { public final class VaultOfTheArchangel extends CardImpl {
public VaultOfTheArchangel(UUID ownerId, CardSetInfo setInfo) { public VaultOfTheArchangel(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.LAND},""); super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
// {tap}: Add {C}. // {tap}: Add {C}.
this.addAbility(new ColorlessManaAbility()); this.addAbility(new ColorlessManaAbility());
// {2}{W}{B}, {tap}: Creatures you control gain deathtouch and lifelink until end of turn. // {2}{W}{B}, {tap}: Creatures you control gain deathtouch and lifelink until end of turn.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, Ability ability = new SimpleActivatedAbility(new GainAbilityControlledEffect(
new GainAbilityControlledEffect(DeathtouchAbility.getInstance(), Duration.EndOfTurn, new FilterControlledCreaturePermanent("Creatures"), false), DeathtouchAbility.getInstance(), Duration.EndOfTurn,
new ManaCostsImpl("{2}{W}{B}")); StaticFilters.FILTER_PERMANENT_CREATURE
ability.addEffect(new GainAbilityControlledEffect(LifelinkAbility.getInstance(), Duration.EndOfTurn, new FilterControlledCreaturePermanent("Creatures"), false)); ).setText("creatures you control gain deathtouch"), new ManaCostsImpl<>("{2}{W}{B}"));
ability.addEffect(new GainAbilityControlledEffect(
LifelinkAbility.getInstance(), Duration.EndOfTurn,
StaticFilters.FILTER_PERMANENT_CREATURE
).setText("and lifelink until end of turn"));
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -58,7 +58,7 @@ public class VerifyCardDataTest {
private static final Logger logger = Logger.getLogger(VerifyCardDataTest.class); private static final Logger logger = Logger.getLogger(VerifyCardDataTest.class);
private static final String FULL_ABILITIES_CHECK_SET_CODE = "GRN"; // check all abilities and output cards with wrong abilities texts; private static final String FULL_ABILITIES_CHECK_SET_CODE = "SLD"; // check all abilities and output cards with wrong abilities texts;
private static final boolean AUTO_FIX_SAMPLE_DECKS = false; // debug only: auto-fix sample decks by test_checkSampleDecks test run private static final boolean AUTO_FIX_SAMPLE_DECKS = false; // debug only: auto-fix sample decks by test_checkSampleDecks test run
private static final boolean ONLY_TEXT = false; // use when checking text locally, suppresses unnecessary checks and output messages private static final boolean ONLY_TEXT = false; // use when checking text locally, suppresses unnecessary checks and output messages