[MOR] various text fixes

This commit is contained in:
Evan Kranzler 2022-03-08 08:33:09 -05:00
parent 8999a6e647
commit 6b72142ef2
19 changed files with 103 additions and 85 deletions

View file

@ -36,7 +36,7 @@ public final class CreamOfTheCrop extends CardImpl {
+ "you may look at the top X cards of your library, where X "
+ "is that creature's power. If you do, put one of those cards "
+ "on top of your library and the rest on the bottom of "
+ "your library in any order"));
+ "your library in any order."));
}
private CreamOfTheCrop(final CreamOfTheCrop card) {

View file

@ -85,7 +85,7 @@ class AddCounterAbility extends TriggeredAbilityImpl {
@Override
public String getRule() {
return "Whenever you cast a spell of the chosen type, put a charge counter on {this}";
return "Whenever you cast a spell of the chosen type, put a charge counter on {this}.";
}
}

View file

@ -24,7 +24,7 @@ import mage.target.common.TargetCardInYourGraveyard;
*/
public final class EverbarkShaman extends CardImpl {
private static final FilterCard filterForest = new FilterCard("Forest");
private static final FilterCard filterForest = new FilterCard("Forest cards");
private static final FilterCard filterTreefolk = new FilterCard("Treefolk card from your graveyard");
static {
@ -41,7 +41,7 @@ public final class EverbarkShaman extends CardImpl {
this.toughness = new MageInt(5);
// {T}, Exile a Treefolk card from your graveyard: Search your library for up to two Forest cards and put them onto the battlefield tapped. Then shuffle your library.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(2, filterForest), true, Outcome.PutLandInPlay), new TapSourceCost());
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(0, 2, filterForest), true, Outcome.PutLandInPlay), new TapSourceCost());
ability.addCost(new ExileFromGraveCost(new TargetCardInYourGraveyard(filterTreefolk)));
this.addAbility(ability);
}

View file

@ -1,4 +1,3 @@
package mage.cards.f;
import mage.MageInt;
@ -11,10 +10,9 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.SubType;
import mage.constants.Zone;
import mage.filter.common.FilterLandPermanent;
import mage.filter.FilterPermanent;
import mage.game.permanent.token.custom.CreatureToken;
import mage.target.common.TargetLandPermanent;
import mage.target.TargetPermanent;
import java.util.UUID;
@ -23,11 +21,7 @@ import java.util.UUID;
*/
public final class FendeepSummoner extends CardImpl {
static final FilterLandPermanent filter = new FilterLandPermanent("Swamp");
static {
filter.add(SubType.SWAMP.getPredicate());
}
static final FilterPermanent filter = new FilterPermanent(SubType.SWAMP, "Swamps");
public FendeepSummoner(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{B}");
@ -38,10 +32,11 @@ public final class FendeepSummoner extends CardImpl {
this.toughness = new MageInt(5);
// {T}: Up to two target Swamps each become 3/5 Treefolk Warrior creatures in addition to their other types until end of turn.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BecomesCreatureTargetEffect(
new CreatureToken(3, 5, "3/5 Treefolk Warrior", SubType.TREEFOLK, SubType.WARRIOR),
false, false, Duration.EndOfTurn), new TapSourceCost());
ability.addTarget(new TargetLandPermanent(0, 2, filter, false));
Ability ability = new SimpleActivatedAbility(new BecomesCreatureTargetEffect(new CreatureToken(
3, 5, "3/5 Treefolk Warrior creatures " +
"in addition to their other types", SubType.TREEFOLK, SubType.WARRIOR
), false, false, Duration.EndOfTurn), new TapSourceCost());
ability.addTarget(new TargetPermanent(0, 2, filter));
this.addAbility(ability);
}

View file

@ -1,7 +1,6 @@
package mage.cards.f;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldAbility;
@ -13,18 +12,25 @@ import mage.abilities.effects.common.counter.AddCountersSourceEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Duration;
import mage.constants.Zone;
import mage.constants.SubType;
import mage.counters.CounterType;
import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.mageobject.AnotherPredicate;
import java.util.UUID;
/**
*
* @author Loki
*/
public final class Festercreep extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("all other creatures");
static {
filter.add(AnotherPredicate.instance);
}
public Festercreep(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{B}");
this.subtype.add(SubType.ELEMENTAL);
@ -33,10 +39,12 @@ public final class Festercreep extends CardImpl {
this.toughness = new MageInt(0);
// Festercreep enters the battlefield with a +1/+1 counter on it.
this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance(1))));
this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance(1)), "with a +1/+1 counter on it"));
// {1}{B}, Remove a +1/+1 counter from Festercreep: All other creatures get -1/-1 until end of turn.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostAllEffect(-1, -1, Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURE, true), new ManaCostsImpl("{1}{B}"));
Ability ability = new SimpleActivatedAbility(new BoostAllEffect(
-1, -1, Duration.EndOfTurn, filter, false
), new ManaCostsImpl<>("{1}{B}"));
ability.addCost(new RemoveCountersSourceCost(CounterType.P1P1.createInstance(1)));
this.addAbility(ability);
}

