mirror of
https://github.com/magefree/mage.git
synced 2025-12-22 03:22:00 -08: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());
|
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.
|
// 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);
|
Ability ability3 = new DealsCombatDamageToAPlayerTriggeredAbility(new ReturnToHandSourceEffect().setText("return it to its owner's hand"), false);
|
||||||
ability3.addEffect(new ScryEffect(2));
|
ability3.addEffect(new ScryEffect(2).concatBy(", then"));
|
||||||
this.getRightHalfCard().addAbility(ability3);
|
this.getRightHalfCard().addAbility(ability3);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -89,7 +89,7 @@ class AlrundGodOfTheCosmosEffect extends OneShotEffect {
|
||||||
|
|
||||||
public AlrundGodOfTheCosmosEffect() {
|
public AlrundGodOfTheCosmosEffect() {
|
||||||
super(Outcome.Neutral);
|
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) {
|
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}");
|
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.
|
// 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(new AddExtraTurnControllerEffect());
|
||||||
this.getSpellAbility().addEffect(ExileSpellEffect.getInstance());
|
this.getSpellAbility().addEffect(ExileSpellEffect.getInstance());
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -101,7 +101,7 @@ class AscendantSpiritAngelEffect extends OneShotEffect {
|
||||||
AscendantSpiritAngelEffect() {
|
AscendantSpiritAngelEffect() {
|
||||||
super(Outcome.Benefit);
|
super(Outcome.Benefit);
|
||||||
staticText = "if {this} is an Angel, put two +1/+1 counters on it and it gains " +
|
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) {
|
private AscendantSpiritAngelEffect(final AscendantSpiritAngelEffect effect) {
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,6 @@ public final class AxgardArmory extends CardImpl {
|
||||||
public AxgardArmory(UUID ownerId, CardSetInfo setInfo) {
|
public AxgardArmory(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
|
super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
|
||||||
|
|
||||||
|
|
||||||
// Axgard Armory enters the battlefield tapped.
|
// Axgard Armory enters the battlefield tapped.
|
||||||
this.addAbility(new EntersBattlefieldTappedAbility());
|
this.addAbility(new EntersBattlefieldTappedAbility());
|
||||||
|
|
||||||
|
|
@ -35,8 +34,11 @@ public final class AxgardArmory extends CardImpl {
|
||||||
this.addAbility(new WhiteManaAbility());
|
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.
|
// {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(
|
Ability ability = new SimpleActivatedAbility(
|
||||||
new AxgardArmoryTarget()), new ManaCostsImpl("{1}{R}{R}{W}")
|
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 TapSourceCost());
|
||||||
ability.addCost(new SacrificeSourceCost());
|
ability.addCost(new SacrificeSourceCost());
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@ public final class BeholdTheMultiverse extends CardImpl {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{3}{U}");
|
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{3}{U}");
|
||||||
|
|
||||||
// Scry 2, then draw two cards.
|
// 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"));
|
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(2).concatBy(", then"));
|
||||||
|
|
||||||
// Foretell {1}{U}
|
// Foretell {1}{U}
|
||||||
|
|
|
||||||
|
|
@ -50,7 +50,7 @@ public final class BindingTheOldGods extends CardImpl {
|
||||||
// III — Creatures you control gain deathtouch until end of turn.
|
// III — Creatures you control gain deathtouch until end of turn.
|
||||||
sagaAbility.addChapterEffect(this, SagaChapter.CHAPTER_III,
|
sagaAbility.addChapterEffect(this, SagaChapter.CHAPTER_III,
|
||||||
new GainAbilityControlledEffect(DeathtouchAbility.getInstance(), Duration.EndOfTurn,
|
new GainAbilityControlledEffect(DeathtouchAbility.getInstance(), Duration.EndOfTurn,
|
||||||
StaticFilters.FILTER_CONTROLLED_CREATURES)
|
StaticFilters.FILTER_PERMANENT_CREATURES)
|
||||||
);
|
);
|
||||||
this.addAbility(sagaAbility);
|
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}"));
|
Ability ability = new ActivateAsSorceryActivatedAbility(Zone.BATTLEFIELD, countersEffect, new ManaCostsImpl<>("{G}{W}{W}"));
|
||||||
|
|
||||||
Effect vigilanceEffect = new GainAbilityTargetEffect(VigilanceAbility.getInstance(), Duration.EndOfTurn);
|
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);
|
ability.addEffect(vigilanceEffect);
|
||||||
|
|
||||||
Effect lifelinkEffect = new GainAbilityTargetEffect(LifelinkAbility.getInstance(), Duration.EndOfTurn);
|
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.addEffect(lifelinkEffect);
|
||||||
|
|
||||||
ability.addCost(new TapSourceCost());
|
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.
|
// When Doomskar Titan enters the battlefield, creatures you control get +1/+0 and gain haste until end of turn.
|
||||||
Ability ability = new EntersBattlefieldTriggeredAbility(
|
Ability ability = new EntersBattlefieldTriggeredAbility(
|
||||||
new BoostControlledEffect(1, 0, Duration.EndOfTurn)
|
new BoostControlledEffect(1, 0, Duration.EndOfTurn)
|
||||||
|
.setText("creatures you control get +1/+0")
|
||||||
);
|
);
|
||||||
ability.addEffect(new GainAbilityControlledEffect(
|
ability.addEffect(new GainAbilityControlledEffect(
|
||||||
HasteAbility.getInstance(), Duration.EndOfTurn
|
HasteAbility.getInstance(), Duration.EndOfTurn
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@ import mage.game.permanent.token.ElfToken;
|
||||||
*/
|
*/
|
||||||
public final class ElvenAmbush extends CardImpl {
|
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 {
|
static {
|
||||||
filter.add(SubType.ELF.getPredicate());
|
filter.add(SubType.ELF.getPredicate());
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,7 @@ import mage.constants.CardType;
|
||||||
import mage.constants.SubType;
|
import mage.constants.SubType;
|
||||||
import mage.filter.StaticFilters;
|
import mage.filter.StaticFilters;
|
||||||
import mage.target.common.TargetControlledCreaturePermanent;
|
import mage.target.common.TargetControlledCreaturePermanent;
|
||||||
|
import mage.target.common.TargetControlledPermanent;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
|
|
@ -43,7 +44,7 @@ public final class EradicatorValkyrie extends CardImpl {
|
||||||
Ability ability = new BoastAbility(new SacrificeOpponentsEffect(
|
Ability ability = new BoastAbility(new SacrificeOpponentsEffect(
|
||||||
StaticFilters.FILTER_PERMANENT_CREATURE_OR_PLANESWALKER
|
StaticFilters.FILTER_PERMANENT_CREATURE_OR_PLANESWALKER
|
||||||
), "{1}{B}");
|
), "{1}{B}");
|
||||||
ability.addCost(new SacrificeTargetCost(new TargetControlledCreaturePermanent()));
|
ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent(StaticFilters.FILTER_CONTROLLED_CREATURE_SHORT_TEXT)));
|
||||||
this.addAbility(ability);
|
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.
|
// {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(
|
this.addAbility(new SimpleActivatedAbility(new BecomesCreatureSourceEffect(
|
||||||
new FacelessHavenToken(), "land", Duration.EndOfTurn
|
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) {
|
private FacelessHaven(final FacelessHaven card) {
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,7 @@ import java.util.UUID;
|
||||||
public final class ForgingTheTyriteSword extends CardImpl {
|
public final class ForgingTheTyriteSword extends CardImpl {
|
||||||
|
|
||||||
private static final FilterCard filter
|
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 {
|
static {
|
||||||
filter.add(Predicates.or(
|
filter.add(Predicates.or(
|
||||||
|
|
|
||||||
|
|
@ -74,6 +74,6 @@ class FrenziedRaiderTriggeredAbility extends TriggeredAbilityImpl {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getRule() {
|
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 {
|
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(
|
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 {
|
static {
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,7 @@ import java.util.UUID;
|
||||||
public final class FynnTheFangbearer extends CardImpl {
|
public final class FynnTheFangbearer extends CardImpl {
|
||||||
|
|
||||||
private static final FilterPermanent filter
|
private static final FilterPermanent filter
|
||||||
= new FilterControlledCreaturePermanent("creature you control with deathtouch");
|
= new FilterControlledCreaturePermanent("a creature you control with deathtouch");
|
||||||
|
|
||||||
static {
|
static {
|
||||||
filter.add(new AbilityPredicate(DeathtouchAbility.class));
|
filter.add(new AbilityPredicate(DeathtouchAbility.class));
|
||||||
|
|
|
||||||
|
|
@ -45,8 +45,9 @@ public final class GiantsAmulet extends CardImpl {
|
||||||
HexproofAbility.getInstance(),
|
HexproofAbility.getInstance(),
|
||||||
Duration.WhileOnBattlefield
|
Duration.WhileOnBattlefield
|
||||||
), new InvertCondition(SourceTappedCondition.instance),
|
), new InvertCondition(SourceTappedCondition.instance),
|
||||||
"{this} has hexproof as long as it's untapped")
|
"{this} has hexproof as long as it's untapped"
|
||||||
), AttachmentType.EQUIPMENT));
|
)), AttachmentType.EQUIPMENT
|
||||||
|
).setText("and has \"This creature has hexproof as long as it's untapped.\""));
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
|
|
||||||
// Equip {2}
|
// Equip {2}
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,7 @@ import java.util.UUID;
|
||||||
public final class GildedAssaultCart extends CardImpl {
|
public final class GildedAssaultCart extends CardImpl {
|
||||||
|
|
||||||
private static final FilterControlledPermanent filter
|
private static final FilterControlledPermanent filter
|
||||||
= new FilterControlledPermanent(SubType.TREASURE, "treasures");
|
= new FilterControlledPermanent(SubType.TREASURE, "Treasures");
|
||||||
|
|
||||||
public GildedAssaultCart(UUID ownerId, CardSetInfo setInfo) {
|
public GildedAssaultCart(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{1}{R}{R}");
|
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")));
|
).setText("enchanted land is snow")));
|
||||||
|
|
||||||
// Whenever enchanted land is tapped for mana, its controller adds an additional one mana of any color.
|
// 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) {
|
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.
|
// 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(
|
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}"));
|
), "{1}{G}"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -83,7 +83,7 @@ class InvasionOfTheGiantsEffect extends CostModificationEffectImpl {
|
||||||
|
|
||||||
InvasionOfTheGiantsEffect() {
|
InvasionOfTheGiantsEffect() {
|
||||||
super(Duration.EndOfTurn, Outcome.Benefit, CostModificationType.REDUCE_COST);
|
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) {
|
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.
|
// {S}{S}{S}: Return Narfi, Betrayer King from your graveyard to the battlefield tapped.
|
||||||
this.addAbility(new SimpleActivatedAbility(
|
this.addAbility(new SimpleActivatedAbility(
|
||||||
Zone.GRAVEYARD,
|
Zone.GRAVEYARD,
|
||||||
new ReturnSourceFromGraveyardToBattlefieldEffect(true),
|
new ReturnSourceFromGraveyardToBattlefieldEffect(true, false),
|
||||||
new ManaCostsImpl("{S}{S}{S}")
|
new ManaCostsImpl("{S}{S}{S}")
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -57,7 +57,7 @@ class PortOfKarfellEffect extends OneShotEffect {
|
||||||
|
|
||||||
PortOfKarfellEffect() {
|
PortOfKarfellEffect() {
|
||||||
super(Outcome.Benefit);
|
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) {
|
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.SacrificeSourceCost;
|
||||||
import mage.abilities.costs.common.TapSourceCost;
|
import mage.abilities.costs.common.TapSourceCost;
|
||||||
import mage.abilities.dynamicvalue.DynamicValue;
|
import mage.abilities.dynamicvalue.DynamicValue;
|
||||||
|
import mage.abilities.dynamicvalue.MultipliedValue;
|
||||||
import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount;
|
import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount;
|
||||||
import mage.abilities.effects.common.continuous.BoostTargetEffect;
|
import mage.abilities.effects.common.continuous.BoostTargetEffect;
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
|
|
@ -28,7 +29,7 @@ public final class PriestOfTheHauntedEdge extends CardImpl {
|
||||||
filter.add(SuperType.SNOW.getPredicate());
|
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) {
|
public PriestOfTheHauntedEdge(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{B}");
|
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{B}");
|
||||||
|
|
@ -43,7 +44,7 @@ public final class PriestOfTheHauntedEdge extends CardImpl {
|
||||||
Ability ability = new ActivateAsSorceryActivatedAbility(
|
Ability ability = new ActivateAsSorceryActivatedAbility(
|
||||||
Zone.BATTLEFIELD, new BoostTargetEffect(
|
Zone.BATTLEFIELD, new BoostTargetEffect(
|
||||||
xValue, xValue, Duration.EndOfTurn, true
|
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.addCost(new SacrificeSourceCost());
|
||||||
ability.addTarget(new TargetCreaturePermanent());
|
ability.addTarget(new TargetCreaturePermanent());
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
|
|
|
||||||
|
|
@ -50,7 +50,7 @@ class RaiseTheDraugrTarget extends TargetCardInYourGraveyard {
|
||||||
|
|
||||||
RaiseTheDraugrTarget() {
|
RaiseTheDraugrTarget() {
|
||||||
super(2, 2, StaticFilters.FILTER_CARD_CREATURE, false);
|
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) {
|
private RaiseTheDraugrTarget(final RaiseTheDraugrTarget target) {
|
||||||
|
|
|
||||||
|
|
@ -3,12 +3,15 @@ package mage.cards.r;
|
||||||
import mage.abilities.common.AsEntersBattlefieldAbility;
|
import mage.abilities.common.AsEntersBattlefieldAbility;
|
||||||
import mage.abilities.common.SimpleStaticAbility;
|
import mage.abilities.common.SimpleStaticAbility;
|
||||||
import mage.abilities.effects.common.ChooseCreatureTypeEffect;
|
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.CardImpl;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.constants.Duration;
|
import mage.constants.Duration;
|
||||||
import mage.constants.Outcome;
|
import mage.constants.Outcome;
|
||||||
|
import mage.constants.TargetController;
|
||||||
|
import mage.filter.common.FilterCreaturePermanent;
|
||||||
|
import mage.filter.predicate.mageobject.ChosenSubtypePredicate;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
|
|
@ -17,6 +20,13 @@ import java.util.UUID;
|
||||||
*/
|
*/
|
||||||
public final class RallyTheRanks extends CardImpl {
|
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) {
|
public RallyTheRanks(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{W}");
|
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)));
|
this.addAbility(new AsEntersBattlefieldAbility(new ChooseCreatureTypeEffect(Outcome.BoostCreature)));
|
||||||
|
|
||||||
// Creatures you control of the chosen type get +1/+1.
|
// Creatures you control of the chosen type get +1/+1.
|
||||||
this.addAbility(new SimpleStaticAbility(new BoostAllOfChosenSubtypeEffect(
|
this.addAbility(new SimpleStaticAbility(new BoostAllEffect(
|
||||||
1, 1, Duration.WhileOnBattlefield, false
|
1, 1, Duration.WhileOnBattlefield, filter, false
|
||||||
)));
|
)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -121,7 +121,7 @@ class ReidaneGodOfTheWorthyCostEffect extends CostModificationEffectImpl {
|
||||||
|
|
||||||
ReidaneGodOfTheWorthyCostEffect() {
|
ReidaneGodOfTheWorthyCostEffect() {
|
||||||
super(Duration.WhileOnBattlefield, Outcome.Benefit, CostModificationType.INCREASE_COST);
|
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) {
|
private ReidaneGodOfTheWorthyCostEffect(ReidaneGodOfTheWorthyCostEffect effect) {
|
||||||
|
|
@ -155,7 +155,7 @@ class ValkmiraProtectorsShieldPreventionEffect extends PreventionEffectImpl {
|
||||||
|
|
||||||
ValkmiraProtectorsShieldPreventionEffect() {
|
ValkmiraProtectorsShieldPreventionEffect() {
|
||||||
super(Duration.WhileOnBattlefield, 1, false, false);
|
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) {
|
private ValkmiraProtectorsShieldPreventionEffect(ValkmiraProtectorsShieldPreventionEffect effect) {
|
||||||
|
|
@ -169,6 +169,9 @@ class ValkmiraProtectorsShieldPreventionEffect extends PreventionEffectImpl {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean applies(GameEvent event, Ability source, Game game) {
|
public boolean applies(GameEvent event, Ability source, Game game) {
|
||||||
|
if (!game.getOpponents(event.getSourceId()).contains(source.getControllerId())) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
switch (event.getType()) {
|
switch (event.getType()) {
|
||||||
case DAMAGE_PLAYER:
|
case DAMAGE_PLAYER:
|
||||||
return source.isControlledBy(event.getTargetId())
|
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}");
|
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{4}{U}{U}");
|
||||||
|
|
||||||
// Choose one or both —
|
// 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.
|
// • The owner of target nonland permanent puts it on the top or bottom of their library.
|
||||||
this.getSpellAbility().addEffect(new RunAshoreEffect());
|
this.getSpellAbility().addEffect(new RunAshoreEffect());
|
||||||
this.getSpellAbility().addTarget(new TargetNonlandPermanent());
|
this.getSpellAbility().addTarget(new TargetNonlandPermanent());
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,7 @@ import java.util.UUID;
|
||||||
public final class SearchForGlory extends CardImpl {
|
public final class SearchForGlory extends CardImpl {
|
||||||
|
|
||||||
private static final FilterCard filter = new FilterCard(
|
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 {
|
static {
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,7 @@ public final class ShepherdOfTheCosmos extends CardImpl {
|
||||||
this.addAbility(FlyingAbility.getInstance());
|
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.
|
// 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));
|
ability.addTarget(new TargetCardInYourGraveyard(filter));
|
||||||
this.addAbility(ability);
|
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.
|
// Whenever another nontoken Elf or Berserker you control dies, you draw a card and you lose 1 life.
|
||||||
Ability ability = new DiesCreatureTriggeredAbility(
|
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"));
|
ability.addEffect(new LoseLifeSourceControllerEffect(1).concatBy("and"));
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
|
|
|
||||||
|
|
@ -42,7 +42,7 @@ public final class SkemfarElderhall extends CardImpl {
|
||||||
ability.addCost(new TapSourceCost());
|
ability.addCost(new TapSourceCost());
|
||||||
ability.addCost(new SacrificeSourceCost());
|
ability.addCost(new SacrificeSourceCost());
|
||||||
ability.addEffect(new CreateTokenEffect(new ElfToken(), 2));
|
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);
|
this.addAbility(ability);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -50,7 +50,7 @@ class SmashingSuccessEffect extends OneShotEffect {
|
||||||
|
|
||||||
public SmashingSuccessEffect() {
|
public SmashingSuccessEffect() {
|
||||||
super(Outcome.DestroyPermanent);
|
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) {
|
private SmashingSuccessEffect(final SmashingSuccessEffect effect) {
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,7 @@ import java.util.UUID;
|
||||||
public final class SpiritOfTheAldergard extends CardImpl {
|
public final class SpiritOfTheAldergard extends CardImpl {
|
||||||
|
|
||||||
private static final FilterCard filter
|
private static final FilterCard filter
|
||||||
= new FilterLandCard("a snow land card");
|
= new FilterLandCard("snow land card");
|
||||||
private static final FilterPermanent filter2
|
private static final FilterPermanent filter2
|
||||||
= new FilterControlledPermanent("other snow permanent you control");
|
= new FilterControlledPermanent("other snow permanent you control");
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@ import java.util.UUID;
|
||||||
*/
|
*/
|
||||||
public final class StarnheimCourser extends CardImpl {
|
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) {
|
public StarnheimCourser(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}");
|
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.
|
// I — Create a 2/2 blue Shapeshifter creature token with changeling.
|
||||||
sagaAbility.addChapterEffect(
|
sagaAbility.addChapterEffect(
|
||||||
this, SagaChapter.CHAPTER_II,
|
this, SagaChapter.CHAPTER_I,
|
||||||
new CreateTokenEffect(new ShapeshifterBlueToken())
|
new CreateTokenEffect(new ShapeshifterBlueToken())
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,6 @@ import mage.constants.Duration;
|
||||||
import mage.constants.SubType;
|
import mage.constants.SubType;
|
||||||
import mage.filter.FilterCard;
|
import mage.filter.FilterCard;
|
||||||
import mage.filter.StaticFilters;
|
import mage.filter.StaticFilters;
|
||||||
import mage.filter.common.FilterBySubtypeCard;
|
|
||||||
import mage.target.common.TargetCardInLibrary;
|
import mage.target.common.TargetCardInLibrary;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
@ -32,11 +31,15 @@ import java.util.UUID;
|
||||||
*/
|
*/
|
||||||
public final class TheWorldTree extends CardImpl {
|
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(
|
private static final Condition condition = new PermanentsOnTheBattlefieldCondition(
|
||||||
StaticFilters.FILTER_CONTROLLED_PERMANENT_LAND, ComparisonType.MORE_THAN, 5
|
StaticFilters.FILTER_CONTROLLED_PERMANENT_LAND, ComparisonType.MORE_THAN, 5
|
||||||
);
|
);
|
||||||
|
|
||||||
|
static {
|
||||||
|
filter.add(SubType.GOD.getPredicate());
|
||||||
|
}
|
||||||
|
|
||||||
public TheWorldTree(UUID ownerId, CardSetInfo setInfo) {
|
public TheWorldTree(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
|
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."
|
// 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(
|
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()
|
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.");
|
effect2.setText("you lose 1 life unless you sacrifice this creature.");
|
||||||
Effect effect3 = new GainAbilityAttachedEffect(new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD,
|
Effect effect3 = new GainAbilityAttachedEffect(new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD,
|
||||||
effect2, TargetController.YOU, false, false, null), AttachmentType.AURA);
|
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);
|
abilityTest.addEffect(effect3);
|
||||||
this.addAbility(abilityTest);
|
this.addAbility(abilityTest);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -54,7 +54,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 = "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 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<>();
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,6 @@ public enum ForetoldCondition implements Condition {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
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) {
|
public RevealTargetFromHandCost(TargetCardInHand target) {
|
||||||
this.addTarget(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<>();
|
this.revealedCards = new ArrayList<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -168,6 +168,7 @@ public class DoIfCostPaid extends OneShotEffect {
|
||||||
&& !costText.toLowerCase(Locale.ENGLISH).startsWith("sacrifice")
|
&& !costText.toLowerCase(Locale.ENGLISH).startsWith("sacrifice")
|
||||||
&& !costText.toLowerCase(Locale.ENGLISH).startsWith("remove")
|
&& !costText.toLowerCase(Locale.ENGLISH).startsWith("remove")
|
||||||
&& !costText.toLowerCase(Locale.ENGLISH).startsWith("tap")
|
&& !costText.toLowerCase(Locale.ENGLISH).startsWith("tap")
|
||||||
|
&& !costText.toLowerCase(Locale.ENGLISH).startsWith("reveal")
|
||||||
&& !costText.toLowerCase(Locale.ENGLISH).startsWith("pay")) {
|
&& !costText.toLowerCase(Locale.ENGLISH).startsWith("pay")) {
|
||||||
sb.append("pay ");
|
sb.append("pay ");
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -88,6 +88,7 @@ public class DoWhenCostPaid extends OneShotEffect {
|
||||||
&& !costText.toLowerCase(Locale.ENGLISH).startsWith("sacrifice")
|
&& !costText.toLowerCase(Locale.ENGLISH).startsWith("sacrifice")
|
||||||
&& !costText.toLowerCase(Locale.ENGLISH).startsWith("remove")
|
&& !costText.toLowerCase(Locale.ENGLISH).startsWith("remove")
|
||||||
&& !costText.toLowerCase(Locale.ENGLISH).startsWith("tap")
|
&& !costText.toLowerCase(Locale.ENGLISH).startsWith("tap")
|
||||||
|
&& !costText.toLowerCase(Locale.ENGLISH).startsWith("reveal")
|
||||||
&& !costText.toLowerCase(Locale.ENGLISH).startsWith("pay")) {
|
&& !costText.toLowerCase(Locale.ENGLISH).startsWith("pay")) {
|
||||||
sb.append("pay ");
|
sb.append("pay ");
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -107,7 +107,7 @@ public class LookLibraryTopCardTargetPlayerEffect extends OneShotEffect {
|
||||||
} else {
|
} else {
|
||||||
sb.append("that card");
|
sb.append("that card");
|
||||||
}
|
}
|
||||||
sb.append(" into that player's graveyard");
|
sb.append(" into their graveyard");
|
||||||
}
|
}
|
||||||
if (mayShuffleAfter) {
|
if (mayShuffleAfter) {
|
||||||
sb.append(". You may then have that player shuffle that library");
|
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.constants.SubLayer;
|
||||||
import mage.game.Game;
|
import mage.game.Game;
|
||||||
import mage.game.permanent.Permanent;
|
import mage.game.permanent.Permanent;
|
||||||
|
import mage.target.Target;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
|
|
@ -70,8 +71,17 @@ public class SetPowerToughnessTargetEffect extends ContinuousEffectImpl {
|
||||||
if (!mode.getTargets().get(0).getTargetName().contains("target")) {
|
if (!mode.getTargets().get(0).getTargetName().contains("target")) {
|
||||||
sb.append("target ");
|
sb.append("target ");
|
||||||
}
|
}
|
||||||
sb.append(mode.getTargets().get(0).getTargetName()).append(" has base power and toughness ");
|
sb.append(mode.getTargets().get(0).getTargetName());
|
||||||
sb.append(power).append('/').append(toughness).append(' ').append(duration.toString());
|
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();
|
return sb.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -27,9 +27,11 @@ public final class TyvarKellEmblem extends Emblem {
|
||||||
this.setName("Emblem Tyvar");
|
this.setName("Emblem Tyvar");
|
||||||
this.setExpansionSetCodeForImage("KHM");
|
this.setExpansionSetCodeForImage("KHM");
|
||||||
|
|
||||||
Ability ability = new SpellCastControllerTriggeredAbility(Zone.COMMAND,
|
Ability ability = new SpellCastControllerTriggeredAbility(
|
||||||
new GainAbilityTargetEffect(HasteAbility.getInstance(), Duration.EndOfTurn, null, true),
|
Zone.COMMAND,
|
||||||
filter, false, true, true
|
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"));
|
ability.addEffect(new DrawCardSourceControllerEffect(2, "you").concatBy("and"));
|
||||||
this.getAbilities().add(ability);
|
this.getAbilities().add(ability);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue