forked from External/mage
various text fixes
This commit is contained in:
parent
1d7ef1ed03
commit
5e83c3c3f0
39 changed files with 179 additions and 257 deletions
|
|
@ -2,18 +2,18 @@ package mage.cards.a;
|
|||
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.triggers.BeginningOfCombatTriggeredAbility;
|
||||
import mage.abilities.condition.Condition;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.effects.common.ReturnSourceFromGraveyardToBattlefieldEffect;
|
||||
import mage.abilities.keyword.FlyingAbility;
|
||||
import mage.abilities.keyword.HasteAbility;
|
||||
import mage.abilities.triggers.BeginningOfCombatTriggeredAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.*;
|
||||
import mage.game.Game;
|
||||
import mage.game.events.GameEvent;
|
||||
import mage.game.stack.Spell;
|
||||
import mage.util.CardUtil;
|
||||
import mage.watchers.Watcher;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
|
@ -39,17 +39,10 @@ public final class ArclightPhoenix extends CardImpl {
|
|||
this.addAbility(HasteAbility.getInstance());
|
||||
|
||||
// At the beginning of combat on your turn, if you cast 3 or more instants and/or sorceries this turn, return Arclight Phoenix from your graveyard to the battlefield.
|
||||
this.addAbility(new ConditionalInterveningIfTriggeredAbility(
|
||||
new BeginningOfCombatTriggeredAbility(
|
||||
Zone.GRAVEYARD,
|
||||
TargetController.YOU, new ReturnSourceFromGraveyardToBattlefieldEffect(),
|
||||
false
|
||||
), ArclightPhoenixCondition.instance,
|
||||
"At the beginning of combat on your turn, "
|
||||
+ "if you've cast three or more instant "
|
||||
+ "and sorcery spells this turn, return {this} "
|
||||
+ "from your graveyard to the battlefield."
|
||||
), new ArclightPhoenixWatcher());
|
||||
this.addAbility(new BeginningOfCombatTriggeredAbility(
|
||||
Zone.GRAVEYARD, TargetController.YOU,
|
||||
new ReturnSourceFromGraveyardToBattlefieldEffect(), false
|
||||
).withInterveningIf(ArclightPhoenixCondition.instance), new ArclightPhoenixWatcher());
|
||||
}
|
||||
|
||||
private ArclightPhoenix(final ArclightPhoenix card) {
|
||||
|
|
@ -67,8 +60,12 @@ enum ArclightPhoenixCondition implements Condition {
|
|||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
ArclightPhoenixWatcher watcher = game.getState().getWatcher(ArclightPhoenixWatcher.class);
|
||||
return watcher != null && watcher.getInstantSorceryCount(source.getControllerId()) > 2;
|
||||
return ArclightPhoenixWatcher.getInstantSorceryCount(game, source);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "you've cast three or more instant and sorcery spells this turn";
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -82,15 +79,12 @@ class ArclightPhoenixWatcher extends Watcher {
|
|||
|
||||
@Override
|
||||
public void watch(GameEvent event, Game game) {
|
||||
if (event.getType() == GameEvent.EventType.SPELL_CAST) {
|
||||
Spell spell = game.getStack().getSpell(event.getTargetId());
|
||||
if (spell == null || !spell.isInstantOrSorcery(game)) {
|
||||
if (event.getType() != GameEvent.EventType.SPELL_CAST) {
|
||||
return;
|
||||
}
|
||||
this.instantSorceryCount.putIfAbsent(spell.getControllerId(), 0);
|
||||
this.instantSorceryCount.compute(
|
||||
spell.getControllerId(), (k, a) -> a + 1
|
||||
);
|
||||
Spell spell = game.getStack().getSpell(event.getTargetId());
|
||||
if (spell != null && spell.isInstantOrSorcery(game)) {
|
||||
this.instantSorceryCount.compute(spell.getControllerId(), CardUtil::setOrIncrementValue);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -100,7 +94,11 @@ class ArclightPhoenixWatcher extends Watcher {
|
|||
this.instantSorceryCount.clear();
|
||||
}
|
||||
|
||||
int getInstantSorceryCount(UUID playerId) {
|
||||
return this.instantSorceryCount.getOrDefault(playerId, 0);
|
||||
static boolean getInstantSorceryCount(Game game, Ability source) {
|
||||
return game
|
||||
.getState()
|
||||
.getWatcher(ArclightPhoenixWatcher.class)
|
||||
.instantSorceryCount
|
||||
.getOrDefault(source.getControllerId(), 0) >= 3;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
|
||||
package mage.cards.a;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.condition.Condition;
|
||||
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
|
||||
import mage.abilities.decorator.ConditionalContinuousEffect;
|
||||
import mage.abilities.effects.common.continuous.GainAbilitySourceEffect;
|
||||
|
|
@ -12,22 +12,16 @@ import mage.cards.CardImpl;
|
|||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.Zone;
|
||||
import mage.filter.FilterPermanent;
|
||||
import mage.filter.common.FilterControlledPermanent;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author jeffwadsworth
|
||||
*/
|
||||
public final class ArmoryGuard extends CardImpl {
|
||||
|
||||
private static final String rule = "Armory Guard has vigilance as long as you control a Gate";
|
||||
|
||||
private static final FilterPermanent filter = new FilterPermanent("Gate");
|
||||
|
||||
static {
|
||||
filter.add(SubType.GATE.getPredicate());
|
||||
}
|
||||
private static final Condition condition = new PermanentsOnTheBattlefieldCondition(new FilterControlledPermanent(SubType.GATE));
|
||||
|
||||
public ArmoryGuard(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{W}");
|
||||
|
|
@ -38,8 +32,10 @@ public final class ArmoryGuard extends CardImpl {
|
|||
this.toughness = new MageInt(5);
|
||||
|
||||
// Armory Guard has vigilance as long as you control a Gate.
|
||||
ConditionalContinuousEffect effect = new ConditionalContinuousEffect(new GainAbilitySourceEffect(VigilanceAbility.getInstance()), new PermanentsOnTheBattlefieldCondition(filter), rule);
|
||||
this.addAbility(new SimpleStaticAbility(effect));
|
||||
this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect(
|
||||
new GainAbilitySourceEffect(VigilanceAbility.getInstance()),
|
||||
condition, "{this} has vigilance as long as you control a Gate"
|
||||
)));
|
||||
}
|
||||
|
||||
private ArmoryGuard(final ArmoryGuard card) {
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ public final class BlindObedience extends CardImpl {
|
|||
// Artifacts and creatures your opponents control enter the battlefield tapped.
|
||||
this.addAbility(new SimpleStaticAbility(new PermanentsEnterBattlefieldTappedEffect(
|
||||
StaticFilters.FILTER_OPPONENTS_PERMANENT_ARTIFACT_OR_CREATURE
|
||||
).setText("artifacts and creatures your opponents control enter the battlefield tapped")));
|
||||
).setText("artifacts and creatures your opponents control enter tapped")));
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -67,7 +67,7 @@ class BraidsArisenNightmareEffect extends OneShotEffect {
|
|||
public BraidsArisenNightmareEffect() {
|
||||
super(Outcome.Sacrifice);
|
||||
this.staticText = "you may sacrifice an artifact, creature, enchantment, land, or planeswalker. " +
|
||||
"If you do, each opponent may sacrifice a permanent that shares a card type with it. " +
|
||||
"If you do, each opponent may sacrifice a permanent of their choice that shares a card type with it. " +
|
||||
"For each opponent who doesn't, that player loses 2 life and you draw a card";
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -43,7 +43,8 @@ public final class Chainsaw extends CardImpl {
|
|||
StaticFilters.FILTER_PERMANENT_CREATURES, false));
|
||||
|
||||
// Equipped creature gets +X/+0, where X is the number of rev counters on Chainsaw.
|
||||
this.addAbility(new SimpleStaticAbility(new BoostEquippedEffect(xValue, StaticValue.get(0))));
|
||||
this.addAbility(new SimpleStaticAbility(new BoostEquippedEffect(xValue, StaticValue.get(0))
|
||||
.setText("equipped creature gets +X/+0, where X is the number of rev counters on {this}")));
|
||||
|
||||
// Equip {3}
|
||||
this.addAbility(new EquipAbility(3, false));
|
||||
|
|
|
|||
|
|
@ -1,23 +1,20 @@
|
|||
|
||||
package mage.cards.c;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.condition.common.MoreThanStartingLifeTotalCondition;
|
||||
import mage.abilities.costs.common.TapSourceCost;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.decorator.ConditionalOneShotEffect;
|
||||
import mage.abilities.effects.common.GainLifeEffect;
|
||||
import mage.abilities.effects.common.TransformSourceEffect;
|
||||
import mage.abilities.keyword.TransformAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.Zone;
|
||||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.players.Player;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author intimidatingant
|
||||
*/
|
||||
public final class ChaliceOfLife extends CardImpl {
|
||||
|
|
@ -28,9 +25,13 @@ public final class ChaliceOfLife extends CardImpl {
|
|||
this.secondSideCardClazz = mage.cards.c.ChaliceOfDeath.class;
|
||||
this.addAbility(new TransformAbility());
|
||||
|
||||
|
||||
// {tap}: You gain 1 life. Then if you have at least 10 life more than your starting life total, transform Chalice of Life.
|
||||
this.addAbility(new SimpleActivatedAbility(new ChaliceOfLifeEffect(), new TapSourceCost()));
|
||||
Ability ability = new SimpleActivatedAbility(new GainLifeEffect(1), new TapSourceCost());
|
||||
ability.addEffect(new ConditionalOneShotEffect(
|
||||
new TransformSourceEffect(), MoreThanStartingLifeTotalCondition.TEN,
|
||||
"Then if you have at least 10 life more than your starting life total, transform {this}"
|
||||
));
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
private ChaliceOfLife(final ChaliceOfLife card) {
|
||||
|
|
@ -42,39 +43,3 @@ public final class ChaliceOfLife extends CardImpl {
|
|||
return new ChaliceOfLife(this);
|
||||
}
|
||||
}
|
||||
|
||||
class ChaliceOfLifeEffect extends OneShotEffect {
|
||||
|
||||
ChaliceOfLifeEffect() {
|
||||
super(Outcome.GainLife);
|
||||
staticText = "You gain 1 life. Then if you have at least 10 life more than your starting life total, transform Chalice of Life";
|
||||
}
|
||||
|
||||
private ChaliceOfLifeEffect(final ChaliceOfLifeEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
Permanent permanent = game.getPermanent(source.getSourceId());
|
||||
if (permanent != null) {
|
||||
Player player = game.getPlayer(source.getControllerId());
|
||||
if(player != null) {
|
||||
//gain 1 life
|
||||
player.gainLife(1, game, source);
|
||||
|
||||
// if you have at least 10 life more than your starting life total, transform Chalice of Life.
|
||||
if (player.getLife() >= game.getStartingLife() + 10) {
|
||||
permanent.transform(source, game);
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChaliceOfLifeEffect copy() {
|
||||
return new ChaliceOfLifeEffect(this);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,5 @@
|
|||
package mage.cards.c;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
import mage.MageInt;
|
||||
import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
|
||||
import mage.abilities.common.TurnedFaceUpAllTriggeredAbility;
|
||||
|
|
@ -18,12 +16,14 @@ import mage.filter.FilterPermanent;
|
|||
import mage.filter.common.FilterControlledPermanent;
|
||||
import mage.filter.predicate.card.FaceDownPredicate;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @author jackd149
|
||||
*/
|
||||
public final class CryptidInspector extends CardImpl {
|
||||
private static final FilterPermanent filter1 = new FilterPermanent("a face-down permanent");
|
||||
private static final FilterPermanent filter2 = new FilterControlledPermanent("Cryptid Inspector or another permanent you control");
|
||||
private static final FilterPermanent filter2 = new FilterControlledPermanent();
|
||||
|
||||
static {
|
||||
filter1.add(FaceDownPredicate.instance);
|
||||
|
|
@ -44,7 +44,7 @@ public final class CryptidInspector extends CardImpl {
|
|||
new AddCountersSourceEffect(CounterType.P1P1.createInstance()),
|
||||
false,
|
||||
"Whenever a face-down permanent you control enters and "
|
||||
+ "whenever Cryptid Inspector or another permanent you control is turned face up, ",
|
||||
+ "whenever {this} or another permanent you control is turned face up, ",
|
||||
new EntersBattlefieldControlledTriggeredAbility(null, filter1),
|
||||
new TurnedFaceUpAllTriggeredAbility(null, filter2)
|
||||
));
|
||||
|
|
|
|||
|
|
@ -58,7 +58,7 @@ class DeathmistRaptorEffect extends OneShotEffect {
|
|||
|
||||
DeathmistRaptorEffect() {
|
||||
super(Outcome.Benefit);
|
||||
this.staticText = "you may return {this} from your graveyard to the battlefield face up or face down";
|
||||
this.staticText = "you may return this card from your graveyard to the battlefield face up or face down";
|
||||
}
|
||||
|
||||
private DeathmistRaptorEffect(final DeathmistRaptorEffect effect) {
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ import mage.filter.predicate.mageobject.AnotherPredicate;
|
|||
*/
|
||||
public final class DemonicTaskmaster extends CardImpl {
|
||||
|
||||
private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("a creature other than Demonic Taskmaster");
|
||||
private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("a creature other than {this}");
|
||||
|
||||
static {
|
||||
filter.add(AnotherPredicate.instance);
|
||||
|
|
|
|||
|
|
@ -56,6 +56,7 @@ class EdgarsAwakeningTriggeredAbility extends TriggeredAbilityImpl {
|
|||
|
||||
EdgarsAwakeningTriggeredAbility() {
|
||||
super(Zone.ALL, new DoWhenCostPaid(makeAbility(), new ManaCostsImpl<>("{B}"), "Pay {B}?"));
|
||||
this.setTriggerPhrase("When you discard this card, ");
|
||||
}
|
||||
|
||||
private EdgarsAwakeningTriggeredAbility(final EdgarsAwakeningTriggeredAbility ability) {
|
||||
|
|
@ -76,10 +77,4 @@ class EdgarsAwakeningTriggeredAbility extends TriggeredAbilityImpl {
|
|||
public boolean checkTrigger(GameEvent event, Game game) {
|
||||
return this.getSourceId().equals(event.getTargetId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getRule() {
|
||||
return "When you discard {this}, you may pay {B}. " +
|
||||
"When you do, return target creature card from your graveyard to your hand.";
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
package mage.cards.e;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.costs.common.RemoveCountersSourceCost;
|
||||
|
|
@ -10,11 +9,11 @@ import mage.cards.CardImpl;
|
|||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.Zone;
|
||||
import mage.counters.CounterType;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Plopman
|
||||
*/
|
||||
public final class ExperimentOne extends CardImpl {
|
||||
|
|
@ -32,7 +31,7 @@ public final class ExperimentOne extends CardImpl {
|
|||
this.addAbility(new EvolveAbility());
|
||||
|
||||
//Remove two +1/+1 counters from Experiment One: Regenerate Experiment One.
|
||||
this.addAbility(new SimpleActivatedAbility(new RegenerateSourceEffect(), new RemoveCountersSourceCost(CounterType.P1P1.createInstance(2))));
|
||||
this.addAbility(new SimpleActivatedAbility(new RegenerateSourceEffect("it"), new RemoveCountersSourceCost(CounterType.P1P1.createInstance(2))));
|
||||
}
|
||||
|
||||
private ExperimentOne(final ExperimentOne card) {
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@ public final class FearOfSleepParalysis extends CardImpl {
|
|||
this.addAbility(FlyingAbility.getInstance());
|
||||
|
||||
// Eerie -- Whenever Fear of Sleep Paralysis or another enchantment you control enters and whenever you fully unlock a Room, tap up to one target creature and put a stun counter on it.
|
||||
Ability ability = new EerieAbility(new TapTargetEffect());
|
||||
Ability ability = new EerieAbility(new TapTargetEffect()).setTriggerPhrase("Whenever this creature or another enchantment you control enters and whenever you fully unlock a Room, ");
|
||||
ability.addEffect(new AddCountersTargetEffect(CounterType.STUN.createInstance()).setText("and put a stun counter on it"));
|
||||
ability.addTarget(new TargetCreaturePermanent(0, 1));
|
||||
this.addAbility(ability);
|
||||
|
|
|
|||
|
|
@ -66,7 +66,7 @@ class GryffsBoonEffect extends OneShotEffect {
|
|||
|
||||
GryffsBoonEffect() {
|
||||
super(Outcome.PutCardInPlay);
|
||||
staticText = "Return {this} from your graveyard to the battlefield attached to target creature";
|
||||
staticText = "Return this card from your graveyard to the battlefield attached to target creature";
|
||||
}
|
||||
|
||||
private GryffsBoonEffect(final GryffsBoonEffect effect) {
|
||||
|
|
|
|||
|
|
@ -46,7 +46,8 @@ public final class HauntedScreen extends CardImpl {
|
|||
);
|
||||
ability.addEffect(new BecomesCreatureSourceEffect(new CreatureToken(
|
||||
0, 0, "0/0 Spirit creature", SubType.SPIRIT
|
||||
), CardType.ARTIFACT, Duration.Custom).withKeepCreatureSubtypes(true));
|
||||
), CardType.ARTIFACT, Duration.Custom).withKeepCreatureSubtypes(true)
|
||||
.setText("It becomes a 0/0 Spirit creature in addition to its other types"));
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -63,7 +63,7 @@ public final class KaitoBaneOfNightmares extends CardImpl {
|
|||
|
||||
// 0: Surveil 2. Then draw a card for each opponent who lost life this turn.
|
||||
Ability ability = new LoyaltyAbility(new SurveilEffect(2), 0);
|
||||
ability.addEffect(new DrawCardSourceControllerEffect(KaitoBaneOfNightmaresCount.instance));
|
||||
ability.addEffect(new DrawCardSourceControllerEffect(KaitoBaneOfNightmaresCount.instance).concatBy("Then"));
|
||||
this.addAbility(ability);
|
||||
|
||||
// -2: Tap target creature. Put two stun counters on it.
|
||||
|
|
|
|||
|
|
@ -56,7 +56,7 @@ class KheruSpellsnatcherEffect extends OneShotEffect {
|
|||
super(Outcome.Benefit);
|
||||
this.staticText = "counter target spell. If that spell is countered this way, "
|
||||
+ "exile it instead of putting it into its owner's graveyard. "
|
||||
+ "You may cast that card without paying its mana cost as long as it remains exiled";
|
||||
+ "You may cast that card without paying its mana cost for as long as it remains exiled";
|
||||
}
|
||||
|
||||
private KheruSpellsnatcherEffect(final KheruSpellsnatcherEffect effect) {
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ public final class LaviniaAzoriusRenegade extends CardImpl {
|
|||
// Whenever an opponent casts a spell, if no mana was spent to cast it, counter that spell.
|
||||
this.addAbility(new SpellCastOpponentTriggeredAbility(
|
||||
Zone.BATTLEFIELD, new CounterTargetEffect(),
|
||||
StaticFilters.FILTER_SPELL_NO_MANA_SPENT, false, true
|
||||
StaticFilters.FILTER_SPELL_NO_MANA_SPENT, false
|
||||
));
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,25 +1,26 @@
|
|||
package mage.cards.m;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.SacrificeOpponentsEffect;
|
||||
import mage.abilities.effects.common.discard.DiscardHandControllerEffect;
|
||||
import mage.abilities.keyword.FlyingAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.SuperType;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.game.Controllable;
|
||||
import mage.game.Game;
|
||||
import mage.players.Player;
|
||||
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author jeffwadsworth
|
||||
*/
|
||||
public final class Malfegor extends CardImpl {
|
||||
|
|
@ -38,7 +39,6 @@ public final class Malfegor extends CardImpl {
|
|||
|
||||
// When Malfegor enters the battlefield, discard your hand. Each opponent sacrifices a creature for each card discarded this way.
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new MalfegorEffect(), false));
|
||||
|
||||
}
|
||||
|
||||
private Malfegor(final Malfegor card) {
|
||||
|
|
@ -64,16 +64,17 @@ class MalfegorEffect extends OneShotEffect {
|
|||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
Player controller = game.getPlayer(source.getControllerId());
|
||||
if (controller == null) {
|
||||
return false;
|
||||
}
|
||||
int sacrificeNumber = controller.getHand().size();
|
||||
if (sacrificeNumber == 0) {
|
||||
return true;
|
||||
}
|
||||
new DiscardHandControllerEffect().apply(game, source);
|
||||
return new SacrificeOpponentsEffect(sacrificeNumber, StaticFilters.FILTER_CONTROLLED_CREATURE).apply(game, source);
|
||||
return Optional
|
||||
.ofNullable(source)
|
||||
.map(Controllable::getControllerId)
|
||||
.map(game::getPlayer)
|
||||
.filter(player -> !player.getHand().isEmpty())
|
||||
.map(player -> player.discard(player.getHand(), false, source, game))
|
||||
.map(Set::size)
|
||||
.filter(amount -> amount > 0 && new SacrificeOpponentsEffect(
|
||||
amount, StaticFilters.FILTER_CONTROLLED_CREATURE
|
||||
).apply(game, source))
|
||||
.isPresent();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -61,7 +61,7 @@ class MogisGodOfSlaughterEffect extends OneShotEffect {
|
|||
|
||||
MogisGodOfSlaughterEffect() {
|
||||
super(Outcome.Damage);
|
||||
staticText = "{this} deals 2 damage to that player unless they sacrifice a creature";
|
||||
staticText = "{this} deals 2 damage to that player unless they sacrifice a creature of their choice";
|
||||
}
|
||||
|
||||
private MogisGodOfSlaughterEffect(final MogisGodOfSlaughterEffect effect) {
|
||||
|
|
|
|||
|
|
@ -1,8 +1,5 @@
|
|||
|
||||
package mage.cards.n;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
import mage.abilities.TriggeredAbilityImpl;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.costs.mana.GenericManaCost;
|
||||
|
|
@ -13,13 +10,15 @@ import mage.abilities.keyword.TransformAbility;
|
|||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.Zone;
|
||||
import mage.game.Game;
|
||||
import mage.game.events.GameEvent;
|
||||
import mage.target.common.TargetControlledCreaturePermanent;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @author halljared
|
||||
*/
|
||||
|
|
@ -85,6 +84,6 @@ class NeglectedHeirloomTriggeredAbility extends TriggeredAbilityImpl {
|
|||
|
||||
@Override
|
||||
public String getRule() {
|
||||
return "When equipped creature transforms, transform Neglected Heirloom.";
|
||||
return "When equipped creature transforms, transform {this}.";
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -74,7 +74,7 @@ class NikoLightOfHopeEffect extends OneShotEffect {
|
|||
|
||||
NikoLightOfHopeEffect() {
|
||||
super(Outcome.Benefit);
|
||||
staticText = "Exile target nonlegendary creature you control. Shards you control become copies of it until the beginning of the next end step. Return it to the battlefield under its owner's control at the beginning of the next end step.";
|
||||
staticText = "Exile target nonlegendary creature you control. Shards you control become copies of it until the next end step. Return it to the battlefield under its owner's control at the beginning of the next end step.";
|
||||
}
|
||||
|
||||
private NikoLightOfHopeEffect(final NikoLightOfHopeEffect effect) {
|
||||
|
|
|
|||
|
|
@ -55,7 +55,7 @@ class PlaguecrafterEffect extends OneShotEffect {
|
|||
|
||||
PlaguecrafterEffect() {
|
||||
super(Outcome.Benefit);
|
||||
this.staticText = "each player sacrifices a creature or planeswalker. "
|
||||
this.staticText = "each player sacrifices a creature or planeswalker of their choice. "
|
||||
+ "Each player who can't discards a card.";
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,29 +1,26 @@
|
|||
package mage.cards.r;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.ApprovingObject;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.SpellCastControllerTriggeredAbility;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.cards.Card;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.cards.CardsImpl;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.SuperType;
|
||||
import mage.constants.Zone;
|
||||
import mage.constants.*;
|
||||
import mage.filter.FilterCard;
|
||||
import mage.filter.predicate.mageobject.ManaValuePredicate;
|
||||
import mage.game.Game;
|
||||
import mage.game.events.GameEvent;
|
||||
import mage.game.stack.Spell;
|
||||
import mage.players.Player;
|
||||
import mage.util.CardUtil;
|
||||
import mage.watchers.common.SpellsCastWatcher;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author emerald000
|
||||
*/
|
||||
public final class RashmiEternitiesCrafter extends CardImpl {
|
||||
|
|
@ -56,6 +53,7 @@ class RashmiEternitiesCrafterTriggeredAbility extends SpellCastControllerTrigger
|
|||
|
||||
RashmiEternitiesCrafterTriggeredAbility() {
|
||||
super(new RashmiEternitiesCrafterEffect(), false);
|
||||
setTriggerPhrase("Whenever you cast your first spell each turn, ");
|
||||
}
|
||||
|
||||
private RashmiEternitiesCrafterTriggeredAbility(final RashmiEternitiesCrafterTriggeredAbility ability) {
|
||||
|
|
@ -69,27 +67,11 @@ class RashmiEternitiesCrafterTriggeredAbility extends SpellCastControllerTrigger
|
|||
|
||||
@Override
|
||||
public boolean checkTrigger(GameEvent event, Game game) {
|
||||
if (super.checkTrigger(event, game)) {
|
||||
SpellsCastWatcher watcher = game.getState().getWatcher(SpellsCastWatcher.class);
|
||||
if (watcher != null && watcher.getCount(event.getPlayerId()) == 1) {
|
||||
Spell spell = game.getStack().getSpell(event.getTargetId());
|
||||
if (spell != null) {
|
||||
for (Effect effect : getEffects()) {
|
||||
effect.setValue("RashmiEternitiesCrafterCMC", spell.getManaValue());
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getRule() {
|
||||
return "Whenever you cast your first spell each turn, reveal the top card "
|
||||
+ "of your library. If it's a nonland card with mana value "
|
||||
+ "less than that spell's, you may cast it without paying "
|
||||
+ "its mana cost. If you don't cast the revealed card, put it into your hand.";
|
||||
return super.checkTrigger(event, game)
|
||||
&& game
|
||||
.getState()
|
||||
.getWatcher(SpellsCastWatcher.class)
|
||||
.getCount(event.getPlayerId()) == 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -97,10 +79,8 @@ class RashmiEternitiesCrafterEffect extends OneShotEffect {
|
|||
|
||||
RashmiEternitiesCrafterEffect() {
|
||||
super(Outcome.PlayForFree);
|
||||
this.staticText = "reveal the top card of your library. If it's a nonland"
|
||||
+ " card with mana value less than that spell's, you may "
|
||||
+ "cast it without paying its mana cost. If you don't cast the "
|
||||
+ "revealed card, put it into your hand";
|
||||
this.staticText = "reveal the top card of your library. You may cast it without paying its mana cost " +
|
||||
"if it's a spell with lesser mana value. If you don't cast it, put it into your hand.";
|
||||
}
|
||||
|
||||
private RashmiEternitiesCrafterEffect(final RashmiEternitiesCrafterEffect effect) {
|
||||
|
|
@ -114,32 +94,22 @@ class RashmiEternitiesCrafterEffect extends OneShotEffect {
|
|||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
boolean cardWasCast = false;
|
||||
Player controller = game.getPlayer(source.getControllerId());
|
||||
if (controller != null) {
|
||||
Card card = controller.getLibrary().getFromTop(game);
|
||||
if (card != null) {
|
||||
controller.revealCards("Rashmi, Eternities Crafter", new CardsImpl(card), game);
|
||||
if (card.isLand(game)) {
|
||||
controller.moveCards(card, Zone.HAND, source, game);
|
||||
return true;
|
||||
}
|
||||
Object cmcObject = this.getValue("RashmiEternitiesCrafterCMC");
|
||||
if (cmcObject != null
|
||||
&& card.getManaValue() < (int) cmcObject
|
||||
&& controller.chooseUse(Outcome.PlayForFree, "Cast " + card.getName()
|
||||
+ " without paying its mana cost?", source, game)) {
|
||||
game.getState().setValue("PlayFromNotOwnHandZone" + card.getId(), Boolean.TRUE);
|
||||
cardWasCast = controller.cast(controller.chooseAbilityForCast(card, game, true),
|
||||
game, true, new ApprovingObject(source, game));
|
||||
game.getState().setValue("PlayFromNotOwnHandZone" + card.getId(), null);
|
||||
}
|
||||
if (!cardWasCast) {
|
||||
controller.moveCards(card, Zone.HAND, source, game);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
Player player = game.getPlayer(source.getControllerId());
|
||||
Spell spell = (Spell) getValue("spellCast");
|
||||
if (player == null || spell == null) {
|
||||
return false;
|
||||
}
|
||||
Card card = player.getLibrary().getFromTop(game);
|
||||
if (card == null) {
|
||||
return false;
|
||||
}
|
||||
player.revealCards("Rashmi, Eternities Crafter", new CardsImpl(card), game);
|
||||
FilterCard filter = new FilterCard();
|
||||
filter.add(new ManaValuePredicate(ComparisonType.FEWER_THAN, spell.getManaValue()));
|
||||
CardUtil.castSpellWithAttributesForFree(player, source, game, card, filter);
|
||||
if (Zone.LIBRARY.match(game.getState().getZone(card.getId()))) {
|
||||
player.moveCards(card, Zone.HAND, source, game);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -118,6 +118,6 @@ class SharkTyphoonTriggeredAbility extends ZoneChangeTriggeredAbility {
|
|||
|
||||
@Override
|
||||
public String getRule() {
|
||||
return "When you cycle {this}, create an X/X blue Shark creature token with flying.";
|
||||
return "When you cycle this card, create an X/X blue Shark creature token with flying.";
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -13,9 +13,7 @@ import mage.abilities.effects.common.TapTargetEffect;
|
|||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.*;
|
||||
import mage.filter.FilterPermanent;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.filter.predicate.Predicates;
|
||||
import mage.game.Game;
|
||||
import mage.game.command.emblems.TamiyoFieldResearcherEmblem;
|
||||
import mage.game.events.DamagedBatchBySourceEvent;
|
||||
|
|
@ -35,12 +33,6 @@ import java.util.UUID;
|
|||
*/
|
||||
public final class TamiyoFieldResearcher extends CardImpl {
|
||||
|
||||
private static final FilterPermanent filter = new FilterPermanent("nonland permanent");
|
||||
|
||||
static {
|
||||
filter.add(Predicates.not(CardType.LAND.getPredicate()));
|
||||
}
|
||||
|
||||
public TamiyoFieldResearcher(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{1}{G}{W}{U}");
|
||||
this.supertype.add(SuperType.LEGENDARY);
|
||||
|
|
@ -55,7 +47,7 @@ public final class TamiyoFieldResearcher extends CardImpl {
|
|||
|
||||
// -2: Tap up to two target nonland permanents. They don't untap during their controller's next untap step.
|
||||
ability = new LoyaltyAbility(new TapTargetEffect(), -2);
|
||||
ability.addTarget(new TargetPermanent(0, 2, filter, false));
|
||||
ability.addTarget(new TargetPermanent(0, 2, StaticFilters.FILTER_PERMANENTS_NON_LAND, false));
|
||||
ability.addEffect(new DontUntapInControllersNextUntapStepTargetEffect("They"));
|
||||
this.addAbility(ability);
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
package mage.cards.t;
|
||||
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.effects.common.PutCardIntoPlayWithHasteAndSacrificeEffect;
|
||||
import mage.abilities.keyword.SpliceAbility;
|
||||
import mage.cards.CardImpl;
|
||||
|
|
@ -27,7 +26,7 @@ public final class ThroughTheBreach extends CardImpl {
|
|||
));
|
||||
|
||||
// Splice onto Arcane {2}{R}{R}
|
||||
this.addAbility(new SpliceAbility(SpliceAbility.ARCANE, new ManaCostsImpl<>("{2}{R}{R}")));
|
||||
this.addAbility(new SpliceAbility(SpliceAbility.ARCANE, "{2}{R}{R}"));
|
||||
}
|
||||
|
||||
private ThroughTheBreach(final ThroughTheBreach card) {
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@ public final class ThunderfootBaloth extends CardImpl {
|
|||
// Lieutenant - As long as you control your commander, Thunderfoot Baloth gets +2/+2 and other creatures you control get +2/+2 and have trample.
|
||||
this.addAbility(new LieutenantAbility(new BoostControlledEffect(
|
||||
2, 2, Duration.WhileOnBattlefield, true
|
||||
), "and other creature you control get +2/+2").addLieutenantEffect(new GainAbilityAllEffect(
|
||||
), "and other creatures you control get +2/+2").addLieutenantEffect(new GainAbilityAllEffect(
|
||||
TrampleAbility.getInstance(), Duration.WhileOnBattlefield,
|
||||
StaticFilters.FILTER_CONTROLLED_CREATURES, true
|
||||
), "and have trample"));
|
||||
|
|
|
|||
|
|
@ -11,7 +11,10 @@ import mage.abilities.keyword.EnchantAbility;
|
|||
import mage.abilities.keyword.IndestructibleAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.*;
|
||||
import mage.constants.AttachmentType;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.SubType;
|
||||
import mage.filter.FilterPermanent;
|
||||
import mage.filter.predicate.mageobject.CommanderPredicate;
|
||||
import mage.target.TargetPermanent;
|
||||
|
|
@ -38,8 +41,8 @@ public final class TimelyWard extends CardImpl {
|
|||
this.subtype.add(SubType.AURA);
|
||||
|
||||
// You may cast this spell as though it had flash if it targets a commander.
|
||||
this.addAbility(new CastAsThoughItHadFlashIfConditionAbility(condition,
|
||||
"You may cast {this} as though it had flash if it targets a commander."
|
||||
this.addAbility(new CastAsThoughItHadFlashIfConditionAbility(
|
||||
condition, "You may cast this spell as though it had flash if it targets a commander."
|
||||
));
|
||||
|
||||
// Enchant creature
|
||||
|
|
|
|||
|
|
@ -55,7 +55,7 @@ class WoebringerDemonEffect extends OneShotEffect {
|
|||
|
||||
WoebringerDemonEffect() {
|
||||
super(Outcome.Detriment);
|
||||
this.staticText = "that player sacrifices a creature. If the player can't, sacrifice {this}";
|
||||
this.staticText = "that player sacrifices a creature of their choice. If the player can't, sacrifice {this}";
|
||||
}
|
||||
|
||||
private WoebringerDemonEffect(final WoebringerDemonEffect effect) {
|
||||
|
|
|
|||
|
|
@ -75,7 +75,7 @@ public class VerifyCardDataTest {
|
|||
|
||||
private static final Logger logger = Logger.getLogger(VerifyCardDataTest.class);
|
||||
|
||||
private static final String FULL_ABILITIES_CHECK_SET_CODES = "FDN"; // check ability text due mtgjson, can use multiple sets like MAT;CMD or * for all
|
||||
private static final String FULL_ABILITIES_CHECK_SET_CODES = "INR"; // check ability text due mtgjson, can use multiple sets like MAT;CMD or * for all
|
||||
private static final boolean CHECK_ONLY_ABILITIES_TEXT = false; // use when checking text locally, suppresses unnecessary checks and output messages
|
||||
private static final boolean CHECK_COPYABLE_FIELDS = true; // disable for better verify test performance
|
||||
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ public class PutIntoGraveFromLibrarySourceTriggeredAbility extends ZoneChangeTri
|
|||
}
|
||||
|
||||
public PutIntoGraveFromLibrarySourceTriggeredAbility(Effect effect, boolean optional) {
|
||||
super(Zone.LIBRARY, Zone.GRAVEYARD, effect, "When {this} is put into your graveyard from your library, ", optional);
|
||||
super(Zone.LIBRARY, Zone.GRAVEYARD, effect, "When this card is put into your graveyard from your library, ", optional);
|
||||
}
|
||||
|
||||
protected PutIntoGraveFromLibrarySourceTriggeredAbility(final PutIntoGraveFromLibrarySourceTriggeredAbility ability) {
|
||||
|
|
|
|||
|
|
@ -1,7 +1,5 @@
|
|||
|
||||
|
||||
package mage.abilities.costs.common;
|
||||
import java.util.UUID;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.costs.Cost;
|
||||
import mage.abilities.costs.CostImpl;
|
||||
|
|
@ -12,18 +10,17 @@ import mage.constants.Zone;
|
|||
import mage.game.Game;
|
||||
import mage.players.Player;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
*
|
||||
* @author LevelX2
|
||||
*
|
||||
*/
|
||||
|
||||
public class RevealSourceFromYourHandCost extends CostImpl {
|
||||
public RevealSourceFromYourHandCost() {
|
||||
this.text = "reveal {this} from your hand";
|
||||
this.text = "reveal this card from your hand";
|
||||
}
|
||||
|
||||
public RevealSourceFromYourHandCost(RevealSourceFromYourHandCost cost) {
|
||||
super(cost);
|
||||
}
|
||||
|
|
@ -32,14 +29,16 @@ public class RevealSourceFromYourHandCost extends CostImpl {
|
|||
public boolean pay(Ability ability, Game game, Ability source, UUID controllerId, boolean noMana, Cost costToPay) {
|
||||
paid = false;
|
||||
Player player = game.getPlayer(controllerId);
|
||||
if (player != null) {
|
||||
if (player == null) {
|
||||
return paid;
|
||||
}
|
||||
Card card = player.getHand().get(ability.getSourceId(), game);
|
||||
if (card != null) {
|
||||
if (card == null) {
|
||||
return paid;
|
||||
}
|
||||
Cards cards = new CardsImpl(card);
|
||||
paid = true;
|
||||
player.revealCards("Reveal card cost", cards, game);
|
||||
}
|
||||
}
|
||||
return paid;
|
||||
}
|
||||
|
||||
|
|
@ -52,5 +51,4 @@ public class RevealSourceFromYourHandCost extends CostImpl {
|
|||
public RevealSourceFromYourHandCost copy() {
|
||||
return new RevealSourceFromYourHandCost(this);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -172,9 +172,14 @@ public class DamageTargetEffect extends OneShotEffect {
|
|||
} else {
|
||||
if (firstTarget.getMinNumberOfTargets() == 0) {
|
||||
int maxTargets = firstTarget.getMaxNumberOfTargets();
|
||||
if (maxTargets == Integer.MAX_VALUE) {
|
||||
switch (maxTargets) {
|
||||
case Integer.MAX_VALUE:
|
||||
sb.append("any number of ");
|
||||
} else {
|
||||
break;
|
||||
case 1:
|
||||
sb.append("up to one ");
|
||||
break;
|
||||
default:
|
||||
sb.append("each of up to ");
|
||||
sb.append(CardUtil.numberToText(maxTargets));
|
||||
sb.append(' ');
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ public class WUBRGInsteadEffect extends ContinuousEffectImpl {
|
|||
|
||||
public WUBRGInsteadEffect() {
|
||||
super(Duration.WhileOnBattlefield, Outcome.Detriment);
|
||||
staticText = "You may pay {W}{U}{B}{R}{G} rather than pay the mana cost for spells that you cast";
|
||||
staticText = "You may pay {W}{U}{B}{R}{G} rather than pay the mana cost for spells you cast";
|
||||
}
|
||||
|
||||
protected WUBRGInsteadEffect(final WUBRGInsteadEffect effect) {
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@ public final class ArlinnEmbracedByTheMoonEmblem extends Emblem {
|
|||
Ability ability2 = new SimpleActivatedAbility(effect2, new TapSourceCost());
|
||||
ability2.addTarget(new TargetAnyTarget());
|
||||
effect = new GainAbilityControlledEffect(ability2, Duration.EndOfGame, filter);
|
||||
effect.setText("and '{T}: This creature deals damage equal to its power to any target");
|
||||
effect.setText("and '{T}: This creature deals damage equal to its power to any target'");
|
||||
ability.addEffect(effect);
|
||||
this.getAbilities().add(ability);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ import mage.constants.SubType;
|
|||
public final class BeastieToken extends TokenImpl {
|
||||
|
||||
public BeastieToken() {
|
||||
super("Beast Token", "4/4 white Beast creature token with \"This creature can't attack or block alone.\"");
|
||||
super("Beast Token", "4/4 white Beast creature token with \"This token can't attack or block alone.\"");
|
||||
cardType.add(CardType.CREATURE);
|
||||
color.setWhite(true);
|
||||
subtype.add(SubType.BEAST);
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ public final class SeizeTheStormElementalToken extends TokenImpl {
|
|||
|
||||
public SeizeTheStormElementalToken(DynamicValue xValue, Hint hint) {
|
||||
super("Elemental Token", "red Elemental creature token with trample and " +
|
||||
"\"This creature's power and toughness are each equal to the number of instant " +
|
||||
"\"This token's power and toughness are each equal to the number of instant " +
|
||||
"and sorcery cards in your graveyard plus the number of cards with flashback you own in exile.\"");
|
||||
cardType.add(CardType.CREATURE);
|
||||
color.setRed(true);
|
||||
|
|
@ -32,7 +32,7 @@ public final class SeizeTheStormElementalToken extends TokenImpl {
|
|||
this.addAbility(TrampleAbility.getInstance());
|
||||
this.addAbility(new SimpleStaticAbility(new SetBasePowerToughnessSourceEffect(
|
||||
xValue
|
||||
).setText("this creature's power and toughness are each equal to the number of " +
|
||||
).setText("this token's power and toughness are each equal to the number of " +
|
||||
"instant and sorcery cards in your graveyard, plus the number of cards with flashback you own in exile")
|
||||
).addHint(hint));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ import mage.constants.Zone;
|
|||
public final class WrennAndSevenTreefolkToken extends TokenImpl {
|
||||
|
||||
public WrennAndSevenTreefolkToken() {
|
||||
super("Treefolk Token", "green Treefolk creature token with reach and \"This creature's power and toughness are each equal to the number of lands you control.\"");
|
||||
super("Treefolk Token", "green Treefolk creature token with reach and \"This token's power and toughness are each equal to the number of lands you control.\"");
|
||||
cardType.add(CardType.CREATURE);
|
||||
color.setGreen(true);
|
||||
subtype.add(SubType.TREEFOLK);
|
||||
|
|
@ -24,7 +24,7 @@ public final class WrennAndSevenTreefolkToken extends TokenImpl {
|
|||
this.addAbility(ReachAbility.getInstance());
|
||||
this.addAbility(new SimpleStaticAbility(Zone.ALL, new SetBasePowerToughnessSourceEffect(
|
||||
LandsYouControlCount.instance
|
||||
).setText("this creature's power and toughness are each equal to the number of lands you control")));
|
||||
).setText("this token's power and toughness are each equal to the number of lands you control")));
|
||||
}
|
||||
|
||||
private WrennAndSevenTreefolkToken(final WrennAndSevenTreefolkToken token) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue