diff --git a/Mage.Sets/src/mage/cards/a/AcolyteOfBahamut.java b/Mage.Sets/src/mage/cards/a/AcolyteOfBahamut.java index 5aa6298e898..c5fa99c8695 100644 --- a/Mage.Sets/src/mage/cards/a/AcolyteOfBahamut.java +++ b/Mage.Sets/src/mage/cards/a/AcolyteOfBahamut.java @@ -44,7 +44,7 @@ public final class AcolyteOfBahamut extends CardImpl { new SpellsCostReductionControllerEffect(filter, 2) .setText("the first Dragon spell you cast each turn costs {2} less to cast") ), Duration.WhileOnBattlefield, StaticFilters.FILTER_CREATURES_OWNED_COMMANDER - )), new AcolyteOfBahamutWatcher()); + ).withForceQuotes()), new AcolyteOfBahamutWatcher()); } private AcolyteOfBahamut(final AcolyteOfBahamut card) { diff --git a/Mage.Sets/src/mage/cards/a/AltarOfBhaal.java b/Mage.Sets/src/mage/cards/a/AltarOfBhaal.java index c79ef53141b..35edd0db7b2 100644 --- a/Mage.Sets/src/mage/cards/a/AltarOfBhaal.java +++ b/Mage.Sets/src/mage/cards/a/AltarOfBhaal.java @@ -30,7 +30,7 @@ public final class AltarOfBhaal extends AdventureCard { new ReturnFromGraveyardToBattlefieldTargetEffect(), new ManaCostsImpl<>("{2}{B}") ); ability.addCost(new TapSourceCost()); - ability.addCost(new ExileTargetCost(new TargetControlledPermanent(StaticFilters.FILTER_CONTROLLED_CREATURE_SHORT_TEXT))); + ability.addCost(new ExileTargetCost(new TargetControlledPermanent(StaticFilters.FILTER_CONTROLLED_CREATURE))); ability.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD)); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/b/BeckoningWillOWisp.java b/Mage.Sets/src/mage/cards/b/BeckoningWillOWisp.java index 5fc994a5a79..b6003d4ac04 100644 --- a/Mage.Sets/src/mage/cards/b/BeckoningWillOWisp.java +++ b/Mage.Sets/src/mage/cards/b/BeckoningWillOWisp.java @@ -44,10 +44,14 @@ public final class BeckoningWillOWisp extends CardImpl { this.addAbility(FlyingAbility.getInstance()); // Lure the Unwary — At the beginning of combat on your turn, choose an opponent. - this.addAbility(new BeginningOfCombatTriggeredAbility(new BeckoningWillOWispEffect(), TargetController.YOU, false)); + this.addAbility(new BeginningOfCombatTriggeredAbility( + new BeckoningWillOWispEffect(), TargetController.YOU, false + ).withFlavorWord("Lure the Unwary")); // Creatures attacking the last chosen player get +1/+0. - this.addAbility(new SimpleStaticAbility(new BoostAllEffect(1, 0, Duration.WhileOnBattlefield, filter, false))); + this.addAbility(new SimpleStaticAbility(new BoostAllEffect( + 1, 0, Duration.WhileOnBattlefield, filter, false + ))); } private BeckoningWillOWisp(final BeckoningWillOWisp card) { diff --git a/Mage.Sets/src/mage/cards/c/CaptainNghathrod.java b/Mage.Sets/src/mage/cards/c/CaptainNghathrod.java index 59426c8169e..c791c6594fc 100644 --- a/Mage.Sets/src/mage/cards/c/CaptainNghathrod.java +++ b/Mage.Sets/src/mage/cards/c/CaptainNghathrod.java @@ -33,7 +33,7 @@ import java.util.UUID; */ public final class CaptainNghathrod extends CardImpl { - private static final FilterPermanent filter = new FilterControlledPermanent(SubType.HORROR); + private static final FilterPermanent filter = new FilterControlledPermanent(SubType.HORROR, "a Horror"); private static final FilterCard filter2 = new FilterCard( "artifact or creature card in an opponent's graveyard that was put there from their library this turn" ); diff --git a/Mage.Sets/src/mage/cards/c/CloakOfTheBat.java b/Mage.Sets/src/mage/cards/c/CloakOfTheBat.java index 016200eabc6..125b88b3997 100644 --- a/Mage.Sets/src/mage/cards/c/CloakOfTheBat.java +++ b/Mage.Sets/src/mage/cards/c/CloakOfTheBat.java @@ -4,8 +4,8 @@ import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect; import mage.abilities.keyword.EquipAbility; -import mage.abilities.keyword.FirstStrikeAbility; import mage.abilities.keyword.FlyingAbility; +import mage.abilities.keyword.HasteAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.AttachmentType; @@ -29,8 +29,8 @@ public final class CloakOfTheBat extends CardImpl { FlyingAbility.getInstance(), AttachmentType.EQUIPMENT )); ability.addEffect(new GainAbilityAttachedEffect( - FirstStrikeAbility.getInstance(), AttachmentType.EQUIPMENT - ).setText("and first strike")); + HasteAbility.getInstance(), AttachmentType.EQUIPMENT + ).setText("and haste")); this.addAbility(ability); // Equip {2} diff --git a/Mage.Sets/src/mage/cards/c/CloakwoodHermit.java b/Mage.Sets/src/mage/cards/c/CloakwoodHermit.java index 70f25f17a36..b461725f90f 100644 --- a/Mage.Sets/src/mage/cards/c/CloakwoodHermit.java +++ b/Mage.Sets/src/mage/cards/c/CloakwoodHermit.java @@ -4,7 +4,7 @@ import mage.abilities.common.BeginningOfEndStepTriggeredAbility; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.condition.common.CreaturePutInYourGraveyardCondition; import mage.abilities.effects.common.CreateTokenEffect; -import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; +import mage.abilities.effects.common.continuous.GainAbilityAllEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; @@ -26,12 +26,12 @@ public final class CloakwoodHermit extends CardImpl { this.subtype.add(SubType.BACKGROUND); // Commander creatures you own have "At the beginning of your end step, if a creature card was put into your graveyard from anywhere this turn, create two tapped 1/1 green Squirrel creature tokens." - this.addAbility(new SimpleStaticAbility(new GainAbilityControlledEffect( + this.addAbility(new SimpleStaticAbility(new GainAbilityAllEffect( new BeginningOfEndStepTriggeredAbility( new CreateTokenEffect(new SquirrelToken(), 2, true, false), TargetController.YOU, CreaturePutInYourGraveyardCondition.instance, false ), Duration.WhileOnBattlefield, StaticFilters.FILTER_CREATURES_OWNED_COMMANDER - )).addHint(CreaturePutInYourGraveyardCondition.getHint()), new CreaturePutIntoGraveyardWatcher()); + ).withForceQuotes()).addHint(CreaturePutInYourGraveyardCondition.getHint()), new CreaturePutIntoGraveyardWatcher()); } private CloakwoodHermit(final CloakwoodHermit card) { diff --git a/Mage.Sets/src/mage/cards/c/ConeOfCold.java b/Mage.Sets/src/mage/cards/c/ConeOfCold.java index 32e01f8c538..c9870921800 100644 --- a/Mage.Sets/src/mage/cards/c/ConeOfCold.java +++ b/Mage.Sets/src/mage/cards/c/ConeOfCold.java @@ -45,6 +45,8 @@ public final class ConeOfCold extends CardImpl { StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURES, Duration.EndOfTurn ).setText("Until your next turn, creatures your opponents control enter the battlefield tapped") ); + + this.getSpellAbility().addEffect(effect); } private ConeOfCold(final ConeOfCold card) { diff --git a/Mage.Sets/src/mage/cards/d/DescentIntoAvernus.java b/Mage.Sets/src/mage/cards/d/DescentIntoAvernus.java index 135284f3807..adeab9b5b97 100644 --- a/Mage.Sets/src/mage/cards/d/DescentIntoAvernus.java +++ b/Mage.Sets/src/mage/cards/d/DescentIntoAvernus.java @@ -38,7 +38,7 @@ public final class DescentIntoAvernus extends CardImpl { ability.addEffect(new DescentIntoAvernusEffect()); ability.addEffect(new DamagePlayersEffect( Outcome.Damage, xValue, TargetController.ANY - ).concatBy("and")); + ).setText("and {this} deals X damage to each player, where X is the number of descent counters on {this}")); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/d/DungeonDelver.java b/Mage.Sets/src/mage/cards/d/DungeonDelver.java index 66490849c26..6769f31598b 100644 --- a/Mage.Sets/src/mage/cards/d/DungeonDelver.java +++ b/Mage.Sets/src/mage/cards/d/DungeonDelver.java @@ -29,7 +29,7 @@ public final class DungeonDelver extends CardImpl { this.addAbility(new SimpleStaticAbility(new GainAbilityAllEffect( new SimpleStaticAbility(new DungeonDelverEffect()), Duration.WhileOnBattlefield, StaticFilters.FILTER_CREATURES_OWNED_COMMANDER - ))); + ).withForceQuotes())); } private DungeonDelver(final DungeonDelver card) { diff --git a/Mage.Sets/src/mage/cards/d/DungeoneersPack.java b/Mage.Sets/src/mage/cards/d/DungeoneersPack.java index 8d746899366..5c3dde31781 100644 --- a/Mage.Sets/src/mage/cards/d/DungeoneersPack.java +++ b/Mage.Sets/src/mage/cards/d/DungeoneersPack.java @@ -3,6 +3,7 @@ package mage.cards.d; import mage.abilities.Ability; import mage.abilities.common.ActivateAsSorceryActivatedAbility; import mage.abilities.common.EntersBattlefieldTappedAbility; +import mage.abilities.costs.common.SacrificeSourceCost; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.effects.common.CreateTokenEffect; @@ -29,10 +30,11 @@ public final class DungeoneersPack extends CardImpl { // {2}, {T}, Sacrifice Dungeoneer's Pack: You take the initiative, gain 3 life, draw a card, and create a Treasure token. Activate only as a sorcery. Ability ability = new ActivateAsSorceryActivatedAbility(new TakeTheInitiativeEffect(), new GenericManaCost(2)); - ability.addEffect(new GainLifeEffect(3).concatBy(",")); + ability.addCost(new TapSourceCost()); + ability.addCost(new SacrificeSourceCost()); + ability.addEffect(new GainLifeEffect(3).concatBy(", you")); ability.addEffect(new DrawCardSourceControllerEffect(1).concatBy(",")); ability.addEffect(new CreateTokenEffect(new TreasureToken()).concatBy(", and")); - ability.addCost(new TapSourceCost()); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/e/EmeraldDragon.java b/Mage.Sets/src/mage/cards/e/EmeraldDragon.java index 66d3ad53e80..0bdb352c23d 100644 --- a/Mage.Sets/src/mage/cards/e/EmeraldDragon.java +++ b/Mage.Sets/src/mage/cards/e/EmeraldDragon.java @@ -45,7 +45,7 @@ public final class EmeraldDragon extends AdventureCard { // Dissonant Wave // Counter target activated or triggered ability from a noncreature source. this.getSpellCard().getSpellAbility().addEffect(new CounterTargetEffect()); - this.getSpellAbility().addTarget(new TargetActivatedOrTriggeredAbility(filter)); + this.getSpellCard().getSpellAbility().addTarget(new TargetActivatedOrTriggeredAbility(filter)); } private EmeraldDragon(final EmeraldDragon card) { diff --git a/Mage.Sets/src/mage/cards/e/Ettercap.java b/Mage.Sets/src/mage/cards/e/Ettercap.java index 84df4024020..c3ca78b99d5 100644 --- a/Mage.Sets/src/mage/cards/e/Ettercap.java +++ b/Mage.Sets/src/mage/cards/e/Ettercap.java @@ -39,8 +39,8 @@ public final class Ettercap extends AdventureCard { // Web Shot // Destroy target creature with flying. - this.getSpellAbility().addEffect(new DestroyTargetEffect()); - this.getSpellAbility().addTarget(new TargetPermanent(filter)); + this.getSpellCard().getSpellAbility().addEffect(new DestroyTargetEffect()); + this.getSpellCard().getSpellAbility().addTarget(new TargetPermanent(filter)); } private Ettercap(final Ettercap card) { diff --git a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java index 37612747005..d369ce45f55 100644 --- a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java +++ b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java @@ -60,7 +60,7 @@ public class VerifyCardDataTest { private static final Logger logger = Logger.getLogger(VerifyCardDataTest.class); - private static final String FULL_ABILITIES_CHECK_SET_CODE = "NCC"; // check all abilities and output cards with wrong abilities texts; + private static final String FULL_ABILITIES_CHECK_SET_CODE = "CLB"; // 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