Improved target messages fot multi-mode cards

This commit is contained in:
Oleg Agafonov 2019-01-21 16:19:10 +04:00
parent 6f4d04121d
commit 53d37eca16
15 changed files with 87 additions and 102 deletions

View file

@ -1,7 +1,5 @@
package mage.cards.d;
import java.util.UUID;
import mage.abilities.Mode;
import mage.abilities.effects.common.DestroyTargetEffect;
import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect;
@ -13,19 +11,21 @@ import mage.filter.predicate.mageobject.CardTypePredicate;
import mage.target.common.TargetCardInYourGraveyard;
import mage.target.common.TargetEnchantmentPermanent;
import java.util.UUID;
/**
*
* @author LevelX2
*/
public final class DawnToDusk extends CardImpl {
private static final FilterCard filterCard = new FilterCard("enchantment card from your graveyard");
static {
filterCard.add(new CardTypePredicate(CardType.ENCHANTMENT));
}
public DawnToDusk(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{2}{W}{W}");
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2}{W}{W}");
// Choose one or both -
@ -33,11 +33,11 @@ public final class DawnToDusk extends CardImpl {
this.getSpellAbility().getModes().setMaxModes(2);
// Return target enchantment card from your graveyard to your hand;
this.getSpellAbility().addEffect(new ReturnFromGraveyardToHandTargetEffect());
this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(filterCard));
this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(filterCard).withChooseHint("return from graveyard to hand"));
// and/or destroy target enchantment.
Mode mode = new Mode();
mode.addEffect(new DestroyTargetEffect());
mode.addTarget(new TargetEnchantmentPermanent());
mode.addTarget(new TargetEnchantmentPermanent().withChooseHint("destroy"));
this.getSpellAbility().addMode(mode);
}

View file

@ -1,7 +1,5 @@
package mage.cards.f;
import java.util.UUID;
import mage.abilities.Mode;
import mage.abilities.effects.common.DestroyTargetEffect;
import mage.cards.CardImpl;
@ -10,25 +8,26 @@ import mage.constants.CardType;
import mage.target.common.TargetArtifactPermanent;
import mage.target.common.TargetNonBasicLandPermanent;
import java.util.UUID;
/**
*
* @author BetaSteward_at_googlemail.com
*/
public final class FissureVent extends CardImpl {
public FissureVent(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{3}{R}{R}");
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{3}{R}{R}");
// Choose one or both - Destroy target artifact; and/or destroy target nonbasic land.
this.getSpellAbility().getModes().setMinModes(1);
this.getSpellAbility().getModes().setMaxModes(2);
this.getSpellAbility().addTarget(new TargetArtifactPermanent());
this.getSpellAbility().addEffect(new DestroyTargetEffect());
this.getSpellAbility().addTarget(new TargetArtifactPermanent().withChooseHint("destroy"));
Mode mode1 = new Mode();
mode1.addTarget(new TargetNonBasicLandPermanent());
mode1.addEffect(new DestroyTargetEffect());
mode1.addTarget(new TargetNonBasicLandPermanent().withChooseHint("destroy"));
this.getSpellAbility().addMode(mode1);
}

View file

@ -1,7 +1,5 @@
package mage.cards.f;
import java.util.UUID;
import mage.abilities.Mode;
import mage.abilities.effects.common.ReturnToHandTargetEffect;
import mage.cards.CardImpl;
@ -11,8 +9,9 @@ import mage.filter.StaticFilters;
import mage.filter.common.FilterArtifactCard;
import mage.target.common.TargetCardInYourGraveyard;
import java.util.UUID;
/**
*
* @author fireshoes
*/
public final class FortuitousFind extends CardImpl {
@ -26,12 +25,12 @@ public final class FortuitousFind extends CardImpl {
// Return target artifact card from your graveyard to your hand.;
this.getSpellAbility().addEffect(new ReturnToHandTargetEffect());
this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(new FilterArtifactCard("artifact card from your graveyard")));
this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(new FilterArtifactCard("artifact card from your graveyard")).withChooseHint("return to hand"));
// or Return target creature card from your graveyard to your hand.
Mode mode = new Mode();
mode.addEffect(new ReturnToHandTargetEffect());
mode.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD));
mode.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD).withChooseHint("return to hand"));
this.getSpellAbility().addMode(mode);
}

View file

