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.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.AbilityWord;
import mage.constants.CardType;
import mage.target.TargetSpell;
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.
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());
// Counter target spell.
this.getSpellAbility().addEffect(new CounterTargetEffect());

View file

@ -49,7 +49,8 @@ public final class AdmonitionAngel extends CardImpl {
this.addAbility(ability);
// 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);
}

View file

@ -44,9 +44,7 @@ public final class AishaOfSparksAndSmoke extends CardImpl {
), 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.
this.addAbility(new DealsCombatDamageTriggeredAbility(
new AishaOfSparksAndSmokeEffect(), false
).withFlavorWord("Shoryuken"));
this.addAbility(new DealsCombatDamageTriggeredAbility(new AishaOfSparksAndSmokeEffect(), false));
}
private AishaOfSparksAndSmoke(final AishaOfSparksAndSmoke card) {

View file

@ -63,7 +63,7 @@ class AminatousAuguryEffect extends OneShotEffect {
staticText = "Exile the top eight cards of your library. "
+ "You may put a land card from among them onto the battlefield. "
+ "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) {

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.
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
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) {

View file

@ -22,7 +22,7 @@ import mage.target.common.TargetCardInYourGraveyard;
*/
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 {
filter.add(SubType.DINOSAUR.getPredicate());

View file

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

View file

@ -19,7 +19,7 @@ import mage.filter.predicate.mageobject.AnotherPredicate;
*/
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 {
filter.add(AnotherPredicate.instance);
}

View file

@ -29,7 +29,7 @@ import java.util.UUID;
*/
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) {
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.
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);
this.addAbility(equip);
}

View file

@ -27,7 +27,7 @@ public final class CunningStrike extends CardImpl {
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
Effect effect = new DamageTargetEffect(StaticValue.get(2), true, "", true);
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().addTarget(new TargetPlayerOrPlaneswalker());
// Draw a card.

View file

@ -82,6 +82,6 @@ class DamiaSageOfStoneTriggeredAbility extends BeginningOfUpkeepTriggeredAbility
@Override
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(
Zone.GRAVEYARD, new DarkIntimationsGraveyardEffect(),
filter, false, SetTargetPointer.SPELL
));
).setTriggerPhrase("When you cast a Bolas planeswalker spell, "));
}
private DarkIntimations(final DarkIntimations card) {

View file

@ -1,4 +1,3 @@
package mage.cards.d;
import java.util.UUID;
@ -32,7 +31,7 @@ public final class DeepglowSkate extends CardImpl {
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.
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));
this.addAbility(ability);
}
@ -51,7 +50,7 @@ class DeepglowSkateEffect extends OneShotEffect {
public DeepglowSkateEffect() {
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) {

View file

@ -41,7 +41,7 @@ public final class Downdraft extends CardImpl {
this.addAbility(ability);
// 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) {

View file

@ -25,7 +25,7 @@ public final class EnterTheUnknown extends CardImpl {
this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent());
// 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;
import java.util.UUID;
@ -9,7 +8,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
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);
// 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) {

View file

@ -39,7 +39,7 @@ public final class FireWhip extends CardImpl {
// Enchanted creature has "{t}: This creature deals 1 damage to any target."
Ability ability1 = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(1), new TapSourceCost());
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.
Ability ability2 = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(1), new SacrificeSourceCost());
ability2.addTarget(new TargetAnyTarget());

View file

@ -61,7 +61,7 @@ class FirestormEffect extends OneShotEffect {
public FirestormEffect() {
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) {

View file

@ -1,4 +1,3 @@
package mage.cards.f;
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.
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
this.getSpellAbility().addEffect(new BoostTargetEffect(3, 3, Duration.EndOfTurn));
this.getSpellAbility().addEffect(new GainAbilityTargetEffect(FirstStrikeAbility.getInstance(), Duration.EndOfTurn));
this.getSpellAbility().addEffect(new BoostTargetEffect(3, 3, 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) {

View file

@ -37,7 +37,7 @@ public final class FlamekinVillage extends CardImpl {
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.
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}.
this.addAbility(new RedManaAbility());

View file

@ -21,7 +21,6 @@ import mage.filter.predicate.permanent.ControllerIdPredicate;
import mage.game.Game;
import mage.game.combat.CombatGroup;
import mage.game.events.GameEvent;
import mage.game.events.GameEvent.EventType;
import mage.game.permanent.Permanent;
import mage.target.Target;
import mage.target.TargetPermanent;
@ -101,6 +100,6 @@ class GoblinVandalTriggeredAbility extends TriggeredAbilityImpl {
@Override
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.
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);
Target targetEquipment = new TargetPermanent(filter);
this.getSpellAbility().addTarget(targetEquipment);
@ -56,6 +56,7 @@ class GripOfPhyresisEffect extends CreateTokenEffect {
GripOfPhyresisEffect() {
super(new PhyrexianGermToken());
staticText = ", then " + staticText + " and attach that Equipment to it";
}
GripOfPhyresisEffect(final GripOfPhyresisEffect effect) {

View file

@ -27,7 +27,9 @@ public final class HarvestWurm extends CardImpl {
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.
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) {

View file

@ -20,7 +20,7 @@ public final class HauntingMisery extends CardImpl {
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.
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.
this.getSpellAbility().addTarget(new TargetPlayerOrPlaneswalker());

View file

@ -58,7 +58,7 @@ class ImmardTheStormcleaverEffect extends OneShotEffect {
ImmardTheStormcleaverEffect() {
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());
}
@ -90,7 +90,7 @@ class ImmardTheStormcleaverEffect extends OneShotEffect {
return true;
}
private static final ReflexiveTriggeredAbility makeAbility() {
private static ReflexiveTriggeredAbility makeAbility() {
ReflexiveTriggeredAbility ability = new ReflexiveTriggeredAbility(
new DamageTargetEffect(4), false
);
@ -101,7 +101,7 @@ class ImmardTheStormcleaverEffect extends OneShotEffect {
mode.addEffect(new GainAbilitySourceEffect(
IndestructibleAbility.getInstance(), Duration.EndOfTurn
).setText("and indestructible until end of turn"));
ability.withFirstModeFlavorWord("Sonic Boom").addMode(mode.withFlavorWord("Flash Kick"));
ability.addMode(mode);
return ability;
}
}

View file

@ -50,7 +50,7 @@ class InducedAmnesiaExileEffect extends OneShotEffect {
InducedAmnesiaExileEffect() {
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) {

View file

@ -27,7 +27,7 @@ public final class JadelightRanger extends CardImpl {
// When Jadelight Ranger enters the battlefield, it explores, then it explores again.
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);
}

View file

@ -36,7 +36,7 @@ public final class LeoninBladetrap extends CardImpl {
// Flash
this.addAbility(FlashAbility.getInstance());
// {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());
this.addAbility(ability);

View file

@ -1,4 +1,3 @@
package mage.cards.l;
import java.util.UUID;
@ -14,7 +13,6 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
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.
Effect effect = new ShuffleIntoLibrarySourceEffect();
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) {

View file

@ -50,16 +50,13 @@ public final class LobeliaDefenderOfBagEnd extends CardImpl {
// {T}, Sacrifice an artifact: Choose one --
// * 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.
Ability ability = new SimpleActivatedAbility(
new LobeliaDefenderOfBagEndPlayFromExileEffect(),
new SacrificeTargetCost(StaticFilters.FILTER_CONTROLLED_PERMANENT_ARTIFACT_AN)
);
ability.addCost(new TapSourceCost());
Ability ability = new SimpleActivatedAbility(new LobeliaDefenderOfBagEndPlayFromExileEffect(), new TapSourceCost());
ability.addCost(new SacrificeTargetCost(StaticFilters.FILTER_CONTROLLED_PERMANENT_ARTIFACT_AN));
ability.addWatcher(new LobeliaDefenderOfBagEndWatcher());
ability.addMode(new Mode(
new LoseLifeOpponentsEffect(2)
).addEffect(new GainLifeEffect(2)));
).addEffect(new GainLifeEffect(2).concatBy("and")));
this.addAbility(ability);
}

View file

@ -57,12 +57,12 @@ public final class MaarikaBrutalGladiator extends CardImpl {
this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect(
new GainAbilitySourceEffect(IndestructibleAbility.getInstance()),
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.
this.addAbility(new DealsDamageToACreatureTriggeredAbility(
new MaarikaBrutalGladiatorEffect(), false, false, true, filter
).withFlavorWord("Spinning Piledriver"), new MaarikaBrutalGladiatorWatcher());
), new MaarikaBrutalGladiatorWatcher());
}
private MaarikaBrutalGladiator(final MaarikaBrutalGladiator card) {

View file

@ -29,7 +29,7 @@ public final class MouthOfRonom extends CardImpl {
// {T}: Add {C}.
this.addAbility(new ColorlessManaAbility());
// {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.addCost(new TapSourceCost());
ability.addCost(new SacrificeSourceCost());

View file

@ -1,34 +1,25 @@
package mage.cards.o;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldAllTriggeredAbility;
import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
import mage.abilities.effects.common.continuous.BoostTargetEffect;
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 mage.filter.common.FilterControlledCreaturePermanent;
import mage.filter.predicate.mageobject.AnotherPredicate;
import mage.target.common.TargetCreaturePermanent;
import java.util.UUID;
/**
*
* @author LevelX2
*/
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) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{B}");
this.subtype.add(SubType.ORC);
@ -37,7 +28,9 @@ public final class OrcSureshot extends CardImpl {
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.
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));
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.
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) {

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.)
this.addAbility(new EntersBattlefieldControlledTriggeredAbility(
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}."
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,
"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) {

View file

@ -24,7 +24,7 @@ public final class PyriteSpellbomb extends CardImpl {
public PyriteSpellbomb(UUID ownerId, CardSetInfo setInfo) {
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.addTarget(new TargetAnyTarget());
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.
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.
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());
this.addAbility(ability);
}

View file

@ -48,9 +48,9 @@ public final class ShamanOfTheGreatHunt extends CardImpl {
// Haste
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.setText("put a +1/+1 counter on that creature");
effect.setText("put a +1/+1 counter on it");
this.addAbility(new DealsDamageToAPlayerAllTriggeredAbility(
effect,
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.
this.addAbility(new SpellCastControllerTriggeredAbility(
new SacrificeSourceEffect(), StaticFilters.FILTER_SPELL_A_CREATURE, false
));
).setTriggerPhrase("When you cast a creature spell, "));
}
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.
ContinuousEffect boostSource = new GainAbilitySourceEffect(HexproofAbility.getInstance(), Duration.WhileOnBattlefield);
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);
RestrictionEffect restrictionEffect = new CantBeBlockedSourceEffect(Duration.WhileOnBattlefield);
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.
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));
}

View file

@ -24,7 +24,8 @@ public final class StrawGolem extends CardImpl {
this.toughness = new MageInt(3);
// 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) {

View file

@ -1,7 +1,6 @@
package mage.cards.s;
import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.effects.common.continuous.BoostEquippedEffect;
@ -14,7 +13,8 @@ import mage.constants.AttachmentType;
import mage.constants.CardType;
import mage.constants.Outcome;
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);
// Equipped creature gets +1/+1 and has haste.
this.addAbility(new EquipAbility(Outcome.AddAbility, new GenericManaCost(1)));
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(HasteAbility.getInstance(), AttachmentType.EQUIPMENT)));
Ability ability = new SimpleStaticAbility(new BoostEquippedEffect(1, 1));
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.)
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEquippedEffect(1, 1)));
this.addAbility(new EquipAbility(Outcome.AddAbility, new GenericManaCost(1)));
}
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.
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);
}

