mirror of
https://github.com/correl/mage.git
synced 2024-11-14 19:19:32 +00:00
[KHM] various text fixes
This commit is contained in:
parent
7c68284173
commit
d5822a7246
46 changed files with 97 additions and 57 deletions
|
@ -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 owner’s 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) {
|
||||
|
|
|
@ -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());
|
||||
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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());
|
||||
|
|
|
@ -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}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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());
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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());
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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}.";
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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));
|
||||
|
|
|
@ -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}
|
||||
|
|
|
@ -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}");
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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}"));
|
||||
}
|
||||
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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}")
|
||||
));
|
||||
}
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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
|
||||
)));
|
||||
}
|
||||
|
||||
|
|
|
@ -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())
|
||||
|
|
|
@ -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());
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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");
|
||||
|
||||
|
|
|
@ -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}");
|
||||
|
|
|
@ -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())
|
||||
);
|
||||
|
||||
|
|
|
@ -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}, "");
|
||||
|
||||
|
|
|
@ -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()
|
||||
)));
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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<>();
|
||||
|
|
|
@ -24,6 +24,6 @@ public enum ForetoldCondition implements Condition {
|
|||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "this card was foretold";
|
||||
return "this spell was foretold";
|
||||
}
|
||||
}
|
|
@ -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<>();
|
||||
}
|
||||
|
||||
|
|
|
@ -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 ");
|
||||
}
|
||||
|
|
|
@ -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 ");
|
||||
}
|
||||
|
|
|
@ -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");
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in a new issue