[NCC] various text fixes

This commit is contained in:
Evan Kranzler 2022-04-30 07:58:09 -04:00
parent faf806ef7d
commit f73f3c502f
22 changed files with 48 additions and 42 deletions

View file

@ -25,7 +25,7 @@ public final class AssembleTheLegion extends CardImpl {
// At the beginning of your upkeep, put a muster counter on Assemble the Legion. Then create a 1/1 red and white Soldier creature token with haste for each muster counter on Assemble the Legion.
Ability ability = new BeginningOfUpkeepTriggeredAbility(new AddCountersSourceEffect(CounterType.MUSTER.createInstance()), TargetController.YOU, false);
ability.addEffect(new CreateTokenEffect(new SoldierTokenWithHaste(), new CountersSourceCount(CounterType.MUSTER)));
ability.addEffect(new CreateTokenEffect(new SoldierTokenWithHaste(), new CountersSourceCount(CounterType.MUSTER)).concatBy("Then"));
this.addAbility(ability);
}

View file

@ -16,6 +16,7 @@ import mage.constants.Outcome;
import mage.constants.WatcherScope;
import mage.constants.Zone;
import mage.filter.FilterPermanent;
import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.ObjectSourcePlayer;
import mage.filter.predicate.ObjectSourcePlayerPredicate;
@ -47,7 +48,9 @@ public final class BoxingRing extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{1}{G}");
// Whenever a creature enters the battlefield under your control, it fights up to one target creature you don't control with the same mana value.
Ability ability = new EntersBattlefieldControlledTriggeredAbility(new BoxingRingFightEffect(), filter);
Ability ability = new EntersBattlefieldControlledTriggeredAbility(
new BoxingRingFightEffect(), StaticFilters.FILTER_PERMANENT_A_CREATURE
);
ability.addTarget(new TargetPermanent(0, 1, filter));
this.addAbility(ability);

View file

