From 2a92f5e77a894fbc692c174167e2675c9c4e8e6e Mon Sep 17 00:00:00 2001 From: fireshoes Date: Mon, 8 Feb 2016 20:53:09 -0600 Subject: [PATCH] Added SOI and EMN sets. Added some SOI cards. --- .../plugins/card/dl/sources/GathererSets.java | 3 +- .../dl/sources/MagicCardsImageSource.java | 4 + .../dl/sources/WizardCardsImageSource.java | 3 + .../src/main/resources/card-pictures-tok.txt | 6 +- .../src/main/resources/image.url.properties | 4 +- Mage.Sets/src/mage/sets/EldritchMoon.java | 58 +++++ .../src/mage/sets/ShadowsOverInnistrad.java | 57 +++++ .../blessedvscursed/MindbreakerDemon.java | 51 +---- .../shadowsoverinnistrad/DanceWithDevils.java | 62 ++++++ .../sets/shadowsoverinnistrad/DeadWeight.java | 52 +++++ .../DevilsPlayground.java | 62 ++++++ .../DuskwatchRecruiter.java | 94 +++++++++ .../sets/shadowsoverinnistrad/ExposeEvil.java | 64 ++++++ .../shadowsoverinnistrad/FieryTemper.java | 54 +++++ .../FurtiveHomunculus.java | 62 ++++++ .../HoundOfTheFarbogs.java | 72 +++++++ .../KrallenhordeHowler.java | 89 ++++++++ .../LamplighterOfSelhoff.java | 82 ++++++++ .../MindbreakerDemon.java | 52 +++++ .../shadowsoverinnistrad/PackGuardian.java | 72 +++++++ .../shadowsoverinnistrad/StoicBuilder.java | 68 ++++++ .../StructuralDistortion.java | 107 ++++++++++ .../shadowsoverinnistrad/WatcherInTheWeb.java | 71 +++++++ .../mage/sets/theros/DestructiveRevelry.java | 198 +++++++++--------- .../condition/common/DeliriumCondition.java | 64 ++++++ .../effects/keyword/InvestigateEffect.java | 120 +++++------ .../main/java/mage/constants/AbilityWord.java | 1 + .../mage/game/permanent/token/DevilToken.java | 61 ++++++ .../mage/game/permanent/token/WolfToken.java | 5 +- Utils/known-sets.txt | 2 + Utils/mtg-cards-data.txt | 18 +- Utils/mtg-sets-data.txt | 2 + 32 files changed, 1513 insertions(+), 207 deletions(-) create mode 100644 Mage.Sets/src/mage/sets/EldritchMoon.java create mode 100644 Mage.Sets/src/mage/sets/ShadowsOverInnistrad.java create mode 100644 Mage.Sets/src/mage/sets/shadowsoverinnistrad/DanceWithDevils.java create mode 100644 Mage.Sets/src/mage/sets/shadowsoverinnistrad/DeadWeight.java create mode 100644 Mage.Sets/src/mage/sets/shadowsoverinnistrad/DevilsPlayground.java create mode 100644 Mage.Sets/src/mage/sets/shadowsoverinnistrad/DuskwatchRecruiter.java create mode 100644 Mage.Sets/src/mage/sets/shadowsoverinnistrad/ExposeEvil.java create mode 100644 Mage.Sets/src/mage/sets/shadowsoverinnistrad/FieryTemper.java create mode 100644 Mage.Sets/src/mage/sets/shadowsoverinnistrad/FurtiveHomunculus.java create mode 100644 Mage.Sets/src/mage/sets/shadowsoverinnistrad/HoundOfTheFarbogs.java create mode 100644 Mage.Sets/src/mage/sets/shadowsoverinnistrad/KrallenhordeHowler.java create mode 100644 Mage.Sets/src/mage/sets/shadowsoverinnistrad/LamplighterOfSelhoff.java create mode 100644 Mage.Sets/src/mage/sets/shadowsoverinnistrad/MindbreakerDemon.java create mode 100644 Mage.Sets/src/mage/sets/shadowsoverinnistrad/PackGuardian.java create mode 100644 Mage.Sets/src/mage/sets/shadowsoverinnistrad/StoicBuilder.java create mode 100644 Mage.Sets/src/mage/sets/shadowsoverinnistrad/StructuralDistortion.java create mode 100644 Mage.Sets/src/mage/sets/shadowsoverinnistrad/WatcherInTheWeb.java create mode 100644 Mage/src/main/java/mage/abilities/condition/common/DeliriumCondition.java create mode 100644 Mage/src/main/java/mage/game/permanent/token/DevilToken.java diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GathererSets.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GathererSets.java index b18182f5e80..9477449ff78 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GathererSets.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GathererSets.java @@ -49,7 +49,8 @@ public class GathererSets implements Iterable { "THS", "BNG", "JOU", "CNS", "VMA", "TPR", "KTK", "FRF", "DTK", - "BFZ", "EXP", "OGW"}; + "BFZ", "EXP", "OGW", + "SOI", "EMN"}; private static final HashMap symbolsReplacements = new HashMap<>(); static { diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/MagicCardsImageSource.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/MagicCardsImageSource.java index 42780067467..8cb5c0dfacb 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/MagicCardsImageSource.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/MagicCardsImageSource.java @@ -16,6 +16,9 @@ public class MagicCardsImageSource implements CardImageSource { private static final Map setNameTokenReplacement = new HashMap() { { + put("EMN", "eldritch-moon"); + put("SOI", "shadows-over-innistrad"); + put("OGW", "oath-of-the-gatewatch"); put("CMA", "commanders-arsenal"); put("ARENA", "arena-league"); put("CP", "champs"); @@ -114,6 +117,7 @@ public class MagicCardsImageSource implements CardImageSource { put("DDN", "duel-decks-speed-vs-cunning"); put("DDO", "duel-decks-elspeth-vs-kiora"); put("DDP", "duel-decks-zendikar-vs-eldrazi"); + put("DDQ", "duel-decks-blessed-vs-cursed"); } private static final long serialVersionUID = 1L; }; diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/WizardCardsImageSource.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/WizardCardsImageSource.java index 9a1c93babe8..c232330d94d 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/WizardCardsImageSource.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/WizardCardsImageSource.java @@ -132,6 +132,7 @@ public class WizardCardsImageSource implements CardImageSource { setsAliases.put("DRK", "The Dark"); setsAliases.put("DST", "Darksteel"); setsAliases.put("DTK", "Dragons of Tarkir"); + setsAliases.put("EMN", "Eldritch Moon"); setsAliases.put("EVE", "Eventide"); setsAliases.put("EVG", "Duel Decks: Elves vs. Goblins"); setsAliases.put("EXO", "Exodus"); @@ -184,6 +185,7 @@ public class WizardCardsImageSource implements CardImageSource { setsAliases.put("MRD", "Mirrodin"); setsAliases.put("NMS", "Nemesis"); setsAliases.put("NPH", "New Phyrexia"); + setsAliases.put("OGW", "Oath of the Gatewatch"); setsAliases.put("ODY", "Odyssey"); setsAliases.put("ONS", "Onslaught"); setsAliases.put("ORI", "Magic Origins"); @@ -204,6 +206,7 @@ public class WizardCardsImageSource implements CardImageSource { setsAliases.put("S99", "Starter 1999"); setsAliases.put("SCG", "Scourge"); setsAliases.put("SHM", "Shadowmoor"); + setsAliases.put("SOI", "Shadows over Innistrad"); setsAliases.put("SOK", "Saviors of Kamigawa"); setsAliases.put("SOM", "Scars of Mirrodin"); setsAliases.put("STH", "Stronghold"); diff --git a/Mage.Client/src/main/resources/card-pictures-tok.txt b/Mage.Client/src/main/resources/card-pictures-tok.txt index 36c4bd4801d..caa9f829479 100644 --- a/Mage.Client/src/main/resources/card-pictures-tok.txt +++ b/Mage.Client/src/main/resources/card-pictures-tok.txt @@ -1,4 +1,8 @@ -|Generate}TOK:OGW|Angel|| +#|Generate|TOK:SOI|Clue|| +#|Generate|TOK:SOI|Devil|| +#|Generate|TOK:SOI|Wolf|| + +|Generate|TOK:OGW|Angel|| |Generate|TOK:OGW|Elemental|1| |Generate|TOK:OGW|Elemental|2| |Generate}TOK:OGW|Eldrazi Scion|1| diff --git a/Mage.Client/src/main/resources/image.url.properties b/Mage.Client/src/main/resources/image.url.properties index 8b745977402..46e37a7ce6a 100644 --- a/Mage.Client/src/main/resources/image.url.properties +++ b/Mage.Client/src/main/resources/image.url.properties @@ -64,6 +64,6 @@ ddd=gvl unh=uh dde=pvc # Remove setname as soon as the images can be downloaded -ignore.urls=TOK, DDQ +ignore.urls=TOK, DDQ, EMN # sets ordered by release time (newest goes first) -token.lookup.order=DDQ,CP,CMA,ARENA,SUS,APAC,EURO,UGIN,C15,OGW,EXP,DDP,BFZ,FVD,FVE,FVL,FVR,V12,V13,V14,V15,TPR,MPRP,DD3,DDO,ORI,MM2,PTC,DTK,FRF,KTK,M15,VMA,CNS,JOU,BNG,THS,DDL,M14,MMA,DGM,GTC,RTR,M13,AVR,DDI,DKA,ISD,M12,NPH,MBS,SOM,M11,ROE,DDE,WWK,ZEN,M10,GVL,ARB,DVD,CFX,JVC,ALA,EVE,SHM,EVG,MOR,LRW,10E,CLS,CHK,GRC \ No newline at end of file +token.lookup.order=EMN,SOI,DDQ,CP,CMA,ARENA,SUS,APAC,EURO,UGIN,C15,OGW,EXP,DDP,BFZ,FVD,FVE,FVL,FVR,V12,V13,V14,V15,TPR,MPRP,DD3,DDO,ORI,MM2,PTC,DTK,FRF,KTK,M15,VMA,CNS,JOU,BNG,THS,DDL,M14,MMA,DGM,GTC,RTR,M13,AVR,DDI,DKA,ISD,M12,NPH,MBS,SOM,M11,ROE,DDE,WWK,ZEN,M10,GVL,ARB,DVD,CFX,JVC,ALA,EVE,SHM,EVG,MOR,LRW,10E,CLS,CHK,GRC \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/EldritchMoon.java b/Mage.Sets/src/mage/sets/EldritchMoon.java new file mode 100644 index 00000000000..43e1b95b1c4 --- /dev/null +++ b/Mage.Sets/src/mage/sets/EldritchMoon.java @@ -0,0 +1,58 @@ +/* + * Copyright 2011 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets; + +import java.util.GregorianCalendar; +import mage.cards.ExpansionSet; +import mage.constants.SetType; + +/** + * + * @author fireshoes + */ +public class EldritchMoon extends ExpansionSet { + + private static final EldritchMoon fINSTANCE = new EldritchMoon(); + + public static EldritchMoon getInstance() { + return fINSTANCE; + } + + private EldritchMoon() { + super("Eldritch Moon", "EMN", "mage.sets.eldritchmoon", new GregorianCalendar(2016, 7, 26).getTime(), SetType.EXPANSION); + this.blockName = "Shadows over Innistrad"; + this.hasBoosters = true; + this.numBoosterLands = 1; + this.numBoosterCommon = 9; + this.numBoosterUncommon = 3; + this.numBoosterRare = 1; + this.ratioBoosterMythic = 8; + this.numBoosterDoubleFaced = 1; + this.parentSet = ShadowsOverInnistrad.getInstance(); + } +} diff --git a/Mage.Sets/src/mage/sets/ShadowsOverInnistrad.java b/Mage.Sets/src/mage/sets/ShadowsOverInnistrad.java new file mode 100644 index 00000000000..1120bd55fc1 --- /dev/null +++ b/Mage.Sets/src/mage/sets/ShadowsOverInnistrad.java @@ -0,0 +1,57 @@ +/* + * Copyright 2011 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets; + +import java.util.GregorianCalendar; +import mage.cards.ExpansionSet; +import mage.constants.SetType; + +/** + * + * @author fireshoes + */ +public class ShadowsOverInnistrad extends ExpansionSet { + + private static final ShadowsOverInnistrad fINSTANCE = new ShadowsOverInnistrad(); + + public static ShadowsOverInnistrad getInstance() { + return fINSTANCE; + } + + private ShadowsOverInnistrad() { + super("Shadows over Innistrad", "SOI", "mage.sets.shadowsoverinnistrad", new GregorianCalendar(2016, 4, 8).getTime(), SetType.EXPANSION); + this.blockName = "Shadows over Innistrad"; + this.hasBoosters = true; + this.numBoosterLands = 1; + this.numBoosterCommon = 9; + this.numBoosterUncommon = 3; + this.numBoosterRare = 1; + this.ratioBoosterMythic = 8; + this.numBoosterDoubleFaced = 1; + } +} diff --git a/Mage.Sets/src/mage/sets/blessedvscursed/MindbreakerDemon.java b/Mage.Sets/src/mage/sets/blessedvscursed/MindbreakerDemon.java index 984cf54d500..b30e8bd8dce 100644 --- a/Mage.Sets/src/mage/sets/blessedvscursed/MindbreakerDemon.java +++ b/Mage.Sets/src/mage/sets/blessedvscursed/MindbreakerDemon.java @@ -27,27 +27,23 @@ */ package mage.sets.blessedvscursed; -import java.util.HashSet; import java.util.UUID; import mage.MageInt; -import mage.MageObject; import mage.abilities.Ability; import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; import mage.abilities.common.EntersBattlefieldTriggeredAbility; -import mage.abilities.condition.Condition; +import mage.abilities.condition.InvertCondition; +import mage.abilities.condition.common.DeliriumCondition; import mage.abilities.decorator.ConditionalTriggeredAbility; import mage.abilities.effects.common.LoseLifeSourceControllerEffect; import mage.abilities.effects.common.PutTopCardOfLibraryIntoGraveControllerEffect; import mage.abilities.keyword.FlyingAbility; import mage.abilities.keyword.TrampleAbility; -import mage.cards.Card; import mage.cards.CardImpl; +import mage.constants.AbilityWord; import mage.constants.CardType; import mage.constants.Rarity; import mage.constants.TargetController; -import mage.filter.common.FilterCreatureCard; -import mage.game.Game; -import mage.players.Player; /** * @@ -64,18 +60,20 @@ public class MindbreakerDemon extends CardImpl { // Flying this.addAbility(FlyingAbility.getInstance()); - + // Trample this.addAbility(TrampleAbility.getInstance()); - + // When Mindbreaker Demon enters the battlefield, put the top four cards of your library into your graveyard. this.addAbility(new EntersBattlefieldTriggeredAbility(new PutTopCardOfLibraryIntoGraveControllerEffect(4))); - + // At the beginning of your upkeep, if you don't have 4 or more card types in your graveyard, you lose 4 life. - this.addAbility(new ConditionalTriggeredAbility( + Ability ability = new ConditionalTriggeredAbility( new BeginningOfUpkeepTriggeredAbility(new LoseLifeSourceControllerEffect(4), TargetController.YOU, false), - new TwentyGraveyardCreatureCondition(), - "At the beginning of your upkeep, if you don't have 4 or more card types in your graveyard, you lose 4 life.")); + new InvertCondition(new DeliriumCondition()), + "At the beginning of your upkeep, if you don't have 4 or more card types in your graveyard, you lose 4 life."); + ability.setAbilityWord(AbilityWord.DELIRIUM); + this.addAbility(ability); } public MindbreakerDemon(final MindbreakerDemon card) { @@ -87,30 +85,3 @@ public class MindbreakerDemon extends CardImpl { return new MindbreakerDemon(this); } } - -class TwentyGraveyardCreatureCondition implements Condition { - - private static final FilterCreatureCard filter = new FilterCreatureCard(); - - @Override - public boolean apply(Game game, Ability source) { - Player controller = game.getPlayer(source.getControllerId()); - if (controller != null) { - MageObject target = game.getObject(source.getSourceId()); - if (target != null) { - HashSet foundCardTypes = new HashSet<>(); - for (UUID playerId : game.getState().getPlayersInRange(controller.getId(), game)) { - Player player = game.getPlayer(playerId); - if (player != null) { - for (Card card : player.getGraveyard().getCards(game)) { - foundCardTypes.addAll(card.getCardType()); - } - } - } - int number = foundCardTypes.size(); - return number < 4; - } - } - return false; - } -} diff --git a/Mage.Sets/src/mage/sets/shadowsoverinnistrad/DanceWithDevils.java b/Mage.Sets/src/mage/sets/shadowsoverinnistrad/DanceWithDevils.java new file mode 100644 index 00000000000..84c91e0e382 --- /dev/null +++ b/Mage.Sets/src/mage/sets/shadowsoverinnistrad/DanceWithDevils.java @@ -0,0 +1,62 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.shadowsoverinnistrad; + +import java.util.UUID; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.game.permanent.token.DevilToken; + +/** + * + * @author fireshoes + */ +public class DanceWithDevils extends CardImpl { + + public DanceWithDevils(UUID ownerId) { + super(ownerId, 150, "Dance with Devils", Rarity.UNCOMMON, new CardType[]{CardType.INSTANT}, "{3}{R}"); + this.expansionSetCode = "SOI"; + + // Put two 1/1 red Devil creature tokens onto the battlefield. They have "When this creature dies, it deals 1 damage to target creature or player." + Effect effect = new CreateTokenEffect(new DevilToken(), 2); + effect.setText("Put two 1/1 red Devil creature tokens onto the battlefield. They have \"When this creature dies, it deals 1 damage to target creature or player.\""); + this.getSpellAbility().addEffect(effect); + } + + public DanceWithDevils(final DanceWithDevils card) { + super(card); + } + + @Override + public DanceWithDevils copy() { + return new DanceWithDevils(this); + } +} diff --git a/Mage.Sets/src/mage/sets/shadowsoverinnistrad/DeadWeight.java b/Mage.Sets/src/mage/sets/shadowsoverinnistrad/DeadWeight.java new file mode 100644 index 00000000000..eaed67a307d --- /dev/null +++ b/Mage.Sets/src/mage/sets/shadowsoverinnistrad/DeadWeight.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.shadowsoverinnistrad; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class DeadWeight extends mage.sets.innistrad.DeadWeight { + + public DeadWeight(UUID ownerId) { + super(ownerId); + this.cardNumber = 999; + this.expansionSetCode = "SOI"; + } + + public DeadWeight(final DeadWeight card) { + super(card); + } + + @Override + public DeadWeight copy() { + return new DeadWeight(this); + } +} diff --git a/Mage.Sets/src/mage/sets/shadowsoverinnistrad/DevilsPlayground.java b/Mage.Sets/src/mage/sets/shadowsoverinnistrad/DevilsPlayground.java new file mode 100644 index 00000000000..6f5bee35e38 --- /dev/null +++ b/Mage.Sets/src/mage/sets/shadowsoverinnistrad/DevilsPlayground.java @@ -0,0 +1,62 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.shadowsoverinnistrad; + +import java.util.UUID; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.game.permanent.token.DevilToken; + +/** + * + * @author fireshoes + */ +public class DevilsPlayground extends CardImpl { + + public DevilsPlayground(UUID ownerId) { + super(ownerId, 151, "Devil's Playground", Rarity.RARE, new CardType[]{CardType.SORCERY}, "{4}{R}{R}"); + this.expansionSetCode = "SOI"; + + // Put four 1/1 red Devil creature tokens onto the battlefield. They have "When this creature dies, it deals 1 damage to target creature or player." + Effect effect = new CreateTokenEffect(new DevilToken(), 4); + effect.setText("Put four 1/1 red Devil creature tokens onto the battlefield. They have \"When this creature dies, it deals 1 damage to target creature or player.\""); + this.getSpellAbility().addEffect(effect); + } + + public DevilsPlayground(final DevilsPlayground card) { + super(card); + } + + @Override + public DevilsPlayground copy() { + return new DevilsPlayground(this); + } +} diff --git a/Mage.Sets/src/mage/sets/shadowsoverinnistrad/DuskwatchRecruiter.java b/Mage.Sets/src/mage/sets/shadowsoverinnistrad/DuskwatchRecruiter.java new file mode 100644 index 00000000000..21b390a9ce3 --- /dev/null +++ b/Mage.Sets/src/mage/sets/shadowsoverinnistrad/DuskwatchRecruiter.java @@ -0,0 +1,94 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.shadowsoverinnistrad; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.TriggeredAbility; +import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.condition.common.NoSpellsWereCastLastTurnCondition; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.decorator.ConditionalTriggeredAbility; +import mage.abilities.dynamicvalue.common.StaticValue; +import mage.abilities.effects.common.LookLibraryAndPickControllerEffect; +import mage.abilities.effects.common.TransformSourceEffect; +import mage.abilities.keyword.TransformAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.constants.Zone; +import mage.filter.FilterCard; +import mage.filter.predicate.mageobject.CardTypePredicate; + +/** + * + * @author fireshoes + */ +public class DuskwatchRecruiter extends CardImpl { + + private static final FilterCard filter = new FilterCard("a creature card"); + static { + filter.add(new CardTypePredicate(CardType.CREATURE)); + } + + public DuskwatchRecruiter(UUID ownerId) { + super(ownerId, 203, "Duskwatch Recruiter", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{1}{G}"); + this.expansionSetCode = "SOI"; + this.subtype.add("Human"); + this.subtype.add("Warrior"); + this.subtype.add("Werewolf"); + + this.canTransform = true; + this.secondSideCard = new KrallenhordeHowler(ownerId); + + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // {2}{G}: Look at the top three 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 SimpleActivatedAbility(Zone.BATTLEFIELD, + new LookLibraryAndPickControllerEffect(new StaticValue(3), false, new StaticValue(1), filter, false), + new ManaCostsImpl("{2}{G}"))); + + // At the beginning of each upkeep, if no spells were cast last turn, transform Duskwatch Recruiter. + this.addAbility(new TransformAbility()); + TriggeredAbility ability = new BeginningOfUpkeepTriggeredAbility(new TransformSourceEffect(true), TargetController.ANY, false); + this.addAbility(new ConditionalTriggeredAbility(ability, NoSpellsWereCastLastTurnCondition.getInstance(), TransformAbility.NO_SPELLS_TRANSFORM_RULE)); + } + + public DuskwatchRecruiter(final DuskwatchRecruiter card) { + super(card); + } + + @Override + public DuskwatchRecruiter copy() { + return new DuskwatchRecruiter(this); + } +} diff --git a/Mage.Sets/src/mage/sets/shadowsoverinnistrad/ExposeEvil.java b/Mage.Sets/src/mage/sets/shadowsoverinnistrad/ExposeEvil.java new file mode 100644 index 00000000000..95b07808b5b --- /dev/null +++ b/Mage.Sets/src/mage/sets/shadowsoverinnistrad/ExposeEvil.java @@ -0,0 +1,64 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.shadowsoverinnistrad; + +import java.util.UUID; +import mage.abilities.effects.common.TapTargetEffect; +import mage.abilities.effects.keyword.InvestigateEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author fireshoes + */ +public class ExposeEvil extends CardImpl { + + public ExposeEvil(UUID ownerId) { + super(ownerId, 19, "Expose Evil", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{1}{W}"); + this.expansionSetCode = "SOI"; + + // Tap up to two target creatures. + this.getSpellAbility().addEffect(new TapTargetEffect()); + this.getSpellAbility().addTarget(new TargetCreaturePermanent(0, 2)); + + // Investigate. + this.getSpellAbility().addEffect(new InvestigateEffect()); + } + + public ExposeEvil(final ExposeEvil card) { + super(card); + } + + @Override + public ExposeEvil copy() { + return new ExposeEvil(this); + } +} diff --git a/Mage.Sets/src/mage/sets/shadowsoverinnistrad/FieryTemper.java b/Mage.Sets/src/mage/sets/shadowsoverinnistrad/FieryTemper.java new file mode 100644 index 00000000000..9d9fcbe3ea1 --- /dev/null +++ b/Mage.Sets/src/mage/sets/shadowsoverinnistrad/FieryTemper.java @@ -0,0 +1,54 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.shadowsoverinnistrad; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class FieryTemper extends mage.sets.timeshifted.FieryTemper { + + public FieryTemper(UUID ownerId) { + super(ownerId); + this.cardNumber = 156; + this.expansionSetCode = "SOI"; + this.rarity = Rarity.COMMON; + } + + public FieryTemper(final FieryTemper card) { + super(card); + } + + @Override + public FieryTemper copy() { + return new FieryTemper(this); + } +} diff --git a/Mage.Sets/src/mage/sets/shadowsoverinnistrad/FurtiveHomunculus.java b/Mage.Sets/src/mage/sets/shadowsoverinnistrad/FurtiveHomunculus.java new file mode 100644 index 00000000000..ad04a1c8567 --- /dev/null +++ b/Mage.Sets/src/mage/sets/shadowsoverinnistrad/FurtiveHomunculus.java @@ -0,0 +1,62 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.shadowsoverinnistrad; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.keyword.SkulkAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class FurtiveHomunculus extends CardImpl { + + public FurtiveHomunculus(UUID ownerId) { + super(ownerId, 64, "Furtive Homunculus", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{1}{U}"); + this.expansionSetCode = "SOI"; + this.subtype.add("Homunculus"); + this.power = new MageInt(2); + this.toughness = new MageInt(1); + + // Skulk + this.addAbility(new SkulkAbility()); + } + + public FurtiveHomunculus(final FurtiveHomunculus card) { + super(card); + } + + @Override + public FurtiveHomunculus copy() { + return new FurtiveHomunculus(this); + } +} diff --git a/Mage.Sets/src/mage/sets/shadowsoverinnistrad/HoundOfTheFarbogs.java b/Mage.Sets/src/mage/sets/shadowsoverinnistrad/HoundOfTheFarbogs.java new file mode 100644 index 00000000000..3390f3c6cbe --- /dev/null +++ b/Mage.Sets/src/mage/sets/shadowsoverinnistrad/HoundOfTheFarbogs.java @@ -0,0 +1,72 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.shadowsoverinnistrad; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.condition.common.DeliriumCondition; +import mage.abilities.decorator.ConditionalContinuousEffect; +import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; +import mage.abilities.keyword.MenaceAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; + +/** + * + * @author fireshoes + */ +public class HoundOfTheFarbogs extends CardImpl { + + final static private String rule = "{this} has menace as long as there are four or more card types among cards in your graveyard"; + + public HoundOfTheFarbogs(UUID ownerId) { + super(ownerId, 117, "Hound of the Farbogs", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{4}{B}"); + this.expansionSetCode = "SOI"; + this.subtype.add("Zombie"); + this.subtype.add("Hound"); + this.power = new MageInt(5); + this.toughness = new MageInt(3); + + // Delirium — Hound of the Farborgs has menace as long as there are four or more card types among cards in your graveyard. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, + new ConditionalContinuousEffect(new GainAbilitySourceEffect(new MenaceAbility(), Duration.WhileOnBattlefield), new DeliriumCondition(), rule))); + } + + public HoundOfTheFarbogs(final HoundOfTheFarbogs card) { + super(card); + } + + @Override + public HoundOfTheFarbogs copy() { + return new HoundOfTheFarbogs(this); + } +} diff --git a/Mage.Sets/src/mage/sets/shadowsoverinnistrad/KrallenhordeHowler.java b/Mage.Sets/src/mage/sets/shadowsoverinnistrad/KrallenhordeHowler.java new file mode 100644 index 00000000000..e90d7fe011d --- /dev/null +++ b/Mage.Sets/src/mage/sets/shadowsoverinnistrad/KrallenhordeHowler.java @@ -0,0 +1,89 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.shadowsoverinnistrad; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.TriggeredAbility; +import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.condition.common.TwoOrMoreSpellsWereCastLastTurnCondition; +import mage.abilities.decorator.ConditionalTriggeredAbility; +import mage.abilities.effects.common.TransformSourceEffect; +import mage.abilities.effects.common.cost.SpellsCostReductionControllerEffect; +import mage.abilities.keyword.TransformAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.constants.Zone; +import mage.filter.FilterCard; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.mageobject.CardTypePredicate; + +/** + * + * @author fireshoes + */ +public class KrallenhordeHowler extends CardImpl { + + private static final FilterCard filter = new FilterCard("Creature spells"); + + static { + filter.add(Predicates.or(new CardTypePredicate(CardType.CREATURE))); + } + + public KrallenhordeHowler(UUID ownerId) { + super(ownerId, 203, "Krallenhorde Howler", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, ""); + this.expansionSetCode = "SOI"; + this.subtype.add("Werewolf"); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + this.color.setGreen(true); + + // this card is the second face of double-faced card + this.nightCard = true; + this.canTransform = true; + + // Creature spells you cast cost {1} less to cast. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionControllerEffect(filter, 1))); + + // At the beginning of each upkeep, if a player cast two or more spells last turn, transform Krallenhorde Howler. + TriggeredAbility ability = new BeginningOfUpkeepTriggeredAbility(new TransformSourceEffect(false), TargetController.ANY, false); + this.addAbility(new ConditionalTriggeredAbility(ability, TwoOrMoreSpellsWereCastLastTurnCondition.getInstance(), TransformAbility.TWO_OR_MORE_SPELLS_TRANSFORM_RULE)); + } + + public KrallenhordeHowler(final KrallenhordeHowler card) { + super(card); + } + + @Override + public KrallenhordeHowler copy() { + return new KrallenhordeHowler(this); + } +} diff --git a/Mage.Sets/src/mage/sets/shadowsoverinnistrad/LamplighterOfSelhoff.java b/Mage.Sets/src/mage/sets/shadowsoverinnistrad/LamplighterOfSelhoff.java new file mode 100644 index 00000000000..a882c6aed0d --- /dev/null +++ b/Mage.Sets/src/mage/sets/shadowsoverinnistrad/LamplighterOfSelhoff.java @@ -0,0 +1,82 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.shadowsoverinnistrad; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.TriggeredAbility; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition; +import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition.CountType; +import mage.abilities.decorator.ConditionalTriggeredAbility; +import mage.abilities.effects.common.DrawDiscardControllerEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.filter.common.FilterControlledPermanent; +import mage.filter.predicate.mageobject.SubtypePredicate; +import mage.filter.predicate.permanent.AnotherPredicate; + +/** + * + * @author fireshoes + */ +public class LamplighterOfSelhoff extends CardImpl { + + private static final FilterControlledPermanent filter = new FilterControlledPermanent("another Zombie"); + + static { + filter.add(new AnotherPredicate()); + filter.add(new SubtypePredicate("Zombie")); + } + + public LamplighterOfSelhoff(UUID ownerId) { + super(ownerId, 72, "Lamplighter of Selhoff", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{4}{U}"); + this.expansionSetCode = "SOI"; + this.subtype.add("Zombie"); + this.subtype.add("Horror"); + this.power = new MageInt(3); + this.toughness = new MageInt(5); + + // When Lamplighter of Selhoff enters the battlefield, if you control another Zombie, you may a draw card. If you do, discard a card. + TriggeredAbility triggeredAbility = new EntersBattlefieldTriggeredAbility(new DrawDiscardControllerEffect(1,1)); + this.addAbility(new ConditionalTriggeredAbility( + triggeredAbility, + new PermanentsOnTheBattlefieldCondition(filter, CountType.MORE_THAN, 0), + "When {this} enters the battlefield, if you control another Zombie, you may a draw card. If you do, discard a card.")); + } + + public LamplighterOfSelhoff(final LamplighterOfSelhoff card) { + super(card); + } + + @Override + public LamplighterOfSelhoff copy() { + return new LamplighterOfSelhoff(this); + } +} diff --git a/Mage.Sets/src/mage/sets/shadowsoverinnistrad/MindbreakerDemon.java b/Mage.Sets/src/mage/sets/shadowsoverinnistrad/MindbreakerDemon.java new file mode 100644 index 00000000000..3ca2db4fbea --- /dev/null +++ b/Mage.Sets/src/mage/sets/shadowsoverinnistrad/MindbreakerDemon.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.shadowsoverinnistrad; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class MindbreakerDemon extends mage.sets.blessedvscursed.MindbreakerDemon { + + public MindbreakerDemon(UUID ownerId) { + super(ownerId); + this.cardNumber = 998; + this.expansionSetCode = "SOI"; + } + + public MindbreakerDemon(final MindbreakerDemon card) { + super(card); + } + + @Override + public MindbreakerDemon copy() { + return new MindbreakerDemon(this); + } +} diff --git a/Mage.Sets/src/mage/sets/shadowsoverinnistrad/PackGuardian.java b/Mage.Sets/src/mage/sets/shadowsoverinnistrad/PackGuardian.java new file mode 100644 index 00000000000..d78e42c391d --- /dev/null +++ b/Mage.Sets/src/mage/sets/shadowsoverinnistrad/PackGuardian.java @@ -0,0 +1,72 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.shadowsoverinnistrad; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.costs.common.DiscardCardCost; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.effects.common.DoIfCostPaid; +import mage.abilities.keyword.FlashAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.filter.common.FilterLandCard; +import mage.game.permanent.token.WolfToken; + +/** + * + * @author fireshoes + */ +public class PackGuardian extends CardImpl { + + public PackGuardian(UUID ownerId) { + super(ownerId, 221, "Pack Guardian", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{2}{G}{G}"); + this.expansionSetCode = "SOI"; + this.subtype.add("Wolf"); + this.subtype.add("Spirit"); + this.power = new MageInt(4); + this.toughness = new MageInt(3); + + // Flash + this.addAbility(FlashAbility.getInstance()); + + // When Pack Guardian enters the battlefield, you may discard a land card. If you do, put a 2/2 green Wolf creature token onto the battlefield. + this.addAbility(new EntersBattlefieldTriggeredAbility(new DoIfCostPaid(new CreateTokenEffect(new WolfToken()), new DiscardCardCost(new FilterLandCard())))); + } + + public PackGuardian(final PackGuardian card) { + super(card); + } + + @Override + public PackGuardian copy() { + return new PackGuardian(this); + } +} diff --git a/Mage.Sets/src/mage/sets/shadowsoverinnistrad/StoicBuilder.java b/Mage.Sets/src/mage/sets/shadowsoverinnistrad/StoicBuilder.java new file mode 100644 index 00000000000..929e229abe1 --- /dev/null +++ b/Mage.Sets/src/mage/sets/shadowsoverinnistrad/StoicBuilder.java @@ -0,0 +1,68 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.shadowsoverinnistrad; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.filter.common.FilterLandCard; +import mage.target.common.TargetCardInYourGraveyard; + +/** + * + * @author fireshoes + */ +public class StoicBuilder extends CardImpl { + + public StoicBuilder(UUID ownerId) { + super(ownerId, 231, "Stoic Builder", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{2}{G}"); + this.expansionSetCode = "SOI"; + this.subtype.add("Human"); + this.power = new MageInt(2); + this.toughness = new MageInt(3); + + // When Stoic Builder enters the battlefield, you may return target land card from your graveyard to your hand. + Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnFromGraveyardToHandTargetEffect(), true); + ability.addTarget(new TargetCardInYourGraveyard(new FilterLandCard("land card from your graveyard"))); + this.addAbility(ability); + } + + public StoicBuilder(final StoicBuilder card) { + super(card); + } + + @Override + public StoicBuilder copy() { + return new StoicBuilder(this); + } +} diff --git a/Mage.Sets/src/mage/sets/shadowsoverinnistrad/StructuralDistortion.java b/Mage.Sets/src/mage/sets/shadowsoverinnistrad/StructuralDistortion.java new file mode 100644 index 00000000000..d4b29686dcb --- /dev/null +++ b/Mage.Sets/src/mage/sets/shadowsoverinnistrad/StructuralDistortion.java @@ -0,0 +1,107 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.shadowsoverinnistrad; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.effects.OneShotEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.filter.FilterPermanent; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.mageobject.CardTypePredicate; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.players.Player; +import mage.target.Target; +import mage.target.TargetPermanent; + +/** + * + * @author fireshoes + */ +public class StructuralDistortion extends CardImpl { + + private static final FilterPermanent filter = new FilterPermanent("artifact or land"); + + static { + filter.add(Predicates.or(new CardTypePredicate(CardType.ARTIFACT),new CardTypePredicate(CardType.LAND))); + } + + public StructuralDistortion(UUID ownerId) { + super(ownerId, 185, "Structural Distortion", Rarity.COMMON, new CardType[]{CardType.SORCERY}, "{3}{R}"); + this.expansionSetCode = "SOI"; + + // Exile target artifact or land. Structural Distortion deals 2 damage to that permanent's controller. + this.getSpellAbility().addEffect(new StructuralDistortionEffect()); + Target target = new TargetPermanent(filter); + this.getSpellAbility().addTarget(target); + } + + public StructuralDistortion(final StructuralDistortion card) { + super(card); + } + + @Override + public StructuralDistortion copy() { + return new StructuralDistortion(this); + } +} + +class StructuralDistortionEffect extends OneShotEffect { + + public StructuralDistortionEffect() { + super(Outcome.DestroyPermanent); + this.staticText = "Exile target artifact or land. {this} deals 2 damage to that permanent's controller"; + } + + public StructuralDistortionEffect(final StructuralDistortionEffect effect) { + super(effect); + } + + @Override + public StructuralDistortionEffect copy() { + return new StructuralDistortionEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Permanent permanent = game.getPermanent(this.getTargetPointer().getFirst(game, source)); + if (permanent != null) { + permanent.moveToExile(source.getSourceId(), null, source.getSourceId(), game); + Player permController = game.getPlayer(permanent.getControllerId()); + if (permController != null) { + permController.damage(2, source.getSourceId(), game, false, true); + return true; + } + } + return false; + } +} diff --git a/Mage.Sets/src/mage/sets/shadowsoverinnistrad/WatcherInTheWeb.java b/Mage.Sets/src/mage/sets/shadowsoverinnistrad/WatcherInTheWeb.java new file mode 100644 index 00000000000..f752c8125eb --- /dev/null +++ b/Mage.Sets/src/mage/sets/shadowsoverinnistrad/WatcherInTheWeb.java @@ -0,0 +1,71 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.shadowsoverinnistrad; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.combat.CanBlockAdditionalCreatureEffect; +import mage.abilities.keyword.ReachAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; + +/** + * + * @author fireshoes + */ +public class WatcherInTheWeb extends CardImpl { + + public WatcherInTheWeb(UUID ownerId) { + super(ownerId, 239, "Watcher in the Web", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{4}{G}"); + this.expansionSetCode = "SOI"; + this.subtype.add("Spider"); + this.power = new MageInt(2); + this.toughness = new MageInt(5); + + // Reach + this.addAbility(ReachAbility.getInstance()); + + // Watcher in the Web can block an additional seven creatures each combat. + Effect effect = new CanBlockAdditionalCreatureEffect(7); + effect.setText("{this} can block an additional seven creatures each combat"); + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect)); + } + + public WatcherInTheWeb(final WatcherInTheWeb card) { + super(card); + } + + @Override + public WatcherInTheWeb copy() { + return new WatcherInTheWeb(this); + } +} diff --git a/Mage.Sets/src/mage/sets/theros/DestructiveRevelry.java b/Mage.Sets/src/mage/sets/theros/DestructiveRevelry.java index 88cb8a54b53..8a19fff90ee 100644 --- a/Mage.Sets/src/mage/sets/theros/DestructiveRevelry.java +++ b/Mage.Sets/src/mage/sets/theros/DestructiveRevelry.java @@ -1,99 +1,99 @@ -/* - * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and documentation are those of the - * authors and should not be interpreted as representing official policies, either expressed - * or implied, of BetaSteward_at_googlemail.com. - */ -package mage.sets.theros; - -import java.util.UUID; -import mage.abilities.Ability; -import mage.abilities.effects.OneShotEffect; -import mage.cards.CardImpl; -import mage.constants.CardType; -import mage.constants.Outcome; -import mage.constants.Rarity; -import mage.filter.common.FilterArtifactOrEnchantmentPermanent; -import mage.game.Game; -import mage.game.permanent.Permanent; -import mage.players.Player; -import mage.target.Target; -import mage.target.TargetPermanent; - -/** - * - * @author LevelX2 - */ -public class DestructiveRevelry extends CardImpl { - - public DestructiveRevelry(UUID ownerId) { - super(ownerId, 192, "Destructive Revelry", Rarity.UNCOMMON, new CardType[]{CardType.INSTANT}, "{R}{G}"); - this.expansionSetCode = "THS"; - - // Destroy target artifact or enchantment. Destructive Revelry deals 2 damage to that permanent's controller. - this.getSpellAbility().addEffect(new DestructiveRevelryEffect()); - Target target = new TargetPermanent(new FilterArtifactOrEnchantmentPermanent()); - this.getSpellAbility().addTarget(target); - } - - public DestructiveRevelry(final DestructiveRevelry card) { - super(card); - } - - @Override - public DestructiveRevelry copy() { - return new DestructiveRevelry(this); - } -} - -class DestructiveRevelryEffect extends OneShotEffect { - - public DestructiveRevelryEffect() { - super(Outcome.DestroyPermanent); - this.staticText = "Destroy target artifact or enchantment. Destructive Revelry deals 2 damage to that permanent's controller"; - } - - public DestructiveRevelryEffect(final DestructiveRevelryEffect effect) { - super(effect); - } - - @Override - public DestructiveRevelryEffect copy() { - return new DestructiveRevelryEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Permanent permanent = game.getPermanent(this.getTargetPointer().getFirst(game, source)); - if (permanent != null) { - permanent.destroy(source.getSourceId(), game, false); - Player permController = game.getPlayer(permanent.getControllerId()); - if (permController != null) { - permController.damage(2, source.getSourceId(), game, false, true); - return true; - } - } - return false; - } -} +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.theros; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.effects.OneShotEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.filter.common.FilterArtifactOrEnchantmentPermanent; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.players.Player; +import mage.target.Target; +import mage.target.TargetPermanent; + +/** + * + * @author LevelX2 + */ +public class DestructiveRevelry extends CardImpl { + + public DestructiveRevelry(UUID ownerId) { + super(ownerId, 192, "Destructive Revelry", Rarity.UNCOMMON, new CardType[]{CardType.INSTANT}, "{R}{G}"); + this.expansionSetCode = "THS"; + + // Destroy target artifact or enchantment. Destructive Revelry deals 2 damage to that permanent's controller. + this.getSpellAbility().addEffect(new DestructiveRevelryEffect()); + Target target = new TargetPermanent(new FilterArtifactOrEnchantmentPermanent()); + this.getSpellAbility().addTarget(target); + } + + public DestructiveRevelry(final DestructiveRevelry card) { + super(card); + } + + @Override + public DestructiveRevelry copy() { + return new DestructiveRevelry(this); + } +} + +class DestructiveRevelryEffect extends OneShotEffect { + + public DestructiveRevelryEffect() { + super(Outcome.DestroyPermanent); + this.staticText = "Destroy target artifact or enchantment. {this} deals 2 damage to that permanent's controller"; + } + + public DestructiveRevelryEffect(final DestructiveRevelryEffect effect) { + super(effect); + } + + @Override + public DestructiveRevelryEffect copy() { + return new DestructiveRevelryEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Permanent permanent = game.getPermanent(this.getTargetPointer().getFirst(game, source)); + if (permanent != null) { + permanent.destroy(source.getSourceId(), game, false); + Player permController = game.getPlayer(permanent.getControllerId()); + if (permController != null) { + permController.damage(2, source.getSourceId(), game, false, true); + return true; + } + } + return false; + } +} diff --git a/Mage/src/main/java/mage/abilities/condition/common/DeliriumCondition.java b/Mage/src/main/java/mage/abilities/condition/common/DeliriumCondition.java new file mode 100644 index 00000000000..75c826dd140 --- /dev/null +++ b/Mage/src/main/java/mage/abilities/condition/common/DeliriumCondition.java @@ -0,0 +1,64 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.abilities.condition.common; + +import java.util.HashSet; +import mage.abilities.Ability; +import mage.abilities.condition.Condition; +import mage.cards.Card; +import mage.constants.CardType; +import mage.game.Game; +import mage.players.Player; + +/** + * + * + * @author fireshoes + */ +public class DeliriumCondition implements Condition { + + private static DeliriumCondition fInstance = new DeliriumCondition(); + + public static Condition getInstance() { + return fInstance; + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null) { + HashSet foundCardTypes = new HashSet<>(); + for (Card card : controller.getGraveyard().getCards(game)) { + foundCardTypes.addAll(card.getCardType()); + } + int number = foundCardTypes.size(); + return number > 3; + } + return false; + } +} diff --git a/Mage/src/main/java/mage/abilities/effects/keyword/InvestigateEffect.java b/Mage/src/main/java/mage/abilities/effects/keyword/InvestigateEffect.java index 622839cc966..24f1385a9ae 100644 --- a/Mage/src/main/java/mage/abilities/effects/keyword/InvestigateEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/keyword/InvestigateEffect.java @@ -1,60 +1,60 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package mage.abilities.effects.keyword; - -import mage.abilities.Ability; -import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.costs.common.SacrificeSourceCost; -import mage.abilities.costs.mana.GenericManaCost; -import mage.abilities.effects.OneShotEffect; -import mage.abilities.effects.common.DrawCardSourceControllerEffect; -import mage.constants.CardType; -import mage.constants.Outcome; -import mage.constants.Zone; -import mage.game.Game; -import mage.game.permanent.token.Token; - -/** - * - * @author LevelX2 - */ -public class InvestigateEffect extends OneShotEffect { - - public InvestigateEffect() { - super(Outcome.PutCreatureInPlay); - this.staticText = "Investigate. (Put a colorless Clue artifact token onto the battlefield with \"{2}, Sacrifice this artifact: Draw a card.\")"; - } - - public InvestigateEffect(final InvestigateEffect effect) { - super(effect); - } - - @Override - public InvestigateEffect copy() { - return new InvestigateEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - return false; - } -} - -class ClueArtifactToken extends Token { - - ClueArtifactToken() { - super("Clue", "colorless Clue artifact token onto the battlefield with \"2, Sacrifice this artifact: Draw a card.\""); - this.setOriginalExpansionSetCode("SOI"); - this.cardType.add(CardType.ARTIFACT); - - // {2}, Sacrifice this artifact: Draw a card. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(1), new GenericManaCost(2)); - SacrificeSourceCost cost = new SacrificeSourceCost(); - cost.setText("Sacrifice this artifact"); - ability.addCost(cost); - this.addAbility(ability); - } -} +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package mage.abilities.effects.keyword; + +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.SacrificeSourceCost; +import mage.abilities.costs.mana.GenericManaCost; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Zone; +import mage.game.Game; +import mage.game.permanent.token.Token; + +/** + * + * @author LevelX2 + */ +public class InvestigateEffect extends OneShotEffect { + + public InvestigateEffect() { + super(Outcome.PutCreatureInPlay); + this.staticText = "Investigate. (Put a colorless Clue artifact token onto the battlefield with \"{2}, Sacrifice this artifact: Draw a card.\")"; + } + + public InvestigateEffect(final InvestigateEffect effect) { + super(effect); + } + + @Override + public InvestigateEffect copy() { + return new InvestigateEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + return false; + } +} + +class ClueArtifactToken extends Token { + + ClueArtifactToken() { + super("Clue", "colorless Clue artifact token onto the battlefield with \"{2}, Sacrifice this artifact: Draw a card.\""); + this.setOriginalExpansionSetCode("SOI"); + this.cardType.add(CardType.ARTIFACT); + + // {2}, Sacrifice this artifact: Draw a card. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(1), new GenericManaCost(2)); + SacrificeSourceCost cost = new SacrificeSourceCost(); + cost.setText("Sacrifice this artifact"); + ability.addCost(cost); + this.addAbility(ability); + } +} diff --git a/Mage/src/main/java/mage/constants/AbilityWord.java b/Mage/src/main/java/mage/constants/AbilityWord.java index f2843a9f085..b076e77e4db 100644 --- a/Mage/src/main/java/mage/constants/AbilityWord.java +++ b/Mage/src/main/java/mage/constants/AbilityWord.java @@ -40,6 +40,7 @@ public enum AbilityWord { COHORT("Cohort"), CONSTELLATION("Constellation"), CONVERGE("Converge"), + DELIRIUM("Delirium"), DOMAIN("Domain"), FATEFUL_HOUR("Fateful hour"), FEROCIOUS("Ferocious"), diff --git a/Mage/src/main/java/mage/game/permanent/token/DevilToken.java b/Mage/src/main/java/mage/game/permanent/token/DevilToken.java new file mode 100644 index 00000000000..0bb7dd10d35 --- /dev/null +++ b/Mage/src/main/java/mage/game/permanent/token/DevilToken.java @@ -0,0 +1,61 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.game.permanent.token; + +import java.util.ArrayList; +import java.util.List; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.DiesTriggeredAbility; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.DamageTargetEffect; +import mage.constants.CardType; +import mage.target.common.TargetCreatureOrPlayer; + +/** + * + * @author fireshoes + */ +public class DevilToken extends Token { + + final static private List tokenImageSets = new ArrayList<>(); + + public DevilToken() { + super("Devil", "1/1 red Devil creature with \"When this creature dies, it deals 1 damage to target creature or player.\""); + cardType.add(CardType.CREATURE); + subtype.add("Devil"); + color.setRed(true); + power = new MageInt(1); + toughness = new MageInt(1); + Effect effect = new DamageTargetEffect(1); + effect.setText("When {this} dies, it deals 1 damage to target creature or player"); + Ability ability = new DiesTriggeredAbility(effect); + ability.addTarget(new TargetCreatureOrPlayer()); + this.addAbility(ability); + } +} diff --git a/Mage/src/main/java/mage/game/permanent/token/WolfToken.java b/Mage/src/main/java/mage/game/permanent/token/WolfToken.java index bae31220032..d2bd1c79075 100644 --- a/Mage/src/main/java/mage/game/permanent/token/WolfToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/WolfToken.java @@ -31,9 +31,8 @@ package mage.game.permanent.token; import java.util.ArrayList; import java.util.Arrays; import java.util.List; - -import mage.constants.CardType; import mage.MageInt; +import mage.constants.CardType; /** * @@ -44,7 +43,7 @@ public class WolfToken extends Token { final static private List tokenImageSets = new ArrayList<>(); static { - tokenImageSets.addAll(Arrays.asList("BNG", "C14", "CNS", "FNMP", "ISD", "LRW", "M10", "M14", "MM2", "SHM", "SOM", "ZEN")); + tokenImageSets.addAll(Arrays.asList("BNG", "C14", "CNS", "FNMP", "ISD", "LRW", "M10", "M14", "MM2", "SHM", "SOM", "ZEN", "SOI")); } public WolfToken() { diff --git a/Utils/known-sets.txt b/Utils/known-sets.txt index ccd11f17dd6..7183f683135 100644 --- a/Utils/known-sets.txt +++ b/Utils/known-sets.txt @@ -48,6 +48,7 @@ Duel Decks: Speed vs. Cunning|speedvscunning| Duel Decks: Venser vs. Koth|venservskoth| Duel Decks: Zendikar vs. Eldrazi|zendikarvseldrazi| Eighth Edition|eighthedition| +Eldritch Moon|eldritchmoon| European Land Program|europeanlandprogram| Eventide|eventide| Exodus|exodus| @@ -133,6 +134,7 @@ Scars of Mirrodin|scarsofmirrodin| Scourge|scourge| Seventh Edition|seventhedition| Shadowmoor|shadowmoor| +Shadows over Innistrad|shadowsoverinnistrad| Shards of Alara|shardsofalara| Starter 1999|starter1999| Starter 2000|starter2000| diff --git a/Utils/mtg-cards-data.txt b/Utils/mtg-cards-data.txt index 7e71296a68a..83581304232 100644 --- a/Utils/mtg-cards-data.txt +++ b/Utils/mtg-cards-data.txt @@ -56860,4 +56860,20 @@ Wandering Fumarole|Oath of the Gatewatch|182|R||Land|||Wandering Fumarole enters Wastes|Oath of the Gatewatch|183|C||Basic Land|||{T}: Add {C} to your mana pool.| Wastes|Oath of the Gatewatch|184|C||Basic Land|||{T}: Add {C} to your mana pool.| Geist of Saint Traft|Duel Decks: Blessed vs. Cursed|1|M|{1}{W}{U{|Legendary Creature - Spirit Cleric|2|2|Hexproof (This creature can't be the target of spells or abilities your opponents control.)$Whenever Geist of Saint Traft attacks, put a 4/4 white Angel creature token with flying onto the battlefield tapped and attacking. Exile that token at end of combat.| -Mindbreaker Demon|Duel Decks: Blessed vs. Cursed|41|M|{2}{B}{B}|Creature - Demon|4|5|Flying, trample$When Mindbreaker Demon enters the battlefield, put the top four cards of your library into your graveyard.$At the beginning of your upkeep, if you don't have 4 or more card types in your graveyard, you lose 4 life.| \ No newline at end of file +Mindbreaker Demon|Duel Decks: Blessed vs. Cursed|41|M|{2}{B}{B}|Creature - Demon|4|5|Flying, trample$When Mindbreaker Demon enters the battlefield, put the top four cards of your library into your graveyard.$Delirium — At the beginning of your upkeep, if you don't have 4 or more card types in your graveyard, you lose 4 life.| +Expose Evil|Shadows over Innistrad|19|C|{1}{W}|Instant|||Tap up to two target creatures.$Investigate. (Put a colorless Clue artifact token onto the battlefield with "{2}, Sacrifice this artifact: Draw a card.")| +Furtive Homunculus|Shadows over Innistrad|64|C|{1}{U}|Creature - Homunculus|2|1|Skulk (This creature can't be blocked by creatures with greater power.)| +Invasive Surgery|Shadows over Innistrad|68|U|{U}|Instant|||Counter target sorcery spell.$Delirium — If there are four or more card types among cards in your graveyard, search the graveyard, hand, and library of that spell's controller for any number of cards with the same name as that spell, exile those cards, then that player shuffles his or her library.| +Lamplighter of Selhoff|Shadows over Innistrad|72|C|{4}{U}|Creature - Zombie Horror|3|5|When Lamplighter of Selhoff enters the battlefield, if you control another Zombie, you may draw a card. If you do, discard a card.| +Dead Weight|Shadows over Innistrad|999|C|{B}|Enchantment - Aura|||Enchant creature$Enchanted creature gets -2/-2.| +Hound of the Farbogs|Shadows over Innistrad|117|C|{4}{B}|Creature - Zombie Hound|5|3|Delirium — Hound of the Farborgs has menace as long as there are four or more card types among cards in your graveyard. (A creature with menace can't be blocked except by two or more creatures.)| +Mindbreaker Demon|Shadows over Innistrad|998|M|{2}{B}{B}|Creature - Demon|4|5|Flying, trample$When Mindbreaker Demon enters the battlefield, put the top four cards of your library into your graveyard.$Delirium — At the beginning of your upkeep, unless there are four or more card types among card in your graveyard, you lose 4 life.| +Dance with Devils|Shadows over Innistrad|150|U|{3}{R}|Instant|||Put two 1/1 red Devil creature tokens onto the battlefield. They have "When this creature dies, it deals 1 damage to target creature or player."| +Devil's Playground|Shadows over Innistrad|151|R|{4}{R}{R}|Sorcery|||Put four 1/1 red Devil creature tokens onto the battlefield. They have "When this creature dies, it deals 1 damage to target creature or player."| +Fiery Temper|Shadows over Innistrad|156|C|{1}{R}{R}|Instant|||Fiery Temper deals 3 damage to target creature or player.$Madness {R} (If you discard this card, you may play it for its madness cost instead of putting it into your graveyard.)| +Structural Distortion|Shadows over Innistrad|185|C|{3}{R}|Sorcery|||Exile target artifact or land. Structural Distortion deals 2 damage to that permanent's controller.| +Duskwatch Recruiter|Shadows over Innistrad|203a|U|{1}{G}|Creature - Human Warrior Werewolf|2|2|{2}{G}: Look at the top three 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.$At the beginning of each upkeep, if no spells were cast last turn, transform Duskwatch Recruiter.| +Krallenhorde Howler|Shadows over Innistrad|203b|U||Creature - Werewolf|3|3|Creature spells you cast cost {1} less to cast.$At the beginning of each upkeep, if a player cast two or more spells last turn, transform Krallenhorde Howler.| +Pack Guardian|Shadows over Innistrad|221|U|{2}{G}{G}|Creature - Wolf Spirit|4|3|Flash$When Pack Guardian enters the battlefield, you may discard a land card. If you do, put a 2/2 green Wolf creature token onto the battlefield.| +Stoic Builder|Shadows over Innistrad|231|C|{2}{G}|Creature - Human|2|3|When Stoic Builder enters the battlefield, you may return target land card from your graveyard to your hand.| +Watcher in the Web|Shadows over Innistrad|239|C|{4}{G}|Creature - Spider|2|5|Reach (This creature can block creature with flying.)$Watcher in the Web can block an additional seven creatures each combat.| \ No newline at end of file diff --git a/Utils/mtg-sets-data.txt b/Utils/mtg-sets-data.txt index fa24c5db1e0..13d558e686b 100644 --- a/Utils/mtg-sets-data.txt +++ b/Utils/mtg-sets-data.txt @@ -60,6 +60,7 @@ Duel Decks: Sorin vs. Tibalt|DDK| Duel Decks: Speed vs. Cunning|DDN| Duel Decks: Venser vs. Koth|DDI| Duel Decks: Zendikar vs. Eldrazi|DDP| +Eldritch Moon|EMN| European Land Program|EURO| Eventide|EVE| Exodus|EXO| @@ -139,6 +140,7 @@ Scars of Mirrodin|SOM| Scourge|SCG| Shadowmoor|SHM| Shards of Alara|ALA| +Shadows over Innistrad|SOI| Saviors of Kamigawa|SOK| Starter 2000|S00| Starter 1999|S99|