mirror of
https://github.com/correl/mage.git
synced 2024-12-26 03:00:11 +00:00
Fix a bunch of card text errors (magefree#6643)
This commit is contained in:
parent
62643f1e46
commit
81e348360c
32 changed files with 79 additions and 94 deletions
|
@ -29,13 +29,13 @@ import java.util.UUID;
|
|||
*/
|
||||
public final class AlpineHoundmaster extends CardImpl {
|
||||
|
||||
private static final FilterPermanent filter = new FilterAttackingCreature("the number of other attacking creatures");
|
||||
private static final FilterPermanent filter = new FilterAttackingCreature();
|
||||
|
||||
static {
|
||||
filter.add(AnotherPredicate.instance);
|
||||
}
|
||||
|
||||
private static final DynamicValue xValue = new PermanentsOnBattlefieldCount(filter, null);
|
||||
private static final DynamicValue xValue = new PermanentsOnBattlefieldCount(filter);
|
||||
|
||||
public AlpineHoundmaster(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{R}{W}");
|
||||
|
@ -50,7 +50,7 @@ public final class AlpineHoundmaster extends CardImpl {
|
|||
|
||||
// Whenever Alpine Houndmaster attacks, it gets +X/+0 until end of turn, where X is the number of other attacking creatures.
|
||||
this.addAbility(new AttacksTriggeredAbility(new BoostSourceEffect(
|
||||
xValue, StaticValue.get(0), Duration.EndOfTurn, true
|
||||
xValue, StaticValue.get(0), Duration.EndOfTurn
|
||||
), false));
|
||||
}
|
||||
|
||||
|
|
|
@ -11,13 +11,12 @@ import mage.abilities.effects.common.ReturnToHandTargetEffect;
|
|||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.*;
|
||||
import mage.filter.FilterPermanent;
|
||||
import mage.filter.common.FilterCreatureOrPlaneswalkerPermanent;
|
||||
import mage.filter.predicate.permanent.AnotherPredicate;
|
||||
import mage.game.Game;
|
||||
import mage.game.events.GameEvent;
|
||||
import mage.game.events.ZoneChangeEvent;
|
||||
import mage.target.TargetPermanent;
|
||||
import mage.target.common.TargetCreatureOrPlaneswalker;
|
||||
import mage.watchers.Watcher;
|
||||
|
||||
import java.util.HashSet;
|
||||
|
@ -29,7 +28,7 @@ import java.util.UUID;
|
|||
*/
|
||||
public final class BarrinTolarianArchmage extends CardImpl {
|
||||
|
||||
private static final FilterPermanent filter
|
||||
private static final FilterCreatureOrPlaneswalkerPermanent filter
|
||||
= new FilterCreatureOrPlaneswalkerPermanent("other target creature or planeswalker");
|
||||
|
||||
static {
|
||||
|
@ -47,7 +46,7 @@ public final class BarrinTolarianArchmage extends CardImpl {
|
|||
|
||||
// When Barrin, Tolarian Archmage enters the battlefield, return up to one other target creature or planeswalker to its owner's hand.
|
||||
Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnToHandTargetEffect());
|
||||
ability.addTarget(new TargetPermanent(0, 1, filter, false));
|
||||
ability.addTarget(new TargetCreatureOrPlaneswalker(0, 1, filter, false));
|
||||
this.addAbility(ability);
|
||||
|
||||
// At the beginning of your end step, if a permanent was put into your hand from the battlefield this turn, draw a card.
|
||||
|
|
|
@ -26,7 +26,9 @@ public final class BattleRattleShaman extends CardImpl {
|
|||
this.toughness = new MageInt(2);
|
||||
|
||||
// At the beginning of combat on your turn, you may have target creature get +2/+0 until end of turn.
|
||||
Ability ability = new BeginningOfCombatTriggeredAbility(Zone.BATTLEFIELD, new BoostTargetEffect(2, 0, Duration.EndOfTurn), TargetController.YOU, true, false);
|
||||
Ability ability = new BeginningOfCombatTriggeredAbility(Zone.BATTLEFIELD,
|
||||
new BoostTargetEffect(2, 0, Duration.EndOfTurn).setText("you may have target creature get +2/+0 until end of turn"),
|
||||
TargetController.YOU, true, false);
|
||||
ability.addTarget(new TargetCreaturePermanent());
|
||||
this.addAbility(ability);
|
||||
|
||||
|
|
|
@ -2,10 +2,10 @@ package mage.cards.c;
|
|||
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.ActivateIfConditionActivatedAbility;
|
||||
import mage.abilities.condition.common.MorbidCondition;
|
||||
import mage.abilities.costs.common.TapSourceCost;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.decorator.ConditionalActivatedAbility;
|
||||
import mage.abilities.effects.common.LoseLifeOpponentsEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
|
@ -29,7 +29,7 @@ public final class CagedZombie extends CardImpl {
|
|||
this.toughness = new MageInt(3);
|
||||
|
||||
// {1}{B}, {T}: Each opponent loses 2 life. Activate this ability only if a creature died this turn.
|
||||
Ability ability = new ConditionalActivatedAbility(
|
||||
Ability ability = new ActivateIfConditionActivatedAbility(
|
||||
Zone.BATTLEFIELD, new LoseLifeOpponentsEffect(2),
|
||||
new ManaCostsImpl("{1}{B}"), MorbidCondition.instance
|
||||
);
|
||||
|
|
|
@ -54,7 +54,7 @@ public final class ChandraHeartOfFire extends CardImpl {
|
|||
damageAbility.addTarget(new TargetAnyTarget());
|
||||
this.addAbility(damageAbility);
|
||||
|
||||
// −9: Search your graveyard and library for any number of red instant and/or sorcery spells, exile them, then shuffle your library. You may cast them this turn. Add six {R}.
|
||||
// −9: Search your graveyard and library for any number of red instant and/or sorcery cards, exile them, then shuffle your library. You may cast them this turn. Add six {R}.
|
||||
Ability ultimateAbility = new LoyaltyAbility(new ChandraHeartOfFireUltimateEffect(), -9);
|
||||
ultimateAbility.addEffect(new BasicManaEffect(Mana.RedMana(6)).setText("Add six {R}"));
|
||||
this.addAbility(ultimateAbility);
|
||||
|
@ -81,7 +81,7 @@ class ChandraHeartOfFireUltimateEffect extends OneShotEffect {
|
|||
|
||||
ChandraHeartOfFireUltimateEffect() {
|
||||
super(Outcome.Benefit);
|
||||
staticText = "Search your graveyard and library for any number of red instant and/or sorcery spells, exile them, then shuffle your library. You may cast them this turn";
|
||||
staticText = "Search your graveyard and library for any number of red instant and/or sorcery cards, exile them, then shuffle your library. You may cast them this turn";
|
||||
}
|
||||
|
||||
private ChandraHeartOfFireUltimateEffect(ChandraHeartOfFireUltimateEffect effect) {
|
||||
|
@ -131,4 +131,4 @@ class ChandraHeartOfFireUltimateEffect extends OneShotEffect {
|
|||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -25,6 +25,7 @@ public final class Discontinuity extends CardImpl {
|
|||
this.addAbility(new SimpleStaticAbility(Zone.ALL, new SpellCostReductionSourceEffect(
|
||||
new ManaCostsImpl("{2}{U}{U}"), MyTurnCondition.instance
|
||||
).setText("as long as it's your turn, this spell costs {2}{U}{U} less to cast"))
|
||||
.setRuleAtTheTop(true)
|
||||
.addHint(MyTurnHint.instance));
|
||||
|
||||
// End the turn.
|
||||
|
|
|
@ -46,7 +46,7 @@ class ExperimentalOverloadEffect extends OneShotEffect {
|
|||
super(Outcome.Benefit);
|
||||
staticText = "Create an X/X blue and red Weird creature token, " +
|
||||
"where X is the number of instant and sorcery cards in your graveyard. " +
|
||||
"Then you may return an instant or sorcery card from your graveyard to your hand.";
|
||||
"Then you may return an instant or sorcery card from your graveyard to your hand";
|
||||
}
|
||||
|
||||
private ExperimentalOverloadEffect(final ExperimentalOverloadEffect effect) {
|
||||
|
@ -75,4 +75,4 @@ class ExperimentalOverloadEffect extends OneShotEffect {
|
|||
player.choose(outcome, player.getGraveyard(), target, game);
|
||||
return player.moveCards(game.getCard(target.getFirstTarget()), Zone.HAND, source, game);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -34,7 +34,9 @@ public final class FierceEmpath extends CardImpl {
|
|||
|
||||
// When Fierce Empath enters the battlefield, you may search your library for a creature card with converted mana cost 6 or greater, reveal it, put it into your hand, then shuffle your library.
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInHandEffect(
|
||||
new TargetCardInLibrary(filter), true, true), true));
|
||||
new TargetCardInLibrary(filter), true, true)
|
||||
.setText("search your library for a creature card with converted mana cost 6 or greater, reveal it, put it into your hand, then shuffle your library"),
|
||||
true));
|
||||
}
|
||||
|
||||
public FierceEmpath(final FierceEmpath card) {
|
||||
|
|
|
@ -27,7 +27,7 @@ public final class GoblinArsonist extends CardImpl {
|
|||
this.toughness = new MageInt(1);
|
||||
|
||||
// When Goblin Arsonist dies, you may have it deal 1 damage to any target.
|
||||
Ability ability = new DiesSourceTriggeredAbility(new DamageTargetEffect(1), true);
|
||||
Ability ability = new DiesSourceTriggeredAbility(new DamageTargetEffect(1).setText("it deal 1 damage to any target"), true);
|
||||
ability.addTarget(new TargetAnyTarget());
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
|
|
@ -21,10 +21,10 @@ public final class GrimTutor extends CardImpl {
|
|||
|
||||
// Search your library for a card and put that card into your hand, then shuffle your library.
|
||||
TargetCardInLibrary target = new TargetCardInLibrary();
|
||||
this.getSpellAbility().addEffect(new SearchLibraryPutInHandEffect(target));
|
||||
this.getSpellAbility().addEffect(new SearchLibraryPutInHandEffect(target).setText("search your library for a card and put that card into your hand, then shuffle your library"));
|
||||
// You lose 3 life.
|
||||
this.getSpellAbility().addEffect(new LoseLifeSourceControllerEffect(3));
|
||||
|
||||
|
||||
}
|
||||
|
||||
public GrimTutor(final GrimTutor card) {
|
||||
|
|
|
@ -29,7 +29,7 @@ public final class KaervekTheSpiteful extends CardImpl {
|
|||
// Other creatures get -1/-1.
|
||||
this.addAbility(new SimpleStaticAbility(new BoostAllEffect(
|
||||
-1, -1, Duration.WhileOnBattlefield, true
|
||||
)));
|
||||
).setText("other creatures get +1/+1")));
|
||||
}
|
||||
|
||||
private KaervekTheSpiteful(final KaervekTheSpiteful card) {
|
||||
|
|
|
@ -11,6 +11,7 @@ import mage.cards.CardImpl;
|
|||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.AttachmentType;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.SubType;
|
||||
import mage.counters.CounterType;
|
||||
|
@ -42,7 +43,7 @@ public final class LightOfPromise extends CardImpl {
|
|||
this.addAbility(new SimpleStaticAbility(new GainAbilityAttachedEffect(
|
||||
new GainLifeControllerTriggeredAbility(
|
||||
new LightOfPromiseEffect(), false, true
|
||||
), AttachmentType.AURA
|
||||
), AttachmentType.AURA, Duration.WhileOnBattlefield, "Enchanted creature has \"Whenever you gain life, put that many +1/+1 counters on this creature.\""
|
||||
)));
|
||||
}
|
||||
|
||||
|
|
|
@ -40,7 +40,7 @@ public final class MaleficScythe extends CardImpl {
|
|||
|
||||
// Whenever equipped creature dies, put a soul counter on Malefic Scythe.
|
||||
this.addAbility(new DiesAttachedTriggeredAbility(
|
||||
new AddCountersSourceEffect(CounterType.SOUL.createInstance()), "equipped"
|
||||
new AddCountersSourceEffect(CounterType.SOUL.createInstance()), "equipped creature"
|
||||
));
|
||||
|
||||
// Equip {1}
|
||||
|
|
|
@ -89,7 +89,7 @@ class MangaraTheDiplomatAttackTriggeredAbility extends TriggeredAbilityImpl {
|
|||
public String getRule() {
|
||||
return "Whenever an opponent attacks with creatures, " +
|
||||
"if two or more of those creatures are attacking you " +
|
||||
"and/or a planeswalker you control, draw a card.";
|
||||
"and/or planeswalkers you control, draw a card.";
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -26,7 +26,7 @@ import java.util.UUID;
|
|||
public final class Pridemalkin extends CardImpl {
|
||||
|
||||
private static final FilterPermanent filter
|
||||
= new FilterControlledCreaturePermanent("creature you control with a +1/+1 counter on it");
|
||||
= new FilterControlledCreaturePermanent("each creature you control with a +1/+1 counter on it");
|
||||
|
||||
static {
|
||||
filter.add(new CounterPredicate(CounterType.P1P1));
|
||||
|
|
|
@ -18,7 +18,7 @@ public final class RiseAgain extends CardImpl {
|
|||
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{4}{B}");
|
||||
|
||||
// Return target creature card from your graveyard to the battlefield.
|
||||
this.getSpellAbility().addEffect(new ReturnFromGraveyardToBattlefieldTargetEffect());
|
||||
this.getSpellAbility().addEffect(new ReturnFromGraveyardToBattlefieldTargetEffect(false, false));
|
||||
this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD));
|
||||
}
|
||||
|
||||
|
|
|
@ -9,10 +9,9 @@ import mage.cards.CardImpl;
|
|||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.filter.FilterPermanent;
|
||||
import mage.filter.common.FilterCreaturePermanent;
|
||||
import mage.filter.predicate.Predicates;
|
||||
import mage.target.TargetPermanent;
|
||||
import mage.target.common.TargetCreaturePermanent;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
|
@ -21,7 +20,7 @@ import java.util.UUID;
|
|||
*/
|
||||
public final class RoamingGhostlight extends CardImpl {
|
||||
|
||||
private static final FilterPermanent filter = new FilterCreaturePermanent("non-Spirit creature");
|
||||
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("non-Spirit creature");
|
||||
|
||||
static {
|
||||
filter.add(Predicates.not(SubType.SPIRIT.getPredicate()));
|
||||
|
@ -39,7 +38,7 @@ public final class RoamingGhostlight extends CardImpl {
|
|||
|
||||
// When Roaming Ghostlight enters the battlefield, return up to one target non-Spirit creature to its owner's hand.
|
||||
Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnToHandTargetEffect());
|
||||
ability.addTarget(new TargetPermanent(0, 1, filter, false));
|
||||
ability.addTarget(new TargetCreaturePermanent(0, 1, filter, false));
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
|
|
|
@ -38,7 +38,7 @@ public final class RunedHalo extends CardImpl {
|
|||
|
||||
// As Runed Halo enters the battlefield, name a card.
|
||||
Ability ability = new AsEntersBattlefieldAbility(new ChooseACardNameEffect(ChooseACardNameEffect.TypeOfName.ALL));
|
||||
// You have protection from the chosen name.
|
||||
// You have protection from the chosen card name.
|
||||
ability.addEffect(new RunedHaloSetProtectionEffect());
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
@ -57,7 +57,7 @@ class RunedHaloSetProtectionEffect extends OneShotEffect {
|
|||
|
||||
public RunedHaloSetProtectionEffect() {
|
||||
super(Outcome.Protect);
|
||||
staticText = "<br/><br/>You have protection from the chosen card name <i>(You can't be targeted, dealt damage, or enchanted by anything with that name.)</i>";
|
||||
staticText = "<br/><br/>You have protection from the chosen card name. <i>(You can't be targeted, dealt damage, or enchanted by anything with that name.)</i>";
|
||||
}
|
||||
|
||||
public RunedHaloSetProtectionEffect(final RunedHaloSetProtectionEffect effect) {
|
||||
|
@ -68,9 +68,9 @@ class RunedHaloSetProtectionEffect extends OneShotEffect {
|
|||
public boolean apply(Game game, Ability source) {
|
||||
Player controller = game.getPlayer(source.getControllerId());
|
||||
String cardName = (String) game.getState().getValue(source.getSourceId().toString() + ChooseACardNameEffect.INFO_KEY);
|
||||
if (controller != null && cardName != null && !cardName.isEmpty()) {
|
||||
FilterObject filter = new FilterObject("the name [" + cardName + ']');
|
||||
filter.add(new NamePredicate(cardName));
|
||||
if (controller != null && cardName != null && !cardName.isEmpty()) {
|
||||
FilterObject filter = new FilterObject("the card name [" + cardName + ']');
|
||||
filter.add(new NamePredicate(cardName));
|
||||
ContinuousEffect effect = new GainAbilityControllerEffect(new ProtectionAbility(filter), Duration.Custom);
|
||||
game.addEffect(effect, source);
|
||||
return true;
|
||||
|
|
|
@ -31,7 +31,7 @@ import java.util.UUID;
|
|||
public final class SanctumOfAll extends CardImpl {
|
||||
|
||||
private static final FilterPermanent filter = new FilterControlledPermanent();
|
||||
private static final FilterCard filterCard = new FilterCard("a Shrine card");
|
||||
private static final FilterCard filterCard = new FilterCard("Shrine card");
|
||||
|
||||
static final PermanentsOnBattlefieldCount count = new PermanentsOnBattlefieldCount(filter);
|
||||
|
||||
|
@ -42,7 +42,7 @@ public final class SanctumOfAll extends CardImpl {
|
|||
|
||||
public SanctumOfAll(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{W}{U}{B}{R}{G}");
|
||||
|
||||
|
||||
this.addSuperType(SuperType.LEGENDARY);
|
||||
this.subtype.add(SubType.SHRINE);
|
||||
|
||||
|
@ -106,4 +106,4 @@ class SanctumOfAllTriggerEffect extends ReplacementEffectImpl {
|
|||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -14,7 +14,6 @@ import mage.constants.ComparisonType;
|
|||
import mage.constants.Zone;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.target.common.TargetCardInYourGraveyard;
|
||||
import mage.watchers.common.PlayerGainedLifeWatcher;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
|
@ -31,9 +30,8 @@ public final class SanguineIndulgence extends CardImpl {
|
|||
|
||||
// This spell costs {3} less to cast if you've gained 3 or more life this turn.
|
||||
this.addAbility(new SimpleStaticAbility(
|
||||
Zone.ALL, new SpellCostReductionSourceEffect(3, condition)
|
||||
).addHint(hint).setRuleAtTheTop(true),
|
||||
new PlayerGainedLifeWatcher());
|
||||
Zone.ALL, new SpellCostReductionSourceEffect(3, condition)
|
||||
).setRuleAtTheTop(true).addHint(hint));
|
||||
|
||||
// Return up to two target creature cards from your graveyard to your hand.
|
||||
this.getSpellAbility().addEffect(new ReturnFromGraveyardToHandTargetEffect());
|
||||
|
|
|
@ -24,7 +24,7 @@ import java.util.UUID;
|
|||
public final class SelflessSavior extends CardImpl {
|
||||
|
||||
private static final FilterPermanent filter
|
||||
= new FilterControlledCreaturePermanent("another target creature");
|
||||
= new FilterControlledCreaturePermanent("another target creature you control");
|
||||
|
||||
static {
|
||||
filter.add(AnotherPredicate.instance);
|
||||
|
@ -37,7 +37,7 @@ public final class SelflessSavior extends CardImpl {
|
|||
this.power = new MageInt(1);
|
||||
this.toughness = new MageInt(1);
|
||||
|
||||
// Sacrifice Selfless Savior: Another target creature gains indestructible until end of turn.
|
||||
// Sacrifice Selfless Savior: Another target creature you control gains indestructible until end of turn.
|
||||
Ability ability = new SimpleActivatedAbility(new GainAbilityTargetEffect(
|
||||
IndestructibleAbility.getInstance(), Duration.EndOfTurn
|
||||
), new SacrificeSourceCost());
|
||||
|
|
|
@ -25,7 +25,11 @@ public final class SolemnSimulacrum extends CardImpl {
|
|||
this.subtype.add(SubType.GOLEM);
|
||||
this.power = new MageInt(2);
|
||||
this.toughness = new MageInt(2);
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_LAND), true), true));
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(
|
||||
new SearchLibraryPutInPlayEffect(
|
||||
new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_LAND), true)
|
||||
.setText("search your library for a basic land card, put that card onto the battlefield tapped, then shuffle your library"),
|
||||
true));
|
||||
this.addAbility(new DiesSourceTriggeredAbility(new DrawCardSourceControllerEffect(1), true));
|
||||
}
|
||||
|
||||
|
|
|
@ -74,6 +74,6 @@ enum SpeakerOfTheHeavensCondition implements Condition {
|
|||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "if you have at least 7 more life than your starting life total and only any time you could cast a sorcery";
|
||||
return "you have at least 7 more life than your starting life total and only any time you could cast a sorcery";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
package mage.cards.s;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
|
@ -18,12 +17,10 @@ import mage.cards.CardImpl;
|
|||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.WatcherScope;
|
||||
import mage.constants.Zone;
|
||||
import mage.game.Game;
|
||||
import mage.game.events.GameEvent;
|
||||
import mage.game.stack.Spell;
|
||||
import mage.watchers.Watcher;
|
||||
import mage.watchers.common.SpellsCastWatcher;
|
||||
|
||||
/**
|
||||
* @author TheElk801
|
||||
|
@ -44,7 +41,7 @@ public final class StormwingEntity extends CardImpl {
|
|||
// This spell costs {2}{U} less to cast if you've cast an instant or sorcery spell this turn.
|
||||
this.addAbility(new SimpleStaticAbility(Zone.ALL, new SpellCostReductionSourceEffect(
|
||||
new ManaCostsImpl("{2}{U}"), StormwingEntityCondition.instance
|
||||
)).setRuleAtTheTop(true).addHint(hint), new StormwingEntityWatcher());
|
||||
)).setRuleAtTheTop(true).addHint(hint), new SpellsCastWatcher());
|
||||
|
||||
// Flying
|
||||
this.addAbility(FlyingAbility.getInstance());
|
||||
|
@ -71,38 +68,20 @@ enum StormwingEntityCondition implements Condition {
|
|||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
StormwingEntityWatcher watcher = game.getState().getWatcher(StormwingEntityWatcher.class);
|
||||
return watcher != null && watcher.checkPlayer(source.getControllerId());
|
||||
}
|
||||
}
|
||||
|
||||
class StormwingEntityWatcher extends Watcher {
|
||||
|
||||
private final Set<UUID> playerMap = new HashSet<>();
|
||||
|
||||
StormwingEntityWatcher() {
|
||||
super(WatcherScope.GAME);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void watch(GameEvent event, Game game) {
|
||||
if (event.getType() != GameEvent.EventType.SPELL_CAST) {
|
||||
return;
|
||||
}
|
||||
Spell spell = game.getSpell(event.getTargetId());
|
||||
if (spell == null || !spell.isInstantOrSorcery()) {
|
||||
return;
|
||||
}
|
||||
playerMap.add(event.getPlayerId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void reset() {
|
||||
playerMap.clear();
|
||||
super.reset();
|
||||
}
|
||||
|
||||
boolean checkPlayer(UUID playerId) {
|
||||
return playerMap.contains(playerId);
|
||||
SpellsCastWatcher watcher = game.getState().getWatcher(SpellsCastWatcher.class);
|
||||
if (watcher == null) {
|
||||
return false;
|
||||
}
|
||||
List<Spell> spells = watcher.getSpellsCastThisTurn(source.getControllerId());
|
||||
if (spells == null) {
|
||||
return false;
|
||||
}
|
||||
for (Spell spell : spells) {
|
||||
if (!spell.getSourceId().equals(source.getSourceId())
|
||||
&& spell.isInstantOrSorcery()) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -16,7 +16,7 @@ import java.util.UUID;
|
|||
*/
|
||||
public final class SwiftResponse extends CardImpl {
|
||||
|
||||
private static final FilterPermanent filter = new FilterCreaturePermanent("tapped permanent");
|
||||
private static final FilterPermanent filter = new FilterCreaturePermanent("tapped creature");
|
||||
|
||||
static {
|
||||
filter.add(TappedPredicate.instance);
|
||||
|
|
|
@ -40,7 +40,7 @@ class TeferisAgelessInsightEffect extends ReplacementEffectImpl {
|
|||
|
||||
TeferisAgelessInsightEffect() {
|
||||
super(Duration.WhileOnBattlefield, Outcome.Neutral);
|
||||
staticText = "If you draw a card except the first one you draw in each of your draw steps, draw two cards instead";
|
||||
staticText = "If you would draw a card except the first one you draw in each of your draw steps, draw two cards instead";
|
||||
}
|
||||
|
||||
private TeferisAgelessInsightEffect(final TeferisAgelessInsightEffect effect) {
|
||||
|
|
|
@ -26,7 +26,7 @@ public final class TraitorousGreed extends CardImpl {
|
|||
this.getSpellAbility().addEffect(new UntapTargetEffect().setText("Untap that creature"));
|
||||
this.getSpellAbility().addEffect(new GainAbilityTargetEffect(
|
||||
HasteAbility.getInstance(), Duration.EndOfTurn
|
||||
).setText("It gains haste until end of turn."));
|
||||
).setText("It gains haste until end of turn"));
|
||||
this.getSpellAbility().addEffect(new AddManaOfAnyColorEffect(2));
|
||||
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
|
||||
}
|
||||
|
|
|
@ -52,7 +52,7 @@ public final class UginTheSpiritDragon extends CardImpl {
|
|||
// -X: Exile each permanent with converted mana cost X or less that's one or more colors.
|
||||
this.addAbility(new LoyaltyAbility(new UginTheSpiritDragonEffect2()));
|
||||
|
||||
// -10: You gain 7 life, draw 7 cards, then put up to seven permanent cards from your hand onto the battlefield.
|
||||
// -10: You gain 7 life, draw seven cards, then put up to seven permanent cards from your hand onto the battlefield.
|
||||
this.addAbility(new LoyaltyAbility(new UginTheSpiritDragonEffect3(), -10));
|
||||
|
||||
}
|
||||
|
@ -112,7 +112,7 @@ class UginTheSpiritDragonEffect3 extends OneShotEffect {
|
|||
|
||||
public UginTheSpiritDragonEffect3() {
|
||||
super(Outcome.Benefit);
|
||||
this.staticText = "You gain 7 life, draw 7 cards, then put up to seven permanent cards from your hand onto the battlefield";
|
||||
this.staticText = "You gain 7 life, draw seven cards, then put up to seven permanent cards from your hand onto the battlefield";
|
||||
}
|
||||
|
||||
public UginTheSpiritDragonEffect3(final UginTheSpiritDragonEffect3 effect) {
|
||||
|
|
|
@ -26,7 +26,7 @@ public final class VolcanicSalvo extends CardImpl {
|
|||
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{10}{R}{R}");
|
||||
|
||||
// This spell costs {X} less to cast, where X is the total power of creatures you control.
|
||||
this.addAbility(new SimpleStaticAbility(Zone.ALL, new VolcanicSalvoCostReductionEffect()));
|
||||
this.addAbility(new SimpleStaticAbility(Zone.ALL, new VolcanicSalvoCostReductionEffect()).setRuleAtTheTop(true));
|
||||
|
||||
// Volcanic Salvo deals 6 damage to each of up to two target creatures and/or planeswalkers.
|
||||
this.getSpellAbility().addEffect(new DamageTargetEffect(6)
|
||||
|
|
|
@ -30,7 +30,7 @@ public final class WildwoodScourge extends CardImpl {
|
|||
this.toughness = new MageInt(0);
|
||||
|
||||
// Wildwood Scourge enters the battlefield with X +1/+1 counters on it.
|
||||
this.addAbility(new EntersBattlefieldAbility(new EntersBattlefieldWithXCountersEffect(CounterType.P1P1.createInstance())));
|
||||
this.addAbility(new EntersBattlefieldAbility(new EntersBattlefieldWithXCountersEffect(CounterType.P1P1.createInstance()).setText("enters the battlefield with X +1/+1 counters")));
|
||||
|
||||
// Whenever one or more +1/+1 counters are put on another non-Hydra creature you control, put a +1/+1 counter on Wildwood Scourge.
|
||||
this.addAbility(new EnduringScalelordTriggeredAbility());
|
||||
|
|
|
@ -10,7 +10,7 @@ public class EndTurnEffect extends OneShotEffect {
|
|||
|
||||
public EndTurnEffect() {
|
||||
super(Outcome.Detriment);
|
||||
staticText = "End the turn <i>(Exile all spells and abilities on the stack. Discard down to your maximum hand size. Damage wears off, and \"this turn\" and \"until end of turn\" effects end.)</i>";
|
||||
staticText = "End the turn. <i>(Exile all spells and abilities on the stack, including this card. The player whose turn it is discards down to their maximum hand size. Damage wears off, and \"this turn\" and \"until end of turn\" effects end.)</i>";
|
||||
}
|
||||
|
||||
public EndTurnEffect(EndTurnEffect effect) {
|
||||
|
|
|
@ -507,7 +507,7 @@ public final class StaticFilters {
|
|||
FILTER_PERMANENTS_NON_LAND.setLockedFilter(true);
|
||||
}
|
||||
|
||||
public static final FilterStackObject FILTER_SPELL_OR_ABILITY_OPPONENTS = new FilterStackObject("spell or ability and opponent controls");
|
||||
public static final FilterStackObject FILTER_SPELL_OR_ABILITY_OPPONENTS = new FilterStackObject("a spell or ability an opponent controls");
|
||||
|
||||
static {
|
||||
FILTER_SPELL_OR_ABILITY_OPPONENTS.add(TargetController.OPPONENT.getControllerPredicate());
|
||||
|
|
Loading…
Reference in a new issue