From 0f5716d28eff82b1384c9f9f023959cb67b2560c Mon Sep 17 00:00:00 2001 From: jmlundeen Date: Sat, 6 Dec 2025 08:57:39 -0600 Subject: [PATCH] convert transforming "W" cards to single class file part of #14099 --- .../src/mage/cards/b/BlossomCladWerewolf.java | 47 -------- Mage.Sets/src/mage/cards/j/JurassicPark.java | 107 ------------------ .../src/mage/cards/k/KrallenhordeKiller.java | 47 -------- .../mage/cards/o/OrmendahlProfanePrince.java | 51 --------- .../src/mage/cards/w/WaterloggedHulk.java | 40 ++++++- .../src/mage/cards/w/WatertightGondola.java | 56 --------- Mage.Sets/src/mage/cards/w/WearyPrisoner.java | 34 ++++-- .../src/mage/cards/w/WeaverOfBlossoms.java | 38 +++++-- .../src/mage/cards/w/WeddingAnnouncement.java | 31 +++-- .../src/mage/cards/w/WeddingCrasher.java | 57 ---------- .../src/mage/cards/w/WeddingFestivity.java | 36 ------ Mage.Sets/src/mage/cards/w/WelcomeTo.java | 97 +++++++++++++--- Mage.Sets/src/mage/cards/w/WestvaleAbbey.java | 50 +++++--- .../src/mage/cards/w/WolfbittenCaptive.java | 35 +++--- .../src/mage/cards/w/WolfkinOutcast.java | 47 +++++--- .../src/mage/cards/w/WrathfulJailbreaker.java | 43 ------- Mage.Sets/src/mage/sets/DarkAscension.java | 1 - .../src/mage/sets/InnistradCrimsonVow.java | 5 - .../src/mage/sets/InnistradDoubleFeature.java | 4 - .../src/mage/sets/InnistradRemastered.java | 4 - .../mage/sets/JurassicWorldCollection.java | 1 - .../src/mage/sets/MagicOnlinePromos.java | 1 - Mage.Sets/src/mage/sets/SecretLairDrop.java | 2 - .../src/mage/sets/ShadowsOverInnistrad.java | 1 - .../mage/sets/ShadowsOverInnistradPromos.java | 1 - .../sets/ShadowsOverInnistradRemastered.java | 1 - .../src/mage/sets/TheLostCavernsOfIxalan.java | 1 - 27 files changed, 275 insertions(+), 563 deletions(-) delete mode 100644 Mage.Sets/src/mage/cards/b/BlossomCladWerewolf.java delete mode 100644 Mage.Sets/src/mage/cards/j/JurassicPark.java delete mode 100644 Mage.Sets/src/mage/cards/k/KrallenhordeKiller.java delete mode 100644 Mage.Sets/src/mage/cards/o/OrmendahlProfanePrince.java delete mode 100644 Mage.Sets/src/mage/cards/w/WatertightGondola.java delete mode 100644 Mage.Sets/src/mage/cards/w/WeddingCrasher.java delete mode 100644 Mage.Sets/src/mage/cards/w/WeddingFestivity.java delete mode 100644 Mage.Sets/src/mage/cards/w/WrathfulJailbreaker.java diff --git a/Mage.Sets/src/mage/cards/b/BlossomCladWerewolf.java b/Mage.Sets/src/mage/cards/b/BlossomCladWerewolf.java deleted file mode 100644 index 39737df7b9d..00000000000 --- a/Mage.Sets/src/mage/cards/b/BlossomCladWerewolf.java +++ /dev/null @@ -1,47 +0,0 @@ -package mage.cards.b; - -import mage.MageInt; -import mage.abilities.costs.common.TapSourceCost; -import mage.abilities.effects.mana.AddManaOfAnyColorEffect; -import mage.abilities.keyword.NightboundAbility; -import mage.abilities.mana.SimpleManaAbility; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.SubType; -import mage.constants.Zone; - -import java.util.UUID; - -/** - * @author TheElk801 - */ -public final class BlossomCladWerewolf extends CardImpl { - - public BlossomCladWerewolf(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, ""); - - this.subtype.add(SubType.WEREWOLF); - this.power = new MageInt(3); - this.toughness = new MageInt(4); - this.color.setGreen(true); - this.nightCard = true; - - // {T}: Add two mana of any one color. - this.addAbility(new SimpleManaAbility( - Zone.BATTLEFIELD, new AddManaOfAnyColorEffect(2), new TapSourceCost() - )); - - // Nightbound - this.addAbility(new NightboundAbility()); - } - - private BlossomCladWerewolf(final BlossomCladWerewolf card) { - super(card); - } - - @Override - public BlossomCladWerewolf copy() { - return new BlossomCladWerewolf(this); - } -} diff --git a/Mage.Sets/src/mage/cards/j/JurassicPark.java b/Mage.Sets/src/mage/cards/j/JurassicPark.java deleted file mode 100644 index 7024769e637..00000000000 --- a/Mage.Sets/src/mage/cards/j/JurassicPark.java +++ /dev/null @@ -1,107 +0,0 @@ -package mage.cards.j; - -import java.util.Objects; -import java.util.UUID; - -import mage.Mana; -import mage.abilities.Ability; -import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount; -import mage.abilities.effects.ContinuousEffectImpl; -import mage.abilities.hint.Hint; -import mage.abilities.hint.ValueHint; -import mage.abilities.keyword.EscapeAbility; -import mage.abilities.mana.DynamicManaAbility; -import mage.constants.*; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.filter.FilterPermanent; -import mage.filter.common.FilterControlledPermanent; -import mage.game.Game; -import mage.players.Player; - -/** - * - * @author jimga150 - */ -public final class JurassicPark extends CardImpl { - - private static final FilterPermanent filter = new FilterControlledPermanent("Dinosaur you control"); - - static { - filter.add(SubType.DINOSAUR.getPredicate()); - } - - private static final Hint hint = new ValueHint( - "Number of Dinosaurs you control", new PermanentsOnBattlefieldCount(filter) - ); - - public JurassicPark(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); - - this.supertype.add(SuperType.LEGENDARY); - this.nightCard = true; - - // (Transforms from Welcome to ....) - // Each Dinosaur card in your graveyard has escape. The escape cost is equal to the card's mana cost plus exile three other cards from your graveyard. - // Based on Underworld Breach - this.addAbility(new SimpleStaticAbility(new JurassicParkEffect())); - - // {T}: Add {G} for each Dinosaur you control. - // Based on Gaea's Cradle - DynamicManaAbility ability = new DynamicManaAbility( - Mana.GreenMana(1), - new PermanentsOnBattlefieldCount(filter) - ); - this.addAbility(ability.addHint(hint)); - } - - private JurassicPark(final JurassicPark card) { - super(card); - } - - @Override - public JurassicPark copy() { - return new JurassicPark(this); - } -} - -class JurassicParkEffect extends ContinuousEffectImpl { - - JurassicParkEffect() { - super(Duration.WhileOnBattlefield, Layer.AbilityAddingRemovingEffects_6, SubLayer.NA, Outcome.AddAbility); - staticText = "Each Dinosaur card in your graveyard has escape. " + - "The escape cost is equal to the card's mana cost plus exile three other cards from your graveyard."; - } - - private JurassicParkEffect(final JurassicParkEffect effect) { - super(effect); - } - - @Override - public boolean apply(Game game, Ability source) { - Player controller = game.getPlayer(source.getControllerId()); - if (controller == null) { - return false; - } - controller - .getGraveyard() - .getCards(game) - .stream() - .filter(Objects::nonNull) - .filter(card -> !card.getManaCost().getText().isEmpty()) // card must have a mana cost - .filter(card -> card.hasSubtype(SubType.DINOSAUR, game)) - .forEach(card -> { - Ability ability = new EscapeAbility(card, card.getManaCost().getText(), 3); - ability.setSourceId(card.getId()); - ability.setControllerId(card.getOwnerId()); - game.getState().addOtherAbility(card, ability); - }); - return true; - } - - @Override - public JurassicParkEffect copy() { - return new JurassicParkEffect(this); - } -} diff --git a/Mage.Sets/src/mage/cards/k/KrallenhordeKiller.java b/Mage.Sets/src/mage/cards/k/KrallenhordeKiller.java deleted file mode 100644 index 5c2fc9960cc..00000000000 --- a/Mage.Sets/src/mage/cards/k/KrallenhordeKiller.java +++ /dev/null @@ -1,47 +0,0 @@ -package mage.cards.k; - -import mage.MageInt; -import mage.abilities.common.LimitedTimesPerTurnActivatedAbility; -import mage.abilities.common.WerewolfBackTriggeredAbility; -import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.effects.common.continuous.BoostSourceEffect; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Duration; -import mage.constants.SubType; -import mage.constants.Zone; - -import java.util.UUID; - -/** - * @author Loki - */ -public final class KrallenhordeKiller extends CardImpl { - - public KrallenhordeKiller(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, ""); - this.subtype.add(SubType.WEREWOLF); - this.color.setGreen(true); - - this.power = new MageInt(2); - this.toughness = new MageInt(2); - - this.nightCard = true; - - // {3}{G}: Krallenhorde Killer gets +4/+4 until end of turn. Activate this ability only once each turn. - this.addAbility(new LimitedTimesPerTurnActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(4, 4, Duration.EndOfTurn), new ManaCostsImpl<>("{3}{G}"))); - - // At the beginning of each upkeep, if a player cast two or more spells last turn, transform Krallenhorde Killer. - this.addAbility(new WerewolfBackTriggeredAbility()); - } - - private KrallenhordeKiller(final KrallenhordeKiller card) { - super(card); - } - - @Override - public KrallenhordeKiller copy() { - return new KrallenhordeKiller(this); - } -} diff --git a/Mage.Sets/src/mage/cards/o/OrmendahlProfanePrince.java b/Mage.Sets/src/mage/cards/o/OrmendahlProfanePrince.java deleted file mode 100644 index 1df4cf81eeb..00000000000 --- a/Mage.Sets/src/mage/cards/o/OrmendahlProfanePrince.java +++ /dev/null @@ -1,51 +0,0 @@ - -package mage.cards.o; - -import java.util.UUID; -import mage.MageInt; -import mage.abilities.keyword.FlyingAbility; -import mage.abilities.keyword.HasteAbility; -import mage.abilities.keyword.IndestructibleAbility; -import mage.abilities.keyword.LifelinkAbility; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.SubType; -import mage.constants.SuperType; - -/** - * - * @author fireshoes - */ -public final class OrmendahlProfanePrince extends CardImpl { - - public OrmendahlProfanePrince(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(9); - this.toughness = new MageInt(7); - this.color.setBlack(true); - - // this card is the second face of double-faced card - this.nightCard = true; - - // Flying - this.addAbility(FlyingAbility.getInstance()); - // Lifelink - this.addAbility(LifelinkAbility.getInstance()); - // Indestructible - this.addAbility(IndestructibleAbility.getInstance()); - // Haste - this.addAbility(HasteAbility.getInstance()); - } - - private OrmendahlProfanePrince(final OrmendahlProfanePrince card) { - super(card); - } - - @Override - public OrmendahlProfanePrince copy() { - return new OrmendahlProfanePrince(this); - } -} diff --git a/Mage.Sets/src/mage/cards/w/WaterloggedHulk.java b/Mage.Sets/src/mage/cards/w/WaterloggedHulk.java index b90cf8e7fa8..17739f43c89 100644 --- a/Mage.Sets/src/mage/cards/w/WaterloggedHulk.java +++ b/Mage.Sets/src/mage/cards/w/WaterloggedHulk.java @@ -1,11 +1,19 @@ package mage.cards.w; +import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.condition.common.DescendCondition; import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.decorator.ConditionalRestrictionEffect; import mage.abilities.effects.common.MillCardsControllerEffect; +import mage.abilities.effects.common.combat.CantBeBlockedSourceEffect; import mage.abilities.keyword.CraftAbility; -import mage.cards.CardImpl; +import mage.abilities.keyword.CrewAbility; +import mage.abilities.keyword.VigilanceAbility; import mage.cards.CardSetInfo; +import mage.cards.TransformingDoubleFacedCard; +import mage.constants.AbilityWord; import mage.constants.CardType; import mage.constants.SubType; @@ -14,24 +22,44 @@ import java.util.UUID; /** * @author Susucr */ -public final class WaterloggedHulk extends CardImpl { +public final class WaterloggedHulk extends TransformingDoubleFacedCard { public WaterloggedHulk(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{U}"); - this.secondSideCardClazz = mage.cards.w.WatertightGondola.class; + super(ownerId, setInfo, + new CardType[]{CardType.ARTIFACT}, new SubType[]{}, "{U}", + "Watertight Gondola", + new CardType[]{CardType.ARTIFACT}, new SubType[]{SubType.VEHICLE}, "U" + ); + // Waterlogged Hulk // {T}: Mill a card. - this.addAbility(new SimpleActivatedAbility( + this.getLeftHalfCard().addAbility(new SimpleActivatedAbility( new MillCardsControllerEffect(1), new TapSourceCost() )); // Craft with Island {3}{U} - this.addAbility(new CraftAbility( + this.getLeftHalfCard().addAbility(new CraftAbility( "{3}{U}", "Island", "another Island you control or an Island card from your graveyard", SubType.ISLAND.getPredicate() )); + + // Watertight Gondola + this.getRightHalfCard().setPT(4, 4); + + // Vigilance + this.getRightHalfCard().addAbility(VigilanceAbility.getInstance()); + + // Descend 8 -- Watertight Gondola can't be blocked as long as there are eight or more permanent cards in your graveyard. + Ability ability = new SimpleStaticAbility(new ConditionalRestrictionEffect( + new CantBeBlockedSourceEffect(), + DescendCondition.EIGHT + ).setText("{this} can't be blocked as long as there are eight or more permanent cards in your graveyard")); + this.getRightHalfCard().addAbility(ability.addHint(DescendCondition.getHint()).setAbilityWord(AbilityWord.DESCEND_8)); + + // Crew 1 + this.getRightHalfCard().addAbility(new CrewAbility(1)); } private WaterloggedHulk(final WaterloggedHulk card) { diff --git a/Mage.Sets/src/mage/cards/w/WatertightGondola.java b/Mage.Sets/src/mage/cards/w/WatertightGondola.java deleted file mode 100644 index f7e46376672..00000000000 --- a/Mage.Sets/src/mage/cards/w/WatertightGondola.java +++ /dev/null @@ -1,56 +0,0 @@ -package mage.cards.w; - -import mage.MageInt; -import mage.abilities.Ability; -import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.common.DescendCondition; -import mage.abilities.decorator.ConditionalRestrictionEffect; -import mage.abilities.effects.common.combat.CantBeBlockedSourceEffect; -import mage.abilities.keyword.CrewAbility; -import mage.abilities.keyword.VigilanceAbility; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.AbilityWord; -import mage.constants.CardType; -import mage.constants.SubType; - -import java.util.UUID; - -/** - * @author Susucr - */ -public final class WatertightGondola extends CardImpl { - - public WatertightGondola(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, ""); - this.nightCard = true; - this.color.setBlue(true); - - this.subtype.add(SubType.VEHICLE); - this.power = new MageInt(4); - this.toughness = new MageInt(4); - - // Vigilance - this.addAbility(VigilanceAbility.getInstance()); - - // Descend 8 -- Watertight Gondola can't be blocked as long as there are eight or more permanent cards in your graveyard. - Ability ability = new SimpleStaticAbility(new ConditionalRestrictionEffect( - new CantBeBlockedSourceEffect(), - DescendCondition.EIGHT - ).setText("{this} can't be blocked as long as there are eight or more permanent cards in your graveyard")); - this.addAbility(ability.addHint(DescendCondition.getHint()).setAbilityWord(AbilityWord.DESCEND_8)); - - // Crew 1 - this.addAbility(new CrewAbility(1)); - - } - - private WatertightGondola(final WatertightGondola card) { - super(card); - } - - @Override - public WatertightGondola copy() { - return new WatertightGondola(this); - } -} diff --git a/Mage.Sets/src/mage/cards/w/WearyPrisoner.java b/Mage.Sets/src/mage/cards/w/WearyPrisoner.java index 83b8d2469ac..6b6086b9a99 100644 --- a/Mage.Sets/src/mage/cards/w/WearyPrisoner.java +++ b/Mage.Sets/src/mage/cards/w/WearyPrisoner.java @@ -1,10 +1,11 @@ package mage.cards.w; -import mage.MageInt; +import mage.abilities.common.AttacksEachCombatStaticAbility; import mage.abilities.keyword.DayboundAbility; import mage.abilities.keyword.DefenderAbility; -import mage.cards.CardImpl; +import mage.abilities.keyword.NightboundAbility; import mage.cards.CardSetInfo; +import mage.cards.TransformingDoubleFacedCard; import mage.constants.CardType; import mage.constants.SubType; @@ -13,23 +14,32 @@ import java.util.UUID; /** * @author TheElk801 */ -public final class WearyPrisoner extends CardImpl { +public final class WearyPrisoner extends TransformingDoubleFacedCard { public WearyPrisoner(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{R}"); + super(ownerId, setInfo, + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN, SubType.WEREWOLF}, "{3}{R}", + "Wrathful Jailbreaker", + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.WEREWOLF}, "R" + ); - this.subtype.add(SubType.HUMAN); - this.subtype.add(SubType.WEREWOLF); - this.power = new MageInt(2); - this.toughness = new MageInt(6); - - this.secondSideCardClazz = mage.cards.w.WrathfulJailbreaker.class; + // Weary Prisoner + this.getLeftHalfCard().setPT(2, 6); // Defender - this.addAbility(DefenderAbility.getInstance()); + this.getLeftHalfCard().addAbility(DefenderAbility.getInstance()); // Daybound - this.addAbility(new DayboundAbility()); + this.getLeftHalfCard().addAbility(new DayboundAbility()); + + // Wrathful Jailbreaker + this.getRightHalfCard().setPT(6, 6); + + // Wrathful Jailbreaker attacks each combat if able. + this.getRightHalfCard().addAbility(new AttacksEachCombatStaticAbility()); + + // Nightbound + this.getRightHalfCard().addAbility(new NightboundAbility()); } private WearyPrisoner(final WearyPrisoner card) { diff --git a/Mage.Sets/src/mage/cards/w/WeaverOfBlossoms.java b/Mage.Sets/src/mage/cards/w/WeaverOfBlossoms.java index 3f00c090a34..3da13b5b4b0 100644 --- a/Mage.Sets/src/mage/cards/w/WeaverOfBlossoms.java +++ b/Mage.Sets/src/mage/cards/w/WeaverOfBlossoms.java @@ -1,34 +1,50 @@ package mage.cards.w; -import mage.MageInt; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.effects.mana.AddManaOfAnyColorEffect; import mage.abilities.keyword.DayboundAbility; +import mage.abilities.keyword.NightboundAbility; import mage.abilities.mana.AnyColorManaAbility; -import mage.cards.CardImpl; +import mage.abilities.mana.SimpleManaAbility; import mage.cards.CardSetInfo; +import mage.cards.TransformingDoubleFacedCard; import mage.constants.CardType; import mage.constants.SubType; +import mage.constants.Zone; import java.util.UUID; /** * @author TheElk801 */ -public final class WeaverOfBlossoms extends CardImpl { +public final class WeaverOfBlossoms extends TransformingDoubleFacedCard { public WeaverOfBlossoms(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}"); + super(ownerId, setInfo, + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN, SubType.WEREWOLF}, "{2}{G}", + "Blossom-Clad Werewolf", + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.WEREWOLF}, "G" + ); - this.subtype.add(SubType.HUMAN); - this.subtype.add(SubType.WEREWOLF); - this.power = new MageInt(2); - this.toughness = new MageInt(3); - this.secondSideCardClazz = mage.cards.b.BlossomCladWerewolf.class; + // Weaver of Blossoms + this.getLeftHalfCard().setPT(2, 3); // {T}: Add one mana of any color. - this.addAbility(new AnyColorManaAbility()); + this.getLeftHalfCard().addAbility(new AnyColorManaAbility()); // Daybound - this.addAbility(new DayboundAbility()); + this.getLeftHalfCard().addAbility(new DayboundAbility()); + + // Blossom-Clad Werewolf + this.getRightHalfCard().setPT(3, 4); + + // {T}: Add two mana of any one color. + this.getRightHalfCard().addAbility(new SimpleManaAbility( + Zone.BATTLEFIELD, new AddManaOfAnyColorEffect(2), new TapSourceCost() + )); + + // Nightbound + this.getRightHalfCard().addAbility(new NightboundAbility()); } private WeaverOfBlossoms(final WeaverOfBlossoms card) { diff --git a/Mage.Sets/src/mage/cards/w/WeddingAnnouncement.java b/Mage.Sets/src/mage/cards/w/WeddingAnnouncement.java index 3aeec3b1c6a..5adb45a4eef 100644 --- a/Mage.Sets/src/mage/cards/w/WeddingAnnouncement.java +++ b/Mage.Sets/src/mage/cards/w/WeddingAnnouncement.java @@ -1,41 +1,46 @@ package mage.cards.w; -import java.util.UUID; - import mage.abilities.Ability; -import mage.abilities.triggers.BeginningOfEndStepTriggeredAbility; +import mage.abilities.common.SimpleStaticAbility; import mage.abilities.condition.Condition; import mage.abilities.condition.common.SourceHasCounterCondition; import mage.abilities.decorator.ConditionalOneShotEffect; import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.effects.common.DrawCardSourceControllerEffect; import mage.abilities.effects.common.TransformSourceEffect; +import mage.abilities.effects.common.continuous.BoostControlledEffect; import mage.abilities.effects.common.counter.AddCountersSourceEffect; -import mage.abilities.keyword.TransformAbility; -import mage.cards.CardImpl; +import mage.abilities.triggers.BeginningOfEndStepTriggeredAbility; import mage.cards.CardSetInfo; +import mage.cards.TransformingDoubleFacedCard; import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.SubType; import mage.counters.CounterType; import mage.game.Game; import mage.game.permanent.token.HumanToken; import mage.watchers.common.AttackedThisTurnWatcher; +import java.util.UUID; + /** * * @author weirddan455 */ -public final class WeddingAnnouncement extends CardImpl { +public final class WeddingAnnouncement extends TransformingDoubleFacedCard { public WeddingAnnouncement(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{W}"); - - this.secondSideCardClazz = mage.cards.w.WeddingFestivity.class; + super(ownerId, setInfo, + new CardType[]{CardType.ENCHANTMENT}, new SubType[]{}, "{2}{W}", + "Wedding Festivity", + new CardType[]{CardType.ENCHANTMENT}, new SubType[]{}, "W" + ); + // Wedding Announcement // At the beginning of your end step, put an invitation counter on Wedding Announcement. // If you attacked with two or more creatures this turn, draw card. // Otherwise, create a 1/1 white Human creature token. // Then if Wedding Announcement has three or more invitation counters on it, transform it. - this.addAbility(new TransformAbility()); Ability ability = new BeginningOfEndStepTriggeredAbility(new AddCountersSourceEffect(CounterType.INVITATION.createInstance())); ability.addEffect(new ConditionalOneShotEffect( new DrawCardSourceControllerEffect(1), @@ -48,7 +53,11 @@ public final class WeddingAnnouncement extends CardImpl { new SourceHasCounterCondition(CounterType.INVITATION, 3), "Then if {this} has three or more invitation counters on it, transform it" )); - this.addAbility(ability); + this.getLeftHalfCard().addAbility(ability); + + // Wedding Festivity + // Creatures you control get +1/+1 + this.getRightHalfCard().addAbility(new SimpleStaticAbility(new BoostControlledEffect(1, 1, Duration.WhileOnBattlefield))); } private WeddingAnnouncement(final WeddingAnnouncement card) { diff --git a/Mage.Sets/src/mage/cards/w/WeddingCrasher.java b/Mage.Sets/src/mage/cards/w/WeddingCrasher.java deleted file mode 100644 index 662b9eea17b..00000000000 --- a/Mage.Sets/src/mage/cards/w/WeddingCrasher.java +++ /dev/null @@ -1,57 +0,0 @@ -package mage.cards.w; - -import mage.MageInt; -import mage.abilities.common.DiesThisOrAnotherTriggeredAbility; -import mage.abilities.effects.common.DrawCardSourceControllerEffect; -import mage.abilities.keyword.NightboundAbility; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.SubType; -import mage.filter.FilterPermanent; -import mage.filter.common.FilterControlledPermanent; -import mage.filter.predicate.Predicates; - -import java.util.UUID; - -/** - * @author TheElk801 - */ -public final class WeddingCrasher extends CardImpl { - - private static final FilterPermanent filter = new FilterControlledPermanent("Wolf or Werewolf you control"); - - static { - filter.add(Predicates.or( - SubType.WOLF.getPredicate(), - SubType.WEREWOLF.getPredicate() - )); - } - - public WeddingCrasher(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.setGreen(true); - this.nightCard = true; - - // Whenever Wedding Crasher or another Wolf or Werewolf you control dies, draw a card. - this.addAbility(new DiesThisOrAnotherTriggeredAbility( - new DrawCardSourceControllerEffect(1), false, filter - )); - - // Nightbound - this.addAbility(new NightboundAbility()); - } - - private WeddingCrasher(final WeddingCrasher card) { - super(card); - } - - @Override - public WeddingCrasher copy() { - return new WeddingCrasher(this); - } -} diff --git a/Mage.Sets/src/mage/cards/w/WeddingFestivity.java b/Mage.Sets/src/mage/cards/w/WeddingFestivity.java deleted file mode 100644 index e456652aa21..00000000000 --- a/Mage.Sets/src/mage/cards/w/WeddingFestivity.java +++ /dev/null @@ -1,36 +0,0 @@ -package mage.cards.w; - -import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.effects.common.continuous.BoostControlledEffect; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Duration; - -import java.util.UUID; - -/** - * - * @author weirddan455 - */ -public class WeddingFestivity extends CardImpl { - - public WeddingFestivity(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, ""); - - this.color.setWhite(true); - this.nightCard = true; - - // Creatures you control get +1/+1 - this.addAbility(new SimpleStaticAbility(new BoostControlledEffect(1, 1, Duration.WhileOnBattlefield))); - } - - private WeddingFestivity(final WeddingFestivity card) { - super(card); - } - - @Override - public WeddingFestivity copy() { - return new WeddingFestivity(this); - } -} diff --git a/Mage.Sets/src/mage/cards/w/WelcomeTo.java b/Mage.Sets/src/mage/cards/w/WelcomeTo.java index 42cde76dfbd..7889a2a05d3 100644 --- a/Mage.Sets/src/mage/cards/w/WelcomeTo.java +++ b/Mage.Sets/src/mage/cards/w/WelcomeTo.java @@ -1,59 +1,77 @@ package mage.cards.w; +import mage.Mana; import mage.abilities.Ability; import mage.abilities.common.SagaAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount; import mage.abilities.effects.ContinuousEffect; +import mage.abilities.effects.ContinuousEffectImpl; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.effects.common.DestroyAllEffect; import mage.abilities.effects.common.ExileSagaAndReturnTransformedEffect; import mage.abilities.effects.common.continuous.BecomesCreatureTargetEffect; import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; +import mage.abilities.hint.Hint; +import mage.abilities.hint.ValueHint; import mage.abilities.keyword.DefenderAbility; +import mage.abilities.keyword.EscapeAbility; import mage.abilities.keyword.HasteAbility; -import mage.abilities.keyword.TransformAbility; -import mage.cards.CardImpl; +import mage.abilities.mana.DynamicManaAbility; import mage.cards.CardSetInfo; +import mage.cards.TransformingDoubleFacedCard; import mage.constants.*; import mage.filter.FilterPermanent; +import mage.filter.common.FilterControlledPermanent; import mage.filter.predicate.Predicates; import mage.game.Game; import mage.game.permanent.token.DinosaurToken; import mage.game.permanent.token.custom.CreatureToken; +import mage.players.Player; import mage.target.TargetPermanent; import mage.target.targetadjustment.ForEachPlayerTargetsAdjuster; import mage.target.targetpointer.EachTargetPointer; import mage.target.targetpointer.FixedTarget; +import java.util.Objects; import java.util.UUID; /** * * @author jimga150 */ -public final class WelcomeTo extends CardImpl { +public final class WelcomeTo extends TransformingDoubleFacedCard { private static final FilterPermanent filter = new FilterPermanent("Walls"); private static final FilterPermanent filterNoncreatureArtifact = new FilterPermanent("noncreature artifact"); + private static final FilterPermanent filterDinosaur = new FilterControlledPermanent("Dinosaur you control"); static { filter.add(SubType.WALL.getPredicate()); filterNoncreatureArtifact.add(Predicates.not(CardType.CREATURE.getPredicate())); filterNoncreatureArtifact.add(CardType.ARTIFACT.getPredicate()); + filterDinosaur.add(SubType.DINOSAUR.getPredicate()); } + private static final Hint hint = new ValueHint( + "Number of Dinosaurs you control", new PermanentsOnBattlefieldCount(filterDinosaur) + ); + // Based on Azusa's Many Journeys // Likeness of the Seeker, Vronos Masked Inquisitor, In the Darkness Bind Then, public WelcomeTo(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{G}{G}"); - - this.subtype.add(SubType.SAGA); - this.secondSideCardClazz = mage.cards.j.JurassicPark.class; + super(ownerId, setInfo, + new SuperType[]{}, new CardType[]{CardType.ENCHANTMENT}, new SubType[]{SubType.SAGA}, "{1}{G}{G}", + "Jurassic Park", + new SuperType[]{SuperType.LEGENDARY}, new CardType[]{CardType.LAND}, new SubType[]{}, "" + ); + // Welcome to . . . // (As this Saga enters and after your draw step, add a lore counter.) - SagaAbility sagaAbility = new SagaAbility(this); + SagaAbility sagaAbility = new SagaAbility(this.getLeftHalfCard()); // I -- For each opponent, up to one target noncreature artifact they control becomes a 0/4 Wall artifact creature with defender for as long as you control this Saga. - sagaAbility.addChapterEffect(this, SagaChapter.CHAPTER_I, ability -> { + sagaAbility.addChapterEffect(this.getLeftHalfCard(), SagaChapter.CHAPTER_I, ability -> { ability.addEffect( new BecomesCreatureTargetEffect( new CreatureToken(0, 4) @@ -69,16 +87,28 @@ public final class WelcomeTo extends CardImpl { // II -- Create a 3/3 green Dinosaur creature token with trample. It gains haste until end of turn. // Based on Mordor on the March - sagaAbility.addChapterEffect(this, SagaChapter.CHAPTER_II, new WelcomeToEffect()); + sagaAbility.addChapterEffect(this.getLeftHalfCard(), SagaChapter.CHAPTER_II, new WelcomeToEffect()); // III -- Destroy all Walls. Exile this Saga, then return it to the battlefield transformed under your control. - this.addAbility(new TransformAbility()); - sagaAbility.addChapterEffect(this, SagaChapter.CHAPTER_III, ability -> { + sagaAbility.addChapterEffect(this.getLeftHalfCard(), SagaChapter.CHAPTER_III, ability -> { ability.addEffect(new DestroyAllEffect(filter)); ability.addEffect(new ExileSagaAndReturnTransformedEffect()); }); - this.addAbility(sagaAbility); + this.getLeftHalfCard().addAbility(sagaAbility); + + // Jurassic Park + // Each Dinosaur card in your graveyard has escape. The escape cost is equal to the card's mana cost plus exile three other cards from your graveyard. + // Based on Underworld Breach + this.getRightHalfCard().addAbility(new SimpleStaticAbility(new JurassicParkEffect())); + + // {T}: Add {G} for each Dinosaur you control. + // Based on Gaea's Cradle + DynamicManaAbility ability = new DynamicManaAbility( + Mana.GreenMana(1), + new PermanentsOnBattlefieldCount(filterDinosaur) + ); + this.getRightHalfCard().addAbility(ability.addHint(hint)); } private WelcomeTo(final WelcomeTo card) { @@ -121,5 +151,44 @@ class WelcomeToEffect extends OneShotEffect { }); return true; } - +} + +class JurassicParkEffect extends ContinuousEffectImpl { + + JurassicParkEffect() { + super(Duration.WhileOnBattlefield, Layer.AbilityAddingRemovingEffects_6, SubLayer.NA, Outcome.AddAbility); + staticText = "Each Dinosaur card in your graveyard has escape. " + + "The escape cost is equal to the card's mana cost plus exile three other cards from your graveyard."; + } + + private JurassicParkEffect(final JurassicParkEffect effect) { + super(effect); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + if (controller == null) { + return false; + } + controller + .getGraveyard() + .getCards(game) + .stream() + .filter(Objects::nonNull) + .filter(card -> !card.getManaCost().getText().isEmpty()) // card must have a mana cost + .filter(card -> card.hasSubtype(SubType.DINOSAUR, game)) + .forEach(card -> { + Ability ability = new EscapeAbility(card, card.getManaCost().getText(), 3); + ability.setSourceId(card.getId()); + ability.setControllerId(card.getOwnerId()); + game.getState().addOtherAbility(card, ability); + }); + return true; + } + + @Override + public JurassicParkEffect copy() { + return new JurassicParkEffect(this); + } } diff --git a/Mage.Sets/src/mage/cards/w/WestvaleAbbey.java b/Mage.Sets/src/mage/cards/w/WestvaleAbbey.java index f618bb62b61..10b8acdbee9 100644 --- a/Mage.Sets/src/mage/cards/w/WestvaleAbbey.java +++ b/Mage.Sets/src/mage/cards/w/WestvaleAbbey.java @@ -1,8 +1,5 @@ - package mage.cards.w; -import java.util.UUID; - import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.PayLifeCost; @@ -12,43 +9,64 @@ import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.effects.common.TransformSourceEffect; import mage.abilities.effects.common.UntapSourceEffect; -import mage.abilities.keyword.TransformAbility; +import mage.abilities.keyword.FlyingAbility; +import mage.abilities.keyword.HasteAbility; +import mage.abilities.keyword.IndestructibleAbility; +import mage.abilities.keyword.LifelinkAbility; import mage.abilities.mana.ColorlessManaAbility; -import mage.cards.CardImpl; import mage.cards.CardSetInfo; +import mage.cards.TransformingDoubleFacedCard; import mage.constants.CardType; -import mage.constants.Zone; +import mage.constants.SubType; +import mage.constants.SuperType; import mage.filter.StaticFilters; -import mage.filter.common.FilterControlledCreaturePermanent; import mage.game.permanent.token.HumanClericToken; -import mage.target.common.TargetControlledPermanent; + +import java.util.UUID; /** * @author fireshoes */ -public final class WestvaleAbbey extends CardImpl { +public final class WestvaleAbbey extends TransformingDoubleFacedCard { public WestvaleAbbey(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); - - this.secondSideCardClazz = mage.cards.o.OrmendahlProfanePrince.class; + super(ownerId, setInfo, + new SuperType[]{}, new CardType[]{CardType.LAND}, new SubType[]{}, "", + "Ormendahl, Profane Prince", + new SuperType[]{SuperType.LEGENDARY}, new CardType[]{CardType.CREATURE}, new SubType[]{SubType.DEMON}, "B" + ); + // Westvale Abbey // {T}: Add {C}. - this.addAbility(new ColorlessManaAbility()); + this.getLeftHalfCard().addAbility(new ColorlessManaAbility()); // {5}, {T}, Pay 1 life: Create a 1/1 white and black Human Cleric creature token. Ability ability = new SimpleActivatedAbility(new CreateTokenEffect(new HumanClericToken()), new GenericManaCost(5)); ability.addCost(new TapSourceCost()); ability.addCost(new PayLifeCost(1)); - this.addAbility(ability); + this.getLeftHalfCard().addAbility(ability); // {5}, {T}, Sacrifice five creatures: Transform Westvale Abbey and untap it. - this.addAbility(new TransformAbility()); ability = new SimpleActivatedAbility(new TransformSourceEffect(), new GenericManaCost(5)); ability.addCost(new TapSourceCost()); ability.addCost(new SacrificeTargetCost(5, StaticFilters.FILTER_PERMANENT_CREATURES)); ability.addEffect(new UntapSourceEffect().setText("untap it").concatBy(", then")); - this.addAbility(ability); + this.getLeftHalfCard().addAbility(ability); + + // Ormendahl, Profane Prince + this.getRightHalfCard().setPT(9, 7); + + // Flying + this.getRightHalfCard().addAbility(FlyingAbility.getInstance()); + + // Lifelink + this.getRightHalfCard().addAbility(LifelinkAbility.getInstance()); + + // Indestructible + this.getRightHalfCard().addAbility(IndestructibleAbility.getInstance()); + + // Haste + this.getRightHalfCard().addAbility(HasteAbility.getInstance()); } private WestvaleAbbey(final WestvaleAbbey card) { diff --git a/Mage.Sets/src/mage/cards/w/WolfbittenCaptive.java b/Mage.Sets/src/mage/cards/w/WolfbittenCaptive.java index ab976d8286d..0953e800441 100644 --- a/Mage.Sets/src/mage/cards/w/WolfbittenCaptive.java +++ b/Mage.Sets/src/mage/cards/w/WolfbittenCaptive.java @@ -1,13 +1,12 @@ package mage.cards.w; -import mage.MageInt; import mage.abilities.common.LimitedTimesPerTurnActivatedAbility; +import mage.abilities.common.WerewolfBackTriggeredAbility; import mage.abilities.common.WerewolfFrontTriggeredAbility; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.common.continuous.BoostSourceEffect; -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; @@ -18,24 +17,32 @@ import java.util.UUID; /** * @author Loki */ -public final class WolfbittenCaptive extends CardImpl { +public final class WolfbittenCaptive extends TransformingDoubleFacedCard { public WolfbittenCaptive(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{G}"); - this.subtype.add(SubType.HUMAN); - this.subtype.add(SubType.WEREWOLF); + super(ownerId, setInfo, + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN, SubType.WEREWOLF}, "{G}", + "Krallenhorde Killer", + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.WEREWOLF}, "G" + ); - this.power = new MageInt(1); - this.toughness = new MageInt(1); - - this.secondSideCardClazz = mage.cards.k.KrallenhordeKiller.class; + // Wolfbitten Captive + this.getLeftHalfCard().setPT(1, 1); // {1}{G}: Wolfbitten Captive gets +2/+2 until end of turn. Activate this ability only once each turn. - this.addAbility(new LimitedTimesPerTurnActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(2, 2, Duration.EndOfTurn), new ManaCostsImpl<>("{1}{G}"))); + this.getLeftHalfCard().addAbility(new LimitedTimesPerTurnActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(2, 2, Duration.EndOfTurn), new ManaCostsImpl<>("{1}{G}"))); // At the beginning of each upkeep, if no spells were cast last turn, transform Wolfbitten Captive. - this.addAbility(new TransformAbility()); - this.addAbility(new WerewolfFrontTriggeredAbility()); + this.getLeftHalfCard().addAbility(new WerewolfFrontTriggeredAbility()); + + // Krallenhorde Killer + this.getRightHalfCard().setPT(2, 2); + + // {3}{G}: Krallenhorde Killer gets +4/+4 until end of turn. Activate this ability only once each turn. + this.getRightHalfCard().addAbility(new LimitedTimesPerTurnActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(4, 4, Duration.EndOfTurn), new ManaCostsImpl<>("{3}{G}"))); + + // At the beginning of each upkeep, if a player cast two or more spells last turn, transform Krallenhorde Killer. + this.getRightHalfCard().addAbility(new WerewolfBackTriggeredAbility()); } private WolfbittenCaptive(final WolfbittenCaptive card) { diff --git a/Mage.Sets/src/mage/cards/w/WolfkinOutcast.java b/Mage.Sets/src/mage/cards/w/WolfkinOutcast.java index 21595ce0f23..b0d3e0bfa84 100644 --- a/Mage.Sets/src/mage/cards/w/WolfkinOutcast.java +++ b/Mage.Sets/src/mage/cards/w/WolfkinOutcast.java @@ -1,15 +1,17 @@ package mage.cards.w; -import mage.MageInt; +import mage.abilities.common.DiesThisOrAnotherTriggeredAbility; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.condition.Condition; import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; import mage.abilities.effects.common.cost.SpellCostReductionSourceEffect; import mage.abilities.hint.ConditionHint; import mage.abilities.hint.Hint; import mage.abilities.keyword.DayboundAbility; -import mage.cards.CardImpl; +import mage.abilities.keyword.NightboundAbility; import mage.cards.CardSetInfo; +import mage.cards.TransformingDoubleFacedCard; import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Zone; @@ -22,15 +24,20 @@ import java.util.UUID; /** * @author TheElk801 */ -public final class WolfkinOutcast extends CardImpl { +public final class WolfkinOutcast extends TransformingDoubleFacedCard { private static final FilterPermanent filter = new FilterControlledPermanent("you control a Wolf or Werewolf"); + private static final FilterPermanent filter2 = new FilterControlledPermanent("Wolf or Werewolf you control"); static { filter.add(Predicates.or( SubType.WOLF.getPredicate(), SubType.WEREWOLF.getPredicate() )); + filter2.add(Predicates.or( + SubType.WOLF.getPredicate(), + SubType.WEREWOLF.getPredicate() + )); } private static final Condition condition = new PermanentsOnTheBattlefieldCondition(filter); @@ -39,21 +46,35 @@ public final class WolfkinOutcast extends CardImpl { ); public WolfkinOutcast(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{5}{G}"); + super(ownerId, setInfo, + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN, SubType.WEREWOLF}, "{5}{G}", + "Wedding Crasher", + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.WEREWOLF}, "G" + ); - this.subtype.add(SubType.HUMAN); - this.subtype.add(SubType.WEREWOLF); - this.power = new MageInt(5); - this.toughness = new MageInt(4); - this.secondSideCardClazz = mage.cards.w.WeddingCrasher.class; + // Wolfkin Outcast + this.getLeftHalfCard().setPT(5, 4); // This spell costs {2} less to cast if you control a Wolf or Werewolf. - this.addAbility(new SimpleStaticAbility( - Zone.ALL, new SpellCostReductionSourceEffect(2, condition).setCanWorksOnStackOnly(true) - ).setRuleAtTheTop(true)); + this.getLeftHalfCard().addAbility(new SimpleStaticAbility( + Zone.ALL, new SpellCostReductionSourceEffect(2, condition).setCanWorksOnStackOnly(true)) + .setRuleAtTheTop(true) + .addHint(hint) + ); // Daybound - this.addAbility(new DayboundAbility()); + this.getLeftHalfCard().addAbility(new DayboundAbility()); + + // Wedding Crasher + this.getRightHalfCard().setPT(6, 5); + + // Whenever Wedding Crasher or another Wolf or Werewolf you control dies, draw a card. + this.getRightHalfCard().addAbility(new DiesThisOrAnotherTriggeredAbility( + new DrawCardSourceControllerEffect(1), false, filter2 + )); + + // Nightbound + this.getRightHalfCard().addAbility(new NightboundAbility()); } private WolfkinOutcast(final WolfkinOutcast card) { diff --git a/Mage.Sets/src/mage/cards/w/WrathfulJailbreaker.java b/Mage.Sets/src/mage/cards/w/WrathfulJailbreaker.java deleted file mode 100644 index 3e0bf2c9f1b..00000000000 --- a/Mage.Sets/src/mage/cards/w/WrathfulJailbreaker.java +++ /dev/null @@ -1,43 +0,0 @@ -package mage.cards.w; - -import mage.MageInt; -import mage.abilities.common.AttacksEachCombatStaticAbility; -import mage.abilities.keyword.NightboundAbility; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.SubType; - -import java.util.UUID; - -/** - * @author TheElk801 - */ -public final class WrathfulJailbreaker extends CardImpl { - - public WrathfulJailbreaker(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(6); - this.color.setRed(true); - - this.nightCard = true; - - // Wrathful Jailbreaker attacks each combat if able. - this.addAbility(new AttacksEachCombatStaticAbility()); - - // Nightbound - this.addAbility(new NightboundAbility()); - } - - private WrathfulJailbreaker(final WrathfulJailbreaker card) { - super(card); - } - - @Override - public WrathfulJailbreaker copy() { - return new WrathfulJailbreaker(this); - } -} diff --git a/Mage.Sets/src/mage/sets/DarkAscension.java b/Mage.Sets/src/mage/sets/DarkAscension.java index a9cedae1db2..9273ed0220e 100644 --- a/Mage.Sets/src/mage/sets/DarkAscension.java +++ b/Mage.Sets/src/mage/sets/DarkAscension.java @@ -128,7 +128,6 @@ public final class DarkAscension extends ExpansionSet { cards.add(new SetCardInfo("Increasing Vengeance", 95, Rarity.RARE, mage.cards.i.IncreasingVengeance.class)); cards.add(new SetCardInfo("Jar of Eyeballs", 152, Rarity.RARE, mage.cards.j.JarOfEyeballs.class)); cards.add(new SetCardInfo("Kessig Recluse", 121, Rarity.COMMON, mage.cards.k.KessigRecluse.class)); - cards.add(new SetCardInfo("Krallenhorde Killer", 133, Rarity.RARE, mage.cards.k.KrallenhordeKiller.class)); cards.add(new SetCardInfo("Lambholt Elder", 122, Rarity.UNCOMMON, mage.cards.l.LambholtElder.class)); cards.add(new SetCardInfo("Lingering Souls", 12, Rarity.UNCOMMON, mage.cards.l.LingeringSouls.class)); cards.add(new SetCardInfo("Lost in the Woods", 123, Rarity.RARE, mage.cards.l.LostInTheWoods.class)); diff --git a/Mage.Sets/src/mage/sets/InnistradCrimsonVow.java b/Mage.Sets/src/mage/sets/InnistradCrimsonVow.java index 8e1be97d988..4cf85b4fdca 100644 --- a/Mage.Sets/src/mage/sets/InnistradCrimsonVow.java +++ b/Mage.Sets/src/mage/sets/InnistradCrimsonVow.java @@ -79,7 +79,6 @@ public final class InnistradCrimsonVow extends ExpansionSet { cards.add(new SetCardInfo("Bloodvial Purveyor", 290, Rarity.RARE, mage.cards.b.BloodvialPurveyor.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Bloodvial Purveyor", 98, Rarity.RARE, mage.cards.b.BloodvialPurveyor.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Bloody Betrayal", 147, Rarity.COMMON, mage.cards.b.BloodyBetrayal.class)); - cards.add(new SetCardInfo("Blossom-Clad Werewolf", 226, Rarity.COMMON, mage.cards.b.BlossomCladWerewolf.class)); cards.add(new SetCardInfo("Boarded Window", 253, Rarity.UNCOMMON, mage.cards.b.BoardedWindow.class)); cards.add(new SetCardInfo("Bramble Armor", 188, Rarity.COMMON, mage.cards.b.BrambleArmor.class)); cards.add(new SetCardInfo("Bramble Wurm", 189, Rarity.UNCOMMON, mage.cards.b.BrambleWurm.class)); @@ -439,9 +438,6 @@ public final class InnistradCrimsonVow extends ExpansionSet { cards.add(new SetCardInfo("Weaver of Blossoms", 226, Rarity.COMMON, mage.cards.w.WeaverOfBlossoms.class)); cards.add(new SetCardInfo("Wedding Announcement", 355, Rarity.RARE, mage.cards.w.WeddingAnnouncement.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Wedding Announcement", 45, Rarity.RARE, mage.cards.w.WeddingAnnouncement.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Wedding Crasher", 229, Rarity.UNCOMMON, mage.cards.w.WeddingCrasher.class)); - cards.add(new SetCardInfo("Wedding Festivity", 355, Rarity.RARE, mage.cards.w.WeddingFestivity.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Wedding Festivity", 45, Rarity.RARE, mage.cards.w.WeddingFestivity.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Wedding Invitation", 260, Rarity.COMMON, mage.cards.w.WeddingInvitation.class)); cards.add(new SetCardInfo("Wedding Security", 138, Rarity.UNCOMMON, mage.cards.w.WeddingSecurity.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Wedding Security", 299, Rarity.UNCOMMON, mage.cards.w.WeddingSecurity.class, NON_FULL_USE_VARIOUS)); @@ -454,7 +450,6 @@ public final class InnistradCrimsonVow extends ExpansionSet { cards.add(new SetCardInfo("Witness the Future", 90, Rarity.UNCOMMON, mage.cards.w.WitnessTheFuture.class)); cards.add(new SetCardInfo("Wolf Strike", 228, Rarity.COMMON, mage.cards.w.WolfStrike.class)); cards.add(new SetCardInfo("Wolfkin Outcast", 229, Rarity.UNCOMMON, mage.cards.w.WolfkinOutcast.class)); - cards.add(new SetCardInfo("Wrathful Jailbreaker", 184, Rarity.COMMON, mage.cards.w.WrathfulJailbreaker.class)); cards.add(new SetCardInfo("Wretched Throng", 91, Rarity.COMMON, mage.cards.w.WretchedThrong.class)); } diff --git a/Mage.Sets/src/mage/sets/InnistradDoubleFeature.java b/Mage.Sets/src/mage/sets/InnistradDoubleFeature.java index 31bf4f33722..3a0aa70042d 100644 --- a/Mage.Sets/src/mage/sets/InnistradDoubleFeature.java +++ b/Mage.Sets/src/mage/sets/InnistradDoubleFeature.java @@ -77,7 +77,6 @@ public final class InnistradDoubleFeature extends ExpansionSet { cards.add(new SetCardInfo("Bloodtithe Harvester", 499, Rarity.UNCOMMON, mage.cards.b.BloodtitheHarvester.class)); cards.add(new SetCardInfo("Bloodvial Purveyor", 365, Rarity.RARE, mage.cards.b.BloodvialPurveyor.class)); cards.add(new SetCardInfo("Bloody Betrayal", 414, Rarity.COMMON, mage.cards.b.BloodyBetrayal.class)); - cards.add(new SetCardInfo("Blossom-Clad Werewolf", 493, Rarity.COMMON, mage.cards.b.BlossomCladWerewolf.class)); cards.add(new SetCardInfo("Boarded Window", 520, Rarity.UNCOMMON, mage.cards.b.BoardedWindow.class)); cards.add(new SetCardInfo("Borrowed Time", 6, Rarity.UNCOMMON, mage.cards.b.BorrowedTime.class)); cards.add(new SetCardInfo("Bounding Wolf", 170, Rarity.COMMON, mage.cards.b.BoundingWolf.class)); @@ -550,8 +549,6 @@ public final class InnistradDoubleFeature extends ExpansionSet { cards.add(new SetCardInfo("Weary Prisoner", 451, Rarity.COMMON, mage.cards.w.WearyPrisoner.class)); cards.add(new SetCardInfo("Weaver of Blossoms", 493, Rarity.COMMON, mage.cards.w.WeaverOfBlossoms.class)); cards.add(new SetCardInfo("Wedding Announcement", 312, Rarity.RARE, mage.cards.w.WeddingAnnouncement.class)); - cards.add(new SetCardInfo("Wedding Crasher", 496, Rarity.UNCOMMON, mage.cards.w.WeddingCrasher.class)); - cards.add(new SetCardInfo("Wedding Festivity", 312, Rarity.RARE, mage.cards.w.WeddingFestivity.class)); cards.add(new SetCardInfo("Wedding Invitation", 527, Rarity.COMMON, mage.cards.w.WeddingInvitation.class)); cards.add(new SetCardInfo("Wedding Security", 405, Rarity.UNCOMMON, mage.cards.w.WeddingSecurity.class)); cards.add(new SetCardInfo("Welcoming Vampire", 313, Rarity.RARE, mage.cards.w.WelcomingVampire.class)); @@ -563,7 +560,6 @@ public final class InnistradDoubleFeature extends ExpansionSet { cards.add(new SetCardInfo("Witness the Future", 357, Rarity.UNCOMMON, mage.cards.w.WitnessTheFuture.class)); cards.add(new SetCardInfo("Wolf Strike", 495, Rarity.COMMON, mage.cards.w.WolfStrike.class)); cards.add(new SetCardInfo("Wolfkin Outcast", 496, Rarity.UNCOMMON, mage.cards.w.WolfkinOutcast.class)); - cards.add(new SetCardInfo("Wrathful Jailbreaker", 451, Rarity.COMMON, mage.cards.w.WrathfulJailbreaker.class)); cards.add(new SetCardInfo("Wrenn and Seven", 208, Rarity.MYTHIC, mage.cards.w.WrennAndSeven.class)); cards.add(new SetCardInfo("Wretched Throng", 358, Rarity.COMMON, mage.cards.w.WretchedThrong.class)); } diff --git a/Mage.Sets/src/mage/sets/InnistradRemastered.java b/Mage.Sets/src/mage/sets/InnistradRemastered.java index ad75a737d28..8c14a342ef2 100644 --- a/Mage.Sets/src/mage/sets/InnistradRemastered.java +++ b/Mage.Sets/src/mage/sets/InnistradRemastered.java @@ -352,8 +352,6 @@ public class InnistradRemastered extends ExpansionSet { cards.add(new SetCardInfo("Olivia Voldaren", 246, Rarity.MYTHIC, mage.cards.o.OliviaVoldaren.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Olivia Voldaren", 490, Rarity.MYTHIC, mage.cards.o.OliviaVoldaren.class, FULL_ART_USE_VARIOUS)); cards.add(new SetCardInfo("Olivia's Dragoon", 127, Rarity.COMMON, mage.cards.o.OliviasDragoon.class)); - cards.add(new SetCardInfo("Ormendahl, Profane Prince", 287, Rarity.RARE, mage.cards.o.OrmendahlProfanePrince.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Ormendahl, Profane Prince", 474, Rarity.RARE, mage.cards.o.OrmendahlProfanePrince.class, RETRO_ART_USE_VARIOUS)); cards.add(new SetCardInfo("Overcharged Amalgam", 80, Rarity.RARE, mage.cards.o.OverchargedAmalgam.class)); cards.add(new SetCardInfo("Overgrown Farmland", 281, Rarity.RARE, mage.cards.o.OvergrownFarmland.class)); cards.add(new SetCardInfo("Pack Guardian", 211, Rarity.UNCOMMON, mage.cards.p.PackGuardian.class, NON_FULL_USE_VARIOUS)); @@ -505,8 +503,6 @@ public class InnistradRemastered extends ExpansionSet { cards.add(new SetCardInfo("Wandering Mind", 437, Rarity.UNCOMMON, mage.cards.w.WanderingMind.class, RETRO_ART_USE_VARIOUS)); cards.add(new SetCardInfo("Wedding Announcement", 453, Rarity.RARE, mage.cards.w.WeddingAnnouncement.class, RETRO_ART_USE_VARIOUS)); cards.add(new SetCardInfo("Wedding Announcement", 51, Rarity.RARE, mage.cards.w.WeddingAnnouncement.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Wedding Festivity", 453, Rarity.RARE, mage.cards.w.WeddingFestivity.class, RETRO_ART_USE_VARIOUS)); - cards.add(new SetCardInfo("Wedding Festivity", 51, Rarity.RARE, mage.cards.w.WeddingFestivity.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Westvale Abbey", 287, Rarity.RARE, mage.cards.w.WestvaleAbbey.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Westvale Abbey", 474, Rarity.RARE, mage.cards.w.WestvaleAbbey.class, RETRO_ART_USE_VARIOUS)); cards.add(new SetCardInfo("Wild Hunger", 225, Rarity.UNCOMMON, mage.cards.w.WildHunger.class, NON_FULL_USE_VARIOUS)); diff --git a/Mage.Sets/src/mage/sets/JurassicWorldCollection.java b/Mage.Sets/src/mage/sets/JurassicWorldCollection.java index 899e568fce2..d22ade219c3 100644 --- a/Mage.Sets/src/mage/sets/JurassicWorldCollection.java +++ b/Mage.Sets/src/mage/sets/JurassicWorldCollection.java @@ -50,7 +50,6 @@ public final class JurassicWorldCollection extends ExpansionSet { cards.add(new SetCardInfo("Indoraptor, the Perfect Hybrid", 40, Rarity.RARE, mage.cards.i.IndoraptorThePerfectHybrid.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Island", 22, Rarity.LAND, mage.cards.basiclands.Island.class, FULL_ART_BFZ_VARIOUS)); cards.add(new SetCardInfo("Island", "22b", Rarity.LAND, mage.cards.basiclands.Island.class, FULL_ART_BFZ_VARIOUS)); - cards.add(new SetCardInfo("Jurassic Park", 7, Rarity.RARE, mage.cards.j.JurassicPark.class)); cards.add(new SetCardInfo("Life Finds a Way", 31, Rarity.RARE, mage.cards.l.LifeFindsAWay.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Life Finds a Way", 5, Rarity.RARE, mage.cards.l.LifeFindsAWay.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Mountain", 24, Rarity.LAND, mage.cards.basiclands.Mountain.class, FULL_ART_BFZ_VARIOUS)); diff --git a/Mage.Sets/src/mage/sets/MagicOnlinePromos.java b/Mage.Sets/src/mage/sets/MagicOnlinePromos.java index 6db5e71499a..a9be1013abe 100644 --- a/Mage.Sets/src/mage/sets/MagicOnlinePromos.java +++ b/Mage.Sets/src/mage/sets/MagicOnlinePromos.java @@ -3022,7 +3022,6 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Weathered Wayfarer", 102223, Rarity.RARE, mage.cards.w.WeatheredWayfarer.class)); cards.add(new SetCardInfo("Weaver of Harmony", 98031, Rarity.RARE, mage.cards.w.WeaverOfHarmony.class)); cards.add(new SetCardInfo("Wedding Announcement", 95267, Rarity.RARE, mage.cards.w.WeddingAnnouncement.class)); - cards.add(new SetCardInfo("Wedding Festivity", 95267, Rarity.RARE, mage.cards.w.WeddingFestivity.class)); cards.add(new SetCardInfo("Wee Dragonauts", 35174, Rarity.COMMON, mage.cards.w.WeeDragonauts.class)); cards.add(new SetCardInfo("Werewolf Pack Leader", 92760, Rarity.RARE, mage.cards.w.WerewolfPackLeader.class)); cards.add(new SetCardInfo("Wheel and Deal", 62411, Rarity.RARE, mage.cards.w.WheelAndDeal.class)); diff --git a/Mage.Sets/src/mage/sets/SecretLairDrop.java b/Mage.Sets/src/mage/sets/SecretLairDrop.java index ef42c67d20f..a938a1e52c2 100644 --- a/Mage.Sets/src/mage/sets/SecretLairDrop.java +++ b/Mage.Sets/src/mage/sets/SecretLairDrop.java @@ -1062,7 +1062,6 @@ public class SecretLairDrop extends ExpansionSet { cards.add(new SetCardInfo("Bloodline Keeper", 1157, Rarity.RARE, mage.cards.b.BloodlineKeeper.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Nicol Bolas, the Ravager", 1158, Rarity.MYTHIC, mage.cards.n.NicolBolasTheRavager.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Westvale Abbey", 1159, Rarity.RARE, mage.cards.w.WestvaleAbbey.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Ormendahl, Profane Prince", 1159, Rarity.RARE, mage.cards.o.OrmendahlProfanePrince.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Emrakul, the Promised End", 1160, Rarity.MYTHIC, mage.cards.e.EmrakulThePromisedEnd.class)); cards.add(new SetCardInfo("Serra Angel", 1161, Rarity.RARE, mage.cards.s.SerraAngel.class)); cards.add(new SetCardInfo("Brainstorm", 1162, Rarity.RARE, mage.cards.b.Brainstorm.class, NON_FULL_USE_VARIOUS)); @@ -1116,7 +1115,6 @@ public class SecretLairDrop extends ExpansionSet { cards.add(new SetCardInfo("Bloodline Keeper", 1210, Rarity.RARE, mage.cards.b.BloodlineKeeper.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Nicol Bolas, the Ravager", 1211, Rarity.MYTHIC, mage.cards.n.NicolBolasTheRavager.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Westvale Abbey", 1212, Rarity.RARE, mage.cards.w.WestvaleAbbey.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Ormendahl, Profane Prince", 1212, Rarity.RARE, mage.cards.o.OrmendahlProfanePrince.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Phyrexian Unlife", 1213, Rarity.RARE, mage.cards.p.PhyrexianUnlife.class)); cards.add(new SetCardInfo("Phyrexian Crusader", 1214, Rarity.RARE, mage.cards.p.PhyrexianCrusader.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Plague Engineer", 1215, Rarity.RARE, mage.cards.p.PlagueEngineer.class)); diff --git a/Mage.Sets/src/mage/sets/ShadowsOverInnistrad.java b/Mage.Sets/src/mage/sets/ShadowsOverInnistrad.java index bba0cfd5734..f475231ccc2 100644 --- a/Mage.Sets/src/mage/sets/ShadowsOverInnistrad.java +++ b/Mage.Sets/src/mage/sets/ShadowsOverInnistrad.java @@ -219,7 +219,6 @@ public final class ShadowsOverInnistrad extends ExpansionSet { cards.add(new SetCardInfo("Olivia, Mobilized for War", 248, Rarity.MYTHIC, mage.cards.o.OliviaMobilizedForWar.class)); cards.add(new SetCardInfo("Ongoing Investigation", 77, Rarity.UNCOMMON, mage.cards.o.OngoingInvestigation.class)); cards.add(new SetCardInfo("Open the Armory", 32, Rarity.UNCOMMON, mage.cards.o.OpenTheArmory.class)); - cards.add(new SetCardInfo("Ormendahl, Profane Prince", 281, Rarity.RARE, mage.cards.o.OrmendahlProfanePrince.class)); cards.add(new SetCardInfo("Pack Guardian", 221, Rarity.UNCOMMON, mage.cards.p.PackGuardian.class)); cards.add(new SetCardInfo("Pale Rider of Trostad", 128, Rarity.UNCOMMON, mage.cards.p.PaleRiderOfTrostad.class)); cards.add(new SetCardInfo("Paranoid Parish-Blade", 33, Rarity.UNCOMMON, mage.cards.p.ParanoidParishBlade.class)); diff --git a/Mage.Sets/src/mage/sets/ShadowsOverInnistradPromos.java b/Mage.Sets/src/mage/sets/ShadowsOverInnistradPromos.java index ce30b925824..02d295c4b5e 100644 --- a/Mage.Sets/src/mage/sets/ShadowsOverInnistradPromos.java +++ b/Mage.Sets/src/mage/sets/ShadowsOverInnistradPromos.java @@ -80,7 +80,6 @@ public class ShadowsOverInnistradPromos extends ExpansionSet { cards.add(new SetCardInfo("Nephalia Moondrakes", 75, Rarity.RARE, mage.cards.n.NephaliaMoondrakes.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Odric, Lunarch Marshal", "31s", Rarity.RARE, mage.cards.o.OdricLunarchMarshal.class)); cards.add(new SetCardInfo("Olivia, Mobilized for War", "248s", Rarity.MYTHIC, mage.cards.o.OliviaMobilizedForWar.class)); - cards.add(new SetCardInfo("Ormendahl, Profane Prince", "281s", Rarity.RARE, mage.cards.o.OrmendahlProfanePrince.class)); cards.add(new SetCardInfo("Port Town", "278s", Rarity.RARE, mage.cards.p.PortTown.class)); cards.add(new SetCardInfo("Prized Amalgam", "249s", Rarity.RARE, mage.cards.p.PrizedAmalgam.class)); cards.add(new SetCardInfo("Rattlechains", "81s", Rarity.RARE, mage.cards.r.Rattlechains.class)); diff --git a/Mage.Sets/src/mage/sets/ShadowsOverInnistradRemastered.java b/Mage.Sets/src/mage/sets/ShadowsOverInnistradRemastered.java index 861a5a70b77..1bb4d1568d6 100644 --- a/Mage.Sets/src/mage/sets/ShadowsOverInnistradRemastered.java +++ b/Mage.Sets/src/mage/sets/ShadowsOverInnistradRemastered.java @@ -225,7 +225,6 @@ public class ShadowsOverInnistradRemastered extends ExpansionSet { cards.add(new SetCardInfo("Olivia's Dragoon", 128, Rarity.COMMON, mage.cards.o.OliviasDragoon.class)); cards.add(new SetCardInfo("Olivia, Mobilized for War", 239, Rarity.MYTHIC, mage.cards.o.OliviaMobilizedForWar.class)); cards.add(new SetCardInfo("Ongoing Investigation", 84, Rarity.UNCOMMON, mage.cards.o.OngoingInvestigation.class)); - cards.add(new SetCardInfo("Ormendahl, Profane Prince", 275, Rarity.RARE, mage.cards.o.OrmendahlProfanePrince.class)); cards.add(new SetCardInfo("Pack Guardian", 208, Rarity.UNCOMMON, mage.cards.p.PackGuardian.class)); cards.add(new SetCardInfo("Permeating Mass", 209, Rarity.RARE, mage.cards.p.PermeatingMass.class)); cards.add(new SetCardInfo("Pick the Brain", 129, Rarity.UNCOMMON, mage.cards.p.PickTheBrain.class)); diff --git a/Mage.Sets/src/mage/sets/TheLostCavernsOfIxalan.java b/Mage.Sets/src/mage/sets/TheLostCavernsOfIxalan.java index 485b7b4c408..19c32dd560e 100644 --- a/Mage.Sets/src/mage/sets/TheLostCavernsOfIxalan.java +++ b/Mage.Sets/src/mage/sets/TheLostCavernsOfIxalan.java @@ -447,7 +447,6 @@ public final class TheLostCavernsOfIxalan extends ExpansionSet { cards.add(new SetCardInfo("Warden of the Inner Sky", 359, Rarity.RARE, mage.cards.w.WardenOfTheInnerSky.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Warden of the Inner Sky", 43, Rarity.RARE, mage.cards.w.WardenOfTheInnerSky.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Waterlogged Hulk", 83, Rarity.UNCOMMON, mage.cards.w.WaterloggedHulk.class)); - cards.add(new SetCardInfo("Watertight Gondola", 83, Rarity.UNCOMMON, mage.cards.w.WatertightGondola.class)); cards.add(new SetCardInfo("Waterwind Scout", 84, Rarity.COMMON, mage.cards.w.WaterwindScout.class)); cards.add(new SetCardInfo("Waylaying Pirates", 85, Rarity.COMMON, mage.cards.w.WaylayingPirates.class)); cards.add(new SetCardInfo("Zoetic Glyph", 86, Rarity.UNCOMMON, mage.cards.z.ZoeticGlyph.class));