diff --git a/Mage.Client/src/main/java/mage/client/util/sets/ConstructedFormats.java b/Mage.Client/src/main/java/mage/client/util/sets/ConstructedFormats.java index 57cce3aa394..5c9705f28c1 100644 --- a/Mage.Client/src/main/java/mage/client/util/sets/ConstructedFormats.java +++ b/Mage.Client/src/main/java/mage/client/util/sets/ConstructedFormats.java @@ -24,7 +24,7 @@ public class ConstructedFormats { private static final String[] constructedFormats = { ALL, STANDARD, EXTENDED, MODERN, "Commander 2013 Edition", - "* Theros Block", "Born of the Gods", "Theros", + "* Theros Block", "Journey into Nyx", "Born of the Gods", "Theros", "Magic 2014", "Modern Masters", "* Return to Ravnica Block", "Dragon's Maze", "Gatecrash", "Return to Ravnica", @@ -79,7 +79,10 @@ public class ConstructedFormats { public static List getSetsByFormat(String format) { if (format.equals("* Theros Block")) { - return Arrays.asList("THS", "BNG"); + return Arrays.asList("THS", "BNG","JOU"); + } + if (format.equals("Journey into Nyx")) { + return Arrays.asList("JOU"); } if (format.equals("Born of the Gods")) { return Arrays.asList("BNG"); 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 e90e52d27a9..54ce7163745 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 @@ -42,7 +42,7 @@ public class GathererSets implements Iterable { "ISD", "DKA", "AVR", "RTR", "GTC", "DGM", "MMA", - "THS", "BNG"}; + "THS", "BNG", "JOU"}; 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 ae900518709..d6f8dea211c 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 @@ -18,6 +18,7 @@ public class MagicCardsImageSource implements CardImageSource { private static final Map setNameReplacement = new HashMap() { { + put("JOU", "journey-into-nyx"); put("BNG", "born-of-the-gods"); put("C13", "commander-2013-edition"); put("THS", "theros"); 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 b2aa3d10e74..72e93ed27cb 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 @@ -29,6 +29,7 @@ public class WizardCardsImageSource implements CardImageSource { public WizardCardsImageSource() { sets = new HashMap<>(); setsAliases = new HashMap<>(); + setsAliases.put("JOU", "journeyintonyx/cig"); setsAliases.put("BNG", "bornofthegods/cig"); setsAliases.put("C13", "commander2013/cig"); setsAliases.put("THS", "theros/cig"); diff --git a/Mage.Client/src/main/resources/image.url.properties b/Mage.Client/src/main/resources/image.url.properties index c8f6539e6c4..759663bb906 100644 --- a/Mage.Client/src/main/resources/image.url.properties +++ b/Mage.Client/src/main/resources/image.url.properties @@ -63,6 +63,6 @@ ddc=dvd dd2=jvc ddd=gvl # Remove setname as soon as the images can be downloaded -ignore.urls=TOK,EMBLEM +ignore.urls=TOK,EMBLEM,JOU # sets ordered by release time (newest goes first) token.lookup.order=BNG,THS,DDL,M14,MMA,DGM,GTC,RTR,M13,AVR,DDI,DKA,ISD,M12,NPH,MBS,SOM,M11,ROE,PVC,WWK,ZEN,M10,GVL,ARB,DVD,CFX,JVC,ALA,EVE,SHM,EVG,MOR,LRW,10E,CLS,CHK \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/JourneyIntoNyx.java b/Mage.Sets/src/mage/sets/JourneyIntoNyx.java new file mode 100644 index 00000000000..c5252356ea3 --- /dev/null +++ b/Mage.Sets/src/mage/sets/JourneyIntoNyx.java @@ -0,0 +1,60 @@ +/* +* 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; + +import java.util.GregorianCalendar; +import mage.cards.ExpansionSet; +import mage.constants.SetType; + +/** + * + * @author LevelX2 + */ +public class JourneyIntoNyx extends ExpansionSet { + + private static final JourneyIntoNyx fINSTANCE = new JourneyIntoNyx(); + + public static JourneyIntoNyx getInstance() { + return fINSTANCE; + } + + private JourneyIntoNyx() { + super("Journey into Nyx", "JOU", "mage.sets.journeyintonyx", new GregorianCalendar(2014, 5, 2).getTime(), SetType.EXPANSION); + this.blockName = "Theros"; + this.parentSet = Theros.getInstance(); + this.hasBasicLands = false; + this.hasBoosters = true; + this.numBoosterLands = 0; + this.numBoosterCommon = 11; + this.numBoosterUncommon = 3; + this.numBoosterRare = 1; + this.ratioBoosterMythic = 8; + } + +} diff --git a/Mage.Sets/src/mage/sets/journeyintonyx/AjanisPresence.java b/Mage.Sets/src/mage/sets/journeyintonyx/AjanisPresence.java new file mode 100644 index 00000000000..a8264b264d6 --- /dev/null +++ b/Mage.Sets/src/mage/sets/journeyintonyx/AjanisPresence.java @@ -0,0 +1,75 @@ +/* + * 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.journeyintonyx; + +import java.util.UUID; +import mage.abilities.abilityword.StriveAbility; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.continious.BoostTargetEffect; +import mage.abilities.effects.common.continious.GainAbilityTargetEffect; +import mage.abilities.keyword.IndestructibleAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author LevelX2 + */ +public class AjanisPresence extends CardImpl { + + public AjanisPresence(UUID ownerId) { + super(ownerId, 2, "Ajani's Presence", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{W}"); + this.expansionSetCode = "JOU"; + + this.color.setWhite(true); + + // Strive - Ajani's Presence costs {2}{W} more to cast for each target beyond the first. + this.addAbility(new StriveAbility("{2}{W}")); + + // Any number of target creatures each get +1/+1 and gain indestructible until end of turn. + Effect effect = new BoostTargetEffect(1,1,Duration.EndOfTurn); + effect.setText("Any number of target creatures each get +1/+1"); + this.getSpellAbility().addEffect(effect); + effect = new GainAbilityTargetEffect(IndestructibleAbility.getInstance(), Duration.EndOfTurn); + effect.setText("and gain indestructible until end of turn"); + this.getSpellAbility().addEffect(effect); + this.getSpellAbility().addTarget(new TargetCreaturePermanent(0, Integer.MAX_VALUE)); + } + + public AjanisPresence(final AjanisPresence card) { + super(card); + } + + @Override + public AjanisPresence copy() { + return new AjanisPresence(this); + } +} diff --git a/Mage.Sets/src/mage/sets/journeyintonyx/CyclopsOfEternalFury.java b/Mage.Sets/src/mage/sets/journeyintonyx/CyclopsOfEternalFury.java new file mode 100644 index 00000000000..df419b636ea --- /dev/null +++ b/Mage.Sets/src/mage/sets/journeyintonyx/CyclopsOfEternalFury.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.journeyintonyx; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.common.continious.GainAbilityControlledEffect; +import mage.abilities.keyword.HasteAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterCreaturePermanent; + +/** + * + * @author LevelX2 + */ +public class CyclopsOfEternalFury extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("tapped creature"); + + public CyclopsOfEternalFury(UUID ownerId) { + super(ownerId, 92, "Cyclops of Eternal Fury", Rarity.UNCOMMON, new CardType[]{CardType.ENCHANTMENT, CardType.CREATURE}, "{4}{R}{R}"); + this.expansionSetCode = "JOU"; + this.subtype.add("Cyclops"); + + this.color.setRed(true); + this.power = new MageInt(5); + this.toughness = new MageInt(3); + + // Creatures you control have haste. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityControlledEffect(HasteAbility.getInstance(), Duration.WhileOnBattlefield, filter))); + } + + public CyclopsOfEternalFury(final CyclopsOfEternalFury card) { + super(card); + } + + @Override + public CyclopsOfEternalFury copy() { + return new CyclopsOfEternalFury(this); + } +} diff --git a/Mage.Sets/src/mage/sets/journeyintonyx/DakraMystic.java b/Mage.Sets/src/mage/sets/journeyintonyx/DakraMystic.java new file mode 100644 index 00000000000..9aa7b59a02c --- /dev/null +++ b/Mage.Sets/src/mage/sets/journeyintonyx/DakraMystic.java @@ -0,0 +1,121 @@ +/* + * 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.journeyintonyx; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.DrawCardAllEffect; +import mage.cards.CardImpl; +import mage.cards.CardsImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.game.Game; +import mage.players.Player; + +/** + * + * @author LevelX2 + */ +public class DakraMystic extends CardImpl { + + public DakraMystic(UUID ownerId) { + super(ownerId, 35, "Dakra Mystic", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{U}"); + this.expansionSetCode = "JOU"; + this.subtype.add("Merfolk"); + this.subtype.add("Wizard"); + + this.color.setBlue(true); + this.power = new MageInt(1); + this.toughness = new MageInt(1); + + // {U},{T}:Each player reveals the top card of his or her library. You may put the revealed cards into their owners graveyard. If you don't, each player draws a card. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DakraMysticEffect(), new ManaCostsImpl("{U}")); + ability.addCost(new TapSourceCost()); + this.addAbility(ability); + + + } + + public DakraMystic(final DakraMystic card) { + super(card); + } + + @Override + public DakraMystic copy() { + return new DakraMystic(this); + } +} + +class DakraMysticEffect extends OneShotEffect { + + public DakraMysticEffect() { + super(Outcome.Detriment); + this.staticText = "Each player reveals the top card of his or her library. You may put the revealed cards into their owners graveyard. If you don't, each player draws a card"; + } + + public DakraMysticEffect(final DakraMysticEffect effect) { + super(effect); + } + + @Override + public DakraMysticEffect copy() { + return new DakraMysticEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null) { + for(UUID playerId: controller.getInRange()) { + Player player = game.getPlayer(playerId); + if (player != null && player.getLibrary().size() > 0) { + player.revealCards(player.getName(), new CardsImpl(player.getLibrary().getFromTop(game)), game); + } + } + if (controller.chooseUse(outcome, "Put revealed cards into graveyard?", game)) { + for(UUID playerId: controller.getInRange()) { + Player player = game.getPlayer(playerId); + if (player != null && player.getLibrary().size() > 0) { + controller.moveCardToGraveyardWithInfo(player.getLibrary().getFromTop(game), source.getSourceId(), game, Zone.LIBRARY); + } + } + } else { + new DrawCardAllEffect(1).apply(game, source); + } + return true; + } + return false; + } +} diff --git a/Mage.Sets/src/mage/sets/journeyintonyx/EidolonOfBlossoms.java b/Mage.Sets/src/mage/sets/journeyintonyx/EidolonOfBlossoms.java new file mode 100644 index 00000000000..d3ce91812e3 --- /dev/null +++ b/Mage.Sets/src/mage/sets/journeyintonyx/EidolonOfBlossoms.java @@ -0,0 +1,65 @@ +/* + * 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.journeyintonyx; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.abilityword.ConstellationAbility; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author LevelX2 + */ +public class EidolonOfBlossoms extends CardImpl { + + public EidolonOfBlossoms(UUID ownerId) { + super(ownerId, 122, "Eidolon of Blossoms", Rarity.RARE, new CardType[]{CardType.ENCHANTMENT, CardType.CREATURE}, "{2}{G}{G}"); + this.expansionSetCode = "JOU"; + this.subtype.add("Spirit"); + + this.color.setGreen(true); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // Constellation - Whenever Eidolon of Blossoms or another enchantment enters the battlefield under your control, draw a card. + this.addAbility(new ConstellationAbility(new DrawCardSourceControllerEffect(1))); + } + + public EidolonOfBlossoms(final EidolonOfBlossoms card) { + super(card); + } + + @Override + public EidolonOfBlossoms copy() { + return new EidolonOfBlossoms(this); + } +} diff --git a/Mage.Sets/src/mage/sets/journeyintonyx/ExtinguishAllHope.java b/Mage.Sets/src/mage/sets/journeyintonyx/ExtinguishAllHope.java new file mode 100644 index 00000000000..a8ecc339512 --- /dev/null +++ b/Mage.Sets/src/mage/sets/journeyintonyx/ExtinguishAllHope.java @@ -0,0 +1,73 @@ +/* + * 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.journeyintonyx; + +import java.util.UUID; +import mage.abilities.effects.common.DestroyAllEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.filter.FilterPermanent; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.mageobject.CardTypePredicate; + +/** + * + * @author LevelX2 + */ +public class ExtinguishAllHope extends CardImpl { + + private static final FilterPermanent filter = new FilterPermanent("nonenchantment creatures"); + + static { + filter.add(new CardTypePredicate(CardType.CREATURE)); + filter.add(Predicates.not(new CardTypePredicate(CardType.ENCHANTMENT))); + } + + + public ExtinguishAllHope(UUID ownerId) { + //TODO: Fix card number + super(ownerId, 999, "Extinguish All Hope", Rarity.RARE, new CardType[]{CardType.SORCERY}, "{4}{B}{B}"); + this.expansionSetCode = "JOU"; + + this.color.setBlack(true); + + // Destroy all nonenchantment creatures. + this.getSpellAbility().addEffect(new DestroyAllEffect(filter)); + + } + + public ExtinguishAllHope(final ExtinguishAllHope card) { + super(card); + } + + @Override + public ExtinguishAllHope copy() { + return new ExtinguishAllHope(this); + } +} diff --git a/Mage.Sets/src/mage/sets/journeyintonyx/GnarledScarhide.java b/Mage.Sets/src/mage/sets/journeyintonyx/GnarledScarhide.java new file mode 100644 index 00000000000..d27b476e054 --- /dev/null +++ b/Mage.Sets/src/mage/sets/journeyintonyx/GnarledScarhide.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.journeyintonyx; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.CantBlockAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.combat.CantBlockAttachedEffect; +import mage.abilities.effects.common.continious.BoostEnchantedEffect; +import mage.abilities.keyword.BestowAbility; +import mage.cards.CardImpl; +import mage.constants.AttachmentType; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; + +/** + * + * @author LevelX2 + */ +public class GnarledScarhide extends CardImpl { + + public GnarledScarhide(UUID ownerId) { + super(ownerId, 72, "Gnarled Scarhide", Rarity.UNCOMMON, new CardType[]{CardType.ENCHANTMENT, CardType.CREATURE}, "{B}"); + this.expansionSetCode = "JOU"; + this.subtype.add("Minotaur"); + + this.color.setBlack(true); + this.power = new MageInt(2); + this.toughness = new MageInt(1); + + // Bestow {3}{B} + this.addAbility(new BestowAbility(this, "{3}{B}")); + // Gnarled Scarhide can't block. + this.addAbility(new CantBlockAbility()); + // Enchanted creature gets +2/+1 and can't block. + Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(2,1, Duration.WhileOnBattlefield)); + Effect effect = new CantBlockAttachedEffect(AttachmentType.AURA); + effect.setText("and can't block"); + ability.addEffect(effect); + this.addAbility(ability); + + } + + public GnarledScarhide(final GnarledScarhide card) { + super(card); + } + + @Override + public GnarledScarhide copy() { + return new GnarledScarhide(this); + } +} diff --git a/Mage.Sets/src/mage/sets/journeyintonyx/HallOfTriumph.java b/Mage.Sets/src/mage/sets/journeyintonyx/HallOfTriumph.java new file mode 100644 index 00000000000..6e7adacfe29 --- /dev/null +++ b/Mage.Sets/src/mage/sets/journeyintonyx/HallOfTriumph.java @@ -0,0 +1,151 @@ +/* + * 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.journeyintonyx; + +import java.util.UUID; +import mage.ObjectColor; +import mage.abilities.Ability; +import mage.abilities.common.AsEntersBattlefieldAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.ContinuousEffectImpl; +import mage.abilities.effects.OneShotEffect; +import mage.cards.CardImpl; +import mage.choices.ChoiceColor; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Layer; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.SubLayer; +import mage.constants.Zone; +import mage.filter.common.FilterCreaturePermanent; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.players.Player; + + +/** + * + * @author LevelX2 + */ +public class HallOfTriumph extends CardImpl { + + public HallOfTriumph(UUID ownerId) { + super(ownerId, 162, "Hall of Triumph", Rarity.RARE, new CardType[]{CardType.ARTIFACT}, "{3}"); + this.expansionSetCode = "JOU"; + this.supertype.add("Legendary"); + + // As Hall of Triumph enters the battlefield choose a color. + this.addAbility(new AsEntersBattlefieldAbility(new HallOfTriumphEffect())); + // Creatures you control of the chosen color get +1/+1. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new HallOfTriumphBoostControlledEffect())); + } + + public HallOfTriumph(final HallOfTriumph card) { + super(card); + } + + @Override + public HallOfTriumph copy() { + return new HallOfTriumph(this); + } +} + +class HallOfTriumphEffect extends OneShotEffect { + + public HallOfTriumphEffect() { + super(Outcome.BoostCreature); + staticText = "choose a color"; + } + + public HallOfTriumphEffect(final HallOfTriumphEffect effect) { + super(effect); + } + + @Override + public boolean apply(Game game, Ability source) { + Player player = game.getPlayer(source.getControllerId()); + Permanent permanent = game.getPermanent(source.getSourceId()); + if (player != null && permanent != null) { + ChoiceColor colorChoice = new ChoiceColor(); + colorChoice.setMessage("Choose color"); + while (!player.choose(Outcome.BoostCreature, colorChoice, game)) { + if (!player.isInGame()) { + return false; + } + } + if (colorChoice.getChoice() != null) { + game.informPlayers(permanent.getName() + ": " + player.getName() + " has chosen " + colorChoice.getChoice()); + game.getState().setValue(permanent.getId() + "_color", colorChoice.getColor()); + permanent.addInfo("chosen color", "Chosen color: " + colorChoice.getChoice().toString() + ""); + } + } + return false; + } + + @Override + public HallOfTriumphEffect copy() { + return new HallOfTriumphEffect(this); + } + +} + +class HallOfTriumphBoostControlledEffect extends ContinuousEffectImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent(); + + public HallOfTriumphBoostControlledEffect() { + super(Duration.WhileOnBattlefield, Layer.PTChangingEffects_7, SubLayer.ModifyPT_7c, Outcome.BoostCreature); + staticText = "Creatures you control of the chosen color get +1/+1"; + } + + public HallOfTriumphBoostControlledEffect(final HallOfTriumphBoostControlledEffect effect) { + super(effect); + } + + @Override + public HallOfTriumphBoostControlledEffect copy() { + return new HallOfTriumphBoostControlledEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + ObjectColor color = (ObjectColor) game.getState().getValue(source.getSourceId() + "_color"); + if (color != null) { + for (Permanent perm: game.getBattlefield().getAllActivePermanents(filter, source.getControllerId(), game)) { + if (perm.getColor().shares(color)) { + perm.addPower(1); + perm.addToughness(1); + } + } + return true; + } + return false; + } + +} diff --git a/Mage.Sets/src/mage/sets/journeyintonyx/IroasGodOfVictory.java b/Mage.Sets/src/mage/sets/journeyintonyx/IroasGodOfVictory.java new file mode 100644 index 00000000000..a5fe2af6935 --- /dev/null +++ b/Mage.Sets/src/mage/sets/journeyintonyx/IroasGodOfVictory.java @@ -0,0 +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.journeyintonyx; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.dynamicvalue.common.DevotionCount; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.PreventAllDamageToEffect; +import mage.abilities.effects.common.combat.CantBeBlockedByOneAllEffect; +import mage.abilities.effects.common.continious.LoseCreatureTypeSourceEffect; +import mage.abilities.keyword.IndestructibleAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.ColoredManaSymbol; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.constants.Zone; +import mage.filter.common.FilterControlledCreatureInPlay; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.permanent.AttackingPredicate; +import mage.filter.predicate.permanent.ControllerPredicate; + +/** + * + * @author LevelX2 + */ +public class IroasGodOfVictory extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Creatures you control"); + private static final FilterControlledCreatureInPlay filterAttacking = new FilterControlledCreatureInPlay("attacking creatures you control"); + static { + filter.add(new ControllerPredicate(TargetController.YOU)); + filterAttacking.add(new AttackingPredicate()); + } + + public IroasGodOfVictory(UUID ownerId) { + super(ownerId, 150, "Iroas, God of Victory", Rarity.MYTHIC, new CardType[]{CardType.CREATURE}, "{2}{R}{W}"); + this.expansionSetCode = "JOU"; + this.supertype.add("Legendary"); + this.supertype.add("Enhantment"); + this.subtype.add("God"); + + this.color.setRed(true); + this.color.setWhite(true); + this.power = new MageInt(7); + this.toughness = new MageInt(4); + + // Indestructible + this.addAbility(IndestructibleAbility.getInstance()); + // As long as your devotion to red and white is less than seven, Iroas isn't a creature. + Effect effect = new LoseCreatureTypeSourceEffect(new DevotionCount(ColoredManaSymbol.R, ColoredManaSymbol.W), 7); + effect.setText("As long as your devotion to red and white is less than seven, Iroas isn't a creature"); + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect)); + + // Creatures you control can't be blocked except by two or more creatures. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new CantBeBlockedByOneAllEffect(2, filter))); + + // Prevent all damage that would be dealt to attacking creatures you control. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new PreventAllDamageToEffect(Duration.WhileOnBattlefield, filterAttacking))); + + } + + public IroasGodOfVictory(final IroasGodOfVictory card) { + super(card); + } + + @Override + public IroasGodOfVictory copy() { + return new IroasGodOfVictory(this); + } +} diff --git a/Mage.Sets/src/mage/sets/journeyintonyx/RavenousLeucrocota.java b/Mage.Sets/src/mage/sets/journeyintonyx/RavenousLeucrocota.java new file mode 100644 index 00000000000..8e6250c3fe7 --- /dev/null +++ b/Mage.Sets/src/mage/sets/journeyintonyx/RavenousLeucrocota.java @@ -0,0 +1,67 @@ +/* + * 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.journeyintonyx; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.keyword.MonstrosityAbility; +import mage.abilities.keyword.VigilanceAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author LevelX2 + */ +public class RavenousLeucrocota extends CardImpl { + + public RavenousLeucrocota(UUID ownerId) { + super(ownerId, 136, "Ravenous Leucrocota", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{3}{G}"); + this.expansionSetCode = "JOU"; + this.subtype.add("Beast"); + + this.color.setGreen(true); + this.power = new MageInt(2); + this.toughness = new MageInt(4); + + // Vigilance + this.addAbility(VigilanceAbility.getInstance()); + // {6}{G}: Monstrosity 3. + this.addAbility(new MonstrosityAbility("{6}{G}", 3)); + } + + public RavenousLeucrocota(final RavenousLeucrocota card) { + super(card); + } + + @Override + public RavenousLeucrocota copy() { + return new RavenousLeucrocota(this); + } +} diff --git a/Mage.Sets/src/mage/sets/journeyintonyx/SatyrHoplite.java b/Mage.Sets/src/mage/sets/journeyintonyx/SatyrHoplite.java new file mode 100644 index 00000000000..ea371f5d25d --- /dev/null +++ b/Mage.Sets/src/mage/sets/journeyintonyx/SatyrHoplite.java @@ -0,0 +1,67 @@ +/* + * 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.journeyintonyx; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.abilities.keyword.HeroicAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.counters.CounterType; + +/** + * + * @author LevelX2 + */ +public class SatyrHoplite extends CardImpl { + + public SatyrHoplite(UUID ownerId) { + super(ownerId, 110, "Satyr Hoplite", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{R}"); + this.expansionSetCode = "JOU"; + this.subtype.add("Satyr"); + this.subtype.add("Soldier"); + + this.color.setRed(true); + this.power = new MageInt(1); + this.toughness = new MageInt(1); + + // Heroic - Whenever you cast a spell that targets Satyr Hoplite, put a +1/+1 counter on Satyr Hoplite. + this.addAbility(new HeroicAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()))); + } + + public SatyrHoplite(final SatyrHoplite card) { + super(card); + } + + @Override + public SatyrHoplite copy() { + return new SatyrHoplite(this); + } +} diff --git a/Mage.Sets/src/mage/sets/journeyintonyx/SigiledStarfish.java b/Mage.Sets/src/mage/sets/journeyintonyx/SigiledStarfish.java new file mode 100644 index 00000000000..80ee47b3bf4 --- /dev/null +++ b/Mage.Sets/src/mage/sets/journeyintonyx/SigiledStarfish.java @@ -0,0 +1,67 @@ +/* + * 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.journeyintonyx; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.effects.common.ScryEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; + +/** + * + * @author LevelX2 + */ +public class SigiledStarfish extends CardImpl { + + public SigiledStarfish(UUID ownerId) { + super(ownerId, 52, "Sigiled Starfish", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{1}{U}"); + this.expansionSetCode = "JOU"; + this.subtype.add("Starfish"); + + this.color.setBlue(true); + this.power = new MageInt(0); + this.toughness = new MageInt(3); + + // {T}: Scry 1. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new ScryEffect(1), new TapSourceCost())); + } + + public SigiledStarfish(final SigiledStarfish card) { + super(card); + } + + @Override + public SigiledStarfish copy() { + return new SigiledStarfish(this); + } +} diff --git a/Mage.Sets/src/mage/sets/journeyintonyx/WhitewaterNaiads.java b/Mage.Sets/src/mage/sets/journeyintonyx/WhitewaterNaiads.java new file mode 100644 index 00000000000..355dd99a9b0 --- /dev/null +++ b/Mage.Sets/src/mage/sets/journeyintonyx/WhitewaterNaiads.java @@ -0,0 +1,70 @@ +/* + * 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.journeyintonyx; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.abilityword.ConstellationAbility; +import mage.abilities.effects.common.combat.CantBeBlockedTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author LevelX2 + */ +public class WhitewaterNaiads extends CardImpl { + + public WhitewaterNaiads(UUID ownerId) { + super(ownerId, 58, "Whitewater Naiads", Rarity.UNCOMMON, new CardType[]{CardType.ENCHANTMENT, CardType.CREATURE}, "{3}{U}{U}"); + this.expansionSetCode = "JOU"; + this.subtype.add("Nymph"); + + this.color.setBlue(true); + this.power = new MageInt(4); + this.toughness = new MageInt(4); + + // Constellation - Whenever Whitewater Naiads or another enchantment enters the battlefield under your control, target creature can't be blocked this turn. + Ability ability = new ConstellationAbility(new CantBeBlockedTargetEffect(Duration.EndOfTurn), false); + ability.addTarget(new TargetCreaturePermanent(true)); + this.addAbility(ability); + } + + public WhitewaterNaiads(final WhitewaterNaiads card) { + super(card); + } + + @Override + public WhitewaterNaiads copy() { + return new WhitewaterNaiads(this); + } +} diff --git a/Mage.Sets/src/mage/sets/legions/WardSliver.java b/Mage.Sets/src/mage/sets/legions/WardSliver.java index 0bcc5ba371b..9f2b9517fe7 100644 --- a/Mage.Sets/src/mage/sets/legions/WardSliver.java +++ b/Mage.Sets/src/mage/sets/legions/WardSliver.java @@ -95,7 +95,7 @@ class WardSliverEffect extends OneShotEffect { public WardSliverEffect() { super(Outcome.BoostCreature); - staticText = "choose a creature type"; + staticText = "choose a color"; } public WardSliverEffect(final WardSliverEffect effect) { diff --git a/Mage.Sets/src/mage/sets/saviorsofkamigawa/RuneTailKitsuneAscendant.java b/Mage.Sets/src/mage/sets/saviorsofkamigawa/RuneTailKitsuneAscendant.java index 0c564708082..db57a71ec17 100644 --- a/Mage.Sets/src/mage/sets/saviorsofkamigawa/RuneTailKitsuneAscendant.java +++ b/Mage.Sets/src/mage/sets/saviorsofkamigawa/RuneTailKitsuneAscendant.java @@ -29,24 +29,16 @@ package mage.sets.saviorsofkamigawa; import java.util.UUID; import mage.MageInt; -import mage.abilities.Ability; import mage.abilities.StateTriggeredAbility; -import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.common.FlipSourceEffect; import mage.abilities.effects.common.PreventAllDamageToEffect; -import mage.abilities.effects.common.continious.BoostControlledEffect; -import mage.abilities.effects.common.continious.BoostSourceEffect; -import mage.abilities.effects.common.continious.GainAbilityControlledEffect; -import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.Rarity; import mage.constants.Zone; import mage.filter.common.FilterControlledCreatureInPlay; -import mage.filter.common.FilterCreaturePermanent; import mage.game.Game; import mage.game.events.GameEvent; import mage.game.permanent.token.Token; diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/BestowTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/BestowTest.java index 6682f510ba1..6ed21a83a12 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/BestowTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/BestowTest.java @@ -86,4 +86,55 @@ public class BestowTest extends CardTestPlayerBase { assertPowerToughness(playerA, "Hopeful Eidolon", 1, 1); } + /** + * Test that cast with bestow does not trigger evolve + */ + @Test + public void bestowEnchantmentDoesNotTriggerEvolve() { + addCard(Zone.BATTLEFIELD, playerA, "Forest", 6); + addCard(Zone.BATTLEFIELD, playerA, "Silent Artisan"); + + addCard(Zone.HAND, playerA, "Experiment One"); + addCard(Zone.HAND, playerA, "Boon Satyr"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Experiment One"); + castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Boon Satyr using bestow", "Silent Artisan"); + + setStopAt(1, PhaseStep.END_TURN); + execute(); + + // because Boon Satyr is no creature on the battlefield, evolve may not trigger + assertPermanentCount(playerA, "Silent Artisan", 1); + assertPowerToughness(playerA, "Silent Artisan", 7, 7); + assertPermanentCount(playerA, "Experiment One", 1); + assertPowerToughness(playerA, "Experiment One", 1, 1); + } + + /** + * Test that the bestow enchantment becomes a creature if the enchanted creature dies + */ + @Test + public void bestowEnchantmentBecomesCreature() { + addCard(Zone.BATTLEFIELD, playerA, "Plains", 4); + addCard(Zone.BATTLEFIELD, playerA, "Silvercoat Lion"); + addCard(Zone.HAND, playerA, "Hopeful Eidolon"); + + addCard(Zone.BATTLEFIELD, playerB, "Mountain", 1); + addCard(Zone.HAND, playerB, "Lightning Bolt"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Hopeful Eidolon using bestow", "Silvercoat Lion"); + castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerB, "Lightning Bolt", "Silvercoat Lion"); + + setStopAt(1, PhaseStep.END_TURN); + execute(); + + // because Boon Satyr is no creature on the battlefield, evolve may not trigger + assertLife(playerA, 20); + assertLife(playerB, 20); + + assertPermanentCount(playerA, "Silvercoat Lion", 0); + assertPermanentCount(playerA, "Hopeful Eidolon", 1); + assertPowerToughness(playerA, "Hopeful Eidolon", 1, 1); + } + } diff --git a/Mage/src/mage/abilities/abilityword/ConstellationAbility.java b/Mage/src/mage/abilities/abilityword/ConstellationAbility.java new file mode 100644 index 00000000000..bd48575c0c3 --- /dev/null +++ b/Mage/src/mage/abilities/abilityword/ConstellationAbility.java @@ -0,0 +1,81 @@ +/* + * 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.abilityword; + +import mage.abilities.TriggeredAbilityImpl; +import mage.abilities.effects.Effect; +import mage.constants.AbilityWord; +import mage.constants.CardType; +import mage.constants.Zone; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.permanent.Permanent; + +/** + * Constellation + * + * + * @author LevelX2 + */ + +public class ConstellationAbility extends TriggeredAbilityImpl { + + public ConstellationAbility(Effect effect) { + this(effect, false); + } + + public ConstellationAbility(Effect effect, boolean optional) { + super(Zone.BATTLEFIELD, effect, optional); + } + + public ConstellationAbility(final ConstellationAbility ability) { + super(ability); + } + + @Override + public ConstellationAbility copy() { + return new ConstellationAbility(this); + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + if (event.getType() == GameEvent.EventType.ENTERS_THE_BATTLEFIELD && event.getPlayerId().equals(this.getControllerId())) { + Permanent permanent = game.getPermanent(event.getTargetId()); + if (permanent != null && permanent.getCardType().contains(CardType.ENCHANTMENT)) { + return true; + } + } + return false; + } + + @Override + public String getRule() { + return new StringBuilder("Constellation - Whenever {this} or another enchantment enters the battlefield under your control, ").append(super.getRule()).toString(); + } +} diff --git a/Mage/src/mage/abilities/abilityword/StriveAbility.java b/Mage/src/mage/abilities/abilityword/StriveAbility.java new file mode 100644 index 00000000000..17e6e7138f0 --- /dev/null +++ b/Mage/src/mage/abilities/abilityword/StriveAbility.java @@ -0,0 +1,107 @@ +/* + * 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.abilities.abilityword; + +import mage.abilities.Ability; +import mage.abilities.SpellAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.CostModificationEffectImpl; +import mage.constants.CostModificationType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.Zone; +import mage.game.Game; +import mage.target.Target; + +/** + * + * @author LevelX2 + */ + +public class StriveAbility extends SimpleStaticAbility { + + private final String striveCost; + + public StriveAbility(String manaString) { + super(Zone.STACK, new StriveCostIncreasementEffect(new ManaCostsImpl(manaString))); + setRuleAtTheTop(true); + this.striveCost = manaString; + } + + public StriveAbility(final StriveAbility ability) { + super(ability); + this.striveCost = ability.striveCost; + } + + @Override + public SimpleStaticAbility copy() { + return new StriveAbility(this); + } + + @Override + public String getRule() { + return new StringBuilder("Strive - {this} costs ").append(striveCost).append(" more to cast for each target beyond the first.").toString(); + } +} + +class StriveCostIncreasementEffect extends CostModificationEffectImpl { + + private ManaCostsImpl striveCosts = null; + + public StriveCostIncreasementEffect(ManaCostsImpl striveCosts) { + super(Duration.WhileOnStack, Outcome.Benefit, CostModificationType.INCREASE_COST); + this.striveCosts = striveCosts; + } + + protected StriveCostIncreasementEffect(StriveCostIncreasementEffect effect) { + super(effect); + this.striveCosts = effect.striveCosts; + } + + @Override + public boolean apply(Game game, Ability source, Ability abilityToModify) { + Target target = abilityToModify.getTargets().get(0); + int additionalTargets = target.getTargets().size() - 1; + for (int i = 0; i < additionalTargets; i++) { + abilityToModify.getManaCostsToPay().add(striveCosts); + } + return true; + } + + @Override + public boolean applies(Ability abilityToModify, Ability source, Game game) { + return abilityToModify.getSourceId().equals(source.getSourceId()) && (abilityToModify instanceof SpellAbility); + } + + @Override + public StriveCostIncreasementEffect copy() { + return new StriveCostIncreasementEffect(this); + } +} diff --git a/Mage/src/mage/abilities/effects/common/PreventAllDamageToEffect.java b/Mage/src/mage/abilities/effects/common/PreventAllDamageToEffect.java index b114a2472fc..3fa3ce40542 100644 --- a/Mage/src/mage/abilities/effects/common/PreventAllDamageToEffect.java +++ b/Mage/src/mage/abilities/effects/common/PreventAllDamageToEffect.java @@ -82,13 +82,15 @@ public class PreventAllDamageToEffect extends PreventionEffectImpl { @Override public boolean checkTrigger(GameEvent event, Game game) { - if (event.getType() == GameEvent.EventType.ENTERS_THE_BATTLEFIELD) { + if (event.getType() == GameEvent.EventType.ENTERS_THE_BATTLEFIELD && !event.getTargetId().equals(this.getSourceId())) { Permanent triggeringCreature = game.getPermanent(event.getTargetId()); if (triggeringCreature != null && triggeringCreature.getCardType().contains(CardType.CREATURE) diff --git a/Mage/src/mage/constants/AbilityWord.java b/Mage/src/mage/constants/AbilityWord.java index b4f5924a0e1..37437f3d1d1 100644 --- a/Mage/src/mage/constants/AbilityWord.java +++ b/Mage/src/mage/constants/AbilityWord.java @@ -34,6 +34,7 @@ package mage.constants; */ public enum AbilityWord { BLOODRUSH("Bloodrush"), + CONSTELLATION("Constellation"), HELLBENT("Hellbent"), HEROIC("Heroic"), LANDFALL("Landfall"), diff --git a/Mage/src/mage/game/stack/Spell.java b/Mage/src/mage/game/stack/Spell.java index 55e968270d3..d9097d91238 100644 --- a/Mage/src/mage/game/stack/Spell.java +++ b/Mage/src/mage/game/stack/Spell.java @@ -57,6 +57,7 @@ import mage.counters.Counter; import mage.counters.Counters; import mage.game.Game; import mage.game.events.ZoneChangeEvent; +import mage.game.permanent.Permanent; import mage.players.Player; import mage.target.Target; import mage.target.TargetAmount; @@ -200,11 +201,20 @@ public class Spell> implements StackObject, Card { if (ability.getTargets().stillLegal(ability, game)) { updateOptionalCosts(0); if (card.putOntoBattlefield(game, fromZone, ability.getId(), controllerId)) { + if (this.getSpellAbility() instanceof BestowAbility) { + Permanent permanent = game.getPermanent(card.getId()); + if (permanent != null) { + // Must be removed first time, after that will be removed by continous effect + // Otherwise effects like evolve trigger from creature comes into play event + permanent.getCardType().remove(CardType.CREATURE); + } + } game.getState().handleSimultaneousEvent(game); return ability.resolve(game); } return false; } + // Aura has no legal target and its a bestow enchantment -> Add it to battlefield as creature if (this.getSpellAbility() instanceof BestowAbility) { updateOptionalCosts(0); result = card.putOntoBattlefield(game, fromZone, ability.getId(), controllerId); diff --git a/Utils/known-sets.txt b/Utils/known-sets.txt index 2e43ef5df2d..7f1527dbc7e 100644 --- a/Utils/known-sets.txt +++ b/Utils/known-sets.txt @@ -93,4 +93,5 @@ Dragon's Maze|dragonsmaze| Modern Masters|modernmasters| Theros|theros| Born of the Gods|bornofthegods| +Journey into Nyx|journeyintonyx| Portal Three Kingdoms|portalthreekingdoms \ No newline at end of file diff --git a/Utils/mtg-cards-data.txt b/Utils/mtg-cards-data.txt index b2c7f080e07..2774c153132 100644 --- a/Utils/mtg-cards-data.txt +++ b/Utils/mtg-cards-data.txt @@ -23150,4 +23150,18 @@ Forest|Duel Decks: Jace vs. Vraska|84|L||Basic Land - Forest|||G| Forest|Duel Decks: Jace vs. Vraska|85|L||Basic Land - Forest|||G| Forest|Duel Decks: Jace vs. Vraska|86|L||Basic Land - Forest|||G| Forest|Duel Decks: Jace vs. Vraska|87|L||Basic Land - Forest|||G| -Forest|Duel Decks: Jace vs. Vraska|88|L||Basic Land - Forest|||G| \ No newline at end of file +Forest|Duel Decks: Jace vs. Vraska|88|L||Basic Land - Forest|||G| +Krovikan Mist|Duel Decks: Jace vs. Vraska|8|C|{1}{U}|Creature - Illusion|*|*|Flying$Krovikan Mist's power and toughness are each equal to the number of Illusions on the battlefield.| +Sigiled Starfish|Journey into Nyx|52|C|{1}{U}|Creature - Starfish|0|3|{T}: Scry 1.| +Ajani's Presence|Journey into Nyx|2|C|{W}|Instant|||Strive - Ajani's Presence costs {2} {W} more to cast for each target beyond the first.$Any number of target creatures each get +1/+1 and gain indestructible until end of turn.| +Whitewater Naiads|Journey into Nyx|58|U|{3}{U}{U}|Enchantment Creature - Nymph|4|4|Constellation - Whenever Whitewater Naiads or another enchantment enters the battlefield under your control, target creature can't be blocked this turn.| +Dakra Mystic|Journey into Nyx|35|U|{U}|Creature - Merfolk Wizard|1|1|{U},{T}:Each player reveals the top card of his or her library. You may put the revealed cards into their owners graveyard. If you don't, each player draws a card.| +Extinguish All Hope|Journey into Nyx|?|R|{4}{B}{B}|Sorcery|||Destroy all nonenchantment creatures.| +Gnarled Scarhide|Journey into Nyx|72|U|{B}|Enchantment Creature - Minotaur|2|1|Bestow {3}{B}$Gnarled Scarhide can't block.$Enchanted creature gets +2/+1 and can't block.| +Cyclops of Eternal Fury|Journey into Nyx|92|U|{4}{R}{R}|Enchantment Creature - Cyclops|5|3|Creatures you control have haste.| +Satyr Hoplite|Journey into Nyx|110|C|{R}|Creature - Satyr Soldier|1|1|Heroic - Whenever you cast a spell that targets Satyr Hoplite, put a +1/+1 counter on Satyr Hoplite.| +Eidolon of Blossoms|Journey into Nyx|122|R|{2}{G}{G}|Enchantment Creature - Spirit|2|2|Constellation - Whenever Eidolon of Blossoms or another enchantment enters the battlefield under your control, draw a card.| +Ravenous Leucrocota|Journey into Nyx|136|C|{3}{G}|Creature - Beast|2|4|Vigilance${6} {G}: Monstrosity 3.| +Iroas, God of Victory|Journey into Nyx|150|M|{2}{R}{W}|Legendary Enhantment Creature - God|7|4|Indestructible$As long as your devotion to red and white is less than seven, Iroas isn't a creature.$Creatures you control can't be blocked except by two or more creatures.$Prevent all damage that would be dealt to attacking creatures you control.| +Hall of Triumph|Journey into Nyx|162|R|{3}|Legendary Artifact|||As Hall of Triumph enters the battlefield choose a color.$Creatures you control of the chosen color get +1/+1.| +Heroes' Bane|Journey into Nyx|126|R|{3}{G}{G}|Creature - Hydra|0|0|Heroe's Bane enters the battlefield with four +1/+1 counters on it.${2} {G} {G}: Put X +1/+1 counters on Heroe's Bane, where X is its power.| diff --git a/Utils/mtg-sets-data.txt b/Utils/mtg-sets-data.txt index 4b6b9e58618..05e9b151845 100644 --- a/Utils/mtg-sets-data.txt +++ b/Utils/mtg-sets-data.txt @@ -56,6 +56,7 @@ Planechase 2012 Edition|PC2| Ice Age|ICE| Innistrad|ISD| Invasion|INV| +Journey into Nyx|JOU| Judgment|JUD| Limited Edition Alpha|LEA| Limited Edition Beta|LEB|