convert transforming "G" cards to single class file

This commit is contained in:
jmlundeen 2025-11-29 13:15:21 -06:00
parent f550f077d0
commit 06f54e5df1
53 changed files with 571 additions and 1153 deletions

View file

@ -1,48 +0,0 @@
package mage.cards.c;
import mage.MageInt;
import mage.abilities.common.DiesSourceTriggeredAbility;
import mage.abilities.effects.common.PutOnLibrarySourceEffect;
import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.SuperType;
import java.util.UUID;
/**
* @author TheElk801
*/
public final class ChaosTheEndless extends CardImpl {
public ChaosTheEndless(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "");
this.supertype.add(SuperType.LEGENDARY);
this.subtype.add(SubType.DEMON);
this.power = new MageInt(5);
this.toughness = new MageInt(5);
this.color.setBlack(true);
this.color.setRed(true);
this.nightCard = true;
// Flying
this.addAbility(FlyingAbility.getInstance());
// When Chaos dies, put it on the bottom of its owner's library.
this.addAbility(new DiesSourceTriggeredAbility(new PutOnLibrarySourceEffect(
false, "put it on the bottom of its owner's library"
), false));
}
private ChaosTheEndless(final ChaosTheEndless card) {
super(card);
}
@Override
public ChaosTheEndless copy() {
return new ChaosTheEndless(this);
}
}

View file

@ -1,57 +0,0 @@
package mage.cards.c;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.AttacksTriggeredAbility;
import mage.abilities.effects.common.continuous.SetBasePowerToughnessTargetEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.SubType;
import mage.filter.FilterPermanent;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.mageobject.AnotherPredicate;
import mage.target.TargetPermanent;
import java.util.UUID;
/**
* @author TheElk801
*/
public final class ChromeHostHulk extends CardImpl {
private static final FilterPermanent filter = new FilterCreaturePermanent("other target creature");
static {
filter.add(AnotherPredicate.instance);
}
public ChromeHostHulk(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "");
this.subtype.add(SubType.PHYREXIAN);
this.subtype.add(SubType.TROLL);
this.power = new MageInt(5);
this.toughness = new MageInt(5);
this.color.setBlue(true);
this.color.setGreen(true);
this.nightCard = true;
// Whenever Chrome Host Hulk attacks, up to one other target creature has base power and toughness 5/5 until end of turn.
Ability ability = new AttacksTriggeredAbility(
new SetBasePowerToughnessTargetEffect(5, 5, Duration.EndOfTurn)
);
ability.addTarget(new TargetPermanent(0, 1, filter));
this.addAbility(ability);
}
private ChromeHostHulk(final ChromeHostHulk card) {
super(card);
}
@Override
public ChromeHostHulk copy() {
return new ChromeHostHulk(this);
}
}

View file

@ -1,16 +1,18 @@
package mage.cards.g; package mage.cards.g;
import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.ActivateAsSorceryActivatedAbility; import mage.abilities.common.ActivateAsSorceryActivatedAbility;
import mage.abilities.common.DiesSourceTriggeredAbility;
import mage.abilities.common.SpellCastControllerTriggeredAbility; import mage.abilities.common.SpellCastControllerTriggeredAbility;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.PutOnLibrarySourceEffect;
import mage.abilities.effects.keyword.SurveilEffect; import mage.abilities.effects.keyword.SurveilEffect;
import mage.abilities.keyword.FlyingAbility;
import mage.abilities.keyword.TransformAbility; import mage.abilities.keyword.TransformAbility;
import mage.cards.Card; import mage.cards.Card;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.cards.TransformingDoubleFacedCard;
import mage.constants.*; import mage.constants.*;
import mage.filter.StaticFilters; import mage.filter.StaticFilters;
import mage.game.Game; import mage.game.Game;
@ -22,29 +24,38 @@ import java.util.UUID;
/** /**
* @author TheElk801 * @author TheElk801
*/ */
public final class GarlandKnightOfCornelia extends CardImpl { public final class GarlandKnightOfCornelia extends TransformingDoubleFacedCard {
public GarlandKnightOfCornelia(UUID ownerId, CardSetInfo setInfo) { public GarlandKnightOfCornelia(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{B}{R}"); super(ownerId, setInfo,
new SuperType[]{SuperType.LEGENDARY}, new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN, SubType.KNIGHT}, "{B}{R}",
"Chaos, the Endless",
new SuperType[]{SuperType.LEGENDARY}, new CardType[]{CardType.CREATURE}, new SubType[]{SubType.DEMON}, "BR"
);
this.secondSideCardClazz = mage.cards.c.ChaosTheEndless.class; // Garland, Knight of Cornelia
this.getLeftHalfCard().setPT(3, 2);
this.supertype.add(SuperType.LEGENDARY);
this.subtype.add(SubType.HUMAN);
this.subtype.add(SubType.KNIGHT);
this.power = new MageInt(3);
this.toughness = new MageInt(2);
// Whenever you cast a noncreature spell, surveil 1. // Whenever you cast a noncreature spell, surveil 1.
this.addAbility(new SpellCastControllerTriggeredAbility( this.getLeftHalfCard().addAbility(new SpellCastControllerTriggeredAbility(
new SurveilEffect(1), StaticFilters.FILTER_SPELL_A_NON_CREATURE, false new SurveilEffect(1), StaticFilters.FILTER_SPELL_A_NON_CREATURE, false
)); ));
// {3}{B}{B}{R}{R}: Return this card from your graveyard to the battlefield transformed. Activate only as a sorcery. // {3}{B}{B}{R}{R}: Return this card from your graveyard to the battlefield transformed. Activate only as a sorcery.
this.addAbility(new TransformAbility()); this.getLeftHalfCard().addAbility(new ActivateAsSorceryActivatedAbility(
this.addAbility(new ActivateAsSorceryActivatedAbility(
Zone.GRAVEYARD, new GarlandKnightOfCorneliaEffect(), new ManaCostsImpl<>("{3}{B}{B}{R}{R}") Zone.GRAVEYARD, new GarlandKnightOfCorneliaEffect(), new ManaCostsImpl<>("{3}{B}{B}{R}{R}")
)); ));
// Chaos, the Endless
this.getRightHalfCard().setPT(5, 5);
// Flying
this.getRightHalfCard().addAbility(FlyingAbility.getInstance());
// When Chaos dies, put it on the bottom of its owner's library.
this.getRightHalfCard().addAbility(new DiesSourceTriggeredAbility(new PutOnLibrarySourceEffect(
false, "put it on the bottom of its owner's library"
), false));
} }
private GarlandKnightOfCornelia(final GarlandKnightOfCornelia card) { private GarlandKnightOfCornelia(final GarlandKnightOfCornelia card) {

View file

@ -3,19 +3,29 @@ package mage.cards.g;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.LoyaltyAbility; import mage.abilities.LoyaltyAbility;
import mage.abilities.StateTriggeredAbility; import mage.abilities.StateTriggeredAbility;
import mage.abilities.costs.common.SacrificeTargetCost;
import mage.abilities.dynamicvalue.DynamicValue;
import mage.abilities.dynamicvalue.common.CardsInControllerGraveyardCount;
import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.DamageTargetEffect; import mage.abilities.effects.common.DamageTargetEffect;
import mage.abilities.effects.common.DoIfCostPaid;
import mage.abilities.effects.common.TransformSourceEffect; import mage.abilities.effects.common.TransformSourceEffect;
import mage.abilities.keyword.TransformAbility; import mage.abilities.effects.common.continuous.BoostControlledEffect;
import mage.cards.CardImpl; import mage.abilities.effects.common.continuous.GainAbilityControlledEffect;
import mage.abilities.effects.common.search.SearchLibraryPutInHandEffect;
import mage.abilities.keyword.TrampleAbility;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.cards.TransformingDoubleFacedCard;
import mage.constants.*; import mage.constants.*;
import mage.counters.CounterType; import mage.counters.CounterType;
import mage.filter.StaticFilters;
import mage.game.Game; import mage.game.Game;
import mage.game.events.GameEvent; import mage.game.events.GameEvent;
import mage.game.permanent.Permanent; import mage.game.permanent.Permanent;
import mage.game.permanent.token.WolfToken; import mage.game.permanent.token.WolfToken;
import mage.game.permanent.token.WolfTokenWithDeathtouch;
import mage.target.common.TargetCardInLibrary;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
import java.util.UUID; import java.util.UUID;
@ -23,29 +33,54 @@ import java.util.UUID;
/** /**
* @author nantuko * @author nantuko
*/ */
public final class GarrukRelentless extends CardImpl { public final class GarrukRelentless extends TransformingDoubleFacedCard {
private static final DynamicValue xValue = new CardsInControllerGraveyardCount(StaticFilters.FILTER_CARD_CREATURE);
public GarrukRelentless(UUID ownerId, CardSetInfo setInfo) { public GarrukRelentless(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{3}{G}"); super(ownerId, setInfo,
this.supertype.add(SuperType.LEGENDARY); new SuperType[]{SuperType.LEGENDARY}, new CardType[]{CardType.PLANESWALKER}, new SubType[]{SubType.GARRUK}, "{3}{G}",
this.subtype.add(SubType.GARRUK); "Garruk, the Veil-Cursed",
new SuperType[]{SuperType.LEGENDARY}, new CardType[]{CardType.PLANESWALKER}, new SubType[]{SubType.GARRUK}, "BG"
);
this.secondSideCardClazz = mage.cards.g.GarrukTheVeilCursed.class; // Garruk Relentless
this.getLeftHalfCard().setStartingLoyalty(3);
this.setStartingLoyalty(3);
// When Garruk Relentless has two or fewer loyalty counters on him, transform him. // When Garruk Relentless has two or fewer loyalty counters on him, transform him.
this.addAbility(new TransformAbility()); this.getLeftHalfCard().addAbility(new GarrukRelentlessStateTrigger());
this.addAbility(new GarrukRelentlessStateTrigger());
// 0: Garruk Relentless deals 3 damage to target creature. That creature deals damage equal to its power to him // 0: Garruk Relentless deals 3 damage to target creature. That creature deals damage equal to its power to him.
Ability ability = new LoyaltyAbility(new DamageTargetEffect(3), 0); Ability ability = new LoyaltyAbility(new DamageTargetEffect(3), 0);
ability.addEffect(new GarrukRelentlessDamageEffect()); ability.addEffect(new GarrukRelentlessDamageEffect());
ability.addTarget(new TargetCreaturePermanent()); ability.addTarget(new TargetCreaturePermanent());
this.addAbility(ability); this.getLeftHalfCard().addAbility(ability);
// 0: Create a 2/2 green Wolf creature token. // 0: Create a 2/2 green Wolf creature token.
this.addAbility(new LoyaltyAbility(new CreateTokenEffect(new WolfToken()), 0)); this.getLeftHalfCard().addAbility(new LoyaltyAbility(new CreateTokenEffect(new WolfToken()), 0));
// Garruk, the Veil-Cursed
// +1: Create a 1/1 black Wolf creature token with deathtouch.
this.getRightHalfCard().addAbility(new LoyaltyAbility(new CreateTokenEffect(new WolfTokenWithDeathtouch()), 1));
// -1: Sacrifice a creature. If you do, search your library for a creature card, reveal it, put it into your hand, then shuffle.
this.getRightHalfCard().addAbility(new LoyaltyAbility(new DoIfCostPaid(
new SearchLibraryPutInHandEffect(new TargetCardInLibrary(
StaticFilters.FILTER_CARD_CREATURE_A
), true),
null,
new SacrificeTargetCost(StaticFilters.FILTER_PERMANENT_CREATURE),
false
), -1));
// -3: Creatures you control gain trample and get +X/+X until end of turn, where X is the number of creature cards in your graveyard.
Ability backAbility = new LoyaltyAbility(new GainAbilityControlledEffect(
TrampleAbility.getInstance(), Duration.EndOfTurn, StaticFilters.FILTER_CONTROLLED_CREATURE
).setText("creatures you control gain trample"), -3);
backAbility.addEffect(new BoostControlledEffect(
xValue, xValue, Duration.EndOfTurn
).setText("and get +X/+X until end of turn, where X is the number of creature cards in your graveyard"));
this.getRightHalfCard().addAbility(backAbility);
} }
private GarrukRelentless(final GarrukRelentless card) { private GarrukRelentless(final GarrukRelentless card) {
@ -60,7 +95,7 @@ public final class GarrukRelentless extends CardImpl {
class GarrukRelentlessStateTrigger extends StateTriggeredAbility { class GarrukRelentlessStateTrigger extends StateTriggeredAbility {
public GarrukRelentlessStateTrigger() { GarrukRelentlessStateTrigger() {
super(Zone.BATTLEFIELD, new TransformSourceEffect()); super(Zone.BATTLEFIELD, new TransformSourceEffect());
} }
@ -109,5 +144,4 @@ class GarrukRelentlessDamageEffect extends OneShotEffect {
public GarrukRelentlessDamageEffect copy() { public GarrukRelentlessDamageEffect copy() {
return new GarrukRelentlessDamageEffect(this); return new GarrukRelentlessDamageEffect(this);
} }
} }

View file

@ -1,75 +0,0 @@
package mage.cards.g;
import mage.abilities.Ability;
import mage.abilities.LoyaltyAbility;
import mage.abilities.costs.common.SacrificeTargetCost;
import mage.abilities.dynamicvalue.DynamicValue;
import mage.abilities.dynamicvalue.common.CardsInControllerGraveyardCount;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.DoIfCostPaid;
import mage.abilities.effects.common.continuous.BoostControlledEffect;
import mage.abilities.effects.common.continuous.GainAbilityControlledEffect;
import mage.abilities.effects.common.search.SearchLibraryPutInHandEffect;
import mage.abilities.keyword.TrampleAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.SubType;
import mage.constants.SuperType;
import mage.filter.StaticFilters;
import mage.game.permanent.token.WolfTokenWithDeathtouch;
import mage.target.common.TargetCardInLibrary;
import java.util.UUID;
/**
* @author nantuko
*/
public final class GarrukTheVeilCursed extends CardImpl {
private static final DynamicValue xValue = new CardsInControllerGraveyardCount(StaticFilters.FILTER_CARD_CREATURE);
public GarrukTheVeilCursed(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "");
this.supertype.add(SuperType.LEGENDARY);
this.subtype.add(SubType.GARRUK);
// this card is the second face of double-faced card
this.nightCard = true;
this.color.setGreen(true);
this.color.setBlack(true);
// +1 : Create a 1/1 black Wolf creature token with deathtouch.
this.addAbility(new LoyaltyAbility(new CreateTokenEffect(new WolfTokenWithDeathtouch()), 1));
// -1 : Sacrifice a creature. If you do, search your library for a creature card, reveal it, put it into your hand, then shuffle your library.
this.addAbility(new LoyaltyAbility(new DoIfCostPaid(
new SearchLibraryPutInHandEffect(new TargetCardInLibrary(
StaticFilters.FILTER_CARD_CREATURE_A
), true),
null,
new SacrificeTargetCost(StaticFilters.FILTER_PERMANENT_CREATURE),
false
), -1));
// -3 : Creatures you control gain trample and get +X/+X until end of turn, where X is the number of creature cards in your graveyard.
Ability ability = new LoyaltyAbility(new GainAbilityControlledEffect(
TrampleAbility.getInstance(), Duration.EndOfTurn, StaticFilters.FILTER_CONTROLLED_CREATURE
).setText("creatures you control gain trample"), -3);
ability.addEffect(new BoostControlledEffect(
xValue, xValue, Duration.EndOfTurn
).setText("and get +X/+X until end of turn, where X is the number of creature cards in your graveyard"));
this.addAbility(ability);
}
private GarrukTheVeilCursed(final GarrukTheVeilCursed card) {
super(card);
}
@Override
public GarrukTheVeilCursed copy() {
return new GarrukTheVeilCursed(this);
}
}

View file

@ -1,32 +1,42 @@
package mage.cards.g; package mage.cards.g;
import java.util.UUID; import mage.abilities.common.WerewolfBackTriggeredAbility;
import mage.MageInt;
import mage.abilities.common.WerewolfFrontTriggeredAbility; import mage.abilities.common.WerewolfFrontTriggeredAbility;
import mage.abilities.keyword.TransformAbility; import mage.abilities.keyword.MenaceAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.cards.TransformingDoubleFacedCard;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.SuperType;
import java.util.UUID;
/** /**
*
* @author LevelX2 * @author LevelX2
*/ */
public final class GatstafArsonists extends CardImpl { public final class GatstafArsonists extends TransformingDoubleFacedCard {
public GatstafArsonists(UUID ownerId, CardSetInfo setInfo) { public GatstafArsonists(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{R}"); super(ownerId, setInfo,
this.subtype.add(SubType.HUMAN); new SuperType[]{}, new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN, SubType.WEREWOLF}, "{4}{R}",
this.subtype.add(SubType.WEREWOLF); "Gatstaf Ravagers",
this.power = new MageInt(5); new SuperType[]{}, new CardType[]{CardType.CREATURE}, new SubType[]{SubType.WEREWOLF}, "R"
this.toughness = new MageInt(4); );
this.secondSideCardClazz = mage.cards.g.GatstafRavagers.class; // Gatstaf Arsonists
this.getLeftHalfCard().setPT(5, 4);
// At the beginning of each upkeep, if no spells were cast last turn, transform Gatstaf Arsonists. // At the beginning of each upkeep, if no spells were cast last turn, transform Gatstaf Arsonists.
this.addAbility(new TransformAbility()); this.getLeftHalfCard().addAbility(new WerewolfFrontTriggeredAbility());
this.addAbility(new WerewolfFrontTriggeredAbility());
// Gatstaf Ravagers
this.getRightHalfCard().setPT(6, 5);
// Menace
this.getRightHalfCard().addAbility(new MenaceAbility());
// At the beginning of each upkeep, if a player cast two or more spells last turn, transform Gatstaf Ravagers.
this.getRightHalfCard().addAbility(new WerewolfBackTriggeredAbility());
} }
private GatstafArsonists(final GatstafArsonists card) { private GatstafArsonists(final GatstafArsonists card) {

View file

@ -1,43 +0,0 @@
package mage.cards.g;
import mage.MageInt;
import mage.abilities.common.WerewolfBackTriggeredAbility;
import mage.abilities.keyword.IntimidateAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import java.util.UUID;
/**
* @author nantuko
*/
public final class GatstafHowler extends CardImpl {
public GatstafHowler(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "");
this.subtype.add(SubType.WEREWOLF);
this.color.setGreen(true);
// this card is the second face of double-faced card
this.nightCard = true;
this.power = new MageInt(3);
this.toughness = new MageInt(3);
this.addAbility(IntimidateAbility.getInstance());
// At the beginning of each upkeep, if a player cast two or more spells last turn, transform Gatstaf Howler.
this.addAbility(new WerewolfBackTriggeredAbility());
}
private GatstafHowler(final GatstafHowler card) {
super(card);
}
@Override
public GatstafHowler copy() {
return new GatstafHowler(this);
}
}

View file

@ -1,43 +0,0 @@
package mage.cards.g;
import mage.MageInt;
import mage.abilities.common.WerewolfBackTriggeredAbility;
import mage.abilities.keyword.MenaceAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import java.util.UUID;
/**
* @author LevelX2
*/
public final class GatstafRavagers extends CardImpl {
public GatstafRavagers(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "");
this.subtype.add(SubType.WEREWOLF);
this.power = new MageInt(6);
this.toughness = new MageInt(5);
this.color.setRed(true);
this.nightCard = true;
// Menace
this.addAbility(new MenaceAbility());
// At the beginning of each upkeep, if a player cast two or more spells last turn, transform Gatstaf Ravagers.
this.addAbility(new WerewolfBackTriggeredAbility());
}
private GatstafRavagers(final GatstafRavagers card) {
super(card);
}
@Override
public GatstafRavagers copy() {
return new GatstafRavagers(this);
}
}

View file

@ -1,10 +1,10 @@
package mage.cards.g; package mage.cards.g;
import mage.MageInt; import mage.abilities.common.WerewolfBackTriggeredAbility;
import mage.abilities.common.WerewolfFrontTriggeredAbility; import mage.abilities.common.WerewolfFrontTriggeredAbility;
import mage.abilities.keyword.TransformAbility; import mage.abilities.keyword.IntimidateAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.cards.TransformingDoubleFacedCard;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
@ -13,21 +13,29 @@ import java.util.UUID;
/** /**
* @author nantuko * @author nantuko
*/ */
public final class GatstafShepherd extends CardImpl { public final class GatstafShepherd extends TransformingDoubleFacedCard {
public GatstafShepherd(UUID ownerId, CardSetInfo setInfo) { public GatstafShepherd(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G}"); super(ownerId, setInfo,
this.subtype.add(SubType.HUMAN); new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN, SubType.WEREWOLF}, "{1}{G}",
this.subtype.add(SubType.WEREWOLF); "Gatstaf Howler",
new CardType[]{CardType.CREATURE}, new SubType[]{SubType.WEREWOLF}, "G"
);
this.secondSideCardClazz = mage.cards.g.GatstafHowler.class; // Gatstaf Shepherd
this.getLeftHalfCard().setPT(2, 2);
this.power = new MageInt(2);
this.toughness = new MageInt(2);
// At the beginning of each upkeep, if no spells were cast last turn, transform Gatstaf Shepherd. // At the beginning of each upkeep, if no spells were cast last turn, transform Gatstaf Shepherd.
this.addAbility(new TransformAbility()); this.getLeftHalfCard().addAbility(new WerewolfFrontTriggeredAbility());
this.addAbility(new WerewolfFrontTriggeredAbility());
// Gatstaf Howler
this.getRightHalfCard().setPT(3, 3);
// Intimidate
this.getRightHalfCard().addAbility(IntimidateAbility.getInstance());
// At the beginning of each upkeep, if a player cast two or more spells last turn, transform Gatstaf Howler.
this.getRightHalfCard().addAbility(new WerewolfBackTriggeredAbility());
} }
private GatstafShepherd(final GatstafShepherd card) { private GatstafShepherd(final GatstafShepherd card) {

View file

@ -1,37 +1,56 @@
package mage.cards.g; package mage.cards.g;
import mage.MageInt; import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
import mage.abilities.common.WerewolfBackTriggeredAbility;
import mage.abilities.common.WerewolfFrontTriggeredAbility; import mage.abilities.common.WerewolfFrontTriggeredAbility;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.keyword.HasteAbility; import mage.abilities.keyword.HasteAbility;
import mage.abilities.keyword.TransformAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.cards.TransformingDoubleFacedCard;
import mage.constants.SubType; import mage.constants.*;
import mage.filter.FilterPermanent;
import mage.filter.common.FilterCreaturePermanent;
import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.players.Player;
import java.util.UUID; import java.util.UUID;
/** /**
* @author LevelX2 * @author LevelX2
*/ */
public final class GeierReachBandit extends CardImpl { public final class GeierReachBandit extends TransformingDoubleFacedCard {
private static final FilterPermanent filter = new FilterCreaturePermanent(SubType.WEREWOLF, "a Werewolf");
public GeierReachBandit(UUID ownerId, CardSetInfo setInfo) { public GeierReachBandit(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{R}"); super(ownerId, setInfo,
this.subtype.add(SubType.HUMAN); new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN, SubType.ROGUE, SubType.WEREWOLF}, "{2}{R}",
this.subtype.add(SubType.ROGUE); "Vildin-Pack Alpha",
this.subtype.add(SubType.WEREWOLF); new CardType[]{CardType.CREATURE}, new SubType[]{SubType.WEREWOLF}, "R"
this.power = new MageInt(3); );
this.toughness = new MageInt(2);
this.secondSideCardClazz = mage.cards.v.VildinPackAlpha.class; // Geier Reach Bandit
this.getLeftHalfCard().setPT(3, 2);
// Haste // Haste
this.addAbility(HasteAbility.getInstance()); this.getLeftHalfCard().addAbility(HasteAbility.getInstance());
// At the beginning of each upkeep, if no spells were cast last turn, transform Geier Reach Bandit. // At the beginning of each upkeep, if no spells were cast last turn, transform Geier Reach Bandit.
this.addAbility(new TransformAbility()); this.getLeftHalfCard().addAbility(new WerewolfFrontTriggeredAbility());
this.addAbility(new WerewolfFrontTriggeredAbility());
// Vildin-Pack Alpha
this.getRightHalfCard().setPT(4, 3);
// Whenever a Werewolf you control enters, you may transform it.
this.getRightHalfCard().addAbility(new EntersBattlefieldControlledTriggeredAbility(
Zone.BATTLEFIELD, new VildinPackAlphaEffect(), filter,
true, SetTargetPointer.PERMANENT
));
// At the beginning of each upkeep, if a player cast two or more spells last turn, transform Vildin-Pack Alpha.
this.getRightHalfCard().addAbility(new WerewolfBackTriggeredAbility());
} }
private GeierReachBandit(final GeierReachBandit card) { private GeierReachBandit(final GeierReachBandit card) {
@ -42,4 +61,34 @@ public final class GeierReachBandit extends CardImpl {
public GeierReachBandit copy() { public GeierReachBandit copy() {
return new GeierReachBandit(this); return new GeierReachBandit(this);
} }
} }
class VildinPackAlphaEffect extends OneShotEffect {
VildinPackAlphaEffect() {
super(Outcome.Benefit);
this.staticText = "you may transform it";
}
private VildinPackAlphaEffect(final VildinPackAlphaEffect effect) {
super(effect);
}
@Override
public VildinPackAlphaEffect copy() {
return new VildinPackAlphaEffect(this);
}
@Override
public boolean apply(Game game, Ability source) {
Player controller = game.getPlayer(source.getControllerId());
if (controller == null) {
return false;
}
Permanent werewolf = game.getPermanent(getTargetPointer().getFirst(game, source));
if (werewolf != null) {
werewolf.transform(source, game);
}
return true;
}
}

View file

@ -1,33 +1,56 @@
package mage.cards.g; package mage.cards.g;
import mage.MageInt; import mage.abilities.Ability;
import mage.abilities.common.ActivateAsSorceryActivatedAbility; import mage.abilities.common.ActivateAsSorceryActivatedAbility;
import mage.abilities.common.AttacksTriggeredAbility;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.TransformSourceEffect; import mage.abilities.effects.common.TransformSourceEffect;
import mage.abilities.keyword.TransformAbility; import mage.abilities.effects.common.continuous.SetBasePowerToughnessTargetEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.cards.TransformingDoubleFacedCard;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.SubType; import mage.constants.SubType;
import mage.filter.FilterPermanent;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.mageobject.AnotherPredicate;
import mage.target.TargetPermanent;
import java.util.UUID; import java.util.UUID;
/** /**
* @author TheElk801 * @author TheElk801
*/ */
public final class GnottvoldHermit extends CardImpl { public final class GnottvoldHermit extends TransformingDoubleFacedCard {
private static final FilterPermanent filter = new FilterCreaturePermanent("other target creature");
static {
filter.add(AnotherPredicate.instance);
}
public GnottvoldHermit(UUID ownerId, CardSetInfo setInfo) { public GnottvoldHermit(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{G}"); super(ownerId, setInfo,
new CardType[]{CardType.CREATURE}, new SubType[]{SubType.TROLL}, "{3}{G}",
"Chrome Host Hulk",
new CardType[]{CardType.CREATURE}, new SubType[]{SubType.PHYREXIAN, SubType.TROLL}, "UG"
);
this.subtype.add(SubType.TROLL); // Gnottvold Hermit
this.power = new MageInt(4); this.getLeftHalfCard().setPT(4, 4);
this.toughness = new MageInt(4);
this.secondSideCardClazz = mage.cards.c.ChromeHostHulk.class;
// {5}{U/P}: Transform Gnottvold Hermit. Activate only as a sorcery. // {5}{U/P}: Transform Gnottvold Hermit. Activate only as a sorcery.
this.addAbility(new TransformAbility()); this.getLeftHalfCard().addAbility(new ActivateAsSorceryActivatedAbility(new TransformSourceEffect(), new ManaCostsImpl<>("{5}{U/P}")));
this.addAbility(new ActivateAsSorceryActivatedAbility(new TransformSourceEffect(), new ManaCostsImpl<>("{5}{U/P}")));
// Chrome Host Hulk
this.getRightHalfCard().setPT(5, 5);
// Whenever Chrome Host Hulk attacks, up to one other target creature has base power and toughness 5/5 until end of turn.
Ability ability = new AttacksTriggeredAbility(
new SetBasePowerToughnessTargetEffect(5, 5, Duration.EndOfTurn)
);
ability.addTarget(new TargetPermanent(0, 1, filter));
this.getRightHalfCard().addAbility(ability);
} }
private GnottvoldHermit(final GnottvoldHermit card) { private GnottvoldHermit(final GnottvoldHermit card) {

View file

@ -1,48 +0,0 @@
package mage.cards.g;
import java.util.UUID;
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.mana.AddManaOfAnyColorEffect;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.mana.SimpleManaAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Zone;
import mage.game.permanent.token.GoldForgeGarrisonGolemToken;
/**
*
* @author LevelX2
*/
public final class GoldForgeGarrison extends CardImpl {
public GoldForgeGarrison(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
this.nightCard = true;
// <i>(Transforms from Golden Guardian.)</i>
// {T}: Add two mana of any one color.
this.addAbility(new SimpleManaAbility(Zone.BATTLEFIELD, new AddManaOfAnyColorEffect(2), new TapSourceCost()));
// {4}, {T}: Create a 4/4 colorless Golem artifact creature token.
Ability ability = new SimpleActivatedAbility(new CreateTokenEffect(new GoldForgeGarrisonGolemToken(), 1), new GenericManaCost(4));
ability.addCost(new TapSourceCost());
this.addAbility(ability);
}
private GoldForgeGarrison(final GoldForgeGarrison card) {
super(card);
}
@Override
public GoldForgeGarrison copy() {
return new GoldForgeGarrison(this);
}
}

View file

@ -1,55 +1,76 @@
package mage.cards.g; package mage.cards.g;
import mage.MageInt; import mage.abilities.TriggeredAbilityImpl;
import mage.abilities.common.CastSecondSpellTriggeredAbility; import mage.abilities.common.CastSecondSpellTriggeredAbility;
import mage.abilities.common.SimpleStaticAbility; import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.CantBeCounteredControlledEffect;
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.effects.common.PreventAllDamageToAllEffect; import mage.abilities.effects.common.PreventAllDamageToAllEffect;
import mage.abilities.effects.common.TransformSourceEffect; import mage.abilities.effects.common.TransformSourceEffect;
import mage.abilities.keyword.LivingMetalAbility;
import mage.abilities.keyword.MoreThanMeetsTheEyeAbility; import mage.abilities.keyword.MoreThanMeetsTheEyeAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.cards.TransformingDoubleFacedCard;
import mage.constants.Duration; import mage.constants.*;
import mage.constants.SubType;
import mage.constants.SuperType;
import mage.filter.FilterPermanent; import mage.filter.FilterPermanent;
import mage.filter.FilterSpell;
import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.common.FilterControlledCreaturePermanent;
import mage.filter.predicate.permanent.AttackingPredicate; import mage.filter.predicate.permanent.AttackingPredicate;
import mage.game.Game;
import mage.game.events.GameEvent;
import java.util.Objects;
import java.util.UUID; import java.util.UUID;
/** /**
* @author TheElk801 * @author TheElk801
*/ */
public final class GoldbugHumanitysAlly extends CardImpl { public final class GoldbugHumanitysAlly extends TransformingDoubleFacedCard {
private static final FilterPermanent filter private static final FilterPermanent filter
= new FilterControlledCreaturePermanent(SubType.HUMAN, "attacking Humans you control"); = new FilterControlledCreaturePermanent(SubType.HUMAN, "attacking Humans you control");
private static final FilterSpell humanSpellFilter = new FilterSpell("Human spells");
static { static {
filter.add(AttackingPredicate.instance); filter.add(AttackingPredicate.instance);
humanSpellFilter.add(SubType.HUMAN.getPredicate());
} }
public GoldbugHumanitysAlly(UUID ownerId, CardSetInfo setInfo) { public GoldbugHumanitysAlly(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{1}{W}{U}"); super(ownerId, setInfo,
new SuperType[]{SuperType.LEGENDARY}, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, new SubType[]{SubType.ROBOT}, "{1}{W}{U}",
"Goldbug, Scrappy Scout",
new SuperType[]{SuperType.LEGENDARY}, new CardType[]{CardType.ARTIFACT}, new SubType[]{SubType.VEHICLE}, "WU"
);
this.supertype.add(SuperType.LEGENDARY); // Goldbug, Humanity's Ally
this.subtype.add(SubType.ROBOT); this.getLeftHalfCard().setPT(3, 3);
this.power = new MageInt(3);
this.toughness = new MageInt(3);
this.secondSideCardClazz = mage.cards.g.GoldbugScrappyScout.class;
// More Than Meets the Eye {W}{U} // More Than Meets the Eye {W}{U}
this.addAbility(new MoreThanMeetsTheEyeAbility(this, "{W}{U}")); this.getLeftHalfCard().addAbility(new MoreThanMeetsTheEyeAbility(this, "{W}{U}"));
// Prevent all combat damage that would be dealt to attacking Humans you control. // Prevent all combat damage that would be dealt to attacking Humans you control.
this.addAbility(new SimpleStaticAbility(new PreventAllDamageToAllEffect( this.getLeftHalfCard().addAbility(new SimpleStaticAbility(new PreventAllDamageToAllEffect(
Duration.WhileOnBattlefield, filter, true Duration.WhileOnBattlefield, filter, true
))); )));
// Whenever you cast your second spell each turn, convert Goldbug. // Whenever you cast your second spell each turn, convert Goldbug.
this.addAbility(new CastSecondSpellTriggeredAbility(new TransformSourceEffect().setText("convert {this}"))); this.getLeftHalfCard().addAbility(new CastSecondSpellTriggeredAbility(new TransformSourceEffect().setText("convert {this}")));
// Goldbug, Scrappy Scout
this.getRightHalfCard().setPT(1, 3);
// Living metal
this.getRightHalfCard().addAbility(new LivingMetalAbility());
// Human spells you control can't be countered.
this.getRightHalfCard().addAbility(new SimpleStaticAbility(new CantBeCounteredControlledEffect(
humanSpellFilter, Duration.WhileOnBattlefield
)));
// Whenever Goldbug and at least one Human attack, draw a card and convert Goldbug.
this.getRightHalfCard().addAbility(new GoldbugScrappyScoutTriggeredAbility());
} }
private GoldbugHumanitysAlly(final GoldbugHumanitysAlly card) { private GoldbugHumanitysAlly(final GoldbugHumanitysAlly card) {
@ -61,3 +82,45 @@ public final class GoldbugHumanitysAlly extends CardImpl {
return new GoldbugHumanitysAlly(this); return new GoldbugHumanitysAlly(this);
} }
} }
class GoldbugScrappyScoutTriggeredAbility extends TriggeredAbilityImpl {
GoldbugScrappyScoutTriggeredAbility() {
super(Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(1));
this.addEffect(new TransformSourceEffect());
}
private GoldbugScrappyScoutTriggeredAbility(final GoldbugScrappyScoutTriggeredAbility ability) {
super(ability);
}
@Override
public GoldbugScrappyScoutTriggeredAbility copy() {
return new GoldbugScrappyScoutTriggeredAbility(this);
}
@Override
public boolean checkEventType(GameEvent event, Game game) {
return event.getType() == GameEvent.EventType.DECLARED_ATTACKERS;
}
@Override
public boolean checkTrigger(GameEvent event, Game game) {
return game
.getCombat()
.getAttackers()
.contains(getSourceId())
&& game
.getCombat()
.getAttackers()
.stream()
.map(game::getPermanent)
.filter(Objects::nonNull)
.anyMatch(permanent -> permanent.hasSubtype(SubType.HUMAN, game));
}
@Override
public String getRule() {
return "Whenever {this} and at least one Human attack, draw a card and convert {this}.";
}
}

View file

@ -1,104 +0,0 @@
package mage.cards.g;
import mage.MageInt;
import mage.abilities.TriggeredAbilityImpl;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.CantBeCounteredControlledEffect;
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.effects.common.TransformSourceEffect;
import mage.abilities.keyword.LivingMetalAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.*;
import mage.filter.FilterSpell;
import mage.game.Game;
import mage.game.events.GameEvent;
import java.util.Objects;
import java.util.UUID;
/**
* @author TheElk801
*/
public final class GoldbugScrappyScout extends CardImpl {
private static final FilterSpell filter = new FilterSpell("Human spells");
static {
filter.add(SubType.HUMAN.getPredicate());
}
public GoldbugScrappyScout(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "");
this.supertype.add(SuperType.LEGENDARY);
this.subtype.add(SubType.VEHICLE);
this.power = new MageInt(1);
this.toughness = new MageInt(3);
this.color.setWhite(true);
this.color.setBlue(true);
this.nightCard = true;
// Living metal
this.addAbility(new LivingMetalAbility());
// Human spells you control can't be countered.
this.addAbility(new SimpleStaticAbility(new CantBeCounteredControlledEffect(
filter, Duration.WhileOnBattlefield
)));
// Whenever Goldbug and at least one Human attack, draw a card and convert Goldbug.
this.addAbility(new GoldbugScrappyScoutTriggeredAbility());
}
private GoldbugScrappyScout(final GoldbugScrappyScout card) {
super(card);
}
@Override
public GoldbugScrappyScout copy() {
return new GoldbugScrappyScout(this);
}
}
class GoldbugScrappyScoutTriggeredAbility extends TriggeredAbilityImpl {
GoldbugScrappyScoutTriggeredAbility() {
super(Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(1));
this.addEffect(new TransformSourceEffect());
}
private GoldbugScrappyScoutTriggeredAbility(final GoldbugScrappyScoutTriggeredAbility ability) {
super(ability);
}
@Override
public GoldbugScrappyScoutTriggeredAbility copy() {
return new GoldbugScrappyScoutTriggeredAbility(this);
}
@Override
public boolean checkEventType(GameEvent event, Game game) {
return event.getType() == GameEvent.EventType.DECLARED_ATTACKERS;
}
@Override
public boolean checkTrigger(GameEvent event, Game game) {
return game
.getCombat()
.getAttackers()
.contains(getSourceId())
&& game
.getCombat()
.getAttackers()
.stream()
.map(game::getPermanent)
.filter(Objects::nonNull)
.anyMatch(permanent -> permanent.hasSubtype(SubType.HUMAN, game));
}
@Override
public String getRule() {
return "Whenever {this} and at least one Human attack, draw a card and convert {this}.";
}
}

View file

@ -1,23 +1,27 @@
package mage.cards.g; package mage.cards.g;
import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.DelayedTriggeredAbility; import mage.abilities.DelayedTriggeredAbility;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.CreateDelayedTriggeredAbilityEffect; import mage.abilities.effects.common.CreateDelayedTriggeredAbilityEffect;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.FightTargetSourceEffect; import mage.abilities.effects.common.FightTargetSourceEffect;
import mage.abilities.effects.mana.AddManaOfAnyColorEffect;
import mage.abilities.keyword.DefenderAbility; import mage.abilities.keyword.DefenderAbility;
import mage.abilities.keyword.TransformAbility; import mage.abilities.keyword.TransformAbility;
import mage.abilities.mana.SimpleManaAbility;
import mage.cards.Card; import mage.cards.Card;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.cards.TransformingDoubleFacedCard;
import mage.constants.*; import mage.constants.*;
import mage.filter.StaticFilters; import mage.filter.StaticFilters;
import mage.game.Game; import mage.game.Game;
import mage.game.events.GameEvent; import mage.game.events.GameEvent;
import mage.game.events.ZoneChangeEvent; import mage.game.events.ZoneChangeEvent;
import mage.game.permanent.token.GoldForgeGarrisonGolemToken;
import mage.players.Player; import mage.players.Player;
import mage.target.TargetPermanent; import mage.target.TargetPermanent;
@ -26,26 +30,35 @@ import java.util.UUID;
/** /**
* @author LevelX2 * @author LevelX2
*/ */
public final class GoldenGuardian extends CardImpl { public final class GoldenGuardian extends TransformingDoubleFacedCard {
public GoldenGuardian(UUID ownerId, CardSetInfo setInfo) { public GoldenGuardian(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{4}"); super(ownerId, setInfo,
new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, new SubType[]{SubType.GOLEM}, "{4}",
"Gold-Forge Garrison",
new CardType[]{CardType.LAND}, new SubType[]{}, ""
);
this.subtype.add(SubType.GOLEM); // Golden Guardian
this.power = new MageInt(4); this.getLeftHalfCard().setPT(4, 4);
this.toughness = new MageInt(4);
this.secondSideCardClazz = mage.cards.g.GoldForgeGarrison.class;
// Defender // Defender
this.addAbility(DefenderAbility.getInstance()); this.getLeftHalfCard().addAbility(DefenderAbility.getInstance());
// {2}: Golden Guardian fights another target creature you control. When Golden Guardian dies this turn, return it to the battlefield transformed under your control. // {2}: Golden Guardian fights another target creature you control. When Golden Guardian dies this turn, return it to the battlefield transformed under your control.
this.addAbility(new TransformAbility());
Ability ability = new SimpleActivatedAbility(new FightTargetSourceEffect(), new GenericManaCost(2)); Ability ability = new SimpleActivatedAbility(new FightTargetSourceEffect(), new GenericManaCost(2));
ability.addTarget(new TargetPermanent(StaticFilters.FILTER_ANOTHER_TARGET_CREATURE_YOU_CONTROL)); ability.addTarget(new TargetPermanent(StaticFilters.FILTER_ANOTHER_TARGET_CREATURE_YOU_CONTROL));
ability.addEffect(new CreateDelayedTriggeredAbilityEffect(new GoldenGuardianDelayedTriggeredAbility(), false)); ability.addEffect(new CreateDelayedTriggeredAbilityEffect(new GoldenGuardianDelayedTriggeredAbility(), false));
this.addAbility(ability); this.getLeftHalfCard().addAbility(ability);
// Gold-Forge Garrison
// {T}: Add two mana of any one color.
this.getRightHalfCard().addAbility(new SimpleManaAbility(Zone.BATTLEFIELD, new AddManaOfAnyColorEffect(2), new TapSourceCost()));
// {4}, {T}: Create a 4/4 colorless Golem artifact creature token.
Ability backAbility = new SimpleActivatedAbility(new CreateTokenEffect(new GoldForgeGarrisonGolemToken(), 1), new GenericManaCost(4));
backAbility.addCost(new TapSourceCost());
this.getRightHalfCard().addAbility(backAbility);
} }
private GoldenGuardian(final GoldenGuardian card) { private GoldenGuardian(final GoldenGuardian card) {
@ -60,7 +73,7 @@ public final class GoldenGuardian extends CardImpl {
class GoldenGuardianDelayedTriggeredAbility extends DelayedTriggeredAbility { class GoldenGuardianDelayedTriggeredAbility extends DelayedTriggeredAbility {
public GoldenGuardianDelayedTriggeredAbility() { GoldenGuardianDelayedTriggeredAbility() {
super(new GoldenGuardianReturnTransformedEffect(), Duration.EndOfTurn); super(new GoldenGuardianReturnTransformedEffect(), Duration.EndOfTurn);
setTriggerPhrase("When {this} dies this turn, "); setTriggerPhrase("When {this} dies this turn, ");
} }

View file

@ -2,18 +2,26 @@ package mage.cards.g;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.AttacksAloneControlledTriggeredAbility; import mage.abilities.common.AttacksAloneControlledTriggeredAbility;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.condition.Condition; import mage.abilities.condition.Condition;
import mage.abilities.condition.common.SourceHasCounterCondition; import mage.abilities.condition.common.SourceHasCounterCondition;
import mage.abilities.costs.common.RemoveCountersSourceCost;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.decorator.ConditionalOneShotEffect; import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.effects.common.LoseLifeSourceControllerEffect;
import mage.abilities.effects.common.TransformSourceEffect; import mage.abilities.effects.common.TransformSourceEffect;
import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; import mage.abilities.effects.common.continuous.GainAbilityTargetEffect;
import mage.abilities.effects.common.counter.AddCountersSourceEffect; import mage.abilities.effects.common.counter.AddCountersSourceEffect;
import mage.abilities.keyword.DeathtouchAbility; import mage.abilities.keyword.DeathtouchAbility;
import mage.abilities.keyword.LifelinkAbility; import mage.abilities.keyword.LifelinkAbility;
import mage.abilities.keyword.TransformAbility; import mage.abilities.mana.BlackManaAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.cards.TransformingDoubleFacedCard;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.SuperType;
import mage.counters.CounterType; import mage.counters.CounterType;
import java.util.UUID; import java.util.UUID;
@ -21,14 +29,18 @@ import java.util.UUID;
/** /**
* @author TheElk801 * @author TheElk801
*/ */
public final class GraspingShadows extends CardImpl { public final class GraspingShadows extends TransformingDoubleFacedCard {
private static final Condition condition = new SourceHasCounterCondition(CounterType.DREAD, 3); private static final Condition condition = new SourceHasCounterCondition(CounterType.DREAD, 3);
public GraspingShadows(UUID ownerId, CardSetInfo setInfo) { public GraspingShadows(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{B}"); super(ownerId, setInfo,
this.secondSideCardClazz = mage.cards.s.ShadowsLair.class; new SuperType[]{}, new CardType[]{CardType.ENCHANTMENT}, new SubType[]{}, "{3}{B}",
"Shadows' Lair",
new SuperType[]{}, new CardType[]{CardType.LAND}, new SubType[]{SubType.CAVE}, ""
);
// Grasping Shadows
// Whenever a creature you control attacks alone, it gains deathtouch and lifelink until end of turn. Put a dread counter on Grasping Shadows. Then if there are three or more dread counters on it, transform it. // Whenever a creature you control attacks alone, it gains deathtouch and lifelink until end of turn. Put a dread counter on Grasping Shadows. Then if there are three or more dread counters on it, transform it.
Ability ability = new AttacksAloneControlledTriggeredAbility( Ability ability = new AttacksAloneControlledTriggeredAbility(
new GainAbilityTargetEffect(DeathtouchAbility.getInstance()) new GainAbilityTargetEffect(DeathtouchAbility.getInstance())
@ -42,8 +54,20 @@ public final class GraspingShadows extends CardImpl {
new TransformSourceEffect(), condition, new TransformSourceEffect(), condition,
"Then if there are three or more dread counters on it, transform it" "Then if there are three or more dread counters on it, transform it"
)); ));
this.addAbility(new TransformAbility()); this.getLeftHalfCard().addAbility(ability);
this.addAbility(ability);
// Shadows' Lair
// {T}: Add {B}.
this.getRightHalfCard().addAbility(new BlackManaAbility());
// {B}, {T}, Remove a dread counter from Shadows' Lair: You draw a card and you lose 1 life.
Ability backAbility = new SimpleActivatedAbility(
new DrawCardSourceControllerEffect(1, true), new ManaCostsImpl<>("{B}")
);
backAbility.addCost(new TapSourceCost());
backAbility.addCost(new RemoveCountersSourceCost(CounterType.DREAD.createInstance()));
backAbility.addEffect(new LoseLifeSourceControllerEffect(1).concatBy("and"));
this.getRightHalfCard().addAbility(backAbility);
} }
private GraspingShadows(final GraspingShadows card) { private GraspingShadows(final GraspingShadows card) {

View file

@ -1,99 +0,0 @@
package mage.cards.g;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldOrAttacksSourceTriggeredAbility;
import mage.abilities.costs.common.DiscardCardCost;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.keyword.NightboundAbility;
import mage.abilities.keyword.WardAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.cards.Cards;
import mage.cards.CardsImpl;
import mage.constants.CardType;
import mage.constants.Outcome;
import mage.constants.SubType;
import mage.constants.Zone;
import mage.filter.StaticFilters;
import mage.game.Game;
import mage.players.Player;
import mage.target.common.TargetCardInGraveyard;
import java.util.UUID;
/**
* @author TheElk801
*/
public final class GraveyardGlutton extends CardImpl {
public GraveyardGlutton(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "");
this.subtype.add(SubType.WEREWOLF);
this.power = new MageInt(4);
this.toughness = new MageInt(4);
this.color.setBlack(true);
this.nightCard = true;
// WardDiscard a card.
this.addAbility(new WardAbility(new DiscardCardCost(), false));
// Whenever Graveyard Glutton enters the battlefield or attacks, exile up to two target cards from graveyards. For each creature card exiled this way, each opponent loses 1 life and you gain 1 life.
Ability ability = new EntersBattlefieldOrAttacksSourceTriggeredAbility(new GraveyardGluttonEffect());
ability.addTarget(new TargetCardInGraveyard(0, 2));
this.addAbility(ability);
// Nightbound
this.addAbility(new NightboundAbility());
}
private GraveyardGlutton(final GraveyardGlutton card) {
super(card);
}
@Override
public GraveyardGlutton copy() {
return new GraveyardGlutton(this);
}
}
class GraveyardGluttonEffect extends OneShotEffect {
GraveyardGluttonEffect() {
super(Outcome.Benefit);
staticText = "exile up to two target cards from graveyards. " +
"For each creature card exiled this way, each opponent loses 1 life and you gain 1 life";
}
private GraveyardGluttonEffect(final GraveyardGluttonEffect effect) {
super(effect);
}
@Override
public GraveyardGluttonEffect copy() {
return new GraveyardGluttonEffect(this);
}
@Override
public boolean apply(Game game, Ability source) {
Player player = game.getPlayer(source.getControllerId());
Cards cards = new CardsImpl(getTargetPointer().getTargets(game, source));
if (player == null || cards.isEmpty()) {
return false;
}
player.moveCards(cards, Zone.EXILED, source, game);
int amount = cards.count(StaticFilters.FILTER_CARD_CREATURE, game);
if (amount < 1) {
return true;
}
player.gainLife(amount, game, source);
for (UUID opponentId : game.getOpponents(source.getControllerId())) {
Player opponent = game.getPlayer(opponentId);
if (opponent != null) {
opponent.loseLife(amount, game, source, false);
}
}
return true;
}
}

View file

@ -1,16 +1,16 @@
package mage.cards.g; package mage.cards.g;
import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldOrAttacksSourceTriggeredAbility; import mage.abilities.common.EntersBattlefieldOrAttacksSourceTriggeredAbility;
import mage.abilities.costs.common.DiscardCardCost; import mage.abilities.costs.common.DiscardCardCost;
import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.OneShotEffect;
import mage.abilities.keyword.DayboundAbility; import mage.abilities.keyword.DayboundAbility;
import mage.abilities.keyword.NightboundAbility;
import mage.abilities.keyword.WardAbility; import mage.abilities.keyword.WardAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.cards.Cards; import mage.cards.Cards;
import mage.cards.CardsImpl; import mage.cards.CardsImpl;
import mage.cards.TransformingDoubleFacedCard;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.Outcome; import mage.constants.Outcome;
import mage.constants.SubType; import mage.constants.SubType;
@ -25,27 +25,42 @@ import java.util.UUID;
/** /**
* @author TheElk801 * @author TheElk801
*/ */
public final class GraveyardTrespasser extends CardImpl { public final class GraveyardTrespasser extends TransformingDoubleFacedCard {
public GraveyardTrespasser(UUID ownerId, CardSetInfo setInfo) { public GraveyardTrespasser(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}"); super(ownerId, setInfo,
new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN, SubType.WEREWOLF}, "{2}{B}",
"Graveyard Glutton",
new CardType[]{CardType.CREATURE}, new SubType[]{SubType.WEREWOLF}, "B"
);
this.subtype.add(SubType.HUMAN); // Graveyard Trespasser
this.subtype.add(SubType.WEREWOLF); this.getLeftHalfCard().setPT(3, 3);
this.power = new MageInt(3);
this.toughness = new MageInt(3);
this.secondSideCardClazz = mage.cards.g.GraveyardGlutton.class;
// WardDiscard a card. // WardDiscard a card.
this.addAbility(new WardAbility(new DiscardCardCost(), false)); this.getLeftHalfCard().addAbility(new WardAbility(new DiscardCardCost(), false));
// Whenever Graveyard Trespasser enters the battlefield or attacks, exile up to one target card from a graveyard. If a creature card was exiled this way, each opponent loses 1 life and you gain 1 life. // Whenever Graveyard Trespasser enters the battlefield or attacks, exile up to one target card from a graveyard. If a creature card was exiled this way, each opponent loses 1 life and you gain 1 life.
Ability ability = new EntersBattlefieldOrAttacksSourceTriggeredAbility(new GraveyardTrespasserEffect()); Ability ability = new EntersBattlefieldOrAttacksSourceTriggeredAbility(new GraveyardTrespasserEffect());
ability.addTarget(new TargetCardInGraveyard(0, 1)); ability.addTarget(new TargetCardInGraveyard(0, 1));
this.addAbility(ability); this.getLeftHalfCard().addAbility(ability);
// Daybound // Daybound
this.addAbility(new DayboundAbility()); this.getLeftHalfCard().addAbility(new DayboundAbility());
// Graveyard Glutton
this.getRightHalfCard().setPT(4, 4);
// WardDiscard a card.
this.getRightHalfCard().addAbility(new WardAbility(new DiscardCardCost(), false));
// Whenever Graveyard Glutton enters the battlefield or attacks, exile up to two target cards from graveyards. For each creature card exiled this way, each opponent loses 1 life and you gain 1 life.
Ability backAbility = new EntersBattlefieldOrAttacksSourceTriggeredAbility(new GraveyardGluttonEffect());
backAbility.addTarget(new TargetCardInGraveyard(0, 2));
this.getRightHalfCard().addAbility(backAbility);
// Nightbound
this.getRightHalfCard().addAbility(new NightboundAbility());
} }
private GraveyardTrespasser(final GraveyardTrespasser card) { private GraveyardTrespasser(final GraveyardTrespasser card) {
@ -98,3 +113,43 @@ class GraveyardTrespasserEffect extends OneShotEffect {
return true; return true;
} }
} }
class GraveyardGluttonEffect extends OneShotEffect {
GraveyardGluttonEffect() {
super(Outcome.Benefit);
staticText = "exile up to two target cards from graveyards. " +
"For each creature card exiled this way, each opponent loses 1 life and you gain 1 life";
}
private GraveyardGluttonEffect(final GraveyardGluttonEffect effect) {
super(effect);
}
@Override
public GraveyardGluttonEffect copy() {
return new GraveyardGluttonEffect(this);
}
@Override
public boolean apply(Game game, Ability source) {
Player player = game.getPlayer(source.getControllerId());
Cards cards = new CardsImpl(getTargetPointer().getTargets(game, source));
if (player == null || cards.isEmpty()) {
return false;
}
player.moveCards(cards, Zone.EXILED, source, game);
int amount = cards.count(StaticFilters.FILTER_CARD_CREATURE, game);
if (amount < 1) {
return true;
}
player.gainLife(amount, game, source);
for (UUID opponentId : game.getOpponents(source.getControllerId())) {
Player opponent = game.getPlayer(opponentId);
if (opponent != null) {
opponent.loseLife(amount, game, source, false);
}
}
return true;
}
}

View file

@ -1,61 +1,71 @@
package mage.cards.g; package mage.cards.g;
import java.util.UUID; import mage.MageObject;
import mage.MageInt;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.common.SimpleStaticAbility; import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.TransformSourceEffect; import mage.abilities.effects.common.TransformSourceEffect;
import mage.abilities.effects.common.continuous.BoostControlledEffect; import mage.abilities.effects.common.continuous.BoostControlledEffect;
import mage.abilities.keyword.TrampleAbility;
import mage.abilities.keyword.TransformAbility; import mage.abilities.keyword.TransformAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.cards.TransformingDoubleFacedCard;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.SuperType; import mage.constants.SuperType;
import mage.constants.Zone;
import mage.filter.common.FilterCreaturePermanent; import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.Predicates; import mage.filter.predicate.Predicates;
import mage.filter.predicate.mageobject.AbilityPredicate; import mage.filter.predicate.mageobject.AbilityPredicate;
import mage.filter.predicate.permanent.TransformedPredicate; import mage.filter.predicate.permanent.TransformedPredicate;
import java.util.UUID;
/** /**
*
* @author Saga * @author Saga
*/ */
public final class GrimlockDinobotLeader extends CardImpl{ public final class GrimlockDinobotLeader extends TransformingDoubleFacedCard {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Dinosaurs and Vehicles"); private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Dinosaurs and Vehicles you control");
static { static {
filter.add(Predicates.or(SubType.DINOSAUR.getPredicate(), SubType.VEHICLE.getPredicate())); filter.add(Predicates.<MageObject>or(
SubType.DINOSAUR.getPredicate(),
SubType.VEHICLE.getPredicate())
);
} }
private static final FilterCreaturePermanent filter2 = new FilterCreaturePermanent("Transformers creatures"); private static final FilterCreaturePermanent filter2 = new FilterCreaturePermanent("Transformers creatures");
static { static {
filter2.add(Predicates.not(SubType.DINOSAUR.getPredicate())); filter2.add(Predicates.not(SubType.DINOSAUR.getPredicate()));
filter2.add(Predicates.not(SubType.VEHICLE.getPredicate())); filter2.add(Predicates.not(SubType.VEHICLE.getPredicate()));
filter2.add(Predicates.or(new AbilityPredicate(TransformAbility.class), TransformedPredicate.instance)); filter2.add(Predicates.or(new AbilityPredicate(TransformAbility.class), TransformedPredicate.instance));
} }
public GrimlockDinobotLeader(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT,CardType.CREATURE}, "{1}{R}{G}{W}");
this.supertype.add(SuperType.LEGENDARY);
this.subtype.add(SubType.AUTOBOT);
this.power = new MageInt(4);
this.toughness = new MageInt(4);
this.secondSideCardClazz = mage.cards.g.GrimlockFerociousKing.class; public GrimlockDinobotLeader(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo,
new SuperType[]{SuperType.LEGENDARY}, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, new SubType[]{SubType.AUTOBOT}, "{1}{R}{G}{W}",
"Grimlock, Ferocious King",
new SuperType[]{SuperType.LEGENDARY}, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, new SubType[]{SubType.DINOSAUR}, "RGW"
);
// Grimlock, Dinobot Leader
this.getLeftHalfCard().setPT(4, 4);
// Dinosaurs, Vehicles and other Transformers creatures you control get +2/+0. // Dinosaurs, Vehicles and other Transformers creatures you control get +2/+0.
this.addAbility(new SimpleStaticAbility(new BoostControlledEffect(2, 0, Duration.WhileOnBattlefield, filter, false))); this.getLeftHalfCard().addAbility(new SimpleStaticAbility(new BoostControlledEffect(2, 0, Duration.WhileOnBattlefield, filter, false)));
this.addAbility(new SimpleStaticAbility(new BoostControlledEffect(2, 0, Duration.WhileOnBattlefield, filter2, true))); this.getLeftHalfCard().addAbility(new SimpleStaticAbility(new BoostControlledEffect(2, 0, Duration.WhileOnBattlefield, filter2, true)));
// {2}: Grimlock, Dinobot Leader becomes Grimlock, Ferocious King. // {2}: Grimlock, Dinobot Leader becomes Grimlock, Ferocious King.
this.addAbility(new TransformAbility()); this.getLeftHalfCard().addAbility(new SimpleActivatedAbility(new TransformSourceEffect(), new ManaCostsImpl<>("{2}")));
this.addAbility(new SimpleActivatedAbility(new TransformSourceEffect(), new ManaCostsImpl<>("{2}")));
// Grimlock, Ferocious King
this.getRightHalfCard().setPT(8, 8);
// Trample
this.getRightHalfCard().addAbility(TrampleAbility.getInstance());
// {2}: Grimlock, Ferocious King becomes Grimlock, Dinobot Leader.
this.getRightHalfCard().addAbility(new SimpleActivatedAbility(new TransformSourceEffect(), new ManaCostsImpl<>("{2}")));
} }
private GrimlockDinobotLeader(final GrimlockDinobotLeader card) { private GrimlockDinobotLeader(final GrimlockDinobotLeader card) {
@ -66,5 +76,4 @@ public final class GrimlockDinobotLeader extends CardImpl{
public GrimlockDinobotLeader copy() { public GrimlockDinobotLeader copy() {
return new GrimlockDinobotLeader(this); return new GrimlockDinobotLeader(this);
} }
} }

View file

@ -1,53 +0,0 @@
package mage.cards.g;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.TransformSourceEffect;
import mage.abilities.keyword.TrampleAbility;
import mage.abilities.keyword.TransformAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.SuperType;
import mage.constants.Zone;
/**
*
* @author Saga
*/
public final class GrimlockFerociousKing extends CardImpl{
public GrimlockFerociousKing(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT,CardType.CREATURE},"");
this.supertype.add(SuperType.LEGENDARY);
this.subtype.add(SubType.DINOSAUR);
this.power = new MageInt(8);
this.toughness = new MageInt(8);
this.color.setRed(true);
this.color.setGreen(true);
this.color.setWhite(true);
this.nightCard = true;
// Trample
this.addAbility(TrampleAbility.getInstance());
// {2}: Grimlock, Ferocious King becomes Grimlock, Dinobot Leader.
this.addAbility(new TransformAbility());
this.addAbility(new SimpleActivatedAbility(new TransformSourceEffect(), new ManaCostsImpl<>("{2}")));
}
private GrimlockFerociousKing(final GrimlockFerociousKing card) {
super(card);
}
@Override
public GrimlockFerociousKing copy() {
return new GrimlockFerociousKing(this);
}
}

View file

@ -1,45 +0,0 @@
package mage.cards.g;
import mage.MageInt;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.combat.AttacksIfAbleAllEffect;
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 fireshoes
*/
public final class GrislyAnglerfish extends CardImpl {
public GrislyAnglerfish(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "");
this.subtype.add(SubType.ELDRAZI);
this.subtype.add(SubType.FISH);
this.power = new MageInt(4);
this.toughness = new MageInt(5);
// this card is the second face of double-faced card
this.nightCard = true;
// {6}: Creatures your opponents control attack this turn if able.
this.addAbility(new SimpleActivatedAbility(new AttacksIfAbleAllEffect(
StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURES, Duration.EndOfTurn
), new ManaCostsImpl<>("{6}")));
}
private GrislyAnglerfish(final GrislyAnglerfish card) {
super(card);
}
@Override
public GrislyAnglerfish copy() {
return new GrislyAnglerfish(this);
}
}

View file

@ -1,20 +1,22 @@
package mage.cards.g; package mage.cards.g;
import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.condition.Condition; import mage.abilities.condition.Condition;
import mage.abilities.condition.common.CardsInControllerGraveyardCondition; import mage.abilities.condition.common.CardsInControllerGraveyardCondition;
import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.decorator.ConditionalOneShotEffect; import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.MillCardsControllerEffect; import mage.abilities.effects.common.MillCardsControllerEffect;
import mage.abilities.effects.common.TransformSourceEffect; import mage.abilities.effects.common.TransformSourceEffect;
import mage.abilities.keyword.TransformAbility; import mage.abilities.effects.common.combat.AttacksIfAbleAllEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.cards.TransformingDoubleFacedCard;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.SubType; import mage.constants.SubType;
import mage.filter.FilterCard; import mage.filter.FilterCard;
import mage.filter.StaticFilters;
import mage.filter.common.FilterCreatureCard; import mage.filter.common.FilterCreatureCard;
import mage.filter.predicate.mageobject.ColorlessPredicate; import mage.filter.predicate.mageobject.ColorlessPredicate;
@ -23,7 +25,7 @@ import java.util.UUID;
/** /**
* @author fireshoes * @author fireshoes
*/ */
public final class GrizzledAngler extends CardImpl { public final class GrizzledAngler extends TransformingDoubleFacedCard {
private static final FilterCard filter = new FilterCreatureCard(); private static final FilterCard filter = new FilterCreatureCard();
@ -34,21 +36,30 @@ public final class GrizzledAngler extends CardImpl {
private static final Condition condition = new CardsInControllerGraveyardCondition(1, filter); private static final Condition condition = new CardsInControllerGraveyardCondition(1, filter);
public GrizzledAngler(UUID ownerId, CardSetInfo setInfo) { public GrizzledAngler(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{U}"); super(ownerId, setInfo,
this.subtype.add(SubType.HUMAN); new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN}, "{2}{U}",
this.power = new MageInt(2); "Grisly Anglerfish",
this.toughness = new MageInt(3); new CardType[]{CardType.CREATURE}, new SubType[]{SubType.ELDRAZI, SubType.FISH}, ""
);
this.secondSideCardClazz = mage.cards.g.GrislyAnglerfish.class; // Grizzled Angler
this.getLeftHalfCard().setPT(2, 3);
// {T}: Put the top two cards of your library into your graveyard. Then if there is a colorless creature card in your graveyard, transform Grizzled Angler. // {T}: Put the top two cards of your library into your graveyard. Then if there is a colorless creature card in your graveyard, transform Grizzled Angler.
this.addAbility(new TransformAbility());
Ability ability = new SimpleActivatedAbility(new MillCardsControllerEffect(2), new TapSourceCost()); Ability ability = new SimpleActivatedAbility(new MillCardsControllerEffect(2), new TapSourceCost());
ability.addEffect(new ConditionalOneShotEffect( ability.addEffect(new ConditionalOneShotEffect(
new TransformSourceEffect(), condition, new TransformSourceEffect(), condition,
"Then if there is a colorless creature card in your graveyard, transform {this}" "Then if there is a colorless creature card in your graveyard, transform {this}"
)); ));
this.addAbility(ability); this.getLeftHalfCard().addAbility(ability);
// Grisly Anglerfish
this.getRightHalfCard().setPT(4, 5);
// {6}: Creatures your opponents control attack this turn if able.
this.getRightHalfCard().addAbility(new SimpleActivatedAbility(new AttacksIfAbleAllEffect(
StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURES, Duration.EndOfTurn
), new ManaCostsImpl<>("{6}")));
} }
private GrizzledAngler(final GrizzledAngler card) { private GrizzledAngler(final GrizzledAngler card) {

View file

@ -1,33 +1,38 @@
package mage.cards.g; package mage.cards.g;
import mage.MageInt; import mage.abilities.common.WerewolfBackTriggeredAbility;
import mage.abilities.common.WerewolfFrontTriggeredAbility; import mage.abilities.common.WerewolfFrontTriggeredAbility;
import mage.abilities.keyword.TransformAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.cards.TransformingDoubleFacedCard;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.SuperType;
import java.util.UUID; import java.util.UUID;
/** /**
* @author nantuko * @author nantuko
*/ */
public final class GrizzledOutcasts extends CardImpl { public final class GrizzledOutcasts extends TransformingDoubleFacedCard {
public GrizzledOutcasts(UUID ownerId, CardSetInfo setInfo) { public GrizzledOutcasts(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{G}"); super(ownerId, setInfo,
this.subtype.add(SubType.HUMAN); new SuperType[]{}, new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN, SubType.WEREWOLF}, "{4}{G}",
this.subtype.add(SubType.WEREWOLF); "Krallenhorde Wantons",
new SuperType[]{}, new CardType[]{CardType.CREATURE}, new SubType[]{SubType.WEREWOLF}, "G"
);
this.secondSideCardClazz = mage.cards.k.KrallenhordeWantons.class; // Grizzled Outcasts
this.getLeftHalfCard().setPT(4, 4);
this.power = new MageInt(4);
this.toughness = new MageInt(4);
// At the beginning of each upkeep, if no spells were cast last turn, transform Grizzled Outcasts. // At the beginning of each upkeep, if no spells were cast last turn, transform Grizzled Outcasts.
this.addAbility(new TransformAbility()); this.getLeftHalfCard().addAbility(new WerewolfFrontTriggeredAbility());
this.addAbility(new WerewolfFrontTriggeredAbility());
// Krallenhorde Wantons
this.getRightHalfCard().setPT(7, 7);
// At the beginning of each upkeep, if a player cast two or more spells last turn, transform Krallenhorde Wantons.
this.getRightHalfCard().addAbility(new WerewolfBackTriggeredAbility());
} }
private GrizzledOutcasts(final GrizzledOutcasts card) { private GrizzledOutcasts(final GrizzledOutcasts card) {

View file

@ -1,19 +1,19 @@
package mage.cards.g; package mage.cards.g;
import mage.Mana;
import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.condition.Condition; import mage.abilities.condition.Condition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition; import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.dynamicvalue.common.CreaturesYouControlCount;
import mage.abilities.effects.common.LookLibraryAndPickControllerEffect; import mage.abilities.effects.common.LookLibraryAndPickControllerEffect;
import mage.abilities.effects.common.TransformSourceEffect; import mage.abilities.effects.common.TransformSourceEffect;
import mage.abilities.hint.common.CreaturesYouControlHint; import mage.abilities.hint.common.CreaturesYouControlHint;
import mage.abilities.keyword.TransformAbility; import mage.abilities.mana.DynamicManaAbility;
import mage.abilities.mana.GreenManaAbility;
import mage.abilities.triggers.BeginningOfEndStepTriggeredAbility; import mage.abilities.triggers.BeginningOfEndStepTriggeredAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.cards.TransformingDoubleFacedCard;
import mage.constants.ComparisonType; import mage.constants.*;
import mage.constants.PutCards;
import mage.constants.SuperType;
import mage.filter.StaticFilters; import mage.filter.StaticFilters;
import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.common.FilterControlledCreaturePermanent;
@ -22,7 +22,7 @@ import java.util.UUID;
/** /**
* @author JRHerlehy * @author JRHerlehy
*/ */
public final class GrowingRitesOfItlimoc extends CardImpl { public final class GrowingRitesOfItlimoc extends TransformingDoubleFacedCard {
private static final Condition condition = new PermanentsOnTheBattlefieldCondition( private static final Condition condition = new PermanentsOnTheBattlefieldCondition(
new FilterControlledCreaturePermanent("you control four or more creatures"), new FilterControlledCreaturePermanent("you control four or more creatures"),
@ -30,23 +30,30 @@ public final class GrowingRitesOfItlimoc extends CardImpl {
); );
public GrowingRitesOfItlimoc(UUID ownerId, CardSetInfo setInfo) { public GrowingRitesOfItlimoc(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{G}"); super(ownerId, setInfo,
new SuperType[]{SuperType.LEGENDARY}, new CardType[]{CardType.ENCHANTMENT}, new SubType[]{}, "{2}{G}",
"Itlimoc, Cradle of the Sun",
new SuperType[]{SuperType.LEGENDARY}, new CardType[]{CardType.LAND}, new SubType[]{}, ""
);
this.supertype.add(SuperType.LEGENDARY); // Growing Rites of Itlimoc
// When Growing Rites of Itlimoc enters the battlefield, look at the top four cards of your library. You may reveal a creature card from among them and put it into your hand. Put the rest on the bottom of your library in any order.
this.secondSideCardClazz = mage.cards.i.ItlimocCradleOfTheSun.class; this.getLeftHalfCard().addAbility(new EntersBattlefieldTriggeredAbility(new LookLibraryAndPickControllerEffect(
// When Growing Rites of Itlimoc enters the battlefield, look at the top four cards of your library.
// You may reveal a creature card from among them and put it into your hand.
// Put the rest on the bottom of your library in any order.
this.addAbility(new EntersBattlefieldTriggeredAbility(new LookLibraryAndPickControllerEffect(
4, 1, StaticFilters.FILTER_CARD_CREATURE_A, PutCards.HAND, PutCards.BOTTOM_ANY 4, 1, StaticFilters.FILTER_CARD_CREATURE_A, PutCards.HAND, PutCards.BOTTOM_ANY
))); )));
// At the beginning of your end step, if you control four or more creatures, transform Growing Rites of Itlimoc. // At the beginning of your end step, if you control four or more creatures, transform Growing Rites of Itlimoc.
this.addAbility(new TransformAbility()); this.getLeftHalfCard().addAbility(new BeginningOfEndStepTriggeredAbility(new TransformSourceEffect())
this.addAbility(new BeginningOfEndStepTriggeredAbility(new TransformSourceEffect())
.withInterveningIf(condition).addHint(CreaturesYouControlHint.instance)); .withInterveningIf(condition).addHint(CreaturesYouControlHint.instance));
// Itlimoc, Cradle of the Sun
// {T}: Add {G}.
this.getRightHalfCard().addAbility(new GreenManaAbility());
// {T}: Add {G} for each creature you control.
this.getRightHalfCard().addAbility(new DynamicManaAbility(
Mana.GreenMana(1), CreaturesYouControlCount.SINGULAR
).addHint(CreaturesYouControlHint.instance));
} }
private GrowingRitesOfItlimoc(final GrowingRitesOfItlimoc card) { private GrowingRitesOfItlimoc(final GrowingRitesOfItlimoc card) {

View file

@ -1,71 +0,0 @@
package mage.cards.g;
import mage.abilities.Ability;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.condition.Condition;
import mage.abilities.decorator.ConditionalRestrictionEffect;
import mage.abilities.effects.common.AttachEffect;
import mage.abilities.effects.common.combat.CantBeBlockedAttachedEffect;
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.game.Game;
import mage.game.permanent.Permanent;
import mage.target.TargetPermanent;
import mage.target.common.TargetCreaturePermanent;
import java.util.UUID;
/**
* @author TheElk801
*/
public final class GutterShortcut extends CardImpl {
public GutterShortcut(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 can't be blocked as long as it's attacking alone.
this.addAbility(new SimpleStaticAbility(new ConditionalRestrictionEffect(
new CantBeBlockedAttachedEffect(AttachmentType.AURA), GutterShortcutCondition.instance,
"enchanted creature can't be blocked as long as it's attacking alone"
)));
// If Gutter Shortcut would be put into a graveyard from anywhere, exile it instead.
this.addAbility(DisturbAbility.makeBackAbility());
}
private GutterShortcut(final GutterShortcut card) {
super(card);
}
@Override
public GutterShortcut copy() {
return new GutterShortcut(this);
}
}
enum GutterShortcutCondition implements Condition {
instance;
@Override
public boolean apply(Game game, Ability source) {
Permanent permanent = source.getSourcePermanentIfItStillExists(game);
return permanent != null && game.getCombat().attacksAlone()
&& game.getCombat().getAttackers().contains(permanent.getAttachedTo());
}
}

View file

@ -1,42 +1,68 @@
package mage.cards.g; package mage.cards.g;
import mage.MageInt; import mage.abilities.Ability;
import mage.abilities.common.SimpleStaticAbility; import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.condition.Condition;
import mage.abilities.condition.common.SourceAttackingAloneCondition; import mage.abilities.condition.common.SourceAttackingAloneCondition;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.decorator.ConditionalRestrictionEffect; import mage.abilities.decorator.ConditionalRestrictionEffect;
import mage.abilities.effects.common.AttachEffect;
import mage.abilities.effects.common.combat.CantBeBlockedSourceEffect; import mage.abilities.effects.common.combat.CantBeBlockedSourceEffect;
import mage.abilities.keyword.DisturbAbility; import mage.abilities.keyword.DisturbAbility;
import mage.cards.CardImpl; import mage.abilities.keyword.EnchantAbility;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.cards.TransformingDoubleFacedCard;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.constants.Outcome;
import mage.constants.SubType; import mage.constants.SubType;
import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.target.TargetPermanent;
import mage.target.common.TargetCreaturePermanent;
import java.util.UUID; import java.util.UUID;
/** /**
* @author TheElk801 * @author TheElk801
*/ */
public final class GutterSkulker extends CardImpl { public final class GutterSkulker extends TransformingDoubleFacedCard {
public GutterSkulker(UUID ownerId, CardSetInfo setInfo) { public GutterSkulker(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}",
"Gutter Shortcut",
new CardType[]{CardType.ENCHANTMENT}, new SubType[]{SubType.AURA}, "U"
);
this.subtype.add(SubType.SPIRIT); // Gutter Skulker
this.power = new MageInt(3); this.getLeftHalfCard().setPT(3, 3);
this.toughness = new MageInt(3);
this.secondSideCardClazz = mage.cards.g.GutterShortcut.class;
// Gutter Skulker can't be blocked as long as it's attacking alone. // Gutter Skulker can't be blocked as long as it's attacking alone.
this.addAbility(new SimpleStaticAbility(new ConditionalRestrictionEffect( this.getLeftHalfCard().addAbility(new SimpleStaticAbility(new ConditionalRestrictionEffect(
new CantBeBlockedSourceEffect(Duration.WhileOnBattlefield), new CantBeBlockedSourceEffect(Duration.WhileOnBattlefield),
SourceAttackingAloneCondition.instance, SourceAttackingAloneCondition.instance,
"{this} can't be blocked as long as it's attacking alone" "{this} can't be blocked as long as it's attacking alone"
))); )));
// Gutter Shortcut
// 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} // Disturb {3}{U}
this.addAbility(new DisturbAbility(this, "{3}{U}")); // needs to be added after right half has spell ability target set
this.getLeftHalfCard().addAbility(new DisturbAbility(this, "{3}{U}"));
// Enchanted creature can't be blocked as long as it's attacking alone.
this.getRightHalfCard().addAbility(new SimpleStaticAbility(new ConditionalRestrictionEffect(
new CantBeBlockedSourceEffect(), GutterShortcutCondition.instance,
"enchanted creature can't be blocked as long as it's attacking alone"
)));
// If Gutter Shortcut would be put into a graveyard from anywhere, exile it instead.
this.getRightHalfCard().addAbility(DisturbAbility.makeBackAbility());
} }
private GutterSkulker(final GutterSkulker card) { private GutterSkulker(final GutterSkulker card) {
@ -48,3 +74,14 @@ public final class GutterSkulker extends CardImpl {
return new GutterSkulker(this); return new GutterSkulker(this);
} }
} }
enum GutterShortcutCondition implements Condition {
instance;
@Override
public boolean apply(Game game, Ability source) {
Permanent permanent = source.getSourcePermanentIfItStillExists(game);
return permanent != null && game.getCombat().attacksAlone()
&& game.getCombat().getAttackers().contains(permanent.getAttachedTo());
}
}

View file

@ -1,45 +0,0 @@
package mage.cards.i;
import mage.Mana;
import mage.abilities.dynamicvalue.common.CreaturesYouControlCount;
import mage.abilities.hint.common.CreaturesYouControlHint;
import mage.abilities.mana.DynamicManaAbility;
import mage.abilities.mana.GreenManaAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SuperType;
import java.util.UUID;
/**
* @author JRHerlehy
*/
public final class ItlimocCradleOfTheSun extends CardImpl {
public ItlimocCradleOfTheSun(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
this.supertype.add(SuperType.LEGENDARY);
// (Transforms from Growing Rites of Itlimoc.)/
this.nightCard = true;
// {T}: Add {G}.
this.addAbility(new GreenManaAbility());
// {T}: Add {G} for each creature you control.
this.addAbility(new DynamicManaAbility(
Mana.GreenMana(1), CreaturesYouControlCount.SINGULAR
).addHint(CreaturesYouControlHint.instance));
}
private ItlimocCradleOfTheSun(final ItlimocCradleOfTheSun card) {
super(card);
}
@Override
public ItlimocCradleOfTheSun copy() {
return new ItlimocCradleOfTheSun(this);
}
}

View file

@ -1,40 +0,0 @@
package mage.cards.k;
import mage.MageInt;
import mage.abilities.common.WerewolfBackTriggeredAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import java.util.UUID;
/**
* @author nantuko
*/
public final class KrallenhordeWantons extends CardImpl {
public KrallenhordeWantons(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "");
this.subtype.add(SubType.WEREWOLF);
this.color.setGreen(true);
// this card is the second face of double-faced card
this.nightCard = true;
this.power = new MageInt(7);
this.toughness = new MageInt(7);
// At the beginning of each upkeep, if a player cast two or more spells last turn, transform Krallenhorde Wantons.
this.addAbility(new WerewolfBackTriggeredAbility());
}
private KrallenhordeWantons(final KrallenhordeWantons card) {
super(card);
}
@Override
public KrallenhordeWantons copy() {
return new KrallenhordeWantons(this);
}
}

View file

@ -1,51 +0,0 @@
package mage.cards.s;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.RemoveCountersSourceCost;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.effects.common.LoseLifeSourceControllerEffect;
import mage.abilities.mana.BlackManaAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.counters.CounterType;
import java.util.UUID;
/**
* @author TheElk801
*/
public final class ShadowsLair extends CardImpl {
public ShadowsLair(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
this.subtype.add(SubType.CAVE);
this.nightCard = true;
// {T}: Add {B}.
this.addAbility(new BlackManaAbility());
// {B}, {T}, Remove a dread counter from Shadows' Lair: You draw a card and you lose 1 life.
Ability ability = new SimpleActivatedAbility(
new DrawCardSourceControllerEffect(1, true), new ManaCostsImpl<>("{B}")
);
ability.addCost(new TapSourceCost());
ability.addCost(new RemoveCountersSourceCost(CounterType.DREAD.createInstance()));
ability.addEffect(new LoseLifeSourceControllerEffect(1).concatBy("and"));
this.addAbility(ability);
}
private ShadowsLair(final ShadowsLair card) {
super(card);
}
@Override
public ShadowsLair copy() {
return new ShadowsLair(this);
}
}

View file

@ -1,83 +0,0 @@
package mage.cards.v;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
import mage.abilities.common.WerewolfBackTriggeredAbility;
import mage.abilities.effects.OneShotEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.*;
import mage.filter.FilterPermanent;
import mage.filter.common.FilterCreaturePermanent;
import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.players.Player;
import java.util.UUID;
/**
* @author LevelX2
*/
public final class VildinPackAlpha extends CardImpl {
private static final FilterPermanent filter = new FilterCreaturePermanent(SubType.WEREWOLF, "a Werewolf");
public VildinPackAlpha(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "");
this.subtype.add(SubType.WEREWOLF);
this.power = new MageInt(4);
this.toughness = new MageInt(3);
this.color.setRed(true);
this.nightCard = true;
// Whenever a Werewolf you control enters, you may transform it.
this.addAbility(new EntersBattlefieldControlledTriggeredAbility(
Zone.BATTLEFIELD, new VildinPackAlphaEffect(), filter,
true, SetTargetPointer.PERMANENT
));
// At the beginning of each upkeep, if a player cast two or more spells last turn, transform Vildin-Pack Alpha.
this.addAbility(new WerewolfBackTriggeredAbility());
}
private VildinPackAlpha(final VildinPackAlpha card) {
super(card);
}
@Override
public VildinPackAlpha copy() {
return new VildinPackAlpha(this);
}
}
class VildinPackAlphaEffect extends OneShotEffect {
VildinPackAlphaEffect() {
super(Outcome.Benefit);
this.staticText = "you may transform it";
}
private VildinPackAlphaEffect(final VildinPackAlphaEffect effect) {
super(effect);
}
@Override
public VildinPackAlphaEffect copy() {
return new VildinPackAlphaEffect(this);
}
@Override
public boolean apply(Game game, Ability source) {
Player controller = game.getPlayer(source.getControllerId());
if (controller == null) {
return false;
}
Permanent werewolf = game.getPermanent(getTargetPointer().getFirst(game, source));
if (werewolf != null) {
werewolf.transform(source, game);
}
return true;
}
}

View file

@ -133,7 +133,6 @@ public final class EldritchMoon extends ExpansionSet {
cards.add(new SetCardInfo("Graf Rats", 91, Rarity.COMMON, mage.cards.g.GrafRats.class)); cards.add(new SetCardInfo("Graf Rats", 91, Rarity.COMMON, mage.cards.g.GrafRats.class));
cards.add(new SetCardInfo("Grapple with the Past", 160, Rarity.COMMON, mage.cards.g.GrappleWithThePast.class)); cards.add(new SetCardInfo("Grapple with the Past", 160, Rarity.COMMON, mage.cards.g.GrappleWithThePast.class));
cards.add(new SetCardInfo("Grim Flayer", 184, Rarity.MYTHIC, mage.cards.g.GrimFlayer.class)); cards.add(new SetCardInfo("Grim Flayer", 184, Rarity.MYTHIC, mage.cards.g.GrimFlayer.class));
cards.add(new SetCardInfo("Grisly Anglerfish", 63, Rarity.UNCOMMON, mage.cards.g.GrislyAnglerfish.class));
cards.add(new SetCardInfo("Grizzled Angler", 63, Rarity.UNCOMMON, mage.cards.g.GrizzledAngler.class)); cards.add(new SetCardInfo("Grizzled Angler", 63, Rarity.UNCOMMON, mage.cards.g.GrizzledAngler.class));
cards.add(new SetCardInfo("Guardian of Pilgrims", 30, Rarity.COMMON, mage.cards.g.GuardianOfPilgrims.class)); cards.add(new SetCardInfo("Guardian of Pilgrims", 30, Rarity.COMMON, mage.cards.g.GuardianOfPilgrims.class));
cards.add(new SetCardInfo("Hamlet Captain", 161, Rarity.UNCOMMON, mage.cards.h.HamletCaptain.class)); cards.add(new SetCardInfo("Hamlet Captain", 161, Rarity.UNCOMMON, mage.cards.h.HamletCaptain.class));

View file

@ -94,8 +94,6 @@ public final class FinalFantasy extends ExpansionSet {
cards.add(new SetCardInfo("Cecil, Dark Knight", 445, Rarity.RARE, mage.cards.c.CecilDarkKnight.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Cecil, Dark Knight", 445, Rarity.RARE, mage.cards.c.CecilDarkKnight.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Cecil, Dark Knight", 525, Rarity.RARE, mage.cards.c.CecilDarkKnight.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Cecil, Dark Knight", 525, Rarity.RARE, mage.cards.c.CecilDarkKnight.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Cecil, Dark Knight", 91, Rarity.RARE, mage.cards.c.CecilDarkKnight.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Cecil, Dark Knight", 91, Rarity.RARE, mage.cards.c.CecilDarkKnight.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Chaos, the Endless", 221, Rarity.UNCOMMON, mage.cards.c.ChaosTheEndless.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Chaos, the Endless", 486, Rarity.UNCOMMON, mage.cards.c.ChaosTheEndless.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Choco, Seeker of Paradise", 215, Rarity.RARE, mage.cards.c.ChocoSeekerOfParadise.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Choco, Seeker of Paradise", 215, Rarity.RARE, mage.cards.c.ChocoSeekerOfParadise.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Choco, Seeker of Paradise", 479, Rarity.RARE, mage.cards.c.ChocoSeekerOfParadise.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Choco, Seeker of Paradise", 479, Rarity.RARE, mage.cards.c.ChocoSeekerOfParadise.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Choco, Seeker of Paradise", 569, Rarity.RARE, mage.cards.c.ChocoSeekerOfParadise.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Choco, Seeker of Paradise", 569, Rarity.RARE, mage.cards.c.ChocoSeekerOfParadise.class, NON_FULL_USE_VARIOUS));

View file

@ -30,7 +30,6 @@ public final class FromTheVaultTransform extends ExpansionSet {
cards.add(new SetCardInfo("Delver of Secrets", 7, Rarity.MYTHIC, mage.cards.d.DelverOfSecrets.class)); cards.add(new SetCardInfo("Delver of Secrets", 7, Rarity.MYTHIC, mage.cards.d.DelverOfSecrets.class));
cards.add(new SetCardInfo("Elbrus, the Binding Blade", 8, Rarity.MYTHIC, mage.cards.e.ElbrusTheBindingBlade.class)); cards.add(new SetCardInfo("Elbrus, the Binding Blade", 8, Rarity.MYTHIC, mage.cards.e.ElbrusTheBindingBlade.class));
cards.add(new SetCardInfo("Garruk Relentless", 9, Rarity.MYTHIC, mage.cards.g.GarrukRelentless.class)); cards.add(new SetCardInfo("Garruk Relentless", 9, Rarity.MYTHIC, mage.cards.g.GarrukRelentless.class));
cards.add(new SetCardInfo("Garruk, the Veil-Cursed", 9, Rarity.MYTHIC, mage.cards.g.GarrukTheVeilCursed.class));
cards.add(new SetCardInfo("Gisela, the Broken Blade", 10, Rarity.MYTHIC, mage.cards.g.GiselaTheBrokenBlade.class)); cards.add(new SetCardInfo("Gisela, the Broken Blade", 10, Rarity.MYTHIC, mage.cards.g.GiselaTheBrokenBlade.class));
cards.add(new SetCardInfo("Huntmaster of the Fells", 11, Rarity.MYTHIC, mage.cards.h.HuntmasterOfTheFells.class)); cards.add(new SetCardInfo("Huntmaster of the Fells", 11, Rarity.MYTHIC, mage.cards.h.HuntmasterOfTheFells.class));
cards.add(new SetCardInfo("Jace, Vryn's Prodigy", 12, Rarity.MYTHIC, mage.cards.j.JaceVrynsProdigy.class)); cards.add(new SetCardInfo("Jace, Vryn's Prodigy", 12, Rarity.MYTHIC, mage.cards.j.JaceVrynsProdigy.class));

View file

@ -21,7 +21,6 @@ public final class HasCon2017 extends ExpansionSet {
this.hasBasicLands = false; this.hasBasicLands = false;
cards.add(new ExpansionSet.SetCardInfo("Grimlock, Dinobot Leader", 1, Rarity.MYTHIC, mage.cards.g.GrimlockDinobotLeader.class)); cards.add(new ExpansionSet.SetCardInfo("Grimlock, Dinobot Leader", 1, Rarity.MYTHIC, mage.cards.g.GrimlockDinobotLeader.class));
cards.add(new ExpansionSet.SetCardInfo("Grimlock, Ferocious King", 1, Rarity.MYTHIC, mage.cards.g.GrimlockFerociousKing.class));
cards.add(new ExpansionSet.SetCardInfo("Sword of Dungeons & Dragons", 3, Rarity.MYTHIC, mage.cards.s.SwordOfDungeonsAndDragons.class)); cards.add(new ExpansionSet.SetCardInfo("Sword of Dungeons & Dragons", 3, Rarity.MYTHIC, mage.cards.s.SwordOfDungeonsAndDragons.class));
} }
} }

View file

@ -124,8 +124,6 @@ public final class Innistrad extends ExpansionSet {
cards.add(new SetCardInfo("Gallows Warden", 16, Rarity.UNCOMMON, mage.cards.g.GallowsWarden.class)); cards.add(new SetCardInfo("Gallows Warden", 16, Rarity.UNCOMMON, mage.cards.g.GallowsWarden.class));
cards.add(new SetCardInfo("Galvanic Juggernaut", 222, Rarity.UNCOMMON, mage.cards.g.GalvanicJuggernaut.class)); cards.add(new SetCardInfo("Galvanic Juggernaut", 222, Rarity.UNCOMMON, mage.cards.g.GalvanicJuggernaut.class));
cards.add(new SetCardInfo("Garruk Relentless", 181, Rarity.MYTHIC, mage.cards.g.GarrukRelentless.class)); cards.add(new SetCardInfo("Garruk Relentless", 181, Rarity.MYTHIC, mage.cards.g.GarrukRelentless.class));
cards.add(new SetCardInfo("Garruk, the Veil-Cursed", 181, Rarity.MYTHIC, mage.cards.g.GarrukTheVeilCursed.class));
cards.add(new SetCardInfo("Gatstaf Howler", 182, Rarity.UNCOMMON, mage.cards.g.GatstafHowler.class));
cards.add(new SetCardInfo("Gatstaf Shepherd", 182, Rarity.UNCOMMON, mage.cards.g.GatstafShepherd.class)); cards.add(new SetCardInfo("Gatstaf Shepherd", 182, Rarity.UNCOMMON, mage.cards.g.GatstafShepherd.class));
cards.add(new SetCardInfo("Gavony Township", 239, Rarity.RARE, mage.cards.g.GavonyTownship.class)); cards.add(new SetCardInfo("Gavony Township", 239, Rarity.RARE, mage.cards.g.GavonyTownship.class));
cards.add(new SetCardInfo("Geist of Saint Traft", 213, Rarity.MYTHIC, mage.cards.g.GeistOfSaintTraft.class)); cards.add(new SetCardInfo("Geist of Saint Traft", 213, Rarity.MYTHIC, mage.cards.g.GeistOfSaintTraft.class));
@ -171,7 +169,6 @@ public final class Innistrad extends ExpansionSet {
cards.add(new SetCardInfo("Kessig Wolf Run", 243, Rarity.RARE, mage.cards.k.KessigWolfRun.class)); cards.add(new SetCardInfo("Kessig Wolf Run", 243, Rarity.RARE, mage.cards.k.KessigWolfRun.class));
cards.add(new SetCardInfo("Kessig Wolf", 151, Rarity.COMMON, mage.cards.k.KessigWolf.class)); cards.add(new SetCardInfo("Kessig Wolf", 151, Rarity.COMMON, mage.cards.k.KessigWolf.class));
cards.add(new SetCardInfo("Kindercatch", 190, Rarity.COMMON, mage.cards.k.Kindercatch.class)); cards.add(new SetCardInfo("Kindercatch", 190, Rarity.COMMON, mage.cards.k.Kindercatch.class));
cards.add(new SetCardInfo("Krallenhorde Wantons", 185, Rarity.COMMON, mage.cards.k.KrallenhordeWantons.class));
cards.add(new SetCardInfo("Kruin Outlaw", 152, Rarity.RARE, mage.cards.k.KruinOutlaw.class)); cards.add(new SetCardInfo("Kruin Outlaw", 152, Rarity.RARE, mage.cards.k.KruinOutlaw.class));
cards.add(new SetCardInfo("Laboratory Maniac", 61, Rarity.RARE, mage.cards.l.LaboratoryManiac.class)); cards.add(new SetCardInfo("Laboratory Maniac", 61, Rarity.RARE, mage.cards.l.LaboratoryManiac.class));
cards.add(new SetCardInfo("Lantern Spirit", 62, Rarity.UNCOMMON, mage.cards.l.LanternSpirit.class)); cards.add(new SetCardInfo("Lantern Spirit", 62, Rarity.UNCOMMON, mage.cards.l.LanternSpirit.class));

View file

@ -220,7 +220,6 @@ public final class InnistradCrimsonVow extends ExpansionSet {
cards.add(new SetCardInfo("Groom's Finery", 117, Rarity.UNCOMMON, mage.cards.g.GroomsFinery.class)); cards.add(new SetCardInfo("Groom's Finery", 117, Rarity.UNCOMMON, mage.cards.g.GroomsFinery.class));
cards.add(new SetCardInfo("Gryff Rider", 15, Rarity.COMMON, mage.cards.g.GryffRider.class)); cards.add(new SetCardInfo("Gryff Rider", 15, Rarity.COMMON, mage.cards.g.GryffRider.class));
cards.add(new SetCardInfo("Gryffwing Cavalry", 16, Rarity.UNCOMMON, mage.cards.g.GryffwingCavalry.class)); cards.add(new SetCardInfo("Gryffwing Cavalry", 16, Rarity.UNCOMMON, mage.cards.g.GryffwingCavalry.class));
cards.add(new SetCardInfo("Gutter Shortcut", 62, Rarity.UNCOMMON, mage.cards.g.GutterShortcut.class));
cards.add(new SetCardInfo("Gutter Skulker", 62, Rarity.UNCOMMON, mage.cards.g.GutterSkulker.class)); cards.add(new SetCardInfo("Gutter Skulker", 62, Rarity.UNCOMMON, mage.cards.g.GutterSkulker.class));
cards.add(new SetCardInfo("Halana and Alena, Partners", 239, Rarity.RARE, mage.cards.h.HalanaAndAlenaPartners.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Halana and Alena, Partners", 239, Rarity.RARE, mage.cards.h.HalanaAndAlenaPartners.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Halana and Alena, Partners", 325, Rarity.RARE, mage.cards.h.HalanaAndAlenaPartners.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Halana and Alena, Partners", 325, Rarity.RARE, mage.cards.h.HalanaAndAlenaPartners.class, NON_FULL_USE_VARIOUS));

View file

@ -263,7 +263,6 @@ public final class InnistradDoubleFeature extends ExpansionSet {
cards.add(new SetCardInfo("Gluttonous Guest", 381, Rarity.COMMON, mage.cards.g.GluttonousGuest.class)); cards.add(new SetCardInfo("Gluttonous Guest", 381, Rarity.COMMON, mage.cards.g.GluttonousGuest.class));
cards.add(new SetCardInfo("Graf Reaver", 382, Rarity.RARE, mage.cards.g.GrafReaver.class)); cards.add(new SetCardInfo("Graf Reaver", 382, Rarity.RARE, mage.cards.g.GrafReaver.class));
cards.add(new SetCardInfo("Grafted Identity", 57, Rarity.RARE, mage.cards.g.GraftedIdentity.class)); cards.add(new SetCardInfo("Grafted Identity", 57, Rarity.RARE, mage.cards.g.GraftedIdentity.class));
cards.add(new SetCardInfo("Graveyard Glutton", 104, Rarity.RARE, mage.cards.g.GraveyardGlutton.class));
cards.add(new SetCardInfo("Graveyard Trespasser", 104, Rarity.RARE, mage.cards.g.GraveyardTrespasser.class)); cards.add(new SetCardInfo("Graveyard Trespasser", 104, Rarity.RARE, mage.cards.g.GraveyardTrespasser.class));
cards.add(new SetCardInfo("Grisly Ritual", 383, Rarity.COMMON, mage.cards.g.GrislyRitual.class)); cards.add(new SetCardInfo("Grisly Ritual", 383, Rarity.COMMON, mage.cards.g.GrislyRitual.class));
cards.add(new SetCardInfo("Grizzly Ghoul", 226, Rarity.UNCOMMON, mage.cards.g.GrizzlyGhoul.class)); cards.add(new SetCardInfo("Grizzly Ghoul", 226, Rarity.UNCOMMON, mage.cards.g.GrizzlyGhoul.class));
@ -271,7 +270,6 @@ public final class InnistradDoubleFeature extends ExpansionSet {
cards.add(new SetCardInfo("Groom's Finery", 384, Rarity.UNCOMMON, mage.cards.g.GroomsFinery.class)); cards.add(new SetCardInfo("Groom's Finery", 384, Rarity.UNCOMMON, mage.cards.g.GroomsFinery.class));
cards.add(new SetCardInfo("Gryff Rider", 282, Rarity.COMMON, mage.cards.g.GryffRider.class)); cards.add(new SetCardInfo("Gryff Rider", 282, Rarity.COMMON, mage.cards.g.GryffRider.class));
cards.add(new SetCardInfo("Gryffwing Cavalry", 283, Rarity.UNCOMMON, mage.cards.g.GryffwingCavalry.class)); cards.add(new SetCardInfo("Gryffwing Cavalry", 283, Rarity.UNCOMMON, mage.cards.g.GryffwingCavalry.class));
cards.add(new SetCardInfo("Gutter Shortcut", 329, Rarity.UNCOMMON, mage.cards.g.GutterShortcut.class));
cards.add(new SetCardInfo("Gutter Skulker", 329, Rarity.UNCOMMON, mage.cards.g.GutterSkulker.class)); cards.add(new SetCardInfo("Gutter Skulker", 329, Rarity.UNCOMMON, mage.cards.g.GutterSkulker.class));
cards.add(new SetCardInfo("Halana and Alena, Partners", 506, Rarity.RARE, mage.cards.h.HalanaAndAlenaPartners.class)); cards.add(new SetCardInfo("Halana and Alena, Partners", 506, Rarity.RARE, mage.cards.h.HalanaAndAlenaPartners.class));
cards.add(new SetCardInfo("Hallowed Haunting", 284, Rarity.MYTHIC, mage.cards.h.HallowedHaunting.class)); cards.add(new SetCardInfo("Hallowed Haunting", 284, Rarity.MYTHIC, mage.cards.h.HallowedHaunting.class));

View file

@ -208,8 +208,6 @@ public final class InnistradMidnightHunt extends ExpansionSet {
cards.add(new SetCardInfo("Gisa, Glorious Resurrector", 314, Rarity.RARE, mage.cards.g.GisaGloriousResurrector.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Gisa, Glorious Resurrector", 314, Rarity.RARE, mage.cards.g.GisaGloriousResurrector.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Grafted Identity", 335, Rarity.RARE, mage.cards.g.GraftedIdentity.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Grafted Identity", 335, Rarity.RARE, mage.cards.g.GraftedIdentity.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Grafted Identity", 57, Rarity.RARE, mage.cards.g.GraftedIdentity.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Grafted Identity", 57, Rarity.RARE, mage.cards.g.GraftedIdentity.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Graveyard Glutton", 104, Rarity.RARE, mage.cards.g.GraveyardGlutton.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Graveyard Glutton", 290, Rarity.RARE, mage.cards.g.GraveyardGlutton.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Graveyard Trespasser", 104, Rarity.RARE, mage.cards.g.GraveyardTrespasser.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Graveyard Trespasser", 104, Rarity.RARE, mage.cards.g.GraveyardTrespasser.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Graveyard Trespasser", 290, Rarity.RARE, mage.cards.g.GraveyardTrespasser.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Graveyard Trespasser", 290, Rarity.RARE, mage.cards.g.GraveyardTrespasser.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Grizzly Ghoul", 226, Rarity.UNCOMMON, mage.cards.g.GrizzlyGhoul.class)); cards.add(new SetCardInfo("Grizzly Ghoul", 226, Rarity.UNCOMMON, mage.cards.g.GrizzlyGhoul.class));

View file

@ -218,7 +218,6 @@ public class InnistradRemastered extends ExpansionSet {
cards.add(new SetCardInfo("Galvanic Juggernaut", 263, Rarity.UNCOMMON, mage.cards.g.GalvanicJuggernaut.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Galvanic Juggernaut", 263, Rarity.UNCOMMON, mage.cards.g.GalvanicJuggernaut.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Galvanic Juggernaut", 443, Rarity.UNCOMMON, mage.cards.g.GalvanicJuggernaut.class, RETRO_ART_USE_VARIOUS)); cards.add(new SetCardInfo("Galvanic Juggernaut", 443, Rarity.UNCOMMON, mage.cards.g.GalvanicJuggernaut.class, RETRO_ART_USE_VARIOUS));
cards.add(new SetCardInfo("Garruk Relentless", 197, Rarity.MYTHIC, mage.cards.g.GarrukRelentless.class)); cards.add(new SetCardInfo("Garruk Relentless", 197, Rarity.MYTHIC, mage.cards.g.GarrukRelentless.class));
cards.add(new SetCardInfo("Garruk, the Veil-Cursed", 197, Rarity.MYTHIC, mage.cards.g.GarrukTheVeilCursed.class));
cards.add(new SetCardInfo("Gather the Townsfolk", 23, Rarity.COMMON, mage.cards.g.GatherTheTownsfolk.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Gather the Townsfolk", 23, Rarity.COMMON, mage.cards.g.GatherTheTownsfolk.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Gather the Townsfolk", 341, Rarity.COMMON, mage.cards.g.GatherTheTownsfolk.class, RETRO_ART_USE_VARIOUS)); cards.add(new SetCardInfo("Gather the Townsfolk", 341, Rarity.COMMON, mage.cards.g.GatherTheTownsfolk.class, RETRO_ART_USE_VARIOUS));
cards.add(new SetCardInfo("Geier Reach Bandit", 156, Rarity.UNCOMMON, mage.cards.g.GeierReachBandit.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Geier Reach Bandit", 156, Rarity.UNCOMMON, mage.cards.g.GeierReachBandit.class, NON_FULL_USE_VARIOUS));
@ -244,8 +243,6 @@ public class InnistradRemastered extends ExpansionSet {
cards.add(new SetCardInfo("Griselbrand", 115, Rarity.MYTHIC, mage.cards.g.Griselbrand.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Griselbrand", 115, Rarity.MYTHIC, mage.cards.g.Griselbrand.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Griselbrand", 381, Rarity.MYTHIC, mage.cards.g.Griselbrand.class,RETRO_ART_USE_VARIOUS)); cards.add(new SetCardInfo("Griselbrand", 381, Rarity.MYTHIC, mage.cards.g.Griselbrand.class,RETRO_ART_USE_VARIOUS));
cards.add(new SetCardInfo("Griselbrand", 485, Rarity.MYTHIC, mage.cards.g.Griselbrand.class, FULL_ART_USE_VARIOUS)); cards.add(new SetCardInfo("Griselbrand", 485, Rarity.MYTHIC, mage.cards.g.Griselbrand.class, FULL_ART_USE_VARIOUS));
cards.add(new SetCardInfo("Grisly Anglerfish", 458, Rarity.UNCOMMON, mage.cards.g.GrislyAnglerfish.class, RETRO_ART_USE_VARIOUS));
cards.add(new SetCardInfo("Grisly Anglerfish", 67, Rarity.UNCOMMON, mage.cards.g.GrislyAnglerfish.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Grizzled Angler", 458, Rarity.UNCOMMON, mage.cards.g.GrizzledAngler.class, RETRO_ART_USE_VARIOUS)); cards.add(new SetCardInfo("Grizzled Angler", 458, Rarity.UNCOMMON, mage.cards.g.GrizzledAngler.class, RETRO_ART_USE_VARIOUS));
cards.add(new SetCardInfo("Grizzled Angler", 67, Rarity.UNCOMMON, mage.cards.g.GrizzledAngler.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Grizzled Angler", 67, Rarity.UNCOMMON, mage.cards.g.GrizzledAngler.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Grizzly Ghoul", 240, Rarity.UNCOMMON, mage.cards.g.GrizzlyGhoul.class)); cards.add(new SetCardInfo("Grizzly Ghoul", 240, Rarity.UNCOMMON, mage.cards.g.GrizzlyGhoul.class));
@ -521,8 +518,6 @@ public class InnistradRemastered extends ExpansionSet {
cards.add(new SetCardInfo("Vanquish the Horde", 49, Rarity.RARE, mage.cards.v.VanquishTheHorde.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Vanquish the Horde", 49, Rarity.RARE, mage.cards.v.VanquishTheHorde.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Vexing Devil", 178, Rarity.RARE, mage.cards.v.VexingDevil.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Vexing Devil", 178, Rarity.RARE, mage.cards.v.VexingDevil.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Vexing Devil", 313, Rarity.RARE, mage.cards.v.VexingDevil.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Vexing Devil", 313, Rarity.RARE, mage.cards.v.VexingDevil.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Vildin-Pack Alpha", 156, Rarity.UNCOMMON, mage.cards.v.VildinPackAlpha.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Vildin-Pack Alpha", 464, Rarity.UNCOMMON, mage.cards.v.VildinPackAlpha.class, RETRO_ART_USE_VARIOUS));
cards.add(new SetCardInfo("Vilespawn Spider", 251, Rarity.UNCOMMON, mage.cards.v.VilespawnSpider.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Vilespawn Spider", 251, Rarity.UNCOMMON, mage.cards.v.VilespawnSpider.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Vilespawn Spider", 436, Rarity.UNCOMMON, mage.cards.v.VilespawnSpider.class, RETRO_ART_USE_VARIOUS)); cards.add(new SetCardInfo("Vilespawn Spider", 436, Rarity.UNCOMMON, mage.cards.v.VilespawnSpider.class, RETRO_ART_USE_VARIOUS));
cards.add(new SetCardInfo("Village Messenger", 179, Rarity.COMMON, mage.cards.v.VillageMessenger.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Village Messenger", 179, Rarity.COMMON, mage.cards.v.VillageMessenger.class, NON_FULL_USE_VARIOUS));

View file

@ -157,7 +157,6 @@ public final class Ixalan extends ExpansionSet {
cards.add(new SetCardInfo("Island", 265, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Island", 265, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Island", 266, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Island", 266, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Island", 267, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Island", 267, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Itlimoc, Cradle of the Sun", 191, Rarity.RARE, mage.cards.i.ItlimocCradleOfTheSun.class));
cards.add(new SetCardInfo("Ixalan's Binding", 17, Rarity.UNCOMMON, mage.cards.i.IxalansBinding.class)); cards.add(new SetCardInfo("Ixalan's Binding", 17, Rarity.UNCOMMON, mage.cards.i.IxalansBinding.class));
cards.add(new SetCardInfo("Ixalli's Diviner", 192, Rarity.COMMON, mage.cards.i.IxallisDiviner.class)); cards.add(new SetCardInfo("Ixalli's Diviner", 192, Rarity.COMMON, mage.cards.i.IxallisDiviner.class));
cards.add(new SetCardInfo("Ixalli's Keeper", 193, Rarity.COMMON, mage.cards.i.IxallisKeeper.class)); cards.add(new SetCardInfo("Ixalli's Keeper", 193, Rarity.COMMON, mage.cards.i.IxallisKeeper.class));

View file

@ -74,7 +74,6 @@ public class IxalanPromos extends ExpansionSet {
cards.add(new SetCardInfo("Herald of Secret Streams", "59s", Rarity.RARE, mage.cards.h.HeraldOfSecretStreams.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Herald of Secret Streams", "59s", Rarity.RARE, mage.cards.h.HeraldOfSecretStreams.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Hostage Taker", "223s", Rarity.RARE, mage.cards.h.HostageTaker.class)); cards.add(new SetCardInfo("Hostage Taker", "223s", Rarity.RARE, mage.cards.h.HostageTaker.class));
cards.add(new SetCardInfo("Huatli, Warrior Poet", "224s", Rarity.MYTHIC, mage.cards.h.HuatliWarriorPoet.class)); cards.add(new SetCardInfo("Huatli, Warrior Poet", "224s", Rarity.MYTHIC, mage.cards.h.HuatliWarriorPoet.class));
cards.add(new SetCardInfo("Itlimoc, Cradle of the Sun", "191s", Rarity.RARE, mage.cards.i.ItlimocCradleOfTheSun.class));
cards.add(new SetCardInfo("Jace, Cunning Castaway", "60s", Rarity.MYTHIC, mage.cards.j.JaceCunningCastaway.class)); cards.add(new SetCardInfo("Jace, Cunning Castaway", "60s", Rarity.MYTHIC, mage.cards.j.JaceCunningCastaway.class));
cards.add(new SetCardInfo("Kinjalli's Sunwing", "19p", Rarity.RARE, mage.cards.k.KinjallisSunwing.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Kinjalli's Sunwing", "19p", Rarity.RARE, mage.cards.k.KinjallisSunwing.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Kinjalli's Sunwing", "19s", Rarity.RARE, mage.cards.k.KinjallisSunwing.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Kinjalli's Sunwing", "19s", Rarity.RARE, mage.cards.k.KinjallisSunwing.class, NON_FULL_USE_VARIOUS));

View file

@ -23,7 +23,6 @@ public class JudgeGiftCards2022 extends ExpansionSet {
cards.add(new SetCardInfo("Animate Dead", 7, Rarity.RARE, mage.cards.a.AnimateDead.class, RETRO_ART)); cards.add(new SetCardInfo("Animate Dead", 7, Rarity.RARE, mage.cards.a.AnimateDead.class, RETRO_ART));
cards.add(new SetCardInfo("Greater Auramancy", 1, Rarity.RARE, mage.cards.g.GreaterAuramancy.class)); cards.add(new SetCardInfo("Greater Auramancy", 1, Rarity.RARE, mage.cards.g.GreaterAuramancy.class));
cards.add(new SetCardInfo("Growing Rites of Itlimoc", 10, Rarity.RARE, mage.cards.g.GrowingRitesOfItlimoc.class)); cards.add(new SetCardInfo("Growing Rites of Itlimoc", 10, Rarity.RARE, mage.cards.g.GrowingRitesOfItlimoc.class));
cards.add(new SetCardInfo("Itlimoc, Cradle of the Sun", 10, Rarity.RARE, mage.cards.i.ItlimocCradleOfTheSun.class));
cards.add(new SetCardInfo("No Mercy", 9, Rarity.RARE, mage.cards.n.NoMercy.class)); cards.add(new SetCardInfo("No Mercy", 9, Rarity.RARE, mage.cards.n.NoMercy.class));
cards.add(new SetCardInfo("Omniscience", 2, Rarity.RARE, mage.cards.o.Omniscience.class)); cards.add(new SetCardInfo("Omniscience", 2, Rarity.RARE, mage.cards.o.Omniscience.class));
cards.add(new SetCardInfo("Parallel Lives", 3, Rarity.RARE, mage.cards.p.ParallelLives.class)); cards.add(new SetCardInfo("Parallel Lives", 3, Rarity.RARE, mage.cards.p.ParallelLives.class));

View file

@ -96,7 +96,6 @@ public final class MarchOfTheMachine extends ExpansionSet {
cards.add(new SetCardInfo("Chandra, Hope's Beacon", 321, Rarity.MYTHIC, mage.cards.c.ChandraHopesBeacon.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Chandra, Hope's Beacon", 321, Rarity.MYTHIC, mage.cards.c.ChandraHopesBeacon.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Change the Equation", 50, Rarity.UNCOMMON, mage.cards.c.ChangeTheEquation.class)); cards.add(new SetCardInfo("Change the Equation", 50, Rarity.UNCOMMON, mage.cards.c.ChangeTheEquation.class));
cards.add(new SetCardInfo("Chomping Kavu", 179, Rarity.COMMON, mage.cards.c.ChompingKavu.class)); cards.add(new SetCardInfo("Chomping Kavu", 179, Rarity.COMMON, mage.cards.c.ChompingKavu.class));
cards.add(new SetCardInfo("Chrome Host Hulk", 188, Rarity.UNCOMMON, mage.cards.c.ChromeHostHulk.class));
cards.add(new SetCardInfo("Chrome Host Seedshark", 350, Rarity.RARE, mage.cards.c.ChromeHostSeedshark.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Chrome Host Seedshark", 350, Rarity.RARE, mage.cards.c.ChromeHostSeedshark.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Chrome Host Seedshark", 51, Rarity.RARE, mage.cards.c.ChromeHostSeedshark.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Chrome Host Seedshark", 51, Rarity.RARE, mage.cards.c.ChromeHostSeedshark.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("City on Fire", 135, Rarity.RARE, mage.cards.c.CityOnFire.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("City on Fire", 135, Rarity.RARE, mage.cards.c.CityOnFire.class, NON_FULL_USE_VARIOUS));

View file

@ -110,7 +110,6 @@ public final class RivalsOfIxalan extends ExpansionSet {
cards.add(new SetCardInfo("Goblin Trailblazer", 105, Rarity.COMMON, mage.cards.g.GoblinTrailblazer.class)); cards.add(new SetCardInfo("Goblin Trailblazer", 105, Rarity.COMMON, mage.cards.g.GoblinTrailblazer.class));
cards.add(new SetCardInfo("Golden Demise", 73, Rarity.UNCOMMON, mage.cards.g.GoldenDemise.class)); cards.add(new SetCardInfo("Golden Demise", 73, Rarity.UNCOMMON, mage.cards.g.GoldenDemise.class));
cards.add(new SetCardInfo("Golden Guardian", 179, Rarity.RARE, mage.cards.g.GoldenGuardian.class)); cards.add(new SetCardInfo("Golden Guardian", 179, Rarity.RARE, mage.cards.g.GoldenGuardian.class));
cards.add(new SetCardInfo("Gold-Forge Garrison", 179, Rarity.RARE, mage.cards.g.GoldForgeGarrison.class));
cards.add(new SetCardInfo("Grasping Scoundrel", 74, Rarity.COMMON, mage.cards.g.GraspingScoundrel.class)); cards.add(new SetCardInfo("Grasping Scoundrel", 74, Rarity.COMMON, mage.cards.g.GraspingScoundrel.class));
cards.add(new SetCardInfo("Gruesome Fate", 75, Rarity.COMMON, mage.cards.g.GruesomeFate.class)); cards.add(new SetCardInfo("Gruesome Fate", 75, Rarity.COMMON, mage.cards.g.GruesomeFate.class));
cards.add(new SetCardInfo("Hadana's Climb", 158, Rarity.RARE, mage.cards.h.HadanasClimb.class)); cards.add(new SetCardInfo("Hadana's Climb", 158, Rarity.RARE, mage.cards.h.HadanasClimb.class));

View file

@ -53,7 +53,6 @@ public class RivalsOfIxalanPromos extends ExpansionSet {
cards.add(new SetCardInfo("Ghalta, Primal Hunger", 130, Rarity.RARE, mage.cards.g.GhaltaPrimalHunger.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Ghalta, Primal Hunger", 130, Rarity.RARE, mage.cards.g.GhaltaPrimalHunger.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Ghalta, Primal Hunger", "130p", Rarity.RARE, mage.cards.g.GhaltaPrimalHunger.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Ghalta, Primal Hunger", "130p", Rarity.RARE, mage.cards.g.GhaltaPrimalHunger.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Ghalta, Primal Hunger", "130s", Rarity.RARE, mage.cards.g.GhaltaPrimalHunger.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Ghalta, Primal Hunger", "130s", Rarity.RARE, mage.cards.g.GhaltaPrimalHunger.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Gold-Forge Garrison", "179s", Rarity.RARE, mage.cards.g.GoldForgeGarrison.class));
cards.add(new SetCardInfo("Golden Guardian", "179s", Rarity.RARE, mage.cards.g.GoldenGuardian.class)); cards.add(new SetCardInfo("Golden Guardian", "179s", Rarity.RARE, mage.cards.g.GoldenGuardian.class));
cards.add(new SetCardInfo("Hadana's Climb", "158s", Rarity.RARE, mage.cards.h.HadanasClimb.class)); cards.add(new SetCardInfo("Hadana's Climb", "158s", Rarity.RARE, mage.cards.h.HadanasClimb.class));
cards.add(new SetCardInfo("Huatli, Radiant Champion", "159s", Rarity.MYTHIC, mage.cards.h.HuatliRadiantChampion.class)); cards.add(new SetCardInfo("Huatli, Radiant Champion", "159s", Rarity.MYTHIC, mage.cards.h.HuatliRadiantChampion.class));

View file

@ -2133,7 +2133,6 @@ public class SecretLairDrop extends ExpansionSet {
cards.add(new SetCardInfo("Swords to Plowshares", 2167, Rarity.RARE, mage.cards.s.SwordsToPlowshares.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Swords to Plowshares", 2167, Rarity.RARE, mage.cards.s.SwordsToPlowshares.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Baral, Chief of Compliance", 2168, Rarity.RARE, mage.cards.b.BaralChiefOfCompliance.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Baral, Chief of Compliance", 2168, Rarity.RARE, mage.cards.b.BaralChiefOfCompliance.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Garruk Relentless", 2169, Rarity.MYTHIC, mage.cards.g.GarrukRelentless.class)); cards.add(new SetCardInfo("Garruk Relentless", 2169, Rarity.MYTHIC, mage.cards.g.GarrukRelentless.class));
cards.add(new SetCardInfo("Garruk, the Veil-Cursed", 2169, Rarity.MYTHIC, mage.cards.g.GarrukTheVeilCursed.class));
cards.add(new SetCardInfo("Reaper King", 2170, Rarity.RARE, mage.cards.r.ReaperKing.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Reaper King", 2170, Rarity.RARE, mage.cards.r.ReaperKing.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Glen Elendra Archmage", 2171, Rarity.RARE, mage.cards.g.GlenElendraArchmage.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Glen Elendra Archmage", 2171, Rarity.RARE, mage.cards.g.GlenElendraArchmage.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Guardian Project", 2172, Rarity.MYTHIC, mage.cards.g.GuardianProject.class)); cards.add(new SetCardInfo("Guardian Project", 2172, Rarity.MYTHIC, mage.cards.g.GuardianProject.class));

View file

@ -54,7 +54,6 @@ public class ShadowsOfThePast extends ExpansionSet {
cards.add(new SetCardInfo("Forge Devil", 41, Rarity.COMMON, mage.cards.f.ForgeDevil.class)); cards.add(new SetCardInfo("Forge Devil", 41, Rarity.COMMON, mage.cards.f.ForgeDevil.class));
cards.add(new SetCardInfo("Galvanic Juggernaut", 72, Rarity.UNCOMMON, mage.cards.g.GalvanicJuggernaut.class)); cards.add(new SetCardInfo("Galvanic Juggernaut", 72, Rarity.UNCOMMON, mage.cards.g.GalvanicJuggernaut.class));
cards.add(new SetCardInfo("Garruk Relentless", 49, Rarity.MYTHIC, mage.cards.g.GarrukRelentless.class)); cards.add(new SetCardInfo("Garruk Relentless", 49, Rarity.MYTHIC, mage.cards.g.GarrukRelentless.class));
cards.add(new SetCardInfo("Garruk, the Veil-Cursed", 49, Rarity.MYTHIC, mage.cards.g.GarrukTheVeilCursed.class));
cards.add(new SetCardInfo("Geist of Saint Traft", 62, Rarity.MYTHIC, mage.cards.g.GeistOfSaintTraft.class)); cards.add(new SetCardInfo("Geist of Saint Traft", 62, Rarity.MYTHIC, mage.cards.g.GeistOfSaintTraft.class));
cards.add(new SetCardInfo("Ghoulraiser", 30, Rarity.COMMON, mage.cards.g.Ghoulraiser.class)); cards.add(new SetCardInfo("Ghoulraiser", 30, Rarity.COMMON, mage.cards.g.Ghoulraiser.class));
cards.add(new SetCardInfo("Gnaw to the Bone", 50, Rarity.COMMON, mage.cards.g.GnawToTheBone.class)); cards.add(new SetCardInfo("Gnaw to the Bone", 50, Rarity.COMMON, mage.cards.g.GnawToTheBone.class));

View file

@ -136,7 +136,6 @@ public final class ShadowsOverInnistrad extends ExpansionSet {
cards.add(new SetCardInfo("Furtive Homunculus", 64, Rarity.COMMON, mage.cards.f.FurtiveHomunculus.class)); cards.add(new SetCardInfo("Furtive Homunculus", 64, Rarity.COMMON, mage.cards.f.FurtiveHomunculus.class));
cards.add(new SetCardInfo("Game Trail", 276, Rarity.RARE, mage.cards.g.GameTrail.class)); cards.add(new SetCardInfo("Game Trail", 276, Rarity.RARE, mage.cards.g.GameTrail.class));
cards.add(new SetCardInfo("Gatstaf Arsonists", 158, Rarity.COMMON, mage.cards.g.GatstafArsonists.class)); cards.add(new SetCardInfo("Gatstaf Arsonists", 158, Rarity.COMMON, mage.cards.g.GatstafArsonists.class));
cards.add(new SetCardInfo("Gatstaf Ravagers", 158, Rarity.COMMON, mage.cards.g.GatstafRavagers.class));
cards.add(new SetCardInfo("Geier Reach Bandit", 159, Rarity.RARE, mage.cards.g.GeierReachBandit.class)); cards.add(new SetCardInfo("Geier Reach Bandit", 159, Rarity.RARE, mage.cards.g.GeierReachBandit.class));
cards.add(new SetCardInfo("Geistblast", 160, Rarity.UNCOMMON, mage.cards.g.Geistblast.class)); cards.add(new SetCardInfo("Geistblast", 160, Rarity.UNCOMMON, mage.cards.g.Geistblast.class));
cards.add(new SetCardInfo("Geralf's Masterpiece", 65, Rarity.MYTHIC, mage.cards.g.GeralfsMasterpiece.class)); cards.add(new SetCardInfo("Geralf's Masterpiece", 65, Rarity.MYTHIC, mage.cards.g.GeralfsMasterpiece.class));
@ -342,7 +341,6 @@ public final class ShadowsOverInnistrad extends ExpansionSet {
cards.add(new SetCardInfo("Vessel of Paramnesia", 95, Rarity.COMMON, mage.cards.v.VesselOfParamnesia.class)); cards.add(new SetCardInfo("Vessel of Paramnesia", 95, Rarity.COMMON, mage.cards.v.VesselOfParamnesia.class));
cards.add(new SetCardInfo("Vessel of Volatility", 189, Rarity.COMMON, mage.cards.v.VesselOfVolatility.class)); cards.add(new SetCardInfo("Vessel of Volatility", 189, Rarity.COMMON, mage.cards.v.VesselOfVolatility.class));
cards.add(new SetCardInfo("Veteran Cathar", 238, Rarity.UNCOMMON, mage.cards.v.VeteranCathar.class)); cards.add(new SetCardInfo("Veteran Cathar", 238, Rarity.UNCOMMON, mage.cards.v.VeteranCathar.class));
cards.add(new SetCardInfo("Vildin-Pack Alpha", 159, Rarity.RARE, mage.cards.v.VildinPackAlpha.class));
cards.add(new SetCardInfo("Village Messenger", 190, Rarity.UNCOMMON, mage.cards.v.VillageMessenger.class)); cards.add(new SetCardInfo("Village Messenger", 190, Rarity.UNCOMMON, mage.cards.v.VillageMessenger.class));
cards.add(new SetCardInfo("Voldaren Duelist", 191, Rarity.COMMON, mage.cards.v.VoldarenDuelist.class)); cards.add(new SetCardInfo("Voldaren Duelist", 191, Rarity.COMMON, mage.cards.v.VoldarenDuelist.class));
cards.add(new SetCardInfo("Warped Landscape", 280, Rarity.COMMON, mage.cards.w.WarpedLandscape.class)); cards.add(new SetCardInfo("Warped Landscape", 280, Rarity.COMMON, mage.cards.w.WarpedLandscape.class));

View file

@ -109,7 +109,6 @@ public class ShadowsOverInnistradPromos extends ExpansionSet {
cards.add(new SetCardInfo("Traverse the Ulvenwald", "234s", Rarity.RARE, mage.cards.t.TraverseTheUlvenwald.class)); cards.add(new SetCardInfo("Traverse the Ulvenwald", "234s", Rarity.RARE, mage.cards.t.TraverseTheUlvenwald.class));
cards.add(new SetCardInfo("Triskaidekaphobia", "141s", Rarity.RARE, mage.cards.t.Triskaidekaphobia.class)); cards.add(new SetCardInfo("Triskaidekaphobia", "141s", Rarity.RARE, mage.cards.t.Triskaidekaphobia.class));
cards.add(new SetCardInfo("Ulvenwald Hydra", "235s", Rarity.MYTHIC, mage.cards.u.UlvenwaldHydra.class)); cards.add(new SetCardInfo("Ulvenwald Hydra", "235s", Rarity.MYTHIC, mage.cards.u.UlvenwaldHydra.class));
cards.add(new SetCardInfo("Vildin-Pack Alpha", "159s", Rarity.RARE, mage.cards.v.VildinPackAlpha.class));
cards.add(new SetCardInfo("Welcome to the Fold", "96s", Rarity.RARE, mage.cards.w.WelcomeToTheFold.class)); cards.add(new SetCardInfo("Welcome to the Fold", "96s", Rarity.RARE, mage.cards.w.WelcomeToTheFold.class));
cards.add(new SetCardInfo("Werewolf of Ancient Hunger", "225s", Rarity.RARE, mage.cards.w.WerewolfOfAncientHunger.class)); cards.add(new SetCardInfo("Werewolf of Ancient Hunger", "225s", Rarity.RARE, mage.cards.w.WerewolfOfAncientHunger.class));
cards.add(new SetCardInfo("Westvale Abbey", "281s", Rarity.RARE, mage.cards.w.WestvaleAbbey.class)); cards.add(new SetCardInfo("Westvale Abbey", "281s", Rarity.RARE, mage.cards.w.WestvaleAbbey.class));

View file

@ -139,7 +139,6 @@ public class ShadowsOverInnistradRemastered extends ExpansionSet {
cards.add(new SetCardInfo("Galvanic Bombardment", 157, Rarity.COMMON, mage.cards.g.GalvanicBombardment.class)); cards.add(new SetCardInfo("Galvanic Bombardment", 157, Rarity.COMMON, mage.cards.g.GalvanicBombardment.class));
cards.add(new SetCardInfo("Game Trail", 269, Rarity.UNCOMMON, mage.cards.g.GameTrail.class)); cards.add(new SetCardInfo("Game Trail", 269, Rarity.UNCOMMON, mage.cards.g.GameTrail.class));
cards.add(new SetCardInfo("Gatstaf Arsonists", 158, Rarity.COMMON, mage.cards.g.GatstafArsonists.class)); cards.add(new SetCardInfo("Gatstaf Arsonists", 158, Rarity.COMMON, mage.cards.g.GatstafArsonists.class));
cards.add(new SetCardInfo("Gatstaf Ravagers", 158, Rarity.COMMON, mage.cards.g.GatstafRavagers.class));
cards.add(new SetCardInfo("Gavony Unhallowed", 111, Rarity.COMMON, mage.cards.g.GavonyUnhallowed.class)); cards.add(new SetCardInfo("Gavony Unhallowed", 111, Rarity.COMMON, mage.cards.g.GavonyUnhallowed.class));
cards.add(new SetCardInfo("Geier Reach Bandit", 159, Rarity.UNCOMMON, mage.cards.g.GeierReachBandit.class)); cards.add(new SetCardInfo("Geier Reach Bandit", 159, Rarity.UNCOMMON, mage.cards.g.GeierReachBandit.class));
cards.add(new SetCardInfo("Geier Reach Sanitarium", 270, Rarity.RARE, mage.cards.g.GeierReachSanitarium.class)); cards.add(new SetCardInfo("Geier Reach Sanitarium", 270, Rarity.RARE, mage.cards.g.GeierReachSanitarium.class));
@ -323,7 +322,6 @@ public class ShadowsOverInnistradRemastered extends ExpansionSet {
cards.add(new SetCardInfo("Uncaged Fury", 183, Rarity.UNCOMMON, mage.cards.u.UncagedFury.class)); cards.add(new SetCardInfo("Uncaged Fury", 183, Rarity.UNCOMMON, mage.cards.u.UncagedFury.class));
cards.add(new SetCardInfo("Vessel of Nascency", 224, Rarity.UNCOMMON, mage.cards.v.VesselOfNascency.class)); cards.add(new SetCardInfo("Vessel of Nascency", 224, Rarity.UNCOMMON, mage.cards.v.VesselOfNascency.class));
cards.add(new SetCardInfo("Veteran Cathar", 225, Rarity.UNCOMMON, mage.cards.v.VeteranCathar.class)); cards.add(new SetCardInfo("Veteran Cathar", 225, Rarity.UNCOMMON, mage.cards.v.VeteranCathar.class));
cards.add(new SetCardInfo("Vildin-Pack Alpha", 159, Rarity.UNCOMMON, mage.cards.v.VildinPackAlpha.class));
cards.add(new SetCardInfo("Village Messenger", 184, Rarity.UNCOMMON, mage.cards.v.VillageMessenger.class)); cards.add(new SetCardInfo("Village Messenger", 184, Rarity.UNCOMMON, mage.cards.v.VillageMessenger.class));
cards.add(new SetCardInfo("Voldaren Pariah", 138, Rarity.RARE, mage.cards.v.VoldarenPariah.class)); cards.add(new SetCardInfo("Voldaren Pariah", 138, Rarity.RARE, mage.cards.v.VoldarenPariah.class));
cards.add(new SetCardInfo("Voracious Reader", 58, Rarity.UNCOMMON, mage.cards.v.VoraciousReader.class)); cards.add(new SetCardInfo("Voracious Reader", 58, Rarity.UNCOMMON, mage.cards.v.VoraciousReader.class));

View file

@ -229,8 +229,6 @@ public final class TheLostCavernsOfIxalan extends ExpansionSet {
cards.add(new SetCardInfo("Island", 288, Rarity.LAND, mage.cards.basiclands.Island.class, FULL_ART_UST_VARIOUS)); cards.add(new SetCardInfo("Island", 288, Rarity.LAND, mage.cards.basiclands.Island.class, FULL_ART_UST_VARIOUS));
cards.add(new SetCardInfo("Island", 395, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Island", 395, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Island", 396, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Island", 396, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Itlimoc, Cradle of the Sun", 188, Rarity.RARE, mage.cards.i.ItlimocCradleOfTheSun.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Itlimoc, Cradle of the Sun", 380, Rarity.RARE, mage.cards.i.ItlimocCradleOfTheSun.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Itzquinth, Firstborn of Gishath", 230, Rarity.UNCOMMON, mage.cards.i.ItzquinthFirstbornOfGishath.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Itzquinth, Firstborn of Gishath", 230, Rarity.UNCOMMON, mage.cards.i.ItzquinthFirstbornOfGishath.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Itzquinth, Firstborn of Gishath", 331, Rarity.UNCOMMON, mage.cards.i.ItzquinthFirstbornOfGishath.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Itzquinth, Firstborn of Gishath", 331, Rarity.UNCOMMON, mage.cards.i.ItzquinthFirstbornOfGishath.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Ixalli's Lorekeeper", 194, Rarity.UNCOMMON, mage.cards.i.IxallisLorekeeper.class)); cards.add(new SetCardInfo("Ixalli's Lorekeeper", 194, Rarity.UNCOMMON, mage.cards.i.IxallisLorekeeper.class));
@ -372,7 +370,6 @@ public final class TheLostCavernsOfIxalan extends ExpansionSet {
cards.add(new SetCardInfo("Self-Reflection", 74, Rarity.UNCOMMON, mage.cards.s.SelfReflection.class)); cards.add(new SetCardInfo("Self-Reflection", 74, Rarity.UNCOMMON, mage.cards.s.SelfReflection.class));
cards.add(new SetCardInfo("Sentinel of the Nameless City", 211, Rarity.RARE, mage.cards.s.SentinelOfTheNamelessCity.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Sentinel of the Nameless City", 211, Rarity.RARE, mage.cards.s.SentinelOfTheNamelessCity.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Sentinel of the Nameless City", 383, Rarity.RARE, mage.cards.s.SentinelOfTheNamelessCity.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Sentinel of the Nameless City", 383, Rarity.RARE, mage.cards.s.SentinelOfTheNamelessCity.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Shadows' Lair", 108, Rarity.UNCOMMON, mage.cards.s.ShadowsLair.class));
cards.add(new SetCardInfo("Shipwreck Sentry", 75, Rarity.COMMON, mage.cards.s.ShipwreckSentry.class)); cards.add(new SetCardInfo("Shipwreck Sentry", 75, Rarity.COMMON, mage.cards.s.ShipwreckSentry.class));
cards.add(new SetCardInfo("Sinuous Benthisaur", 76, Rarity.UNCOMMON, mage.cards.s.SinuousBenthisaur.class)); cards.add(new SetCardInfo("Sinuous Benthisaur", 76, Rarity.UNCOMMON, mage.cards.s.SinuousBenthisaur.class));
cards.add(new SetCardInfo("Skullcap Snail", 119, Rarity.COMMON, mage.cards.s.SkullcapSnail.class)); cards.add(new SetCardInfo("Skullcap Snail", 119, Rarity.COMMON, mage.cards.s.SkullcapSnail.class));

View file

@ -24,7 +24,6 @@ public final class Transformers extends ExpansionSet {
cards.add(new SetCardInfo("Cyclonus, the Saboteur", 9, Rarity.MYTHIC, mage.cards.c.CyclonusTheSaboteur.class)); cards.add(new SetCardInfo("Cyclonus, the Saboteur", 9, Rarity.MYTHIC, mage.cards.c.CyclonusTheSaboteur.class));
cards.add(new SetCardInfo("Flamewar, Brash Veteran", 10, Rarity.MYTHIC, mage.cards.f.FlamewarBrashVeteran.class)); 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("Goldbug, Humanity's Ally", 11, Rarity.MYTHIC, mage.cards.g.GoldbugHumanitysAlly.class));
cards.add(new SetCardInfo("Goldbug, Scrappy Scout", 11, Rarity.MYTHIC, mage.cards.g.GoldbugScrappyScout.class));
cards.add(new SetCardInfo("Jetfire, Air Guardian", 3, Rarity.MYTHIC, mage.cards.j.JetfireAirGuardian.class)); cards.add(new SetCardInfo("Jetfire, Air Guardian", 3, Rarity.MYTHIC, mage.cards.j.JetfireAirGuardian.class));
cards.add(new SetCardInfo("Jetfire, Ingenious Scientist", 3, Rarity.MYTHIC, mage.cards.j.JetfireIngeniousScientist.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, Destructive Force", 12, Rarity.MYTHIC, mage.cards.m.MegatronDestructiveForce.class));

View file

@ -26,7 +26,6 @@ public class XLNTreasureChest extends ExpansionSet {
cards.add(new SetCardInfo("Conqueror's Galleon", 234, Rarity.RARE, mage.cards.c.ConquerorsGalleon.class)); cards.add(new SetCardInfo("Conqueror's Galleon", 234, Rarity.RARE, mage.cards.c.ConquerorsGalleon.class));
cards.add(new SetCardInfo("Dowsing Dagger", 235, Rarity.RARE, mage.cards.d.DowsingDagger.class)); cards.add(new SetCardInfo("Dowsing Dagger", 235, Rarity.RARE, mage.cards.d.DowsingDagger.class));
cards.add(new SetCardInfo("Growing Rites of Itlimoc", 191, Rarity.RARE, mage.cards.g.GrowingRitesOfItlimoc.class)); cards.add(new SetCardInfo("Growing Rites of Itlimoc", 191, Rarity.RARE, mage.cards.g.GrowingRitesOfItlimoc.class));
cards.add(new SetCardInfo("Itlimoc, Cradle of the Sun", 191, Rarity.RARE, mage.cards.i.ItlimocCradleOfTheSun.class));
cards.add(new SetCardInfo("Legion's Landing", 22, Rarity.RARE, mage.cards.l.LegionsLanding.class)); cards.add(new SetCardInfo("Legion's Landing", 22, Rarity.RARE, mage.cards.l.LegionsLanding.class));
cards.add(new SetCardInfo("Primal Amulet", 243, Rarity.RARE, mage.cards.p.PrimalAmulet.class)); cards.add(new SetCardInfo("Primal Amulet", 243, Rarity.RARE, mage.cards.p.PrimalAmulet.class));
cards.add(new SetCardInfo("Primal Wellspring", 243, Rarity.RARE, mage.cards.p.PrimalWellspring.class)); cards.add(new SetCardInfo("Primal Wellspring", 243, Rarity.RARE, mage.cards.p.PrimalWellspring.class));