Reworked Kicker cards.

This commit is contained in:
LevelX2 2012-12-08 02:21:26 +01:00
parent 67ed36e315
commit a460bda376
44 changed files with 329 additions and 274 deletions

View file

@ -44,6 +44,7 @@ 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;
@ -62,9 +63,10 @@ public class Anavolver extends CardImpl<Anavolver> {
// 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);
KickerAbility kickerAbility = new KickerAbility(kicker1);
kickerAbility.addKickerManaCost(kicker2);
this.addAbility(kickerAbility);
// 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(

View file

@ -39,6 +39,7 @@ 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;
@ -59,9 +60,10 @@ public class Cetavolver extends CardImpl<Cetavolver> {
// 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);
KickerAbility kickerAbility = new KickerAbility(kicker1);
kickerAbility.addKickerManaCost(kicker2);
this.addAbility(kickerAbility);
// 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(

View file

@ -44,6 +44,7 @@ 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;
@ -63,9 +64,10 @@ public class Degavolver extends CardImpl<Degavolver> {
// 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);
KickerAbility kickerAbility = new KickerAbility(kicker1);
kickerAbility.addKickerManaCost(kicker2);
this.addAbility(kickerAbility);
// 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(

View file

@ -29,15 +29,16 @@
package mage.sets.apocalypse;
import java.util.UUID;
import mage.Constants;
import mage.Constants.CardType;
import mage.Constants.Outcome;
import mage.Constants.Rarity;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.costs.mana.KickerManaCost;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.keyword.FlyingAbility;
import mage.abilities.keyword.KickerAbility;
import mage.cards.Card;
import mage.cards.CardImpl;
import mage.game.Game;
@ -55,7 +56,14 @@ public class DesolationAngel extends CardImpl<DesolationAngel> {
this.color.setBlack(true);
this.power = new MageInt(5);
this.toughness = new MageInt(4);
this.getSpellAbility().addOptionalCost(new KickerManaCost("{W}{W}"));
// Kicker (You may pay an additional as you cast this spell.)
this.addAbility(new KickerAbility(new KickerManaCost("{W}{W}")));
// Flying
this.addAbility(FlyingAbility.getInstance());
// When Desolation Angel enters the battlefield, destroy all lands you control. If it was kicked, destroy all lands instead.
this.addAbility(new EntersBattlefieldTriggeredAbility(new DesolationAngelEntersBattlefieldEffect()));
}
@ -71,7 +79,7 @@ public class DesolationAngel extends CardImpl<DesolationAngel> {
class DesolationAngelEntersBattlefieldEffect extends OneShotEffect<DesolationAngelEntersBattlefieldEffect> {
DesolationAngelEntersBattlefieldEffect() {
super(Constants.Outcome.DestroyPermanent);
super(Outcome.DestroyPermanent);
staticText = "destroy all lands you control. If it was kicked, destroy all lands instead";
}

View file

@ -36,6 +36,7 @@ import mage.abilities.condition.common.KickedCondition;
import mage.abilities.costs.mana.KickerManaCost;
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
import mage.abilities.keyword.ConvokeAbility;
import mage.abilities.keyword.KickerAbility;
import mage.cards.CardImpl;
import mage.counters.CounterType;
@ -53,11 +54,12 @@ public class KavuPrimarch extends CardImpl<KavuPrimarch> {
this.power = new MageInt(3);
this.toughness = new MageInt(3);
// Kicker {4} (You may pay an additional {4} as you cast this spell.)
this.addAbility(new KickerAbility(new KickerManaCost("{4}")));
// Convoke (Each creature you tap while casting this spell reduces its cost by {1} or by one mana of that creature's color.)
this.addAbility(new ConvokeAbility());
// Kicker {4} (You may pay an additional {4} as you cast this spell.)
this.getSpellAbility().addOptionalCost(new KickerManaCost("{4}"));
// If Kavu Primarch was kicked, it enters the battlefield with four +1/+1 counters on it.
this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance(4)),KickedCondition.getInstance(), true,

View file

@ -0,0 +1,85 @@
/*
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.sets.invasion;
import java.util.UUID;
import mage.Constants.CardType;
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.KickedCondition;
import mage.abilities.costs.mana.KickerManaCost;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.RegenerateSourceEffect;
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
import mage.abilities.keyword.KickerAbility;
import mage.cards.CardImpl;
import mage.counters.CounterType;
/**
*
* @author LevelX2
*/
public class UrborgSkeleton extends CardImpl<UrborgSkeleton> {
private final static String staticText = "If Urborg Skeleton was kicked, it enters the battlefield with a +1/+1 counter on it";
public UrborgSkeleton(UUID ownerId) {
super(ownerId, 134, "Urborg Skeleton", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{B}");
this.expansionSetCode = "INV";
this.subtype.add("Skeleton");
this.color.setBlack(true);
this.power = new MageInt(0);
this.toughness = new MageInt(1);
// Kicker {3} (You may pay an additional {3} as you cast this spell.)
this.addAbility(new KickerAbility(new KickerManaCost("{3}")));
// {B}: Regenerate Urborg Skeleton.
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new RegenerateSourceEffect(), new ManaCostsImpl("{B}")));
// If Urborg Skeleton was kicked, it enters the battlefield with a +1/+1 counter on it.
Ability ability = new EntersBattlefieldAbility(
new AddCountersSourceEffect(CounterType.P1P1.createInstance(1)),
KickedCondition.getInstance(),false, staticText,"");
this.addAbility(ability);
}
public UrborgSkeleton(final UrborgSkeleton card) {
super(card);
}
@Override
public UrborgSkeleton copy() {
return new UrborgSkeleton(this);
}
}

View file

@ -36,6 +36,7 @@ import mage.abilities.Ability;
import mage.abilities.condition.common.KickedCondition;
import mage.abilities.costs.mana.KickerManaCost;
import mage.abilities.effects.ReplacementEffectImpl;
import mage.abilities.keyword.KickerAbility;
import mage.cards.CardImpl;
import mage.game.Game;
import mage.game.events.GameEvent;
@ -54,7 +55,7 @@ public class OrimsChant extends CardImpl<OrimsChant> {
this.color.setWhite(true);
// Kicker {W} (You may pay an additional {W} as you cast this spell.)
this.getSpellAbility().addOptionalCost(new KickerManaCost("{W}"));
this.addAbility(new KickerAbility(new KickerManaCost("{W}")));
// Target player can't cast spells this turn.
this.getSpellAbility().addTarget(new TargetPlayer());

View file

@ -32,11 +32,11 @@ 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.costs.mana.MultikickerManaCost;
import mage.abilities.dynamicvalue.common.MultikickerCount;
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
import mage.abilities.keyword.FlyingAbility;
import mage.abilities.keyword.MultikickerAbility;
import mage.abilities.keyword.KickerAbility;
import mage.cards.CardImpl;
import mage.counters.CounterType;
@ -55,8 +55,8 @@ public class ApexHawks extends CardImpl<ApexHawks> {
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}")));
// Multikicker (You may pay an additional {1}{W} any number of times as you cast this spell.)
this.addAbility(new KickerAbility(new MultikickerManaCost("{1}{W}")));
// Flying
this.addAbility(FlyingAbility.getInstance());

View file

@ -34,10 +34,12 @@ 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.MultikickerManaCost;
import mage.abilities.decorator.ConditionalTriggeredAbility;
import mage.abilities.dynamicvalue.common.MultikickerCount;
import mage.abilities.effects.common.DiscardTargetEffect;
import mage.abilities.keyword.MultikickerAbility;
import mage.abilities.keyword.KickerAbility;
import mage.cards.CardImpl;
import mage.target.common.TargetOpponent;
@ -57,10 +59,13 @@ public class BloodhuskRitualist extends CardImpl<BloodhuskRitualist> {
this.toughness = new MageInt(2);
// Multikicker (You may pay an additional {B} any number of times as you cast this spell.)
this.addAbility(new MultikickerAbility(new ManaCostsImpl("{B}")));
this.addAbility(new KickerAbility(new MultikickerManaCost("{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 ability = new ConditionalTriggeredAbility(
new EntersBattlefieldTriggeredAbility(new DiscardTargetEffect(new MultikickerCount())),
KickedCondition.getInstance(),
"");
ability.addTarget(new TargetOpponent());
this.addAbility(ability);
}

View file

@ -27,15 +27,16 @@
*/
package mage.sets.worldwake;
import java.util.List;
import java.util.UUID;
import mage.Constants.CardType;
import mage.Constants.Outcome;
import mage.Constants.Rarity;
import mage.abilities.Ability;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.SpellAbility;
import mage.abilities.costs.mana.MultikickerManaCost;
import mage.abilities.dynamicvalue.common.MultikickerCount;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.keyword.MultikickerAbility;
import mage.abilities.keyword.KickerAbility;
import mage.cards.CardImpl;
import mage.game.Game;
import mage.game.permanent.Permanent;
@ -55,16 +56,26 @@ public class CometStorm extends CardImpl<CometStorm> {
this.color.setRed(true);
// Multikicker {1}
this.addAbility(new MultikickerAbility(new ManaCostsImpl("{1}")));
this.addAbility(new KickerAbility(new MultikickerManaCost("{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());
this.getSpellAbility().addTarget(new TargetCreatureOrPlayer(1));
}
public CometStorm(final CometStorm card) {
super(card);
}
@Override
public void adjustTargets(Ability ability, Game game) {
if (ability instanceof SpellAbility) {
ability.getTargets().clear();
int numbTargets = new MultikickerCount().calculate(game, ability) + 1;
ability.addTarget(new TargetCreatureOrPlayer(numbTargets));
}
}
@Override
public CometStorm copy() {
return new CometStorm(this);
@ -84,24 +95,17 @@ class CometStormEffect extends OneShotEffect<CometStormEffect> {
@Override
public boolean apply(Game game, Ability source) {
int amount = source.getManaCostsToPay().getX() + 1;
int damage = source.getManaCostsToPay().getX();
Player you = game.getPlayer(source.getControllerId());
TargetCreatureOrPlayer target = new TargetCreatureOrPlayer(amount);
if (you != null) {
if (target.canChoose(source.getControllerId(), game) && target.choose(Outcome.Damage, source.getControllerId(), source.getId(), game)) {
if (!target.getTargets().isEmpty()) {
List<UUID> targets = target.getTargets();
for (UUID uuid : targets) {
Permanent permanent = game.getPermanent(uuid);
Player player = game.getPlayer(uuid);
if (permanent != null) {
permanent.damage(damage, source.getId(), game, true, false);
}
if (player != null) {
player.damage(damage, source.getId(), game, true, false);
}
}
for (UUID uuid : this.getTargetPointer().getTargets(game, source)) {
Permanent permanent = game.getPermanent(uuid);
Player player = game.getPlayer(uuid);
if (permanent != null) {
permanent.damage(damage, source.getId(), game, true, false);
}
if (player != null) {
player.damage(damage, source.getId(), game, true, false);
}
}
return true;

View file

@ -32,11 +32,11 @@ 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.costs.mana.MultikickerManaCost;
import mage.abilities.dynamicvalue.common.MultikickerCount;
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
import mage.abilities.keyword.IslandwalkAbility;
import mage.abilities.keyword.MultikickerAbility;
import mage.abilities.keyword.KickerAbility;
import mage.cards.CardImpl;
import mage.counters.CounterType;
@ -57,7 +57,7 @@ public class EnclaveElite extends CardImpl<EnclaveElite> {
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}")));
this.addAbility(new KickerAbility(new MultikickerManaCost("{1}{U}")));
// Islandwalk
this.addAbility(new IslandwalkAbility());

View file

@ -28,24 +28,21 @@
package mage.sets.worldwake;
import mage.Constants;
import java.util.UUID;
import mage.Constants.CardType;
import mage.Constants.Rarity;
import mage.Mana;
import mage.abilities.Ability;
import mage.abilities.common.EmptyEffect;
import mage.abilities.common.EntersBattlefieldAbility;
import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.costs.mana.MultikickerManaCost;
import mage.abilities.dynamicvalue.common.CountersCount;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.keyword.MultikickerAbility;
import mage.abilities.dynamicvalue.common.MultikickerCount;
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
import mage.abilities.keyword.KickerAbility;
import mage.abilities.mana.DynamicManaAbility;
import mage.cards.CardImpl;
import mage.counters.CounterType;
import mage.game.Game;
import mage.game.permanent.Permanent;
import java.util.UUID;
/**
*
@ -60,14 +57,14 @@ public class EverflowingChalice extends CardImpl<EverflowingChalice> {
this.expansionSetCode = "WWK";
// 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);
this.addAbility(new KickerAbility(new MultikickerManaCost("{2}")));
// 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 EntersBattlefieldAbility(
new AddCountersSourceEffect(CounterType.CHARGE.createInstance(0), new MultikickerCount(), true),
"with a charge counter on it for each time it was kicked"));
// {T}: Add {1} to your mana pool for each charge counter on Everflowing Chalice.
this.addAbility(new DynamicManaAbility(Mana.ColorlessMana, new CountersCount(CounterType.CHARGE)));
}
@ -82,36 +79,3 @@ public class EverflowingChalice extends CardImpl<EverflowingChalice> {
}
class EverflowingChaliceAddCountersEffect extends OneShotEffect<EverflowingChaliceAddCountersEffect> {
public EverflowingChaliceAddCountersEffect() {
super(Constants.Outcome.Benefit);
}
public EverflowingChaliceAddCountersEffect(final EverflowingChaliceAddCountersEffect 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.CHARGE.createInstance(count), game);
}
}
}
}
return true;
}
@Override
public EverflowingChaliceAddCountersEffect copy() {
return new EverflowingChaliceAddCountersEffect(this);
}
}

View file

@ -32,10 +32,10 @@ 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.costs.mana.MultikickerManaCost;
import mage.abilities.dynamicvalue.common.MultikickerCount;
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
import mage.abilities.keyword.MultikickerAbility;
import mage.abilities.keyword.KickerAbility;
import mage.cards.CardImpl;
import mage.counters.CounterType;
@ -55,7 +55,7 @@ public class GnarlidPack extends CardImpl<GnarlidPack> {
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}{G}")));
this.addAbility(new KickerAbility(new MultikickerManaCost("{1}{G}")));
// Gnarlid Pack enters the battlefield with a +1/+1 counter on it for each time it was kicked.
this.addAbility(new EntersBattlefieldAbility(

View file

@ -35,12 +35,12 @@ import mage.Constants.TargetController;
import mage.MageInt;
import mage.abilities.common.EntersBattlefieldAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.costs.mana.MultikickerManaCost;
import mage.abilities.dynamicvalue.common.CountersCount;
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.abilities.keyword.KickerAbility;
import mage.cards.CardImpl;
import mage.counters.CounterType;
import mage.filter.common.FilterCreaturePermanent;
@ -75,7 +75,7 @@ public class JoragaWarcaller extends CardImpl<JoragaWarcaller> {
this.toughness = new MageInt(1);
// Multikicker {1}{G}
this.addAbility(new MultikickerAbility(new ManaCostsImpl("{1}{G}")));
this.addAbility(new KickerAbility(new MultikickerManaCost("{1}{G}")));
// Joraga Warcaller enters the battlefield with a +1/+1 counter on it for each time it was kicked.
this.addAbility(new EntersBattlefieldAbility(

View file

@ -32,11 +32,11 @@ 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.costs.mana.MultikickerManaCost;
import mage.abilities.dynamicvalue.common.MultikickerCount;
import mage.abilities.effects.common.GainLifeEffect;
import mage.abilities.keyword.FlyingAbility;
import mage.abilities.keyword.MultikickerAbility;
import mage.abilities.keyword.KickerAbility;
import mage.cards.CardImpl;
/**
@ -55,7 +55,7 @@ public class LightkeeperOfEmeria extends CardImpl<LightkeeperOfEmeria> {
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}")));
this.addAbility(new KickerAbility(new MultikickerManaCost("{W}")));
// Flying
this.addAbility(FlyingAbility.getInstance());

View file

@ -27,32 +27,29 @@
*/
package mage.sets.worldwake;
import java.util.UUID;
import mage.Constants;
import mage.Constants.CardType;
import mage.Constants.Rarity;
import mage.Constants.TargetController;
import mage.abilities.Ability;
import mage.abilities.common.EmptyEffect;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.condition.common.KickedCondition;
import mage.abilities.costs.mana.MultikickerManaCost;
import mage.abilities.decorator.ConditionalTriggeredAbility;
import mage.abilities.dynamicvalue.common.MultikickerCount;
import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect;
import mage.abilities.effects.common.continious.BoostAllEffect;
import mage.abilities.keyword.MultikickerAbility;
import mage.cards.Card;
import mage.abilities.keyword.KickerAbility;
import mage.cards.CardImpl;
import mage.filter.FilterCard;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.mageobject.CardTypePredicate;
import mage.filter.predicate.permanent.ControllerPredicate;
import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.players.Player;
import mage.target.common.TargetCardInYourGraveyard;
import java.util.List;
import java.util.UUID;
/**
*
* @author jeffwadsworth
@ -61,11 +58,12 @@ import java.util.UUID;
public class MarshalsAnthem extends CardImpl<MarshalsAnthem> {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Creatures you control");
private static final FilterCard filterCard = new FilterCard("creature card in your graveyard");
static {
filter.add(new ControllerPredicate(TargetController.YOU));
filterCard.add(new CardTypePredicate(CardType.CREATURE));
}
protected static final String rule = "return up to X target creature cards from your graveyard to the battlefield, where X is the number of times Marshal's Anthem was kicked";
public MarshalsAnthem(UUID ownerId) {
super(ownerId, 15, "Marshal's Anthem", Rarity.RARE, new CardType[]{CardType.ENCHANTMENT}, "{2}{W}{W}");
@ -74,15 +72,30 @@ public class MarshalsAnthem extends CardImpl<MarshalsAnthem> {
this.color.setWhite(true);
// Multikicker {1}{W}
MultikickerAbility ability = new MultikickerAbility(new EmptyEffect(rule), false);
ability.addManaCost(new ManaCostsImpl("{1}{W}"));
this.addAbility(ability);
this.addAbility(new KickerAbility(new MultikickerManaCost("{1}{W}")));
// Creatures you control get +1/+1.
this.addAbility(new SimpleStaticAbility(Constants.Zone.BATTLEFIELD, new BoostAllEffect(1, 1, Constants.Duration.WhileOnBattlefield, filter, false)));
// When Marshal's Anthem enters the battlefield, return up to X target creature cards from your graveyard to the battlefield, where X is the number of times Marshal's Anthem was kicked.
this.addAbility(new EntersBattlefieldTriggeredAbility(new MarshalsAnthemEffect()));
Ability ability = new ConditionalTriggeredAbility(
new EntersBattlefieldTriggeredAbility(new ReturnFromGraveyardToHandTargetEffect(), false),
KickedCondition.getInstance(),
"When {this} enters the battlefield, return up to X target creature cards from your graveyard to the battlefield, where X is the number of times {this} was kicked.");
this.addAbility(ability);
}
@Override
public void adjustTargets(Ability ability, Game game) {
if (ability instanceof ConditionalTriggeredAbility) {
ability.getTargets().clear();
int numbTargets = new MultikickerCount().calculate(game, ability);
if (numbTargets > 0) {
ability.addTarget(new TargetCardInYourGraveyard(0, numbTargets, filterCard));
}
}
}
public MarshalsAnthem(final MarshalsAnthem card) {
@ -93,52 +106,4 @@ public class MarshalsAnthem extends CardImpl<MarshalsAnthem> {
public MarshalsAnthem copy() {
return new MarshalsAnthem(this);
}
}
class MarshalsAnthemEffect extends OneShotEffect<MarshalsAnthemEffect> {
public MarshalsAnthemEffect() {
super(Constants.Outcome.PutCreatureInPlay);
this.staticText = "return up to X target creature cards from your graveyard to the battlefield, where X is the number of times {this} was kicked";
}
public MarshalsAnthemEffect(final MarshalsAnthemEffect effect) {
super(effect);
}
@Override
public MarshalsAnthemEffect copy() {
return new MarshalsAnthemEffect(this);
}
@Override
public boolean apply(Game game, Ability source) {
FilterCard filter = new FilterCard("creature card in your graveyard");
filter.add(new CardTypePredicate(CardType.CREATURE));
Player you = game.getPlayer(source.getControllerId());
Permanent permanent = game.getPermanent(source.getSourceId());
if (permanent != null) {
for (Ability ability : permanent.getAbilities()) {
if (ability instanceof MultikickerAbility) {
int count = Math.min(you.getGraveyard().size(), ((MultikickerAbility) ability).getActivateCount());
TargetCardInYourGraveyard target = new TargetCardInYourGraveyard(0, count, filter);
if (you != null) {
if (target.canChoose(source.getControllerId(), game) && target.choose(Constants.Outcome.Neutral, source.getControllerId(), source.getId(), game)) {
if (!target.getTargets().isEmpty()) {
List<UUID> targets = target.getTargets();
for (UUID targetId : targets) {
Card card = game.getCard(targetId);
if (card != null) {
card.putOntoBattlefield(game, Constants.Zone.GRAVEYARD, source.getId(), you.getId());
}
}
return true;
}
}
}
}
}
}
return false;
}
}
}

View file

@ -32,10 +32,10 @@ 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.costs.mana.MultikickerManaCost;
import mage.abilities.dynamicvalue.common.MultikickerCount;
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
import mage.abilities.keyword.MultikickerAbility;
import mage.abilities.keyword.KickerAbility;
import mage.abilities.keyword.SwampwalkAbility;
import mage.cards.CardImpl;
import mage.counters.CounterType;
@ -57,7 +57,7 @@ public class QuagVampires extends CardImpl<QuagVampires> {
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}")));
this.addAbility(new KickerAbility(new MultikickerManaCost("{1}{B}")));
// Swampwalk
this.addAbility(new SwampwalkAbility());

View file

@ -31,13 +31,12 @@ 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.costs.mana.MultikickerManaCost;
import mage.abilities.dynamicvalue.common.MultikickerCount;
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
import mage.abilities.keyword.HasteAbility;
import mage.abilities.keyword.MultikickerAbility;
import mage.abilities.keyword.KickerAbility;
import mage.cards.CardImpl;
import mage.counters.CounterType;
@ -57,7 +56,7 @@ public class SkitterOfLizards extends CardImpl<SkitterOfLizards> {
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}")));
this.addAbility(new KickerAbility(new MultikickerManaCost("{1}{R}")));
// Haste
this.addAbility(HasteAbility.getInstance());

View file

@ -27,11 +27,17 @@
*/
package mage.sets.worldwake;
import java.util.UUID;
import mage.Constants.CardType;
import mage.Constants.Outcome;
import mage.Constants.Rarity;
import mage.abilities.Ability;
import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.SpellAbility;
import mage.abilities.costs.mana.MultikickerManaCost;
import mage.abilities.dynamicvalue.common.MultikickerCount;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.counter.AddCountersTargetEffect;
import mage.abilities.keyword.KickerAbility;
import mage.cards.CardImpl;
import mage.counters.Counter;
import mage.counters.CounterType;
@ -39,10 +45,6 @@ import mage.game.Game;
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
@ -57,7 +59,7 @@ public class StrengthOfTheTajuru extends CardImpl<StrengthOfTheTajuru> {
// Multikicker (You may pay an additional {1} any number of times as you cast this spell.)
this.addAbility(new MultikickerAbility(new ManaCostsImpl("{1}")));
this.addAbility(new KickerAbility(new MultikickerManaCost("{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());
@ -65,10 +67,11 @@ public class StrengthOfTheTajuru extends CardImpl<StrengthOfTheTajuru> {
}
@Override
public void adjustCosts(Ability ability, Game game) {
int numTargets = ability.getTargets().get(0).getTargets().size();
if (numTargets > 1) {
ability.getManaCostsToPay().add(new GenericManaCost(numTargets - 1));
public void adjustTargets(Ability ability, Game game) {
if (ability instanceof SpellAbility) {
ability.getTargets().clear();
int numbTargets = new MultikickerCount().calculate(game, ability) + 1;
ability.addTarget(new TargetCreaturePermanent(0, numbTargets));
}
}
@ -86,7 +89,7 @@ class StrengthOfTheTajuruAddCountersTargetEffect extends OneShotEffect<StrengthO
public StrengthOfTheTajuruAddCountersTargetEffect() {
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.";
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";
}
public StrengthOfTheTajuruAddCountersTargetEffect(final StrengthOfTheTajuruAddCountersTargetEffect effect) {

View file

@ -27,7 +27,6 @@
*/
package mage.sets.worldwake;
import java.util.List;
import java.util.UUID;
import mage.Constants;
import mage.Constants.CardType;
@ -35,20 +34,16 @@ 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.effects.ContinuousEffect;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.condition.common.KickedCondition;
import mage.abilities.costs.mana.MultikickerManaCost;
import mage.abilities.decorator.ConditionalTriggeredAbility;
import mage.abilities.dynamicvalue.common.MultikickerCount;
import mage.abilities.effects.common.continious.GainAbilityTargetEffect;
import mage.abilities.keyword.FlyingAbility;
import mage.abilities.keyword.MultikickerAbility;
import mage.abilities.keyword.KickerAbility;
import mage.cards.CardImpl;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.mageobject.CardTypePredicate;
import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.players.Player;
import mage.target.common.TargetCreaturePermanent;
import mage.target.targetpointer.FixedTarget;
/**
*
@ -66,15 +61,29 @@ public class VoyagerDrake extends CardImpl<VoyagerDrake> {
this.toughness = new MageInt(3);
// Multikicker {U}
this.addAbility(new MultikickerAbility(new ManaCostsImpl("{U}")));
this.addAbility(new KickerAbility(new MultikickerManaCost("{U}")));
// Flying
this.addAbility(FlyingAbility.getInstance());
// When Voyager Drake enters the battlefield, up to X target creatures gain flying until end of turn, where X is the number of times Voyager Drake was kicked.
this.addAbility(new EntersBattlefieldTriggeredAbility(new VoyagerDrakeEffect(), false));
Ability ability = new ConditionalTriggeredAbility(
new EntersBattlefieldTriggeredAbility(new GainAbilityTargetEffect(FlyingAbility.getInstance(), Constants.Duration.EndOfTurn), false),
KickedCondition.getInstance(),
"When {this} enters the battlefield, up to X target creatures gain flying until end of turn, where X is the number of times {this} was kicked.");
this.addAbility(ability);
}
@Override
public void adjustTargets(Ability ability, Game game) {
if (ability instanceof ConditionalTriggeredAbility) {
ability.getTargets().clear();
int numbTargets = new MultikickerCount().calculate(game, ability);
if (numbTargets > 0) {
ability.addTarget(new TargetCreaturePermanent(0,numbTargets));
}
}
}
public VoyagerDrake(final VoyagerDrake card) {
super(card);
}
@ -84,53 +93,3 @@ public class VoyagerDrake extends CardImpl<VoyagerDrake> {
return new VoyagerDrake(this);
}
}
class VoyagerDrakeEffect extends OneShotEffect<VoyagerDrakeEffect> {
public VoyagerDrakeEffect() {
super(Constants.Outcome.PutCreatureInPlay);
this.staticText = "up to X target creatures gain flying until end of turn, where X is the number of times {this} was kicked";
}
public VoyagerDrakeEffect(final VoyagerDrakeEffect effect) {
super(effect);
}
@Override
public VoyagerDrakeEffect copy() {
return new VoyagerDrakeEffect(this);
}
@Override
public boolean apply(Game game, Ability source) {
FilterCreaturePermanent filter = new FilterCreaturePermanent();
filter.add(new CardTypePredicate(CardType.CREATURE));
Player you = game.getPlayer(source.getControllerId());
Permanent permanent = game.getPermanent(source.getSourceId());
if (permanent != null) {
for (Ability ability : permanent.getAbilities()) {
if (ability instanceof MultikickerAbility) {
int count = Math.min(game.getBattlefield().countAll(filter, game), ((MultikickerAbility) ability).getActivateCount());
TargetCreaturePermanent target = new TargetCreaturePermanent(0, count, filter, false);
if (you != null) {
if (target.canChoose(source.getControllerId(), game) && target.choose(Constants.Outcome.AddAbility, source.getControllerId(), source.getId(), game)) {
if (!target.getTargets().isEmpty()) {
List<UUID> targets = target.getTargets();
for (UUID targetId : targets) {
Permanent creature = game.getPermanent(targetId);
if (creature != null) {
ContinuousEffect effect = new GainAbilityTargetEffect(FlyingAbility.getInstance(), Constants.Duration.EndOfTurn);
effect.setTargetPointer(new FixedTarget(creature.getId()));
game.addEffect(effect, source);
}
}
return true;
}
}
}
}
}
}
return false;
}
}

View file

@ -30,15 +30,13 @@ package mage.sets.worldwake;
import java.util.UUID;
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.costs.mana.MultikickerManaCost;
import mage.abilities.dynamicvalue.common.MultikickerCount;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.keyword.MultikickerAbility;
import mage.abilities.keyword.KickerAbility;
import mage.cards.CardImpl;
import mage.game.permanent.token.WolfToken;
@ -57,7 +55,7 @@ public class WolfbriarElemental extends CardImpl<WolfbriarElemental> {
this.toughness = new MageInt(4);
// Multikicker (You may pay an additional {G} any number of times as you cast this spell.)
this.addAbility(new MultikickerAbility(new ManaCostsImpl("{G}")));
this.addAbility(new KickerAbility(new MultikickerManaCost("{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())));

View file

@ -42,6 +42,7 @@ import mage.cards.CardImpl;
import mage.counters.CounterType;
import java.util.UUID;
import mage.abilities.keyword.KickerAbility;
/**
* @author nantuko, BetaSteward_at_googlemail.com
@ -62,7 +63,7 @@ public class AetherFigment extends CardImpl<AetherFigment> {
this.addAbility(new UnblockableAbility());
// Kicker {3}
this.getSpellAbility().addOptionalCost(new KickerManaCost("{3}"));
this.addAbility(new KickerAbility(new KickerManaCost("{3}")));
// If AEther Figment was kicked, it enters the battlefield with two +1/+1 counters on it
Ability ability = new EntersBattlefieldAbility(new ConditionalOneShotEffect(new AddCountersSourceEffect(CounterType.P1P1.createInstance(2)), KickedCondition.getInstance(), ""), staticText);

View file

@ -32,7 +32,12 @@ import mage.Constants.CardType;
import mage.Constants.Outcome;
import mage.Constants.Rarity;
import mage.abilities.Ability;
import mage.abilities.condition.common.KickedCondition;
import mage.abilities.costs.OptionalAdditionalCost;
import mage.abilities.costs.OptionalAdditionalCostImpl;
import mage.abilities.costs.common.TapTargetCost;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.Effect;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.keyword.KickerAbility;
import mage.cards.CardImpl;
@ -64,14 +69,20 @@ public class BloodTribute extends CardImpl<BloodTribute> {
this.color.setBlack(true);
// Kicker - Tap an untapped Vampire you control.
OptionalAdditionalCost cost = new OptionalAdditionalCostImpl("Kicker-","",new TapTargetCost(new TargetControlledCreaturePermanent(1, 1, filter, true)));
this.addAbility(new KickerAbility(cost));
// Target opponent loses half his or her life, rounded up.
this.getSpellAbility().addTarget(new TargetOpponent());
this.getSpellAbility().addEffect(new BloodTributeLoseLifeEffect());
// Kicker - Tap an untapped Vampire you control.
// If Blood Tribute was kicked, you gain life equal to the life lost this way.
KickerAbility ability = new KickerAbility(new BloodTributeGainLifeEffect(), false);
ability.addCost(new TapTargetCost(new TargetControlledCreaturePermanent(1, 1, filter, true)));
this.addAbility(ability);
Effect effect = new ConditionalOneShotEffect(
new BloodTributeGainLifeEffect(),
KickedCondition.getInstance(),
"If Blood Tribute was kicked, you gain life equal to the life lost this way");
this.getSpellAbility().addEffect(effect);
}
public BloodTribute(final BloodTribute card) {

View file

@ -40,6 +40,7 @@ import mage.abilities.effects.ContinuousEffect;
import mage.abilities.effects.common.continious.BoostControlledEffect;
import mage.abilities.effects.common.continious.GainAbilityControlledEffect;
import mage.abilities.keyword.FirstStrikeAbility;
import mage.abilities.keyword.KickerAbility;
import mage.cards.CardImpl;
import mage.filter.common.FilterCreaturePermanent;
import mage.game.Game;
@ -57,10 +58,11 @@ public class BoldDefense extends CardImpl<BoldDefense> {
this.expansionSetCode = "ZEN";
this.color.setWhite(true);
this.addAbility(new KickerAbility(new KickerManaCost("{3}{W}")));
DynamicValue dn = new BoldDefensePTCount();
this.getSpellAbility().addEffect(new BoostControlledEffect(dn, dn, Duration.EndOfTurn));
this.getSpellAbility().addOptionalCost(new KickerManaCost("{3}{W}"));
ContinuousEffect effect = new GainAbilityControlledEffect(FirstStrikeAbility.getInstance(), Duration.EndOfTurn, new FilterCreaturePermanent(), false);
this.getSpellAbility().addEffect(new ConditionalContinousEffect(effect, KickedCondition.getInstance(), staticText));

View file

@ -35,6 +35,7 @@ import mage.abilities.condition.common.KickedCondition;
import mage.abilities.costs.mana.KickerManaCost;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.DamageTargetEffect;
import mage.abilities.keyword.KickerAbility;
import mage.cards.CardImpl;
import mage.target.common.TargetCreatureOrPlayer;
@ -48,7 +49,9 @@ public class BurstLightning extends CardImpl<BurstLightning> {
super(ownerId, 119, "Burst Lightning", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{R}");
this.expansionSetCode = "ZEN";
this.color.setRed(true);
this.getSpellAbility().addOptionalCost(new KickerManaCost("{4}"));
this.addAbility(new KickerAbility(new KickerManaCost("{4}")));
this.getSpellAbility().addTarget(new TargetCreatureOrPlayer());
this.getSpellAbility().addEffect(new ConditionalOneShotEffect(new DamageTargetEffect(4),
new DamageTargetEffect(2), KickedCondition.getInstance(), "{this} deals 2 damage to target creature or player. If {this} was kicked, it deals 4 damage to that creature or player instead"));

View file

@ -36,6 +36,7 @@ import mage.abilities.condition.common.KickedCondition;
import mage.abilities.costs.mana.KickerManaCost;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.keyword.KickerAbility;
import mage.cards.CardImpl;
import mage.game.permanent.token.Token;
@ -49,7 +50,9 @@ public class ConquerorsPledge extends CardImpl<ConquerorsPledge> {
super(ownerId, 8, "Conqueror's Pledge", Rarity.RARE, new CardType[]{CardType.SORCERY}, "{2}{W}{W}{W}");
this.expansionSetCode = "ZEN";
this.color.setWhite(true);
this.getSpellAbility().addOptionalCost(new KickerManaCost("{6}"));
this.addAbility(new KickerAbility(new KickerManaCost("{6}")));
this.getSpellAbility().addEffect(new ConditionalOneShotEffect(new CreateTokenEffect(new KorSoldierToken(), 12),
new CreateTokenEffect(new KorSoldierToken(), 6), KickedCondition.getInstance(),
"Put six 1/1 white Kor Soldier creature tokens onto the battlefield. If {this} was kicked, put twelve of those tokens onto the battlefield instead"));

View file

@ -41,6 +41,7 @@ import mage.abilities.decorator.ConditionalContinousEffect;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.ExileTargetEffect;
import mage.abilities.effects.common.continious.BoostTargetEffect;
import mage.abilities.keyword.KickerAbility;
import mage.cards.CardImpl;
import mage.game.Game;
import mage.target.targetpointer.FixedTarget;
@ -58,7 +59,8 @@ public class ElementalAppeal extends CardImpl<ElementalAppeal> {
this.color.setRed(true);
// Kicker {5}
this.getSpellAbility().addOptionalCost(new KickerManaCost("{5}"));
this.addAbility(new KickerAbility(new KickerManaCost("{5}")));
// Put a 7/1 red Elemental creature token with trample and haste onto the battlefield. Exile it at the beginning of the next end step.
this.getSpellAbility().addEffect(new ElementalAppealEffect());
// If Elemental Appeal was kicked, that creature gets +7/+0 until end of turn.

View file

@ -42,6 +42,7 @@ import mage.filter.predicate.mageobject.CardTypePredicate;
import mage.target.TargetPlayer;
import java.util.UUID;
import mage.abilities.keyword.KickerAbility;
/**
*
@ -66,7 +67,8 @@ public class GatekeeperOfMalakir extends CardImpl<GatekeeperOfMalakir> {
this.power = new MageInt(2);
this.toughness = new MageInt(2);
this.getSpellAbility().addOptionalCost(new KickerManaCost("{B}"));
this.addAbility(new KickerAbility(new KickerManaCost("{B}")));
EntersBattlefieldTriggeredAbility ability =
new EntersBattlefieldTriggeredAbility(new SacrificeEffect(filter, 1, "target player"));

View file

@ -46,6 +46,7 @@ import mage.abilities.effects.common.AttachEffect;
import mage.abilities.effects.common.continious.GainAbilityAttachedEffect;
import mage.abilities.effects.common.continious.SetPowerToughnessSourceEffect;
import mage.abilities.keyword.EnchantAbility;
import mage.abilities.keyword.KickerAbility;
import mage.abilities.keyword.TrampleAbility;
import mage.cards.Card;
import mage.cards.CardImpl;
@ -73,7 +74,8 @@ public class Gigantiform extends CardImpl<Gigantiform> {
this.color.setGreen(true);
// Kicker {4}
this.getSpellAbility().addOptionalCost(new KickerManaCost("{4}"));
this.addAbility(new KickerAbility(new KickerManaCost("{4}")));
// Enchant creature
TargetPermanent auraTarget = new TargetCreaturePermanent();
this.getSpellAbility().addTarget(auraTarget);

View file

@ -39,6 +39,7 @@ 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;
/**
@ -58,7 +59,8 @@ public class GoblinBushwhacker extends CardImpl<GoblinBushwhacker> {
this.toughness = new MageInt(1);
// Kicker {R} (You may pay an additional {R} as you cast this spell.)
this.getSpellAbility().addOptionalCost(new KickerManaCost("{R}"));
this.addAbility(new KickerAbility(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);

View file

@ -38,6 +38,7 @@ import mage.abilities.costs.mana.KickerManaCost;
import mage.abilities.decorator.ConditionalTriggeredAbility;
import mage.abilities.effects.common.DestroyTargetEffect;
import mage.abilities.keyword.HasteAbility;
import mage.abilities.keyword.KickerAbility;
import mage.cards.CardImpl;
import mage.target.common.TargetNonBasicLandPermanent;
@ -57,7 +58,8 @@ public class GoblinRuinblaster extends CardImpl<GoblinRuinblaster> {
this.toughness = new MageInt(1);
// Kicker {R} (You may pay an additional {R} as you cast this spell.)
this.getSpellAbility().addOptionalCost(new KickerManaCost("{R}"));
this.addAbility(new KickerAbility(new KickerManaCost("{R}")));
// Haste
this.addAbility(HasteAbility.getInstance());

View file

@ -37,6 +37,7 @@ 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;
@ -56,7 +57,8 @@ public class HeartstabberMosquito extends CardImpl<HeartstabberMosquito> {
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}"));
this.addAbility(new KickerAbility(new KickerManaCost("{2}{B}")));
// Flying
this.addAbility(FlyingAbility.getInstance());

View file

@ -36,6 +36,7 @@ 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;
@ -51,7 +52,7 @@ public class IntoTheRoil extends CardImpl<IntoTheRoil> {
this.color.setBlue(true);
// Kicker {1}{U} (You may pay an additional {1}{U} as you cast this spell.)
this.getSpellAbility().addOptionalCost(new KickerManaCost("{1}{U}"));
this.addAbility(new KickerAbility(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());

View file

@ -38,6 +38,7 @@ import mage.abilities.costs.mana.KickerManaCost;
import mage.abilities.decorator.ConditionalTriggeredAbility;
import mage.abilities.effects.common.continious.GainAbilityTargetEffect;
import mage.abilities.keyword.FlyingAbility;
import mage.abilities.keyword.KickerAbility;
import mage.cards.CardImpl;
import mage.target.common.TargetCreaturePermanent;
@ -56,7 +57,9 @@ public class KorAeronaut extends CardImpl<KorAeronaut> {
this.color.setWhite(true);
this.power = new MageInt(2);
this.toughness = new MageInt(2);
this.getSpellAbility().addOptionalCost(new KickerManaCost("{1}{W}"));
this.addAbility(new KickerAbility(new KickerManaCost("{1}{W}")));
this.addAbility(FlyingAbility.getInstance());

View file

@ -37,6 +37,7 @@ 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;
@ -66,7 +67,8 @@ public class KorSanctifiers extends CardImpl<KorSanctifiers> {
this.toughness = new MageInt(3);
// Kicker {W} (You may pay an additional {W} as you cast this spell.)
this.getSpellAbility().addOptionalCost(new KickerManaCost("{W}"));
this.addAbility(new KickerAbility(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);

View file

@ -41,6 +41,7 @@ import mage.target.TargetPlayer;
import java.util.List;
import java.util.UUID;
import mage.abilities.keyword.KickerAbility;
/**
*
@ -57,7 +58,8 @@ public class MarshCasualties extends CardImpl<MarshCasualties> {
this.color.setBlack(true);
// Kicker {3}
this.getSpellAbility().addOptionalCost(new KickerManaCost("{3}"));
this.addAbility(new KickerAbility(new KickerManaCost("{3}")));
// Creatures target player controls get -1/-1 until end of turn. If Marsh Casualties was kicked, those creatures get -2/-2 until end of turn instead.
this.getSpellAbility().addEffect(new ConditionalContinousEffect(
new MarshCasualtiesEffect(-2, -2),

View file

@ -36,6 +36,7 @@ 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;
@ -65,7 +66,7 @@ public class MoldShambler extends CardImpl<MoldShambler> {
this.toughness = new MageInt(3);
// Kicker {1}{G} (You may pay an additional {1}{G} as you cast this spell.)
this.getSpellAbility().addOptionalCost(new KickerManaCost("{1}{G}"));
this.addAbility(new KickerAbility(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);

View file

@ -37,6 +37,7 @@ 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.abilities.keyword.ReachAbility;
import mage.cards.CardImpl;
import mage.filter.common.FilterCreaturePermanent;
@ -65,7 +66,7 @@ public class OranRiefRecluse extends CardImpl<OranRiefRecluse> {
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}"));
this.addAbility(new KickerAbility(new KickerManaCost("{2}{G}")));
// Reach (This creature can block creatures with flying.)
this.addAbility(ReachAbility.getInstance());

View file

@ -36,6 +36,7 @@ import mage.abilities.condition.common.KickedCondition;
import mage.abilities.costs.mana.KickerManaCost;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.keyword.KickerAbility;
import mage.cards.Card;
import mage.cards.CardImpl;
import mage.game.Game;
@ -56,7 +57,8 @@ public class RiteOfReplication extends CardImpl<RiteOfReplication> {
this.color.setBlue(true);
// Kicker {5}
this.getSpellAbility().addOptionalCost(new KickerManaCost("{5}"));
this.addAbility(new KickerAbility(new KickerManaCost("{5}")));
// Put a token that's a copy of target creature onto the battlefield. If Rite of Replication was kicked, put five of those tokens onto the battlefield instead.
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
this.getSpellAbility().addEffect(new ConditionalOneShotEffect(new RiteOfReplicationEffect(5),

View file

@ -37,6 +37,7 @@ import mage.abilities.condition.common.KickedCondition;
import mage.abilities.costs.mana.KickerManaCost;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.keyword.KickerAbility;
import mage.cards.Card;
import mage.cards.CardImpl;
import mage.filter.FilterCard;
@ -60,7 +61,8 @@ public class SadisticSacrament extends CardImpl<SadisticSacrament> {
this.color.setBlack(true);
// Kicker {7}
this.getSpellAbility().addOptionalCost(new KickerManaCost("{7}"));
this.addAbility(new KickerAbility(new KickerManaCost("{7}")));
// Search target player's library for up to three cards, exile them, then that player shuffles his or her library.
// If Sadistic Sacrament was kicked, instead search that player's library for up to fifteen cards, exile them, then that player shuffles his or her library.
this.getSpellAbility().addEffect(new ConditionalOneShotEffect(

View file

@ -37,6 +37,7 @@ 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;
@ -60,7 +61,7 @@ public class TempestOwl extends CardImpl<TempestOwl> {
this.addAbility(FlyingAbility.getInstance());
// Kicker {4}{U}
this.getSpellAbility().addOptionalCost(new KickerManaCost("{4}{U}"));
this.addAbility(new KickerAbility(new KickerManaCost("{4}{U}")));
// When Tempest Owl enters the battlefield, if it was kicked, tap up to three target permanents.
EntersBattlefieldTriggeredAbility ability = new EntersBattlefieldTriggeredAbility(new TapTargetEffect(), false);

View file

@ -36,6 +36,7 @@ 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.keyword.KickerAbility;
import mage.cards.CardImpl;
import mage.target.common.TargetCreaturePermanent;
@ -56,7 +57,8 @@ public class TorchSlinger extends CardImpl<TorchSlinger> {
this.toughness = new MageInt(2);
// Kicker {1}{R} (You may pay an additional {1}{R} as you cast this spell.)
this.getSpellAbility().addOptionalCost(new KickerManaCost("{1}{R}"));
this.addAbility(new KickerAbility(new KickerManaCost("{1}{R}")));
// 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);

View file

@ -37,6 +37,7 @@ 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;
@ -54,7 +55,7 @@ public class VampiresBite extends CardImpl<VampiresBite> {
this.color.setBlack(true);
// Kicker {2}{B} (You may pay an additional {2}{B} as you cast this spell.)
this.getSpellAbility().addOptionalCost(new KickerManaCost("{2}{B}"));
this.addAbility(new KickerAbility(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());

View file

@ -39,6 +39,7 @@ import mage.abilities.decorator.ConditionalContinousEffect;
import mage.abilities.effects.common.continious.BoostTargetEffect;
import mage.abilities.effects.common.continious.GainAbilityTargetEffect;
import mage.abilities.keyword.HexproofAbility;
import mage.abilities.keyword.KickerAbility;
import mage.cards.CardImpl;
import mage.target.common.TargetCreaturePermanent;
@ -53,11 +54,16 @@ public class VinesOfVastwood extends CardImpl<VinesOfVastwood> {
super(ownerId, 193, "Vines of Vastwood", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{G}");
this.expansionSetCode = "ZEN";
this.color.setGreen(true);
// Kicker {G} (You may pay an additional {G} as you cast this spell.)
this.addAbility(new KickerAbility(new KickerManaCost("{G}")));
// Target creature can't be the target of spells or abilities your opponents control this turn.
TargetCreaturePermanent target = new TargetCreaturePermanent();
this.getSpellAbility().addTarget(target);
this.getSpellAbility().addEffect(new GainAbilityTargetEffect(HexproofAbility.getInstance(), Duration.EndOfTurn));
this.getSpellAbility().addOptionalCost(new KickerManaCost("{G}"));
// If Vines of Vastwood was kicked, that creature gets +4/+4 until end of turn.
this.getSpellAbility().addEffect(new ConditionalContinousEffect(new BoostTargetEffect(4, 4, Duration.EndOfTurn),
KickedCondition.getInstance(), staticText));
}