fix more text

This commit is contained in:
xenohedron 2023-11-25 02:54:32 -05:00
parent 867a8f54b0
commit 81f97c3b0e
43 changed files with 85 additions and 73 deletions

View file

@ -38,7 +38,8 @@ public final class AltarOfShadows extends CardImpl {
// {7}, {tap}: Destroy target creature. Then put a charge counter on Altar of Shadows. // {7}, {tap}: Destroy target creature. Then put a charge counter on Altar of Shadows.
Ability destroyAbility = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DestroyTargetEffect(), new GenericManaCost(7)); Ability destroyAbility = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DestroyTargetEffect(), new GenericManaCost(7));
destroyAbility.addCost(new TapSourceCost()); destroyAbility.addCost(new TapSourceCost());
destroyAbility.addEffect(new AddCountersSourceEffect(CounterType.CHARGE.createInstance(), true)); destroyAbility.addEffect(new AddCountersSourceEffect(CounterType.CHARGE.createInstance(), true)
.concatBy("Then"));
destroyAbility.addTarget(new TargetCreaturePermanent()); destroyAbility.addTarget(new TargetCreaturePermanent());
this.addAbility(destroyAbility); this.addAbility(destroyAbility);
} }

View file

@ -35,7 +35,7 @@ public final class BattleCry extends CardImpl {
this.getSpellAbility().addEffect(new UntapAllEffect(filter)); this.getSpellAbility().addEffect(new UntapAllEffect(filter));
// Whenever a creature blocks this turn, it gets +0/+1 until end of turn. // Whenever a creature blocks this turn, it gets +0/+1 until end of turn.
this.getSpellAbility().addEffect(new CreateDelayedTriggeredAbilityEffect(new BattleCryTriggeredAbility())); this.getSpellAbility().addEffect(new CreateDelayedTriggeredAbilityEffect(new BattleCryTriggeredAbility()).concatBy("<br>"));
} }
private BattleCry(final BattleCry card) { private BattleCry(final BattleCry card) {

View file

@ -33,7 +33,7 @@ public final class BattleFrenzy extends CardImpl {
// Green creatures you control get +1/+1 until end of turn. // Green creatures you control get +1/+1 until end of turn.
this.getSpellAbility().addEffect(new BoostControlledEffect(1, 1, Duration.EndOfTurn, filter1)); this.getSpellAbility().addEffect(new BoostControlledEffect(1, 1, Duration.EndOfTurn, filter1));
// Nongreen creatures you control get +1/+0 until end of turn. // Nongreen creatures you control get +1/+0 until end of turn.
this.getSpellAbility().addEffect(new BoostControlledEffect(1, 0, Duration.EndOfTurn, filter2)); this.getSpellAbility().addEffect(new BoostControlledEffect(1, 0, Duration.EndOfTurn, filter2).concatBy("<br>"));
} }
private BattleFrenzy(final BattleFrenzy card) { private BattleFrenzy(final BattleFrenzy card) {

View file

@ -23,7 +23,7 @@ public final class BlindingFog extends CardImpl {
this.getSpellAbility().addEffect(new PreventAllDamageToAllEffect(Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURES)); this.getSpellAbility().addEffect(new PreventAllDamageToAllEffect(Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURES));
// Creatures you control gain hexproof until end of turn. // Creatures you control gain hexproof until end of turn.
this.getSpellAbility().addEffect(new GainAbilityControlledEffect(HexproofAbility.getInstance(), Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURE, false)); this.getSpellAbility().addEffect(new GainAbilityControlledEffect(HexproofAbility.getInstance(), Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURES, false));
} }
private BlindingFog(final BlindingFog card) { private BlindingFog(final BlindingFog card) {

View file

@ -33,7 +33,8 @@ public final class BloodcrazedHoplite extends CardImpl {
this.toughness = new MageInt(1); this.toughness = new MageInt(1);
// Heroic - Whenever you cast a spell that targets Bloodcrazed Hoplite, put a +1/+1 counter on it. // Heroic - Whenever you cast a spell that targets Bloodcrazed Hoplite, put a +1/+1 counter on it.
this.addAbility(new HeroicAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance(), false))); this.addAbility(new HeroicAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance(), false))
.withRuleTextReplacement(true));
// Whenever a +1/+1 counter is put on Bloodcrazed Hoplite, remove a +1/+1 counter from target creature an opponent controls. // Whenever a +1/+1 counter is put on Bloodcrazed Hoplite, remove a +1/+1 counter from target creature an opponent controls.
Ability ability = new BloodcrazedHopliteTriggeredAbility(); Ability ability = new BloodcrazedHopliteTriggeredAbility();
ability.addTarget(new TargetCreaturePermanent(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE)); ability.addTarget(new TargetCreaturePermanent(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE));

View file

@ -27,7 +27,7 @@ public final class BloodfireColossus extends CardImpl {
this.power = new MageInt(6); this.power = new MageInt(6);
this.toughness = new MageInt(6); this.toughness = new MageInt(6);
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageEverythingEffect(6), new ColoredManaCost(ColoredManaSymbol.R)); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageEverythingEffect(6, "it"), new ColoredManaCost(ColoredManaSymbol.R));
ability.addCost(new SacrificeSourceCost()); ability.addCost(new SacrificeSourceCost());
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -38,7 +38,7 @@ public final class CallerOfTheHunt extends CardImpl {
// As an additional cost to cast Caller of the Hunt, choose a creature type. // As an additional cost to cast Caller of the Hunt, choose a creature type.
// Caller of the Hunt's power and toughness are each equal to the number of creatures of the chosen type on the battlefield. // Caller of the Hunt's power and toughness are each equal to the number of creatures of the chosen type on the battlefield.
this.addAbility(new SimpleStaticAbility(Zone.ALL, new InfoEffect("as an additional cost to cast this spell, choose a creature type. \r" this.addAbility(new SimpleStaticAbility(Zone.ALL, new InfoEffect("as an additional cost to cast this spell, choose a creature type.<br>"
+ "{this}'s power and toughness are each equal to the number of creatures of the chosen type on the battlefield"))); + "{this}'s power and toughness are each equal to the number of creatures of the chosen type on the battlefield")));
this.getSpellAbility().setCostAdjuster(CallerOfTheHuntAdjuster.instance); this.getSpellAbility().setCostAdjuster(CallerOfTheHuntAdjuster.instance);

View file

@ -97,6 +97,6 @@ class ChickenALaKingTriggeredAbility extends TriggeredAbilityImpl {
@Override @Override
public String getRule() { public String getRule() {
return "Whenever a 6 is rolled on a six-sided die, put a +1/+1 counter on each Bird"; return "Whenever a 6 is rolled on a six-sided die, put a +1/+1 counter on each Bird.";
} }
} }

