many the text fixes

This commit is contained in:
xenohedron 2023-11-19 21:37:37 -05:00
parent 8f89253b58
commit 1816c8ad73
99 changed files with 208 additions and 227 deletions

View file

@ -10,7 +10,6 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.Zone;
import mage.filter.StaticFilters;
/**
@ -24,7 +23,8 @@ public final class AbsoluteGrace extends CardImpl {
// All creatures have protection from black.
Ability ability = ProtectionAbility.from(ObjectColor.BLACK);
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAllEffect(ability, Duration.WhileOnBattlefield, StaticFilters.FILTER_PERMANENT_CREATURES, false)));
this.addAbility(new SimpleStaticAbility(new GainAbilityAllEffect(ability, Duration.WhileOnBattlefield,
StaticFilters.FILTER_PERMANENT_ALL_CREATURES, false)));
}
private AbsoluteGrace(final AbsoluteGrace card) {

View file

@ -1,4 +1,3 @@
package mage.cards.a;
import java.util.UUID;
@ -11,7 +10,6 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.Zone;
import mage.filter.StaticFilters;
/**
@ -24,7 +22,8 @@ public final class AbsoluteLaw extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{W}");
Ability ability = ProtectionAbility.from(ObjectColor.RED);
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAllEffect(ability, Duration.WhileOnBattlefield, StaticFilters.FILTER_PERMANENT_CREATURES, false)));
this.addAbility(new SimpleStaticAbility(new GainAbilityAllEffect(ability, Duration.WhileOnBattlefield,
StaticFilters.FILTER_PERMANENT_ALL_CREATURES, false)));
}
private AbsoluteLaw(final AbsoluteLaw card) {

View file

@ -1,36 +1,34 @@
package mage.cards.a;
import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTappedAbility;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.ExileSourceCost;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.effects.OneShotEffect;
import mage.cards.*;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Outcome;
import mage.constants.Zone;
import mage.game.Game;
import mage.game.GameState;
import mage.players.PlayerList;
import java.util.UUID;
/**
*
* @author azra1l <algee2005@gmail.com>
*/
public final class AeonEngine extends CardImpl {
public AeonEngine(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{5}");
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{5}");
// Aeon Engine enters the battlefield tapped.
this.addAbility(new EntersBattlefieldTappedAbility());
// {T}, Exile Aeon Engine: Reverse the game’s turn order. (For example, if play had proceeded clockwise around the table, it now goes counterclockwise.)
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new AeonEngineEffect(), new TapSourceCost());
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new AeonEngineEffect(), new TapSourceCost());
ability.addCost(new ExileSourceCost());
this.addAbility(ability);
this.addAbility(ability);
}
private AeonEngine(final AeonEngine card) {
@ -44,9 +42,10 @@ public final class AeonEngine extends CardImpl {
}
class AeonEngineEffect extends OneShotEffect {
public AeonEngineEffect() {
AeonEngineEffect() {
super(Outcome.Benefit);
this.staticText = "Reverse the game turn order.";
this.staticText = "Reverse the game's turn order.";
}
private AeonEngineEffect(final AeonEngineEffect effect) {
@ -60,6 +59,6 @@ class AeonEngineEffect extends OneShotEffect {
public boolean apply(Game game, Ability source) {
game.getState().setReverseTurnOrder(true);
return true;
}
}
}

View file

@ -35,7 +35,7 @@ public final class ArcaneSpyglass extends CardImpl {
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(1), new GenericManaCost(2));
ability.addCost(new TapSourceCost());
ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent(filter)));
ability.addEffect(new AddCountersSourceEffect(CounterType.CHARGE.createInstance()));
ability.addEffect(new AddCountersSourceEffect(CounterType.CHARGE.createInstance()).concatBy("and"));
this.addAbility(ability);
// Remove three charge counters from Arcane Spyglass: Draw a card.

View file

@ -1,4 +1,3 @@
package mage.cards.a;
import java.util.UUID;
@ -20,10 +19,9 @@ public final class Attunement extends CardImpl {
public Attunement(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{2}{U}");
// Return Attunement to its owner's hand: Draw three cards, then discard four cards.
SimpleActivatedAbility ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(3), new ReturnToHandFromBattlefieldSourceCost());
ability.addEffect(new DiscardControllerEffect(4));
ability.addEffect(new DiscardControllerEffect(4).concatBy(", then"));
this.addAbility(ability);
}

View file

@ -1,4 +1,3 @@
package mage.cards.a;
import java.util.UUID;
@ -31,7 +30,8 @@ public final class AvacynianMissionaries extends CardImpl {
// At the beginning of your end step, if Avacynian Missionaries is equipped, transform it.
this.addAbility(new TransformAbility());
this.addAbility(new BeginningOfEndStepTriggeredAbility(Zone.BATTLEFIELD, new TransformSourceEffect(), TargetController.YOU, EquippedSourceCondition.instance, false));
this.addAbility(new BeginningOfEndStepTriggeredAbility(Zone.BATTLEFIELD, new TransformSourceEffect().setText("transform it"),
TargetController.YOU, EquippedSourceCondition.instance, false));
}

View file

@ -1,4 +1,3 @@
package mage.cards.b;
import mage.MageInt;
@ -12,8 +11,7 @@ import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.SuperType;
import mage.constants.Zone;
import mage.filter.common.FilterControlledPermanent;
import mage.target.common.TargetControlledPermanent;
import mage.filter.StaticFilters;
import mage.target.common.TargetCreaturePermanent;
import java.util.UUID;
@ -34,7 +32,7 @@ public final class BarrinMasterWizard extends CardImpl {
//{2}, Sacrifice a permanent: Return target creature to its owner's hand.
SimpleActivatedAbility ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ReturnToHandTargetEffect(), new ManaCostsImpl<>("{2}"));
ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent(new FilterControlledPermanent())));
ability.addCost(new SacrificeTargetCost(StaticFilters.FILTER_CONTROLLED_PERMANENT_SHORT_TEXT));
ability.addTarget(new TargetCreaturePermanent());
this.addAbility(ability);
}
@ -47,4 +45,4 @@ public final class BarrinMasterWizard extends CardImpl {
public BarrinMasterWizard copy() {
return new BarrinMasterWizard(this);
}
}
}

View file

@ -38,7 +38,7 @@ public final class BlitzwingAdaptiveAssailant extends CardImpl {
// At the beginning of combat on your turn, choose flying or indestructible at random. Blitzwing gains that ability until end of turn.
this.addAbility(new BeginningOfCombatTriggeredAbility(
new BlitzwingCruelTormentorEffect(), TargetController.YOU, false
new BlitzwingAdaptiveAssailantEffect(), TargetController.YOU, false
));
// Whenever Blitzwing deals combat damage to a player, convert it.

View file

@ -1,4 +1,3 @@
package mage.cards.b;
import java.util.UUID;
@ -20,10 +19,11 @@ public final class Breach extends CardImpl {
public Breach(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{2}{B}");
// Target creature gets +2/+0 and gains fear until end of turn.
this.getSpellAbility().addEffect(new BoostTargetEffect(2, 0, Duration.EndOfTurn));
this.getSpellAbility().addEffect(new GainAbilityTargetEffect(FearAbility.getInstance(), Duration.EndOfTurn));
this.getSpellAbility().addEffect(new BoostTargetEffect(2, 0, Duration.EndOfTurn)
.setText("target creature gets +2/+0"));
this.getSpellAbility().addEffect(new GainAbilityTargetEffect(FearAbility.getInstance(), Duration.EndOfTurn)
.setText("and gains fear until end of turn"));
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
}

View file

@ -1,4 +1,3 @@
package mage.cards.b;
import java.util.UUID;
@ -41,7 +40,8 @@ public final class Burnout extends CardImpl {
// Draw a card at the beginning of the next turn's upkeep.
this.getSpellAbility().addEffect(new CreateDelayedTriggeredAbilityEffect(
new AtTheBeginOfNextUpkeepDelayedTriggeredAbility(new DrawCardSourceControllerEffect(1), Duration.OneUse), false));
new AtTheBeginOfNextUpkeepDelayedTriggeredAbility(new DrawCardSourceControllerEffect(1), Duration.OneUse), false)
.concatBy("<br>"));
}
private Burnout(final Burnout card) {
@ -56,7 +56,7 @@ public final class Burnout extends CardImpl {
class BurnoutCounterTargetEffect extends OneShotEffect {
public BurnoutCounterTargetEffect() {
BurnoutCounterTargetEffect() {
super(Outcome.Detriment);
}
@ -77,4 +77,4 @@ class BurnoutCounterTargetEffect extends OneShotEffect {
}
return true;
}
}
}

View file

@ -18,7 +18,7 @@ import java.util.UUID;
public final class CavalcadeOfCalamity extends CardImpl {
private static final FilterCreaturePermanent filter
= new FilterCreaturePermanent("creaure you control with power 1 or less");
= new FilterCreaturePermanent("creature you control with power 1 or less");
static {
filter.add(TargetController.YOU.getControllerPredicate());
@ -68,4 +68,4 @@ class CavalcadeOfCalamityEffect extends OneShotEffect {
source.getSourceId(), source, game, false, true
) > 0;
}
}
}

View file

@ -32,7 +32,7 @@ public final class Cindervines extends CardImpl {
// Whenever an opponent casts a noncreature spell, Cindervines deals 1 damage to that player.
this.addAbility(new SpellCastOpponentTriggeredAbility(
Zone.BATTLEFIELD, new DamageTargetEffect(1, true, "that player"),
StaticFilters.FILTER_SPELL_NON_CREATURE, false, SetTargetPointer.PLAYER
StaticFilters.FILTER_SPELL_A_NON_CREATURE, false, SetTargetPointer.PLAYER
));
// {1}, Sacrifice Cindervines: Destroy target artifact or enchantment. Cindervines deals 2 damage to that permanent's controller.
@ -85,4 +85,4 @@ class CindervinesEffect extends OneShotEffect {
player.damage(2, source.getSourceId(), source, game);
return true;
}
}
}

View file

@ -1,4 +1,3 @@
package mage.cards.c;
import java.util.UUID;
@ -11,7 +10,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Zone;
import mage.target.common.TargetControlledPermanent;
import mage.filter.StaticFilters;
/**
*
@ -24,7 +23,7 @@ public final class ClawsOfGix extends CardImpl {
//{1}, Sacrifice a permanent: You gain 1 life.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new GainLifeEffect(1), new GenericManaCost(1));
ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent()));
ability.addCost(new SacrificeTargetCost(StaticFilters.FILTER_CONTROLLED_PERMANENT_SHORT_TEXT));
this.addAbility(ability);
}

View file

@ -65,7 +65,7 @@ class CliffsideRescuerEffect extends OneShotEffect {
CliffsideRescuerEffect() {
super(Outcome.Benefit);
staticText = "Target permanent you control gets protection from each opponent until end of turn.";
staticText = "Target permanent you control gains protection from each of your opponents until end of turn.";
}
private CliffsideRescuerEffect(final CliffsideRescuerEffect effect) {

View file

@ -1,4 +1,3 @@
package mage.cards.c;
import java.util.UUID;
@ -7,7 +6,7 @@ import mage.abilities.keyword.UndauntedAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.filter.common.FilterNonlandPermanent;
import mage.filter.StaticFilters;
/**
*
@ -21,7 +20,7 @@ public final class CoastalBreach extends CardImpl {
// Undaunted
this.addAbility(new UndauntedAbility());
// Return all nonland permanents to their owners' hands.
this.getSpellAbility().addEffect(new ReturnToHandFromBattlefieldAllEffect(new FilterNonlandPermanent()));
this.getSpellAbility().addEffect(new ReturnToHandFromBattlefieldAllEffect(StaticFilters.FILTER_PERMANENTS_NON_LAND));
}
private CoastalBreach(final CoastalBreach card) {

View file

@ -2,7 +2,6 @@ package mage.cards.c;
import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.Mode;
import mage.abilities.TriggeredAbilityImpl;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.TapSourceCost;
@ -86,7 +85,7 @@ class ContestedWarZoneAbility extends TriggeredAbilityImpl {
@Override
public String getRule() {
return "Whenever a creature deals combat damage to you, that creature's controller gains control of {this}";
return "Whenever a creature deals combat damage to you, that creature's controller gains control of {this}.";
}
}

View file

@ -24,12 +24,14 @@ import java.util.UUID;
*/
public final class ConversionChamber extends CardImpl {
private static final FilterArtifactCard filter = new FilterArtifactCard("artifact card from a graveyard");
public ConversionChamber(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{3}");
// {2}, {T}: Exile target artifact card from a graveyard. Put a charge counter on Conversion Chamber.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ExileTargetEffect(), new GenericManaCost(2));
ability.addEffect(new AddCountersSourceEffect(CounterType.CHARGE.createInstance()));
ability.addTarget(new TargetCardInGraveyard(new FilterArtifactCard("artifact card from a graveyard")));
ability.addTarget(new TargetCardInGraveyard(filter));
ability.addCost(new TapSourceCost());
this.addAbility(ability);
// {2}, {T}, Remove a charge counter from Conversion Chamber: Create a 3/3 colorless Golem artifact creature token.
@ -49,4 +51,4 @@ public final class ConversionChamber extends CardImpl {
return new ConversionChamber(this);
}
}
}

View file

@ -34,7 +34,7 @@ public final class CorpseCur extends CardImpl {
this.power = new MageInt(2);
this.toughness = new MageInt(2);
this.addAbility(InfectAbility.getInstance());
Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnFromGraveyardToHandTargetEffect());
Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnFromGraveyardToHandTargetEffect(), true);
ability.addTarget(new TargetCardInYourGraveyard(filter));
this.addAbility(ability);
}

View file