@ -53,7 +53,7 @@ class CallTheCoppercoatsEffect extends OneShotEffect {
CallTheCoppercoatsEffect() {
super(Outcome.Benefit);
staticText = "Choose any number of target opponents. Create X 1/1 white Human soldier creature tokens, " +
staticText = "Choose any number of target opponents. Create X 1/1 white Human Soldier creature tokens, " +
"where X is the number of creatures those opponents control.";
}

View file

@ -70,7 +70,7 @@ class CephalidFacetakerEffect extends OneShotEffect {
CephalidFacetakerEffect() {
super(Outcome.Benefit);
staticText = "you may have {this} become a copy of another target creature until end of turn, " +
"except its a 1/4 and has \"This creature can't be blocked.\"";
"except it's 1/4 and has \"This creature can't be blocked.\"";
}
private CephalidFacetakerEffect(final CephalidFacetakerEffect effect) {

View file

@ -60,7 +60,7 @@ class DaxosOfMeletisEffect extends OneShotEffect {
public DaxosOfMeletisEffect() {
super(Outcome.PutCreatureInPlay);
this.staticText = "exile the top card of that player's library. You gain life equal to that card's mana value. Until end of turn, you may cast that card and you may spend mana as though it were mana of any color to cast it";
this.staticText = "exile the top card of that player's library. You gain life equal to that card's mana value. Until end of turn, you may cast that card and you may spend mana as though it were mana of any color to cast that spell";
}
public DaxosOfMeletisEffect(final DaxosOfMeletisEffect effect) {

View file

@ -1,21 +1,14 @@
package mage.cards.d;
import java.util.Set;
import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.effects.Effect;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.DestroyAllEffect;
import mage.abilities.keyword.AftermathAbility;
import mage.cards.Card;
import mage.cards.CardSetInfo;
import mage.cards.SplitCard;
import mage.constants.CardType;
import mage.constants.ComparisonType;
import mage.constants.Outcome;
import mage.constants.SpellAbilityType;
import mage.constants.Zone;
import mage.constants.*;
import mage.filter.FilterCard;
import mage.filter.common.FilterCreatureCard;
import mage.filter.common.FilterCreaturePermanent;
@ -23,9 +16,12 @@ import mage.filter.predicate.mageobject.PowerPredicate;
import mage.game.Game;
import mage.players.Player;
import java.util.Set;
import java.util.UUID;
public final class DuskDawn extends SplitCard {
private static final FilterCreaturePermanent filterCreatures3orGreater = new FilterCreaturePermanent("creatures with power greater than or equal to 3");
private static final FilterCreaturePermanent filterCreatures3orGreater = new FilterCreaturePermanent("creatures with power 3 or greater");
static {
filterCreatures3orGreater.add(new PowerPredicate(ComparisonType.MORE_THAN, 2));
@ -36,15 +32,12 @@ public final class DuskDawn extends SplitCard {
// Dusk
// Destroy all creatures with power 3 or greater.
Effect destroy = new DestroyAllEffect(filterCreatures3orGreater);
destroy.setText("Destroy all creatures with power greater than or equal to 3.");
getLeftHalfCard().getSpellAbility().addEffect(destroy);
getLeftHalfCard().getSpellAbility().addEffect(new DestroyAllEffect(filterCreatures3orGreater));
// Dawn
// Return all creature cards with power less than or equal to 2 from your graveyard to your hand.
getRightHalfCard().addAbility(new AftermathAbility().setRuleAtTheTop(true));
getRightHalfCard().getSpellAbility().addEffect(new DawnEffect());
}
private DuskDawn(final DuskDawn card) {

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.DiesSourceTriggeredAbility;
@ -15,8 +13,9 @@ import mage.constants.CardType;
import mage.constants.SubType;
import mage.target.common.TargetCardInYourGraveyard;
import java.util.UUID;
/**
*
* @author fireshoes
*/
public final class GreenwardenOfMurasa extends CardImpl {
@ -33,8 +32,9 @@ public final class GreenwardenOfMurasa extends CardImpl {
this.addAbility(ability);
// When Greenwarden of Murasa dies, you may exile it. If you do, return target card from your graveyard to your hand.
ability = new DiesSourceTriggeredAbility(new DoIfCostPaid(new ReturnFromGraveyardToHandTargetEffect(), new ExileSourceFromGraveCost(),
"Exile {this} and return target card from your graveyard to your hand?", true), false);
ability = new DiesSourceTriggeredAbility(new DoIfCostPaid(
new ReturnFromGraveyardToHandTargetEffect(), new ExileSourceFromGraveCost().setText("exile it")
), false);
ability.addTarget(new TargetCardInYourGraveyard());
this.addAbility(ability);
}
@ -47,4 +47,4 @@ public final class GreenwardenOfMurasa extends CardImpl {
public GreenwardenOfMurasa copy() {
return new GreenwardenOfMurasa(this);
}
}
}

View file

@ -55,7 +55,7 @@ class GrimeGorgerEffect extends OneShotEffect {
GrimeGorgerEffect() {
super(Outcome.Benefit);
staticText = "exile up to one card of each card type from defending player's graveyard. " +
"Put a +1/+1 on {this} for each card exiled this way";
"Put a +1/+1 counter on {this} for each card exiled this way";
}
private GrimeGorgerEffect(final GrimeGorgerEffect effect) {

View file

@ -7,6 +7,7 @@ import mage.abilities.dynamicvalue.DynamicValue;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.CreateDelayedTriggeredAbilityEffect;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.keyword.AftermathAbility;
import mage.cards.CardSetInfo;
import mage.cards.SplitCard;
import mage.constants.CardType;
@ -44,6 +45,7 @@ public final class IndulgeExcess extends SplitCard {
// Excess
// Aftermath
// Create a Treasure token for each creature you controlled that dealt combat damage to a player this turn.
this.getRightHalfCard().addAbility(new AftermathAbility().setRuleAtTheTop(true));
this.getRightHalfCard().getSpellAbility().addEffect(
new CreateTokenEffect(new TreasureToken(), ExcessValue.instance)
);

View file

@ -34,9 +34,9 @@ public final class KillerService extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{G}");
// When Killer Service enters the battlefield, create a number of Food tokens equal to the number of opponents you have.
this.addAbility(new EntersBattlefieldTriggeredAbility(
new CreateTokenEffect(new FoodToken(), OpponentsCount.instance)
));
this.addAbility(new EntersBattlefieldTriggeredAbility(new CreateTokenEffect(
new FoodToken(), OpponentsCount.instance
).setText("create a number of Food tokens equal to the number of opponents you have")));
// At the beginning of your end step, you may pay {2} and sacrifice a token. If you do, create a 4/4 green Rhino Warrior creature token.
this.addAbility(new BeginningOfEndStepTriggeredAbility(

View file

@ -20,7 +20,7 @@ import java.util.UUID;
*/
public final class LifeInsurance extends CardImpl {
private static final FilterPermanent filter = new FilterCreaturePermanent("nontoken creature");
private static final FilterPermanent filter = new FilterCreaturePermanent("a nontoken creature");
static {
filter.add(TokenPredicate.FALSE);

View file

@ -6,6 +6,7 @@ import mage.abilities.common.AttacksTriggeredAbility;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
import mage.abilities.dynamicvalue.common.CreaturesYouControlCount;
import mage.abilities.dynamicvalue.common.StaticValue;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.CreateTokenCopyTargetEffect;
import mage.abilities.effects.common.combat.GoadTargetEffect;
@ -51,7 +52,8 @@ public final class LifeOfTheParty extends CardImpl {
// Whenever Life of the Party attacks, it gets +X/+0 until end of turn, where X is the number of creatures you control.
this.addAbility(new AttacksTriggeredAbility(new BoostSourceEffect(
CreaturesYouControlCount.instance, CreaturesYouControlCount.instance, Duration.EndOfTurn
CreaturesYouControlCount.instance, StaticValue.get(0),
Duration.EndOfTurn, true, "it"
)));
// When Life of the Party enters the battlefield, if it's not a token, each opponent creates a token that's a copy of it. The tokens are goaded for the rest of the game.

View file

@ -47,7 +47,7 @@ public final class ObscuraConfluence extends CardImpl {
this.getSpellAbility().addMode(new Mode(new ObscuraConfluenceConniveEffect()).addTarget(new TargetCreaturePermanent()));
// Target player returns a creature card from their graveyard to their hand.
this.getSpellAbility().addMode(new Mode(new ObscuraConfluenceConniveEffect()).addTarget(new TargetPlayer()));
this.getSpellAbility().addMode(new Mode(new ObscuraConfluenceReturnEffect()).addTarget(new TargetPlayer()));
}
private ObscuraConfluence(final ObscuraConfluence card) {
@ -64,7 +64,7 @@ class ObscuraConfluenceConniveEffect extends OneShotEffect {
ObscuraConfluenceConniveEffect() {
super(Outcome.Benefit);
staticText = "target creature connives <i>(Draw a card, then discard a card. " +
staticText = "target creature connives. <i>(Draw a card, then discard a card. " +
"If you discarded a nonland card, put a +1/+1 counter on that creature.)</i>";
}

View file

@ -47,7 +47,7 @@ class ProtectionRacketEffect extends OneShotEffect {
ProtectionRacketEffect() {
super(Outcome.Benefit);
staticText = "repeat the following process for each opponent in turn order. " +
"Reveal the top card of your library. That player pay pay life equal to that card's mana value. " +
"Reveal the top card of your library. That player may pay life equal to that card's mana value. " +
"If they do, exile that card. Otherwise, put it into your hand";
}

View file

@ -5,7 +5,7 @@ import mage.abilities.common.DealsDamageToAPlayerAttachedTriggeredAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.dynamicvalue.common.SavedDamageValue;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.continuous.BoostEnchantedEffect;
import mage.abilities.effects.common.continuous.BoostEquippedEffect;
import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect;
import mage.abilities.keyword.EquipAbility;
import mage.abilities.keyword.TrampleAbility;
@ -29,7 +29,7 @@ public final class ScepterOfCelebration extends CardImpl {
this.subtype.add(SubType.EQUIPMENT);
// Equipped creature gets +2/+0 and has trample.
Ability ability = new SimpleStaticAbility(new BoostEnchantedEffect(2, 0));
Ability ability = new SimpleStaticAbility(new BoostEquippedEffect(2, 0));
ability.addEffect(new GainAbilityAttachedEffect(
TrampleAbility.getInstance(), AttachmentType.EQUIPMENT
).setText("and has trample"));

View file

@ -8,6 +8,7 @@ import mage.abilities.keyword.EncoreAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.SubType;
import mage.filter.FilterCard;
import mage.filter.predicate.Predicates;
@ -19,7 +20,7 @@ import java.util.UUID;
*/
public final class SpellbindingSoprano extends CardImpl {
private static final FilterCard filter = new FilterCard("Instant and sorcery spells");
private static final FilterCard filter = new FilterCard("instant and sorcery spells");
static {
filter.add(Predicates.or(
@ -37,7 +38,7 @@ public final class SpellbindingSoprano extends CardImpl {
this.toughness = new MageInt(2);
// Whenever Spellbinding Soprano attacks, instant and sorcery spells you cast this turn cost {1} less to cast.
this.addAbility(new AttacksTriggeredAbility(new SpellsCostReductionControllerEffect(filter, 1)));
this.addAbility(new AttacksTriggeredAbility(new SpellsCostReductionControllerEffect(filter, 1).setDuration(Duration.EndOfTurn)));
// Encore {3}{R}
this.addAbility(new EncoreAbility(new ManaCostsImpl<>("{3}{R}")));

View file

@ -83,6 +83,11 @@ enum ViviensStampedeValue implements DynamicValue {
public String getMessage() {
return "player who was dealt combat damage this turn";
}
@Override
public String toString() {
return "1";
}
}
class ViviensStampedeWatcher extends Watcher {

View file

@ -68,7 +68,7 @@ class VorelOfTheHullCladeEffect extends OneShotEffect {
public VorelOfTheHullCladeEffect() {
super(Outcome.Benefit);
staticText = "For each counter on target artifact, creature, or land, put another of those counters on that permanent";
staticText = "double the number of each kind of counter on target artifact, creature, or land";
}
public VorelOfTheHullCladeEffect(VorelOfTheHullCladeEffect effect) {

View file

@ -53,7 +53,7 @@ class WorldShaperEffect extends OneShotEffect {
public WorldShaperEffect() {
super(Outcome.PutLandInPlay);
this.staticText = "put all land cards from your graveyard onto the battlefield tapped";
this.staticText = "return all land cards from your graveyard to the battlefield tapped";
}
public WorldShaperEffect(final WorldShaperEffect effect) {

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 = "SNC"; // check all abilities and output cards with wrong abilities texts;
private static final String FULL_ABILITIES_CHECK_SET_CODE = "NCC"; // 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

@ -107,7 +107,7 @@ public class AtTheBeginOfMainPhaseDelayedTriggeredAbility extends DelayedTrigger
}
@Override
public String getRule() {
public String getTriggerPhrase() {
switch (targetController) {
case YOU:
return "At the beginning of your " + phaseSelection + ", ";

View file

@ -14,7 +14,7 @@ import mage.abilities.effects.common.CreateTokenEffect;
public final class Ooze2Token extends TokenImpl {
public Ooze2Token() {
super("Ooze Token", "2/2 green Ooze creature tokens with \"When this creature is put into a graveyard, create two 1/1 green Ooze creature tokens.\"");
super("Ooze Token", "2/2 green Ooze creature token. It has \"When this creature dies, create two 1/1 green Ooze creature tokens.\"");
cardType.add(CardType.CREATURE);
subtype.add(SubType.OOZE);
color.setGreen(true);