View file

@ -34,7 +34,8 @@ public final class CinderShade extends CardImpl {
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(1, 1, Duration.EndOfTurn), new ManaCostsImpl<>("{B}"))); this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(1, 1, Duration.EndOfTurn), new ManaCostsImpl<>("{B}")));
// {R}, Sacrifice Cinder Shade: Cinder Shade deals damage equal to its power to target creature. // {R}, Sacrifice Cinder Shade: Cinder Shade deals damage equal to its power to target creature.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(new SourcePermanentPowerCount()), new ManaCostsImpl<>("{R}")); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(new SourcePermanentPowerCount())
.setText("It deals damage equal to its power to target creature"), new ManaCostsImpl<>("{R}"));
ability.addCost(new SacrificeSourceCost()); ability.addCost(new SacrificeSourceCost());
ability.addTarget(new TargetCreaturePermanent()); ability.addTarget(new TargetCreaturePermanent());
this.addAbility(ability); this.addAbility(ability);

View file

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

View file

@ -19,7 +19,7 @@ import mage.filter.common.FilterLandPermanent;
*/ */
public final class CrusadingKnight extends CardImpl { public final class CrusadingKnight extends CardImpl {
private static final FilterLandPermanent swampFilter = new FilterLandPermanent("Swamp your opponent controls"); private static final FilterLandPermanent swampFilter = new FilterLandPermanent("Swamp your opponents control");
static { static {
swampFilter.add(SubType.SWAMP.getPredicate()); swampFilter.add(SubType.SWAMP.getPredicate());
swampFilter.add(TargetController.OPPONENT.getControllerPredicate()); swampFilter.add(TargetController.OPPONENT.getControllerPredicate());

View file

@ -43,7 +43,8 @@ public final class DazzlingBeauty extends CardImpl {
this.getSpellAbility().addTarget(new TargetCreaturePermanent(filter)); this.getSpellAbility().addTarget(new TargetCreaturePermanent(filter));
// Draw a card at the beginning of the next turn's upkeep. // 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 DazzlingBeauty(final DazzlingBeauty card) { private DazzlingBeauty(final DazzlingBeauty card) {

View file

@ -25,7 +25,8 @@ public final class Flare extends CardImpl {
this.getSpellAbility().addTarget(new TargetAnyTarget()); this.getSpellAbility().addTarget(new TargetAnyTarget());
// Draw a card at the beginning of the next turn's upkeep. // 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 Flare(final Flare card) { private Flare(final Flare card) {

View file

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

View file

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

View file

@ -30,7 +30,8 @@ public final class Foxfire extends CardImpl {
this.getSpellAbility().addEffect(new PreventDamageToTargetEffect(Duration.EndOfTurn, true).setText("and dealt by that creature this turn.")); this.getSpellAbility().addEffect(new PreventDamageToTargetEffect(Duration.EndOfTurn, true).setText("and dealt by that creature this turn."));
// Draw a card at the beginning of the next turn's upkeep. // 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>"));
} }

View file

@ -20,7 +20,7 @@ public final class GethsVerdict extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{B}{B}"); super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{B}{B}");
this.getSpellAbility().addEffect(new SacrificeEffect(StaticFilters.FILTER_PERMANENT_CREATURE, 1, "Target player")); this.getSpellAbility().addEffect(new SacrificeEffect(StaticFilters.FILTER_PERMANENT_CREATURE, 1, "Target player"));
this.getSpellAbility().addEffect(new LoseLifeTargetEffect(1)); this.getSpellAbility().addEffect(new LoseLifeTargetEffect(1).setText("and loses 1 life"));
this.getSpellAbility().addTarget(new TargetPlayer()); this.getSpellAbility().addTarget(new TargetPlayer());
} }

View file

@ -18,7 +18,7 @@ public final class GlimmerOfGenius extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{3}{U}"); super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{3}{U}");
// Scry 2, then draw two card. You get {E}{E}. // Scry 2, then draw two card. You get {E}{E}.
this.getSpellAbility().addEffect(new ScryEffect(2)); this.getSpellAbility().addEffect(new ScryEffect(2, false));
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(2).concatBy(", then")); this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(2).concatBy(", then"));
this.getSpellAbility().addEffect(new GetEnergyCountersControllerEffect(2)); this.getSpellAbility().addEffect(new GetEnergyCountersControllerEffect(2));
} }

