diff --git a/Mage.Sets/src/mage/sets/commander/BuriedAlive.java b/Mage.Sets/src/mage/sets/commander/BuriedAlive.java new file mode 100644 index 00000000000..aea4ed21747 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander/BuriedAlive.java @@ -0,0 +1,114 @@ +/* + * 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.commander; + +import java.util.List; +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.effects.SearchEffect; +import mage.cards.Card; +import mage.cards.CardImpl; +import mage.cards.Cards; +import mage.cards.CardsImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterCreatureCard; +import mage.game.Game; +import mage.players.Player; +import mage.target.common.TargetCardInLibrary; + +/** + * + * @author cbt33, plopman (Entomb) + */ +public class BuriedAlive extends CardImpl { + + + public BuriedAlive(UUID ownerId) { + super(ownerId, 74, "Buried Alive", Rarity.UNCOMMON, new CardType[]{CardType.SORCERY}, "{2}{B}"); + this.expansionSetCode = "CMD"; + + this.color.setBlack(true); + this.getSpellAbility().addEffect(new BuriedAliveEffect()); + // Search your library for up to three creature cards and put them into your graveyard. Then shuffle your library. + + } + + public BuriedAlive(final BuriedAlive card) { + super(card); + } + + @Override + public BuriedAlive copy() { + return new BuriedAlive(this); + } +} + +class BuriedAliveEffect extends SearchEffect { + + public BuriedAliveEffect() { + super(new TargetCardInLibrary(1, 3, new FilterCreatureCard()), Outcome.Neutral); + staticText = "Search your library for up to three creature cards and put them into your graveyard. Then shuffle your library"; + } + + public BuriedAliveEffect(final BuriedAliveEffect effect) { + super(effect); + } + + @Override + public BuriedAliveEffect copy() { + return new BuriedAliveEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player player = game.getPlayer(source.getControllerId()); + if (player == null) { + return false; + } + if (player.searchLibrary(target, game)) { + if (target.getTargets().size() > 0) { + Cards cards = new CardsImpl(); + for (UUID cardId: (List)target.getTargets()) { + Card card = player.getLibrary().remove(cardId, game); + if (card != null){ + card.moveToZone(Zone.GRAVEYARD, source.getId(), game, false); + } + } + } + player.shuffleLibrary(game); + return true; + } + player.shuffleLibrary(game); + return false; + } + + +} diff --git a/Mage.Sets/src/mage/sets/exodus/Scrivener.java b/Mage.Sets/src/mage/sets/exodus/Scrivener.java new file mode 100644 index 00000000000..eed96220bb3 --- /dev/null +++ b/Mage.Sets/src/mage/sets/exodus/Scrivener.java @@ -0,0 +1,80 @@ +/* + * 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.exodus; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldAbility; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.filter.FilterCard; +import mage.filter.predicate.mageobject.CardTypePredicate; +import mage.target.common.TargetCardInGraveyard; + +/** + * + * @author cbt33, BetaSteward (GraveDigger) + */ + +public class Scrivener extends CardImpl { + + private static final FilterCard filter = new FilterCard("Instant"); + + static{ + filter.add(new CardTypePredicate(CardType.INSTANT)); + } + + public Scrivener(UUID ownerId) { + super(ownerId, 46, "Scrivener", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{4}{U}"); + this.expansionSetCode = "EXO"; + this.subtype.add("Human"); + this.subtype.add("Wizard"); + + this.color.setBlue(true); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // When Scrivener enters the battlefield, you may return target instant card from your graveyard to your hand. + Ability ability = new EntersBattlefieldAbility(new ReturnFromGraveyardToHandTargetEffect(), true); + ability.addTarget(new TargetCardInGraveyard(filter)); + this.addAbility(ability); + + } + + public Scrivener(final Scrivener card) { + super(card); + } + + @Override + public Scrivener copy() { + return new Scrivener(this); + } +} diff --git a/Mage.Sets/src/mage/sets/odyssey/AncestralTribute.java b/Mage.Sets/src/mage/sets/odyssey/AncestralTribute.java new file mode 100644 index 00000000000..1b026572807 --- /dev/null +++ b/Mage.Sets/src/mage/sets/odyssey/AncestralTribute.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.odyssey; + +import java.util.UUID; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.TimingRule; +import mage.abilities.dynamicvalue.common.CardsInControllerGraveyardCount; +import mage.abilities.effects.common.GainLifeEffect; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.keyword.FlashbackAbility; +import mage.filter.FilterCard; + +/** + * + * @author cbt33 + */ + +public class AncestralTribute extends CardImpl { + + public AncestralTribute(UUID ownerId) { + super(ownerId, 2, "Ancestral Tribute", Rarity.RARE, new CardType[]{CardType.SORCERY}, "{5}{W}{W}"); + this.expansionSetCode = "ODY"; + + this.color.setWhite(true); + + + // You gain 2 life for each card in your graveyard. + this.getSpellAbility().addEffect(new GainLifeEffect((new CardsInControllerGraveyardCount(new FilterCard(), 2)))); + + // Flashback {9}{W}{W}{W} + this.addAbility(new FlashbackAbility(new ManaCostsImpl("{9}{W}{W}{W}"), TimingRule.SORCERY)); + + + } + + public AncestralTribute(final AncestralTribute card) { + super(card); + } + + @Override + public AncestralTribute copy() { + return new AncestralTribute(this); + } +} diff --git a/Mage.Sets/src/mage/sets/odyssey/Bloodcurdler.java b/Mage.Sets/src/mage/sets/odyssey/Bloodcurdler.java new file mode 100644 index 00000000000..6185b86706e --- /dev/null +++ b/Mage.Sets/src/mage/sets/odyssey/Bloodcurdler.java @@ -0,0 +1,97 @@ +/* + * 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.odyssey; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.condition.common.CardsInControllerGraveCondition; +import mage.abilities.costs.common.ExileFromGraveCost; +import mage.abilities.decorator.ConditionalContinousEffect; +import mage.abilities.effects.common.PutTopCardOfYourLibraryIntoGraveEffect; +import mage.abilities.effects.common.continious.BoostSourceEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.constants.Zone; +import mage.filter.FilterCard; +import mage.target.common.TargetCardInYourGraveyard; + +/** + * + * @author cbt33, plopman (Immortal Coil) + */ +public class Bloodcurdler extends CardImpl { + + public Bloodcurdler(UUID ownerId) { + super(ownerId, 116, "Bloodcurdler", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{1}{B}"); + this.expansionSetCode = "ODY"; + this.subtype.add("Horror"); + + this.color.setBlack(true); + this.power = new MageInt(1); + this.toughness = new MageInt(1); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + + // At the beginning of your upkeep, put the top card of your library into your graveyard. + Ability ability = new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD, new PutTopCardOfYourLibraryIntoGraveEffect(1), TargetController.YOU, false); + this.addAbility(ability); + + // Threshold - As long as seven or more cards are in your graveyard, Bloodcurdler gets +1/+1 and has "At the beginning of your end step, exile two cards from your graveyard." + //this.addAbility(new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD, new Zone zone, UUID exileId, String exileName, FilterCard filter, 1), TargetController.YOU, false)); + Ability thresholdAbility = new SimpleStaticAbility( + Zone.BATTLEFIELD, + new ConditionalContinousEffect( + new BoostSourceEffect(1, 1, Duration.WhileOnBattlefield), + new CardsInControllerGraveCondition(7), + "

Threshold - If seven or more cards are in your graveyard, Bloodcurdler gets +1/+1." + )); + + //"At the beginning of your end step, exile two cards from your graveyard." + + thresholdAbility.addCost(new ExileFromGraveCost(new TargetCardInYourGraveyard(2, new FilterCard("cards from your graveyard")))); + + this.addAbility(thresholdAbility); + } + + public Bloodcurdler(final Bloodcurdler card) { + super(card); + } + + @Override + public Bloodcurdler copy() { + return new Bloodcurdler(this); + } +} diff --git a/Mage.Sets/src/mage/sets/odyssey/BuriedAlive.java b/Mage.Sets/src/mage/sets/odyssey/BuriedAlive.java new file mode 100644 index 00000000000..158736dfebd --- /dev/null +++ b/Mage.Sets/src/mage/sets/odyssey/BuriedAlive.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.odyssey; + +import java.util.UUID; + +/** + * + * @author cbt33 + */ +public class BuriedAlive extends mage.sets.commander.BuriedAlive { + + public BuriedAlive(UUID ownerId) { + super(ownerId); + this.cardNumber = 118; + this.expansionSetCode = "ODY"; + } + + public BuriedAlive(final BuriedAlive card) { + super(card); + } + + @Override + public BuriedAlive copy() { + return new BuriedAlive(this); + } +} diff --git a/Mage.Sets/src/mage/sets/odyssey/EarnestFellowship.java b/Mage.Sets/src/mage/sets/odyssey/EarnestFellowship.java new file mode 100644 index 00000000000..d52413660df --- /dev/null +++ b/Mage.Sets/src/mage/sets/odyssey/EarnestFellowship.java @@ -0,0 +1,152 @@ +/* + * 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.odyssey; + +import java.util.List; +import java.util.UUID; +import mage.ObjectColor; +import mage.abilities.Ability; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.ContinuousEffectImpl; +import mage.abilities.keyword.ProtectionAbility; +import mage.cards.CardImpl; +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.FilterCard; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.mageobject.ColorPredicate; +import mage.game.Game; +import mage.game.permanent.Permanent; + +/** + * + * @author cbt33, Loki (TakenoSamuraiGeneral), North (Coat of Arms) + */ +public class EarnestFellowship extends CardImpl { + + public EarnestFellowship(UUID ownerId) { + super(ownerId, 21, "Earnest Fellowship", Rarity.RARE, new CardType[]{CardType.ENCHANTMENT}, "{1}{W}"); + this.expansionSetCode = "ODY"; + + this.color.setWhite(true); + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new EarnestFellowshipEffect())); + + // Each creature has protection from its colors. + + } + + public EarnestFellowship(final EarnestFellowship card) { + super(card); + } + + @Override + public EarnestFellowship copy() { + return new EarnestFellowship(this); + } +} + +class EarnestFellowshipEffect extends ContinuousEffectImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent(); + + + public EarnestFellowshipEffect() { + super(Duration.WhileOnBattlefield, Layer.PTChangingEffects_7, SubLayer.ModifyPT_7c, Outcome.BoostCreature); + this.staticText = "Each creature has protection from its colors"; + } + + public EarnestFellowshipEffect(final EarnestFellowshipEffect effect) { + super(effect); + } + + @Override + public EarnestFellowshipEffect copy() { + return new EarnestFellowshipEffect(this); + } + + @Override + public void init(Ability source, Game game) { + super.init(source, game); + if (this.affectedObjectsSet) { + List permanents = game.getBattlefield().getActivePermanents(filter, source.getControllerId(), game); + for (Permanent permanent : permanents) { + objects.add(permanent.getId()); + } + } + } + + @Override + public boolean apply(Game game, Ability source) { + List permanents = game.getBattlefield().getActivePermanents(filter, source.getControllerId(), game); + for (Permanent permanent : permanents) { + if (!this.affectedObjectsSet || objects.contains(permanent.getId())) { + ObjectColor color = permanent.getColor(); + FilterCard filterColor = new FilterCard("its own Colors"); + + if (color.contains(ObjectColor.BLACK)){ + filterColor.add(new ColorPredicate(ObjectColor.BLACK)); + Ability ability = new ProtectionAbility(filterColor); + permanent.addAbility(ability, id, game); + } + + if (color.contains(ObjectColor.BLUE)){ + filterColor.add(new ColorPredicate(ObjectColor.BLUE)); + Ability ability = new ProtectionAbility(filterColor); + permanent.addAbility(ability, id, game); + } + + if (color.contains(ObjectColor.WHITE)){ + filterColor.add(new ColorPredicate(ObjectColor.WHITE)); + Ability ability = new ProtectionAbility(filterColor); + permanent.addAbility(ability, id, game); + } + + if (color.contains(ObjectColor.RED)){ + filterColor.add(new ColorPredicate(ObjectColor.RED)); + Ability ability = new ProtectionAbility(filterColor); + permanent.addAbility(ability, id, game); + } + + if (color.contains(ObjectColor.GREEN)){ + filterColor.add(new ColorPredicate(ObjectColor.GREEN)); + Ability ability = new ProtectionAbility(filterColor); + permanent.addAbility(ability, id, game); + } + } + } + return true; + } + +} + + diff --git a/Mage.Sets/src/mage/sets/odyssey/HallowedHealer.java b/Mage.Sets/src/mage/sets/odyssey/HallowedHealer.java new file mode 100644 index 00000000000..fe953013fde --- /dev/null +++ b/Mage.Sets/src/mage/sets/odyssey/HallowedHealer.java @@ -0,0 +1,84 @@ +/* + * 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.odyssey; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.condition.common.CardsInControllerGraveCondition; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.decorator.ConditionalGainActivatedAbility; +import mage.abilities.effects.common.PreventDamageTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.target.common.TargetCreatureOrPlayer; + +/** + * + * @author cbt33 + */ + +public class HallowedHealer extends CardImpl { + + public HallowedHealer(UUID ownerId) { + super(ownerId, 25, "Hallowed Healer", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{2}{W}"); + this.expansionSetCode = "ODY"; + this.subtype.add("Human"); + this.subtype.add("Cleric"); + + this.color.setWhite(true); + this.power = new MageInt(1); + this.toughness = new MageInt(1); + + // {tap}: Prevent the next 2 damage that would be dealt to target creature or player this turn. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new PreventDamageTargetEffect(Duration.EndOfTurn,2), new TapSourceCost()); + ability.addTarget(new TargetCreatureOrPlayer(1)); + this.addAbility(ability); + // Threshold - {tap}: Prevent the next 4 damage that would be dealt to target creature or player this turn. Activate this ability only if seven or more cards are in your graveyard. + Ability thresholdAbility = new ConditionalGainActivatedAbility(Zone.BATTLEFIELD, + new PreventDamageTargetEffect(Duration.EndOfTurn,4), + new TapSourceCost(), + new CardsInControllerGraveCondition(7), + "Prevent the next 4 damage that would be dealt to target creature or player this turn. Activate this ability only if seven or more cards are in your graveyard"); + thresholdAbility.addTarget(new TargetCreatureOrPlayer(1)); + this.addAbility(thresholdAbility); + } + + public HallowedHealer(final HallowedHealer card) { + super(card); + } + + @Override + public HallowedHealer copy() { + return new HallowedHealer(this); + } +} diff --git a/Mage.Sets/src/mage/sets/odyssey/Scrivener.java b/Mage.Sets/src/mage/sets/odyssey/Scrivener.java new file mode 100644 index 00000000000..a5a4c9ea944 --- /dev/null +++ b/Mage.Sets/src/mage/sets/odyssey/Scrivener.java @@ -0,0 +1,55 @@ +/* + * 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.odyssey; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author cbt33 + */ + +public class Scrivener extends mage.sets.exodus.Scrivener { + + public Scrivener(UUID ownerId) { + super(ownerId); + this.cardNumber = 100; + this.expansionSetCode = "ODY"; + this.rarity = Rarity.COMMON; + } + + public Scrivener(final Scrivener card) { + super(card); + } + + @Override + public Scrivener copy() { + return new Scrivener(this); + } +} diff --git a/Mage.Sets/src/mage/sets/odyssey/ThinkTank.java b/Mage.Sets/src/mage/sets/odyssey/ThinkTank.java new file mode 100644 index 00000000000..ef5f9b93dda --- /dev/null +++ b/Mage.Sets/src/mage/sets/odyssey/ThinkTank.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.odyssey; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; +import mage.abilities.dynamicvalue.common.StaticValue; +import mage.abilities.effects.common.LookLibraryAndPickControllerEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.constants.Zone; +import mage.filter.FilterCard; + +/** + * + * @author cbt33 + */ +public class ThinkTank extends CardImpl { + + public ThinkTank(UUID ownerId) { + super(ownerId, 104, "Think Tank", Rarity.UNCOMMON, new CardType[]{CardType.ENCHANTMENT}, "{2}{U}"); + this.expansionSetCode = "ODY"; + + this.color.setBlue(true); + + // At the beginning of your upkeep, look at the top card of your library. You may put that card into your graveyard. + //Ability ability = new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD, new LookLibraryControllerEffect(1), TargetController.YOU, false); + Ability ability = new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD, new LookLibraryAndPickControllerEffect(new StaticValue(1), false, new StaticValue(1), new FilterCard(), Zone.GRAVEYARD, false, false), TargetController.YOU, false); + this.addAbility(ability); + + // Ability ability2 = new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD, new PutTopCardOfYourLibraryIntoGraveEffect(1), TargetController.YOU, true); + //this.addAbility(ability2); + } + + public ThinkTank(final ThinkTank card) { + super(card); + } + + @Override + public ThinkTank copy() { + return new ThinkTank(this); + } +} diff --git a/Mage.Sets/src/mage/sets/odyssey/TreetopSentinel b/Mage.Sets/src/mage/sets/odyssey/TreetopSentinel new file mode 100644 index 00000000000..3da5f1ec0ff --- /dev/null +++ b/Mage.Sets/src/mage/sets/odyssey/TreetopSentinel @@ -0,0 +1,78 @@ +/* + * 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.odyssey; + +import java.util.UUID; +import mage.MageInt; +import mage.ObjectColor; +import mage.abilities.keyword.FlyingAbility; +import mage.abilities.keyword.ProtectionAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.filter.FilterCard; +import mage.filter.predicate.mageobject.ColorPredicate; + +/** + * + * @author cbt33 + */ + +public class TreetopSentinel extends CardImpl { + + public static final FilterCard filter = new FilterCard("Green"); + + static { + filter.add(new ColorPredicate(ObjectColor.GREEN)); + } + + public TreetopSentinel(UUID ownerId) { + super(ownerId, 111, "Treetop Sentinel", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{2}{U}{U}"); + this.expansionSetCode = "ODY"; + this.subtype.add("Bird"); + this.subtype.add("Soldier"); + + this.color.setBlue(true); + this.power = new MageInt(2); + this.toughness = new MageInt(3); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + // protection from green + this.addAbility(new ProtectionAbility(filter)); + } + + public TreetopSentinel(final TreetopSentinel card) { + super(card); + } + + @Override + public TreetopSentinel copy() { + return new TreetopSentinel(this); + } +} diff --git a/Mage.Sets/src/mage/sets/odyssey/UnifyingTheory.java b/Mage.Sets/src/mage/sets/odyssey/UnifyingTheory.java new file mode 100644 index 00000000000..62de4ce74ee --- /dev/null +++ b/Mage.Sets/src/mage/sets/odyssey/UnifyingTheory.java @@ -0,0 +1,116 @@ +/* + * 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.odyssey; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.common.SpellCastAllTriggeredAbility; +import mage.abilities.common.delayed.AtEndOfTurnDelayedTriggeredAbility; +import mage.abilities.costs.Cost; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.DrawCardTargetEffect; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.OneShotEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.filter.FilterSpell; +import mage.game.Game; +import mage.game.stack.Spell; +import mage.players.Player; +import mage.target.targetpointer.FixedTarget; + +/** + * + * @author cbt33, Level_X2 (Horn of Plenty) + */ + +public class UnifyingTheory extends CardImpl { + + public UnifyingTheory(UUID ownerId) { + super(ownerId, 112, "Unifying Theory", Rarity.RARE, new CardType[]{CardType.ENCHANTMENT}, "{1}{U}"); + this.expansionSetCode = "ODY"; + + this.color.setBlue(true); + + // Whenever a player casts a spell, that player may pay {2}. If the player does, he or she draws a card. + this.addAbility(new SpellCastAllTriggeredAbility(new UnifyingTheoryEffect(), new FilterSpell("a spell"), false, true)); + } + + public UnifyingTheory(final UnifyingTheory card) { + super(card); + } + + @Override + public UnifyingTheory copy() { + return new UnifyingTheory(this); + } +} + +class UnifyingTheoryEffect extends OneShotEffect { + + public UnifyingTheoryEffect() { + super(Outcome.Detriment); + this.staticText = "that player may pay {2}. If the player does, he or she draws a card."; + } + + public UnifyingTheoryEffect(final UnifyingTheoryEffect effect) { + super(effect); + } + + @Override + public UnifyingTheoryEffect copy() { + return new UnifyingTheoryEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Spell spell = game.getStack().getSpell(targetPointer.getFirst(game, source)); + Player caster = null; + if (spell != null) { + caster = game.getPlayer(spell.getControllerId()); + } + if (caster != null) { + if (caster.chooseUse(Outcome.DrawCard, "Pay {2} to draw a card?", game)) { + Cost cost = new ManaCostsImpl("{2}"); + if (cost.pay(source, game, source.getSourceId(), caster.getId(), false)) { + Effect effect = new DrawCardTargetEffect(1); + effect.setTargetPointer(new FixedTarget(caster.getId())); + //Ability ability = new AtEndOfTurnDelayedTriggeredAbility(effect); + //return ability.activate(game, true); + return effect.apply(game, source); + //return new SimpleTriggeredAbility(Zone.BATTLEFIELD, effect, "").apply(game,source); + //return new CreateDelayedTriggeredAbilityEffect(new AtEndOfTurnDelayedTriggeredAbility(effect, TargetController.ANY)).apply(game, source); + } + } + return true; + } + return false; + } +} diff --git a/Mage.Sets/src/mage/sets/odyssey/Upheaval.java b/Mage.Sets/src/mage/sets/odyssey/Upheaval.java new file mode 100644 index 00000000000..02f5f143bfd --- /dev/null +++ b/Mage.Sets/src/mage/sets/odyssey/Upheaval.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.odyssey; + +import java.util.UUID; +import mage.abilities.effects.common.ReturnToHandAllEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.filter.FilterPermanent; + +/** + * + * @author cbt33 + */ + +public class Upheaval extends CardImpl { + + private static final FilterPermanent filter = new FilterPermanent("permanent"); + + //static{ + // filter.add(new CardTypePredicate(CardType.)) + // } + + public Upheaval(UUID ownerId) { + super(ownerId, 113, "Upheaval", Rarity.RARE, new CardType[]{CardType.SORCERY}, "{4}{U}{U}"); + this.expansionSetCode = "ODY"; + + this.color.setBlue(true); + + // Return all permanents to their owners' hands. + this.getSpellAbility().addEffect(new ReturnToHandAllEffect(filter)); + } + + public Upheaval(final Upheaval card) { + super(card); + } + + @Override + public Upheaval copy() { + return new Upheaval(this); + } +} diff --git a/Mage.Sets/src/mage/sets/odyssey/WordsOfWisdom.java b/Mage.Sets/src/mage/sets/odyssey/WordsOfWisdom.java new file mode 100644 index 00000000000..dd7550f1005 --- /dev/null +++ b/Mage.Sets/src/mage/sets/odyssey/WordsOfWisdom.java @@ -0,0 +1,111 @@ +/* + * 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.odyssey; + +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.game.Game; +import mage.players.Player; + +/** + * + * @author cbt33, LevelX2 (Hunted Wumpus) + */ + +public class WordsOfWisdom extends CardImpl { + + public WordsOfWisdom(UUID ownerId) { + super(ownerId, 114, "Words of Wisdom", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{1}{U}"); + this.expansionSetCode = "ODY"; + + this.color.setBlue(true); + + // You draw two cards, then each other player draws a card. + this.getSpellAbility().addEffect(new WordsOfWisdomEffect()); + } + + public WordsOfWisdom(final WordsOfWisdom card) { + super(card); + } + + @Override + public WordsOfWisdom copy() { + return new WordsOfWisdom(this); + } +} + +class WordsOfWisdomEffect extends OneShotEffect { + + public WordsOfWisdomEffect() { + super(Outcome.Detriment); + this.staticText = "each other player draws a card"; + } + + public WordsOfWisdomEffect(final WordsOfWisdomEffect effect) { + super(effect); + } + + @Override + public WordsOfWisdomEffect copy() { + return new WordsOfWisdomEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null) { + controller.drawCards(2, game); + for(UUID playerId: controller.getInRange()) { + if (!playerId.equals(controller.getId())) { + Player player = game.getPlayer(playerId); + if (player != null) { + player.drawCards(1, game); + //TargetCardInHand target = new TargetCardInHand(new FilterCreatureCard()); + // if (target.canChoose(source.getSourceId(), playerId, game) + // && player.chooseUse(Outcome.Neutral, "Put a creature card from your hand in play?", game) + // && player.choose(Outcome.PutCreatureInPlay, target, source.getSourceId(), game)) { + // Card card = game.getCard(target.getFirstTarget()); + // if (card != null) { + // card.putOntoBattlefield(game, Zone.HAND, source.getId(), player.getId()); + } + //} + } + } + } + return false; + } + +} + + + diff --git a/Mage.Sets/src/mage/sets/weatherlight/BuriedAlive.java b/Mage.Sets/src/mage/sets/weatherlight/BuriedAlive.java new file mode 100644 index 00000000000..d7280c824da --- /dev/null +++ b/Mage.Sets/src/mage/sets/weatherlight/BuriedAlive.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.weatherlight; + +import java.util.UUID; + +/** + * + * @author cbt33 + */ +public class BuriedAlive extends mage.sets.commander.BuriedAlive { + + public BuriedAlive(UUID ownerId) { + super(ownerId); + this.cardNumber = 5; + this.expansionSetCode = "WTH"; + } + + public BuriedAlive(final BuriedAlive card) { + super(card); + } + + @Override + public BuriedAlive copy() { + return new BuriedAlive(this); + } +}