View file

@ -3,7 +3,6 @@ package mage.cards.s;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.DiesSourceTriggeredAbility;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.ExileSourceEffect;
import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect;
import mage.cards.CardImpl;
@ -16,7 +15,6 @@ import mage.target.common.TargetCardInYourGraveyard;
import java.util.UUID;
/**
*
* @author jmharmon
@ -39,9 +37,8 @@ public final class SylvanHierophant extends CardImpl {
this.toughness = new MageInt(2);
// 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.addEffect(effect);
ability.addEffect(new ReturnFromGraveyardToHandTargetEffect().concatBy(", then"));
ability.addTarget(new TargetCardInYourGraveyard(filter));
this.addAbility(ability);
}

View file

@ -54,7 +54,7 @@ public final class TadeasJuniperAscendant extends CardImpl {
// Tadeas has hexproof unless it's attacking.
this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect(
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.
@ -123,6 +123,7 @@ class TadeasJuniperAscendantEvasionEffect extends RestrictionEffect {
return this.targetPointer.getTargets(game, source).contains(permanent.getId());
}
@Override
public boolean canBeBlocked(Permanent attacker, Permanent blocker, Ability source, Game game, boolean canUseChooseDialogs) {
return blocker.getPower().getValue() <= attacker.getPower().getValue();
}

View file

@ -68,7 +68,7 @@ class TemurWarShamanTriggeredAbility extends TurnedFaceUpAllTriggeredAbility {
@Override
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(
new GainAbilitySourceEffect(TrampleAbility.getInstance()), TheHowlingAbominationCondition.instance,
"{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.
Ability ability = new SourceBecomesTargetTriggeredAbility(new BoostSourceEffect(
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)
.setText("and deals 2 damage to each opponent"));
this.addAbility(ability.withFlavorWord("Electric Thunder"));
this.addAbility(ability);
}
private TheHowlingAbomination(final TheHowlingAbomination card) {

View file

@ -27,8 +27,6 @@ import mage.game.stack.StackObject;
*/
public final class ThrunBreakerOfSilence extends CardImpl {
public ThrunBreakerOfSilence(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{G}{G}");
@ -65,18 +63,18 @@ public final class ThrunBreakerOfSilence extends CardImpl {
class ThrunBreakerOfSilenceEffect extends ContinuousRuleModifyingEffectImpl {
public ThrunBreakerOfSilenceEffect() {
super(Duration.WhileOnBattlefield, Outcome.BoostCreature);
ThrunBreakerOfSilenceEffect() {
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";
}
public ThrunBreakerOfSilenceEffect(final mage.cards.t.ThrunBreakerOfSilenceEffect effect) {
private ThrunBreakerOfSilenceEffect(final ThrunBreakerOfSilenceEffect effect) {
super(effect);
}
@Override
public mage.cards.t.ThrunBreakerOfSilenceEffect copy() {
return new mage.cards.t.ThrunBreakerOfSilenceEffect(this);
public ThrunBreakerOfSilenceEffect copy() {
return new ThrunBreakerOfSilenceEffect(this);
}
@Override

View file

@ -49,7 +49,7 @@ public final class TyrantsFamiliar extends CardImpl {
Ability gainedAbility = new AttacksTriggeredAbility(new DamageTargetEffect(7, "it"), false);
gainedAbility.addTarget(new TargetPermanent(filter));
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));
}

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.
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}
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 DiscardCardCost());
ability.addTarget(new TargetAnyTarget());
this.addAbility(ability.withFlavorWord("Hadoken"));
this.addAbility(ability);
}
private VikyaScorchingStalwart(final VikyaScorchingStalwart card) {

View file

@ -45,7 +45,7 @@ public final class VonasHunger extends CardImpl {
this.getSpellAbility().addEffect(new ConditionalOneShotEffect(
new VonasHungerEffect(),
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) {

View file

@ -35,7 +35,8 @@ public final class VoraciousVampire extends CardImpl {
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.
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.setText("and gains menace until end of turn.");
ability.addEffect(effect);

View file

@ -29,7 +29,7 @@ import mage.filter.predicate.permanent.TokenPredicate;
*/
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 {
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."
Ability abilityToGain = new DiesSourceTriggeredAbility(new ManifestEffect(1));
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(
Zone.ALL, effect, new SacrificeSourceCost()));
}

View file

@ -108,7 +108,7 @@ class WrexialTheRisenDeepTriggeredAbility extends TriggeredAbilityImpl {
return "Whenever {this} deals combat damage to a player, "
+ "you may cast target instant or sorcery card "
+ "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));
// 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) {

View file

@ -27,7 +27,7 @@ public class WhisperwoodElementalTest extends CardTestPlayerBase {
addCard(Zone.BATTLEFIELD, playerA, "Silvercoat Lion", 1);
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");
setStopAt(1, PhaseStep.END_TURN);

View file

@ -19,7 +19,7 @@ public class ExileTopCreatureCardOfGraveyardCost extends CostImpl {
public ExileTopCreatureCardOfGraveyardCost(int 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) {

View file

@ -22,7 +22,7 @@ public class ReturnToHandFromGraveyardCost extends CostImpl {
public ReturnToHandFromGraveyardCost(TargetCardInYourGraveyard 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) {

View file

@ -76,11 +76,4 @@ public class DamageAllEffect extends OneShotEffect {
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) {
super(Outcome.Damage);
this.amount = amount;
this.staticText = "{this} deals " + amount + " damage to target creature" +
(amount instanceof StaticValue ? "" : ", where X is " + amount.getMessage()) +
this.staticText = "{this} deals " + (amount instanceof StaticValue ? amount : "X") + " damage to target creature" +
(amount instanceof StaticValue ? "" : ", where X is the number of " + amount.getMessage()) +
". 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.effects.ContinuousEffectImpl;
import mage.abilities.keyword.ProtectionAbility;
import mage.abilities.mana.ManaAbility;
import mage.constants.*;
import mage.game.Game;
import mage.game.permanent.Permanent;
@ -143,7 +144,9 @@ public class GainAbilityAttachedEffect extends ContinuousEffectImpl {
}
boolean quotes = ability instanceof SimpleActivatedAbility
|| ability instanceof TriggeredAbility
|| ability instanceof LoyaltyAbility;
|| ability instanceof LoyaltyAbility
|| ability instanceof ManaAbility
|| ability.getRule().startsWith("If ");
if (quotes) {
sb.append('"');
}

View file

@ -29,7 +29,7 @@ public class SearchLibraryGraveyardWithLessMVPutIntoPlay extends OneShotEffect {
public SearchLibraryGraveyardWithLessMVPutIntoPlay(FilterCard filter) {
super(Outcome.PutCreatureInPlay);
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) {