diff --git a/Mage.Sets/src/mage/cards/a/AcererakTheArchlich.java b/Mage.Sets/src/mage/cards/a/AcererakTheArchlich.java index f34a77277bd..6ea9dee4c1e 100644 --- a/Mage.Sets/src/mage/cards/a/AcererakTheArchlich.java +++ b/Mage.Sets/src/mage/cards/a/AcererakTheArchlich.java @@ -44,7 +44,7 @@ public final class AcererakTheArchlich extends CardImpl { Ability ability = new ConditionalInterveningIfTriggeredAbility( new EntersBattlefieldTriggeredAbility(new ReturnToHandSourceEffect(true)), AcererakTheArchlichCondition.instance, "When {this} enters the battlefield, " + - "if you have not completed Tomb of Annihilation, return {this} " + + "if you haven't completed Tomb of Annihilation, return {this} " + "to its owner's hand and venture into the dungeon." ); ability.addEffect(new VentureIntoTheDungeonEffect()); diff --git a/Mage.Sets/src/mage/cards/a/ArcaneInvestigator.java b/Mage.Sets/src/mage/cards/a/ArcaneInvestigator.java index 06fbf32b2a1..e863a6de6f2 100644 --- a/Mage.Sets/src/mage/cards/a/ArcaneInvestigator.java +++ b/Mage.Sets/src/mage/cards/a/ArcaneInvestigator.java @@ -42,7 +42,8 @@ public final class ArcaneInvestigator extends CardImpl { effect.addTableEntry(10, 20, new LookLibraryAndPickControllerEffect( StaticValue.get(3), false, StaticValue.get(1), StaticFilters.FILTER_CARD, Zone.LIBRARY, false, false - )); + ).setText("look at the top three cards of your library. Put one of them " + + "into your hand and the rest on the bottom of your library in any order")); } private ArcaneInvestigator(final ArcaneInvestigator card) { diff --git a/Mage.Sets/src/mage/cards/d/DancingSword.java b/Mage.Sets/src/mage/cards/d/DancingSword.java index fb2b7b39228..ba1e65a2f33 100644 --- a/Mage.Sets/src/mage/cards/d/DancingSword.java +++ b/Mage.Sets/src/mage/cards/d/DancingSword.java @@ -33,7 +33,7 @@ public final class DancingSword extends CardImpl { // When equipped creature dies, you may have Dancing Sword become a 2/1 Construct artifact creature with flying and ward {1}. If you do, it isn't an Equipment. this.addAbility(new DiesAttachedTriggeredAbility( new DancingSwordEffect(), "equipped creature", true - )); + ).setTriggerPhrase("When equipped creature dies, ")); // Equip {1} this.addAbility(new EquipAbility(1)); diff --git a/Mage.Sets/src/mage/cards/d/DelinaWildMage.java b/Mage.Sets/src/mage/cards/d/DelinaWildMage.java index 93e2ef4e026..8925f6a0793 100644 --- a/Mage.Sets/src/mage/cards/d/DelinaWildMage.java +++ b/Mage.Sets/src/mage/cards/d/DelinaWildMage.java @@ -56,7 +56,7 @@ class DelinaWildMageEffect extends OneShotEffect { DelinaWildMageEffect() { super(Outcome.Benefit); staticText = "choose target creature you control, then roll a d20." + - "
1-14 | Create a tapped and attacking token that's a copy of that creature " + + "
1-14 | Create a tapped and attacking token that's a copy of that creature, " + "except it's not legendary and it has \"Exile this creature at end of combat.\"" + "
15-20 | Create one of those tokens. You may roll again."; } diff --git a/Mage.Sets/src/mage/cards/d/Demilich.java b/Mage.Sets/src/mage/cards/d/Demilich.java index cb64df7b963..da6ff4323ec 100644 --- a/Mage.Sets/src/mage/cards/d/Demilich.java +++ b/Mage.Sets/src/mage/cards/d/Demilich.java @@ -91,7 +91,7 @@ enum DemilichValue implements DynamicValue { @Override public String getMessage() { - return "instant and sorcery you've cast this turn"; + return "instant and sorcery spell you've cast this turn"; } } @@ -134,7 +134,7 @@ class DemilichPlayEffect extends AsThoughEffectImpl { public DemilichPlayEffect() { super(AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, Duration.EndOfGame, Outcome.Benefit); - this.staticText = "You may cast {this} from your graveyard by exiling four instants and/or sorcery cards from your graveyard in addition to paying its other costs"; + this.staticText = "You may cast {this} from your graveyard by exiling four instant and/or sorcery cards from your graveyard in addition to paying its other costs"; } private DemilichPlayEffect(final DemilichPlayEffect effect) { diff --git a/Mage.Sets/src/mage/cards/g/GelatinousCube.java b/Mage.Sets/src/mage/cards/g/GelatinousCube.java index e13ea9e46d1..fe8b1da050a 100644 --- a/Mage.Sets/src/mage/cards/g/GelatinousCube.java +++ b/Mage.Sets/src/mage/cards/g/GelatinousCube.java @@ -33,7 +33,7 @@ import java.util.UUID; */ public final class GelatinousCube extends CardImpl { - private static final FilterPermanent filter = new FilterOpponentsCreaturePermanent("non-Ooze creature an opponent controls"); + private static final FilterPermanent filter = new FilterOpponentsCreaturePermanent("non-Ooze creature"); static { filter.add(Predicates.not(SubType.OOZE.getPredicate())); diff --git a/Mage.Sets/src/mage/cards/k/KeenEaredSentry.java b/Mage.Sets/src/mage/cards/k/KeenEaredSentry.java index b6418feca26..bb150d24609 100644 --- a/Mage.Sets/src/mage/cards/k/KeenEaredSentry.java +++ b/Mage.Sets/src/mage/cards/k/KeenEaredSentry.java @@ -52,7 +52,7 @@ class KeenEaredSentryEffect extends ContinuousRuleModifyingEffectImpl { KeenEaredSentryEffect() { super(Duration.WhileOnBattlefield, Outcome.Detriment); - staticText = "your opponents can't venture into the dungeon more than once each turn"; + staticText = "each opponent can't venture into the dungeon more than once each turn"; } private KeenEaredSentryEffect(final KeenEaredSentryEffect effect) { diff --git a/Mage.Sets/src/mage/cards/o/OchreJelly.java b/Mage.Sets/src/mage/cards/o/OchreJelly.java index 131240fe556..7fb3326d3d7 100644 --- a/Mage.Sets/src/mage/cards/o/OchreJelly.java +++ b/Mage.Sets/src/mage/cards/o/OchreJelly.java @@ -49,7 +49,7 @@ public final class OchreJelly extends CardImpl { )), OchreJellyCondition.instance, CardUtil.italicizeWithEmDash("Split") + "When {this} dies, if it had two or more +1/+1 counters on it, " + "create a token that's a copy of it at the beginning of the next end step. " + - "That token enters the battlefield with half that many +1/+1 counters on it, rounded down." + "The token enters the battlefield with half that many +1/+1 counters on it, rounded down." )); } diff --git a/Mage.Sets/src/mage/cards/o/OrbOfDragonkind.java b/Mage.Sets/src/mage/cards/o/OrbOfDragonkind.java index 87068207ece..54f38b0d2d0 100644 --- a/Mage.Sets/src/mage/cards/o/OrbOfDragonkind.java +++ b/Mage.Sets/src/mage/cards/o/OrbOfDragonkind.java @@ -1,7 +1,5 @@ package mage.cards.o; -import java.util.UUID; - import mage.ConditionalMana; import mage.MageObject; import mage.Mana; @@ -21,16 +19,21 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Zone; -import mage.filter.common.FilterBySubtypeCard; +import mage.filter.FilterCard; import mage.game.Game; +import java.util.UUID; + /** - * * @author weirddan455 */ public final class OrbOfDragonkind extends CardImpl { - private static final FilterBySubtypeCard filter = new FilterBySubtypeCard(SubType.DRAGON); + private static final FilterCard filter = new FilterCard("a Dragon card"); + + static { + filter.add(SubType.DRAGON.getPredicate()); + } public OrbOfDragonkind(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{1}{R}"); @@ -46,7 +49,7 @@ public final class OrbOfDragonkind extends CardImpl { StaticValue.get(7), false, StaticValue.get(1), filter, Zone.LIBRARY, false, true, false, Zone.HAND, true, false, false).setBackInRandomOrder(true), - new ManaCostsImpl("{R}") + new ManaCostsImpl<>("{R}") ); ability.addCost(new TapSourceCost()); ability.addCost(new SacrificeSourceCost()); @@ -72,7 +75,7 @@ class OrbOfDragonkindManaBuilder extends ConditionalManaBuilder { @Override public String getRule() { - return "Spend this mana only to cast Dragon spells or to activate abilities of Dragons"; + return "Spend this mana only to cast Dragon spells or activate abilities of Dragons"; } } @@ -80,7 +83,7 @@ class OrbOfDragonkindConditionalMana extends ConditionalMana { public OrbOfDragonkindConditionalMana(Mana mana) { super(mana); - this.staticText = "Spend this mana only to cast Dragon spells or to activate abilities of Dragons"; + this.staticText = "Spend this mana only to cast Dragon spells or activate abilities of Dragons"; addCondition(OrbOfDragonkindManaCondition.instance); } } diff --git a/Mage.Sets/src/mage/cards/r/RogueClass.java b/Mage.Sets/src/mage/cards/r/RogueClass.java index 5211d568e68..78e9c3ff09b 100644 --- a/Mage.Sets/src/mage/cards/r/RogueClass.java +++ b/Mage.Sets/src/mage/cards/r/RogueClass.java @@ -52,7 +52,7 @@ public final class RogueClass extends CardImpl { this.addAbility(new SimpleStaticAbility(new GainClassAbilitySourceEffect( new GainAbilityControlledEffect( new MenaceAbility(), Duration.WhileOnBattlefield, - StaticFilters.FILTER_CONTROLLED_CREATURES + StaticFilters.FILTER_PERMANENT_CREATURES ), 2 ))); @@ -182,7 +182,7 @@ class RogueClassManaEffect extends AsThoughEffectImpl implements AsThoughManaEff RogueClassManaEffect() { super(AsThoughEffectType.SPEND_OTHER_MANA, Duration.WhileOnBattlefield, Outcome.Benefit); - this.staticText = ", and you may spend mana as through it were mana of any color to cast them"; + this.staticText = ", and you may spend mana as though it were mana of any color to cast those spells"; } private RogueClassManaEffect(final RogueClassManaEffect effect) { diff --git a/Mage.Sets/src/mage/cards/s/SorcererClass.java b/Mage.Sets/src/mage/cards/s/SorcererClass.java index 960ac7e99a1..54ce5a22260 100644 --- a/Mage.Sets/src/mage/cards/s/SorcererClass.java +++ b/Mage.Sets/src/mage/cards/s/SorcererClass.java @@ -132,7 +132,7 @@ class SorcererClassEffect extends OneShotEffect { SorcererClassEffect() { super(Outcome.Benefit); staticText = "that spell deals damage to each opponent equal " + - "to the number of instant or sorcery spells you've cast this turn"; + "to the number of instant and sorcery spells you've cast this turn"; } private SorcererClassEffect(final SorcererClassEffect effect) { diff --git a/Mage.Sets/src/mage/cards/s/SphereOfAnnihilation.java b/Mage.Sets/src/mage/cards/s/SphereOfAnnihilation.java index 9f9069c38e5..e2da2cbfbd9 100644 --- a/Mage.Sets/src/mage/cards/s/SphereOfAnnihilation.java +++ b/Mage.Sets/src/mage/cards/s/SphereOfAnnihilation.java @@ -56,7 +56,7 @@ class SphereOfAnnihilationEffect extends OneShotEffect { SphereOfAnnihilationEffect() { super(Outcome.Benefit); staticText = "exile {this}, all creatures and planeswalkers with mana value less than or equal to " + - "the number of void counters on it, and all creature and planeswalker cards in all graveyards " + + "the number of void counters on it, and all creature and planeswalker cards in graveyards " + "with mana value less than or equal to the number of void counters on it"; } diff --git a/Mage.Sets/src/mage/cards/t/TrickstersTalisman.java b/Mage.Sets/src/mage/cards/t/TrickstersTalisman.java index 785ae3d926e..f4576397fcd 100644 --- a/Mage.Sets/src/mage/cards/t/TrickstersTalisman.java +++ b/Mage.Sets/src/mage/cards/t/TrickstersTalisman.java @@ -31,7 +31,7 @@ public final class TrickstersTalisman extends CardImpl { // Equipped creature gets +1/+1 and has "Whenever this creature deals combat damage to a player, you may sacrifice Trickster's Talisman. If you do, create a token that's a copy of this creature." Ability ability = new SimpleStaticAbility(new BoostEquippedEffect(1, 1)); ability.addEffect(new TrickstersTalismanEffect()); - this.addAbility(ability); + this.addAbility(ability.withFlavorWord("Invoke Duplicity")); // Equip {2} this.addAbility(new EquipAbility(2)); diff --git a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java index 10020aac2d2..b6570834104 100644 --- a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java +++ b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java @@ -57,7 +57,7 @@ public class VerifyCardDataTest { private static final Logger logger = Logger.getLogger(VerifyCardDataTest.class); - private static final String FULL_ABILITIES_CHECK_SET_CODE = "AFC"; // check all abilities and output cards with wrong abilities texts; + private static final String FULL_ABILITIES_CHECK_SET_CODE = "AFR"; // 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 diff --git a/Mage/src/main/java/mage/abilities/effects/Effects.java b/Mage/src/main/java/mage/abilities/effects/Effects.java index ad3e4818653..2a6d8c05c77 100644 --- a/Mage/src/main/java/mage/abilities/effects/Effects.java +++ b/Mage/src/main/java/mage/abilities/effects/Effects.java @@ -62,7 +62,10 @@ public class Effects extends ArrayList { } //check if nextRule is a new sentence or not. - if (nextRule.startsWith("and ") || nextRule.startsWith("with ") || nextRule.startsWith("then ")) { + if (nextRule.startsWith("and ") + || nextRule.startsWith("with ") + || nextRule.startsWith("then ") + || nextRule.startsWith("or ")) { endString = " "; } else if (nextRule.startsWith(",") || nextRule.startsWith(" ")) { endString = ""; diff --git a/Mage/src/main/java/mage/abilities/effects/common/PhaseOutTargetEffect.java b/Mage/src/main/java/mage/abilities/effects/common/PhaseOutTargetEffect.java index 41d86f6f64e..2e5e3d6327d 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/PhaseOutTargetEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/PhaseOutTargetEffect.java @@ -1,6 +1,5 @@ package mage.abilities.effects.common; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.Mode; import mage.abilities.effects.OneShotEffect; @@ -9,8 +8,9 @@ import mage.game.Game; import mage.game.permanent.Permanent; import mage.target.Target; +import java.util.UUID; + /** - * * @author fireshoes */ public class PhaseOutTargetEffect extends OneShotEffect { @@ -73,7 +73,11 @@ public class PhaseOutTargetEffect extends OneShotEffect { } else { sb.append("Target ").append(mode.getTargets().get(0).getTargetName()); } - sb.append(" phases out"); + sb.append(" phase"); + if (mode.getTargets().get(0).getMaxNumberOfTargets() <= 1) { + sb.append('s'); + } + sb.append(" out"); return sb.toString(); } diff --git a/Mage/src/main/java/mage/abilities/effects/common/search/SearchLibraryGraveyardPutInHandEffect.java b/Mage/src/main/java/mage/abilities/effects/common/search/SearchLibraryGraveyardPutInHandEffect.java index c44cb611f34..21cd0a54688 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/search/SearchLibraryGraveyardPutInHandEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/search/SearchLibraryGraveyardPutInHandEffect.java @@ -35,7 +35,7 @@ public class SearchLibraryGraveyardPutInHandEffect extends OneShotEffect { this.filter = filter; this.forceToSearchBoth = forceToSearchBoth; staticText = (youMay ? "you may " : "") + "search your library and" + (forceToSearchBoth ? "" : "/or") + " graveyard for a card named " + filter.getMessage() - + ", reveal it, and put it into your hand. " + (forceToSearchBoth ? "Then shuffle" : "If you search your library this way, shuffle it"); + + ", reveal it, and put it into your hand. " + (forceToSearchBoth ? "Then shuffle" : "If you search your library this way, shuffle"); } public SearchLibraryGraveyardPutInHandEffect(final SearchLibraryGraveyardPutInHandEffect effect) { diff --git a/Mage/src/main/java/mage/game/permanent/token/IcingdeathFrostTongueToken.java b/Mage/src/main/java/mage/game/permanent/token/IcingdeathFrostTongueToken.java index 2c4e76b21a1..b1398e817c6 100644 --- a/Mage/src/main/java/mage/game/permanent/token/IcingdeathFrostTongueToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/IcingdeathFrostTongueToken.java @@ -30,7 +30,7 @@ public class IcingdeathFrostTongueToken extends TokenImpl { public IcingdeathFrostTongueToken() { super("Icingdeath, Frost Tongue", "Icingdeath, Frost Tongue, a legendary white " + - "Equipment artifact token with \"Equipped creature gets +2/+0\", " + + "Equipment artifact token with \"Equipped creature gets +2/+0,\" " + "\"Whenever equipped creature attacks, tap target creature " + "defending player controls,\" and equip {2}"); supertype.add(SuperType.LEGENDARY);