[ROE] various text fixes

This commit is contained in:
Evan Kranzler 2022-03-09 19:16:33 -05:00
parent 08411b122c
commit f94c79f6b4
42 changed files with 148 additions and 131 deletions

View file

@ -27,7 +27,7 @@ public final class AkoumBoulderfoot extends CardImpl {
this.power = new MageInt(4);
this.toughness = new MageInt(5);
Ability ability = new EntersBattlefieldTriggeredAbility(new DamageTargetEffect(1), false);
Ability ability = new EntersBattlefieldTriggeredAbility(new DamageTargetEffect(1, "it"), false);
Target target = new TargetAnyTarget();
ability.addTarget(target);
this.addAbility(ability);

View file

@ -37,7 +37,7 @@ public final class AngelheartVial extends CardImpl {
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new GainLifeEffect(2), new GenericManaCost(2));
ability.addCost(new TapSourceCost());
ability.addCost(new RemoveCountersSourceCost(new RemoveCountersSourceCost(CounterType.CHARGE.createInstance(4))));
ability.addEffect(new DrawCardSourceControllerEffect(1));
ability.addEffect(new DrawCardSourceControllerEffect(1).concatBy("and"));
this.addAbility(ability);
}
@ -82,7 +82,7 @@ class AngelheartVialTriggeredAbility extends TriggeredAbilityImpl {
@Override
public String getRule() {
return "Whenever you are dealt damage, you may put that many charge counters on {this}.";
return "Whenever you're dealt damage, you may put that many charge counters on {this}.";
}
}

View file

@ -41,7 +41,7 @@ public final class AuraFinesse extends CardImpl {
this.getSpellAbility().addTarget(new TargetPermanent(filter));
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
// Draw a card.
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1));
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1).concatBy("<br>"));
}
private AuraFinesse(final AuraFinesse card) {

View file

@ -29,7 +29,7 @@ public final class BloodriteInvoker extends CardImpl {
this.power = new MageInt(3);
this.toughness = new MageInt(1);
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new LoseLifeTargetEffect(3), new GenericManaCost(8));
ability.addEffect(new GainLifeEffect(3));
ability.addEffect(new GainLifeEffect(3).concatBy("and"));
ability.addTarget(new TargetPlayer());
this.addAbility(ability);
}

View file

