mirror of
https://github.com/correl/mage.git
synced 2024-11-15 03:00:16 +00:00
[VOW] various text fixes
This commit is contained in:
parent
8de8a24227
commit
38f0e83274
52 changed files with 102 additions and 105 deletions
|
@ -32,7 +32,7 @@ import mage.game.permanent.token.BloodToken;
|
||||||
*/
|
*/
|
||||||
public final class AnjeMaidOfDishonor extends CardImpl {
|
public final class AnjeMaidOfDishonor extends CardImpl {
|
||||||
|
|
||||||
private static final FilterControlledPermanent filter = new FilterControlledPermanent("another creature or a Blood Token");
|
private static final FilterControlledPermanent filter = new FilterControlledPermanent("another creature or a Blood token");
|
||||||
|
|
||||||
static {
|
static {
|
||||||
filter.add(AnjeMaidOfDishonorPredicate.instance);
|
filter.add(AnjeMaidOfDishonorPredicate.instance);
|
||||||
|
|
|
@ -37,7 +37,6 @@ public final class BallistaWielder extends CardImpl {
|
||||||
|
|
||||||
// {2}{R}: Ballista Wielder deals 1 damage to any target. A creature dealt damage this way can't block this turn.
|
// {2}{R}: Ballista Wielder deals 1 damage to any target. A creature dealt damage this way can't block this turn.
|
||||||
Ability ability = new SimpleActivatedAbility(new BallistaWielderEffect(), new ManaCostsImpl<>("{2}{R}"));
|
Ability ability = new SimpleActivatedAbility(new BallistaWielderEffect(), new ManaCostsImpl<>("{2}{R}"));
|
||||||
ability.addCost(new TapSourceCost());
|
|
||||||
ability.addTarget(new TargetAnyTarget());
|
ability.addTarget(new TargetAnyTarget());
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
|
|
||||||
|
|
|
@ -1,29 +1,33 @@
|
||||||
package mage.cards.b;
|
package mage.cards.b;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.MageInt;
|
import mage.MageInt;
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.common.SimpleActivatedAbility;
|
import mage.abilities.common.SimpleActivatedAbility;
|
||||||
import mage.abilities.common.SimpleStaticAbility;
|
import mage.abilities.common.SimpleStaticAbility;
|
||||||
import mage.abilities.costs.common.DiscardCardCost;
|
import mage.abilities.costs.common.DiscardCardCost;
|
||||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||||
|
import mage.abilities.dynamicvalue.DynamicValue;
|
||||||
import mage.abilities.dynamicvalue.common.CardsInControllerGraveyardCount;
|
import mage.abilities.dynamicvalue.common.CardsInControllerGraveyardCount;
|
||||||
import mage.abilities.effects.common.TapSourceEffect;
|
import mage.abilities.effects.common.TapSourceEffect;
|
||||||
import mage.abilities.effects.common.continuous.GainAbilitySourceEffect;
|
import mage.abilities.effects.common.continuous.GainAbilitySourceEffect;
|
||||||
import mage.abilities.effects.common.continuous.SetPowerToughnessSourceEffect;
|
import mage.abilities.effects.common.continuous.SetPowerToughnessSourceEffect;
|
||||||
import mage.abilities.keyword.IndestructibleAbility;
|
import mage.abilities.keyword.IndestructibleAbility;
|
||||||
import mage.constants.Duration;
|
|
||||||
import mage.constants.SubType;
|
|
||||||
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.SubType;
|
||||||
|
import mage.filter.StaticFilters;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author weirddan455
|
* @author weirddan455
|
||||||
*/
|
*/
|
||||||
public final class BloodswornKnight extends CardImpl {
|
public final class BloodswornKnight extends CardImpl {
|
||||||
|
|
||||||
|
private static final DynamicValue xValue = new CardsInControllerGraveyardCount(StaticFilters.FILTER_CARD_CREATURES);
|
||||||
|
|
||||||
public BloodswornKnight(UUID ownerId, CardSetInfo setInfo) {
|
public BloodswornKnight(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "");
|
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "");
|
||||||
|
|
||||||
|
@ -37,7 +41,7 @@ public final class BloodswornKnight extends CardImpl {
|
||||||
this.nightCard = true;
|
this.nightCard = true;
|
||||||
|
|
||||||
// Bloodsworn Knight's power and toughness are each equal to the number of creature cards in your graveyard.
|
// Bloodsworn Knight's power and toughness are each equal to the number of creature cards in your graveyard.
|
||||||
this.addAbility(new SimpleStaticAbility(new SetPowerToughnessSourceEffect(new CardsInControllerGraveyardCount(), Duration.EndOfGame)));
|
this.addAbility(new SimpleStaticAbility(new SetPowerToughnessSourceEffect(xValue, Duration.EndOfGame)));
|
||||||
|
|
||||||
// {1}{B}, Discard a card: Bloodsworn Knight gains indestructible until end of turn. Tap it.
|
// {1}{B}, Discard a card: Bloodsworn Knight gains indestructible until end of turn. Tap it.
|
||||||
Ability ability = new SimpleActivatedAbility(
|
Ability ability = new SimpleActivatedAbility(
|
||||||
|
|
|
@ -52,9 +52,9 @@ public final class BloodtitheHarvester extends CardImpl {
|
||||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new CreateTokenEffect(new BloodToken())));
|
this.addAbility(new EntersBattlefieldTriggeredAbility(new CreateTokenEffect(new BloodToken())));
|
||||||
|
|
||||||
// {T}, Sacrifice Bloodtithe Harvester: Target creature gets -X/-X until end of turn, where X is twice the number of Blood tokens you control. Activate only as a sorcery.
|
// {T}, Sacrifice Bloodtithe Harvester: Target creature gets -X/-X until end of turn, where X is twice the number of Blood tokens you control. Activate only as a sorcery.
|
||||||
Ability ability = new ActivateAsSorceryActivatedAbility(
|
Ability ability = new ActivateAsSorceryActivatedAbility(new BoostTargetEffect(
|
||||||
new BoostTargetEffect(xValue, xValue, Duration.EndOfTurn), new TapSourceCost()
|
xValue, xValue, Duration.EndOfTurn
|
||||||
);
|
).setText("target creature gets -X/-X until end of turn, where X is twice the number of Blood tokens you control"), new TapSourceCost());
|
||||||
ability.addCost(new SacrificeSourceCost());
|
ability.addCost(new SacrificeSourceCost());
|
||||||
ability.addTarget(new TargetCreaturePermanent());
|
ability.addTarget(new TargetCreaturePermanent());
|
||||||
this.addAbility(ability.addHint(hint));
|
this.addAbility(ability.addHint(hint));
|
||||||
|
|
|
@ -89,6 +89,6 @@ class BrineComberTriggeredAbility extends TriggeredAbilityImpl {
|
||||||
@Override
|
@Override
|
||||||
public String getRule() {
|
public String getRule() {
|
||||||
return "Whenever {this} enters the battlefield or becomes the target " +
|
return "Whenever {this} enters the battlefield or becomes the target " +
|
||||||
"of an Aura spell, create a 1/1 white Spirit creature token with flying";
|
"of an Aura spell, create a 1/1 white Spirit creature token with flying.";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -102,6 +102,6 @@ class BrineboundGiftTriggeredAbility extends TriggeredAbilityImpl {
|
||||||
@Override
|
@Override
|
||||||
public String getRule() {
|
public String getRule() {
|
||||||
return "Whenever {this} enters the battlefield or enchanted creature becomes the target " +
|
return "Whenever {this} enters the battlefield or enchanted creature becomes the target " +
|
||||||
"of an Aura spell, create a 1/1 white Spirit creature token with flying";
|
"of an Aura spell, create a 1/1 white Spirit creature token with flying.";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,7 +33,7 @@ public final class BrutalCathar extends CardImpl {
|
||||||
// When this creature enters the battlefield or transforms into Brutal Cathar, exile target creature an opponent controls until this creature leaves the battlefield.
|
// When this creature enters the battlefield or transforms into Brutal Cathar, exile target creature an opponent controls until this creature leaves the battlefield.
|
||||||
Ability ability = new TransformsOrEntersTriggeredAbility(
|
Ability ability = new TransformsOrEntersTriggeredAbility(
|
||||||
new ExileUntilSourceLeavesEffect("creature an opponent controls"), false
|
new ExileUntilSourceLeavesEffect("creature an opponent controls"), false
|
||||||
);
|
).setTriggerPhrase("Whenever this creature enters the battlefield or transforms into {this}, ");
|
||||||
ability.addTarget(new TargetOpponentsCreaturePermanent());
|
ability.addTarget(new TargetOpponentsCreaturePermanent());
|
||||||
ability.addEffect(new CreateDelayedTriggeredAbilityEffect(new OnLeaveReturnExiledToBattlefieldAbility()));
|
ability.addEffect(new CreateDelayedTriggeredAbilityEffect(new OnLeaveReturnExiledToBattlefieldAbility()));
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
|
|
|
@ -33,7 +33,7 @@ public final class CacklingCulprit extends CardImpl {
|
||||||
|
|
||||||
// Whenever Cackling Culprit or another creature you control dies, you gain 1 life.
|
// Whenever Cackling Culprit or another creature you control dies, you gain 1 life.
|
||||||
this.addAbility(new DiesThisOrAnotherCreatureTriggeredAbility(
|
this.addAbility(new DiesThisOrAnotherCreatureTriggeredAbility(
|
||||||
new GainLifeEffect(1), false, StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE
|
new GainLifeEffect(1), false, StaticFilters.FILTER_CONTROLLED_CREATURE
|
||||||
));
|
));
|
||||||
|
|
||||||
// {1}{B}: Cackling Culprit gains deathtouch until end of turn.
|
// {1}{B}: Cackling Culprit gains deathtouch until end of turn.
|
||||||
|
|
|
@ -24,7 +24,7 @@ public final class ChangeOfFortune extends CardImpl {
|
||||||
|
|
||||||
// Discard your hand, then draw a card for each card you've discarded this turn.
|
// Discard your hand, then draw a card for each card you've discarded this turn.
|
||||||
this.getSpellAbility().addEffect(new DiscardHandControllerEffect());
|
this.getSpellAbility().addEffect(new DiscardHandControllerEffect());
|
||||||
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(ChangeOfFortuneValue.instance));
|
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(ChangeOfFortuneValue.instance).concatBy(", then"));
|
||||||
this.getSpellAbility().addWatcher(new DiscardedCardWatcher());
|
this.getSpellAbility().addWatcher(new DiscardedCardWatcher());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -43,7 +43,7 @@ public final class ChillOfTheGrave extends CardImpl {
|
||||||
this.getSpellAbility().addEffect(new DontUntapInControllersNextUntapStepTargetEffect("It"));
|
this.getSpellAbility().addEffect(new DontUntapInControllersNextUntapStepTargetEffect("It"));
|
||||||
|
|
||||||
// Draw a card.
|
// Draw a card.
|
||||||
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1));
|
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1).concatBy("<br>"));
|
||||||
}
|
}
|
||||||
|
|
||||||
private ChillOfTheGrave(final ChillOfTheGrave card) {
|
private ChillOfTheGrave(final ChillOfTheGrave card) {
|
||||||
|
|
|
@ -33,7 +33,7 @@ public final class CrashingTide extends CardImpl {
|
||||||
this.addAbility(new SimpleStaticAbility(Zone.ALL,
|
this.addAbility(new SimpleStaticAbility(Zone.ALL,
|
||||||
new ConditionalContinuousEffect(new GainAbilitySourceEffect(FlashAbility.getInstance(), Duration.WhileOnBattlefield, true),
|
new ConditionalContinuousEffect(new GainAbilitySourceEffect(FlashAbility.getInstance(), Duration.WhileOnBattlefield, true),
|
||||||
new PermanentsOnTheBattlefieldCondition(filter),
|
new PermanentsOnTheBattlefieldCondition(filter),
|
||||||
"{this} has flash as long as you control a Merfolk")).setRuleAtTheTop(true));
|
"this spell has flash as long as you control a Merfolk")).setRuleAtTheTop(true));
|
||||||
|
|
||||||
// Return target creature to it's owner's hand.
|
// Return target creature to it's owner's hand.
|
||||||
this.getSpellAbility().addEffect(new ReturnToHandTargetEffect());
|
this.getSpellAbility().addEffect(new ReturnToHandTargetEffect());
|
||||||
|
|
|
@ -44,8 +44,9 @@ public final class DeadlyDancer extends CardImpl {
|
||||||
// {R}{R}: Deadly Dancer and another target creature each get +1/+0 until end of turn.
|
// {R}{R}: Deadly Dancer and another target creature each get +1/+0 until end of turn.
|
||||||
Ability ability = new SimpleActivatedAbility(new BoostSourceEffect(
|
Ability ability = new SimpleActivatedAbility(new BoostSourceEffect(
|
||||||
1, 0, Duration.EndOfTurn
|
1, 0, Duration.EndOfTurn
|
||||||
).setText("{this} and another target creature"), new ManaCostsImpl<>("{R}{R}"));
|
).setText("{this}"), new ManaCostsImpl<>("{R}{R}"));
|
||||||
ability.addEffect(new BoostTargetEffect(1, 0).setText("each get +1/+0 until end of turn"));
|
ability.addEffect(new BoostTargetEffect(1, 0)
|
||||||
|
.setText("and another target creature each get +1/+0 until end of turn"));
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -9,9 +9,7 @@ import mage.cards.CardImpl;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.constants.SubType;
|
import mage.constants.SubType;
|
||||||
import mage.filter.FilterPermanent;
|
import mage.filter.StaticFilters;
|
||||||
import mage.filter.common.FilterControlledCreaturePermanent;
|
|
||||||
import mage.filter.predicate.mageobject.AnotherPredicate;
|
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
|
@ -20,13 +18,6 @@ import java.util.UUID;
|
||||||
*/
|
*/
|
||||||
public final class DesperateFarmer extends CardImpl {
|
public final class DesperateFarmer extends CardImpl {
|
||||||
|
|
||||||
private static final FilterPermanent filter
|
|
||||||
= new FilterControlledCreaturePermanent("another creature you control");
|
|
||||||
|
|
||||||
static {
|
|
||||||
filter.add(AnotherPredicate.instance);
|
|
||||||
}
|
|
||||||
|
|
||||||
public DesperateFarmer(UUID ownerId, CardSetInfo setInfo) {
|
public DesperateFarmer(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}");
|
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}");
|
||||||
|
|
||||||
|
@ -41,7 +32,10 @@ public final class DesperateFarmer extends CardImpl {
|
||||||
|
|
||||||
// When another creature you control dies, transform Desperate Farmer.
|
// When another creature you control dies, transform Desperate Farmer.
|
||||||
this.addAbility(new TransformAbility());
|
this.addAbility(new TransformAbility());
|
||||||
this.addAbility(new DiesCreatureTriggeredAbility(new TransformSourceEffect(), false, filter));
|
this.addAbility(new DiesCreatureTriggeredAbility(
|
||||||
|
new TransformSourceEffect(), false,
|
||||||
|
StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE
|
||||||
|
).setTriggerPhrase("When another creature you control dies, "));
|
||||||
}
|
}
|
||||||
|
|
||||||
private DesperateFarmer(final DesperateFarmer card) {
|
private DesperateFarmer(final DesperateFarmer card) {
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
package mage.cards.d;
|
package mage.cards.d;
|
||||||
|
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.common.SimpleActivatedAbility;
|
import mage.abilities.common.ActivateAsSorceryActivatedAbility;
|
||||||
import mage.abilities.common.SimpleStaticAbility;
|
import mage.abilities.common.SimpleStaticAbility;
|
||||||
import mage.abilities.costs.common.ExileFromGraveCost;
|
import mage.abilities.costs.common.ExileFromGraveCost;
|
||||||
import mage.abilities.costs.common.TapSourceCost;
|
import mage.abilities.costs.common.TapSourceCost;
|
||||||
|
@ -36,7 +36,9 @@ public final class DollhouseOfHorrors extends CardImpl {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{5}");
|
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{5}");
|
||||||
|
|
||||||
// {1}, {T}, Exile a creature card from your graveyard: Create a token that's a copy of the exiled card, except it's a 0/0 Construct artifact in addition to its other types and it has "This creature gets +1/+1 for each Construct you control." It gains haste until end of turn. Activate only as a sorcery.
|
// {1}, {T}, Exile a creature card from your graveyard: Create a token that's a copy of the exiled card, except it's a 0/0 Construct artifact in addition to its other types and it has "This creature gets +1/+1 for each Construct you control." It gains haste until end of turn. Activate only as a sorcery.
|
||||||
Ability ability = new SimpleActivatedAbility(new DollhouseOfHorrorsEffect(), new GenericManaCost(1));
|
Ability ability = new ActivateAsSorceryActivatedAbility(
|
||||||
|
new DollhouseOfHorrorsEffect(), new GenericManaCost(1)
|
||||||
|
);
|
||||||
ability.addCost(new TapSourceCost());
|
ability.addCost(new TapSourceCost());
|
||||||
ability.addCost(new ExileFromGraveCost(new TargetCardInYourGraveyard(
|
ability.addCost(new ExileFromGraveCost(new TargetCardInYourGraveyard(
|
||||||
StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD
|
StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD
|
||||||
|
|
|
@ -36,7 +36,7 @@ public final class DorotheaVengefulVictim extends CardImpl {
|
||||||
// When Dorothea, Vengeful Victim attacks or blocks, sacrifice it at end of combat.
|
// When Dorothea, Vengeful Victim attacks or blocks, sacrifice it at end of combat.
|
||||||
this.addAbility(new AttacksOrBlocksTriggeredAbility(new CreateDelayedTriggeredAbilityEffect(
|
this.addAbility(new AttacksOrBlocksTriggeredAbility(new CreateDelayedTriggeredAbilityEffect(
|
||||||
new AtTheEndOfCombatDelayedTriggeredAbility(new SacrificeSourceEffect())
|
new AtTheEndOfCombatDelayedTriggeredAbility(new SacrificeSourceEffect())
|
||||||
), false));
|
).setText("sacrifice it at end of combat"), false));
|
||||||
|
|
||||||
// Disturb {1}{W}{U}
|
// Disturb {1}{W}{U}
|
||||||
this.addAbility(new DisturbAbility(this, "{1}{W}{U}"));
|
this.addAbility(new DisturbAbility(this, "{1}{W}{U}"));
|
||||||
|
|
|
@ -60,7 +60,7 @@ class DreadFugueEffect extends OneShotEffect {
|
||||||
public DreadFugueEffect(FilterCard filter) {
|
public DreadFugueEffect(FilterCard filter) {
|
||||||
super(Outcome.Discard);
|
super(Outcome.Discard);
|
||||||
this.filter = filter;
|
this.filter = filter;
|
||||||
staticText = "Target player reveals their hand. You may choose a nonland card from it [with mana value 2 or less]. That player discards that card";
|
staticText = "Target player reveals their hand. You choose a nonland card from it [with mana value 2 or less]. That player discards that card";
|
||||||
}
|
}
|
||||||
|
|
||||||
private DreadFugueEffect(final DreadFugueEffect effect) {
|
private DreadFugueEffect(final DreadFugueEffect effect) {
|
||||||
|
|
|
@ -13,7 +13,6 @@ import mage.constants.Zone;
|
||||||
import mage.filter.StaticFilters;
|
import mage.filter.StaticFilters;
|
||||||
import mage.game.Game;
|
import mage.game.Game;
|
||||||
import mage.game.events.GameEvent;
|
import mage.game.events.GameEvent;
|
||||||
import mage.target.common.TargetCardInGraveyard;
|
|
||||||
import mage.target.common.TargetCardInYourGraveyard;
|
import mage.target.common.TargetCardInYourGraveyard;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
@ -28,7 +27,7 @@ public final class EdgarsAwakening extends CardImpl {
|
||||||
|
|
||||||
// Return target creature card from your graveyard to the battlefield.
|
// Return target creature card from your graveyard to the battlefield.
|
||||||
this.getSpellAbility().addEffect(new ReturnFromGraveyardToBattlefieldTargetEffect());
|
this.getSpellAbility().addEffect(new ReturnFromGraveyardToBattlefieldTargetEffect());
|
||||||
this.getSpellAbility().addTarget(new TargetCardInGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD));
|
this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD));
|
||||||
|
|
||||||
// When you discard Edgar's Awakening, you may pay {B}. When you do, return target creature card from your graveyard to your hand.
|
// When you discard Edgar's Awakening, you may pay {B}. When you do, return target creature card from your graveyard to your hand.
|
||||||
this.addAbility(new EdgarsAwakeningTriggeredAbility());
|
this.addAbility(new EdgarsAwakeningTriggeredAbility());
|
||||||
|
|
|
@ -36,7 +36,7 @@ public final class FellStinger extends CardImpl {
|
||||||
|
|
||||||
// When Fell Stinger exploits a creature, target player draws two cards and loses 2 life.
|
// When Fell Stinger exploits a creature, target player draws two cards and loses 2 life.
|
||||||
Ability ability = new ExploitCreatureTriggeredAbility(new DrawCardTargetEffect(2));
|
Ability ability = new ExploitCreatureTriggeredAbility(new DrawCardTargetEffect(2));
|
||||||
ability.addEffect(new LoseLifeTargetEffect(2));
|
ability.addEffect(new LoseLifeTargetEffect(2).setText("and loses 2 life"));
|
||||||
ability.addTarget(new TargetPlayer());
|
ability.addTarget(new TargetPlayer());
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
}
|
}
|
||||||
|
|
|
@ -50,7 +50,7 @@ public final class GeralfVisionaryStitcher extends CardImpl {
|
||||||
// Zombies you control have flying.
|
// Zombies you control have flying.
|
||||||
this.addAbility(new SimpleStaticAbility(new GainAbilityControlledEffect(FlyingAbility.getInstance(), Duration.WhileOnBattlefield, filter)));
|
this.addAbility(new SimpleStaticAbility(new GainAbilityControlledEffect(FlyingAbility.getInstance(), Duration.WhileOnBattlefield, filter)));
|
||||||
|
|
||||||
// {U}, {T}, Sacrifice another nontoken creature: Create an X/X blue Zombie token, where X is the sacrificed creature's power.
|
// {U}, {T}, Sacrifice another nontoken creature: Create an X/X blue Zombie token, where X is the sacrificed creature's toughness.
|
||||||
Ability ability = new SimpleActivatedAbility(new GeralfVisionaryStitcherEffect(), new ManaCostsImpl<>("{U}"));
|
Ability ability = new SimpleActivatedAbility(new GeralfVisionaryStitcherEffect(), new ManaCostsImpl<>("{U}"));
|
||||||
ability.addCost(new TapSourceCost());
|
ability.addCost(new TapSourceCost());
|
||||||
ability.addCost(new SacrificeTargetCost(filter2));
|
ability.addCost(new SacrificeTargetCost(filter2));
|
||||||
|
@ -71,7 +71,7 @@ class GeralfVisionaryStitcherEffect extends OneShotEffect {
|
||||||
|
|
||||||
public GeralfVisionaryStitcherEffect() {
|
public GeralfVisionaryStitcherEffect() {
|
||||||
super(Outcome.PutCreatureInPlay);
|
super(Outcome.PutCreatureInPlay);
|
||||||
staticText = "Create an X/X blue Zombie token, where X is the sacrificed creature's power";
|
staticText = "Create an X/X blue Zombie creature token, where X is the sacrificed creature's toughness";
|
||||||
}
|
}
|
||||||
|
|
||||||
private GeralfVisionaryStitcherEffect(final GeralfVisionaryStitcherEffect effect) {
|
private GeralfVisionaryStitcherEffect(final GeralfVisionaryStitcherEffect effect) {
|
||||||
|
@ -89,7 +89,7 @@ class GeralfVisionaryStitcherEffect extends OneShotEffect {
|
||||||
for (Cost cost : source.getCosts()) {
|
for (Cost cost : source.getCosts()) {
|
||||||
if (cost instanceof SacrificeTargetCost) {
|
if (cost instanceof SacrificeTargetCost) {
|
||||||
for (Permanent permanent : ((SacrificeTargetCost) cost).getPermanents()) {
|
for (Permanent permanent : ((SacrificeTargetCost) cost).getPermanents()) {
|
||||||
xValue += permanent.getPower().getValue();
|
xValue += permanent.getToughness().getValue();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -51,7 +51,7 @@ public final class GloriousSunrise extends CardImpl {
|
||||||
// • Creatures you control get +1/+1 and gain trample until end of turn.
|
// • Creatures you control get +1/+1 and gain trample until end of turn.
|
||||||
Ability ability = new BeginningOfCombatTriggeredAbility(new BoostControlledEffect(
|
Ability ability = new BeginningOfCombatTriggeredAbility(new BoostControlledEffect(
|
||||||
1, 1, Duration.EndOfTurn
|
1, 1, Duration.EndOfTurn
|
||||||
).setText("reatures you control get +1/+1"), TargetController.YOU, false);
|
).setText("creatures you control get +1/+1"), TargetController.YOU, false);
|
||||||
ability.addEffect(new GainAbilityControlledEffect(
|
ability.addEffect(new GainAbilityControlledEffect(
|
||||||
TrampleAbility.getInstance(), Duration.EndOfTurn,
|
TrampleAbility.getInstance(), Duration.EndOfTurn,
|
||||||
StaticFilters.FILTER_PERMANENT_CREATURE
|
StaticFilters.FILTER_PERMANENT_CREATURE
|
||||||
|
|
|
@ -44,7 +44,7 @@ public final class HalanaAndAlenaPartners extends CardImpl {
|
||||||
// At the beginning of combat on your turn, put X +1/+1 counters on another target creature you control, where X is Halana and Alena's power. That creature gains haste until end of turn.
|
// At the beginning of combat on your turn, put X +1/+1 counters on another target creature you control, where X is Halana and Alena's power. That creature gains haste until end of turn.
|
||||||
Ability ability = new BeginningOfCombatTriggeredAbility(
|
Ability ability = new BeginningOfCombatTriggeredAbility(
|
||||||
new AddCountersTargetEffect(CounterType.P1P1.createInstance(0), xValue)
|
new AddCountersTargetEffect(CounterType.P1P1.createInstance(0), xValue)
|
||||||
.setText("put X +1/+1 counters on another target creature you control, where X is {this} power"),
|
.setText("put X +1/+1 counters on another target creature you control, where X is {this}'s power"),
|
||||||
TargetController.YOU, false
|
TargetController.YOU, false
|
||||||
);
|
);
|
||||||
ability.addEffect(new GainAbilityTargetEffect(
|
ability.addEffect(new GainAbilityTargetEffect(
|
||||||
|
|
|
@ -47,9 +47,10 @@ public final class HenrikaDomnathi extends CardImpl {
|
||||||
// • You draw a card and you lose 1 life.
|
// • You draw a card and you lose 1 life.
|
||||||
Mode mode = new Mode(new DrawCardSourceControllerEffect(1).setText("you draw a card"));
|
Mode mode = new Mode(new DrawCardSourceControllerEffect(1).setText("you draw a card"));
|
||||||
mode.addEffect(new LoseLifeSourceControllerEffect(1).concatBy("and"));
|
mode.addEffect(new LoseLifeSourceControllerEffect(1).concatBy("and"));
|
||||||
|
ability.addMode(mode);
|
||||||
|
|
||||||
// • Transform Henrika Domnathi.
|
// • Transform Henrika Domnathi.
|
||||||
ability.addEffect(new TransformSourceEffect());
|
ability.addMode(new Mode(new TransformSourceEffect()));
|
||||||
this.addAbility(new TransformAbility());
|
this.addAbility(new TransformAbility());
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,8 +21,7 @@ import java.util.UUID;
|
||||||
*/
|
*/
|
||||||
public final class HenrikaInfernalSeer extends CardImpl {
|
public final class HenrikaInfernalSeer extends CardImpl {
|
||||||
|
|
||||||
private static final FilterCreaturePermanent filter
|
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent();
|
||||||
= new FilterCreaturePermanent("creature you control with flying, deathtouch, and/or lifelink");
|
|
||||||
|
|
||||||
static {
|
static {
|
||||||
filter.add(TargetController.YOU.getControllerPredicate());
|
filter.add(TargetController.YOU.getControllerPredicate());
|
||||||
|
@ -55,7 +54,7 @@ public final class HenrikaInfernalSeer extends CardImpl {
|
||||||
// {1}{B}{B}: Each creature you control with flying, deathtouch, and/or lifelink gets +1/+0 until end of turn.
|
// {1}{B}{B}: Each creature you control with flying, deathtouch, and/or lifelink gets +1/+0 until end of turn.
|
||||||
this.addAbility(new SimpleActivatedAbility(new BoostAllEffect(
|
this.addAbility(new SimpleActivatedAbility(new BoostAllEffect(
|
||||||
0, 1, Duration.EndOfTurn, filter, false
|
0, 1, Duration.EndOfTurn, filter, false
|
||||||
), new ManaCostsImpl<>("{1}{B}{B}")));
|
).setText("each creature you control with flying, deathtouch, and/or lifelink gets +1/+0 until end of turn"), new ManaCostsImpl<>("{1}{B}{B}")));
|
||||||
}
|
}
|
||||||
|
|
||||||
private HenrikaInfernalSeer(final HenrikaInfernalSeer card) {
|
private HenrikaInfernalSeer(final HenrikaInfernalSeer card) {
|
||||||
|
|
|
@ -5,6 +5,7 @@ import mage.abilities.ActivatedAbility;
|
||||||
import mage.abilities.common.ActivateIfConditionActivatedAbility;
|
import mage.abilities.common.ActivateIfConditionActivatedAbility;
|
||||||
import mage.abilities.condition.Condition;
|
import mage.abilities.condition.Condition;
|
||||||
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
|
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
|
||||||
|
import mage.abilities.costs.common.ExileSourceFromGraveCost;
|
||||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||||
import mage.abilities.effects.common.CreateTokenEffect;
|
import mage.abilities.effects.common.CreateTokenEffect;
|
||||||
import mage.abilities.hint.ConditionHint;
|
import mage.abilities.hint.ConditionHint;
|
||||||
|
@ -16,7 +17,7 @@ import mage.constants.CardType;
|
||||||
import mage.constants.SubType;
|
import mage.constants.SubType;
|
||||||
import mage.constants.TimingRule;
|
import mage.constants.TimingRule;
|
||||||
import mage.constants.Zone;
|
import mage.constants.Zone;
|
||||||
import mage.filter.StaticFilters;
|
import mage.filter.common.FilterEnchantmentPermanent;
|
||||||
import mage.game.permanent.token.SpiritWhiteToken;
|
import mage.game.permanent.token.SpiritWhiteToken;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
@ -26,8 +27,9 @@ import java.util.UUID;
|
||||||
*/
|
*/
|
||||||
public final class HeronBlessedGeist extends CardImpl {
|
public final class HeronBlessedGeist extends CardImpl {
|
||||||
|
|
||||||
private static final Condition condition
|
private static final Condition condition = new PermanentsOnTheBattlefieldCondition(
|
||||||
= new PermanentsOnTheBattlefieldCondition(StaticFilters.FILTER_ENCHANTMENT_PERMANENT);
|
new FilterEnchantmentPermanent("you control an enchantment and only as a sorcery")
|
||||||
|
);
|
||||||
private static final Hint hint = new ConditionHint(condition, "You control an enchantment");
|
private static final Hint hint = new ConditionHint(condition, "You control an enchantment");
|
||||||
|
|
||||||
public HeronBlessedGeist(UUID ownerId, CardSetInfo setInfo) {
|
public HeronBlessedGeist(UUID ownerId, CardSetInfo setInfo) {
|
||||||
|
@ -45,6 +47,7 @@ public final class HeronBlessedGeist extends CardImpl {
|
||||||
Zone.GRAVEYARD, new CreateTokenEffect(new SpiritWhiteToken(), 2),
|
Zone.GRAVEYARD, new CreateTokenEffect(new SpiritWhiteToken(), 2),
|
||||||
new ManaCostsImpl<>("{3}{W}"), condition
|
new ManaCostsImpl<>("{3}{W}"), condition
|
||||||
);
|
);
|
||||||
|
ability.addCost(new ExileSourceFromGraveCost());
|
||||||
ability.setTiming(TimingRule.SORCERY);
|
ability.setTiming(TimingRule.SORCERY);
|
||||||
this.addAbility(ability.addHint(hint));
|
this.addAbility(ability.addHint(hint));
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,13 +2,13 @@ package mage.cards.h;
|
||||||
|
|
||||||
import mage.MageInt;
|
import mage.MageInt;
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
|
import mage.abilities.common.ActivateAsSorceryActivatedAbility;
|
||||||
import mage.abilities.common.AttacksTriggeredAbility;
|
import mage.abilities.common.AttacksTriggeredAbility;
|
||||||
import mage.abilities.common.SimpleActivatedAbility;
|
|
||||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||||
import mage.abilities.dynamicvalue.DynamicValue;
|
import mage.abilities.dynamicvalue.DynamicValue;
|
||||||
import mage.abilities.dynamicvalue.common.DomainValue;
|
import mage.abilities.dynamicvalue.common.DomainValue;
|
||||||
import mage.abilities.effects.OneShotEffect;
|
import mage.abilities.effects.OneShotEffect;
|
||||||
import mage.abilities.effects.common.search.SearchLibraryPutInHandEffect;
|
import mage.abilities.effects.common.search.SearchLibraryPutInPlayEffect;
|
||||||
import mage.abilities.hint.common.DomainHint;
|
import mage.abilities.hint.common.DomainHint;
|
||||||
import mage.cards.Card;
|
import mage.cards.Card;
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
|
@ -52,12 +52,12 @@ public final class HiveheartShaman extends CardImpl {
|
||||||
this.toughness = new MageInt(5);
|
this.toughness = new MageInt(5);
|
||||||
|
|
||||||
// Whenever Hiveheart Shaman attacks, you may search your library for a basic land card that doesn't share a land type with a land you control, put that card onto the battlefield, then shuffle.
|
// Whenever Hiveheart Shaman attacks, you may search your library for a basic land card that doesn't share a land type with a land you control, put that card onto the battlefield, then shuffle.
|
||||||
this.addAbility(new AttacksTriggeredAbility(new SearchLibraryPutInHandEffect(
|
this.addAbility(new AttacksTriggeredAbility(
|
||||||
new TargetCardInLibrary(filter), true, true
|
new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(filter)), true
|
||||||
)));
|
));
|
||||||
|
|
||||||
// {5}{G}: Create a 1/1 green Insect creature token. Put X +1/+1 counters on it, where X is the number of basic land types among lands you control. Activate only as a sorcery.
|
// {5}{G}: Create a 1/1 green Insect creature token. Put X +1/+1 counters on it, where X is the number of basic land types among lands you control. Activate only as a sorcery.
|
||||||
this.addAbility(new SimpleActivatedAbility(
|
this.addAbility(new ActivateAsSorceryActivatedAbility(
|
||||||
new HiveheartShamanEffect(), new ManaCostsImpl<>("{5}{G}")
|
new HiveheartShamanEffect(), new ManaCostsImpl<>("{5}{G}")
|
||||||
).addHint(DomainHint.instance));
|
).addHint(DomainHint.instance));
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,7 +34,7 @@ public final class HoneymoonHearse extends CardImpl {
|
||||||
this.addAbility(new SimpleActivatedAbility(
|
this.addAbility(new SimpleActivatedAbility(
|
||||||
new AddCardTypeSourceEffect(
|
new AddCardTypeSourceEffect(
|
||||||
Duration.EndOfTurn, CardType.ARTIFACT, CardType.CREATURE
|
Duration.EndOfTurn, CardType.ARTIFACT, CardType.CREATURE
|
||||||
),
|
).setText("{this} becomes an artifact creature until end of turn"),
|
||||||
new TapTargetCost(new TargetControlledPermanent(
|
new TapTargetCost(new TargetControlledPermanent(
|
||||||
2, StaticFilters.FILTER_CONTROLLED_UNTAPPED_CREATURES
|
2, StaticFilters.FILTER_CONTROLLED_UNTAPPED_CREATURES
|
||||||
))
|
))
|
||||||
|
|
|
@ -31,9 +31,7 @@ public final class HuntmasterOfTheFells extends CardImpl {
|
||||||
this.toughness = new MageInt(2);
|
this.toughness = new MageInt(2);
|
||||||
|
|
||||||
// Whenever this creature enters the battlefield or transforms into Huntmaster of the Fells, create a 2/2 green Wolf creature token and you gain 2 life.
|
// Whenever this creature enters the battlefield or transforms into Huntmaster of the Fells, create a 2/2 green Wolf creature token and you gain 2 life.
|
||||||
Ability ability = new TransformsOrEntersTriggeredAbility(
|
Ability ability = new TransformsOrEntersTriggeredAbility(new CreateTokenEffect(new WolfToken()), false);
|
||||||
new CreateTokenEffect(new WolfToken()), false, true
|
|
||||||
);
|
|
||||||
ability.addEffect(new GainLifeEffect(2).concatBy("and"));
|
ability.addEffect(new GainLifeEffect(2).concatBy("and"));
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
|
|
||||||
|
|
|
@ -33,7 +33,7 @@ public final class LanternFlare extends CardImpl {
|
||||||
// Lantern Flare deals X damage to target creature or planeswalker and you gain X life. [X is the number of creatures you control.]
|
// Lantern Flare deals X damage to target creature or planeswalker and you gain X life. [X is the number of creatures you control.]
|
||||||
this.getSpellAbility().addEffect(new DamageTargetEffect(
|
this.getSpellAbility().addEffect(new DamageTargetEffect(
|
||||||
CreaturesYouControlCount.instance
|
CreaturesYouControlCount.instance
|
||||||
).setText("deals X damage to target creature or planeswalker"));
|
).setText("{this} deals X damage to target creature or planeswalker"));
|
||||||
this.getSpellAbility().addEffect(new GainLifeEffect(
|
this.getSpellAbility().addEffect(new GainLifeEffect(
|
||||||
CreaturesYouControlCount.instance,
|
CreaturesYouControlCount.instance,
|
||||||
"and you gain X life. [X is the number of creatures you control.]"
|
"and you gain X life. [X is the number of creatures you control.]"
|
||||||
|
|
|
@ -2,6 +2,7 @@ package mage.cards.m;
|
||||||
|
|
||||||
import mage.MageInt;
|
import mage.MageInt;
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
|
import mage.abilities.common.EntersBattlefieldAbility;
|
||||||
import mage.abilities.common.SimpleStaticAbility;
|
import mage.abilities.common.SimpleStaticAbility;
|
||||||
import mage.abilities.common.delayed.ReflexiveTriggeredAbility;
|
import mage.abilities.common.delayed.ReflexiveTriggeredAbility;
|
||||||
import mage.abilities.effects.PreventionEffectImpl;
|
import mage.abilities.effects.PreventionEffectImpl;
|
||||||
|
@ -33,7 +34,7 @@ public final class MagmaPummeler extends CardImpl {
|
||||||
this.toughness = new MageInt(0);
|
this.toughness = new MageInt(0);
|
||||||
|
|
||||||
// Magma Pummeler enters the battlefield with X +1/+1 counters on it.
|
// Magma Pummeler enters the battlefield with X +1/+1 counters on it.
|
||||||
this.addAbility(new SimpleStaticAbility(new EntersBattlefieldWithXCountersEffect(CounterType.P1P1.createInstance())));
|
this.addAbility(new EntersBattlefieldAbility(new EntersBattlefieldWithXCountersEffect(CounterType.P1P1.createInstance())));
|
||||||
|
|
||||||
// If damage would be dealt to Magma Pummeler while it has a +1/+1 counter on it, prevent that damage and remove that many +1/+1 counters from it. When one or more counters are removed from Magma Pummeler this way, it deals that much damage to any target.
|
// If damage would be dealt to Magma Pummeler while it has a +1/+1 counter on it, prevent that damage and remove that many +1/+1 counters from it. When one or more counters are removed from Magma Pummeler this way, it deals that much damage to any target.
|
||||||
this.addAbility(new SimpleStaticAbility(new MagmaPummelerEffect()));
|
this.addAbility(new SimpleStaticAbility(new MagmaPummelerEffect()));
|
||||||
|
|
|
@ -34,7 +34,7 @@ public final class MirrorhallMimic extends CardImpl {
|
||||||
this.addAbility(new EntersBattlefieldAbility(new CopyPermanentEffect(
|
this.addAbility(new EntersBattlefieldAbility(new CopyPermanentEffect(
|
||||||
StaticFilters.FILTER_PERMANENT_CREATURE, new MirrorhallMimicApplier()
|
StaticFilters.FILTER_PERMANENT_CREATURE, new MirrorhallMimicApplier()
|
||||||
), true, null, "You may have {this} enter the battlefield as a copy of " +
|
), true, null, "You may have {this} enter the battlefield as a copy of " +
|
||||||
"any creature on the battlefield, except it's a Spirit in addition to its other types", null));
|
"any creature on the battlefield, except it's a Spirit in addition to its other types.", null));
|
||||||
|
|
||||||
// Disturb {3}{U}{U}
|
// Disturb {3}{U}{U}
|
||||||
this.addAbility(new DisturbAbility(this, "{3}{U}{U}"));
|
this.addAbility(new DisturbAbility(this, "{3}{U}{U}"));
|
||||||
|
|
|
@ -34,7 +34,7 @@ public final class PanickedBystander extends CardImpl {
|
||||||
|
|
||||||
// Whenever Panicked Bystander or another creature you control dies, you gain 1 life.
|
// Whenever Panicked Bystander or another creature you control dies, you gain 1 life.
|
||||||
this.addAbility(new DiesThisOrAnotherCreatureTriggeredAbility(
|
this.addAbility(new DiesThisOrAnotherCreatureTriggeredAbility(
|
||||||
new GainLifeEffect(1), false, StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE
|
new GainLifeEffect(1), false, StaticFilters.FILTER_CONTROLLED_CREATURE
|
||||||
));
|
));
|
||||||
|
|
||||||
// At the beginning of your end step, if you gained 3 or more life this turn, transform Panicked Bystander.
|
// At the beginning of your end step, if you gained 3 or more life this turn, transform Panicked Bystander.
|
||||||
|
|
|
@ -20,7 +20,7 @@ public final class PointedDiscussion extends CardImpl {
|
||||||
|
|
||||||
// You draw two cards, lose 2 life, then create a Blood token.
|
// You draw two cards, lose 2 life, then create a Blood token.
|
||||||
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(2).setText("you draw two cards"));
|
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(2).setText("you draw two cards"));
|
||||||
this.getSpellAbility().addEffect(new LoseLifeSourceControllerEffect(2).concatBy(","));
|
this.getSpellAbility().addEffect(new LoseLifeSourceControllerEffect(2).setText(", lose 2 life"));
|
||||||
this.getSpellAbility().addEffect(new CreateTokenEffect(new BloodToken()).concatBy(", then"));
|
this.getSpellAbility().addEffect(new CreateTokenEffect(new BloodToken()).concatBy(", then"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -30,7 +30,7 @@ public final class RestlessBloodseeker extends CardImpl {
|
||||||
private static final Condition condition = new YouGainedLifeCondition(ComparisonType.MORE_THAN, 0);
|
private static final Condition condition = new YouGainedLifeCondition(ComparisonType.MORE_THAN, 0);
|
||||||
private static final Hint hint = new ConditionHint(condition, "You gained life this turn");
|
private static final Hint hint = new ConditionHint(condition, "You gained life this turn");
|
||||||
private static final FilterControlledPermanent filter
|
private static final FilterControlledPermanent filter
|
||||||
= new FilterControlledPermanent(SubType.BLOOD, "Blood token");
|
= new FilterControlledPermanent(SubType.BLOOD, "Blood tokens");
|
||||||
|
|
||||||
static {
|
static {
|
||||||
filter.add(TokenPredicate.TRUE);
|
filter.add(TokenPredicate.TRUE);
|
||||||
|
|
|
@ -41,7 +41,7 @@ public final class RunoStromkirk extends CardImpl {
|
||||||
|
|
||||||
// When Runo Stromkirk enters the battlefield, put up to one target creature card from your graveyard on top of your library.
|
// When Runo Stromkirk enters the battlefield, put up to one target creature card from your graveyard on top of your library.
|
||||||
Ability ability = new EntersBattlefieldTriggeredAbility(new PutOnLibraryTargetEffect(true));
|
Ability ability = new EntersBattlefieldTriggeredAbility(new PutOnLibraryTargetEffect(true));
|
||||||
ability.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD));
|
ability.addTarget(new TargetCardInYourGraveyard(0, 1, StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD));
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
|
|
||||||
// At the beginning of your upkeep, look at the top card of your library. You may reveal that card. If a creature card with mana value 6 or greater is revealed this way, transform Runo Stromkirk.
|
// At the beginning of your upkeep, look at the top card of your library. You may reveal that card. If a creature card with mana value 6 or greater is revealed this way, transform Runo Stromkirk.
|
||||||
|
|
|
@ -42,7 +42,7 @@ public final class SanguineStatuette extends CardImpl {
|
||||||
.withSubType(SubType.VAMPIRE)
|
.withSubType(SubType.VAMPIRE)
|
||||||
.withAbility(HasteAbility.getInstance()),
|
.withAbility(HasteAbility.getInstance()),
|
||||||
"", Duration.EndOfTurn
|
"", Duration.EndOfTurn
|
||||||
), filter, false, true));
|
).setText("have {this} become a 3/3 Vampire artifact creature with haste until end of turn"), filter, false, true));
|
||||||
}
|
}
|
||||||
|
|
||||||
private SanguineStatuette(final SanguineStatuette card) {
|
private SanguineStatuette(final SanguineStatuette card) {
|
||||||
|
|
|
@ -23,7 +23,7 @@ import java.util.UUID;
|
||||||
public final class SawbladeSlinger extends CardImpl {
|
public final class SawbladeSlinger extends CardImpl {
|
||||||
|
|
||||||
private static final FilterPermanent filter = new FilterArtifactPermanent("artifact an opponent controls");
|
private static final FilterPermanent filter = new FilterArtifactPermanent("artifact an opponent controls");
|
||||||
private static final FilterPermanent filter2 = new FilterPermanent(SubType.ZOMBIE, "Zombie and opponent controls");
|
private static final FilterPermanent filter2 = new FilterPermanent(SubType.ZOMBIE, "Zombie an opponent controls");
|
||||||
|
|
||||||
static {
|
static {
|
||||||
filter.add(TargetController.OPPONENT.getControllerPredicate());
|
filter.add(TargetController.OPPONENT.getControllerPredicate());
|
||||||
|
|
|
@ -24,7 +24,7 @@ import mage.filter.common.FilterControlledPermanent;
|
||||||
*/
|
*/
|
||||||
public final class SpikedRipsaw extends CardImpl {
|
public final class SpikedRipsaw extends CardImpl {
|
||||||
|
|
||||||
private static final FilterControlledPermanent filter = new FilterControlledPermanent(SubType.FOREST, "forest");
|
private static final FilterControlledPermanent filter = new FilterControlledPermanent(SubType.FOREST, "Forest");
|
||||||
|
|
||||||
public SpikedRipsaw(UUID ownerId, CardSetInfo setInfo) {
|
public SpikedRipsaw(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{2}{G}");
|
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{2}{G}");
|
||||||
|
|
|
@ -9,7 +9,8 @@ import mage.cards.CardSetInfo;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.constants.Duration;
|
import mage.constants.Duration;
|
||||||
import mage.constants.SubType;
|
import mage.constants.SubType;
|
||||||
import mage.filter.StaticFilters;
|
import mage.filter.FilterPermanent;
|
||||||
|
import mage.filter.common.FilterEnchantmentPermanent;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
|
@ -18,6 +19,8 @@ import java.util.UUID;
|
||||||
*/
|
*/
|
||||||
public final class SteelcladSpirit extends CardImpl {
|
public final class SteelcladSpirit extends CardImpl {
|
||||||
|
|
||||||
|
private static final FilterPermanent filter = new FilterEnchantmentPermanent("an enchantment");
|
||||||
|
|
||||||
public SteelcladSpirit(UUID ownerId, CardSetInfo setInfo) {
|
public SteelcladSpirit(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}");
|
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}");
|
||||||
|
|
||||||
|
@ -30,8 +33,7 @@ public final class SteelcladSpirit extends CardImpl {
|
||||||
|
|
||||||
// Whenever an enchantment enters the battlefield under your control, Steelclad Spirit can attack this turn as though it didn't have defender.
|
// Whenever an enchantment enters the battlefield under your control, Steelclad Spirit can attack this turn as though it didn't have defender.
|
||||||
this.addAbility(new EntersBattlefieldControlledTriggeredAbility(
|
this.addAbility(new EntersBattlefieldControlledTriggeredAbility(
|
||||||
new CanAttackAsThoughItDidntHaveDefenderSourceEffect(Duration.EndOfTurn),
|
new CanAttackAsThoughItDidntHaveDefenderSourceEffect(Duration.EndOfTurn), filter
|
||||||
StaticFilters.FILTER_ENCHANTMENT_PERMANENT
|
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
package mage.cards.s;
|
package mage.cards.s;
|
||||||
|
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.common.BeginningOfUpkeepTriggeredAbility;
|
import mage.abilities.common.BeginningOfEndStepTriggeredAbility;
|
||||||
import mage.abilities.common.delayed.ReflexiveTriggeredAbility;
|
import mage.abilities.common.delayed.ReflexiveTriggeredAbility;
|
||||||
import mage.abilities.condition.Condition;
|
import mage.abilities.condition.Condition;
|
||||||
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
|
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
|
||||||
|
@ -47,7 +47,7 @@ public final class StensiaUprising extends CardImpl {
|
||||||
new DamageTargetEffect(7), false, "{this} deals 7 damage to any target"
|
new DamageTargetEffect(7), false, "{this} deals 7 damage to any target"
|
||||||
);
|
);
|
||||||
reflexiveTrigger.addTarget(new TargetAnyTarget());
|
reflexiveTrigger.addTarget(new TargetAnyTarget());
|
||||||
Ability ability = new BeginningOfUpkeepTriggeredAbility(
|
Ability ability = new BeginningOfEndStepTriggeredAbility(
|
||||||
new CreateTokenEffect(new RedHumanToken()), TargetController.YOU, false
|
new CreateTokenEffect(new RedHumanToken()), TargetController.YOU, false
|
||||||
);
|
);
|
||||||
ability.addEffect(new ConditionalOneShotEffect(
|
ability.addEffect(new ConditionalOneShotEffect(
|
||||||
|
|
|
@ -1,19 +1,19 @@
|
||||||
package mage.cards.s;
|
package mage.cards.s;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.MageInt;
|
import mage.MageInt;
|
||||||
import mage.abilities.common.BecomesTargetTriggeredAbility;
|
import mage.abilities.common.BecomesTargetTriggeredAbility;
|
||||||
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||||
import mage.constants.SubType;
|
|
||||||
import mage.abilities.keyword.FlyingAbility;
|
import mage.abilities.keyword.FlyingAbility;
|
||||||
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.SubType;
|
||||||
import mage.constants.TargetController;
|
import mage.constants.TargetController;
|
||||||
import mage.filter.FilterSpell;
|
import mage.filter.FilterSpell;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author weirddan455
|
* @author weirddan455
|
||||||
*/
|
*/
|
||||||
public final class StormchaserDrake extends CardImpl {
|
public final class StormchaserDrake extends CardImpl {
|
||||||
|
@ -35,7 +35,9 @@ public final class StormchaserDrake extends CardImpl {
|
||||||
this.addAbility(FlyingAbility.getInstance());
|
this.addAbility(FlyingAbility.getInstance());
|
||||||
|
|
||||||
// Whenever Stormchaser Drake becomes the target of a spell you control, draw a card.
|
// Whenever Stormchaser Drake becomes the target of a spell you control, draw a card.
|
||||||
this.addAbility(new BecomesTargetTriggeredAbility(new DrawCardSourceControllerEffect(1), filter));
|
this.addAbility(new BecomesTargetTriggeredAbility(
|
||||||
|
new DrawCardSourceControllerEffect(1), filter
|
||||||
|
).setTriggerPhrase("Whenever {this} becomes the target of a spell you control, "));
|
||||||
}
|
}
|
||||||
|
|
||||||
private StormchaserDrake(final StormchaserDrake card) {
|
private StormchaserDrake(final StormchaserDrake card) {
|
||||||
|
|
|
@ -44,7 +44,7 @@ public final class SupernaturalRescue extends CardImpl {
|
||||||
Zone.ALL,
|
Zone.ALL,
|
||||||
new ConditionalContinuousEffect(new GainAbilitySourceEffect(
|
new ConditionalContinuousEffect(new GainAbilitySourceEffect(
|
||||||
FlashAbility.getInstance(), Duration.WhileOnBattlefield, true
|
FlashAbility.getInstance(), Duration.WhileOnBattlefield, true
|
||||||
), condition, "{this} has flash as long as you control a Merfolk")
|
), condition, "this spell has flash as long as you control a Spirit")
|
||||||
).setRuleAtTheTop(true).addHint(hint));
|
).setRuleAtTheTop(true).addHint(hint));
|
||||||
|
|
||||||
// When you cast this spell, tap up to two target creatures you don't control.
|
// When you cast this spell, tap up to two target creatures you don't control.
|
||||||
|
|
|
@ -32,7 +32,7 @@ public final class UlrichOfTheKrallenhorde extends CardImpl {
|
||||||
|
|
||||||
// Whenever this creature enters the battlefield or transforms into Ulrich of the Krallenhorde, target creature gets +4/+4 until end of turn.
|
// Whenever this creature enters the battlefield or transforms into Ulrich of the Krallenhorde, target creature gets +4/+4 until end of turn.
|
||||||
Ability ability = new TransformsOrEntersTriggeredAbility(
|
Ability ability = new TransformsOrEntersTriggeredAbility(
|
||||||
new BoostTargetEffect(4, 4), false, true
|
new BoostTargetEffect(4, 4), false
|
||||||
);
|
);
|
||||||
ability.addTarget(new TargetCreaturePermanent());
|
ability.addTarget(new TargetCreaturePermanent());
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
|
|
|
@ -38,7 +38,7 @@ public final class UndeadButler extends CardImpl {
|
||||||
);
|
);
|
||||||
ability.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD));
|
ability.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD));
|
||||||
this.addAbility(new DiesSourceTriggeredAbility(new DoWhenCostPaid(
|
this.addAbility(new DiesSourceTriggeredAbility(new DoWhenCostPaid(
|
||||||
ability, new ExileSourceFromGraveCost(), "Exile {this}?"
|
ability, new ExileSourceFromGraveCost().setText("exile it"), "Exile {this}?"
|
||||||
)));
|
)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -27,9 +27,9 @@ public final class VoldarenEpicure extends CardImpl {
|
||||||
this.toughness = new MageInt(1);
|
this.toughness = new MageInt(1);
|
||||||
|
|
||||||
// When Voldaren Epicure enters the battlefield, it deals 1 damage to each opponent. Create a Blood token.
|
// When Voldaren Epicure enters the battlefield, it deals 1 damage to each opponent. Create a Blood token.
|
||||||
Ability ability = new EntersBattlefieldTriggeredAbility(
|
Ability ability = new EntersBattlefieldTriggeredAbility(new DamagePlayersEffect(
|
||||||
new DamagePlayersEffect(1, TargetController.OPPONENT)
|
1, TargetController.OPPONENT, "it"
|
||||||
);
|
));
|
||||||
ability.addEffect(new CreateTokenEffect(new BloodToken()));
|
ability.addEffect(new CreateTokenEffect(new BloodToken()));
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,8 +22,8 @@ public final class WitchsWeb extends CardImpl {
|
||||||
|
|
||||||
// Target creature gets +3/+3 and gains reach until end of turn. Untap it.
|
// Target creature gets +3/+3 and gains reach until end of turn. Untap it.
|
||||||
this.getSpellAbility().addEffect(new BoostTargetEffect(
|
this.getSpellAbility().addEffect(new BoostTargetEffect(
|
||||||
1, 2, Duration.EndOfTurn
|
3, 3, Duration.EndOfTurn
|
||||||
).setText("Target creature gets +1/+2"));
|
).setText("Target creature gets +3/+3"));
|
||||||
this.getSpellAbility().addEffect(new GainAbilityTargetEffect(
|
this.getSpellAbility().addEffect(new GainAbilityTargetEffect(
|
||||||
ReachAbility.getInstance(), Duration.EndOfTurn
|
ReachAbility.getInstance(), Duration.EndOfTurn
|
||||||
).setText("and gains reach until end of turn"));
|
).setText("and gains reach until end of turn"));
|
||||||
|
|
|
@ -18,7 +18,7 @@ import java.util.UUID;
|
||||||
*/
|
*/
|
||||||
public final class WretchedThrong extends CardImpl {
|
public final class WretchedThrong extends CardImpl {
|
||||||
|
|
||||||
private static final FilterCard filter = new FilterCard("a card name Wretched Throng");
|
private static final FilterCard filter = new FilterCard("a card named Wretched Throng");
|
||||||
|
|
||||||
static {
|
static {
|
||||||
filter.add(new NamePredicate("Wretched Throng"));
|
filter.add(new NamePredicate("Wretched Throng"));
|
||||||
|
|
|
@ -58,7 +58,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 = "SLD"; // check all abilities and output cards with wrong abilities texts;
|
private static final String FULL_ABILITIES_CHECK_SET_CODE = "VOW"; // check all abilities and output cards with wrong abilities texts;
|
||||||
private static final boolean AUTO_FIX_SAMPLE_DECKS = false; // debug only: auto-fix sample decks by test_checkSampleDecks test run
|
private static final boolean AUTO_FIX_SAMPLE_DECKS = false; // debug only: auto-fix sample decks by test_checkSampleDecks test run
|
||||||
private static final boolean ONLY_TEXT = false; // use when checking text locally, suppresses unnecessary checks and output messages
|
private static final boolean ONLY_TEXT = false; // use when checking text locally, suppresses unnecessary checks and output messages
|
||||||
|
|
||||||
|
@ -1581,9 +1581,8 @@ public class VerifyCardDataTest {
|
||||||
refText = refText.substring(1, refText.length() - 1);
|
refText = refText.substring(1, refText.length() - 1);
|
||||||
}
|
}
|
||||||
// planeswalker fix [-7]: xxx
|
// planeswalker fix [-7]: xxx
|
||||||
if (refText.contains("[") && refText.contains("]")) {
|
refText = refText.replaceAll("\\[([\\−\\+]?\\d*)\\]\\: ", "$1: ");
|
||||||
refText = refText.replace("[", "").replace("]", "");
|
|
||||||
}
|
|
||||||
// evergreen keyword fix
|
// evergreen keyword fix
|
||||||
for (String s : refText.split("[\\$\\\n]")) {
|
for (String s : refText.split("[\\$\\\n]")) {
|
||||||
if (Arrays
|
if (Arrays
|
||||||
|
|
|
@ -10,7 +10,6 @@ import mage.constants.Zone;
|
||||||
import mage.util.CardUtil;
|
import mage.util.CardUtil;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author LevelX2
|
* @author LevelX2
|
||||||
*/
|
*/
|
||||||
public class PayMoreToCastAsThoughtItHadFlashAbility extends SpellAbility {
|
public class PayMoreToCastAsThoughtItHadFlashAbility extends SpellAbility {
|
||||||
|
@ -42,7 +41,7 @@ public class PayMoreToCastAsThoughtItHadFlashAbility extends SpellAbility {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getRule() {
|
public String getRule() {
|
||||||
return "You may cast {this} as though it had flash if you pay " + costsToAdd.getText() + " more to cast it. <i>(You may cast it any time you could cast an instant.)</i>";
|
return "You may cast this spell as though it had flash if you pay " + costsToAdd.getText() + " more to cast it. <i>(You may cast it any time you could cast an instant.)</i>";
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -53,6 +53,6 @@ public class TransformIntoSourceTriggeredAbility extends TriggeredAbilityImpl {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getTriggerPhrase() {
|
public String getTriggerPhrase() {
|
||||||
return "When" + (whenever ? "ever" : "") + " this creature transforms into this {this}, ";
|
return "When" + (whenever ? "ever" : "") + " this creature transforms into {this}, ";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,20 +12,12 @@ import mage.game.permanent.Permanent;
|
||||||
*/
|
*/
|
||||||
public class TransformsOrEntersTriggeredAbility extends TriggeredAbilityImpl {
|
public class TransformsOrEntersTriggeredAbility extends TriggeredAbilityImpl {
|
||||||
|
|
||||||
private final boolean whenever;
|
|
||||||
|
|
||||||
public TransformsOrEntersTriggeredAbility(Effect effect, boolean optional) {
|
public TransformsOrEntersTriggeredAbility(Effect effect, boolean optional) {
|
||||||
this(effect, optional, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
public TransformsOrEntersTriggeredAbility(Effect effect, boolean optional, boolean whenever) {
|
|
||||||
super(Zone.BATTLEFIELD, effect, optional);
|
super(Zone.BATTLEFIELD, effect, optional);
|
||||||
this.whenever = whenever;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private TransformsOrEntersTriggeredAbility(final TransformsOrEntersTriggeredAbility ability) {
|
private TransformsOrEntersTriggeredAbility(final TransformsOrEntersTriggeredAbility ability) {
|
||||||
super(ability);
|
super(ability);
|
||||||
this.whenever = ability.whenever;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -56,6 +48,6 @@ public class TransformsOrEntersTriggeredAbility extends TriggeredAbilityImpl {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getTriggerPhrase() {
|
public String getTriggerPhrase() {
|
||||||
return "When" + (whenever ? "ever" : "") + " this creature enters the battlefield or transforms into {this}, ";
|
return "Whenever this creature enters the battlefield or transforms into {this}, ";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,7 +17,7 @@ import mage.players.Player;
|
||||||
public class ExileSourceFromGraveCost extends CostImpl {
|
public class ExileSourceFromGraveCost extends CostImpl {
|
||||||
|
|
||||||
public ExileSourceFromGraveCost() {
|
public ExileSourceFromGraveCost() {
|
||||||
this.text = "Exile {this} from your graveyard";
|
this.text = "exile {this} from your graveyard";
|
||||||
}
|
}
|
||||||
|
|
||||||
public ExileSourceFromGraveCost(ExileSourceFromGraveCost cost) {
|
public ExileSourceFromGraveCost(ExileSourceFromGraveCost cost) {
|
||||||
|
|
|
@ -7,6 +7,8 @@ import mage.game.Game;
|
||||||
import mage.game.permanent.Permanent;
|
import mage.game.permanent.Permanent;
|
||||||
import mage.target.targetpointer.FixedTarget;
|
import mage.target.targetpointer.FixedTarget;
|
||||||
|
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author BetaSteward_at_googlemail.com
|
* @author BetaSteward_at_googlemail.com
|
||||||
*/
|
*/
|
||||||
|
@ -115,7 +117,7 @@ public class GainAbilityAttachedEffect extends ContinuousEffectImpl {
|
||||||
|
|
||||||
private void setText() {
|
private void setText() {
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
sb.append(attachmentType.verb());
|
sb.append(attachmentType.verb().toLowerCase());
|
||||||
sb.append(" " + targetObjectName + " ");
|
sb.append(" " + targetObjectName + " ");
|
||||||
if (duration == Duration.WhileOnBattlefield) {
|
if (duration == Duration.WhileOnBattlefield) {
|
||||||
sb.append("has ");
|
sb.append("has ");
|
||||||
|
|
Loading…
Reference in a new issue