View file

@ -35,7 +35,7 @@ public final class GuiltyConscience extends CardImpl {
this.addAbility(ability); this.addAbility(ability);
// Whenever enchanted creature deals damage, Guilty Conscience deals that much damage to that creature. // Whenever enchanted creature deals damage, Guilty Conscience deals that much damage to that creature.
this.addAbility(new DealsDamageAttachedTriggeredAbility(Zone.BATTLEFIELD, new DamageAttachedEffect(SavedDamageValue.MUCH).setText("that much damage to that creature"), false)); this.addAbility(new DealsDamageAttachedTriggeredAbility(Zone.BATTLEFIELD, new DamageAttachedEffect(SavedDamageValue.MUCH).setText("{this} deals that much damage to that creature"), false));
} }
private GuiltyConscience(final GuiltyConscience card) { private GuiltyConscience(final GuiltyConscience card) {

View file

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

View file

@ -30,7 +30,7 @@ public final class Heliophial extends CardImpl {
this.addAbility(new SunburstAbility(this)); this.addAbility(new SunburstAbility(this));
// {2}, Sacrifice Heliophial: Heliophial deals damage equal to the number of charge counters on it to any target. // {2}, Sacrifice Heliophial: Heliophial deals damage equal to the number of charge counters on it to any target.
Effect effect = new DamageTargetEffect(new CountersSourceCount(CounterType.CHARGE)); Effect effect = new DamageTargetEffect(new CountersSourceCount(CounterType.CHARGE));
effect.setText("{this} deals damage equal to the number of charge counters on it to any target"); effect.setText("it deals damage equal to the number of charge counters on it to any target");
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, effect, new ManaCostsImpl<>("{2}")); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, effect, new ManaCostsImpl<>("{2}"));
ability.addCost(new SacrificeSourceCost()); ability.addCost(new SacrificeSourceCost());
ability.addTarget(new TargetAnyTarget()); ability.addTarget(new TargetAnyTarget());

View file

@ -45,7 +45,7 @@ class ImperialEdictEffect extends OneShotEffect {
ImperialEdictEffect() { ImperialEdictEffect() {
super(Outcome.Benefit); super(Outcome.Benefit);
this.staticText = "Target opponent chooses a creature they control. Destroy it."; this.staticText = "Target opponent chooses a creature they control. Destroy that creature.";
} }
private ImperialEdictEffect(final ImperialEdictEffect effect) { private ImperialEdictEffect(final ImperialEdictEffect effect) {

View file

@ -12,13 +12,9 @@ import mage.abilities.effects.common.DamageTargetEffect;
import mage.cards.Card; import mage.cards.Card;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.*;
import mage.constants.SubType;
import mage.constants.Outcome;
import mage.constants.Zone;
import mage.game.Game; import mage.game.Game;
import mage.game.events.GameEvent; import mage.game.events.GameEvent;
import mage.game.events.GameEvent.EventType;
import mage.game.permanent.Permanent; import mage.game.permanent.Permanent;
import mage.target.common.TargetLandPermanent; import mage.target.common.TargetLandPermanent;
import mage.target.targetpointer.FixedTarget; import mage.target.targetpointer.FixedTarget;
@ -42,7 +38,7 @@ public final class InvaderParasite extends CardImpl {
this.addAbility(ability); this.addAbility(ability);
// Whenever a land with the same name as the exiled card enters the battlefield under an opponent's control, Invader Parasite deals 2 damage to that player. // Whenever a land with the same name as the exiled card enters the battlefield under an opponent's control, Invader Parasite deals 2 damage to that player.
this.addAbility(new InvaderParasiteTriggeredAbility()); this.addAbility(new InvaderParasiteTriggeredAbility().setAbilityWord(AbilityWord.IMPRINT));
} }
private InvaderParasite(final InvaderParasite card) { private InvaderParasite(final InvaderParasite card) {

View file

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

View file

@ -1,4 +1,3 @@
package mage.cards.j; package mage.cards.j;
import java.util.UUID; import java.util.UUID;
@ -23,7 +22,7 @@ import mage.target.common.TargetCreaturePermanent;
*/ */
public final class JovensTools extends CardImpl { public final class JovensTools extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("except by walls"); private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("except by Walls");
static { static {
filter.add(Predicates.not(SubType.WALL.getPredicate())); filter.add(Predicates.not(SubType.WALL.getPredicate()));
} }

View file

@ -31,9 +31,9 @@ public final class LazotepPlating extends CardImpl {
Effect effect2 = new GainAbilityControlledEffect( Effect effect2 = new GainAbilityControlledEffect(
HexproofAbility.getInstance(), Duration.EndOfTurn HexproofAbility.getInstance(), Duration.EndOfTurn
); );
effect.setText("You and permanents you control gain hexproof until end of turn."); effect.setText("You");
effect2.setText(""); effect2.setText("and permanents you control gain hexproof until end of turn");
this.getSpellAbility().addEffect(effect); this.getSpellAbility().addEffect(effect.concatBy("<br>"));
this.getSpellAbility().addEffect(effect2); this.getSpellAbility().addEffect(effect2);
} }

View file

@ -19,7 +19,7 @@ import mage.filter.common.FilterLandPermanent;
*/ */
public final class MaraudingKnight extends CardImpl { public final class MaraudingKnight extends CardImpl {
private static final FilterLandPermanent plainsFilter = new FilterLandPermanent("Plains your opponent controls"); private static final FilterLandPermanent plainsFilter = new FilterLandPermanent("Plains your opponents control");
static { static {
plainsFilter.add(SubType.PLAINS.getPredicate()); plainsFilter.add(SubType.PLAINS.getPredicate());
plainsFilter.add(TargetController.OPPONENT.getControllerPredicate()); plainsFilter.add(TargetController.OPPONENT.getControllerPredicate());

View file

@ -25,7 +25,8 @@ public final class MindRavel extends CardImpl {
this.getSpellAbility().addTarget(new TargetPlayer()); this.getSpellAbility().addTarget(new TargetPlayer());
// Draw a card at the beginning of the next turn's upkeep. // 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 MindRavel(final MindRavel card) { private MindRavel(final MindRavel card) {

View file

@ -33,7 +33,8 @@ public final class MortisDogs extends CardImpl {
// Whenever Mortis Dogs attacks, it gets +2/+0 until end of turn. // Whenever Mortis Dogs attacks, it gets +2/+0 until end of turn.
this.addAbility(new AttacksTriggeredAbility(new BoostSourceEffect(2, 0, Duration.EndOfTurn), false)); this.addAbility(new AttacksTriggeredAbility(new BoostSourceEffect(2, 0, Duration.EndOfTurn), false));
// When Mortis Dogs dies, target player loses life equal to its power. // When Mortis Dogs dies, target player loses life equal to its power.
Ability ability = new DiesSourceTriggeredAbility(new LoseLifeTargetEffect(new SourcePermanentPowerCount(false))); Ability ability = new DiesSourceTriggeredAbility(new LoseLifeTargetEffect(new SourcePermanentPowerCount(false))
.setText("target player loses life equal to its power"));
ability.addTarget(new TargetPlayer()); ability.addTarget(new TargetPlayer());
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -32,9 +32,9 @@ public final class OverloadedMageRing extends CardImpl {
this.color.setBlue(true); this.color.setBlue(true);
this.nightCard = true; this.nightCard = true;
// {1}, {T}, Sacrifice Overloaded Mage-Ring: Copy target spell you control. // {1}, {T}, Sacrifice Overloaded Mage-Ring: Copy target spell you control. You may choose new targets for the copy.
Ability ability = new SimpleActivatedAbility( Ability ability = new SimpleActivatedAbility(
new CopyTargetSpellEffect(false, false, false), new GenericManaCost(1) new CopyTargetSpellEffect(false, false, true), new GenericManaCost(1)
); );
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());
ability.addCost(new SacrificeSourceCost()); ability.addCost(new SacrificeSourceCost());

View file

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

View file

@ -1,16 +1,15 @@
package mage.cards.r; package mage.cards.r;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.common.DealsDamageToAPlayerTriggeredAbility; import mage.abilities.common.DealsDamageToOpponentTriggeredAbility;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.MillCardsTargetEffect; import mage.abilities.effects.common.MillCardsTargetEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import java.util.UUID;
/** /**
* *
* @author LoneFox * @author LoneFox
@ -25,9 +24,8 @@ public final class ReefPirates extends CardImpl {
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
// Whenever Reef Pirates deals damage to an opponent, that player puts the top card of their library into their graveyard. // Whenever Reef Pirates deals damage to an opponent, that player puts the top card of their library into their graveyard.
Effect effect = new MillCardsTargetEffect(1); this.addAbility(new DealsDamageToOpponentTriggeredAbility(new MillCardsTargetEffect(1),
effect.setText("that player mills a card"); false, false, true));
this.addAbility(new DealsDamageToAPlayerTriggeredAbility(effect, false, true));
} }
private ReefPirates(final ReefPirates card) { private ReefPirates(final ReefPirates card) {

View file

@ -1,4 +1,3 @@
package mage.cards.s; package mage.cards.s;
import java.util.UUID; import java.util.UUID;
@ -30,7 +29,7 @@ public final class Sanctimony extends CardImpl {
// Whenever an opponent taps a Mountain for mana, you may gain 1 life. // Whenever an opponent taps a Mountain for mana, you may gain 1 life.
this.addAbility(new TapForManaAllTriggeredAbility(new GainLifeEffect(1), filter, SetTargetPointer.NONE)); this.addAbility(new TapForManaAllTriggeredAbility(new GainLifeEffect(1), filter, SetTargetPointer.NONE, true));
} }
private Sanctimony(final Sanctimony card) { private Sanctimony(final Sanctimony card) {

View file

@ -60,7 +60,7 @@ public final class SaprolingInfestation extends CardImpl {
@Override @Override
public String getRule() { public String getRule() {
return "Whenever a player kicks a spell, you creat a 1/1 green Saproling creature token."; return "Whenever a player kicks a spell, you create a 1/1 green Saproling creature token.";
} }
} }
} }

View file

@ -28,6 +28,7 @@ public final class SeasonsBeatings extends CardImpl {
// Family gathering - Each creature target player controls deals damage equal to its power to another random creature that player controls. // Family gathering - Each creature target player controls deals damage equal to its power to another random creature that player controls.
this.getSpellAbility().addEffect(new SeasonsBeatingsEffect()); this.getSpellAbility().addEffect(new SeasonsBeatingsEffect());
this.getSpellAbility().withFlavorWord("Family gathering");
this.getSpellAbility().addTarget(new TargetPlayer()); this.getSpellAbility().addTarget(new TargetPlayer());
} }
@ -46,7 +47,7 @@ class SeasonsBeatingsEffect extends OneShotEffect {
SeasonsBeatingsEffect() { SeasonsBeatingsEffect() {
super(Outcome.Damage); super(Outcome.Damage);
staticText = "Family gathering <i>Each creature target player controls deals damage equal to its power to another random creature that player controls.</i>"; staticText = "Each creature target player controls deals damage equal to its power to another random creature that player controls";
} }
private SeasonsBeatingsEffect(final SeasonsBeatingsEffect effect) { private SeasonsBeatingsEffect(final SeasonsBeatingsEffect effect) {

View file

@ -22,8 +22,10 @@ public final class SnareTheSkies extends CardImpl {
// Target creature gets +1/+1 and gains reach until end of turn. // Target creature gets +1/+1 and gains reach until end of turn.
this.getSpellAbility().addEffect(new BoostTargetEffect(1, 1, Duration.EndOfTurn)); this.getSpellAbility().addEffect(new BoostTargetEffect(1, 1, Duration.EndOfTurn)
this.getSpellAbility().addEffect(new GainAbilityTargetEffect(ReachAbility.getInstance(), Duration.EndOfTurn)); .setText("target creature gets +1/+1"));
this.getSpellAbility().addEffect(new GainAbilityTargetEffect(ReachAbility.getInstance(), Duration.EndOfTurn)
.setText("and gains reach until end of turn"));
this.getSpellAbility().addTarget(new TargetCreaturePermanent()); this.getSpellAbility().addTarget(new TargetCreaturePermanent());
} }

View file

@ -29,7 +29,8 @@ public final class SoulRend extends CardImpl {
this.getSpellAbility().addTarget(new TargetCreaturePermanent()); this.getSpellAbility().addTarget(new TargetCreaturePermanent());
// Draw a card at the beginning of the next turn's upkeep. // 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 SoulRend(final SoulRend card) { private SoulRend(final SoulRend card) {

View file

@ -26,7 +26,7 @@ public final class SurgeNode extends CardImpl {
public SurgeNode(UUID ownerId, CardSetInfo setInfo) { public SurgeNode(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{1}"); super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{1}");
this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.CHARGE.createInstance(6)), "{this} gets six charge counters")); this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.CHARGE.createInstance(6)), "with six charge counters on it"));
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new AddCountersTargetEffect(CounterType.CHARGE.createInstance()), new GenericManaCost(1)); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new AddCountersTargetEffect(CounterType.CHARGE.createInstance()), new GenericManaCost(1));
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());
ability.addCost(new RemoveCountersSourceCost(CounterType.CHARGE.createInstance())); ability.addCost(new RemoveCountersSourceCost(CounterType.CHARGE.createInstance()));

View file

@ -1,4 +1,3 @@
package mage.cards.t; package mage.cards.t;
import java.util.UUID; import java.util.UUID;
@ -25,7 +24,7 @@ public final class TelimTorsEdict extends CardImpl {
private static final FilterPermanent filter = new FilterPermanent("permanent you own or control"); private static final FilterPermanent filter = new FilterPermanent("permanent you own or control");
static { static {
filter.add(new TelimTorsEdictPredicate()); filter.add(TelimTorsEdictPredicate.instance);
} }
public TelimTorsEdict(UUID ownerId, CardSetInfo setInfo) { public TelimTorsEdict(UUID ownerId, CardSetInfo setInfo) {
@ -36,7 +35,8 @@ public final class TelimTorsEdict extends CardImpl {
this.getSpellAbility().addTarget(new TargetPermanent(filter)); this.getSpellAbility().addTarget(new TargetPermanent(filter));
// Draw a card at the beginning of the next turn's upkeep. // 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 TelimTorsEdict(final TelimTorsEdict card) { private TelimTorsEdict(final TelimTorsEdict card) {
@ -49,18 +49,13 @@ public final class TelimTorsEdict extends CardImpl {
} }
} }
class TelimTorsEdictPredicate implements ObjectSourcePlayerPredicate<Permanent> { enum TelimTorsEdictPredicate implements ObjectSourcePlayerPredicate<Permanent> {
instance;
public TelimTorsEdictPredicate() {
}
@Override @Override
public boolean apply(ObjectSourcePlayer<Permanent> input, Game game) { public boolean apply(ObjectSourcePlayer<Permanent> input, Game game) {
Permanent permanent = input.getObject(); Permanent permanent = input.getObject();
UUID playerId = input.getPlayerId(); UUID playerId = input.getPlayerId();
if (permanent.isControlledBy(playerId) || permanent.isOwnedBy(playerId)) { return permanent.isControlledBy(playerId) || permanent.isOwnedBy(playerId);
return true;
}
return false;
} }
} }

View file

@ -22,8 +22,10 @@ public final class UncannySpeed extends CardImpl {
// Target creature gets +3/+0 and gains haste until end of turn. // Target creature gets +3/+0 and gains haste until end of turn.
this.getSpellAbility().addEffect(new BoostTargetEffect(3, 0, Duration.EndOfTurn)); this.getSpellAbility().addEffect(new BoostTargetEffect(3, 0, Duration.EndOfTurn)
this.getSpellAbility().addEffect(new GainAbilityTargetEffect(HasteAbility.getInstance(), Duration.EndOfTurn)); .setText("target creature gets +3/+0"));
this.getSpellAbility().addEffect(new GainAbilityTargetEffect(HasteAbility.getInstance(), Duration.EndOfTurn)
.setText("and gains haste until end of turn"));
this.getSpellAbility().addTarget(new TargetCreaturePermanent()); this.getSpellAbility().addTarget(new TargetCreaturePermanent());
} }

View file

@ -27,7 +27,8 @@ public final class Updraft extends CardImpl {
this.getSpellAbility().addTarget(new TargetCreaturePermanent()); this.getSpellAbility().addTarget(new TargetCreaturePermanent());
// Draw a card at the beginning of the next turn's upkeep. // 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 Updraft(final Updraft card) { private Updraft(final Updraft card) {

View file

@ -226,7 +226,7 @@ public abstract class TriggeredAbilityImpl extends AbilityImpl implements Trigge
} }
} }
if (replaceRuleText && triggerPhrase != null) { if (replaceRuleText && triggerPhrase != null) {
superRule = superRule.replaceFirst("^((?:you may )?sacrifice |put an? [^ ]+ counter on |return |transform |untap )?\\{this\\}", "$1it"); superRule = superRule.replaceFirst("^((?:you may )?sacrifice |(put|remove) an? [^ ]+ counter (on|from) |return |transform |untap |regenerate )?\\{this\\}", "$1it");
} }
sb.append(superRule); sb.append(superRule);
if (triggersOnceEachTurn) { if (triggersOnceEachTurn) {

View file

@ -24,7 +24,11 @@ public class TapForManaAllTriggeredAbility extends TriggeredAbilityImpl {
private final SetTargetPointer setTargetPointer; private final SetTargetPointer setTargetPointer;
public TapForManaAllTriggeredAbility(Effect effect, FilterPermanent filter, SetTargetPointer setTargetPointer) { public TapForManaAllTriggeredAbility(Effect effect, FilterPermanent filter, SetTargetPointer setTargetPointer) {
super(Zone.BATTLEFIELD, effect); this(effect, filter, setTargetPointer, false);
}
public TapForManaAllTriggeredAbility(Effect effect, FilterPermanent filter, SetTargetPointer setTargetPointer, boolean optional) {
super(Zone.BATTLEFIELD, effect, optional);
this.filter = filter; this.filter = filter;
this.setTargetPointer = setTargetPointer; this.setTargetPointer = setTargetPointer;
setTriggerPhrase("Whenever " + filter.getMessage() + " for mana, "); setTriggerPhrase("Whenever " + filter.getMessage() + " for mana, ");