@ -1,7 +1,5 @@
package mage.cards.b;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.TapTargetCost;
@ -13,16 +11,27 @@ import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.SubType;
import mage.constants.Zone;
import mage.target.common.TargetControlledCreaturePermanent;
import mage.filter.common.FilterControlledCreaturePermanent;
import mage.filter.common.FilterControlledPermanent;
import mage.filter.predicate.permanent.TappedPredicate;
import mage.target.common.TargetControlledPermanent;
import java.util.UUID;
/**
*
* @author North
*/
public final class Bramblesnap extends CardImpl {
private static final FilterControlledPermanent filter
= new FilterControlledCreaturePermanent("untapped creature you control");
static {
filter.add(TappedPredicate.UNTAPPED);
}
public Bramblesnap(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{G}");
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G}");
this.subtype.add(SubType.ELEMENTAL);
this.power = new MageInt(1);
@ -31,7 +40,7 @@ public final class Bramblesnap extends CardImpl {
this.addAbility(TrampleAbility.getInstance());
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD,
new BoostSourceEffect(1, 1, Duration.EndOfTurn),
new TapTargetCost(new TargetControlledCreaturePermanent())));
new TapTargetCost(new TargetControlledPermanent(filter))));
}
private Bramblesnap(final Bramblesnap card) {

View file

@ -1,11 +1,9 @@
package mage.cards.c;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.effects.common.ReturnToHandTargetEffect;
import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect;
import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
@ -14,8 +12,9 @@ import mage.constants.SubType;
import mage.filter.StaticFilters;
import mage.target.common.TargetCardInYourGraveyard;
import java.util.UUID;
/**
*
* @author North
*/
public final class CadaverImp extends CardImpl {
@ -31,10 +30,9 @@ public final class CadaverImp extends CardImpl {
this.addAbility(FlyingAbility.getInstance());
// When Cadaver Imp enters the battlefield, you may return target creature card from your graveyard to your hand.
Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnToHandTargetEffect(), true);
Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnFromGraveyardToHandTargetEffect(), true);
ability.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD));
this.addAbility(ability);
}
private CadaverImp(final CadaverImp card) {

View file

@ -31,7 +31,7 @@ public final class DeathCultist extends CardImpl {
SimpleActivatedAbility ability = new SimpleActivatedAbility(Zone.BATTLEFIELD,
new LoseLifeTargetEffect(1),
new SacrificeSourceCost());
ability.addEffect(new GainLifeEffect(1));
ability.addEffect(new GainLifeEffect(1).concatBy("and"));
ability.addTarget(new TargetPlayer());
this.addAbility(ability);
}

View file

@ -35,7 +35,7 @@ public final class DeathlessAngel extends CardImpl {
// Flying
this.addAbility(FlyingAbility.getInstance());
// {W}{W}: Target creature is indestructible this turn.
Effect effect = new GainAbilityTargetEffect(IndestructibleAbility.getInstance(), Duration.EndOfTurn, "Target creature is indestructible this turn");
Effect effect = new GainAbilityTargetEffect(IndestructibleAbility.getInstance(), Duration.EndOfTurn);
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD,
effect, new ManaCostsImpl("{W}{W}"));
ability.addTarget(new TargetCreaturePermanent());

View file

@ -37,7 +37,7 @@ public final class DormantGomazoa extends CardImpl {
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new DontUntapInControllersUntapStepSourceEffect()));
// Whenever you become the target of a spell, you may untap Dormant Gomazoa.
this.addAbility(new BecomesTargetControllerSpellTriggeredAbility(new UntapSourceEffect(), true));
this.addAbility(new BecomesTargetControllerSpellTriggeredAbility(new UntapSourceEffect(), true).setTriggerPhrase("Whenever you become the target of a spell, "));
}
private DormantGomazoa(final DormantGomazoa card) {

View file

@ -1,8 +1,5 @@
package mage.cards.d;
import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.AttachEffect;
@ -17,6 +14,8 @@ import mage.constants.*;
import mage.target.TargetPermanent;
import mage.target.common.TargetCreaturePermanent;
import java.util.UUID;
/**
* @author Loki
*/
@ -31,12 +30,16 @@ public final class DrakeUmbra extends CardImpl {
TargetPermanent auraTarget = new TargetCreaturePermanent();
this.getSpellAbility().addTarget(auraTarget);
this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature));
Ability ability = new EnchantAbility(auraTarget.getTargetName());
this.addAbility(ability);
this.addAbility(new EnchantAbility(auraTarget.getTargetName()));
// Enchanted creature gets +3/+3 and has flying.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(3, 3, Duration.WhileOnBattlefield)));
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(FlyingAbility.getInstance(), AttachmentType.AURA)));
Ability ability = new SimpleStaticAbility(new BoostEnchantedEffect(
3, 3, Duration.WhileOnBattlefield
));
ability.addEffect(new GainAbilityAttachedEffect(
FlyingAbility.getInstance(), AttachmentType.AURA
).setText("and has flying"));
this.addAbility(ability);
// Totem armor
this.addAbility(new TotemArmorAbility());

View file

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

View file

