diff --git a/Mage.Sets/src/mage/cards/a/AllIsDust.java b/Mage.Sets/src/mage/cards/a/AllIsDust.java index fab13e4be5..606f71cded 100644 --- a/Mage.Sets/src/mage/cards/a/AllIsDust.java +++ b/Mage.Sets/src/mage/cards/a/AllIsDust.java @@ -38,7 +38,7 @@ class AllIsDustEffect extends OneShotEffect { AllIsDustEffect() { super(Outcome.DestroyPermanent); - staticText = "Each player sacrifices all colored permanents they control"; + staticText = "Each player sacrifices all permanents they control that are one or more colors"; } AllIsDustEffect(final AllIsDustEffect effect) { diff --git a/Mage.Sets/src/mage/cards/a/ArahboRoarOfTheWorld.java b/Mage.Sets/src/mage/cards/a/ArahboRoarOfTheWorld.java index 75b677d4e3..a7feb5b51c 100644 --- a/Mage.Sets/src/mage/cards/a/ArahboRoarOfTheWorld.java +++ b/Mage.Sets/src/mage/cards/a/ArahboRoarOfTheWorld.java @@ -57,7 +57,7 @@ public final class ArahboRoarOfTheWorld extends CardImpl { Ability ability = new ConditionalInterveningIfTriggeredAbility( new BeginningOfCombatTriggeredAbility(Zone.ALL, new BoostTargetEffect(3, 3, Duration.EndOfTurn), TargetController.YOU, false, false), SourceOnBattlefieldOrCommandZoneCondition.instance, - "Eminence — At the beginning of combat on your turn, if Arahbo, Roar of the World is in the command zone or on the battlefield, another target Cat you control gets +3/+3 until end of turn."); + "At the beginning of combat on your turn, if {this} is in the command zone or on the battlefield, another target Cat you control gets +3/+3 until end of turn."); ability.addTarget(new TargetCreaturePermanent(filter)); ability.setAbilityWord(AbilityWord.EMINENCE); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/b/Bitterblossom.java b/Mage.Sets/src/mage/cards/b/Bitterblossom.java index 6dccf29d3d..fc09f2e01a 100644 --- a/Mage.Sets/src/mage/cards/b/Bitterblossom.java +++ b/Mage.Sets/src/mage/cards/b/Bitterblossom.java @@ -25,7 +25,7 @@ public final class Bitterblossom extends CardImpl { // At the beginning of your upkeep, you lose 1 life and create a 1/1 black Faerie Rogue creature token with flying. Ability ability = new BeginningOfUpkeepTriggeredAbility(new LoseLifeSourceControllerEffect(1), TargetController.YOU, false); - ability.addEffect(new CreateTokenEffect(new FaerieRogueToken(), 1)); + ability.addEffect(new CreateTokenEffect(new FaerieRogueToken(), 1).concatBy("and")); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/b/Bloodghast.java b/Mage.Sets/src/mage/cards/b/Bloodghast.java index 41683fe1a1..d410525537 100644 --- a/Mage.Sets/src/mage/cards/b/Bloodghast.java +++ b/Mage.Sets/src/mage/cards/b/Bloodghast.java @@ -1,7 +1,6 @@ package mage.cards.b; -import java.util.UUID; import mage.MageInt; import mage.abilities.common.CantBlockAbility; import mage.abilities.common.LandfallAbility; @@ -19,14 +18,15 @@ import mage.constants.Duration; import mage.constants.SubType; import mage.constants.Zone; +import java.util.UUID; + /** - * * @author maurer.it_at_gmail.com */ public final class Bloodghast extends CardImpl { public Bloodghast(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{B}{B}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{B}{B}"); this.subtype.add(SubType.VAMPIRE, SubType.SPIRIT); this.power = new MageInt(2); @@ -38,9 +38,9 @@ public final class Bloodghast extends CardImpl { ContinuousEffect effect = new GainAbilitySourceEffect(HasteAbility.getInstance(), Duration.WhileOnBattlefield); this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect(effect, new XorLessLifeCondition(XorLessLifeCondition.CheckType.AN_OPPONENT, 10), - "Bloodghast has haste as long as an opponent has 10 or less life"))); + "{this} has haste as long as an opponent has 10 or less life"))); // Landfall — Whenever a land enters the battlefield under your control, you may return Bloodghast from your graveyard to the battlefield. - this.addAbility(new LandfallAbility(Zone.GRAVEYARD, new ReturnSourceFromGraveyardToBattlefieldEffect(), true)); + this.addAbility(new LandfallAbility(Zone.GRAVEYARD, new ReturnSourceFromGraveyardToBattlefieldEffect(false, false), true)); } private Bloodghast(final Bloodghast card) { diff --git a/Mage.Sets/src/mage/cards/c/CrashThrough.java b/Mage.Sets/src/mage/cards/c/CrashThrough.java index 3492f65f39..cf38223331 100644 --- a/Mage.Sets/src/mage/cards/c/CrashThrough.java +++ b/Mage.Sets/src/mage/cards/c/CrashThrough.java @@ -25,7 +25,7 @@ public final class CrashThrough extends CardImpl { getSpellAbility().addEffect(new GainAbilityAllEffect(TrampleAbility.getInstance(), Duration.EndOfTurn, new FilterControlledCreaturePermanent(), "Creatures you control gain trample until end of turn")); // Draw a card. - getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1)); + getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1).concatBy("
")); } private CrashThrough(final CrashThrough card) { diff --git a/Mage.Sets/src/mage/cards/c/CraterhoofBehemoth.java b/Mage.Sets/src/mage/cards/c/CraterhoofBehemoth.java index 3de0705a66..748692f376 100644 --- a/Mage.Sets/src/mage/cards/c/CraterhoofBehemoth.java +++ b/Mage.Sets/src/mage/cards/c/CraterhoofBehemoth.java @@ -40,8 +40,13 @@ public final class CraterhoofBehemoth extends CardImpl { this.addAbility(HasteAbility.getInstance()); // When Craterhoof Behemoth enters the battlefield, creatures you control gain trample and get +X/+X until end of turn, where X is the number of creatures you control. - Ability ability = new EntersBattlefieldTriggeredAbility(new GainAbilityControlledEffect(TrampleAbility.getInstance(), Duration.EndOfTurn, filter)); - ability.addEffect(new BoostControlledEffect(CreaturesYouControlCount.instance, CreaturesYouControlCount.instance, Duration.EndOfTurn, filter, false, true)); + Ability ability = new EntersBattlefieldTriggeredAbility(new GainAbilityControlledEffect( + TrampleAbility.getInstance(), Duration.EndOfTurn, filter + ).setText("creatures you control gain trample")); + ability.addEffect(new BoostControlledEffect( + CreaturesYouControlCount.instance, CreaturesYouControlCount.instance, + Duration.EndOfTurn, filter, false, true + ).setText("and get +X/+X until end of turn, where X is the number of creatures you control")); ability.addHint(CreaturesYouControlHint.instance); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/e/EldraziMonument.java b/Mage.Sets/src/mage/cards/e/EldraziMonument.java index 84dc4608e6..72c29f69cf 100644 --- a/Mage.Sets/src/mage/cards/e/EldraziMonument.java +++ b/Mage.Sets/src/mage/cards/e/EldraziMonument.java @@ -1,14 +1,11 @@ - package mage.cards.e; -import java.util.UUID; import mage.abilities.Ability; -import mage.abilities.common.OnEventTriggeredAbility; +import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.effects.Effect; -import mage.abilities.effects.OneShotEffect; +import mage.abilities.costs.common.SacrificeTargetCost; +import mage.abilities.effects.common.SacrificeSourceUnlessPaysEffect; import mage.abilities.effects.common.continuous.BoostControlledEffect; -import mage.abilities.effects.common.continuous.GainAbilityAllEffect; import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; import mage.abilities.keyword.FlyingAbility; import mage.abilities.keyword.IndestructibleAbility; @@ -16,20 +13,13 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; -import mage.constants.Outcome; -import mage.constants.Zone; +import mage.constants.TargetController; import mage.filter.StaticFilters; -import mage.filter.common.FilterControlledCreaturePermanent; -import mage.filter.common.FilterCreaturePermanent; -import mage.game.Game; -import mage.game.events.GameEvent.EventType; -import mage.game.permanent.Permanent; -import mage.players.Player; -import mage.target.common.TargetControlledCreaturePermanent; import mage.target.common.TargetControlledPermanent; +import java.util.UUID; + /** - * * @author BetaSteward_at_googlemail.com */ public final class EldraziMonument extends CardImpl { @@ -38,13 +28,26 @@ public final class EldraziMonument extends CardImpl { super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{5}"); // Creatures you control get +1/+1, have flying, and are indestructible. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostControlledEffect(1, 1, Duration.WhileOnBattlefield, StaticFilters.FILTER_PERMANENT_CREATURE, false))); - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityControlledEffect(FlyingAbility.getInstance(), Duration.WhileOnBattlefield, new FilterCreaturePermanent()))); - Effect effect = new GainAbilityAllEffect(IndestructibleAbility.getInstance(), Duration.WhileOnBattlefield, new FilterControlledCreaturePermanent("Creatures you control"), false); - effect.setText("Creatures you control are indestructible"); - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect)); + Ability ability = new SimpleStaticAbility(new BoostControlledEffect( + 1, 1, Duration.WhileOnBattlefield, + StaticFilters.FILTER_PERMANENT_CREATURES, false + )); + ability.addEffect(new GainAbilityControlledEffect( + FlyingAbility.getInstance(), Duration.WhileOnBattlefield, + StaticFilters.FILTER_PERMANENT_CREATURES + ).setText("and have flying")); + ability.addEffect(new GainAbilityControlledEffect( + IndestructibleAbility.getInstance(), Duration.WhileOnBattlefield, + StaticFilters.FILTER_PERMANENT_CREATURES + ).setText("and indestructible")); + this.addAbility(ability); + // At the beginning of your upkeep, sacrifice a creature. If you can't, sacrifice Eldrazi Monument. - this.addAbility(new OnEventTriggeredAbility(EventType.UPKEEP_STEP_PRE, "beginning of your upkeep", new EldraziMonumentEffect())); + this.addAbility(new BeginningOfUpkeepTriggeredAbility( + new SacrificeSourceUnlessPaysEffect(new SacrificeTargetCost( + new TargetControlledPermanent(StaticFilters.FILTER_CONTROLLED_CREATURE_SHORT_TEXT) + )).setText("sacrifice a creature. If you can't, sacrifice {this}"), TargetController.YOU, false + )); } private EldraziMonument(final EldraziMonument card) { @@ -55,42 +58,4 @@ public final class EldraziMonument extends CardImpl { public EldraziMonument copy() { return new EldraziMonument(this); } - -} - -class EldraziMonumentEffect extends OneShotEffect { - - public EldraziMonumentEffect() { - super(Outcome.Sacrifice); - staticText = "sacrifice a creature. If you can't, sacrifice {this}"; - } - - public EldraziMonumentEffect(final EldraziMonumentEffect ability) { - super(ability); - } - - @Override - public EldraziMonumentEffect copy() { - return new EldraziMonumentEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - TargetControlledPermanent target = new TargetControlledCreaturePermanent(); - Player player = game.getPlayer(source.getControllerId()); - if (target.canChoose(source.getSourceId(), source.getControllerId(), game)) { - player.choose(this.outcome, target, source.getSourceId(), game); - Permanent permanent = game.getPermanent(target.getFirstTarget()); - if (permanent != null) { - return permanent.sacrifice(source, game); - } - } - Permanent permanent = game.getPermanent(source.getSourceId()); - if (permanent != null) { - return permanent.sacrifice(source, game); - } - return false; - - } - } diff --git a/Mage.Sets/src/mage/cards/f/FleetSwallower.java b/Mage.Sets/src/mage/cards/f/FleetSwallower.java index ec45e0924b..8dd4df8346 100644 --- a/Mage.Sets/src/mage/cards/f/FleetSwallower.java +++ b/Mage.Sets/src/mage/cards/f/FleetSwallower.java @@ -48,7 +48,7 @@ class FleetSwallowerEffect extends OneShotEffect { public FleetSwallowerEffect() { super(Outcome.Detriment); - staticText = "target player puts the top half of their library, rounded up, into their graveyard"; + staticText = "target player mills half their library, rounded up"; } public FleetSwallowerEffect(final FleetSwallowerEffect effect) { diff --git a/Mage.Sets/src/mage/cards/g/GoblinKing.java b/Mage.Sets/src/mage/cards/g/GoblinKing.java index 411fd4f5b5..32fa90921b 100644 --- a/Mage.Sets/src/mage/cards/g/GoblinKing.java +++ b/Mage.Sets/src/mage/cards/g/GoblinKing.java @@ -31,7 +31,7 @@ public final class GoblinKing extends CardImpl { // Other Goblin creatures get +1/+1 and have mountainwalk. Effect effect = new BoostAllEffect(1, 1, Duration.WhileOnBattlefield, StaticFilters.FILTER_PERMANENT_CREATURE_GOBLINS, true); - effect.setText("Other Goblin creatures get +1/+1"); + effect.setText("Other Goblins get +1/+1"); Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, effect); effect = new GainAbilityAllEffect(new MountainwalkAbility(), Duration.WhileOnBattlefield, StaticFilters.FILTER_PERMANENT_CREATURE_GOBLINS, true); effect.setText("and have mountainwalk"); diff --git a/Mage.Sets/src/mage/cards/g/GoblinRabblemaster.java b/Mage.Sets/src/mage/cards/g/GoblinRabblemaster.java index 77c078fae5..51e57715cf 100644 --- a/Mage.Sets/src/mage/cards/g/GoblinRabblemaster.java +++ b/Mage.Sets/src/mage/cards/g/GoblinRabblemaster.java @@ -1,28 +1,28 @@ - package mage.cards.g; -import java.util.UUID; import mage.MageInt; import mage.abilities.common.AttacksTriggeredAbility; import mage.abilities.common.BeginningOfCombatTriggeredAbility; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount; import mage.abilities.dynamicvalue.common.StaticValue; -import mage.abilities.effects.Effect; import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.effects.common.combat.AttacksIfAbleAllEffect; import mage.abilities.effects.common.continuous.BoostSourceEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.*; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.SubType; +import mage.constants.TargetController; import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.mageobject.AnotherPredicate; import mage.filter.predicate.permanent.AttackingPredicate; import mage.game.permanent.token.GoblinToken; -import mage.watchers.common.AttackedThisTurnWatcher; + +import java.util.UUID; /** - * * @author Quercitron */ public final class GoblinRabblemaster extends CardImpl { @@ -47,8 +47,7 @@ public final class GoblinRabblemaster extends CardImpl { this.toughness = new MageInt(2); // Other Goblin creatures you control attack each turn if able. - Effect effect = new AttacksIfAbleAllEffect(otherGoblinFilter); - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect), new AttackedThisTurnWatcher()); + this.addAbility(new SimpleStaticAbility(new AttacksIfAbleAllEffect(otherGoblinFilter, Duration.WhileOnBattlefield, true))); // At the beginning of combat on your turn, create a 1/1 red Goblin creature token with haste. this.addAbility(new BeginningOfCombatTriggeredAbility(new CreateTokenEffect(new GoblinToken(true)), TargetController.YOU, false)); diff --git a/Mage.Sets/src/mage/cards/g/GoblinTrashmaster.java b/Mage.Sets/src/mage/cards/g/GoblinTrashmaster.java index a4f0f60603..cb525385e2 100644 --- a/Mage.Sets/src/mage/cards/g/GoblinTrashmaster.java +++ b/Mage.Sets/src/mage/cards/g/GoblinTrashmaster.java @@ -26,7 +26,7 @@ import mage.target.common.TargetControlledPermanent; public final class GoblinTrashmaster extends CardImpl { private static final FilterCreaturePermanent filter - = new FilterCreaturePermanent(SubType.GOBLIN, "Goblins you control"); + = new FilterCreaturePermanent(SubType.GOBLIN, "Goblins"); private static final FilterControlledCreaturePermanent filter2 = new FilterControlledCreaturePermanent(SubType.GOBLIN, "a Goblin"); diff --git a/Mage.Sets/src/mage/cards/h/HeliodGodOfTheSun.java b/Mage.Sets/src/mage/cards/h/HeliodGodOfTheSun.java index a31c8d8c4b..c4e063ff6d 100644 --- a/Mage.Sets/src/mage/cards/h/HeliodGodOfTheSun.java +++ b/Mage.Sets/src/mage/cards/h/HeliodGodOfTheSun.java @@ -44,7 +44,7 @@ public final class HeliodGodOfTheSun extends CardImpl { // Other creatures you control have vigilance. this.addAbility(new SimpleStaticAbility(new GainAbilityControlledEffect( VigilanceAbility.getInstance(), Duration.WhileOnBattlefield, - StaticFilters.FILTER_PERMANENT_CREATURE, true + StaticFilters.FILTER_PERMANENT_CREATURES, true ))); // {2}{W}{W}: Create a 2/1 white Cleric enchantment creature token. diff --git a/Mage.Sets/src/mage/cards/k/KothophedSoulHoarder.java b/Mage.Sets/src/mage/cards/k/KothophedSoulHoarder.java index f117bb484c..39549524d2 100644 --- a/Mage.Sets/src/mage/cards/k/KothophedSoulHoarder.java +++ b/Mage.Sets/src/mage/cards/k/KothophedSoulHoarder.java @@ -48,9 +48,9 @@ public final class KothophedSoulHoarder extends CardImpl { // Whenever a permanent owned by another player is put into the graveyard from the battlefield, you draw one card and lose 1 life. Effect effect = new DrawCardSourceControllerEffect(1); - effect.setText("you draw one card"); + effect.setText("you draw a card"); Ability ability = new ZoneChangeAllTriggeredAbility(Zone.BATTLEFIELD, Zone.BATTLEFIELD, Zone.GRAVEYARD, effect, filter, - "Whenever a permanent owned by another player is put into the graveyard from the battlefield, ", false); + "Whenever a permanent owned by another player is put into a graveyard from the battlefield, ", false); effect = new LoseLifeSourceControllerEffect(1); effect.setText("and lose 1 life"); ability.addEffect(effect); diff --git a/Mage.Sets/src/mage/cards/l/LifeFromTheLoam.java b/Mage.Sets/src/mage/cards/l/LifeFromTheLoam.java index 31e5e2845f..e6cbeb750d 100644 --- a/Mage.Sets/src/mage/cards/l/LifeFromTheLoam.java +++ b/Mage.Sets/src/mage/cards/l/LifeFromTheLoam.java @@ -1,8 +1,6 @@ - package mage.cards.l; -import java.util.UUID; -import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.abilities.keyword.DredgeAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -10,18 +8,18 @@ import mage.constants.CardType; import mage.filter.common.FilterLandCard; import mage.target.common.TargetCardInYourGraveyard; +import java.util.UUID; + /** - * * @author jonubuu */ public final class LifeFromTheLoam extends CardImpl { public LifeFromTheLoam(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{1}{G}"); - + super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{1}{G}"); // Return up to three target land cards from your graveyard to your hand. - this.getSpellAbility().addEffect(new ReturnToHandTargetEffect()); + this.getSpellAbility().addEffect(new ReturnFromGraveyardToHandTargetEffect()); this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(0, 3, new FilterLandCard("land cards from your graveyard"))); // Dredge 3 (If you would draw a card, instead you may put exactly three cards from the top of your library into your graveyard. If you do, return this card from your graveyard to your hand. Otherwise, draw a card.) this.addAbility(new DredgeAbility(3)); diff --git a/Mage.Sets/src/mage/cards/m/MichonneRuthlessSurvivor.java b/Mage.Sets/src/mage/cards/m/MichonneRuthlessSurvivor.java index f418dae1ad..75a02d7dcc 100644 --- a/Mage.Sets/src/mage/cards/m/MichonneRuthlessSurvivor.java +++ b/Mage.Sets/src/mage/cards/m/MichonneRuthlessSurvivor.java @@ -15,6 +15,7 @@ import mage.cards.CardSetInfo; import mage.constants.*; import mage.game.Game; import mage.game.events.GameEvent; +import mage.game.permanent.token.WalkerToken; import mage.game.permanent.token.ZombieToken; import java.util.Objects; @@ -35,7 +36,7 @@ public final class MichonneRuthlessSurvivor extends CardImpl { this.toughness = new MageInt(3); // When Michonne enters the battlefield, create two Walker tokens. - this.addAbility(new EntersBattlefieldTriggeredAbility(new CreateTokenEffect(new ZombieToken(), 2))); + this.addAbility(new EntersBattlefieldTriggeredAbility(new CreateTokenEffect(new WalkerToken(), 2))); // As long as Michonne is equipped, she must be blocked if able. this.addAbility(new SimpleStaticAbility(new ConditionalRequirementEffect( @@ -44,7 +45,7 @@ public final class MichonneRuthlessSurvivor extends CardImpl { ))); // Whenever Michonne and at least two Zombies attack, she gains indestructible until end of turn. - this.addAbility(new BattalionAbility()); + this.addAbility(new MichonneRuthlessSurvivorAbility()); } private MichonneRuthlessSurvivor(final MichonneRuthlessSurvivor card) { @@ -57,19 +58,19 @@ public final class MichonneRuthlessSurvivor extends CardImpl { } } -class BattalionAbility extends TriggeredAbilityImpl { +class MichonneRuthlessSurvivorAbility extends TriggeredAbilityImpl { - public BattalionAbility() { + public MichonneRuthlessSurvivorAbility() { super(Zone.BATTLEFIELD, new GainAbilitySourceEffect(IndestructibleAbility.getInstance(), Duration.EndOfTurn)); } - public BattalionAbility(final BattalionAbility ability) { + public MichonneRuthlessSurvivorAbility(final MichonneRuthlessSurvivorAbility ability) { super(ability); } @Override - public BattalionAbility copy() { - return new BattalionAbility(this); + public MichonneRuthlessSurvivorAbility copy() { + return new MichonneRuthlessSurvivorAbility(this); } @Override diff --git a/Mage.Sets/src/mage/cards/n/NeganTheColdBlooded.java b/Mage.Sets/src/mage/cards/n/NeganTheColdBlooded.java index 52e27d0d56..bc812c21a6 100644 --- a/Mage.Sets/src/mage/cards/n/NeganTheColdBlooded.java +++ b/Mage.Sets/src/mage/cards/n/NeganTheColdBlooded.java @@ -46,7 +46,7 @@ public final class NeganTheColdBlooded extends CardImpl { // Whenever an opponent sacrifices a creature, you create a Treasure token. this.addAbility(new SacrificeAllTriggeredAbility( - new CreateTokenEffect(new TreasureToken()), + new CreateTokenEffect(new TreasureToken()).setText("you create a Treasure token"), StaticFilters.FILTER_PERMANENT_A_CREATURE, TargetController.OPPONENT, false )); diff --git a/Mage.Sets/src/mage/cards/n/NyleaGodOfTheHunt.java b/Mage.Sets/src/mage/cards/n/NyleaGodOfTheHunt.java index 9b0635f87a..85f4456c6f 100644 --- a/Mage.Sets/src/mage/cards/n/NyleaGodOfTheHunt.java +++ b/Mage.Sets/src/mage/cards/n/NyleaGodOfTheHunt.java @@ -45,7 +45,7 @@ public final class NyleaGodOfTheHunt extends CardImpl { // Other creatures you control have trample. this.addAbility(new SimpleStaticAbility(new GainAbilityControlledEffect( TrampleAbility.getInstance(), Duration.WhileOnBattlefield, - StaticFilters.FILTER_PERMANENT_CREATURE, true + StaticFilters.FILTER_PERMANENT_CREATURES, true ))); // {3}{G}: Target creature gets +2/+2 until end of turn. diff --git a/Mage.Sets/src/mage/cards/r/RekiTheHistoryOfKamigawa.java b/Mage.Sets/src/mage/cards/r/RekiTheHistoryOfKamigawa.java index b80c3ff479..a1f7bdfb96 100644 --- a/Mage.Sets/src/mage/cards/r/RekiTheHistoryOfKamigawa.java +++ b/Mage.Sets/src/mage/cards/r/RekiTheHistoryOfKamigawa.java @@ -18,7 +18,7 @@ import mage.filter.FilterSpell; */ public final class RekiTheHistoryOfKamigawa extends CardImpl { - private static final FilterSpell filter = new FilterSpell("legendary spell"); + private static final FilterSpell filter = new FilterSpell("a legendary spell"); static { filter.add(SuperType.LEGENDARY.getPredicate()); diff --git a/Mage.Sets/src/mage/cards/s/SquirrelWrangler.java b/Mage.Sets/src/mage/cards/s/SquirrelWrangler.java index 8ae89334cd..662c87a9ee 100644 --- a/Mage.Sets/src/mage/cards/s/SquirrelWrangler.java +++ b/Mage.Sets/src/mage/cards/s/SquirrelWrangler.java @@ -1,14 +1,12 @@ - package mage.cards.s; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.SacrificeTargetCost; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.common.CreateTokenEffect; -import mage.abilities.effects.common.continuous.BoostControlledEffect; +import mage.abilities.effects.common.continuous.BoostAllEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -20,8 +18,9 @@ import mage.filter.common.FilterCreaturePermanent; import mage.game.permanent.token.SquirrelToken; import mage.target.common.TargetControlledPermanent; +import java.util.UUID; + /** - * * @author LevelX2 */ public final class SquirrelWrangler extends CardImpl { @@ -29,7 +28,7 @@ public final class SquirrelWrangler extends CardImpl { private static final FilterCreaturePermanent filter = new FilterCreaturePermanent(SubType.SQUIRREL, "Squirrel creatures"); public SquirrelWrangler(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{G}{G}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}{G}"); this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.DRUID); @@ -42,7 +41,7 @@ public final class SquirrelWrangler extends CardImpl { this.addAbility(ability); // {1}{G}, Sacrifice a land: Squirrel creatures get +1/+1 until end of turn. - ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostControlledEffect(1,1,Duration.EndOfTurn, filter), new ManaCostsImpl("{1}{G}")); + ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostAllEffect(1, 1, Duration.EndOfTurn, filter, false), new ManaCostsImpl("{1}{G}")); ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent(new FilterControlledLandPermanent("a land")))); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/s/SwanSong.java b/Mage.Sets/src/mage/cards/s/SwanSong.java index 73ca3c9296..273f13f9dc 100644 --- a/Mage.Sets/src/mage/cards/s/SwanSong.java +++ b/Mage.Sets/src/mage/cards/s/SwanSong.java @@ -22,7 +22,7 @@ import mage.target.TargetSpell; */ public final class SwanSong extends CardImpl { - private static final FilterSpell filter = new FilterSpell("enchantment, instant or sorcery spell"); + private static final FilterSpell filter = new FilterSpell("enchantment, instant, or sorcery spell"); static { filter.add(Predicates.or(CardType.ENCHANTMENT.getPredicate(), @@ -52,7 +52,7 @@ class SwanSongEffect extends OneShotEffect { public SwanSongEffect() { super(Outcome.Benefit); - this.staticText = "Counter target enchantment, instant or sorcery spell. Its controller creates a 2/2 blue Bird creature token with flying"; + this.staticText = "Counter target enchantment, instant, or sorcery spell. Its controller creates a 2/2 blue Bird creature token with flying"; } public SwanSongEffect(final SwanSongEffect effect) { diff --git a/Mage.Sets/src/mage/cards/t/Thraximundar.java b/Mage.Sets/src/mage/cards/t/Thraximundar.java index 06e0485b5d..c8c4c15d9e 100644 --- a/Mage.Sets/src/mage/cards/t/Thraximundar.java +++ b/Mage.Sets/src/mage/cards/t/Thraximundar.java @@ -96,7 +96,7 @@ class ThraximundarTriggeredAbility extends TriggeredAbilityImpl { } @Override - public String getTriggerPhrase() { + public String getRule() { return "Whenever {this} attacks, defending player sacrifices a creature."; } } @@ -123,7 +123,7 @@ class PlayerSacrificesCreatureTriggeredAbility extends TriggeredAbilityImpl { } @Override - public String getRule() { + public String getTriggerPhrase() { return "Whenever a player sacrifices a creature, " ; } diff --git a/Mage.Sets/src/mage/cards/t/ToshiroUmezawa.java b/Mage.Sets/src/mage/cards/t/ToshiroUmezawa.java index 909fdca869..cfdb2ec06f 100644 --- a/Mage.Sets/src/mage/cards/t/ToshiroUmezawa.java +++ b/Mage.Sets/src/mage/cards/t/ToshiroUmezawa.java @@ -72,8 +72,8 @@ class ToshiroUmezawaEffect extends OneShotEffect { public ToshiroUmezawaEffect() { super(Outcome.Benefit); - this.staticText = "cast target instant card from your graveyard. " - + "If that card would be put into a graveyard this turn, exile it instead"; + this.staticText = "you may cast target instant card from your graveyard. " + + "If that spell would be put into a graveyard this turn, exile it instead"; } public ToshiroUmezawaEffect(final ToshiroUmezawaEffect effect) { diff --git a/Mage.Sets/src/mage/cards/v/VaultOfTheArchangel.java b/Mage.Sets/src/mage/cards/v/VaultOfTheArchangel.java index 5cf42beabd..5d8f355900 100644 --- a/Mage.Sets/src/mage/cards/v/VaultOfTheArchangel.java +++ b/Mage.Sets/src/mage/cards/v/VaultOfTheArchangel.java @@ -1,7 +1,5 @@ - package mage.cards.v; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.TapSourceCost; @@ -14,25 +12,30 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; -import mage.constants.Zone; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.StaticFilters; + +import java.util.UUID; /** - * * @author North */ public final class VaultOfTheArchangel extends CardImpl { public VaultOfTheArchangel(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.LAND},""); + super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); // {tap}: Add {C}. this.addAbility(new ColorlessManaAbility()); + // {2}{W}{B}, {tap}: Creatures you control gain deathtouch and lifelink until end of turn. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, - new GainAbilityControlledEffect(DeathtouchAbility.getInstance(), Duration.EndOfTurn, new FilterControlledCreaturePermanent("Creatures"), false), - new ManaCostsImpl("{2}{W}{B}")); - ability.addEffect(new GainAbilityControlledEffect(LifelinkAbility.getInstance(), Duration.EndOfTurn, new FilterControlledCreaturePermanent("Creatures"), false)); + Ability ability = new SimpleActivatedAbility(new GainAbilityControlledEffect( + DeathtouchAbility.getInstance(), Duration.EndOfTurn, + StaticFilters.FILTER_PERMANENT_CREATURE + ).setText("creatures you control gain deathtouch"), new ManaCostsImpl<>("{2}{W}{B}")); + ability.addEffect(new GainAbilityControlledEffect( + LifelinkAbility.getInstance(), Duration.EndOfTurn, + StaticFilters.FILTER_PERMANENT_CREATURE + ).setText("and lifelink until end of turn")); ability.addCost(new TapSourceCost()); this.addAbility(ability); } diff --git a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java index 7e88983e48..7023781bb0 100644 --- a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java +++ b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java @@ -58,7 +58,7 @@ public class VerifyCardDataTest { private static final Logger logger = Logger.getLogger(VerifyCardDataTest.class); - private static final String FULL_ABILITIES_CHECK_SET_CODE = "GRN"; // check all abilities and output cards with wrong abilities texts; + private static final String FULL_ABILITIES_CHECK_SET_CODE = "SLD"; // check all abilities and output cards with wrong abilities texts; private static final boolean AUTO_FIX_SAMPLE_DECKS = false; // debug only: auto-fix sample decks by test_checkSampleDecks test run private static final boolean ONLY_TEXT = false; // use when checking text locally, suppresses unnecessary checks and output messages