[NCC] various text fixes

This commit is contained in:
Evan Kranzler 2022-09-22 22:29:39 -04:00
parent fd16f2a16b
commit b0ebf4ad5b
16 changed files with 61 additions and 49 deletions

View file

@ -6,12 +6,8 @@ import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.SacrificeSourceCost; import mage.abilities.costs.common.SacrificeSourceCost;
import mage.abilities.costs.mana.GenericManaCost; 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.OneShotEffect;
import mage.abilities.effects.common.DrawCardSourceControllerEffect; import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.effects.common.GainLifeEffect;
import mage.abilities.effects.common.counter.AddCountersSourceEffect; import mage.abilities.effects.common.counter.AddCountersSourceEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
@ -21,9 +17,7 @@ import mage.constants.CardType;
import mage.constants.Outcome; import mage.constants.Outcome;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.Zone; import mage.constants.Zone;
import mage.counters.Counter;
import mage.counters.CounterType; import mage.counters.CounterType;
import mage.counters.Counters;
import mage.filter.StaticFilters; import mage.filter.StaticFilters;
import mage.game.Game; import mage.game.Game;
import mage.game.permanent.Permanent; import mage.game.permanent.Permanent;
@ -43,17 +37,17 @@ public class AgentsToolkit extends CardImpl {
// Agents Toolkit enters the battlefield with a +1/+1 counter, a flying counter, a deathtouch counter, and a shield counter on it. // Agents 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")); 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.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.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.SHIELD.createInstance(1)).setText("and a shield counter on it").concatBy(","));
this.addAbility(counterETBAbility); this.addAbility(counterETBAbility);
// Whenever a creature enters the battlefield under your control, // Whenever a creature enters the battlefield under your control,
// you may move a counter from Agents Toolkit onto that creature. // you may move a counter from Agents Toolkit onto that creature.
this.addAbility(new EntersBattlefieldControlledTriggeredAbility( this.addAbility(new EntersBattlefieldControlledTriggeredAbility(
new AgentToolkitMoveCounterEffect(), new AgentToolkitMoveCounterEffect(),
StaticFilters.FILTER_PERMANENT_CREATURE) StaticFilters.FILTER_PERMANENT_A_CREATURE
); ));
// {2}, Sacrifice Agents Toolkit: Draw a card. // {2}, Sacrifice Agents Toolkit: Draw a card.
Ability drawAbility = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(1), new GenericManaCost(2)); Ability drawAbility = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(1), new GenericManaCost(2));
@ -75,7 +69,7 @@ class AgentToolkitMoveCounterEffect extends OneShotEffect {
public AgentToolkitMoveCounterEffect() { public AgentToolkitMoveCounterEffect() {
super(Outcome.Benefit); 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) { private AgentToolkitMoveCounterEffect(final AgentToolkitMoveCounterEffect effect) {

View file

@ -13,7 +13,9 @@ import mage.constants.*;
import mage.counters.CounterType; import mage.counters.CounterType;
import mage.filter.StaticFilters; import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent; 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; import java.util.UUID;
@ -22,7 +24,7 @@ import java.util.UUID;
*/ */
public class BessSoulNourisher extends CardImpl { 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 { static {
filter.add(AnotherPredicate.instance); 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 // 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. // +X/+X until end of turn, where X is the number of +1/+1 counters on Bess.
DynamicValue xValue = new CountersSourceCount(CounterType.P1P1); DynamicValue xValue = new CountersSourceCount(CounterType.P1P1);
this.addAbility(new AttacksTriggeredAbility( this.addAbility(new AttacksTriggeredAbility(new BoostControlledEffect(
new BoostControlledEffect(xValue, xValue, Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURE, true), xValue, xValue, Duration.EndOfTurn,
false, StaticFilters.FILTER_PERMANENT_CREATURE, true
"whenever Bess attacks, each other creature you control with base power and toughness 1/1 " + ).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 Bess") "gets +X/+X until end of turn, where X is the number of +1/+1 counters on {this}"),
); false));
} }
private BessSoulNourisher(final BessSoulNourisher card) { private BessSoulNourisher(final BessSoulNourisher card) {

View file

@ -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. // Creatures target player controls gets +1/+1 and gain first strike until end of turn.
this.getSpellAbility().addMode(new Mode(new BoostAllEffect( this.getSpellAbility().addMode(new Mode(new BoostAllEffect(
1, 1, Duration.EndOfTurn, filter, false 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 FirstStrikeAbility.getInstance(), Duration.EndOfTurn, filter
).setText("and gain first strike until end of turn"))); ).setText("and gain first strike until end of turn")));
} }

View file

@ -18,8 +18,6 @@ import mage.filter.predicate.card.FaceDownPredicate;
import mage.game.Game; import mage.game.Game;
import mage.game.permanent.Permanent; import mage.game.permanent.Permanent;
import mage.players.Player; import mage.players.Player;
import mage.target.targetpointer.FixedTarget;
import mage.util.CardUtil;
import java.util.UUID; import java.util.UUID;
@ -28,7 +26,8 @@ import java.util.UUID;
*/ */
public class CrypticPursuit extends CardImpl { 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 { static {
filterFaceDownPermanent.add(FaceDownPredicate.instance); filterFaceDownPermanent.add(FaceDownPredicate.instance);
} }
@ -70,7 +69,7 @@ class CrypticPursuitExileAndPlayEffect extends OneShotEffect {
CrypticPursuitExileAndPlayEffect() { CrypticPursuitExileAndPlayEffect() {
super(Outcome.Benefit); super(Outcome.Benefit);
this.staticText = "exile it if it's an instant or sorcery card. " + 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 @Override
@ -104,4 +103,4 @@ class CrypticPursuitExileAndPlayEffect extends OneShotEffect {
public Effect copy() { public Effect copy() {
return new CrypticPursuitExileAndPlayEffect(this); return new CrypticPursuitExileAndPlayEffect(this);
} }
} }

View file

@ -70,7 +70,7 @@ public class MariTheKillingQuill extends CardImpl {
Ability dealsDamageAbility = new DealsCombatDamageToAPlayerTriggeredAbility(new MariTheKillingQuillDealsDamageEffect(), false, true); Ability dealsDamageAbility = new DealsCombatDamageToAPlayerTriggeredAbility(new MariTheKillingQuillDealsDamageEffect(), false, true);
Effect drawAndTreasureEffect = new GainAbilityControlledEffect(dealsDamageAbility, Duration.WhileOnBattlefield, filter); Effect drawAndTreasureEffect = new GainAbilityControlledEffect(dealsDamageAbility, Duration.WhileOnBattlefield, filter);
drawAndTreasureEffect.setText( 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.\""); "If you do, draw a card and create two Treasure tokens.\"");
drawAndTreasureEffect.concatBy("and"); drawAndTreasureEffect.concatBy("and");

View file

@ -63,7 +63,7 @@ class MasterOfCeremoniesChoiceEffect extends OneShotEffect {
super(Outcome.Benefit); super(Outcome.Benefit);
this.staticText = "each opponent chooses money, friends, or secrets. " + 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 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."; "For each player who chose secrets, you and that player each draw a card.";
} }

View file

@ -63,8 +63,8 @@ class NextOfKinDiesEffect extends OneShotEffect {
NextOfKinDiesEffect() { NextOfKinDiesEffect() {
super(Outcome.Benefit); 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." + 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."; "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) { private NextOfKinDiesEffect(final NextOfKinDiesEffect effect) {

View file

@ -17,7 +17,6 @@ import mage.game.events.GameEvent;
import mage.game.stack.Spell; import mage.game.stack.Spell;
import mage.players.Player; import mage.players.Player;
import mage.target.common.TargetOpponent; import mage.target.common.TargetOpponent;
import mage.target.targetpointer.FixedTarget;
import java.util.UUID; import java.util.UUID;
@ -60,7 +59,7 @@ class ParnesseTheSubtleBrushCopySpellOpponentEffect extends OneShotEffect {
ParnesseTheSubtleBrushCopySpellOpponentEffect() { ParnesseTheSubtleBrushCopySpellOpponentEffect() {
super(Outcome.Detriment); super(Outcome.Detriment);
this.staticText = "up to one target opponent may also copy that spell. " + 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) { ParnesseTheSubtleBrushCopySpellOpponentEffect(final ParnesseTheSubtleBrushCopySpellOpponentEffect effect) {
@ -88,8 +87,9 @@ class ParnesseTheSubtleBrushCopySpellOpponentEffect extends OneShotEffect {
class ParnesseTheSubtleBrushCopySpellTriggeredAbility extends TriggeredAbilityImpl { class ParnesseTheSubtleBrushCopySpellTriggeredAbility extends TriggeredAbilityImpl {
ParnesseTheSubtleBrushCopySpellTriggeredAbility() { ParnesseTheSubtleBrushCopySpellTriggeredAbility() {
super(Zone.BATTLEFIELD, new ParnesseTheSubtleBrushCopySpellOpponentEffect(), true); super(Zone.BATTLEFIELD, new ParnesseTheSubtleBrushCopySpellOpponentEffect(), false);
this.getTargets().add(new TargetOpponent(0, 1, false)); this.getTargets().add(new TargetOpponent(0, 1, false));
setTriggerPhrase("Whenever you copy a spell, ");
} }
private ParnesseTheSubtleBrushCopySpellTriggeredAbility(final ParnesseTheSubtleBrushCopySpellTriggeredAbility ability) { private ParnesseTheSubtleBrushCopySpellTriggeredAbility(final ParnesseTheSubtleBrushCopySpellTriggeredAbility ability) {

View file

@ -58,7 +58,7 @@ public final class PerrieThePulverizer extends CardImpl {
.setText("target creature you control gains trample")); .setText("target creature you control gains trample"));
ability.addEffect(new BoostTargetEffect( ability.addEffect(new BoostTargetEffect(
PerrieThePulverizerValue.instance, PerrieThePulverizerValue.instance, Duration.EndOfTurn 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()); ability.addTarget(new TargetControlledCreaturePermanent());
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -28,7 +28,7 @@ import java.util.UUID;
*/ */
public class PhabineBosssConfidant extends CardImpl { 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 { static {
filter.add(TokenPredicate.TRUE); filter.add(TokenPredicate.TRUE);
} }

View file

@ -1,7 +1,10 @@
package mage.cards.r; package mage.cards.r;
import mage.abilities.Mode; 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.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
@ -17,7 +20,7 @@ import java.util.UUID;
*/ */
public class RiveteersConfluence extends CardImpl { public class RiveteersConfluence extends CardImpl {
private static final FilterPermanent damageFilter = new FilterCreatureOrPlaneswalkerPermanent(); private static final FilterPermanent damageFilter = new FilterCreatureOrPlaneswalkerPermanent("creature and planeswalker you dont control");
static { static {
damageFilter.add(TargetController.NOT_YOU.getControllerPredicate()); damageFilter.add(TargetController.NOT_YOU.getControllerPredicate());

View file

@ -7,7 +7,6 @@ import mage.abilities.TriggeredAbilityImpl;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.condition.common.TreasureSpentToCastCondition; import mage.abilities.condition.common.TreasureSpentToCastCondition;
import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
import mage.abilities.dynamicvalue.DynamicValue; import mage.abilities.dynamicvalue.DynamicValue;
import mage.abilities.effects.Effect; import mage.abilities.effects.Effect;
import mage.abilities.effects.common.CreateTokenTargetEffect; import mage.abilities.effects.common.CreateTokenTargetEffect;
@ -16,15 +15,18 @@ import mage.abilities.effects.common.counter.AddCountersTargetEffect;
import mage.abilities.keyword.HasteAbility; import mage.abilities.keyword.HasteAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; 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.counters.CounterType;
import mage.game.Game; import mage.game.Game;
import mage.game.events.GameEvent; import mage.game.events.GameEvent;
import mage.game.permanent.token.TreasureToken; import mage.game.permanent.token.TreasureToken;
import mage.players.Player; import mage.players.Player;
import mage.target.common.TargetCreaturePermanent;
import mage.target.common.TargetOpponent; import mage.target.common.TargetOpponent;
import mage.watchers.common.CreatedTokenWatcher; import mage.watchers.common.CreatedTokenWatcher;
import mage.watchers.common.ManaPaidSourceWatcher;
import java.util.Optional; import java.util.Optional;
import java.util.UUID; 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, // if mana from a Treasure was spent to cast it or activate it,
// put a +1/+1 counter on target creature, // put a +1/+1 counter on target creature,
// then draw a card. // then draw a card.
Ability castAbility = new VaziKeenNegotiatorOpponentCastsOrActivatesTriggeredAbility(); this.addAbility(new VaziKeenNegotiatorOpponentCastsOrActivatesTriggeredAbility());
castAbility.addTarget(new TargetOpponent());
castAbility.addEffect(new DrawCardSourceControllerEffect(1));
this.addAbility(castAbility);
} }
private VaziKeenNegotiator(final VaziKeenNegotiator card) { private VaziKeenNegotiator(final VaziKeenNegotiator card) {
@ -74,6 +73,8 @@ class VaziKeenNegotiatorOpponentCastsOrActivatesTriggeredAbility extends Trigger
VaziKeenNegotiatorOpponentCastsOrActivatesTriggeredAbility() { VaziKeenNegotiatorOpponentCastsOrActivatesTriggeredAbility() {
super(Zone.BATTLEFIELD, new AddCountersTargetEffect(CounterType.P1P1.createInstance())); 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, "); setTriggerPhrase("Whenever an opponent casts a spell or activates an ability, if mana from a Treasure was spent to cast it or activate it, ");
} }

View file

@ -60,7 +60,7 @@ public class VerifyCardDataTest {
private static final Logger logger = Logger.getLogger(VerifyCardDataTest.class); 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 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 private static final boolean ONLY_TEXT = false; // use when checking text locally, suppresses unnecessary checks and output messages

View file

@ -36,6 +36,7 @@ public class SpellCastControllerTriggeredAbility extends TriggeredAbilityImpl {
public SpellCastControllerTriggeredAbility(Effect effect, FilterSpell filter, boolean optional, Zone fromZone) { public SpellCastControllerTriggeredAbility(Effect effect, FilterSpell filter, boolean optional, Zone fromZone) {
this(effect, filter, optional, false); this(effect, filter, optional, false);
this.fromZone = fromZone; this.fromZone = fromZone;
makeTriggerPhrase();
} }
public SpellCastControllerTriggeredAbility(Effect effect, FilterSpell filter, boolean optional, String rule) { public SpellCastControllerTriggeredAbility(Effect effect, FilterSpell filter, boolean optional, String rule) {
@ -56,7 +57,7 @@ public class SpellCastControllerTriggeredAbility extends TriggeredAbilityImpl {
this.filter = filter; this.filter = filter;
this.rememberSource = rememberSource; this.rememberSource = rememberSource;
this.rememberSourceAsCard = rememberSourceAsCard; this.rememberSourceAsCard = rememberSourceAsCard;
setTriggerPhrase("Whenever you cast " + filter.getMessage() + (fromZone != Zone.ALL ? "from your " + fromZone.toString().toLowerCase() : "") + ", "); makeTriggerPhrase();
} }
public SpellCastControllerTriggeredAbility(final SpellCastControllerTriggeredAbility ability) { public SpellCastControllerTriggeredAbility(final SpellCastControllerTriggeredAbility ability) {
@ -100,4 +101,8 @@ public class SpellCastControllerTriggeredAbility extends TriggeredAbilityImpl {
public SpellCastControllerTriggeredAbility copy() { public SpellCastControllerTriggeredAbility copy() {
return new SpellCastControllerTriggeredAbility(this); return new SpellCastControllerTriggeredAbility(this);
} }
private void makeTriggerPhrase() {
setTriggerPhrase("Whenever you cast " + filter.getMessage() + (fromZone != Zone.ALL ? " from your " + fromZone.toString().toLowerCase() : "") + ", ");
}
} }

View file

@ -25,7 +25,7 @@ public class AddCounterChoiceSourceEffect extends OneShotEffect {
private final List<CounterType> counterTypes; private final List<CounterType> counterTypes;
public AddCounterChoiceSourceEffect(CounterType ... counterTypes) { public AddCounterChoiceSourceEffect(CounterType... counterTypes) {
super(Outcome.Benefit); super(Outcome.Benefit);
this.counterTypes = Arrays.stream(counterTypes).collect(Collectors.toList()); this.counterTypes = Arrays.stream(counterTypes).collect(Collectors.toList());
this.createStaticText(); this.createStaticText();
@ -48,7 +48,7 @@ public class AddCounterChoiceSourceEffect extends OneShotEffect {
break; break;
default: default:
List<String> strings = this.counterTypes.stream().map(CounterType::toString).collect(Collectors.toList()); 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; break;
} }
} }

View file

@ -24,6 +24,7 @@ public class CasualtyAbility extends StaticAbility implements OptionalAdditional
private static final String keywordText = "Casualty"; private static final String keywordText = "Casualty";
private final String promptString; private final String promptString;
private final String rule;
protected OptionalAdditionalCost additionalCost; protected OptionalAdditionalCost additionalCost;
@ -39,9 +40,10 @@ public class CasualtyAbility extends StaticAbility implements OptionalAdditional
super(Zone.STACK, null); super(Zone.STACK, null);
String reminderText = "As you cast this spell, you may sacrifice a creature with power " + String reminderText = "As you cast this spell, you may sacrifice a creature with power " +
number + " or greater. When you do, copy this spell."; 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 = new OptionalAdditionalCostImpl(keywordText, reminderText, new SacrificeTargetCost(makeFilter(number)));
this.additionalCost.setRepeatable(false); this.additionalCost.setRepeatable(false);
this.promptString = "Sacrifice a creature with power " + number + " or greater?";
this.rule = additionalCost.getName() + ' ' + number + ' ' + additionalCost.getReminderText();
this.setRuleAtTheTop(true); this.setRuleAtTheTop(true);
} }
@ -49,6 +51,7 @@ public class CasualtyAbility extends StaticAbility implements OptionalAdditional
super(ability); super(ability);
this.additionalCost = ability.additionalCost; this.additionalCost = ability.additionalCost;
this.promptString = ability.promptString; this.promptString = ability.promptString;
this.rule = ability.rule;
} }
public void resetCasualty() { public void resetCasualty() {
@ -92,4 +95,9 @@ public class CasualtyAbility extends StaticAbility implements OptionalAdditional
public String getCastMessageSuffix() { public String getCastMessageSuffix() {
return additionalCost == null ? "" : additionalCost.getCastSuffixMessage(0); return additionalCost == null ? "" : additionalCost.getCastSuffixMessage(0);
} }
@Override
public String getRule() {
return rule;
}
} }