mirror of
https://github.com/magefree/mage.git
synced 2025-12-20 02:30:08 -08:00
parent
78ca8e6be7
commit
3484e58944
37 changed files with 536 additions and 992 deletions
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
@ -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());
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
@ -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));
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue