Merge pull request #5119 from NoahGleason/M19-oracle-changes

M19 oracle changes
This commit is contained in:
LevelX2 2018-07-14 10:39:50 +02:00 committed by GitHub
commit a3c4c2365d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
52 changed files with 113 additions and 107 deletions

View file

@ -43,7 +43,7 @@ class ApproachOfTheSecondSunEffect extends OneShotEffect {
public ApproachOfTheSecondSunEffect() { public ApproachOfTheSecondSunEffect() {
super(Outcome.Win); super(Outcome.Win);
this.staticText this.staticText
= "If {this} was cast from your hand and you've cast another spell named Approach of the Second Sun this game, you win the game. " = "If this spell was cast from your hand and you've cast another spell named Approach of the Second Sun this game, you win the game. "
+ "Otherwise, put {this} into its owner's library seventh from the top and you gain 7 life."; + "Otherwise, put {this} into its owner's library seventh from the top and you gain 7 life.";
} }

View file

@ -32,9 +32,9 @@ public final class ArtisanOfForms extends CardImpl {
this.power = new MageInt(1); this.power = new MageInt(1);
this.toughness = new MageInt(1); this.toughness = new MageInt(1);
// <i>Heroic</i> &mdash; Whenever you cast a spell that targets Artisan of Forms, you may have Artisan of Forms become a copy of target creature and gain this ability. // <i>Heroic</i> &mdash; Whenever you cast a spell that targets Artisan of Forms, you may have Artisan of Forms become a copy of target creature, except it has this ability.
Effect effect = new CopyPermanentEffect(StaticFilters.FILTER_PERMANENT_CREATURE, new ArtisanOfFormsApplyToPermanent(), true); Effect effect = new CopyPermanentEffect(StaticFilters.FILTER_PERMANENT_CREATURE, new ArtisanOfFormsApplyToPermanent(), true);
effect.setText("have {this} become a copy of target creature and gain this ability"); effect.setText("have {this} become a copy of target creature, except it has this ability");
Ability ability = new HeroicAbility(effect, true); Ability ability = new HeroicAbility(effect, true);
ability.addTarget(new TargetCreaturePermanent()); ability.addTarget(new TargetCreaturePermanent());
this.addAbility(ability); this.addAbility(ability);
@ -55,7 +55,7 @@ class ArtisanOfFormsApplyToPermanent extends ApplyToPermanent {
@Override @Override
public boolean apply(Game game, MageObject mageObject, Ability source, UUID copyToObjectId) { public boolean apply(Game game, MageObject mageObject, Ability source, UUID copyToObjectId) {
Effect effect = new CopyPermanentEffect(new ArtisanOfFormsApplyToPermanent()); Effect effect = new CopyPermanentEffect(new ArtisanOfFormsApplyToPermanent());
effect.setText("have {this} become a copy of target creature and gain this ability"); effect.setText("have {this} become a copy of target creature, except it has this ability");
mageObject.getAbilities().add(new HeroicAbility(effect, true)); mageObject.getAbilities().add(new HeroicAbility(effect, true));
return true; return true;
} }
@ -63,7 +63,7 @@ class ArtisanOfFormsApplyToPermanent extends ApplyToPermanent {
@Override @Override
public boolean apply(Game game, Permanent permanent, Ability source, UUID copyToObjectId) { public boolean apply(Game game, Permanent permanent, Ability source, UUID copyToObjectId) {
Effect effect = new CopyPermanentEffect(new ArtisanOfFormsApplyToPermanent()); Effect effect = new CopyPermanentEffect(new ArtisanOfFormsApplyToPermanent());
effect.setText("have {this} become a copy of target creature and gain this ability"); effect.setText("have {this} become a copy of target creature, except it has this ability");
permanent.addAbility(new HeroicAbility(effect, true), game); permanent.addAbility(new HeroicAbility(effect, true), game);
return true; return true;
} }

View file

@ -36,7 +36,7 @@ public final class CemeteryPuca extends CardImpl {
this.power = new MageInt(1); this.power = new MageInt(1);
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
// Whenever a creature dies, you may pay {1}. If you do, Cemetery Puca becomes a copy of that creature and gains this ability. // Whenever a creature dies, you may pay {1}. If you do, Cemetery Puca becomes a copy of that creature, except it has this ability.
this.addAbility(new DiesCreatureTriggeredAbility(new DoIfCostPaid(new CemeteryPucaEffect(), new ManaCostsImpl("{1}")), false, new FilterCreaturePermanent("a creature"), true)); this.addAbility(new DiesCreatureTriggeredAbility(new DoIfCostPaid(new CemeteryPucaEffect(), new ManaCostsImpl("{1}")), false, new FilterCreaturePermanent("a creature"), true));
} }
@ -55,7 +55,7 @@ class CemeteryPucaEffect extends OneShotEffect {
public CemeteryPucaEffect() { public CemeteryPucaEffect() {
super(Outcome.Copy); super(Outcome.Copy);
staticText = " {this} becomes a copy of that creature and gains this ability"; staticText = " {this} becomes a copy of that creature, except it has this ability";
} }
public CemeteryPucaEffect(final CemeteryPucaEffect effect) { public CemeteryPucaEffect(final CemeteryPucaEffect effect) {

View file

@ -41,7 +41,7 @@ public final class ChoArrimLegate extends CardImpl {
// Protection from black // Protection from black
this.addAbility(ProtectionAbility.from(ObjectColor.BLACK)); this.addAbility(ProtectionAbility.from(ObjectColor.BLACK));
// If an opponent controls a Swamp and you control a Plains, you may cast Cho-Arrim Legate without paying its mana cost. // If an opponent controls a Swamp and you control a Plains, you may cast this spell without paying its mana cost.
Condition condition = new CompoundCondition("If an opponent controls a Swamp and you control a Plains", Condition condition = new CompoundCondition("If an opponent controls a Swamp and you control a Plains",
new OpponentControlsPermanentCondition(filterSwamp), new OpponentControlsPermanentCondition(filterSwamp),
new PermanentsOnTheBattlefieldCondition(filterPlains)); new PermanentsOnTheBattlefieldCondition(filterPlains));

View file

@ -32,9 +32,9 @@ public final class DacksDuplicate extends CardImpl {
this.power = new MageInt(0); this.power = new MageInt(0);
this.toughness = new MageInt(0); this.toughness = new MageInt(0);
// You may have Dack's Duplicate enter the battlefield as a copy of any creature on the battlefield except it gains haste and dethrone. // You may have Dack's Duplicate enter the battlefield as a copy of any creature on the battlefield except it has haste and dethrone.
Effect effect = new CopyPermanentEffect(StaticFilters.FILTER_PERMANENT_CREATURE, new DacksDuplicateApplyToPermanent()); Effect effect = new CopyPermanentEffect(StaticFilters.FILTER_PERMANENT_CREATURE, new DacksDuplicateApplyToPermanent());
effect.setText("as a copy of any creature on the battlefield except it gains haste and dethrone"); effect.setText("as a copy of any creature on the battlefield except it has haste and dethrone");
this.addAbility(new EntersBattlefieldAbility(effect, true)); this.addAbility(new EntersBattlefieldAbility(effect, true));
} }

View file

@ -40,7 +40,7 @@ public final class DeepwoodLegate extends CardImpl {
this.power = new MageInt(1); this.power = new MageInt(1);
this.toughness = new MageInt(1); this.toughness = new MageInt(1);
// If an opponent controls a Forest and you control a Swamp, you may cast Deepwood Legate without paying its mana cost. // If an opponent controls a Forest and you control a Swamp, you may cast this spell without paying its mana cost.
Condition condition = new CompoundCondition("If an opponent controls a Forest and you control a Swamp", Condition condition = new CompoundCondition("If an opponent controls a Forest and you control a Swamp",
new OpponentControlsPermanentCondition(filterForest), new OpponentControlsPermanentCondition(filterForest),
new PermanentsOnTheBattlefieldCondition(filterSwamp)); new PermanentsOnTheBattlefieldCondition(filterSwamp));

View file

@ -36,7 +36,7 @@ public final class DimirDoppelganger extends CardImpl {
this.power = new MageInt(0); this.power = new MageInt(0);
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
// {1}{U}{B}: Exile target creature card from a graveyard. Dimir Doppelganger becomes a copy of that card and gains this ability. // {1}{U}{B}: Exile target creature card from a graveyard. Dimir Doppelganger becomes a copy of that card, except it has this ability.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DimirDoppelgangerEffect(), new ManaCostsImpl("{1}{U}{B}")); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DimirDoppelgangerEffect(), new ManaCostsImpl("{1}{U}{B}"));
ability.addTarget(new TargetCardInGraveyard(new FilterCreatureCard("creature card in a graveyard"))); ability.addTarget(new TargetCardInGraveyard(new FilterCreatureCard("creature card in a graveyard")));
this.addAbility(ability); this.addAbility(ability);
@ -57,7 +57,7 @@ class DimirDoppelgangerEffect extends OneShotEffect {
DimirDoppelgangerEffect() { DimirDoppelgangerEffect() {
super(Outcome.Copy); super(Outcome.Copy);
staticText = "Exile target creature card from a graveyard. {this} becomes a copy of that card and gains this ability"; staticText = "Exile target creature card from a graveyard. {this} becomes a copy of that card, except it has this ability";
} }
DimirDoppelgangerEffect(final DimirDoppelgangerEffect effect) { DimirDoppelgangerEffect(final DimirDoppelgangerEffect effect) {

View file

@ -37,7 +37,7 @@ public final class DreamPillager extends CardImpl {
// Flying // Flying
this.addAbility(FlyingAbility.getInstance()); this.addAbility(FlyingAbility.getInstance());
// Whenever Dream Pillager deals combat damage to a player, exile that many cards from the top of your library. Until end of turn, you may cast nonland cards exiled this way. // Whenever Dream Pillager deals combat damage to a player, exile that many cards from the top of your library. Until end of turn, you may cast nonland cards from among those exiled cards.
this.addAbility(new DreamPillagerTriggeredAbility()); this.addAbility(new DreamPillagerTriggeredAbility());
} }
@ -84,7 +84,7 @@ class DreamPillagerTriggeredAbility extends TriggeredAbilityImpl {
@Override @Override
public String getRule() { public String getRule() {
return "Whenever {this} deals combat damage to a player, exile that many cards from the top of your library. Until end of turn, you may cast nonland cards exiled this way."; return "Whenever {this} deals combat damage to a player, exile that many cards from the top of your library. Until end of turn, you may cast nonland cards from among those exiled cards.";
} }
} }
@ -92,7 +92,7 @@ class DreamPillagerEffect extends OneShotEffect {
public DreamPillagerEffect() { public DreamPillagerEffect() {
super(Outcome.Benefit); super(Outcome.Benefit);
this.staticText = "exile that many cards from the top of your library. Until end of turn, you may cast nonland cards exiled this way"; this.staticText = "exile that many cards from the top of your library. Until end of turn, you may cast nonland cards from among those exiled cards";
} }
public DreamPillagerEffect(final DreamPillagerEffect effect) { public DreamPillagerEffect(final DreamPillagerEffect effect) {

View file

@ -25,7 +25,7 @@ public final class Electryte extends CardImpl {
public Electryte(UUID ownerId, CardSetInfo setInfo) { public Electryte(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{R}{R}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{R}{R}");
this.subtype.add(SubType.BEAST); this.subtype.add(SubType.BEAST, SubType.TRILOBITE);
this.power = new MageInt(3); this.power = new MageInt(3);
this.toughness = new MageInt(3); this.toughness = new MageInt(3);

View file

@ -39,9 +39,9 @@ public final class EvilTwin extends CardImpl {
this.power = new MageInt(0); this.power = new MageInt(0);
this.toughness = new MageInt(0); this.toughness = new MageInt(0);
// You may have Evil Twin enter the battlefield as a copy of any creature on the battlefield except it gains "{U}{B}, {T}: Destroy target creature with the same name as this creature." // You may have Evil Twin enter the battlefield as a copy of any creature on the battlefield, except it has "{U}{B}, {T}: Destroy target creature with the same name as this creature."
Effect effect = new CopyPermanentEffect(StaticFilters.FILTER_PERMANENT_CREATURE, new EvilTwinApplyToPermanent()); Effect effect = new CopyPermanentEffect(StaticFilters.FILTER_PERMANENT_CREATURE, new EvilTwinApplyToPermanent());
effect.setText("as a copy of any creature on the battlefield except it gains \"{U}{B}, {T}: Destroy target creature with the same name as this creature.\""); effect.setText("as a copy of any creature on the battlefield, except it has \"{U}{B}, {T}: Destroy target creature with the same name as this creature.\"");
this.addAbility(new EntersBattlefieldAbility(effect, true)); this.addAbility(new EntersBattlefieldAbility(effect, true));
} }

View file

@ -37,9 +37,9 @@ public final class Gigantoplasm extends CardImpl {
this.power = new MageInt(0); this.power = new MageInt(0);
this.toughness = new MageInt(0); this.toughness = new MageInt(0);
// You may have Gigantoplasm enter the battlefield as a copy of any creature on the battlefield except it gains "{X}: This creature has base power and toughness X/X." // You may have Gigantoplasm enter the battlefield as a copy of any creature on the battlefield, except it has "{X}: This creature has base power and toughness X/X."
Effect effect = new CopyPermanentEffect(StaticFilters.FILTER_PERMANENT_CREATURE, new GigantoplasmApplyToPermanent()); Effect effect = new CopyPermanentEffect(StaticFilters.FILTER_PERMANENT_CREATURE, new GigantoplasmApplyToPermanent());
effect.setText("a copy of any creature on the battlefield except it gains \"{X}: This creature has base power and toughness X/X.\""); effect.setText("a copy of any creature on the battlefield, except it has \"{X}: This creature has base power and toughness X/X.\"");
this.addAbility(new EntersBattlefieldAbility(effect, true)); this.addAbility(new EntersBattlefieldAbility(effect, true));
} }

View file

@ -27,7 +27,7 @@ public final class HeatShimmer extends CardImpl {
public HeatShimmer(UUID ownerId, CardSetInfo setInfo) { public HeatShimmer(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2}{R}"); super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2}{R}");
// Create a token that's a copy of target creature. That token has haste and "At the beginning of the end step, exile this permanent." //Create a token that's a copy of target creature, except it has haste and "At the beginning of the end step, exile this permanent."
this.getSpellAbility().addEffect(new HeatShimmerEffect()); this.getSpellAbility().addEffect(new HeatShimmerEffect());
this.getSpellAbility().addTarget(new TargetCreaturePermanent()); this.getSpellAbility().addTarget(new TargetCreaturePermanent());
} }
@ -46,7 +46,7 @@ class HeatShimmerEffect extends OneShotEffect {
public HeatShimmerEffect() { public HeatShimmerEffect() {
super(Outcome.Copy); super(Outcome.Copy);
this.staticText = "Create a token that's a copy of target creature. That token has haste and \"At the beginning of the end step, exile this permanent.\""; this.staticText = "Create a token that's a copy of target creature, except it has haste and \"At the beginning of the end step, exile this permanent.\"";
} }
public HeatShimmerEffect(final HeatShimmerEffect effect) { public HeatShimmerEffect(final HeatShimmerEffect effect) {

View file

@ -30,7 +30,7 @@ public final class IncreasingAmbition extends CardImpl {
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{4}{B}"); super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{4}{B}");
// Search your library for a card and put that card into your hand. If Increasing Ambition was cast from a graveyard, instead search your library for two cards and put those cards into your hand. Then shuffle your library. // Search your library for a card and put that card into your hand. If this spell was cast from a graveyard, instead search your library for two cards and put those cards into your hand. Then shuffle your library.
this.getSpellAbility().addEffect(new IncreasingAmbitionEffect()); this.getSpellAbility().addEffect(new IncreasingAmbitionEffect());
// Flashback {7}{B} // Flashback {7}{B}
@ -51,7 +51,7 @@ class IncreasingAmbitionEffect extends SearchEffect {
public IncreasingAmbitionEffect() { public IncreasingAmbitionEffect() {
super(new TargetCardInLibrary(), Outcome.DrawCard); super(new TargetCardInLibrary(), Outcome.DrawCard);
staticText = "Search your library for a card and put that card into your hand. If {this} was cast from a graveyard, instead search your library for two cards and put those cards into your hand. Then shuffle your library"; staticText = "Search your library for a card and put that card into your hand. If this spell was cast from a graveyard, instead search your library for two cards and put those cards into your hand. Then shuffle your library";
} }
public IncreasingAmbitionEffect(final IncreasingAmbitionEffect effect) { public IncreasingAmbitionEffect(final IncreasingAmbitionEffect effect) {

View file

@ -24,7 +24,7 @@ public final class IncreasingConfusion extends CardImpl {
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{X}{U}"); super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{X}{U}");
// Target player puts the top X cards of their library into their graveyard. If Increasing Confusion was cast from a graveyard, that player puts twice that many cards into their graveyard instead. // Target player puts the top X cards of their library into their graveyard. If this spell was cast from a graveyard, that player puts twice that many cards into their graveyard instead.
this.getSpellAbility().addEffect(new IncreasingConfusionEffect()); this.getSpellAbility().addEffect(new IncreasingConfusionEffect());
this.getSpellAbility().addTarget(new TargetPlayer()); this.getSpellAbility().addTarget(new TargetPlayer());
@ -46,7 +46,7 @@ class IncreasingConfusionEffect extends OneShotEffect {
public IncreasingConfusionEffect() { public IncreasingConfusionEffect() {
super(Outcome.Detriment); super(Outcome.Detriment);
staticText = "Target player puts the top X cards of their library into their graveyard. If {this} was cast from a graveyard, that player puts twice that many cards into their graveyard instead"; staticText = "Target player puts the top X cards of their library into their graveyard. If this spell was cast from a graveyard, that player puts twice that many cards into their graveyard instead";
} }
public IncreasingConfusionEffect(final IncreasingConfusionEffect effect) { public IncreasingConfusionEffect(final IncreasingConfusionEffect effect) {

View file

@ -25,7 +25,7 @@ public final class IncreasingDevotion extends CardImpl {
public IncreasingDevotion(UUID ownerId, CardSetInfo setInfo) { public IncreasingDevotion(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{3}{W}{W}"); super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{3}{W}{W}");
// Create five 1/1 white Human creature tokens. If Increasing Devotion was cast from a graveyard, create ten of those tokens instead. // Create five 1/1 white Human creature tokens. If this spell was cast from a graveyard, create ten of those tokens instead.
this.getSpellAbility().addEffect(new IncreasingDevotionEffect()); this.getSpellAbility().addEffect(new IncreasingDevotionEffect());
// Flashback {7}{W}{W} // Flashback {7}{W}{W}
@ -48,7 +48,7 @@ class IncreasingDevotionEffect extends OneShotEffect {
public IncreasingDevotionEffect() { public IncreasingDevotionEffect() {
super(Outcome.PutCreatureInPlay); super(Outcome.PutCreatureInPlay);
staticText = "Create five 1/1 white Human creature tokens. If {this} was cast from a graveyard, create ten of those tokens instead"; staticText = "Create five 1/1 white Human creature tokens. If this spell was cast from a graveyard, create ten of those tokens instead";
} }
public IncreasingDevotionEffect(final IncreasingDevotionEffect effect) { public IncreasingDevotionEffect(final IncreasingDevotionEffect effect) {

View file

@ -25,7 +25,7 @@ public final class IncreasingSavagery extends CardImpl {
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{2}{G}{G}"); super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{2}{G}{G}");
// Put five +1/+1 counters on target creature. If Increasing Savagery was cast from a graveyard, put ten +1/+1 counters on that creature instead. // Put five +1/+1 counters on target creature. If this spell was cast from a graveyard, put ten +1/+1 counters on that creature instead.
this.getSpellAbility().addEffect(new IncreasingSavageryEffect()); this.getSpellAbility().addEffect(new IncreasingSavageryEffect());
this.getSpellAbility().addTarget(new TargetCreaturePermanent()); this.getSpellAbility().addTarget(new TargetCreaturePermanent());
@ -47,7 +47,7 @@ class IncreasingSavageryEffect extends OneShotEffect {
public IncreasingSavageryEffect() { public IncreasingSavageryEffect() {
super(Outcome.BoostCreature); super(Outcome.BoostCreature);
staticText = "Put five +1/+1 counters on target creature. If Increasing Savagery was cast from a graveyard, put ten +1/+1 counters on that creature instead"; staticText = "Put five +1/+1 counters on target creature. If this spell was cast from a graveyard, put ten +1/+1 counters on that creature instead";
} }
public IncreasingSavageryEffect(final IncreasingSavageryEffect effect) { public IncreasingSavageryEffect(final IncreasingSavageryEffect effect) {

View file

@ -38,7 +38,7 @@ public final class IncreasingVengeance extends CardImpl {
public IncreasingVengeance(UUID ownerId, CardSetInfo setInfo) { public IncreasingVengeance(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{R}{R}"); super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{R}{R}");
// Copy target instant or sorcery spell you control. If Increasing Vengeance was cast from a graveyard, copy that spell twice instead. You may choose new targets for the copies. // Copy target instant or sorcery spell you control. If this spell was cast from a graveyard, copy that spell twice instead. You may choose new targets for the copies.
this.getSpellAbility().addEffect(new IncreasingVengeanceEffect()); this.getSpellAbility().addEffect(new IncreasingVengeanceEffect());
Target target = new TargetSpell(filter); Target target = new TargetSpell(filter);
this.getSpellAbility().addTarget(target); this.getSpellAbility().addTarget(target);
@ -61,7 +61,7 @@ class IncreasingVengeanceEffect extends OneShotEffect {
public IncreasingVengeanceEffect() { public IncreasingVengeanceEffect() {
super(Outcome.BoostCreature); super(Outcome.BoostCreature);
staticText = "Copy target instant or sorcery spell you control. If Increasing Vengeance was cast from a graveyard, copy that spell twice instead. You may choose new targets for the copies"; staticText = "Copy target instant or sorcery spell you control. If this spell was cast from a graveyard, copy that spell twice instead. You may choose new targets for the copies";
} }
public IncreasingVengeanceEffect(final IncreasingVengeanceEffect effect) { public IncreasingVengeanceEffect(final IncreasingVengeanceEffect effect) {

View file

@ -49,7 +49,7 @@ public final class KikiJikiMirrorBreaker extends CardImpl {
// Haste // Haste
this.addAbility(HasteAbility.getInstance()); this.addAbility(HasteAbility.getInstance());
// {tap}: Create a token that's a copy of target nonlegendary creature you control . That token has haste. Sacrifice it at the beginning of the next end step. // {T}: Create a token that's a copy of target nonlegendary creature you control, except it has haste. Sacrifice it at the beginning of the next end step.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new KikiJikiMirrorBreakerEffect(), new TapSourceCost()); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new KikiJikiMirrorBreakerEffect(), new TapSourceCost());
ability.addTarget(new TargetControlledCreaturePermanent(1, 1, filter, false)); ability.addTarget(new TargetControlledCreaturePermanent(1, 1, filter, false));
this.addAbility(ability); this.addAbility(ability);
@ -70,7 +70,7 @@ class KikiJikiMirrorBreakerEffect extends OneShotEffect {
public KikiJikiMirrorBreakerEffect() { public KikiJikiMirrorBreakerEffect() {
super(Outcome.PutCreatureInPlay); super(Outcome.PutCreatureInPlay);
this.staticText = "Create a token that's a copy of target nonlegendary creature you control. That token has haste. Sacrifice it at the beginning of the next end step"; this.staticText = "Create a token that's a copy of target nonlegendary creature you control, except it has haste. Sacrifice it at the beginning of the next end step";
} }
public KikiJikiMirrorBreakerEffect(final KikiJikiMirrorBreakerEffect effect) { public KikiJikiMirrorBreakerEffect(final KikiJikiMirrorBreakerEffect effect) {

View file

@ -39,7 +39,7 @@ public final class KyrenLegate extends CardImpl {
// Haste // Haste
this.addAbility(HasteAbility.getInstance()); this.addAbility(HasteAbility.getInstance());
// If an opponent controls a Plains and you control a Mountain, you may cast Kyren Legate without paying its mana cost. // If an opponent controls a Plains and you control a Mountain, you may cast this spell without paying its mana cost.
Condition condition = new CompoundCondition("If an opponent controls a Plains and you control a Mountain", Condition condition = new CompoundCondition("If an opponent controls a Plains and you control a Mountain",
new OpponentControlsPermanentCondition(filterPlains), new OpponentControlsPermanentCondition(filterPlains),
new PermanentsOnTheBattlefieldCondition(filterMountain)); new PermanentsOnTheBattlefieldCondition(filterMountain));

View file

@ -38,7 +38,7 @@ public final class LazavDimirMastermind extends CardImpl {
// Hexproof // Hexproof
this.addAbility(HexproofAbility.getInstance()); this.addAbility(HexproofAbility.getInstance());
// Whenever a creature card is put into an opponent's graveyard from anywhere, you may have Lazav, Dimir Mastermind become a copy of that card except its name is still Lazav, Dimir Mastermind, it's legendary in addition to its other types, and it gains hexproof and this ability. // Whenever a creature card is put into an opponent's graveyard from anywhere, you may have Lazav, Dimir Mastermind become a copy of that card except its name is Lazav, Dimir Mastermind, it's legendary in addition to its other types, and it has hexproof and this ability.
this.addAbility(new PutCardIntoGraveFromAnywhereAllTriggeredAbility( this.addAbility(new PutCardIntoGraveFromAnywhereAllTriggeredAbility(
new LazavDimirMastermindEffect(), true, new LazavDimirMastermindEffect(), true,
new FilterCreatureCard("a creature card"), new FilterCreatureCard("a creature card"),
@ -59,7 +59,7 @@ class LazavDimirMastermindEffect extends OneShotEffect {
LazavDimirMastermindEffect() { LazavDimirMastermindEffect() {
super(Outcome.Copy); super(Outcome.Copy);
staticText = "you may have {this} become a copy of that card except its name is still {this}, it's legendary in addition to its other types, and it gains hexproof and this ability"; staticText = "you may have {this} become a copy of that card except its name is Lazav, Dimir Mastermind, it's legendary in addition to its other types, and it has hexproof and this ability";
} }
LazavDimirMastermindEffect(final LazavDimirMastermindEffect effect) { LazavDimirMastermindEffect(final LazavDimirMastermindEffect effect) {

View file

@ -29,7 +29,7 @@ public final class LudevicsTestSubject extends CardImpl {
public LudevicsTestSubject(UUID ownerId, CardSetInfo setInfo) { public LudevicsTestSubject(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{U}"); super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{U}");
this.subtype.add(SubType.LIZARD); this.subtype.add(SubType.LIZARD, SubType.EGG);
this.power = new MageInt(0); this.power = new MageInt(0);
this.toughness = new MageInt(3); this.toughness = new MageInt(3);

View file

@ -34,7 +34,7 @@ public final class Massacre extends CardImpl {
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{2}{B}{B}"); super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{2}{B}{B}");
// If an opponent controls a Plains and you control a Swamp, you may cast Massacre without paying its mana cost. // If an opponent controls a Plains and you control a Swamp, you may cast this spell without paying its mana cost.
Condition condition = new CompoundCondition("If an opponent controls a Plains and you control a Swamp", Condition condition = new CompoundCondition("If an opponent controls a Plains and you control a Swamp",
new OpponentControlsPermanentCondition(filterPlains), new OpponentControlsPermanentCondition(filterPlains),
new PermanentsOnTheBattlefieldCondition(filterSwamp)); new PermanentsOnTheBattlefieldCondition(filterSwamp));

View file

@ -23,7 +23,7 @@ import mage.util.functions.AbilityApplier;
*/ */
public final class MercurialPretender extends CardImpl { public final class MercurialPretender extends CardImpl {
private static final String effectText = "as a copy of any creature you control except it gains \"{2}{U}{U}: Return this creature to its owner's hand.\""; private static final String effectText = "as a copy of any creature you control, except it has \"{2}{U}{U}: Return this creature to its owner's hand.\"";
public MercurialPretender(UUID ownerId, CardSetInfo setInfo) { public MercurialPretender(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{U}"); super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{U}");
@ -33,8 +33,8 @@ public final class MercurialPretender extends CardImpl {
this.power = new MageInt(0); this.power = new MageInt(0);
this.toughness = new MageInt(0); this.toughness = new MageInt(0);
// You may have Mercurial Pretender enter the battlefield as a copy of any creature you control // You may have Mercurial Pretender enter the battlefield as a copy of any creature you control,
// except it gains "{2}{U}{U}: Return this creature to its owner's hand." // except it has "{2}{U}{U}: Return this creature to its owner's hand."
Effect effect = new CopyPermanentEffect(new FilterControlledCreaturePermanent(), Effect effect = new CopyPermanentEffect(new FilterControlledCreaturePermanent(),
new AbilityApplier(new SimpleActivatedAbility(Zone.BATTLEFIELD, new ReturnToHandSourceEffect(true), new ManaCostsImpl("{2}{U}{U}")))); new AbilityApplier(new SimpleActivatedAbility(Zone.BATTLEFIELD, new ReturnToHandSourceEffect(true), new ManaCostsImpl("{2}{U}{U}"))));
effect.setText(effectText); effect.setText(effectText);

View file

@ -48,8 +48,8 @@ public final class MinionReflector extends CardImpl {
"entered the battlefield?"), "entered the battlefield?"),
filter, false, SetTargetPointer.PERMANENT, filter, false, SetTargetPointer.PERMANENT,
"Whenever a nontoken creature enters the battlefield under your control, " + "Whenever a nontoken creature enters the battlefield under your control, " +
"you may pay 2. If you do, create a token that's a copy of that creature. " + "you may pay 2. If you do, create a token that's a copy of that creature, " +
"That token has haste and \"At the beginning of the end step, sacrifice this " + "except it has haste and \"At the beginning of the end step, sacrifice this " +
"permanent.\""); "permanent.\"");
this.addAbility(ability); this.addAbility(ability);
} }
@ -69,7 +69,7 @@ class MinionReflectorEffect extends OneShotEffect {
public MinionReflectorEffect() { public MinionReflectorEffect() {
super(Outcome.PutCreatureInPlay); super(Outcome.PutCreatureInPlay);
this.staticText = "create a token that's a copy of that creature. That token has haste and \"At the beginning of the end step, sacrifice this permanent."; this.staticText = "create a token that's a copy of that creature, except it has haste and \"At the beginning of the end step, sacrifice this permanent.";
} }
public MinionReflectorEffect(final MinionReflectorEffect effect) { public MinionReflectorEffect(final MinionReflectorEffect effect) {

View file

@ -31,7 +31,7 @@ public final class MizziumTransreliquat extends CardImpl {
ability.addTarget(new TargetArtifactPermanent()); ability.addTarget(new TargetArtifactPermanent());
this.addAbility(ability); this.addAbility(ability);
// {1}{U}{R}: Mizzium Transreliquat becomes a copy of target artifact and gains this ability. // {1}{U}{R}: Mizzium Transreliquat becomes a copy of target artifact, except it has this ability.
ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new MizziumTransreliquatCopyAndGainAbilityEffect(), new ManaCostsImpl("{1}{U}{R}")); ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new MizziumTransreliquatCopyAndGainAbilityEffect(), new ManaCostsImpl("{1}{U}{R}"));
ability.addTarget(new TargetArtifactPermanent()); ability.addTarget(new TargetArtifactPermanent());
this.addAbility(ability); this.addAbility(ability);
@ -79,7 +79,7 @@ class MizziumTransreliquatCopyAndGainAbilityEffect extends OneShotEffect {
public MizziumTransreliquatCopyAndGainAbilityEffect() { public MizziumTransreliquatCopyAndGainAbilityEffect() {
super(Outcome.Benefit); super(Outcome.Benefit);
this.staticText = "{this} becomes a copy of target artifact and gains this ability"; this.staticText = "{this} becomes a copy of target artifact, except it has this ability";
} }
public MizziumTransreliquatCopyAndGainAbilityEffect(final MizziumTransreliquatCopyAndGainAbilityEffect effect) { public MizziumTransreliquatCopyAndGainAbilityEffect(final MizziumTransreliquatCopyAndGainAbilityEffect effect) {

View file

@ -33,7 +33,7 @@ public final class MoggSalvage extends CardImpl {
public MoggSalvage(UUID ownerId, CardSetInfo setInfo) { public MoggSalvage(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{2}{R}"); super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{2}{R}");
// If an opponent controls an Island and you control a Mountain, you may cast Mogg Salvage without paying its mana cost. // If an opponent controls an Island and you control a Mountain, you may cast this spell without paying its mana cost.
Condition condition = new CompoundCondition("If an opponent controls an Island and you control a Mountain", Condition condition = new CompoundCondition("If an opponent controls an Island and you control a Mountain",
new OpponentControlsPermanentCondition(filterIsland), new OpponentControlsPermanentCondition(filterIsland),
new PermanentsOnTheBattlefieldCondition(filterMountain)); new PermanentsOnTheBattlefieldCondition(filterMountain));

View file

@ -31,7 +31,7 @@ public final class PatriciansScorn extends CardImpl {
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{3}{W}"); super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{3}{W}");
// If you've cast another white spell this turn, you may cast Patrician's Scorn without paying its mana cost. // If you've cast another white spell this turn, you may cast this spell without paying its mana cost.
this.addAbility(new AlternativeCostSourceAbility(new CastWhiteSpellThisTurnCondition()), new PatriciansScornWatcher()); this.addAbility(new AlternativeCostSourceAbility(new CastWhiteSpellThisTurnCondition()), new PatriciansScornWatcher());
// Destroy all enchantments. // Destroy all enchantments.
this.getSpellAbility().addEffect(new DestroyAllEffect(StaticFilters.FILTER_ENCHANTMENT_PERMANENT)); this.getSpellAbility().addEffect(new DestroyAllEffect(StaticFilters.FILTER_ENCHANTMENT_PERMANENT));
@ -87,7 +87,7 @@ class PatriciansScornWatcher extends Watcher {
@Override @Override
public void watch(GameEvent event, Game game) { public void watch(GameEvent event, Game game) {
if (condition == true) { //no need to check - condition has already occured if (condition) { //no need to check - condition has already occured
return; return;
} }
if (event.getType() == EventType.SPELL_CAST && controllerId.equals(event.getPlayerId())) { if (event.getType() == EventType.SPELL_CAST && controllerId.equals(event.getPlayerId())) {

View file

@ -26,7 +26,7 @@ import java.util.UUID;
*/ */
public final class PhantasmalImage extends CardImpl { public final class PhantasmalImage extends CardImpl {
private static final String effectText = "a copy of any creature on the battlefield, except it's an Illusion in addition to its other types and it gains \"When this creature becomes the target of a spell or ability, sacrifice it.\""; private static final String effectText = "a copy of any creature on the battlefield, except it's an Illusion in addition to its other types and it has \"When this creature becomes the target of a spell or ability, sacrifice it.\"";
ApplyToPermanent phantasmalImageApplier = new ApplyToPermanent() { ApplyToPermanent phantasmalImageApplier = new ApplyToPermanent() {
@Override @Override
@ -62,7 +62,7 @@ public final class PhantasmalImage extends CardImpl {
// You may have Phantasmal Image enter the battlefield as a copy of any creature // You may have Phantasmal Image enter the battlefield as a copy of any creature
// on the battlefield, except it's an Illusion in addition to its other types and // on the battlefield, except it's an Illusion in addition to its other types and
// it gains "When this creature becomes the target of a spell or ability, sacrifice it." // it has "When this creature becomes the target of a spell or ability, sacrifice it."
Effect effect = new CopyPermanentEffect(StaticFilters.FILTER_PERMANENT_CREATURE, phantasmalImageApplier); Effect effect = new CopyPermanentEffect(StaticFilters.FILTER_PERMANENT_CREATURE, phantasmalImageApplier);
effect.setText(effectText); effect.setText(effectText);
this.addAbility(new EntersBattlefieldAbility(effect, true)); this.addAbility(new EntersBattlefieldAbility(effect, true));

View file

@ -40,7 +40,7 @@ public final class ProgenitorMimic extends CardImpl {
this.toughness = new MageInt(0); this.toughness = new MageInt(0);
// You may have Progenitor Mimic enter the battlefield as a copy of any creature on the battlefield // You may have Progenitor Mimic enter the battlefield as a copy of any creature on the battlefield
// except it gains "At the beginning of your upkeep, if this creature isn't a token, // except it has "At the beginning of your upkeep, if this creature isn't a token,
// create a token that's a copy of this creature." // create a token that's a copy of this creature."
Effect effect = new CreateTokenCopySourceEffect(); Effect effect = new CreateTokenCopySourceEffect();
effect.setText("create a token that's a copy of this creature"); effect.setText("create a token that's a copy of this creature");
@ -52,7 +52,7 @@ public final class ProgenitorMimic extends CardImpl {
"At the beginning of your upkeep, if this creature isn't a token, create a token that's a copy of this creature.") "At the beginning of your upkeep, if this creature isn't a token, create a token that's a copy of this creature.")
); );
effect = new CopyPermanentEffect(applier); effect = new CopyPermanentEffect(applier);
effect.setText("as a copy of any creature on the battlefield except it gains \"At the beginning of your upkeep, if this creature isn't a token, create a token that's a copy of this creature.\""); effect.setText("as a copy of any creature on the battlefield except it has \"At the beginning of your upkeep, if this creature isn't a token, create a token that's a copy of this creature.\"");
this.addAbility(new EntersBattlefieldAbility(effect, true)); this.addAbility(new EntersBattlefieldAbility(effect, true));
} }

View file

@ -27,7 +27,7 @@ public final class ProwlingPangolin extends CardImpl {
public ProwlingPangolin(UUID ownerId, CardSetInfo setInfo) { public ProwlingPangolin(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{B}{B}"); super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{B}{B}");
this.subtype.add(SubType.BEAST); this.subtype.add(SubType.BEAST, SubType.PANGOLIN);
this.power = new MageInt(6); this.power = new MageInt(6);
this.toughness = new MageInt(5); this.toughness = new MageInt(5);

View file

@ -28,7 +28,7 @@ public final class QuicksilverGargantuan extends CardImpl {
this.toughness = new MageInt(7); this.toughness = new MageInt(7);
Ability ability = new EntersBattlefieldAbility(new CopyPermanentEffect(new QuicksilverGargantuanApplyToPermanent()), Ability ability = new EntersBattlefieldAbility(new CopyPermanentEffect(new QuicksilverGargantuanApplyToPermanent()),
"You may have {this} enter the battlefield as a copy of any creature on the battlefield, except it's still 7/7"); "You may have {this} enter the battlefield as a copy of any creature on the battlefield, except it's 7/7");
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -33,7 +33,7 @@ public final class RefreshingRain extends CardImpl {
public RefreshingRain(UUID ownerId, CardSetInfo setInfo) { public RefreshingRain(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{3}{G}"); super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{3}{G}");
// If an opponent controls a Swamp and you control a Forest, you may cast Refreshing Rain without paying its mana cost. // If an opponent controls a Swamp and you control a Forest, you may cast this spell without paying its mana cost.
Condition condition = new CompoundCondition("If an opponent controls a Swamp and you control a Forest", Condition condition = new CompoundCondition("If an opponent controls a Swamp and you control a Forest",
new OpponentControlsPermanentCondition(filterSwamp), new OpponentControlsPermanentCondition(filterSwamp),
new PermanentsOnTheBattlefieldCondition(filterForest)); new PermanentsOnTheBattlefieldCondition(filterForest));

View file

@ -22,7 +22,7 @@ public final class RocEgg extends CardImpl {
public RocEgg(UUID ownerId, CardSetInfo setInfo) { public RocEgg(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}");
this.subtype.add(SubType.BIRD); this.subtype.add(SubType.BIRD, SubType.EGG);
this.power = new MageInt(0); this.power = new MageInt(0);
this.toughness = new MageInt(3); this.toughness = new MageInt(3);

View file

@ -23,7 +23,8 @@ public final class RukhEgg extends CardImpl {
public RukhEgg(UUID ownerId, CardSetInfo setInfo) { public RukhEgg(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.BIRD); this.subtype.add(SubType.BIRD, SubType.EGG);
this.power = new MageInt(0); this.power = new MageInt(0);
this.toughness = new MageInt(3); this.toughness = new MageInt(3);

View file

@ -35,7 +35,7 @@ public final class RushwoodLegate extends CardImpl {
this.power = new MageInt(2); this.power = new MageInt(2);
this.toughness = new MageInt(1); this.toughness = new MageInt(1);
// If an opponent controls an Island and you control a Forest, you may cast Rushwood Legate without paying its mana cost. // If an opponent controls an Island and you control a Forest, you may cast this spell without paying its mana cost.
Condition condition = new CompoundCondition("If an opponent controls an Island and you control a Forest", Condition condition = new CompoundCondition("If an opponent controls an Island and you control a Forest",
new OpponentControlsPermanentCondition(filterIsland), new OpponentControlsPermanentCondition(filterIsland),
new PermanentsOnTheBattlefieldCondition(filterForest)); new PermanentsOnTheBattlefieldCondition(filterForest));

View file

@ -37,9 +37,9 @@ public final class SakashimaTheImpostor extends CardImpl {
this.power = new MageInt(3); this.power = new MageInt(3);
this.toughness = new MageInt(1); this.toughness = new MageInt(1);
// You may have Sakashima the Impostor enter the battlefield as a copy of any creature on the battlefield, except its name is still Sakashima the Impostor, it's legendary in addition to its other types, and it gains "{2}{U}{U}: Return Sakashima the Impostor to its owner's hand at the beginning of the next end step." // You may have Sakashima the Impostor enter the battlefield as a copy of any creature on the battlefield, except its name is Sakashima the Impostor, it's legendary in addition to its other types, and it has "{2}{U}{U}: Return Sakashima the Impostor to its owner's hand at the beginning of the next end step."
Effect effect = new CopyPermanentEffect(StaticFilters.FILTER_PERMANENT_CREATURE, new SakashimaTheImpostorApplier()); Effect effect = new CopyPermanentEffect(StaticFilters.FILTER_PERMANENT_CREATURE, new SakashimaTheImpostorApplier());
effect.setText("as a copy of any creature on the battlefield, except its name is still Sakashima the Impostor, it's legendary in addition to its other types, and it gains \"{2}{U}{U}: Return {this} to its owner's hand at the beginning of the next end step.\""); effect.setText("as a copy of any creature on the battlefield, except its name is Sakashima the Impostor, it's legendary in addition to its other types, and it has \"{2}{U}{U}: Return {this} to its owner's hand at the beginning of the next end step.\"");
this.addAbility(new EntersBattlefieldAbility(effect, true)); this.addAbility(new EntersBattlefieldAbility(effect, true));
} }

View file

@ -32,15 +32,14 @@ public final class SaprazzanLegate extends CardImpl {
public SaprazzanLegate(UUID ownerId, CardSetInfo setInfo) { public SaprazzanLegate(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{U}"); super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{U}");
this.subtype.add(SubType.MERFOLK); this.subtype.add(SubType.MERFOLK, SubType.SOLDIER);
this.subtype.add(SubType.SOLDIER);
this.power = new MageInt(1); this.power = new MageInt(1);
this.toughness = new MageInt(3); this.toughness = new MageInt(3);
// Flying // Flying
this.addAbility(FlyingAbility.getInstance()); this.addAbility(FlyingAbility.getInstance());
// If an opponent controls a Mountain and you control an Island, you may cast Saprazzan Legate without paying its mana cost. // If an opponent controls a Mountain and you control an Island, you may cast this spell without paying its mana cost.
Condition condition = new CompoundCondition("If an opponent controls a Mountain and you control an Island", Condition condition = new CompoundCondition("If an opponent controls a Mountain and you control an Island",
new OpponentControlsPermanentCondition(filterMountain), new OpponentControlsPermanentCondition(filterMountain),
new PermanentsOnTheBattlefieldCondition(filterIsland)); new PermanentsOnTheBattlefieldCondition(filterIsland));

View file

@ -34,7 +34,7 @@ public final class SivvisRuse extends CardImpl {
public SivvisRuse(UUID ownerId, CardSetInfo setInfo) { public SivvisRuse(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{2}{W}{W}"); super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{2}{W}{W}");
// If an opponent controls a Mountain and you control a Plains, you may cast Sivvi's Ruse without paying its mana cost. // If an opponent controls a Mountain and you control a Plains, you may cast this spell without paying its mana cost.
Condition condition = new CompoundCondition("If an opponent controls a Mountain and you control a Plains", Condition condition = new CompoundCondition("If an opponent controls a Mountain and you control a Plains",
new OpponentControlsPermanentCondition(filterMountain), new OpponentControlsPermanentCondition(filterMountain),
new PermanentsOnTheBattlefieldCondition(filterPlains)); new PermanentsOnTheBattlefieldCondition(filterPlains));

View file

@ -43,7 +43,7 @@ public final class SplinterTwin extends CardImpl {
this.getSpellAbility().addEffect(new AttachEffect(Outcome.AddAbility)); this.getSpellAbility().addEffect(new AttachEffect(Outcome.AddAbility));
Ability ability = new EnchantAbility(auraTarget.getTargetName()); Ability ability = new EnchantAbility(auraTarget.getTargetName());
this.addAbility(ability); this.addAbility(ability);
// Enchanted creature has "{tap}: Create a token that's a copy of this creature. That token has haste. Exile it at the beginning of the next end step." // Enchanted creature has "{tap}: Create a token that's a copy of this creature, except it has haste. Exile it at the beginning of the next end step."
SimpleActivatedAbility gainedAbility = new SimpleActivatedAbility(Zone.BATTLEFIELD, new SplinterTwinEffect(), new TapSourceCost()); SimpleActivatedAbility gainedAbility = new SimpleActivatedAbility(Zone.BATTLEFIELD, new SplinterTwinEffect(), new TapSourceCost());
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(gainedAbility, AttachmentType.AURA))); this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(gainedAbility, AttachmentType.AURA)));
} }
@ -62,7 +62,7 @@ class SplinterTwinEffect extends OneShotEffect {
public SplinterTwinEffect() { public SplinterTwinEffect() {
super(Outcome.PutCreatureInPlay); super(Outcome.PutCreatureInPlay);
this.staticText = "Create a token that's a copy of this creature. That token has haste. Exile it at the beginning of the next end step"; this.staticText = "Create a token that's a copy of this creature, except it has haste. Exile it at the beginning of the next end step";
} }
public SplinterTwinEffect(final SplinterTwinEffect effect) { public SplinterTwinEffect(final SplinterTwinEffect effect) {

View file

@ -34,7 +34,7 @@ public final class Submerge extends CardImpl {
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{4}{U}"); super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{4}{U}");
// If an opponent controls a Forest and you control an Island, you may cast Submerge without paying its mana cost. // If an opponent controls a Forest and you control an Island, you may cast this spell without paying its mana cost.
Condition condition = new CompoundCondition("If an opponent controls a Forest and you control an Island", Condition condition = new CompoundCondition("If an opponent controls a Forest and you control an Island",
new OpponentControlsPermanentCondition(filterForest), new OpponentControlsPermanentCondition(filterForest),
new PermanentsOnTheBattlefieldCondition(filterIsland)); new PermanentsOnTheBattlefieldCondition(filterIsland));

View file

@ -29,7 +29,7 @@ public final class SummonersEgg extends CardImpl {
public SummonersEgg(UUID ownerId, CardSetInfo setInfo) { public SummonersEgg(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{4}"); super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{4}");
this.subtype.add(SubType.CONSTRUCT); this.subtype.add(SubType.EGG);
this.power = new MageInt(0); this.power = new MageInt(0);
this.toughness = new MageInt(4); this.toughness = new MageInt(4);

View file

@ -28,7 +28,7 @@ public final class TemptWithImmortality extends CardImpl {
public TemptWithImmortality(UUID ownerId, CardSetInfo setInfo) { public TemptWithImmortality(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{4}{B}"); super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{4}{B}");
// Tempting offer - Return a creature card from your graveyard to the battlefield. Each opponent may return a creature card from their graveyard to the battlefield. For each player who does, return a creature card from your graveyard to the battlefield. // Tempting offer - Return a creature card from your graveyard to the battlefield. Each opponent may return a creature card from their graveyard to the battlefield. For each opponent who does, return a creature card from your graveyard to the battlefield.
this.getSpellAbility().addEffect(new TemptWithImmortalityEffect()); this.getSpellAbility().addEffect(new TemptWithImmortalityEffect());
} }
@ -46,7 +46,7 @@ class TemptWithImmortalityEffect extends OneShotEffect {
public TemptWithImmortalityEffect() { public TemptWithImmortalityEffect() {
super(Outcome.PutCreatureInPlay); super(Outcome.PutCreatureInPlay);
this.staticText = "<i>Tempting offer</i> &mdash; Return a creature card from your graveyard to the battlefield. Each opponent may return a creature card from their graveyard to the battlefield. For each player who does, return a creature card from your graveyard to the battlefield"; this.staticText = "<i>Tempting offer</i> &mdash; Return a creature card from your graveyard to the battlefield. Each opponent may return a creature card from their graveyard to the battlefield. For each opponent who does, return a creature card from your graveyard to the battlefield";
} }

View file

@ -23,7 +23,7 @@ public final class TemptWithVengeance extends CardImpl {
public TemptWithVengeance(UUID ownerId, CardSetInfo setInfo) { public TemptWithVengeance(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{X}{R}"); super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{X}{R}");
// Tempting offer - create X 1/1 red Elemental creature tokens with haste. Each opponent may create X 1/1 red Elemental creature tokens with haste. For each player who does, create X 1/1 red Elemental creature tokens with haste. // Tempting offer - create X 1/1 red Elemental creature tokens with haste. Each opponent may create X 1/1 red Elemental creature tokens with haste. For each opponent who does, create X 1/1 red Elemental creature tokens with haste.
this.getSpellAbility().addEffect(new TemptWithVengeanceEffect()); this.getSpellAbility().addEffect(new TemptWithVengeanceEffect());
} }
@ -41,7 +41,7 @@ class TemptWithVengeanceEffect extends OneShotEffect {
public TemptWithVengeanceEffect() { public TemptWithVengeanceEffect() {
super(Outcome.PutLandInPlay); super(Outcome.PutLandInPlay);
this.staticText = "<i>Tempting offer</i> &mdash; create X 1/1 red Elemental creature tokens with haste. Each opponent may create X 1/1 red Elemental creature tokens with haste. For each player who does, create X 1/1 red Elemental creature tokens with haste"; this.staticText = "<i>Tempting offer</i> &mdash; create X 1/1 red Elemental creature tokens with haste. Each opponent may create X 1/1 red Elemental creature tokens with haste. For each opponent who does, create X 1/1 red Elemental creature tokens with haste";
} }
public TemptWithVengeanceEffect(final TemptWithVengeanceEffect effect) { public TemptWithVengeanceEffect(final TemptWithVengeanceEffect effect) {

View file

@ -30,7 +30,7 @@ public final class ThespiansStage extends CardImpl {
// {T}: Add 1. // {T}: Add 1.
this.addAbility(new ColorlessManaAbility()); this.addAbility(new ColorlessManaAbility());
// 2, {T}: Thespian's Stage becomes a copy of target land and gains this ability. // 2, {T}: Thespian's Stage becomes a copy of target land, except it has this ability.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ThespiansStageCopyEffect(), new GenericManaCost(2)); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ThespiansStageCopyEffect(), new GenericManaCost(2));
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());
ability.addTarget(new TargetLandPermanent()); ability.addTarget(new TargetLandPermanent());
@ -52,7 +52,7 @@ class ThespiansStageCopyEffect extends OneShotEffect {
public ThespiansStageCopyEffect() { public ThespiansStageCopyEffect() {
super(Outcome.Benefit); super(Outcome.Benefit);
this.staticText = "{this} becomes a copy of target land and gains this ability"; this.staticText = "{this} becomes a copy of target land, except it has this ability";
} }
public ThespiansStageCopyEffect(final ThespiansStageCopyEffect effect) { public ThespiansStageCopyEffect(final ThespiansStageCopyEffect effect) {

View file

@ -35,7 +35,7 @@ public final class Twinflame extends CardImpl {
// Strive - Twinflame costs 2R more to cast for each target beyond the first. // Strive - Twinflame costs 2R more to cast for each target beyond the first.
this.addAbility(new StriveAbility("{2}{R}")); this.addAbility(new StriveAbility("{2}{R}"));
// Choose any number of target creatures you control. For each of them, create a token that's a copy of that creature. Those tokens have haste. Exile them at the beginning of the next end step. // Choose any number of target creatures you control. For each of them, create a token that's a copy of that creature, except it has haste. Exile them at the beginning of the next end step.
this.getSpellAbility().addEffect(new TwinflameCopyEffect()); this.getSpellAbility().addEffect(new TwinflameCopyEffect());
this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent(0, Integer.MAX_VALUE, new FilterControlledCreaturePermanent(), false)); this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent(0, Integer.MAX_VALUE, new FilterControlledCreaturePermanent(), false));
@ -55,7 +55,7 @@ class TwinflameCopyEffect extends OneShotEffect {
public TwinflameCopyEffect() { public TwinflameCopyEffect() {
super(Outcome.PutCreatureInPlay); super(Outcome.PutCreatureInPlay);
this.staticText = "Choose any number of target creatures you control. For each of them, create a token that's a copy of that creature. Those tokens have haste. Exile them at the beginning of the next end step"; this.staticText = "Choose any number of target creatures you control. For each of them, create a token that's a copy of that creature, except it has haste. Exile them at the beginning of the next end step";
} }
public TwinflameCopyEffect(final TwinflameCopyEffect effect) { public TwinflameCopyEffect(final TwinflameCopyEffect effect) {

View file

@ -40,7 +40,7 @@ public final class UnstableShapeshifter extends CardImpl {
this.power = new MageInt(0); this.power = new MageInt(0);
this.toughness = new MageInt(1); this.toughness = new MageInt(1);
// Whenever another creature enters the battlefield, Unstable Shapeshifter becomes a copy of that creature and gains this ability. // Whenever another creature enters the battlefield, Unstable Shapeshifter becomes a copy of that creature, except it has this ability.
this.addAbility(new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, new UnstableShapeshifterEffect(), filterAnotherCreature, false, SetTargetPointer.PERMANENT, "")); this.addAbility(new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, new UnstableShapeshifterEffect(), filterAnotherCreature, false, SetTargetPointer.PERMANENT, ""));
} }
@ -58,7 +58,7 @@ class UnstableShapeshifterEffect extends OneShotEffect {
public UnstableShapeshifterEffect() { public UnstableShapeshifterEffect() {
super(Outcome.Copy); super(Outcome.Copy);
this.staticText = "{this} becomes a copy of that creature and gains this ability"; this.staticText = "{this} becomes a copy of that creature, except it has this ability";
} }
public UnstableShapeshifterEffect(final UnstableShapeshifterEffect effect) { public UnstableShapeshifterEffect(final UnstableShapeshifterEffect effect) {

View file

@ -30,7 +30,7 @@ import mage.util.functions.ApplyToPermanent;
*/ */
public final class VesuvanDoppelganger extends CardImpl { public final class VesuvanDoppelganger extends CardImpl {
private static final String rule = "You may have {this} enter the battlefield as a copy of any creature on the battlefield except it doesn't copy that creature's color and it gains \"At the beginning of your upkeep, you may have this creature become a copy of target creature except it doesn't copy that creature's color. If you do, this creature gains this ability.\""; private static final String rule = "You may have {this} enter the battlefield as a copy of any creature on the battlefield except it doesn't copy that creature's color and it has \"At the beginning of your upkeep, you may have this creature become a copy of target creature except it doesn't copy that creature's color and it has this ability.\"";
public VesuvanDoppelganger(UUID ownerId, CardSetInfo setInfo) { public VesuvanDoppelganger(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{U}{U}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{U}{U}");
@ -38,7 +38,7 @@ public final class VesuvanDoppelganger extends CardImpl {
this.power = new MageInt(0); this.power = new MageInt(0);
this.toughness = new MageInt(0); this.toughness = new MageInt(0);
// You may have Vesuvan Doppelganger enter the battlefield as a copy of any creature on the battlefield except it doesn't copy that creature's color and it gains "At the beginning of your upkeep, you may have this creature become a copy of target creature except it doesn't copy that creature's color. If you do, this creature gains this ability." // You may have Vesuvan Doppelganger enter the battlefield as a copy of any creature on the battlefield except it doesn't copy that creature's color and it has "At the beginning of your upkeep, you may have this creature become a copy of target creature except it doesn't copy that creature's color and it has this ability."
Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new EntersBattlefieldEffect(new VesuvanDoppelgangerCopyEffect(), rule, true)); Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new EntersBattlefieldEffect(new VesuvanDoppelgangerCopyEffect(), rule, true));
this.addAbility(ability); this.addAbility(ability);
@ -56,7 +56,7 @@ public final class VesuvanDoppelganger extends CardImpl {
class VesuvanDoppelgangerCopyEffect extends OneShotEffect { class VesuvanDoppelgangerCopyEffect extends OneShotEffect {
private static final String rule2 = "At the beginning of your upkeep, you may have this creature become a copy of target creature except it doesn't copy that creature's color. If you do, this creature gains this ability."; private static final String rule2 = "At the beginning of your upkeep, you may have this creature become a copy of target creature except it doesn't copy that creature's color and it has this ability.";
public VesuvanDoppelgangerCopyEffect() { public VesuvanDoppelgangerCopyEffect() {
super(Outcome.Copy); super(Outcome.Copy);

View file

@ -58,7 +58,7 @@ public final class VesuvanShapeshifter extends CardImpl {
ability.setWorksFaceDown(false); ability.setWorksFaceDown(false);
this.addAbility(ability); this.addAbility(ability);
// and gains "At the beginning of your upkeep, you may turn this creature face down". // and has "At the beginning of your upkeep, you may turn this creature face down".
effect = new VesuvanShapeshifterFaceDownEffect(); effect = new VesuvanShapeshifterFaceDownEffect();
ability = new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD, effect, TargetController.YOU, true); ability = new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD, effect, TargetController.YOU, true);
this.addAbility(ability); this.addAbility(ability);
@ -102,7 +102,7 @@ class VesuvanShapeshifterEffect extends OneShotEffect {
public VesuvanShapeshifterEffect() { public VesuvanShapeshifterEffect() {
super(Outcome.Copy); super(Outcome.Copy);
staticText = "have {this} become a copy of a creature and gain this ability"; staticText = "have {this} become a copy of a creature, except it has this ability";
} }
public VesuvanShapeshifterEffect(final VesuvanShapeshifterEffect effect) { public VesuvanShapeshifterEffect(final VesuvanShapeshifterEffect effect) {

View file

@ -23,7 +23,7 @@ public class KikiJikiMirrorBreakerTest extends CardTestPlayerBase {
addCard(Zone.BATTLEFIELD, playerA, "Kiki-Jiki, Mirror Breaker", 1); addCard(Zone.BATTLEFIELD, playerA, "Kiki-Jiki, Mirror Breaker", 1);
addCard(Zone.BATTLEFIELD, playerA, "Voice of Resurgence", 1); addCard(Zone.BATTLEFIELD, playerA, "Voice of Resurgence", 1);
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{T}: Create a token that's a copy of target nonlegendary creature you control. That token has haste. Sacrifice it at the beginning of the next end step."); activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{T}: Create a token that's a copy of target nonlegendary creature you control, except it has haste. Sacrifice it at the beginning of the next end step.");
setStopAt(1, PhaseStep.BEGIN_COMBAT); setStopAt(1, PhaseStep.BEGIN_COMBAT);
execute(); execute();
@ -39,7 +39,7 @@ public class KikiJikiMirrorBreakerTest extends CardTestPlayerBase {
addCard(Zone.BATTLEFIELD, playerA, "Kiki-Jiki, Mirror Breaker", 1); addCard(Zone.BATTLEFIELD, playerA, "Kiki-Jiki, Mirror Breaker", 1);
addCard(Zone.BATTLEFIELD, playerA, "Voice of Resurgence", 1); addCard(Zone.BATTLEFIELD, playerA, "Voice of Resurgence", 1);
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{T}: Create a token that's a copy of target nonlegendary creature you control. That token has haste. Sacrifice it at the beginning of the next end step."); activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{T}: Create a token that's a copy of target nonlegendary creature you control, except it has haste. Sacrifice it at the beginning of the next end step.");
setStopAt(1, PhaseStep.END_TURN); setStopAt(1, PhaseStep.END_TURN);
execute(); execute();
@ -60,7 +60,7 @@ public class KikiJikiMirrorBreakerTest extends CardTestPlayerBase {
// Flamebreak deals 3 damage to each creature without flying and each player. Creatures dealt damage this way can't be regenerated this turn. // Flamebreak deals 3 damage to each creature without flying and each player. Creatures dealt damage this way can't be regenerated this turn.
addCard(Zone.HAND, playerB, "Flamebreak"); addCard(Zone.HAND, playerB, "Flamebreak");
activateAbility(2, PhaseStep.PRECOMBAT_MAIN, playerA, "{T}: Create a token that's a copy of target nonlegendary creature you control. That token has haste. Sacrifice it at the beginning of the next end step."); activateAbility(2, PhaseStep.PRECOMBAT_MAIN, playerA, "{T}: Create a token that's a copy of target nonlegendary creature you control, except it has haste. Sacrifice it at the beginning of the next end step.");
castSpell(2, PhaseStep.POSTCOMBAT_MAIN, playerB, "Flamebreak"); castSpell(2, PhaseStep.POSTCOMBAT_MAIN, playerB, "Flamebreak");
setStopAt(2, PhaseStep.END_TURN); setStopAt(2, PhaseStep.END_TURN);
@ -95,7 +95,7 @@ public class KikiJikiMirrorBreakerTest extends CardTestPlayerBase {
castSpell(2, PhaseStep.UPKEEP, playerA, "Blustersquall", "Humble Defector"); // Tap nontoken Defector so only the Token can be used later castSpell(2, PhaseStep.UPKEEP, playerA, "Blustersquall", "Humble Defector"); // Tap nontoken Defector so only the Token can be used later
activateAbility(2, PhaseStep.PRECOMBAT_MAIN, playerB, "{T}: Create a token that's a copy of target nonlegendary creature you control. That token has haste. Sacrifice it at the beginning of the next end step."); activateAbility(2, PhaseStep.PRECOMBAT_MAIN, playerB, "{T}: Create a token that's a copy of target nonlegendary creature you control, except it has haste. Sacrifice it at the beginning of the next end step.");
activateAbility(2, PhaseStep.POSTCOMBAT_MAIN, playerB, "{T}: Draw two cards. Target opponent gains control"); activateAbility(2, PhaseStep.POSTCOMBAT_MAIN, playerB, "{T}: Draw two cards. Target opponent gains control");
@ -137,7 +137,7 @@ public class KikiJikiMirrorBreakerTest extends CardTestPlayerBase {
castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Body Double"); castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Body Double");
setChoice(playerB, "Silvercoat Lion"); setChoice(playerB, "Silvercoat Lion");
activateAbility(2, PhaseStep.PRECOMBAT_MAIN, playerB, "{T}: Create a token that's a copy of target nonlegendary creature you control. That token has haste. Sacrifice it at the beginning of the next end step."); activateAbility(2, PhaseStep.PRECOMBAT_MAIN, playerB, "{T}: Create a token that's a copy of target nonlegendary creature you control, except it has haste. Sacrifice it at the beginning of the next end step.");
attack(2, playerB, "Silvercoat Lion"); attack(2, playerB, "Silvercoat Lion");
setStopAt(2, PhaseStep.POSTCOMBAT_MAIN); setStopAt(2, PhaseStep.POSTCOMBAT_MAIN);

View file

@ -72,7 +72,13 @@ public class VerifyCardDataTest {
// subtype // subtype
skipListCreate("SUBTYPE"); skipListCreate("SUBTYPE");
skipListAddName("SUBTYPE", "Dragon Egg"); // uncomment when MTGJSON is updated with M19 skipListAddName("SUBTYPE", "Dragon Egg"); // remove when MTGJSON is updated with M19
skipListAddName("SUBTYPE", "Rukh Egg"); // remove when MTGJSON is updated with M19
skipListAddName("SUBTYPE", "Roc Egg"); // remove when MTGJSON is updated with M19
skipListAddName("SUBTYPE", "Summoner's Egg"); // remove when MTGJSON is updated with M19
skipListAddName("SUBTYPE", "Ludevic's Test Subject"); // remove when MTGJSON is updated with M19
skipListAddName("SUBTYPE", "Prowling Pangolin"); // remove when MTGJSON is updated with M19
skipListAddName("SUBTYPE", "Electryte"); // remove when MTGJSON is updated with M19
// number // number
skipListCreate("NUMBER"); skipListCreate("NUMBER");

View file

@ -230,7 +230,7 @@ public class AlternativeCostSourceAbility extends StaticAbility implements Alter
if (condition == null || alternateCosts.size() == 1) { if (condition == null || alternateCosts.size() == 1) {
sb.append(" rather than pay this spell's mana cost"); sb.append(" rather than pay this spell's mana cost");
} else if (alternateCosts.isEmpty()) { } else if (alternateCosts.isEmpty()) {
sb.append("cast {this} without paying its mana cost"); sb.append("cast this spell without paying its mana cost");
} }
sb.append('.'); sb.append('.');
if (numberCosts == 1 && remarkText != null) { if (numberCosts == 1 && remarkText != null) {

View file

@ -33,7 +33,7 @@ public class CreateTokenCopyTargetEffect extends OneShotEffect {
private final UUID playerId; private final UUID playerId;
private final CardType additionalCardType; private final CardType additionalCardType;
private boolean gainsHaste; private boolean hasHaste;
private final int number; private final int number;
private List<Permanent> addedTokenPermanents; private List<Permanent> addedTokenPermanents;
private SubType additionalSubType; private SubType additionalSubType;
@ -62,12 +62,12 @@ public class CreateTokenCopyTargetEffect extends OneShotEffect {
this(playerId, null, false); this(playerId, null, false);
} }
public CreateTokenCopyTargetEffect(UUID playerId, CardType additionalCardType, boolean gainsHaste) { public CreateTokenCopyTargetEffect(UUID playerId, CardType additionalCardType, boolean hasHaste) {
this(playerId, additionalCardType, gainsHaste, 1); this(playerId, additionalCardType, hasHaste, 1);
} }
public CreateTokenCopyTargetEffect(UUID playerId, CardType additionalCardType, boolean gainsHaste, int number) { public CreateTokenCopyTargetEffect(UUID playerId, CardType additionalCardType, boolean hasHaste, int number) {
this(playerId, additionalCardType, gainsHaste, number, false, false); this(playerId, additionalCardType, hasHaste, number, false, false);
} }
/** /**
@ -75,24 +75,24 @@ public class CreateTokenCopyTargetEffect extends OneShotEffect {
* @param playerId null the token is controlled/owned by the controller of * @param playerId null the token is controlled/owned by the controller of
* the source ability * the source ability
* @param additionalCardType the token gains this card type in addition * @param additionalCardType the token gains this card type in addition
* @param gainsHaste the token gains haste * @param hasHaste the token gains haste
* @param number number of tokens to put into play * @param number number of tokens to put into play
* @param tapped * @param tapped
* @param attacking * @param attacking
*/ */
public CreateTokenCopyTargetEffect(UUID playerId, CardType additionalCardType, boolean gainsHaste, int number, boolean tapped, boolean attacking) { public CreateTokenCopyTargetEffect(UUID playerId, CardType additionalCardType, boolean hasHaste, int number, boolean tapped, boolean attacking) {
this(playerId, additionalCardType, gainsHaste, number, tapped, attacking, null); this(playerId, additionalCardType, hasHaste, number, tapped, attacking, null);
} }
public CreateTokenCopyTargetEffect(UUID playerId, CardType additionalCardType, boolean gainsHaste, int number, boolean tapped, boolean attacking, UUID attackedPlayer) { public CreateTokenCopyTargetEffect(UUID playerId, CardType additionalCardType, boolean hasHaste, int number, boolean tapped, boolean attacking, UUID attackedPlayer) {
this(playerId, additionalCardType, gainsHaste, number, tapped, attacking, attackedPlayer, Integer.MIN_VALUE, Integer.MIN_VALUE, false); this(playerId, additionalCardType, hasHaste, number, tapped, attacking, attackedPlayer, Integer.MIN_VALUE, Integer.MIN_VALUE, false);
} }
public CreateTokenCopyTargetEffect(UUID playerId, CardType additionalCardType, boolean gainsHaste, int number, boolean tapped, boolean attacking, UUID attackedPlayer, int power, int toughness, boolean gainsFlying) { public CreateTokenCopyTargetEffect(UUID playerId, CardType additionalCardType, boolean hasHaste, int number, boolean tapped, boolean attacking, UUID attackedPlayer, int power, int toughness, boolean gainsFlying) {
super(Outcome.PutCreatureInPlay); super(Outcome.PutCreatureInPlay);
this.playerId = playerId; this.playerId = playerId;
this.additionalCardType = additionalCardType; this.additionalCardType = additionalCardType;
this.gainsHaste = gainsHaste; this.hasHaste = hasHaste;
this.addedTokenPermanents = new ArrayList<>(); this.addedTokenPermanents = new ArrayList<>();
this.number = number; this.number = number;
this.tapped = tapped; this.tapped = tapped;
@ -107,7 +107,7 @@ public class CreateTokenCopyTargetEffect extends OneShotEffect {
super(effect); super(effect);
this.playerId = effect.playerId; this.playerId = effect.playerId;
this.additionalCardType = effect.additionalCardType; this.additionalCardType = effect.additionalCardType;
this.gainsHaste = effect.gainsHaste; this.hasHaste = effect.hasHaste;
this.addedTokenPermanents = new ArrayList<>(effect.addedTokenPermanents); this.addedTokenPermanents = new ArrayList<>(effect.addedTokenPermanents);
this.number = effect.number; this.number = effect.number;
this.additionalSubType = effect.additionalSubType; this.additionalSubType = effect.additionalSubType;
@ -187,7 +187,7 @@ public class CreateTokenCopyTargetEffect extends OneShotEffect {
if (additionalCardType != null && !token.getCardType().contains(additionalCardType)) { if (additionalCardType != null && !token.getCardType().contains(additionalCardType)) {
token.addCardType(additionalCardType); token.addCardType(additionalCardType);
} }
if (gainsHaste) { if (hasHaste) {
token.addAbility(HasteAbility.getInstance()); token.addAbility(HasteAbility.getInstance());
} }
if (gainsFlying) { if (gainsFlying) {