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);