mirror of
https://github.com/correl/mage.git
synced 2024-12-26 03:00:11 +00:00
[MIC] various text fixes
This commit is contained in:
parent
53540b9b36
commit
4fe2904f3f
28 changed files with 88 additions and 84 deletions
|
@ -32,8 +32,7 @@ public final class AccomplishedAlchemist extends CardImpl {
|
||||||
|
|
||||||
// {T}: Add X mana of any one color, where X is the amount of life you gained this turn.
|
// {T}: Add X mana of any one color, where X is the amount of life you gained this turn.
|
||||||
this.addAbility(new DynamicManaAbility(
|
this.addAbility(new DynamicManaAbility(
|
||||||
new Mana(0, 0, 0, 0, 0, 0, 1, 0),
|
Mana.AnyMana(1), ControllerGotLifeCount.instance, new TapSourceCost(), "Add X mana " +
|
||||||
ControllerGotLifeCount.instance, new TapSourceCost(), "Add X mana " +
|
|
||||||
"of any one color, where X is the amount of life you gained this turn", true
|
"of any one color, where X is the amount of life you gained this turn", true
|
||||||
).addHint(ControllerGotLifeCount.getHint()), new PlayerGainedLifeWatcher());
|
).addHint(ControllerGotLifeCount.getHint()), new PlayerGainedLifeWatcher());
|
||||||
}
|
}
|
||||||
|
|
|
@ -55,7 +55,7 @@ class AngelOfGlorysRiseEffect extends OneShotEffect {
|
||||||
|
|
||||||
public AngelOfGlorysRiseEffect() {
|
public AngelOfGlorysRiseEffect() {
|
||||||
super(Outcome.PutCreatureInPlay);
|
super(Outcome.PutCreatureInPlay);
|
||||||
staticText = "Exile all Zombies, then return all Human creature cards from your graveyard to the battlefield";
|
staticText = "exile all Zombies, then return all Human creature cards from your graveyard to the battlefield";
|
||||||
}
|
}
|
||||||
|
|
||||||
public AngelOfGlorysRiseEffect(final AngelOfGlorysRiseEffect effect) {
|
public AngelOfGlorysRiseEffect(final AngelOfGlorysRiseEffect effect) {
|
||||||
|
|
|
@ -1,8 +1,5 @@
|
||||||
|
|
||||||
|
|
||||||
package mage.cards.b;
|
package mage.cards.b;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.abilities.effects.common.CreateTokenEffect;
|
import mage.abilities.effects.common.CreateTokenEffect;
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
|
@ -11,18 +8,19 @@ import mage.game.permanent.token.ElephantToken;
|
||||||
import mage.game.permanent.token.SnakeToken;
|
import mage.game.permanent.token.SnakeToken;
|
||||||
import mage.game.permanent.token.WolfToken;
|
import mage.game.permanent.token.WolfToken;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author BetaSteward_at_googlemail.com
|
* @author BetaSteward_at_googlemail.com
|
||||||
*/
|
*/
|
||||||
public final class BestialMenace extends CardImpl {
|
public final class BestialMenace extends CardImpl {
|
||||||
|
|
||||||
public BestialMenace(UUID ownerId, CardSetInfo setInfo) {
|
public BestialMenace(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{3}{G}{G}");
|
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{3}{G}{G}");
|
||||||
|
|
||||||
this.getSpellAbility().addEffect(new CreateTokenEffect(new SnakeToken()));
|
this.getSpellAbility().addEffect(new CreateTokenEffect(new SnakeToken()));
|
||||||
this.getSpellAbility().addEffect(new CreateTokenEffect(new WolfToken()));
|
this.getSpellAbility().addEffect(new CreateTokenEffect(new WolfToken()).setText(", a 2/2 green Wolf creature token"));
|
||||||
this.getSpellAbility().addEffect(new CreateTokenEffect(new ElephantToken()));
|
this.getSpellAbility().addEffect(new CreateTokenEffect(new ElephantToken()).setText(", and a 3/3 green Elephant creature token"));
|
||||||
}
|
}
|
||||||
|
|
||||||
private BestialMenace(final BestialMenace card) {
|
private BestialMenace(final BestialMenace card) {
|
||||||
|
@ -33,5 +31,4 @@ public final class BestialMenace extends CardImpl {
|
||||||
public BestialMenace copy() {
|
public BestialMenace copy() {
|
||||||
return new BestialMenace(this);
|
return new BestialMenace(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,42 +1,42 @@
|
||||||
|
|
||||||
package mage.cards.c;
|
package mage.cards.c;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.MageInt;
|
import mage.MageInt;
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.common.DiesSourceTriggeredAbility;
|
import mage.abilities.common.DiesSourceTriggeredAbility;
|
||||||
|
import mage.abilities.dynamicvalue.DynamicValue;
|
||||||
import mage.abilities.dynamicvalue.common.CardsInTargetPlayersGraveyardCount;
|
import mage.abilities.dynamicvalue.common.CardsInTargetPlayersGraveyardCount;
|
||||||
import mage.abilities.effects.Effect;
|
|
||||||
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||||
import mage.abilities.effects.common.LoseLifeSourceControllerEffect;
|
import mage.abilities.effects.common.LoseLifeSourceControllerEffect;
|
||||||
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.SubType;
|
||||||
import mage.filter.common.FilterCreatureCard;
|
import mage.filter.StaticFilters;
|
||||||
import mage.target.TargetPlayer;
|
import mage.target.TargetPlayer;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author fireshoes
|
* @author fireshoes
|
||||||
*/
|
*/
|
||||||
public final class CorpseAugur extends CardImpl {
|
public final class CorpseAugur extends CardImpl {
|
||||||
|
|
||||||
|
private static final DynamicValue dynamicValue
|
||||||
|
= new CardsInTargetPlayersGraveyardCount(StaticFilters.FILTER_CARD_CREATURE);
|
||||||
|
|
||||||
public CorpseAugur(UUID ownerId, CardSetInfo setInfo) {
|
public CorpseAugur(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{B}");
|
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{B}");
|
||||||
this.subtype.add(SubType.ZOMBIE);
|
this.subtype.add(SubType.ZOMBIE);
|
||||||
this.subtype.add(SubType.WIZARD);
|
this.subtype.add(SubType.WIZARD);
|
||||||
this.power = new MageInt(4);
|
this.power = new MageInt(4);
|
||||||
this.toughness = new MageInt(2);
|
this.toughness = new MageInt(2);
|
||||||
|
|
||||||
// When Corpse Augur dies, you draw X cards and you lose X life, where X is the number of creature cards in target player's graveyard.
|
// When Corpse Augur dies, you draw X cards and you lose X life, where X is the number of creature cards in target player's graveyard.
|
||||||
CardsInTargetPlayersGraveyardCount dynamicValue = new CardsInTargetPlayersGraveyardCount(new FilterCreatureCard("the number of creature cards"));
|
Ability ability = new DiesSourceTriggeredAbility(
|
||||||
Effect effect = new DrawCardSourceControllerEffect(dynamicValue);
|
new DrawCardSourceControllerEffect(dynamicValue).setText("you draw X cards"), false
|
||||||
effect.setText("You draw X cards");
|
);
|
||||||
Ability ability = new DiesSourceTriggeredAbility(effect, false);
|
ability.addEffect(new LoseLifeSourceControllerEffect(dynamicValue)
|
||||||
effect = new LoseLifeSourceControllerEffect(dynamicValue);
|
.setText("and you lose X life, where X is the number of creature cards in target player's graveyard"));
|
||||||
effect.setText("and you lose X life, where X is the number of creature cards in target player's graveyard");
|
|
||||||
ability.addEffect(effect);
|
|
||||||
ability.addTarget(new TargetPlayer());
|
ability.addTarget(new TargetPlayer());
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,7 +33,7 @@ public final class CurseOfUnbinding extends CardImpl {
|
||||||
|
|
||||||
// At the beginning of enchanted player's upkeep, that player reveals cards from the top of their library until they reveal a creature card. Put that card onto the battlefield under your control. That player puts the rest of the revealed cards into their graveyard.
|
// At the beginning of enchanted player's upkeep, that player reveals cards from the top of their library until they reveal a creature card. Put that card onto the battlefield under your control. That player puts the rest of the revealed cards into their graveyard.
|
||||||
this.addAbility(new BeginningOfUpkeepTriggeredAbility(
|
this.addAbility(new BeginningOfUpkeepTriggeredAbility(
|
||||||
new CurseOfConformityEffect(), TargetController.ENCHANTED, false
|
new CurseOfUnbindingEffect(), TargetController.ENCHANTED, false
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package mage.cards.d;
|
package mage.cards.d;
|
||||||
|
|
||||||
import mage.MageInt;
|
import mage.MageInt;
|
||||||
|
import mage.MageObject;
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.common.SimpleStaticAbility;
|
import mage.abilities.common.SimpleStaticAbility;
|
||||||
import mage.abilities.effects.common.continuous.BoostControlledEffect;
|
import mage.abilities.effects.common.continuous.BoostControlledEffect;
|
||||||
|
@ -12,7 +13,9 @@ import mage.constants.CardType;
|
||||||
import mage.constants.Duration;
|
import mage.constants.Duration;
|
||||||
import mage.constants.SubType;
|
import mage.constants.SubType;
|
||||||
import mage.filter.common.FilterCreaturePermanent;
|
import mage.filter.common.FilterCreaturePermanent;
|
||||||
import mage.filter.predicate.Predicates;
|
import mage.filter.predicate.ObjectSourcePlayer;
|
||||||
|
import mage.filter.predicate.ObjectSourcePlayerPredicate;
|
||||||
|
import mage.game.Game;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
|
@ -21,13 +24,11 @@ import java.util.UUID;
|
||||||
*/
|
*/
|
||||||
public final class DeathBaron extends CardImpl {
|
public final class DeathBaron extends CardImpl {
|
||||||
|
|
||||||
private static final FilterCreaturePermanent filterSkeletons = new FilterCreaturePermanent();
|
private static final FilterCreaturePermanent filter
|
||||||
private static final FilterCreaturePermanent filterZombie = new FilterCreaturePermanent();
|
= new FilterCreaturePermanent("Skeletons you control and other Zombies");
|
||||||
|
|
||||||
static {
|
static {
|
||||||
filterSkeletons.add(SubType.SKELETON.getPredicate());
|
filter.add(DeathBaronPredicate.instance);
|
||||||
filterZombie.add(SubType.ZOMBIE.getPredicate());
|
|
||||||
filterZombie.add(Predicates.not(SubType.SKELETON.getPredicate()));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public DeathBaron(UUID ownerId, CardSetInfo setInfo) {
|
public DeathBaron(UUID ownerId, CardSetInfo setInfo) {
|
||||||
|
@ -40,16 +41,10 @@ public final class DeathBaron extends CardImpl {
|
||||||
|
|
||||||
// Skeletons you control and other Zombies you control get +1/+1 and have deathtouch.
|
// Skeletons you control and other Zombies you control get +1/+1 and have deathtouch.
|
||||||
Ability ability = new SimpleStaticAbility(new BoostControlledEffect(
|
Ability ability = new SimpleStaticAbility(new BoostControlledEffect(
|
||||||
1, 1, Duration.WhileOnBattlefield, filterSkeletons, false
|
1, 1, Duration.WhileOnBattlefield, filter, false
|
||||||
).setText("Skeletons you control"));
|
));
|
||||||
ability.addEffect(new GainAbilityControlledEffect(
|
ability.addEffect(new GainAbilityControlledEffect(
|
||||||
DeathtouchAbility.getInstance(), Duration.WhileOnBattlefield, filterSkeletons, false
|
DeathtouchAbility.getInstance(), Duration.WhileOnBattlefield, filter, true
|
||||||
).setText("and other Zombies you control"));
|
|
||||||
ability.addEffect(new BoostControlledEffect(
|
|
||||||
1, 1, Duration.WhileOnBattlefield, filterZombie, true
|
|
||||||
).setText("get +1/+1"));
|
|
||||||
ability.addEffect(new GainAbilityControlledEffect(
|
|
||||||
DeathtouchAbility.getInstance(), Duration.WhileOnBattlefield, filterZombie, true
|
|
||||||
).setText("and have deathtouch"));
|
).setText("and have deathtouch"));
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
}
|
}
|
||||||
|
@ -63,3 +58,16 @@ public final class DeathBaron extends CardImpl {
|
||||||
return new DeathBaron(this);
|
return new DeathBaron(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum DeathBaronPredicate implements ObjectSourcePlayerPredicate<MageObject> {
|
||||||
|
instance;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean apply(ObjectSourcePlayer<MageObject> input, Game game) {
|
||||||
|
if (input.getObject().hasSubtype(SubType.SKELETON, game)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return !input.getObject().getId().equals(input.getSourceId())
|
||||||
|
&& input.getObject().hasSubtype(SubType.ZOMBIE, game);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -15,7 +15,6 @@ import mage.constants.Zone;
|
||||||
import mage.filter.common.FilterCreaturePermanent;
|
import mage.filter.common.FilterCreaturePermanent;
|
||||||
import mage.game.Game;
|
import mage.game.Game;
|
||||||
import mage.game.events.GameEvent;
|
import mage.game.events.GameEvent;
|
||||||
import mage.game.events.GameEvent.EventType;
|
|
||||||
import mage.game.events.ZoneChangeEvent;
|
import mage.game.events.ZoneChangeEvent;
|
||||||
import mage.game.permanent.Permanent;
|
import mage.game.permanent.Permanent;
|
||||||
import mage.target.common.TargetOpponent;
|
import mage.target.common.TargetOpponent;
|
||||||
|
@ -27,11 +26,8 @@ import java.util.UUID;
|
||||||
*/
|
*/
|
||||||
public final class DiregrafCaptain extends CardImpl {
|
public final class DiregrafCaptain extends CardImpl {
|
||||||
|
|
||||||
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Zombie");
|
private static final FilterCreaturePermanent filter
|
||||||
|
= new FilterCreaturePermanent(SubType.ZOMBIE, "Zombie creatures");
|
||||||
static {
|
|
||||||
filter.add(SubType.ZOMBIE.getPredicate());
|
|
||||||
}
|
|
||||||
|
|
||||||
public DiregrafCaptain(UUID ownerId, CardSetInfo setInfo) {
|
public DiregrafCaptain(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}{B}");
|
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}{B}");
|
||||||
|
|
|
@ -27,7 +27,7 @@ import mage.target.common.TargetCreaturePermanent;
|
||||||
*/
|
*/
|
||||||
public final class EaterOfHope extends CardImpl {
|
public final class EaterOfHope extends CardImpl {
|
||||||
|
|
||||||
private static final FilterControlledCreaturePermanent destroyFilter = new FilterControlledCreaturePermanent("two other creatures");
|
private static final FilterControlledCreaturePermanent destroyFilter = new FilterControlledCreaturePermanent("other creatures");
|
||||||
|
|
||||||
static {
|
static {
|
||||||
destroyFilter.add(AnotherPredicate.instance);
|
destroyFilter.add(AnotherPredicate.instance);
|
||||||
|
|
|
@ -58,7 +58,7 @@ class GisaAndGeralfCastFromGraveyardEffect extends AsThoughEffectImpl {
|
||||||
|
|
||||||
GisaAndGeralfCastFromGraveyardEffect() {
|
GisaAndGeralfCastFromGraveyardEffect() {
|
||||||
super(AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, Duration.WhileOnBattlefield, Outcome.PutCreatureInPlay, true);
|
super(AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, Duration.WhileOnBattlefield, Outcome.PutCreatureInPlay, true);
|
||||||
staticText = "During each of your turns, you may cast a Zombie creature card from your graveyard";
|
staticText = "During each of your turns, you may cast a Zombie creature spell from your graveyard";
|
||||||
}
|
}
|
||||||
|
|
||||||
GisaAndGeralfCastFromGraveyardEffect(final GisaAndGeralfCastFromGraveyardEffect effect) {
|
GisaAndGeralfCastFromGraveyardEffect(final GisaAndGeralfCastFromGraveyardEffect effect) {
|
||||||
|
|
|
@ -48,7 +48,7 @@ public final class HavengulRunebinder extends CardImpl {
|
||||||
new ManaCostsImpl("{2}{U}"));
|
new ManaCostsImpl("{2}{U}"));
|
||||||
ability.addCost(new TapSourceCost());
|
ability.addCost(new TapSourceCost());
|
||||||
ability.addCost(new ExileFromGraveCost(new TargetCardInYourGraveyard(filter)));
|
ability.addCost(new ExileFromGraveCost(new TargetCardInYourGraveyard(filter)));
|
||||||
ability.addEffect(new AddCountersAllEffect(CounterType.P1P1.createInstance(), filterPermanent));
|
ability.addEffect(new AddCountersAllEffect(CounterType.P1P1.createInstance(), filterPermanent).concatBy(", then"));
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -33,7 +33,7 @@ public final class HeraldOfWar extends CardImpl {
|
||||||
this.addAbility(FlyingAbility.getInstance());
|
this.addAbility(FlyingAbility.getInstance());
|
||||||
|
|
||||||
// Whenever Herald of War attacks, put a +1/+1 counter on it.
|
// Whenever Herald of War attacks, put a +1/+1 counter on it.
|
||||||
this.addAbility(new AttacksTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), false));
|
this.addAbility(new AttacksTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()).setText("put a +1/+1 counter on it"), false));
|
||||||
|
|
||||||
// Angel spells and Human spells you cast cost {1} less to cast for each +1/+1 counter on Herald of War.
|
// Angel spells and Human spells you cast cost {1} less to cast for each +1/+1 counter on Herald of War.
|
||||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new HeraldOfWarCostReductionEffect()));
|
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new HeraldOfWarCostReductionEffect()));
|
||||||
|
|
|
@ -1,13 +1,14 @@
|
||||||
package mage.cards.h;
|
package mage.cards.h;
|
||||||
|
|
||||||
import mage.MageInt;
|
import mage.MageInt;
|
||||||
|
import mage.Mana;
|
||||||
import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
|
import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
|
||||||
import mage.abilities.costs.common.TapSourceCost;
|
import mage.abilities.costs.common.TapSourceCost;
|
||||||
import mage.abilities.dynamicvalue.DynamicValue;
|
import mage.abilities.dynamicvalue.DynamicValue;
|
||||||
import mage.abilities.dynamicvalue.common.SourcePermanentPowerCount;
|
import mage.abilities.dynamicvalue.common.SourcePermanentPowerCount;
|
||||||
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
|
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
|
||||||
import mage.abilities.keyword.VigilanceAbility;
|
import mage.abilities.keyword.VigilanceAbility;
|
||||||
import mage.abilities.mana.AnyColorManaAbility;
|
import mage.abilities.mana.DynamicManaAbility;
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
|
@ -43,7 +44,10 @@ public final class HeronbladeElite extends CardImpl {
|
||||||
));
|
));
|
||||||
|
|
||||||
// {T}: Add X mana of any one color, where X is Heronblade Elite's power.
|
// {T}: Add X mana of any one color, where X is Heronblade Elite's power.
|
||||||
this.addAbility(new AnyColorManaAbility(new TapSourceCost(), xValue, false));
|
this.addAbility(new DynamicManaAbility(
|
||||||
|
Mana.AnyMana(1), xValue, new TapSourceCost(), "Add X mana " +
|
||||||
|
"of any one color, where X is {this}'s power", true
|
||||||
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
private HeronbladeElite(final HeronbladeElite card) {
|
private HeronbladeElite(final HeronbladeElite card) {
|
||||||
|
|
|
@ -44,7 +44,7 @@ public final class HeronsGraceChampion extends CardImpl {
|
||||||
|
|
||||||
// When Heron's Grace Champion enters the battlefield, other Humans you control get +1/+1 and gain lifelink until end of turn.
|
// When Heron's Grace Champion enters the battlefield, other Humans you control get +1/+1 and gain lifelink until end of turn.
|
||||||
Effect effect = new BoostControlledEffect(1, 1, Duration.EndOfTurn, filter, true);
|
Effect effect = new BoostControlledEffect(1, 1, Duration.EndOfTurn, filter, true);
|
||||||
effect.setText("other Humans you control gets +1/+1");
|
effect.setText("other Humans you control get +1/+1");
|
||||||
Ability ability = new EntersBattlefieldTriggeredAbility(effect);
|
Ability ability = new EntersBattlefieldTriggeredAbility(effect);
|
||||||
effect = new GainAbilityControlledEffect(LifelinkAbility.getInstance(), Duration.EndOfTurn, filter, true);
|
effect = new GainAbilityControlledEffect(LifelinkAbility.getInstance(), Duration.EndOfTurn, filter, true);
|
||||||
effect.setText("and gain lifelink until end of turn");
|
effect.setText("and gain lifelink until end of turn");
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
|
|
||||||
package mage.cards.j;
|
package mage.cards.j;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.MageInt;
|
import mage.MageInt;
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
|
import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
|
||||||
|
@ -10,26 +8,29 @@ import mage.abilities.effects.common.counter.AddCountersTargetEffect;
|
||||||
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.SetTargetPointer;
|
import mage.constants.SetTargetPointer;
|
||||||
|
import mage.constants.SubType;
|
||||||
import mage.constants.Zone;
|
import mage.constants.Zone;
|
||||||
import mage.counters.CounterType;
|
import mage.counters.CounterType;
|
||||||
|
import mage.filter.StaticFilters;
|
||||||
import mage.filter.common.FilterCreaturePermanent;
|
import mage.filter.common.FilterCreaturePermanent;
|
||||||
import mage.filter.predicate.mageobject.AnotherPredicate;
|
import mage.filter.predicate.mageobject.AnotherPredicate;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author emerald000
|
* @author emerald000
|
||||||
*/
|
*/
|
||||||
public final class JuniperOrderRanger extends CardImpl {
|
public final class JuniperOrderRanger extends CardImpl {
|
||||||
|
|
||||||
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("another creature");
|
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("another creature");
|
||||||
|
|
||||||
static {
|
static {
|
||||||
filter.add(AnotherPredicate.instance);
|
filter.add(AnotherPredicate.instance);
|
||||||
}
|
}
|
||||||
|
|
||||||
public JuniperOrderRanger(UUID ownerId, CardSetInfo setInfo) {
|
public JuniperOrderRanger(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{G}{W}");
|
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{G}{W}");
|
||||||
this.subtype.add(SubType.HUMAN);
|
this.subtype.add(SubType.HUMAN);
|
||||||
this.subtype.add(SubType.KNIGHT);
|
this.subtype.add(SubType.KNIGHT);
|
||||||
this.subtype.add(SubType.RANGER);
|
this.subtype.add(SubType.RANGER);
|
||||||
|
@ -38,12 +39,11 @@ public final class JuniperOrderRanger extends CardImpl {
|
||||||
|
|
||||||
// Whenever another creature enters the battlefield under your control, put a +1/+1 counter on that creature and a +1/+1 counter on Juniper Order Ranger.
|
// Whenever another creature enters the battlefield under your control, put a +1/+1 counter on that creature and a +1/+1 counter on Juniper Order Ranger.
|
||||||
Ability ability = new EntersBattlefieldControlledTriggeredAbility(
|
Ability ability = new EntersBattlefieldControlledTriggeredAbility(
|
||||||
Zone.BATTLEFIELD,
|
Zone.BATTLEFIELD, new AddCountersTargetEffect(CounterType.P1P1.createInstance()),
|
||||||
new AddCountersTargetEffect(CounterType.P1P1.createInstance()),
|
StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE, false,
|
||||||
filter,
|
SetTargetPointer.PERMANENT, "Whenever another creature enters the battlefield " +
|
||||||
false,
|
"under your control, put a +1/+1 counter on that creature and a +1/+1 counter on {this}."
|
||||||
SetTargetPointer.PERMANENT,
|
);
|
||||||
"Whenever another creature enters the battlefield under your control, put a +1/+1 counter on that creature and a +1/+1 counter on Juniper Order Ranger");
|
|
||||||
ability.addEffect(new AddCountersSourceEffect(CounterType.P1P1.createInstance()));
|
ability.addEffect(new AddCountersSourceEffect(CounterType.P1P1.createInstance()));
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
}
|
}
|
||||||
|
|
|
@ -47,7 +47,7 @@ class KessigCagebreakersEffect extends OneShotEffect {
|
||||||
|
|
||||||
public KessigCagebreakersEffect() {
|
public KessigCagebreakersEffect() {
|
||||||
super(Outcome.PutCreatureInPlay);
|
super(Outcome.PutCreatureInPlay);
|
||||||
this.staticText = "create a 2/2 green Wolf creature token tapped and attacking for each creature card in your graveyard";
|
this.staticText = "create a 2/2 green Wolf creature token that's tapped and attacking for each creature card in your graveyard";
|
||||||
}
|
}
|
||||||
|
|
||||||
public KessigCagebreakersEffect(final KessigCagebreakersEffect effect) {
|
public KessigCagebreakersEffect(final KessigCagebreakersEffect effect) {
|
||||||
|
|
|
@ -21,7 +21,7 @@ import mage.game.permanent.token.ZombieToken;
|
||||||
*/
|
*/
|
||||||
public final class LilianasMastery extends CardImpl {
|
public final class LilianasMastery extends CardImpl {
|
||||||
|
|
||||||
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Zombie creatures");
|
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Zombies");
|
||||||
|
|
||||||
static {
|
static {
|
||||||
filter.add(SubType.ZOMBIE.getPredicate());
|
filter.add(SubType.ZOMBIE.getPredicate());
|
||||||
|
|
|
@ -25,7 +25,7 @@ import mage.filter.common.FilterCreaturePermanent;
|
||||||
*/
|
*/
|
||||||
public final class LordOfTheAccursed extends CardImpl {
|
public final class LordOfTheAccursed extends CardImpl {
|
||||||
|
|
||||||
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent(SubType.ZOMBIE, "Zombie creatures");
|
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent(SubType.ZOMBIE, "Zombies");
|
||||||
|
|
||||||
public LordOfTheAccursed(UUID ownerId, CardSetInfo setInfo) {
|
public LordOfTheAccursed(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{B}");
|
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{B}");
|
||||||
|
@ -41,7 +41,7 @@ public final class LordOfTheAccursed extends CardImpl {
|
||||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new GainAbilityAllEffect(
|
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new GainAbilityAllEffect(
|
||||||
new MenaceAbility(),
|
new MenaceAbility(),
|
||||||
Duration.EndOfTurn,
|
Duration.EndOfTurn,
|
||||||
filter, "All Zombies gains menace until end of turn."),
|
filter, "All Zombies gain menace until end of turn."),
|
||||||
new ManaCostsImpl("{1}{B}"));
|
new ManaCostsImpl("{1}{B}"));
|
||||||
ability.addCost(new TapSourceCost());
|
ability.addCost(new TapSourceCost());
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
|
|
|
@ -21,7 +21,7 @@ import mage.filter.predicate.permanent.TokenPredicate;
|
||||||
public final class MidnightReaper extends CardImpl {
|
public final class MidnightReaper extends CardImpl {
|
||||||
|
|
||||||
private static final FilterCreaturePermanent filter
|
private static final FilterCreaturePermanent filter
|
||||||
= new FilterCreaturePermanent("nontoken creature you control");
|
= new FilterCreaturePermanent("a nontoken creature you control");
|
||||||
|
|
||||||
static {
|
static {
|
||||||
filter.add(TargetController.YOU.getControllerPredicate());
|
filter.add(TargetController.YOU.getControllerPredicate());
|
||||||
|
|
|
@ -17,7 +17,7 @@ import mage.game.permanent.token.ZombieToken;
|
||||||
*/
|
*/
|
||||||
public final class OpenTheGraves extends CardImpl {
|
public final class OpenTheGraves extends CardImpl {
|
||||||
|
|
||||||
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("nontoken creature you control");
|
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("a nontoken creature you control");
|
||||||
|
|
||||||
static {
|
static {
|
||||||
filter.add(TargetController.YOU.getControllerPredicate());
|
filter.add(TargetController.YOU.getControllerPredicate());
|
||||||
|
|
|
@ -26,7 +26,7 @@ import mage.target.common.TargetCreaturePermanent;
|
||||||
*/
|
*/
|
||||||
public final class OverseerOfTheDamned extends CardImpl {
|
public final class OverseerOfTheDamned extends CardImpl {
|
||||||
|
|
||||||
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("nontoken creature an opponent controls");
|
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("a nontoken creature an opponent controls");
|
||||||
|
|
||||||
static {
|
static {
|
||||||
filter.add(TargetController.OPPONENT.getControllerPredicate());
|
filter.add(TargetController.OPPONENT.getControllerPredicate());
|
||||||
|
|
|
@ -27,7 +27,7 @@ import mage.target.common.TargetCardInYourGraveyard;
|
||||||
*/
|
*/
|
||||||
public final class SigardaHeronsGrace extends CardImpl {
|
public final class SigardaHeronsGrace extends CardImpl {
|
||||||
|
|
||||||
private static final FilterControlledPermanent filter = new FilterControlledPermanent("Humans you control");
|
private static final FilterControlledPermanent filter = new FilterControlledPermanent("Humans");
|
||||||
|
|
||||||
static {
|
static {
|
||||||
filter.add(SubType.HUMAN.getPredicate());
|
filter.add(SubType.HUMAN.getPredicate());
|
||||||
|
@ -45,10 +45,10 @@ public final class SigardaHeronsGrace extends CardImpl {
|
||||||
|
|
||||||
// You and Humans you control have hexproof.
|
// You and Humans you control have hexproof.
|
||||||
Effect effect = new GainAbilityControllerEffect(HexproofAbility.getInstance(), Duration.WhileOnBattlefield);
|
Effect effect = new GainAbilityControllerEffect(HexproofAbility.getInstance(), Duration.WhileOnBattlefield);
|
||||||
effect.setText("You and");
|
effect.setText("You");
|
||||||
Ability ability =new SimpleStaticAbility(Zone.BATTLEFIELD, effect);
|
Ability ability =new SimpleStaticAbility(Zone.BATTLEFIELD, effect);
|
||||||
effect = new GainAbilityControlledEffect(HexproofAbility.getInstance(), Duration.WhileOnBattlefield, filter);
|
effect = new GainAbilityControlledEffect(HexproofAbility.getInstance(), Duration.WhileOnBattlefield, filter);
|
||||||
effect.setText("and Humans you control have hexproof");
|
effect.concatBy("and");
|
||||||
ability.addEffect(effect);
|
ability.addEffect(effect);
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
|
|
||||||
|
|
|
@ -70,7 +70,7 @@ public final class TombTyrant extends CardImpl {
|
||||||
new ManaCostsImpl<>("{2}{B}"), condition
|
new ManaCostsImpl<>("{2}{B}"), condition
|
||||||
);
|
);
|
||||||
ability.addCost(new TapSourceCost());
|
ability.addCost(new TapSourceCost());
|
||||||
ability.addCost(new SacrificeTargetCost(StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE));
|
ability.addCost(new SacrificeTargetCost(StaticFilters.FILTER_CONTROLLED_CREATURE_SHORT_TEXT));
|
||||||
this.addAbility(ability.addHint(MyTurnHint.instance).addHint(hint));
|
this.addAbility(ability.addHint(MyTurnHint.instance).addHint(hint));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -30,8 +30,8 @@ public final class TrostanisSummoner extends CardImpl {
|
||||||
|
|
||||||
// When Trostani's Summoner enters the battlefield, create a 2/2 white Knight creature token with vigilance, a 3/3 green Centaur creature token, and a 4/4 green Rhino creature token with trample.
|
// When Trostani's Summoner enters the battlefield, create a 2/2 white Knight creature token with vigilance, a 3/3 green Centaur creature token, and a 4/4 green Rhino creature token with trample.
|
||||||
Ability ability = new EntersBattlefieldTriggeredAbility(new CreateTokenEffect(new KnightToken()));
|
Ability ability = new EntersBattlefieldTriggeredAbility(new CreateTokenEffect(new KnightToken()));
|
||||||
ability.addEffect(new CreateTokenEffect(new CentaurToken()));
|
ability.addEffect(new CreateTokenEffect(new CentaurToken()).setText(", a 3/3 green Centaur creature token"));
|
||||||
ability.addEffect(new CreateTokenEffect(new RhinoToken()));
|
ability.addEffect(new CreateTokenEffect(new RhinoToken()).setText(", and a 4/4 green Rhino creature token with trample"));
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,7 +29,7 @@ public final class UnbreakableFormation extends CardImpl {
|
||||||
// Creatures you control gain indestructible until end of turn.
|
// Creatures you control gain indestructible until end of turn.
|
||||||
this.getSpellAbility().addEffect(new GainAbilityControlledEffect(
|
this.getSpellAbility().addEffect(new GainAbilityControlledEffect(
|
||||||
IndestructibleAbility.getInstance(), Duration.EndOfTurn,
|
IndestructibleAbility.getInstance(), Duration.EndOfTurn,
|
||||||
StaticFilters.FILTER_PERMANENT_CREATURE
|
StaticFilters.FILTER_PERMANENT_CREATURES
|
||||||
));
|
));
|
||||||
|
|
||||||
// Addendum — If you cast this spell during your main phase, put a +1/+1 counter on each of those creatures, and they also gain vigilance until end of turn.
|
// Addendum — If you cast this spell during your main phase, put a +1/+1 counter on each of those creatures, and they also gain vigilance until end of turn.
|
||||||
|
|
|
@ -29,7 +29,7 @@ import java.util.UUID;
|
||||||
public final class WilheltTheRotcleaver extends CardImpl {
|
public final class WilheltTheRotcleaver extends CardImpl {
|
||||||
|
|
||||||
private static final FilterPermanent filter
|
private static final FilterPermanent filter
|
||||||
= new FilterControlledPermanent(SubType.ZOMBIE);
|
= new FilterControlledPermanent(SubType.ZOMBIE, "another Zombie you control");
|
||||||
private static final FilterControlledPermanent filter2
|
private static final FilterControlledPermanent filter2
|
||||||
= new FilterControlledPermanent(SubType.ZOMBIE, "a Zombie");
|
= new FilterControlledPermanent(SubType.ZOMBIE, "a Zombie");
|
||||||
|
|
||||||
|
@ -49,7 +49,7 @@ public final class WilheltTheRotcleaver extends CardImpl {
|
||||||
// Whenever another Zombie you control dies, if it didn't have decayed, create a 2/2 black Zombie creature token with decayed.
|
// Whenever another Zombie you control dies, if it didn't have decayed, create a 2/2 black Zombie creature token with decayed.
|
||||||
this.addAbility(new DiesCreatureTriggeredAbility(
|
this.addAbility(new DiesCreatureTriggeredAbility(
|
||||||
new CreateTokenEffect(new ZombieDecayedToken())
|
new CreateTokenEffect(new ZombieDecayedToken())
|
||||||
.concatBy(", if it didn't have decayed, "),
|
.setText("if it didn't have decayed, create a 2/2 black Zombie creature token with decayed"),
|
||||||
false, filter
|
false, filter
|
||||||
));
|
));
|
||||||
|
|
||||||
|
|
|
@ -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 = "MID"; // check all abilities and output cards with wrong abilities texts;
|
private static final String FULL_ABILITIES_CHECK_SET_CODE = "MIC"; // 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
|
||||||
|
|
||||||
|
|
|
@ -115,7 +115,7 @@ public class BeginningOfEndStepTriggeredAbility extends TriggeredAbilityImpl {
|
||||||
case CONTROLLER_ATTACHED_TO:
|
case CONTROLLER_ATTACHED_TO:
|
||||||
return "At the beginning of the end step of enchanted permanent's controller, " + generateConditionString();
|
return "At the beginning of the end step of enchanted permanent's controller, " + generateConditionString();
|
||||||
case ENCHANTED:
|
case ENCHANTED:
|
||||||
return "At the beginning of enchanted player's draw step, " + generateConditionString();
|
return "At the beginning of enchanted player's end step, " + generateConditionString();
|
||||||
}
|
}
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
|
@ -164,7 +164,7 @@ public class FlashbackAbility extends SpellAbility {
|
||||||
sbRule.append('.');
|
sbRule.append('.');
|
||||||
}
|
}
|
||||||
if (abilityName != null) {
|
if (abilityName != null) {
|
||||||
sbRule.append(' ');
|
sbRule.append(". ");
|
||||||
sbRule.append(abilityName);
|
sbRule.append(abilityName);
|
||||||
}
|
}
|
||||||
sbRule.append(" <i>(You may cast this card from your graveyard for its flashback cost. Then exile it.)</i>");
|
sbRule.append(" <i>(You may cast this card from your graveyard for its flashback cost. Then exile it.)</i>");
|
||||||
|
|
Loading…
Reference in a new issue