@ -27,7 +27,7 @@ public final class EscapedNull extends CardImpl {
this.toughness = new MageInt(2);
this.addAbility(LifelinkAbility.getInstance());
this.addAbility(new BlocksOrBecomesBlockedSourceTriggeredAbility(new BoostSourceEffect(5, 0, Duration.EndOfTurn), false));
this.addAbility(new BlocksOrBecomesBlockedSourceTriggeredAbility(new BoostSourceEffect(5, 0, Duration.EndOfTurn).setText("it gets +5/+0 until end of turn"), false, false));
}
private EscapedNull(final EscapedNull card) {

View file

@ -23,7 +23,7 @@ public final class EssenceFeed extends CardImpl {
this.getSpellAbility().addEffect(new LoseLifeTargetEffect(3));
this.getSpellAbility().addEffect(new GainLifeEffect(3));
this.getSpellAbility().addEffect(new CreateTokenEffect(new EldraziSpawnToken(), 3));
this.getSpellAbility().addEffect(new CreateTokenEffect(new EldraziSpawnToken(), 3).concatBy("and"));
this.getSpellAbility().addTarget(new TargetPlayer());
}

View file

@ -45,7 +45,7 @@ class ExplosiveRevelationEffect extends OneShotEffect {
public ExplosiveRevelationEffect() {
super(Outcome.DrawCard);
this.staticText = "Choose any target. Reveal cards from the top of your library until you reveal a nonland card, {this} deals damage equal to that card's mana value to that permanent or player. Put the nonland card into your hand and the rest on the bottom of your library in any order";
this.staticText = "Choose any target. Reveal cards from the top of your library until you reveal a nonland card. {this} deals damage equal to that card's mana value to that permanent or player. Put the nonland card into your hand and the rest on the bottom of your library in any order";
}
public ExplosiveRevelationEffect(final ExplosiveRevelationEffect effect) {

View file

@ -21,7 +21,7 @@ public final class FleetingDistraction extends CardImpl {
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{U}");
this.getSpellAbility().addEffect(new BoostTargetEffect(-1, 0, Duration.EndOfTurn));
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1));
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1).concatBy("<br>"));
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
}

View file

@ -1,7 +1,5 @@
package mage.cards.f;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.mana.ManaCostsImpl;
@ -10,18 +8,19 @@ import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Duration;
import mage.constants.Zone;
import mage.constants.SubType;
import mage.filter.StaticFilters;
import java.util.UUID;
/**
*
* @author North
*/
public final class FrostwindInvoker extends CardImpl {
public FrostwindInvoker(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{U}");
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{U}");
this.subtype.add(SubType.MERFOLK);
this.subtype.add(SubType.WIZARD);
@ -29,7 +28,10 @@ public final class FrostwindInvoker extends CardImpl {
this.toughness = new MageInt(3);
this.addAbility(FlyingAbility.getInstance());
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new GainAbilityControlledEffect(FlyingAbility.getInstance(), Duration.EndOfTurn), new ManaCostsImpl("{8}")));
this.addAbility(new SimpleActivatedAbility(new GainAbilityControlledEffect(
FlyingAbility.getInstance(), Duration.EndOfTurn,
StaticFilters.FILTER_PERMANENT_CREATURES
), new ManaCostsImpl<>("{8}")));
}
private FrostwindInvoker(final FrostwindInvoker card) {
@ -41,4 +43,3 @@ public final class FrostwindInvoker extends CardImpl {
return new FrostwindInvoker(this);
}
}

View file

@ -20,7 +20,7 @@ import mage.target.common.TargetControlledPermanent;
*/
public final class HandOfEmrakul extends CardImpl {
private static final FilterControlledPermanent filter = new FilterControlledPermanent("four Eldrazi Spawn");
private static final FilterControlledPermanent filter = new FilterControlledPermanent("Eldrazi Spawn");
static {
filter.add(new NamePredicate("Eldrazi Spawn"));

View file

@ -1,7 +1,5 @@
package mage.cards.h;
import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.AttachEffect;
@ -16,26 +14,32 @@ import mage.constants.*;
import mage.target.TargetPermanent;
import mage.target.common.TargetCreaturePermanent;
import java.util.UUID;
/**
*
* @author Loki
*/
public final class HyenaUmbra extends CardImpl {
public HyenaUmbra(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{W}");
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{W}");
this.subtype.add(SubType.AURA);
// Enchant creature
TargetPermanent auraTarget = new TargetCreaturePermanent();
this.getSpellAbility().addTarget(auraTarget);
this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature));
Ability ability = new EnchantAbility(auraTarget.getTargetName());
this.addAbility(ability);
this.addAbility(new EnchantAbility(auraTarget.getTargetName()));
// Enchanted creature gets +1/+1 and has first strike.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(1, 1, Duration.WhileOnBattlefield)));
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(FirstStrikeAbility.getInstance(), AttachmentType.AURA)));
Ability ability = new SimpleStaticAbility(new BoostEnchantedEffect(
1, 1, Duration.WhileOnBattlefield
));
ability.addEffect(new GainAbilityAttachedEffect(
FirstStrikeAbility.getInstance(), AttachmentType.AURA
).setText("and has first strike"));
this.addAbility(ability);
// Totem armor
this.addAbility(new TotemArmorAbility());
}

View file