@ -56,7 +56,7 @@ class CurseOfBountyEffect extends OneShotEffect {
CurseOfBountyEffect() {
super(Outcome.Benefit);
this.staticText = "untap all nonland permanents you control. Each opponent attacking that player does the same.";
this.staticText = "untap all nonland permanents you control. Each opponent attacking that player untaps all nonland permanents they control.";
}
private CurseOfBountyEffect(final CurseOfBountyEffect effect) {

View file

@ -3,7 +3,6 @@ package mage.cards.c;
import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.TriggeredAbilityImpl;
import mage.abilities.effects.Effect;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.AttachEffect;
import mage.abilities.effects.common.counter.AddCountersTargetEffect;
@ -17,7 +16,6 @@ import mage.constants.Zone;
import mage.counters.CounterType;
import mage.game.Game;
import mage.game.events.GameEvent;
import mage.game.events.GameEvent.EventType;
import mage.game.permanent.Permanent;
import mage.game.stack.Spell;
import mage.players.Player;
@ -59,14 +57,10 @@ public final class CurseOfVengeance extends CardImpl {
class CurseOfVengeanceTriggeredAbility extends TriggeredAbilityImpl {
public CurseOfVengeanceTriggeredAbility() {
CurseOfVengeanceTriggeredAbility() {
super(Zone.BATTLEFIELD, new AddCountersTargetEffect(CounterType.SPITE.createInstance(), Outcome.Detriment), false);
}
public CurseOfVengeanceTriggeredAbility(Effect effect, boolean optional, String text) {
super(Zone.BATTLEFIELD, effect, optional);
}
private CurseOfVengeanceTriggeredAbility(final CurseOfVengeanceTriggeredAbility ability) {
super(ability);
}
@ -92,7 +86,7 @@ class CurseOfVengeanceTriggeredAbility extends TriggeredAbilityImpl {
@Override
public String getRule() {
return "Whenever enchanted player casts a spell, put a spite counter on {this}";
return "Whenever enchanted player casts a spell, put a spite counter on {this}.";
}
@Override
@ -103,8 +97,9 @@ class CurseOfVengeanceTriggeredAbility extends TriggeredAbilityImpl {
class CurseOfVengeancePlayerLosesTriggeredAbility extends TriggeredAbilityImpl {
public CurseOfVengeancePlayerLosesTriggeredAbility() {
CurseOfVengeancePlayerLosesTriggeredAbility() {
super(Zone.BATTLEFIELD, new CurseOfVengeanceDrawLifeEffect(), false);
setTriggerPhrase("When enchanted player loses the game, ");
}
private CurseOfVengeancePlayerLosesTriggeredAbility(final CurseOfVengeancePlayerLosesTriggeredAbility ability) {
@ -127,16 +122,11 @@ class CurseOfVengeancePlayerLosesTriggeredAbility extends TriggeredAbilityImpl {
return sourceObject != null && sourceObject.isAttachedTo(event.getPlayerId());
}
@Override
public String getRule() {
return "When enchanted player loses the game, you gain X life and "
+ "draw X cards, where X is the number of spite counters on {this}";
}
}
class CurseOfVengeanceDrawLifeEffect extends OneShotEffect {
public CurseOfVengeanceDrawLifeEffect() {
CurseOfVengeanceDrawLifeEffect() {
super(Outcome.Benefit);
staticText = "you gain X life and draw X cards, where X is the "
+ "number of spite counters on {this}";

View file

@ -1,4 +1,3 @@
package mage.cards.d;
import java.util.UUID;
@ -23,7 +22,7 @@ import mage.filter.predicate.mageobject.AbilityPredicate;
*/
public final class DauthiWarlord extends CardImpl {
private static final FilterPermanent filter = new FilterCreaturePermanent("creatures with shadow");
private static final FilterPermanent filter = new FilterCreaturePermanent("creatures with shadow on the battlefield");
static{
filter.add(new AbilityPredicate(ShadowAbility.class));

View file

@ -20,9 +20,10 @@ public final class DenyTheWitch extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{W}{U}{B}");
// Counter target spell, activated ability, or triggered ability. Its controller loses life equal to the number of creatures you control.
this.getSpellAbility().addEffect(new CounterTargetEffect());
this.getSpellAbility().addEffect(new CounterTargetEffect().setText("Counter target spell, activated ability, or triggered ability"));
this.getSpellAbility().addTarget(new TargetStackObject());
this.getSpellAbility().addEffect(new LoseLifeTargetControllerEffect(CreaturesYouControlCount.instance));
this.getSpellAbility().addEffect(new LoseLifeTargetControllerEffect(CreaturesYouControlCount.instance)
.setText("Its controller loses life equal to the number of creatures you control"));
this.getSpellAbility().addHint(CreaturesYouControlHint.instance);
}

View file

@ -42,7 +42,7 @@ public final class EldraziObligator extends CardImpl {
DoIfCostPaid costPaidEffect = new DoIfCostPaid(new GainControlTargetEffect(Duration.EndOfTurn), new ManaCostsImpl<>("{1}{C}"));
Effect untapEffect = new UntapTargetEffect();
untapEffect.setText("untap that creature,");
untapEffect.setText(", untap that creature,");
Effect hasteEffect = new GainAbilityTargetEffect(HasteAbility.getInstance(), Duration.EndOfTurn);
hasteEffect.setText("and it gains haste until end of turn");
costPaidEffect.addEffect(untapEffect);

View file

@ -1,4 +1,3 @@
package mage.cards.e;
import java.util.UUID;
@ -36,7 +35,8 @@ public final class Enervate extends CardImpl {
this.getSpellAbility().addTarget(new TargetPermanent(filter));
// Draw a card at the beginning of the next turn's upkeep.
this.getSpellAbility().addEffect(new CreateDelayedTriggeredAbilityEffect(new AtTheBeginOfNextUpkeepDelayedTriggeredAbility(new DrawCardSourceControllerEffect(1)), false));
this.getSpellAbility().addEffect(new CreateDelayedTriggeredAbilityEffect(new AtTheBeginOfNextUpkeepDelayedTriggeredAbility(
new DrawCardSourceControllerEffect(1)), false).concatBy("<br>"));
}
private Enervate(final Enervate card) {

View file

@ -48,7 +48,7 @@ class EssenceFluxEffect extends OneShotEffect {
EssenceFluxEffect() {
super(Outcome.Benefit);
staticText = "return that card to the battlefield under its owner's control. If it's a Spirit, put a +1/+1 counter on it";
staticText = ", then return that card to the battlefield under its owner's control. If it's a Spirit, put a +1/+1 counter on it";
}
private EssenceFluxEffect(final EssenceFluxEffect effect) {

View file

@ -53,9 +53,9 @@ public final class FatalGrudge extends CardImpl {
class FatalGrudgeEffect extends OneShotEffect {
public FatalGrudgeEffect() {
FatalGrudgeEffect() {
super(Outcome.Sacrifice);
this.staticText = "each opponent chooses a permanent they control that shares a type with the sacrificed permanent and sacrifices it";
this.staticText = "each opponent chooses a permanent they control that shares a card type with the sacrificed permanent and sacrifices it";
}
private FatalGrudgeEffect(final FatalGrudgeEffect effect) {

View file

@ -43,7 +43,7 @@ public final class FearsomeTemper extends CardImpl {
Ability grantedAbility = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CantBeBlockedByTargetSourceEffect(Duration.EndOfTurn), new ManaCostsImpl<>("{2}{R}"));
grantedAbility.addTarget(new TargetCreaturePermanent());
effect = new GainAbilityAttachedEffect(grantedAbility, AttachmentType.AURA, Duration.WhileOnBattlefield);
effect.setText("and has \"{2}{R}: Target creature can't block this creature this turn");
effect.setText("and has \"{2}{R}: Target creature can't block this creature this turn.\"");
ability.addEffect(effect);
this.addAbility(ability);

View file

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

View file

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

View file

@ -28,12 +28,13 @@ public final class Foreshadow extends CardImpl {
// Choose a card name, then target opponent puts the top card of their library into their graveyard. If that card has the chosen name, you draw a card.
this.getSpellAbility().addEffect(new ChooseACardNameEffect(ChooseACardNameEffect.TypeOfName.ALL));
this.getSpellAbility().addEffect(new ForeshadowEffect().concatBy("then"));
this.getSpellAbility().addEffect(new ForeshadowEffect().concatBy(", then"));
this.getSpellAbility().addTarget(new TargetOpponent());
// Draw a card at the beginning of the next turn's upkeep.
this.getSpellAbility().addEffect(new CreateDelayedTriggeredAbilityEffect(
new AtTheBeginOfNextUpkeepDelayedTriggeredAbility(new DrawCardSourceControllerEffect(1)), false));
new AtTheBeginOfNextUpkeepDelayedTriggeredAbility(new DrawCardSourceControllerEffect(1)), false)
.concatBy("<br>"));
}
private Foreshadow(final Foreshadow card) {
@ -50,7 +51,7 @@ class ForeshadowEffect extends OneShotEffect {
ForeshadowEffect() {
super(Outcome.DrawCard);
this.staticText = "target opponent mills a card. If that card has the chosen name, you draw a card";
this.staticText = "target opponent mills a card. If a card with the chosen name was milled this way, you draw a card";
}
private ForeshadowEffect(final ForeshadowEffect effect) {

View file

@ -27,7 +27,7 @@ public final class Frostling extends CardImpl {
this.power = new MageInt(1);
this.toughness = new MageInt(1);
// Sacrifice Frostling: Frostling deals 1 damage to target creature.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(1), new SacrificeSourceCost());
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(1, "it"), new SacrificeSourceCost());
ability.addTarget(new TargetCreaturePermanent());
this.addAbility(ability);
}

View file

@ -35,7 +35,7 @@ public final class GhostLitRaider extends CardImpl {
ability.addTarget(new TargetCreaturePermanent());
this.addAbility(ability);
// Channel - {3}{R}, Discard Ghost-Lit Raider: Ghost-Lit Raider deals 4 damage to target creature.
Ability ability2 = new ChannelAbility("{3}{R}", new DamageTargetEffect(4));
Ability ability2 = new ChannelAbility("{3}{R}", new DamageTargetEffect(4, "it"));
ability2.addTarget(new TargetCreaturePermanent());
this.addAbility(ability2);
}

View file

@ -85,7 +85,7 @@ class GiftOfDoomEffect extends OneShotEffect {
GiftOfDoomEffect() {
super(Outcome.Benefit);
staticText = "attach it to a creature";
staticText = "you may attach it to a creature";
}
private GiftOfDoomEffect(final GiftOfDoomEffect effect) {

View file

@ -1,4 +1,3 @@
package mage.cards.g;
import java.util.UUID;
@ -25,7 +24,8 @@ public final class GloriousEnd extends CardImpl {
// At the beginning of your next end step, you lose the game.
getSpellAbility().addEffect(new CreateDelayedTriggeredAbilityEffect(
new AtTheBeginOfNextEndStepDelayedTriggeredAbility(new LoseGameSourceControllerEffect(), TargetController.YOU)));
new AtTheBeginOfNextEndStepDelayedTriggeredAbility(new LoseGameSourceControllerEffect(), TargetController.YOU))
.concatBy("<br>"));
}
private GloriousEnd(final GloriousEnd card) {

View file

@ -1,4 +1,3 @@
package mage.cards.g;
import java.util.UUID;
@ -25,12 +24,11 @@ import mage.target.TargetPermanent;
*/
public final class GoblinWizard extends CardImpl {
private static final FilterPermanentCard filter = new FilterPermanentCard("Goblin");
private static final FilterPermanent goblinPermanent = new FilterPermanent("Goblin");
private static final FilterPermanentCard filterCard = new FilterPermanentCard("a Goblin permanent card");
private static final FilterPermanent filter2 = new FilterPermanent(SubType.GOBLIN, "Goblin");
static {
filter.add(SubType.GOBLIN.getPredicate());
goblinPermanent.add(SubType.GOBLIN.getPredicate());
filterCard.add(SubType.GOBLIN.getPredicate());
}
public GoblinWizard(UUID ownerId, CardSetInfo setInfo) {
@ -45,13 +43,13 @@ public final class GoblinWizard extends CardImpl {
// {tap}: You may put a Goblin permanent card from your hand onto the battlefield.
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD,
new PutCardFromHandOntoBattlefieldEffect(filter),
new PutCardFromHandOntoBattlefieldEffect(filterCard),
new TapSourceCost()));
// {R}: Target Goblin gains protection from white until end of turn.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD,
new GainAbilityTargetEffect(ProtectionAbility.from(ObjectColor.WHITE), Duration.EndOfTurn), new ManaCostsImpl<>("{R}"));
Target target = new TargetPermanent(goblinPermanent);
Target target = new TargetPermanent(filter2);
ability.addTarget(target);
this.addAbility(ability);

View file

@ -1,4 +1,3 @@
package mage.cards.g;
import java.util.UUID;
@ -35,7 +34,8 @@ public final class GorillaWarCry extends CardImpl {
this.getSpellAbility().addEffect(effect);
// Draw a card at the beginning of the next turn's upkeep.
this.getSpellAbility().addEffect(new CreateDelayedTriggeredAbilityEffect(new AtTheBeginOfNextUpkeepDelayedTriggeredAbility(new DrawCardSourceControllerEffect(1)), false));
this.getSpellAbility().addEffect(new CreateDelayedTriggeredAbilityEffect(new AtTheBeginOfNextUpkeepDelayedTriggeredAbility(
new DrawCardSourceControllerEffect(1)), false).concatBy("<br>"));
}
private GorillaWarCry(final GorillaWarCry card) {

View file

@ -15,6 +15,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.*;
import mage.filter.FilterPermanent;
import mage.filter.StaticFilters;
import mage.filter.common.FilterControlledCreaturePermanent;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.mageobject.ColorPredicate;
@ -32,11 +33,12 @@ import java.util.UUID;
public final class GrandArchitect extends CardImpl {
private static final FilterCreaturePermanent boostFilter = new FilterCreaturePermanent("blue creatures");
private static final FilterCreaturePermanent targetFilter = new FilterCreaturePermanent("artifact creature");
private static final FilterControlledCreaturePermanent tapFilter = new FilterControlledCreaturePermanent("untapped blue creature you control");
static {
boostFilter.add(new ColorPredicate(ObjectColor.BLUE));
targetFilter.add(CardType.ARTIFACT.getPredicate());
tapFilter.add(new ColorPredicate(ObjectColor.BLUE));
tapFilter.add(TappedPredicate.UNTAPPED);
}
public GrandArchitect(UUID ownerId, CardSetInfo setInfo) {
@ -52,14 +54,11 @@ public final class GrandArchitect extends CardImpl {
// {U}: Target artifact creature becomes blue until end of turn.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new GrandArchitectEffect(), new ManaCostsImpl<>("{U}"));
ability.addTarget(new TargetPermanent(targetFilter));
ability.addTarget(new TargetPermanent(StaticFilters.FILTER_PERMANENT_ARTIFACT_CREATURE));
this.addAbility(ability);
// Tap an untapped blue creature you control: Add {C}{C}. Spend this mana only to cast artifact spells or activate abilities of artifacts.
FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("untapped blue creature");
filter.add(new ColorPredicate(ObjectColor.BLUE));
filter.add(TappedPredicate.UNTAPPED);
this.addAbility(new GrandArchitectManaAbility(filter));
this.addAbility(new GrandArchitectManaAbility(tapFilter));
}
private GrandArchitect(final GrandArchitect card) {
@ -75,7 +74,7 @@ public final class GrandArchitect extends CardImpl {
class GrandArchitectEffect extends ContinuousEffectImpl {
public GrandArchitectEffect() {
GrandArchitectEffect() {
super(Duration.EndOfTurn, Layer.ColorChangingEffects_5, SubLayer.NA, Outcome.Detriment);
staticText = "Target artifact creature becomes blue until end of turn";
}
@ -129,7 +128,7 @@ class GrandArchitectManaAbility extends ActivatedManaAbilityImpl {
class GrandArchitectConditionalMana extends ConditionalMana {
public GrandArchitectConditionalMana() {
GrandArchitectConditionalMana() {
super(Mana.ColorlessMana(2));
staticText = "Spend this mana only to cast artifact spells or activate abilities of artifacts";
addCondition(new GrandArchitectManaCondition());

View file

@ -1,4 +1,3 @@
package mage.cards.g;
import mage.MageInt;
@ -13,7 +12,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Zone;
import mage.filter.StaticFilters;
import mage.filter.common.FilterArtifactCard;
import mage.target.common.TargetCardInGraveyard;
import java.util.UUID;
@ -23,6 +22,8 @@ import java.util.UUID;
*/
public final class GraveRobbers extends CardImpl {
private static final FilterArtifactCard filter = new FilterArtifactCard("artifact card from a graveyard");
public GraveRobbers(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{B}{B}");
this.subtype.add(SubType.HUMAN);
@ -33,7 +34,7 @@ public final class GraveRobbers extends CardImpl {
// {B}, {tap}: Exile target artifact card from a graveyard. You gain 2 life.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ExileTargetEffect(), new ManaCostsImpl<>("{B}"));
ability.addCost(new TapSourceCost());
ability.addTarget(new TargetCardInGraveyard(StaticFilters.FILTER_CARD_ARTIFACT_FROM_YOUR_GRAVEYARD));
ability.addTarget(new TargetCardInGraveyard(filter));
ability.addEffect(new GainLifeEffect(2));
this.addAbility(ability);
}

View file

@ -1,4 +1,3 @@
package mage.cards.g;
import java.util.UUID;
@ -26,7 +25,8 @@ public final class Gravebind extends CardImpl {
getSpellAbility().addTarget(new TargetCreaturePermanent());
// Draw a card at the beginning of the next turn's upkeep.
this.getSpellAbility().addEffect(new CreateDelayedTriggeredAbilityEffect(new AtTheBeginOfNextUpkeepDelayedTriggeredAbility(new DrawCardSourceControllerEffect(1)), false));
this.getSpellAbility().addEffect(new CreateDelayedTriggeredAbilityEffect(new AtTheBeginOfNextUpkeepDelayedTriggeredAbility(
new DrawCardSourceControllerEffect(1)), false).concatBy("<br>"));
}
private Gravebind(final Gravebind card) {

View file

@ -1,4 +1,3 @@
package mage.cards.g;
import java.util.UUID;
@ -23,7 +22,7 @@ public final class GripOfTheRoil extends CardImpl {
// Tap target creature. It doesn't untap during its controller's next untap step.
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
this.getSpellAbility().addEffect(new TapTargetEffect());
this.getSpellAbility().addEffect(new DontUntapInControllersNextUntapStepTargetEffect());
this.getSpellAbility().addEffect(new DontUntapInControllersNextUntapStepTargetEffect("It"));
// Draw a card.
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1).concatBy("<br>"));

View file

@ -46,14 +46,14 @@ public final class GruulSpellbreaker extends CardImpl {
new GainAbilityControllerEffect(
HexproofAbility.getInstance(),
Duration.WhileOnBattlefield
), MyTurnCondition.instance, "As long as it's your turn, you and"
), MyTurnCondition.instance, "As long as it's your turn, you"
)
);
ability.addEffect(new ConditionalContinuousEffect(
new GainAbilitySourceEffect(
HexproofAbility.getInstance(),
Duration.WhileOnBattlefield
), MyTurnCondition.instance, "{this} have hexproof."
), MyTurnCondition.instance, "and {this} have hexproof."
));
ability.addHint(MyTurnHint.instance);
this.addAbility(ability);

View file

@ -50,7 +50,7 @@ class HarvestHandReturnTransformedEffect extends OneShotEffect {
HarvestHandReturnTransformedEffect() {
super(Outcome.PutCardInPlay);
this.staticText = "Return {this} to the battlefield transformed under your control";
this.staticText = "return it to the battlefield transformed under your control";
}
private HarvestHandReturnTransformedEffect(final HarvestHandReturnTransformedEffect effect) {

View file

@ -13,7 +13,6 @@ import mage.target.common.TargetLandPermanent;
import java.util.UUID;
/**
* @author fireshoes
*/
@ -27,7 +26,6 @@ public final class Icequake extends CardImpl {
this.getSpellAbility().addEffect(new IcequakeEffect());
this.getSpellAbility().addTarget(new TargetLandPermanent());
}
private Icequake(final Icequake card) {
@ -42,9 +40,9 @@ public final class Icequake extends CardImpl {
class IcequakeEffect extends OneShotEffect {
public IcequakeEffect() {
IcequakeEffect() {
super(Outcome.Damage);
this.staticText = "Destroy target land.<br>If that land was a snow land, {this} deals 1 damage to that land's controller.";
this.staticText = "Destroy target land. If that land was a snow land, {this} deals 1 damage to that land's controller.";
}
private IcequakeEffect(final IcequakeEffect effect) {

View file

@ -5,7 +5,6 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.filter.FilterPermanent;
import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.permanent.TokenPredicate;
@ -16,11 +15,17 @@ import java.util.UUID;
*/
public final class IncandescentAria extends CardImpl {
private static final FilterPermanent filter = new FilterCreaturePermanent("nontoken creature");
static {
filter.add(TokenPredicate.FALSE);
}
public IncandescentAria(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{R}{G}{W}");
// Incandescent Aria deals 3 damage to each nontoken creature.
this.getSpellAbility().addEffect(new DamageAllEffect(3, StaticFilters.FILTER_CREATURE_NON_TOKEN));
this.getSpellAbility().addEffect(new DamageAllEffect(3, filter));
}
private IncandescentAria(final IncandescentAria card) {

View file

@ -56,9 +56,9 @@ public final class InsultInjury extends SplitCard {
class InsultDoubleDamageEffect extends ReplacementEffectImpl {
public InsultDoubleDamageEffect() {
InsultDoubleDamageEffect() {
super(Duration.EndOfTurn, Outcome.Damage);
staticText = "If a source you control would deal damage this turn, it deals double that damage to that permanent or player instead.";
staticText = "If a source you control would deal damage this turn, it deals double that damage instead.";
}
private InsultDoubleDamageEffect(final InsultDoubleDamageEffect effect) {

View file

@ -19,7 +19,7 @@ import java.util.UUID;
public final class KjeldoranFrostbeast extends CardImpl {
private static final FilterPermanent filter
= new FilterCreaturePermanent("creatures blocking or blocked by it");
= new FilterCreaturePermanent("creatures blocking or blocked by {this}");
static {
filter.add(BlockingOrBlockedBySourcePredicate.EITHER);

View file

@ -43,7 +43,7 @@ public final class KuonOgreAscendant extends CardImpl {
this.addAbility(new BeginningOfEndStepTriggeredAbility(
Zone.BATTLEFIELD,
new FlipSourceEffect(new KuonsEssenceToken()),
TargetController.ANY,
TargetController.NEXT,
KuonOgreAscendantCondition.instance, false));
}

View file

@ -37,7 +37,7 @@ public final class MaelstromDjinn extends CardImpl {
// When Maelstrom Djinn is turned face up, put two time counters on it and it gains vanishing.
Ability ability = new TurnedFaceUpSourceTriggeredAbility(
new AddCountersSourceEffect(CounterType.TIME.createInstance(2))
new AddCountersSourceEffect(CounterType.TIME.createInstance(2)).setText("put two time counters on it")
);
ability.addEffect(new GainAbilitySourceEffect(
new VanishingAbility(0), Duration.WhileOnBattlefield

View file

@ -1,4 +1,3 @@
package mage.cards.m;
import java.util.UUID;
@ -24,7 +23,7 @@ public final class Metrognome extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{4}");
// When a spell or ability an opponent controls causes you to discard Metrognome, create four 1/1 colorless Gnome artifact creature tokens.
this.addAbility(new DiscardedByOpponentTriggeredAbility(new CreateTokenEffect(new GnomeToken(), 4)));
this.addAbility(new DiscardedByOpponentTriggeredAbility(new CreateTokenEffect(new GnomeToken(), 4), true));
// {4}, {tap}: Create a 1/1 colorless Gnome artifact creature token.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new GnomeToken()), new ManaCostsImpl<>("{4}"));

View file

@ -24,6 +24,8 @@ import mage.target.common.TargetCardInGraveyard;
*/
public final class MyrWelder extends CardImpl {
private static final FilterArtifactCard filter = new FilterArtifactCard("artifact card from a graveyard");
public MyrWelder(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{3}");
this.subtype.add(SubType.MYR);
@ -32,7 +34,7 @@ public final class MyrWelder extends CardImpl {
// Imprint - {tap}: Exile target artifact card from a graveyard
SimpleActivatedAbility ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new MyrWelderEffect(), new TapSourceCost());
ability.addTarget(new TargetCardInGraveyard(new FilterArtifactCard("artifact card from a graveyard")));
ability.addTarget(new TargetCardInGraveyard(filter));
this.addAbility(ability.setAbilityWord(AbilityWord.IMPRINT));
// Myr Welder has all activated abilities of all cards exiled with it
@ -53,7 +55,7 @@ public final class MyrWelder extends CardImpl {
class MyrWelderEffect extends OneShotEffect {
public MyrWelderEffect() {
MyrWelderEffect() {
super(Outcome.Exile);
staticText = "Exile target artifact card from a graveyard";
}

View file

@ -1,4 +1,3 @@
package mage.cards.n;
import java.util.UUID;
@ -49,9 +48,10 @@ public final class NissasJudgment extends CardImpl {
class NissasJudgmentEffect extends OneShotEffect {
public NissasJudgmentEffect() {
NissasJudgmentEffect() {
super(Outcome.Damage);
this.staticText = "Choose up to one target creature an opponent controls. Each creature you control with a +1/+1 counter on it deals damage equal to its power to that creature";
this.concatPrefix = "<br>";
}
private NissasJudgmentEffect(final NissasJudgmentEffect effect) {

View file

@ -30,7 +30,7 @@ import mage.target.common.TargetControlledCreaturePermanent;
*/
public final class ONaginata extends CardImpl {
private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("creature you control with 3 or more power ");
private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("creature with power 3 or greater");
static {
filter.add(new PowerPredicate(ComparisonType.MORE_THAN, 2));

View file

@ -29,7 +29,7 @@ public final class OngoingInvestigation extends CardImpl {
this.addAbility(new DealCombatDamageControlledTriggeredAbility(new InvestigateEffect()));
// {1}{G}, Exile a creature card from your graveyard: Investigate. You gain 2 life.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new InvestigateEffect(), new ManaCostsImpl<>("{1}{G}"));
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new InvestigateEffect().setText("investigate"), new ManaCostsImpl<>("{1}{G}"));
ability.addCost(new ExileFromGraveCost(new TargetCardInYourGraveyard(new FilterCreatureCard("a creature card from your graveyard"))));
ability.addEffect(new GainLifeEffect(2));
this.addAbility(ability);

View file

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

View file

@ -1,8 +1,6 @@
package mage.cards.p;
import java.util.UUID;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.UntapTargetEffect;
import mage.abilities.effects.common.continuous.GainAbilityTargetEffect;
import mage.abilities.effects.common.continuous.GainControlTargetEffect;
@ -31,7 +29,7 @@ public final class PressIntoService extends CardImpl {
this.getSpellAbility().addTarget(new TargetCreaturePermanent()); // First target is used by Support
this.getSpellAbility().addEffect(new GainControlTargetEffect(Duration.EndOfTurn)
.setText("Gain control of target creature until end of turn")
.setText("Gain control of target creature until end of turn").concatBy("<br>")
.setTargetPointer(new SecondTargetPointer())
);
this.getSpellAbility().addEffect(new UntapTargetEffect()

View file

@ -1,4 +1,3 @@
package mage.cards.q;
import java.util.UUID;
@ -31,7 +30,8 @@ public final class Quagnoth extends CardImpl {
this.addAbility(ShroudAbility.getInstance());
// When a spell or ability an opponent controls causes you to discard Quagnoth, return it to your hand.
this.addAbility(new DiscardedByOpponentTriggeredAbility(new ReturnToHandSourceEffect()));
this.addAbility(new DiscardedByOpponentTriggeredAbility(new ReturnToHandSourceEffect()
.setText("return it to your hand"), true));
}
private Quagnoth(final Quagnoth card) {

View file

@ -1,4 +1,3 @@
package mage.cards.q;
import java.util.UUID;
@ -27,7 +26,8 @@ public final class QuicksilverGargantuan extends CardImpl {
this.toughness = new MageInt(7);
Ability ability = new EntersBattlefieldAbility(new CopyPermanentEffect(new QuicksilverGargantuanCopyApplier()),
"You may have {this} enter the battlefield as a copy of any creature on the battlefield, except it's 7/7");
true, null, null,
"as a copy of any creature on the battlefield, except it's 7/7");
this.addAbility(ability);
}

View file

@ -48,9 +48,9 @@ public final class RagsRiches extends SplitCard {
class RichesEffect extends OneShotEffect {
public RichesEffect() {
RichesEffect() {
super(Outcome.Benefit);
this.staticText = "Each opponent chooses a creature they control. You gain control of each of those creatures.";
this.staticText = "Each opponent chooses a creature they control. You gain control of those creatures.";
}
private RichesEffect(final RichesEffect effect) {

View file

@ -34,7 +34,7 @@ public final class RhetCropSpearmaster extends CardImpl {
effect.setText("it gets +1/+0");
BecomesExertSourceTriggeredAbility ability = new BecomesExertSourceTriggeredAbility(effect);
effect = new GainAbilitySourceEffect(FirstStrikeAbility.getInstance(), Duration.EndOfTurn);
effect.setText(" and gains first strike until end of turn");
effect.setText("and gains first strike until end of turn");
ability.addEffect(effect);
this.addAbility(new ExertAbility(ability));
}

View file

@ -1,4 +1,3 @@
package mage.cards.r;
import java.util.UUID;
@ -33,8 +32,7 @@ public final class RiptideSurvivor extends CardImpl {
this.addAbility(new MorphAbility(this, new ManaCostsImpl<>("{1}{U}{U}")));
// When Riptide Survivor is turned face up, discard two cards, then draw three cards.
Ability ability = new TurnedFaceUpSourceTriggeredAbility(new DiscardControllerEffect(2));
Effect effect = new DrawCardSourceControllerEffect(3);
effect.setText("then draw three cards");
Effect effect = new DrawCardSourceControllerEffect(3).concatBy(", then");
ability.addEffect(effect);
this.addAbility(ability);
}
@ -48,4 +46,3 @@ public final class RiptideSurvivor extends CardImpl {
return new RiptideSurvivor(this);
}
}

View file

@ -32,7 +32,7 @@ public final class RocketLauncher extends CardImpl {
new GenericManaCost(2), RocketLauncherCondition.instance);
ability.addTarget(new TargetAnyTarget());
ability.addEffect(new CreateDelayedTriggeredAbilityEffect(
new AtTheBeginOfNextEndStepDelayedTriggeredAbility(new DestroySourceEffect(true))
new AtTheBeginOfNextEndStepDelayedTriggeredAbility(new DestroySourceEffect())
).setText("destroy {this} at the beginning of the next end step"));
this.addAbility(ability);
}

View file

@ -24,7 +24,7 @@ public final class SavageSmash extends CardImpl {
this.getSpellAbility().addEffect(new BoostTargetEffect(2, 2, Duration.EndOfTurn));
this.getSpellAbility().addEffect(
new FightTargetsEffect().setText("It fights target creature you don't control." +
"<i>(Each deals damage equal to its power to the other.)</i>")
" <i>(Each deals damage equal to its power to the other.)</i>")
);
this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent());
this.getSpellAbility().addTarget(new TargetCreaturePermanent(StaticFilters.FILTER_CREATURE_YOU_DONT_CONTROL));

View file

@ -23,7 +23,7 @@ public final class SearingBlood extends CardImpl {
this.getSpellAbility().addEffect(new DamageTargetEffect(2));
this.getSpellAbility().addEffect(new CreateDelayedTriggeredAbilityEffect(
new WhenTargetDiesDelayedTriggeredAbility(
new DamageTargetEffect(3, true, "that creature's controller"),
new DamageTargetEffect(3, true, "the creature's controller"),
SetTargetPointer.PLAYER
)
));

View file

@ -1,4 +1,3 @@
package mage.cards.s;
import java.util.UUID;
@ -40,7 +39,7 @@ public final class ShadowGuildmage extends CardImpl {
// {R}, {tap}: Shadow Guildmage deals 1 damage to any target and 1 damage to you.
ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(1), new ManaCostsImpl<>("{R}"));
ability.addCost(new TapSourceCost());
ability.addEffect(new DamageControllerEffect(1));
ability.addEffect(new DamageControllerEffect(1).setText("and 1 damage to you"));
ability.addTarget(new TargetAnyTarget());
this.addAbility(ability);
}
@ -53,4 +52,4 @@ public final class ShadowGuildmage extends CardImpl {
public ShadowGuildmage copy() {
return new ShadowGuildmage(this);
}
}
}

View file

@ -34,7 +34,7 @@ public final class SirenOfTheSilentSong extends CardImpl {
// <i>Inspired</i> &mdash; Whenever Siren of the Silent Song becomes untapped, each opponent discards a card, then puts the top card of their library into their graveyard.
Ability ability = new InspiredAbility(new DiscardEachPlayerEffect(TargetController.OPPONENT));
Effect effect = new MillCardsEachPlayerEffect(1, TargetController.OPPONENT);
effect.setText(", then mills a card");
effect.setText(", then each opponent mills a card");
ability.addEffect(effect);
this.addAbility(ability);
}

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;
@ -13,9 +12,10 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.AttachmentType;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Outcome;
import mage.constants.Zone;
import mage.constants.SubType;
import java.util.UUID;
/**
*
@ -27,12 +27,14 @@ public final class Skinwing extends CardImpl {
super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{4}");
this.subtype.add(SubType.EQUIPMENT);
// Living Weapom
// Living weapon
this.addAbility(new LivingWeaponAbility());
// Equipped creature gets +2/+2 and has flying
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEquippedEffect(2, 2)));
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(FlyingAbility.getInstance(), AttachmentType.EQUIPMENT)));
Ability ability = new SimpleStaticAbility(new BoostEquippedEffect(2, 2));
ability.addEffect(new GainAbilityAttachedEffect(FlyingAbility.getInstance(), AttachmentType.EQUIPMENT)
.setText("and has flying"));
this.addAbility(ability);
// Equip {6}
this.addAbility(new EquipAbility(Outcome.BoostCreature, new GenericManaCost(6), false));

View file

@ -56,7 +56,7 @@ class SleeperAgentChangeControlEffect extends ContinuousEffectImpl {
public SleeperAgentChangeControlEffect() {
super(Duration.Custom, Layer.ControlChangingEffects_2, SubLayer.NA, Outcome.GainControl);
staticText = "target opponent gains control of {this}";
staticText = "target opponent gains control of it";
}
private SleeperAgentChangeControlEffect(final SleeperAgentChangeControlEffect effect) {
@ -79,5 +79,3 @@ class SleeperAgentChangeControlEffect extends ContinuousEffectImpl {
return false;
}
}

View file

@ -1,4 +1,3 @@
package mage.cards.s;
import java.util.UUID;
@ -32,7 +31,8 @@ public final class Solfatara extends CardImpl {
// Draw a card at the beginning of the next turn's upkeep.
this.getSpellAbility().addEffect(new CreateDelayedTriggeredAbilityEffect(
new AtTheBeginOfNextUpkeepDelayedTriggeredAbility(new DrawCardSourceControllerEffect(1), Duration.OneUse), false));
new AtTheBeginOfNextUpkeepDelayedTriggeredAbility(new DrawCardSourceControllerEffect(1), Duration.OneUse), false)
.concatBy("<br>"));
}
private Solfatara(final Solfatara card) {
@ -47,9 +47,9 @@ public final class Solfatara extends CardImpl {
class SolfataraEffect extends ContinuousRuleModifyingEffectImpl {
public SolfataraEffect() {
SolfataraEffect() {
super(Duration.EndOfTurn, Outcome.Detriment);
staticText = "Target player can't play land cards this turn";
staticText = "Target player can't play lands this turn";
}
private SolfataraEffect(final SolfataraEffect effect) {

View file

@ -1,4 +1,3 @@
package mage.cards.s;
import java.util.UUID;
@ -42,7 +41,8 @@ public final class StoneHavenOutfitter extends CardImpl {
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostAllEffect(1, 1, Duration.WhileOnBattlefield, filter, false)));
// Whenever an equipped creature you control dies, draw a card.
this.addAbility(new DiesCreatureTriggeredAbility(new DrawCardSourceControllerEffect(1), false, filter));
this.addAbility(new DiesCreatureTriggeredAbility(new DrawCardSourceControllerEffect(1), false, filter)
.setTriggerPhrase("Whenever an equipped creature you control dies, "));
}
private StoneHavenOutfitter(final StoneHavenOutfitter card) {

View file

@ -1,7 +1,8 @@
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;
@ -15,7 +16,6 @@ import mage.constants.AttachmentType;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Outcome;
import mage.constants.Zone;
/**
*
@ -31,8 +31,10 @@ public final class Strandwalker extends CardImpl {
this.addAbility(new LivingWeaponAbility());
// Equipped creature gets +2/+4 and has reach.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEquippedEffect(2, 4)));
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(ReachAbility.getInstance(), AttachmentType.EQUIPMENT)));
Ability ability = new SimpleStaticAbility(new BoostEquippedEffect(2, 4));
ability.addEffect(new GainAbilityAttachedEffect(ReachAbility.getInstance(), AttachmentType.EQUIPMENT)
.setText("and has reach"));
this.addAbility(ability);
// Equip {4}
this.addAbility(new EquipAbility(Outcome.BoostCreature, new GenericManaCost(4), false));

View file

@ -52,7 +52,7 @@ class SummaryJudgementEffect extends OneShotEffect {
super(Outcome.Benefit);
staticText = "{this} deals 3 damage to target tapped creature." +
"<br><i>Addendum</i> &mdash; If you cast this spell during your main phase, " +
"it deals 5 damage.";
"it deals 5 damage instead.";
}
private SummaryJudgementEffect(final SummaryJudgementEffect effect) {
@ -76,4 +76,4 @@ class SummaryJudgementEffect extends OneShotEffect {
}
return permanent.damage(damage, source.getSourceId(), source, game) > 0;
}
}
}

View file

@ -32,7 +32,7 @@ public final class SurviveTheNight extends CardImpl {
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
// Investigate.
this.getSpellAbility().addEffect(new InvestigateEffect());
this.getSpellAbility().addEffect(new InvestigateEffect().concatBy("<br>"));
}
private SurviveTheNight(final SurviveTheNight card) {

View file

@ -1,4 +1,3 @@
package mage.cards.s;
import java.util.UUID;
@ -22,7 +21,7 @@ public final class SymbolOfUnsummoning extends CardImpl {
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
this.getSpellAbility().addEffect(new ReturnToHandTargetEffect());
// Draw a card.
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1));
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1).concatBy("<br>"));
}
private SymbolOfUnsummoning(final SymbolOfUnsummoning card) {

View file

@ -30,7 +30,7 @@ import mage.watchers.common.AttackedThisTurnWatcher;
public final class TaigamOjutaiMaster extends CardImpl {
private static final String effectText = "Whenever you cast an instant or sorcery spell from your hand, if {this} attacked this turn, that spell gains rebound.";
private static final FilterSpell filter = new FilterSpell("Instant, Sorcery, and Dragon spells you control");
private static final FilterSpell filter = new FilterSpell("Instant, sorcery, and Dragon spells you control");
static {
filter.add(

View file

@ -36,7 +36,7 @@ public final class TheHauntOfHightower extends CardImpl {
// Whenever The Haunt of Hightower attacks, defending player discards a card.
this.addAbility(new AttacksTriggeredAbility(
new DiscardTargetEffect(1), false,
"Whenever {this} attacks, defending player discards a card", SetTargetPointer.PLAYER
"Whenever {this} attacks, defending player discards a card.", SetTargetPointer.PLAYER
));
// Whenever a card is put into an opponent's graveyard from anywhere, put a +1/+1 counter on The Haunt of Hightower.

View file

@ -34,7 +34,7 @@ public final class ThornThallid extends CardImpl {
this.addAbility(new BeginningOfUpkeepTriggeredAbility(new AddCountersSourceEffect(CounterType.SPORE.createInstance()), TargetController.YOU, false));
// Remove three spore counters from Thorn Thallid: Thorn Thallid deals 1 damage to any target.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD,
new DamageTargetEffect(1),
new DamageTargetEffect(1, "it"),
new RemoveCountersSourceCost(CounterType.SPORE.createInstance(3)));
ability.addTarget(new TargetAnyTarget());
this.addAbility(ability);

View file

@ -22,7 +22,8 @@ public final class TidyConclusion extends CardImpl {
// Destroy target creature. You gain 1 life for each artifact you control.
this.getSpellAbility().addEffect(new DestroyTargetEffect());
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
this.getSpellAbility().addEffect(new GainLifeEffect(ArtifactYouControlCount.instance));
this.getSpellAbility().addEffect(new GainLifeEffect(ArtifactYouControlCount.instance)
.setText("you gain 1 life for each artifact you control"));
this.getSpellAbility().addHint(ArtifactYouControlHint.instance);
}

View file

@ -47,7 +47,7 @@ public final class TinderWall extends CardImpl {
this.addAbility(new SimpleManaAbility(Zone.BATTLEFIELD, Mana.RedMana(2), new SacrificeSourceCost()));
// {R}, Sacrifice Tinder Wall: Tinder Wall deals 2 damage to target creature it's blocking.
Ability ability = new SimpleActivatedAbility(new DamageTargetEffect(2), new ManaCostsImpl<>("{R}"));
Ability ability = new SimpleActivatedAbility(new DamageTargetEffect(2, "it"), new ManaCostsImpl<>("{R}"));
ability.addCost(new SacrificeSourceCost());
ability.addTarget(new TargetPermanent(filter));
this.addAbility(ability);

View file

@ -27,7 +27,7 @@ public final class TumbleMagnet extends CardImpl {
this.addAbility(new EntersBattlefieldAbility(
new AddCountersSourceEffect(CounterType.CHARGE.createInstance(3)),
"{this} enters the battlefield with three charge counters on it"
"with three charge counters on it"
));
Ability ability = new SimpleActivatedAbility(

View file

@ -23,7 +23,7 @@ public final class UndercitysEmbrace extends CardImpl {
// Target opponent sacrifices a creature. If you control a creature with power 4 or greater, you gain 4 life.
this.getSpellAbility().addEffect(new SacrificeEffect(
StaticFilters.FILTER_PERMANENT_A_CREATURE, 1, "target player"
StaticFilters.FILTER_PERMANENT_A_CREATURE, 1, "target opponent"
));
this.getSpellAbility().addTarget(new TargetOpponent());
this.getSpellAbility().addEffect(new ConditionalOneShotEffect(

View file

@ -1,4 +1,3 @@
package mage.cards.u;
import java.util.UUID;
@ -23,7 +22,8 @@ public final class UnityOfPurpose extends CardImpl {
// Untap each creature you control with a +1/+1 counter on it.
this.getSpellAbility().addEffect(new UntapAllControllerEffect(
StaticFilters.FILTER_EACH_CONTROLLED_CREATURE_P1P1, "Untap each creature you control with a +1/+1 counter on it"));
StaticFilters.FILTER_EACH_CONTROLLED_CREATURE_P1P1, "Untap each creature you control with a +1/+1 counter on it")
.concatBy("<br>"));
}
private UnityOfPurpose(final UnityOfPurpose card) {

View file

@ -1,5 +1,3 @@
package mage.cards.u;
import java.util.UUID;
@ -21,8 +19,10 @@ public final class UnnaturalPredation extends CardImpl {
public UnnaturalPredation (UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{G}");
this.getSpellAbility().addEffect(new BoostTargetEffect(1, 1, Duration.EndOfTurn));
this.getSpellAbility().addEffect(new GainAbilityTargetEffect(TrampleAbility.getInstance(), Duration.EndOfTurn));
this.getSpellAbility().addEffect(new BoostTargetEffect(1, 1, Duration.EndOfTurn)
.setText("Target creature gets +1/+1"));
this.getSpellAbility().addEffect(new GainAbilityTargetEffect(TrampleAbility.getInstance(), Duration.EndOfTurn)
.setText("and gains trample until end of turn"));
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
}

View file

@ -32,13 +32,12 @@ public final class VeiledApparition extends CardImpl {
public VeiledApparition(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{U}");
// When an opponent casts a spell, if Veiled Apparition is an enchantment, Veiled Apparition becomes a 3/3 Illusion creature with flying and "At the beginning of your upkeep, sacrifice Veiled Apparition unless you pay {1}{U}."
TriggeredAbility ability = new SpellCastOpponentTriggeredAbility(new BecomesCreatureSourceEffect(new VeilApparitionToken(), null, Duration.WhileOnBattlefield),
filter, false);
this.addAbility(new ConditionalInterveningIfTriggeredAbility(ability, new SourceMatchesFilterCondition(StaticFilters.FILTER_PERMANENT_ENCHANTMENT),
"When an opponent casts a spell, if {this} is an enchantment, {this} becomes a 3/3 Illusion creature with flying and \"At the beginning of your upkeep, sacrifice Veiled Apparition unless you pay {1}{U}."));
"When an opponent casts a spell, if {this} is an enchantment, {this} becomes a 3/3 Illusion creature with flying and \"At the beginning of your upkeep, sacrifice Veiled Apparition unless you pay {1}{U}.\""));
}

View file

@ -30,7 +30,7 @@ public final class VeiledSentry extends CardImpl {
this.addAbility(new ConditionalInterveningIfTriggeredAbility(
new SpellCastOpponentTriggeredAbility(new VeiledSentryEffect(), false),
condition, "When an opponent casts a spell, if {this} is an enchantment, " +
"{this} becomes an Illusion creature with power and toughness equal to that spell's mana value."
"{this} becomes an Illusion creature with power and toughness each equal to that spell's mana value."
));
}

View file

@ -52,7 +52,7 @@ class WelcomeToTheFoldEffect extends GainControlTargetEffect {
public WelcomeToTheFoldEffect(Duration duration, boolean fixedControl) {
super(duration, fixedControl);
staticText = "Gain control of target creature if its toughness is 2 or less. If Welcome to the Fold's madness cost was paid, instead gain control of that creature if its toughness is X or less";
staticText = "Gain control of target creature if its toughness is 2 or less. If this spell's madness cost was paid, instead gain control of that creature if its toughness is X or less";
}
private WelcomeToTheFoldEffect(final WelcomeToTheFoldEffect effect) {

View file

@ -41,7 +41,7 @@ public final class Wiitigo extends CardImpl {
// Wiitigo enters the battlefield with six +1/+1 counters on it.
this.addAbility(new EntersBattlefieldAbility(
new AddCountersSourceEffect(CounterType.P1P1.createInstance(6))));
new AddCountersSourceEffect(CounterType.P1P1.createInstance(6)), "with six +1/+1 counters on it"));
// At the beginning of your upkeep, put a +1/+1 counter on Wiitigo if it has blocked or been blocked since your last upkeep. Otherwise, remove a +1/+1 counter from it.
Ability triggeredAbility = new BeginningOfUpkeepTriggeredAbility(
@ -49,7 +49,7 @@ public final class Wiitigo extends CardImpl {
new AddCountersSourceEffect(CounterType.P1P1.createInstance(1)),
new RemoveCounterSourceEffect(CounterType.P1P1.createInstance(1)),
new BlockedOrBeenBlockedSinceYourLastUpkeepCondition(),
"put a +1/+1 counter on enchanted creature if it blocked or been blocked since your last "
"put a +1/+1 counter on {this} if it has blocked or been blocked since your last "
+ "upkeep. Otherwise, remove a +1/+1 counter from it"),
TargetController.YOU,
false);

View file

@ -2330,7 +2330,7 @@ public class VerifyCardDataTest {
}
// remove unnecessary reminder text
refText = refText.replaceAll("^\\(.+(can be paid with|ransforms from).+\\)\n", "");
refText = refText.replaceAll("^\\(.+(can be paid with|ransforms from|represents).+\\)\n", "");
// mana ability fix
// Current implementation makes one Activated Ability per kind of color.

View file

@ -226,7 +226,7 @@ public abstract class TriggeredAbilityImpl extends AbilityImpl implements Trigge
}
}
if (replaceRuleText && triggerPhrase != null) {
superRule = superRule.replaceFirst("^((?:you may )?sacrifice |put a [^ ]+ counter on |return )?\\{this\\}", "$1it");
superRule = superRule.replaceFirst("^((?:you may )?sacrifice |put an? [^ ]+ counter on |return |transform )?\\{this\\}", "$1it");
}
sb.append(superRule);
if (triggersOnceEachTurn) {
@ -272,6 +272,8 @@ public abstract class TriggeredAbilityImpl extends AbilityImpl implements Trigge
|| effect instanceof ReturnToHandSourceEffect
|| effect instanceof ShuffleIntoLibrarySourceEffect
|| effect instanceof ExileSourceEffect
|| effect instanceof FlipSourceEffect
|| effect instanceof DestroySourceEffect
) ? "When " : "Whenever ");
}

View file

@ -19,7 +19,7 @@ public class BecomesTappedAttachedTriggeredAbility extends TriggeredAbilityImpl
public BecomesTappedAttachedTriggeredAbility(Effect effect, String description, boolean isOptional) {
super(Zone.BATTLEFIELD, effect, isOptional);
setTriggerPhrase("Whenever " + description + " becomes tapped, ");
setTriggerPhrase(getWhen() + description + " becomes tapped, ");
}
protected BecomesTappedAttachedTriggeredAbility(final BecomesTappedAttachedTriggeredAbility ability) {

View file

@ -18,6 +18,7 @@ public class BlocksSourceTriggeredAbility extends TriggeredAbilityImpl {
public BlocksSourceTriggeredAbility(Effect effect, boolean optional) {
super(Zone.BATTLEFIELD, effect, optional);
setTriggerPhrase("Whenever {this} blocks, ");
this.replaceRuleText = true;
}
protected BlocksSourceTriggeredAbility(final BlocksSourceTriggeredAbility ability) {

View file

@ -2,9 +2,6 @@ package mage.abilities.common;
import mage.abilities.TriggeredAbilityImpl;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.ExileSourceEffect;
import mage.abilities.effects.common.SacrificeSourceEffect;
import mage.abilities.effects.common.ShuffleIntoLibrarySourceEffect;
import mage.constants.Zone;
import mage.game.Game;
import mage.game.events.DamagedEvent;
@ -25,10 +22,7 @@ public class DealsCombatDamageToAPlayerTriggeredAbility extends TriggeredAbility
public DealsCombatDamageToAPlayerTriggeredAbility(Effect effect, boolean optional, boolean setTargetPointer) {
super(Zone.BATTLEFIELD, effect, optional);
this.setTargetPointer = setTargetPointer;
boolean textWhen = !optional && (effect instanceof SacrificeSourceEffect
|| effect instanceof ShuffleIntoLibrarySourceEffect
|| effect instanceof ExileSourceEffect);
setTriggerPhrase((textWhen ? "When" : "Whenever") + " {this} deals combat damage to a player, ");
setTriggerPhrase(getWhen() + "{this} deals combat damage to a player, ");
this.replaceRuleText = true;
}

View file

@ -5,7 +5,6 @@ import mage.abilities.effects.Effect;
import mage.constants.Zone;
import mage.game.Game;
import mage.game.events.GameEvent;
import mage.game.events.GameEvent.EventType;
import mage.game.stack.StackObject;
/**
@ -17,9 +16,10 @@ public class DiscardedByOpponentTriggeredAbility extends TriggeredAbilityImpl {
this(effect, false);
}
public DiscardedByOpponentTriggeredAbility(Effect effect, boolean optional) {
super(Zone.GRAVEYARD, effect, optional);
setTriggerPhrase("When a spell or ability an opponent controls causes you to discard this card, ");
public DiscardedByOpponentTriggeredAbility(Effect effect, boolean textCardName) {
super(Zone.GRAVEYARD, effect, false);
setTriggerPhrase("When a spell or ability an opponent controls causes you to discard "
+ (textCardName ? "{this}, " : "this card, "));
}
protected DiscardedByOpponentTriggeredAbility(final DiscardedByOpponentTriggeredAbility ability) {

View file

@ -1,4 +1,3 @@
package mage.abilities.common;
import mage.abilities.TriggeredAbilityImpl;
@ -18,7 +17,7 @@ public class DrawCardControllerTriggeredAbility extends TriggeredAbilityImpl {
public DrawCardControllerTriggeredAbility(Zone zone, Effect effect, boolean optional) {
super(zone, effect, optional);
setTriggerPhrase("Whenever you draw a card, ");
setTriggerPhrase(getWhen() + "you draw a card, ");
}
protected DrawCardControllerTriggeredAbility(final DrawCardControllerTriggeredAbility ability) {

View file

@ -105,6 +105,7 @@ public class Effects extends ArrayList<Effect> {
// add punctuation to very last rule.
if (lastRule != null && lastRule.length() > 3
&& !lastRule.endsWith(".")
&& !lastRule.endsWith("!")
&& !lastRule.endsWith("\"")
&& !lastRule.endsWith(".]")
&& !lastRule.startsWith("<b>LEVEL ")

View file

@ -1,4 +1,3 @@
package mage.abilities.effects.common;
import mage.abilities.Ability;
@ -21,7 +20,7 @@ public class DestroySourceEffect extends OneShotEffect {
public DestroySourceEffect(boolean noRegen) {
super(Outcome.DestroyPermanent);
this.noRegen = noRegen;
staticText = "destroy {this}";
staticText = "destroy {this}" + (noRegen ? ". It can't be regenerated" : "");
}
protected DestroySourceEffect(final DestroySourceEffect effect) {

View file

@ -21,7 +21,7 @@ public class FlipSourceEffect extends OneShotEffect {
public FlipSourceEffect(Token flipToken) {
super(Outcome.BecomeCreature);
this.flipToken = flipToken;
staticText = "flip it";
staticText = "flip {this}";
}
protected FlipSourceEffect(final FlipSourceEffect effect) {

View file

@ -17,7 +17,7 @@ public class CantAttackBlockUnlessPaysSourceEffect extends PayCostToAttackBlockE
public CantAttackBlockUnlessPaysSourceEffect(Cost cost, RestrictType restrictType) {
super(Duration.WhileOnBattlefield, Outcome.Detriment, restrictType, cost);
staticText = "{this} can't " + restrictType.toString() + " unless you " + (cost == null ? "" : cost.getText())
+ (restrictType == RestrictType.ATTACK ? " <i>(This cost is paid as attackers are declared.)</i>" : "");
+ (restrictType == RestrictType.ATTACK ? ". <i>(This cost is paid as attackers are declared.)</i>" : "");
}
public CantAttackBlockUnlessPaysSourceEffect(ManaCosts manaCosts, RestrictType restrictType) {

View file

@ -28,6 +28,7 @@ public class InspiredAbility extends TriggeredAbilityImpl {
setAbilityWord(AbilityWord.INSPIRED);
}
setTriggerPhrase("Whenever {this} becomes untapped, ");
this.replaceRuleText = true;
}
protected InspiredAbility(final InspiredAbility ability) {

View file

@ -75,7 +75,8 @@ public class ProtectionAbility extends StaticAbility {
@Override
public String getRule() {
return "protection from " + filter.getMessage() + (removeAuras ? "" : ". This effect doesn't remove Auras.");
return (flavorWord == null ? "protection from " : CardUtil.italicizeWithEmDash(flavorWord) + "Protection from ")
+ filter.getMessage() + (removeAuras ? "" : ". This effect doesn't remove Auras.");
}
public boolean canTarget(MageObject source, Game game) {
@ -125,7 +126,7 @@ public class ProtectionAbility extends StaticAbility {
return true;
}
private static final String getFilterText(ObjectColor color) {
private static String getFilterText(ObjectColor color) {
return CardUtil.concatWithAnd(
color.getColors()
.stream()