@ -1,7 +1,5 @@
package mage.cards.g;
import java.util.UUID;
import mage.abilities.Mode;
import mage.abilities.effects.common.ReturnToHandTargetEffect;
import mage.cards.CardImpl;
@ -11,8 +9,9 @@ import mage.filter.StaticFilters;
import mage.filter.common.FilterLandCard;
import mage.target.common.TargetCardInYourGraveyard;
import java.util.UUID;
/**
*
* @author North
*/
public final class GrimDiscovery extends CardImpl {
@ -27,11 +26,11 @@ public final class GrimDiscovery extends CardImpl {
this.getSpellAbility().getModes().setMaxModes(2);
// Return target creature card from your graveyard to your hand;
this.getSpellAbility().addEffect(new ReturnToHandTargetEffect());
this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD));
this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD).withChooseHint("return to hand"));
// and/or return target land card from your graveyard to your hand.
Mode mode1 = new Mode();
mode1.addEffect(new ReturnToHandTargetEffect());
mode1.addTarget(new TargetCardInYourGraveyard(filterLandCard));
mode1.addTarget(new TargetCardInYourGraveyard(filterLandCard).withChooseHint("return to hand"));
this.getSpellAbility().addMode(mode1);
}

View file

@ -1,7 +1,5 @@
package mage.cards.r;
import java.util.UUID;
import mage.abilities.Mode;
import mage.abilities.effects.common.DestroyTargetEffect;
import mage.cards.CardImpl;
@ -11,31 +9,31 @@ import mage.target.common.TargetArtifactPermanent;
import mage.target.common.TargetEnchantmentPermanent;
import mage.target.common.TargetLandPermanent;
/**
*
* @author noxx
import java.util.UUID;
/**
* @author noxx
*/
public final class RainOfThorns extends CardImpl {
public RainOfThorns(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{4}{G}{G}");
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{4}{G}{G}");
// Choose one or more - Destroy target artifact; destroy target enchantment; and/or destroy target land.
this.getSpellAbility().addEffect(new DestroyTargetEffect());
this.getSpellAbility().addTarget(new TargetArtifactPermanent());
this.getSpellAbility().addTarget(new TargetArtifactPermanent().withChooseHint("destroy"));
this.getSpellAbility().getModes().setMaxModes(1);
this.getSpellAbility().getModes().setMaxModes(3);
Mode mode1 = new Mode();
mode1.addEffect(new DestroyTargetEffect());
mode1.addTarget(new TargetEnchantmentPermanent());
mode1.addTarget(new TargetEnchantmentPermanent().withChooseHint("destroy"));
this.getSpellAbility().addMode(mode1);
Mode mode2 = new Mode();
mode2.addEffect(new DestroyTargetEffect());
mode2.addTarget(new TargetLandPermanent());
mode2.addTarget(new TargetLandPermanent().withChooseHint("destroy"));
this.getSpellAbility().addMode(mode2);
}

View file

@ -1,7 +1,5 @@
package mage.cards.r;
import java.util.UUID;
import mage.abilities.Mode;
import mage.abilities.effects.common.ReturnToHandTargetEffect;
import mage.cards.CardImpl;
@ -11,8 +9,9 @@ import mage.filter.StaticFilters;
import mage.filter.common.FilterArtifactCard;
import mage.target.common.TargetCardInYourGraveyard;
import java.util.UUID;
/**
*
* @author North
*/
public final class RememberTheFallen extends CardImpl {
@ -28,12 +27,12 @@ public final class RememberTheFallen extends CardImpl {
// Return target creature card from your graveyard to your hand.
this.getSpellAbility().addEffect(new ReturnToHandTargetEffect());
this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD));
this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD).withChooseHint("return to hand"));
// Return target artifact card from your graveyard to your hand.
Mode mode = new Mode();
mode.addEffect(new ReturnToHandTargetEffect());
mode.addTarget(new TargetCardInYourGraveyard(filterArtifact));
mode.addTarget(new TargetCardInYourGraveyard(filterArtifact).withChooseHint("return to hand"));
this.getSpellAbility().addMode(mode);
}

View file

@ -1,7 +1,5 @@
package mage.cards.r;
import java.util.UUID;
import mage.abilities.Mode;
import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect;
import mage.cards.CardImpl;
@ -12,8 +10,9 @@ import mage.filter.StaticFilters;
import mage.filter.predicate.mageobject.CardTypePredicate;
import mage.target.common.TargetCardInYourGraveyard;
import java.util.UUID;
/**
*
* @author LevelX2
*/
public final class RevivingMelody extends CardImpl {
@ -33,11 +32,11 @@ public final class RevivingMelody extends CardImpl {
//Return target creature card from your graveyard to your hand;
this.getSpellAbility().addEffect(new ReturnFromGraveyardToHandTargetEffect());
this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD));
this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD).withChooseHint("return to hand"));
// and/or return target enchantment card from your graveyard to your hand.
Mode mode = new Mode();
mode.addEffect(new ReturnFromGraveyardToHandTargetEffect());
mode.addTarget(new TargetCardInYourGraveyard(filterCard));
mode.addTarget(new TargetCardInYourGraveyard(filterCard).withChooseHint("return to hand"));
this.getSpellAbility().addMode(mode);
}