@ -25,7 +25,7 @@ import mage.target.targetpointer.FixedTarget;
*/
public final class InduceDespair extends CardImpl {
private static final FilterCreatureCard filter = new FilterCreatureCard("creature card from your hand");
private static final FilterCreatureCard filter = new FilterCreatureCard("a creature card from your hand");
public InduceDespair(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{2}{B}");

View file

@ -24,7 +24,7 @@ public final class IrresistiblePrey extends CardImpl {
// Draw a card.
this.getSpellAbility().addEffect(new MustBeBlockedByAtLeastOneTargetEffect(Duration.EndOfTurn));
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1));
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1).concatBy("<br>"));
}
private IrresistiblePrey(final IrresistiblePrey card) {

View file

@ -1,7 +1,5 @@
package mage.cards.i;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.OpponentSacrificesNonTokenPermanentTriggeredAbility;
import mage.abilities.effects.common.ReturnToBattlefieldUnderYourControlTargetEffect;
@ -13,8 +11,9 @@ import mage.constants.SubType;
import mage.filter.FilterPermanent;
import mage.filter.predicate.permanent.TokenPredicate;
import java.util.UUID;
/**
*
* @author jeffwadsworth
*/
public final class ItThatBetrays extends CardImpl {
@ -26,7 +25,7 @@ public final class ItThatBetrays extends CardImpl {
}
public ItThatBetrays(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{12}");
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{12}");
this.subtype.add(SubType.ELDRAZI);
this.power = new MageInt(11);
@ -36,7 +35,10 @@ public final class ItThatBetrays extends CardImpl {
this.addAbility(new AnnihilatorAbility(2));
// Whenever an opponent sacrifices a nontoken permanent, put that card onto the battlefield under your control.
this.addAbility(new OpponentSacrificesNonTokenPermanentTriggeredAbility(new ReturnToBattlefieldUnderYourControlTargetEffect()));
this.addAbility(new OpponentSacrificesNonTokenPermanentTriggeredAbility(
new ReturnToBattlefieldUnderYourControlTargetEffect()
.setText("put that card onto the battlefield under your control")
));
}
private ItThatBetrays(final ItThatBetrays card) {
@ -47,5 +49,4 @@ public final class ItThatBetrays extends CardImpl {
public ItThatBetrays copy() {
return new ItThatBetrays(this);
}
}

View file

@ -37,10 +37,10 @@ public final class KabiraVindicator extends LevelerCard {
this.addAbility(new LevelUpAbility(new ManaCostsImpl("{2}{W}")));
Abilities<Ability> abilities1 = new AbilitiesImpl<>();
abilities1.add(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostControlledEffect(1, 1, Duration.WhileOnBattlefield, StaticFilters.FILTER_PERMANENT_CREATURE, true)));
abilities1.add(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostControlledEffect(1, 1, Duration.WhileOnBattlefield, StaticFilters.FILTER_PERMANENT_CREATURES, true)));
Abilities<Ability> abilities2 = new AbilitiesImpl<>();
abilities2.add(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostControlledEffect(2, 2, Duration.WhileOnBattlefield, StaticFilters.FILTER_PERMANENT_CREATURE, true)));
abilities2.add(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostControlledEffect(2, 2, Duration.WhileOnBattlefield, StaticFilters.FILTER_PERMANENT_CREATURES, true)));
this.addAbilities(LevelerCardBuilder.construct(
new LevelerCardBuilder.LevelAbility(2, 4, abilities1, 3, 6),

View file

@ -20,7 +20,7 @@ public final class LastKiss extends CardImpl {
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{2}{B}");
this.getSpellAbility().addEffect(new DamageTargetEffect(2));
this.getSpellAbility().addEffect(new GainLifeEffect(2));
this.getSpellAbility().addEffect(new GainLifeEffect(2).concatBy("and"));
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
}

View file

@ -1,7 +1,5 @@
package mage.cards.l;
import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.costs.common.RevealTargetFromHandCost;
import mage.abilities.effects.OneShotEffect;
@ -9,25 +7,28 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Outcome;
import mage.filter.FilterCard;
import mage.filter.common.FilterCreatureCard;
import mage.game.Game;
import mage.players.Player;
import mage.target.common.TargetCardInHand;
import java.util.UUID;
/**
*
* @author jeffwadsworth
*/
public final class LivingDestiny extends CardImpl {
public LivingDestiny(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{3}{G}");
private static final FilterCard filter = new FilterCreatureCard("a creature card from your hand");
public LivingDestiny(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{3}{G}");
// As an additional cost to cast Living Destiny, reveal a creature card from your hand.
TargetCardInHand targetCard = new TargetCardInHand(new FilterCreatureCard("a creature card"));
TargetCardInHand targetCard = new TargetCardInHand(filter);
this.getSpellAbility().addCost(new RevealTargetFromHandCost(targetCard));
// You gain life equal to the revealed card's converted mana cost.
this.getSpellAbility().addEffect(new LivingDestinyEffect());
}
@ -46,7 +47,7 @@ class LivingDestinyEffect extends OneShotEffect {
public LivingDestinyEffect() {
super(Outcome.GainLife);
staticText = "You gain life equal to its mana value";
staticText = "You gain life equal to the revealed card's mana value";
}
public LivingDestinyEffect(LivingDestinyEffect effect) {
@ -70,5 +71,4 @@ class LivingDestinyEffect extends OneShotEffect {
public LivingDestinyEffect copy() {
return new LivingDestinyEffect(this);
}
}

View file

@ -1,8 +1,5 @@
package mage.cards.m;
import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.AttachEffect;
@ -17,6 +14,8 @@ import mage.constants.*;
import mage.target.TargetPermanent;
import mage.target.common.TargetCreaturePermanent;
import java.util.UUID;
/**
* @author Loki
*/
@ -26,17 +25,20 @@ public final class MammothUmbra extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{4}{W}");
this.subtype.add(SubType.AURA);
// Enchant creature
TargetPermanent auraTarget = new TargetCreaturePermanent();
this.getSpellAbility().addTarget(auraTarget);
this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature));
Ability ability = new EnchantAbility(auraTarget.getTargetName());
this.addAbility(ability);
this.addAbility(new EnchantAbility(auraTarget.getTargetName()));
// Enchanted creature gets +3/+3 and has vigilance.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(3, 3, Duration.WhileOnBattlefield)));
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(VigilanceAbility.getInstance(), AttachmentType.AURA)));
Ability ability = new SimpleStaticAbility(new BoostEnchantedEffect(
3, 3, Duration.WhileOnBattlefield
));
ability.addEffect(new GainAbilityAttachedEffect(
VigilanceAbility.getInstance(), AttachmentType.AURA
).setText("and has vigilance"));
this.addAbility(ability);
// Totem armor
this.addAbility(new TotemArmorAbility());

View file

@ -1,11 +1,9 @@
package mage.cards.m;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.effects.common.ReturnToHandTargetEffect;
import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect;
import mage.abilities.keyword.DefenderAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
@ -15,8 +13,9 @@ import mage.filter.FilterCard;
import mage.filter.predicate.Predicates;
import mage.target.common.TargetCardInYourGraveyard;
import java.util.UUID;
/**
*
* @author North
*/
public final class MnemonicWall extends CardImpl {
@ -30,14 +29,14 @@ public final class MnemonicWall extends CardImpl {
}
public MnemonicWall(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{U}");
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{U}");
this.subtype.add(SubType.WALL);
this.power = new MageInt(0);
this.toughness = new MageInt(4);
this.addAbility(DefenderAbility.getInstance());
Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnToHandTargetEffect(), true);
Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnFromGraveyardToHandTargetEffect(), true);
ability.addTarget(new TargetCardInYourGraveyard(filter));
this.addAbility(ability);
}

View file

@ -22,7 +22,7 @@ public final class Nighthaze extends CardImpl {
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{B}");
this.getSpellAbility().addEffect(new GainAbilityTargetEffect(new SwampwalkAbility(), Duration.EndOfTurn));
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1));
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1).concatBy("<br>"));
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
}

View file

@ -25,7 +25,7 @@ public final class PhantasmalAbomination extends CardImpl {
this.toughness = new MageInt(5);
this.addAbility(DefenderAbility.getInstance());
this.addAbility(new BecomesTargetTriggeredAbility(new SacrificeSourceEffect()));
this.addAbility(new BecomesTargetTriggeredAbility(new SacrificeSourceEffect().setText("sacrifice it")));
}
private PhantasmalAbomination(final PhantasmalAbomination card) {

View file

@ -45,7 +45,7 @@ class RealmsUnchartedEffect extends OneShotEffect {
public RealmsUnchartedEffect() {
super(Outcome.DrawCard);
this.staticText = "Search your library for four land cards with different names and reveal them. An opponent chooses two of those cards. Put the chosen cards into your graveyard and the rest into your hand. Then shuffle";
this.staticText = "Search your library for up to four land cards with different names and reveal them. An opponent chooses two of those cards. Put the chosen cards into your graveyard and the rest into your hand. Then shuffle";
}
public RealmsUnchartedEffect(final RealmsUnchartedEffect effect) {

View file

@ -20,7 +20,7 @@ public final class RepelTheDarkness extends CardImpl {
this.getSpellAbility().addEffect(new TapTargetEffect());
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1));
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1).concatBy("<br>"));
this.getSpellAbility().addTarget(new TargetCreaturePermanent(0, 2));
}

View file

@ -31,7 +31,7 @@ public final class SphinxOfMagosi extends CardImpl {
this.toughness = new MageInt(6);
this.addAbility(FlyingAbility.getInstance());
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(1), new ManaCostsImpl("{2}{U}"));
ability.addEffect(new AddCountersSourceEffect(CounterType.P1P1.createInstance()));
ability.addEffect(new AddCountersSourceEffect(CounterType.P1P1.createInstance()).concatBy(", then"));
this.addAbility(ability);
}

View file

