[KHC] more text fixes

This commit is contained in:
Evan Kranzler 2021-02-01 22:47:20 -05:00
parent 599309c980
commit 6ed259941a
14 changed files with 40 additions and 36 deletions

View file

@ -19,8 +19,8 @@ public final class AmbitionsCost extends CardImpl {
// You draw three cards and you lose 3 life. // You draw three cards and you lose 3 life.
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(3)); this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(3).setText("you draw three cards"));
this.getSpellAbility().addEffect(new LoseLifeSourceControllerEffect(3)); this.getSpellAbility().addEffect(new LoseLifeSourceControllerEffect(3).concatBy("and"));
} }
public AmbitionsCost(final AmbitionsCost card) { public AmbitionsCost(final AmbitionsCost card) {

View file

@ -144,7 +144,7 @@ class ArcaneArtisanLeavesBattlefieldTriggeredAbility extends ZoneChangeTriggered
@Override @Override
public String getRule() { public String getRule() {
return "When {this} leaves the battlefield, exile all tokens created with it at the beginning of the next end step"; return "When {this} leaves the battlefield, exile all tokens created with it at the beginning of the next end step.";
} }
} }

View file

@ -53,7 +53,7 @@ class CosmicInterventionReplacementEffect extends ReplacementEffectImpl {
CosmicInterventionReplacementEffect() { CosmicInterventionReplacementEffect() {
super(Duration.EndOfTurn, Outcome.Benefit); super(Duration.EndOfTurn, Outcome.Benefit);
staticText = "If a permanent you control would be put into a graveyard from the battlefield this turn, exile it instead. Return it to the battlefield under its owner's control at the beginning of the next end step"; staticText = "If a permanent you control would be put into a graveyard from the battlefield this turn, exile it instead. Return it to the battlefield under its owner's control at the beginning of the next end step";
} }
private CosmicInterventionReplacementEffect(final CosmicInterventionReplacementEffect effect) { private CosmicInterventionReplacementEffect(final CosmicInterventionReplacementEffect effect) {

View file

@ -20,7 +20,7 @@ import mage.game.permanent.token.ElfToken;
*/ */
public final class ElvishPromenade extends CardImpl { public final class ElvishPromenade extends CardImpl {
private static final FilterControlledPermanent filter = new FilterControlledPermanent("Elves you control"); private static final FilterControlledPermanent filter = new FilterControlledPermanent("Elf you control");
static { static {
filter.add(SubType.ELF.getPredicate()); filter.add(SubType.ELF.getPredicate());

View file

@ -28,7 +28,7 @@ public final class FarhavenElf extends CardImpl {
this.toughness = new MageInt(1); this.toughness = new MageInt(1);
// When Farhaven Elf enters the battlefield, you may search your library for a basic land card and put it onto the battlefield tapped. If you do, shuffle your library. // When Farhaven Elf enters the battlefield, you may search your library for a basic land card and put it onto the battlefield tapped. If you do, shuffle your library.
this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_LAND), true, false), true)); this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_LAND), true, true), true));
} }
public FarhavenElf(final FarhavenElf card) { public FarhavenElf(final FarhavenElf card) {

View file

@ -55,7 +55,7 @@ class HarvestSeasonEffect extends OneShotEffect {
HarvestSeasonEffect() { HarvestSeasonEffect() {
super(Outcome.Benefit); super(Outcome.Benefit);
this.staticText = "Search your library for up to X basic land cards, where X is the number of tapped creatures you control," this.staticText = "Search your library for up to X basic land cards, where X is the number of tapped creatures you control,"
+ " and put those card onto the battlefield tapped, then shuffle your library."; + " and put those cards onto the battlefield tapped, then shuffle your library.";
} }
HarvestSeasonEffect(final HarvestSeasonEffect effect) { HarvestSeasonEffect(final HarvestSeasonEffect effect) {

View file

@ -1,10 +1,10 @@
package mage.cards.h; package mage.cards.h;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.TriggeredAbilityImpl; import mage.abilities.TriggeredAbilityImpl;
import mage.abilities.common.SimpleStaticAbility; import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.condition.Condition;
import mage.abilities.condition.common.SourceHasAnyCountersCondition; import mage.abilities.condition.common.SourceHasAnyCountersCondition;
import mage.abilities.condition.common.SourceMatchesFilterCondition; import mage.abilities.condition.common.SourceMatchesFilterCondition;
import mage.abilities.decorator.ConditionalContinuousEffect; import mage.abilities.decorator.ConditionalContinuousEffect;
@ -18,17 +18,15 @@ import mage.abilities.keyword.IndestructibleAbility;
import mage.cards.Card; import mage.cards.Card;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.*;
import mage.constants.Duration;
import mage.constants.Outcome;
import mage.constants.SubType;
import mage.constants.Zone;
import mage.counters.CounterType; import mage.counters.CounterType;
import mage.filter.common.FilterCreaturePermanent; import mage.filter.common.FilterCreaturePermanent;
import mage.game.Game; import mage.game.Game;
import mage.game.events.GameEvent; import mage.game.events.GameEvent;
import mage.game.events.ZoneChangeEvent; import mage.game.events.ZoneChangeEvent;
import java.util.UUID;
/** /**
* @author jeffwadsworth * @author jeffwadsworth
*/ */
@ -42,6 +40,9 @@ public final class HeroOfBretagard extends CardImpl {
filter2.add(new SourceHasAnyCountersCondition(10)); filter2.add(new SourceHasAnyCountersCondition(10));
} }
private static final Condition condition = new SourceMatchesFilterCondition(filter);
private static final Condition condition2 = new SourceMatchesFilterCondition(filter2);
public HeroOfBretagard(UUID ownerId, CardSetInfo setInfo) { public HeroOfBretagard(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}");
@ -54,23 +55,24 @@ public final class HeroOfBretagard extends CardImpl {
this.addAbility(new HeroOfBretagardTriggeredAbility(new HeroOfBretagardEffect())); this.addAbility(new HeroOfBretagardTriggeredAbility(new HeroOfBretagardEffect()));
// As long as Hero of Bretagard has five or more counters on it, it has flying and is an Angel in addition to its other types. // As long as Hero of Bretagard has five or more counters on it, it has flying and is an Angel in addition to its other types.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, Ability ability = new SimpleStaticAbility(new ConditionalContinuousEffect(
new ConditionalContinuousEffect(new GainAbilitySourceEffect(FlyingAbility.getInstance(), Duration.WhileOnBattlefield), new GainAbilitySourceEffect(
new SourceMatchesFilterCondition(filter), FlyingAbility.getInstance(), Duration.WhileOnBattlefield
"As long as Hero of Bretagard has five or more counters on it, it has flying "))); ), condition, "As long as {this} has five or more counters on it, it has flying"
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, ));
new ConditionalContinuousEffect(new AddCardSubTypeSourceEffect(Duration.WhileOnBattlefield, SubType.ANGEL), new SourceMatchesFilterCondition(filter), ability.addEffect(new ConditionalContinuousEffect(new AddCardSubTypeSourceEffect(
"and is an Angel in addition to its other types."))); Duration.WhileOnBattlefield, SubType.ANGEL
), condition, "and is an Angel in addition to its other types."));
this.addAbility(ability);
// As long as Hero of Bretagard has ten or more counters on it, it has indestructible and is a God in addition to its other types. // As long as Hero of Bretagard has ten or more counters on it, it has indestructible and is a God in addition to its other types.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, ability = new SimpleStaticAbility(new ConditionalContinuousEffect(new GainAbilitySourceEffect(
new ConditionalContinuousEffect(new GainAbilitySourceEffect(IndestructibleAbility.getInstance(), Duration.WhileOnBattlefield), IndestructibleAbility.getInstance(), Duration.WhileOnBattlefield
new SourceMatchesFilterCondition(filter2), ), condition2, "As long as {this} has ten or more counters on it, it has indestructible"));
"As long as Hero of Bretagard has ten or more counters on it, it has indestructible "))); ability.addEffect(new ConditionalContinuousEffect(new AddCardSubTypeSourceEffect(
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, Duration.WhileOnBattlefield, SubType.GOD
new ConditionalContinuousEffect(new AddCardSubTypeSourceEffect(Duration.WhileOnBattlefield, SubType.GOD), new SourceMatchesFilterCondition(filter2), ), condition2, "and is a God in addition to its other types."));
"and is a God in addition to its other types."))); this.addAbility(ability);
} }
private HeroOfBretagard(final HeroOfBretagard card) { private HeroOfBretagard(final HeroOfBretagard card) {
@ -139,7 +141,7 @@ class HeroOfBretagardTriggeredAbility extends TriggeredAbilityImpl {
@Override @Override
public String getRule() { public String getRule() {
return "Whenever you exile one or more cards from your hand and/or permanents from the battlefield, put that many +1/+1 counters on {this}"; return "Whenever you exile one or more cards from your hand and/or permanents from the battlefield, put that many +1/+1 counters on {this}.";
} }
} }

View file

@ -22,7 +22,7 @@ import mage.game.permanent.token.ElfToken;
*/ */
public final class ImperiousPerfect extends CardImpl { public final class ImperiousPerfect extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Elf creatures"); private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Elves");
static { static {
filter.add(SubType.ELF.getPredicate()); filter.add(SubType.ELF.getPredicate());

View file

@ -18,7 +18,7 @@ import mage.game.permanent.token.ElfToken;
*/ */
public final class LysAlanaHuntmaster extends CardImpl { public final class LysAlanaHuntmaster extends CardImpl {
private static final FilterSpell filter = new FilterSpell("Elf spell"); private static final FilterSpell filter = new FilterSpell("an Elf spell");
static { static {
filter.add(SubType.ELF.getPredicate()); filter.add(SubType.ELF.getPredicate());

View file

@ -51,7 +51,7 @@ class PactOfTheSerpentEffect extends OneShotEffect {
PactOfTheSerpentEffect() { PactOfTheSerpentEffect() {
super(Outcome.Benefit); super(Outcome.Benefit);
staticText = "Target player draws X cards and loses X life, " + staticText = "Target player draws X cards and loses X life, " +
"where X is the number of creature they control of the chosen type"; "where X is the number of creatures they control of the chosen type";
} }
private PactOfTheSerpentEffect(final PactOfTheSerpentEffect effect) { private PactOfTheSerpentEffect(final PactOfTheSerpentEffect effect) {

View file

@ -66,7 +66,7 @@ class RanarTheEverWatchfulCostReductionEffect extends CostModificationEffectImpl
RanarTheEverWatchfulCostReductionEffect() { RanarTheEverWatchfulCostReductionEffect() {
super(Duration.WhileOnBattlefield, Outcome.Neutral, CostModificationType.REDUCE_COST); super(Duration.WhileOnBattlefield, Outcome.Neutral, CostModificationType.REDUCE_COST);
staticText = "The first card you foretell each turn costs 0 to foretell"; staticText = "The first card you foretell each turn costs {0} to foretell";
} }
private RanarTheEverWatchfulCostReductionEffect(RanarTheEverWatchfulCostReductionEffect effect) { private RanarTheEverWatchfulCostReductionEffect(RanarTheEverWatchfulCostReductionEffect effect) {

View file

@ -48,7 +48,7 @@ public final class StoicFarmer extends CardImpl {
new SearchLibraryPutInHandEffect(new TargetCardInLibrary(filter)), new SearchLibraryPutInHandEffect(new TargetCardInLibrary(filter)),
condition, "search your library for a basic Plains card and reveal it. " + condition, "search your library for a basic Plains card and reveal it. " +
"If an opponent controls more lands than you, put it onto the battlefield tapped. " + "If an opponent controls more lands than you, put it onto the battlefield tapped. " +
"Otherwise, put it into your hand. Then shuffle your library" "Otherwise put it into your hand. Then shuffle your library"
) )
)); ));

View file

@ -16,6 +16,7 @@ import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.Zone; import mage.constants.Zone;
import mage.filter.common.FilterControlledPermanent; import mage.filter.common.FilterControlledPermanent;
import mage.filter.predicate.permanent.UntappedPredicate;
import mage.game.permanent.token.ThopterColorlessToken; import mage.game.permanent.token.ThopterColorlessToken;
import mage.target.common.TargetControlledPermanent; import mage.target.common.TargetControlledPermanent;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
@ -26,9 +27,10 @@ import mage.target.common.TargetCreaturePermanent;
*/ */
public final class WhirlerRogue extends CardImpl { public final class WhirlerRogue extends CardImpl {
private static final FilterControlledPermanent filter = new FilterControlledPermanent("artifacts"); private static final FilterControlledPermanent filter = new FilterControlledPermanent("untapped artifacts you control");
static { static {
filter.add(UntappedPredicate.instance);
filter.add(CardType.ARTIFACT.getPredicate()); filter.add(CardType.ARTIFACT.getPredicate());
} }

View file

@ -53,7 +53,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 = "KHM"; // check all abilities and output cards with wrong abilities texts; private static final String FULL_ABILITIES_CHECK_SET_CODE = "KHC"; // 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 HashMap<String, Set<String>> skipCheckLists = new HashMap<>(); private static final HashMap<String, Set<String>> skipCheckLists = new HashMap<>();