View file

@ -1,7 +1,5 @@
package mage.cards.s;
import java.util.UUID;
import mage.abilities.Mode;
import mage.abilities.effects.common.CreateTokenCopyTargetEffect;
import mage.cards.CardImpl;
@ -10,30 +8,31 @@ import mage.constants.CardType;
import mage.target.common.TargetArtifactPermanent;
import mage.target.common.TargetCreaturePermanent;
import java.util.UUID;
/**
*
* @author LevelX2
*/
public final class SaheelisArtistry extends CardImpl {
public SaheelisArtistry(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{4}{U}{U}");
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{4}{U}{U}");
// Choose one or both
this.getSpellAbility().getModes().setMinModes(1);
this.getSpellAbility().getModes().setMaxModes(2);
// Create a token that's a copy of target artifact.
this.getSpellAbility().addTarget(new TargetArtifactPermanent());
CreateTokenCopyTargetEffect effect = new CreateTokenCopyTargetEffect();
effect.setText("Create a token that's a copy of target artifact");
this.getSpellAbility().addEffect(effect);
this.getSpellAbility().addTarget(new TargetArtifactPermanent().withChooseHint("create copy of that"));
// Create a token that's a copy of target creature, except that it's an artifact in addition to its other types.
Mode mode1 = new Mode();
mode1.addTarget(new TargetCreaturePermanent());
effect = new CreateTokenCopyTargetEffect();
effect.setBecomesArtifact(true);
effect.setText("Create a token that's a copy of target creature, except that it's an artifact in addition to its other types");
mode1.addEffect(effect);
mode1.addTarget(new TargetCreaturePermanent().withChooseHint("create copy of that, artifact type"));
this.getSpellAbility().addMode(mode1);
}

View file

@ -1,8 +1,5 @@
package mage.cards.s;
import java.util.List;
import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.Mode;
import mage.abilities.costs.mana.GenericManaCost;
@ -29,22 +26,24 @@ import mage.players.Player;
import mage.target.TargetPlayer;
import mage.target.common.TargetCreaturePermanent;
import java.util.List;
import java.util.UUID;
/**
*
* @author LevelX2
*/
public final class SavageAlliance extends CardImpl {
private static final FilterPlayer filterPlayer = new FilterPlayer("player whose creatures gain trample");
private static final FilterCreaturePermanent filterCreature = new FilterCreaturePermanent("creature to deal 2 damage to");
private static final FilterPlayer filterOpponent = new FilterPlayer("opponent whose creatures get dealt damage");
private static final FilterPlayer filterPlayer = new FilterPlayer();
private static final FilterCreaturePermanent filterCreature = new FilterCreaturePermanent();
private static final FilterPlayer filterOpponent = new FilterPlayer();
static {
filterOpponent.add(new PlayerPredicate(TargetController.OPPONENT));
}
public SavageAlliance(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{2}{R}");
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{2}{R}");
// Escalate {1}
this.addAbility(new EscalateAbility(new GenericManaCost(1)));
@ -55,20 +54,20 @@ public final class SavageAlliance extends CardImpl {
// Creatures target player controls gain trample until end of turn.
this.getSpellAbility().addEffect(new SavageAllianceGainTrampleEffect());
this.getSpellAbility().addTarget(new TargetPlayer(1, 1, false, filterPlayer));
this.getSpellAbility().addTarget(new TargetPlayer(1, 1, false, filterPlayer).withChooseHint("whose creatures gain trample"));
// Savage Alliance deals 2 damage to target creature.;
Mode mode = new Mode();
Effect effect = new DamageTargetEffect(2);
effect.setText("{this} deals 2 damage to target creature");
mode.addEffect(effect);
mode.addTarget(new TargetCreaturePermanent(filterCreature));
mode.addTarget(new TargetCreaturePermanent(filterCreature).withChooseHint("deals 2 damage to"));
this.getSpellAbility().addMode(mode);
// Savage Alliance deals 1 damage to each creature target opponent controls.
mode = new Mode();
mode.addEffect(new SavageAllianceDamageEffect());
mode.addTarget(new TargetPlayer(1, 1, false, filterOpponent));
mode.addTarget(new TargetPlayer(1, 1, false, filterOpponent).withChooseHint("whose creatures get dealt 1 damage"));
this.getSpellAbility().addMode(mode);
}

View file

@ -1,7 +1,5 @@
package mage.cards.s;
import java.util.UUID;
import mage.abilities.Mode;
import mage.abilities.effects.common.CounterTargetEffect;
import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect;
@ -12,8 +10,9 @@ import mage.filter.StaticFilters;
import mage.target.TargetSpell;
import mage.target.common.TargetCardInYourGraveyard;
import java.util.UUID;
/**
*
* @author jeffwadsworth
*/
public final class SoulManipulation extends CardImpl {
@ -27,12 +26,12 @@ public final class SoulManipulation extends CardImpl {
// Counter target creature spell;
this.getSpellAbility().addEffect(new CounterTargetEffect());
this.getSpellAbility().addTarget(new TargetSpell(StaticFilters.FILTER_SPELL_CREATURE));
this.getSpellAbility().addTarget(new TargetSpell(StaticFilters.FILTER_SPELL_CREATURE).withChooseHint("counter it"));
// and/or return target creature card from your graveyard to your hand.
Mode mode = new Mode();
mode.addEffect(new ReturnFromGraveyardToHandTargetEffect());
mode.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD));
mode.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD).withChooseHint("return it to hand"));
this.getSpellAbility().addMode(mode);
}

