[KHM] various text fixes

This commit is contained in:
Evan Kranzler 2021-01-29 17:37:56 -05:00
parent 7c68284173
commit d5822a7246
46 changed files with 97 additions and 57 deletions

View file

@ -69,8 +69,8 @@ public final class AlrundGodOfTheCosmos extends ModalDoubleFacesCard {
this.getRightHalfCard().addAbility(FlyingAbility.getInstance());
// Whenever Hakka, Whispering Raven deals combat damage to a player, return it to its owners hand, then scry 2.
Ability ability3 = new DealsCombatDamageToAPlayerTriggeredAbility(new ReturnToHandSourceEffect(), false);
ability3.addEffect(new ScryEffect(2));
Ability ability3 = new DealsCombatDamageToAPlayerTriggeredAbility(new ReturnToHandSourceEffect().setText("return it to its owner's hand"), false);
ability3.addEffect(new ScryEffect(2).concatBy(", then"));
this.getRightHalfCard().addAbility(ability3);
}
@ -89,7 +89,7 @@ class AlrundGodOfTheCosmosEffect extends OneShotEffect {
public AlrundGodOfTheCosmosEffect() {
super(Outcome.Neutral);
staticText = "then reveal the top two cards of your library. Put all cards of the chosen type into your hand and the rest on the bottom of your library in any order";
staticText = ", then reveal the top two cards of your library. Put all cards of the chosen type revealed this way into your hand and the rest on the bottom of your library in any order";
}
public AlrundGodOfTheCosmosEffect(final AlrundGodOfTheCosmosEffect effect) {

View file

@ -20,7 +20,7 @@ public final class AlrundsEpiphany extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{5}{U}{U}");
// Create two 1/1 blue Bird creature tokens with flying. Take an extra turn after this one. Exile Alrund's Epiphany.
this.getSpellAbility().addEffect(new CreateTokenEffect(new OwlToken()));
this.getSpellAbility().addEffect(new CreateTokenEffect(new OwlToken(), 2));
this.getSpellAbility().addEffect(new AddExtraTurnControllerEffect());
this.getSpellAbility().addEffect(ExileSpellEffect.getInstance());

View file

@ -101,7 +101,7 @@ class AscendantSpiritAngelEffect extends OneShotEffect {
AscendantSpiritAngelEffect() {
super(Outcome.Benefit);
staticText = "if {this} is an Angel, put two +1/+1 counters on it and it gains " +
"\"Whenever this creature deals damage to a player, draw a card.\"";
"\"Whenever this creature deals combat damage to a player, draw a card.\"";
}
private AscendantSpiritAngelEffect(final AscendantSpiritAngelEffect effect) {

View file

@ -27,7 +27,6 @@ public final class AxgardArmory extends CardImpl {
public AxgardArmory(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
// Axgard Armory enters the battlefield tapped.
this.addAbility(new EntersBattlefieldTappedAbility());
@ -35,8 +34,11 @@ public final class AxgardArmory extends CardImpl {
this.addAbility(new WhiteManaAbility());
// {1}{R}{R}{W}, {T}: Sacrifice Axgard Armory: Search your library for an Aura card and/or Equipment card, reveal them, put them into your hand, then shuffle your library.
Ability ability = new SimpleActivatedAbility(new SearchLibraryPutInHandEffect(
new AxgardArmoryTarget()), new ManaCostsImpl("{1}{R}{R}{W}")
Ability ability = new SimpleActivatedAbility(
new SearchLibraryPutInHandEffect(new AxgardArmoryTarget())
.setText("search your library for an Aura card and/or Equipment card, reveal them, " +
"put them into your hand, then shuffle your library"),
new ManaCostsImpl("{1}{R}{R}{W}")
);
ability.addCost(new TapSourceCost());
ability.addCost(new SacrificeSourceCost());

View file

@ -18,7 +18,7 @@ public final class BeholdTheMultiverse extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{3}{U}");
// Scry 2, then draw two cards.
this.getSpellAbility().addEffect(new ScryEffect(2));
this.getSpellAbility().addEffect(new ScryEffect(2, false));
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(2).concatBy(", then"));
// Foretell {1}{U}

View file

@ -50,7 +50,7 @@ public final class BindingTheOldGods extends CardImpl {
// III Creatures you control gain deathtouch until end of turn.
sagaAbility.addChapterEffect(this, SagaChapter.CHAPTER_III,
new GainAbilityControlledEffect(DeathtouchAbility.getInstance(), Duration.EndOfTurn,
StaticFilters.FILTER_CONTROLLED_CREATURES)
StaticFilters.FILTER_PERMANENT_CREATURES)
);
this.addAbility(sagaAbility);
}

View file

@ -45,11 +45,11 @@ public final class BretagardStronghold extends CardImpl {
Ability ability = new ActivateAsSorceryActivatedAbility(Zone.BATTLEFIELD, countersEffect, new ManaCostsImpl<>("{G}{W}{W}"));
Effect vigilanceEffect = new GainAbilityTargetEffect(VigilanceAbility.getInstance(), Duration.EndOfTurn);
vigilanceEffect.setText("They gain vigilance until end of turn");
vigilanceEffect.setText("They gain vigilance");
ability.addEffect(vigilanceEffect);
Effect lifelinkEffect = new GainAbilityTargetEffect(LifelinkAbility.getInstance(), Duration.EndOfTurn);
lifelinkEffect.setText("They gain lifelink until end of turn");
lifelinkEffect.setText("and lifelink until end of turn");
ability.addEffect(lifelinkEffect);
ability.addCost(new TapSourceCost());

View file

@ -31,6 +31,7 @@ public final class DoomskarTitan extends CardImpl {
// When Doomskar Titan enters the battlefield, creatures you control get +1/+0 and gain haste until end of turn.
Ability ability = new EntersBattlefieldTriggeredAbility(
new BoostControlledEffect(1, 0, Duration.EndOfTurn)
.setText("creatures you control get +1/+0")
);
ability.addEffect(new GainAbilityControlledEffect(
HasteAbility.getInstance(), Duration.EndOfTurn

View file

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

View file

@ -14,6 +14,7 @@ import mage.constants.CardType;
import mage.constants.SubType;
import mage.filter.StaticFilters;
import mage.target.common.TargetControlledCreaturePermanent;
import mage.target.common.TargetControlledPermanent;
import java.util.UUID;
@ -43,7 +44,7 @@ public final class EradicatorValkyrie extends CardImpl {
Ability ability = new BoastAbility(new SacrificeOpponentsEffect(
StaticFilters.FILTER_PERMANENT_CREATURE_OR_PLANESWALKER
), "{1}{B}");
ability.addCost(new SacrificeTargetCost(new TargetControlledCreaturePermanent()));
ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent(StaticFilters.FILTER_CONTROLLED_CREATURE_SHORT_TEXT)));
this.addAbility(ability);
}

View file

@ -31,7 +31,7 @@ public final class FacelessHaven extends CardImpl {
// {S}{S}{S}: Faceless Haven becomes a 4/3 creature with vigilance and all creature types until end of turn. It's still a land.
this.addAbility(new SimpleActivatedAbility(new BecomesCreatureSourceEffect(
new FacelessHavenToken(), "land", Duration.EndOfTurn
), new ManaCostsImpl("{S}{S}{S}")));
).setText("{this} becomes a 4/3 creature with vigilance and all creature types until end of turn. It's still a land"), new ManaCostsImpl("{S}{S}{S}")));
}
private FacelessHaven(final FacelessHaven card) {

View file

@ -22,7 +22,7 @@ import java.util.UUID;
public final class ForgingTheTyriteSword extends CardImpl {
private static final FilterCard filter
= new FilterCard("a card named Halvar, God of Battle or an Equipment card");
= new FilterCard("card named Halvar, God of Battle or an Equipment card");
static {
filter.add(Predicates.or(

View file

@ -74,6 +74,6 @@ class FrenziedRaiderTriggeredAbility extends TriggeredAbilityImpl {
@Override
public String getRule() {
return "Whenever you activate a boast ability, put a +1/+1 counter on {this}";
return "Whenever you activate a boast ability, put a +1/+1 counter on {this}.";
}
}

View file

@ -34,9 +34,9 @@ import java.util.UUID;
*/
public final class FrostpyreArcanist extends CardImpl {
private static final FilterPermanent filter = new FilterControlledPermanent("you control a Giant or Wizard");
private static final FilterPermanent filter = new FilterControlledPermanent("you control a Giant or a Wizard");
private static final FilterCard filter2 = new FilterInstantOrSorceryCard(
"an instant or sorcery card with the same name as a card in your graveyard"
"instant or sorcery card with the same name as a card in your graveyard"
);
static {

View file

@ -23,7 +23,7 @@ import java.util.UUID;
public final class FynnTheFangbearer extends CardImpl {
private static final FilterPermanent filter
= new FilterControlledCreaturePermanent("creature you control with deathtouch");
= new FilterControlledCreaturePermanent("a creature you control with deathtouch");
static {
filter.add(new AbilityPredicate(DeathtouchAbility.class));

View file

@ -45,8 +45,9 @@ public final class GiantsAmulet extends CardImpl {
HexproofAbility.getInstance(),
Duration.WhileOnBattlefield
), new InvertCondition(SourceTappedCondition.instance),
"{this} has hexproof as long as it's untapped")
), AttachmentType.EQUIPMENT));
"{this} has hexproof as long as it's untapped"
)), AttachmentType.EQUIPMENT
).setText("and has \"This creature has hexproof as long as it's untapped.\""));
this.addAbility(ability);
// Equip {2}

View file

@ -22,7 +22,7 @@ import java.util.UUID;
public final class GildedAssaultCart extends CardImpl {
private static final FilterControlledPermanent filter
= new FilterControlledPermanent(SubType.TREASURE, "treasures");
= new FilterControlledPermanent(SubType.TREASURE, "Treasures");
public GildedAssaultCart(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{1}{R}{R}");

View file

@ -39,7 +39,8 @@ public final class GlitteringFrost extends CardImpl {
).setText("enchanted land is snow")));
// Whenever enchanted land is tapped for mana, its controller adds an additional one mana of any color.
this.addAbility(new EnchantedTappedTriggeredManaAbility(new AddManaAnyColorAttachedControllerEffect()));
this.addAbility(new EnchantedTappedTriggeredManaAbility(new AddManaAnyColorAttachedControllerEffect()
.setText("its controller adds an additional one mana of any color")));
}
private GlitteringFrost(final GlitteringFrost card) {

View file

@ -27,7 +27,7 @@ public final class HorizonSeeker extends CardImpl {
// Boast {1}{G}: Search your library for a basic land card, reveal it, put it into your hand, then shuffle your library.
this.addAbility(new BoastAbility(new SearchLibraryPutInHandEffect(
new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_LAND_A), true
new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_LAND), true
), "{1}{G}"));
}

View file

@ -83,7 +83,7 @@ class InvasionOfTheGiantsEffect extends CostModificationEffectImpl {
InvasionOfTheGiantsEffect() {
super(Duration.EndOfTurn, Outcome.Benefit, CostModificationType.REDUCE_COST);
staticText = "the next Giant spell you cast this turns costs {2} less to cast";
staticText = "the next Giant spell you cast this turn costs {2} less to cast";
}
private InvasionOfTheGiantsEffect(final InvasionOfTheGiantsEffect effect) {

View file

@ -47,7 +47,7 @@ public final class NarfiBetrayerKing extends CardImpl {
// {S}{S}{S}: Return Narfi, Betrayer King from your graveyard to the battlefield tapped.
this.addAbility(new SimpleActivatedAbility(
Zone.GRAVEYARD,
new ReturnSourceFromGraveyardToBattlefieldEffect(true),
new ReturnSourceFromGraveyardToBattlefieldEffect(true, false),
new ManaCostsImpl("{S}{S}{S}")
));
}

View file

@ -57,7 +57,7 @@ class PortOfKarfellEffect extends OneShotEffect {
PortOfKarfellEffect() {
super(Outcome.Benefit);
staticText = "mill four cards, then return a creature card from your graveyard to the battlefield";
staticText = "mill four cards, then return a creature card from your graveyard to the battlefield tapped";
}
private PortOfKarfellEffect(final PortOfKarfellEffect effect) {

View file

@ -6,6 +6,7 @@ import mage.abilities.common.ActivateAsSorceryActivatedAbility;
import mage.abilities.costs.common.SacrificeSourceCost;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.dynamicvalue.DynamicValue;
import mage.abilities.dynamicvalue.MultipliedValue;
import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount;
import mage.abilities.effects.common.continuous.BoostTargetEffect;
import mage.cards.CardImpl;
@ -28,7 +29,7 @@ public final class PriestOfTheHauntedEdge extends CardImpl {
filter.add(SuperType.SNOW.getPredicate());
}
private static final DynamicValue xValue = new PermanentsOnBattlefieldCount(filter);
private static final DynamicValue xValue = new MultipliedValue(new PermanentsOnBattlefieldCount(filter), -1);
public PriestOfTheHauntedEdge(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{B}");
@ -43,7 +44,7 @@ public final class PriestOfTheHauntedEdge extends CardImpl {
Ability ability = new ActivateAsSorceryActivatedAbility(
Zone.BATTLEFIELD, new BoostTargetEffect(
xValue, xValue, Duration.EndOfTurn, true
), new TapSourceCost());
).setText("target creature gets -X/-X until end of turn, where X is the number of snow lands you control"), new TapSourceCost());
ability.addCost(new SacrificeSourceCost());
ability.addTarget(new TargetCreaturePermanent());
this.addAbility(ability);

View file

@ -50,7 +50,7 @@ class RaiseTheDraugrTarget extends TargetCardInYourGraveyard {
RaiseTheDraugrTarget() {
super(2, 2, StaticFilters.FILTER_CARD_CREATURE, false);
targetName = "creature cards that share a creature type";
targetName = "creature cards that share a creature type from your graveyard";
}
private RaiseTheDraugrTarget(final RaiseTheDraugrTarget target) {

View file

@ -3,12 +3,15 @@ package mage.cards.r;
import mage.abilities.common.AsEntersBattlefieldAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.ChooseCreatureTypeEffect;
import mage.abilities.effects.common.continuous.BoostAllOfChosenSubtypeEffect;
import mage.abilities.effects.common.continuous.BoostAllEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.Outcome;
import mage.constants.TargetController;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.mageobject.ChosenSubtypePredicate;
import java.util.UUID;
@ -17,6 +20,13 @@ import java.util.UUID;
*/
public final class RallyTheRanks extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creatures you control of the chosen type");
static {
filter.add(TargetController.YOU.getControllerPredicate());
filter.add(ChosenSubtypePredicate.TRUE);
}
public RallyTheRanks(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{W}");
@ -24,8 +34,8 @@ public final class RallyTheRanks extends CardImpl {
this.addAbility(new AsEntersBattlefieldAbility(new ChooseCreatureTypeEffect(Outcome.BoostCreature)));
// Creatures you control of the chosen type get +1/+1.
this.addAbility(new SimpleStaticAbility(new BoostAllOfChosenSubtypeEffect(
1, 1, Duration.WhileOnBattlefield, false
this.addAbility(new SimpleStaticAbility(new BoostAllEffect(
1, 1, Duration.WhileOnBattlefield, filter, false
)));
}

View file

@ -121,7 +121,7 @@ class ReidaneGodOfTheWorthyCostEffect extends CostModificationEffectImpl {
ReidaneGodOfTheWorthyCostEffect() {
super(Duration.WhileOnBattlefield, Outcome.Benefit, CostModificationType.INCREASE_COST);
staticText = "Noncreature spells your opponents cast with converted mana cost 4 or greater cost {2} more to cast until your next turn";
staticText = "Noncreature spells your opponents cast with converted mana cost 4 or greater cost {2} more to cast";
}
private ReidaneGodOfTheWorthyCostEffect(ReidaneGodOfTheWorthyCostEffect effect) {
@ -155,7 +155,7 @@ class ValkmiraProtectorsShieldPreventionEffect extends PreventionEffectImpl {
ValkmiraProtectorsShieldPreventionEffect() {
super(Duration.WhileOnBattlefield, 1, false, false);
this.staticText = "If a source would deal damage to you or a permanent you control, prevent 1 of that damage";
this.staticText = "If a source an opponent controls would deal damage to you or a permanent you control, prevent 1 of that damage";
}
private ValkmiraProtectorsShieldPreventionEffect(ValkmiraProtectorsShieldPreventionEffect effect) {
@ -169,6 +169,9 @@ class ValkmiraProtectorsShieldPreventionEffect extends PreventionEffectImpl {
@Override
public boolean applies(GameEvent event, Ability source, Game game) {
if (!game.getOpponents(event.getSourceId()).contains(source.getControllerId())) {
return false;
}
switch (event.getType()) {
case DAMAGE_PLAYER:
return source.isControlledBy(event.getTargetId())

View file

@ -24,6 +24,9 @@ public final class RunAshore extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{4}{U}{U}");
// Choose one or both
this.getSpellAbility().getModes().setMinModes(1);
this.getSpellAbility().getModes().setMaxModes(2);
// The owner of target nonland permanent puts it on the top or bottom of their library.
this.getSpellAbility().addEffect(new RunAshoreEffect());
this.getSpellAbility().addTarget(new TargetNonlandPermanent());

View file

@ -22,7 +22,7 @@ import java.util.UUID;
public final class SearchForGlory extends CardImpl {
private static final FilterCard filter = new FilterCard(
"a snow permanent card, a legendary card, or a Saga card"
"snow permanent card, a legendary card, or a Saga card"
);
static {

View file

@ -43,7 +43,7 @@ public final class ShepherdOfTheCosmos extends CardImpl {
this.addAbility(FlyingAbility.getInstance());
// When Shepherd of the Cosmos enters the battlefield, return target permanent card with converted mana cost 2 or less from your graveyard to the battlefield.
Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnFromGraveyardToBattlefieldTargetEffect());
Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnFromGraveyardToBattlefieldTargetEffect(false, false));
ability.addTarget(new TargetCardInYourGraveyard(filter));
this.addAbility(ability);

View file

@ -44,7 +44,7 @@ public final class SkemfarAvenger extends CardImpl {
// Whenever another nontoken Elf or Berserker you control dies, you draw a card and you lose 1 life.
Ability ability = new DiesCreatureTriggeredAbility(
new DrawCardSourceControllerEffect(1), false, filter
new DrawCardSourceControllerEffect(1).setText("you draw a card"), false, filter
);
ability.addEffect(new LoseLifeSourceControllerEffect(1).concatBy("and"));
this.addAbility(ability);

View file

@ -42,7 +42,7 @@ public final class SkemfarElderhall extends CardImpl {
ability.addCost(new TapSourceCost());
ability.addCost(new SacrificeSourceCost());
ability.addEffect(new CreateTokenEffect(new ElfToken(), 2));
ability.addTarget(new TargetPermanent(StaticFilters.FILTER_CREATURE_YOU_DONT_CONTROL));
ability.addTarget(new TargetPermanent(0, 1, StaticFilters.FILTER_CREATURE_YOU_DONT_CONTROL, false));
this.addAbility(ability);
}

View file

@ -50,7 +50,7 @@ class SmashingSuccessEffect extends OneShotEffect {
public SmashingSuccessEffect() {
super(Outcome.DestroyPermanent);
staticText = "Destroy target artifact or land. If an artifact is destroyed this was, create a Treasure token.";
staticText = "Destroy target artifact or land. If an artifact is destroyed this way, create a Treasure token.";
}
private SmashingSuccessEffect(final SmashingSuccessEffect effect) {

View file

@ -29,7 +29,7 @@ import java.util.UUID;
public final class SpiritOfTheAldergard extends CardImpl {
private static final FilterCard filter
= new FilterLandCard("a snow land card");
= new FilterLandCard("snow land card");
private static final FilterPermanent filter2
= new FilterControlledPermanent("other snow permanent you control");

View file

@ -18,7 +18,7 @@ import java.util.UUID;
*/
public final class StarnheimCourser extends CardImpl {
private static final FilterCard filter = new FilterArtifactOrEnchantmentCard("artifact and enchantment");
private static final FilterCard filter = new FilterArtifactOrEnchantmentCard("artifact and enchantment spells");
public StarnheimCourser(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}");

View file

@ -38,7 +38,7 @@ public final class TheBearsOfLittjara extends CardImpl {
// I Create a 2/2 blue Shapeshifter creature token with changeling.
sagaAbility.addChapterEffect(
this, SagaChapter.CHAPTER_II,
this, SagaChapter.CHAPTER_I,
new CreateTokenEffect(new ShapeshifterBlueToken())
);

View file

@ -22,7 +22,6 @@ import mage.constants.Duration;
import mage.constants.SubType;
import mage.filter.FilterCard;
import mage.filter.StaticFilters;
import mage.filter.common.FilterBySubtypeCard;
import mage.target.common.TargetCardInLibrary;
import java.util.UUID;
@ -32,11 +31,15 @@ import java.util.UUID;
*/
public final class TheWorldTree extends CardImpl {
private static final FilterCard filter = new FilterBySubtypeCard(SubType.GOD);
private static final FilterCard filter = new FilterCard("God cards");
private static final Condition condition = new PermanentsOnTheBattlefieldCondition(
StaticFilters.FILTER_CONTROLLED_PERMANENT_LAND, ComparisonType.MORE_THAN, 5
);
static {
filter.add(SubType.GOD.getPredicate());
}
public TheWorldTree(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");

View file

@ -67,7 +67,7 @@ public final class ToralfGodOfFury extends ModalDoubleFacesCard {
// Equipped creature has "{1}{R}, {T}, Unattach Toralf's Hammer: It deals 3 damage to any target. Return Toralf's Hammer to its owner's hand."
this.getRightHalfCard().addAbility(new SimpleStaticAbility(new GainAbilityWithAttachmentEffect(
"equipped creature has \"{tap}, Unattach {this}: It deals 3 damage to any target. Return {this} to its owner's hand.\"",
"equipped creature has \"{1}{R}, {T}, Unattach {this}: It deals 3 damage to any target. Return {this} to its owner's hand.\"",
new ToralfsHammerEffect(), new TargetAnyTarget(), new UnattachCost(), new ManaCostsImpl<>("{1}{R}"), new TapSourceCost()
)));

View file

@ -55,7 +55,7 @@ public final class Withercrown extends CardImpl {
effect2.setText("you lose 1 life unless you sacrifice this creature.");
Effect effect3 = new GainAbilityAttachedEffect(new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD,
effect2, TargetController.YOU, false, false, null), AttachmentType.AURA);
effect3.setText("and has At the beginning of your upkeep, you lose 1 life unless you sacrifice this creature.");
effect3.setText("and has \"At the beginning of your upkeep, you lose 1 life unless you sacrifice this creature.\"");
abilityTest.addEffect(effect3);
this.addAbility(abilityTest);

View file

@ -54,7 +54,7 @@ public class VerifyCardDataTest {
private static final Logger logger = Logger.getLogger(VerifyCardDataTest.class);
private static final String FULL_ABILITIES_CHECK_SET_CODE = "CMR"; // check all abilities and output cards with wrong abilities texts;
private static final String FULL_ABILITIES_CHECK_SET_CODE = "KHM"; // 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 HashMap<String, Set<String>> skipCheckLists = new HashMap<>();

View file

@ -24,6 +24,6 @@ public enum ForetoldCondition implements Condition {
@Override
public String toString() {
return "this card was foretold";
return "this spell was foretold";
}
}

View file

@ -27,7 +27,7 @@ public class RevealTargetFromHandCost extends CostImpl {
public RevealTargetFromHandCost(TargetCardInHand target) {
this.addTarget(target);
this.text = (target.getNumberOfTargets() == 0 ? "You may reveal " : "Reveal ") + target.getTargetName();
this.text = (target.getNumberOfTargets() == 0 ? "you may reveal " : "reveal ") + target.getTargetName();
this.revealedCards = new ArrayList<>();
}

View file

@ -168,6 +168,7 @@ public class DoIfCostPaid extends OneShotEffect {
&& !costText.toLowerCase(Locale.ENGLISH).startsWith("sacrifice")
&& !costText.toLowerCase(Locale.ENGLISH).startsWith("remove")
&& !costText.toLowerCase(Locale.ENGLISH).startsWith("tap")
&& !costText.toLowerCase(Locale.ENGLISH).startsWith("reveal")
&& !costText.toLowerCase(Locale.ENGLISH).startsWith("pay")) {
sb.append("pay ");
}

View file

@ -88,6 +88,7 @@ public class DoWhenCostPaid extends OneShotEffect {
&& !costText.toLowerCase(Locale.ENGLISH).startsWith("sacrifice")
&& !costText.toLowerCase(Locale.ENGLISH).startsWith("remove")
&& !costText.toLowerCase(Locale.ENGLISH).startsWith("tap")
&& !costText.toLowerCase(Locale.ENGLISH).startsWith("reveal")
&& !costText.toLowerCase(Locale.ENGLISH).startsWith("pay")) {
sb.append("pay ");
}

View file

@ -107,7 +107,7 @@ public class LookLibraryTopCardTargetPlayerEffect extends OneShotEffect {
} else {
sb.append("that card");
}
sb.append(" into that player's graveyard");
sb.append(" into their graveyard");
}
if (mayShuffleAfter) {
sb.append(". You may then have that player shuffle that library");

View file

@ -11,6 +11,7 @@ import mage.constants.Outcome;
import mage.constants.SubLayer;
import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.target.Target;
import java.util.UUID;
@ -70,8 +71,17 @@ public class SetPowerToughnessTargetEffect extends ContinuousEffectImpl {
if (!mode.getTargets().get(0).getTargetName().contains("target")) {
sb.append("target ");
}
sb.append(mode.getTargets().get(0).getTargetName()).append(" has base power and toughness ");
sb.append(power).append('/').append(toughness).append(' ').append(duration.toString());
sb.append(mode.getTargets().get(0).getTargetName());
if (mode.getTargets().stream().mapToInt(Target::getMaxNumberOfTargets).max().orElse(0) > 1) {
sb.append(" have");
} else {
sb.append(" has");
}
sb.append(" base power and toughness ");
sb.append(power).append('/').append(toughness);
if (!duration.toString().isEmpty()) {
sb.append(' ').append(duration.toString());
}
return sb.toString();
}

View file

@ -27,9 +27,11 @@ public final class TyvarKellEmblem extends Emblem {
this.setName("Emblem Tyvar");
this.setExpansionSetCodeForImage("KHM");
Ability ability = new SpellCastControllerTriggeredAbility(Zone.COMMAND,
new GainAbilityTargetEffect(HasteAbility.getInstance(), Duration.EndOfTurn, null, true),
filter, false, true, true
Ability ability = new SpellCastControllerTriggeredAbility(
Zone.COMMAND,
new GainAbilityTargetEffect(
HasteAbility.getInstance(), Duration.EndOfTurn, null, true
).setText("it gains haste until end of turn"), filter, false, true, true
);
ability.addEffect(new DrawCardSourceControllerEffect(2, "you").concatBy("and"));
this.getAbilities().add(ability);