@ -1,7 +1,5 @@
package mage.cards.s;
import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.AttachEffect;
@ -16,26 +14,31 @@ import mage.constants.*;
import mage.target.TargetPermanent;
import mage.target.common.TargetCreaturePermanent;
import java.util.UUID;
/**
*
* @author Loki
*/
public final class SpiderUmbra extends CardImpl {
public SpiderUmbra(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{G}");
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{G}");
this.subtype.add(SubType.AURA);
// Enchant creature
TargetPermanent auraTarget = new TargetCreaturePermanent();
this.getSpellAbility().addTarget(auraTarget);
this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature));
Ability ability = new EnchantAbility(auraTarget.getTargetName());
this.addAbility(ability);
this.addAbility(new EnchantAbility(auraTarget.getTargetName()));
// Enchanted creature gets +1/+1 and has reach.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(1, 1, Duration.WhileOnBattlefield)));
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(ReachAbility.getInstance(), AttachmentType.AURA)));
Ability ability = new SimpleStaticAbility(new BoostEnchantedEffect(
1, 1, Duration.WhileOnBattlefield
));
ability.addEffect(new GainAbilityAttachedEffect(
ReachAbility.getInstance(), AttachmentType.AURA
).setText("and has reach"));
this.addAbility(ability);
this.addAbility(new TotemArmorAbility());
}

View file

