convert transforming "M" cards to single class file

part of #14099
This commit is contained in:
jmlundeen 2025-12-02 11:27:08 -06:00
parent 78ca8e6be7
commit 3484e58944
37 changed files with 536 additions and 992 deletions

View file

@ -1,52 +0,0 @@
package mage.cards.b;
import mage.MageInt;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.CantBeCounteredControlledEffect;
import mage.abilities.keyword.DisturbAbility;
import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.SubType;
import mage.filter.StaticFilters;
import java.util.UUID;
/**
* @author TheElk801
*/
public final class BenevolentGeist extends CardImpl {
public BenevolentGeist(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "");
this.subtype.add(SubType.SPIRIT);
this.subtype.add(SubType.WIZARD);
this.power = new MageInt(2);
this.toughness = new MageInt(2);
this.color.setBlue(true);
this.nightCard = true;
// Flying
this.addAbility(FlyingAbility.getInstance());
// Noncreature spells you control can't be countered.
this.addAbility(new SimpleStaticAbility(new CantBeCounteredControlledEffect(
StaticFilters.FILTER_SPELLS_NON_CREATURE, Duration.WhileOnBattlefield
)));
// If Benevolent Geist would be put into a graveyard from anywhere, exile it instead.
this.addAbility(DisturbAbility.makeBackAbility());
}
private BenevolentGeist(final BenevolentGeist card) {
super(card);
}
@Override
public BenevolentGeist copy() {
return new BenevolentGeist(this);
}
}

View file

@ -1,58 +0,0 @@
package mage.cards.c;
import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.AttachEffect;
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect;
import mage.abilities.keyword.DisturbAbility;
import mage.abilities.keyword.EnchantAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.AttachmentType;
import mage.constants.CardType;
import mage.constants.Outcome;
import mage.constants.SubType;
import mage.target.TargetPermanent;
import mage.target.common.TargetCreaturePermanent;
import java.util.UUID;
/**
* @author TheElk801
*/
public final class CatlikeCuriosity extends CardImpl {
public CatlikeCuriosity(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "");
this.subtype.add(SubType.AURA);
this.color.setBlue(true);
this.nightCard = true;
// Enchant creature
TargetPermanent auraTarget = new TargetCreaturePermanent();
this.getSpellAbility().addTarget(auraTarget);
this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature));
this.addAbility(new EnchantAbility(auraTarget));
// Enchanted creature has "Whenever this creature deals combat damage to a player, draw a card."
this.addAbility(new SimpleStaticAbility(new GainAbilityAttachedEffect(
new DealsCombatDamageToAPlayerTriggeredAbility(
new DrawCardSourceControllerEffect(1), false
).setTriggerPhrase("Whenever this creature deals combat damage to a player, "), AttachmentType.AURA
)));
// If Catlike Curiosity would be put into a graveyard from anywhere, exile it instead.
this.addAbility(DisturbAbility.makeBackAbility());
}
private CatlikeCuriosity(final CatlikeCuriosity card) {
super(card);
}
@Override
public CatlikeCuriosity copy() {
return new CatlikeCuriosity(this);
}
}

View file

@ -1,43 +0,0 @@
package mage.cards.c;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.effects.common.TapTargetEffect;
import mage.abilities.effects.common.TransformSourceEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.target.common.TargetNonlandPermanent;
import java.util.UUID;
/**
* @author TheElk801
*/
public final class ChillingChronicle extends CardImpl {
public ChillingChronicle(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "");
this.color.setBlue(true);
this.nightCard = true;
// {1}, {T}: Tap target nonland permanent. Transform Chilling Chronicle.
Ability ability = new SimpleActivatedAbility(new TapTargetEffect(), new GenericManaCost(1));
ability.addCost(new TapSourceCost());
ability.addEffect(new TransformSourceEffect());
ability.addTarget(new TargetNonlandPermanent());
this.addAbility(ability);
}
private ChillingChronicle(final ChillingChronicle card) {
super(card);
}
@Override
public ChillingChronicle copy() {
return new ChillingChronicle(this);
}
}

View file

@ -1,89 +0,0 @@
package mage.cards.g;
import mage.abilities.Ability;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.AttachEffect;
import mage.abilities.effects.common.CreateTokenCopyTargetEffect;
import mage.abilities.keyword.DisturbAbility;
import mage.abilities.keyword.EnchantAbility;
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Outcome;
import mage.constants.SubType;
import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.target.TargetPermanent;
import mage.target.common.TargetCreaturePermanent;
import mage.target.targetpointer.FixedTarget;
import java.util.UUID;
/**
* @author TheElk801
*/
public final class GhastlyMimicry extends CardImpl {
public GhastlyMimicry(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "");
this.subtype.add(SubType.AURA);
this.color.setBlue(true);
this.nightCard = true;
// Enchant creature
TargetPermanent auraTarget = new TargetCreaturePermanent();
this.getSpellAbility().addTarget(auraTarget);
this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature));
this.addAbility(new EnchantAbility(auraTarget));
// At the beginning of your upkeep, create a token that's a copy of enchanted creature, except it's a Spirit in addition to its other types.
this.addAbility(new BeginningOfUpkeepTriggeredAbility(new GhastlyMimicryEffect()));
// If Ghastly Mimicry would be put into a graveyard from anywhere, exile it instead.
this.addAbility(DisturbAbility.makeBackAbility());
}
private GhastlyMimicry(final GhastlyMimicry card) {
super(card);
}
@Override
public GhastlyMimicry copy() {
return new GhastlyMimicry(this);
}
}
class GhastlyMimicryEffect extends OneShotEffect {
GhastlyMimicryEffect() {
super(Outcome.Benefit);
staticText = "create a token that's a copy of enchanted creature, " +
"except it's a Spirit in addition to its other types";
}
private GhastlyMimicryEffect(final GhastlyMimicryEffect effect) {
super(effect);
}
@Override
public GhastlyMimicryEffect copy() {
return new GhastlyMimicryEffect(this);
}
@Override
public boolean apply(Game game, Ability source) {
Permanent permanent = source.getSourcePermanentOrLKI(game);
if (permanent == null) {
return false;
}
Permanent attached = game.getPermanent(permanent.getAttachedTo());
if (attached == null) {
return false;
}
CreateTokenCopyTargetEffect effect = new CreateTokenCopyTargetEffect();
effect.withAdditionalSubType(SubType.SPIRIT);
return effect.setTargetPointer(new FixedTarget(attached, game)).apply(game, source);
}
}

View file

@ -1,66 +0,0 @@
package mage.cards.h;
import mage.MageInt;
import mage.abilities.triggers.BeginningOfEndStepTriggeredAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.common.WerewolfBackTriggeredAbility;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.continuous.BoostControlledEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.SubType;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.Predicates;
import mage.game.permanent.token.WolfToken;
import java.util.UUID;
/**
* @author North, noxx
*/
public final class HowlpackAlpha extends CardImpl {
private static final FilterCreaturePermanent filter
= new FilterCreaturePermanent("each other creature you control that's a Werewolf or a Wolf");
static {
filter.add(Predicates.or(
SubType.WEREWOLF.getPredicate(),
SubType.WOLF.getPredicate()
));
}
public HowlpackAlpha(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "");
this.subtype.add(SubType.WEREWOLF);
// this card is the second face of double-faced card
this.nightCard = true;
this.color.setGreen(true);
this.power = new MageInt(3);
this.toughness = new MageInt(3);
// Other Werewolf and Wolf creatures you control get +1/+1.
this.addAbility(new SimpleStaticAbility(new BoostControlledEffect(
1, 1, Duration.WhileOnBattlefield, filter, true
)));
// At the beginning of your end step, create a 2/2 green Wolf creature token.
this.addAbility(new BeginningOfEndStepTriggeredAbility(new CreateTokenEffect(new WolfToken())));
// At the beginning of each upkeep, if a player cast two or more spells last turn, transform Howlpack Alpha.
this.addAbility(new WerewolfBackTriggeredAbility());
}
private HowlpackAlpha(final HowlpackAlpha card) {
super(card);
}
@Override
public HowlpackAlpha copy() {
return new HowlpackAlpha(this);
}
}

View file

