diff --git a/Mage.Sets/src/mage/cards/a/AbolisherOfBloodlines.java b/Mage.Sets/src/mage/cards/a/AbolisherOfBloodlines.java index aa7c4ab7b14..1cde0a968c6 100644 --- a/Mage.Sets/src/mage/cards/a/AbolisherOfBloodlines.java +++ b/Mage.Sets/src/mage/cards/a/AbolisherOfBloodlines.java @@ -1,4 +1,3 @@ - package mage.cards.a; import mage.MageInt; @@ -35,7 +34,7 @@ public final class AbolisherOfBloodlines extends CardImpl { // When this creature transforms into Abolisher of Bloodlines, target opponent sacrifices three creatures. Ability ability = new TransformIntoSourceTriggeredAbility(new SacrificeEffect( - StaticFilters.FILTER_PERMANENT_CREATURE, 3, "target opponent" + StaticFilters.FILTER_PERMANENT_CREATURES, 3, "target opponent" )); ability.addTarget(new TargetOpponent()); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/a/AccordersShield.java b/Mage.Sets/src/mage/cards/a/AccordersShield.java index 4ce1e800b6e..8a900333b85 100644 --- a/Mage.Sets/src/mage/cards/a/AccordersShield.java +++ b/Mage.Sets/src/mage/cards/a/AccordersShield.java @@ -22,6 +22,7 @@ public final class AccordersShield extends CardImpl { super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{0}"); this.subtype.add(SubType.EQUIPMENT); + // Equipped creature gets +0/+3 and has vigilance. Ability ability = new SimpleStaticAbility(new BoostEquippedEffect(0, 3)); ability.addEffect(new GainAbilityAttachedEffect(VigilanceAbility.getInstance(), AttachmentType.EQUIPMENT).setText("and has vigilance")); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/a/AerialManeuver.java b/Mage.Sets/src/mage/cards/a/AerialManeuver.java index 624c8f31c22..5d9339ff158 100644 --- a/Mage.Sets/src/mage/cards/a/AerialManeuver.java +++ b/Mage.Sets/src/mage/cards/a/AerialManeuver.java @@ -1,4 +1,3 @@ - package mage.cards.a; import java.util.UUID; @@ -21,11 +20,13 @@ public final class AerialManeuver extends CardImpl { public AerialManeuver(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{1}{W}"); - // Target creature gets +1/+1 and gains flying and first strike until end of turn. - getSpellAbility().addEffect(new BoostTargetEffect(1,1, Duration.EndOfTurn)); - getSpellAbility().addEffect(new GainAbilityTargetEffect(FlyingAbility.getInstance(), Duration.EndOfTurn)); - getSpellAbility().addEffect(new GainAbilityTargetEffect(FirstStrikeAbility.getInstance(), Duration.EndOfTurn)); + getSpellAbility().addEffect(new BoostTargetEffect(1,1, Duration.EndOfTurn) + .setText("target creature gets +1/+1")); + getSpellAbility().addEffect(new GainAbilityTargetEffect(FlyingAbility.getInstance(), Duration.EndOfTurn) + .setText("and gains flying")); + getSpellAbility().addEffect(new GainAbilityTargetEffect(FirstStrikeAbility.getInstance(), Duration.EndOfTurn) + .setText("and first strike until end of turn")); getSpellAbility().addTarget(new TargetCreaturePermanent()); } diff --git a/Mage.Sets/src/mage/cards/a/ArashinWarBeast.java b/Mage.Sets/src/mage/cards/a/ArashinWarBeast.java index 6baa5ba7e8a..d79be3355e5 100644 --- a/Mage.Sets/src/mage/cards/a/ArashinWarBeast.java +++ b/Mage.Sets/src/mage/cards/a/ArashinWarBeast.java @@ -1,4 +1,3 @@ - package mage.cards.a; import java.util.UUID; @@ -58,7 +57,7 @@ class ArashinWarBeastTriggeredAbility extends TriggeredAbilityImpl { public ArashinWarBeastTriggeredAbility(Effect effect, boolean optional) { super(Zone.BATTLEFIELD, effect, optional); this.usedForCombatDamageStep = false; - setTriggerPhrase("Whenever {this} deals combat damage to one or more blockers, "); + setTriggerPhrase("Whenever {this} deals combat damage to one or more blocking creatures, "); } private ArashinWarBeastTriggeredAbility(final ArashinWarBeastTriggeredAbility ability) { diff --git a/Mage.Sets/src/mage/cards/a/ArchangelOfStrife.java b/Mage.Sets/src/mage/cards/a/ArchangelOfStrife.java index 52eb873b831..8fda073bba3 100644 --- a/Mage.Sets/src/mage/cards/a/ArchangelOfStrife.java +++ b/Mage.Sets/src/mage/cards/a/ArchangelOfStrife.java @@ -3,7 +3,7 @@ package mage.cards.a; import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; -import mage.abilities.common.EntersBattlefieldAbility; +import mage.abilities.common.AsEntersBattlefieldAbility; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.continuous.BoostAllEffect; @@ -34,7 +34,7 @@ public final class ArchangelOfStrife extends CardImpl { this.addAbility(FlyingAbility.getInstance()); // As Archangel of Strife enters the battlefield, each player chooses war or peace. - this.addAbility(new EntersBattlefieldAbility(new ArchangelOfStrifeChooseEffect(), "As Archangel of Strife enters the battlefield, each player chooses war or peace.")); + this.addAbility(new AsEntersBattlefieldAbility(new ArchangelOfStrifeChooseEffect())); // Creatures controlled by players who chose war get +3/+0. this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ArchangelOfStrifeWarEffect())); diff --git a/Mage.Sets/src/mage/cards/a/ArmedDangerous.java b/Mage.Sets/src/mage/cards/a/ArmedDangerous.java index 603ad583e14..0f651dcda19 100644 --- a/Mage.Sets/src/mage/cards/a/ArmedDangerous.java +++ b/Mage.Sets/src/mage/cards/a/ArmedDangerous.java @@ -1,4 +1,3 @@ - package mage.cards.a; import java.util.UUID; @@ -20,8 +19,10 @@ public final class ArmedDangerous extends SplitCard { // Armed // Target creature gets +1/+1 and gains double strike until end of turn. - getLeftHalfCard().getSpellAbility().addEffect(new BoostTargetEffect(1, 1, Duration.EndOfTurn)); - getLeftHalfCard().getSpellAbility().addEffect(new GainAbilityTargetEffect(DoubleStrikeAbility.getInstance(), Duration.EndOfTurn)); + getLeftHalfCard().getSpellAbility().addEffect(new BoostTargetEffect(1, 1, Duration.EndOfTurn) + .setText("target creature gets +1/+1")); + getLeftHalfCard().getSpellAbility().addEffect(new GainAbilityTargetEffect(DoubleStrikeAbility.getInstance(), Duration.EndOfTurn) + .setText("and gains double strike until end of turn")); getLeftHalfCard().getSpellAbility().addTarget(new TargetCreaturePermanent().withChooseHint("+1/+1 and double strike")); // Dangerous diff --git a/Mage.Sets/src/mage/cards/b/BeastcallerSavant.java b/Mage.Sets/src/mage/cards/b/BeastcallerSavant.java index 1e706f176dd..3e88033b7fa 100644 --- a/Mage.Sets/src/mage/cards/b/BeastcallerSavant.java +++ b/Mage.Sets/src/mage/cards/b/BeastcallerSavant.java @@ -27,8 +27,8 @@ public final class BeastcallerSavant extends CardImpl { // Haste this.addAbility(HasteAbility.getInstance()); - // {T}: Add one mana of any color. Spend this mana only to cast creature spells. - this.addAbility(new ConditionalAnyColorManaAbility(1, new ConditionalSpellManaBuilder(new FilterCreatureSpell("creature spells")))); + // {T}: Add one mana of any color. Spend this mana only to cast a creature spell. + this.addAbility(new ConditionalAnyColorManaAbility(1, new ConditionalSpellManaBuilder(new FilterCreatureSpell("a creature spell")))); } private BeastcallerSavant(final BeastcallerSavant card) { diff --git a/Mage.Sets/src/mage/cards/b/BlessedReversal.java b/Mage.Sets/src/mage/cards/b/BlessedReversal.java index 1e10778066f..f549f737b88 100644 --- a/Mage.Sets/src/mage/cards/b/BlessedReversal.java +++ b/Mage.Sets/src/mage/cards/b/BlessedReversal.java @@ -17,9 +17,9 @@ public final class BlessedReversal extends CardImpl { public BlessedReversal(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{W}"); - // You gain 3 life for each creature attacking you. - this.getSpellAbility().addEffect(new GainLifeEffect(new MultipliedValue(CreaturesAttackingYouCount.instance, 3))); + this.getSpellAbility().addEffect(new GainLifeEffect(new MultipliedValue(CreaturesAttackingYouCount.instance, 3)) + .setText("you gain 3 life for each creature attacking you")); this.getSpellAbility().addHint(CreaturesAttackingYouCount.getHint()); } diff --git a/Mage.Sets/src/mage/cards/b/BoosterTutor.java b/Mage.Sets/src/mage/cards/b/BoosterTutor.java index 8bf0b3b1f23..2e19a1c3e24 100644 --- a/Mage.Sets/src/mage/cards/b/BoosterTutor.java +++ b/Mage.Sets/src/mage/cards/b/BoosterTutor.java @@ -49,7 +49,7 @@ class BoosterTutorEffect extends OneShotEffect { public BoosterTutorEffect() { super(Outcome.DestroyPermanent); - this.staticText = "Open a sealed Magic booster pack, reveal the cards, and put one of those cards into your hand"; + this.staticText = "Open a sealed Magic booster pack, reveal the cards, and put one of them into your hand"; } private BoosterTutorEffect(final BoosterTutorEffect effect) { diff --git a/Mage.Sets/src/mage/cards/b/BushiTenderfoot.java b/Mage.Sets/src/mage/cards/b/BushiTenderfoot.java index dff2fc07825..180f201dbe0 100644 --- a/Mage.Sets/src/mage/cards/b/BushiTenderfoot.java +++ b/Mage.Sets/src/mage/cards/b/BushiTenderfoot.java @@ -37,7 +37,7 @@ public final class BushiTenderfoot extends CardImpl { this.flipCard = true; this.flipCardName = "Kenzo the Hardhearted"; - // When that creature is put into a graveyard this turn, flip Initiate of Blood. + // When a creature dealt damage by Bushi Tenderfoot this turn dies, flip Bushi Tenderfoot. Effect effect = new FlipSourceEffect(new KenzoTheHardhearted()); effect.setText("flip {this}"); this.addAbility(new DealtDamageAndDiedTriggeredAbility(effect)); diff --git a/Mage.Sets/src/mage/cards/c/CatharsShield.java b/Mage.Sets/src/mage/cards/c/CatharsShield.java index 662b8af5fdb..f76118aa700 100644 --- a/Mage.Sets/src/mage/cards/c/CatharsShield.java +++ b/Mage.Sets/src/mage/cards/c/CatharsShield.java @@ -1,7 +1,8 @@ - package mage.cards.c; import java.util.UUID; + +import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.effects.common.continuous.BoostEquippedEffect; @@ -14,7 +15,6 @@ import mage.constants.AttachmentType; import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Outcome; -import mage.constants.Zone; import mage.target.common.TargetControlledCreaturePermanent; /** @@ -28,8 +28,9 @@ public final class CatharsShield extends CardImpl { this.subtype.add(SubType.EQUIPMENT); // Equipped creature gets +0/+3 and has vigilance. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEquippedEffect(0, 3))); - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(VigilanceAbility.getInstance(), AttachmentType.EQUIPMENT))); + Ability ability = new SimpleStaticAbility(new BoostEquippedEffect(0, 3)); + ability.addEffect(new GainAbilityAttachedEffect(VigilanceAbility.getInstance(), AttachmentType.EQUIPMENT).setText("and has vigilance")); + this.addAbility(ability); // Equip {3} this.addAbility(new EquipAbility(Outcome.AddAbility, new GenericManaCost(3), new TargetControlledCreaturePermanent())); diff --git a/Mage.Sets/src/mage/cards/c/ConcordantCrossroads.java b/Mage.Sets/src/mage/cards/c/ConcordantCrossroads.java index 4302b2ebf94..4904612301f 100644 --- a/Mage.Sets/src/mage/cards/c/ConcordantCrossroads.java +++ b/Mage.Sets/src/mage/cards/c/ConcordantCrossroads.java @@ -1,4 +1,3 @@ - package mage.cards.c; import java.util.UUID; @@ -25,7 +24,7 @@ public final class ConcordantCrossroads extends CardImpl { // All creatures have haste. this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, - new GainAbilityAllEffect(HasteAbility.getInstance(), Duration.WhileOnBattlefield, StaticFilters.FILTER_PERMANENT_CREATURES))); + new GainAbilityAllEffect(HasteAbility.getInstance(), Duration.WhileOnBattlefield, StaticFilters.FILTER_PERMANENT_ALL_CREATURES))); } private ConcordantCrossroads(final ConcordantCrossroads card) { diff --git a/Mage.Sets/src/mage/cards/c/CrushDissent.java b/Mage.Sets/src/mage/cards/c/CrushDissent.java index 5399cdf1d96..5fddd1c19f9 100644 --- a/Mage.Sets/src/mage/cards/c/CrushDissent.java +++ b/Mage.Sets/src/mage/cards/c/CrushDissent.java @@ -24,7 +24,7 @@ public final class CrushDissent extends CardImpl { this.getSpellAbility().addTarget(new TargetSpell()); // Amass 2. - this.getSpellAbility().addEffect(new AmassEffect(2, SubType.ZOMBIE)); + this.getSpellAbility().addEffect(new AmassEffect(2, SubType.ZOMBIE).concatBy("
")); } private CrushDissent(final CrushDissent card) { diff --git a/Mage.Sets/src/mage/cards/c/CurseOfStalkedPrey.java b/Mage.Sets/src/mage/cards/c/CurseOfStalkedPrey.java index 6995a92e38b..be30e2e1772 100644 --- a/Mage.Sets/src/mage/cards/c/CurseOfStalkedPrey.java +++ b/Mage.Sets/src/mage/cards/c/CurseOfStalkedPrey.java @@ -92,7 +92,7 @@ class CurseOfStalkedPreyTriggeredAbility extends TriggeredAbilityImpl { @Override public String getRule() { - return "Whenever a creature deals combat damage to enchanted player, put a +1/+1 counter on that creature"; + return "Whenever a creature deals combat damage to enchanted player, put a +1/+1 counter on that creature."; } } diff --git a/Mage.Sets/src/mage/cards/c/CurseOfTheNightlyHunt.java b/Mage.Sets/src/mage/cards/c/CurseOfTheNightlyHunt.java index da0a122dbf3..2ec6354e9e4 100644 --- a/Mage.Sets/src/mage/cards/c/CurseOfTheNightlyHunt.java +++ b/Mage.Sets/src/mage/cards/c/CurseOfTheNightlyHunt.java @@ -1,4 +1,3 @@ - package mage.cards.c; import mage.abilities.Ability; @@ -33,7 +32,7 @@ public final class CurseOfTheNightlyHunt extends CardImpl { this.addAbility(new EnchantAbility(auraTarget)); // Creatures enchanted player controls attack each turn if able. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new CurseOfTheNightlyHuntEffect())); + this.addAbility(new SimpleStaticAbility(new CurseOfTheNightlyHuntEffect())); } @@ -49,9 +48,9 @@ public final class CurseOfTheNightlyHunt extends CardImpl { class CurseOfTheNightlyHuntEffect extends RequirementEffect { - public CurseOfTheNightlyHuntEffect() { + CurseOfTheNightlyHuntEffect() { super(Duration.WhileOnBattlefield); - staticText = "Creatures enchanted player controls attack each turn if able"; + staticText = "Creatures enchanted player controls attack each combat if able"; } private CurseOfTheNightlyHuntEffect(final CurseOfTheNightlyHuntEffect effect) { @@ -66,12 +65,7 @@ class CurseOfTheNightlyHuntEffect extends RequirementEffect { @Override public boolean applies(Permanent permanent, Ability source, Game game) { Permanent enchantment = game.getPermanent(source.getSourceId()); - if (enchantment != null && enchantment.getAttachedTo() != null) { - if (permanent.isControlledBy(enchantment.getAttachedTo())) { - return true; - } - } - return false; + return enchantment != null && enchantment.getAttachedTo() != null && (permanent.isControlledBy(enchantment.getAttachedTo())); } @Override diff --git a/Mage.Sets/src/mage/cards/d/DaggerOfTheWorthy.java b/Mage.Sets/src/mage/cards/d/DaggerOfTheWorthy.java index 888bc71677d..765adc528d9 100644 --- a/Mage.Sets/src/mage/cards/d/DaggerOfTheWorthy.java +++ b/Mage.Sets/src/mage/cards/d/DaggerOfTheWorthy.java @@ -1,4 +1,3 @@ - package mage.cards.d; import java.util.UUID; @@ -15,7 +14,6 @@ import mage.constants.AttachmentType; import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Outcome; -import mage.constants.Zone; /** * @@ -29,9 +27,10 @@ public final class DaggerOfTheWorthy extends CardImpl { this.subtype.add(SubType.EQUIPMENT); // Equipped creature gets +2/+0 and has afflict 1. (Whenever it becomes blocked, defending player loses 1 life.) - Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEquippedEffect(2,0)); - ability.addEffect(new GainAbilityAttachedEffect(new AfflictAbility(1), AttachmentType.EQUIPMENT)); - addAbility(ability); + Ability ability = new SimpleStaticAbility(new BoostEquippedEffect(2,0)); + ability.addEffect(new GainAbilityAttachedEffect(new AfflictAbility(1), AttachmentType.EQUIPMENT) + .setText("and has afflict 1")); + this.addAbility(ability); // Equip {2} ({2}: Attach to target creature you control. Equip only as a sorcery.) this.addAbility(new EquipAbility(Outcome.AddAbility, new GenericManaCost(2))); diff --git a/Mage.Sets/src/mage/cards/d/DeepGnomeTerramancer.java b/Mage.Sets/src/mage/cards/d/DeepGnomeTerramancer.java index 6d6a13fdcb9..e7b0b815321 100644 --- a/Mage.Sets/src/mage/cards/d/DeepGnomeTerramancer.java +++ b/Mage.Sets/src/mage/cards/d/DeepGnomeTerramancer.java @@ -35,7 +35,7 @@ public final class DeepGnomeTerramancer extends CardImpl { // Whenever one or more lands enter the battlefield under an opponent's control // without being played, you may search your library for a Plains card, put it // onto the battlefield tapped, then shuffle. Do this only once each turn. - this.addAbility(new DeepGnomeTerramancerTriggeredAbility().setDoOnlyOnceEachTurn(true), new PlayLandWatcher()); + this.addAbility(new DeepGnomeTerramancerTriggeredAbility().setDoOnlyOnceEachTurn(true).withFlavorWord("Mold Earth"), new PlayLandWatcher()); } private DeepGnomeTerramancer(final DeepGnomeTerramancer card) { diff --git a/Mage.Sets/src/mage/cards/e/ElderDeepFiend.java b/Mage.Sets/src/mage/cards/e/ElderDeepFiend.java index 8a4426a0903..6dc2a5c9f8e 100644 --- a/Mage.Sets/src/mage/cards/e/ElderDeepFiend.java +++ b/Mage.Sets/src/mage/cards/e/ElderDeepFiend.java @@ -1,4 +1,3 @@ - package mage.cards.e; import java.util.UUID; @@ -13,7 +12,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.filter.FilterPermanent; +import mage.filter.StaticFilters; import mage.target.TargetPermanent; /** @@ -37,7 +36,7 @@ public final class ElderDeepFiend extends CardImpl { // When you cast Elder Deep-Fiend, tap up to four target permanents. Ability ability = new CastSourceTriggeredAbility(new TapTargetEffect()); - ability.addTarget(new TargetPermanent(0, 4, new FilterPermanent("permanent"), false)); + ability.addTarget(new TargetPermanent(0, 4, StaticFilters.FILTER_PERMANENTS, false)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/e/ExpendableTroops.java b/Mage.Sets/src/mage/cards/e/ExpendableTroops.java index 92067311450..7fb5898057e 100644 --- a/Mage.Sets/src/mage/cards/e/ExpendableTroops.java +++ b/Mage.Sets/src/mage/cards/e/ExpendableTroops.java @@ -31,7 +31,7 @@ public final class ExpendableTroops extends CardImpl { this.toughness = new MageInt(1); // {tap}, Sacrifice Expendable Troops: Expendable Troops deals 2 damage to target attacking or blocking creature. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(2), new TapSourceCost()); + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(2, "it"), new TapSourceCost()); ability.addCost(new SacrificeSourceCost()); ability.addTarget(new TargetCreaturePermanent(new FilterAttackingOrBlockingCreature())); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/e/ExposeEvil.java b/Mage.Sets/src/mage/cards/e/ExposeEvil.java index 531307723aa..348c0c6fda1 100644 --- a/Mage.Sets/src/mage/cards/e/ExposeEvil.java +++ b/Mage.Sets/src/mage/cards/e/ExposeEvil.java @@ -23,7 +23,7 @@ public final class ExposeEvil extends CardImpl { this.getSpellAbility().addTarget(new TargetCreaturePermanent(0, 2)); // Investigate (Create a colorless Clue artifact token with \"{2}, Sacrifice this artifact: Draw a card.\") - this.getSpellAbility().addEffect(new InvestigateEffect()); + this.getSpellAbility().addEffect(new InvestigateEffect().concatBy("
")); } private ExposeEvil(final ExposeEvil card) { diff --git a/Mage.Sets/src/mage/cards/f/FacelessButcher.java b/Mage.Sets/src/mage/cards/f/FacelessButcher.java index de40203235e..e8b83462d7b 100644 --- a/Mage.Sets/src/mage/cards/f/FacelessButcher.java +++ b/Mage.Sets/src/mage/cards/f/FacelessButcher.java @@ -11,8 +11,7 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Zone; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AnotherPredicate; +import mage.filter.StaticFilters; import mage.target.TargetPermanent; import java.util.UUID; @@ -23,12 +22,6 @@ import java.util.UUID; */ public final class FacelessButcher extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature other than Faceless Butcher"); - - static { - filter.add(AnotherPredicate.instance); - } - public FacelessButcher(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}{B}"); this.subtype.add(SubType.NIGHTMARE); @@ -38,7 +31,7 @@ public final class FacelessButcher extends CardImpl { // When Faceless Butcher enters the battlefield, exile target creature other than Faceless Butcher. Ability ability = new EntersBattlefieldTriggeredAbility(new ExileTargetForSourceEffect(), false); - ability.addTarget(new TargetPermanent(filter)); + ability.addTarget(new TargetPermanent(StaticFilters.FILTER_ANOTHER_TARGET_CREATURE)); this.addAbility(ability); // When Faceless Butcher leaves the battlefield, return the exiled card to the battlefield under its owner's control. diff --git a/Mage.Sets/src/mage/cards/f/FateForetold.java b/Mage.Sets/src/mage/cards/f/FateForetold.java index c21a2b2e062..7fedebc716a 100644 --- a/Mage.Sets/src/mage/cards/f/FateForetold.java +++ b/Mage.Sets/src/mage/cards/f/FateForetold.java @@ -1,4 +1,3 @@ - package mage.cards.f; import java.util.UUID; @@ -7,10 +6,12 @@ import mage.abilities.common.DiesAttachedTriggeredAbility; import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.effects.common.AttachEffect; import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.abilities.effects.common.DrawCardTargetEffect; import mage.abilities.keyword.EnchantAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; +import mage.constants.SetTargetPointer; import mage.constants.SubType; import mage.constants.Outcome; import mage.target.TargetPermanent; @@ -36,7 +37,8 @@ public final class FateForetold extends CardImpl { // When Fate Foretold enters the battlefield, draw a card. this.addAbility(new EntersBattlefieldTriggeredAbility(new DrawCardSourceControllerEffect(1),false)); // When enchanted creature dies, its controller draws a card. - this.addAbility(new DiesAttachedTriggeredAbility(new DrawCardSourceControllerEffect(1),"enchanted creature", false)); + this.addAbility(new DiesAttachedTriggeredAbility(new DrawCardTargetEffect(1).setText("its controller draws a card"), + "enchanted creature", false, true, SetTargetPointer.ATTACHED_TO_CONTROLLER)); } private FateForetold(final FateForetold card) { diff --git a/Mage.Sets/src/mage/cards/f/FinaleOfRevelation.java b/Mage.Sets/src/mage/cards/f/FinaleOfRevelation.java index 2c4da25a158..5f426c9c2cd 100644 --- a/Mage.Sets/src/mage/cards/f/FinaleOfRevelation.java +++ b/Mage.Sets/src/mage/cards/f/FinaleOfRevelation.java @@ -27,7 +27,7 @@ public final class FinaleOfRevelation extends CardImpl { this.getSpellAbility().addEffect(new FinaleOfRevelationEffect()); // Exile Finale of Revelation. - this.getSpellAbility().addEffect(new ExileSpellEffect()); + this.getSpellAbility().addEffect(new ExileSpellEffect().concatBy("
")); } private FinaleOfRevelation(final FinaleOfRevelation card) { @@ -80,4 +80,4 @@ class FinaleOfRevelationEffect extends OneShotEffect { return true; } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/f/FlamecastWheel.java b/Mage.Sets/src/mage/cards/f/FlamecastWheel.java index 3e7f2cb633a..57077e8e98b 100644 --- a/Mage.Sets/src/mage/cards/f/FlamecastWheel.java +++ b/Mage.Sets/src/mage/cards/f/FlamecastWheel.java @@ -1,4 +1,3 @@ - package mage.cards.f; import java.util.UUID; @@ -24,7 +23,7 @@ public final class FlamecastWheel extends CardImpl { super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{1}"); // {5}, {T}, Sacrifice Flamecast Wheel: Flamecast Wheel deals 3 damage to target creature. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(3), new GenericManaCost(5)); + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(3, "it"), new GenericManaCost(5)); ability.addTarget(new TargetCreaturePermanent()); ability.addCost(new TapSourceCost()); ability.addCost(new SacrificeSourceCost()); diff --git a/Mage.Sets/src/mage/cards/f/FolkMedicine.java b/Mage.Sets/src/mage/cards/f/FolkMedicine.java index d362afdad3a..13a192371c2 100644 --- a/Mage.Sets/src/mage/cards/f/FolkMedicine.java +++ b/Mage.Sets/src/mage/cards/f/FolkMedicine.java @@ -8,7 +8,6 @@ import mage.abilities.keyword.FlashbackAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.constants.TimingRule; import mage.filter.StaticFilters; import java.util.UUID; @@ -23,7 +22,8 @@ public final class FolkMedicine extends CardImpl { // You gain 1 life for each creature you control. DynamicValue amount = new PermanentsOnBattlefieldCount(StaticFilters.FILTER_CONTROLLED_CREATURE); - this.getSpellAbility().addEffect(new GainLifeEffect(amount)); + this.getSpellAbility().addEffect(new GainLifeEffect(amount) + .setText("you gain 1 life for each creature you control")); // Flashback {1}{W} this.addAbility(new FlashbackAbility(this, new ManaCostsImpl<>("{1}{W}"))); } diff --git a/Mage.Sets/src/mage/cards/g/GiftOfOrzhova.java b/Mage.Sets/src/mage/cards/g/GiftOfOrzhova.java index 09fa752f2c0..65bed1e8405 100644 --- a/Mage.Sets/src/mage/cards/g/GiftOfOrzhova.java +++ b/Mage.Sets/src/mage/cards/g/GiftOfOrzhova.java @@ -1,4 +1,3 @@ - package mage.cards.g; import java.util.UUID; @@ -36,8 +35,10 @@ public final class GiftOfOrzhova extends CardImpl { // Enchanted creature gets +1/+1 and has flying and lifelink. ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(1,1, Duration.WhileOnBattlefield)); - ability.addEffect(new GainAbilityAttachedEffect(FlyingAbility.getInstance(), AttachmentType.AURA, Duration.WhileOnBattlefield)); - ability.addEffect(new GainAbilityAttachedEffect(LifelinkAbility.getInstance(), AttachmentType.AURA, Duration.WhileOnBattlefield)); + ability.addEffect(new GainAbilityAttachedEffect(FlyingAbility.getInstance(), AttachmentType.AURA, Duration.WhileOnBattlefield) + .setText("and has flying")); + ability.addEffect(new GainAbilityAttachedEffect(LifelinkAbility.getInstance(), AttachmentType.AURA, Duration.WhileOnBattlefield) + .setText("and lifelink")); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/g/GoblinLegionnaire.java b/Mage.Sets/src/mage/cards/g/GoblinLegionnaire.java index 25e189bfd74..b753ad7aa23 100644 --- a/Mage.Sets/src/mage/cards/g/GoblinLegionnaire.java +++ b/Mage.Sets/src/mage/cards/g/GoblinLegionnaire.java @@ -1,4 +1,3 @@ - package mage.cards.g; import java.util.UUID; @@ -29,13 +28,16 @@ public final class GoblinLegionnaire extends CardImpl { this.subtype.add(SubType.GOBLIN); this.subtype.add(SubType.SOLDIER); - this.power = new MageInt(2); this.toughness = new MageInt(2); - Ability firstAbility = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(2), new ColoredManaCost(ColoredManaSymbol.R)); + + // {R}, Sacrifice Goblin Legionnaire: It deals 2 damage to any target. + Ability firstAbility = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(2, "it"), new ColoredManaCost(ColoredManaSymbol.R)); firstAbility.addCost(new SacrificeSourceCost()); firstAbility.addTarget(new TargetAnyTarget()); this.addAbility(firstAbility); + + // {W}, Sacrifice Goblin Legionnaire: Prevent the next 2 damage that would be dealt to any target this turn. Ability secondAbility = new SimpleActivatedAbility(Zone.BATTLEFIELD, new PreventDamageToTargetEffect(Duration.EndOfTurn, 2), new ColoredManaCost(ColoredManaSymbol.W)); secondAbility.addCost(new SacrificeSourceCost()); secondAbility.addTarget(new TargetAnyTarget()); diff --git a/Mage.Sets/src/mage/cards/g/GoneMissing.java b/Mage.Sets/src/mage/cards/g/GoneMissing.java index 5b62d7195a8..c06c2f42a31 100644 --- a/Mage.Sets/src/mage/cards/g/GoneMissing.java +++ b/Mage.Sets/src/mage/cards/g/GoneMissing.java @@ -23,7 +23,7 @@ public final class GoneMissing extends CardImpl { this.getSpellAbility().addTarget(new TargetPermanent()); // Investigate. - this.getSpellAbility().addEffect(new InvestigateEffect()); + this.getSpellAbility().addEffect(new InvestigateEffect().concatBy("
")); } private GoneMissing(final GoneMissing card) { diff --git a/Mage.Sets/src/mage/cards/g/GutTrueSoulZealot.java b/Mage.Sets/src/mage/cards/g/GutTrueSoulZealot.java index cce7e7ae953..d0bf6e8db2b 100644 --- a/Mage.Sets/src/mage/cards/g/GutTrueSoulZealot.java +++ b/Mage.Sets/src/mage/cards/g/GutTrueSoulZealot.java @@ -34,7 +34,7 @@ public final class GutTrueSoulZealot extends CardImpl { this.addAbility(new AttacksWithCreaturesTriggeredAbility(new DoIfCostPaid( new CreateTokenEffect( new SkeletonMenaceToken(), 1, true, true - ).withAdditionalRules(" (It can't be blocked except by two or more creatures.)"), + ).withAdditionalRules(". (It can't be blocked except by two or more creatures.)"), new SacrificeTargetCost(StaticFilters.FILTER_CONTROLLED_ARTIFACT_OR_OTHER_CREATURE) ), 1)); diff --git a/Mage.Sets/src/mage/cards/h/HannasCustody.java b/Mage.Sets/src/mage/cards/h/HannasCustody.java index 15e6b739e05..9bfcb9f7017 100644 --- a/Mage.Sets/src/mage/cards/h/HannasCustody.java +++ b/Mage.Sets/src/mage/cards/h/HannasCustody.java @@ -1,4 +1,3 @@ - package mage.cards.h; import java.util.UUID; @@ -9,7 +8,6 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; -import mage.constants.Zone; import mage.filter.FilterPermanent; /** @@ -18,7 +16,7 @@ import mage.filter.FilterPermanent; */ public final class HannasCustody extends CardImpl { - private static final FilterPermanent filter = new FilterPermanent("artifacts"); + private static final FilterPermanent filter = new FilterPermanent("all artifacts"); static { filter.add(CardType.ARTIFACT.getPredicate()); @@ -27,7 +25,7 @@ public final class HannasCustody extends CardImpl { public HannasCustody(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{2}{W}"); - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAllEffect(ShroudAbility.getInstance(), Duration.WhileOnBattlefield, filter, false))); + this.addAbility(new SimpleStaticAbility(new GainAbilityAllEffect(ShroudAbility.getInstance(), Duration.WhileOnBattlefield, filter, false))); } private HannasCustody(final HannasCustody card) { diff --git a/Mage.Sets/src/mage/cards/h/HomicidalBrute.java b/Mage.Sets/src/mage/cards/h/HomicidalBrute.java index 81a6622f783..8fbe94b9423 100644 --- a/Mage.Sets/src/mage/cards/h/HomicidalBrute.java +++ b/Mage.Sets/src/mage/cards/h/HomicidalBrute.java @@ -82,7 +82,7 @@ class HomicidalBruteTriggeredAbility extends TriggeredAbilityImpl { @Override public String getRule() { - return "At the beginning of your end step, if {this} didn't attack this turn, tap {this}, then transform it"; + return "At the beginning of your end step, if {this} didn't attack this turn, tap {this}, then transform it."; } } @@ -101,4 +101,4 @@ class HomicidalBruteWatcher extends Watcher { condition = true; } } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/h/HotSoup.java b/Mage.Sets/src/mage/cards/h/HotSoup.java index c7c158cb462..3f1bc1d2141 100644 --- a/Mage.Sets/src/mage/cards/h/HotSoup.java +++ b/Mage.Sets/src/mage/cards/h/HotSoup.java @@ -1,4 +1,3 @@ - package mage.cards.h; import java.util.Objects; @@ -18,7 +17,6 @@ import mage.constants.Outcome; import mage.constants.Zone; import mage.game.Game; import mage.game.events.GameEvent; -import mage.game.events.GameEvent.EventType; import mage.game.permanent.Permanent; import mage.target.targetpointer.FixedTarget; @@ -55,7 +53,7 @@ public final class HotSoup extends CardImpl { class HotSoupTriggeredAbility extends TriggeredAbilityImpl { HotSoupTriggeredAbility() { - super(Zone.BATTLEFIELD, new DestroyTargetEffect(), false); + super(Zone.BATTLEFIELD, new DestroyTargetEffect().setText("destroy it"), false); setTriggerPhrase("Whenever equipped creature is dealt damage, "); } diff --git a/Mage.Sets/src/mage/cards/i/IndrikUmbra.java b/Mage.Sets/src/mage/cards/i/IndrikUmbra.java index 0a1c667dc7d..cc791d8f268 100644 --- a/Mage.Sets/src/mage/cards/i/IndrikUmbra.java +++ b/Mage.Sets/src/mage/cards/i/IndrikUmbra.java @@ -1,4 +1,3 @@ - package mage.cards.i; import java.util.UUID; @@ -42,8 +41,10 @@ public final class IndrikUmbra extends CardImpl { // Enchanted creature gets +4/+4 and has first strike, and all creatures able to block it do so. ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(4, 4, Duration.WhileOnBattlefield)); - ability.addEffect(new GainAbilityAttachedEffect(FirstStrikeAbility.getInstance(), AttachmentType.AURA)); - ability.addEffect(new MustBeBlockedByAllAttachedEffect(AttachmentType.AURA)); + ability.addEffect(new GainAbilityAttachedEffect(FirstStrikeAbility.getInstance(), AttachmentType.AURA) + .setText("and has first strike")); + ability.addEffect(new MustBeBlockedByAllAttachedEffect(AttachmentType.AURA) + .setText(", and all creatures able to block it do so")); this.addAbility(ability); // Totem armor diff --git a/Mage.Sets/src/mage/cards/i/IrenicussVileDuplication.java b/Mage.Sets/src/mage/cards/i/IrenicussVileDuplication.java index 85eba01913d..296567e3728 100644 --- a/Mage.Sets/src/mage/cards/i/IrenicussVileDuplication.java +++ b/Mage.Sets/src/mage/cards/i/IrenicussVileDuplication.java @@ -22,7 +22,7 @@ public final class IrenicussVileDuplication extends CardImpl { .addAdditionalAbilities(FlyingAbility.getInstance()) .setIsntLegendary(true) .setText("create a token that's a copy of target creature you control, " + - "except the token has flying and isn't legendary if that creature is legendary")); + "except the token has flying and it isn't legendary")); this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent()); } diff --git a/Mage.Sets/src/mage/cards/j/JohnnyComboPlayer.java b/Mage.Sets/src/mage/cards/j/JohnnyComboPlayer.java index 085ddd232e0..49b3aa72aee 100644 --- a/Mage.Sets/src/mage/cards/j/JohnnyComboPlayer.java +++ b/Mage.Sets/src/mage/cards/j/JohnnyComboPlayer.java @@ -1,4 +1,3 @@ - package mage.cards.j; import java.util.UUID; @@ -12,7 +11,7 @@ import mage.constants.CardType; import mage.constants.SubType; import mage.constants.SuperType; import mage.constants.Zone; -import mage.filter.FilterCard; +import mage.filter.StaticFilters; import mage.target.common.TargetCardInLibrary; /** @@ -30,7 +29,8 @@ public final class JohnnyComboPlayer extends CardImpl { this.toughness = new MageInt(1); // {4}: Search your library for a card, put that card into your hand, then shuffle your library. - this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new SearchLibraryPutInHandEffect(new TargetCardInLibrary(new FilterCard("a card")), false), new ManaCostsImpl<>("{4}"))); + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new SearchLibraryPutInHandEffect( + new TargetCardInLibrary(StaticFilters.FILTER_CARD_A), false, true), new ManaCostsImpl<>("{4}"))); } private JohnnyComboPlayer(final JohnnyComboPlayer card) { diff --git a/Mage.Sets/src/mage/cards/j/JoyousRespite.java b/Mage.Sets/src/mage/cards/j/JoyousRespite.java index f6398e74d95..9067a4de1c8 100644 --- a/Mage.Sets/src/mage/cards/j/JoyousRespite.java +++ b/Mage.Sets/src/mage/cards/j/JoyousRespite.java @@ -1,5 +1,3 @@ - - package mage.cards.j; import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount; @@ -27,7 +25,8 @@ public final class JoyousRespite extends CardImpl { // You gain 1 life for each land you control. - this.getSpellAbility().addEffect(new GainLifeEffect(new PermanentsOnBattlefieldCount(filter))); + this.getSpellAbility().addEffect(new GainLifeEffect(new PermanentsOnBattlefieldCount(filter)) + .setText("you gain 1 life for each land you control")); } private JoyousRespite(final JoyousRespite card) { diff --git a/Mage.Sets/src/mage/cards/k/Kudzu.java b/Mage.Sets/src/mage/cards/k/Kudzu.java index 598de1294cb..771379b3509 100644 --- a/Mage.Sets/src/mage/cards/k/Kudzu.java +++ b/Mage.Sets/src/mage/cards/k/Kudzu.java @@ -39,7 +39,8 @@ public final class Kudzu extends CardImpl { this.addAbility(ability); // When enchanted land becomes tapped, destroy it. That land's controller attaches Kudzu to a land of their choice. - this.addAbility(new BecomesTappedAttachedTriggeredAbility(new KudzuEffect(), "enchanted land")); + this.addAbility(new BecomesTappedAttachedTriggeredAbility(new KudzuEffect(), "enchanted land") + .setTriggerPhrase("When enchanted land becomes tapped, ")); } diff --git a/Mage.Sets/src/mage/cards/l/LandsEdge.java b/Mage.Sets/src/mage/cards/l/LandsEdge.java index fbb9951d734..3100ebed8ec 100644 --- a/Mage.Sets/src/mage/cards/l/LandsEdge.java +++ b/Mage.Sets/src/mage/cards/l/LandsEdge.java @@ -1,4 +1,3 @@ - package mage.cards.l; import java.util.List; @@ -54,7 +53,7 @@ class LandsEdgeEffect extends OneShotEffect { public LandsEdgeEffect() { super(Outcome.Neutral); - staticText = "If the discarded card was a land card, {this} deals 2 damage to target player"; + staticText = "If the discarded card was a land card, {this} deals 2 damage to target player or planeswalker"; } private LandsEdgeEffect(final LandsEdgeEffect effect) { diff --git a/Mage.Sets/src/mage/cards/l/LunarForce.java b/Mage.Sets/src/mage/cards/l/LunarForce.java index 58c71fea93e..a2c8280df49 100644 --- a/Mage.Sets/src/mage/cards/l/LunarForce.java +++ b/Mage.Sets/src/mage/cards/l/LunarForce.java @@ -1,4 +1,3 @@ - package mage.cards.l; import java.util.UUID; @@ -12,7 +11,6 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SetTargetPointer; import mage.constants.Zone; -import mage.filter.FilterSpell; import mage.filter.StaticFilters; /** diff --git a/Mage.Sets/src/mage/cards/m/MadcapSkills.java b/Mage.Sets/src/mage/cards/m/MadcapSkills.java index 9e25c220b48..10f37737c8e 100644 --- a/Mage.Sets/src/mage/cards/m/MadcapSkills.java +++ b/Mage.Sets/src/mage/cards/m/MadcapSkills.java @@ -1,4 +1,3 @@ - package mage.cards.m; import java.util.UUID; @@ -15,7 +14,6 @@ import mage.constants.AttachmentType; import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Outcome; -import mage.constants.Zone; import mage.target.TargetPermanent; import mage.target.common.TargetCreaturePermanent; @@ -29,7 +27,6 @@ public final class MadcapSkills extends CardImpl { super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{1}{R}"); this.subtype.add(SubType.AURA); - // Enchant creature TargetPermanent auraTarget = new TargetCreaturePermanent(); this.getSpellAbility().addTarget(auraTarget); @@ -38,8 +35,10 @@ public final class MadcapSkills extends CardImpl { this.addAbility(ability); // Enchanted creature gets +3/+0 and and has menace. (It can't be blocked except by two or more creatures.) - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(3, 0))); - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(new MenaceAbility(false), AttachmentType.AURA))); + Ability staticAbility = new SimpleStaticAbility(new BoostEnchantedEffect(3, 0)); + staticAbility.addEffect(new GainAbilityAttachedEffect(new MenaceAbility(false), AttachmentType.AURA) + .setText("and has menace")); + this.addAbility(staticAbility); } private MadcapSkills(final MadcapSkills card) { diff --git a/Mage.Sets/src/mage/cards/m/MasteryOfTheUnseen.java b/Mage.Sets/src/mage/cards/m/MasteryOfTheUnseen.java index 7fb14846a22..7f99b3944dd 100644 --- a/Mage.Sets/src/mage/cards/m/MasteryOfTheUnseen.java +++ b/Mage.Sets/src/mage/cards/m/MasteryOfTheUnseen.java @@ -25,7 +25,8 @@ public final class MasteryOfTheUnseen extends CardImpl { // Whenever a permanent you control is turned face up, you gain 1 life for each creature you control. this.addAbility(new TurnedFaceUpAllTriggeredAbility( - new GainLifeEffect(new PermanentsOnBattlefieldCount(StaticFilters.FILTER_CONTROLLED_CREATURE)), + new GainLifeEffect(new PermanentsOnBattlefieldCount(StaticFilters.FILTER_CONTROLLED_CREATURE)) + .setText("you gain 1 life for each creature you control"), new FilterControlledPermanent("a permanent you control"))); // {3}{W}: Manifest the top card of your library. diff --git a/Mage.Sets/src/mage/cards/n/NoDachi.java b/Mage.Sets/src/mage/cards/n/NoDachi.java index 96274e1a429..ad15ef07450 100644 --- a/Mage.Sets/src/mage/cards/n/NoDachi.java +++ b/Mage.Sets/src/mage/cards/n/NoDachi.java @@ -1,8 +1,8 @@ - - package mage.cards.n; 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; @@ -21,9 +21,15 @@ public final class NoDachi extends CardImpl { public NoDachi (UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{2}"); this.subtype.add(SubType.EQUIPMENT); + + // Equipped creature gets +2/+0 and has first strike. + Ability ability = new SimpleStaticAbility(new BoostEquippedEffect(2, 0)); + ability.addEffect(new GainAbilityAttachedEffect(FirstStrikeAbility.getInstance(), AttachmentType.EQUIPMENT) + .setText("and has first strike")); + this.addAbility(ability); + + // Equip {3} this.addAbility(new EquipAbility(Outcome.AddAbility, new GenericManaCost(3))); - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(FirstStrikeAbility.getInstance(), AttachmentType.EQUIPMENT))); - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEquippedEffect(2, 0))); } private NoDachi(final NoDachi card) { diff --git a/Mage.Sets/src/mage/cards/o/ObeliskOfUndoing.java b/Mage.Sets/src/mage/cards/o/ObeliskOfUndoing.java index 8a3abefa028..5c6311f38c1 100644 --- a/Mage.Sets/src/mage/cards/o/ObeliskOfUndoing.java +++ b/Mage.Sets/src/mage/cards/o/ObeliskOfUndoing.java @@ -1,4 +1,3 @@ - package mage.cards.o; import java.util.UUID; @@ -22,7 +21,7 @@ import mage.target.common.TargetControlledPermanent; */ public final class ObeliskOfUndoing extends CardImpl { - private static final FilterControlledPermanent filter = new FilterControlledPermanent(); + private static final FilterControlledPermanent filter = new FilterControlledPermanent("permanent you both own and control"); static { filter.add(TargetController.YOU.getOwnerPredicate()); diff --git a/Mage.Sets/src/mage/cards/o/OniPossession.java b/Mage.Sets/src/mage/cards/o/OniPossession.java index bfeb658bb19..e4f82aecb41 100644 --- a/Mage.Sets/src/mage/cards/o/OniPossession.java +++ b/Mage.Sets/src/mage/cards/o/OniPossession.java @@ -1,4 +1,3 @@ - package mage.cards.o; import mage.abilities.Ability; @@ -41,10 +40,12 @@ public final class OniPossession extends CardImpl { new SacrificeControllerEffect(StaticFilters.FILTER_CONTROLLED_CREATURE_SHORT_TEXT, 1, ""), TargetController.YOU, false); this.addAbility(ability2); // Enchanted creature gets +3/+3 and has trample. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(3, 3, Duration.WhileOnBattlefield))); - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(TrampleAbility.getInstance(), AttachmentType.AURA))); + Ability staticAbility = new SimpleStaticAbility(new BoostEnchantedEffect(3, 3)); + staticAbility.addEffect(new GainAbilityAttachedEffect(TrampleAbility.getInstance(), AttachmentType.AURA) + .setText("and has trample")); + this.addAbility(staticAbility); // Enchanted creature is a Demon Spirit. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SetCardSubtypeAttachedEffect(Duration.WhileOnBattlefield, AttachmentType.AURA, SubType.DEMON, SubType.SPIRIT))); + this.addAbility(new SimpleStaticAbility(new SetCardSubtypeAttachedEffect(Duration.WhileOnBattlefield, AttachmentType.AURA, SubType.DEMON, SubType.SPIRIT))); } private OniPossession(final OniPossession card) { diff --git a/Mage.Sets/src/mage/cards/o/OwlbearCub.java b/Mage.Sets/src/mage/cards/o/OwlbearCub.java index 8517bf1ab55..eeb98af5694 100644 --- a/Mage.Sets/src/mage/cards/o/OwlbearCub.java +++ b/Mage.Sets/src/mage/cards/o/OwlbearCub.java @@ -92,7 +92,7 @@ class OwlbearCubEffect extends OneShotEffect { super(Outcome.Benefit); staticText = "look at the top eight cards of your library. You may put a creature card " + "from among them onto the battlefield tapped and attacking that player. " + - "Put the rest on the bottom of your library in random order"; + "Put the rest on the bottom of your library in a random order"; } private OwlbearCubEffect(final OwlbearCubEffect effect) { diff --git a/Mage.Sets/src/mage/cards/p/Paralyze.java b/Mage.Sets/src/mage/cards/p/Paralyze.java index 84a2ee4700d..e6c447d0804 100644 --- a/Mage.Sets/src/mage/cards/p/Paralyze.java +++ b/Mage.Sets/src/mage/cards/p/Paralyze.java @@ -82,6 +82,6 @@ class ParalyzeEffect extends DoIfCostPaid { @Override public String getText(Mode mode) { - return "that player may " + CardUtil.addCostVerb(cost.getText()) + ". If they do, " + executingEffects.getText(mode); + return "that player may " + CardUtil.addCostVerb(cost.getText()) + ". If the player does, untap the creature."; } } diff --git a/Mage.Sets/src/mage/cards/p/PeaceAndQuiet.java b/Mage.Sets/src/mage/cards/p/PeaceAndQuiet.java index 1d4894d2005..af24341f57f 100644 --- a/Mage.Sets/src/mage/cards/p/PeaceAndQuiet.java +++ b/Mage.Sets/src/mage/cards/p/PeaceAndQuiet.java @@ -1,4 +1,3 @@ - package mage.cards.p; import mage.abilities.effects.common.DestroyTargetEffect; @@ -19,10 +18,9 @@ public final class PeaceAndQuiet extends CardImpl { public PeaceAndQuiet(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{1}{W}"); - // Destroy two target enchantments. this.getSpellAbility().addEffect(new DestroyTargetEffect()); - this.getSpellAbility().addTarget(new TargetPermanent(2, StaticFilters.FILTER_PERMANENT_ENCHANTMENT)); + this.getSpellAbility().addTarget(new TargetPermanent(2, StaticFilters.FILTER_PERMANENT_ENCHANTMENTS)); } private PeaceAndQuiet(final PeaceAndQuiet card) { diff --git a/Mage.Sets/src/mage/cards/p/PowerSurge.java b/Mage.Sets/src/mage/cards/p/PowerSurge.java index 44bfbb0d201..c8173971c7a 100644 --- a/Mage.Sets/src/mage/cards/p/PowerSurge.java +++ b/Mage.Sets/src/mage/cards/p/PowerSurge.java @@ -1,7 +1,6 @@ package mage.cards.p; import mage.abilities.Ability; -import mage.abilities.Mode; import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; import mage.abilities.effects.OneShotEffect; import mage.cards.CardImpl; @@ -41,9 +40,9 @@ public final class PowerSurge extends CardImpl { class PowerSurgeDamageEffect extends OneShotEffect { - public PowerSurgeDamageEffect() { + PowerSurgeDamageEffect() { super(Outcome.Damage); - this.staticText = "{this} deals X damage to that player where X is the number of untapped lands they controlled at the beginning of this turn"; + this.staticText = "{this} deals X damage to that player, where X is the number of untapped lands they controlled at the beginning of this turn"; } private PowerSurgeDamageEffect(final PowerSurgeDamageEffect copy) { diff --git a/Mage.Sets/src/mage/cards/p/PrimalVisitation.java b/Mage.Sets/src/mage/cards/p/PrimalVisitation.java index fae90374664..eb601a9a28c 100644 --- a/Mage.Sets/src/mage/cards/p/PrimalVisitation.java +++ b/Mage.Sets/src/mage/cards/p/PrimalVisitation.java @@ -1,4 +1,3 @@ - package mage.cards.p; import java.util.UUID; @@ -14,9 +13,7 @@ import mage.cards.CardSetInfo; import mage.constants.AttachmentType; import mage.constants.CardType; import mage.constants.SubType; -import mage.constants.Duration; import mage.constants.Outcome; -import mage.constants.Zone; import mage.target.TargetPermanent; import mage.target.common.TargetCreaturePermanent; @@ -39,8 +36,10 @@ public final class PrimalVisitation extends CardImpl { this.addAbility(ability); // Enchanted creature gets +3/+3 and has haste. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(3, 3))); - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(HasteAbility.getInstance(), AttachmentType.AURA, Duration.WhileOnBattlefield))); + Ability staticAbility = new SimpleStaticAbility(new BoostEnchantedEffect(3, 3)); + staticAbility.addEffect(new GainAbilityAttachedEffect(HasteAbility.getInstance(), AttachmentType.AURA) + .setText("and has haste")); + this.addAbility(staticAbility); } private PrimalVisitation(final PrimalVisitation card) { diff --git a/Mage.Sets/src/mage/cards/p/ProtectTheNegotiators.java b/Mage.Sets/src/mage/cards/p/ProtectTheNegotiators.java index f1408b24d5f..72a0ca87009 100644 --- a/Mage.Sets/src/mage/cards/p/ProtectTheNegotiators.java +++ b/Mage.Sets/src/mage/cards/p/ProtectTheNegotiators.java @@ -30,7 +30,7 @@ public final class ProtectTheNegotiators extends CardImpl { this.getSpellAbility().addEffect(new ConditionalOneShotEffect( new CreateTokenEffect(new SoldierToken()), KickedCondition.ONCE, - "If this was spell was kicked, create a 1/1 white Soldier creature token." + "If this spell was kicked, create a 1/1 white Soldier creature token." )); // Counter target spell unless its controller pays {1} for each creature you control. diff --git a/Mage.Sets/src/mage/cards/r/RhysticShield.java b/Mage.Sets/src/mage/cards/r/RhysticShield.java index 60b5b6a3580..2d2867931ea 100644 --- a/Mage.Sets/src/mage/cards/r/RhysticShield.java +++ b/Mage.Sets/src/mage/cards/r/RhysticShield.java @@ -1,4 +1,3 @@ - package mage.cards.r; import java.util.UUID; @@ -22,8 +21,8 @@ public final class RhysticShield extends CardImpl { super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{W}"); // Creatures you control get +0/+1 until end of turn. They get an additional +0/+2 until end of turn unless any player pays {2}. - this.getSpellAbility().addEffect(new BoostControlledEffect(0, 1, Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURE, false)); - Effect effect = new DoUnlessAnyPlayerPaysEffect(new BoostControlledEffect(0, 2, Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURE, false), new ManaCostsImpl<>("{2}")); + this.getSpellAbility().addEffect(new BoostControlledEffect(0, 1, Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURES, false)); + Effect effect = new DoUnlessAnyPlayerPaysEffect(new BoostControlledEffect(0, 2, Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURES, false), new ManaCostsImpl<>("{2}")); effect.setText("They get an additional +0/+2 until end of turn unless any player pays {2}"); this.getSpellAbility().addEffect(effect); } diff --git a/Mage.Sets/src/mage/cards/r/RootbornDefenses.java b/Mage.Sets/src/mage/cards/r/RootbornDefenses.java index 941eabd4cef..999c3db1102 100644 --- a/Mage.Sets/src/mage/cards/r/RootbornDefenses.java +++ b/Mage.Sets/src/mage/cards/r/RootbornDefenses.java @@ -1,4 +1,3 @@ - package mage.cards.r; import java.util.UUID; @@ -10,7 +9,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.StaticFilters; /** * @@ -27,8 +26,7 @@ public final class RootbornDefenses extends CardImpl { // token you control. Damage and effects that say "destroy" don't destroy // indestructible creatures.) this.getSpellAbility().addEffect(new PopulateEffect()); - Effect effect = new GainAbilityAllEffect(IndestructibleAbility.getInstance(), Duration.EndOfTurn, new FilterControlledCreaturePermanent(), false); - effect.setText("Creatures you control are indestructible this turn"); + Effect effect = new GainAbilityAllEffect(IndestructibleAbility.getInstance(), Duration.EndOfTurn, StaticFilters.FILTER_CONTROLLED_CREATURES, false); this.getSpellAbility().addEffect(effect); } @@ -42,4 +40,3 @@ public final class RootbornDefenses extends CardImpl { return new RootbornDefenses(this); } } - diff --git a/Mage.Sets/src/mage/cards/s/SaruliGatekeepers.java b/Mage.Sets/src/mage/cards/s/SaruliGatekeepers.java index 308d62ff59d..8a6d31fd1db 100644 --- a/Mage.Sets/src/mage/cards/s/SaruliGatekeepers.java +++ b/Mage.Sets/src/mage/cards/s/SaruliGatekeepers.java @@ -43,7 +43,7 @@ public final class SaruliGatekeepers extends CardImpl { this.addAbility(new ConditionalInterveningIfTriggeredAbility( new EntersBattlefieldTriggeredAbility(new GainLifeEffect(7)), gatesCondition, - "When {this} enters the battlefield, if you control two or more Gates, gain 7 life.") + "When {this} enters the battlefield, if you control two or more Gates, you gain 7 life.") .addHint(new ConditionHint(gatesCondition, "You control two or more Gates"))); } diff --git a/Mage.Sets/src/mage/cards/s/ScourgeOfGeierReach.java b/Mage.Sets/src/mage/cards/s/ScourgeOfGeierReach.java index 9f58b3db2b7..8f5410889e3 100644 --- a/Mage.Sets/src/mage/cards/s/ScourgeOfGeierReach.java +++ b/Mage.Sets/src/mage/cards/s/ScourgeOfGeierReach.java @@ -1,9 +1,9 @@ - package mage.cards.s; import java.util.UUID; import mage.MageInt; import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.dynamicvalue.DynamicValue; import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount; import mage.abilities.effects.common.continuous.BoostSourceEffect; import mage.cards.CardImpl; @@ -11,9 +11,8 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Duration; -import mage.constants.TargetController; -import mage.constants.Zone; import mage.filter.common.FilterCreaturePermanent; +import mage.filter.common.FilterOpponentsCreaturePermanent; /** * @@ -21,11 +20,8 @@ import mage.filter.common.FilterCreaturePermanent; */ public final class ScourgeOfGeierReach extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("for each creature your opponents control"); - - static { - filter.add(TargetController.OPPONENT.getControllerPredicate()); - } + private static final FilterCreaturePermanent filter = new FilterOpponentsCreaturePermanent("creature your opponents control"); + private static final DynamicValue xValue = new PermanentsOnBattlefieldCount(filter); public ScourgeOfGeierReach(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{R}{R}"); @@ -35,8 +31,7 @@ public final class ScourgeOfGeierReach extends CardImpl { this.toughness = new MageInt(3); // Scourge of Geier Reach gets +1/+1 for each creature your opponents control. - PermanentsOnBattlefieldCount amount = new PermanentsOnBattlefieldCount(filter); - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostSourceEffect(amount, amount, Duration.WhileOnBattlefield))); + this.addAbility(new SimpleStaticAbility(new BoostSourceEffect(xValue, xValue, Duration.WhileOnBattlefield))); } private ScourgeOfGeierReach(final ScourgeOfGeierReach card) { diff --git a/Mage.Sets/src/mage/cards/s/Simplify.java b/Mage.Sets/src/mage/cards/s/Simplify.java index c578bd73451..b3d5f1cd93e 100644 --- a/Mage.Sets/src/mage/cards/s/Simplify.java +++ b/Mage.Sets/src/mage/cards/s/Simplify.java @@ -1,4 +1,3 @@ - package mage.cards.s; import java.util.UUID; @@ -14,11 +13,13 @@ import mage.filter.common.FilterControlledEnchantmentPermanent; */ public final class Simplify extends CardImpl { + private static final FilterControlledEnchantmentPermanent filter = new FilterControlledEnchantmentPermanent("an enchantment"); + public Simplify(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{G}"); // Each player sacrifices an enchantment. - this.getSpellAbility().addEffect(new SacrificeAllEffect(1, new FilterControlledEnchantmentPermanent("enchantment"))); + this.getSpellAbility().addEffect(new SacrificeAllEffect(1, filter)); } private Simplify(final Simplify card) { diff --git a/Mage.Sets/src/mage/cards/s/SkarrganSkybreaker.java b/Mage.Sets/src/mage/cards/s/SkarrganSkybreaker.java index 3a1b1ced13d..a8fcc1fa548 100644 --- a/Mage.Sets/src/mage/cards/s/SkarrganSkybreaker.java +++ b/Mage.Sets/src/mage/cards/s/SkarrganSkybreaker.java @@ -1,4 +1,3 @@ - package mage.cards.s; import java.util.UUID; @@ -34,7 +33,8 @@ public final class SkarrganSkybreaker extends CardImpl { // Bloodthirst 3 this.addAbility(new BloodthirstAbility(3)); // {1}, Sacrifice Skarrgan Skybreaker: Skarrgan Skybreaker deals damage equal to its power to any target. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(new SourcePermanentPowerCount()), new GenericManaCost(1)); + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(new SourcePermanentPowerCount()) + .setText("It deals damage equal to its power to any target"), new GenericManaCost(1)); ability.addCost(new SacrificeSourceCost()); ability.addTarget(new TargetAnyTarget()); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/s/SkeletalGrimace.java b/Mage.Sets/src/mage/cards/s/SkeletalGrimace.java index 774aa9bb894..0efec5787ea 100644 --- a/Mage.Sets/src/mage/cards/s/SkeletalGrimace.java +++ b/Mage.Sets/src/mage/cards/s/SkeletalGrimace.java @@ -1,4 +1,3 @@ - package mage.cards.s; import java.util.UUID; @@ -16,7 +15,6 @@ import mage.cards.CardSetInfo; import mage.constants.AttachmentType; import mage.constants.CardType; import mage.constants.SubType; -import mage.constants.Duration; import mage.constants.Outcome; import mage.constants.Zone; import mage.target.TargetPermanent; @@ -32,17 +30,19 @@ public final class SkeletalGrimace extends CardImpl { super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{1}{B}"); this.subtype.add(SubType.AURA); - // Enchant creature TargetPermanent auraTarget = new TargetCreaturePermanent(); this.getSpellAbility().addTarget(auraTarget); this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature)); Ability ability = new EnchantAbility(auraTarget); this.addAbility(ability); + // Enchanted creature gets +1/+1 and has "{B}: Regenerate this creature." - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(1, 1, Duration.WhileOnBattlefield))); + Ability staticAbility = new SimpleStaticAbility(new BoostEnchantedEffect(1, 1)); Ability gainedAbility = new SimpleActivatedAbility(Zone.BATTLEFIELD, new RegenerateSourceEffect(), new ManaCostsImpl<>("{B}")); - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(gainedAbility, AttachmentType.AURA))); + staticAbility.addEffect(new GainAbilityAttachedEffect(gainedAbility, AttachmentType.AURA) + .setText("and has \"{B}: Regenerate this creature.\"")); + this.addAbility(staticAbility); } private SkeletalGrimace(final SkeletalGrimace card) { diff --git a/Mage.Sets/src/mage/cards/s/SkillfulLunge.java b/Mage.Sets/src/mage/cards/s/SkillfulLunge.java index 2abc2a38cdb..d48ae46b293 100644 --- a/Mage.Sets/src/mage/cards/s/SkillfulLunge.java +++ b/Mage.Sets/src/mage/cards/s/SkillfulLunge.java @@ -1,4 +1,3 @@ - package mage.cards.s; import java.util.UUID; @@ -20,11 +19,12 @@ public final class SkillfulLunge extends CardImpl { public SkillfulLunge(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{1}{W}"); - // Target creature gets +2/+0 and gains first strike until end of turn. this.getSpellAbility().addTarget(new TargetCreaturePermanent()); - this.getSpellAbility().addEffect(new BoostTargetEffect(2, 0, Duration.EndOfTurn)); - this.getSpellAbility().addEffect(new GainAbilityTargetEffect(FirstStrikeAbility.getInstance(), Duration.EndOfTurn)); + this.getSpellAbility().addEffect(new BoostTargetEffect(2, 0, Duration.EndOfTurn) + .setText("target creature gets +2/+0")); + this.getSpellAbility().addEffect(new GainAbilityTargetEffect(FirstStrikeAbility.getInstance(), Duration.EndOfTurn) + .setText("and gains first strike until end of turn")); } private SkillfulLunge(final SkillfulLunge card) { diff --git a/Mage.Sets/src/mage/cards/s/Skizzik.java b/Mage.Sets/src/mage/cards/s/Skizzik.java index 57780fe754c..da59a47ac36 100644 --- a/Mage.Sets/src/mage/cards/s/Skizzik.java +++ b/Mage.Sets/src/mage/cards/s/Skizzik.java @@ -1,4 +1,3 @@ - package mage.cards.s; import java.util.UUID; @@ -36,7 +35,8 @@ public final class Skizzik extends CardImpl { this.addAbility(HasteAbility.getInstance()); // At the beginning of the end step, sacrifice Skizzik unless it was kicked. this.addAbility(new BeginningOfEndStepTriggeredAbility( - new SacrificeSourceUnlessConditionEffect(KickedCondition.ONCE), TargetController.NEXT, false)); + new SacrificeSourceUnlessConditionEffect(KickedCondition.ONCE) + .setText("if {this} wasn't kicked, sacrifice it"), TargetController.NEXT, false)); } private Skizzik(final Skizzik card) { diff --git a/Mage.Sets/src/mage/cards/s/SlightMalfunction.java b/Mage.Sets/src/mage/cards/s/SlightMalfunction.java index f1c9c6aa6c1..193e512ba16 100644 --- a/Mage.Sets/src/mage/cards/s/SlightMalfunction.java +++ b/Mage.Sets/src/mage/cards/s/SlightMalfunction.java @@ -48,7 +48,7 @@ class SlightMalfunctionEffect extends OneShotEffect { SlightMalfunctionEffect() { super(Outcome.Benefit); - staticText = "roll a six-side die. When you do, {this} deals 1 damage " + + staticText = "roll a six-sided die. When you do, {this} deals 1 damage " + "to each of up to X target creatures, where X is the result"; } diff --git a/Mage.Sets/src/mage/cards/s/SpectralFlight.java b/Mage.Sets/src/mage/cards/s/SpectralFlight.java index 581021a8402..6b4385d32ce 100644 --- a/Mage.Sets/src/mage/cards/s/SpectralFlight.java +++ b/Mage.Sets/src/mage/cards/s/SpectralFlight.java @@ -1,4 +1,3 @@ - package mage.cards.s; import java.util.UUID; @@ -25,7 +24,6 @@ public final class SpectralFlight extends CardImpl { super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{1}{U}"); this.subtype.add(SubType.AURA); - // Enchant creature TargetPermanent auraTarget = new TargetCreaturePermanent(); this.getSpellAbility().addTarget(auraTarget); @@ -34,8 +32,10 @@ public final class SpectralFlight extends CardImpl { this.addAbility(ability); // Enchanted creature gets +2/+2 and has flying. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(2, 2, Duration.WhileOnBattlefield))); - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(FlyingAbility.getInstance(), AttachmentType.AURA))); + Ability boostAbility = new SimpleStaticAbility(new BoostEnchantedEffect(2, 2)); + boostAbility.addEffect(new GainAbilityAttachedEffect(FlyingAbility.getInstance(), AttachmentType.AURA) + .setText("and has flying")); + this.addAbility(boostAbility); } private SpectralFlight(final SpectralFlight card) { diff --git a/Mage.Sets/src/mage/cards/s/SuccumbToTemptation.java b/Mage.Sets/src/mage/cards/s/SuccumbToTemptation.java index a069526f751..28f86e07710 100644 --- a/Mage.Sets/src/mage/cards/s/SuccumbToTemptation.java +++ b/Mage.Sets/src/mage/cards/s/SuccumbToTemptation.java @@ -1,4 +1,3 @@ - package mage.cards.s; import java.util.UUID; @@ -19,7 +18,7 @@ public final class SuccumbToTemptation extends CardImpl { super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{1}{B}{B}"); // You draw two cards and you lose 2 life. - this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(2)); + this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(2, "you")); Effect effect = new LoseLifeSourceControllerEffect(2); effect.setText("and you lose 2 life"); this.getSpellAbility().addEffect(effect); diff --git a/Mage.Sets/src/mage/cards/t/Tangle.java b/Mage.Sets/src/mage/cards/t/Tangle.java index ae314ca183a..ded22eb382a 100644 --- a/Mage.Sets/src/mage/cards/t/Tangle.java +++ b/Mage.Sets/src/mage/cards/t/Tangle.java @@ -1,4 +1,3 @@ - package mage.cards.t; import java.util.ArrayList; @@ -33,7 +32,7 @@ public final class Tangle extends CardImpl { // Prevent all combat damage that would be dealt this turn. this.getSpellAbility().addEffect(new PreventAllDamageByAllPermanentsEffect(Duration.EndOfTurn, true)); // Each attacking creature doesn't untap during its controller's next untap step. - this.getSpellAbility().addEffect(new TangleEffect()); + this.getSpellAbility().addEffect(new TangleEffect().concatBy("
")); } private Tangle(final Tangle card) { diff --git a/Mage.Sets/src/mage/cards/t/TheFirstEruption.java b/Mage.Sets/src/mage/cards/t/TheFirstEruption.java index 76dadc336db..40ec0dbf407 100644 --- a/Mage.Sets/src/mage/cards/t/TheFirstEruption.java +++ b/Mage.Sets/src/mage/cards/t/TheFirstEruption.java @@ -32,7 +32,7 @@ import mage.target.common.TargetControlledPermanent; */ public final class TheFirstEruption extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("each creature without flying"); + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature without flying"); static { filter.add(Predicates.not(new AbilityPredicate(FlyingAbility.class))); diff --git a/Mage.Sets/src/mage/cards/t/TransgressTheMind.java b/Mage.Sets/src/mage/cards/t/TransgressTheMind.java index 7a4088d9385..4ccc73c803f 100644 --- a/Mage.Sets/src/mage/cards/t/TransgressTheMind.java +++ b/Mage.Sets/src/mage/cards/t/TransgressTheMind.java @@ -1,4 +1,3 @@ - package mage.cards.t; import java.util.UUID; @@ -33,7 +32,7 @@ public final class TransgressTheMind extends CardImpl { // Target player reveals their hand. You may choose a card from it with converted mana cost 3 or greater and exile that card. Effect effect = new ExileCardYouChooseTargetOpponentEffect(filter); - effect.setText("Target player reveals their hand. You may choose a card from it with mana value 3 or greater and exile that card"); + effect.setText("Target player reveals their hand. You choose a card from it with mana value 3 or greater and exile that card"); this.getSpellAbility().addEffect(effect); this.getSpellAbility().addTarget(new TargetPlayer()); } diff --git a/Mage.Sets/src/mage/cards/v/VesuvanDoppelganger.java b/Mage.Sets/src/mage/cards/v/VesuvanDoppelganger.java index af703417c73..359ac3d71d2 100644 --- a/Mage.Sets/src/mage/cards/v/VesuvanDoppelganger.java +++ b/Mage.Sets/src/mage/cards/v/VesuvanDoppelganger.java @@ -56,7 +56,7 @@ public final class VesuvanDoppelganger extends CardImpl { class VesuvanDoppelgangerCopyEffect extends OneShotEffect { - private static final String rule2 = "At the beginning of your upkeep, you may have this creature become a copy of target creature except it doesn't copy that creature's color and it has this ability."; + private static final String rule2 = "At the beginning of your upkeep, you may have this creature become a copy of target creature, except it doesn't copy that creature's color and it has this ability."; public VesuvanDoppelgangerCopyEffect() { super(Outcome.Copy); diff --git a/Mage.Sets/src/mage/cards/v/VeteranSoldier.java b/Mage.Sets/src/mage/cards/v/VeteranSoldier.java index 175d5721a8b..ca484e147c4 100644 --- a/Mage.Sets/src/mage/cards/v/VeteranSoldier.java +++ b/Mage.Sets/src/mage/cards/v/VeteranSoldier.java @@ -46,7 +46,7 @@ class VeteranSoldierEffect extends OneShotEffect { VeteranSoldierEffect() { super(Outcome.Benefit); - staticText = "for each opponent, create a 1/1 white Soldier creature token that's tapped and attacking that player"; + staticText = "for each opponent, create a 1/1 white Soldier creature token that's tapped and attacking that opponent"; } private VeteranSoldierEffect(final VeteranSoldierEffect effect) { diff --git a/Mage.Sets/src/mage/cards/w/WeaverOfLightning.java b/Mage.Sets/src/mage/cards/w/WeaverOfLightning.java index 20c29c29850..6e9c4cc3ccd 100644 --- a/Mage.Sets/src/mage/cards/w/WeaverOfLightning.java +++ b/Mage.Sets/src/mage/cards/w/WeaverOfLightning.java @@ -1,4 +1,3 @@ - package mage.cards.w; import java.util.UUID; @@ -12,7 +11,6 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.filter.StaticFilters; -import mage.filter.common.FilterInstantOrSorcerySpell; import mage.target.common.TargetCreaturePermanent; /** @@ -31,7 +29,7 @@ public final class WeaverOfLightning extends CardImpl { // Reach this.addAbility(ReachAbility.getInstance()); // Whenever you cast an instant or sorcery spell, Weaver of Lightning deals 1 damage to target creature an opponent controls. - Ability ability = new SpellCastControllerTriggeredAbility(new DamageTargetEffect(1), new FilterInstantOrSorcerySpell(), false); + Ability ability = new SpellCastControllerTriggeredAbility(new DamageTargetEffect(1), StaticFilters.FILTER_SPELL_AN_INSTANT_OR_SORCERY, false); ability.addTarget(new TargetCreaturePermanent(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/w/WormfangDrake.java b/Mage.Sets/src/mage/cards/w/WormfangDrake.java index 64bde245c2d..c8130739fd9 100644 --- a/Mage.Sets/src/mage/cards/w/WormfangDrake.java +++ b/Mage.Sets/src/mage/cards/w/WormfangDrake.java @@ -43,7 +43,7 @@ public final class WormfangDrake extends CardImpl { this.addAbility(new EntersBattlefieldTriggeredAbility( new SacrificeSourceUnlessPaysEffect(new ExileTargetCost(new TargetControlledPermanent(filter))), false - ).withRuleTextReplacement(false)); + )); // When Wormfang Drake leaves the battlefield, return the exiled card to the battlefield under its owner's control. this.addAbility(new LeavesBattlefieldTriggeredAbility(new ReturnFromExileForSourceEffect(Zone.BATTLEFIELD), false)); diff --git a/Mage/src/main/java/mage/abilities/TriggeredAbilityImpl.java b/Mage/src/main/java/mage/abilities/TriggeredAbilityImpl.java index 47be846a6f9..178b8f94ded 100644 --- a/Mage/src/main/java/mage/abilities/TriggeredAbilityImpl.java +++ b/Mage/src/main/java/mage/abilities/TriggeredAbilityImpl.java @@ -226,7 +226,7 @@ public abstract class TriggeredAbilityImpl extends AbilityImpl implements Trigge } } if (replaceRuleText && triggerPhrase != null) { - superRule = superRule.replaceFirst("^((?:you may )?sacrifice |put an? [^ ]+ counter on |return |transform )?\\{this\\}", "$1it"); + superRule = superRule.replaceFirst("^((?:you may )?sacrifice |put an? [^ ]+ counter on |return |transform |untap )?\\{this\\}", "$1it"); } sb.append(superRule); if (triggersOnceEachTurn) { diff --git a/Mage/src/main/java/mage/abilities/common/DealtDamageAndDiedTriggeredAbility.java b/Mage/src/main/java/mage/abilities/common/DealtDamageAndDiedTriggeredAbility.java index 48b856f394d..e2903456db2 100644 --- a/Mage/src/main/java/mage/abilities/common/DealtDamageAndDiedTriggeredAbility.java +++ b/Mage/src/main/java/mage/abilities/common/DealtDamageAndDiedTriggeredAbility.java @@ -11,6 +11,7 @@ import mage.game.Game; import mage.game.events.GameEvent; import mage.game.events.ZoneChangeEvent; import mage.target.targetpointer.FixedTarget; +import mage.util.CardUtil; public class DealtDamageAndDiedTriggeredAbility extends TriggeredAbilityImpl { @@ -33,7 +34,7 @@ public class DealtDamageAndDiedTriggeredAbility extends TriggeredAbilityImpl { super(Zone.ALL, effect, optional); this.filter = filter; this.setTargetPointer = setTargetPointer; - setTriggerPhrase("Whenever a " + filter.getMessage() + " dealt damage by {this} this turn dies, "); + setTriggerPhrase(getWhen() + CardUtil.addArticle(filter.getMessage()) + " dealt damage by {this} this turn dies, "); } protected DealtDamageAndDiedTriggeredAbility(final DealtDamageAndDiedTriggeredAbility ability) { diff --git a/Mage/src/main/java/mage/abilities/common/SpellCastControllerTriggeredAbility.java b/Mage/src/main/java/mage/abilities/common/SpellCastControllerTriggeredAbility.java index 2e23f21c72c..db019d5d7b4 100644 --- a/Mage/src/main/java/mage/abilities/common/SpellCastControllerTriggeredAbility.java +++ b/Mage/src/main/java/mage/abilities/common/SpellCastControllerTriggeredAbility.java @@ -103,7 +103,7 @@ public class SpellCastControllerTriggeredAbility extends TriggeredAbilityImpl { } private void makeTriggerPhrase() { - String text = "Whenever you cast " + filter.getMessage(); + String text = getWhen() + "you cast " + filter.getMessage(); switch (fromZone) { case ALL: diff --git a/Mage/src/main/java/mage/abilities/common/SpellCastOpponentTriggeredAbility.java b/Mage/src/main/java/mage/abilities/common/SpellCastOpponentTriggeredAbility.java index 9f9a2762cdb..3f041cfdfe5 100644 --- a/Mage/src/main/java/mage/abilities/common/SpellCastOpponentTriggeredAbility.java +++ b/Mage/src/main/java/mage/abilities/common/SpellCastOpponentTriggeredAbility.java @@ -61,7 +61,7 @@ public class SpellCastOpponentTriggeredAbility extends TriggeredAbilityImpl { this.filter = filter; this.setTargetPointer = setTargetPointer; this.onlyFromNonHand = onlyFromNonHand; - setTriggerPhrase("Whenever an opponent casts " + setTriggerPhrase(getWhen() + "an opponent casts " + filter.getMessage() + (onlyFromNonHand ? " from anywhere other than their hand" : "") + ", ");