mirror of
https://github.com/magefree/mage.git
synced 2026-01-09 20:32:06 -08:00
[DFT] Implement many cards with custom effects (#13407)
* [DFT] Implement Loot, the Pathfinder add option to hide reminder text for exhaust ability * [DFT] Implement Guidelight Optimizer * [DFT] Implement Radiant Lotus * [DFT] Implement Oildeep Gearhulk * fix Oildeep Gearhulk target * fix OilDeep Gearhulk duplicate hand reveal * [DFT] Implement Momentum Breaker * [DFT] Implement Sita Varma, Masked Racer * [DFT] Implement SkySeers Chariot * [DFT] Implement Skyserpent Seeker * [DFT] Implement Tune Up * fix Skyseer's Chariot modifying spell cost * use exhaust constructor boolean for reminderText * Update cards for review change radiant lotus outcome to prevent AI from trying to use it change oildeep card choice to discard replace Composite cost and move discard effect if sacrifice was unsuccessful replace Composite costs and add target to Loot's third ability * Missed braces for mana cost Update GuidelightOptimizer text
This commit is contained in:
parent
7c55d444b0
commit
66fd5c1b6a
11 changed files with 825 additions and 1 deletions
83
Mage.Sets/src/mage/cards/g/GuidelightOptimizer.java
Normal file
83
Mage.Sets/src/mage/cards/g/GuidelightOptimizer.java
Normal file
|
|
@ -0,0 +1,83 @@
|
|||
package mage.cards.g;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
import mage.ConditionalMana;
|
||||
import mage.MageInt;
|
||||
import mage.MageObject;
|
||||
import mage.Mana;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.condition.Condition;
|
||||
import mage.abilities.mana.ConditionalColoredManaAbility;
|
||||
import mage.abilities.mana.builder.ConditionalManaBuilder;
|
||||
import mage.abilities.mana.conditional.ManaCondition;
|
||||
import mage.constants.SubType;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.game.Game;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Jmlundeen
|
||||
*/
|
||||
public final class GuidelightOptimizer extends CardImpl {
|
||||
|
||||
public GuidelightOptimizer(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{1}{U}");
|
||||
|
||||
this.subtype.add(SubType.ROBOT);
|
||||
this.power = new MageInt(2);
|
||||
this.toughness = new MageInt(1);
|
||||
|
||||
// {T}: Add {U}. Spend this mana only to cast an artifact spell or activate an ability.
|
||||
this.addAbility(new ConditionalColoredManaAbility(Mana.BlueMana(1), new ArtifactOrActivatedManaBuilder()));
|
||||
}
|
||||
|
||||
private GuidelightOptimizer(final GuidelightOptimizer card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public GuidelightOptimizer copy() {
|
||||
return new GuidelightOptimizer(this);
|
||||
}
|
||||
}
|
||||
|
||||
class ArtifactOrActivatedManaBuilder extends ConditionalManaBuilder {
|
||||
|
||||
@Override
|
||||
public ConditionalMana build(Object... options) {
|
||||
return new ArtifactOrActivatedConditionalMana(this.mana);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getRule() {
|
||||
return "Spend this mana only to cast an artifact spells or activate an ability";
|
||||
}
|
||||
}
|
||||
|
||||
class ArtifactOrActivatedConditionalMana extends ConditionalMana {
|
||||
|
||||
public ArtifactOrActivatedConditionalMana(Mana mana) {
|
||||
super(mana);
|
||||
staticText = "Spend this mana only to cast an artifact spells or activate an ability";
|
||||
addCondition(new ArtifactOrActivatedManaCondition());
|
||||
}
|
||||
}
|
||||
|
||||
class ArtifactOrActivatedManaCondition extends ManaCondition implements Condition {
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
MageObject sourceObject = game.getObject(source);
|
||||
return source != null
|
||||
&& (source.isActivatedAbility() && !source.isActivated())
|
||||
|| (sourceObject != null && sourceObject.isArtifact());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source, UUID originalId, mage.abilities.costs.Cost costsToPay) {
|
||||
return apply(game, source);
|
||||
}
|
||||
}
|
||||
72
Mage.Sets/src/mage/cards/l/LootThePathfinder.java
Normal file
72
Mage.Sets/src/mage/cards/l/LootThePathfinder.java
Normal file
|
|
@ -0,0 +1,72 @@
|
|||
package mage.cards.l;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.costs.CompositeCost;
|
||||
import mage.abilities.costs.common.TapSourceCost;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.effects.common.DamageTargetEffect;
|
||||
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||
import mage.abilities.effects.mana.AddManaOfAnyColorEffect;
|
||||
import mage.abilities.keyword.ExhaustAbility;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.SuperType;
|
||||
import mage.abilities.keyword.DoubleStrikeAbility;
|
||||
import mage.abilities.keyword.VigilanceAbility;
|
||||
import mage.abilities.keyword.HasteAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.target.common.TargetAnyTarget;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Jmlundeen
|
||||
*/
|
||||
public final class LootThePathfinder extends CardImpl {
|
||||
|
||||
public LootThePathfinder(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}{U}{R}");
|
||||
|
||||
this.supertype.add(SuperType.LEGENDARY);
|
||||
this.subtype.add(SubType.BEAST);
|
||||
this.subtype.add(SubType.NOBLE);
|
||||
this.power = new MageInt(2);
|
||||
this.toughness = new MageInt(4);
|
||||
|
||||
// Double strike
|
||||
this.addAbility(DoubleStrikeAbility.getInstance());
|
||||
|
||||
// Vigilance
|
||||
this.addAbility(VigilanceAbility.getInstance());
|
||||
|
||||
// Haste
|
||||
this.addAbility(HasteAbility.getInstance());
|
||||
|
||||
// Exhaust -- {G}, {T}: Add three mana of any one color.
|
||||
Ability abilityOne = new ExhaustAbility(new AddManaOfAnyColorEffect(3), new ManaCostsImpl<>("{G}"));
|
||||
abilityOne.addCost(new TapSourceCost());
|
||||
this.addAbility(abilityOne);
|
||||
|
||||
// Exhaust -- {U}, {T}: Draw three cards.
|
||||
Ability abilityTwo = new ExhaustAbility(new DrawCardSourceControllerEffect(3), new ManaCostsImpl<>("{U}"), false);
|
||||
abilityTwo.addCost(new TapSourceCost());
|
||||
this.addAbility(abilityTwo);
|
||||
|
||||
// Exhaust -- {R}, {T}: Loot deals 3 damage to any target.
|
||||
Ability abilityThree = new ExhaustAbility(new DamageTargetEffect(3), new ManaCostsImpl<>("{R}"), false);
|
||||
abilityThree.addCost(new TapSourceCost());
|
||||
abilityThree.addTarget(new TargetAnyTarget());
|
||||
this.addAbility(abilityThree);
|
||||
}
|
||||
|
||||
private LootThePathfinder(final LootThePathfinder card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public LootThePathfinder copy() {
|
||||
return new LootThePathfinder(this);
|
||||
}
|
||||
}
|
||||
100
Mage.Sets/src/mage/cards/m/MomentumBreaker.java
Normal file
100
Mage.Sets/src/mage/cards/m/MomentumBreaker.java
Normal file
|
|
@ -0,0 +1,100 @@
|
|||
package mage.cards.m;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.common.SacrificeSourceTriggeredAbility;
|
||||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.costs.CompositeCost;
|
||||
import mage.abilities.costs.common.SacrificeSourceCost;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.dynamicvalue.DynamicValue;
|
||||
import mage.abilities.dynamicvalue.common.ControllerSpeedCount;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.GainLifeEffect;
|
||||
import mage.abilities.effects.common.SacrificeEffect;
|
||||
import mage.abilities.keyword.StartYourEnginesAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.SubType;
|
||||
import mage.filter.FilterPermanent;
|
||||
import mage.filter.predicate.Predicates;
|
||||
import mage.filter.predicate.permanent.ControllerIdPredicate;
|
||||
import mage.game.Game;
|
||||
import mage.players.Player;
|
||||
import mage.target.targetpointer.FixedTarget;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Jmlundeen
|
||||
*/
|
||||
public final class MomentumBreaker extends CardImpl {
|
||||
|
||||
public MomentumBreaker(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{B}");
|
||||
|
||||
|
||||
// Start your engines!
|
||||
this.addAbility(new StartYourEnginesAbility());
|
||||
|
||||
// When this enchantment enters, each opponent sacrifices a creature or Vehicle of their choice. Each opponent who can't discards a card.
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new MomentumBreakerEffect()));
|
||||
// {2}, Sacrifice this enchantment: You gain life equal to your speed.
|
||||
Effect gainLifeEffect = new GainLifeEffect(ControllerSpeedCount.instance).setText("You gain life equal to your speed");
|
||||
Ability ability = new SimpleActivatedAbility(gainLifeEffect,new ManaCostsImpl<>("{2}"));
|
||||
ability.addCost(new SacrificeSourceCost());
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
private MomentumBreaker(final MomentumBreaker card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public MomentumBreaker copy() {
|
||||
return new MomentumBreaker(this);
|
||||
}
|
||||
}
|
||||
|
||||
class MomentumBreakerEffect extends OneShotEffect {
|
||||
|
||||
MomentumBreakerEffect() {
|
||||
super(Outcome.Benefit);
|
||||
this.staticText = "each opponent sacrifices a creature or Vehicle of their choice. " +
|
||||
"Each opponent who can't discards a card.";
|
||||
}
|
||||
|
||||
private MomentumBreakerEffect(final MomentumBreakerEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public MomentumBreakerEffect copy() {
|
||||
return new MomentumBreakerEffect(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
game.getOpponents(source.getControllerId()).forEach(opponent -> {
|
||||
Player player = game.getPlayer(opponent);
|
||||
if (player != null) {
|
||||
FilterPermanent filter = new FilterPermanent("creature or Vehicle");
|
||||
filter.add(Predicates.or(
|
||||
CardType.CREATURE.getPredicate(),
|
||||
SubType.VEHICLE.getPredicate()
|
||||
));
|
||||
filter.add(new ControllerIdPredicate(opponent));
|
||||
Effect effect = new SacrificeEffect(filter, 1, null);
|
||||
effect.setTargetPointer(new FixedTarget(player.getId(), game));
|
||||
if (!effect.apply(game, source)) {
|
||||
player.discard(1, false, false, source, game);
|
||||
}
|
||||
}
|
||||
});
|
||||
return true;
|
||||
}
|
||||
}
|
||||
97
Mage.Sets/src/mage/cards/o/OildeepGearhulk.java
Normal file
97
Mage.Sets/src/mage/cards/o/OildeepGearhulk.java
Normal file
|
|
@ -0,0 +1,97 @@
|
|||
package mage.cards.o;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.DrawDiscardTargetEffect;
|
||||
import mage.abilities.effects.common.LookAtTargetPlayerHandEffect;
|
||||
import mage.abilities.effects.common.discard.DiscardAndDrawThatManyEffect;
|
||||
import mage.cards.Card;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.SubType;
|
||||
import mage.abilities.keyword.LifelinkAbility;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.keyword.WardAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.filter.FilterCard;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.game.Game;
|
||||
import mage.players.Player;
|
||||
import mage.target.TargetCard;
|
||||
import mage.target.TargetPlayer;
|
||||
import mage.target.common.TargetCardInHand;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Jmlundeen
|
||||
*/
|
||||
public final class OildeepGearhulk extends CardImpl {
|
||||
|
||||
public OildeepGearhulk(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{U}{U}{B}{B}");
|
||||
|
||||
this.subtype.add(SubType.CONSTRUCT);
|
||||
this.power = new MageInt(4);
|
||||
this.toughness = new MageInt(4);
|
||||
|
||||
// Lifelink
|
||||
this.addAbility(LifelinkAbility.getInstance());
|
||||
|
||||
// Ward {1}
|
||||
this.addAbility(new WardAbility(new ManaCostsImpl<>("{1}")));
|
||||
|
||||
// When this creature enters, look at target player's hand. You may choose a card from it. If you do, that player discards that card, then draws a card.
|
||||
Ability ability = new EntersBattlefieldTriggeredAbility(new OildeepGearhulkEffect());
|
||||
ability.addTarget(new TargetPlayer());
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
private OildeepGearhulk(final OildeepGearhulk card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public OildeepGearhulk copy() {
|
||||
return new OildeepGearhulk(this);
|
||||
}
|
||||
}
|
||||
|
||||
class OildeepGearhulkEffect extends OneShotEffect {
|
||||
|
||||
public OildeepGearhulkEffect() {
|
||||
super(Outcome.Benefit);
|
||||
staticText = "look at target player's hand. You may choose a card from it. If you do, that player discards that card, then draws a card";
|
||||
}
|
||||
|
||||
public OildeepGearhulkEffect(final OildeepGearhulkEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public OildeepGearhulkEffect copy() {
|
||||
return new OildeepGearhulkEffect(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
Player controller = game.getPlayer(source.getControllerId());
|
||||
Player targetPlayer = game.getPlayer(source.getFirstTarget());
|
||||
if (controller == null || targetPlayer == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
controller.lookAtCards(targetPlayer.getName() + " Hand", targetPlayer.getHand(), game);
|
||||
TargetCard chosenCard = new TargetCardInHand(0, 1, new FilterCard("card to discard"));
|
||||
if (controller.choose(Outcome.Discard, targetPlayer.getHand(), chosenCard, source, game)) {
|
||||
Card card = game.getCard(chosenCard.getFirstTarget());
|
||||
targetPlayer.discard(card, false, source, game);
|
||||
targetPlayer.drawCards(1, source, game);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
88
Mage.Sets/src/mage/cards/r/RadiantLotus.java
Normal file
88
Mage.Sets/src/mage/cards/r/RadiantLotus.java
Normal file
|
|
@ -0,0 +1,88 @@
|
|||
package mage.cards.r;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.costs.common.SacrificeTargetCost;
|
||||
import mage.abilities.costs.common.SacrificeXTargetCost;
|
||||
import mage.abilities.costs.common.TapSourceCost;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.choices.ChoiceColor;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Outcome;
|
||||
import mage.filter.FilterPermanent;
|
||||
import mage.filter.common.FilterControlledArtifactPermanent;
|
||||
import mage.game.Game;
|
||||
import mage.players.Player;
|
||||
import mage.target.TargetPlayer;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Jmlundeen
|
||||
*/
|
||||
public final class RadiantLotus extends CardImpl {
|
||||
|
||||
private static final FilterPermanent filter = new FilterControlledArtifactPermanent("artifacts");
|
||||
public RadiantLotus(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{6}");
|
||||
|
||||
|
||||
// {T}, Sacrifice one or more artifacts: Choose a color. Target player adds three mana of the chosen color for each artifact sacrificed this way.
|
||||
Ability ability = new SimpleActivatedAbility(new RadiantLotusEffect(), new TapSourceCost());
|
||||
ability.addCost(new SacrificeXTargetCost(filter, true, 1).setText("Sacrifice one or more artifacts"));
|
||||
ability.addTarget(new TargetPlayer());
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
private RadiantLotus(final RadiantLotus card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public RadiantLotus copy() {
|
||||
return new RadiantLotus(this);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class RadiantLotusEffect extends OneShotEffect {
|
||||
|
||||
public RadiantLotusEffect() {
|
||||
super(Outcome.AIDontUseIt);
|
||||
staticText = "Choose a color. Target player adds three mana of the chosen color for each artifact sacrificed this way";
|
||||
}
|
||||
|
||||
public RadiantLotusEffect(final RadiantLotusEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public RadiantLotusEffect copy() {
|
||||
return new RadiantLotusEffect(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
int manaCount = source.getCosts().stream()
|
||||
.filter(SacrificeTargetCost.class::isInstance)
|
||||
.mapToInt(cost -> ((SacrificeTargetCost) cost).getPermanents().size() * 3)
|
||||
.sum();
|
||||
|
||||
Player controller = game.getPlayer(source.getControllerId());
|
||||
if (controller != null) {
|
||||
String mes = String.format("Select a color of mana to add %d of it", manaCount);
|
||||
ChoiceColor choice = new ChoiceColor(true, mes, game.getObject(source));
|
||||
if (controller.choose(outcome, choice, game)) {
|
||||
Player player = game.getPlayer(source.getFirstTarget());
|
||||
if (choice.getColor() != null && player != null) {
|
||||
player.getManaPool().addMana(choice.getMana(manaCount), game, source);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
87
Mage.Sets/src/mage/cards/s/SitaVarmaMaskedRacer.java
Normal file
87
Mage.Sets/src/mage/cards/s/SitaVarmaMaskedRacer.java
Normal file
|
|
@ -0,0 +1,87 @@
|
|||
package mage.cards.s;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.costs.Cost;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.dynamicvalue.common.GetXValue;
|
||||
import mage.abilities.dynamicvalue.common.SourcePermanentPowerValue;
|
||||
import mage.abilities.effects.ContinuousEffect;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.continuous.SetBasePowerToughnessAllEffect;
|
||||
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
|
||||
import mage.abilities.keyword.ExhaustAbility;
|
||||
import mage.constants.*;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.counters.CounterType;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.game.Game;
|
||||
import mage.players.Player;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Jmlundeen
|
||||
*/
|
||||
public final class SitaVarmaMaskedRacer extends CardImpl {
|
||||
|
||||
public SitaVarmaMaskedRacer(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{G}{U}");
|
||||
|
||||
this.supertype.add(SuperType.LEGENDARY);
|
||||
this.subtype.add(SubType.HUMAN);
|
||||
this.subtype.add(SubType.ROGUE);
|
||||
this.power = new MageInt(2);
|
||||
this.toughness = new MageInt(3);
|
||||
|
||||
// Exhaust -- {X}{G}{G}{U}: Put X +1/+1 counters on Sita Varma. Then you may have the base power and toughness of each other creature you control become equal to Sita Varma's power until end of turn.
|
||||
Cost cost = new ManaCostsImpl<>("{X}{G}{G}{U}");
|
||||
Effect effect = new AddCountersSourceEffect(CounterType.P1P1.createInstance(), GetXValue.instance);
|
||||
Ability ability = new ExhaustAbility(effect, cost);
|
||||
ability.addEffect(new SitaVarmaMaskedRacerMayEffect());
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
private SitaVarmaMaskedRacer(final SitaVarmaMaskedRacer card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public SitaVarmaMaskedRacer copy() {
|
||||
return new SitaVarmaMaskedRacer(this);
|
||||
}
|
||||
}
|
||||
|
||||
class SitaVarmaMaskedRacerMayEffect extends OneShotEffect {
|
||||
private static final String choiceText = "Have the base power and toughness of each other creature you control" +
|
||||
" become equal to Sita Varma's power until end of turn?";
|
||||
|
||||
public SitaVarmaMaskedRacerMayEffect() {
|
||||
super(Outcome.Benefit);
|
||||
this.staticText = "Then you may have the base power and toughness of each other creature you control become equal to Sita Varma's power until end of turn.";
|
||||
}
|
||||
|
||||
public SitaVarmaMaskedRacerMayEffect(final SitaVarmaMaskedRacerMayEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public SitaVarmaMaskedRacerMayEffect copy() {
|
||||
return new SitaVarmaMaskedRacerMayEffect(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
Player controller = game.getPlayer(source.getControllerId());
|
||||
if (controller == null || !controller.chooseUse(outcome, choiceText, source, game)) {
|
||||
return false;
|
||||
}
|
||||
ContinuousEffect setBasePowerToughnessEffect = new SetBasePowerToughnessAllEffect(SourcePermanentPowerValue.ALLOW_NEGATIVE,
|
||||
SourcePermanentPowerValue.ALLOW_NEGATIVE, Duration.EndOfTurn,
|
||||
StaticFilters.FILTER_OTHER_CONTROLLED_CREATURES);
|
||||
game.addEffect(setBasePowerToughnessEffect, source);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
90
Mage.Sets/src/mage/cards/s/SkyseersChariot.java
Normal file
90
Mage.Sets/src/mage/cards/s/SkyseersChariot.java
Normal file
|
|
@ -0,0 +1,90 @@
|
|||
package mage.cards.s;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.MageObject;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.AsEntersBattlefieldAbility;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.effects.common.ChooseACardNameEffect;
|
||||
import mage.abilities.effects.common.cost.CostModificationEffectImpl;
|
||||
import mage.abilities.effects.common.cost.SpellsCostIncreasingAllEffect;
|
||||
import mage.constants.*;
|
||||
import mage.abilities.keyword.FlyingAbility;
|
||||
import mage.abilities.keyword.CrewAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.game.Game;
|
||||
import mage.util.CardUtil;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Jmlundeen
|
||||
*/
|
||||
public final class SkyseersChariot extends CardImpl {
|
||||
|
||||
public SkyseersChariot(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{1}{W}");
|
||||
|
||||
this.subtype.add(SubType.VEHICLE);
|
||||
this.power = new MageInt(3);
|
||||
this.toughness = new MageInt(3);
|
||||
|
||||
// Flying
|
||||
this.addAbility(FlyingAbility.getInstance());
|
||||
|
||||
// As this Vehicle enters, choose a nonland card name.
|
||||
this.addAbility(new AsEntersBattlefieldAbility(new ChooseACardNameEffect(ChooseACardNameEffect.TypeOfName.NON_LAND_NAME)));
|
||||
// Activated abilities of sources with the chosen name cost {2} more to activate.
|
||||
this.addAbility(new SimpleStaticAbility(new SkyseersChariotEffect()));
|
||||
|
||||
// Crew 2
|
||||
this.addAbility(new CrewAbility(2));
|
||||
|
||||
}
|
||||
|
||||
private SkyseersChariot(final SkyseersChariot card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public SkyseersChariot copy() {
|
||||
return new SkyseersChariot(this);
|
||||
}
|
||||
}
|
||||
|
||||
class SkyseersChariotEffect extends CostModificationEffectImpl {
|
||||
|
||||
SkyseersChariotEffect() {
|
||||
super(Duration.WhileOnBattlefield, Outcome.Detriment, CostModificationType.INCREASE_COST);
|
||||
staticText = "Activated abilities of sources with the chosen name cost {2} more to activate";
|
||||
}
|
||||
|
||||
private SkyseersChariotEffect(final SkyseersChariotEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public SkyseersChariotEffect copy() {
|
||||
return new SkyseersChariotEffect(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source, Ability abilityToModify) {
|
||||
CardUtil.increaseCost(abilityToModify, 2);
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean applies(Ability abilityToModify, Ability source, Game game) {
|
||||
MageObject activatedSource = game.getObject(abilityToModify.getSourceId());
|
||||
if (activatedSource == null) {
|
||||
return false;
|
||||
}
|
||||
String chosenName = (String) game.getState().getValue(
|
||||
source.getSourceId().toString() + ChooseACardNameEffect.INFO_KEY
|
||||
);
|
||||
return CardUtil.haveSameNames(activatedSource, chosenName, game)
|
||||
&& abilityToModify.isActivatedAbility();
|
||||
}
|
||||
}
|
||||
95
Mage.Sets/src/mage/cards/s/SkyserpentSeeker.java
Normal file
95
Mage.Sets/src/mage/cards/s/SkyserpentSeeker.java
Normal file
|
|
@ -0,0 +1,95 @@
|
|||
package mage.cards.s;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.dynamicvalue.common.StaticValue;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.RevealCardsFromLibraryUntilEffect;
|
||||
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
|
||||
import mage.abilities.keyword.ExhaustAbility;
|
||||
import mage.cards.*;
|
||||
import mage.constants.*;
|
||||
import mage.abilities.keyword.FlyingAbility;
|
||||
import mage.abilities.keyword.DeathtouchAbility;
|
||||
import mage.counters.CounterType;
|
||||
import mage.game.Game;
|
||||
import mage.players.Player;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Jmlundeen
|
||||
*/
|
||||
public final class SkyserpentSeeker extends CardImpl {
|
||||
|
||||
public SkyserpentSeeker(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{G}{U}");
|
||||
|
||||
this.subtype.add(SubType.SNAKE);
|
||||
this.power = new MageInt(1);
|
||||
this.toughness = new MageInt(1);
|
||||
|
||||
// Flying
|
||||
this.addAbility(FlyingAbility.getInstance());
|
||||
|
||||
// Deathtouch
|
||||
this.addAbility(DeathtouchAbility.getInstance());
|
||||
|
||||
// Exhaust -- {4}: Reveal cards from the top of your library until you reveal two land cards. Put those land cards onto the battlefield tapped and the rest on the bottom of your library in a random order. Put a +1/+1 counter on this creature.
|
||||
Ability ability = (new ExhaustAbility(new SkyserpentSeekerEffect(), new ManaCostsImpl<>("{4}")));
|
||||
ability.addEffect(new AddCountersSourceEffect(CounterType.P1P1.createInstance(), StaticValue.get(1)));
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
private SkyserpentSeeker(final SkyserpentSeeker card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public SkyserpentSeeker copy() {
|
||||
return new SkyserpentSeeker(this);
|
||||
}
|
||||
|
||||
}
|
||||
class SkyserpentSeekerEffect extends OneShotEffect {
|
||||
|
||||
SkyserpentSeekerEffect() {
|
||||
super(Outcome.PutLandInPlay);
|
||||
this.staticText = "Reveal cards from the top of your library until you reveal two land cards. " +
|
||||
"Put those land cards onto the battlefield tapped and the rest on the bottom of your library in a random order";
|
||||
}
|
||||
|
||||
private SkyserpentSeekerEffect(final SkyserpentSeekerEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public SkyserpentSeekerEffect copy() {
|
||||
return new SkyserpentSeekerEffect(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
Player controller = game.getPlayer(source.getControllerId());
|
||||
if (controller == null) {
|
||||
return false;
|
||||
}
|
||||
Cards revealedCards = new CardsImpl();
|
||||
Cards lands = new CardsImpl();
|
||||
for (Card card : controller.getLibrary().getCards(game)) {
|
||||
if (card.isLand()) {
|
||||
lands.add(card);
|
||||
if (lands.size() == 2) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
revealedCards.add(card);
|
||||
}
|
||||
controller.revealCards(source, revealedCards, game);
|
||||
PutCards.BATTLEFIELD_TAPPED.moveCards(controller, lands, source, game);
|
||||
PutCards.BOTTOM_RANDOM.moveCards(controller, revealedCards, source, game);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
70
Mage.Sets/src/mage/cards/t/TuneUp.java
Normal file
70
Mage.Sets/src/mage/cards/t/TuneUp.java
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
package mage.cards.t;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.ReturnFromGraveyardToBattlefieldTargetEffect;
|
||||
import mage.abilities.effects.common.ReturnFromYourGraveyardToBattlefieldAllEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.SubType;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.target.common.TargetCardInYourGraveyard;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Jmlundeen
|
||||
*/
|
||||
public final class TuneUp extends CardImpl {
|
||||
|
||||
public TuneUp(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{3}{W}");
|
||||
|
||||
|
||||
// Return target artifact card from your graveyard to the battlefield. If it's a Vehicle, it becomes an artifact creature.
|
||||
this.getSpellAbility().addEffect(new ReturnFromGraveyardToBattlefieldTargetEffect());
|
||||
this.getSpellAbility().addEffect(new TuneUpEffect());
|
||||
this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_ARTIFACT_FROM_YOUR_GRAVEYARD));
|
||||
}
|
||||
|
||||
private TuneUp(final TuneUp card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TuneUp copy() {
|
||||
return new TuneUp(this);
|
||||
}
|
||||
}
|
||||
|
||||
class TuneUpEffect extends OneShotEffect {
|
||||
|
||||
TuneUpEffect() {
|
||||
super(Outcome.BecomeCreature);
|
||||
this.staticText = "If it's a Vehicle, it becomes an artifact creature";
|
||||
}
|
||||
|
||||
private TuneUpEffect(final TuneUpEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TuneUpEffect copy() {
|
||||
return new TuneUpEffect(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
Permanent permanent = game.getPermanent(source.getFirstTarget());
|
||||
if (permanent != null && permanent.hasSubtype(SubType.VEHICLE, game)) {
|
||||
permanent.addCardType(CardType.CREATURE);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
@ -141,6 +141,7 @@ public final class Aetherdrift extends ExpansionSet {
|
|||
cards.add(new SetCardInfo("Grim Bauble", 88, Rarity.COMMON, mage.cards.g.GrimBauble.class));
|
||||
cards.add(new SetCardInfo("Grim Javelineer", 89, Rarity.COMMON, mage.cards.g.GrimJavelineer.class));
|
||||
cards.add(new SetCardInfo("Guardian Sunmare", 15, Rarity.RARE, mage.cards.g.GuardianSunmare.class));
|
||||
cards.add(new SetCardInfo("Guidelight Optimizer", 45, Rarity.COMMON, mage.cards.g.GuidelightOptimizer.class));
|
||||
cards.add(new SetCardInfo("Guidelight Pathmaker", 206, Rarity.UNCOMMON, mage.cards.g.GuidelightPathmaker.class));
|
||||
cards.add(new SetCardInfo("Guidelight Synergist", 16, Rarity.UNCOMMON, mage.cards.g.GuidelightSynergist.class));
|
||||
cards.add(new SetCardInfo("Haunt the Network", 207, Rarity.UNCOMMON, mage.cards.h.HauntTheNetwork.class));
|
||||
|
|
@ -170,6 +171,11 @@ public final class Aetherdrift extends ExpansionSet {
|
|||
cards.add(new SetCardInfo("Lightshield Parry", 19, Rarity.COMMON, mage.cards.l.LightshieldParry.class));
|
||||
cards.add(new SetCardInfo("Lightwheel Enhancements", 20, Rarity.COMMON, mage.cards.l.LightwheelEnhancements.class));
|
||||
cards.add(new SetCardInfo("Locust Spray", 95, Rarity.UNCOMMON, mage.cards.l.LocustSpray.class));
|
||||
cards.add(new SetCardInfo("Loot, the Pathfinder", 212, Rarity.MYTHIC, mage.cards.l.LootThePathfinder.class, NON_FULL_USE_VARIOUS));
|
||||
cards.add(new SetCardInfo("Loot, the Pathfinder", 391, Rarity.MYTHIC, mage.cards.l.LootThePathfinder.class, NON_FULL_USE_VARIOUS));
|
||||
cards.add(new SetCardInfo("Loot, the Pathfinder", 404, Rarity.MYTHIC, mage.cards.l.LootThePathfinder.class, NON_FULL_USE_VARIOUS));
|
||||
cards.add(new SetCardInfo("Loot, the Pathfinder", 414, Rarity.MYTHIC, mage.cards.l.LootThePathfinder.class, NON_FULL_USE_VARIOUS));
|
||||
cards.add(new SetCardInfo("Loot, the Pathfinder", 484, Rarity.MYTHIC, mage.cards.l.LootThePathfinder.class, NON_FULL_USE_VARIOUS));
|
||||
cards.add(new SetCardInfo("Lotusguard Disciple", 21, Rarity.COMMON, mage.cards.l.LotusguardDisciple.class));
|
||||
cards.add(new SetCardInfo("Loxodon Surveyor", 167, Rarity.COMMON, mage.cards.l.LoxodonSurveyor.class));
|
||||
cards.add(new SetCardInfo("Lumbering Worldwagon", 168, Rarity.RARE, mage.cards.l.LumberingWorldwagon.class));
|
||||
|
|
@ -191,6 +197,7 @@ public final class Aetherdrift extends ExpansionSet {
|
|||
cards.add(new SetCardInfo("Migrating Ketradon", 170, Rarity.COMMON, mage.cards.m.MigratingKetradon.class));
|
||||
cards.add(new SetCardInfo("Mindspring Merfolk", 51, Rarity.RARE, mage.cards.m.MindspringMerfolk.class));
|
||||
cards.add(new SetCardInfo("Molt Tender", 171, Rarity.UNCOMMON, mage.cards.m.MoltTender.class));
|
||||
cards.add(new SetCardInfo("Momentum Breaker", 97, Rarity.UNCOMMON, mage.cards.m.MomentumBreaker.class));
|
||||
cards.add(new SetCardInfo("Monument to Endurance", 237, Rarity.RARE, mage.cards.m.MonumentToEndurance.class));
|
||||
cards.add(new SetCardInfo("Mountain", 286, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS));
|
||||
cards.add(new SetCardInfo("Mu Yanling, Wind Rider", 52, Rarity.MYTHIC, mage.cards.m.MuYanlingWindRider.class));
|
||||
|
|
@ -199,6 +206,10 @@ public final class Aetherdrift extends ExpansionSet {
|
|||
cards.add(new SetCardInfo("Nesting Bot", 22, Rarity.UNCOMMON, mage.cards.n.NestingBot.class));
|
||||
cards.add(new SetCardInfo("Night Market", 258, Rarity.COMMON, mage.cards.n.NightMarket.class));
|
||||
cards.add(new SetCardInfo("Nimble Thopterist", 53, Rarity.COMMON, mage.cards.n.NimbleThopterist.class));
|
||||
cards.add(new SetCardInfo("Oildeep Gearhulk", 215, Rarity.MYTHIC, mage.cards.o.OildeepGearhulk.class, NON_FULL_USE_VARIOUS));
|
||||
cards.add(new SetCardInfo("Oildeep Gearhulk", 351, Rarity.MYTHIC, mage.cards.o.OildeepGearhulk.class, NON_FULL_USE_VARIOUS));
|
||||
cards.add(new SetCardInfo("Oildeep Gearhulk", 487, Rarity.MYTHIC, mage.cards.o.OildeepGearhulk.class, NON_FULL_USE_VARIOUS));
|
||||
cards.add(new SetCardInfo("Oildeep Gearhulk", 550, Rarity.MYTHIC, mage.cards.o.OildeepGearhulk.class, NON_FULL_USE_VARIOUS));
|
||||
cards.add(new SetCardInfo("Ooze Patrol", 172, Rarity.UNCOMMON, mage.cards.o.OozePatrol.class));
|
||||
cards.add(new SetCardInfo("Outpace Oblivion", 139, Rarity.UNCOMMON, mage.cards.o.OutpaceOblivion.class));
|
||||
cards.add(new SetCardInfo("Oviya, Automech Artisan", 173, Rarity.RARE, mage.cards.o.OviyaAutomechArtisan.class));
|
||||
|
|
@ -218,6 +229,11 @@ public final class Aetherdrift extends ExpansionSet {
|
|||
cards.add(new SetCardInfo("Pyrewood Gearhulk", 216, Rarity.MYTHIC, mage.cards.p.PyrewoodGearhulk.class));
|
||||
cards.add(new SetCardInfo("Quag Feast", 100, Rarity.RARE, mage.cards.q.QuagFeast.class));
|
||||
cards.add(new SetCardInfo("Racers' Scoreboard", 239, Rarity.UNCOMMON, mage.cards.r.RacersScoreboard.class));
|
||||
cards.add(new SetCardInfo("Radiant Lotus", 240, Rarity.MYTHIC, mage.cards.r.RadiantLotus.class, NON_FULL_USE_VARIOUS));
|
||||
cards.add(new SetCardInfo("Radiant Lotus", 395, Rarity.MYTHIC, mage.cards.r.RadiantLotus.class, NON_FULL_USE_VARIOUS));
|
||||
cards.add(new SetCardInfo("Radiant Lotus", 406, Rarity.MYTHIC, mage.cards.r.RadiantLotus.class, NON_FULL_USE_VARIOUS));
|
||||
cards.add(new SetCardInfo("Radiant Lotus", 416, Rarity.MYTHIC, mage.cards.r.RadiantLotus.class, NON_FULL_USE_VARIOUS));
|
||||
cards.add(new SetCardInfo("Radiant Lotus", 500, Rarity.MYTHIC, mage.cards.r.RadiantLotus.class, NON_FULL_USE_VARIOUS));
|
||||
cards.add(new SetCardInfo("Rangers' Aetherhive", 217, Rarity.UNCOMMON, mage.cards.r.RangersAetherhive.class));
|
||||
cards.add(new SetCardInfo("Rangers' Refueler", 55, Rarity.UNCOMMON, mage.cards.r.RangersRefueler.class));
|
||||
cards.add(new SetCardInfo("Reckless Velocitaur", 144, Rarity.UNCOMMON, mage.cards.r.RecklessVelocitaur.class));
|
||||
|
|
@ -255,8 +271,17 @@ public final class Aetherdrift extends ExpansionSet {
|
|||
cards.add(new SetCardInfo("Scrounging Skyray", 60, Rarity.UNCOMMON, mage.cards.s.ScroungingSkyray.class));
|
||||
cards.add(new SetCardInfo("Shefet Archfiend", 104, Rarity.UNCOMMON, mage.cards.s.ShefetArchfiend.class));
|
||||
cards.add(new SetCardInfo("Silken Strength", 180, Rarity.COMMON, mage.cards.s.SilkenStrength.class));
|
||||
cards.add(new SetCardInfo("Sita Varma, Masked Racer", 223, Rarity.RARE, mage.cards.s.SitaVarmaMaskedRacer.class, NON_FULL_USE_VARIOUS));
|
||||
cards.add(new SetCardInfo("Sita Varma, Masked Racer", 368, Rarity.RARE, mage.cards.s.SitaVarmaMaskedRacer.class, NON_FULL_USE_VARIOUS));
|
||||
cards.add(new SetCardInfo("Sita Varma, Masked Racer", 493, Rarity.RARE, mage.cards.s.SitaVarmaMaskedRacer.class, NON_FULL_USE_VARIOUS));
|
||||
cards.add(new SetCardInfo("Skybox Ferry", 243, Rarity.COMMON, mage.cards.s.SkyboxFerry.class));
|
||||
cards.add(new SetCardInfo("Skycrash", 146, Rarity.UNCOMMON, mage.cards.s.Skycrash.class));
|
||||
cards.add(new SetCardInfo("Skyseer's Chariot", 28, Rarity.RARE, mage.cards.s.SkyseersChariot.class, NON_FULL_USE_VARIOUS));
|
||||
cards.add(new SetCardInfo("Skyseer's Chariot", 296, Rarity.RARE, mage.cards.s.SkyseersChariot.class, NON_FULL_USE_VARIOUS));
|
||||
cards.add(new SetCardInfo("Skyseer's Chariot", 432, Rarity.RARE, mage.cards.s.SkyseersChariot.class, NON_FULL_USE_VARIOUS));
|
||||
cards.add(new SetCardInfo("Skyseer's Chariot", 518, Rarity.RARE, mage.cards.s.SkyseersChariot.class, NON_FULL_USE_VARIOUS));
|
||||
cards.add(new SetCardInfo("Skyserpent Seeker", 224, Rarity.UNCOMMON, mage.cards.s.SkyserpentSeeker.class, NON_FULL_USE_VARIOUS));
|
||||
cards.add(new SetCardInfo("Skyserpent Seeker", 420, Rarity.UNCOMMON, mage.cards.s.SkyserpentSeeker.class, NON_FULL_USE_VARIOUS));
|
||||
cards.add(new SetCardInfo("Skystreak Engineer", 61, Rarity.COMMON, mage.cards.s.SkystreakEngineer.class));
|
||||
cards.add(new SetCardInfo("Slick Imitator", 62, Rarity.UNCOMMON, mage.cards.s.SlickImitator.class));
|
||||
cards.add(new SetCardInfo("Spectacular Pileup", 29, Rarity.RARE, mage.cards.s.SpectacularPileup.class, NON_FULL_USE_VARIOUS));
|
||||
|
|
@ -299,6 +324,8 @@ public final class Aetherdrift extends ExpansionSet {
|
|||
cards.add(new SetCardInfo("Tranquil Cove", 267, Rarity.COMMON, mage.cards.t.TranquilCove.class));
|
||||
cards.add(new SetCardInfo("Transit Mage", 70, Rarity.UNCOMMON, mage.cards.t.TransitMage.class));
|
||||
cards.add(new SetCardInfo("Trip Up", 71, Rarity.COMMON, mage.cards.t.TripUp.class));
|
||||
cards.add(new SetCardInfo("Tune Up", 33, Rarity.UNCOMMON, mage.cards.t.TuneUp.class, NON_FULL_USE_VARIOUS));
|
||||
cards.add(new SetCardInfo("Tune Up", 417, Rarity.UNCOMMON, mage.cards.t.TuneUp.class, NON_FULL_USE_VARIOUS));
|
||||
cards.add(new SetCardInfo("Tyrox, Saurid Tyrant", 149, Rarity.UNCOMMON, mage.cards.t.TyroxSauridTyrant.class));
|
||||
cards.add(new SetCardInfo("Unstoppable Plan", 72, Rarity.RARE, mage.cards.u.UnstoppablePlan.class));
|
||||
cards.add(new SetCardInfo("Unswerving Sloth", 34, Rarity.UNCOMMON, mage.cards.u.UnswervingSloth.class));
|
||||
|
|
|
|||
|
|
@ -12,13 +12,27 @@ import mage.game.Game;
|
|||
*/
|
||||
public class ExhaustAbility extends ActivatedAbilityImpl {
|
||||
|
||||
private boolean withReminderText = true;
|
||||
|
||||
public ExhaustAbility(Effect effect, Cost cost) {
|
||||
super(Zone.BATTLEFIELD, effect, cost);
|
||||
}
|
||||
|
||||
public ExhaustAbility(Effect effect, Cost cost, boolean withReminderText) {
|
||||
super(Zone.BATTLEFIELD, effect, cost);
|
||||
this.setRuleVisible(false);
|
||||
this.withReminderText = withReminderText;
|
||||
}
|
||||
|
||||
private ExhaustAbility(final ExhaustAbility ability) {
|
||||
super(ability);
|
||||
this.maxActivationsPerGame = 1;
|
||||
this.withReminderText = ability.withReminderText;
|
||||
}
|
||||
|
||||
public ExhaustAbility withReminderText(boolean withReminderText) {
|
||||
this.withReminderText = withReminderText;
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -42,6 +56,7 @@ public class ExhaustAbility extends ActivatedAbilityImpl {
|
|||
|
||||
@Override
|
||||
public String getRule() {
|
||||
return "Exhaust — " + super.getRule() + " <i>(Activate each exhaust ability only once.)</i>";
|
||||
return "Exhaust — " + super.getRule() +
|
||||
(withReminderText ? " <i>(Activate each exhaust ability only once.)</i>" : "");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue