From b7fe361ca4a7427a38927a8e77be29b6f857c83e Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Wed, 21 Nov 2012 23:31:32 +0100 Subject: [PATCH] Changed some cards with kicker and multikicker to be more accurate. --- .../src/mage/sets/apocalypse/Anavolver.java | 43 ++++++++++------ .../src/mage/sets/apocalypse/Cetavolver.java | 41 ++++++++++----- .../src/mage/sets/apocalypse/Degavolver.java | 41 ++++++++++----- .../src/mage/sets/worldwake/ApexHawks.java | 14 +++-- .../sets/worldwake/BloodhuskRitualist.java | 14 +++-- .../src/mage/sets/worldwake/CometStorm.java | 12 ++--- .../src/mage/sets/worldwake/EnclaveElite.java | 14 +++-- .../sets/worldwake/EverflowingChalice.java | 11 ++-- .../src/mage/sets/worldwake/GnarlidPack.java | 12 +++-- .../mage/sets/worldwake/JoragaWarcaller.java | 51 +++---------------- .../sets/worldwake/LightkeeperOfEmeria.java | 12 +++-- .../src/mage/sets/worldwake/QuagVampires.java | 14 +++-- .../mage/sets/worldwake/SkitterOfLizards.java | 18 +++++-- .../sets/worldwake/StrengthOfTheTajuru.java | 15 +++--- .../sets/worldwake/WolfbriarElemental.java | 11 ++-- .../src/mage/sets/zendikar/AetherFigment.java | 2 +- .../src/mage/sets/zendikar/BoldDefense.java | 20 +++++--- .../sets/zendikar/GatekeeperOfMalakir.java | 2 +- .../mage/sets/zendikar/GoblinBushwhacker.java | 15 ++++-- .../mage/sets/zendikar/GoblinRuinblaster.java | 26 +++++----- .../sets/zendikar/HeartstabberMosquito.java | 17 +++++-- .../src/mage/sets/zendikar/IntoTheRoil.java | 19 ++++--- .../src/mage/sets/zendikar/KorAeronaut.java | 2 +- .../mage/sets/zendikar/KorSanctifiers.java | 6 ++- .../mage/sets/zendikar/MarshCasualties.java | 2 +- .../src/mage/sets/zendikar/MoldShambler.java | 15 ++++-- .../mage/sets/zendikar/OranRiefRecluse.java | 20 ++++---- .../src/mage/sets/zendikar/TempestOwl.java | 17 ++++--- .../src/mage/sets/zendikar/TorchSlinger.java | 19 ++++--- .../src/mage/sets/zendikar/VampiresBite.java | 19 ++++--- .../mage/sets/zendikar/VinesOfVastwood.java | 2 +- 31 files changed, 311 insertions(+), 215 deletions(-) diff --git a/Mage.Sets/src/mage/sets/apocalypse/Anavolver.java b/Mage.Sets/src/mage/sets/apocalypse/Anavolver.java index be45615f3a..de5bd117ca 100644 --- a/Mage.Sets/src/mage/sets/apocalypse/Anavolver.java +++ b/Mage.Sets/src/mage/sets/apocalypse/Anavolver.java @@ -29,21 +29,21 @@ package mage.sets.apocalypse; import java.util.UUID; - -import mage.Constants; import mage.Constants.CardType; +import mage.Constants.Duration; import mage.Constants.Rarity; +import mage.Constants.Zone; import mage.MageInt; -import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.condition.common.KickedCostCondition; import mage.abilities.costs.common.PayLifeCost; -import mage.abilities.costs.mana.ColoredManaCost; -import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.costs.mana.KickerManaCost; +import mage.abilities.effects.EntersBattlefieldEffect; import mage.abilities.effects.common.RegenerateSourceEffect; import mage.abilities.effects.common.continious.GainAbilitySourceEffect; import mage.abilities.effects.common.counter.AddCountersSourceEffect; import mage.abilities.keyword.FlyingAbility; -import mage.abilities.keyword.KickerAbility; import mage.cards.CardImpl; import mage.counters.CounterType; @@ -59,14 +59,28 @@ public class Anavolver extends CardImpl { this.color.setGreen(true); this.power = new MageInt(3); this.toughness = new MageInt(3); - Ability firstAbility = new KickerAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance(2)), false); - firstAbility.addEffect(new GainAbilitySourceEffect(FlyingAbility.getInstance(), Constants.Duration.WhileOnBattlefield)); - firstAbility.addCost(new ManaCostsImpl("{1}{U}")); - this.addAbility(firstAbility); - Ability secondAbility = new KickerAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), false); - secondAbility.addEffect(new GainAbilitySourceEffect(new SimpleActivatedAbility(Constants.Zone.BATTLEFIELD, new RegenerateSourceEffect(), new PayLifeCost(3)), Constants.Duration.WhileOnBattlefield)); - secondAbility.addCost(new ColoredManaCost(Constants.ColoredManaSymbol.B)); - this.addAbility(secondAbility); + + // Kicker {1}{U} and/or {B} (You may pay an additional {1}{U} and/or {B} as you cast this spell.) + KickerManaCost kicker1 = new KickerManaCost("{1}{U}"); + this.getSpellAbility().addOptionalCost(kicker1); + KickerManaCost kicker2 = new KickerManaCost("{B}"); + this.getSpellAbility().addOptionalCost(kicker2); + + // If Anavolver was kicked with its {1}{U} kicker, it enters the battlefield with two +1/+1 counters on it and with flying. + EntersBattlefieldAbility ability1 = new EntersBattlefieldAbility( + new AddCountersSourceEffect(CounterType.P1P1.createInstance(2),false), + new KickedCostCondition(kicker1), true, "If {this} was kicked with its {1}{U} kicker, it enters the battlefield with two +1/+1 counters on it and with flying.", + "{this} enters the battlefield with two +1/+1 counters on it and with flying"); + ((EntersBattlefieldEffect)ability1.getEffects().get(0)).addEffect(new GainAbilitySourceEffect(FlyingAbility.getInstance(), Duration.WhileOnBattlefield)); + this.addAbility(ability1); + + // If Anavolver was kicked with its {B} kicker, it enters the battlefield with a +1/+1 counter on it and with "Pay 3 life: Regenerate Anavolver." + EntersBattlefieldAbility ability2 = new EntersBattlefieldAbility( + new AddCountersSourceEffect(CounterType.P1P1.createInstance(1),false), new KickedCostCondition(kicker2), true, + "If {this} was kicked with its {B} kicker, it enters the battlefield with a +1/+1 counter on it and with \"Pay 3 life: Regenerate Anavolver.\"", + "{this} enters the battlefield with a +1/+1 counter on it and with \"Pay 3 life: Regenerate Anavolver.\""); + ((EntersBattlefieldEffect)ability2.getEffects().get(0)).addEffect(new GainAbilitySourceEffect(new SimpleActivatedAbility(Zone.BATTLEFIELD, new RegenerateSourceEffect(), new PayLifeCost(3)), Duration.WhileOnBattlefield)); + this.addAbility(ability2); } public Anavolver(final Anavolver card) { @@ -77,5 +91,4 @@ public class Anavolver extends CardImpl { public Anavolver copy() { return new Anavolver(this); } - } diff --git a/Mage.Sets/src/mage/sets/apocalypse/Cetavolver.java b/Mage.Sets/src/mage/sets/apocalypse/Cetavolver.java index 7075a8227e..4c9b217926 100644 --- a/Mage.Sets/src/mage/sets/apocalypse/Cetavolver.java +++ b/Mage.Sets/src/mage/sets/apocalypse/Cetavolver.java @@ -28,18 +28,17 @@ package mage.sets.apocalypse; import java.util.UUID; - -import mage.Constants; import mage.Constants.CardType; +import mage.Constants.Duration; import mage.Constants.Rarity; import mage.MageInt; -import mage.abilities.Ability; -import mage.abilities.costs.mana.ColoredManaCost; -import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.common.EntersBattlefieldAbility; +import mage.abilities.condition.common.KickedCostCondition; +import mage.abilities.costs.mana.KickerManaCost; +import mage.abilities.effects.EntersBattlefieldEffect; import mage.abilities.effects.common.continious.GainAbilitySourceEffect; import mage.abilities.effects.common.counter.AddCountersSourceEffect; import mage.abilities.keyword.FirstStrikeAbility; -import mage.abilities.keyword.KickerAbility; import mage.abilities.keyword.TrampleAbility; import mage.cards.CardImpl; import mage.counters.CounterType; @@ -57,14 +56,28 @@ public class Cetavolver extends CardImpl { this.color.setBlue(true); this.power = new MageInt(1); this.toughness = new MageInt(1); - Ability firstAbility = new KickerAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance(2)), false); - firstAbility.addEffect(new GainAbilitySourceEffect(FirstStrikeAbility.getInstance(), Constants.Duration.WhileOnBattlefield)); - firstAbility.addCost(new ManaCostsImpl("{1}{R}")); - this.addAbility(firstAbility); - Ability secondAbility = new KickerAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), false); - secondAbility.addEffect(new GainAbilitySourceEffect(TrampleAbility.getInstance(), Constants.Duration.WhileOnBattlefield)); - secondAbility.addCost(new ColoredManaCost(Constants.ColoredManaSymbol.G)); - this.addAbility(secondAbility); + + // Kicker {1}{R} and/or {G} (You may pay an additional {1}{R} and/or {G} as you cast this spell.) + KickerManaCost kicker1 = new KickerManaCost("{1}{R}"); + this.getSpellAbility().addOptionalCost(kicker1); + KickerManaCost kicker2 = new KickerManaCost("{G}"); + this.getSpellAbility().addOptionalCost(kicker2); + + // If Cetavolver was kicked with its {1}{R} kicker, it enters the battlefield with two +1/+1 counters on it and with first strike. + EntersBattlefieldAbility ability1 = new EntersBattlefieldAbility( + new AddCountersSourceEffect(CounterType.P1P1.createInstance(2),false), + new KickedCostCondition(kicker1), true, "If Cetavolver was kicked with its {1}{R} kicker, it enters the battlefield with two +1/+1 counters on it and with first strike.", + "{this} enters the battlefield with two +1/+1 counters on it and with first strike"); + ((EntersBattlefieldEffect)ability1.getEffects().get(0)).addEffect(new GainAbilitySourceEffect(FirstStrikeAbility.getInstance(), Duration.WhileOnBattlefield)); + this.addAbility(ability1); + + // If Cetavolver was kicked with its {G} kicker, it enters the battlefield with a +1/+1 counter on it and with trample. + EntersBattlefieldAbility ability2 = new EntersBattlefieldAbility( + new AddCountersSourceEffect(CounterType.P1P1.createInstance(1),false), new KickedCostCondition(kicker2), true, + "If Cetavolver was kicked with its {G} kicker, it enters the battlefield with a +1/+1 counter on it and with trample.", + "{this} enters the battlefield with a +1/+1 counter on it and with trample"); + ((EntersBattlefieldEffect)ability2.getEffects().get(0)).addEffect(new GainAbilitySourceEffect(TrampleAbility.getInstance(), Duration.WhileOnBattlefield)); + this.addAbility(ability2); } public Cetavolver(final Cetavolver card) { diff --git a/Mage.Sets/src/mage/sets/apocalypse/Degavolver.java b/Mage.Sets/src/mage/sets/apocalypse/Degavolver.java index 7615285d6d..4ae450e0da 100644 --- a/Mage.Sets/src/mage/sets/apocalypse/Degavolver.java +++ b/Mage.Sets/src/mage/sets/apocalypse/Degavolver.java @@ -28,21 +28,22 @@ package mage.sets.apocalypse; import java.util.UUID; - import mage.Constants; import mage.Constants.CardType; +import mage.Constants.Duration; import mage.Constants.Rarity; +import mage.Constants.Zone; import mage.MageInt; -import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.condition.common.KickedCostCondition; import mage.abilities.costs.common.PayLifeCost; -import mage.abilities.costs.mana.ColoredManaCost; -import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.costs.mana.KickerManaCost; +import mage.abilities.effects.EntersBattlefieldEffect; import mage.abilities.effects.common.RegenerateSourceEffect; import mage.abilities.effects.common.continious.GainAbilitySourceEffect; import mage.abilities.effects.common.counter.AddCountersSourceEffect; import mage.abilities.keyword.FirstStrikeAbility; -import mage.abilities.keyword.KickerAbility; import mage.cards.CardImpl; import mage.counters.CounterType; @@ -59,14 +60,28 @@ public class Degavolver extends CardImpl { this.color.setWhite(true); this.power = new MageInt(1); this.toughness = new MageInt(1); - Ability firstAbility = new KickerAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance(2)), false); - firstAbility.addEffect(new GainAbilitySourceEffect(new SimpleActivatedAbility(Constants.Zone.BATTLEFIELD, new RegenerateSourceEffect(), new PayLifeCost(3)), Constants.Duration.WhileOnBattlefield)); - firstAbility.addCost(new ManaCostsImpl("{1}{B}")); - this.addAbility(firstAbility); - Ability secondAbility = new KickerAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), false); - secondAbility.addEffect(new GainAbilitySourceEffect(FirstStrikeAbility.getInstance(), Constants.Duration.WhileOnBattlefield)); - secondAbility.addCost(new ColoredManaCost(Constants.ColoredManaSymbol.R)); - this.addAbility(secondAbility); + + // Kicker {1}{B} and/or {R} (You may pay an additional {1}{B} and/or {R} as you cast this spell.) + KickerManaCost kicker1 = new KickerManaCost("{1}{B}"); + this.getSpellAbility().addOptionalCost(kicker1); + KickerManaCost kicker2 = new KickerManaCost("{R}"); + this.getSpellAbility().addOptionalCost(kicker2); + + // If Degavolver was kicked with its {1}{B} kicker, it enters the battlefield with two +1/+1 counters on it and with "Pay 3 life: Regenerate Degavolver." + EntersBattlefieldAbility ability1 = new EntersBattlefieldAbility( + new AddCountersSourceEffect(CounterType.P1P1.createInstance(2),false), + new KickedCostCondition(kicker1), true, "If Degavolver was kicked with its {1}{B} kicker, it enters the battlefield with two +1/+1 counters on it and with \"Pay 3 life: Regenerate Degavolver.\"", + "{this} enters the battlefield with two +1/+1 counters on it and with \"Pay 3 life: Regenerate Degavolver.\""); + ((EntersBattlefieldEffect)ability1.getEffects().get(0)).addEffect(new GainAbilitySourceEffect(new SimpleActivatedAbility(Zone.BATTLEFIELD, new RegenerateSourceEffect(), new PayLifeCost(3)), Constants.Duration.WhileOnBattlefield)); + this.addAbility(ability1); + + // If Degavolver was kicked with its {R} kicker, it enters the battlefield with a +1/+1 counter on it and with first strike. + EntersBattlefieldAbility ability2 = new EntersBattlefieldAbility( + new AddCountersSourceEffect(CounterType.P1P1.createInstance(1),false), new KickedCostCondition(kicker2), true, + "If Degavolver was kicked with its {R} kicker, it enters the battlefield with a +1/+1 counter on it and with first strike.", + "{this} enters the battlefield with a +1/+1 counter on it and with first strike"); + ((EntersBattlefieldEffect)ability2.getEffects().get(0)).addEffect(new GainAbilitySourceEffect(FirstStrikeAbility.getInstance(), Duration.WhileOnBattlefield)); + this.addAbility(ability2); } public Degavolver(final Degavolver card) { diff --git a/Mage.Sets/src/mage/sets/worldwake/ApexHawks.java b/Mage.Sets/src/mage/sets/worldwake/ApexHawks.java index 0cc93deb38..efaeefe323 100644 --- a/Mage.Sets/src/mage/sets/worldwake/ApexHawks.java +++ b/Mage.Sets/src/mage/sets/worldwake/ApexHawks.java @@ -31,7 +31,9 @@ import java.util.UUID; import mage.Constants.CardType; import mage.Constants.Rarity; import mage.MageInt; +import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.dynamicvalue.common.MultikickerCount; import mage.abilities.effects.common.counter.AddCountersSourceEffect; import mage.abilities.keyword.FlyingAbility; import mage.abilities.keyword.MultikickerAbility; @@ -53,10 +55,16 @@ public class ApexHawks extends CardImpl { this.power = new MageInt(2); this.toughness = new MageInt(2); + // Multikicker (You may pay an additional any number of times as you cast this spell.) + this.addAbility(new MultikickerAbility(new ManaCostsImpl("{1}{W}"))); + + // Flying this.addAbility(FlyingAbility.getInstance()); - MultikickerAbility ability = new MultikickerAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance(1)), false); - ability.addManaCost(new ManaCostsImpl("{1}{W}")); - this.addAbility(ability); + + // Apex Hawks enters the battlefield with a +1/+1 counter on it for each time it was kicked. + this.addAbility(new EntersBattlefieldAbility( + new AddCountersSourceEffect(CounterType.P1P1.createInstance(0), new MultikickerCount(), true) + ,"with a +1/+1 counter on it for each time it was kicked")); } public ApexHawks(final ApexHawks card) { diff --git a/Mage.Sets/src/mage/sets/worldwake/BloodhuskRitualist.java b/Mage.Sets/src/mage/sets/worldwake/BloodhuskRitualist.java index e57657e4da..2e661a824e 100644 --- a/Mage.Sets/src/mage/sets/worldwake/BloodhuskRitualist.java +++ b/Mage.Sets/src/mage/sets/worldwake/BloodhuskRitualist.java @@ -29,12 +29,13 @@ package mage.sets.worldwake; import java.util.UUID; - -import mage.Constants; import mage.Constants.CardType; import mage.Constants.Rarity; import mage.MageInt; -import mage.abilities.costs.mana.ColoredManaCost; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.dynamicvalue.common.MultikickerCount; import mage.abilities.effects.common.DiscardTargetEffect; import mage.abilities.keyword.MultikickerAbility; import mage.cards.CardImpl; @@ -55,9 +56,12 @@ public class BloodhuskRitualist extends CardImpl { this.power = new MageInt(2); this.toughness = new MageInt(2); - MultikickerAbility ability = new MultikickerAbility(new DiscardTargetEffect(1), false); + // Multikicker (You may pay an additional {B} any number of times as you cast this spell.) + this.addAbility(new MultikickerAbility(new ManaCostsImpl("{B}"))); + + // When Bloodhusk Ritualist enters the battlefield, target opponent discards a card for each time it was kicked. + Ability ability = new EntersBattlefieldTriggeredAbility(new DiscardTargetEffect(new MultikickerCount())); ability.addTarget(new TargetOpponent()); - ability.addManaCost(new ColoredManaCost(Constants.ColoredManaSymbol.B)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/sets/worldwake/CometStorm.java b/Mage.Sets/src/mage/sets/worldwake/CometStorm.java index 1b06d0a374..5f085d08ce 100644 --- a/Mage.Sets/src/mage/sets/worldwake/CometStorm.java +++ b/Mage.Sets/src/mage/sets/worldwake/CometStorm.java @@ -29,13 +29,13 @@ package mage.sets.worldwake; import java.util.List; import java.util.UUID; -import mage.Constants; import mage.Constants.CardType; +import mage.Constants.Outcome; import mage.Constants.Rarity; import mage.abilities.Ability; -import mage.abilities.common.EmptyEffect; -import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.OneShotEffect; +import mage.abilities.keyword.MultikickerAbility; import mage.cards.CardImpl; import mage.game.Game; import mage.game.permanent.Permanent; @@ -55,7 +55,7 @@ public class CometStorm extends CardImpl { this.color.setRed(true); // Multikicker {1} - this.addAbility(new SimpleStaticAbility(Constants.Zone.ALL, new EmptyEffect("Multikicker {1}"))); + this.addAbility(new MultikickerAbility(new ManaCostsImpl("{1}"))); // Choose target creature or player, then choose another target creature or player for each time Comet Storm was kicked. Comet Storm deals X damage to each of them. this.getSpellAbility().addEffect(new CometStormEffect()); @@ -74,7 +74,7 @@ public class CometStorm extends CardImpl { class CometStormEffect extends OneShotEffect { public CometStormEffect() { - super(Constants.Outcome.Damage); + super(Outcome.Damage); staticText = "Choose target creature or player, then choose another target creature or player for each time Comet Storm was kicked. Comet Storm deals X damage to each of them"; } @@ -89,7 +89,7 @@ class CometStormEffect extends OneShotEffect { Player you = game.getPlayer(source.getControllerId()); TargetCreatureOrPlayer target = new TargetCreatureOrPlayer(amount); if (you != null) { - if (target.canChoose(source.getControllerId(), game) && target.choose(Constants.Outcome.Damage, source.getControllerId(), source.getId(), game)) { + if (target.canChoose(source.getControllerId(), game) && target.choose(Outcome.Damage, source.getControllerId(), source.getId(), game)) { if (!target.getTargets().isEmpty()) { List targets = target.getTargets(); for (UUID uuid : targets) { diff --git a/Mage.Sets/src/mage/sets/worldwake/EnclaveElite.java b/Mage.Sets/src/mage/sets/worldwake/EnclaveElite.java index 449f1eaaf8..77a03c66c4 100644 --- a/Mage.Sets/src/mage/sets/worldwake/EnclaveElite.java +++ b/Mage.Sets/src/mage/sets/worldwake/EnclaveElite.java @@ -31,7 +31,9 @@ import java.util.UUID; import mage.Constants.CardType; import mage.Constants.Rarity; import mage.MageInt; +import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.dynamicvalue.common.MultikickerCount; import mage.abilities.effects.common.counter.AddCountersSourceEffect; import mage.abilities.keyword.IslandwalkAbility; import mage.abilities.keyword.MultikickerAbility; @@ -54,10 +56,16 @@ public class EnclaveElite extends CardImpl { this.power = new MageInt(2); this.toughness = new MageInt(2); + // Multikicker (You may pay an additional any number of times as you cast this spell.) + this.addAbility(new MultikickerAbility(new ManaCostsImpl("{1}{U}"))); + + // Islandwalk this.addAbility(new IslandwalkAbility()); - MultikickerAbility ability = new MultikickerAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance(1)), false); - ability.addManaCost(new ManaCostsImpl("{1}{U}")); - this.addAbility(ability); + + // Enclave Elite enters the battlefield with a +1/+1 counter on it for each time it was kicked. + this.addAbility(new EntersBattlefieldAbility( + new AddCountersSourceEffect(CounterType.P1P1.createInstance(0), new MultikickerCount(), true), + "with a +1/+1 counter on it for each time it was kicked")); } public EnclaveElite(final EnclaveElite card) { diff --git a/Mage.Sets/src/mage/sets/worldwake/EverflowingChalice.java b/Mage.Sets/src/mage/sets/worldwake/EverflowingChalice.java index db2e102784..fa76bd1458 100644 --- a/Mage.Sets/src/mage/sets/worldwake/EverflowingChalice.java +++ b/Mage.Sets/src/mage/sets/worldwake/EverflowingChalice.java @@ -53,21 +53,21 @@ import java.util.UUID; */ public class EverflowingChalice extends CardImpl { - protected static final String rule = "Everflowing Chalice enters the battlefield with a charge counter on it for each time it was kicked"; + protected static final String rule = "Everflowing Chalice enters the battlefield with a charge counter on it for each time it was kicked."; public EverflowingChalice(UUID ownerId) { super(ownerId, 123, "Everflowing Chalice", Rarity.UNCOMMON, new CardType[]{CardType.ARTIFACT}, "{0}"); this.expansionSetCode = "WWK"; - // Everflowing Chalice enters the battlefield with a charge counter on it for each time it was kicked. - Ability ability1 = new EntersBattlefieldAbility(new EverflowingChaliceAddCountersEffect()); - this.addAbility(ability1); - // Multikicker {2} (You may pay an additional {2} any number of times as you cast this spell.) MultikickerAbility ability = new MultikickerAbility(new EmptyEffect(rule), false); ability.addManaCost(new GenericManaCost(2)); this.addAbility(ability); + // Everflowing Chalice enters the battlefield with a charge counter on it for each time it was kicked. + Ability ability1 = new EntersBattlefieldAbility(new EverflowingChaliceAddCountersEffect(), null, true, rule, null); + this.addAbility(ability1); + this.addAbility(new DynamicManaAbility(Mana.ColorlessMana, new CountersCount(CounterType.CHARGE))); } @@ -86,7 +86,6 @@ class EverflowingChaliceAddCountersEffect extends OneShotEffect { this.power = new MageInt(2); this.toughness = new MageInt(2); - MultikickerAbility ability = new MultikickerAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance(1)), false); - ability.addManaCost(new ManaCostsImpl("{1}{G}")); - this.addAbility(ability); + // Multikicker (You may pay an additional any number of times as you cast this spell.) + this.addAbility(new MultikickerAbility(new ManaCostsImpl("{1}{G}"))); + + // Gnarlid Pack enters the battlefield with a +1/+1 counter on it for each time it was kicked. + this.addAbility(new EntersBattlefieldAbility( + new AddCountersSourceEffect(CounterType.P1P1.createInstance(0), new MultikickerCount(), true), + "with a +1/+1 counter on it for each time it was kicked")); } public GnarlidPack(final GnarlidPack card) { diff --git a/Mage.Sets/src/mage/sets/worldwake/JoragaWarcaller.java b/Mage.Sets/src/mage/sets/worldwake/JoragaWarcaller.java index 268135066a..622953fcdc 100644 --- a/Mage.Sets/src/mage/sets/worldwake/JoragaWarcaller.java +++ b/Mage.Sets/src/mage/sets/worldwake/JoragaWarcaller.java @@ -33,14 +33,14 @@ import mage.Constants.CardType; import mage.Constants.Rarity; import mage.Constants.TargetController; import mage.MageInt; -import mage.abilities.Ability; import mage.abilities.common.EmptyEffect; import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.dynamicvalue.common.CountersCount; -import mage.abilities.effects.OneShotEffect; +import mage.abilities.dynamicvalue.common.MultikickerCount; import mage.abilities.effects.common.continious.BoostAllEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; import mage.abilities.keyword.MultikickerAbility; import mage.cards.CardImpl; import mage.counters.CounterType; @@ -48,8 +48,6 @@ import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.mageobject.SubtypePredicate; import mage.filter.predicate.permanent.AnotherPredicate; import mage.filter.predicate.permanent.ControllerPredicate; -import mage.game.Game; -import mage.game.permanent.Permanent; /** * @@ -78,12 +76,13 @@ public class JoragaWarcaller extends CardImpl { this.toughness = new MageInt(1); // Multikicker {1}{G} - MultikickerAbility ability = new MultikickerAbility(new EmptyEffect(""), false); - ability.addManaCost(new ManaCostsImpl("{1}{G}")); - this.addAbility(ability); + this.addAbility(new MultikickerAbility(new ManaCostsImpl("{1}{G}"))); // Joraga Warcaller enters the battlefield with a +1/+1 counter on it for each time it was kicked. - this.addAbility(new EntersBattlefieldAbility(new JoragaWarcallerEffect())); + this.addAbility(new EntersBattlefieldAbility( + new AddCountersSourceEffect(CounterType.P1P1.createInstance(0), new MultikickerCount(), true), + "with a +1/+1 counter on it for each time it was kicked")); + // Other Elf creatures you control get +1/+1 for each +1/+1 counter on Joraga Warcaller. this.addAbility(new SimpleStaticAbility(Constants.Zone.BATTLEFIELD, new BoostAllEffect(new CountersCount(CounterType.P1P1), new CountersCount(CounterType.P1P1), Constants.Duration.WhileOnBattlefield, filter, true, rule))); @@ -98,38 +97,4 @@ public class JoragaWarcaller extends CardImpl { public JoragaWarcaller copy() { return new JoragaWarcaller(this); } -} - -class JoragaWarcallerEffect extends OneShotEffect { - - public JoragaWarcallerEffect() { - super(Constants.Outcome.Benefit); - staticText = "with a +1/+1 counter on it for each time it was kicked"; - } - - public JoragaWarcallerEffect(final JoragaWarcallerEffect effect) { - super(effect); - } - - @Override - public boolean apply(Game game, Ability source) { - Permanent permanent = game.getPermanent(source.getSourceId()); - if (permanent != null) { - for (Ability ability : permanent.getAbilities()) { - if (ability instanceof MultikickerAbility) { - int count = ((MultikickerAbility)ability).getActivateCount(); - if (count > 0) { - permanent.addCounters(CounterType.P1P1.createInstance(count), game); - } - } - } - } - return true; - } - - @Override - public JoragaWarcallerEffect copy() { - return new JoragaWarcallerEffect(this); - } - -} +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/worldwake/LightkeeperOfEmeria.java b/Mage.Sets/src/mage/sets/worldwake/LightkeeperOfEmeria.java index 247fbd8043..0c871034de 100644 --- a/Mage.Sets/src/mage/sets/worldwake/LightkeeperOfEmeria.java +++ b/Mage.Sets/src/mage/sets/worldwake/LightkeeperOfEmeria.java @@ -31,7 +31,9 @@ import java.util.UUID; import mage.Constants.CardType; import mage.Constants.Rarity; import mage.MageInt; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.dynamicvalue.common.MultikickerCount; import mage.abilities.effects.common.GainLifeEffect; import mage.abilities.keyword.FlyingAbility; import mage.abilities.keyword.MultikickerAbility; @@ -52,10 +54,14 @@ public class LightkeeperOfEmeria extends CardImpl { this.power = new MageInt(2); this.toughness = new MageInt(4); + // Multikicker (You may pay an additional {W} any number of times as you cast this spell.) + this.addAbility(new MultikickerAbility(new ManaCostsImpl("{W}"))); + + // Flying this.addAbility(FlyingAbility.getInstance()); - MultikickerAbility ability = new MultikickerAbility(new GainLifeEffect(2), false); - ability.addManaCost(new ManaCostsImpl("{W}")); - this.addAbility(ability); + + // When Lightkeeper of Emeria enters the battlefield, you gain 2 life for each time it was kicked. + this.addAbility(new EntersBattlefieldTriggeredAbility(new GainLifeEffect(new MultikickerCount()))); } public LightkeeperOfEmeria(final LightkeeperOfEmeria card) { diff --git a/Mage.Sets/src/mage/sets/worldwake/QuagVampires.java b/Mage.Sets/src/mage/sets/worldwake/QuagVampires.java index c2e6cef32d..7ffad4f0db 100644 --- a/Mage.Sets/src/mage/sets/worldwake/QuagVampires.java +++ b/Mage.Sets/src/mage/sets/worldwake/QuagVampires.java @@ -31,7 +31,9 @@ import java.util.UUID; import mage.Constants.CardType; import mage.Constants.Rarity; import mage.MageInt; +import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.dynamicvalue.common.MultikickerCount; import mage.abilities.effects.common.counter.AddCountersSourceEffect; import mage.abilities.keyword.MultikickerAbility; import mage.abilities.keyword.SwampwalkAbility; @@ -54,10 +56,16 @@ public class QuagVampires extends CardImpl { this.power = new MageInt(1); this.toughness = new MageInt(1); + // Multikicker (You may pay an additional {1}{B} any number of times as you cast this spell.) + this.addAbility(new MultikickerAbility(new ManaCostsImpl("{1}{B}"))); + + // Swampwalk this.addAbility(new SwampwalkAbility()); - MultikickerAbility ability = new MultikickerAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance(1)), false); - ability.addManaCost(new ManaCostsImpl("{1}{B}")); - this.addAbility(ability); + + // Quag Vampires enters the battlefield with a +1/+1 counter on it for each time it was kicked. + this.addAbility(new EntersBattlefieldAbility( + new AddCountersSourceEffect(CounterType.P1P1.createInstance(0), new MultikickerCount(), true), + "with a +1/+1 counter on it for each time it was kicked")); } public QuagVampires(final QuagVampires card) { diff --git a/Mage.Sets/src/mage/sets/worldwake/SkitterOfLizards.java b/Mage.Sets/src/mage/sets/worldwake/SkitterOfLizards.java index b015ab62e1..b26667d016 100644 --- a/Mage.Sets/src/mage/sets/worldwake/SkitterOfLizards.java +++ b/Mage.Sets/src/mage/sets/worldwake/SkitterOfLizards.java @@ -1,4 +1,4 @@ -/* + /* * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, are @@ -31,7 +31,10 @@ import java.util.UUID; import mage.Constants.CardType; import mage.Constants.Rarity; import mage.MageInt; +import mage.abilities.common.EmptyEffect; +import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.dynamicvalue.common.MultikickerCount; import mage.abilities.effects.common.counter.AddCountersSourceEffect; import mage.abilities.keyword.HasteAbility; import mage.abilities.keyword.MultikickerAbility; @@ -53,10 +56,17 @@ public class SkitterOfLizards extends CardImpl { this.power = new MageInt(1); this.toughness = new MageInt(1); + // Multikicker (You may pay an additional {1}{R} any number of times as you cast this spell.) + this.addAbility(new MultikickerAbility(new ManaCostsImpl("{1}{R}"))); + + // Haste this.addAbility(HasteAbility.getInstance()); - MultikickerAbility ability = new MultikickerAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance(1)), false); - ability.addManaCost(new ManaCostsImpl("{1}{R}")); - this.addAbility(ability); + + // Skitter of Lizards enters the battlefield with a +1/+1 counter on it for each time it was kicked. + this.addAbility(new EntersBattlefieldAbility( + new AddCountersSourceEffect(CounterType.P1P1.createInstance(0), new MultikickerCount(), true), + "with a +1/+1 counter on it for each time it was kicked")); + } public SkitterOfLizards(final SkitterOfLizards card) { diff --git a/Mage.Sets/src/mage/sets/worldwake/StrengthOfTheTajuru.java b/Mage.Sets/src/mage/sets/worldwake/StrengthOfTheTajuru.java index 27fe7e299a..cc7874a051 100644 --- a/Mage.Sets/src/mage/sets/worldwake/StrengthOfTheTajuru.java +++ b/Mage.Sets/src/mage/sets/worldwake/StrengthOfTheTajuru.java @@ -27,12 +27,9 @@ */ package mage.sets.worldwake; -import mage.Constants; import mage.Constants.CardType; import mage.Constants.Rarity; import mage.abilities.Ability; -import mage.abilities.common.EmptyEffect; -import mage.abilities.common.SimpleStaticAbility; import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.effects.OneShotEffect; import mage.cards.CardImpl; @@ -43,6 +40,9 @@ import mage.game.permanent.Permanent; import mage.target.common.TargetCreaturePermanent; import java.util.UUID; +import mage.Constants.Outcome; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.keyword.MultikickerAbility; /** * @author noxx @@ -55,12 +55,9 @@ public class StrengthOfTheTajuru extends CardImpl { this.color.setGreen(true); - // Multikicker {1} - //MultikickerAbility ability = new MultikickerAbility(new EmptyEffect(""), false); - //ability.addManaCost(new GenericManaCost(1)); - //this.addAbility(ability); - this.addAbility(new SimpleStaticAbility(Constants.Zone.ALL, new EmptyEffect("Multikicker {1}"))); + // Multikicker (You may pay an additional {1} any number of times as you cast this spell.) + this.addAbility(new MultikickerAbility(new ManaCostsImpl("{1}"))); // Choose target creature, then choose another target creature for each time Strength of the Tajuru was kicked. Put X +1/+1 counters on each of them. this.getSpellAbility().addEffect(new StrengthOfTheTajuruAddCountersTargetEffect()); @@ -88,7 +85,7 @@ public class StrengthOfTheTajuru extends CardImpl { class StrengthOfTheTajuruAddCountersTargetEffect extends OneShotEffect { public StrengthOfTheTajuruAddCountersTargetEffect() { - super(Constants.Outcome.BoostCreature); + super(Outcome.BoostCreature); staticText = "Choose target creature, then choose another target creature for each time Strength of the Tajuru was kicked. Put X +1/+1 counters on each of them."; } diff --git a/Mage.Sets/src/mage/sets/worldwake/WolfbriarElemental.java b/Mage.Sets/src/mage/sets/worldwake/WolfbriarElemental.java index 40b72455f9..428ba8f5ee 100644 --- a/Mage.Sets/src/mage/sets/worldwake/WolfbriarElemental.java +++ b/Mage.Sets/src/mage/sets/worldwake/WolfbriarElemental.java @@ -33,7 +33,10 @@ import mage.Constants.CardType; import mage.Constants.ColoredManaSymbol; import mage.Constants.Rarity; import mage.MageInt; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.costs.mana.ColoredManaCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.dynamicvalue.common.MultikickerCount; import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.keyword.MultikickerAbility; import mage.cards.CardImpl; @@ -53,9 +56,11 @@ public class WolfbriarElemental extends CardImpl { this.power = new MageInt(4); this.toughness = new MageInt(4); - MultikickerAbility ability = new MultikickerAbility(new CreateTokenEffect(new WolfToken()), false); - ability.addManaCost(new ColoredManaCost(ColoredManaSymbol.G)); - this.addAbility(ability); + // Multikicker (You may pay an additional {G} any number of times as you cast this spell.) + this.addAbility(new MultikickerAbility(new ManaCostsImpl("{G}"))); + + // When Wolfbriar Elemental enters the battlefield, put a 2/2 green Wolf creature token onto the battlefield for each time it was kicked. + this.addAbility(new EntersBattlefieldTriggeredAbility(new CreateTokenEffect(new WolfToken(), new MultikickerCount()))); } public WolfbriarElemental(final WolfbriarElemental card) { diff --git a/Mage.Sets/src/mage/sets/zendikar/AetherFigment.java b/Mage.Sets/src/mage/sets/zendikar/AetherFigment.java index 12e8ac5569..dfa61e2a2a 100644 --- a/Mage.Sets/src/mage/sets/zendikar/AetherFigment.java +++ b/Mage.Sets/src/mage/sets/zendikar/AetherFigment.java @@ -48,7 +48,7 @@ import java.util.UUID; */ public class AetherFigment extends CardImpl { - private final static String staticText = "If AEther Figment was kicked, it enters the battlefield with two +1/+1 counters on it"; + private final static String staticText = "with two +1/+1 counters on it, if it was kicked"; public AetherFigment(UUID ownerId) { super(ownerId, 40, "AEther Figment", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{1}{U}"); diff --git a/Mage.Sets/src/mage/sets/zendikar/BoldDefense.java b/Mage.Sets/src/mage/sets/zendikar/BoldDefense.java index 9bf55ef6c2..58be8c0626 100644 --- a/Mage.Sets/src/mage/sets/zendikar/BoldDefense.java +++ b/Mage.Sets/src/mage/sets/zendikar/BoldDefense.java @@ -27,12 +27,13 @@ */ package mage.sets.zendikar; -import mage.Constants; +import java.util.UUID; import mage.Constants.CardType; +import mage.Constants.Duration; import mage.Constants.Rarity; import mage.abilities.Ability; import mage.abilities.condition.common.KickedCondition; -import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.costs.mana.KickerManaCost; import mage.abilities.decorator.ConditionalContinousEffect; import mage.abilities.dynamicvalue.DynamicValue; import mage.abilities.effects.ContinuousEffect; @@ -43,7 +44,6 @@ import mage.cards.CardImpl; import mage.filter.common.FilterCreaturePermanent; import mage.game.Game; -import java.util.UUID; /** * @author nantuko, Loki @@ -58,11 +58,11 @@ public class BoldDefense extends CardImpl { this.color.setWhite(true); DynamicValue dn = new BoldDefensePTCount(); - this.getSpellAbility().addEffect(new BoostControlledEffect(dn, dn, Constants.Duration.EndOfTurn)); + this.getSpellAbility().addEffect(new BoostControlledEffect(dn, dn, Duration.EndOfTurn)); - this.getSpellAbility().addOptionalCost(new ManaCostsImpl("{3}{W}")); + this.getSpellAbility().addOptionalCost(new KickerManaCost("{3}{W}")); - ContinuousEffect effect = new GainAbilityControlledEffect(FirstStrikeAbility.getInstance(), Constants.Duration.EndOfTurn, new FilterCreaturePermanent(), false); + ContinuousEffect effect = new GainAbilityControlledEffect(FirstStrikeAbility.getInstance(), Duration.EndOfTurn, new FilterCreaturePermanent(), false); this.getSpellAbility().addEffect(new ConditionalContinousEffect(effect, KickedCondition.getInstance(), staticText)); } @@ -90,13 +90,19 @@ class BoldDefensePTCount implements DynamicValue { } } + @Override public DynamicValue clone() { return new BoldDefensePTCount(); } + @Override + public String toString() { + return "1"; + } + @Override public String getMessage() { - return ""; + return "1"; } } \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/zendikar/GatekeeperOfMalakir.java b/Mage.Sets/src/mage/sets/zendikar/GatekeeperOfMalakir.java index b677dc1b36..062743bfeb 100644 --- a/Mage.Sets/src/mage/sets/zendikar/GatekeeperOfMalakir.java +++ b/Mage.Sets/src/mage/sets/zendikar/GatekeeperOfMalakir.java @@ -71,7 +71,7 @@ public class GatekeeperOfMalakir extends CardImpl { EntersBattlefieldTriggeredAbility ability = new EntersBattlefieldTriggeredAbility(new SacrificeEffect(filter, 1, "target player")); - Ability conditionalAbility = new ConditionalTriggeredAbility(ability, KickedCondition.getInstance(), "When {this} enters the battlefield, if it was kicked, target player sacrifices a creature"); + Ability conditionalAbility = new ConditionalTriggeredAbility(ability, KickedCondition.getInstance(), "When {this} enters the battlefield, if it was kicked, target player sacrifices a creature."); conditionalAbility.addTarget(new TargetPlayer()); this.addAbility(conditionalAbility); } diff --git a/Mage.Sets/src/mage/sets/zendikar/GoblinBushwhacker.java b/Mage.Sets/src/mage/sets/zendikar/GoblinBushwhacker.java index 31e904f3ba..2686277acd 100644 --- a/Mage.Sets/src/mage/sets/zendikar/GoblinBushwhacker.java +++ b/Mage.Sets/src/mage/sets/zendikar/GoblinBushwhacker.java @@ -32,11 +32,13 @@ import mage.Constants.CardType; import mage.Constants.Duration; import mage.Constants.Rarity; import mage.MageInt; -import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.condition.common.KickedCondition; +import mage.abilities.costs.mana.KickerManaCost; +import mage.abilities.decorator.ConditionalTriggeredAbility; import mage.abilities.effects.common.continious.BoostControlledEffect; import mage.abilities.effects.common.continious.GainAbilityControlledEffect; import mage.abilities.keyword.HasteAbility; -import mage.abilities.keyword.KickerAbility; import mage.cards.CardImpl; /** @@ -55,10 +57,13 @@ public class GoblinBushwhacker extends CardImpl { this.power = new MageInt(1); this.toughness = new MageInt(1); - KickerAbility ability = new KickerAbility(new BoostControlledEffect(1, 0, Duration.EndOfTurn), false); + // Kicker {R} (You may pay an additional {R} as you cast this spell.) + this.getSpellAbility().addOptionalCost(new KickerManaCost("{R}")); + + // When Goblin Bushwhacker enters the battlefield, if it was kicked, creatures you control get +1/+0 and gain haste until end of turn. + EntersBattlefieldTriggeredAbility ability = new EntersBattlefieldTriggeredAbility(new BoostControlledEffect(1, 0, Duration.EndOfTurn), false); ability.addEffect(new GainAbilityControlledEffect(HasteAbility.getInstance(), Duration.EndOfTurn)); - ability.addCost(new ManaCostsImpl("{R}")); - this.addAbility(ability); + this.addAbility(new ConditionalTriggeredAbility(ability, KickedCondition.getInstance(), "When {this} enters the battlefield, if it was kicked, creatures you control get +1/+0 and gain haste until end of turn.")); } public GoblinBushwhacker(final GoblinBushwhacker card) { diff --git a/Mage.Sets/src/mage/sets/zendikar/GoblinRuinblaster.java b/Mage.Sets/src/mage/sets/zendikar/GoblinRuinblaster.java index 16b2116bee..a56177bbc6 100644 --- a/Mage.Sets/src/mage/sets/zendikar/GoblinRuinblaster.java +++ b/Mage.Sets/src/mage/sets/zendikar/GoblinRuinblaster.java @@ -28,20 +28,16 @@ package mage.sets.zendikar; - import java.util.UUID; import mage.Constants.CardType; -import mage.Constants.ColoredManaSymbol; -import mage.Constants.Duration; import mage.Constants.Rarity; import mage.MageInt; -import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; -import mage.abilities.costs.mana.ColoredManaCost; +import mage.abilities.condition.common.KickedCondition; +import mage.abilities.costs.mana.KickerManaCost; +import mage.abilities.decorator.ConditionalTriggeredAbility; import mage.abilities.effects.common.DestroyTargetEffect; -import mage.abilities.effects.common.continious.GainAbilitySourceEffect; import mage.abilities.keyword.HasteAbility; -import mage.abilities.keyword.KickerAbility; import mage.cards.CardImpl; import mage.target.common.TargetNonBasicLandPermanent; @@ -59,13 +55,17 @@ public class GoblinRuinblaster extends CardImpl { this.subtype.add("Shaman"); this.power = new MageInt(2); this.toughness = new MageInt(1); - this.addAbility(HasteAbility.getInstance()); - Ability ability1 = new EntersBattlefieldTriggeredAbility(new DestroyTargetEffect()); - ability1.addTarget(new TargetNonBasicLandPermanent()); - KickerAbility ability2 = new KickerAbility(new GainAbilitySourceEffect(ability1, Duration.WhileOnBattlefield), false); - ability2.addManaCost(new ColoredManaCost(ColoredManaSymbol.R)); - this.addAbility(ability2); + // Kicker {R} (You may pay an additional {R} as you cast this spell.) + this.getSpellAbility().addOptionalCost(new KickerManaCost("{R}")); + + // Haste + this.addAbility(HasteAbility.getInstance()); + + // When Goblin Ruinblaster enters the battlefield, if it was kicked, destroy target nonbasic land. + EntersBattlefieldTriggeredAbility ability = new EntersBattlefieldTriggeredAbility(new DestroyTargetEffect(), false); + ability.addTarget(new TargetNonBasicLandPermanent()); + this.addAbility(new ConditionalTriggeredAbility(ability, KickedCondition.getInstance(), "When {this} enters the battlefield, if it was kicked, destroy target nonbasic land.")); } public GoblinRuinblaster(final GoblinRuinblaster card) { diff --git a/Mage.Sets/src/mage/sets/zendikar/HeartstabberMosquito.java b/Mage.Sets/src/mage/sets/zendikar/HeartstabberMosquito.java index 7248f846bb..d9460e0f9d 100644 --- a/Mage.Sets/src/mage/sets/zendikar/HeartstabberMosquito.java +++ b/Mage.Sets/src/mage/sets/zendikar/HeartstabberMosquito.java @@ -31,10 +31,12 @@ import java.util.UUID; import mage.Constants.CardType; import mage.Constants.Rarity; import mage.MageInt; -import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.condition.common.KickedCondition; +import mage.abilities.costs.mana.KickerManaCost; +import mage.abilities.decorator.ConditionalTriggeredAbility; import mage.abilities.effects.common.DestroyTargetEffect; import mage.abilities.keyword.FlyingAbility; -import mage.abilities.keyword.KickerAbility; import mage.cards.CardImpl; import mage.target.common.TargetCreaturePermanent; @@ -53,11 +55,16 @@ public class HeartstabberMosquito extends CardImpl { this.power = new MageInt(2); this.toughness = new MageInt(2); + // Kicker {2}{B} (You may pay an additional {2}{B} as you cast this spell.) + this.getSpellAbility().addOptionalCost(new KickerManaCost("{2}{B}")); + + // Flying this.addAbility(FlyingAbility.getInstance()); - KickerAbility ability = new KickerAbility(new DestroyTargetEffect(), false); - ability.addManaCost(new ManaCostsImpl("{2}{B}")); + + // When Heartstabber Mosquito enters the battlefield, if it was kicked, destroy target creature. + EntersBattlefieldTriggeredAbility ability = new EntersBattlefieldTriggeredAbility(new DestroyTargetEffect(), false); ability.addTarget(new TargetCreaturePermanent()); - this.addAbility(ability); + this.addAbility(new ConditionalTriggeredAbility(ability, KickedCondition.getInstance(), "When {this} enters the battlefield, if it was kicked, destroy target creature.")); } public HeartstabberMosquito(final HeartstabberMosquito card) { diff --git a/Mage.Sets/src/mage/sets/zendikar/IntoTheRoil.java b/Mage.Sets/src/mage/sets/zendikar/IntoTheRoil.java index c6a824835c..cae90a1d91 100644 --- a/Mage.Sets/src/mage/sets/zendikar/IntoTheRoil.java +++ b/Mage.Sets/src/mage/sets/zendikar/IntoTheRoil.java @@ -31,10 +31,11 @@ package mage.sets.zendikar; import java.util.UUID; import mage.Constants.CardType; import mage.Constants.Rarity; -import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.condition.common.KickedCondition; +import mage.abilities.costs.mana.KickerManaCost; +import mage.abilities.decorator.ConditionalOneShotEffect; import mage.abilities.effects.common.DrawCardControllerEffect; import mage.abilities.effects.common.ReturnToHandTargetEffect; -import mage.abilities.keyword.KickerAbility; import mage.cards.CardImpl; import mage.target.common.TargetNonlandPermanent; @@ -48,11 +49,17 @@ public class IntoTheRoil extends CardImpl { super(ownerId, 48, "Into the Roil", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{1}{U}"); this.expansionSetCode = "ZEN"; this.color.setBlue(true); - this.getSpellAbility().addTarget(new TargetNonlandPermanent()); + + // Kicker {1}{U} (You may pay an additional {1}{U} as you cast this spell.) + this.getSpellAbility().addOptionalCost(new KickerManaCost("{1}{U}")); + + // Return target nonland permanent to its owner's hand. If Into the Roil was kicked, draw a card. this.getSpellAbility().addEffect(new ReturnToHandTargetEffect()); - KickerAbility ability = new KickerAbility(new DrawCardControllerEffect(1), false); - ability.addManaCost(new ManaCostsImpl("{1}{U}")); - this.addAbility(ability); + this.getSpellAbility().addEffect(new ConditionalOneShotEffect( + new DrawCardControllerEffect(1), + KickedCondition.getInstance(), + "If {this} was kicked, draw a card")); + this.getSpellAbility().addTarget(new TargetNonlandPermanent()); } public IntoTheRoil(final IntoTheRoil card) { diff --git a/Mage.Sets/src/mage/sets/zendikar/KorAeronaut.java b/Mage.Sets/src/mage/sets/zendikar/KorAeronaut.java index fecb996be2..ebf06ec0f7 100644 --- a/Mage.Sets/src/mage/sets/zendikar/KorAeronaut.java +++ b/Mage.Sets/src/mage/sets/zendikar/KorAeronaut.java @@ -62,7 +62,7 @@ public class KorAeronaut extends CardImpl { EntersBattlefieldTriggeredAbility ability = new EntersBattlefieldTriggeredAbility(new GainAbilityTargetEffect(FlyingAbility.getInstance(), Duration.EndOfTurn), false); ability.addTarget(new TargetCreaturePermanent()); - this.addAbility(new ConditionalTriggeredAbility(ability, KickedCondition.getInstance(), "When {this} enters the battlefield, if it was kicked, target creature gains flying until end of turn")); + this.addAbility(new ConditionalTriggeredAbility(ability, KickedCondition.getInstance(), "When {this} enters the battlefield, if it was kicked, target creature gains flying until end of turn.")); } public KorAeronaut(final KorAeronaut card) { diff --git a/Mage.Sets/src/mage/sets/zendikar/KorSanctifiers.java b/Mage.Sets/src/mage/sets/zendikar/KorSanctifiers.java index 7c899be660..9152d8984c 100644 --- a/Mage.Sets/src/mage/sets/zendikar/KorSanctifiers.java +++ b/Mage.Sets/src/mage/sets/zendikar/KorSanctifiers.java @@ -29,7 +29,6 @@ package mage.sets.zendikar; import java.util.UUID; - import mage.Constants.CardType; import mage.Constants.Rarity; import mage.MageInt; @@ -65,11 +64,14 @@ public class KorSanctifiers extends CardImpl { this.color.setWhite(true); this.power = new MageInt(2); this.toughness = new MageInt(3); + + // Kicker {W} (You may pay an additional {W} as you cast this spell.) this.getSpellAbility().addOptionalCost(new KickerManaCost("{W}")); + // When Kor Sanctifiers enters the battlefield, if it was kicked, destroy target artifact or enchantment. EntersBattlefieldTriggeredAbility ability = new EntersBattlefieldTriggeredAbility(new DestroyTargetEffect(), false); ability.addTarget(new TargetPermanent(filter)); - this.addAbility(new ConditionalTriggeredAbility(ability, KickedCondition.getInstance(), "When {this} enters the battlefield, if it was kicked, destroy target artifact or enchantment")); + this.addAbility(new ConditionalTriggeredAbility(ability, KickedCondition.getInstance(), "When {this} enters the battlefield, if it was kicked, destroy target artifact or enchantment.")); } public KorSanctifiers (final KorSanctifiers card) { diff --git a/Mage.Sets/src/mage/sets/zendikar/MarshCasualties.java b/Mage.Sets/src/mage/sets/zendikar/MarshCasualties.java index 8f49254ecb..d8fd45c39f 100644 --- a/Mage.Sets/src/mage/sets/zendikar/MarshCasualties.java +++ b/Mage.Sets/src/mage/sets/zendikar/MarshCasualties.java @@ -48,7 +48,7 @@ import java.util.UUID; */ public class MarshCasualties extends CardImpl { - private static final String ruleText = "Creatures target player controls get -1/-1 until end of turn. If {this} was kicked, those creatures get -2/-2 until end of turn instead."; + private static final String ruleText = "Creatures target player controls get -1/-1 until end of turn. If {this} was kicked, those creatures get -2/-2 until end of turn instead"; public MarshCasualties(UUID ownerId) { super(ownerId, 101, "Marsh Casualties", Rarity.UNCOMMON, new CardType[]{CardType.SORCERY}, "{B}{B}"); diff --git a/Mage.Sets/src/mage/sets/zendikar/MoldShambler.java b/Mage.Sets/src/mage/sets/zendikar/MoldShambler.java index d5bd496db6..17d8b94d25 100644 --- a/Mage.Sets/src/mage/sets/zendikar/MoldShambler.java +++ b/Mage.Sets/src/mage/sets/zendikar/MoldShambler.java @@ -31,9 +31,11 @@ import java.util.UUID; import mage.Constants.CardType; import mage.Constants.Rarity; import mage.MageInt; -import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.condition.common.KickedCondition; +import mage.abilities.costs.mana.KickerManaCost; +import mage.abilities.decorator.ConditionalTriggeredAbility; import mage.abilities.effects.common.DestroyTargetEffect; -import mage.abilities.keyword.KickerAbility; import mage.cards.CardImpl; import mage.filter.FilterPermanent; import mage.filter.predicate.Predicates; @@ -62,10 +64,13 @@ public class MoldShambler extends CardImpl { this.power = new MageInt(3); this.toughness = new MageInt(3); - KickerAbility ability = new KickerAbility(new DestroyTargetEffect(), false); - ability.addManaCost(new ManaCostsImpl("{1}{G}")); + // Kicker {1}{G} (You may pay an additional {1}{G} as you cast this spell.) + this.getSpellAbility().addOptionalCost(new KickerManaCost("{1}{G}")); + + // When Mold Shambler enters the battlefield, if it was kicked, destroy target noncreature permanent. + EntersBattlefieldTriggeredAbility ability = new EntersBattlefieldTriggeredAbility(new DestroyTargetEffect(), false); ability.addTarget(new TargetPermanent(filter)); - this.addAbility(ability); + this.addAbility(new ConditionalTriggeredAbility(ability, KickedCondition.getInstance(), "When {this} enters the battlefield, if it was kicked, destroy target noncreature permanent.")); } public MoldShambler(final MoldShambler card) { diff --git a/Mage.Sets/src/mage/sets/zendikar/OranRiefRecluse.java b/Mage.Sets/src/mage/sets/zendikar/OranRiefRecluse.java index 7a05e7bf40..7d38108bbc 100644 --- a/Mage.Sets/src/mage/sets/zendikar/OranRiefRecluse.java +++ b/Mage.Sets/src/mage/sets/zendikar/OranRiefRecluse.java @@ -29,16 +29,14 @@ package mage.sets.zendikar; import java.util.UUID; import mage.Constants.CardType; -import mage.Constants.Duration; import mage.Constants.Rarity; import mage.MageInt; -import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; -import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.condition.common.KickedCondition; +import mage.abilities.costs.mana.KickerManaCost; +import mage.abilities.decorator.ConditionalTriggeredAbility; import mage.abilities.effects.common.DestroyTargetEffect; -import mage.abilities.effects.common.continious.GainAbilitySourceEffect; import mage.abilities.keyword.FlyingAbility; -import mage.abilities.keyword.KickerAbility; import mage.abilities.keyword.ReachAbility; import mage.cards.CardImpl; import mage.filter.common.FilterCreaturePermanent; @@ -66,14 +64,16 @@ public class OranRiefRecluse extends CardImpl { this.power = new MageInt(1); this.toughness = new MageInt(3); + // Kicker {2}{G} (You may pay an additional {2}{G} as you cast this spell.) + this.getSpellAbility().addOptionalCost(new KickerManaCost("{2}{G}")); + + // Reach (This creature can block creatures with flying.) this.addAbility(ReachAbility.getInstance()); - Ability ability = new EntersBattlefieldTriggeredAbility(new DestroyTargetEffect()); + // When Oran-Rief Recluse enters the battlefield, if it was kicked, destroy target creature with flying. + EntersBattlefieldTriggeredAbility ability = new EntersBattlefieldTriggeredAbility(new DestroyTargetEffect(), false); ability.addTarget(new TargetCreaturePermanent(filter)); - - KickerAbility kickerAbility = new KickerAbility(new GainAbilitySourceEffect(ability, Duration.WhileOnBattlefield), false); - kickerAbility.addManaCost(new ManaCostsImpl("{2}{G}")); - this.addAbility(kickerAbility); + this.addAbility(new ConditionalTriggeredAbility(ability, KickedCondition.getInstance(), "When {this} enters the battlefield, if it was kicked, destroy target creature with flying.")); } public OranRiefRecluse(final OranRiefRecluse card) { diff --git a/Mage.Sets/src/mage/sets/zendikar/TempestOwl.java b/Mage.Sets/src/mage/sets/zendikar/TempestOwl.java index fe2a13f772..dc840afad3 100644 --- a/Mage.Sets/src/mage/sets/zendikar/TempestOwl.java +++ b/Mage.Sets/src/mage/sets/zendikar/TempestOwl.java @@ -31,10 +31,12 @@ import java.util.UUID; import mage.Constants.CardType; import mage.Constants.Rarity; import mage.MageInt; -import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.condition.common.KickedCondition; +import mage.abilities.costs.mana.KickerManaCost; +import mage.abilities.decorator.ConditionalTriggeredAbility; import mage.abilities.effects.common.TapTargetEffect; import mage.abilities.keyword.FlyingAbility; -import mage.abilities.keyword.KickerAbility; import mage.cards.CardImpl; import mage.filter.FilterPermanent; import mage.target.TargetPermanent; @@ -54,13 +56,16 @@ public class TempestOwl extends CardImpl { this.power = new MageInt(1); this.toughness = new MageInt(2); + // Flying this.addAbility(FlyingAbility.getInstance()); + // Kicker {4}{U} + this.getSpellAbility().addOptionalCost(new KickerManaCost("{4}{U}")); + // When Tempest Owl enters the battlefield, if it was kicked, tap up to three target permanents. - KickerAbility kickerAbility = new KickerAbility(new TapTargetEffect(), false); - kickerAbility.addTarget(new TargetPermanent(0, 3, new FilterPermanent(), false)); - kickerAbility.addManaCost(new ManaCostsImpl("{4}{U}")); - this.addAbility(kickerAbility); + EntersBattlefieldTriggeredAbility ability = new EntersBattlefieldTriggeredAbility(new TapTargetEffect(), false); + ability.addTarget(new TargetPermanent(0, 3, new FilterPermanent(), false)); + this.addAbility(new ConditionalTriggeredAbility(ability, KickedCondition.getInstance(), "When {this} enters the battlefield, if it was kicked, tap up to three target permanents.")); } public TempestOwl(final TempestOwl card) { diff --git a/Mage.Sets/src/mage/sets/zendikar/TorchSlinger.java b/Mage.Sets/src/mage/sets/zendikar/TorchSlinger.java index 3e8052a06b..90779234c2 100644 --- a/Mage.Sets/src/mage/sets/zendikar/TorchSlinger.java +++ b/Mage.Sets/src/mage/sets/zendikar/TorchSlinger.java @@ -29,15 +29,13 @@ package mage.sets.zendikar; import java.util.UUID; import mage.Constants.CardType; -import mage.Constants.Duration; import mage.Constants.Rarity; import mage.MageInt; -import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; -import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.condition.common.KickedCondition; +import mage.abilities.costs.mana.KickerManaCost; +import mage.abilities.decorator.ConditionalTriggeredAbility; import mage.abilities.effects.common.DamageTargetEffect; -import mage.abilities.effects.common.continious.GainAbilitySourceEffect; -import mage.abilities.keyword.KickerAbility; import mage.cards.CardImpl; import mage.target.common.TargetCreaturePermanent; @@ -57,12 +55,13 @@ public class TorchSlinger extends CardImpl { this.power = new MageInt(2); this.toughness = new MageInt(2); - Ability ability = new EntersBattlefieldTriggeredAbility(new DamageTargetEffect(2)); - ability.addTarget(new TargetCreaturePermanent()); + // Kicker {1}{R} (You may pay an additional {1}{R} as you cast this spell.) + this.getSpellAbility().addOptionalCost(new KickerManaCost("{1}{R}")); - KickerAbility kickerAbility = new KickerAbility(new GainAbilitySourceEffect(ability, Duration.WhileOnBattlefield), false); - kickerAbility.addManaCost(new ManaCostsImpl("{1}{R}")); - this.addAbility(kickerAbility); + // When Torch Slinger enters the battlefield, if it was kicked, it deals 2 damage to target creature. + EntersBattlefieldTriggeredAbility ability = new EntersBattlefieldTriggeredAbility(new DamageTargetEffect(2), false); + ability.addTarget(new TargetCreaturePermanent()); + this.addAbility(new ConditionalTriggeredAbility(ability, KickedCondition.getInstance(), "When {this} enters the battlefield, if it was kicked, it deals 2 damage to target creature.")); } public TorchSlinger(final TorchSlinger card) { diff --git a/Mage.Sets/src/mage/sets/zendikar/VampiresBite.java b/Mage.Sets/src/mage/sets/zendikar/VampiresBite.java index 10363cde64..07b8d3c11b 100644 --- a/Mage.Sets/src/mage/sets/zendikar/VampiresBite.java +++ b/Mage.Sets/src/mage/sets/zendikar/VampiresBite.java @@ -31,10 +31,12 @@ import java.util.UUID; import mage.Constants.CardType; import mage.Constants.Duration; import mage.Constants.Rarity; -import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.condition.common.KickedCondition; +import mage.abilities.costs.mana.KickerManaCost; +import mage.abilities.decorator.ConditionalContinousEffect; +import mage.abilities.effects.ContinuousEffect; import mage.abilities.effects.common.continious.BoostTargetEffect; import mage.abilities.effects.common.continious.GainAbilityTargetEffect; -import mage.abilities.keyword.KickerAbility; import mage.abilities.keyword.LifelinkAbility; import mage.cards.CardImpl; import mage.target.common.TargetCreaturePermanent; @@ -51,13 +53,14 @@ public class VampiresBite extends CardImpl { this.color.setBlack(true); - TargetCreaturePermanent target = new TargetCreaturePermanent(); - this.getSpellAbility().addTarget(target); + // Kicker {2}{B} (You may pay an additional {2}{B} as you cast this spell.) + this.getSpellAbility().addOptionalCost(new KickerManaCost("{2}{B}")); + + // Target creature gets +3/+0 until end of turn. If Vampire's Bite was kicked, that creature gains lifelink until end of turn. + this.getSpellAbility().addTarget(new TargetCreaturePermanent()); this.getSpellAbility().addEffect(new BoostTargetEffect(3, 0, Duration.EndOfTurn)); - KickerAbility ability = new KickerAbility(new GainAbilityTargetEffect(LifelinkAbility.getInstance(), Duration.EndOfTurn), false); - ability.addTarget(target); - ability.addManaCost(new ManaCostsImpl("{2}{B}")); - this.addAbility(ability); + ContinuousEffect effect = new GainAbilityTargetEffect(LifelinkAbility.getInstance(), Duration.EndOfTurn); + this.getSpellAbility().addEffect(new ConditionalContinousEffect(effect, KickedCondition.getInstance(), "If {this} was kicked, that creature gains lifelink until end of turn")); } public VampiresBite(final VampiresBite card) { diff --git a/Mage.Sets/src/mage/sets/zendikar/VinesOfVastwood.java b/Mage.Sets/src/mage/sets/zendikar/VinesOfVastwood.java index dd6ce6e81b..6d019bee41 100644 --- a/Mage.Sets/src/mage/sets/zendikar/VinesOfVastwood.java +++ b/Mage.Sets/src/mage/sets/zendikar/VinesOfVastwood.java @@ -47,7 +47,7 @@ import mage.target.common.TargetCreaturePermanent; */ public class VinesOfVastwood extends CardImpl { - private static final String staticText = "If Vines of Vastwood was kicked, that creature gets +4/+4 until end of turn."; + private static final String staticText = "If Vines of Vastwood was kicked, that creature gets +4/+4 until end of turn"; public VinesOfVastwood(UUID ownerId) { super(ownerId, 193, "Vines of Vastwood", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{G}");