View file

@ -36,7 +36,7 @@ public final class Floodchaser extends CardImpl {
this.toughness = new MageInt(0);
// Floodchaser enters the battlefield with six +1/+1 counters on it.
this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance(6)), "{this} enters the battlefield with six +1/+1 counters on it"));
this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance(6)), "with six +1/+1 counters on it"));
// Floodchaser can't attack unless defending player controls an Island.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new CantAttackUnlessDefenderControllsPermanent(new FilterLandPermanent(SubType.ISLAND,"an Island"))));

View file

@ -1,7 +1,5 @@
package mage.cards.g;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
@ -13,27 +11,35 @@ import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.effects.common.continuous.GainControlTargetEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.*;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.Outcome;
import mage.constants.SubType;
import mage.filter.FilterSpell;
import mage.filter.StaticFilters;
import mage.filter.common.FilterControlledCreaturePermanent;
import mage.filter.common.FilterControlledPermanent;
import mage.filter.predicate.permanent.TappedPredicate;
import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.players.Player;
import mage.target.TargetPlayer;
import mage.target.common.TargetControlledCreaturePermanent;
import mage.target.common.TargetControlledPermanent;
import mage.target.targetpointer.FixedTarget;
import java.util.UUID;
/**
*
* @author Plopman
*/
public final class GiltLeafArchdruid extends CardImpl {
private static final FilterSpell filterSpell = new FilterSpell("a Druid spell");
private static final FilterSpell filter = new FilterSpell("a Druid spell");
private static final FilterControlledPermanent filter2
= new FilterControlledPermanent(SubType.DRUID, "untapped Druids you control");
static {
filterSpell.add(SubType.DRUID.getPredicate());
filter.add(SubType.DRUID.getPredicate());
filter2.add(TappedPredicate.UNTAPPED);
}
public GiltLeafArchdruid(UUID ownerId, CardSetInfo setInfo) {
@ -45,10 +51,15 @@ public final class GiltLeafArchdruid extends CardImpl {
this.toughness = new MageInt(3);
// Whenever you cast a Druid spell, you may draw a card.
this.addAbility(new SpellCastControllerTriggeredAbility(new DrawCardSourceControllerEffect(1), filterSpell, true));
this.addAbility(new SpellCastControllerTriggeredAbility(
new DrawCardSourceControllerEffect(1), filter, true
));
// Tap seven untapped Druids you control: Gain control of all lands target player controls.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new GiltLeafArchdruidEffect(), new TapTargetCost(new TargetControlledCreaturePermanent(7, 7, new FilterControlledCreaturePermanent(SubType.DRUID, "Druids you control"), true)));
Ability ability = new SimpleActivatedAbility(
new GiltLeafArchdruidEffect(),
new TapTargetCost(new TargetControlledPermanent(7, filter2))
);
ability.addTarget(new TargetPlayer());
this.addAbility(ability);
}

View file

@ -120,7 +120,7 @@ class GrimoireThiefLookEffect extends AsThoughEffectImpl {
public GrimoireThiefLookEffect() {
super(AsThoughEffectType.LOOK_AT_FACE_DOWN, Duration.EndOfGame, Outcome.Benefit);
staticText = "You may look at the cards exiled with {this}";
staticText = "You may look at cards exiled with {this}";
}
public GrimoireThiefLookEffect(final GrimoireThiefLookEffect effect) {

View file

@ -79,7 +79,7 @@ class AllCountersCount implements DynamicValue {
@Override
public String getMessage() {
return "for each counter on it";
return "counter on it";
}
@Override

View file

@ -28,7 +28,7 @@ import mage.target.common.TargetCardInHand;
*/
public final class PrimalBeyond extends CardImpl {
private static final FilterCard filter = new FilterCard("a Elemental card from your hand");
private static final FilterCard filter = new FilterCard("an Elemental card from your hand");
static {
filter.add(SubType.ELEMENTAL.getPredicate());
@ -38,7 +38,7 @@ public final class PrimalBeyond extends CardImpl {
super(ownerId,setInfo,new CardType[]{CardType.LAND},"");
// As Primal Beyond enters the battlefield, you may reveal an Elemental card from your hand. If you don't, Primal Beyond enters the battlefield tapped.
this.addAbility(new AsEntersBattlefieldAbility(new TapSourceUnlessPaysEffect(new RevealTargetFromHandCost(new TargetCardInHand(filter))), "you may reveal a Elemental card from your hand. If you don't, {this} enters the battlefield tapped"));
this.addAbility(new AsEntersBattlefieldAbility(new TapSourceUnlessPaysEffect(new RevealTargetFromHandCost(new TargetCardInHand(filter))), "you may reveal an Elemental card from your hand. If you don't, {this} enters the battlefield tapped"));
// {tap}: Add {C}.
this.addAbility(new ColorlessManaAbility());
// {tap}: Add one mana of any color. Spend this mana only to cast an Elemental spell or activate an ability of an Elemental.
@ -65,7 +65,7 @@ class PrimalBeyondManaBuilder extends ConditionalManaBuilder {
@Override
public String getRule() {
return "Spend this mana only to cast Elemental spells or activate abilities of Elementals";
return "Spend this mana only to cast an Elemental spell or activate an ability of an Elemental";
}
}
@ -73,7 +73,7 @@ class PrimalBeyondConditionalMana extends ConditionalMana {
public PrimalBeyondConditionalMana(Mana mana) {
super(mana);
this.staticText = "Spend this mana only to cast Elemental spells or activate abilities of Elementals";
this.staticText = "Spend this mana only to cast an Elemental spell or activate an ability of an Elemental";
addCondition(new PrimalBeyondManaCondition());
}
}

View file

@ -45,7 +45,7 @@ class ScapeshiftEffect extends OneShotEffect {
public ScapeshiftEffect() {
super(Outcome.Neutral);
staticText = "Sacrifice any number of lands. Search your library for that many land cards, put them onto the battlefield tapped, then shuffle";
staticText = "Sacrifice any number of lands. Search your library for up to that many land cards, put them onto the battlefield tapped, then shuffle";
}
public ScapeshiftEffect(final ScapeshiftEffect effect) {

View file

@ -1,7 +1,5 @@
package mage.cards.s;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
@ -14,31 +12,32 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.SubType;
import mage.constants.Zone;
import mage.filter.common.FilterControlledCreaturePermanent;
import mage.target.common.TargetControlledCreaturePermanent;
import mage.filter.common.FilterControlledPermanent;
import mage.target.common.TargetControlledPermanent;
import java.util.UUID;
/**
*
* @author Loki
*/
public final class SeethingPathblazer extends CardImpl {
private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("Elemental");
static {
filter.add(SubType.ELEMENTAL.getPredicate());
}
private static final FilterControlledPermanent filter = new FilterControlledCreaturePermanent(SubType.ELEMENTAL, "Elemental");
public SeethingPathblazer(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{R}");
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{R}");
this.subtype.add(SubType.ELEMENTAL);
this.subtype.add(SubType.WARRIOR);
this.power = new MageInt(2);
this.toughness = new MageInt(2);
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(2, 0, Duration.EndOfTurn), new SacrificeTargetCost(new TargetControlledCreaturePermanent(1, 1, filter, false)));
ability.addEffect(new GainAbilitySourceEffect(FirstStrikeAbility.getInstance(), Duration.EndOfTurn));
Ability ability = new SimpleActivatedAbility(new BoostSourceEffect(
2, 0, Duration.EndOfTurn
).setText("{this} gets +2/+0"), new SacrificeTargetCost(new TargetControlledPermanent(filter)));
ability.addEffect(new GainAbilitySourceEffect(
FirstStrikeAbility.getInstance(), Duration.EndOfTurn
).setText("and gains first strike until end of turn"));
this.addAbility(ability);
}

View file

@ -36,10 +36,10 @@ public final class Shinewend extends CardImpl {
this.addAbility(FlyingAbility.getInstance());
// Shinewend enters the battlefield with a +1/+1 counter on it.
this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance(1))));
this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance(1)), "with a +1/+1 counter on it"));
// {1}{W}, Remove a +1/+1 counter from Shinewend: Destroy target enchantment.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DestroyTargetEffect(), new ManaCostsImpl("{1}{W}"));
Ability ability = new SimpleActivatedAbility( new DestroyTargetEffect(), new ManaCostsImpl<>("{1}{W}"));
ability.addCost(new RemoveCountersSourceCost(CounterType.P1P1.createInstance(1)));
ability.addTarget(new TargetEnchantmentPermanent());
this.addAbility(ability);

View file

@ -1,9 +1,8 @@
package mage.cards.s;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.BeginningOfEndStepTriggeredAbility;
import mage.abilities.condition.Condition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.effects.common.SacrificeSourceEffect;
import mage.abilities.keyword.FlyingAbility;
@ -12,14 +11,21 @@ import mage.cards.CardSetInfo;
import mage.constants.*;
import mage.filter.common.FilterControlledCreaturePermanent;
import java.util.UUID;
/**
*
* @author emerald000
*/
public final class Stenchskipper extends CardImpl {
private static final Condition condition = new PermanentsOnTheBattlefieldCondition(
new FilterControlledCreaturePermanent(
SubType.GOBLIN, "if you control no Goblins"
), ComparisonType.FEWER_THAN, 1
);
public Stenchskipper(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{B}");
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{B}");
this.subtype.add(SubType.ELEMENTAL);
this.power = new MageInt(6);
this.toughness = new MageInt(5);
@ -29,14 +35,9 @@ public final class Stenchskipper extends CardImpl {
// At the beginning of the end step, if you control no Goblins, sacrifice Stenchskipper.
this.addAbility(new BeginningOfEndStepTriggeredAbility(
Zone.BATTLEFIELD,
new SacrificeSourceEffect(),
TargetController.ANY,
new PermanentsOnTheBattlefieldCondition(
new FilterControlledCreaturePermanent(SubType.GOBLIN, "if you control no Goblins"),
ComparisonType.FEWER_THAN,
1),
false));
Zone.BATTLEFIELD, new SacrificeSourceEffect(),
TargetController.NEXT, condition, false
));
}
private Stenchskipper(final Stenchskipper card) {

View file

@ -1,7 +1,5 @@
package mage.cards.w;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.abilityword.KinshipAbility;
import mage.abilities.effects.common.continuous.GainAbilityControlledEffect;
@ -9,18 +7,19 @@ import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Duration;
import mage.filter.common.FilterCreaturePermanent;
import mage.constants.SubType;
import mage.filter.StaticFilters;
import java.util.UUID;
/**
*
* @author LevelX2
*/
public final class WaterspoutWeavers extends CardImpl {
public WaterspoutWeavers(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{U}{U}");
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{U}{U}");
this.subtype.add(SubType.MERFOLK);
this.subtype.add(SubType.WIZARD);
@ -29,7 +28,10 @@ public final class WaterspoutWeavers extends CardImpl {
// Kinship - At the beginning of your upkeep, you may look at the top card of your library. If it shares a creature type with Waterspout Weavers, you may reveal it.
// If you do, each creature you control gains flying until end of turn.
this.addAbility(new KinshipAbility(new GainAbilityControlledEffect(FlyingAbility.getInstance(), Duration.EndOfTurn, new FilterCreaturePermanent())));
this.addAbility(new KinshipAbility(new GainAbilityControlledEffect(
FlyingAbility.getInstance(), Duration.EndOfTurn,
StaticFilters.FILTER_PERMANENT_CREATURE
).setText("each creature you control gains flying until end of turn")));
}
private WaterspoutWeavers(final WaterspoutWeavers card) {

View file

@ -62,7 +62,7 @@ public class VerifyCardDataTest {
private static final Logger logger = Logger.getLogger(VerifyCardDataTest.class);
private static final String FULL_ABILITIES_CHECK_SET_CODE = "SHM"; // check all abilities and output cards with wrong abilities texts;
private static final String FULL_ABILITIES_CHECK_SET_CODE = "MOR"; // 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

View file

@ -32,7 +32,7 @@ public enum ProwlCostWasPaidCondition implements Condition {
@Override
public String toString() {
return "{this}'s prowl cost was paid";
return "this spell's prowl cost was paid";
}
}

View file

@ -13,7 +13,6 @@ import mage.game.permanent.Permanent;
import mage.util.CardUtil;
/**
*
* @author emerald000
*/
@ -47,8 +46,7 @@ public class CanBlockAdditionalCreatureAllEffect extends ContinuousEffectImpl {
// maxBlocks = 0 equals to "can block any number of creatures"
if (amount > 0) {
permanent.setMaxBlocks(permanent.getMaxBlocks() + amount);
}
else {
} else {
permanent.setMaxBlocks(0);
}
}
@ -64,12 +62,16 @@ public class CanBlockAdditionalCreatureAllEffect extends ContinuousEffectImpl {
private String setText() {
StringBuilder sb = new StringBuilder(filter.getMessage());
sb.append(" can block ");
switch(amount) {
switch (amount) {
case 0:
sb.append("any number of creatures");
break;
case 1:
sb.append("an additional creature each combat");
break;
default:
sb.append(CardUtil.numberToText(amount, "an")).append(" additional creature").append(amount > 1 ? "s" : "");
sb.append(CardUtil.numberToText(amount));
sb.append(" additional creatures");
}
return sb.toString();
}