more unrelated text fixes (#10761)

* some text fixes [LTR] [LTC] [CMM]

* another batch of text fixes

* followup fixes

* unrelated cleanup

* fix corresponding ability text in test
This commit is contained in:
xenohedron 2023-08-05 20:53:43 -04:00 committed by GitHub
parent fa77261e3a
commit 127b7be9b0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
67 changed files with 112 additions and 128 deletions

View file

@ -7,7 +7,6 @@ import mage.abilities.effects.common.CounterTargetEffect;
import mage.abilities.hint.common.RaidHint; import mage.abilities.hint.common.RaidHint;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.AbilityWord;
import mage.constants.CardType; import mage.constants.CardType;
import mage.target.TargetSpell; import mage.target.TargetSpell;
import mage.watchers.common.PlayerAttackedWatcher; import mage.watchers.common.PlayerAttackedWatcher;
@ -24,7 +23,7 @@ public final class AdmiralsOrder extends CardImpl {
// Raid - If you attacked with a creature this turn, you may pay {U} rather than pay this spell's mana cost. // Raid - If you attacked with a creature this turn, you may pay {U} rather than pay this spell's mana cost.
this.addAbility(new AlternativeCostSourceAbility(new ManaCostsImpl<>("{U}"), RaidCondition.instance, this.addAbility(new AlternativeCostSourceAbility(new ManaCostsImpl<>("{U}"), RaidCondition.instance,
"<br/><i>Raid</i> &mdash; If you attacked this turn, you may pay {U} rather than pay this spell's mana cost"), "<br/><i>Raid</i> &mdash; If you attacked this turn, you may pay {U} rather than pay this spell's mana cost."),
new PlayerAttackedWatcher()); new PlayerAttackedWatcher());
// Counter target spell. // Counter target spell.
this.getSpellAbility().addEffect(new CounterTargetEffect()); this.getSpellAbility().addEffect(new CounterTargetEffect());

View file

@ -49,7 +49,8 @@ public final class AdmonitionAngel extends CardImpl {
this.addAbility(ability); this.addAbility(ability);
// When Admonition Angel leaves the battlefield, return all cards exiled with it to the battlefield under their owners' control. // When Admonition Angel leaves the battlefield, return all cards exiled with it to the battlefield under their owners' control.
Ability ability2 = new LeavesBattlefieldTriggeredAbility(new ReturnFromExileForSourceEffect(Zone.BATTLEFIELD), false); Ability ability2 = new LeavesBattlefieldTriggeredAbility(new ReturnFromExileForSourceEffect(Zone.BATTLEFIELD)
.setText("return all cards exiled with it to the battlefield under their owners' control"), false);
this.addAbility(ability2); this.addAbility(ability2);
} }

View file

@ -44,9 +44,7 @@ public final class AishaOfSparksAndSmoke extends CardImpl {
), new ManaCostsImpl<>("{R/W}"))); ), new ManaCostsImpl<>("{R/W}")));
// ShoryukenWhenever Ken deals combat damage, you may cast a sorcery spell from your hand with mana value less than or equal to that damage without paying its mana cost. // ShoryukenWhenever Ken deals combat damage, you may cast a sorcery spell from your hand with mana value less than or equal to that damage without paying its mana cost.
this.addAbility(new DealsCombatDamageTriggeredAbility( this.addAbility(new DealsCombatDamageTriggeredAbility(new AishaOfSparksAndSmokeEffect(), false));
new AishaOfSparksAndSmokeEffect(), false
).withFlavorWord("Shoryuken"));
} }
private AishaOfSparksAndSmoke(final AishaOfSparksAndSmoke card) { private AishaOfSparksAndSmoke(final AishaOfSparksAndSmoke card) {

View file

@ -63,7 +63,7 @@ class AminatousAuguryEffect extends OneShotEffect {
staticText = "Exile the top eight cards of your library. " staticText = "Exile the top eight cards of your library. "
+ "You may put a land card from among them onto the battlefield. " + "You may put a land card from among them onto the battlefield. "
+ "Until end of turn, for each nonland card type, " + "Until end of turn, for each nonland card type, "
+ "you may cast a card of that type from among the exiled cards without paying its mana cost."; + "you may cast a spell of that type from among the exiled cards without paying its mana cost.";
} }
public AminatousAuguryEffect(final AminatousAuguryEffect effect) { public AminatousAuguryEffect(final AminatousAuguryEffect effect) {

View file

@ -25,7 +25,8 @@ public final class ArborArmament extends CardImpl {
// Put a +1/+1 counter on target creature. That creature gains reach until end of turn. // Put a +1/+1 counter on target creature. That creature gains reach until end of turn.
this.getSpellAbility().addTarget(new TargetCreaturePermanent()); this.getSpellAbility().addTarget(new TargetCreaturePermanent());
this.getSpellAbility().addEffect(new AddCountersTargetEffect(CounterType.P1P1.createInstance())); this.getSpellAbility().addEffect(new AddCountersTargetEffect(CounterType.P1P1.createInstance()));
this.getSpellAbility().addEffect(new GainAbilityTargetEffect(ReachAbility.getInstance(), Duration.EndOfTurn)); this.getSpellAbility().addEffect(new GainAbilityTargetEffect(ReachAbility.getInstance(), Duration.EndOfTurn)
.setText("That creature gains reach until end of turn"));
} }
private ArborArmament(final ArborArmament card) { private ArborArmament(final ArborArmament card) {

View file

@ -22,7 +22,7 @@ import mage.target.common.TargetCardInYourGraveyard;
*/ */
public final class AtzocanSeer extends CardImpl { public final class AtzocanSeer extends CardImpl {
private static final FilterCard filter = new FilterCard("Dinosaur from your graveyard"); private static final FilterCard filter = new FilterCard("Dinosaur card from your graveyard");
static { static {
filter.add(SubType.DINOSAUR.getPredicate()); filter.add(SubType.DINOSAUR.getPredicate());

View file

@ -118,7 +118,7 @@ enum CavernHoardDragonCount implements DynamicValue {
@Override @Override
public String getMessage() { public String getMessage() {
return "greatest number of artifacts an opponent controls"; return "the greatest number of artifacts an opponent controls";
} }
public static Hint getHint() { public static Hint getHint() {

View file

@ -19,7 +19,7 @@ import mage.filter.predicate.mageobject.AnotherPredicate;
*/ */
public final class CinderGiant extends CardImpl { public final class CinderGiant extends CardImpl {
private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("each other creature you control"); private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("other creature you control");
static { static {
filter.add(AnotherPredicate.instance); filter.add(AnotherPredicate.instance);
} }

View file

@ -29,7 +29,7 @@ import java.util.UUID;
*/ */
public final class CrownOfGondor extends CardImpl { public final class CrownOfGondor extends CardImpl {
private final static DynamicValue xValue = new PermanentsOnBattlefieldCount(StaticFilters.FILTER_CONTROLLED_CREATURE); private static final DynamicValue xValue = new PermanentsOnBattlefieldCount(StaticFilters.FILTER_CONTROLLED_CREATURE);
public CrownOfGondor(UUID ownerId, CardSetInfo setInfo) { public CrownOfGondor(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{3}"); super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{3}");
@ -52,7 +52,7 @@ public final class CrownOfGondor extends CardImpl {
// Equip {4}. This ability costs {3} less to activate if you're the monarch. // Equip {4}. This ability costs {3} less to activate if you're the monarch.
EquipAbility equip = new EquipAbility(4, false); EquipAbility equip = new EquipAbility(4, false);
equip.setCostReduceText("This ability costs {3} less to activate if you're the monarch"); equip.setCostReduceText("This ability costs {3} less to activate if you're the monarch.");
equip.setCostAdjuster(CrownOfGondorAdjuster.instance); equip.setCostAdjuster(CrownOfGondorAdjuster.instance);
this.addAbility(equip); this.addAbility(equip);
} }

View file

@ -27,7 +27,7 @@ public final class CunningStrike extends CardImpl {
this.getSpellAbility().addTarget(new TargetCreaturePermanent()); this.getSpellAbility().addTarget(new TargetCreaturePermanent());
Effect effect = new DamageTargetEffect(StaticValue.get(2), true, "", true); Effect effect = new DamageTargetEffect(StaticValue.get(2), true, "", true);
effect.setTargetPointer(new SecondTargetPointer()); effect.setTargetPointer(new SecondTargetPointer());
effect.setText("and 2 damage to target player"); effect.setText("and 2 damage to target player or planeswalker");
this.getSpellAbility().addEffect(effect); this.getSpellAbility().addEffect(effect);
this.getSpellAbility().addTarget(new TargetPlayerOrPlaneswalker()); this.getSpellAbility().addTarget(new TargetPlayerOrPlaneswalker());
// Draw a card. // Draw a card.

View file

@ -82,6 +82,6 @@ class DamiaSageOfStoneTriggeredAbility extends BeginningOfUpkeepTriggeredAbility
@Override @Override
public String getRule() { public String getRule() {
return "At the beginning of your upkeep, if you have fewer than seven cards in hand, draw cards equal to the difference"; return "At the beginning of your upkeep, if you have fewer than seven cards in hand, draw cards equal to the difference.";
} }
} }

View file

@ -51,7 +51,7 @@ public final class DarkIntimations extends CardImpl {
this.addAbility(new SpellCastControllerTriggeredAbility( this.addAbility(new SpellCastControllerTriggeredAbility(
Zone.GRAVEYARD, new DarkIntimationsGraveyardEffect(), Zone.GRAVEYARD, new DarkIntimationsGraveyardEffect(),
filter, false, SetTargetPointer.SPELL filter, false, SetTargetPointer.SPELL
)); ).setTriggerPhrase("When you cast a Bolas planeswalker spell, "));
} }
private DarkIntimations(final DarkIntimations card) { private DarkIntimations(final DarkIntimations card) {

View file

@ -1,4 +1,3 @@
package mage.cards.d; package mage.cards.d;
import java.util.UUID; import java.util.UUID;
@ -32,7 +31,7 @@ public final class DeepglowSkate extends CardImpl {
this.toughness = new MageInt(3); this.toughness = new MageInt(3);
// When Deepglow Skate enters the battlefield, double the number of each kind of counter on any number of target permanents. // When Deepglow Skate enters the battlefield, double the number of each kind of counter on any number of target permanents.
Ability ability = new EntersBattlefieldTriggeredAbility(new DeepglowSkateEffect(), true); Ability ability = new EntersBattlefieldTriggeredAbility(new DeepglowSkateEffect(), false);
ability.addTarget(new TargetPermanent(0, Integer.MAX_VALUE, new FilterPermanent(), false)); ability.addTarget(new TargetPermanent(0, Integer.MAX_VALUE, new FilterPermanent(), false));
this.addAbility(ability); this.addAbility(ability);
} }
@ -51,7 +50,7 @@ class DeepglowSkateEffect extends OneShotEffect {
public DeepglowSkateEffect() { public DeepglowSkateEffect() {
super(Outcome.Benefit); super(Outcome.Benefit);
this.staticText = "{this} double the number of each kind of counter on any number of target permanents"; this.staticText = "double the number of each kind of counter on any number of target permanents";
} }
public DeepglowSkateEffect(final DeepglowSkateEffect effect) { public DeepglowSkateEffect(final DeepglowSkateEffect effect) {

View file

@ -41,7 +41,7 @@ public final class Downdraft extends CardImpl {
this.addAbility(ability); this.addAbility(ability);
// Sacrifice Downdraft: Downdraft deals 2 damage to each creature with flying. // Sacrifice Downdraft: Downdraft deals 2 damage to each creature with flying.
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageAllEffect(2, filter), new SacrificeSourceCost())); this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageAllEffect(2, "it", filter), new SacrificeSourceCost()));
} }
private Downdraft(final Downdraft card) { private Downdraft(final Downdraft card) {

View file

@ -25,7 +25,7 @@ public final class EnterTheUnknown extends CardImpl {
this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent()); this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent());
// You may play an additional land this turn. // You may play an additional land this turn.
this.getSpellAbility().addEffect(new PlayAdditionalLandsControllerEffect(1, Duration.EndOfTurn)); this.getSpellAbility().addEffect(new PlayAdditionalLandsControllerEffect(1, Duration.EndOfTurn).concatBy("<br>"));
} }

View file

@ -1,4 +1,3 @@
package mage.cards.f; package mage.cards.f;
import java.util.UUID; import java.util.UUID;
@ -9,7 +8,7 @@ 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.filter.common.FilterCreaturePermanent; import mage.filter.StaticFilters;
/** /**
* *
@ -26,7 +25,7 @@ public final class FalseProphet extends CardImpl {
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
// When False Prophet dies, exile all creatures. // When False Prophet dies, exile all creatures.
this.addAbility(new DiesSourceTriggeredAbility(new ExileAllEffect(new FilterCreaturePermanent()))); this.addAbility(new DiesSourceTriggeredAbility(new ExileAllEffect(StaticFilters.FILTER_PERMANENT_CREATURES)));
} }
private FalseProphet(final FalseProphet card) { private FalseProphet(final FalseProphet card) {

View file

@ -39,7 +39,7 @@ public final class FireWhip extends CardImpl {
// Enchanted creature has "{t}: This creature deals 1 damage to any target." // Enchanted creature has "{t}: This creature deals 1 damage to any target."
Ability ability1 = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(1), new TapSourceCost()); Ability ability1 = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(1), new TapSourceCost());
ability1.addTarget(new TargetAnyTarget()); ability1.addTarget(new TargetAnyTarget());
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(ability1, AttachmentType.AURA, Duration.WhileOnBattlefield, "Enchanted creature has \"{t}: This creature deals 1 damage to any target.\""))); this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(ability1, AttachmentType.AURA, Duration.WhileOnBattlefield, "Enchanted creature has \"{T}: This creature deals 1 damage to any target.\"")));
// Sacrifice Fire Whip: Fire Whip deals 1 damage to any target. // Sacrifice Fire Whip: Fire Whip deals 1 damage to any target.
Ability ability2 = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(1), new SacrificeSourceCost()); Ability ability2 = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(1), new SacrificeSourceCost());
ability2.addTarget(new TargetAnyTarget()); ability2.addTarget(new TargetAnyTarget());

View file

@ -61,7 +61,7 @@ class FirestormEffect extends OneShotEffect {
public FirestormEffect() { public FirestormEffect() {
super(Outcome.Benefit); super(Outcome.Benefit);
staticText = "{this} deals X damage to each of X target creatures and/or players"; staticText = "{this} deals X damage to each of X targets";
} }
public FirestormEffect(final FirestormEffect effect) { public FirestormEffect(final FirestormEffect effect) {

View file

@ -1,4 +1,3 @@
package mage.cards.f; package mage.cards.f;
import java.util.UUID; import java.util.UUID;
@ -23,8 +22,10 @@ public final class FitOfRage extends CardImpl {
// Target creature gets +3/+3 and gains first strike until end of turn. // Target creature gets +3/+3 and gains first strike until end of turn.
this.getSpellAbility().addTarget(new TargetCreaturePermanent()); this.getSpellAbility().addTarget(new TargetCreaturePermanent());
this.getSpellAbility().addEffect(new BoostTargetEffect(3, 3, Duration.EndOfTurn)); this.getSpellAbility().addEffect(new BoostTargetEffect(3, 3, Duration.EndOfTurn)
this.getSpellAbility().addEffect(new GainAbilityTargetEffect(FirstStrikeAbility.getInstance(), Duration.EndOfTurn)); .setText("target creature gets +3/+3"));
this.getSpellAbility().addEffect(new GainAbilityTargetEffect(FirstStrikeAbility.getInstance(), Duration.EndOfTurn)
.setText("and gains first strike until end of turn"));
} }
private FitOfRage(final FitOfRage card) { private FitOfRage(final FitOfRage card) {

View file

@ -37,7 +37,7 @@ public final class FlamekinVillage extends CardImpl {
super(ownerId,setInfo,new CardType[]{CardType.LAND},""); super(ownerId,setInfo,new CardType[]{CardType.LAND},"");
// As Flamekin Village enters the battlefield, you may reveal an Elemental card from your hand. If you don't, Flamekin Village enters the battlefield tapped. // As Flamekin Village enters the battlefield, you may reveal an Elemental card from your hand. If you don't, Flamekin Village enters the battlefield tapped.
this.addAbility(new AsEntersBattlefieldAbility(new TapSourceUnlessPaysEffect(new RevealTargetFromHandCost(new TargetCardInHand(filter))), "you may reveal a Elemental card from your hand. If you don't, {this} enters the battlefield tapped")); this.addAbility(new AsEntersBattlefieldAbility(new TapSourceUnlessPaysEffect(new RevealTargetFromHandCost(new TargetCardInHand(filter))), "you may reveal an Elemental card from your hand. If you don't, {this} enters the battlefield tapped"));
// {tap}: Add {R}. // {tap}: Add {R}.
this.addAbility(new RedManaAbility()); this.addAbility(new RedManaAbility());

View file

@ -21,7 +21,6 @@ import mage.filter.predicate.permanent.ControllerIdPredicate;
import mage.game.Game; import mage.game.Game;
import mage.game.combat.CombatGroup; import mage.game.combat.CombatGroup;
import mage.game.events.GameEvent; import mage.game.events.GameEvent;
import mage.game.events.GameEvent.EventType;
import mage.game.permanent.Permanent; import mage.game.permanent.Permanent;
import mage.target.Target; import mage.target.Target;
import mage.target.TargetPermanent; import mage.target.TargetPermanent;
@ -101,6 +100,6 @@ class GoblinVandalTriggeredAbility extends TriggeredAbilityImpl {
@Override @Override
public String getRule() { public String getRule() {
return "Whenever {this} attacks and isn't blocked, you may pay {R}. If you do, destroy target artifact defending player controls and {this} assigns no combat damage this turn"; return "Whenever {this} attacks and isn't blocked, you may pay {R}. If you do, destroy target artifact defending player controls and {this} assigns no combat damage this turn.";
} }
} }

View file

@ -35,7 +35,7 @@ public final class GripOfPhyresis extends CardImpl {
// Gain control of target Equipment, then create a 0/0 black Germ creature token and attach that Equipment to it. // Gain control of target Equipment, then create a 0/0 black Germ creature token and attach that Equipment to it.
GainControlTargetEffect effect = new GainControlTargetEffect(Duration.EndOfGame, true); GainControlTargetEffect effect = new GainControlTargetEffect(Duration.EndOfGame, true);
effect.setText("Gain control of target equipment"); effect.setText("Gain control of target Equipment");
this.getSpellAbility().addEffect(effect); this.getSpellAbility().addEffect(effect);
Target targetEquipment = new TargetPermanent(filter); Target targetEquipment = new TargetPermanent(filter);
this.getSpellAbility().addTarget(targetEquipment); this.getSpellAbility().addTarget(targetEquipment);
@ -56,6 +56,7 @@ class GripOfPhyresisEffect extends CreateTokenEffect {
GripOfPhyresisEffect() { GripOfPhyresisEffect() {
super(new PhyrexianGermToken()); super(new PhyrexianGermToken());
staticText = ", then " + staticText + " and attach that Equipment to it";
} }
GripOfPhyresisEffect(final GripOfPhyresisEffect effect) { GripOfPhyresisEffect(final GripOfPhyresisEffect effect) {

View file

@ -27,7 +27,9 @@ public final class HarvestWurm extends CardImpl {
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
// When Harvest Wurm enters the battlefield, sacrifice it unless you return a basic land card from your graveyard to your hand. // When Harvest Wurm enters the battlefield, sacrifice it unless you return a basic land card from your graveyard to your hand.
this.addAbility(new EntersBattlefieldTriggeredAbility(new SacrificeSourceUnlessPaysEffect(new ReturnToHandFromGraveyardCost(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_BASIC_LAND))))); TargetCardInYourGraveyard target = new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_BASIC_LAND_A);
target.setNotTarget(true);
this.addAbility(new EntersBattlefieldTriggeredAbility(new SacrificeSourceUnlessPaysEffect(new ReturnToHandFromGraveyardCost(target))));
} }
private HarvestWurm(final HarvestWurm card) { private HarvestWurm(final HarvestWurm card) {

View file

@ -20,7 +20,7 @@ public final class HauntingMisery extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{1}{B}{B}"); super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{1}{B}{B}");
// As an additional cost to cast Haunting Misery, exile X creature cards from your graveyard. // As an additional cost to cast Haunting Misery, exile X creature cards from your graveyard.
this.getSpellAbility().addCost(new ExileXFromYourGraveCost(StaticFilters.FILTER_CARD_CREATURE)); this.getSpellAbility().addCost(new ExileXFromYourGraveCost(StaticFilters.FILTER_CARD_CREATURES_YOUR_GRAVEYARD));
// Haunting Misery deals X damage to target player. // Haunting Misery deals X damage to target player.
this.getSpellAbility().addTarget(new TargetPlayerOrPlaneswalker()); this.getSpellAbility().addTarget(new TargetPlayerOrPlaneswalker());

View file

@ -58,7 +58,7 @@ class ImmardTheStormcleaverEffect extends OneShotEffect {
ImmardTheStormcleaverEffect() { ImmardTheStormcleaverEffect() {
super(Outcome.Benefit); super(Outcome.Benefit);
staticText = "put a charge counter on him or remove one from him. When you remove a counter this way, " staticText = "put a charge counter on it or remove one from it. When you remove a counter this way, "
+ CardUtil.getTextWithFirstCharLowerCase(ability.getRule()); + CardUtil.getTextWithFirstCharLowerCase(ability.getRule());
} }
@ -90,7 +90,7 @@ class ImmardTheStormcleaverEffect extends OneShotEffect {
return true; return true;
} }
private static final ReflexiveTriggeredAbility makeAbility() { private static ReflexiveTriggeredAbility makeAbility() {
ReflexiveTriggeredAbility ability = new ReflexiveTriggeredAbility( ReflexiveTriggeredAbility ability = new ReflexiveTriggeredAbility(
new DamageTargetEffect(4), false new DamageTargetEffect(4), false
); );
@ -101,7 +101,7 @@ class ImmardTheStormcleaverEffect extends OneShotEffect {
mode.addEffect(new GainAbilitySourceEffect( mode.addEffect(new GainAbilitySourceEffect(
IndestructibleAbility.getInstance(), Duration.EndOfTurn IndestructibleAbility.getInstance(), Duration.EndOfTurn
).setText("and indestructible until end of turn")); ).setText("and indestructible until end of turn"));
ability.withFirstModeFlavorWord("Sonic Boom").addMode(mode.withFlavorWord("Flash Kick")); ability.addMode(mode);
return ability; return ability;
} }
} }

View file

@ -50,7 +50,7 @@ class InducedAmnesiaExileEffect extends OneShotEffect {
InducedAmnesiaExileEffect() { InducedAmnesiaExileEffect() {
super(Outcome.Detriment); super(Outcome.Detriment);
this.staticText = "target player exiles all the cards in their hand face down, then draws that many cards"; this.staticText = "target player exiles all cards from their hand face down, then draws that many cards";
} }
private InducedAmnesiaExileEffect(final InducedAmnesiaExileEffect effect) { private InducedAmnesiaExileEffect(final InducedAmnesiaExileEffect effect) {

View file

@ -27,7 +27,7 @@ public final class JadelightRanger extends CardImpl {
// When Jadelight Ranger enters the battlefield, it explores, then it explores again. // When Jadelight Ranger enters the battlefield, it explores, then it explores again.
Ability ability = new EntersBattlefieldTriggeredAbility(new ExploreSourceEffect(false, "it"), false); Ability ability = new EntersBattlefieldTriggeredAbility(new ExploreSourceEffect(false, "it"), false);
ability.addEffect(new ExploreSourceEffect().setText(", then it explores again. (Reveal the top card of your library. Put that card into your hand if it's a land. Otherwise, put a +1/+1 counter on this creature, then put the card back or put it into your graveyard. Then repeat this process.) ")); ability.addEffect(new ExploreSourceEffect().setText(", then it explores again. <i>(Reveal the top card of your library. Put that card into your hand if it's a land. Otherwise, put a +1/+1 counter on this creature, then put the card back or put it into your graveyard. Then repeat this process.)</i>"));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -36,7 +36,7 @@ public final class LeoninBladetrap extends CardImpl {
// Flash // Flash
this.addAbility(FlashAbility.getInstance()); this.addAbility(FlashAbility.getInstance());
// {2}, Sacrifice Leonin Bladetrap: Leonin Bladetrap deals 2 damage to each attacking creature without flying. // {2}, Sacrifice Leonin Bladetrap: Leonin Bladetrap deals 2 damage to each attacking creature without flying.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageAllEffect(2, filter), new GenericManaCost(2)); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageAllEffect(2, "it", filter), new GenericManaCost(2));
ability.addCost(new SacrificeSourceCost()); ability.addCost(new SacrificeSourceCost());
this.addAbility(ability); this.addAbility(ability);

View file

@ -1,4 +1,3 @@
package mage.cards.l; package mage.cards.l;
import java.util.UUID; import java.util.UUID;
@ -14,7 +13,6 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.TargetController; import mage.constants.TargetController;
import mage.constants.Zone;
/** /**
* *
@ -37,7 +35,7 @@ public final class LightningShrieker extends CardImpl {
// At the beginning of the end step, Lightning Shrieker's owner shuffles it into their library. // At the beginning of the end step, Lightning Shrieker's owner shuffles it into their library.
Effect effect = new ShuffleIntoLibrarySourceEffect(); Effect effect = new ShuffleIntoLibrarySourceEffect();
effect.setText("{this}'s owner shuffles it into their library."); effect.setText("{this}'s owner shuffles it into their library.");
this.addAbility(new BeginningOfEndStepTriggeredAbility(Zone.BATTLEFIELD, effect, TargetController.ANY, null, false)); this.addAbility(new BeginningOfEndStepTriggeredAbility(effect, TargetController.NEXT, false));
} }
private LightningShrieker(final LightningShrieker card) { private LightningShrieker(final LightningShrieker card) {

View file

@ -50,16 +50,13 @@ public final class LobeliaDefenderOfBagEnd extends CardImpl {
// {T}, Sacrifice an artifact: Choose one -- // {T}, Sacrifice an artifact: Choose one --
// * Until end of turn, you may play a card exiled with Lobelia without paying its mana cost. // * Until end of turn, you may play a card exiled with Lobelia without paying its mana cost.
// * Each opponent loses 2 life and you gain 2 life. // * Each opponent loses 2 life and you gain 2 life.
Ability ability = new SimpleActivatedAbility( Ability ability = new SimpleActivatedAbility(new LobeliaDefenderOfBagEndPlayFromExileEffect(), new TapSourceCost());
new LobeliaDefenderOfBagEndPlayFromExileEffect(), ability.addCost(new SacrificeTargetCost(StaticFilters.FILTER_CONTROLLED_PERMANENT_ARTIFACT_AN));
new SacrificeTargetCost(StaticFilters.FILTER_CONTROLLED_PERMANENT_ARTIFACT_AN)
);
ability.addCost(new TapSourceCost());
ability.addWatcher(new LobeliaDefenderOfBagEndWatcher()); ability.addWatcher(new LobeliaDefenderOfBagEndWatcher());
ability.addMode(new Mode( ability.addMode(new Mode(
new LoseLifeOpponentsEffect(2) new LoseLifeOpponentsEffect(2)
).addEffect(new GainLifeEffect(2))); ).addEffect(new GainLifeEffect(2).concatBy("and")));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -57,12 +57,12 @@ public final class MaarikaBrutalGladiator extends CardImpl {
this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect( this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect(
new GainAbilitySourceEffect(IndestructibleAbility.getInstance()), new GainAbilitySourceEffect(IndestructibleAbility.getInstance()),
MyTurnCondition.instance, "as long as it's your turn, {this} has indestructible" MyTurnCondition.instance, "as long as it's your turn, {this} has indestructible"
)).withFlavorWord("Iron Muscle")); )));
// Spinning PiledriverWhenever Zangief deals damage to a creature, if that creature was dealt excess damage this turn, that creature's controller sacrifices a noncreature, nonland permanent. // Spinning PiledriverWhenever Zangief deals damage to a creature, if that creature was dealt excess damage this turn, that creature's controller sacrifices a noncreature, nonland permanent.
this.addAbility(new DealsDamageToACreatureTriggeredAbility( this.addAbility(new DealsDamageToACreatureTriggeredAbility(
new MaarikaBrutalGladiatorEffect(), false, false, true, filter new MaarikaBrutalGladiatorEffect(), false, false, true, filter
).withFlavorWord("Spinning Piledriver"), new MaarikaBrutalGladiatorWatcher()); ), new MaarikaBrutalGladiatorWatcher());
} }
private MaarikaBrutalGladiator(final MaarikaBrutalGladiator card) { private MaarikaBrutalGladiator(final MaarikaBrutalGladiator card) {

View file

@ -39,7 +39,7 @@ public final class MausoleumHarpy extends CardImpl {
this.addAbility(new ConditionalInterveningIfTriggeredAbility( this.addAbility(new ConditionalInterveningIfTriggeredAbility(
new DiesCreatureTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), false, StaticFilters.FILTER_ANOTHER_CREATURE_YOU_CONTROL), new DiesCreatureTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), false, StaticFilters.FILTER_ANOTHER_CREATURE_YOU_CONTROL),
CitysBlessingCondition.instance, CitysBlessingCondition.instance,
"Whenever another creature you control dies, if you have the city's blessing, put a +1/+1 counter on {this}. ") "Whenever another creature you control dies, if you have the city's blessing, put a +1/+1 counter on {this}.")
.addHint(CitysBlessingHint.instance)); .addHint(CitysBlessingHint.instance));
} }

View file

@ -29,7 +29,7 @@ public final class MouthOfRonom extends CardImpl {
// {T}: Add {C}. // {T}: Add {C}.
this.addAbility(new ColorlessManaAbility()); this.addAbility(new ColorlessManaAbility());
// {4}{S}, {T}, Sacrifice Mouth of Ronom: Mouth of Ronom deals 4 damage to target creature. // {4}{S}, {T}, Sacrifice Mouth of Ronom: Mouth of Ronom deals 4 damage to target creature.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(4), new ManaCostsImpl<>("{4}{S}")); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(4, "it"), new ManaCostsImpl<>("{4}{S}"));
ability.addTarget(new TargetCreaturePermanent()); ability.addTarget(new TargetCreaturePermanent());
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());
ability.addCost(new SacrificeSourceCost()); ability.addCost(new SacrificeSourceCost());

View file

@ -1,34 +1,25 @@
package mage.cards.o; package mage.cards.o;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldAllTriggeredAbility; import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
import mage.abilities.effects.common.continuous.BoostTargetEffect; import mage.abilities.effects.common.continuous.BoostTargetEffect;
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.Duration; import mage.constants.Duration;
import mage.constants.Zone; import mage.constants.SubType;
import mage.filter.StaticFilters; import mage.filter.StaticFilters;
import mage.filter.common.FilterControlledCreaturePermanent;
import mage.filter.predicate.mageobject.AnotherPredicate;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
import java.util.UUID;
/** /**
* *
* @author LevelX2 * @author LevelX2
*/ */
public final class OrcSureshot extends CardImpl { public final class OrcSureshot extends CardImpl {
private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("another creature under your control");
static {
filter.add(AnotherPredicate.instance);
}
public OrcSureshot(UUID ownerId, CardSetInfo setInfo) { public OrcSureshot(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{B}"); super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{B}");
this.subtype.add(SubType.ORC); this.subtype.add(SubType.ORC);
@ -37,7 +28,9 @@ public final class OrcSureshot extends CardImpl {
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
// Whenever another creature enters the battlefield under your control, target creature an opponent controls gets -1/-1 until end of turn. // Whenever another creature enters the battlefield under your control, target creature an opponent controls gets -1/-1 until end of turn.
Ability ability = new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, new BoostTargetEffect(-1,-1, Duration.EndOfTurn),filter,false); Ability ability = new EntersBattlefieldControlledTriggeredAbility(
new BoostTargetEffect(-1,-1, Duration.EndOfTurn),
StaticFilters.FILTER_ANOTHER_CREATURE);
ability.addTarget(new TargetCreaturePermanent(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE)); ability.addTarget(new TargetCreaturePermanent(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -39,7 +39,7 @@ public final class PaladinOfAtonement extends CardImpl {
// When Paladin of Atonement dies, you gain life equal to it's toughness. // When Paladin of Atonement dies, you gain life equal to it's toughness.
this.addAbility(new DiesSourceTriggeredAbility(new GainLifeEffect(SourcePermanentToughnessValue.getInstance(), this.addAbility(new DiesSourceTriggeredAbility(new GainLifeEffect(SourcePermanentToughnessValue.getInstance(),
"you gain life equal to it's toughness"))); "you gain life equal to its toughness")));
} }
private PaladinOfAtonement(final PaladinOfAtonement card) { private PaladinOfAtonement(final PaladinOfAtonement card) {

View file

@ -23,7 +23,7 @@ public final class PathOfDiscovery extends CardImpl {
// Whenever a creature enters the battlefield under your control, it explores. (Reveal the top card of your library. Put that card into your hand if it's a land. Otherwise, put a +1/+1 counter on the creature, then put the card back or put it into your graveyard.) // Whenever a creature enters the battlefield under your control, it explores. (Reveal the top card of your library. Put that card into your hand if it's a land. Otherwise, put a +1/+1 counter on the creature, then put the card back or put it into your graveyard.)
this.addAbility(new EntersBattlefieldControlledTriggeredAbility( this.addAbility(new EntersBattlefieldControlledTriggeredAbility(
Zone.BATTLEFIELD, new ExploreTargetEffect(), Zone.BATTLEFIELD, new ExploreTargetEffect(),
StaticFilters.FILTER_CONTROLLED_A_CREATURE, false, SetTargetPointer.PERMANENT, null)); StaticFilters.FILTER_PERMANENT_A_CREATURE, false, SetTargetPointer.PERMANENT, null));
} }

View file

@ -28,7 +28,7 @@ public final class PendrellMists extends CardImpl {
// All creatures have "At the beginning of your upkeep, sacrifice this creature unless you pay {1}." // All creatures have "At the beginning of your upkeep, sacrifice this creature unless you pay {1}."
Ability gainedAbility = new BeginningOfUpkeepTriggeredAbility(new SacrificeSourceUnlessPaysEffect(new GenericManaCost(1)), TargetController.YOU, false); Ability gainedAbility = new BeginningOfUpkeepTriggeredAbility(new SacrificeSourceUnlessPaysEffect(new GenericManaCost(1)), TargetController.YOU, false);
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAllEffect(gainedAbility, Duration.WhileOnBattlefield, StaticFilters.FILTER_PERMANENT_CREATURES, this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAllEffect(gainedAbility, Duration.WhileOnBattlefield, StaticFilters.FILTER_PERMANENT_CREATURES,
"All creatures have \"At the beginning of your upkeep, sacrifice this creature unless you pay {1}"))); "All creatures have \"At the beginning of your upkeep, sacrifice this creature unless you pay {1}.\"")));
} }
private PendrellMists(final PendrellMists card) { private PendrellMists(final PendrellMists card) {

View file

@ -24,7 +24,7 @@ public final class PyriteSpellbomb extends CardImpl {
public PyriteSpellbomb(UUID ownerId, CardSetInfo setInfo) { public PyriteSpellbomb(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{1}"); super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{1}");
Ability firstAbility = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(2), new ColoredManaCost(ColoredManaSymbol.R)); Ability firstAbility = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(2, "it"), new ColoredManaCost(ColoredManaSymbol.R));
firstAbility.addCost(new SacrificeSourceCost()); firstAbility.addCost(new SacrificeSourceCost());
firstAbility.addTarget(new TargetAnyTarget()); firstAbility.addTarget(new TargetAnyTarget());
this.addAbility(firstAbility); this.addAbility(firstAbility);

View file

@ -33,7 +33,7 @@ public final class SanctumOfTheSun extends CardImpl {
// {T}: Add X mana of any one color, where X is your life total. // {T}: Add X mana of any one color, where X is your life total.
this.addAbility(new DynamicManaAbility(new Mana(0, 0, 0, 0, 0, 0, 1, 0), ControllerLifeCount.instance, new TapSourceCost(), this.addAbility(new DynamicManaAbility(new Mana(0, 0, 0, 0, 0, 0, 1, 0), ControllerLifeCount.instance, new TapSourceCost(),
"Add X mana of any one color, where X is is your life total", true)); "Add X mana of any one color, where X is your life total", true));
} }

View file

@ -31,7 +31,7 @@ public final class SerratedBiskelion extends CardImpl {
// {tap}: Put a -1/-1 counter on Serrated Biskelion and a -1/-1 counter on target creature. // {tap}: Put a -1/-1 counter on Serrated Biskelion and a -1/-1 counter on target creature.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new AddCountersSourceEffect(CounterType.M1M1.createInstance(), true), new TapSourceCost()); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new AddCountersSourceEffect(CounterType.M1M1.createInstance(), true), new TapSourceCost());
ability.addEffect(new AddCountersTargetEffect(CounterType.M1M1.createInstance())); ability.addEffect(new AddCountersTargetEffect(CounterType.M1M1.createInstance()).setText("and a -1/-1 counter on target creature"));
ability.addTarget(new TargetCreaturePermanent()); ability.addTarget(new TargetCreaturePermanent());
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -48,9 +48,9 @@ public final class ShamanOfTheGreatHunt extends CardImpl {
// Haste // Haste
this.addAbility(HasteAbility.getInstance()); this.addAbility(HasteAbility.getInstance());
// Whenever a creature you control deals combat damage to a player, put a +1/+1 counter on that creature. // Whenever a creature you control deals combat damage to a player, put a +1/+1 counter on it.
Effect effect = new AddCountersTargetEffect(CounterType.P1P1.createInstance()); Effect effect = new AddCountersTargetEffect(CounterType.P1P1.createInstance());
effect.setText("put a +1/+1 counter on that creature"); effect.setText("put a +1/+1 counter on it");
this.addAbility(new DealsDamageToAPlayerAllTriggeredAbility( this.addAbility(new DealsDamageToAPlayerAllTriggeredAbility(
effect, effect,
StaticFilters.FILTER_CONTROLLED_A_CREATURE, false, SetTargetPointer.PERMANENT, true StaticFilters.FILTER_CONTROLLED_A_CREATURE, false, SetTargetPointer.PERMANENT, true

View file

@ -25,7 +25,7 @@ public final class SkitteringMonstrosity extends CardImpl {
// When you cast a creature spell, sacrifice Skittering Monstrosity. // When you cast a creature spell, sacrifice Skittering Monstrosity.
this.addAbility(new SpellCastControllerTriggeredAbility( this.addAbility(new SpellCastControllerTriggeredAbility(
new SacrificeSourceEffect(), StaticFilters.FILTER_SPELL_A_CREATURE, false new SacrificeSourceEffect(), StaticFilters.FILTER_SPELL_A_CREATURE, false
)); ).setTriggerPhrase("When you cast a creature spell, "));
} }
private SkitteringMonstrosity(final SkitteringMonstrosity card) { private SkitteringMonstrosity(final SkitteringMonstrosity card) {

View file

@ -42,7 +42,7 @@ public final class SlipperyScoundrel extends CardImpl {
// As long as you have the city's blessing Slippery Scoundrel has Hexproof and can't be blocked. // As long as you have the city's blessing Slippery Scoundrel has Hexproof and can't be blocked.
ContinuousEffect boostSource = new GainAbilitySourceEffect(HexproofAbility.getInstance(), Duration.WhileOnBattlefield); ContinuousEffect boostSource = new GainAbilitySourceEffect(HexproofAbility.getInstance(), Duration.WhileOnBattlefield);
ConditionalContinuousEffect effect = new ConditionalContinuousEffect(boostSource, CitysBlessingCondition.instance, ConditionalContinuousEffect effect = new ConditionalContinuousEffect(boostSource, CitysBlessingCondition.instance,
"As long as you have the city's blessing {this} has Hexproof"); "As long as you have the city's blessing, {this} has hexproof");
Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, effect); Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, effect);
RestrictionEffect restrictionEffect = new CantBeBlockedSourceEffect(Duration.WhileOnBattlefield); RestrictionEffect restrictionEffect = new CantBeBlockedSourceEffect(Duration.WhileOnBattlefield);
Effect effect2 = new ConditionalRestrictionEffect(restrictionEffect, CitysBlessingCondition.instance) Effect effect2 = new ConditionalRestrictionEffect(restrictionEffect, CitysBlessingCondition.instance)

View file

@ -39,7 +39,7 @@ public final class StampedingHorncrest extends CardImpl {
// Stampeding Horncrest has haste as long as you control another Dinosaur. // Stampeding Horncrest has haste as long as you control another Dinosaur.
Effect effect = new ConditionalContinuousEffect(new GainAbilitySourceEffect(HasteAbility.getInstance()), new PermanentsOnTheBattlefieldCondition(filter), Effect effect = new ConditionalContinuousEffect(new GainAbilitySourceEffect(HasteAbility.getInstance()), new PermanentsOnTheBattlefieldCondition(filter),
"{this} has haste as long as you control another dinosaur"); "{this} has haste as long as you control another Dinosaur");
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect)); this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect));
} }

View file

@ -24,7 +24,8 @@ public final class StrawGolem extends CardImpl {
this.toughness = new MageInt(3); this.toughness = new MageInt(3);
// When an opponent casts a creature spell, sacrifice Straw Golem. // When an opponent casts a creature spell, sacrifice Straw Golem.
this.addAbility(new SpellCastOpponentTriggeredAbility(new SacrificeSourceEffect(), StaticFilters.FILTER_SPELL_A_CREATURE, false)); this.addAbility(new SpellCastOpponentTriggeredAbility(new SacrificeSourceEffect(), StaticFilters.FILTER_SPELL_A_CREATURE, false)
.setTriggerPhrase("When an opponent casts a creature spell, "));
} }
private StrawGolem(final StrawGolem card) { private StrawGolem(final StrawGolem card) {

View file

@ -1,7 +1,6 @@
package mage.cards.s; package mage.cards.s;
import java.util.UUID; import mage.abilities.Ability;
import mage.abilities.common.SimpleStaticAbility; import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.effects.common.continuous.BoostEquippedEffect; import mage.abilities.effects.common.continuous.BoostEquippedEffect;
@ -14,7 +13,8 @@ import mage.constants.AttachmentType;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.Outcome; import mage.constants.Outcome;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.Zone;
import java.util.UUID;
/** /**
* *
@ -27,11 +27,13 @@ public final class StriderHarness extends CardImpl {
this.subtype.add(SubType.EQUIPMENT); this.subtype.add(SubType.EQUIPMENT);
// Equipped creature gets +1/+1 and has haste. // Equipped creature gets +1/+1 and has haste.
this.addAbility(new EquipAbility(Outcome.AddAbility, new GenericManaCost(1))); Ability ability = new SimpleStaticAbility(new BoostEquippedEffect(1, 1));
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(HasteAbility.getInstance(), AttachmentType.EQUIPMENT))); ability.addEffect(new GainAbilityAttachedEffect(HasteAbility.getInstance(), AttachmentType.EQUIPMENT)
.setText("and has haste"));
this.addAbility(ability);
// Equip 1 (1: Attach to target creature you control. Equip only as a sorcery.) // Equip 1 (1: Attach to target creature you control. Equip only as a sorcery.)
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEquippedEffect(1, 1))); this.addAbility(new EquipAbility(Outcome.AddAbility, new GenericManaCost(1)));
} }
private StriderHarness(final StriderHarness card) { private StriderHarness(final StriderHarness card) {

View file

@ -37,7 +37,7 @@ public final class SummonsOfSaruman extends CardImpl {
// Flashback--{3}{U}{R}, Exile X cards from your graveyard. // Flashback--{3}{U}{R}, Exile X cards from your graveyard.
Ability flashback = new FlashbackAbility(this, new ManaCostsImpl<>("{3}{U}{R}")); Ability flashback = new FlashbackAbility(this, new ManaCostsImpl<>("{3}{U}{R}"));
flashback.addCost(new ExileXFromYourGraveCost(StaticFilters.FILTER_CARD_CARDS)); flashback.addCost(new ExileXFromYourGraveCost(StaticFilters.FILTER_CARDS_FROM_YOUR_GRAVEYARD));
this.addAbility(flashback); this.addAbility(flashback);
} }
@ -115,4 +115,4 @@ class SummonsOfSarumanEffect extends OneShotEffect {
return true; return true;
} }
} }

View file

@ -3,7 +3,6 @@ package mage.cards.s;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.DiesSourceTriggeredAbility; import mage.abilities.common.DiesSourceTriggeredAbility;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.ExileSourceEffect; import mage.abilities.effects.common.ExileSourceEffect;
import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
@ -16,7 +15,6 @@ import mage.target.common.TargetCardInYourGraveyard;
import java.util.UUID; import java.util.UUID;
/** /**
* *
* @author jmharmon * @author jmharmon
@ -39,9 +37,8 @@ public final class SylvanHierophant extends CardImpl {
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
// When Sylvan Hierophant dies, exile Sylvan Hierophant, then return another target creature card from your graveyard to your hand. // When Sylvan Hierophant dies, exile Sylvan Hierophant, then return another target creature card from your graveyard to your hand.
Effect effect = new ReturnFromGraveyardToHandTargetEffect();
Ability ability = new DiesSourceTriggeredAbility(new ExileSourceEffect(), false); Ability ability = new DiesSourceTriggeredAbility(new ExileSourceEffect(), false);
ability.addEffect(effect); ability.addEffect(new ReturnFromGraveyardToHandTargetEffect().concatBy(", then"));
ability.addTarget(new TargetCardInYourGraveyard(filter)); ability.addTarget(new TargetCardInYourGraveyard(filter));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -54,7 +54,7 @@ public final class TadeasJuniperAscendant extends CardImpl {
// Tadeas has hexproof unless it's attacking. // Tadeas has hexproof unless it's attacking.
this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect( this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect(
new GainAbilitySourceEffect(HexproofAbility.getInstance()), new GainAbilitySourceEffect(HexproofAbility.getInstance()),
condition, "{this} has hexproof unless he's attacking" condition, "{this} has hexproof unless it's attacking"
))); )));
// Whenever a creature you control with reach attacks, untap it and it can't be blocked by creatures with greater power this combat. // Whenever a creature you control with reach attacks, untap it and it can't be blocked by creatures with greater power this combat.
@ -123,6 +123,7 @@ class TadeasJuniperAscendantEvasionEffect extends RestrictionEffect {
return this.targetPointer.getTargets(game, source).contains(permanent.getId()); return this.targetPointer.getTargets(game, source).contains(permanent.getId());
} }
@Override
public boolean canBeBlocked(Permanent attacker, Permanent blocker, Ability source, Game game, boolean canUseChooseDialogs) { public boolean canBeBlocked(Permanent attacker, Permanent blocker, Ability source, Game game, boolean canUseChooseDialogs) {
return blocker.getPower().getValue() <= attacker.getPower().getValue(); return blocker.getPower().getValue() <= attacker.getPower().getValue();
} }
@ -131,4 +132,4 @@ class TadeasJuniperAscendantEvasionEffect extends RestrictionEffect {
public TadeasJuniperAscendantEvasionEffect copy() { public TadeasJuniperAscendantEvasionEffect copy() {
return new TadeasJuniperAscendantEvasionEffect(this); return new TadeasJuniperAscendantEvasionEffect(this);
} }
} }

View file

@ -68,7 +68,7 @@ class TemurWarShamanTriggeredAbility extends TurnedFaceUpAllTriggeredAbility {
@Override @Override
public String getRule() { public String getRule() {
return "Whenever a permanent you control is turned face up, if it is a creature, you may have it fight target creature you don't control."; return "Whenever a permanent you control is turned face up, if it's a creature, you may have it fight target creature you don't control.";
} }
} }

View file

@ -42,15 +42,15 @@ public final class TheHowlingAbomination extends CardImpl {
this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect( this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect(
new GainAbilitySourceEffect(TrampleAbility.getInstance()), TheHowlingAbominationCondition.instance, new GainAbilitySourceEffect(TrampleAbility.getInstance()), TheHowlingAbominationCondition.instance,
"{this} has trample as long as you've cast three or more spells this turn" "{this} has trample as long as you've cast three or more spells this turn"
)).withFlavorWord("Rolling Attack")); )));
// Electric ThunderWhenever Blanka becomes the target of a spell, he gets +2/+2 until end of turn and deals 2 damage to each opponent. // Electric ThunderWhenever Blanka becomes the target of a spell, he gets +2/+2 until end of turn and deals 2 damage to each opponent.
Ability ability = new SourceBecomesTargetTriggeredAbility(new BoostSourceEffect( Ability ability = new SourceBecomesTargetTriggeredAbility(new BoostSourceEffect(
2, 2, Duration.EndOfTurn 2, 2, Duration.EndOfTurn
).setText("he gets +2/+2 until end of turn"), StaticFilters.FILTER_SPELL_A).setTriggerPhrase("Whenever {this} becomes the target of a spell, "); ).setText("it gets +2/+2 until end of turn"), StaticFilters.FILTER_SPELL_A).setTriggerPhrase("Whenever {this} becomes the target of a spell, ");
ability.addEffect(new DamagePlayersEffect(2, TargetController.OPPONENT) ability.addEffect(new DamagePlayersEffect(2, TargetController.OPPONENT)
.setText("and deals 2 damage to each opponent")); .setText("and deals 2 damage to each opponent"));
this.addAbility(ability.withFlavorWord("Electric Thunder")); this.addAbility(ability);
} }
private TheHowlingAbomination(final TheHowlingAbomination card) { private TheHowlingAbomination(final TheHowlingAbomination card) {

View file

@ -27,8 +27,6 @@ import mage.game.stack.StackObject;
*/ */
public final class ThrunBreakerOfSilence extends CardImpl { public final class ThrunBreakerOfSilence extends CardImpl {
public ThrunBreakerOfSilence(UUID ownerId, CardSetInfo setInfo) { public ThrunBreakerOfSilence(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{G}{G}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{G}{G}");
@ -65,18 +63,18 @@ public final class ThrunBreakerOfSilence extends CardImpl {
class ThrunBreakerOfSilenceEffect extends ContinuousRuleModifyingEffectImpl { class ThrunBreakerOfSilenceEffect extends ContinuousRuleModifyingEffectImpl {
public ThrunBreakerOfSilenceEffect() { ThrunBreakerOfSilenceEffect() {
super(Duration.WhileOnBattlefield, Outcome.BoostCreature); super(Duration.WhileOnBattlefield, Outcome.AddAbility);
staticText = "{this} can't be the target of nongreen spells your opponents control or abilities from nongreen sources your opponents control"; staticText = "{this} can't be the target of nongreen spells your opponents control or abilities from nongreen sources your opponents control";
} }
public ThrunBreakerOfSilenceEffect(final mage.cards.t.ThrunBreakerOfSilenceEffect effect) { private ThrunBreakerOfSilenceEffect(final ThrunBreakerOfSilenceEffect effect) {
super(effect); super(effect);
} }
@Override @Override
public mage.cards.t.ThrunBreakerOfSilenceEffect copy() { public ThrunBreakerOfSilenceEffect copy() {
return new mage.cards.t.ThrunBreakerOfSilenceEffect(this); return new ThrunBreakerOfSilenceEffect(this);
} }
@Override @Override

View file

@ -49,7 +49,7 @@ public final class TyrantsFamiliar extends CardImpl {
Ability gainedAbility = new AttacksTriggeredAbility(new DamageTargetEffect(7, "it"), false); Ability gainedAbility = new AttacksTriggeredAbility(new DamageTargetEffect(7, "it"), false);
gainedAbility.addTarget(new TargetPermanent(filter)); gainedAbility.addTarget(new TargetPermanent(filter));
ContinuousEffect effect = new GainAbilitySourceEffect(gainedAbility); ContinuousEffect effect = new GainAbilitySourceEffect(gainedAbility);
effect.setText("and has \"Whenever {this} attacks, it deals 7 damage to target creature defending player controls\""); effect.setText("and has \"Whenever {this} attacks, it deals 7 damage to target creature defending player controls.\"");
this.addAbility(new LieutenantAbility(effect)); this.addAbility(new LieutenantAbility(effect));
} }

View file

@ -28,7 +28,7 @@ public final class Vaultbreaker extends CardImpl {
// Whenever Vaultbreaker attacks, you may discard a card. If you do, draw a card. // Whenever Vaultbreaker attacks, you may discard a card. If you do, draw a card.
this.addAbility(new AttacksTriggeredAbility(new DoIfCostPaid(new DrawCardSourceControllerEffect(1), this.addAbility(new AttacksTriggeredAbility(new DoIfCostPaid(new DrawCardSourceControllerEffect(1),
new DiscardCardCost()), false, "Whenever {this} attacks, you may discard a card. If you do, draw a card")); new DiscardCardCost())));
// Dash {2}{R} // Dash {2}{R}
this.addAbility(new DashAbility("{2}{R}")); this.addAbility(new DashAbility("{2}{R}"));

View file

@ -43,7 +43,7 @@ public final class VikyaScorchingStalwart extends CardImpl {
ability.addCost(new UntapSourceCost()); ability.addCost(new UntapSourceCost());
ability.addCost(new DiscardCardCost()); ability.addCost(new DiscardCardCost());
ability.addTarget(new TargetAnyTarget()); ability.addTarget(new TargetAnyTarget());
this.addAbility(ability.withFlavorWord("Hadoken")); this.addAbility(ability);
} }
private VikyaScorchingStalwart(final VikyaScorchingStalwart card) { private VikyaScorchingStalwart(final VikyaScorchingStalwart card) {

View file

@ -45,7 +45,7 @@ public final class VonasHunger extends CardImpl {
this.getSpellAbility().addEffect(new ConditionalOneShotEffect( this.getSpellAbility().addEffect(new ConditionalOneShotEffect(
new VonasHungerEffect(), new VonasHungerEffect(),
CitysBlessingCondition.instance, CitysBlessingCondition.instance,
"If you have the city's blessing, instead each opponent sacrifices half the creatures they control rounded up")); "If you have the city's blessing, instead each opponent sacrifices half the creatures they control, rounded up"));
} }
private VonasHunger(final VonasHunger card) { private VonasHunger(final VonasHunger card) {

View file

@ -35,7 +35,8 @@ public final class VoraciousVampire extends CardImpl {
this.addAbility(new MenaceAbility(false)); this.addAbility(new MenaceAbility(false));
// When Voracious Vampire enters the battlefield, target Vampire you control gets +1/+1 and gains menace until end of turn. // When Voracious Vampire enters the battlefield, target Vampire you control gets +1/+1 and gains menace until end of turn.
Ability ability = new EntersBattlefieldTriggeredAbility(new BoostTargetEffect(1, 1, Duration.EndOfTurn), false); Ability ability = new EntersBattlefieldTriggeredAbility(new BoostTargetEffect(1, 1, Duration.EndOfTurn)
.setText("target Vampire you control gets +1/+1"), false);
Effect effect = new GainAbilityTargetEffect(new MenaceAbility(), Duration.EndOfTurn); Effect effect = new GainAbilityTargetEffect(new MenaceAbility(), Duration.EndOfTurn);
effect.setText("and gains menace until end of turn."); effect.setText("and gains menace until end of turn.");
ability.addEffect(effect); ability.addEffect(effect);

View file

@ -29,7 +29,7 @@ import mage.filter.predicate.permanent.TokenPredicate;
*/ */
public final class WhisperwoodElemental extends CardImpl { public final class WhisperwoodElemental extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("face-up, nontoken creatures you control"); private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("face-up nontoken creatures you control");
static { static {
filter.add(Predicates.not(FaceDownPredicate.instance)); filter.add(Predicates.not(FaceDownPredicate.instance));
@ -48,7 +48,7 @@ public final class WhisperwoodElemental extends CardImpl {
// Sacrifice Whisperwood Elemental: Until end of turn, face-up, nontoken creatures you control gain "When this creature dies, manifest the top card of your library." // Sacrifice Whisperwood Elemental: Until end of turn, face-up, nontoken creatures you control gain "When this creature dies, manifest the top card of your library."
Ability abilityToGain = new DiesSourceTriggeredAbility(new ManifestEffect(1)); Ability abilityToGain = new DiesSourceTriggeredAbility(new ManifestEffect(1));
Effect effect = new GainAbilityControlledEffect(abilityToGain, Duration.EndOfTurn, filter); Effect effect = new GainAbilityControlledEffect(abilityToGain, Duration.EndOfTurn, filter);
effect.setText("Until end of turn, face-up, nontoken creatures you control gain \"When this creature dies, manifest the top card of your library.\""); effect.setText("Until end of turn, face-up nontoken creatures you control gain \"When this creature dies, manifest the top card of your library.\"");
this.addAbility(new SimpleActivatedAbility( this.addAbility(new SimpleActivatedAbility(
Zone.ALL, effect, new SacrificeSourceCost())); Zone.ALL, effect, new SacrificeSourceCost()));
} }

View file

@ -108,7 +108,7 @@ class WrexialTheRisenDeepTriggeredAbility extends TriggeredAbilityImpl {
return "Whenever {this} deals combat damage to a player, " return "Whenever {this} deals combat damage to a player, "
+ "you may cast target instant or sorcery card " + "you may cast target instant or sorcery card "
+ "from that player's graveyard without paying its mana cost. " + "from that player's graveyard without paying its mana cost. "
+ "If that spell would be put into a graveyard this turn, exile it instead."; + "If that spell would be put into a graveyard, exile it instead.";
} }
} }

View file

@ -42,7 +42,7 @@ public final class ZethiArcaneBlademaster extends CardImpl {
.setTargetAdjuster(ZethiArcaneBlademasterAdjuster.instance)); .setTargetAdjuster(ZethiArcaneBlademasterAdjuster.instance));
// Lightning KickWhenever Chun-Li attacks, copy each exiled card you own with a kick counter on it. You may cast the copies. // Lightning KickWhenever Chun-Li attacks, copy each exiled card you own with a kick counter on it. You may cast the copies.
this.addAbility(new AttacksTriggeredAbility(new ZethiArcaneBlademasterCastEffect()).withFlavorWord("Lightning Kick")); this.addAbility(new AttacksTriggeredAbility(new ZethiArcaneBlademasterCastEffect()));
} }
private ZethiArcaneBlademaster(final ZethiArcaneBlademaster card) { private ZethiArcaneBlademaster(final ZethiArcaneBlademaster card) {

View file

@ -27,7 +27,7 @@ public class WhisperwoodElementalTest extends CardTestPlayerBase {
addCard(Zone.BATTLEFIELD, playerA, "Silvercoat Lion", 1); addCard(Zone.BATTLEFIELD, playerA, "Silvercoat Lion", 1);
addCard(Zone.HAND, playerA, "Lightning Bolt"); addCard(Zone.HAND, playerA, "Lightning Bolt");
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Sacrifice {this}: Until end of turn, face-up, nontoken creatures you control gain \"When this creature dies, manifest the top card of your library."); activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Sacrifice {this}: Until end of turn, face-up");
castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Lightning Bolt", "Silvercoat Lion"); castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Lightning Bolt", "Silvercoat Lion");
setStopAt(1, PhaseStep.END_TURN); setStopAt(1, PhaseStep.END_TURN);

View file

@ -19,7 +19,7 @@ public class ExileTopCreatureCardOfGraveyardCost extends CostImpl {
public ExileTopCreatureCardOfGraveyardCost(int amount) { public ExileTopCreatureCardOfGraveyardCost(int amount) {
this.amount = amount; this.amount = amount;
this.text = "Exile the top creature card of your graveyard"; this.text = "exile the top creature card of your graveyard";
} }
public ExileTopCreatureCardOfGraveyardCost(ExileTopCreatureCardOfGraveyardCost cost) { public ExileTopCreatureCardOfGraveyardCost(ExileTopCreatureCardOfGraveyardCost cost) {

View file

@ -22,7 +22,7 @@ public class ReturnToHandFromGraveyardCost extends CostImpl {
public ReturnToHandFromGraveyardCost(TargetCardInYourGraveyard target) { public ReturnToHandFromGraveyardCost(TargetCardInYourGraveyard target) {
this.addTarget(target); this.addTarget(target);
this.text = "return " + target.getDescription() + " from graveyard to it's owner's hand"; this.text = "return " + target.getDescription() + " from your graveyard to your hand";
} }
public ReturnToHandFromGraveyardCost(ReturnToHandFromGraveyardCost cost) { public ReturnToHandFromGraveyardCost(ReturnToHandFromGraveyardCost cost) {

View file

@ -76,11 +76,4 @@ public class DamageAllEffect extends OneShotEffect {
staticText = sb.toString(); staticText = sb.toString();
} }
public String getSourceName() {
return sourceName;
}
public void setSourceName(String sourceName) {
this.sourceName = sourceName;
}
} }

View file

@ -24,8 +24,8 @@ public class DamageWithExcessEffect extends OneShotEffect {
public DamageWithExcessEffect(DynamicValue amount) { public DamageWithExcessEffect(DynamicValue amount) {
super(Outcome.Damage); super(Outcome.Damage);
this.amount = amount; this.amount = amount;
this.staticText = "{this} deals " + amount + " damage to target creature" + this.staticText = "{this} deals " + (amount instanceof StaticValue ? amount : "X") + " damage to target creature" +
(amount instanceof StaticValue ? "" : ", where X is " + amount.getMessage()) + (amount instanceof StaticValue ? "" : ", where X is the number of " + amount.getMessage()) +
". Excess damage is dealt to that creature's controller instead"; ". Excess damage is dealt to that creature's controller instead";
} }

View file

@ -7,6 +7,7 @@ import mage.abilities.TriggeredAbility;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.effects.ContinuousEffectImpl; import mage.abilities.effects.ContinuousEffectImpl;
import mage.abilities.keyword.ProtectionAbility; import mage.abilities.keyword.ProtectionAbility;
import mage.abilities.mana.ManaAbility;
import mage.constants.*; import mage.constants.*;
import mage.game.Game; import mage.game.Game;
import mage.game.permanent.Permanent; import mage.game.permanent.Permanent;
@ -143,7 +144,9 @@ public class GainAbilityAttachedEffect extends ContinuousEffectImpl {
} }
boolean quotes = ability instanceof SimpleActivatedAbility boolean quotes = ability instanceof SimpleActivatedAbility
|| ability instanceof TriggeredAbility || ability instanceof TriggeredAbility
|| ability instanceof LoyaltyAbility; || ability instanceof LoyaltyAbility
|| ability instanceof ManaAbility
|| ability.getRule().startsWith("If ");
if (quotes) { if (quotes) {
sb.append('"'); sb.append('"');
} }

View file

@ -29,7 +29,7 @@ public class SearchLibraryGraveyardWithLessMVPutIntoPlay extends OneShotEffect {
public SearchLibraryGraveyardWithLessMVPutIntoPlay(FilterCard filter) { public SearchLibraryGraveyardWithLessMVPutIntoPlay(FilterCard filter) {
super(Outcome.PutCreatureInPlay); super(Outcome.PutCreatureInPlay);
this.filter = filter; this.filter = filter;
staticText = "Search your library and/or graveyard for a " + filter.getMessage() + " with mana value X or less, put it onto the battlefield. If you search your library this way, shuffle."; staticText = "Search your library and/or graveyard for a " + filter.getMessage() + " with mana value X or less and put it onto the battlefield. If you search your library this way, shuffle.";
} }
protected SearchLibraryGraveyardWithLessMVPutIntoPlay(final SearchLibraryGraveyardWithLessMVPutIntoPlay effect) { protected SearchLibraryGraveyardWithLessMVPutIntoPlay(final SearchLibraryGraveyardWithLessMVPutIntoPlay effect) {