@ -62,7 +62,7 @@ class SplinterTwinEffect extends OneShotEffect {
public SplinterTwinEffect() {
super(Outcome.PutCreatureInPlay);
this.staticText = "Create a token that's a copy of this creature, except it has haste. Exile it at the beginning of the next end step";
this.staticText = "Create a token that's a copy of this creature, except it has haste. Exile that token at the beginning of the next end step";
}
public SplinterTwinEffect(final SplinterTwinEffect effect) {

View file

@ -1,34 +1,34 @@
package mage.cards.s;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.continuous.BoostControlledEffect;
import mage.abilities.effects.common.continuous.BoostAllEffect;
import mage.abilities.keyword.DefenderAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Duration;
import mage.constants.Zone;
import mage.constants.SubType;
import mage.constants.TargetController;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.mageobject.AbilityPredicate;
import java.util.UUID;
/**
*
* @author North
*/
public final class StalwartShieldBearers extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with defender");
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creatures you control with defender");
static {
filter.add(TargetController.YOU.getControllerPredicate());
filter.add(new AbilityPredicate(DefenderAbility.class));
}
public StalwartShieldBearers(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{W}");
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{W}");
this.subtype.add(SubType.HUMAN);
this.subtype.add(SubType.SOLDIER);
@ -36,7 +36,9 @@ public final class StalwartShieldBearers extends CardImpl {
this.toughness = new MageInt(3);
this.addAbility(DefenderAbility.getInstance());
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostControlledEffect(0, 2, Duration.WhileOnBattlefield, filter, true)));
this.addAbility(new SimpleStaticAbility(new BoostAllEffect(
0, 2, Duration.WhileOnBattlefield, filter, true
)));
}
private StalwartShieldBearers(final StalwartShieldBearers card) {

View file

@ -1,7 +1,5 @@
package mage.cards.s;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility;
import mage.abilities.common.SpellCastControllerTriggeredAbility;
@ -13,35 +11,32 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.counters.CounterType;
import mage.filter.FilterSpell;
import mage.filter.predicate.Predicates;
import mage.filter.StaticFilters;
import java.util.UUID;
/**
*
* @author jeffwadsworth
*/
public final class SurrakarSpellblade extends CardImpl {
private static final FilterSpell filter = new FilterSpell("instant or sorcery card");
static {
filter.add(Predicates.or(
CardType.INSTANT.getPredicate(),
CardType.SORCERY.getPredicate()));
}
public SurrakarSpellblade(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{U}{U}");
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}{U}");
this.subtype.add(SubType.SURRAKAR);
this.power = new MageInt(2);
this.toughness = new MageInt(1);
// Whenever you cast an instant or sorcery spell, you may put a charge counter on Surrakar Spellblade.
this.addAbility(new SpellCastControllerTriggeredAbility(new AddCountersSourceEffect(CounterType.CHARGE.createInstance()), filter, true));
this.addAbility(new SpellCastControllerTriggeredAbility(
new AddCountersSourceEffect(CounterType.CHARGE.createInstance()),
StaticFilters.FILTER_SPELL_AN_INSTANT_OR_SORCERY, true
));
// Whenever Surrakar Spellblade deals combat damage to a player, you may draw X cards, where X is the number of charge counters on it.
this.addAbility(new DealsCombatDamageToAPlayerTriggeredAbility(new DrawCardSourceControllerEffect(new CountersSourceCount(CounterType.CHARGE)), true));
this.addAbility(new DealsCombatDamageToAPlayerTriggeredAbility(new DrawCardSourceControllerEffect(
new CountersSourceCount(CounterType.CHARGE)
).setText("draw X cards, where X is the number of charge counters on it"), true));
}
private SurrakarSpellblade(final SurrakarSpellblade card) {

View file

@ -17,7 +17,7 @@ import mage.filter.common.FilterCreaturePermanent;
*/
public final class TimeOfHeroes extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Each creature you control with a level counter");
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Each creature you control with a level counter on it");
static {
filter.add(TargetController.YOU.getControllerPredicate());

View file

@ -33,7 +33,7 @@ public final class TotemGuideHartebeest extends CardImpl {
this.toughness = new MageInt(5);
// When Totem-Guide Hartebeest enters the battlefield, you may search your library for an Aura card, reveal it, put it into your hand, then shuffle your library.
this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInHandEffect(new TargetCardInLibrary(filter), true, false), true));
this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInHandEffect(new TargetCardInLibrary(filter), true, true), true));
}
private TotemGuideHartebeest(final TotemGuideHartebeest card) {

View file

@ -25,7 +25,7 @@ public final class ValakutFireboar extends CardImpl {
this.power = new MageInt(1);
this.toughness = new MageInt(7);
this.addAbility(new AttacksTriggeredAbility(new SwitchPowerToughnessSourceEffect(Duration.EndOfTurn), false));
this.addAbility(new AttacksTriggeredAbility(new SwitchPowerToughnessSourceEffect(Duration.EndOfTurn).setText("switch its power and toughness until end of turn"), false));
}
private ValakutFireboar(final ValakutFireboar card) {

View file

@ -62,7 +62,7 @@ public class VerifyCardDataTest {
private static final Logger logger = Logger.getLogger(VerifyCardDataTest.class);
private static final String FULL_ABILITIES_CHECK_SET_CODE = "WWK"; // check all abilities and output cards with wrong abilities texts;
private static final String FULL_ABILITIES_CHECK_SET_CODE = "ROE"; // 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 ONLY_TEXT = false; // use when checking text locally, suppresses unnecessary checks and output messages

View file

@ -129,7 +129,7 @@ public class CreateTokenEffect extends OneShotEffect {
if (tapped && !attacking) {
sb.append("tapped ");
}
sb.append(token.getDescription());
sb.append(token.getDescription().replace("token. It has", "tokens. They have"));
if (token.getDescription().endsWith("token")) {
sb.append("s");
}

View file

@ -38,7 +38,7 @@ public class TotemArmorAbility extends SimpleStaticAbility {
@Override
public String getRule() {
return "Totem armor <i>(If enchanted creature would be destroyed, instead remove all damage from it and destroy this Aura.)</i>";
return "totem armor <i>(If enchanted creature would be destroyed, instead remove all damage from it and destroy this Aura.)</i>";
}
}

View file

@ -18,7 +18,7 @@ import java.util.Arrays;
public final class EldraziSpawnToken extends TokenImpl {
public EldraziSpawnToken() {
super("Eldrazi Spawn", "0/1 colorless Eldrazi Spawn creature with \"Sacrifice this creature: Add {C}.\"");
super("Eldrazi Spawn", "0/1 colorless Eldrazi Spawn creature token. It has \"Sacrifice this creature: Add {C}.\"");
cardType.add(CardType.CREATURE);
subtype.add(SubType.ELDRAZI);
subtype.add(SubType.SPAWN);