mirror of
https://github.com/correl/mage.git
synced 2024-11-15 03:00:16 +00:00
[NCC] various text fixes
This commit is contained in:
parent
fd16f2a16b
commit
b0ebf4ad5b
16 changed files with 61 additions and 49 deletions
|
@ -6,12 +6,8 @@ import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
|
|||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.costs.common.SacrificeSourceCost;
|
||||
import mage.abilities.costs.mana.GenericManaCost;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||
import mage.abilities.effects.common.GainLifeEffect;
|
||||
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
|
@ -21,9 +17,7 @@ import mage.constants.CardType;
|
|||
import mage.constants.Outcome;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.Zone;
|
||||
import mage.counters.Counter;
|
||||
import mage.counters.CounterType;
|
||||
import mage.counters.Counters;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
|
@ -43,17 +37,17 @@ public class AgentsToolkit extends CardImpl {
|
|||
|
||||
// Agent’s Toolkit enters the battlefield with a +1/+1 counter, a flying counter, a deathtouch counter, and a shield counter on it.
|
||||
Ability counterETBAbility = new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance(1)).setText("with a +1/+1 counter"));
|
||||
counterETBAbility.addEffect(new AddCountersSourceEffect(CounterType.FLYING.createInstance(1)).setText("a flying counter").concatBy(", "));
|
||||
counterETBAbility.addEffect(new AddCountersSourceEffect(CounterType.DEATHTOUCH.createInstance(1)).setText("a deathtouch counter").concatBy(", "));
|
||||
counterETBAbility.addEffect(new AddCountersSourceEffect(CounterType.SHIELD.createInstance(1)).setText("and a shield counter on it").concatBy(", "));
|
||||
counterETBAbility.addEffect(new AddCountersSourceEffect(CounterType.FLYING.createInstance(1)).setText("a flying counter").concatBy(","));
|
||||
counterETBAbility.addEffect(new AddCountersSourceEffect(CounterType.DEATHTOUCH.createInstance(1)).setText("a deathtouch counter").concatBy(","));
|
||||
counterETBAbility.addEffect(new AddCountersSourceEffect(CounterType.SHIELD.createInstance(1)).setText("and a shield counter on it").concatBy(","));
|
||||
this.addAbility(counterETBAbility);
|
||||
|
||||
// Whenever a creature enters the battlefield under your control,
|
||||
// you may move a counter from Agent’s Toolkit onto that creature.
|
||||
this.addAbility(new EntersBattlefieldControlledTriggeredAbility(
|
||||
new AgentToolkitMoveCounterEffect(),
|
||||
StaticFilters.FILTER_PERMANENT_CREATURE)
|
||||
);
|
||||
StaticFilters.FILTER_PERMANENT_A_CREATURE
|
||||
));
|
||||
|
||||
// {2}, Sacrifice Agent’s Toolkit: Draw a card.
|
||||
Ability drawAbility = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(1), new GenericManaCost(2));
|
||||
|
@ -75,7 +69,7 @@ class AgentToolkitMoveCounterEffect extends OneShotEffect {
|
|||
|
||||
public AgentToolkitMoveCounterEffect() {
|
||||
super(Outcome.Benefit);
|
||||
this.staticText = "you may move a counter from Agent's Toolkit onto that creature";
|
||||
this.staticText = "you may move a counter from {this} onto that creature";
|
||||
}
|
||||
|
||||
private AgentToolkitMoveCounterEffect(final AgentToolkitMoveCounterEffect effect) {
|
||||
|
|
|
@ -13,7 +13,9 @@ import mage.constants.*;
|
|||
import mage.counters.CounterType;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.filter.common.FilterCreaturePermanent;
|
||||
import mage.filter.predicate.mageobject.*;
|
||||
import mage.filter.predicate.mageobject.AnotherPredicate;
|
||||
import mage.filter.predicate.mageobject.BasePowerPredicate;
|
||||
import mage.filter.predicate.mageobject.BaseToughnessPredicate;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
|
@ -22,7 +24,7 @@ import java.util.UUID;
|
|||
*/
|
||||
public class BessSoulNourisher extends CardImpl {
|
||||
|
||||
static final FilterCreaturePermanent filter = new FilterCreaturePermanent("one or more other creatures with base power and toughness 1/1");
|
||||
static final FilterCreaturePermanent filter = new FilterCreaturePermanent("other creatures with base power and toughness 1/1");
|
||||
|
||||
static {
|
||||
filter.add(AnotherPredicate.instance);
|
||||
|
@ -49,12 +51,12 @@ public class BessSoulNourisher extends CardImpl {
|
|||
// Whenever Bess attacks, each other creature you control with base power and toughness 1/1 gets
|
||||
// +X/+X until end of turn, where X is the number of +1/+1 counters on Bess.
|
||||
DynamicValue xValue = new CountersSourceCount(CounterType.P1P1);
|
||||
this.addAbility(new AttacksTriggeredAbility(
|
||||
new BoostControlledEffect(xValue, xValue, Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURE, true),
|
||||
false,
|
||||
"whenever Bess attacks, each other creature you control with base power and toughness 1/1 " +
|
||||
"gets +X/+X until end of turn, where X is the number of +1/+1 counters on Bess")
|
||||
);
|
||||
this.addAbility(new AttacksTriggeredAbility(new BoostControlledEffect(
|
||||
xValue, xValue, Duration.EndOfTurn,
|
||||
StaticFilters.FILTER_PERMANENT_CREATURE, true
|
||||
).setText("each other creature you control with base power and toughness 1/1 " +
|
||||
"gets +X/+X until end of turn, where X is the number of +1/+1 counters on {this}"),
|
||||
false));
|
||||
}
|
||||
|
||||
private BessSoulNourisher(final BessSoulNourisher card) {
|
||||
|
|
|
@ -53,7 +53,7 @@ public final class CabarettiConfluence extends CardImpl {
|
|||
// • Creatures target player controls gets +1/+1 and gain first strike until end of turn.
|
||||
this.getSpellAbility().addMode(new Mode(new BoostAllEffect(
|
||||
1, 1, Duration.EndOfTurn, filter, false
|
||||
).setText("creatures target player controls gets +1/+1")).addEffect(new GainAbilityAllEffect(
|
||||
).setText("creatures target player controls get +1/+1")).addEffect(new GainAbilityAllEffect(
|
||||
FirstStrikeAbility.getInstance(), Duration.EndOfTurn, filter
|
||||
).setText("and gain first strike until end of turn")));
|
||||
}
|
||||
|
|
|
@ -18,8 +18,6 @@ import mage.filter.predicate.card.FaceDownPredicate;
|
|||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.players.Player;
|
||||
import mage.target.targetpointer.FixedTarget;
|
||||
import mage.util.CardUtil;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
|
@ -28,7 +26,8 @@ import java.util.UUID;
|
|||
*/
|
||||
public class CrypticPursuit extends CardImpl {
|
||||
|
||||
private static final FilterPermanent filterFaceDownPermanent = new FilterControlledCreaturePermanent("a face-down creature");
|
||||
private static final FilterPermanent filterFaceDownPermanent = new FilterControlledCreaturePermanent("a face-down creature you control");
|
||||
|
||||
static {
|
||||
filterFaceDownPermanent.add(FaceDownPredicate.instance);
|
||||
}
|
||||
|
@ -70,7 +69,7 @@ class CrypticPursuitExileAndPlayEffect extends OneShotEffect {
|
|||
CrypticPursuitExileAndPlayEffect() {
|
||||
super(Outcome.Benefit);
|
||||
this.staticText = "exile it if it's an instant or sorcery card. " +
|
||||
"You may cast that card until the end of your next turn.";
|
||||
"You may cast that card until the end of your next turn.";
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -104,4 +103,4 @@ class CrypticPursuitExileAndPlayEffect extends OneShotEffect {
|
|||
public Effect copy() {
|
||||
return new CrypticPursuitExileAndPlayEffect(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -70,7 +70,7 @@ public class MariTheKillingQuill extends CardImpl {
|
|||
Ability dealsDamageAbility = new DealsCombatDamageToAPlayerTriggeredAbility(new MariTheKillingQuillDealsDamageEffect(), false, true);
|
||||
Effect drawAndTreasureEffect = new GainAbilityControlledEffect(dealsDamageAbility, Duration.WhileOnBattlefield, filter);
|
||||
drawAndTreasureEffect.setText(
|
||||
"\"Whenever this creature deals combat damage to a player, you may remove a hit counter from a card taht player owns in exile. " +
|
||||
"\"Whenever this creature deals combat damage to a player, you may remove a hit counter from a card that player owns in exile. " +
|
||||
"If you do, draw a card and create two Treasure tokens.\"");
|
||||
drawAndTreasureEffect.concatBy("and");
|
||||
|
||||
|
|
|
@ -63,7 +63,7 @@ class MasterOfCeremoniesChoiceEffect extends OneShotEffect {
|
|||
super(Outcome.Benefit);
|
||||
this.staticText = "each opponent chooses money, friends, or secrets. " +
|
||||
"For each player who chose money, you and that player each create a Treasure token. " +
|
||||
"For each player who chose friends, you and that player each create a 1/1 green and white Citizen creature token. " +
|
||||
"For each player who chose friends, you and that player each create a 1/1 green and white Citizen creature token. " +
|
||||
"For each player who chose secrets, you and that player each draw a card.";
|
||||
}
|
||||
|
||||
|
|
|
@ -63,8 +63,8 @@ class NextOfKinDiesEffect extends OneShotEffect {
|
|||
|
||||
NextOfKinDiesEffect() {
|
||||
super(Outcome.Benefit);
|
||||
this.staticText = "you may put a creature card you own with lesser mana value from your hand or from the command zone onto the battlefield." +
|
||||
"If you do, return Next of Kin to the battlefield attached to that creature at the beginning of the next end step.";
|
||||
this.staticText = "you may put a creature card you own with lesser mana value from your hand or from the command zone onto the battlefield. " +
|
||||
"If you do, return {this} to the battlefield attached to that creature at the beginning of the next end step.";
|
||||
}
|
||||
|
||||
private NextOfKinDiesEffect(final NextOfKinDiesEffect effect) {
|
||||
|
|
|
@ -17,7 +17,6 @@ import mage.game.events.GameEvent;
|
|||
import mage.game.stack.Spell;
|
||||
import mage.players.Player;
|
||||
import mage.target.common.TargetOpponent;
|
||||
import mage.target.targetpointer.FixedTarget;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
|
@ -60,7 +59,7 @@ class ParnesseTheSubtleBrushCopySpellOpponentEffect extends OneShotEffect {
|
|||
ParnesseTheSubtleBrushCopySpellOpponentEffect() {
|
||||
super(Outcome.Detriment);
|
||||
this.staticText = "up to one target opponent may also copy that spell. " +
|
||||
"They may choose new targets for that copy";
|
||||
"They may choose new targets for that copy";
|
||||
}
|
||||
|
||||
ParnesseTheSubtleBrushCopySpellOpponentEffect(final ParnesseTheSubtleBrushCopySpellOpponentEffect effect) {
|
||||
|
@ -88,8 +87,9 @@ class ParnesseTheSubtleBrushCopySpellOpponentEffect extends OneShotEffect {
|
|||
class ParnesseTheSubtleBrushCopySpellTriggeredAbility extends TriggeredAbilityImpl {
|
||||
|
||||
ParnesseTheSubtleBrushCopySpellTriggeredAbility() {
|
||||
super(Zone.BATTLEFIELD, new ParnesseTheSubtleBrushCopySpellOpponentEffect(), true);
|
||||
super(Zone.BATTLEFIELD, new ParnesseTheSubtleBrushCopySpellOpponentEffect(), false);
|
||||
this.getTargets().add(new TargetOpponent(0, 1, false));
|
||||
setTriggerPhrase("Whenever you copy a spell, ");
|
||||
}
|
||||
|
||||
private ParnesseTheSubtleBrushCopySpellTriggeredAbility(final ParnesseTheSubtleBrushCopySpellTriggeredAbility ability) {
|
||||
|
|
|
@ -58,7 +58,7 @@ public final class PerrieThePulverizer extends CardImpl {
|
|||
.setText("target creature you control gains trample"));
|
||||
ability.addEffect(new BoostTargetEffect(
|
||||
PerrieThePulverizerValue.instance, PerrieThePulverizerValue.instance, Duration.EndOfTurn
|
||||
).setText("and gets +X/+X, where X is the number of different kinds of counters among permanents you control"));
|
||||
).setText("and gets +X/+X until end of turn, where X is the number of different kinds of counters among permanents you control"));
|
||||
ability.addTarget(new TargetControlledCreaturePermanent());
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
|
|
@ -28,7 +28,7 @@ import java.util.UUID;
|
|||
*/
|
||||
public class PhabineBosssConfidant extends CardImpl {
|
||||
|
||||
private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("Creature tokens you control");
|
||||
private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("Creature tokens");
|
||||
static {
|
||||
filter.add(TokenPredicate.TRUE);
|
||||
}
|
||||
|
|
|
@ -1,7 +1,10 @@
|
|||
package mage.cards.r;
|
||||
|
||||
import mage.abilities.Mode;
|
||||
import mage.abilities.effects.common.*;
|
||||
import mage.abilities.effects.common.DamageAllEffect;
|
||||
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||
import mage.abilities.effects.common.LoseLifeSourceControllerEffect;
|
||||
import mage.abilities.effects.common.PutCardFromOneOfTwoZonesOntoBattlefieldEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
|
@ -17,7 +20,7 @@ import java.util.UUID;
|
|||
*/
|
||||
public class RiveteersConfluence extends CardImpl {
|
||||
|
||||
private static final FilterPermanent damageFilter = new FilterCreatureOrPlaneswalkerPermanent();
|
||||
private static final FilterPermanent damageFilter = new FilterCreatureOrPlaneswalkerPermanent("creature and planeswalker you don’t control");
|
||||
|
||||
static {
|
||||
damageFilter.add(TargetController.NOT_YOU.getControllerPredicate());
|
||||
|
|
|
@ -7,7 +7,6 @@ import mage.abilities.TriggeredAbilityImpl;
|
|||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.condition.common.TreasureSpentToCastCondition;
|
||||
import mage.abilities.costs.common.TapSourceCost;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.dynamicvalue.DynamicValue;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.common.CreateTokenTargetEffect;
|
||||
|
@ -16,15 +15,18 @@ import mage.abilities.effects.common.counter.AddCountersTargetEffect;
|
|||
import mage.abilities.keyword.HasteAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.*;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.SuperType;
|
||||
import mage.constants.Zone;
|
||||
import mage.counters.CounterType;
|
||||
import mage.game.Game;
|
||||
import mage.game.events.GameEvent;
|
||||
import mage.game.permanent.token.TreasureToken;
|
||||
import mage.players.Player;
|
||||
import mage.target.common.TargetCreaturePermanent;
|
||||
import mage.target.common.TargetOpponent;
|
||||
import mage.watchers.common.CreatedTokenWatcher;
|
||||
import mage.watchers.common.ManaPaidSourceWatcher;
|
||||
|
||||
import java.util.Optional;
|
||||
import java.util.UUID;
|
||||
|
@ -54,10 +56,7 @@ public class VaziKeenNegotiator extends CardImpl {
|
|||
// if mana from a Treasure was spent to cast it or activate it,
|
||||
// put a +1/+1 counter on target creature,
|
||||
// then draw a card.
|
||||
Ability castAbility = new VaziKeenNegotiatorOpponentCastsOrActivatesTriggeredAbility();
|
||||
castAbility.addTarget(new TargetOpponent());
|
||||
castAbility.addEffect(new DrawCardSourceControllerEffect(1));
|
||||
this.addAbility(castAbility);
|
||||
this.addAbility(new VaziKeenNegotiatorOpponentCastsOrActivatesTriggeredAbility());
|
||||
}
|
||||
|
||||
private VaziKeenNegotiator(final VaziKeenNegotiator card) {
|
||||
|
@ -74,6 +73,8 @@ class VaziKeenNegotiatorOpponentCastsOrActivatesTriggeredAbility extends Trigger
|
|||
|
||||
VaziKeenNegotiatorOpponentCastsOrActivatesTriggeredAbility() {
|
||||
super(Zone.BATTLEFIELD, new AddCountersTargetEffect(CounterType.P1P1.createInstance()));
|
||||
addTarget(new TargetCreaturePermanent());
|
||||
addEffect(new DrawCardSourceControllerEffect(1).concatBy(", then"));
|
||||
setTriggerPhrase("Whenever an opponent casts a spell or activates an ability, if mana from a Treasure was spent to cast it or activate it, ");
|
||||
}
|
||||
|
||||
|
|
|
@ -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 = "DMC"; // 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
|
||||
|
||||
|
|
|
@ -36,6 +36,7 @@ public class SpellCastControllerTriggeredAbility extends TriggeredAbilityImpl {
|
|||
public SpellCastControllerTriggeredAbility(Effect effect, FilterSpell filter, boolean optional, Zone fromZone) {
|
||||
this(effect, filter, optional, false);
|
||||
this.fromZone = fromZone;
|
||||
makeTriggerPhrase();
|
||||
}
|
||||
|
||||
public SpellCastControllerTriggeredAbility(Effect effect, FilterSpell filter, boolean optional, String rule) {
|
||||
|
@ -56,7 +57,7 @@ public class SpellCastControllerTriggeredAbility extends TriggeredAbilityImpl {
|
|||
this.filter = filter;
|
||||
this.rememberSource = rememberSource;
|
||||
this.rememberSourceAsCard = rememberSourceAsCard;
|
||||
setTriggerPhrase("Whenever you cast " + filter.getMessage() + (fromZone != Zone.ALL ? "from your " + fromZone.toString().toLowerCase() : "") + ", ");
|
||||
makeTriggerPhrase();
|
||||
}
|
||||
|
||||
public SpellCastControllerTriggeredAbility(final SpellCastControllerTriggeredAbility ability) {
|
||||
|
@ -100,4 +101,8 @@ public class SpellCastControllerTriggeredAbility extends TriggeredAbilityImpl {
|
|||
public SpellCastControllerTriggeredAbility copy() {
|
||||
return new SpellCastControllerTriggeredAbility(this);
|
||||
}
|
||||
|
||||
private void makeTriggerPhrase() {
|
||||
setTriggerPhrase("Whenever you cast " + filter.getMessage() + (fromZone != Zone.ALL ? " from your " + fromZone.toString().toLowerCase() : "") + ", ");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -25,7 +25,7 @@ public class AddCounterChoiceSourceEffect extends OneShotEffect {
|
|||
|
||||
private final List<CounterType> counterTypes;
|
||||
|
||||
public AddCounterChoiceSourceEffect(CounterType ... counterTypes) {
|
||||
public AddCounterChoiceSourceEffect(CounterType... counterTypes) {
|
||||
super(Outcome.Benefit);
|
||||
this.counterTypes = Arrays.stream(counterTypes).collect(Collectors.toList());
|
||||
this.createStaticText();
|
||||
|
@ -48,7 +48,7 @@ public class AddCounterChoiceSourceEffect extends OneShotEffect {
|
|||
break;
|
||||
default:
|
||||
List<String> strings = this.counterTypes.stream().map(CounterType::toString).collect(Collectors.toList());
|
||||
this.staticText = CardUtil.concatWithOr(strings);
|
||||
this.staticText = "with your choice of a " + CardUtil.concatWithOr(strings) + " counter on it";
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -24,6 +24,7 @@ public class CasualtyAbility extends StaticAbility implements OptionalAdditional
|
|||
|
||||
private static final String keywordText = "Casualty";
|
||||
private final String promptString;
|
||||
private final String rule;
|
||||
|
||||
protected OptionalAdditionalCost additionalCost;
|
||||
|
||||
|
@ -39,9 +40,10 @@ public class CasualtyAbility extends StaticAbility implements OptionalAdditional
|
|||
super(Zone.STACK, null);
|
||||
String reminderText = "As you cast this spell, you may sacrifice a creature with power " +
|
||||
number + " or greater. When you do, copy this spell.";
|
||||
this.promptString = "Sacrifice a creature with power " + number + " or greater?";
|
||||
this.additionalCost = new OptionalAdditionalCostImpl(keywordText, reminderText, new SacrificeTargetCost(makeFilter(number)));
|
||||
this.additionalCost.setRepeatable(false);
|
||||
this.promptString = "Sacrifice a creature with power " + number + " or greater?";
|
||||
this.rule = additionalCost.getName() + ' ' + number + ' ' + additionalCost.getReminderText();
|
||||
this.setRuleAtTheTop(true);
|
||||
}
|
||||
|
||||
|
@ -49,6 +51,7 @@ public class CasualtyAbility extends StaticAbility implements OptionalAdditional
|
|||
super(ability);
|
||||
this.additionalCost = ability.additionalCost;
|
||||
this.promptString = ability.promptString;
|
||||
this.rule = ability.rule;
|
||||
}
|
||||
|
||||
public void resetCasualty() {
|
||||
|
@ -92,4 +95,9 @@ public class CasualtyAbility extends StaticAbility implements OptionalAdditional
|
|||
public String getCastMessageSuffix() {
|
||||
return additionalCost == null ? "" : additionalCost.getCastSuffixMessage(0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getRule() {
|
||||
return rule;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue