From 06f54e5df17d4ef15c78e34116d6d7d2728cb99c Mon Sep 17 00:00:00 2001 From: jmlundeen Date: Sat, 29 Nov 2025 13:15:21 -0600 Subject: [PATCH] convert transforming "G" cards to single class file --- .../src/mage/cards/c/ChaosTheEndless.java | 48 -------- .../src/mage/cards/c/ChromeHostHulk.java | 57 ---------- .../mage/cards/g/GarlandKnightOfCornelia.java | 39 ++++--- .../src/mage/cards/g/GarrukRelentless.java | 66 ++++++++--- .../src/mage/cards/g/GarrukTheVeilCursed.java | 75 ------------- .../src/mage/cards/g/GatstafArsonists.java | 38 ++++--- Mage.Sets/src/mage/cards/g/GatstafHowler.java | 43 -------- .../src/mage/cards/g/GatstafRavagers.java | 43 -------- .../src/mage/cards/g/GatstafShepherd.java | 34 +++--- .../src/mage/cards/g/GeierReachBandit.java | 83 +++++++++++--- .../src/mage/cards/g/GnottvoldHermit.java | 45 ++++++-- .../src/mage/cards/g/GoldForgeGarrison.java | 48 -------- .../mage/cards/g/GoldbugHumanitysAlly.java | 97 +++++++++++++--- .../src/mage/cards/g/GoldbugScrappyScout.java | 104 ------------------ .../src/mage/cards/g/GoldenGuardian.java | 39 ++++--- .../src/mage/cards/g/GraspingShadows.java | 38 +++++-- .../src/mage/cards/g/GraveyardGlutton.java | 99 ----------------- .../src/mage/cards/g/GraveyardTrespasser.java | 79 +++++++++++-- .../mage/cards/g/GrimlockDinobotLeader.java | 59 +++++----- .../mage/cards/g/GrimlockFerociousKing.java | 53 --------- .../src/mage/cards/g/GrislyAnglerfish.java | 45 -------- .../src/mage/cards/g/GrizzledAngler.java | 33 ++++-- .../src/mage/cards/g/GrizzledOutcasts.java | 31 +++--- .../mage/cards/g/GrowingRitesOfItlimoc.java | 43 +++++--- .../src/mage/cards/g/GutterShortcut.java | 71 ------------ Mage.Sets/src/mage/cards/g/GutterSkulker.java | 59 ++++++++-- .../mage/cards/i/ItlimocCradleOfTheSun.java | 45 -------- .../src/mage/cards/k/KrallenhordeWantons.java | 40 ------- Mage.Sets/src/mage/cards/s/ShadowsLair.java | 51 --------- .../src/mage/cards/v/VildinPackAlpha.java | 83 -------------- Mage.Sets/src/mage/sets/EldritchMoon.java | 1 - Mage.Sets/src/mage/sets/FinalFantasy.java | 2 - .../src/mage/sets/FromTheVaultTransform.java | 1 - Mage.Sets/src/mage/sets/HasCon2017.java | 1 - Mage.Sets/src/mage/sets/Innistrad.java | 3 - .../src/mage/sets/InnistradCrimsonVow.java | 1 - .../src/mage/sets/InnistradDoubleFeature.java | 2 - .../src/mage/sets/InnistradMidnightHunt.java | 2 - .../src/mage/sets/InnistradRemastered.java | 5 - Mage.Sets/src/mage/sets/Ixalan.java | 1 - Mage.Sets/src/mage/sets/IxalanPromos.java | 1 - .../src/mage/sets/JudgeGiftCards2022.java | 1 - .../src/mage/sets/MarchOfTheMachine.java | 1 - Mage.Sets/src/mage/sets/RivalsOfIxalan.java | 1 - .../src/mage/sets/RivalsOfIxalanPromos.java | 1 - Mage.Sets/src/mage/sets/SecretLairDrop.java | 1 - Mage.Sets/src/mage/sets/ShadowsOfThePast.java | 1 - .../src/mage/sets/ShadowsOverInnistrad.java | 2 - .../mage/sets/ShadowsOverInnistradPromos.java | 1 - .../sets/ShadowsOverInnistradRemastered.java | 2 - .../src/mage/sets/TheLostCavernsOfIxalan.java | 3 - Mage.Sets/src/mage/sets/Transformers.java | 1 - Mage.Sets/src/mage/sets/XLNTreasureChest.java | 1 - 53 files changed, 571 insertions(+), 1153 deletions(-) delete mode 100644 Mage.Sets/src/mage/cards/c/ChaosTheEndless.java delete mode 100644 Mage.Sets/src/mage/cards/c/ChromeHostHulk.java delete mode 100644 Mage.Sets/src/mage/cards/g/GarrukTheVeilCursed.java delete mode 100644 Mage.Sets/src/mage/cards/g/GatstafHowler.java delete mode 100644 Mage.Sets/src/mage/cards/g/GatstafRavagers.java delete mode 100644 Mage.Sets/src/mage/cards/g/GoldForgeGarrison.java delete mode 100644 Mage.Sets/src/mage/cards/g/GoldbugScrappyScout.java delete mode 100644 Mage.Sets/src/mage/cards/g/GraveyardGlutton.java delete mode 100644 Mage.Sets/src/mage/cards/g/GrimlockFerociousKing.java delete mode 100644 Mage.Sets/src/mage/cards/g/GrislyAnglerfish.java delete mode 100644 Mage.Sets/src/mage/cards/g/GutterShortcut.java delete mode 100644 Mage.Sets/src/mage/cards/i/ItlimocCradleOfTheSun.java delete mode 100644 Mage.Sets/src/mage/cards/k/KrallenhordeWantons.java delete mode 100644 Mage.Sets/src/mage/cards/s/ShadowsLair.java delete mode 100644 Mage.Sets/src/mage/cards/v/VildinPackAlpha.java diff --git a/Mage.Sets/src/mage/cards/c/ChaosTheEndless.java b/Mage.Sets/src/mage/cards/c/ChaosTheEndless.java deleted file mode 100644 index cb222c37a81..00000000000 --- a/Mage.Sets/src/mage/cards/c/ChaosTheEndless.java +++ /dev/null @@ -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); - } -} diff --git a/Mage.Sets/src/mage/cards/c/ChromeHostHulk.java b/Mage.Sets/src/mage/cards/c/ChromeHostHulk.java deleted file mode 100644 index 96aa262eeb4..00000000000 --- a/Mage.Sets/src/mage/cards/c/ChromeHostHulk.java +++ /dev/null @@ -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); - } -} diff --git a/Mage.Sets/src/mage/cards/g/GarlandKnightOfCornelia.java b/Mage.Sets/src/mage/cards/g/GarlandKnightOfCornelia.java index 80580939181..b6d5a06f9a1 100644 --- a/Mage.Sets/src/mage/cards/g/GarlandKnightOfCornelia.java +++ b/Mage.Sets/src/mage/cards/g/GarlandKnightOfCornelia.java @@ -1,16 +1,18 @@ package mage.cards.g; -import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.ActivateAsSorceryActivatedAbility; +import mage.abilities.common.DiesSourceTriggeredAbility; import mage.abilities.common.SpellCastControllerTriggeredAbility; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.PutOnLibrarySourceEffect; import mage.abilities.effects.keyword.SurveilEffect; +import mage.abilities.keyword.FlyingAbility; import mage.abilities.keyword.TransformAbility; import mage.cards.Card; -import mage.cards.CardImpl; import mage.cards.CardSetInfo; +import mage.cards.TransformingDoubleFacedCard; import mage.constants.*; import mage.filter.StaticFilters; import mage.game.Game; @@ -22,29 +24,38 @@ import java.util.UUID; /** * @author TheElk801 */ -public final class GarlandKnightOfCornelia extends CardImpl { +public final class GarlandKnightOfCornelia extends TransformingDoubleFacedCard { 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; - - 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); + // Garland, Knight of Cornelia + this.getLeftHalfCard().setPT(3, 2); // 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 )); // {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.addAbility(new ActivateAsSorceryActivatedAbility( + this.getLeftHalfCard().addAbility(new ActivateAsSorceryActivatedAbility( 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) { diff --git a/Mage.Sets/src/mage/cards/g/GarrukRelentless.java b/Mage.Sets/src/mage/cards/g/GarrukRelentless.java index b22ae5c3b93..c39b05e92e6 100644 --- a/Mage.Sets/src/mage/cards/g/GarrukRelentless.java +++ b/Mage.Sets/src/mage/cards/g/GarrukRelentless.java @@ -3,19 +3,29 @@ package mage.cards.g; import mage.abilities.Ability; import mage.abilities.LoyaltyAbility; 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.common.CreateTokenEffect; import mage.abilities.effects.common.DamageTargetEffect; +import mage.abilities.effects.common.DoIfCostPaid; import mage.abilities.effects.common.TransformSourceEffect; -import mage.abilities.keyword.TransformAbility; -import mage.cards.CardImpl; +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.CardSetInfo; +import mage.cards.TransformingDoubleFacedCard; import mage.constants.*; import mage.counters.CounterType; +import mage.filter.StaticFilters; import mage.game.Game; import mage.game.events.GameEvent; import mage.game.permanent.Permanent; import mage.game.permanent.token.WolfToken; +import mage.game.permanent.token.WolfTokenWithDeathtouch; +import mage.target.common.TargetCardInLibrary; import mage.target.common.TargetCreaturePermanent; import java.util.UUID; @@ -23,29 +33,54 @@ import java.util.UUID; /** * @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) { - super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{3}{G}"); - this.supertype.add(SuperType.LEGENDARY); - this.subtype.add(SubType.GARRUK); + super(ownerId, setInfo, + new SuperType[]{SuperType.LEGENDARY}, new CardType[]{CardType.PLANESWALKER}, new SubType[]{SubType.GARRUK}, "{3}{G}", + "Garruk, the Veil-Cursed", + new SuperType[]{SuperType.LEGENDARY}, new CardType[]{CardType.PLANESWALKER}, new SubType[]{SubType.GARRUK}, "BG" + ); - this.secondSideCardClazz = mage.cards.g.GarrukTheVeilCursed.class; - - this.setStartingLoyalty(3); + // Garruk Relentless + this.getLeftHalfCard().setStartingLoyalty(3); // When Garruk Relentless has two or fewer loyalty counters on him, transform him. - this.addAbility(new TransformAbility()); - this.addAbility(new GarrukRelentlessStateTrigger()); + this.getLeftHalfCard().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.addEffect(new GarrukRelentlessDamageEffect()); ability.addTarget(new TargetCreaturePermanent()); - this.addAbility(ability); + this.getLeftHalfCard().addAbility(ability); // 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) { @@ -60,7 +95,7 @@ public final class GarrukRelentless extends CardImpl { class GarrukRelentlessStateTrigger extends StateTriggeredAbility { - public GarrukRelentlessStateTrigger() { + GarrukRelentlessStateTrigger() { super(Zone.BATTLEFIELD, new TransformSourceEffect()); } @@ -109,5 +144,4 @@ class GarrukRelentlessDamageEffect extends OneShotEffect { public GarrukRelentlessDamageEffect copy() { return new GarrukRelentlessDamageEffect(this); } - } diff --git a/Mage.Sets/src/mage/cards/g/GarrukTheVeilCursed.java b/Mage.Sets/src/mage/cards/g/GarrukTheVeilCursed.java deleted file mode 100644 index 4bd063d6f6f..00000000000 --- a/Mage.Sets/src/mage/cards/g/GarrukTheVeilCursed.java +++ /dev/null @@ -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); - } -} diff --git a/Mage.Sets/src/mage/cards/g/GatstafArsonists.java b/Mage.Sets/src/mage/cards/g/GatstafArsonists.java index 95ee3a5336b..52b343bda84 100644 --- a/Mage.Sets/src/mage/cards/g/GatstafArsonists.java +++ b/Mage.Sets/src/mage/cards/g/GatstafArsonists.java @@ -1,32 +1,42 @@ package mage.cards.g; -import java.util.UUID; -import mage.MageInt; +import mage.abilities.common.WerewolfBackTriggeredAbility; import mage.abilities.common.WerewolfFrontTriggeredAbility; -import mage.abilities.keyword.TransformAbility; -import mage.cards.CardImpl; +import mage.abilities.keyword.MenaceAbility; import mage.cards.CardSetInfo; +import mage.cards.TransformingDoubleFacedCard; import mage.constants.CardType; import mage.constants.SubType; +import mage.constants.SuperType; + +import java.util.UUID; /** - * * @author LevelX2 */ -public final class GatstafArsonists extends CardImpl { +public final class GatstafArsonists extends TransformingDoubleFacedCard { public GatstafArsonists(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{R}"); - this.subtype.add(SubType.HUMAN); - this.subtype.add(SubType.WEREWOLF); - this.power = new MageInt(5); - this.toughness = new MageInt(4); + super(ownerId, setInfo, + new SuperType[]{}, new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN, SubType.WEREWOLF}, "{4}{R}", + "Gatstaf Ravagers", + new SuperType[]{}, new CardType[]{CardType.CREATURE}, new SubType[]{SubType.WEREWOLF}, "R" + ); - 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. - this.addAbility(new TransformAbility()); - this.addAbility(new WerewolfFrontTriggeredAbility()); + this.getLeftHalfCard().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) { diff --git a/Mage.Sets/src/mage/cards/g/GatstafHowler.java b/Mage.Sets/src/mage/cards/g/GatstafHowler.java deleted file mode 100644 index 3d98791e211..00000000000 --- a/Mage.Sets/src/mage/cards/g/GatstafHowler.java +++ /dev/null @@ -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); - } -} diff --git a/Mage.Sets/src/mage/cards/g/GatstafRavagers.java b/Mage.Sets/src/mage/cards/g/GatstafRavagers.java deleted file mode 100644 index fd2463f180d..00000000000 --- a/Mage.Sets/src/mage/cards/g/GatstafRavagers.java +++ /dev/null @@ -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); - } -} diff --git a/Mage.Sets/src/mage/cards/g/GatstafShepherd.java b/Mage.Sets/src/mage/cards/g/GatstafShepherd.java index c23426f4896..8e011cbfc28 100644 --- a/Mage.Sets/src/mage/cards/g/GatstafShepherd.java +++ b/Mage.Sets/src/mage/cards/g/GatstafShepherd.java @@ -1,10 +1,10 @@ package mage.cards.g; -import mage.MageInt; +import mage.abilities.common.WerewolfBackTriggeredAbility; import mage.abilities.common.WerewolfFrontTriggeredAbility; -import mage.abilities.keyword.TransformAbility; -import mage.cards.CardImpl; +import mage.abilities.keyword.IntimidateAbility; import mage.cards.CardSetInfo; +import mage.cards.TransformingDoubleFacedCard; import mage.constants.CardType; import mage.constants.SubType; @@ -13,21 +13,29 @@ import java.util.UUID; /** * @author nantuko */ -public final class GatstafShepherd extends CardImpl { +public final class GatstafShepherd extends TransformingDoubleFacedCard { public GatstafShepherd(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G}"); - this.subtype.add(SubType.HUMAN); - this.subtype.add(SubType.WEREWOLF); + super(ownerId, setInfo, + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN, SubType.WEREWOLF}, "{1}{G}", + "Gatstaf Howler", + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.WEREWOLF}, "G" + ); - this.secondSideCardClazz = mage.cards.g.GatstafHowler.class; - - this.power = new MageInt(2); - this.toughness = new MageInt(2); + // Gatstaf Shepherd + this.getLeftHalfCard().setPT(2, 2); // At the beginning of each upkeep, if no spells were cast last turn, transform Gatstaf Shepherd. - this.addAbility(new TransformAbility()); - this.addAbility(new WerewolfFrontTriggeredAbility()); + this.getLeftHalfCard().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) { diff --git a/Mage.Sets/src/mage/cards/g/GeierReachBandit.java b/Mage.Sets/src/mage/cards/g/GeierReachBandit.java index 004e24bd542..2b2981a3248 100644 --- a/Mage.Sets/src/mage/cards/g/GeierReachBandit.java +++ b/Mage.Sets/src/mage/cards/g/GeierReachBandit.java @@ -1,37 +1,56 @@ 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.effects.OneShotEffect; import mage.abilities.keyword.HasteAbility; -import mage.abilities.keyword.TransformAbility; -import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.SubType; +import mage.cards.TransformingDoubleFacedCard; +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 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) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{R}"); - this.subtype.add(SubType.HUMAN); - this.subtype.add(SubType.ROGUE); - this.subtype.add(SubType.WEREWOLF); - this.power = new MageInt(3); - this.toughness = new MageInt(2); + super(ownerId, setInfo, + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN, SubType.ROGUE, SubType.WEREWOLF}, "{2}{R}", + "Vildin-Pack Alpha", + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.WEREWOLF}, "R" + ); - this.secondSideCardClazz = mage.cards.v.VildinPackAlpha.class; + // Geier Reach Bandit + this.getLeftHalfCard().setPT(3, 2); // 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. - this.addAbility(new TransformAbility()); - this.addAbility(new WerewolfFrontTriggeredAbility()); + this.getLeftHalfCard().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) { @@ -42,4 +61,34 @@ public final class GeierReachBandit extends CardImpl { public GeierReachBandit copy() { return new GeierReachBandit(this); } -} \ No newline at end of file +} + +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; + } +} diff --git a/Mage.Sets/src/mage/cards/g/GnottvoldHermit.java b/Mage.Sets/src/mage/cards/g/GnottvoldHermit.java index f8410e520a0..c0902ea0a6e 100644 --- a/Mage.Sets/src/mage/cards/g/GnottvoldHermit.java +++ b/Mage.Sets/src/mage/cards/g/GnottvoldHermit.java @@ -1,33 +1,56 @@ package mage.cards.g; -import mage.MageInt; +import mage.abilities.Ability; import mage.abilities.common.ActivateAsSorceryActivatedAbility; +import mage.abilities.common.AttacksTriggeredAbility; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.common.TransformSourceEffect; -import mage.abilities.keyword.TransformAbility; -import mage.cards.CardImpl; +import mage.abilities.effects.common.continuous.SetBasePowerToughnessTargetEffect; import mage.cards.CardSetInfo; +import mage.cards.TransformingDoubleFacedCard; 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 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) { - 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); - this.power = new MageInt(4); - this.toughness = new MageInt(4); - this.secondSideCardClazz = mage.cards.c.ChromeHostHulk.class; + // Gnottvold Hermit + this.getLeftHalfCard().setPT(4, 4); // {5}{U/P}: Transform Gnottvold Hermit. Activate only as a sorcery. - this.addAbility(new TransformAbility()); - this.addAbility(new ActivateAsSorceryActivatedAbility(new TransformSourceEffect(), new ManaCostsImpl<>("{5}{U/P}"))); + this.getLeftHalfCard().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) { diff --git a/Mage.Sets/src/mage/cards/g/GoldForgeGarrison.java b/Mage.Sets/src/mage/cards/g/GoldForgeGarrison.java deleted file mode 100644 index 5fd3930da98..00000000000 --- a/Mage.Sets/src/mage/cards/g/GoldForgeGarrison.java +++ /dev/null @@ -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; - - // (Transforms from Golden Guardian.) - - // {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); - } -} diff --git a/Mage.Sets/src/mage/cards/g/GoldbugHumanitysAlly.java b/Mage.Sets/src/mage/cards/g/GoldbugHumanitysAlly.java index 5b81a1d8090..2c99ca8339b 100644 --- a/Mage.Sets/src/mage/cards/g/GoldbugHumanitysAlly.java +++ b/Mage.Sets/src/mage/cards/g/GoldbugHumanitysAlly.java @@ -1,55 +1,76 @@ package mage.cards.g; -import mage.MageInt; +import mage.abilities.TriggeredAbilityImpl; import mage.abilities.common.CastSecondSpellTriggeredAbility; 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.TransformSourceEffect; +import mage.abilities.keyword.LivingMetalAbility; import mage.abilities.keyword.MoreThanMeetsTheEyeAbility; -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.cards.TransformingDoubleFacedCard; +import mage.constants.*; import mage.filter.FilterPermanent; +import mage.filter.FilterSpell; import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.predicate.permanent.AttackingPredicate; +import mage.game.Game; +import mage.game.events.GameEvent; +import java.util.Objects; import java.util.UUID; /** * @author TheElk801 */ -public final class GoldbugHumanitysAlly extends CardImpl { +public final class GoldbugHumanitysAlly extends TransformingDoubleFacedCard { private static final FilterPermanent filter = new FilterControlledCreaturePermanent(SubType.HUMAN, "attacking Humans you control"); + private static final FilterSpell humanSpellFilter = new FilterSpell("Human spells"); + static { filter.add(AttackingPredicate.instance); + humanSpellFilter.add(SubType.HUMAN.getPredicate()); } 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); - this.subtype.add(SubType.ROBOT); - this.power = new MageInt(3); - this.toughness = new MageInt(3); - - this.secondSideCardClazz = mage.cards.g.GoldbugScrappyScout.class; + // Goldbug, Humanity's Ally + this.getLeftHalfCard().setPT(3, 3); // 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. - this.addAbility(new SimpleStaticAbility(new PreventAllDamageToAllEffect( + this.getLeftHalfCard().addAbility(new SimpleStaticAbility(new PreventAllDamageToAllEffect( Duration.WhileOnBattlefield, filter, true ))); // 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) { @@ -61,3 +82,45 @@ public final class GoldbugHumanitysAlly extends CardImpl { 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}."; + } +} diff --git a/Mage.Sets/src/mage/cards/g/GoldbugScrappyScout.java b/Mage.Sets/src/mage/cards/g/GoldbugScrappyScout.java deleted file mode 100644 index 4cd192a781e..00000000000 --- a/Mage.Sets/src/mage/cards/g/GoldbugScrappyScout.java +++ /dev/null @@ -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}."; - } -} diff --git a/Mage.Sets/src/mage/cards/g/GoldenGuardian.java b/Mage.Sets/src/mage/cards/g/GoldenGuardian.java index d30b0a5cf7a..c04f609ad9e 100644 --- a/Mage.Sets/src/mage/cards/g/GoldenGuardian.java +++ b/Mage.Sets/src/mage/cards/g/GoldenGuardian.java @@ -1,23 +1,27 @@ package mage.cards.g; -import mage.MageInt; import mage.abilities.Ability; import mage.abilities.DelayedTriggeredAbility; import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.CreateDelayedTriggeredAbilityEffect; +import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.effects.common.FightTargetSourceEffect; +import mage.abilities.effects.mana.AddManaOfAnyColorEffect; import mage.abilities.keyword.DefenderAbility; import mage.abilities.keyword.TransformAbility; +import mage.abilities.mana.SimpleManaAbility; import mage.cards.Card; -import mage.cards.CardImpl; import mage.cards.CardSetInfo; +import mage.cards.TransformingDoubleFacedCard; import mage.constants.*; import mage.filter.StaticFilters; import mage.game.Game; import mage.game.events.GameEvent; import mage.game.events.ZoneChangeEvent; +import mage.game.permanent.token.GoldForgeGarrisonGolemToken; import mage.players.Player; import mage.target.TargetPermanent; @@ -26,26 +30,35 @@ import java.util.UUID; /** * @author LevelX2 */ -public final class GoldenGuardian extends CardImpl { +public final class GoldenGuardian extends TransformingDoubleFacedCard { 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); - this.power = new MageInt(4); - this.toughness = new MageInt(4); - - this.secondSideCardClazz = mage.cards.g.GoldForgeGarrison.class; + // Golden Guardian + this.getLeftHalfCard().setPT(4, 4); // 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. - this.addAbility(new TransformAbility()); Ability ability = new SimpleActivatedAbility(new FightTargetSourceEffect(), new GenericManaCost(2)); ability.addTarget(new TargetPermanent(StaticFilters.FILTER_ANOTHER_TARGET_CREATURE_YOU_CONTROL)); 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) { @@ -60,7 +73,7 @@ public final class GoldenGuardian extends CardImpl { class GoldenGuardianDelayedTriggeredAbility extends DelayedTriggeredAbility { - public GoldenGuardianDelayedTriggeredAbility() { + GoldenGuardianDelayedTriggeredAbility() { super(new GoldenGuardianReturnTransformedEffect(), Duration.EndOfTurn); setTriggerPhrase("When {this} dies this turn, "); } diff --git a/Mage.Sets/src/mage/cards/g/GraspingShadows.java b/Mage.Sets/src/mage/cards/g/GraspingShadows.java index 9297ca57c2d..c73dc3f5752 100644 --- a/Mage.Sets/src/mage/cards/g/GraspingShadows.java +++ b/Mage.Sets/src/mage/cards/g/GraspingShadows.java @@ -2,18 +2,26 @@ package mage.cards.g; import mage.abilities.Ability; import mage.abilities.common.AttacksAloneControlledTriggeredAbility; +import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.condition.Condition; 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.effects.common.DrawCardSourceControllerEffect; +import mage.abilities.effects.common.LoseLifeSourceControllerEffect; import mage.abilities.effects.common.TransformSourceEffect; import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; import mage.abilities.effects.common.counter.AddCountersSourceEffect; import mage.abilities.keyword.DeathtouchAbility; import mage.abilities.keyword.LifelinkAbility; -import mage.abilities.keyword.TransformAbility; -import mage.cards.CardImpl; +import mage.abilities.mana.BlackManaAbility; import mage.cards.CardSetInfo; +import mage.cards.TransformingDoubleFacedCard; import mage.constants.CardType; +import mage.constants.SubType; +import mage.constants.SuperType; import mage.counters.CounterType; import java.util.UUID; @@ -21,14 +29,18 @@ import java.util.UUID; /** * @author TheElk801 */ -public final class GraspingShadows extends CardImpl { +public final class GraspingShadows extends TransformingDoubleFacedCard { private static final Condition condition = new SourceHasCounterCondition(CounterType.DREAD, 3); public GraspingShadows(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{B}"); - this.secondSideCardClazz = mage.cards.s.ShadowsLair.class; + super(ownerId, setInfo, + 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. Ability ability = new AttacksAloneControlledTriggeredAbility( new GainAbilityTargetEffect(DeathtouchAbility.getInstance()) @@ -42,8 +54,20 @@ public final class GraspingShadows extends CardImpl { new TransformSourceEffect(), condition, "Then if there are three or more dread counters on it, transform it" )); - this.addAbility(new TransformAbility()); - this.addAbility(ability); + this.getLeftHalfCard().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) { diff --git a/Mage.Sets/src/mage/cards/g/GraveyardGlutton.java b/Mage.Sets/src/mage/cards/g/GraveyardGlutton.java deleted file mode 100644 index 5d6f60ee957..00000000000 --- a/Mage.Sets/src/mage/cards/g/GraveyardGlutton.java +++ /dev/null @@ -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; - - // Ward—Discard 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; - } -} diff --git a/Mage.Sets/src/mage/cards/g/GraveyardTrespasser.java b/Mage.Sets/src/mage/cards/g/GraveyardTrespasser.java index 1e3f1f865e2..7ad4f57b6ac 100644 --- a/Mage.Sets/src/mage/cards/g/GraveyardTrespasser.java +++ b/Mage.Sets/src/mage/cards/g/GraveyardTrespasser.java @@ -1,16 +1,16 @@ 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.DayboundAbility; +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.cards.TransformingDoubleFacedCard; import mage.constants.CardType; import mage.constants.Outcome; import mage.constants.SubType; @@ -25,27 +25,42 @@ import java.util.UUID; /** * @author TheElk801 */ -public final class GraveyardTrespasser extends CardImpl { +public final class GraveyardTrespasser extends TransformingDoubleFacedCard { 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); - this.subtype.add(SubType.WEREWOLF); - this.power = new MageInt(3); - this.toughness = new MageInt(3); - this.secondSideCardClazz = mage.cards.g.GraveyardGlutton.class; + // Graveyard Trespasser + this.getLeftHalfCard().setPT(3, 3); // Ward—Discard 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. Ability ability = new EntersBattlefieldOrAttacksSourceTriggeredAbility(new GraveyardTrespasserEffect()); ability.addTarget(new TargetCardInGraveyard(0, 1)); - this.addAbility(ability); + this.getLeftHalfCard().addAbility(ability); // Daybound - this.addAbility(new DayboundAbility()); + this.getLeftHalfCard().addAbility(new DayboundAbility()); + + // Graveyard Glutton + this.getRightHalfCard().setPT(4, 4); + + // Ward—Discard 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) { @@ -98,3 +113,43 @@ class GraveyardTrespasserEffect extends OneShotEffect { 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; + } +} diff --git a/Mage.Sets/src/mage/cards/g/GrimlockDinobotLeader.java b/Mage.Sets/src/mage/cards/g/GrimlockDinobotLeader.java index bbc81909820..4e5d938eae5 100644 --- a/Mage.Sets/src/mage/cards/g/GrimlockDinobotLeader.java +++ b/Mage.Sets/src/mage/cards/g/GrimlockDinobotLeader.java @@ -1,61 +1,71 @@ - package mage.cards.g; -import java.util.UUID; -import mage.MageInt; +import mage.MageObject; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.common.TransformSourceEffect; import mage.abilities.effects.common.continuous.BoostControlledEffect; +import mage.abilities.keyword.TrampleAbility; import mage.abilities.keyword.TransformAbility; -import mage.cards.CardImpl; import mage.cards.CardSetInfo; +import mage.cards.TransformingDoubleFacedCard; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.SubType; import mage.constants.SuperType; -import mage.constants.Zone; import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.Predicates; import mage.filter.predicate.mageobject.AbilityPredicate; import mage.filter.predicate.permanent.TransformedPredicate; +import java.util.UUID; /** - * * @author Saga */ -public final class GrimlockDinobotLeader extends CardImpl{ - - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Dinosaurs and Vehicles"); +public final class GrimlockDinobotLeader extends TransformingDoubleFacedCard { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Dinosaurs and Vehicles you control"); static { - filter.add(Predicates.or(SubType.DINOSAUR.getPredicate(), SubType.VEHICLE.getPredicate())); + filter.add(Predicates.or( + SubType.DINOSAUR.getPredicate(), + SubType.VEHICLE.getPredicate()) + ); } - + private static final FilterCreaturePermanent filter2 = new FilterCreaturePermanent("Transformers creatures"); static { filter2.add(Predicates.not(SubType.DINOSAUR.getPredicate())); filter2.add(Predicates.not(SubType.VEHICLE.getPredicate())); 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. - this.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, filter, false))); + this.getLeftHalfCard().addAbility(new SimpleStaticAbility(new BoostControlledEffect(2, 0, Duration.WhileOnBattlefield, filter2, true))); + // {2}: Grimlock, Dinobot Leader becomes Grimlock, Ferocious King. - this.addAbility(new TransformAbility()); - this.addAbility(new SimpleActivatedAbility(new TransformSourceEffect(), new ManaCostsImpl<>("{2}"))); + this.getLeftHalfCard().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) { @@ -66,5 +76,4 @@ public final class GrimlockDinobotLeader extends CardImpl{ public GrimlockDinobotLeader copy() { return new GrimlockDinobotLeader(this); } - } diff --git a/Mage.Sets/src/mage/cards/g/GrimlockFerociousKing.java b/Mage.Sets/src/mage/cards/g/GrimlockFerociousKing.java deleted file mode 100644 index f24ff1b75e6..00000000000 --- a/Mage.Sets/src/mage/cards/g/GrimlockFerociousKing.java +++ /dev/null @@ -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); - } - -} diff --git a/Mage.Sets/src/mage/cards/g/GrislyAnglerfish.java b/Mage.Sets/src/mage/cards/g/GrislyAnglerfish.java deleted file mode 100644 index a8eace0c588..00000000000 --- a/Mage.Sets/src/mage/cards/g/GrislyAnglerfish.java +++ /dev/null @@ -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); - } -} diff --git a/Mage.Sets/src/mage/cards/g/GrizzledAngler.java b/Mage.Sets/src/mage/cards/g/GrizzledAngler.java index ac856108974..0753f9ef08e 100644 --- a/Mage.Sets/src/mage/cards/g/GrizzledAngler.java +++ b/Mage.Sets/src/mage/cards/g/GrizzledAngler.java @@ -1,20 +1,22 @@ package mage.cards.g; -import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.condition.Condition; import mage.abilities.condition.common.CardsInControllerGraveyardCondition; import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.decorator.ConditionalOneShotEffect; import mage.abilities.effects.common.MillCardsControllerEffect; import mage.abilities.effects.common.TransformSourceEffect; -import mage.abilities.keyword.TransformAbility; -import mage.cards.CardImpl; +import mage.abilities.effects.common.combat.AttacksIfAbleAllEffect; import mage.cards.CardSetInfo; +import mage.cards.TransformingDoubleFacedCard; import mage.constants.CardType; +import mage.constants.Duration; import mage.constants.SubType; import mage.filter.FilterCard; +import mage.filter.StaticFilters; import mage.filter.common.FilterCreatureCard; import mage.filter.predicate.mageobject.ColorlessPredicate; @@ -23,7 +25,7 @@ import java.util.UUID; /** * @author fireshoes */ -public final class GrizzledAngler extends CardImpl { +public final class GrizzledAngler extends TransformingDoubleFacedCard { 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); public GrizzledAngler(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{U}"); - this.subtype.add(SubType.HUMAN); - this.power = new MageInt(2); - this.toughness = new MageInt(3); + super(ownerId, setInfo, + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN}, "{2}{U}", + "Grisly Anglerfish", + 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. - this.addAbility(new TransformAbility()); Ability ability = new SimpleActivatedAbility(new MillCardsControllerEffect(2), new TapSourceCost()); ability.addEffect(new ConditionalOneShotEffect( new TransformSourceEffect(), condition, "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) { diff --git a/Mage.Sets/src/mage/cards/g/GrizzledOutcasts.java b/Mage.Sets/src/mage/cards/g/GrizzledOutcasts.java index ab0bcf6566e..3c8ba3067e0 100644 --- a/Mage.Sets/src/mage/cards/g/GrizzledOutcasts.java +++ b/Mage.Sets/src/mage/cards/g/GrizzledOutcasts.java @@ -1,33 +1,38 @@ package mage.cards.g; -import mage.MageInt; +import mage.abilities.common.WerewolfBackTriggeredAbility; import mage.abilities.common.WerewolfFrontTriggeredAbility; -import mage.abilities.keyword.TransformAbility; -import mage.cards.CardImpl; import mage.cards.CardSetInfo; +import mage.cards.TransformingDoubleFacedCard; import mage.constants.CardType; import mage.constants.SubType; +import mage.constants.SuperType; import java.util.UUID; /** * @author nantuko */ -public final class GrizzledOutcasts extends CardImpl { +public final class GrizzledOutcasts extends TransformingDoubleFacedCard { public GrizzledOutcasts(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{G}"); - this.subtype.add(SubType.HUMAN); - this.subtype.add(SubType.WEREWOLF); + super(ownerId, setInfo, + new SuperType[]{}, new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN, SubType.WEREWOLF}, "{4}{G}", + "Krallenhorde Wantons", + new SuperType[]{}, new CardType[]{CardType.CREATURE}, new SubType[]{SubType.WEREWOLF}, "G" + ); - this.secondSideCardClazz = mage.cards.k.KrallenhordeWantons.class; - - this.power = new MageInt(4); - this.toughness = new MageInt(4); + // Grizzled Outcasts + this.getLeftHalfCard().setPT(4, 4); // At the beginning of each upkeep, if no spells were cast last turn, transform Grizzled Outcasts. - this.addAbility(new TransformAbility()); - this.addAbility(new WerewolfFrontTriggeredAbility()); + this.getLeftHalfCard().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) { diff --git a/Mage.Sets/src/mage/cards/g/GrowingRitesOfItlimoc.java b/Mage.Sets/src/mage/cards/g/GrowingRitesOfItlimoc.java index cbc80fc495e..3969690b886 100644 --- a/Mage.Sets/src/mage/cards/g/GrowingRitesOfItlimoc.java +++ b/Mage.Sets/src/mage/cards/g/GrowingRitesOfItlimoc.java @@ -1,19 +1,19 @@ package mage.cards.g; +import mage.Mana; import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.condition.Condition; import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition; +import mage.abilities.dynamicvalue.common.CreaturesYouControlCount; import mage.abilities.effects.common.LookLibraryAndPickControllerEffect; import mage.abilities.effects.common.TransformSourceEffect; 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.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.ComparisonType; -import mage.constants.PutCards; -import mage.constants.SuperType; +import mage.cards.TransformingDoubleFacedCard; +import mage.constants.*; import mage.filter.StaticFilters; import mage.filter.common.FilterControlledCreaturePermanent; @@ -22,7 +22,7 @@ import java.util.UUID; /** * @author JRHerlehy */ -public final class GrowingRitesOfItlimoc extends CardImpl { +public final class GrowingRitesOfItlimoc extends TransformingDoubleFacedCard { private static final Condition condition = new PermanentsOnTheBattlefieldCondition( new FilterControlledCreaturePermanent("you control four or more creatures"), @@ -30,23 +30,30 @@ public final class GrowingRitesOfItlimoc extends CardImpl { ); 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); - - this.secondSideCardClazz = mage.cards.i.ItlimocCradleOfTheSun.class; - - // 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( + // 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.getLeftHalfCard().addAbility(new EntersBattlefieldTriggeredAbility(new LookLibraryAndPickControllerEffect( 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. - this.addAbility(new TransformAbility()); - this.addAbility(new BeginningOfEndStepTriggeredAbility(new TransformSourceEffect()) + this.getLeftHalfCard().addAbility(new BeginningOfEndStepTriggeredAbility(new TransformSourceEffect()) .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) { diff --git a/Mage.Sets/src/mage/cards/g/GutterShortcut.java b/Mage.Sets/src/mage/cards/g/GutterShortcut.java deleted file mode 100644 index bfb716b5d02..00000000000 --- a/Mage.Sets/src/mage/cards/g/GutterShortcut.java +++ /dev/null @@ -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()); - } -} diff --git a/Mage.Sets/src/mage/cards/g/GutterSkulker.java b/Mage.Sets/src/mage/cards/g/GutterSkulker.java index 674a82f29b8..ec68e6828b0 100644 --- a/Mage.Sets/src/mage/cards/g/GutterSkulker.java +++ b/Mage.Sets/src/mage/cards/g/GutterSkulker.java @@ -1,42 +1,68 @@ package mage.cards.g; -import mage.MageInt; +import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.condition.Condition; import mage.abilities.condition.common.SourceAttackingAloneCondition; -import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.decorator.ConditionalRestrictionEffect; +import mage.abilities.effects.common.AttachEffect; import mage.abilities.effects.common.combat.CantBeBlockedSourceEffect; import mage.abilities.keyword.DisturbAbility; -import mage.cards.CardImpl; +import mage.abilities.keyword.EnchantAbility; import mage.cards.CardSetInfo; +import mage.cards.TransformingDoubleFacedCard; import mage.constants.CardType; import mage.constants.Duration; +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 GutterSkulker extends CardImpl { +public final class GutterSkulker extends TransformingDoubleFacedCard { 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); - this.power = new MageInt(3); - this.toughness = new MageInt(3); - this.secondSideCardClazz = mage.cards.g.GutterShortcut.class; + // Gutter Skulker + this.getLeftHalfCard().setPT(3, 3); // 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), SourceAttackingAloneCondition.instance, "{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} - 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) { @@ -48,3 +74,14 @@ public final class GutterSkulker extends CardImpl { 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()); + } +} diff --git a/Mage.Sets/src/mage/cards/i/ItlimocCradleOfTheSun.java b/Mage.Sets/src/mage/cards/i/ItlimocCradleOfTheSun.java deleted file mode 100644 index 30411803120..00000000000 --- a/Mage.Sets/src/mage/cards/i/ItlimocCradleOfTheSun.java +++ /dev/null @@ -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); - } -} diff --git a/Mage.Sets/src/mage/cards/k/KrallenhordeWantons.java b/Mage.Sets/src/mage/cards/k/KrallenhordeWantons.java deleted file mode 100644 index dc8e2624601..00000000000 --- a/Mage.Sets/src/mage/cards/k/KrallenhordeWantons.java +++ /dev/null @@ -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); - } -} diff --git a/Mage.Sets/src/mage/cards/s/ShadowsLair.java b/Mage.Sets/src/mage/cards/s/ShadowsLair.java deleted file mode 100644 index fed50911cb7..00000000000 --- a/Mage.Sets/src/mage/cards/s/ShadowsLair.java +++ /dev/null @@ -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); - } -} diff --git a/Mage.Sets/src/mage/cards/v/VildinPackAlpha.java b/Mage.Sets/src/mage/cards/v/VildinPackAlpha.java deleted file mode 100644 index 9bfc27a5810..00000000000 --- a/Mage.Sets/src/mage/cards/v/VildinPackAlpha.java +++ /dev/null @@ -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; - } -} diff --git a/Mage.Sets/src/mage/sets/EldritchMoon.java b/Mage.Sets/src/mage/sets/EldritchMoon.java index 2e178da8f64..670079081ac 100644 --- a/Mage.Sets/src/mage/sets/EldritchMoon.java +++ b/Mage.Sets/src/mage/sets/EldritchMoon.java @@ -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("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("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("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)); diff --git a/Mage.Sets/src/mage/sets/FinalFantasy.java b/Mage.Sets/src/mage/sets/FinalFantasy.java index 43a1d38d199..d9fb797677d 100644 --- a/Mage.Sets/src/mage/sets/FinalFantasy.java +++ b/Mage.Sets/src/mage/sets/FinalFantasy.java @@ -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", 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("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", 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)); diff --git a/Mage.Sets/src/mage/sets/FromTheVaultTransform.java b/Mage.Sets/src/mage/sets/FromTheVaultTransform.java index 68ef3e439ca..81cd9785d69 100644 --- a/Mage.Sets/src/mage/sets/FromTheVaultTransform.java +++ b/Mage.Sets/src/mage/sets/FromTheVaultTransform.java @@ -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("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, 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("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)); diff --git a/Mage.Sets/src/mage/sets/HasCon2017.java b/Mage.Sets/src/mage/sets/HasCon2017.java index a8ef14cac47..f1341c2f45d 100644 --- a/Mage.Sets/src/mage/sets/HasCon2017.java +++ b/Mage.Sets/src/mage/sets/HasCon2017.java @@ -21,7 +21,6 @@ public final class HasCon2017 extends ExpansionSet { 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, 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)); } } diff --git a/Mage.Sets/src/mage/sets/Innistrad.java b/Mage.Sets/src/mage/sets/Innistrad.java index a37d00cdd8c..da91f42dbd5 100644 --- a/Mage.Sets/src/mage/sets/Innistrad.java +++ b/Mage.Sets/src/mage/sets/Innistrad.java @@ -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("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, 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("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)); @@ -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", 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("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("Laboratory Maniac", 61, Rarity.RARE, mage.cards.l.LaboratoryManiac.class)); cards.add(new SetCardInfo("Lantern Spirit", 62, Rarity.UNCOMMON, mage.cards.l.LanternSpirit.class)); diff --git a/Mage.Sets/src/mage/sets/InnistradCrimsonVow.java b/Mage.Sets/src/mage/sets/InnistradCrimsonVow.java index f7b1c81346e..3b20bb905a6 100644 --- a/Mage.Sets/src/mage/sets/InnistradCrimsonVow.java +++ b/Mage.Sets/src/mage/sets/InnistradCrimsonVow.java @@ -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("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("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("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)); diff --git a/Mage.Sets/src/mage/sets/InnistradDoubleFeature.java b/Mage.Sets/src/mage/sets/InnistradDoubleFeature.java index 4ba22086499..a07389c7fc3 100644 --- a/Mage.Sets/src/mage/sets/InnistradDoubleFeature.java +++ b/Mage.Sets/src/mage/sets/InnistradDoubleFeature.java @@ -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("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("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("Grisly Ritual", 383, Rarity.COMMON, mage.cards.g.GrislyRitual.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("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("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("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)); diff --git a/Mage.Sets/src/mage/sets/InnistradMidnightHunt.java b/Mage.Sets/src/mage/sets/InnistradMidnightHunt.java index df5211502e6..5b0fe66be0b 100644 --- a/Mage.Sets/src/mage/sets/InnistradMidnightHunt.java +++ b/Mage.Sets/src/mage/sets/InnistradMidnightHunt.java @@ -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("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("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", 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)); diff --git a/Mage.Sets/src/mage/sets/InnistradRemastered.java b/Mage.Sets/src/mage/sets/InnistradRemastered.java index f9e11e06e41..b7e16be6fd4 100644 --- a/Mage.Sets/src/mage/sets/InnistradRemastered.java +++ b/Mage.Sets/src/mage/sets/InnistradRemastered.java @@ -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", 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, 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", 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)); @@ -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", 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("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", 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)); @@ -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("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("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", 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)); diff --git a/Mage.Sets/src/mage/sets/Ixalan.java b/Mage.Sets/src/mage/sets/Ixalan.java index ac805618e76..c03bde3dd7a 100644 --- a/Mage.Sets/src/mage/sets/Ixalan.java +++ b/Mage.Sets/src/mage/sets/Ixalan.java @@ -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", 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("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("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)); diff --git a/Mage.Sets/src/mage/sets/IxalanPromos.java b/Mage.Sets/src/mage/sets/IxalanPromos.java index 0c55b5ea44a..65828df8668 100644 --- a/Mage.Sets/src/mage/sets/IxalanPromos.java +++ b/Mage.Sets/src/mage/sets/IxalanPromos.java @@ -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("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("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("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)); diff --git a/Mage.Sets/src/mage/sets/JudgeGiftCards2022.java b/Mage.Sets/src/mage/sets/JudgeGiftCards2022.java index 9ac65f709f6..d17992860c3 100644 --- a/Mage.Sets/src/mage/sets/JudgeGiftCards2022.java +++ b/Mage.Sets/src/mage/sets/JudgeGiftCards2022.java @@ -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("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("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("Omniscience", 2, Rarity.RARE, mage.cards.o.Omniscience.class)); cards.add(new SetCardInfo("Parallel Lives", 3, Rarity.RARE, mage.cards.p.ParallelLives.class)); diff --git a/Mage.Sets/src/mage/sets/MarchOfTheMachine.java b/Mage.Sets/src/mage/sets/MarchOfTheMachine.java index 96ae38826a0..da0138bcee6 100644 --- a/Mage.Sets/src/mage/sets/MarchOfTheMachine.java +++ b/Mage.Sets/src/mage/sets/MarchOfTheMachine.java @@ -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("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("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", 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)); diff --git a/Mage.Sets/src/mage/sets/RivalsOfIxalan.java b/Mage.Sets/src/mage/sets/RivalsOfIxalan.java index 07b11bafc73..1aaf20ca64d 100644 --- a/Mage.Sets/src/mage/sets/RivalsOfIxalan.java +++ b/Mage.Sets/src/mage/sets/RivalsOfIxalan.java @@ -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("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("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("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)); diff --git a/Mage.Sets/src/mage/sets/RivalsOfIxalanPromos.java b/Mage.Sets/src/mage/sets/RivalsOfIxalanPromos.java index d01a374be83..f93acb7a741 100644 --- a/Mage.Sets/src/mage/sets/RivalsOfIxalanPromos.java +++ b/Mage.Sets/src/mage/sets/RivalsOfIxalanPromos.java @@ -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", "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("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("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)); diff --git a/Mage.Sets/src/mage/sets/SecretLairDrop.java b/Mage.Sets/src/mage/sets/SecretLairDrop.java index 44f8823b6ac..b82f513aa06 100644 --- a/Mage.Sets/src/mage/sets/SecretLairDrop.java +++ b/Mage.Sets/src/mage/sets/SecretLairDrop.java @@ -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("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, 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("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)); diff --git a/Mage.Sets/src/mage/sets/ShadowsOfThePast.java b/Mage.Sets/src/mage/sets/ShadowsOfThePast.java index 3a9b0e6b694..0cfb57821a4 100644 --- a/Mage.Sets/src/mage/sets/ShadowsOfThePast.java +++ b/Mage.Sets/src/mage/sets/ShadowsOfThePast.java @@ -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("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, 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("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)); diff --git a/Mage.Sets/src/mage/sets/ShadowsOverInnistrad.java b/Mage.Sets/src/mage/sets/ShadowsOverInnistrad.java index f9aa8c5f5ef..9fcedd562d5 100644 --- a/Mage.Sets/src/mage/sets/ShadowsOverInnistrad.java +++ b/Mage.Sets/src/mage/sets/ShadowsOverInnistrad.java @@ -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("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 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("Geistblast", 160, Rarity.UNCOMMON, mage.cards.g.Geistblast.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 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("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("Voldaren Duelist", 191, Rarity.COMMON, mage.cards.v.VoldarenDuelist.class)); cards.add(new SetCardInfo("Warped Landscape", 280, Rarity.COMMON, mage.cards.w.WarpedLandscape.class)); diff --git a/Mage.Sets/src/mage/sets/ShadowsOverInnistradPromos.java b/Mage.Sets/src/mage/sets/ShadowsOverInnistradPromos.java index 9e53eaafb27..9c11add782d 100644 --- a/Mage.Sets/src/mage/sets/ShadowsOverInnistradPromos.java +++ b/Mage.Sets/src/mage/sets/ShadowsOverInnistradPromos.java @@ -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("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("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("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)); diff --git a/Mage.Sets/src/mage/sets/ShadowsOverInnistradRemastered.java b/Mage.Sets/src/mage/sets/ShadowsOverInnistradRemastered.java index 6cdd42e309e..c4375f7ec2b 100644 --- a/Mage.Sets/src/mage/sets/ShadowsOverInnistradRemastered.java +++ b/Mage.Sets/src/mage/sets/ShadowsOverInnistradRemastered.java @@ -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("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 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("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)); @@ -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("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("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("Voldaren Pariah", 138, Rarity.RARE, mage.cards.v.VoldarenPariah.class)); cards.add(new SetCardInfo("Voracious Reader", 58, Rarity.UNCOMMON, mage.cards.v.VoraciousReader.class)); diff --git a/Mage.Sets/src/mage/sets/TheLostCavernsOfIxalan.java b/Mage.Sets/src/mage/sets/TheLostCavernsOfIxalan.java index d2c77c86f58..4dba2652837 100644 --- a/Mage.Sets/src/mage/sets/TheLostCavernsOfIxalan.java +++ b/Mage.Sets/src/mage/sets/TheLostCavernsOfIxalan.java @@ -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", 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("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", 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)); @@ -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("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("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("Sinuous Benthisaur", 76, Rarity.UNCOMMON, mage.cards.s.SinuousBenthisaur.class)); cards.add(new SetCardInfo("Skullcap Snail", 119, Rarity.COMMON, mage.cards.s.SkullcapSnail.class)); diff --git a/Mage.Sets/src/mage/sets/Transformers.java b/Mage.Sets/src/mage/sets/Transformers.java index ca587a56df9..36bf14c5221 100644 --- a/Mage.Sets/src/mage/sets/Transformers.java +++ b/Mage.Sets/src/mage/sets/Transformers.java @@ -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("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, 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, 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)); diff --git a/Mage.Sets/src/mage/sets/XLNTreasureChest.java b/Mage.Sets/src/mage/sets/XLNTreasureChest.java index d4268f37d84..d201c6e94b4 100644 --- a/Mage.Sets/src/mage/sets/XLNTreasureChest.java +++ b/Mage.Sets/src/mage/sets/XLNTreasureChest.java @@ -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("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("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("Primal Amulet", 243, Rarity.RARE, mage.cards.p.PrimalAmulet.class)); cards.add(new SetCardInfo("Primal Wellspring", 243, Rarity.RARE, mage.cards.p.PrimalWellspring.class));