@ -1,16 +1,19 @@
package mage.cards.m;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.costs.common.SacrificeSourceCost;
import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.CantBeCounteredControlledEffect;
import mage.abilities.effects.common.CounterUnlessPaysEffect;
import mage.abilities.keyword.DisturbAbility;
import mage.cards.CardImpl;
import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardSetInfo;
import mage.cards.TransformingDoubleFacedCard;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.SubType;
import mage.filter.StaticFilters;
import mage.target.TargetSpell;
@ -20,16 +23,17 @@ import java.util.UUID;
/**
* @author TheElk801
*/
public final class MalevolentHermit extends CardImpl {
public final class MalevolentHermit extends TransformingDoubleFacedCard {
public MalevolentHermit(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}");
super(ownerId, setInfo,
new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN, SubType.WIZARD}, "{1}{U}",
"Benevolent Geist",
new CardType[]{CardType.CREATURE}, new SubType[]{SubType.SPIRIT, SubType.WIZARD}, "U"
);
this.subtype.add(SubType.HUMAN);
this.subtype.add(SubType.WIZARD);
this.power = new MageInt(2);
this.toughness = new MageInt(1);
this.secondSideCardClazz = mage.cards.b.BenevolentGeist.class;
// Malevolent Hermit
this.getLeftHalfCard().setPT(2, 1);
// {U}, Sacrifice Malevolent Hermit: Counter target noncreature spell unless its controller pays {3}.
Ability ability = new SimpleActivatedAbility(
@ -37,10 +41,24 @@ public final class MalevolentHermit extends CardImpl {
);
ability.addCost(new SacrificeSourceCost());
ability.addTarget(new TargetSpell(StaticFilters.FILTER_SPELL_NON_CREATURE));
this.addAbility(ability);
this.getLeftHalfCard().addAbility(ability);
// Disturb {2}{U}
this.addAbility(new DisturbAbility(this, "{2}{U}"));
this.getLeftHalfCard().addAbility(new DisturbAbility(this, "{2}{U}"));
// Benevolent Geist
this.getRightHalfCard().setPT(2, 2);
// Flying
this.getRightHalfCard().addAbility(FlyingAbility.getInstance());
// Noncreature spells you control can't be countered.
this.getRightHalfCard().addAbility(new SimpleStaticAbility(new CantBeCounteredControlledEffect(
StaticFilters.FILTER_SPELLS_NON_CREATURE, Duration.WhileOnBattlefield
)));
// If Benevolent Geist would be put into a graveyard from anywhere, exile it instead.
this.getRightHalfCard().addAbility(DisturbAbility.makeBackAbility());
}
private MalevolentHermit(final MalevolentHermit card) {

View file

@ -1,29 +1,56 @@
package mage.cards.m;
import mage.MageObjectReference;
import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.condition.Condition;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.hint.ConditionHint;
import mage.abilities.hint.Hint;
import mage.abilities.keyword.CraftAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.cards.TransformingDoubleFacedCard;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.WatcherScope;
import mage.game.Game;
import mage.game.events.EntersTheBattlefieldEvent;
import mage.game.events.GameEvent;
import mage.game.permanent.Permanent;
import mage.game.permanent.token.GolemWhiteBlueToken;
import mage.watchers.Watcher;
import java.util.UUID;
import java.util.*;
/**
* @author Susucr
*/
public final class MastersGuideMural extends CardImpl {
public final class MastersGuideMural extends TransformingDoubleFacedCard {
public MastersGuideMural(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{3}{W}{U}");
this.secondSideCardClazz = mage.cards.m.MastersManufactory.class;
super(ownerId, setInfo,
new CardType[]{CardType.ARTIFACT}, new SubType[]{}, "{3}{W}{U}",
"Master's Manufactory",
new CardType[]{CardType.ARTIFACT}, new SubType[]{}, "WU"
);
// Master's Guide-Mural
// When Master's Guide-Mural enters the battlefield, create a 4/4 white and blue Golem artifact creature token.
this.addAbility(new EntersBattlefieldTriggeredAbility(new CreateTokenEffect(new GolemWhiteBlueToken())));
this.getLeftHalfCard().addAbility(new EntersBattlefieldTriggeredAbility(new CreateTokenEffect(new GolemWhiteBlueToken())));
// Craft with artifact {4}{W}{W}{U}
this.addAbility(new CraftAbility("{4}{W}{W}{U}"));
this.getLeftHalfCard().addAbility(new CraftAbility("{4}{W}{W}{U}"));
// Master's Manufactory
// {T}: Create a 4/4 white and blue Golem artifact creature token. Activate only if Master's Manufactory or another artifact entered the battlefield under your control this turn.
Ability ability = new ActivateIfConditionActivatedAbility(
new CreateTokenEffect(new GolemWhiteBlueToken()), new TapSourceCost(), MastersManufactoryCondition.instance
);
ability.addHint(MastersManufactoryCondition.getHint());
ability.addWatcher(new MastersManufactoryWatcher());
this.getRightHalfCard().addAbility(ability);
}
private MastersGuideMural(final MastersGuideMural card) {
@ -35,3 +62,60 @@ public final class MastersGuideMural extends CardImpl {
return new MastersGuideMural(this);
}
}
enum MastersManufactoryCondition implements Condition {
instance;
private static final Hint hint = new ConditionHint(instance);
public static Hint getHint() {
return hint;
}
@Override
public boolean apply(Game game, Ability source) {
Permanent permanent = game.getPermanent(source.getSourceId());
MastersManufactoryWatcher watcher = game.getState().getWatcher(MastersManufactoryWatcher.class);
return watcher != null && permanent != null
&& watcher.check(source.getControllerId(), new MageObjectReference(permanent, game));
}
@Override
public String toString() {
return "{this} or another artifact entered the battlefield under your control this turn";
}
}
class MastersManufactoryWatcher extends Watcher {
private final Set<UUID> playerHadArtifactEnter = new HashSet<>();
private final Map<UUID, Set<MageObjectReference>> allEnteredThisTurn = new HashMap<>();
MastersManufactoryWatcher() {
super(WatcherScope.GAME);
}
@Override
public void watch(GameEvent event, Game game) {
if (event.getType() == GameEvent.EventType.ENTERS_THE_BATTLEFIELD) {
Permanent permanent = ((EntersTheBattlefieldEvent) event).getTarget();
if (permanent.isArtifact(game)) {
playerHadArtifactEnter.add(event.getPlayerId());
}
allEnteredThisTurn
.computeIfAbsent(event.getPlayerId(), k -> new HashSet<>())
.add(new MageObjectReference(permanent, game));
}
}
@Override
public void reset() {
super.reset();
playerHadArtifactEnter.clear();
allEnteredThisTurn.clear();
}
boolean check(UUID playerId, MageObjectReference mor) {
return playerHadArtifactEnter.contains(playerId)
|| allEnteredThisTurn.getOrDefault(playerId, Collections.emptySet()).contains(mor);
}
}

View file

@ -1,112 +0,0 @@
package mage.cards.m;
import mage.MageObjectReference;
import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.condition.Condition;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.hint.ConditionHint;
import mage.abilities.hint.Hint;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.WatcherScope;
import mage.game.Game;
import mage.game.events.EntersTheBattlefieldEvent;
import mage.game.events.GameEvent;
import mage.game.permanent.Permanent;
import mage.game.permanent.token.GolemWhiteBlueToken;
import mage.watchers.Watcher;
import java.util.*;
/**
* @author Susucr
*/
public final class MastersManufactory extends CardImpl {
public MastersManufactory(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "");
this.nightCard = true;
this.color.setBlue(true);
this.color.setWhite(true);
// {T}: Create a 4/4 white and blue Golem artifact creature token. Activate only if Master's Manufactory or another artifact entered the battlefield under your control this turn.
this.addAbility(new ActivateIfConditionActivatedAbility(
new CreateTokenEffect(new GolemWhiteBlueToken()),
new TapSourceCost(), MastersManufactoryCondition.instance
).addHint(MastersManufactoryCondition.getHint()), new MastersManufactoryWatcher());
}
private MastersManufactory(final MastersManufactory card) {
super(card);
}
@Override
public MastersManufactory copy() {
return new MastersManufactory(this);
}
}
enum MastersManufactoryCondition implements Condition {
instance;
private static final Hint hint = new ConditionHint(instance);
public static Hint getHint() {
return hint;
}
@Override
public boolean apply(Game game, Ability source) {
Permanent permanent = game.getPermanent(source.getSourceId());
MastersManufactoryWatcher watcher = game.getState().getWatcher(MastersManufactoryWatcher.class);
return watcher != null && permanent != null
&& watcher.check(source.getControllerId(), new MageObjectReference(permanent, game));
}
@Override
public String toString() {
return "{this} or another artifact entered the battlefield under your control this turn";
}
}
class MastersManufactoryWatcher extends Watcher {
// player -> an artifact entered this turn
private final Set<UUID> playerHadArtifactEnter = new HashSet<>();
// We need to store a lot for edges cases:
// -> Master's Manufactory could have entered as a non-artifact
// -> Another permanent could gain Manufactory's ability (copy effect), and we need to have tracked if it entered
// player -> set of all MOR of permanents that entered this turn under that player's control
private final Map<UUID, Set<MageObjectReference>> allEnteredThisTurn = new HashMap<>();
MastersManufactoryWatcher() {
super(WatcherScope.GAME);
}
@Override
public void watch(GameEvent event, Game game) {
if (event.getType() == GameEvent.EventType.ENTERS_THE_BATTLEFIELD) {
Permanent permanent = ((EntersTheBattlefieldEvent) event).getTarget();
if (permanent.isArtifact(game)) {
playerHadArtifactEnter.add(event.getPlayerId());
}
allEnteredThisTurn
.computeIfAbsent(event.getPlayerId(), k -> new HashSet<>())
.add(new MageObjectReference(permanent, game));
}
}
@Override
public void reset() {
super.reset();
playerHadArtifactEnter.clear();
allEnteredThisTurn.clear();
}
boolean check(UUID playerId, MageObjectReference mor) {
return playerHadArtifactEnter.contains(playerId)
|| allEnteredThisTurn.getOrDefault(playerId, Collections.emptySet()).contains(mor);
}
}

View file

@ -1,23 +1,25 @@
package mage.cards.m;
import mage.Mana;
import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.condition.IntCompareCondition;
import mage.abilities.condition.common.DescendCondition;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.dynamicvalue.DynamicValue;
import mage.abilities.dynamicvalue.common.CardsInControllerGraveyardCount;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.DrawDiscardControllerEffect;
import mage.abilities.effects.common.TransformSourceEffect;
import mage.abilities.hint.Hint;
import mage.abilities.hint.ValueHint;
import mage.abilities.keyword.TransformAbility;
import mage.cards.CardImpl;
import mage.abilities.mana.DynamicManaAbility;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.ComparisonType;
import mage.constants.SuperType;
import mage.cards.TransformingDoubleFacedCard;
import mage.constants.*;
import mage.filter.StaticFilters;
import mage.game.Game;
import mage.players.Player;
@ -28,29 +30,40 @@ import java.util.stream.Collectors;
/**
* @author Susucr
*/
public final class MatzalantliTheGreatDoor extends CardImpl {
public final class MatzalantliTheGreatDoor extends TransformingDoubleFacedCard {
private static final Hint hint = new ValueHint("Permanent types in graveyard", MatzalantliTheGreatDoorValue.instance);
private static final DynamicValue xValue = new CardsInControllerGraveyardCount(StaticFilters.FILTER_CARD_PERMANENT);
public MatzalantliTheGreatDoor(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{3}");
this.secondSideCardClazz = mage.cards.t.TheCore.class;
this.supertype.add(SuperType.LEGENDARY);
super(ownerId, setInfo,
new SuperType[]{SuperType.LEGENDARY}, new CardType[]{CardType.ARTIFACT}, new SubType[]{}, "{3}",
"The Core",
new SuperType[]{SuperType.LEGENDARY}, new CardType[]{CardType.LAND}, new SubType[]{}, ""
);
// Matzalantli, the Great Door
// {T}: Draw a card, then discard a card.
this.addAbility(new SimpleActivatedAbility(new DrawDiscardControllerEffect(), new TapSourceCost()));
this.getLeftHalfCard().addAbility(new SimpleActivatedAbility(new DrawDiscardControllerEffect(), new TapSourceCost()));
// {4}, {T}: Transform Matzalantli, the Great Door. Activate only if there are four or more permanent types among cards in your graveyard.
this.addAbility(new TransformAbility());
Ability ability = new ActivateIfConditionActivatedAbility(
new TransformSourceEffect(),
new GenericManaCost(4),
new MatzalantliTheGreatDoorCondition()
new TransformSourceEffect(), new GenericManaCost(4), new MatzalantliTheGreatDoorCondition()
);
ability.addCost(new TapSourceCost());
ability.addHint(hint);
this.addAbility(ability);
this.getLeftHalfCard().addAbility(ability);
// The Core
// Fathomless descent -- {T}: Add X mana of any one color, where X is the number of permanent cards in your graveyard.
this.getRightHalfCard().addSuperType(SuperType.LEGENDARY);
Ability manaAbility = new DynamicManaAbility(
Mana.AnyMana(1), xValue, new TapSourceCost(),
"Add X mana of any one color, where X is the number of permanent cards in your graveyard.", true
);
manaAbility.setAbilityWord(AbilityWord.FATHOMLESS_DESCENT);
manaAbility.addHint(DescendCondition.getHint());
this.getRightHalfCard().addAbility(manaAbility);
}
private MatzalantliTheGreatDoor(final MatzalantliTheGreatDoor card) {
@ -83,9 +96,6 @@ class MatzalantliTheGreatDoorCondition extends IntCompareCondition {
enum MatzalantliTheGreatDoorValue implements DynamicValue {
instance;
MatzalantliTheGreatDoorValue() {
}
@Override
public int calculate(Game game, Ability sourceAbility, Effect effect) {
Player controller = game.getPlayer(sourceAbility.getControllerId());

View file

@ -1,49 +1,66 @@
package mage.cards.m;
import mage.MageInt;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.common.WerewolfBackTriggeredAbility;
import mage.abilities.common.WerewolfFrontTriggeredAbility;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.continuous.BoostControlledEffect;
import mage.abilities.keyword.TransformAbility;
import mage.cards.CardImpl;
import mage.abilities.triggers.BeginningOfEndStepTriggeredAbility;
import mage.cards.CardSetInfo;
import mage.cards.TransformingDoubleFacedCard;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.SubType;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.Predicates;
import mage.game.permanent.token.WolfToken;
import java.util.UUID;
/**
* @author North, noxx
*/
public final class MayorOfAvabruck extends CardImpl {
public final class MayorOfAvabruck extends TransformingDoubleFacedCard {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Human creatures");
private static final FilterCreaturePermanent howlpackFilter = new FilterCreaturePermanent("each other creature you control that's a Werewolf or a Wolf");
static {
filter.add(SubType.HUMAN.getPredicate());
howlpackFilter.add(Predicates.or(SubType.WEREWOLF.getPredicate(), SubType.WOLF.getPredicate()));
}
public MayorOfAvabruck(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G}");
this.subtype.add(SubType.HUMAN);
this.subtype.add(SubType.ADVISOR);
this.subtype.add(SubType.WEREWOLF);
super(ownerId, setInfo,
new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN, SubType.ADVISOR, SubType.WEREWOLF}, "{1}{G}",
"Howlpack Alpha",
new CardType[]{CardType.CREATURE}, new SubType[]{SubType.WEREWOLF}, "G"
);
this.secondSideCardClazz = mage.cards.h.HowlpackAlpha.class;
this.power = new MageInt(1);
this.toughness = new MageInt(1);
// Mayor of Avabruck
this.getLeftHalfCard().setPT(1, 1);
// Other Human creatures you control get +1/+1.
this.addAbility(new SimpleStaticAbility(new BoostControlledEffect(
this.getLeftHalfCard().addAbility(new SimpleStaticAbility(new BoostControlledEffect(
1, 1, Duration.WhileOnBattlefield, filter, true
)));
// At the beginning of each upkeep, if no spells were cast last turn, transform Mayor of Avabruck.
this.addAbility(new TransformAbility());
this.addAbility(new WerewolfFrontTriggeredAbility());
this.getLeftHalfCard().addAbility(new WerewolfFrontTriggeredAbility());
// Howlpack Alpha
this.getRightHalfCard().setPT(3, 3);
// Other Werewolf and Wolf creatures you control get +1/+1.
this.getRightHalfCard().addAbility(new SimpleStaticAbility(new BoostControlledEffect(
1, 1, Duration.WhileOnBattlefield, howlpackFilter, true
)));
// At the beginning of your end step, create a 2/2 green Wolf creature token.
this.getRightHalfCard().addAbility(new BeginningOfEndStepTriggeredAbility(new CreateTokenEffect(new WolfToken())));
// At the beginning of each upkeep, if a player cast two or more spells last turn, transform Howlpack Alpha.
this.getRightHalfCard().addAbility(new WerewolfBackTriggeredAbility());
}
private MayorOfAvabruck(final MayorOfAvabruck card) {

View file

@ -1,147 +0,0 @@
package mage.cards.m;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.AttacksTriggeredAbility;
import mage.abilities.common.delayed.ReflexiveTriggeredAbility;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.TransformSourceEffect;
import mage.abilities.hint.StaticHint;
import mage.abilities.keyword.LivingMetalAbility;
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.StaticFilters;
import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.players.Player;
import mage.target.common.TargetCreaturePermanent;
import mage.target.common.TargetSacrifice;
import java.util.UUID;
/**
* @author Susucr
*/
public final class MegatronDestructiveForce extends CardImpl {
public MegatronDestructiveForce(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(4);
this.toughness = new MageInt(5);
this.color.setRed(true);
this.color.setWhite(true);
this.color.setBlack(true);
this.nightCard = true;
// Living metal
this.addAbility(new LivingMetalAbility());
// Whenever Megatron attacks, you may sacrifice another artifact. When you do, Megatron deals damage equal to the sacrificed artifact's mana value to target creature. If excess damage would be dealt to that creature this way, instead that damage is dealt to that creature's controller and you convert Megatron.
this.addAbility(new AttacksTriggeredAbility(new MegatronDestructiveForceEffect()));
}
private MegatronDestructiveForce(final MegatronDestructiveForce card) {
super(card);
}
@Override
public MegatronDestructiveForce copy() {
return new MegatronDestructiveForce(this);
}
}
class MegatronDestructiveForceEffect extends OneShotEffect {
MegatronDestructiveForceEffect() {
super(Outcome.Benefit);
staticText = "you may sacrifice another artifact. When you do, {this} deals damage equal to the sacrificed artifact's mana value to target creature. If excess damage would be dealt to that creature this way, instead that damage is dealt to that creature's controller and you convert {this}.";
}
private MegatronDestructiveForceEffect(final MegatronDestructiveForceEffect effect) {
super(effect);
}
@Override
public MegatronDestructiveForceEffect copy() {
return new MegatronDestructiveForceEffect(this);
}
@Override
public boolean apply(Game game, Ability source) {
Player player = game.getPlayer(source.getControllerId());
if (player == null) {
return false;
}
TargetSacrifice target = new TargetSacrifice(
0, 1, StaticFilters.FILTER_CONTROLLED_ANOTHER_ARTIFACT
);
player.choose(outcome, target, source, game);
Permanent permanent = game.getPermanent(target.getFirstTarget());
if (permanent == null) {
return false;
}
int manaValue = Math.max(permanent.getManaValue(), 0);
if (!permanent.sacrifice(source, game)) {
return false;
}
ReflexiveTriggeredAbility ability = new ReflexiveTriggeredAbility(
new MegatronDestructiveForceReflexiveEffect(manaValue), false
);
ability.addHint(new StaticHint("Sacrificed artifact mana value: " + manaValue));
ability.addTarget(new TargetCreaturePermanent());
game.fireReflexiveTriggeredAbility(ability, source);
return true;
}
}
class MegatronDestructiveForceReflexiveEffect extends OneShotEffect {
private final int value;
MegatronDestructiveForceReflexiveEffect(int value) {
super(Outcome.Damage);
staticText = "{this} deals damage equal to the sacrificed artifact's mana value to target " +
"creature. If excess damage would be dealt to that creature this way, instead that damage " +
"is dealt to that creature's controller and you convert {this}.";
this.value = value;
}
private MegatronDestructiveForceReflexiveEffect(final MegatronDestructiveForceReflexiveEffect effect) {
super(effect);
this.value = effect.value;
}
@Override
public MegatronDestructiveForceReflexiveEffect copy() {
return new MegatronDestructiveForceReflexiveEffect(this);
}
@Override
public boolean apply(Game game, Ability source) {
if (value < 1) {
return false;
}
Permanent permanent = game.getPermanent(getTargetPointer().getFirst(game, source));
if (permanent == null) {
return false;
}
int excess = permanent.damageWithExcess(value, source, game);
if (excess < 1) {
return true;
}
Player player = game.getPlayer(permanent.getControllerId());
if (player != null) {
player.damage(excess, source, game);
}
new TransformSourceEffect().apply(game, source);
return true;
}
}

View file

@ -1,44 +1,54 @@
package mage.cards.m;
import mage.MageInt;
import mage.MageObject;
import mage.Mana;
import mage.abilities.Ability;
import mage.abilities.TriggeredAbility;
import mage.abilities.triggers.BeginningOfPostcombatMainTriggeredAbility;
import mage.abilities.common.AttacksTriggeredAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.common.delayed.ReflexiveTriggeredAbility;
import mage.abilities.dynamicvalue.common.OpponentsLostLifeCount;
import mage.abilities.effects.ContinuousRuleModifyingEffectImpl;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.TransformSourceEffect;
import mage.abilities.effects.mana.DynamicManaEffect;
import mage.abilities.hint.StaticHint;
import mage.abilities.keyword.LivingMetalAbility;
import mage.abilities.keyword.MoreThanMeetsTheEyeAbility;
import mage.cards.CardImpl;
import mage.abilities.triggers.BeginningOfPostcombatMainTriggeredAbility;
import mage.cards.CardSetInfo;
import mage.cards.TransformingDoubleFacedCard;
import mage.constants.*;
import mage.filter.StaticFilters;
import mage.game.Game;
import mage.game.events.GameEvent;
import mage.game.permanent.Permanent;
import mage.players.Player;
import mage.target.common.TargetCreaturePermanent;
import mage.target.common.TargetSacrifice;
import java.util.UUID;
/**
* @author Susucr
*/
public final class MegatronTyrant extends CardImpl {
public final class MegatronTyrant extends TransformingDoubleFacedCard {
public MegatronTyrant(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{3}{R}{W}{B}");
super(ownerId, setInfo,
new SuperType[]{SuperType.LEGENDARY}, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, new SubType[]{SubType.ROBOT}, "{3}{R}{W}{B}",
"Megatron, Destructive Force",
new SuperType[]{SuperType.LEGENDARY}, new CardType[]{CardType.ARTIFACT}, new SubType[]{SubType.VEHICLE}, "RWB"
);
this.supertype.add(SuperType.LEGENDARY);
this.subtype.add(SubType.ROBOT);
this.power = new MageInt(7);
this.toughness = new MageInt(5);
this.secondSideCardClazz = mage.cards.m.MegatronDestructiveForce.class;
// Megatron, Tyrant
this.getLeftHalfCard().setPT(7, 5);
// More Than Meets the Eye {1}{R}{W}{B}
this.addAbility(new MoreThanMeetsTheEyeAbility(this, "{1}{R}{W}{B}"));
this.getLeftHalfCard().addAbility(new MoreThanMeetsTheEyeAbility(this, "{1}{R}{W}{B}"));
// Your opponents can't cast spells during combat.
this.addAbility(new SimpleStaticAbility(new MegatronTyrantCantCastSpellsEffect()));
this.getLeftHalfCard().addAbility(new SimpleStaticAbility(new MegatronTyrantCantCastSpellsEffect()));
// At the beginning of your postcombat main phase, you may convert Megatron. If you do, add {C} for each 1 life your opponents have lost this turn.
TriggeredAbility trigger = new BeginningOfPostcombatMainTriggeredAbility(
@ -46,14 +56,22 @@ public final class MegatronTyrant extends CardImpl {
true
);
trigger.addEffect(
new DynamicManaEffect(
Mana.ColorlessMana(1),
OpponentsLostLifeCount.instance,
"add {C} for each 1 life your opponents have lost this turn"
).concatBy("If you do,")
new DynamicManaEffect(
Mana.ColorlessMana(1),
OpponentsLostLifeCount.instance,
"add {C} for each 1 life your opponents have lost this turn"
).concatBy("If you do,")
);
this.getLeftHalfCard().addAbility(trigger);
this.addAbility(trigger);
// Megatron, Destructive Force
this.getRightHalfCard().setPT(4, 5);
// Living Metal
this.getRightHalfCard().addAbility(new LivingMetalAbility());
// Whenever Megatron attacks, you may sacrifice another artifact. When you do, Megatron deals damage equal to the sacrificed artifact's mana value to target creature. If excess damage would be dealt to that creature this way, instead that damage is dealt to that creature's controller and you convert Megatron.
this.getRightHalfCard().addAbility(new AttacksTriggeredAbility(new MegatronDestructiveForceEffect()));
}
private MegatronTyrant(final MegatronTyrant card) {
@ -99,7 +117,98 @@ class MegatronTyrantCantCastSpellsEffect extends ContinuousRuleModifyingEffectIm
@Override
public boolean applies(GameEvent event, Ability source, Game game) {
return game.getOpponents(source.getControllerId()).contains(event.getPlayerId())
&& game.getTurnPhaseType() == TurnPhase.COMBAT;
&& game.getTurnPhaseType() == TurnPhase.COMBAT;
}
}
class MegatronDestructiveForceEffect extends OneShotEffect {
MegatronDestructiveForceEffect() {
super(Outcome.Benefit);
staticText = "you may sacrifice another artifact. When you do, {this} deals damage equal to the sacrificed artifact's mana value " +
"to target creature. If excess damage would be dealt to that creature this way, instead that damage is dealt to that creature's controller " +
"and you convert {this}.";
}
private MegatronDestructiveForceEffect(final MegatronDestructiveForceEffect effect) {
super(effect);
}
@Override
public MegatronDestructiveForceEffect copy() {
return new MegatronDestructiveForceEffect(this);
}
@Override
public boolean apply(Game game, Ability source) {
Player player = game.getPlayer(source.getControllerId());
if (player == null) {
return false;
}
TargetSacrifice target = new TargetSacrifice(
0, 1, StaticFilters.FILTER_CONTROLLED_ANOTHER_ARTIFACT
);
player.choose(outcome, target, source, game);
Permanent permanent = game.getPermanent(target.getFirstTarget());
if (permanent == null) {
return false;
}
int manaValue = Math.max(permanent.getManaValue(), 0);
if (!permanent.sacrifice(source, game)) {
return false;
}
ReflexiveTriggeredAbility ability = new ReflexiveTriggeredAbility(
new MegatronDestructiveForceReflexiveEffect(manaValue), false
);
ability.addHint(new StaticHint("Sacrificed artifact mana value: " + manaValue));
ability.addTarget(new TargetCreaturePermanent());
game.fireReflexiveTriggeredAbility(ability, source);
return true;
}
}
class MegatronDestructiveForceReflexiveEffect extends OneShotEffect {
private final int value;
MegatronDestructiveForceReflexiveEffect(int value) {
super(Outcome.Damage);
staticText = "{this} deals damage equal to the sacrificed artifact's mana value to target " +
"creature. If excess damage would be dealt to that creature this way, instead that damage " +
"is dealt to that creature's controller and you convert {this}.";
this.value = value;
}
private MegatronDestructiveForceReflexiveEffect(final MegatronDestructiveForceReflexiveEffect effect) {
super(effect);
this.value = effect.value;
}
@Override
public MegatronDestructiveForceReflexiveEffect copy() {
return new MegatronDestructiveForceReflexiveEffect(this);
}
@Override
public boolean apply(Game game, Ability source) {
if (value < 1) {
return false;
}
Permanent permanent = game.getPermanent(getTargetPointer().getFirst(game, source));
if (permanent == null) {
return false;
}
int excess = permanent.damageWithExcess(value, source, game);
if (excess < 1) {
return true;
}
Player player = game.getPlayer(permanent.getControllerId());
if (player != null) {
player.damage(excess, source, game);
}
new TransformSourceEffect().apply(game, source);
return true;
}
}

View file

@ -1,13 +1,14 @@
package mage.cards.m;
import mage.abilities.common.SagaAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.dynamicvalue.DynamicValue;
import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount;
import mage.abilities.effects.common.ExileSagaAndReturnTransformedEffect;
import mage.abilities.effects.common.continuous.BoostSourceEffect;
import mage.abilities.effects.common.continuous.BoostTargetEffect;
import mage.abilities.keyword.TransformAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.cards.TransformingDoubleFacedCard;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.SagaChapter;
@ -20,24 +21,26 @@ import java.util.UUID;
/**
* @author TheElk801
*/
public final class MichikosReignOfTruth extends CardImpl {
public final class MichikosReignOfTruth extends TransformingDoubleFacedCard {
private static final DynamicValue xValue = new PermanentsOnBattlefieldCount(
StaticFilters.FILTER_PERMANENT_CONTROLLED_ARTIFACT_OR_ENCHANTMENT
);
public MichikosReignOfTruth(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{W}");
this.subtype.add(SubType.SAGA);
this.secondSideCardClazz = mage.cards.p.PortraitOfMichiko.class;
super(ownerId, setInfo,
new CardType[]{CardType.ENCHANTMENT}, new SubType[]{SubType.SAGA}, "{1}{W}",
"Portrait of Michiko",
new CardType[]{CardType.ENCHANTMENT, CardType.CREATURE}, new SubType[]{SubType.HUMAN, SubType.NOBLE}, "W"
);
// Michiko's Reign of Truth
// (As this Saga enters and after your draw step, add a lore counter.)
SagaAbility sagaAbility = new SagaAbility(this);
SagaAbility sagaAbility = new SagaAbility(this.getLeftHalfCard());
// I, II Target creature gets +1/+1 until end of turn for each artifact and/or enchantment you control.
sagaAbility.addChapterEffect(
this, SagaChapter.CHAPTER_I, SagaChapter.CHAPTER_II,
this.getLeftHalfCard(), SagaChapter.CHAPTER_I, SagaChapter.CHAPTER_II,
new BoostTargetEffect(xValue, xValue, Duration.EndOfTurn)
.setText("target creature gets +1/+1 until end of turn " +
"for each artifact and/or enchantment you control"),
@ -45,10 +48,16 @@ public final class MichikosReignOfTruth extends CardImpl {
);
// III Exile this Saga, then return it to the battlefield transformed under your control.
this.addAbility(new TransformAbility());
sagaAbility.addChapterEffect(this, SagaChapter.CHAPTER_III, new ExileSagaAndReturnTransformedEffect());
sagaAbility.addChapterEffect(this.getLeftHalfCard(), SagaChapter.CHAPTER_III, new ExileSagaAndReturnTransformedEffect());
this.getLeftHalfCard().addAbility(sagaAbility);
this.addAbility(sagaAbility);
// Portrait of Michiko
this.getRightHalfCard().setPT(0, 0);
// Portrait of Michiko gets +1/+1 for each artifact and/or enchantment you control.
this.getRightHalfCard().addAbility(new SimpleStaticAbility(new BoostSourceEffect(xValue, xValue, Duration.WhileOnBattlefield)
.setText("{this} gets +1/+1 for each artifact and/or enchantment you control"))
);
}
private MichikosReignOfTruth(final MichikosReignOfTruth card) {

View file

@ -1,18 +1,26 @@
package mage.cards.m;
import mage.MageInt;
import mage.MageObject;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldAbility;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.AttachEffect;
import mage.abilities.effects.common.CopyPermanentEffect;
import mage.abilities.effects.common.CreateTokenCopyTargetEffect;
import mage.abilities.keyword.DisturbAbility;
import mage.cards.CardImpl;
import mage.abilities.keyword.EnchantAbility;
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
import mage.cards.CardSetInfo;
import mage.cards.TransformingDoubleFacedCard;
import mage.constants.CardType;
import mage.constants.Outcome;
import mage.constants.SubType;
import mage.filter.StaticFilters;
import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.target.TargetPermanent;
import mage.target.common.TargetCreaturePermanent;
import mage.target.targetpointer.FixedTarget;
import mage.util.functions.CopyApplier;
import java.util.UUID;
@ -20,24 +28,40 @@ import java.util.UUID;
/**
* @author TheElk801
*/
public final class MirrorhallMimic extends CardImpl {
public final class MirrorhallMimic extends TransformingDoubleFacedCard {
public MirrorhallMimic(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{U}");
super(ownerId, setInfo,
new CardType[]{CardType.CREATURE}, new SubType[]{SubType.SPIRIT}, "{3}{U}",
"Ghastly Mimicry",
new CardType[]{CardType.ENCHANTMENT}, new SubType[]{SubType.AURA}, "U"
);
this.subtype.add(SubType.SPIRIT);
this.power = new MageInt(0);
this.toughness = new MageInt(0);
this.secondSideCardClazz = mage.cards.g.GhastlyMimicry.class;
// Mirrorhall Mimic
this.getLeftHalfCard().setPT(0, 0);
// You may have Mirrorhall Mimic enter the battlefield as a copy of any creature on the battlefield, except it's a Spirit in addition to its other types.
this.addAbility(new EntersBattlefieldAbility(new CopyPermanentEffect(
this.getLeftHalfCard().addAbility(new EntersBattlefieldAbility(new CopyPermanentEffect(
StaticFilters.FILTER_PERMANENT_CREATURE, new MirrorhallMimicApplier()
), true, null, "You may have {this} enter the battlefield as a copy of "
+ "any creature on the battlefield, except it's a Spirit in addition to its other types.", null));
), true, null, "You may have {this} enter as a copy of any creature on the battlefield, except it's a Spirit in addition to its other types.", null));
// Ghastly Mimicry
// Enchant creature
TargetPermanent auraTarget = new TargetCreaturePermanent();
this.getRightHalfCard().getSpellAbility().addTarget(auraTarget);
this.getRightHalfCard().getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature));
this.getRightHalfCard().addAbility(new EnchantAbility(auraTarget));
// Disturb {3}{U}{U}
this.addAbility(new DisturbAbility(this, "{3}{U}{U}"));
// needs to be added after enchant ability is set for target
this.getLeftHalfCard().addAbility(new DisturbAbility(this, "{3}{U}{U}"));
// At the beginning of your upkeep, create a token that's a copy of enchanted creature, except it's a Spirit in addition to its other types.
this.getRightHalfCard().addAbility(new BeginningOfUpkeepTriggeredAbility(new GhastlyMimicryEffect()));
// If Ghastly Mimicry would be put into a graveyard from anywhere, exile it instead.
this.getRightHalfCard().addAbility(DisturbAbility.makeBackAbility());
}
private MirrorhallMimic(final MirrorhallMimic card) {
@ -58,3 +82,36 @@ class MirrorhallMimicApplier extends CopyApplier {
return true;
}
}
class GhastlyMimicryEffect extends OneShotEffect {
GhastlyMimicryEffect() {
super(Outcome.Benefit);
staticText = "create a token that's a copy of enchanted creature, " +
"except it's a Spirit in addition to its other types";
}
private GhastlyMimicryEffect(final GhastlyMimicryEffect effect) {
super(effect);
}
@Override
public GhastlyMimicryEffect copy() {
return new GhastlyMimicryEffect(this);
}
@Override
public boolean apply(Game game, Ability source) {
Permanent permanent = source.getSourcePermanentOrLKI(game);
if (permanent == null) {
return false;
}
Permanent attached = game.getPermanent(permanent.getAttachedTo());
if (attached == null) {
return false;
}
CreateTokenCopyTargetEffect effect = new CreateTokenCopyTargetEffect();
effect.withAdditionalSubType(SubType.SPIRIT);
return effect.setTargetPointer(new FixedTarget(attached, game)).apply(game, source);
}
}

View file

@ -1,38 +1,64 @@
package mage.cards.m;
import mage.MageInt;
import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.AttachEffect;
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect;
import mage.abilities.keyword.DisturbAbility;
import mage.cards.CardImpl;
import mage.abilities.keyword.EnchantAbility;
import mage.cards.CardSetInfo;
import mage.cards.TransformingDoubleFacedCard;
import mage.constants.AttachmentType;
import mage.constants.CardType;
import mage.constants.Outcome;
import mage.constants.SubType;
import mage.target.TargetPermanent;
import mage.target.common.TargetCreaturePermanent;
import java.util.UUID;
/**
* @author TheElk801
*/
public final class MischievousCatgeist extends CardImpl {
public final class MischievousCatgeist extends TransformingDoubleFacedCard {
public MischievousCatgeist(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}");
super(ownerId, setInfo,
new CardType[]{CardType.CREATURE}, new SubType[]{SubType.CAT, SubType.SPIRIT}, "{1}{U}",
"Catlike Curiosity",
new CardType[]{CardType.ENCHANTMENT}, new SubType[]{SubType.AURA}, "U"
);
this.subtype.add(SubType.CAT);
this.subtype.add(SubType.SPIRIT);
this.power = new MageInt(1);
this.toughness = new MageInt(1);
this.secondSideCardClazz = mage.cards.c.CatlikeCuriosity.class;
// Mischievous Catgeist
this.getLeftHalfCard().setPT(1, 1);
// Whenever Mischievous Catgeist deals combat damage to a player, draw card.
this.addAbility(new DealsCombatDamageToAPlayerTriggeredAbility(
this.getLeftHalfCard().addAbility(new DealsCombatDamageToAPlayerTriggeredAbility(
new DrawCardSourceControllerEffect(1), false
));
// Catlike Curiosity
// Enchant creature
TargetPermanent auraTarget = new TargetCreaturePermanent();
this.getRightHalfCard().getSpellAbility().addTarget(auraTarget);
this.getRightHalfCard().getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature));
this.getRightHalfCard().addAbility(new EnchantAbility(auraTarget));
// Disturb {2}{U}
this.addAbility(new DisturbAbility(this, "{2}{U}"));
// needs to be added after enchant ability is set for target
this.getLeftHalfCard().addAbility(new DisturbAbility(this, "{2}{U}"));
// Enchanted creature has "Whenever this creature deals combat damage to a player, draw a card."
this.getRightHalfCard().addAbility(new SimpleStaticAbility(new GainAbilityAttachedEffect(
new DealsCombatDamageToAPlayerTriggeredAbility(
new DrawCardSourceControllerEffect(1), false
).setTriggerPhrase("Whenever this creature deals combat damage to a player, "), AttachmentType.AURA
)));
// If Catlike Curiosity would be put into a graveyard from anywhere, exile it instead.
this.getRightHalfCard().addAbility(DisturbAbility.makeBackAbility());
}
private MischievousCatgeist(final MischievousCatgeist card) {

View file

@ -1,34 +1,48 @@
package mage.cards.m;
import mage.MageInt;
import mage.abilities.common.SpellCastOpponentTriggeredAbility;
import mage.abilities.common.WerewolfBackTriggeredAbility;
import mage.abilities.common.WerewolfFrontTriggeredAbility;
import mage.abilities.keyword.TransformAbility;
import mage.cards.CardImpl;
import mage.abilities.effects.common.DamageTargetEffect;
import mage.cards.CardSetInfo;
import mage.cards.TransformingDoubleFacedCard;
import mage.constants.CardType;
import mage.constants.SetTargetPointer;
import mage.constants.SubType;
import mage.constants.Zone;
import mage.filter.StaticFilters;
import java.util.UUID;
/**
* @author North
*/
public final class MondronenShaman extends CardImpl {
public final class MondronenShaman extends TransformingDoubleFacedCard {
public MondronenShaman(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{R}");
this.subtype.add(SubType.HUMAN);
this.subtype.add(SubType.SHAMAN);
this.subtype.add(SubType.WEREWOLF);
super(ownerId, setInfo,
new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN, SubType.SHAMAN, SubType.WEREWOLF}, "{3}{R}",
"Tovolar's Magehunter",
new CardType[]{CardType.CREATURE}, new SubType[]{SubType.WEREWOLF}, "R"
);
this.power = new MageInt(3);
this.toughness = new MageInt(2);
this.secondSideCardClazz = mage.cards.t.TovolarsMagehunter.class;
// Mondronen Shaman
this.getLeftHalfCard().setPT(3, 2);
// At the beginning of each upkeep, if no spells were cast last turn, transform Mondronen Shaman.
this.addAbility(new TransformAbility());
this.addAbility(new WerewolfFrontTriggeredAbility());
this.getLeftHalfCard().addAbility(new WerewolfFrontTriggeredAbility());
// Tovolar's Magehunter
this.getRightHalfCard().setPT(5, 5);
// Whenever an opponent casts a spell, Tovolar's Magehunter deals 2 damage to that player.
this.getRightHalfCard().addAbility(new SpellCastOpponentTriggeredAbility(
Zone.BATTLEFIELD, new DamageTargetEffect(2).withTargetDescription("that player"),
StaticFilters.FILTER_SPELL_A, false, SetTargetPointer.PLAYER
));
// At the beginning of each upkeep, if a player cast two or more spells last turn, transform Tovolar's Magehunter.
this.getRightHalfCard().addAbility(new WerewolfBackTriggeredAbility());
}
private MondronenShaman(final MondronenShaman card) {

View file

@ -1,47 +0,0 @@
package mage.cards.m;
import mage.MageInt;
import mage.abilities.keyword.DisturbAbility;
import mage.abilities.keyword.FlyingAbility;
import mage.abilities.keyword.VigilanceAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import java.util.UUID;
/**
* @author TheElk801
*/
public final class MorningApparition extends CardImpl {
public MorningApparition(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "");
this.subtype.add(SubType.SPIRIT);
this.subtype.add(SubType.SOLDIER);
this.power = new MageInt(2);
this.toughness = new MageInt(1);
this.color.setWhite(true);
this.nightCard = true;
// Flying
this.addAbility(FlyingAbility.getInstance());
// Vigilance
this.addAbility(VigilanceAbility.getInstance());
// If Morning Apparition would be put into a graveyard from anywhere, exile it instead.
this.addAbility(DisturbAbility.makeBackAbility());
}
private MorningApparition(final MorningApparition card) {
super(card);
}
@Override
public MorningApparition copy() {
return new MorningApparition(this);
}
}

View file

@ -1,11 +1,10 @@
package mage.cards.m;
import mage.MageInt;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.keyword.DisturbAbility;
import mage.abilities.keyword.FlyingAbility;
import mage.abilities.keyword.VigilanceAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.cards.TransformingDoubleFacedCard;
import mage.constants.CardType;
import mage.constants.SubType;
@ -14,22 +13,35 @@ import java.util.UUID;
/**
* @author TheElk801
*/
public final class MourningPatrol extends CardImpl {
public final class MourningPatrol extends TransformingDoubleFacedCard {
public MourningPatrol(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}");
super(ownerId, setInfo,
new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN, SubType.SOLDIER}, "{2}{W}",
"Morning Apparition",
new CardType[]{CardType.CREATURE}, new SubType[]{SubType.SPIRIT, SubType.SOLDIER}, "W"
);
this.subtype.add(SubType.HUMAN);
this.subtype.add(SubType.SOLDIER);
this.power = new MageInt(2);
this.toughness = new MageInt(3);
this.secondSideCardClazz = mage.cards.m.MorningApparition.class;
// Mourning Patrol
this.getLeftHalfCard().setPT(2, 3);
// Vigilance
this.addAbility(VigilanceAbility.getInstance());
this.getLeftHalfCard().addAbility(VigilanceAbility.getInstance());
// Disturb {3}{W}
this.addAbility(new DisturbAbility(this, "{3}{W}"));
this.getLeftHalfCard().addAbility(new DisturbAbility(this, "{3}{W}"));
// Morning Apparition
this.getRightHalfCard().setPT(2, 1);
// Flying
this.getRightHalfCard().addAbility(FlyingAbility.getInstance());
// Vigilance
this.getRightHalfCard().addAbility(VigilanceAbility.getInstance());
// If Morning Apparition would be put into a graveyard from anywhere, exile it instead.
this.getRightHalfCard().addAbility(DisturbAbility.makeBackAbility());
}
private MourningPatrol(final MourningPatrol card) {

View file

@ -5,32 +5,42 @@ import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.effects.common.TapTargetEffect;
import mage.abilities.effects.common.TransformSourceEffect;
import mage.abilities.keyword.TransformAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.cards.TransformingDoubleFacedCard;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.target.common.TargetNonlandPermanent;
import java.util.UUID;
/**
* @author TheElk801
*/
public final class MysteriousTome extends CardImpl {
public final class MysteriousTome extends TransformingDoubleFacedCard {
public MysteriousTome(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{2}{U}");
this.secondSideCardClazz = mage.cards.c.ChillingChronicle.class;
// {2}, {T}: Draw a card. Transform Mysterious Tome.
this.addAbility(new TransformAbility());
Ability ability = new SimpleActivatedAbility(
new DrawCardSourceControllerEffect(1), new GenericManaCost(2)
super(ownerId, setInfo,
new CardType[]{CardType.ARTIFACT}, new SubType[]{}, "{2}{U}",
"Chilling Chronicle",
new CardType[]{CardType.ARTIFACT}, new SubType[]{}, "U"
);
// Mysterious Tome
// {2}, {T}: Draw a card. Transform Mysterious Tome.
Ability ability = new SimpleActivatedAbility(new DrawCardSourceControllerEffect(1), new GenericManaCost(2));
ability.addCost(new TapSourceCost());
ability.addEffect(new TransformSourceEffect());
this.addAbility(ability);
this.getLeftHalfCard().addAbility(ability);
// Chilling Chronicle
// {1}, {T}: Tap target nonland permanent. Transform Chilling Chronicle.
Ability backAbility = new SimpleActivatedAbility(new TapTargetEffect(), new GenericManaCost(1));
backAbility.addCost(new TapSourceCost());
backAbility.addEffect(new TransformSourceEffect());
backAbility.addTarget(new TargetNonlandPermanent());
this.getRightHalfCard().addAbility(backAbility);
}
private MysteriousTome(final MysteriousTome card) {

View file

@ -1,44 +0,0 @@
package mage.cards.m;
import mage.MageInt;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.continuous.GainAbilityControlledEffect;
import mage.abilities.mana.AnyColorManaAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.SubType;
import mage.filter.StaticFilters;
import java.util.UUID;
/**
* @author TheElk801
*/
public final class MysticMonstrosity extends CardImpl {
public MysticMonstrosity(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "");
this.subtype.add(SubType.CONSTRUCT);
this.power = new MageInt(5);
this.toughness = new MageInt(6);
this.nightCard = true;
// Lands you control have "{T}: Add one mana of any color."
this.addAbility(new SimpleStaticAbility(new GainAbilityControlledEffect(
new AnyColorManaAbility(), Duration.WhileOnBattlefield,
StaticFilters.FILTER_LANDS, false
)));
}
private MysticMonstrosity(final MysticMonstrosity card) {
super(card);
}
@Override
public MysticMonstrosity copy() {
return new MysticMonstrosity(this);
}
}

View file

@ -2,37 +2,51 @@ package mage.cards.m;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.effects.common.TransformSourceEffect;
import mage.abilities.keyword.TransformAbility;
import mage.abilities.effects.common.continuous.GainAbilityControlledEffect;
import mage.abilities.mana.AnyColorManaAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.cards.TransformingDoubleFacedCard;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.SubType;
import mage.filter.StaticFilters;
import java.util.UUID;
/**
* @author TheElk801
*/
public final class MysticSkull extends CardImpl {
public final class MysticSkull extends TransformingDoubleFacedCard {
public MysticSkull(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{2}");
this.secondSideCardClazz = mage.cards.m.MysticMonstrosity.class;
super(ownerId, setInfo,
new CardType[]{CardType.ARTIFACT}, new SubType[]{}, "{2}",
"Mystic Monstrosity",
new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, new SubType[]{SubType.CONSTRUCT}, ""
);
// Mystic Skull
// {1}, {T}: Add one mana of any color.
Ability ability = new AnyColorManaAbility(new GenericManaCost(1));
ability.addCost(new TapSourceCost());
this.addAbility(ability);
this.getLeftHalfCard().addAbility(ability);
// {5}, {T}: Transform Mystic Skull.
this.addAbility(new TransformAbility());
ability = new SimpleActivatedAbility(new TransformSourceEffect(), new GenericManaCost(5));
ability.addCost(new TapSourceCost());
this.addAbility(ability);
this.getLeftHalfCard().addAbility(ability);
// Mystic Monstrosity
this.getRightHalfCard().setPT(5, 6);
// Lands you control have "{T}: Add one mana of any color."
this.getRightHalfCard().addAbility(new SimpleStaticAbility(new GainAbilityControlledEffect(
new AnyColorManaAbility(), Duration.WhileOnBattlefield, StaticFilters.FILTER_LANDS, false
)));
}
private MysticSkull(final MysticSkull card) {

View file

@ -1,49 +0,0 @@
package mage.cards.p;
import mage.MageInt;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.dynamicvalue.DynamicValue;
import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount;
import mage.abilities.effects.common.continuous.BoostSourceEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.SubType;
import mage.filter.StaticFilters;
import java.util.UUID;
/**
* @author TheElk801
*/
public final class PortraitOfMichiko extends CardImpl {
private static final DynamicValue xValue = new PermanentsOnBattlefieldCount(
StaticFilters.FILTER_PERMANENT_CONTROLLED_ARTIFACT_OR_ENCHANTMENT
);
public PortraitOfMichiko(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT, CardType.CREATURE}, "");
this.subtype.add(SubType.HUMAN);
this.subtype.add(SubType.NOBLE);
this.power = new MageInt(0);
this.toughness = new MageInt(0);
this.color.setWhite(true);
this.nightCard = true;
// Portrait of Michiko gets +1/+1 for each artifact and/or enchantment you control.
this.addAbility(new SimpleStaticAbility(new BoostSourceEffect(xValue, xValue, Duration.WhileOnBattlefield)
.setText("{this} gets +1/+1 for each artifact and/or enchantment you control")));
}
private PortraitOfMichiko(final PortraitOfMichiko card) {
super(card);
}
@Override
public PortraitOfMichiko copy() {
return new PortraitOfMichiko(this);
}
}

View file

@ -1,49 +0,0 @@
package mage.cards.t;
import mage.Mana;
import mage.abilities.condition.common.DescendCondition;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.dynamicvalue.DynamicValue;
import mage.abilities.dynamicvalue.common.CardsInControllerGraveyardCount;
import mage.abilities.mana.DynamicManaAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.AbilityWord;
import mage.constants.CardType;
import mage.constants.SuperType;
import mage.filter.StaticFilters;
import java.util.UUID;
/**
* @author Susucr
*/
public final class TheCore extends CardImpl {
private static final DynamicValue xValue = new CardsInControllerGraveyardCount(StaticFilters.FILTER_CARD_PERMANENT);
public TheCore(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
this.supertype.add(SuperType.LEGENDARY);
// (Transforms from Matzalantli.)
this.nightCard = true;
// Fathomless descent -- {T}: Add X mana of any one color, where X is the number of permanent cards in your graveyard.
this.addAbility(new DynamicManaAbility(
Mana.AnyMana(1), xValue, new TapSourceCost(),
"Add X mana of any one color, where X is the number of permanent cards in your graveyard.",
true
).setAbilityWord(AbilityWord.FATHOMLESS_DESCENT).addHint(DescendCondition.getHint()));
}
private TheCore(final TheCore card) {
super(card);
}
@Override
public TheCore copy() {
return new TheCore(this);
}
}

View file

@ -1,51 +0,0 @@
package mage.cards.t;
import mage.MageInt;
import mage.abilities.common.SpellCastOpponentTriggeredAbility;
import mage.abilities.common.WerewolfBackTriggeredAbility;
import mage.abilities.effects.common.DamageTargetEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SetTargetPointer;
import mage.constants.SubType;
import mage.constants.Zone;
import mage.filter.StaticFilters;
import java.util.UUID;
/**
* @author North
*/
public final class TovolarsMagehunter extends CardImpl {
public TovolarsMagehunter(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "");
this.subtype.add(SubType.WEREWOLF);
this.color.setRed(true);
this.power = new MageInt(5);
this.toughness = new MageInt(5);
// this card is the second face of double-faced card
this.nightCard = true;
// Whenever an opponent casts a spell, Tovolar's Magehunter deals 2 damage to that player.
this.addAbility(new SpellCastOpponentTriggeredAbility(
Zone.BATTLEFIELD, new DamageTargetEffect(2).withTargetDescription("that player"),
StaticFilters.FILTER_SPELL_A, false, SetTargetPointer.PLAYER
));
// At the beginning of each upkeep, if a player cast two or more spells last turn, transform Tovolar's Magehunter.
this.addAbility(new WerewolfBackTriggeredAbility());
}
private TovolarsMagehunter(final TovolarsMagehunter card) {
super(card);
}
@Override
public TovolarsMagehunter copy() {
return new TovolarsMagehunter(this);
}
}

View file

@ -183,7 +183,6 @@ public final class DarkAscension extends ExpansionSet {
cards.add(new SetCardInfo("Thraben Doomsayer", 25, Rarity.RARE, mage.cards.t.ThrabenDoomsayer.class));
cards.add(new SetCardInfo("Thraben Heretic", 26, Rarity.UNCOMMON, mage.cards.t.ThrabenHeretic.class));
cards.add(new SetCardInfo("Torch Fiend", 106, Rarity.COMMON, mage.cards.t.TorchFiend.class));
cards.add(new SetCardInfo("Tovolar's Magehunter", 98, Rarity.RARE, mage.cards.t.TovolarsMagehunter.class));
cards.add(new SetCardInfo("Tower Geist", 53, Rarity.UNCOMMON, mage.cards.t.TowerGeist.class));
cards.add(new SetCardInfo("Tracker's Instincts", 128, Rarity.UNCOMMON, mage.cards.t.TrackersInstincts.class));
cards.add(new SetCardInfo("Tragic Slip", 76, Rarity.COMMON, mage.cards.t.TragicSlip.class));

View file

@ -25,7 +25,6 @@ public class DarkAscensionPromos extends ExpansionSet {
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("Strangleroot Geist", 127, Rarity.UNCOMMON, mage.cards.s.StranglerootGeist.class));
cards.add(new SetCardInfo("Tovolar's Magehunter", "98*", Rarity.RARE, mage.cards.t.TovolarsMagehunter.class));
cards.add(new SetCardInfo("Zombie Apocalypse", 80, Rarity.RARE, mage.cards.z.ZombieApocalypse.class));
}
}

View file

@ -150,7 +150,6 @@ public final class Innistrad extends ExpansionSet {
cards.add(new SetCardInfo("Heretic's Punishment", 147, Rarity.RARE, mage.cards.h.HereticsPunishment.class));
cards.add(new SetCardInfo("Hinterland Harbor", 241, Rarity.RARE, mage.cards.h.HinterlandHarbor.class));
cards.add(new SetCardInfo("Hollowhenge Scavenger", 188, Rarity.UNCOMMON, mage.cards.h.HollowhengeScavenger.class));
cards.add(new SetCardInfo("Howlpack Alpha", 193, Rarity.RARE, mage.cards.h.HowlpackAlpha.class));
cards.add(new SetCardInfo("Howlpack of Estwald", 209, Rarity.COMMON, mage.cards.h.HowlpackOfEstwald.class));
cards.add(new SetCardInfo("Hysterical Blindness", 59, Rarity.COMMON, mage.cards.h.HystericalBlindness.class));
cards.add(new SetCardInfo("Infernal Plunge", 148, Rarity.COMMON, mage.cards.i.InfernalPlunge.class));

View file

@ -95,7 +95,6 @@ public final class InnistradCrimsonVow extends ExpansionSet {
cards.add(new SetCardInfo("Cackling Culprit", 28, Rarity.UNCOMMON, mage.cards.c.CacklingCulprit.class));
cards.add(new SetCardInfo("Cartographer's Survey", 190, Rarity.UNCOMMON, mage.cards.c.CartographersSurvey.class));
cards.add(new SetCardInfo("Catapult Fodder", 99, Rarity.UNCOMMON, mage.cards.c.CatapultFodder.class));
cards.add(new SetCardInfo("Catlike Curiosity", 69, Rarity.UNCOMMON, mage.cards.c.CatlikeCuriosity.class));
cards.add(new SetCardInfo("Cemetery Desecrator", 100, Rarity.MYTHIC, mage.cards.c.CemeteryDesecrator.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Cemetery Desecrator", 366, Rarity.MYTHIC, mage.cards.c.CemeteryDesecrator.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Cemetery Gatekeeper", 148, Rarity.MYTHIC, mage.cards.c.CemeteryGatekeeper.class, NON_FULL_USE_VARIOUS));
@ -204,8 +203,6 @@ public final class InnistradCrimsonVow extends ExpansionSet {
cards.add(new SetCardInfo("Geistlight Snare", 60, Rarity.UNCOMMON, mage.cards.g.GeistlightSnare.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Geralf, Visionary Stitcher", 319, Rarity.RARE, mage.cards.g.GeralfVisionaryStitcher.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Geralf, Visionary Stitcher", 61, Rarity.RARE, mage.cards.g.GeralfVisionaryStitcher.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Ghastly Mimicry", 361, Rarity.RARE, mage.cards.g.GhastlyMimicry.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Ghastly Mimicry", 68, Rarity.RARE, mage.cards.g.GhastlyMimicry.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Gift of Fangs", 113, Rarity.COMMON, mage.cards.g.GiftOfFangs.class));
cards.add(new SetCardInfo("Glorious Sunrise", 200, Rarity.RARE, mage.cards.g.GloriousSunrise.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Glorious Sunrise", 388, Rarity.RARE, mage.cards.g.GloriousSunrise.class, NON_FULL_USE_VARIOUS));

View file

@ -58,7 +58,6 @@ public final class InnistradDoubleFeature extends ExpansionSet {
cards.add(new SetCardInfo("Bat Whisperer", 86, Rarity.COMMON, mage.cards.b.BatWhisperer.class));
cards.add(new SetCardInfo("Belligerent Guest", 411, Rarity.COMMON, mage.cards.b.BelligerentGuest.class));
cards.add(new SetCardInfo("Beloved Beggar", 3, Rarity.UNCOMMON, mage.cards.b.BelovedBeggar.class));
cards.add(new SetCardInfo("Benevolent Geist", 61, Rarity.RARE, mage.cards.b.BenevolentGeist.class));
cards.add(new SetCardInfo("Bereaved Survivor", 4, Rarity.UNCOMMON, mage.cards.b.BereavedSurvivor.class));
cards.add(new SetCardInfo("Binding Geist", 315, Rarity.COMMON, mage.cards.b.BindingGeist.class));
cards.add(new SetCardInfo("Biolume Egg", 316, Rarity.UNCOMMON, mage.cards.b.BiolumeEgg.class));
@ -109,7 +108,6 @@ public final class InnistradDoubleFeature extends ExpansionSet {
cards.add(new SetCardInfo("Cathar Commando", 10, Rarity.COMMON, mage.cards.c.CatharCommando.class));
cards.add(new SetCardInfo("Cathar's Call", 11, Rarity.UNCOMMON, mage.cards.c.CatharsCall.class));
cards.add(new SetCardInfo("Cathartic Pyre", 133, Rarity.UNCOMMON, mage.cards.c.CatharticPyre.class));
cards.add(new SetCardInfo("Catlike Curiosity", 336, Rarity.UNCOMMON, mage.cards.c.CatlikeCuriosity.class));
cards.add(new SetCardInfo("Celestus Sanctifier", 12, Rarity.COMMON, mage.cards.c.CelestusSanctifier.class));
cards.add(new SetCardInfo("Cemetery Desecrator", 367, Rarity.MYTHIC, mage.cards.c.CemeteryDesecrator.class));
cards.add(new SetCardInfo("Cemetery Gatekeeper", 415, Rarity.MYTHIC, mage.cards.c.CemeteryGatekeeper.class));
@ -123,7 +121,6 @@ public final class InnistradDoubleFeature extends ExpansionSet {
cards.add(new SetCardInfo("Chaplain of Alms", 13, Rarity.UNCOMMON, mage.cards.c.ChaplainOfAlms.class));
cards.add(new SetCardInfo("Child of the Pack", 501, Rarity.UNCOMMON, mage.cards.c.ChildOfThePack.class));
cards.add(new SetCardInfo("Chill of the Grave", 318, Rarity.COMMON, mage.cards.c.ChillOfTheGrave.class));
cards.add(new SetCardInfo("Chilling Chronicle", 63, Rarity.UNCOMMON, mage.cards.c.ChillingChronicle.class));
cards.add(new SetCardInfo("Cipherbound Spirit", 346, Rarity.UNCOMMON, mage.cards.c.CipherboundSpirit.class));
cards.add(new SetCardInfo("Circle of Confinement", 274, Rarity.UNCOMMON, mage.cards.c.CircleOfConfinement.class));
cards.add(new SetCardInfo("Clarion Cathars", 14, Rarity.COMMON, mage.cards.c.ClarionCathars.class));
@ -252,7 +249,6 @@ public final class InnistradDoubleFeature extends ExpansionSet {
cards.add(new SetCardInfo("Geistlight Snare", 327, Rarity.UNCOMMON, mage.cards.g.GeistlightSnare.class));
cards.add(new SetCardInfo("Geistwave", 56, Rarity.COMMON, mage.cards.g.Geistwave.class));
cards.add(new SetCardInfo("Geralf, Visionary Stitcher", 328, Rarity.RARE, mage.cards.g.GeralfVisionaryStitcher.class));
cards.add(new SetCardInfo("Ghastly Mimicry", 335, Rarity.RARE, mage.cards.g.GhastlyMimicry.class));
cards.add(new SetCardInfo("Ghoulcaller's Harvest", 225, Rarity.RARE, mage.cards.g.GhoulcallersHarvest.class));
cards.add(new SetCardInfo("Ghoulish Procession", 102, Rarity.UNCOMMON, mage.cards.g.GhoulishProcession.class));
cards.add(new SetCardInfo("Gift of Fangs", 380, Rarity.COMMON, mage.cards.g.GiftOfFangs.class));
@ -360,12 +356,10 @@ public final class InnistradDoubleFeature extends ExpansionSet {
cards.add(new SetCardInfo("Moonveil Regent", 149, Rarity.MYTHIC, mage.cards.m.MoonveilRegent.class));
cards.add(new SetCardInfo("Morbid Opportunist", 113, Rarity.UNCOMMON, mage.cards.m.MorbidOpportunist.class));
cards.add(new SetCardInfo("Morkrut Behemoth", 114, Rarity.COMMON, mage.cards.m.MorkrutBehemoth.class));
cards.add(new SetCardInfo("Morning Apparition", 28, Rarity.COMMON, mage.cards.m.MorningApparition.class));
cards.add(new SetCardInfo("Mounted Dreadknight", 150, Rarity.COMMON, mage.cards.m.MountedDreadknight.class));
cards.add(new SetCardInfo("Mourning Patrol", 28, Rarity.COMMON, mage.cards.m.MourningPatrol.class));
cards.add(new SetCardInfo("Mulch", 477, Rarity.COMMON, mage.cards.m.Mulch.class));
cards.add(new SetCardInfo("Mysterious Tome", 63, Rarity.UNCOMMON, mage.cards.m.MysteriousTome.class));
cards.add(new SetCardInfo("Mystic Monstrosity", 256, Rarity.UNCOMMON, mage.cards.m.MysticMonstrosity.class));
cards.add(new SetCardInfo("Mystic Skull", 256, Rarity.UNCOMMON, mage.cards.m.MysticSkull.class));
cards.add(new SetCardInfo("Nature's Embrace", 478, Rarity.COMMON, mage.cards.n.NaturesEmbrace.class));
cards.add(new SetCardInfo("Nebelgast Beguiler", 292, Rarity.COMMON, mage.cards.n.NebelgastBeguiler.class));

View file

@ -61,8 +61,6 @@ public final class InnistradMidnightHunt extends ExpansionSet {
cards.add(new SetCardInfo("Baneblade Scoundrel", 85, Rarity.UNCOMMON, mage.cards.b.BanebladeScoundrel.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Bat Whisperer", 86, Rarity.COMMON, mage.cards.b.BatWhisperer.class));
cards.add(new SetCardInfo("Beloved Beggar", 3, Rarity.UNCOMMON, mage.cards.b.BelovedBeggar.class));
cards.add(new SetCardInfo("Benevolent Geist", 336, Rarity.RARE, mage.cards.b.BenevolentGeist.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Benevolent Geist", 61, Rarity.RARE, mage.cards.b.BenevolentGeist.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Bereaved Survivor", 4, Rarity.UNCOMMON, mage.cards.b.BereavedSurvivor.class));
cards.add(new SetCardInfo("Bird Admirer", 169, Rarity.COMMON, mage.cards.b.BirdAdmirer.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Bird Admirer", 298, Rarity.COMMON, mage.cards.b.BirdAdmirer.class, NON_FULL_USE_VARIOUS));
@ -103,7 +101,6 @@ public final class InnistradMidnightHunt extends ExpansionSet {
cards.add(new SetCardInfo("Champion of the Perished", 385, Rarity.RARE, mage.cards.c.ChampionOfThePerished.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Champion of the Perished", 91, Rarity.RARE, mage.cards.c.ChampionOfThePerished.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Chaplain of Alms", 13, Rarity.UNCOMMON, mage.cards.c.ChaplainOfAlms.class));
cards.add(new SetCardInfo("Chilling Chronicle", 63, Rarity.UNCOMMON, mage.cards.c.ChillingChronicle.class));
cards.add(new SetCardInfo("Clarion Cathars", 14, Rarity.COMMON, mage.cards.c.ClarionCathars.class));
cards.add(new SetCardInfo("Clear Shot", 176, Rarity.UNCOMMON, mage.cards.c.ClearShot.class));
cards.add(new SetCardInfo("Component Collector", 43, Rarity.COMMON, mage.cards.c.ComponentCollector.class));
@ -274,14 +271,12 @@ public final class InnistradMidnightHunt extends ExpansionSet {
cards.add(new SetCardInfo("Moonveil Regent", 357, Rarity.MYTHIC, mage.cards.m.MoonveilRegent.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Morbid Opportunist", 113, Rarity.UNCOMMON, mage.cards.m.MorbidOpportunist.class));
cards.add(new SetCardInfo("Morkrut Behemoth", 114, Rarity.COMMON, mage.cards.m.MorkrutBehemoth.class));
cards.add(new SetCardInfo("Morning Apparition", 28, Rarity.COMMON, mage.cards.m.MorningApparition.class));
cards.add(new SetCardInfo("Mountain", 274, Rarity.LAND, mage.cards.basiclands.Mountain.class, FULL_ART_BFZ_VARIOUS));
cards.add(new SetCardInfo("Mountain", 275, Rarity.LAND, mage.cards.basiclands.Mountain.class, FULL_ART_BFZ_VARIOUS));
cards.add(new SetCardInfo("Mountain", 383, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Mounted Dreadknight", 150, Rarity.COMMON, mage.cards.m.MountedDreadknight.class));
cards.add(new SetCardInfo("Mourning Patrol", 28, Rarity.COMMON, mage.cards.m.MourningPatrol.class));
cards.add(new SetCardInfo("Mysterious Tome", 63, Rarity.UNCOMMON, mage.cards.m.MysteriousTome.class));
cards.add(new SetCardInfo("Mystic Monstrosity", 256, Rarity.UNCOMMON, mage.cards.m.MysticMonstrosity.class));
cards.add(new SetCardInfo("Mystic Skull", 256, Rarity.UNCOMMON, mage.cards.m.MysticSkull.class));
cards.add(new SetCardInfo("Nebelgast Intruder", 64, Rarity.UNCOMMON, mage.cards.n.NebelgastIntruder.class));
cards.add(new SetCardInfo("Necrosynthesis", 115, Rarity.UNCOMMON, mage.cards.n.Necrosynthesis.class));

View file

@ -23,7 +23,6 @@ public class InnistradPromos extends ExpansionSet {
cards.add(new SetCardInfo("Devil's Play", 140, Rarity.RARE, mage.cards.d.DevilsPlay.class));
cards.add(new SetCardInfo("Diregraf Ghoul", 97, Rarity.UNCOMMON, mage.cards.d.DiregrafGhoul.class));
cards.add(new SetCardInfo("Elite Inquisitor", 13, Rarity.RARE, mage.cards.e.EliteInquisitor.class));
cards.add(new SetCardInfo("Howlpack Alpha", "193*", Rarity.RARE, mage.cards.h.HowlpackAlpha.class));
cards.add(new SetCardInfo("Ludevic's Test Subject", "64*", Rarity.RARE, mage.cards.l.LudevicsTestSubject.class));
cards.add(new SetCardInfo("Mayor of Avabruck", "193*", Rarity.RARE, mage.cards.m.MayorOfAvabruck.class));

View file

@ -270,7 +270,6 @@ public class InnistradRemastered extends ExpansionSet {
cards.add(new SetCardInfo("Hopeful Initiate", 343, Rarity.RARE, mage.cards.h.HopefulInitiate.class, RETRO_ART_USE_VARIOUS));
cards.add(new SetCardInfo("Howling Chorus", 214, Rarity.UNCOMMON, mage.cards.h.HowlingChorus.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Howling Chorus", 469, Rarity.UNCOMMON, mage.cards.h.HowlingChorus.class, RETRO_ART_USE_VARIOUS));
cards.add(new SetCardInfo("Howlpack Alpha", 207, Rarity.RARE, mage.cards.h.HowlpackAlpha.class));
cards.add(new SetCardInfo("Howlpack of Estwald", 224, Rarity.COMMON, mage.cards.h.HowlpackOfEstwald.class));
cards.add(new SetCardInfo("Howlpack Resurgence", 204, Rarity.UNCOMMON, mage.cards.h.HowlpackResurgence.class));
cards.add(new SetCardInfo("Hullbreaker Horror", 303, Rarity.RARE, mage.cards.h.HullbreakerHorror.class, NON_FULL_USE_VARIOUS));

View file

@ -400,7 +400,6 @@ public final class KamigawaNeonDynasty extends ExpansionSet {
cards.add(new SetCardInfo("Plains", 293, Rarity.LAND, mage.cards.basiclands.Plains.class, FULL_ART_UST_VARIOUS));
cards.add(new SetCardInfo("Plains", 294, Rarity.LAND, mage.cards.basiclands.Plains.class, FULL_ART_UST_VARIOUS));
cards.add(new SetCardInfo("Planar Incision", 72, Rarity.COMMON, mage.cards.p.PlanarIncision.class));
cards.add(new SetCardInfo("Portrait of Michiko", 29, Rarity.UNCOMMON, mage.cards.p.PortraitOfMichiko.class));
cards.add(new SetCardInfo("Prodigy's Prototype", 231, Rarity.UNCOMMON, mage.cards.p.ProdigysPrototype.class));
cards.add(new SetCardInfo("Prosperous Thief", 336, Rarity.UNCOMMON, mage.cards.p.ProsperousThief.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Prosperous Thief", 73, Rarity.UNCOMMON, mage.cards.p.ProsperousThief.class, NON_FULL_USE_VARIOUS));

View file

@ -249,7 +249,6 @@ public class MagicOnlinePromos extends ExpansionSet {
cards.add(new SetCardInfo("Beledros Witherbloom", 90318, Rarity.MYTHIC, mage.cards.b.BeledrosWitherbloom.class));
cards.add(new SetCardInfo("Bell Borca, Spectral Sergeant", 86308, Rarity.RARE, mage.cards.b.BellBorcaSpectralSergeant.class));
cards.add(new SetCardInfo("Bellowing Mauler", 99853, Rarity.RARE, mage.cards.b.BellowingMauler.class));
cards.add(new SetCardInfo("Benevolent Geist", 93950, Rarity.RARE, mage.cards.b.BenevolentGeist.class));
cards.add(new SetCardInfo("Bennie Bracks, Zoologist", 99815, Rarity.MYTHIC, mage.cards.b.BennieBracksZoologist.class));
cards.add(new SetCardInfo("Bident of Thassa", 50114, Rarity.RARE, mage.cards.b.BidentOfThassa.class));
cards.add(new SetCardInfo("Bile Blight", 53838, Rarity.UNCOMMON, mage.cards.b.BileBlight.class));
@ -1039,7 +1038,6 @@ public class MagicOnlinePromos extends ExpansionSet {
cards.add(new SetCardInfo("Getaway Car", 99727, Rarity.RARE, mage.cards.g.GetawayCar.class));
cards.add(new SetCardInfo("Geyadrone Dihada", 91329, Rarity.MYTHIC, mage.cards.g.GeyadroneDihada.class));
cards.add(new SetCardInfo("Ghalta, Primal Hunger", 66896, Rarity.RARE, mage.cards.g.GhaltaPrimalHunger.class));
cards.add(new SetCardInfo("Ghastly Mimicry", 95313, Rarity.RARE, mage.cards.g.GhastlyMimicry.class));
cards.add(new SetCardInfo("Ghen, Arcanum Weaver", 86340, Rarity.RARE, mage.cards.g.GhenArcanumWeaver.class));
cards.add(new SetCardInfo("Ghor-Clan Rampager", 50110, Rarity.UNCOMMON, mage.cards.g.GhorClanRampager.class));
cards.add(new SetCardInfo("Ghost of Ramirez DePietro", 86286, Rarity.UNCOMMON, mage.cards.g.GhostOfRamirezDePietro.class));
@ -1239,7 +1237,6 @@ public class MagicOnlinePromos extends ExpansionSet {
cards.add(new SetCardInfo("Hostile Hostel", 94088, Rarity.MYTHIC, mage.cards.h.HostileHostel.class));
cards.add(new SetCardInfo("Hostile Negotiations", 105712, Rarity.RARE, mage.cards.h.HostileNegotiations.class));
cards.add(new SetCardInfo("Howling Moon", 95417, Rarity.RARE, mage.cards.h.HowlingMoon.class));
cards.add(new SetCardInfo("Howlpack Alpha", 42866, Rarity.RARE, mage.cards.h.HowlpackAlpha.class));
cards.add(new SetCardInfo("Howlpack Piper", 95425, Rarity.RARE, mage.cards.h.HowlpackPiper.class));
cards.add(new SetCardInfo("Huatli, the Sun's Heart", 72241, Rarity.UNCOMMON, mage.cards.h.HuatliTheSunsHeart.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Huatli, the Sun's Heart", 77975, Rarity.UNCOMMON, mage.cards.h.HuatliTheSunsHeart.class, NON_FULL_USE_VARIOUS));
@ -2845,7 +2842,6 @@ public class MagicOnlinePromos extends ExpansionSet {
cards.add(new SetCardInfo("Torrent Sculptor", 90248, Rarity.RARE, mage.cards.t.TorrentSculptor.class));
cards.add(new SetCardInfo("Toski, Bearer of Secrets", 88340, Rarity.RARE, mage.cards.t.ToskiBearerOfSecrets.class));
cards.add(new SetCardInfo("Tourach, Dread Cantor", 91253, Rarity.MYTHIC, mage.cards.t.TourachDreadCantor.class));
cards.add(new SetCardInfo("Tovolar's Magehunter", 43507, Rarity.RARE, mage.cards.t.TovolarsMagehunter.class));
cards.add(new SetCardInfo("Toxic Deluge", 82832, Rarity.RARE, mage.cards.t.ToxicDeluge.class));
cards.add(new SetCardInfo("Tradewind Rider", 36048, Rarity.RARE, mage.cards.t.TradewindRider.class, RETRO_ART));
cards.add(new SetCardInfo("Training Center", 85954, Rarity.RARE, mage.cards.t.TrainingCenter.class));

View file

@ -63,7 +63,6 @@ public class ShadowsOfThePast extends ExpansionSet {
cards.add(new SetCardInfo("Havengul Lich", 63, Rarity.MYTHIC, mage.cards.h.HavengulLich.class));
cards.add(new SetCardInfo("Havengul Runebinder", 16, Rarity.RARE, mage.cards.h.HavengulRunebinder.class));
cards.add(new SetCardInfo("Hollowhenge Scavenger", 52, Rarity.COMMON, mage.cards.h.HollowhengeScavenger.class));
cards.add(new SetCardInfo("Howlpack Alpha", 53, Rarity.RARE, mage.cards.h.HowlpackAlpha.class));
cards.add(new SetCardInfo("Huntmaster of the Fells", 64, Rarity.MYTHIC, mage.cards.h.HuntmasterOfTheFells.class));
cards.add(new SetCardInfo("Immerwolf", 65, Rarity.UNCOMMON, mage.cards.i.Immerwolf.class));
cards.add(new SetCardInfo("Increasing Ambition", 32, Rarity.RARE, mage.cards.i.IncreasingAmbition.class));

View file

@ -261,7 +261,6 @@ public final class TheLostCavernsOfIxalan extends ExpansionSet {
cards.add(new SetCardInfo("Marauding Brinefang", 64, Rarity.COMMON, mage.cards.m.MaraudingBrinefang.class));
cards.add(new SetCardInfo("Market Gnome", 22, Rarity.UNCOMMON, mage.cards.m.MarketGnome.class));
cards.add(new SetCardInfo("Master's Guide-Mural", 233, Rarity.UNCOMMON, mage.cards.m.MastersGuideMural.class));
cards.add(new SetCardInfo("Master's Manufactory", 233, Rarity.UNCOMMON, mage.cards.m.MastersManufactory.class));
cards.add(new SetCardInfo("Mastercraft Raptor", 164, Rarity.UNCOMMON, mage.cards.m.MastercraftRaptor.class));
cards.add(new SetCardInfo("Matzalantli, the Great Door", 256, Rarity.RARE, mage.cards.m.MatzalantliTheGreatDoor.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Matzalantli, the Great Door", 387, Rarity.RARE, mage.cards.m.MatzalantliTheGreatDoor.class, NON_FULL_USE_VARIOUS));
@ -420,8 +419,6 @@ public final class TheLostCavernsOfIxalan extends ExpansionSet {
cards.add(new SetCardInfo("The Ancient One", 319, Rarity.MYTHIC, mage.cards.t.TheAncientOne.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("The Belligerent", 225, Rarity.RARE, mage.cards.t.TheBelligerent.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("The Belligerent", 384, Rarity.RARE, mage.cards.t.TheBelligerent.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("The Core", 256, Rarity.RARE, mage.cards.t.TheCore.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("The Core", 387, Rarity.RARE, mage.cards.t.TheCore.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("The Enigma Jewel", 362, Rarity.MYTHIC, mage.cards.t.TheEnigmaJewel.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("The Enigma Jewel", 55, Rarity.MYTHIC, mage.cards.t.TheEnigmaJewel.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("The Everflowing Well", 363, Rarity.RARE, mage.cards.t.TheEverflowingWell.class, NON_FULL_USE_VARIOUS));

View file

@ -25,7 +25,6 @@ public final class Transformers extends ExpansionSet {
cards.add(new SetCardInfo("Flamewar, Brash Veteran", 10, Rarity.MYTHIC, mage.cards.f.FlamewarBrashVeteran.class));
cards.add(new SetCardInfo("Goldbug, Humanity's Ally", 11, Rarity.MYTHIC, mage.cards.g.GoldbugHumanitysAlly.class));
cards.add(new SetCardInfo("Jetfire, Ingenious Scientist", 3, Rarity.MYTHIC, mage.cards.j.JetfireIngeniousScientist.class));
cards.add(new SetCardInfo("Megatron, Destructive Force", 12, Rarity.MYTHIC, mage.cards.m.MegatronDestructiveForce.class));
cards.add(new SetCardInfo("Megatron, Tyrant", 12, Rarity.MYTHIC, mage.cards.m.MegatronTyrant.class));
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));