diff --git a/Mage.Sets/src/mage/cards/a/AetherwingGoldenScaleFlagship.java b/Mage.Sets/src/mage/cards/a/AetherwingGoldenScaleFlagship.java index c66eef0a47..72054d8d6c 100644 --- a/Mage.Sets/src/mage/cards/a/AetherwingGoldenScaleFlagship.java +++ b/Mage.Sets/src/mage/cards/a/AetherwingGoldenScaleFlagship.java @@ -32,7 +32,11 @@ public final class AetherwingGoldenScaleFlagship extends CardImpl { this.addAbility(FlyingAbility.getInstance()); // Aetherwing, Golden-Scale Flagship's power is equal to the number of artifacts you control. - this.addAbility(new SimpleStaticAbility(Zone.ALL, new SetBasePowerSourceEffect(ArtifactYouControlCount.instance, Duration.Custom))); + this.addAbility(new SimpleStaticAbility( + Zone.ALL, + new SetBasePowerSourceEffect(ArtifactYouControlCount.instance, Duration.Custom) + .setText("{this}'s power is equal to the number of artifacts you control") + )); // Crew 1 this.addAbility(new CrewAbility(1)); diff --git a/Mage.Sets/src/mage/cards/a/AwakenTheMaelstrom.java b/Mage.Sets/src/mage/cards/a/AwakenTheMaelstrom.java index cb50cb2594..e9bcdd3a7d 100644 --- a/Mage.Sets/src/mage/cards/a/AwakenTheMaelstrom.java +++ b/Mage.Sets/src/mage/cards/a/AwakenTheMaelstrom.java @@ -42,7 +42,7 @@ public final class AwakenTheMaelstrom extends CardImpl { this.addAbility(new SimpleStaticAbility(Zone.ALL, new InfoEffect("{this} is all colors"))); // Target player draws two cards. - this.getSpellAbility().addEffect(new DrawCardTargetEffect(1)); + this.getSpellAbility().addEffect(new DrawCardTargetEffect(2)); this.getSpellAbility().addTarget(new TargetPlayer().withChooseHint("to draw two cards")); // You may put an artifact card from your hand onto the battlefield. diff --git a/Mage.Sets/src/mage/cards/e/EssenceOfOrthodoxy.java b/Mage.Sets/src/mage/cards/e/EssenceOfOrthodoxy.java index ed5e93b39e..f07a0660d5 100644 --- a/Mage.Sets/src/mage/cards/e/EssenceOfOrthodoxy.java +++ b/Mage.Sets/src/mage/cards/e/EssenceOfOrthodoxy.java @@ -30,7 +30,9 @@ public final class EssenceOfOrthodoxy extends CardImpl { this.addAbility(FlyingAbility.getInstance()); // Whenever Essence of Orthodoxy or another Phyrexian enters the battlefield under your control, incubate 2. - this.addAbility(new EntersBattlefieldThisOrAnotherTriggeredAbility(new IncubateEffect(2), filter)); + this.addAbility(new EntersBattlefieldThisOrAnotherTriggeredAbility( + new IncubateEffect(2), filter, false, true + )); } private EssenceOfOrthodoxy(final EssenceOfOrthodoxy card) { diff --git a/Mage.Sets/src/mage/cards/g/GlissaHeraldOfPredation.java b/Mage.Sets/src/mage/cards/g/GlissaHeraldOfPredation.java index 010f535602..3dc8b7a8a0 100644 --- a/Mage.Sets/src/mage/cards/g/GlissaHeraldOfPredation.java +++ b/Mage.Sets/src/mage/cards/g/GlissaHeraldOfPredation.java @@ -40,12 +40,11 @@ public final class GlissaHeraldOfPredation extends CardImpl { // At the beginning of combat on your turn, choose one -- // * Incubate 2 twice. Ability ability = new BeginningOfCombatTriggeredAbility( - new IncubateEffect(2).setText("incubate"), TargetController.YOU, false + new GlissaHeraldOfPredationIncubateEffect(), TargetController.YOU, false ); - ability.addEffect(new IncubateEffect(2).setText("2 twice")); // * Transform all Incubator tokens you control. - ability.addMode(new Mode(new GlissaHeraldOfPredationEffect())); + ability.addMode(new Mode(new GlissaHeraldOfPredationTransformEffect())); // * Phyrexians you control gain first strike and deathtouch until end of turn. ability.addMode(new Mode(new GainAbilityControlledEffect( @@ -68,7 +67,31 @@ public final class GlissaHeraldOfPredation extends CardImpl { } } -class GlissaHeraldOfPredationEffect extends OneShotEffect { +class GlissaHeraldOfPredationIncubateEffect extends OneShotEffect { + + GlissaHeraldOfPredationIncubateEffect() { + super(Outcome.Benefit); + staticText = "incubate 2 twice"; + } + + private GlissaHeraldOfPredationIncubateEffect(final GlissaHeraldOfPredationIncubateEffect effect) { + super(effect); + } + + @Override + public GlissaHeraldOfPredationIncubateEffect copy() { + return new GlissaHeraldOfPredationIncubateEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + IncubateEffect.doIncubate(2, game, source); + IncubateEffect.doIncubate(2, game, source); + return true; + } +} + +class GlissaHeraldOfPredationTransformEffect extends OneShotEffect { private static final FilterPermanent filter = new FilterControlledPermanent(SubType.INCUBATOR); @@ -76,18 +99,18 @@ class GlissaHeraldOfPredationEffect extends OneShotEffect { filter.add(TokenPredicate.TRUE); } - GlissaHeraldOfPredationEffect() { + GlissaHeraldOfPredationTransformEffect() { super(Outcome.Benefit); staticText = "transform all Incubator tokens you control"; } - private GlissaHeraldOfPredationEffect(final GlissaHeraldOfPredationEffect effect) { + private GlissaHeraldOfPredationTransformEffect(final GlissaHeraldOfPredationTransformEffect effect) { super(effect); } @Override - public GlissaHeraldOfPredationEffect copy() { - return new GlissaHeraldOfPredationEffect(this); + public GlissaHeraldOfPredationTransformEffect copy() { + return new GlissaHeraldOfPredationTransformEffect(this); } @Override diff --git a/Mage.Sets/src/mage/cards/i/InvasionOfAzgol.java b/Mage.Sets/src/mage/cards/i/InvasionOfAzgol.java index 06a2475071..4e01acdf48 100644 --- a/Mage.Sets/src/mage/cards/i/InvasionOfAzgol.java +++ b/Mage.Sets/src/mage/cards/i/InvasionOfAzgol.java @@ -11,6 +11,7 @@ import mage.cards.a.AshenReaper; import mage.constants.CardType; import mage.constants.SubType; import mage.filter.StaticFilters; +import mage.target.TargetPlayer; import java.util.UUID; @@ -31,9 +32,10 @@ public final class InvasionOfAzgol extends CardImpl { // When Invasion of Azgol enters the battlefield, target player sacrifices a creature or planeswalker and loses 1 life. Ability ability = new EntersBattlefieldTriggeredAbility(new SacrificeEffect( - StaticFilters.FILTER_PERMANENT_CREATURE_OR_PLANESWALKER_A, 1, null + StaticFilters.FILTER_PERMANENT_CREATURE_OR_PLANESWALKER_A, 1, "target player" )); ability.addEffect(new LoseLifeTargetEffect(1).setText("and loses 1 life")); + ability.addTarget(new TargetPlayer()); this.addAbility(ability, AshenReaper.makeWatcher()); } diff --git a/Mage.Sets/src/mage/cards/i/InvasionOfDominaria.java b/Mage.Sets/src/mage/cards/i/InvasionOfDominaria.java index 37ac542843..be85c55fce 100644 --- a/Mage.Sets/src/mage/cards/i/InvasionOfDominaria.java +++ b/Mage.Sets/src/mage/cards/i/InvasionOfDominaria.java @@ -29,7 +29,7 @@ public final class InvasionOfDominaria extends CardImpl { // When Invasion of Dominaria enters the battlefield, you gain 4 life and draw a card. Ability ability = new EntersBattlefieldTriggeredAbility(new GainLifeEffect(4)); - ability.addEffect(new DrawCardSourceControllerEffect(1)); + ability.addEffect(new DrawCardSourceControllerEffect(1).concatBy("and")); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/i/InvasionOfErgamon.java b/Mage.Sets/src/mage/cards/i/InvasionOfErgamon.java index 48f56f8f12..4a7e2e63e7 100644 --- a/Mage.Sets/src/mage/cards/i/InvasionOfErgamon.java +++ b/Mage.Sets/src/mage/cards/i/InvasionOfErgamon.java @@ -32,7 +32,7 @@ public final class InvasionOfErgamon extends CardImpl { // When Invasion of Ergamon enters the battlefield, create a Treasure token. Then you may discard a card. If you do, draw a card. Ability ability = new EntersBattlefieldTriggeredAbility(new CreateTokenEffect(new TreasureToken())); - ability.addEffect(new DoIfCostPaid(new DrawCardSourceControllerEffect(1), new DiscardCardCost())); + ability.addEffect(new DoIfCostPaid(new DrawCardSourceControllerEffect(1), new DiscardCardCost()).concatBy("Then")); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/i/InvasionOfNewCapenna.java b/Mage.Sets/src/mage/cards/i/InvasionOfNewCapenna.java index 44a42dd31a..2dd106b2ad 100644 --- a/Mage.Sets/src/mage/cards/i/InvasionOfNewCapenna.java +++ b/Mage.Sets/src/mage/cards/i/InvasionOfNewCapenna.java @@ -6,6 +6,7 @@ import mage.abilities.common.delayed.ReflexiveTriggeredAbility; import mage.abilities.costs.common.SacrificeTargetCost; import mage.abilities.effects.common.DestroyTargetEffect; import mage.abilities.effects.common.DoWhenCostPaid; +import mage.abilities.effects.common.ExileTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -31,7 +32,7 @@ public final class InvasionOfNewCapenna extends CardImpl { this.addAbility(new SiegeAbility()); // When Invasion of New Capenna enters the battlefield, you may sacrifice an artifact or creature. When you do, exile target artifact or creature an opponent controls. - ReflexiveTriggeredAbility ability = new ReflexiveTriggeredAbility(new DestroyTargetEffect(), false); + ReflexiveTriggeredAbility ability = new ReflexiveTriggeredAbility(new ExileTargetEffect(), false); ability.addTarget(new TargetPermanent(StaticFilters.FILTER_OPPONENTS_PERMANENT_ARTIFACT_OR_CREATURE)); this.addAbility(new EntersBattlefieldTriggeredAbility(new DoWhenCostPaid( ability, diff --git a/Mage.Sets/src/mage/cards/i/InvasionOfTolvada.java b/Mage.Sets/src/mage/cards/i/InvasionOfTolvada.java index b119732529..ed40650ae7 100644 --- a/Mage.Sets/src/mage/cards/i/InvasionOfTolvada.java +++ b/Mage.Sets/src/mage/cards/i/InvasionOfTolvada.java @@ -3,7 +3,7 @@ package mage.cards.i; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.SiegeAbility; -import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToBattlefieldTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -37,7 +37,7 @@ public final class InvasionOfTolvada extends CardImpl { this.addAbility(new SiegeAbility()); // When Invasion of Tolvada enters the battlefield, return target nonbattle permanent card from your graveyard to the battlefield. - Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnFromGraveyardToHandTargetEffect()); + Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnFromGraveyardToBattlefieldTargetEffect()); ability.addTarget(new TargetCardInYourGraveyard(filter)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/i/InvasionOfUlgrotha.java b/Mage.Sets/src/mage/cards/i/InvasionOfUlgrotha.java index 41aa12198e..f9c523ca42 100644 --- a/Mage.Sets/src/mage/cards/i/InvasionOfUlgrotha.java +++ b/Mage.Sets/src/mage/cards/i/InvasionOfUlgrotha.java @@ -38,7 +38,7 @@ public final class InvasionOfUlgrotha extends CardImpl { this.addAbility(new SiegeAbility()); // When Invasion of Ulgrotha enters the battlefield, it deals 3 damage to any other target and you gain 3 life. - Ability ability = new EntersBattlefieldTriggeredAbility(new DamageTargetEffect(3)); + Ability ability = new EntersBattlefieldTriggeredAbility(new DamageTargetEffect(3, "it")); ability.addEffect(new GainLifeEffect(3).concatBy("and")); ability.addTarget(new TargetPermanentOrPlayer(filter)); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/k/KoglaAndYidaro.java b/Mage.Sets/src/mage/cards/k/KoglaAndYidaro.java index e9c6e8bbe2..80c0c8143b 100644 --- a/Mage.Sets/src/mage/cards/k/KoglaAndYidaro.java +++ b/Mage.Sets/src/mage/cards/k/KoglaAndYidaro.java @@ -48,7 +48,6 @@ public final class KoglaAndYidaro extends CardImpl { ability.addEffect(new GainAbilitySourceEffect( HasteAbility.getInstance(), Duration.EndOfTurn ).setText("and haste until end of turn")); - this.addAbility(ability); // * It fights target creature you don't control. ability.addMode(new Mode(new FightTargetSourceEffect().setText("it fights target creature you don't control")) diff --git a/Mage.Sets/src/mage/cards/l/LazotepConvert.java b/Mage.Sets/src/mage/cards/l/LazotepConvert.java index 73e43f2581..050a5bc52b 100644 --- a/Mage.Sets/src/mage/cards/l/LazotepConvert.java +++ b/Mage.Sets/src/mage/cards/l/LazotepConvert.java @@ -40,7 +40,7 @@ public final class LazotepConvert extends CardImpl { this.nightCard = true; // You may have Lazotep Convert enter the battlefield as a copy of any creature card in a graveyard, except it's a 4/4 black Zombie in addition to its other types. - this.addAbility(new EntersBattlefieldAbility(new LazotepConvertCopyEffect())); + this.addAbility(new EntersBattlefieldAbility(new LazotepConvertCopyEffect(), true)); } private LazotepConvert(final LazotepConvert card) { diff --git a/Mage.Sets/src/mage/cards/l/LeylineSurge.java b/Mage.Sets/src/mage/cards/l/LeylineSurge.java index 610322ac74..4104f81204 100644 --- a/Mage.Sets/src/mage/cards/l/LeylineSurge.java +++ b/Mage.Sets/src/mage/cards/l/LeylineSurge.java @@ -23,7 +23,7 @@ public final class LeylineSurge extends CardImpl { // At the beginning of your upkeep, you may put a permanent card from your hand onto the battlefield. this.addAbility(new BeginningOfUpkeepTriggeredAbility( - new PutCardFromHandOntoBattlefieldEffect(StaticFilters.FILTER_CARD_PERMANENT), + new PutCardFromHandOntoBattlefieldEffect(StaticFilters.FILTER_CARD_A_PERMANENT), TargetController.YOU, false )); } diff --git a/Mage.Sets/src/mage/cards/m/MarchesaResoluteMonarch.java b/Mage.Sets/src/mage/cards/m/MarchesaResoluteMonarch.java index 303413a69b..5248a0427d 100644 --- a/Mage.Sets/src/mage/cards/m/MarchesaResoluteMonarch.java +++ b/Mage.Sets/src/mage/cards/m/MarchesaResoluteMonarch.java @@ -43,7 +43,7 @@ public final class MarchesaResoluteMonarch extends CardImpl { this.nightCard = true; // Menace - this.addAbility(new MenaceAbility()); + this.addAbility(new MenaceAbility(false)); // Deathtouch this.addAbility(DeathtouchAbility.getInstance()); diff --git a/Mage.Sets/src/mage/cards/r/RefractionElemental.java b/Mage.Sets/src/mage/cards/r/RefractionElemental.java index 1c89dd18e1..d68099354e 100644 --- a/Mage.Sets/src/mage/cards/r/RefractionElemental.java +++ b/Mage.Sets/src/mage/cards/r/RefractionElemental.java @@ -30,9 +30,9 @@ public final class RefractionElemental extends CardImpl { // Ward--Pay 2 life. this.addAbility(new WardAbility(new PayLifeCost(2), false)); - // Whenever you cast a spell, Refraction Elemental deals 3 damage to each opponent. + // Whenever you cast a spell, Refraction Elemental deals 2 damage to each opponent. this.addAbility(new SpellCastControllerTriggeredAbility( - new DamagePlayersEffect(3, TargetController.OPPONENT), false + new DamagePlayersEffect(2, TargetController.OPPONENT), false )); } diff --git a/Mage.Sets/src/mage/cards/s/SunderTheGateway.java b/Mage.Sets/src/mage/cards/s/SunderTheGateway.java index 485bb734a2..280e3a04c3 100644 --- a/Mage.Sets/src/mage/cards/s/SunderTheGateway.java +++ b/Mage.Sets/src/mage/cards/s/SunderTheGateway.java @@ -45,7 +45,7 @@ public final class SunderTheGateway extends CardImpl { this.getSpellAbility().addTarget(new TargetPermanent(filter)); // * Incubate 2, then transform an Incubator token you control. - this.getSpellAbility().addMode(new Mode(new IncubateEffect(2)).addEffect(new SunderTheGatewayEffect())); + this.getSpellAbility().addMode(new Mode(new IncubateEffect(2).setText("incubate 2")).addEffect(new SunderTheGatewayEffect())); } private SunderTheGateway(final SunderTheGateway card) { diff --git a/Mage/src/main/java/mage/abilities/effects/keyword/IncubateEffect.java b/Mage/src/main/java/mage/abilities/effects/keyword/IncubateEffect.java index d646d5dc23..7bd6f3c4c9 100644 --- a/Mage/src/main/java/mage/abilities/effects/keyword/IncubateEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/keyword/IncubateEffect.java @@ -22,7 +22,7 @@ public class IncubateEffect extends OneShotEffect { public IncubateEffect(int amount) { super(Outcome.Detriment); this.amount = amount; - staticText = "incubate " + amount + " (Create an Incubator artifact token with " + + staticText = "incubate " + amount + ". (Create an Incubator artifact token with " + CardUtil.numberToText(amount, "a") + " +1/+1 counter" + (amount > 1 ? "s" : "") + " on it and \"{2}: Transform this artifact.\" It transforms into a 0/0 Phyrexian artifact creature.)"; }