View file

@ -1,7 +1,5 @@
package mage.cards.s;
import java.util.UUID;
import mage.abilities.Mode;
import mage.abilities.effects.common.continuous.BoostTargetEffect;
import mage.abilities.effects.common.counter.AddCountersTargetEffect;
@ -12,14 +10,15 @@ import mage.constants.Duration;
import mage.counters.CounterType;
import mage.target.common.TargetCreaturePermanent;
import java.util.UUID;
/**
*
* @author LevelX2
*/
public final class SubtleStrike extends CardImpl {
public SubtleStrike(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{1}{B}");
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{B}");
// Choose one or both
this.getSpellAbility().getModes().setMinModes(1);
@ -28,15 +27,14 @@ public final class SubtleStrike extends CardImpl {
BoostTargetEffect minusOneMinusOne = new BoostTargetEffect(-1, -1, Duration.EndOfTurn);
minusOneMinusOne.setText("Target creature gets -1/-1 until end of turn");
this.getSpellAbility().addEffect(minusOneMinusOne);
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
this.getSpellAbility().addTarget(new TargetCreaturePermanent().withChooseHint("gets -1/-1 until end of turn"));
// Put a +1/+1 counter on target creature.
Mode mode1 = new Mode();
AddCountersTargetEffect plusOnePlusOneCounter = new AddCountersTargetEffect(CounterType.P1P1.createInstance());
plusOnePlusOneCounter.setText("Put a +1/+1 counter on target creature");
mode1.addEffect(plusOnePlusOneCounter);
mode1.addTarget(new TargetCreaturePermanent());
mode1.addTarget(new TargetCreaturePermanent().withChooseHint("gets +1/+1 counter"));
this.getSpellAbility().addMode(mode1);
}
public SubtleStrike(final SubtleStrike card) {

View file

@ -24,11 +24,11 @@ public final class SwirlingTorrent extends CardImpl {
// Put target creature on top of its owner's library.
this.getSpellAbility().addEffect(new PutOnLibraryTargetEffect(true));
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
this.getSpellAbility().addTarget(new TargetCreaturePermanent().withChooseHint("put on library top"));
// Return target creature to its owner's hand.
Mode mode = new Mode(new ReturnToHandTargetEffect());
mode.addTarget(new TargetCreaturePermanent());
mode.addTarget(new TargetCreaturePermanent().withChooseHint("return to hand"));
this.getSpellAbility().addMode(mode);
}

View file

@ -1,7 +1,5 @@
package mage.cards.v;
import java.util.UUID;
import mage.abilities.Mode;
import mage.abilities.effects.common.DestroyTargetEffect;
import mage.cards.CardImpl;
@ -10,25 +8,26 @@ import mage.constants.CardType;
import mage.target.common.TargetArtifactPermanent;
import mage.target.common.TargetLandPermanent;
import java.util.UUID;
/**
*
* @author LevelX2
*/
public final class Vandalize extends CardImpl {
public Vandalize(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{4}{R}");
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{4}{R}");
// Choose one or both - Destroy target artifact; or Destroy target land.
this.getSpellAbility().getModes().setMinModes(1);
this.getSpellAbility().getModes().setMaxModes(2);
this.getSpellAbility().addTarget(new TargetArtifactPermanent());
// Destroy target artifact
this.getSpellAbility().addEffect(new DestroyTargetEffect());
this.getSpellAbility().addTarget(new TargetArtifactPermanent().withChooseHint("destroy"));
// Destroy target land
Mode mode1 = new Mode();
mode1.addTarget(new TargetLandPermanent());
mode1.addEffect(new DestroyTargetEffect());
mode1.addTarget(new TargetLandPermanent().withChooseHint("destroy"));
this.getSpellAbility().addMode(mode1);
}

View file

@ -1,7 +1,5 @@
package mage.cards.v;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.Mode;
@ -19,8 +17,9 @@ import mage.filter.predicate.mageobject.AnotherTargetPredicate;
import mage.target.Target;
import mage.target.common.TargetOpponent;
import java.util.UUID;
/**
*
* @author anonymous
*/
public final class VindictiveLich extends CardImpl {
@ -33,37 +32,37 @@ public final class VindictiveLich extends CardImpl {
this.toughness = new MageInt(1);
// When Vindictive Lich dies, choose one or more. Each mode must target a different player.
// *Target opponent sacrifices a creature.
// * Target opponent sacrifices a creature.
Ability ability = new DiesTriggeredAbility(new SacrificeEffect(StaticFilters.FILTER_PERMANENT_CREATURE, 1, "target opponent"));
ability.getModes().setMinModes(1);
ability.getModes().setMaxModes(3);
ability.getModes().setEachModeOnlyOnce(true);
ability.getModes().setMaxModesFilter(new FilterOpponent("a different player"));
FilterOpponent filter = new FilterOpponent("opponent (sacrifice)");
FilterOpponent filter = new FilterOpponent();
filter.add(new AnotherTargetPredicate(1, true));
Target target = new TargetOpponent(filter, false);
Target target = new TargetOpponent(filter, false).withChooseHint("who sacrifice a creature");
target.setTargetTag(1);
ability.addTarget(target);
// *Target opponent discards two cards.
// * Target opponent discards two cards.
Mode mode = new Mode();
mode.addEffect(new DiscardTargetEffect(2, false));
filter = new FilterOpponent("opponent (discard)");
filter = new FilterOpponent();
filter.add(new AnotherTargetPredicate(2, true));
target = new TargetOpponent(filter, false);
target.setTargetTag(2);
mode.addTarget(target);
mode.addTarget(target.withChooseHint("who discard a card"));
ability.addMode(mode);
// *Target opponent loses 5 life.
// * Target opponent loses 5 life.
mode = new Mode();
mode.addEffect(new LoseLifeTargetEffect(5));
filter = new FilterOpponent("opponent (life loss)");
filter = new FilterOpponent();
filter.add(new AnotherTargetPredicate(3, true));
target = new TargetOpponent(filter, false);
target.setTargetTag(3);
mode.addTarget(target);
mode.addTarget(target.withChooseHint("who lose 5 life"));
ability.addMode(mode);
this.addAbility(ability);
}

View file

@ -1,7 +1,5 @@
package mage.cards.w;
import java.util.UUID;
import mage.abilities.Mode;
import mage.abilities.effects.common.DamageTargetEffect;
import mage.abilities.effects.common.TapTargetEffect;
@ -10,26 +8,27 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.target.common.TargetCreaturePermanent;
import java.util.UUID;
/**
*
* @author LevelX2
*/
public final class Winterflame extends CardImpl {
public Winterflame(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{1}{U}{R}");
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{U}{R}");
// Choose one or both -
this.getSpellAbility().getModes().setMinModes(1);
this.getSpellAbility().getModes().setMaxModes(2);
// *Tap target creature
// * Tap target creature
this.getSpellAbility().addEffect(new TapTargetEffect());
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
// *Winterflame deals 2 damage to target creature
this.getSpellAbility().addTarget(new TargetCreaturePermanent().withChooseHint("tap"));
// * Winterflame deals 2 damage to target creature
Mode mode = new Mode();
mode.addEffect(new DamageTargetEffect(2));
mode.addTarget(new TargetCreaturePermanent());
mode.addTarget(new TargetCreaturePermanent().withChooseHint("deals 2 damage to"));
this.getSpellAbility().addMode(mode);
}