mirror of
https://github.com/magefree/mage.git
synced 2025-12-20 02:30:08 -08:00
parent
23dc279b9b
commit
6906072ec4
28 changed files with 400 additions and 759 deletions
|
|
@ -1,54 +0,0 @@
|
||||||
package mage.cards.a;
|
|
||||||
|
|
||||||
import mage.MageInt;
|
|
||||||
import mage.abilities.costs.common.SacrificeTargetCost;
|
|
||||||
import mage.abilities.effects.common.DamageControllerEffect;
|
|
||||||
import mage.abilities.effects.common.DoIfCostPaid;
|
|
||||||
import mage.abilities.effects.common.TapSourceEffect;
|
|
||||||
import mage.abilities.keyword.FlyingAbility;
|
|
||||||
import mage.abilities.keyword.TrampleAbility;
|
|
||||||
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
|
|
||||||
import mage.cards.CardImpl;
|
|
||||||
import mage.cards.CardSetInfo;
|
|
||||||
import mage.constants.CardType;
|
|
||||||
import mage.constants.SubType;
|
|
||||||
import mage.filter.common.FilterControlledPermanent;
|
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author anonymous
|
|
||||||
*/
|
|
||||||
public final class ArchdemonOfGreed extends CardImpl {
|
|
||||||
|
|
||||||
private static final FilterControlledPermanent filter = new FilterControlledPermanent(SubType.HUMAN, "Human");
|
|
||||||
|
|
||||||
public ArchdemonOfGreed(UUID ownerId, CardSetInfo setInfo) {
|
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "");
|
|
||||||
this.subtype.add(SubType.DEMON);
|
|
||||||
this.color.setBlack(true);
|
|
||||||
|
|
||||||
this.nightCard = true;
|
|
||||||
|
|
||||||
this.power = new MageInt(9);
|
|
||||||
this.toughness = new MageInt(9);
|
|
||||||
|
|
||||||
this.addAbility(FlyingAbility.getInstance());
|
|
||||||
this.addAbility(TrampleAbility.getInstance());
|
|
||||||
|
|
||||||
// At the beginning of your upkeep, sacrifice a Human. If you can't, tap Archdemon of Greed and it deals 9 damage to you.
|
|
||||||
this.addAbility(new BeginningOfUpkeepTriggeredAbility(new DoIfCostPaid(
|
|
||||||
null, new TapSourceEffect(), new SacrificeTargetCost(filter), false
|
|
||||||
).addOtherwiseEffect(new DamageControllerEffect(9))
|
|
||||||
.setText("sacrifice a Human. If you can't, tap {this} and it deals 9 damage to you")));
|
|
||||||
}
|
|
||||||
|
|
||||||
private ArchdemonOfGreed(final ArchdemonOfGreed card) {
|
|
||||||
super(card);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ArchdemonOfGreed copy() {
|
|
||||||
return new ArchdemonOfGreed(this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,64 +0,0 @@
|
||||||
package mage.cards.b;
|
|
||||||
|
|
||||||
import mage.MageInt;
|
|
||||||
import mage.abilities.Ability;
|
|
||||||
import mage.abilities.common.SimpleActivatedAbility;
|
|
||||||
import mage.abilities.condition.Condition;
|
|
||||||
import mage.abilities.condition.common.YouGainedLifeCondition;
|
|
||||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
|
||||||
import mage.abilities.effects.common.CreateTokenEffect;
|
|
||||||
import mage.abilities.effects.common.GainLifeEffect;
|
|
||||||
import mage.abilities.effects.common.LoseLifeOpponentsEffect;
|
|
||||||
import mage.abilities.hint.ConditionHint;
|
|
||||||
import mage.abilities.hint.Hint;
|
|
||||||
import mage.abilities.triggers.BeginningOfEndStepTriggeredAbility;
|
|
||||||
import mage.cards.CardImpl;
|
|
||||||
import mage.cards.CardSetInfo;
|
|
||||||
import mage.constants.CardType;
|
|
||||||
import mage.constants.SubType;
|
|
||||||
import mage.constants.TargetController;
|
|
||||||
import mage.game.permanent.token.BloodToken;
|
|
||||||
import mage.watchers.common.PlayerGainedLifeWatcher;
|
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author TheElk801
|
|
||||||
*/
|
|
||||||
public final class BloodsoakedReveler extends CardImpl {
|
|
||||||
|
|
||||||
private static final Condition condition = new YouGainedLifeCondition();
|
|
||||||
private static final Hint hint = new ConditionHint(condition, "You gained life this turn");
|
|
||||||
|
|
||||||
public BloodsoakedReveler(UUID ownerId, CardSetInfo setInfo) {
|
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "");
|
|
||||||
|
|
||||||
this.subtype.add(SubType.VAMPIRE);
|
|
||||||
this.power = new MageInt(3);
|
|
||||||
this.toughness = new MageInt(3);
|
|
||||||
this.color.setBlack(true);
|
|
||||||
this.nightCard = true;
|
|
||||||
|
|
||||||
// At the beginning of your end step, if you gained life this turn, create a Blood token.
|
|
||||||
this.addAbility(new BeginningOfEndStepTriggeredAbility(
|
|
||||||
TargetController.YOU, new CreateTokenEffect(new BloodToken()),
|
|
||||||
false, condition
|
|
||||||
).addHint(hint), new PlayerGainedLifeWatcher());
|
|
||||||
|
|
||||||
// {4}{B}: Each opponent loses 2 life and you gain 2 life.
|
|
||||||
Ability ability = new SimpleActivatedAbility(
|
|
||||||
new LoseLifeOpponentsEffect(2), new ManaCostsImpl<>("{4}{B}")
|
|
||||||
);
|
|
||||||
ability.addEffect(new GainLifeEffect(2).concatBy("and"));
|
|
||||||
this.addAbility(ability);
|
|
||||||
}
|
|
||||||
|
|
||||||
private BloodsoakedReveler(final BloodsoakedReveler card) {
|
|
||||||
super(card);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public BloodsoakedReveler copy() {
|
|
||||||
return new BloodsoakedReveler(this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,98 +0,0 @@
|
||||||
package mage.cards.k;
|
|
||||||
|
|
||||||
import mage.MageInt;
|
|
||||||
import mage.abilities.Ability;
|
|
||||||
import mage.abilities.common.AttacksTriggeredAbility;
|
|
||||||
import mage.abilities.effects.OneShotEffect;
|
|
||||||
import mage.abilities.effects.common.CreateTokenCopyTargetEffect;
|
|
||||||
import mage.abilities.keyword.FlyingAbility;
|
|
||||||
import mage.cards.CardImpl;
|
|
||||||
import mage.cards.CardSetInfo;
|
|
||||||
import mage.constants.CardType;
|
|
||||||
import mage.constants.Outcome;
|
|
||||||
import mage.constants.SubType;
|
|
||||||
import mage.constants.SuperType;
|
|
||||||
import mage.filter.FilterPermanent;
|
|
||||||
import mage.filter.common.FilterAttackingCreature;
|
|
||||||
import mage.filter.predicate.mageobject.AnotherPredicate;
|
|
||||||
import mage.game.Game;
|
|
||||||
import mage.game.permanent.Permanent;
|
|
||||||
import mage.target.TargetPermanent;
|
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author TheElk801
|
|
||||||
*/
|
|
||||||
public final class KrothussLordOfTheDeep extends CardImpl {
|
|
||||||
|
|
||||||
private static final FilterPermanent filter = new FilterAttackingCreature("another attacking creature");
|
|
||||||
|
|
||||||
static {
|
|
||||||
filter.add(AnotherPredicate.instance);
|
|
||||||
}
|
|
||||||
|
|
||||||
public KrothussLordOfTheDeep(UUID ownerId, CardSetInfo setInfo) {
|
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "");
|
|
||||||
|
|
||||||
this.supertype.add(SuperType.LEGENDARY);
|
|
||||||
this.subtype.add(SubType.KRAKEN);
|
|
||||||
this.subtype.add(SubType.HORROR);
|
|
||||||
this.power = new MageInt(3);
|
|
||||||
this.toughness = new MageInt(5);
|
|
||||||
this.color.setBlue(true);
|
|
||||||
this.color.setBlack(true);
|
|
||||||
this.nightCard = true;
|
|
||||||
|
|
||||||
// Flying
|
|
||||||
this.addAbility(FlyingAbility.getInstance());
|
|
||||||
|
|
||||||
// Whenever Krothuss, Lord of the Deep attacks, create a tapped and attacking token that's a copy of another target attacking creature. If that creature is a Kraken, Leviathan, Octopus, or Serpent, create two of those tokens instead.
|
|
||||||
Ability ability = new AttacksTriggeredAbility(new KrothussLordOfTheDeepEffect());
|
|
||||||
ability.addTarget(new TargetPermanent(filter));
|
|
||||||
this.addAbility(ability);
|
|
||||||
}
|
|
||||||
|
|
||||||
private KrothussLordOfTheDeep(final KrothussLordOfTheDeep card) {
|
|
||||||
super(card);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public KrothussLordOfTheDeep copy() {
|
|
||||||
return new KrothussLordOfTheDeep(this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class KrothussLordOfTheDeepEffect extends OneShotEffect {
|
|
||||||
|
|
||||||
KrothussLordOfTheDeepEffect() {
|
|
||||||
super(Outcome.Benefit);
|
|
||||||
staticText = "create a tapped and attacking token that's a copy of another target attacking creature. " +
|
|
||||||
"If that creature is a Kraken, Leviathan, Octopus, or Serpent, create two of those tokens instead";
|
|
||||||
}
|
|
||||||
|
|
||||||
private KrothussLordOfTheDeepEffect(final KrothussLordOfTheDeepEffect effect) {
|
|
||||||
super(effect);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public KrothussLordOfTheDeepEffect copy() {
|
|
||||||
return new KrothussLordOfTheDeepEffect(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean apply(Game game, Ability source) {
|
|
||||||
Permanent permanent = game.getPermanent(source.getFirstTarget());
|
|
||||||
if (permanent == null) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
int count = permanent.hasSubtype(SubType.KRAKEN, game)
|
|
||||||
|| permanent.hasSubtype(SubType.LEVIATHAN, game)
|
|
||||||
|| permanent.hasSubtype(SubType.OCTOPUS, game)
|
|
||||||
|| permanent.hasSubtype(SubType.SERPENT, game) ? 2 : 1;
|
|
||||||
return new CreateTokenCopyTargetEffect(
|
|
||||||
null, null,
|
|
||||||
false, count, true, true
|
|
||||||
).apply(game, source);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,40 +0,0 @@
|
||||||
package mage.cards.m;
|
|
||||||
|
|
||||||
import mage.MageInt;
|
|
||||||
import mage.abilities.common.WerewolfBackTriggeredAbility;
|
|
||||||
import mage.cards.CardImpl;
|
|
||||||
import mage.cards.CardSetInfo;
|
|
||||||
import mage.constants.CardType;
|
|
||||||
import mage.constants.SubType;
|
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author nantuko
|
|
||||||
*/
|
|
||||||
public final class MercilessPredator extends CardImpl {
|
|
||||||
|
|
||||||
public MercilessPredator(UUID ownerId, CardSetInfo setInfo) {
|
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "");
|
|
||||||
this.subtype.add(SubType.WEREWOLF);
|
|
||||||
this.color.setRed(true);
|
|
||||||
|
|
||||||
// this card is the second face of double-faced card
|
|
||||||
this.nightCard = true;
|
|
||||||
|
|
||||||
this.power = new MageInt(3);
|
|
||||||
this.toughness = new MageInt(2);
|
|
||||||
|
|
||||||
// At the beginning of each upkeep, if a player cast two or more spells last turn, transform Merciless Predator.
|
|
||||||
this.addAbility(new WerewolfBackTriggeredAbility());
|
|
||||||
}
|
|
||||||
|
|
||||||
private MercilessPredator(final MercilessPredator card) {
|
|
||||||
super(card);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public MercilessPredator copy() {
|
|
||||||
return new MercilessPredator(this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,49 +0,0 @@
|
||||||
package mage.cards.o;
|
|
||||||
|
|
||||||
import mage.MageInt;
|
|
||||||
import mage.abilities.Ability;
|
|
||||||
import mage.abilities.common.AttacksTriggeredAbility;
|
|
||||||
import mage.abilities.effects.common.GainLifeEffect;
|
|
||||||
import mage.abilities.effects.common.LoseLifeTargetEffect;
|
|
||||||
import mage.cards.CardImpl;
|
|
||||||
import mage.cards.CardSetInfo;
|
|
||||||
import mage.constants.CardType;
|
|
||||||
import mage.constants.SetTargetPointer;
|
|
||||||
import mage.constants.SubType;
|
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author TheElk801
|
|
||||||
*/
|
|
||||||
public final class OdiousWitch extends CardImpl {
|
|
||||||
|
|
||||||
public OdiousWitch(UUID ownerId, CardSetInfo setInfo) {
|
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "");
|
|
||||||
|
|
||||||
this.subtype.add(SubType.HUMAN);
|
|
||||||
this.subtype.add(SubType.WARLOCK);
|
|
||||||
this.power = new MageInt(3);
|
|
||||||
this.toughness = new MageInt(3);
|
|
||||||
this.color.setBlack(true);
|
|
||||||
this.nightCard = true;
|
|
||||||
|
|
||||||
// Whenever Odious Witch attacks, defending player loses 1 life and you gain 1 life.
|
|
||||||
Ability ability = new AttacksTriggeredAbility(
|
|
||||||
new LoseLifeTargetEffect(1)
|
|
||||||
.setText("defending player loses 1 life"),
|
|
||||||
false, null, SetTargetPointer.PLAYER
|
|
||||||
);
|
|
||||||
ability.addEffect(new GainLifeEffect(1).concatBy("and"));
|
|
||||||
this.addAbility(ability);
|
|
||||||
}
|
|
||||||
|
|
||||||
private OdiousWitch(final OdiousWitch card) {
|
|
||||||
super(card);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public OdiousWitch copy() {
|
|
||||||
return new OdiousWitch(this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -5,18 +5,21 @@ import mage.abilities.common.DiesAttachedTriggeredAbility;
|
||||||
import mage.abilities.common.SimpleStaticAbility;
|
import mage.abilities.common.SimpleStaticAbility;
|
||||||
import mage.abilities.effects.OneShotEffect;
|
import mage.abilities.effects.OneShotEffect;
|
||||||
import mage.abilities.effects.common.AttachEffect;
|
import mage.abilities.effects.common.AttachEffect;
|
||||||
|
import mage.abilities.effects.common.PermanentsEnterBattlefieldTappedEffect;
|
||||||
import mage.abilities.effects.common.continuous.BoostEnchantedEffect;
|
import mage.abilities.effects.common.continuous.BoostEnchantedEffect;
|
||||||
import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect;
|
import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect;
|
||||||
import mage.abilities.keyword.EnchantAbility;
|
import mage.abilities.keyword.EnchantAbility;
|
||||||
import mage.abilities.keyword.TransformAbility;
|
import mage.abilities.keyword.TransformAbility;
|
||||||
import mage.abilities.keyword.VigilanceAbility;
|
import mage.abilities.keyword.VigilanceAbility;
|
||||||
import mage.cards.Card;
|
|
||||||
import mage.cards.CardImpl;
|
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.cards.DoubleFacedCardHalf;
|
||||||
|
import mage.cards.TransformingDoubleFacedCard;
|
||||||
import mage.constants.*;
|
import mage.constants.*;
|
||||||
|
import mage.filter.common.FilterCreaturePermanent;
|
||||||
import mage.game.Game;
|
import mage.game.Game;
|
||||||
import mage.players.Player;
|
import mage.players.Player;
|
||||||
import mage.target.TargetPermanent;
|
import mage.target.TargetPermanent;
|
||||||
|
import mage.target.TargetPlayer;
|
||||||
import mage.target.common.TargetCreaturePermanent;
|
import mage.target.common.TargetCreaturePermanent;
|
||||||
import mage.target.common.TargetOpponent;
|
import mage.target.common.TargetOpponent;
|
||||||
|
|
||||||
|
|
@ -25,34 +28,52 @@ import java.util.UUID;
|
||||||
/**
|
/**
|
||||||
* @author TheElk801
|
* @author TheElk801
|
||||||
*/
|
*/
|
||||||
public final class RadiantGrace extends CardImpl {
|
public final class RadiantGrace extends TransformingDoubleFacedCard {
|
||||||
|
|
||||||
|
private static final FilterCreaturePermanent filter
|
||||||
|
= new FilterCreaturePermanent("creatures enchanted player controls");
|
||||||
|
|
||||||
|
static {
|
||||||
|
filter.add(TargetController.ENCHANTED.getControllerPredicate());
|
||||||
|
}
|
||||||
|
|
||||||
public RadiantGrace(UUID ownerId, CardSetInfo setInfo) {
|
public RadiantGrace(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{W}");
|
super(ownerId, setInfo,
|
||||||
|
new CardType[]{CardType.ENCHANTMENT}, new SubType[]{SubType.AURA}, "{W}",
|
||||||
this.subtype.add(SubType.AURA);
|
"Radiant Restraints",
|
||||||
this.secondSideCardClazz = mage.cards.r.RadiantRestraints.class;
|
new CardType[]{CardType.ENCHANTMENT}, new SubType[]{SubType.AURA, SubType.CURSE}, "W"
|
||||||
|
);
|
||||||
|
|
||||||
|
// Radiant Grace
|
||||||
// Enchant creature
|
// Enchant creature
|
||||||
TargetPermanent auraTarget = new TargetCreaturePermanent();
|
TargetPermanent auraTarget = new TargetCreaturePermanent();
|
||||||
this.getSpellAbility().addTarget(auraTarget);
|
this.getLeftHalfCard().getSpellAbility().addTarget(auraTarget);
|
||||||
this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature));
|
this.getLeftHalfCard().getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature));
|
||||||
this.addAbility(new EnchantAbility(auraTarget));
|
this.getLeftHalfCard().addAbility(new EnchantAbility(auraTarget));
|
||||||
|
|
||||||
// Enchanted creature gets +1/+0 and has vigilance.
|
// Enchanted creature gets +1/+0 and has vigilance.
|
||||||
Ability ability = new SimpleStaticAbility(new BoostEnchantedEffect(1, 0));
|
Ability ability = new SimpleStaticAbility(new BoostEnchantedEffect(1, 0));
|
||||||
ability.addEffect(new GainAbilityAttachedEffect(
|
ability.addEffect(new GainAbilityAttachedEffect(
|
||||||
VigilanceAbility.getInstance(), AttachmentType.AURA
|
VigilanceAbility.getInstance(), AttachmentType.AURA
|
||||||
).setText("and has vigilance"));
|
).setText("and has vigilance"));
|
||||||
this.addAbility(ability);
|
this.getLeftHalfCard().addAbility(ability);
|
||||||
|
|
||||||
// When enchanted creature dies, return Radiant Grace to the battlefield transformed under your control attached to target opponent.
|
// When enchanted creature dies, return Radiant Grace to the battlefield transformed under your control attached to target opponent.
|
||||||
this.addAbility(new TransformAbility());
|
|
||||||
ability = new DiesAttachedTriggeredAbility(
|
ability = new DiesAttachedTriggeredAbility(
|
||||||
new RadiantGraceEffect(), "enchanted creature", false
|
new RadiantGraceEffect(), "enchanted creature", false
|
||||||
);
|
);
|
||||||
ability.addTarget(new TargetOpponent());
|
ability.addTarget(new TargetOpponent());
|
||||||
this.addAbility(ability);
|
this.getLeftHalfCard().addAbility(ability);
|
||||||
|
|
||||||
|
// Radiant Restraints
|
||||||
|
// Enchant player
|
||||||
|
TargetPlayer auraTarget2 = new TargetPlayer();
|
||||||
|
this.getRightHalfCard().getSpellAbility().addTarget(auraTarget2);
|
||||||
|
this.getRightHalfCard().getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature));
|
||||||
|
this.getRightHalfCard().addAbility(new EnchantAbility(auraTarget2));
|
||||||
|
|
||||||
|
// Creatures enchanted player controls enter the battlefield tapped.
|
||||||
|
this.getRightHalfCard().addAbility(new SimpleStaticAbility(new PermanentsEnterBattlefieldTappedEffect(filter)));
|
||||||
}
|
}
|
||||||
|
|
||||||
private RadiantGrace(final RadiantGrace card) {
|
private RadiantGrace(final RadiantGrace card) {
|
||||||
|
|
@ -90,13 +111,13 @@ class RadiantGraceEffect extends OneShotEffect {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
Card card = game.getCard(source.getSourceId());
|
DoubleFacedCardHalf card = (DoubleFacedCardHalf) game.getCard(source.getSourceId());
|
||||||
if (card == null) {
|
if (card == null) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
game.getState().setValue(TransformAbility.VALUE_KEY_ENTER_TRANSFORMED + source.getSourceId(), Boolean.TRUE);
|
game.getState().setValue(TransformAbility.VALUE_KEY_ENTER_TRANSFORMED + source.getSourceId(), Boolean.TRUE);
|
||||||
game.getState().setValue("attachTo:" + source.getSourceId(), player.getId());
|
game.getState().setValue("attachTo:" + card.getOtherSide().getId(), player.getId());
|
||||||
if (controller.moveCards(card, Zone.BATTLEFIELD, source, game)) {
|
if (controller.moveCards(card, Zone.BATTLEFIELD, source, game)) {
|
||||||
player.addAttachment(card.getId(), source, game);
|
player.addAttachment(card.getId(), source, game);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,56 +0,0 @@
|
||||||
package mage.cards.r;
|
|
||||||
|
|
||||||
import mage.abilities.common.SimpleStaticAbility;
|
|
||||||
import mage.abilities.effects.common.AttachEffect;
|
|
||||||
import mage.abilities.effects.common.PermanentsEnterBattlefieldTappedEffect;
|
|
||||||
import mage.abilities.keyword.EnchantAbility;
|
|
||||||
import mage.cards.CardImpl;
|
|
||||||
import mage.cards.CardSetInfo;
|
|
||||||
import mage.constants.CardType;
|
|
||||||
import mage.constants.Outcome;
|
|
||||||
import mage.constants.SubType;
|
|
||||||
import mage.constants.TargetController;
|
|
||||||
import mage.filter.common.FilterCreaturePermanent;
|
|
||||||
import mage.target.TargetPlayer;
|
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author TheElk801
|
|
||||||
*/
|
|
||||||
public final class RadiantRestraints extends CardImpl {
|
|
||||||
|
|
||||||
private static final FilterCreaturePermanent filter
|
|
||||||
= new FilterCreaturePermanent("creatures enchanted player controls");
|
|
||||||
|
|
||||||
static {
|
|
||||||
filter.add(TargetController.ENCHANTED.getControllerPredicate());
|
|
||||||
}
|
|
||||||
|
|
||||||
public RadiantRestraints(UUID ownerId, CardSetInfo setInfo) {
|
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "");
|
|
||||||
|
|
||||||
this.subtype.add(SubType.AURA);
|
|
||||||
this.subtype.add(SubType.CURSE);
|
|
||||||
this.color.setWhite(true);
|
|
||||||
this.nightCard = true;
|
|
||||||
|
|
||||||
// Enchant player
|
|
||||||
TargetPlayer auraTarget = new TargetPlayer();
|
|
||||||
this.getSpellAbility().addTarget(auraTarget);
|
|
||||||
this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature));
|
|
||||||
this.addAbility(new EnchantAbility(auraTarget));
|
|
||||||
|
|
||||||
// Creatures enchanted player controls enter the battlefield tapped.
|
|
||||||
this.addAbility(new SimpleStaticAbility(new PermanentsEnterBattlefieldTappedEffect(filter)));
|
|
||||||
}
|
|
||||||
|
|
||||||
private RadiantRestraints(final RadiantRestraints card) {
|
|
||||||
super(card);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public RadiantRestraints copy() {
|
|
||||||
return new RadiantRestraints(this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,40 +1,54 @@
|
||||||
package mage.cards.r;
|
package mage.cards.r;
|
||||||
|
|
||||||
import mage.MageInt;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.triggers.BeginningOfEndStepTriggeredAbility;
|
import mage.abilities.common.AttacksTriggeredAbility;
|
||||||
import mage.abilities.condition.common.ControllerDiscardedThisTurnCondition;
|
import mage.abilities.condition.common.ControllerDiscardedThisTurnCondition;
|
||||||
|
import mage.abilities.effects.common.GainLifeEffect;
|
||||||
|
import mage.abilities.effects.common.LoseLifeTargetEffect;
|
||||||
import mage.abilities.effects.common.TransformSourceEffect;
|
import mage.abilities.effects.common.TransformSourceEffect;
|
||||||
import mage.abilities.hint.common.ControllerDiscardedHint;
|
import mage.abilities.hint.common.ControllerDiscardedHint;
|
||||||
import mage.abilities.keyword.TransformAbility;
|
import mage.abilities.triggers.BeginningOfEndStepTriggeredAbility;
|
||||||
import mage.cards.CardImpl;
|
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.cards.TransformingDoubleFacedCard;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
|
import mage.constants.SetTargetPointer;
|
||||||
import mage.constants.SubType;
|
import mage.constants.SubType;
|
||||||
import mage.constants.TargetController;
|
import mage.constants.TargetController;
|
||||||
import mage.watchers.common.DiscardedCardWatcher;
|
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author TheElk801
|
* @author TheElk801
|
||||||
*/
|
*/
|
||||||
public final class RaggedRecluse extends CardImpl {
|
public final class RaggedRecluse extends TransformingDoubleFacedCard {
|
||||||
|
|
||||||
public RaggedRecluse(UUID ownerId, CardSetInfo setInfo) {
|
public RaggedRecluse(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{B}");
|
super(ownerId, setInfo,
|
||||||
|
new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN, SubType.PEASANT}, "{1}{B}",
|
||||||
|
"Odious Witch",
|
||||||
|
new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN, SubType.WARLOCK}, "B"
|
||||||
|
);
|
||||||
|
|
||||||
this.subtype.add(SubType.HUMAN);
|
// Ragged Recluse
|
||||||
this.subtype.add(SubType.PEASANT);
|
this.getLeftHalfCard().setPT(2, 1);
|
||||||
this.power = new MageInt(2);
|
|
||||||
this.toughness = new MageInt(1);
|
|
||||||
this.secondSideCardClazz = mage.cards.o.OdiousWitch.class;
|
|
||||||
|
|
||||||
// At the beginning of your end step, if you discarded a card this turn, transform Ragged Recluse.
|
// At the beginning of your end step, if you discarded a card this turn, transform Ragged Recluse.
|
||||||
this.addAbility(new TransformAbility());
|
this.getLeftHalfCard().addAbility(new BeginningOfEndStepTriggeredAbility(
|
||||||
this.addAbility(new BeginningOfEndStepTriggeredAbility(
|
|
||||||
TargetController.YOU, new TransformSourceEffect(),
|
TargetController.YOU, new TransformSourceEffect(),
|
||||||
false, ControllerDiscardedThisTurnCondition.instance
|
false, ControllerDiscardedThisTurnCondition.instance
|
||||||
).addHint(ControllerDiscardedHint.instance), new DiscardedCardWatcher());
|
).addHint(ControllerDiscardedHint.instance));
|
||||||
|
|
||||||
|
// Odious Witch
|
||||||
|
this.getRightHalfCard().setPT(3, 3);
|
||||||
|
|
||||||
|
// Whenever Odious Witch attacks, defending player loses 1 life and you gain 1 life.
|
||||||
|
Ability ability = new AttacksTriggeredAbility(
|
||||||
|
new LoseLifeTargetEffect(1)
|
||||||
|
.setText("defending player loses 1 life"),
|
||||||
|
false, null, SetTargetPointer.PLAYER
|
||||||
|
);
|
||||||
|
ability.addEffect(new GainLifeEffect(1).concatBy("and"));
|
||||||
|
this.getRightHalfCard().addAbility(ability);
|
||||||
}
|
}
|
||||||
|
|
||||||
private RaggedRecluse(final RaggedRecluse card) {
|
private RaggedRecluse(final RaggedRecluse card) {
|
||||||
|
|
|
||||||
|
|
@ -1,23 +1,28 @@
|
||||||
package mage.cards.r;
|
package mage.cards.r;
|
||||||
|
|
||||||
import mage.MageInt;
|
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
|
import mage.abilities.common.DiesCreatureTriggeredAbility;
|
||||||
import mage.abilities.common.GainLifeControllerTriggeredAbility;
|
import mage.abilities.common.GainLifeControllerTriggeredAbility;
|
||||||
import mage.abilities.common.delayed.ReflexiveTriggeredAbility;
|
import mage.abilities.common.delayed.ReflexiveTriggeredAbility;
|
||||||
import mage.abilities.effects.OneShotEffect;
|
import mage.abilities.effects.OneShotEffect;
|
||||||
import mage.abilities.effects.common.ReturnFromGraveyardToBattlefieldTargetEffect;
|
import mage.abilities.effects.common.ReturnFromGraveyardToBattlefieldTargetEffect;
|
||||||
|
import mage.abilities.effects.common.TransformSourceEffect;
|
||||||
import mage.abilities.keyword.LifelinkAbility;
|
import mage.abilities.keyword.LifelinkAbility;
|
||||||
|
import mage.abilities.keyword.LivingMetalAbility;
|
||||||
import mage.abilities.keyword.MoreThanMeetsTheEyeAbility;
|
import mage.abilities.keyword.MoreThanMeetsTheEyeAbility;
|
||||||
import mage.cards.Card;
|
import mage.cards.Card;
|
||||||
import mage.cards.CardImpl;
|
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.cards.TransformingDoubleFacedCard;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.constants.Outcome;
|
import mage.constants.Outcome;
|
||||||
import mage.constants.SubType;
|
import mage.constants.SubType;
|
||||||
import mage.constants.SuperType;
|
import mage.constants.SuperType;
|
||||||
import mage.filter.FilterCard;
|
import mage.filter.FilterCard;
|
||||||
|
import mage.filter.FilterPermanent;
|
||||||
import mage.filter.common.FilterArtifactCard;
|
import mage.filter.common.FilterArtifactCard;
|
||||||
|
import mage.filter.common.FilterControlledArtifactPermanent;
|
||||||
import mage.filter.predicate.Predicate;
|
import mage.filter.predicate.Predicate;
|
||||||
|
import mage.filter.predicate.permanent.TokenPredicate;
|
||||||
import mage.game.Game;
|
import mage.game.Game;
|
||||||
import mage.game.permanent.Permanent;
|
import mage.game.permanent.Permanent;
|
||||||
import mage.target.common.TargetCardInYourGraveyard;
|
import mage.target.common.TargetCardInYourGraveyard;
|
||||||
|
|
@ -28,27 +33,51 @@ import java.util.UUID;
|
||||||
/**
|
/**
|
||||||
* @author TheElk801
|
* @author TheElk801
|
||||||
*/
|
*/
|
||||||
public final class RatchetFieldMedic extends CardImpl {
|
public final class RatchetFieldMedic extends TransformingDoubleFacedCard {
|
||||||
|
|
||||||
|
private static final FilterPermanent filterNontokenArtifacts = new FilterControlledArtifactPermanent();
|
||||||
|
|
||||||
|
static {
|
||||||
|
filterNontokenArtifacts.add(TokenPredicate.FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
public RatchetFieldMedic(UUID ownerId, CardSetInfo setInfo) {
|
public RatchetFieldMedic(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{2}{W}");
|
super(ownerId, setInfo,
|
||||||
|
new SuperType[]{SuperType.LEGENDARY}, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, new SubType[]{SubType.ROBOT}, "{2}{W}",
|
||||||
|
"Ratchet, Rescue Racer",
|
||||||
|
new SuperType[]{SuperType.LEGENDARY}, new CardType[]{CardType.ARTIFACT}, new SubType[]{SubType.VEHICLE}, "W"
|
||||||
|
);
|
||||||
|
|
||||||
this.supertype.add(SuperType.LEGENDARY);
|
// Ratchet, Field Medic
|
||||||
this.subtype.add(SubType.ROBOT);
|
this.getLeftHalfCard().setPT(2, 4);
|
||||||
this.power = new MageInt(2);
|
|
||||||
this.toughness = new MageInt(4);
|
|
||||||
this.secondSideCardClazz = mage.cards.r.RatchetRescueRacer.class;
|
|
||||||
|
|
||||||
// More Than Meets the Eye {1}{W}
|
// More Than Meets the Eye {1}{W}
|
||||||
this.addAbility(new MoreThanMeetsTheEyeAbility(this, "{1}{W}"));
|
this.getLeftHalfCard().addAbility(new MoreThanMeetsTheEyeAbility(this, "{1}{W}"));
|
||||||
|
|
||||||
// Lifelink
|
// Lifelink
|
||||||
this.addAbility(LifelinkAbility.getInstance());
|
this.getLeftHalfCard().addAbility(LifelinkAbility.getInstance());
|
||||||
|
|
||||||
// Whenever you gain life, you may convert Ratchet. When you do, return target artifact card with mana value less than or equal to the amount of life you gained this turn from your graveyard to the battlefield tapped.
|
// Whenever you gain life, you may convert Ratchet. When you do, return target artifact card with mana value less than or equal to the amount of life you gained this turn from your graveyard to the battlefield tapped.
|
||||||
this.addAbility(new GainLifeControllerTriggeredAbility(
|
Ability ability = new GainLifeControllerTriggeredAbility(
|
||||||
new RatchetFieldMedicEffect(), true
|
new RatchetFieldMedicEffect(), true
|
||||||
), new PlayerGainedLifeWatcher());
|
);
|
||||||
|
ability.addWatcher(new PlayerGainedLifeWatcher());
|
||||||
|
this.getLeftHalfCard().addAbility(ability);
|
||||||
|
|
||||||
|
// Ratchet, Rescue Racer
|
||||||
|
this.getRightHalfCard().setPT(1, 4);
|
||||||
|
|
||||||
|
// Living metal
|
||||||
|
this.getRightHalfCard().addAbility(new LivingMetalAbility());
|
||||||
|
|
||||||
|
// Lifelink
|
||||||
|
this.getRightHalfCard().addAbility(LifelinkAbility.getInstance());
|
||||||
|
|
||||||
|
// Whenever one or more nontoken artifacts you control are put into a graveyard from the battlefield, convert Ratchet. This ability triggers only once each turn.
|
||||||
|
this.getRightHalfCard().addAbility(new DiesCreatureTriggeredAbility(
|
||||||
|
new TransformSourceEffect().setText("convert {this}"), false, filterNontokenArtifacts
|
||||||
|
).setTriggerPhrase("Whenever one or more nontoken artifacts you control are put into a graveyard from the battlefield, ")
|
||||||
|
.setTriggersLimitEachTurn(1));
|
||||||
}
|
}
|
||||||
|
|
||||||
private RatchetFieldMedic(final RatchetFieldMedic card) {
|
private RatchetFieldMedic(final RatchetFieldMedic card) {
|
||||||
|
|
|
||||||
|
|
@ -1,61 +0,0 @@
|
||||||
package mage.cards.r;
|
|
||||||
|
|
||||||
import mage.MageInt;
|
|
||||||
import mage.abilities.common.DiesCreatureTriggeredAbility;
|
|
||||||
import mage.abilities.effects.common.TransformSourceEffect;
|
|
||||||
import mage.abilities.keyword.LifelinkAbility;
|
|
||||||
import mage.abilities.keyword.LivingMetalAbility;
|
|
||||||
import mage.cards.CardImpl;
|
|
||||||
import mage.cards.CardSetInfo;
|
|
||||||
import mage.constants.CardType;
|
|
||||||
import mage.constants.SubType;
|
|
||||||
import mage.constants.SuperType;
|
|
||||||
import mage.filter.FilterPermanent;
|
|
||||||
import mage.filter.common.FilterControlledArtifactPermanent;
|
|
||||||
import mage.filter.predicate.permanent.TokenPredicate;
|
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author TheElk801
|
|
||||||
*/
|
|
||||||
public final class RatchetRescueRacer extends CardImpl {
|
|
||||||
|
|
||||||
private static final FilterPermanent filter = new FilterControlledArtifactPermanent();
|
|
||||||
|
|
||||||
static {
|
|
||||||
filter.add(TokenPredicate.FALSE);
|
|
||||||
}
|
|
||||||
|
|
||||||
public RatchetRescueRacer(UUID ownerId, CardSetInfo setInfo) {
|
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "");
|
|
||||||
|
|
||||||
this.supertype.add(SuperType.LEGENDARY);
|
|
||||||
this.subtype.add(SubType.VEHICLE);
|
|
||||||
this.power = new MageInt(1);
|
|
||||||
this.toughness = new MageInt(4);
|
|
||||||
this.color.setWhite(true);
|
|
||||||
this.nightCard = true;
|
|
||||||
|
|
||||||
// Living metal
|
|
||||||
this.addAbility(new LivingMetalAbility());
|
|
||||||
|
|
||||||
// Lifelink
|
|
||||||
this.addAbility(LifelinkAbility.getInstance());
|
|
||||||
|
|
||||||
// Whenever one or more nontoken artifacts you control are put into a graveyard from the battlefield, convert Ratchet. This ability triggers only once each turn.
|
|
||||||
this.addAbility(new DiesCreatureTriggeredAbility(
|
|
||||||
new TransformSourceEffect().setText("convert {this}"), false, filter
|
|
||||||
).setTriggerPhrase("Whenever one or more nontoken artifacts you control " +
|
|
||||||
"are put into a graveyard from the battlefield, ").setTriggersLimitEachTurn(1));
|
|
||||||
}
|
|
||||||
|
|
||||||
private RatchetRescueRacer(final RatchetRescueRacer card) {
|
|
||||||
super(card);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public RatchetRescueRacer copy() {
|
|
||||||
return new RatchetRescueRacer(this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,12 +1,16 @@
|
||||||
package mage.cards.r;
|
package mage.cards.r;
|
||||||
|
|
||||||
import mage.MageInt;
|
|
||||||
import mage.abilities.common.ActivateAsSorceryActivatedAbility;
|
import mage.abilities.common.ActivateAsSorceryActivatedAbility;
|
||||||
import mage.abilities.costs.common.SacrificeTargetCost;
|
import mage.abilities.costs.common.SacrificeTargetCost;
|
||||||
|
import mage.abilities.effects.common.DamageControllerEffect;
|
||||||
|
import mage.abilities.effects.common.DoIfCostPaid;
|
||||||
|
import mage.abilities.effects.common.TapSourceEffect;
|
||||||
import mage.abilities.effects.common.TransformSourceEffect;
|
import mage.abilities.effects.common.TransformSourceEffect;
|
||||||
import mage.abilities.keyword.TransformAbility;
|
import mage.abilities.keyword.FlyingAbility;
|
||||||
import mage.cards.CardImpl;
|
import mage.abilities.keyword.TrampleAbility;
|
||||||
|
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.cards.TransformingDoubleFacedCard;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.constants.SubType;
|
import mage.constants.SubType;
|
||||||
import mage.filter.common.FilterControlledPermanent;
|
import mage.filter.common.FilterControlledPermanent;
|
||||||
|
|
@ -16,22 +20,37 @@ import java.util.UUID;
|
||||||
/**
|
/**
|
||||||
* @author intimidatingant
|
* @author intimidatingant
|
||||||
*/
|
*/
|
||||||
public final class RavenousDemon extends CardImpl {
|
public final class RavenousDemon extends TransformingDoubleFacedCard {
|
||||||
|
|
||||||
private static final FilterControlledPermanent filter = new FilterControlledPermanent(SubType.HUMAN, "Human");
|
private static final FilterControlledPermanent filter = new FilterControlledPermanent(SubType.HUMAN, "Human");
|
||||||
|
|
||||||
public RavenousDemon(UUID ownerId, CardSetInfo setInfo) {
|
public RavenousDemon(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{B}{B}");
|
super(ownerId, setInfo,
|
||||||
this.subtype.add(SubType.DEMON);
|
new CardType[]{CardType.CREATURE}, new SubType[]{SubType.DEMON}, "{3}{B}{B}",
|
||||||
|
"Archdemon of Greed",
|
||||||
|
new CardType[]{CardType.CREATURE}, new SubType[]{SubType.DEMON}, "B"
|
||||||
|
);
|
||||||
|
|
||||||
this.secondSideCardClazz = mage.cards.a.ArchdemonOfGreed.class;
|
// Ravenous Demon
|
||||||
|
this.getLeftHalfCard().setPT(4, 4);
|
||||||
this.power = new MageInt(4);
|
|
||||||
this.toughness = new MageInt(4);
|
|
||||||
|
|
||||||
// Sacrifice a Human: Transform Ravenous Demon. Activate this ability only any time you could cast a sorcery.
|
// Sacrifice a Human: Transform Ravenous Demon. Activate this ability only any time you could cast a sorcery.
|
||||||
this.addAbility(new TransformAbility());
|
this.getLeftHalfCard().addAbility(new ActivateAsSorceryActivatedAbility(new TransformSourceEffect(), new SacrificeTargetCost(filter)));
|
||||||
this.addAbility(new ActivateAsSorceryActivatedAbility(new TransformSourceEffect(), new SacrificeTargetCost(filter)));
|
|
||||||
|
// Archdemon of Greed
|
||||||
|
this.getRightHalfCard().setPT(9, 9);
|
||||||
|
|
||||||
|
// Flying
|
||||||
|
this.getRightHalfCard().addAbility(FlyingAbility.getInstance());
|
||||||
|
|
||||||
|
// Trample
|
||||||
|
this.getRightHalfCard().addAbility(TrampleAbility.getInstance());
|
||||||
|
|
||||||
|
// At the beginning of your upkeep, sacrifice a Human. If you can't, tap Archdemon of Greed and it deals 9 damage to you.
|
||||||
|
this.getRightHalfCard().addAbility(new BeginningOfUpkeepTriggeredAbility(new DoIfCostPaid(
|
||||||
|
null, new TapSourceEffect(), new SacrificeTargetCost(filter), false
|
||||||
|
).addOtherwiseEffect(new DamageControllerEffect(9))
|
||||||
|
.setText("sacrifice a Human. If you can't, tap {this} and it deals 9 damage to you")));
|
||||||
}
|
}
|
||||||
|
|
||||||
private RavenousDemon(final RavenousDemon card) {
|
private RavenousDemon(final RavenousDemon card) {
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,15 @@
|
||||||
package mage.cards.r;
|
package mage.cards.r;
|
||||||
|
|
||||||
import mage.MageInt;
|
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.triggers.BeginningOfCombatTriggeredAbility;
|
|
||||||
import mage.abilities.effects.common.continuous.BoostTargetEffect;
|
import mage.abilities.effects.common.continuous.BoostTargetEffect;
|
||||||
import mage.abilities.effects.common.continuous.GainAbilityTargetEffect;
|
import mage.abilities.effects.common.continuous.GainAbilityTargetEffect;
|
||||||
import mage.abilities.keyword.DayboundAbility;
|
import mage.abilities.keyword.DayboundAbility;
|
||||||
import mage.abilities.keyword.HasteAbility;
|
import mage.abilities.keyword.HasteAbility;
|
||||||
import mage.cards.CardImpl;
|
import mage.abilities.keyword.NightboundAbility;
|
||||||
|
import mage.abilities.keyword.TrampleAbility;
|
||||||
|
import mage.abilities.triggers.BeginningOfCombatTriggeredAbility;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.cards.TransformingDoubleFacedCard;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.constants.Duration;
|
import mage.constants.Duration;
|
||||||
import mage.constants.SubType;
|
import mage.constants.SubType;
|
||||||
|
|
@ -19,16 +20,17 @@ import java.util.UUID;
|
||||||
/**
|
/**
|
||||||
* @author TheElk801
|
* @author TheElk801
|
||||||
*/
|
*/
|
||||||
public final class RecklessStormseeker extends CardImpl {
|
public final class RecklessStormseeker extends TransformingDoubleFacedCard {
|
||||||
|
|
||||||
public RecklessStormseeker(UUID ownerId, CardSetInfo setInfo) {
|
public RecklessStormseeker(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{R}");
|
super(ownerId, setInfo,
|
||||||
|
new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN, SubType.WEREWOLF}, "{2}{R}",
|
||||||
|
"Storm-Charged Slasher",
|
||||||
|
new CardType[]{CardType.CREATURE}, new SubType[]{SubType.WEREWOLF}, "R"
|
||||||
|
);
|
||||||
|
|
||||||
this.subtype.add(SubType.HUMAN);
|
// Reckless Stormseeker
|
||||||
this.subtype.add(SubType.WEREWOLF);
|
this.getLeftHalfCard().setPT(2, 3);
|
||||||
this.power = new MageInt(2);
|
|
||||||
this.toughness = new MageInt(3);
|
|
||||||
this.secondSideCardClazz = mage.cards.s.StormChargedSlasher.class;
|
|
||||||
|
|
||||||
// At the beginning of combat on your turn, target creature you control gets +1/+0 and gains haste until end of turn.
|
// At the beginning of combat on your turn, target creature you control gets +1/+0 and gains haste until end of turn.
|
||||||
Ability ability = new BeginningOfCombatTriggeredAbility(
|
Ability ability = new BeginningOfCombatTriggeredAbility(
|
||||||
|
|
@ -39,10 +41,30 @@ public final class RecklessStormseeker extends CardImpl {
|
||||||
HasteAbility.getInstance(), Duration.EndOfTurn
|
HasteAbility.getInstance(), Duration.EndOfTurn
|
||||||
).setText("and gains haste until end of turn"));
|
).setText("and gains haste until end of turn"));
|
||||||
ability.addTarget(new TargetControlledCreaturePermanent());
|
ability.addTarget(new TargetControlledCreaturePermanent());
|
||||||
this.addAbility(ability);
|
this.getLeftHalfCard().addAbility(ability);
|
||||||
|
|
||||||
// Daybound
|
// Daybound
|
||||||
this.addAbility(new DayboundAbility());
|
this.getLeftHalfCard().addAbility(new DayboundAbility());
|
||||||
|
|
||||||
|
// Storm-Charged Slasher
|
||||||
|
this.getRightHalfCard().setPT(3, 4);
|
||||||
|
|
||||||
|
// At the beginning of combat on your turn, target creature you control gets +2/+0 and gains trample and haste until end of turn.
|
||||||
|
Ability ability2 = new BeginningOfCombatTriggeredAbility(
|
||||||
|
new BoostTargetEffect(2, 0)
|
||||||
|
.setText("target creature you control gets +2/+0")
|
||||||
|
);
|
||||||
|
ability2.addEffect(new GainAbilityTargetEffect(
|
||||||
|
TrampleAbility.getInstance(), Duration.EndOfTurn
|
||||||
|
).setText("and gains trample"));
|
||||||
|
ability2.addEffect(new GainAbilityTargetEffect(
|
||||||
|
HasteAbility.getInstance(), Duration.EndOfTurn
|
||||||
|
).setText("and haste until end of turn"));
|
||||||
|
ability2.addTarget(new TargetControlledCreaturePermanent());
|
||||||
|
this.getRightHalfCard().addAbility(ability2);
|
||||||
|
|
||||||
|
// Nightbound
|
||||||
|
this.getRightHalfCard().addAbility(new NightboundAbility());
|
||||||
}
|
}
|
||||||
|
|
||||||
private RecklessStormseeker(final RecklessStormseeker card) {
|
private RecklessStormseeker(final RecklessStormseeker card) {
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,9 @@
|
||||||
package mage.cards.r;
|
package mage.cards.r;
|
||||||
|
|
||||||
import mage.MageInt;
|
import mage.abilities.common.WerewolfBackTriggeredAbility;
|
||||||
import mage.abilities.common.WerewolfFrontTriggeredAbility;
|
import mage.abilities.common.WerewolfFrontTriggeredAbility;
|
||||||
import mage.abilities.keyword.TransformAbility;
|
|
||||||
import mage.cards.CardImpl;
|
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.cards.TransformingDoubleFacedCard;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.constants.SubType;
|
import mage.constants.SubType;
|
||||||
|
|
||||||
|
|
@ -13,22 +12,26 @@ import java.util.UUID;
|
||||||
/**
|
/**
|
||||||
* @author nantuko
|
* @author nantuko
|
||||||
*/
|
*/
|
||||||
public final class RecklessWaif extends CardImpl {
|
public final class RecklessWaif extends TransformingDoubleFacedCard {
|
||||||
|
|
||||||
public RecklessWaif(UUID ownerId, CardSetInfo setInfo) {
|
public RecklessWaif(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{R}");
|
super(ownerId, setInfo,
|
||||||
this.subtype.add(SubType.HUMAN);
|
new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN, SubType.ROGUE, SubType.WEREWOLF}, "{R}",
|
||||||
this.subtype.add(SubType.ROGUE);
|
"Merciless Predator",
|
||||||
this.subtype.add(SubType.WEREWOLF);
|
new CardType[]{CardType.CREATURE}, new SubType[]{SubType.WEREWOLF}, "R"
|
||||||
|
);
|
||||||
|
|
||||||
this.secondSideCardClazz = mage.cards.m.MercilessPredator.class;
|
// Reckless Waif
|
||||||
|
this.getLeftHalfCard().setPT(1, 1);
|
||||||
this.power = new MageInt(1);
|
|
||||||
this.toughness = new MageInt(1);
|
|
||||||
|
|
||||||
// At the beginning of each upkeep, if no spells were cast last turn, transform Reckless Waif.
|
// At the beginning of each upkeep, if no spells were cast last turn, transform Reckless Waif.
|
||||||
this.addAbility(new TransformAbility());
|
this.getLeftHalfCard().addAbility(new WerewolfFrontTriggeredAbility());
|
||||||
this.addAbility(new WerewolfFrontTriggeredAbility());
|
|
||||||
|
// Merciless Predator
|
||||||
|
this.getRightHalfCard().setPT(3, 2);
|
||||||
|
|
||||||
|
// At the beginning of each upkeep, if a player cast two or more spells last turn, transform Merciless Predator.
|
||||||
|
this.getRightHalfCard().addAbility(new WerewolfBackTriggeredAbility());
|
||||||
}
|
}
|
||||||
|
|
||||||
private RecklessWaif(final RecklessWaif card) {
|
private RecklessWaif(final RecklessWaif card) {
|
||||||
|
|
|
||||||
|
|
@ -1,30 +1,34 @@
|
||||||
package mage.cards.r;
|
package mage.cards.r;
|
||||||
|
|
||||||
import mage.MageInt;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.common.ActivateAsSorceryActivatedAbility;
|
import mage.abilities.common.ActivateAsSorceryActivatedAbility;
|
||||||
import mage.abilities.triggers.BeginningOfEndStepTriggeredAbility;
|
import mage.abilities.common.SimpleActivatedAbility;
|
||||||
import mage.abilities.condition.Condition;
|
import mage.abilities.condition.Condition;
|
||||||
import mage.abilities.condition.common.YouGainedLifeCondition;
|
import mage.abilities.condition.common.YouGainedLifeCondition;
|
||||||
import mage.abilities.costs.common.SacrificeTargetCost;
|
import mage.abilities.costs.common.SacrificeTargetCost;
|
||||||
|
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||||
import mage.abilities.effects.common.CreateTokenEffect;
|
import mage.abilities.effects.common.CreateTokenEffect;
|
||||||
|
import mage.abilities.effects.common.GainLifeEffect;
|
||||||
|
import mage.abilities.effects.common.LoseLifeOpponentsEffect;
|
||||||
import mage.abilities.effects.common.TransformSourceEffect;
|
import mage.abilities.effects.common.TransformSourceEffect;
|
||||||
import mage.abilities.hint.ConditionHint;
|
import mage.abilities.hint.ConditionHint;
|
||||||
import mage.abilities.hint.Hint;
|
import mage.abilities.hint.Hint;
|
||||||
import mage.abilities.keyword.TransformAbility;
|
import mage.abilities.triggers.BeginningOfEndStepTriggeredAbility;
|
||||||
import mage.cards.CardImpl;
|
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
import mage.constants.*;
|
import mage.cards.TransformingDoubleFacedCard;
|
||||||
|
import mage.constants.CardType;
|
||||||
|
import mage.constants.SubType;
|
||||||
|
import mage.constants.TargetController;
|
||||||
import mage.filter.common.FilterControlledPermanent;
|
import mage.filter.common.FilterControlledPermanent;
|
||||||
import mage.filter.predicate.permanent.TokenPredicate;
|
import mage.filter.predicate.permanent.TokenPredicate;
|
||||||
import mage.game.permanent.token.BloodToken;
|
import mage.game.permanent.token.BloodToken;
|
||||||
import mage.watchers.common.PlayerGainedLifeWatcher;
|
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author TheElk801
|
* @author TheElk801
|
||||||
*/
|
*/
|
||||||
public final class RestlessBloodseeker extends CardImpl {
|
public final class RestlessBloodseeker extends TransformingDoubleFacedCard {
|
||||||
|
|
||||||
private static final Condition condition = new YouGainedLifeCondition();
|
private static final Condition condition = new YouGainedLifeCondition();
|
||||||
private static final Hint hint = new ConditionHint(condition, "You gained life this turn");
|
private static final Hint hint = new ConditionHint(condition, "You gained life this turn");
|
||||||
|
|
@ -36,25 +40,42 @@ public final class RestlessBloodseeker extends CardImpl {
|
||||||
}
|
}
|
||||||
|
|
||||||
public RestlessBloodseeker(UUID ownerId, CardSetInfo setInfo) {
|
public RestlessBloodseeker(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{B}");
|
super(ownerId, setInfo,
|
||||||
|
new CardType[]{CardType.CREATURE}, new SubType[]{SubType.VAMPIRE}, "{1}{B}",
|
||||||
|
"Bloodsoaked Reveler",
|
||||||
|
new CardType[]{CardType.CREATURE}, new SubType[]{SubType.VAMPIRE}, "B"
|
||||||
|
);
|
||||||
|
|
||||||
this.subtype.add(SubType.VAMPIRE);
|
// Restless Bloodseeker
|
||||||
this.power = new MageInt(1);
|
this.getLeftHalfCard().setPT(1, 3);
|
||||||
this.toughness = new MageInt(3);
|
|
||||||
this.secondSideCardClazz = mage.cards.b.BloodsoakedReveler.class;
|
|
||||||
|
|
||||||
// At the beginning of your end step, if you gained life this turn, create a Blood token.
|
// At the beginning of your end step, if you gained life this turn, create a Blood token.
|
||||||
this.addAbility(new BeginningOfEndStepTriggeredAbility(
|
this.getLeftHalfCard().addAbility(new BeginningOfEndStepTriggeredAbility(
|
||||||
TargetController.YOU, new CreateTokenEffect(new BloodToken()),
|
TargetController.YOU, new CreateTokenEffect(new BloodToken()),
|
||||||
false, condition
|
false, condition
|
||||||
).addHint(hint), new PlayerGainedLifeWatcher());
|
).addHint(hint));
|
||||||
|
|
||||||
// Sacrifice two Blood tokens: Transform Restless Bloodseeker. Activate only as a sorcery.
|
// Sacrifice two Blood tokens: Transform Restless Bloodseeker. Activate only as a sorcery.
|
||||||
this.addAbility(new TransformAbility());
|
this.getLeftHalfCard().addAbility(new ActivateAsSorceryActivatedAbility(
|
||||||
this.addAbility(new ActivateAsSorceryActivatedAbility(
|
|
||||||
new TransformSourceEffect(),
|
new TransformSourceEffect(),
|
||||||
new SacrificeTargetCost(2, filter)
|
new SacrificeTargetCost(2, filter)
|
||||||
));
|
));
|
||||||
|
|
||||||
|
// Bloodsoaked Reveler
|
||||||
|
this.getRightHalfCard().setPT(3, 3);
|
||||||
|
|
||||||
|
// At the beginning of your end step, if you gained life this turn, create a Blood token.
|
||||||
|
this.getRightHalfCard().addAbility(new BeginningOfEndStepTriggeredAbility(
|
||||||
|
TargetController.YOU, new CreateTokenEffect(new BloodToken()),
|
||||||
|
false, condition
|
||||||
|
).addHint(hint));
|
||||||
|
|
||||||
|
// {4}{B}: Each opponent loses 2 life and you gain 2 life.
|
||||||
|
Ability ability = new SimpleActivatedAbility(
|
||||||
|
new LoseLifeOpponentsEffect(2), new ManaCostsImpl<>("{4}{B}")
|
||||||
|
);
|
||||||
|
ability.addEffect(new GainLifeEffect(2).concatBy("and"));
|
||||||
|
this.getRightHalfCard().addAbility(ability);
|
||||||
}
|
}
|
||||||
|
|
||||||
private RestlessBloodseeker(final RestlessBloodseeker card) {
|
private RestlessBloodseeker(final RestlessBloodseeker card) {
|
||||||
|
|
|
||||||
|
|
@ -1,28 +1,34 @@
|
||||||
package mage.cards.r;
|
package mage.cards.r;
|
||||||
|
|
||||||
import mage.MageInt;
|
import mage.abilities.Ability;
|
||||||
|
import mage.abilities.TriggeredAbilityImpl;
|
||||||
import mage.abilities.common.ActivateAsSorceryActivatedAbility;
|
import mage.abilities.common.ActivateAsSorceryActivatedAbility;
|
||||||
import mage.abilities.common.SimpleActivatedAbility;
|
import mage.abilities.common.SimpleActivatedAbility;
|
||||||
import mage.abilities.common.SpellCastControllerTriggeredAbility;
|
import mage.abilities.common.SpellCastControllerTriggeredAbility;
|
||||||
import mage.abilities.costs.common.TapSourceCost;
|
import mage.abilities.costs.common.TapSourceCost;
|
||||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||||
|
import mage.abilities.effects.OneShotEffect;
|
||||||
import mage.abilities.effects.common.DrawDiscardControllerEffect;
|
import mage.abilities.effects.common.DrawDiscardControllerEffect;
|
||||||
import mage.abilities.effects.common.TransformSourceEffect;
|
import mage.abilities.effects.common.TransformSourceEffect;
|
||||||
import mage.abilities.effects.common.UntapSourceEffect;
|
import mage.abilities.effects.common.UntapSourceEffect;
|
||||||
import mage.abilities.keyword.TransformAbility;
|
import mage.abilities.keyword.TrampleAbility;
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.Card;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
import mage.constants.CardType;
|
import mage.cards.TransformingDoubleFacedCard;
|
||||||
import mage.constants.SubType;
|
import mage.constants.*;
|
||||||
import mage.constants.SuperType;
|
|
||||||
import mage.filter.FilterSpell;
|
import mage.filter.FilterSpell;
|
||||||
|
import mage.game.Game;
|
||||||
|
import mage.game.events.GameEvent;
|
||||||
|
import mage.players.Player;
|
||||||
|
import mage.target.targetpointer.FixedTarget;
|
||||||
|
import mage.util.CardUtil;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author TheElk801
|
* @author TheElk801
|
||||||
*/
|
*/
|
||||||
public final class RonaHeraldOfInvasion extends CardImpl {
|
public final class RonaHeraldOfInvasion extends TransformingDoubleFacedCard {
|
||||||
|
|
||||||
private static final FilterSpell filter = new FilterSpell("a legendary spell");
|
private static final FilterSpell filter = new FilterSpell("a legendary spell");
|
||||||
|
|
||||||
|
|
@ -31,26 +37,34 @@ public final class RonaHeraldOfInvasion extends CardImpl {
|
||||||
}
|
}
|
||||||
|
|
||||||
public RonaHeraldOfInvasion(UUID ownerId, CardSetInfo setInfo) {
|
public RonaHeraldOfInvasion(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}");
|
super(ownerId, setInfo,
|
||||||
|
new SuperType[]{SuperType.LEGENDARY}, new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN, SubType.WIZARD}, "{1}{U}",
|
||||||
|
"Rona, Tolarian Obliterator",
|
||||||
|
new SuperType[]{SuperType.LEGENDARY}, new CardType[]{CardType.CREATURE}, new SubType[]{SubType.PHYREXIAN, SubType.WIZARD}, "UB"
|
||||||
|
);
|
||||||
|
|
||||||
this.supertype.add(SuperType.LEGENDARY);
|
// Rona, Herald of Invasion
|
||||||
this.subtype.add(SubType.HUMAN);
|
this.getLeftHalfCard().setPT(1, 3);
|
||||||
this.subtype.add(SubType.WIZARD);
|
|
||||||
this.power = new MageInt(1);
|
|
||||||
this.toughness = new MageInt(3);
|
|
||||||
this.secondSideCardClazz = mage.cards.r.RonaTolarianObliterator.class;
|
|
||||||
|
|
||||||
// Whenever you cast a legendary spell, untap Rona, Herald of Invasion.
|
// Whenever you cast a legendary spell, untap Rona, Herald of Invasion.
|
||||||
this.addAbility(new SpellCastControllerTriggeredAbility(new UntapSourceEffect(), filter, false));
|
this.getLeftHalfCard().addAbility(new SpellCastControllerTriggeredAbility(new UntapSourceEffect(), filter, false));
|
||||||
|
|
||||||
// {T}: Draw a card, then discard a card.
|
// {T}: Draw a card, then discard a card.
|
||||||
this.addAbility(new SimpleActivatedAbility(
|
this.getLeftHalfCard().addAbility(new SimpleActivatedAbility(
|
||||||
new DrawDiscardControllerEffect(1, 1), new TapSourceCost()
|
new DrawDiscardControllerEffect(1, 1), new TapSourceCost()
|
||||||
));
|
));
|
||||||
|
|
||||||
// {5}{B/P}: Transform Rona. Activate only as a sorcery.
|
// {5}{B/P}: Transform Rona. Activate only as a sorcery.
|
||||||
this.addAbility(new TransformAbility());
|
this.getLeftHalfCard().addAbility(new ActivateAsSorceryActivatedAbility(new TransformSourceEffect(), new ManaCostsImpl<>("{5}{B/P}")));
|
||||||
this.addAbility(new ActivateAsSorceryActivatedAbility(new TransformSourceEffect(), new ManaCostsImpl<>("{5}{B/P}")));
|
|
||||||
|
// Rona, Tolarian Obliterator
|
||||||
|
this.getRightHalfCard().setPT(5, 5);
|
||||||
|
|
||||||
|
// Trample
|
||||||
|
this.getRightHalfCard().addAbility(TrampleAbility.getInstance());
|
||||||
|
|
||||||
|
// Whenever a source deals damage to Rona, Tolarian Obliterator, that source's controller exiles a card from their hand at random. If it's a land card, you may put it onto the battlefield under your control. Otherwise, you may cast it without paying its mana cost.
|
||||||
|
this.getRightHalfCard().addAbility(new RonaTolarianObliteratorTriggeredAbility());
|
||||||
}
|
}
|
||||||
|
|
||||||
private RonaHeraldOfInvasion(final RonaHeraldOfInvasion card) {
|
private RonaHeraldOfInvasion(final RonaHeraldOfInvasion card) {
|
||||||
|
|
@ -62,3 +76,75 @@ public final class RonaHeraldOfInvasion extends CardImpl {
|
||||||
return new RonaHeraldOfInvasion(this);
|
return new RonaHeraldOfInvasion(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class RonaTolarianObliteratorTriggeredAbility extends TriggeredAbilityImpl {
|
||||||
|
|
||||||
|
RonaTolarianObliteratorTriggeredAbility() {
|
||||||
|
super(Zone.BATTLEFIELD, new RonaTolarianObliteratorEffect());
|
||||||
|
}
|
||||||
|
|
||||||
|
private RonaTolarianObliteratorTriggeredAbility(final RonaTolarianObliteratorTriggeredAbility ability) {
|
||||||
|
super(ability);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public RonaTolarianObliteratorTriggeredAbility copy() {
|
||||||
|
return new RonaTolarianObliteratorTriggeredAbility(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean checkEventType(GameEvent event, Game game) {
|
||||||
|
return event.getType() == GameEvent.EventType.DAMAGED_PERMANENT;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean checkTrigger(GameEvent event, Game game) {
|
||||||
|
if (event.getTargetId().equals(getSourceId())) {
|
||||||
|
this.getEffects().setTargetPointer(new FixedTarget(game.getControllerId(event.getSourceId())));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getRule() {
|
||||||
|
return "Whenever a source deals damage to {this}, that source's controller exiles a card " +
|
||||||
|
"from their hand at random. If it's a land card, you may put it onto the battlefield " +
|
||||||
|
"under your control. Otherwise, you may cast it without paying its mana cost.";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class RonaTolarianObliteratorEffect extends OneShotEffect {
|
||||||
|
|
||||||
|
RonaTolarianObliteratorEffect() {
|
||||||
|
super(Outcome.Benefit);
|
||||||
|
}
|
||||||
|
|
||||||
|
private RonaTolarianObliteratorEffect(final RonaTolarianObliteratorEffect effect) {
|
||||||
|
super(effect);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public RonaTolarianObliteratorEffect copy() {
|
||||||
|
return new RonaTolarianObliteratorEffect(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean apply(Game game, Ability source) {
|
||||||
|
Player controller = game.getPlayer(source.getControllerId());
|
||||||
|
Player player = game.getPlayer(getTargetPointer().getFirst(game, source));
|
||||||
|
if (controller == null || player == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
Card card = player.getHand().getRandom(game);
|
||||||
|
if (card == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
player.moveCards(card, Zone.EXILED, source, game);
|
||||||
|
if (!card.isLand(game)) {
|
||||||
|
return CardUtil.castSpellWithAttributesForFree(controller, source, game, card);
|
||||||
|
}
|
||||||
|
return controller.chooseUse(Outcome.PutLandInPlay, "Put " + card.getIdName() + " onto the battlefield?", source, game)
|
||||||
|
&& controller.moveCards(card, Zone.BATTLEFIELD, source, game);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,124 +0,0 @@
|
||||||
package mage.cards.r;
|
|
||||||
|
|
||||||
import mage.MageInt;
|
|
||||||
import mage.abilities.Ability;
|
|
||||||
import mage.abilities.TriggeredAbilityImpl;
|
|
||||||
import mage.abilities.effects.OneShotEffect;
|
|
||||||
import mage.abilities.keyword.TrampleAbility;
|
|
||||||
import mage.cards.Card;
|
|
||||||
import mage.cards.CardImpl;
|
|
||||||
import mage.cards.CardSetInfo;
|
|
||||||
import mage.constants.*;
|
|
||||||
import mage.game.Game;
|
|
||||||
import mage.game.events.GameEvent;
|
|
||||||
import mage.players.Player;
|
|
||||||
import mage.target.targetpointer.FixedTarget;
|
|
||||||
import mage.util.CardUtil;
|
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author TheElk801
|
|
||||||
*/
|
|
||||||
public final class RonaTolarianObliterator extends CardImpl {
|
|
||||||
|
|
||||||
public RonaTolarianObliterator(UUID ownerId, CardSetInfo setInfo) {
|
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "");
|
|
||||||
|
|
||||||
this.supertype.add(SuperType.LEGENDARY);
|
|
||||||
this.subtype.add(SubType.PHYREXIAN);
|
|
||||||
this.subtype.add(SubType.WIZARD);
|
|
||||||
this.power = new MageInt(5);
|
|
||||||
this.toughness = new MageInt(5);
|
|
||||||
this.color.setBlue(true);
|
|
||||||
this.color.setBlack(true);
|
|
||||||
this.nightCard = true;
|
|
||||||
|
|
||||||
// Trample
|
|
||||||
this.addAbility(TrampleAbility.getInstance());
|
|
||||||
|
|
||||||
// Whenever a source deals damage to Rona, Tolarian Obliterator, that source's controller exiles a card from their hand at random. If it's a land card, you may put it onto the battlefield under your control. Otherwise, you may cast it without paying its mana cost.
|
|
||||||
this.addAbility(new RonaTolarianObliteratorTriggeredAbility());
|
|
||||||
}
|
|
||||||
|
|
||||||
private RonaTolarianObliterator(final RonaTolarianObliterator card) {
|
|
||||||
super(card);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public RonaTolarianObliterator copy() {
|
|
||||||
return new RonaTolarianObliterator(this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class RonaTolarianObliteratorTriggeredAbility extends TriggeredAbilityImpl {
|
|
||||||
|
|
||||||
RonaTolarianObliteratorTriggeredAbility() {
|
|
||||||
super(Zone.BATTLEFIELD, new RonaTolarianObliteratorEffect());
|
|
||||||
}
|
|
||||||
|
|
||||||
private RonaTolarianObliteratorTriggeredAbility(final RonaTolarianObliteratorTriggeredAbility ability) {
|
|
||||||
super(ability);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public RonaTolarianObliteratorTriggeredAbility copy() {
|
|
||||||
return new RonaTolarianObliteratorTriggeredAbility(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean checkEventType(GameEvent event, Game game) {
|
|
||||||
return event.getType() == GameEvent.EventType.DAMAGED_PERMANENT;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean checkTrigger(GameEvent event, Game game) {
|
|
||||||
if (event.getTargetId().equals(getSourceId())) {
|
|
||||||
this.getEffects().setTargetPointer(new FixedTarget(game.getControllerId(event.getSourceId())));
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getRule() {
|
|
||||||
return "Whenever a source deals damage to {this}, that source's controller exiles a card " +
|
|
||||||
"from their hand at random. If it's a land card, you may put it onto the battlefield " +
|
|
||||||
"under your control. Otherwise, you may cast it without paying its mana cost.";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class RonaTolarianObliteratorEffect extends OneShotEffect {
|
|
||||||
|
|
||||||
RonaTolarianObliteratorEffect() {
|
|
||||||
super(Outcome.Benefit);
|
|
||||||
}
|
|
||||||
|
|
||||||
private RonaTolarianObliteratorEffect(final RonaTolarianObliteratorEffect effect) {
|
|
||||||
super(effect);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public RonaTolarianObliteratorEffect copy() {
|
|
||||||
return new RonaTolarianObliteratorEffect(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean apply(Game game, Ability source) {
|
|
||||||
Player controller = game.getPlayer(source.getControllerId());
|
|
||||||
Player player = game.getPlayer(getTargetPointer().getFirst(game, source));
|
|
||||||
if (controller == null || player == null) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
Card card = player.getHand().getRandom(game);
|
|
||||||
if (card == null) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
player.moveCards(card, Zone.EXILED, source, game);
|
|
||||||
if (!card.isLand(game)) {
|
|
||||||
return CardUtil.castSpellWithAttributesForFree(controller, source, game, card);
|
|
||||||
}
|
|
||||||
return controller.chooseUse(Outcome.PutLandInPlay, "Put " + card.getIdName() + " onto the battlefield?", source, game)
|
|
||||||
&& controller.moveCards(card, Zone.BATTLEFIELD, source, game);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,25 +1,29 @@
|
||||||
package mage.cards.r;
|
package mage.cards.r;
|
||||||
|
|
||||||
import mage.MageInt;
|
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
|
import mage.abilities.common.AttacksTriggeredAbility;
|
||||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||||
import mage.abilities.effects.OneShotEffect;
|
import mage.abilities.effects.OneShotEffect;
|
||||||
|
import mage.abilities.effects.common.CreateTokenCopyTargetEffect;
|
||||||
import mage.abilities.effects.common.PutOnLibraryTargetEffect;
|
import mage.abilities.effects.common.PutOnLibraryTargetEffect;
|
||||||
import mage.abilities.keyword.FlyingAbility;
|
import mage.abilities.keyword.FlyingAbility;
|
||||||
import mage.abilities.keyword.TransformAbility;
|
|
||||||
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
|
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
|
||||||
import mage.cards.Card;
|
import mage.cards.Card;
|
||||||
import mage.cards.CardImpl;
|
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
import mage.cards.CardsImpl;
|
import mage.cards.CardsImpl;
|
||||||
|
import mage.cards.TransformingDoubleFacedCard;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.constants.Outcome;
|
import mage.constants.Outcome;
|
||||||
import mage.constants.SubType;
|
import mage.constants.SubType;
|
||||||
import mage.constants.SuperType;
|
import mage.constants.SuperType;
|
||||||
|
import mage.filter.FilterPermanent;
|
||||||
import mage.filter.StaticFilters;
|
import mage.filter.StaticFilters;
|
||||||
|
import mage.filter.common.FilterAttackingCreature;
|
||||||
|
import mage.filter.predicate.mageobject.AnotherPredicate;
|
||||||
import mage.game.Game;
|
import mage.game.Game;
|
||||||
import mage.game.permanent.Permanent;
|
import mage.game.permanent.Permanent;
|
||||||
import mage.players.Player;
|
import mage.players.Player;
|
||||||
|
import mage.target.TargetPermanent;
|
||||||
import mage.target.common.TargetCardInYourGraveyard;
|
import mage.target.common.TargetCardInYourGraveyard;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
@ -27,29 +31,45 @@ import java.util.UUID;
|
||||||
/**
|
/**
|
||||||
* @author TheElk801
|
* @author TheElk801
|
||||||
*/
|
*/
|
||||||
public final class RunoStromkirk extends CardImpl {
|
public final class RunoStromkirk extends TransformingDoubleFacedCard {
|
||||||
|
|
||||||
|
private static final FilterPermanent filter = new FilterAttackingCreature("another attacking creature");
|
||||||
|
|
||||||
|
static {
|
||||||
|
filter.add(AnotherPredicate.instance);
|
||||||
|
}
|
||||||
|
|
||||||
public RunoStromkirk(UUID ownerId, CardSetInfo setInfo) {
|
public RunoStromkirk(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}{B}");
|
super(ownerId, setInfo,
|
||||||
|
new SuperType[]{SuperType.LEGENDARY}, new CardType[]{CardType.CREATURE}, new SubType[]{SubType.VAMPIRE, SubType.CLERIC}, "{1}{U}{B}",
|
||||||
|
"Krothuss, Lord of the Deep",
|
||||||
|
new SuperType[]{SuperType.LEGENDARY}, new CardType[]{CardType.CREATURE}, new SubType[]{SubType.KRAKEN, SubType.HORROR}, "UB"
|
||||||
|
);
|
||||||
|
|
||||||
this.supertype.add(SuperType.LEGENDARY);
|
// Runo Stromkirk
|
||||||
this.subtype.add(SubType.VAMPIRE);
|
this.getLeftHalfCard().setPT(1, 4);
|
||||||
this.subtype.add(SubType.CLERIC);
|
|
||||||
this.power = new MageInt(1);
|
|
||||||
this.toughness = new MageInt(4);
|
|
||||||
this.secondSideCardClazz = mage.cards.k.KrothussLordOfTheDeep.class;
|
|
||||||
|
|
||||||
// Flying
|
// Flying
|
||||||
this.addAbility(FlyingAbility.getInstance());
|
this.getLeftHalfCard().addAbility(FlyingAbility.getInstance());
|
||||||
|
|
||||||
// When Runo Stromkirk enters the battlefield, put up to one target creature card from your graveyard on top of your library.
|
// When Runo Stromkirk enters the battlefield, put up to one target creature card from your graveyard on top of your library.
|
||||||
Ability ability = new EntersBattlefieldTriggeredAbility(new PutOnLibraryTargetEffect(true));
|
Ability ability = new EntersBattlefieldTriggeredAbility(new PutOnLibraryTargetEffect(true));
|
||||||
ability.addTarget(new TargetCardInYourGraveyard(0, 1, StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD));
|
ability.addTarget(new TargetCardInYourGraveyard(0, 1, StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD));
|
||||||
this.addAbility(ability);
|
this.getLeftHalfCard().addAbility(ability);
|
||||||
|
|
||||||
// At the beginning of your upkeep, look at the top card of your library. You may reveal that card. If a creature card with mana value 6 or greater is revealed this way, transform Runo Stromkirk.
|
// At the beginning of your upkeep, look at the top card of your library. You may reveal that card. If a creature card with mana value 6 or greater is revealed this way, transform Runo Stromkirk.
|
||||||
this.addAbility(new TransformAbility());
|
this.getLeftHalfCard().addAbility(new BeginningOfUpkeepTriggeredAbility(new RunoStromkirkEffect()));
|
||||||
this.addAbility(new BeginningOfUpkeepTriggeredAbility(new RunoStromkirkEffect()));
|
|
||||||
|
// Krothuss, Lord of the Deep
|
||||||
|
this.getRightHalfCard().setPT(3, 5);
|
||||||
|
|
||||||
|
// Flying
|
||||||
|
this.getRightHalfCard().addAbility(FlyingAbility.getInstance());
|
||||||
|
|
||||||
|
// Whenever Krothuss, Lord of the Deep attacks, create a tapped and attacking token that's a copy of another target attacking creature. If that creature is a Kraken, Leviathan, Octopus, or Serpent, create two of those tokens instead.
|
||||||
|
Ability ability2 = new AttacksTriggeredAbility(new KrothussLordOfTheDeepEffect());
|
||||||
|
ability2.addTarget(new TargetPermanent(filter));
|
||||||
|
this.getRightHalfCard().addAbility(ability2);
|
||||||
}
|
}
|
||||||
|
|
||||||
private RunoStromkirk(final RunoStromkirk card) {
|
private RunoStromkirk(final RunoStromkirk card) {
|
||||||
|
|
@ -104,3 +124,38 @@ class RunoStromkirkEffect extends OneShotEffect {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class KrothussLordOfTheDeepEffect extends OneShotEffect {
|
||||||
|
|
||||||
|
KrothussLordOfTheDeepEffect() {
|
||||||
|
super(Outcome.Benefit);
|
||||||
|
staticText = "create a tapped and attacking token that's a copy of another target attacking creature. " +
|
||||||
|
"If that creature is a Kraken, Leviathan, Octopus, or Serpent, create two of those tokens instead";
|
||||||
|
}
|
||||||
|
|
||||||
|
private KrothussLordOfTheDeepEffect(final KrothussLordOfTheDeepEffect effect) {
|
||||||
|
super(effect);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public KrothussLordOfTheDeepEffect copy() {
|
||||||
|
return new KrothussLordOfTheDeepEffect(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean apply(Game game, Ability source) {
|
||||||
|
Permanent permanent = game.getPermanent(source.getFirstTarget());
|
||||||
|
if (permanent == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
int count = permanent.hasSubtype(SubType.KRAKEN, game)
|
||||||
|
|| permanent.hasSubtype(SubType.LEVIATHAN, game)
|
||||||
|
|| permanent.hasSubtype(SubType.OCTOPUS, game)
|
||||||
|
|| permanent.hasSubtype(SubType.SERPENT, game) ? 2 : 1;
|
||||||
|
return new CreateTokenCopyTargetEffect(
|
||||||
|
null, null,
|
||||||
|
false, count, true, true
|
||||||
|
).apply(game, source);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,60 +0,0 @@
|
||||||
package mage.cards.s;
|
|
||||||
|
|
||||||
import mage.MageInt;
|
|
||||||
import mage.abilities.Ability;
|
|
||||||
import mage.abilities.triggers.BeginningOfCombatTriggeredAbility;
|
|
||||||
import mage.abilities.effects.common.continuous.BoostTargetEffect;
|
|
||||||
import mage.abilities.effects.common.continuous.GainAbilityTargetEffect;
|
|
||||||
import mage.abilities.keyword.HasteAbility;
|
|
||||||
import mage.abilities.keyword.NightboundAbility;
|
|
||||||
import mage.abilities.keyword.TrampleAbility;
|
|
||||||
import mage.cards.CardImpl;
|
|
||||||
import mage.cards.CardSetInfo;
|
|
||||||
import mage.constants.CardType;
|
|
||||||
import mage.constants.Duration;
|
|
||||||
import mage.constants.SubType;
|
|
||||||
import mage.target.common.TargetControlledCreaturePermanent;
|
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author TheElk801
|
|
||||||
*/
|
|
||||||
public final class StormChargedSlasher extends CardImpl {
|
|
||||||
|
|
||||||
public StormChargedSlasher(UUID ownerId, CardSetInfo setInfo) {
|
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "");
|
|
||||||
|
|
||||||
this.subtype.add(SubType.WEREWOLF);
|
|
||||||
this.power = new MageInt(3);
|
|
||||||
this.toughness = new MageInt(4);
|
|
||||||
this.color.setRed(true);
|
|
||||||
this.nightCard = true;
|
|
||||||
|
|
||||||
// At the beginning of combat on your turn, target creature you control gets +2/+0 and gains trample and haste until end of turn.
|
|
||||||
Ability ability = new BeginningOfCombatTriggeredAbility(
|
|
||||||
new BoostTargetEffect(2, 0)
|
|
||||||
.setText("target creature you control gets +2/+0")
|
|
||||||
);
|
|
||||||
ability.addEffect(new GainAbilityTargetEffect(
|
|
||||||
TrampleAbility.getInstance(), Duration.EndOfTurn
|
|
||||||
).setText("and gains trample"));
|
|
||||||
ability.addEffect(new GainAbilityTargetEffect(
|
|
||||||
HasteAbility.getInstance(), Duration.EndOfTurn
|
|
||||||
).setText("and haste until end of turn"));
|
|
||||||
ability.addTarget(new TargetControlledCreaturePermanent());
|
|
||||||
this.addAbility(ability);
|
|
||||||
|
|
||||||
// Nightbound
|
|
||||||
this.addAbility(new NightboundAbility());
|
|
||||||
}
|
|
||||||
|
|
||||||
private StormChargedSlasher(final StormChargedSlasher card) {
|
|
||||||
super(card);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public StormChargedSlasher copy() {
|
|
||||||
return new StormChargedSlasher(this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -42,7 +42,6 @@ public final class DarkAscension extends ExpansionSet {
|
||||||
cards.add(new SetCardInfo("Alpha Brawl", 82, Rarity.RARE, mage.cards.a.AlphaBrawl.class));
|
cards.add(new SetCardInfo("Alpha Brawl", 82, Rarity.RARE, mage.cards.a.AlphaBrawl.class));
|
||||||
cards.add(new SetCardInfo("Altar of the Lost", 144, Rarity.UNCOMMON, mage.cards.a.AltarOfTheLost.class));
|
cards.add(new SetCardInfo("Altar of the Lost", 144, Rarity.UNCOMMON, mage.cards.a.AltarOfTheLost.class));
|
||||||
cards.add(new SetCardInfo("Archangel's Light", 1, Rarity.MYTHIC, mage.cards.a.ArchangelsLight.class));
|
cards.add(new SetCardInfo("Archangel's Light", 1, Rarity.MYTHIC, mage.cards.a.ArchangelsLight.class));
|
||||||
cards.add(new SetCardInfo("Archdemon of Greed", 71, Rarity.RARE, mage.cards.a.ArchdemonOfGreed.class));
|
|
||||||
cards.add(new SetCardInfo("Artful Dodge", 27, Rarity.COMMON, mage.cards.a.ArtfulDodge.class));
|
cards.add(new SetCardInfo("Artful Dodge", 27, Rarity.COMMON, mage.cards.a.ArtfulDodge.class));
|
||||||
cards.add(new SetCardInfo("Avacyn's Collar", 145, Rarity.UNCOMMON, mage.cards.a.AvacynsCollar.class));
|
cards.add(new SetCardInfo("Avacyn's Collar", 145, Rarity.UNCOMMON, mage.cards.a.AvacynsCollar.class));
|
||||||
cards.add(new SetCardInfo("Bar the Door", 2, Rarity.COMMON, mage.cards.b.BarTheDoor.class));
|
cards.add(new SetCardInfo("Bar the Door", 2, Rarity.COMMON, mage.cards.b.BarTheDoor.class));
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,6 @@ public class DarkAscensionPromos extends ExpansionSet {
|
||||||
this.hasBoosters = false;
|
this.hasBoosters = false;
|
||||||
this.hasBasicLands = false;
|
this.hasBasicLands = false;
|
||||||
|
|
||||||
cards.add(new SetCardInfo("Archdemon of Greed", "71*", Rarity.RARE, mage.cards.a.ArchdemonOfGreed.class));
|
|
||||||
cards.add(new SetCardInfo("Gravecrawler", "64*", Rarity.RARE, mage.cards.g.Gravecrawler.class));
|
cards.add(new SetCardInfo("Gravecrawler", "64*", Rarity.RARE, mage.cards.g.Gravecrawler.class));
|
||||||
cards.add(new SetCardInfo("Mondronen Shaman", "98*", Rarity.RARE, mage.cards.m.MondronenShaman.class));
|
cards.add(new SetCardInfo("Mondronen Shaman", "98*", Rarity.RARE, mage.cards.m.MondronenShaman.class));
|
||||||
cards.add(new SetCardInfo("Ravenous Demon", "71*", Rarity.RARE, mage.cards.r.RavenousDemon.class));
|
cards.add(new SetCardInfo("Ravenous Demon", "71*", Rarity.RARE, mage.cards.r.RavenousDemon.class));
|
||||||
|
|
|
||||||
|
|
@ -185,7 +185,6 @@ public final class Innistrad extends ExpansionSet {
|
||||||
cards.add(new SetCardInfo("Mayor of Avabruck", 193, Rarity.RARE, mage.cards.m.MayorOfAvabruck.class));
|
cards.add(new SetCardInfo("Mayor of Avabruck", 193, Rarity.RARE, mage.cards.m.MayorOfAvabruck.class));
|
||||||
cards.add(new SetCardInfo("Memory's Journey", 66, Rarity.UNCOMMON, mage.cards.m.MemorysJourney.class));
|
cards.add(new SetCardInfo("Memory's Journey", 66, Rarity.UNCOMMON, mage.cards.m.MemorysJourney.class));
|
||||||
cards.add(new SetCardInfo("Mentor of the Meek", 21, Rarity.RARE, mage.cards.m.MentorOfTheMeek.class));
|
cards.add(new SetCardInfo("Mentor of the Meek", 21, Rarity.RARE, mage.cards.m.MentorOfTheMeek.class));
|
||||||
cards.add(new SetCardInfo("Merciless Predator", 159, Rarity.UNCOMMON, mage.cards.m.MercilessPredator.class));
|
|
||||||
cards.add(new SetCardInfo("Midnight Haunting", 22, Rarity.UNCOMMON, mage.cards.m.MidnightHaunting.class));
|
cards.add(new SetCardInfo("Midnight Haunting", 22, Rarity.UNCOMMON, mage.cards.m.MidnightHaunting.class));
|
||||||
cards.add(new SetCardInfo("Mikaeus, the Lunarch", 23, Rarity.MYTHIC, mage.cards.m.MikaeusTheLunarch.class));
|
cards.add(new SetCardInfo("Mikaeus, the Lunarch", 23, Rarity.MYTHIC, mage.cards.m.MikaeusTheLunarch.class));
|
||||||
cards.add(new SetCardInfo("Mindshrieker", 67, Rarity.RARE, mage.cards.m.Mindshrieker.class));
|
cards.add(new SetCardInfo("Mindshrieker", 67, Rarity.RARE, mage.cards.m.Mindshrieker.class));
|
||||||
|
|
|
||||||
|
|
@ -75,8 +75,6 @@ public final class InnistradCrimsonVow extends ExpansionSet {
|
||||||
cards.add(new SetCardInfo("Bloodbat Summoner", 338, Rarity.RARE, mage.cards.b.BloodbatSummoner.class, NON_FULL_USE_VARIOUS));
|
cards.add(new SetCardInfo("Bloodbat Summoner", 338, Rarity.RARE, mage.cards.b.BloodbatSummoner.class, NON_FULL_USE_VARIOUS));
|
||||||
cards.add(new SetCardInfo("Bloodcrazed Socialite", 288, Rarity.COMMON, mage.cards.b.BloodcrazedSocialite.class, NON_FULL_USE_VARIOUS));
|
cards.add(new SetCardInfo("Bloodcrazed Socialite", 288, Rarity.COMMON, mage.cards.b.BloodcrazedSocialite.class, NON_FULL_USE_VARIOUS));
|
||||||
cards.add(new SetCardInfo("Bloodcrazed Socialite", 96, Rarity.COMMON, mage.cards.b.BloodcrazedSocialite.class, NON_FULL_USE_VARIOUS));
|
cards.add(new SetCardInfo("Bloodcrazed Socialite", 96, Rarity.COMMON, mage.cards.b.BloodcrazedSocialite.class, NON_FULL_USE_VARIOUS));
|
||||||
cards.add(new SetCardInfo("Bloodsoaked Reveler", 128, Rarity.UNCOMMON, mage.cards.b.BloodsoakedReveler.class, NON_FULL_USE_VARIOUS));
|
|
||||||
cards.add(new SetCardInfo("Bloodsoaked Reveler", 295, Rarity.UNCOMMON, mage.cards.b.BloodsoakedReveler.class, NON_FULL_USE_VARIOUS));
|
|
||||||
cards.add(new SetCardInfo("Bloodsworn Squire", 289, Rarity.UNCOMMON, mage.cards.b.BloodswornSquire.class, NON_FULL_USE_VARIOUS));
|
cards.add(new SetCardInfo("Bloodsworn Squire", 289, Rarity.UNCOMMON, mage.cards.b.BloodswornSquire.class, NON_FULL_USE_VARIOUS));
|
||||||
cards.add(new SetCardInfo("Bloodsworn Squire", 97, Rarity.UNCOMMON, mage.cards.b.BloodswornSquire.class, NON_FULL_USE_VARIOUS));
|
cards.add(new SetCardInfo("Bloodsworn Squire", 97, Rarity.UNCOMMON, mage.cards.b.BloodswornSquire.class, NON_FULL_USE_VARIOUS));
|
||||||
cards.add(new SetCardInfo("Bloodtithe Harvester", 232, Rarity.UNCOMMON, mage.cards.b.BloodtitheHarvester.class, NON_FULL_USE_VARIOUS));
|
cards.add(new SetCardInfo("Bloodtithe Harvester", 232, Rarity.UNCOMMON, mage.cards.b.BloodtitheHarvester.class, NON_FULL_USE_VARIOUS));
|
||||||
|
|
@ -271,9 +269,6 @@ public final class InnistradCrimsonVow extends ExpansionSet {
|
||||||
cards.add(new SetCardInfo("Kessig Wolfrider", 165, Rarity.RARE, mage.cards.k.KessigWolfrider.class, NON_FULL_USE_VARIOUS));
|
cards.add(new SetCardInfo("Kessig Wolfrider", 165, Rarity.RARE, mage.cards.k.KessigWolfrider.class, NON_FULL_USE_VARIOUS));
|
||||||
cards.add(new SetCardInfo("Kessig Wolfrider", 379, Rarity.RARE, mage.cards.k.KessigWolfrider.class, NON_FULL_USE_VARIOUS));
|
cards.add(new SetCardInfo("Kessig Wolfrider", 379, Rarity.RARE, mage.cards.k.KessigWolfrider.class, NON_FULL_USE_VARIOUS));
|
||||||
cards.add(new SetCardInfo("Kindly Ancestor", 22, Rarity.COMMON, mage.cards.k.KindlyAncestor.class));
|
cards.add(new SetCardInfo("Kindly Ancestor", 22, Rarity.COMMON, mage.cards.k.KindlyAncestor.class));
|
||||||
cards.add(new SetCardInfo("Krothuss, Lord of the Deep", 246, Rarity.RARE, mage.cards.k.KrothussLordOfTheDeep.class, NON_FULL_USE_VARIOUS));
|
|
||||||
cards.add(new SetCardInfo("Krothuss, Lord of the Deep", 316, Rarity.RARE, mage.cards.k.KrothussLordOfTheDeep.class, NON_FULL_USE_VARIOUS));
|
|
||||||
cards.add(new SetCardInfo("Krothuss, Lord of the Deep", 327, Rarity.RARE, mage.cards.k.KrothussLordOfTheDeep.class, NON_FULL_USE_VARIOUS));
|
|
||||||
cards.add(new SetCardInfo("Lacerate Flesh", 166, Rarity.COMMON, mage.cards.l.LacerateFlesh.class));
|
cards.add(new SetCardInfo("Lacerate Flesh", 166, Rarity.COMMON, mage.cards.l.LacerateFlesh.class));
|
||||||
cards.add(new SetCardInfo("Laid to Rest", 207, Rarity.UNCOMMON, mage.cards.l.LaidToRest.class));
|
cards.add(new SetCardInfo("Laid to Rest", 207, Rarity.UNCOMMON, mage.cards.l.LaidToRest.class));
|
||||||
cards.add(new SetCardInfo("Lambholt Raconteur", 167, Rarity.UNCOMMON, mage.cards.l.LambholtRaconteur.class));
|
cards.add(new SetCardInfo("Lambholt Raconteur", 167, Rarity.UNCOMMON, mage.cards.l.LambholtRaconteur.class));
|
||||||
|
|
@ -309,7 +304,6 @@ public final class InnistradCrimsonVow extends ExpansionSet {
|
||||||
cards.add(new SetCardInfo("Necroduality", 70, Rarity.MYTHIC, mage.cards.n.Necroduality.class, NON_FULL_USE_VARIOUS));
|
cards.add(new SetCardInfo("Necroduality", 70, Rarity.MYTHIC, mage.cards.n.Necroduality.class, NON_FULL_USE_VARIOUS));
|
||||||
cards.add(new SetCardInfo("Nurturing Presence", 26, Rarity.COMMON, mage.cards.n.NurturingPresence.class));
|
cards.add(new SetCardInfo("Nurturing Presence", 26, Rarity.COMMON, mage.cards.n.NurturingPresence.class));
|
||||||
cards.add(new SetCardInfo("Oakshade Stalker", 212, Rarity.UNCOMMON, mage.cards.o.OakshadeStalker.class));
|
cards.add(new SetCardInfo("Oakshade Stalker", 212, Rarity.UNCOMMON, mage.cards.o.OakshadeStalker.class));
|
||||||
cards.add(new SetCardInfo("Odious Witch", 127, Rarity.COMMON, mage.cards.o.OdiousWitch.class));
|
|
||||||
cards.add(new SetCardInfo("Odric, Blood-Cursed", 243, Rarity.RARE, mage.cards.o.OdricBloodCursed.class, NON_FULL_USE_VARIOUS));
|
cards.add(new SetCardInfo("Odric, Blood-Cursed", 243, Rarity.RARE, mage.cards.o.OdricBloodCursed.class, NON_FULL_USE_VARIOUS));
|
||||||
cards.add(new SetCardInfo("Odric, Blood-Cursed", 314, Rarity.RARE, mage.cards.o.OdricBloodCursed.class, NON_FULL_USE_VARIOUS));
|
cards.add(new SetCardInfo("Odric, Blood-Cursed", 314, Rarity.RARE, mage.cards.o.OdricBloodCursed.class, NON_FULL_USE_VARIOUS));
|
||||||
cards.add(new SetCardInfo("Old Rutstein", 244, Rarity.RARE, mage.cards.o.OldRutstein.class, NON_FULL_USE_VARIOUS));
|
cards.add(new SetCardInfo("Old Rutstein", 244, Rarity.RARE, mage.cards.o.OldRutstein.class, NON_FULL_USE_VARIOUS));
|
||||||
|
|
@ -339,7 +333,6 @@ public final class InnistradCrimsonVow extends ExpansionSet {
|
||||||
cards.add(new SetCardInfo("Pointed Discussion", 126, Rarity.COMMON, mage.cards.p.PointedDiscussion.class));
|
cards.add(new SetCardInfo("Pointed Discussion", 126, Rarity.COMMON, mage.cards.p.PointedDiscussion.class));
|
||||||
cards.add(new SetCardInfo("Pyre Spawn", 173, Rarity.COMMON, mage.cards.p.PyreSpawn.class));
|
cards.add(new SetCardInfo("Pyre Spawn", 173, Rarity.COMMON, mage.cards.p.PyreSpawn.class));
|
||||||
cards.add(new SetCardInfo("Radiant Grace", 31, Rarity.UNCOMMON, mage.cards.r.RadiantGrace.class));
|
cards.add(new SetCardInfo("Radiant Grace", 31, Rarity.UNCOMMON, mage.cards.r.RadiantGrace.class));
|
||||||
cards.add(new SetCardInfo("Radiant Restraints", 31, Rarity.UNCOMMON, mage.cards.r.RadiantRestraints.class));
|
|
||||||
cards.add(new SetCardInfo("Ragged Recluse", 127, Rarity.COMMON, mage.cards.r.RaggedRecluse.class));
|
cards.add(new SetCardInfo("Ragged Recluse", 127, Rarity.COMMON, mage.cards.r.RaggedRecluse.class));
|
||||||
cards.add(new SetCardInfo("Reckless Impulse", 174, Rarity.COMMON, mage.cards.r.RecklessImpulse.class));
|
cards.add(new SetCardInfo("Reckless Impulse", 174, Rarity.COMMON, mage.cards.r.RecklessImpulse.class));
|
||||||
cards.add(new SetCardInfo("Reclusive Taxidermist", 214, Rarity.UNCOMMON, mage.cards.r.ReclusiveTaxidermist.class, NON_FULL_USE_VARIOUS));
|
cards.add(new SetCardInfo("Reclusive Taxidermist", 214, Rarity.UNCOMMON, mage.cards.r.ReclusiveTaxidermist.class, NON_FULL_USE_VARIOUS));
|
||||||
|
|
|
||||||
|
|
@ -73,7 +73,6 @@ public final class InnistradDoubleFeature extends ExpansionSet {
|
||||||
cards.add(new SetCardInfo("Bloodbat Summoner", 404, Rarity.RARE, mage.cards.b.BloodbatSummoner.class));
|
cards.add(new SetCardInfo("Bloodbat Summoner", 404, Rarity.RARE, mage.cards.b.BloodbatSummoner.class));
|
||||||
cards.add(new SetCardInfo("Bloodcrazed Socialite", 363, Rarity.COMMON, mage.cards.b.BloodcrazedSocialite.class));
|
cards.add(new SetCardInfo("Bloodcrazed Socialite", 363, Rarity.COMMON, mage.cards.b.BloodcrazedSocialite.class));
|
||||||
cards.add(new SetCardInfo("Bloodline Culling", 89, Rarity.RARE, mage.cards.b.BloodlineCulling.class));
|
cards.add(new SetCardInfo("Bloodline Culling", 89, Rarity.RARE, mage.cards.b.BloodlineCulling.class));
|
||||||
cards.add(new SetCardInfo("Bloodsoaked Reveler", 395, Rarity.UNCOMMON, mage.cards.b.BloodsoakedReveler.class));
|
|
||||||
cards.add(new SetCardInfo("Bloodsworn Squire", 364, Rarity.UNCOMMON, mage.cards.b.BloodswornSquire.class));
|
cards.add(new SetCardInfo("Bloodsworn Squire", 364, Rarity.UNCOMMON, mage.cards.b.BloodswornSquire.class));
|
||||||
cards.add(new SetCardInfo("Bloodthirsty Adversary", 129, Rarity.MYTHIC, mage.cards.b.BloodthirstyAdversary.class));
|
cards.add(new SetCardInfo("Bloodthirsty Adversary", 129, Rarity.MYTHIC, mage.cards.b.BloodthirstyAdversary.class));
|
||||||
cards.add(new SetCardInfo("Bloodtithe Collector", 90, Rarity.UNCOMMON, mage.cards.b.BloodtitheCollector.class));
|
cards.add(new SetCardInfo("Bloodtithe Collector", 90, Rarity.UNCOMMON, mage.cards.b.BloodtitheCollector.class));
|
||||||
|
|
@ -312,7 +311,6 @@ public final class InnistradDoubleFeature extends ExpansionSet {
|
||||||
cards.add(new SetCardInfo("Kessig Naturalist", 231, Rarity.UNCOMMON, mage.cards.k.KessigNaturalist.class));
|
cards.add(new SetCardInfo("Kessig Naturalist", 231, Rarity.UNCOMMON, mage.cards.k.KessigNaturalist.class));
|
||||||
cards.add(new SetCardInfo("Kessig Wolfrider", 432, Rarity.RARE, mage.cards.k.KessigWolfrider.class));
|
cards.add(new SetCardInfo("Kessig Wolfrider", 432, Rarity.RARE, mage.cards.k.KessigWolfrider.class));
|
||||||
cards.add(new SetCardInfo("Kindly Ancestor", 289, Rarity.COMMON, mage.cards.k.KindlyAncestor.class));
|
cards.add(new SetCardInfo("Kindly Ancestor", 289, Rarity.COMMON, mage.cards.k.KindlyAncestor.class));
|
||||||
cards.add(new SetCardInfo("Krothuss, Lord of the Deep", 513, Rarity.RARE, mage.cards.k.KrothussLordOfTheDeep.class));
|
|
||||||
cards.add(new SetCardInfo("Lacerate Flesh", 433, Rarity.COMMON, mage.cards.l.LacerateFlesh.class));
|
cards.add(new SetCardInfo("Lacerate Flesh", 433, Rarity.COMMON, mage.cards.l.LacerateFlesh.class));
|
||||||
cards.add(new SetCardInfo("Laid to Rest", 474, Rarity.UNCOMMON, mage.cards.l.LaidToRest.class));
|
cards.add(new SetCardInfo("Laid to Rest", 474, Rarity.UNCOMMON, mage.cards.l.LaidToRest.class));
|
||||||
cards.add(new SetCardInfo("Lambholt Harrier", 145, Rarity.COMMON, mage.cards.l.LambholtHarrier.class));
|
cards.add(new SetCardInfo("Lambholt Harrier", 145, Rarity.COMMON, mage.cards.l.LambholtHarrier.class));
|
||||||
|
|
@ -368,7 +366,6 @@ public final class InnistradDoubleFeature extends ExpansionSet {
|
||||||
cards.add(new SetCardInfo("Nurturing Presence", 293, Rarity.COMMON, mage.cards.n.NurturingPresence.class));
|
cards.add(new SetCardInfo("Nurturing Presence", 293, Rarity.COMMON, mage.cards.n.NurturingPresence.class));
|
||||||
cards.add(new SetCardInfo("Oakshade Stalker", 479, Rarity.UNCOMMON, mage.cards.o.OakshadeStalker.class));
|
cards.add(new SetCardInfo("Oakshade Stalker", 479, Rarity.UNCOMMON, mage.cards.o.OakshadeStalker.class));
|
||||||
cards.add(new SetCardInfo("Obsessive Astronomer", 152, Rarity.UNCOMMON, mage.cards.o.ObsessiveAstronomer.class));
|
cards.add(new SetCardInfo("Obsessive Astronomer", 152, Rarity.UNCOMMON, mage.cards.o.ObsessiveAstronomer.class));
|
||||||
cards.add(new SetCardInfo("Odious Witch", 394, Rarity.COMMON, mage.cards.o.OdiousWitch.class));
|
|
||||||
cards.add(new SetCardInfo("Odric's Outrider", 29, Rarity.UNCOMMON, mage.cards.o.OdricsOutrider.class));
|
cards.add(new SetCardInfo("Odric's Outrider", 29, Rarity.UNCOMMON, mage.cards.o.OdricsOutrider.class));
|
||||||
cards.add(new SetCardInfo("Odric, Blood-Cursed", 510, Rarity.RARE, mage.cards.o.OdricBloodCursed.class));
|
cards.add(new SetCardInfo("Odric, Blood-Cursed", 510, Rarity.RARE, mage.cards.o.OdricBloodCursed.class));
|
||||||
cards.add(new SetCardInfo("Old Rutstein", 511, Rarity.RARE, mage.cards.o.OldRutstein.class));
|
cards.add(new SetCardInfo("Old Rutstein", 511, Rarity.RARE, mage.cards.o.OldRutstein.class));
|
||||||
|
|
@ -406,7 +403,6 @@ public final class InnistradDoubleFeature extends ExpansionSet {
|
||||||
cards.add(new SetCardInfo("Purifying Dragon", 155, Rarity.UNCOMMON, mage.cards.p.PurifyingDragon.class));
|
cards.add(new SetCardInfo("Purifying Dragon", 155, Rarity.UNCOMMON, mage.cards.p.PurifyingDragon.class));
|
||||||
cards.add(new SetCardInfo("Pyre Spawn", 440, Rarity.COMMON, mage.cards.p.PyreSpawn.class));
|
cards.add(new SetCardInfo("Pyre Spawn", 440, Rarity.COMMON, mage.cards.p.PyreSpawn.class));
|
||||||
cards.add(new SetCardInfo("Radiant Grace", 298, Rarity.UNCOMMON, mage.cards.r.RadiantGrace.class));
|
cards.add(new SetCardInfo("Radiant Grace", 298, Rarity.UNCOMMON, mage.cards.r.RadiantGrace.class));
|
||||||
cards.add(new SetCardInfo("Radiant Restraints", 298, Rarity.UNCOMMON, mage.cards.r.RadiantRestraints.class));
|
|
||||||
cards.add(new SetCardInfo("Ragged Recluse", 394, Rarity.COMMON, mage.cards.r.RaggedRecluse.class));
|
cards.add(new SetCardInfo("Ragged Recluse", 394, Rarity.COMMON, mage.cards.r.RaggedRecluse.class));
|
||||||
cards.add(new SetCardInfo("Raze the Effigy", 156, Rarity.COMMON, mage.cards.r.RazeTheEffigy.class));
|
cards.add(new SetCardInfo("Raze the Effigy", 156, Rarity.COMMON, mage.cards.r.RazeTheEffigy.class));
|
||||||
cards.add(new SetCardInfo("Reckless Impulse", 441, Rarity.COMMON, mage.cards.r.RecklessImpulse.class));
|
cards.add(new SetCardInfo("Reckless Impulse", 441, Rarity.COMMON, mage.cards.r.RecklessImpulse.class));
|
||||||
|
|
@ -489,7 +485,6 @@ public final class InnistradDoubleFeature extends ExpansionSet {
|
||||||
cards.add(new SetCardInfo("Stolen Vitality", 161, Rarity.COMMON, mage.cards.s.StolenVitality.class));
|
cards.add(new SetCardInfo("Stolen Vitality", 161, Rarity.COMMON, mage.cards.s.StolenVitality.class));
|
||||||
cards.add(new SetCardInfo("Storm Skreelix", 243, Rarity.UNCOMMON, mage.cards.s.StormSkreelix.class));
|
cards.add(new SetCardInfo("Storm Skreelix", 243, Rarity.UNCOMMON, mage.cards.s.StormSkreelix.class));
|
||||||
cards.add(new SetCardInfo("Storm the Festival", 200, Rarity.RARE, mage.cards.s.StormTheFestival.class));
|
cards.add(new SetCardInfo("Storm the Festival", 200, Rarity.RARE, mage.cards.s.StormTheFestival.class));
|
||||||
cards.add(new SetCardInfo("Storm-Charged Slasher", 157, Rarity.RARE, mage.cards.s.StormChargedSlasher.class));
|
|
||||||
cards.add(new SetCardInfo("Stormcarved Coast", 532, Rarity.RARE, mage.cards.s.StormcarvedCoast.class));
|
cards.add(new SetCardInfo("Stormcarved Coast", 532, Rarity.RARE, mage.cards.s.StormcarvedCoast.class));
|
||||||
cards.add(new SetCardInfo("Stormchaser Drake", 349, Rarity.UNCOMMON, mage.cards.s.StormchaserDrake.class));
|
cards.add(new SetCardInfo("Stormchaser Drake", 349, Rarity.UNCOMMON, mage.cards.s.StormchaserDrake.class));
|
||||||
cards.add(new SetCardInfo("Stormrider Spirit", 79, Rarity.COMMON, mage.cards.s.StormriderSpirit.class));
|
cards.add(new SetCardInfo("Stormrider Spirit", 79, Rarity.COMMON, mage.cards.s.StormriderSpirit.class));
|
||||||
|
|
|
||||||
|
|
@ -377,8 +377,6 @@ public final class InnistradMidnightHunt extends ExpansionSet {
|
||||||
cards.add(new SetCardInfo("Storm Skreelix", 243, Rarity.UNCOMMON, mage.cards.s.StormSkreelix.class));
|
cards.add(new SetCardInfo("Storm Skreelix", 243, Rarity.UNCOMMON, mage.cards.s.StormSkreelix.class));
|
||||||
cards.add(new SetCardInfo("Storm the Festival", 200, Rarity.RARE, mage.cards.s.StormTheFestival.class, NON_FULL_USE_VARIOUS));
|
cards.add(new SetCardInfo("Storm the Festival", 200, Rarity.RARE, mage.cards.s.StormTheFestival.class, NON_FULL_USE_VARIOUS));
|
||||||
cards.add(new SetCardInfo("Storm the Festival", 364, Rarity.RARE, mage.cards.s.StormTheFestival.class, NON_FULL_USE_VARIOUS));
|
cards.add(new SetCardInfo("Storm the Festival", 364, Rarity.RARE, mage.cards.s.StormTheFestival.class, NON_FULL_USE_VARIOUS));
|
||||||
cards.add(new SetCardInfo("Storm-Charged Slasher", 157, Rarity.RARE, mage.cards.s.StormChargedSlasher.class, NON_FULL_USE_VARIOUS));
|
|
||||||
cards.add(new SetCardInfo("Storm-Charged Slasher", 294, Rarity.RARE, mage.cards.s.StormChargedSlasher.class, NON_FULL_USE_VARIOUS));
|
|
||||||
cards.add(new SetCardInfo("Stormrider Spirit", 79, Rarity.COMMON, mage.cards.s.StormriderSpirit.class));
|
cards.add(new SetCardInfo("Stormrider Spirit", 79, Rarity.COMMON, mage.cards.s.StormriderSpirit.class));
|
||||||
cards.add(new SetCardInfo("Strangling Grasp", 126, Rarity.UNCOMMON, mage.cards.s.StranglingGrasp.class));
|
cards.add(new SetCardInfo("Strangling Grasp", 126, Rarity.UNCOMMON, mage.cards.s.StranglingGrasp.class));
|
||||||
cards.add(new SetCardInfo("Stromkirk Bloodthief", 123, Rarity.UNCOMMON, mage.cards.s.StromkirkBloodthief.class));
|
cards.add(new SetCardInfo("Stromkirk Bloodthief", 123, Rarity.UNCOMMON, mage.cards.s.StromkirkBloodthief.class));
|
||||||
|
|
|
||||||
|
|
@ -81,8 +81,6 @@ public class InnistradRemastered extends ExpansionSet {
|
||||||
cards.add(new SetCardInfo("Bloodline Keeper", 461, Rarity.MYTHIC, mage.cards.b.BloodlineKeeper.class, RETRO_ART_USE_VARIOUS));
|
cards.add(new SetCardInfo("Bloodline Keeper", 461, Rarity.MYTHIC, mage.cards.b.BloodlineKeeper.class, RETRO_ART_USE_VARIOUS));
|
||||||
cards.add(new SetCardInfo("Bloodline Keeper", 98, Rarity.MYTHIC, mage.cards.b.BloodlineKeeper.class, NON_FULL_USE_VARIOUS));
|
cards.add(new SetCardInfo("Bloodline Keeper", 98, Rarity.MYTHIC, mage.cards.b.BloodlineKeeper.class, NON_FULL_USE_VARIOUS));
|
||||||
cards.add(new SetCardInfo("Bloodmad Vampire", 145, Rarity.COMMON, mage.cards.b.BloodmadVampire.class));
|
cards.add(new SetCardInfo("Bloodmad Vampire", 145, Rarity.COMMON, mage.cards.b.BloodmadVampire.class));
|
||||||
cards.add(new SetCardInfo("Bloodsoaked Reveler", 128, Rarity.UNCOMMON, mage.cards.b.BloodsoakedReveler.class, NON_FULL_USE_VARIOUS));
|
|
||||||
cards.add(new SetCardInfo("Bloodsoaked Reveler", 463, Rarity.UNCOMMON, mage.cards.b.BloodsoakedReveler.class, RETRO_ART_USE_VARIOUS));
|
|
||||||
cards.add(new SetCardInfo("Bloodtithe Harvester", 233, Rarity.UNCOMMON, mage.cards.b.BloodtitheHarvester.class, NON_FULL_USE_VARIOUS));
|
cards.add(new SetCardInfo("Bloodtithe Harvester", 233, Rarity.UNCOMMON, mage.cards.b.BloodtitheHarvester.class, NON_FULL_USE_VARIOUS));
|
||||||
cards.add(new SetCardInfo("Bloodtithe Harvester", 427, Rarity.UNCOMMON, mage.cards.b.BloodtitheHarvester.class, RETRO_ART_USE_VARIOUS));
|
cards.add(new SetCardInfo("Bloodtithe Harvester", 427, Rarity.UNCOMMON, mage.cards.b.BloodtitheHarvester.class, RETRO_ART_USE_VARIOUS));
|
||||||
cards.add(new SetCardInfo("Boarded Window", 255, Rarity.UNCOMMON, mage.cards.b.BoardedWindow.class, NON_FULL_USE_VARIOUS));
|
cards.add(new SetCardInfo("Boarded Window", 255, Rarity.UNCOMMON, mage.cards.b.BoardedWindow.class, NON_FULL_USE_VARIOUS));
|
||||||
|
|
|
||||||
|
|
@ -135,7 +135,6 @@ public class MagicOnlinePromos extends ExpansionSet {
|
||||||
cards.add(new SetCardInfo("Arcbound Ravager", 72888, Rarity.RARE, mage.cards.a.ArcboundRavager.class));
|
cards.add(new SetCardInfo("Arcbound Ravager", 72888, Rarity.RARE, mage.cards.a.ArcboundRavager.class));
|
||||||
cards.add(new SetCardInfo("Archaeomancer's Map", 90008, Rarity.RARE, mage.cards.a.ArchaeomancersMap.class));
|
cards.add(new SetCardInfo("Archaeomancer's Map", 90008, Rarity.RARE, mage.cards.a.ArchaeomancersMap.class));
|
||||||
cards.add(new SetCardInfo("Archangel of Wrath", 103392, Rarity.RARE, mage.cards.a.ArchangelOfWrath.class));
|
cards.add(new SetCardInfo("Archangel of Wrath", 103392, Rarity.RARE, mage.cards.a.ArchangelOfWrath.class));
|
||||||
cards.add(new SetCardInfo("Archdemon of Greed", 43503, Rarity.RARE, mage.cards.a.ArchdemonOfGreed.class));
|
|
||||||
cards.add(new SetCardInfo("Archelos, Lagoon Mystic", 86334, Rarity.RARE, mage.cards.a.ArchelosLagoonMystic.class));
|
cards.add(new SetCardInfo("Archelos, Lagoon Mystic", 86334, Rarity.RARE, mage.cards.a.ArchelosLagoonMystic.class));
|
||||||
cards.add(new SetCardInfo("Archfiend of Depravity", 55711, Rarity.RARE, mage.cards.a.ArchfiendOfDepravity.class));
|
cards.add(new SetCardInfo("Archfiend of Depravity", 55711, Rarity.RARE, mage.cards.a.ArchfiendOfDepravity.class));
|
||||||
cards.add(new SetCardInfo("Archfiend of Ifnir", 64422, Rarity.RARE, mage.cards.a.ArchfiendOfIfnir.class));
|
cards.add(new SetCardInfo("Archfiend of Ifnir", 64422, Rarity.RARE, mage.cards.a.ArchfiendOfIfnir.class));
|
||||||
|
|
|
||||||
|
|
@ -326,8 +326,6 @@ public final class MarchOfTheMachine extends ExpansionSet {
|
||||||
cards.add(new SetCardInfo("Render Inert", 123, Rarity.UNCOMMON, mage.cards.r.RenderInert.class));
|
cards.add(new SetCardInfo("Render Inert", 123, Rarity.UNCOMMON, mage.cards.r.RenderInert.class));
|
||||||
cards.add(new SetCardInfo("Rona, Herald of Invasion", 295, Rarity.RARE, mage.cards.r.RonaHeraldOfInvasion.class, NON_FULL_USE_VARIOUS));
|
cards.add(new SetCardInfo("Rona, Herald of Invasion", 295, Rarity.RARE, mage.cards.r.RonaHeraldOfInvasion.class, NON_FULL_USE_VARIOUS));
|
||||||
cards.add(new SetCardInfo("Rona, Herald of Invasion", 75, Rarity.RARE, mage.cards.r.RonaHeraldOfInvasion.class, NON_FULL_USE_VARIOUS));
|
cards.add(new SetCardInfo("Rona, Herald of Invasion", 75, Rarity.RARE, mage.cards.r.RonaHeraldOfInvasion.class, NON_FULL_USE_VARIOUS));
|
||||||
cards.add(new SetCardInfo("Rona, Tolarian Obliterator", 295, Rarity.RARE, mage.cards.r.RonaTolarianObliterator.class, NON_FULL_USE_VARIOUS));
|
|
||||||
cards.add(new SetCardInfo("Rona, Tolarian Obliterator", 75, Rarity.RARE, mage.cards.r.RonaTolarianObliterator.class, NON_FULL_USE_VARIOUS));
|
|
||||||
cards.add(new SetCardInfo("Rugged Highlands", 271, Rarity.COMMON, mage.cards.r.RuggedHighlands.class));
|
cards.add(new SetCardInfo("Rugged Highlands", 271, Rarity.COMMON, mage.cards.r.RuggedHighlands.class));
|
||||||
cards.add(new SetCardInfo("Ruins Recluse", 336, Rarity.UNCOMMON, mage.cards.r.RuinsRecluse.class));
|
cards.add(new SetCardInfo("Ruins Recluse", 336, Rarity.UNCOMMON, mage.cards.r.RuinsRecluse.class));
|
||||||
cards.add(new SetCardInfo("Saiba Cryptomancer", 76, Rarity.COMMON, mage.cards.s.SaibaCryptomancer.class));
|
cards.add(new SetCardInfo("Saiba Cryptomancer", 76, Rarity.COMMON, mage.cards.s.SaibaCryptomancer.class));
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,6 @@ public final class Transformers extends ExpansionSet {
|
||||||
cards.add(new SetCardInfo("Optimus Prime, Hero", 13, Rarity.MYTHIC, mage.cards.o.OptimusPrimeHero.class, NON_FULL_USE_VARIOUS));
|
cards.add(new SetCardInfo("Optimus Prime, Hero", 13, Rarity.MYTHIC, mage.cards.o.OptimusPrimeHero.class, NON_FULL_USE_VARIOUS));
|
||||||
cards.add(new SetCardInfo("Optimus Prime, Hero", 27, Rarity.MYTHIC, mage.cards.o.OptimusPrimeHero.class, NON_FULL_USE_VARIOUS));
|
cards.add(new SetCardInfo("Optimus Prime, Hero", 27, Rarity.MYTHIC, mage.cards.o.OptimusPrimeHero.class, NON_FULL_USE_VARIOUS));
|
||||||
cards.add(new SetCardInfo("Ratchet, Field Medic", 2, Rarity.MYTHIC, mage.cards.r.RatchetFieldMedic.class));
|
cards.add(new SetCardInfo("Ratchet, Field Medic", 2, Rarity.MYTHIC, mage.cards.r.RatchetFieldMedic.class));
|
||||||
cards.add(new SetCardInfo("Ratchet, Rescue Racer", 2, Rarity.MYTHIC, mage.cards.r.RatchetRescueRacer.class));
|
|
||||||
cards.add(new SetCardInfo("Slicer, High-Speed Antagonist", 6, Rarity.MYTHIC, mage.cards.s.SlicerHighSpeedAntagonist.class));
|
cards.add(new SetCardInfo("Slicer, High-Speed Antagonist", 6, Rarity.MYTHIC, mage.cards.s.SlicerHighSpeedAntagonist.class));
|
||||||
cards.add(new SetCardInfo("Slicer, Hired Muscle", 6, Rarity.MYTHIC, mage.cards.s.SlicerHiredMuscle.class));
|
cards.add(new SetCardInfo("Slicer, Hired Muscle", 6, Rarity.MYTHIC, mage.cards.s.SlicerHiredMuscle.class));
|
||||||
cards.add(new SetCardInfo("Starscream, Power Hungry", 5, Rarity.MYTHIC, mage.cards.s.StarscreamPowerHungry.class));
|
cards.add(new SetCardInfo("Starscream, Power Hungry", 5, Rarity.MYTHIC, mage.cards.s.StarscreamPowerHungry.class));
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue