mirror of
https://github.com/magefree/mage.git
synced 2025-12-20 10:40:06 -08:00
[FIC] various text fixes
This commit is contained in:
parent
9ef2aac469
commit
1051ccbe9d
24 changed files with 92 additions and 79 deletions
|
|
@ -54,7 +54,7 @@ class AlteredEgoCopyApplier extends CopyApplier {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getText() {
|
public String getText() {
|
||||||
return ", except it enters with an additional X +1/+1 counters on it";
|
return ", except it enters with X additional +1/+1 counters on it";
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,11 @@
|
||||||
|
|
||||||
package mage.cards.a;
|
package mage.cards.a;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.MageInt;
|
import mage.MageInt;
|
||||||
import mage.abilities.common.SimpleStaticAbility;
|
import mage.abilities.common.SimpleStaticAbility;
|
||||||
|
import mage.abilities.condition.Condition;
|
||||||
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
|
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
|
||||||
import mage.abilities.decorator.ConditionalContinuousEffect;
|
import mage.abilities.decorator.ConditionalContinuousEffect;
|
||||||
import mage.abilities.effects.ContinuousEffect;
|
|
||||||
import mage.abilities.effects.common.continuous.GainAbilityControlledEffect;
|
import mage.abilities.effects.common.continuous.GainAbilityControlledEffect;
|
||||||
import mage.abilities.keyword.HasteAbility;
|
import mage.abilities.keyword.HasteAbility;
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
|
|
@ -15,26 +14,20 @@ import mage.constants.CardType;
|
||||||
import mage.constants.Duration;
|
import mage.constants.Duration;
|
||||||
import mage.constants.SubType;
|
import mage.constants.SubType;
|
||||||
import mage.constants.Zone;
|
import mage.constants.Zone;
|
||||||
|
import mage.filter.StaticFilters;
|
||||||
import mage.filter.common.FilterControlledPermanent;
|
import mage.filter.common.FilterControlledPermanent;
|
||||||
import mage.filter.common.FilterCreaturePermanent;
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author Backfir3
|
* @author Backfir3
|
||||||
*/
|
*/
|
||||||
public final class Anger extends CardImpl {
|
public final class Anger extends CardImpl {
|
||||||
|
|
||||||
private static final String ruleText = "As long as Anger is in your graveyard and you control a Mountain, creatures you control have haste";
|
private static final Condition condition = new PermanentsOnTheBattlefieldCondition(new FilterControlledPermanent(SubType.MOUNTAIN));
|
||||||
|
|
||||||
private static final FilterControlledPermanent filter = new FilterControlledPermanent("Mountain");
|
|
||||||
|
|
||||||
static {
|
|
||||||
filter.add(CardType.LAND.getPredicate());
|
|
||||||
filter.add(SubType.MOUNTAIN.getPredicate());
|
|
||||||
}
|
|
||||||
|
|
||||||
public Anger(UUID ownerId, CardSetInfo setInfo) {
|
public Anger(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{R}");
|
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{R}");
|
||||||
this.subtype.add(SubType.INCARNATION);
|
this.subtype.add(SubType.INCARNATION);
|
||||||
|
|
||||||
this.power = new MageInt(2);
|
this.power = new MageInt(2);
|
||||||
|
|
@ -44,11 +37,16 @@ public final class Anger extends CardImpl {
|
||||||
this.addAbility(HasteAbility.getInstance());
|
this.addAbility(HasteAbility.getInstance());
|
||||||
|
|
||||||
// As long as Anger is in your graveyard and you control a Mountain, creatures you control have haste
|
// As long as Anger is in your graveyard and you control a Mountain, creatures you control have haste
|
||||||
ContinuousEffect effect = new GainAbilityControlledEffect(HasteAbility.getInstance(),
|
this.addAbility(new SimpleStaticAbility(
|
||||||
Duration.WhileOnBattlefield, new FilterCreaturePermanent());
|
Zone.GRAVEYARD,
|
||||||
ConditionalContinuousEffect angerEffect = new ConditionalContinuousEffect(effect,
|
new ConditionalContinuousEffect(
|
||||||
new PermanentsOnTheBattlefieldCondition(filter), ruleText);
|
new GainAbilityControlledEffect(
|
||||||
this.addAbility(new SimpleStaticAbility(Zone.GRAVEYARD, angerEffect));
|
HasteAbility.getInstance(), Duration.WhileOnBattlefield,
|
||||||
|
StaticFilters.FILTER_PERMANENT_CREATURE
|
||||||
|
), condition, "as long as this card is in your graveyard " +
|
||||||
|
"and you control a Mountain, creatures you control have haste"
|
||||||
|
)
|
||||||
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
private Anger(final Anger card) {
|
private Anger(final Anger card) {
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,6 @@ import mage.abilities.Ability;
|
||||||
import mage.abilities.common.EntersBattlefieldAllTriggeredAbility;
|
import mage.abilities.common.EntersBattlefieldAllTriggeredAbility;
|
||||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||||
import mage.abilities.condition.Condition;
|
import mage.abilities.condition.Condition;
|
||||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
|
||||||
import mage.abilities.effects.common.PutCardFromHandOntoBattlefieldEffect;
|
import mage.abilities.effects.common.PutCardFromHandOntoBattlefieldEffect;
|
||||||
import mage.abilities.effects.common.search.SearchLibraryPutInHandEffect;
|
import mage.abilities.effects.common.search.SearchLibraryPutInHandEffect;
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
|
|
@ -28,7 +27,7 @@ import java.util.UUID;
|
||||||
public final class ArchaeomancersMap extends CardImpl {
|
public final class ArchaeomancersMap extends CardImpl {
|
||||||
|
|
||||||
private static final FilterCard filter = new FilterCard("basic Plains cards");
|
private static final FilterCard filter = new FilterCard("basic Plains cards");
|
||||||
private static final FilterPermanent filter2 = new FilterLandPermanent();
|
private static final FilterPermanent filter2 = new FilterLandPermanent("a land an opponent controls");
|
||||||
|
|
||||||
static {
|
static {
|
||||||
filter.add(SubType.PLAINS.getPredicate());
|
filter.add(SubType.PLAINS.getPredicate());
|
||||||
|
|
@ -45,13 +44,9 @@ public final class ArchaeomancersMap extends CardImpl {
|
||||||
));
|
));
|
||||||
|
|
||||||
// Whenever a land enters the battlefield under an opponent's control, if that player controls more lands than you, you may put a land card from your hand onto the battlefield.
|
// Whenever a land enters the battlefield under an opponent's control, if that player controls more lands than you, you may put a land card from your hand onto the battlefield.
|
||||||
this.addAbility(new ConditionalInterveningIfTriggeredAbility(
|
this.addAbility(new EntersBattlefieldAllTriggeredAbility(
|
||||||
new EntersBattlefieldAllTriggeredAbility(
|
|
||||||
new PutCardFromHandOntoBattlefieldEffect(StaticFilters.FILTER_CARD_LAND_A), filter2
|
new PutCardFromHandOntoBattlefieldEffect(StaticFilters.FILTER_CARD_LAND_A), filter2
|
||||||
), ArchaeomancersMapCondition.instance, "Whenever a land enters the battlefield " +
|
).withInterveningIf(ArchaeomancersMapCondition.instance));
|
||||||
"under an opponent's control, if that player controls more lands than you, " +
|
|
||||||
"you may put a land card from your hand onto the battlefield."
|
|
||||||
));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private ArchaeomancersMap(final ArchaeomancersMap card) {
|
private ArchaeomancersMap(final ArchaeomancersMap card) {
|
||||||
|
|
@ -78,4 +73,9 @@ enum ArchaeomancersMapCondition implements Condition {
|
||||||
source.getControllerId(), source, game
|
source.getControllerId(), source, game
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "that player controls more lands than you";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,6 @@
|
||||||
package mage.cards.b;
|
package mage.cards.b;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
import mage.ApprovingObject;
|
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.SpellAbility;
|
|
||||||
import mage.abilities.common.AttacksTriggeredAbility;
|
import mage.abilities.common.AttacksTriggeredAbility;
|
||||||
import mage.abilities.common.SimpleStaticAbility;
|
import mage.abilities.common.SimpleStaticAbility;
|
||||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||||
|
|
@ -13,11 +9,11 @@ import mage.abilities.effects.common.continuous.AddCardSubtypeAttachedEffect;
|
||||||
import mage.abilities.effects.common.continuous.BoostEquippedEffect;
|
import mage.abilities.effects.common.continuous.BoostEquippedEffect;
|
||||||
import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect;
|
import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect;
|
||||||
import mage.abilities.keyword.EquipAbility;
|
import mage.abilities.keyword.EquipAbility;
|
||||||
import mage.cards.Card;
|
|
||||||
import mage.constants.*;
|
|
||||||
import mage.abilities.keyword.JobSelectAbility;
|
import mage.abilities.keyword.JobSelectAbility;
|
||||||
|
import mage.cards.Card;
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.constants.*;
|
||||||
import mage.filter.common.FilterInstantOrSorceryCard;
|
import mage.filter.common.FilterInstantOrSorceryCard;
|
||||||
import mage.filter.predicate.card.DefendingPlayerOwnsCardPredicate;
|
import mage.filter.predicate.card.DefendingPlayerOwnsCardPredicate;
|
||||||
import mage.game.Game;
|
import mage.game.Game;
|
||||||
|
|
@ -25,6 +21,8 @@ import mage.players.Player;
|
||||||
import mage.target.common.TargetCardInGraveyard;
|
import mage.target.common.TargetCardInGraveyard;
|
||||||
import mage.util.CardUtil;
|
import mage.util.CardUtil;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author balazskristof
|
* @author balazskristof
|
||||||
*/
|
*/
|
||||||
|
|
@ -54,7 +52,7 @@ public final class BlueMagesCane extends CardImpl {
|
||||||
Ability attackAbility = new AttacksTriggeredAbility(new BlueMagesCaneEffect());
|
Ability attackAbility = new AttacksTriggeredAbility(new BlueMagesCaneEffect());
|
||||||
attackAbility.addTarget(new TargetCardInGraveyard(0, 1, filter));
|
attackAbility.addTarget(new TargetCardInGraveyard(0, 1, filter));
|
||||||
ability.addEffect(new GainAbilityAttachedEffect(attackAbility, AttachmentType.EQUIPMENT)
|
ability.addEffect(new GainAbilityAttachedEffect(attackAbility, AttachmentType.EQUIPMENT)
|
||||||
.setText("and has \"Whenever this creature attacks, exile up to one target instant or sorcery card from defending player's graveyard. "
|
.setText(", and has \"Whenever this creature attacks, exile up to one target instant or sorcery card from defending player's graveyard. "
|
||||||
+ "If you do, copy it. You may cast the copy by paying {3} rather than paying its mana cost.\"")
|
+ "If you do, copy it. You may cast the copy by paying {3} rather than paying its mana cost.\"")
|
||||||
);
|
);
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
|
|
|
||||||
|
|
@ -87,7 +87,7 @@ class CloudExSOLDIEREntersEffect extends OneShotEffect {
|
||||||
|
|
||||||
CloudExSOLDIEREntersEffect() {
|
CloudExSOLDIEREntersEffect() {
|
||||||
super(Outcome.Benefit);
|
super(Outcome.Benefit);
|
||||||
staticText = "attach up to one target Equipment you control to {this}";
|
staticText = "attach up to one target Equipment you control to it";
|
||||||
}
|
}
|
||||||
|
|
||||||
private CloudExSOLDIEREntersEffect(final CloudExSOLDIEREntersEffect effect) {
|
private CloudExSOLDIEREntersEffect(final CloudExSOLDIEREntersEffect effect) {
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,11 @@
|
||||||
package mage.cards.c;
|
package mage.cards.c;
|
||||||
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||||
import mage.abilities.common.SimpleActivatedAbility;
|
import mage.abilities.common.SimpleActivatedAbility;
|
||||||
import mage.abilities.costs.common.ExileFromGraveCost;
|
import mage.abilities.costs.common.ExileFromGraveCost;
|
||||||
import mage.abilities.costs.common.SacrificeSourceCost;
|
import mage.abilities.costs.common.SacrificeSourceCost;
|
||||||
|
import mage.abilities.costs.common.TapSourceCost;
|
||||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||||
import mage.abilities.effects.OneShotEffect;
|
import mage.abilities.effects.OneShotEffect;
|
||||||
import mage.abilities.effects.common.BecomesMonarchSourceEffect;
|
import mage.abilities.effects.common.BecomesMonarchSourceEffect;
|
||||||
|
|
@ -24,6 +22,9 @@ import mage.target.TargetCard;
|
||||||
import mage.target.common.TargetCardInYourGraveyard;
|
import mage.target.common.TargetCardInYourGraveyard;
|
||||||
import mage.target.common.TargetOpponent;
|
import mage.target.common.TargetOpponent;
|
||||||
|
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author balazskristof
|
* @author balazskristof
|
||||||
*/
|
*/
|
||||||
|
|
@ -37,9 +38,10 @@ public final class CoinOfFate extends CardImpl {
|
||||||
|
|
||||||
// {3}{W},{T}, Exile two creature cards from your graveyard, Sacrifice this artifact: An opponent chooses one of the exiled cards. You put that card on the bottom of your library and return the other to the battlefield tapped. You become the monarch.
|
// {3}{W},{T}, Exile two creature cards from your graveyard, Sacrifice this artifact: An opponent chooses one of the exiled cards. You put that card on the bottom of your library and return the other to the battlefield tapped. You become the monarch.
|
||||||
Ability ability = new SimpleActivatedAbility(new CoinOfFateEffect(), new ManaCostsImpl<>("{3}{W}")).addHint(MonarchHint.instance);
|
Ability ability = new SimpleActivatedAbility(new CoinOfFateEffect(), new ManaCostsImpl<>("{3}{W}")).addHint(MonarchHint.instance);
|
||||||
ability.addEffect(new BecomesMonarchSourceEffect());
|
ability.addCost(new TapSourceCost());
|
||||||
ability.addCost(new ExileFromGraveCost(new TargetCardInYourGraveyard(2, StaticFilters.FILTER_CARD_CREATURES), true));
|
ability.addCost(new ExileFromGraveCost(new TargetCardInYourGraveyard(2, StaticFilters.FILTER_CARD_CREATURES), true));
|
||||||
ability.addCost(new SacrificeSourceCost());
|
ability.addCost(new SacrificeSourceCost());
|
||||||
|
ability.addEffect(new BecomesMonarchSourceEffect());
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,10 +2,12 @@ package mage.cards.e;
|
||||||
|
|
||||||
import mage.MageIdentifier;
|
import mage.MageIdentifier;
|
||||||
import mage.MageInt;
|
import mage.MageInt;
|
||||||
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.common.AttacksTriggeredAbility;
|
import mage.abilities.common.AttacksTriggeredAbility;
|
||||||
import mage.abilities.common.CastFromGraveyardOnceDuringEachOfYourTurnAbility;
|
import mage.abilities.common.CastFromGraveyardOnceDuringEachOfYourTurnAbility;
|
||||||
import mage.abilities.dynamicvalue.common.GreatestAmongPermanentsValue;
|
import mage.abilities.dynamicvalue.common.GreatestAmongPermanentsValue;
|
||||||
import mage.abilities.dynamicvalue.common.StaticValue;
|
import mage.abilities.dynamicvalue.common.StaticValue;
|
||||||
|
import mage.abilities.effects.common.InfoEffect;
|
||||||
import mage.abilities.effects.common.continuous.BoostSourceEffect;
|
import mage.abilities.effects.common.continuous.BoostSourceEffect;
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
|
|
@ -36,7 +38,9 @@ public final class EdgarMasterMachinist extends CardImpl {
|
||||||
this.toughness = new MageInt(4);
|
this.toughness = new MageInt(4);
|
||||||
|
|
||||||
// Once during each of your turns, you may cast an artifact spell from your graveyard. If you cast a spell this way, that artifact enters tapped.
|
// Once during each of your turns, you may cast an artifact spell from your graveyard. If you cast a spell this way, that artifact enters tapped.
|
||||||
this.addAbility(new CastFromGraveyardOnceDuringEachOfYourTurnAbility(filter, MageIdentifier.OnceOnYourTurnCastFromGraveyardEntersTapped));
|
Ability ability = new CastFromGraveyardOnceDuringEachOfYourTurnAbility(filter, MageIdentifier.OnceOnYourTurnCastFromGraveyardEntersTapped);
|
||||||
|
ability.addEffect(new InfoEffect("If you cast a spell this way, that artifact enters tapped"));
|
||||||
|
this.addAbility(ability);
|
||||||
|
|
||||||
// Tools -- Whenever Edgar attacks, it gets +X/+0 until end of turn, where X is the greatest mana value among artifacts you control.
|
// Tools -- Whenever Edgar attacks, it gets +X/+0 until end of turn, where X is the greatest mana value among artifacts you control.
|
||||||
this.addAbility(new AttacksTriggeredAbility(
|
this.addAbility(new AttacksTriggeredAbility(
|
||||||
|
|
|
||||||
|
|
@ -44,7 +44,9 @@ public final class GeneralLeoCristophe extends CardImpl {
|
||||||
// When General Leo Cristophe enters, return up to one target creature card with mana value 3 or less from your graveyard to the battlefield. Then put a +1/+1 counter on General Leo Cristophe for each creature you control.
|
// When General Leo Cristophe enters, return up to one target creature card with mana value 3 or less from your graveyard to the battlefield. Then put a +1/+1 counter on General Leo Cristophe for each creature you control.
|
||||||
Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnFromGraveyardToBattlefieldTargetEffect());
|
Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnFromGraveyardToBattlefieldTargetEffect());
|
||||||
ability.addTarget(new TargetCardInYourGraveyard(0, 1, filter));
|
ability.addTarget(new TargetCardInYourGraveyard(0, 1, filter));
|
||||||
ability.addEffect(new AddCountersSourceEffect(CounterType.P1P1.createInstance(), CreaturesYouControlCount.instance));
|
ability.addEffect(new AddCountersSourceEffect(
|
||||||
|
CounterType.P1P1.createInstance(), CreaturesYouControlCount.instance
|
||||||
|
).setText("Then put a +1/+1 counter on {this} for each creature you control"));
|
||||||
this.addAbility(ability.addHint(CreaturesYouControlHint.instance));
|
this.addAbility(ability.addHint(CreaturesYouControlHint.instance));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -48,7 +48,7 @@ public final class GrahaTiaScionReborn extends CardImpl {
|
||||||
new GrahaTiaScionRebornEffect(),
|
new GrahaTiaScionRebornEffect(),
|
||||||
new PayLifeCost(
|
new PayLifeCost(
|
||||||
GrahaTiaScionRebornValue.instance,
|
GrahaTiaScionRebornValue.instance,
|
||||||
"pay X life, where X is that spell's mana value"
|
"X life, where X is that spell's mana value"
|
||||||
)
|
)
|
||||||
), StaticFilters.FILTER_SPELL_A_NON_CREATURE, false).setDoOnlyOnceEachTurn(true).withFlavorWord("Throw Wide the Gates"));
|
), StaticFilters.FILTER_SPELL_A_NON_CREATURE, false).setDoOnlyOnceEachTurn(true).withFlavorWord("Throw Wide the Gates"));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,26 +1,27 @@
|
||||||
package mage.cards.h;
|
package mage.cards.h;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.MageInt;
|
import mage.MageInt;
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||||
import mage.abilities.common.SpellCastControllerTriggeredAbility;
|
import mage.abilities.common.SpellCastControllerTriggeredAbility;
|
||||||
|
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||||
import mage.abilities.effects.common.combat.CantBeBlockedTargetEffect;
|
import mage.abilities.effects.common.combat.CantBeBlockedTargetEffect;
|
||||||
import mage.abilities.effects.common.continuous.BoostTargetEffect;
|
import mage.abilities.effects.common.continuous.BoostTargetEffect;
|
||||||
import mage.abilities.meta.OrTriggeredAbility;
|
|
||||||
import mage.constants.SubType;
|
|
||||||
import mage.constants.SuperType;
|
|
||||||
import mage.abilities.keyword.FlyingAbility;
|
import mage.abilities.keyword.FlyingAbility;
|
||||||
import mage.abilities.keyword.VigilanceAbility;
|
import mage.abilities.keyword.VigilanceAbility;
|
||||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
|
||||||
import mage.abilities.keyword.WardAbility;
|
import mage.abilities.keyword.WardAbility;
|
||||||
|
import mage.abilities.meta.OrTriggeredAbility;
|
||||||
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.SuperType;
|
||||||
import mage.constants.Zone;
|
import mage.constants.Zone;
|
||||||
import mage.filter.StaticFilters;
|
import mage.filter.StaticFilters;
|
||||||
import mage.target.common.TargetCreaturePermanent;
|
import mage.target.common.TargetCreaturePermanent;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author balazskristof
|
* @author balazskristof
|
||||||
*/
|
*/
|
||||||
|
|
@ -52,7 +53,7 @@ public final class HraesvelgrOfTheFirstBrood extends CardImpl {
|
||||||
);
|
);
|
||||||
ability.addEffect(new CantBeBlockedTargetEffect().setText("can't be blocked this turn").concatBy("and"));
|
ability.addEffect(new CantBeBlockedTargetEffect().setText("can't be blocked this turn").concatBy("and"));
|
||||||
ability.addTarget(new TargetCreaturePermanent());
|
ability.addTarget(new TargetCreaturePermanent());
|
||||||
this.addAbility(ability);
|
this.addAbility(ability.withFlavorWord("Shiva's Aid"));
|
||||||
}
|
}
|
||||||
|
|
||||||
private HraesvelgrOfTheFirstBrood(final HraesvelgrOfTheFirstBrood card) {
|
private HraesvelgrOfTheFirstBrood(final HraesvelgrOfTheFirstBrood card) {
|
||||||
|
|
|
||||||
|
|
@ -36,7 +36,7 @@ public final class InterceptorShadowsHound extends CardImpl {
|
||||||
|
|
||||||
// Assassins you control have menace.
|
// Assassins you control have menace.
|
||||||
this.addAbility(new SimpleStaticAbility(new GainAbilityControlledEffect(
|
this.addAbility(new SimpleStaticAbility(new GainAbilityControlledEffect(
|
||||||
new MenaceAbility(false), Duration.WhileControlled, filter
|
new MenaceAbility(false), Duration.WhileOnBattlefield, filter
|
||||||
)));
|
)));
|
||||||
|
|
||||||
// Whenever you attack with one or more legendary creatures, you may pay {2}{B}. If you do, return this card from your graveyard to the battlefield tapped and attacking.
|
// Whenever you attack with one or more legendary creatures, you may pay {2}{B}. If you do, return this card from your graveyard to the battlefield tapped and attacking.
|
||||||
|
|
|
||||||
|
|
@ -10,10 +10,7 @@ import mage.abilities.keyword.FlyingAbility;
|
||||||
import mage.abilities.triggers.BeginningOfEndStepTriggeredAbility;
|
import mage.abilities.triggers.BeginningOfEndStepTriggeredAbility;
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
import mage.constants.CardType;
|
import mage.constants.*;
|
||||||
import mage.constants.SubType;
|
|
||||||
import mage.constants.SuperType;
|
|
||||||
import mage.constants.WatcherScope;
|
|
||||||
import mage.game.Game;
|
import mage.game.Game;
|
||||||
import mage.game.events.GameEvent;
|
import mage.game.events.GameEvent;
|
||||||
import mage.game.permanent.Permanent;
|
import mage.game.permanent.Permanent;
|
||||||
|
|
@ -41,7 +38,7 @@ public final class LordJyscalGuado extends CardImpl {
|
||||||
this.addAbility(FlyingAbility.getInstance());
|
this.addAbility(FlyingAbility.getInstance());
|
||||||
|
|
||||||
// At the beginning of each end step, if you put a counter on a creature this turn, investigate.
|
// At the beginning of each end step, if you put a counter on a creature this turn, investigate.
|
||||||
this.addAbility(new BeginningOfEndStepTriggeredAbility(new InvestigateEffect())
|
this.addAbility(new BeginningOfEndStepTriggeredAbility(TargetController.ANY, new InvestigateEffect(), false)
|
||||||
.withInterveningIf(LordJyscalGuadoCondition.instance)
|
.withInterveningIf(LordJyscalGuadoCondition.instance)
|
||||||
.addHint(LordJyscalGuadoCondition.getHint()),
|
.addHint(LordJyscalGuadoCondition.getHint()),
|
||||||
new LordJyscalGuadoWatcher()
|
new LordJyscalGuadoWatcher()
|
||||||
|
|
|
||||||
|
|
@ -31,6 +31,7 @@ public final class SOLDIERMilitaryProgram extends CardImpl {
|
||||||
// At the beginning of combat on your turn, choose one. If you control a commander, you may choose both instead.
|
// At the beginning of combat on your turn, choose one. If you control a commander, you may choose both instead.
|
||||||
// * Create a 1/1 white Soldier creature token.
|
// * Create a 1/1 white Soldier creature token.
|
||||||
Ability ability = new BeginningOfCombatTriggeredAbility(new CreateTokenEffect(new SoldierToken()));
|
Ability ability = new BeginningOfCombatTriggeredAbility(new CreateTokenEffect(new SoldierToken()));
|
||||||
|
ability.getModes().setChooseText("choose one. If you control a commander, you may choose both instead.");
|
||||||
ability.getModes().setMoreCondition(2, ControlACommanderCondition.instance);
|
ability.getModes().setMoreCondition(2, ControlACommanderCondition.instance);
|
||||||
|
|
||||||
// * Put a +1/+1 counter on each of up to two Soldiers you control.
|
// * Put a +1/+1 counter on each of up to two Soldiers you control.
|
||||||
|
|
|
||||||
|
|
@ -28,12 +28,10 @@ import java.util.UUID;
|
||||||
*/
|
*/
|
||||||
public final class SephirothFallenHero extends CardImpl {
|
public final class SephirothFallenHero extends CardImpl {
|
||||||
|
|
||||||
private static final FilterPermanent filter = new FilterControlledCreaturePermanent();
|
private static final FilterPermanent filter = new FilterControlledCreaturePermanent("a modified creature");
|
||||||
private static final FilterPermanent filter2 = new FilterPermanent("a modified creature");
|
|
||||||
|
|
||||||
static {
|
static {
|
||||||
filter.add(ModifiedPredicate.instance);
|
filter.add(ModifiedPredicate.instance);
|
||||||
filter2.add(ModifiedPredicate.instance);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public SephirothFallenHero(UUID ownerId, CardSetInfo setInfo) {
|
public SephirothFallenHero(UUID ownerId, CardSetInfo setInfo) {
|
||||||
|
|
@ -48,7 +46,9 @@ public final class SephirothFallenHero extends CardImpl {
|
||||||
|
|
||||||
// Jenova Cells -- Whenever Sephiroth attacks, you may put a cell counter on target creature. Until end of turn, each modified creature you control has base power and toughness 7/5.
|
// Jenova Cells -- Whenever Sephiroth attacks, you may put a cell counter on target creature. Until end of turn, each modified creature you control has base power and toughness 7/5.
|
||||||
Ability ability = new AttacksTriggeredAbility(new SephirothFallenHeroEffect());
|
Ability ability = new AttacksTriggeredAbility(new SephirothFallenHeroEffect());
|
||||||
ability.addEffect(new SetBasePowerToughnessAllEffect(7, 5, Duration.EndOfTurn, filter));
|
ability.addEffect(new SetBasePowerToughnessAllEffect(
|
||||||
|
7, 5, Duration.EndOfTurn, filter
|
||||||
|
).setText("until end of turn, each modified creature you control has base power and toughness 7/5"));
|
||||||
ability.addTarget(new TargetCreaturePermanent());
|
ability.addTarget(new TargetCreaturePermanent());
|
||||||
this.addAbility(ability.withFlavorWord("Jenova Cells"));
|
this.addAbility(ability.withFlavorWord("Jenova Cells"));
|
||||||
|
|
||||||
|
|
@ -56,7 +56,7 @@ public final class SephirothFallenHero extends CardImpl {
|
||||||
ability = new SimpleActivatedAbility(
|
ability = new SimpleActivatedAbility(
|
||||||
Zone.GRAVEYARD, new ReturnSourceFromGraveyardToBattlefieldEffect(true), new GenericManaCost(3)
|
Zone.GRAVEYARD, new ReturnSourceFromGraveyardToBattlefieldEffect(true), new GenericManaCost(3)
|
||||||
);
|
);
|
||||||
ability.addCost(new SacrificeTargetCost(filter2));
|
ability.addCost(new SacrificeTargetCost(filter));
|
||||||
this.addAbility(ability.withFlavorWord("The Reunion"));
|
this.addAbility(ability.withFlavorWord("The Reunion"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -37,7 +37,7 @@ public final class TataruTaru extends CardImpl {
|
||||||
this.toughness = new MageInt(3);
|
this.toughness = new MageInt(3);
|
||||||
|
|
||||||
// When Tataru Taru enters, you draw a card and target opponent may draw a card.
|
// When Tataru Taru enters, you draw a card and target opponent may draw a card.
|
||||||
Ability ability = new EntersBattlefieldTriggeredAbility(new DrawCardSourceControllerEffect(1));
|
Ability ability = new EntersBattlefieldTriggeredAbility(new DrawCardSourceControllerEffect(1, true));
|
||||||
ability.addEffect(new TataruTaruEffect());
|
ability.addEffect(new TataruTaruEffect());
|
||||||
ability.addTarget(new TargetOpponent());
|
ability.addTarget(new TargetOpponent());
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
|
|
@ -68,6 +68,11 @@ enum TataruTaruCondition implements Condition {
|
||||||
.map(game::isActivePlayer)
|
.map(game::isActivePlayer)
|
||||||
.orElse(true);
|
.orElse(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "it isn't that player's turn";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class TataruTaruEffect extends OneShotEffect {
|
class TataruTaruEffect extends OneShotEffect {
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,6 @@ import mage.constants.SubType;
|
||||||
import mage.constants.SuperType;
|
import mage.constants.SuperType;
|
||||||
import mage.counters.CounterType;
|
import mage.counters.CounterType;
|
||||||
import mage.filter.FilterPermanent;
|
import mage.filter.FilterPermanent;
|
||||||
import mage.filter.StaticFilters;
|
|
||||||
import mage.filter.common.FilterControlledCreaturePermanent;
|
import mage.filter.common.FilterControlledCreaturePermanent;
|
||||||
import mage.filter.predicate.permanent.EnteredThisTurnPredicate;
|
import mage.filter.predicate.permanent.EnteredThisTurnPredicate;
|
||||||
import mage.filter.predicate.permanent.TokenPredicate;
|
import mage.filter.predicate.permanent.TokenPredicate;
|
||||||
|
|
@ -34,6 +33,12 @@ import java.util.UUID;
|
||||||
*/
|
*/
|
||||||
public final class TromellSeymoursButler extends CardImpl {
|
public final class TromellSeymoursButler extends CardImpl {
|
||||||
|
|
||||||
|
private static final FilterPermanent filter = new FilterPermanent("nontoken creature");
|
||||||
|
|
||||||
|
static {
|
||||||
|
filter.add(TokenPredicate.FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
public TromellSeymoursButler(UUID ownerId, CardSetInfo setInfo) {
|
public TromellSeymoursButler(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}");
|
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}");
|
||||||
|
|
||||||
|
|
@ -45,8 +50,7 @@ public final class TromellSeymoursButler extends CardImpl {
|
||||||
|
|
||||||
// Each other nontoken creature you control enters with an additional +1/+1 counter on it.
|
// Each other nontoken creature you control enters with an additional +1/+1 counter on it.
|
||||||
this.addAbility(new SimpleStaticAbility(new EntersWithCountersControlledEffect(
|
this.addAbility(new SimpleStaticAbility(new EntersWithCountersControlledEffect(
|
||||||
StaticFilters.FILTER_CONTROLLED_CREATURE_NON_TOKEN,
|
filter, CounterType.P1P1.createInstance(), true
|
||||||
CounterType.P1P1.createInstance(), true
|
|
||||||
)));
|
)));
|
||||||
|
|
||||||
// {1}, {T}: Proliferate X times, where X is the number of nontoken creatures you control that entered this turn.
|
// {1}, {T}: Proliferate X times, where X is the number of nontoken creatures you control that entered this turn.
|
||||||
|
|
|
||||||
|
|
@ -42,7 +42,7 @@ public final class UmaroRagingYeti extends CardImpl {
|
||||||
// * Other creatures you control get +3/+0 and gain trample until end of turn.
|
// * Other creatures you control get +3/+0 and gain trample until end of turn.
|
||||||
Ability ability = new BeginningOfCombatTriggeredAbility(new BoostControlledEffect(
|
Ability ability = new BeginningOfCombatTriggeredAbility(new BoostControlledEffect(
|
||||||
3, 0, Duration.EndOfTurn, true
|
3, 0, Duration.EndOfTurn, true
|
||||||
));
|
).setText("other creatures you control get +3/+0"));
|
||||||
ability.addEffect(new GainAbilityControlledEffect(
|
ability.addEffect(new GainAbilityControlledEffect(
|
||||||
TrampleAbility.getInstance(), Duration.EndOfTurn,
|
TrampleAbility.getInstance(), Duration.EndOfTurn,
|
||||||
StaticFilters.FILTER_PERMANENT_CREATURE, true
|
StaticFilters.FILTER_PERMANENT_CREATURE, true
|
||||||
|
|
|
||||||
|
|
@ -44,7 +44,7 @@ public final class VincentVengefulAtoner extends CardImpl {
|
||||||
// Chaos -- Whenever Vincent deals combat damage to an opponent, it deals that much damage to each other opponent if Vincent's power is 7 or greater.
|
// Chaos -- Whenever Vincent deals combat damage to an opponent, it deals that much damage to each other opponent if Vincent's power is 7 or greater.
|
||||||
this.addAbility(new DealsDamageToOpponentTriggeredAbility(
|
this.addAbility(new DealsDamageToOpponentTriggeredAbility(
|
||||||
new VincentVengefulAtonerEffect(), false, true, true
|
new VincentVengefulAtonerEffect(), false, true, true
|
||||||
));
|
).withFlavorWord("Chaos"));
|
||||||
}
|
}
|
||||||
|
|
||||||
private VincentVengefulAtoner(final VincentVengefulAtoner card) {
|
private VincentVengefulAtoner(final VincentVengefulAtoner card) {
|
||||||
|
|
|
||||||
|
|
@ -69,7 +69,7 @@ public final class WakkaDevotedGuardian extends CardImpl {
|
||||||
// Blitzball Captain -- At the beginning of your end step, if a counter was put on Wakka this turn, put a +1/+1 counter on each other creature you control.
|
// Blitzball Captain -- At the beginning of your end step, if a counter was put on Wakka this turn, put a +1/+1 counter on each other creature you control.
|
||||||
this.addAbility(new BeginningOfEndStepTriggeredAbility(new AddCountersAllEffect(
|
this.addAbility(new BeginningOfEndStepTriggeredAbility(new AddCountersAllEffect(
|
||||||
CounterType.P1P1.createInstance(), StaticFilters.FILTER_OTHER_CONTROLLED_CREATURE
|
CounterType.P1P1.createInstance(), StaticFilters.FILTER_OTHER_CONTROLLED_CREATURE
|
||||||
)).withInterveningIf(WakkaDevotedGuardianCondition.instance), new WakkaDevotedGuardianWatcher());
|
)).withInterveningIf(WakkaDevotedGuardianCondition.instance).withFlavorWord("Blitzball Captain"), new WakkaDevotedGuardianWatcher());
|
||||||
}
|
}
|
||||||
|
|
||||||
private WakkaDevotedGuardian(final WakkaDevotedGuardian card) {
|
private WakkaDevotedGuardian(final WakkaDevotedGuardian card) {
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,7 @@ public final class WreckingBallArm extends CardImpl {
|
||||||
));
|
));
|
||||||
ability.addEffect(new CantBeBlockedByCreaturesAttachedEffect(
|
ability.addEffect(new CantBeBlockedByCreaturesAttachedEffect(
|
||||||
Duration.WhileControlled, DauntAbility.getFilter(), AttachmentType.EQUIPMENT
|
Duration.WhileControlled, DauntAbility.getFilter(), AttachmentType.EQUIPMENT
|
||||||
));
|
).setText("and can't be blocked by creatures with power 2 or less"));
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
|
|
||||||
// Equip legendary creature {3}
|
// Equip legendary creature {3}
|
||||||
|
|
|
||||||
|
|
@ -71,7 +71,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_CODES = "FIN"; // check ability text due mtgjson, can use multiple sets like MAT;CMD or * for all
|
private static final String FULL_ABILITIES_CHECK_SET_CODES = "FIC"; // 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_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
|
private static final boolean CHECK_COPYABLE_FIELDS = true; // disable for better verify test performance
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,7 @@ public class WonCoinFlipControllerTriggeredAbility extends TriggeredAbilityImpl
|
||||||
|
|
||||||
public WonCoinFlipControllerTriggeredAbility(Zone zone, Effect effect, boolean optional) {
|
public WonCoinFlipControllerTriggeredAbility(Zone zone, Effect effect, boolean optional) {
|
||||||
super(zone, effect, optional);
|
super(zone, effect, optional);
|
||||||
|
this.setTriggerPhrase("Whenever you win a coin flip, ");
|
||||||
}
|
}
|
||||||
|
|
||||||
private WonCoinFlipControllerTriggeredAbility(final WonCoinFlipControllerTriggeredAbility ability) {
|
private WonCoinFlipControllerTriggeredAbility(final WonCoinFlipControllerTriggeredAbility ability) {
|
||||||
|
|
|
||||||
|
|
@ -103,7 +103,7 @@ public class MoveCounterTargetsEffect extends OneShotEffect {
|
||||||
.ofNullable(counterType)
|
.ofNullable(counterType)
|
||||||
.map(c -> counterType.getArticle() + ' ' + counterType.getName())
|
.map(c -> counterType.getArticle() + ' ' + counterType.getName())
|
||||||
.orElse("a"));
|
.orElse("a"));
|
||||||
sb.append(" counter from target ");
|
sb.append(" counter from ");
|
||||||
sb.append(mode.getTargets().get(0).getDescription());
|
sb.append(mode.getTargets().get(0).getDescription());
|
||||||
sb.append(" onto ");
|
sb.append(" onto ");
|
||||||
sb.append(mode.getTargets().get(1).getDescription());
|
sb.append(mode.getTargets().get(1).getDescription());
|
||||||
|
|
|
||||||
|
|
@ -59,7 +59,7 @@ public class ScryEffect extends OneShotEffect {
|
||||||
private String generateText() {
|
private String generateText() {
|
||||||
StringBuilder sb = new StringBuilder("scry ");
|
StringBuilder sb = new StringBuilder("scry ");
|
||||||
String value = amount.toString();
|
String value = amount.toString();
|
||||||
sb.append(CardUtil.numberToText(value));
|
sb.append(value);
|
||||||
String message = amount.getMessage();
|
String message = amount.getMessage();
|
||||||
if (!message.isEmpty()) {
|
if (!message.isEmpty()) {
|
||||||
sb.append(value.equals("X") ? ", where X is " : " for each ");
|
sb.append(value.equals("X") ? ", where X is " : " for each ");
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue