diff --git a/Mage.Sets/src/mage/sets/mirage/InfernalContract.java b/Mage.Sets/src/mage/sets/mirage/InfernalContract.java new file mode 100644 index 00000000000..e85f477aab5 --- /dev/null +++ b/Mage.Sets/src/mage/sets/mirage/InfernalContract.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.mirage; + +import java.util.UUID; + +/** + * + * @author Plopman + */ +public class InfernalContract extends mage.sets.seventhedition.InfernalContract { + + public InfernalContract(UUID ownerId) { + super(ownerId); + this.cardNumber = 27; + this.expansionSetCode = "MIR"; + } + + public InfernalContract(final InfernalContract card) { + super(card); + } + + @Override + public InfernalContract copy() { + return new InfernalContract(this); + } +} diff --git a/Mage.Sets/src/mage/sets/nemesis/Massacre.java b/Mage.Sets/src/mage/sets/nemesis/Massacre.java new file mode 100644 index 00000000000..045c1dc0218 --- /dev/null +++ b/Mage.Sets/src/mage/sets/nemesis/Massacre.java @@ -0,0 +1,110 @@ +/* + * 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.nemesis; + +import java.util.UUID; +import mage.Constants; +import mage.Constants.CardType; +import mage.Constants.Rarity; +import mage.abilities.Ability; +import mage.abilities.costs.AlternativeCostImpl; +import mage.abilities.costs.CostImpl; +import mage.abilities.effects.common.continious.BoostAllEffect; +import mage.cards.CardImpl; +import mage.filter.common.FilterControlledLandPermanent; +import mage.filter.predicate.mageobject.SubtypePredicate; +import mage.game.Game; + +/** + * + * @author Plopman + */ +public class Massacre extends CardImpl { + + public Massacre(UUID ownerId) { + super(ownerId, 58, "Massacre", Rarity.UNCOMMON, new CardType[]{CardType.SORCERY}, "{2}{B}{B}"); + this.expansionSetCode = "NMS"; + + this.color.setBlack(true); + + // If an opponent controls a Plains and you control a Swamp, you may cast Massacre without paying its mana cost. + this.getSpellAbility().addAlternativeCost(new AlternativeCostImpl("If an opponent controls a Plains and you control a Swamp, you may cast Massacre without paying its mana cost", new MassacreCost())); + // All creatures get -2/-2 until end of turn. + this.getSpellAbility().addEffect(new BoostAllEffect(-2, -2, Constants.Duration.EndOfTurn)); + } + + public Massacre(final Massacre card) { + super(card); + } + + @Override + public Massacre copy() { + return new Massacre(this); + } +} + +class MassacreCost extends CostImpl { + + + + public MassacreCost() { + this.text = "If an opponent controls a Plains and you control a Swamp, you may cast Massacre without paying its mana cost."; + } + + public MassacreCost(MassacreCost cost) { + super(cost); + } + + @Override + public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana) { + paid = canPay(sourceId, controllerId, game); + return paid; + } + + @Override + public boolean canPay(UUID sourceId, UUID controllerId, Game game) { + FilterControlledLandPermanent filterSwamp = new FilterControlledLandPermanent("Swamp"); + filterSwamp.add(new SubtypePredicate("Swamp")); + FilterControlledLandPermanent filterPlains = new FilterControlledLandPermanent("Plains"); + filterPlains.add(new SubtypePredicate("Plains")); + if (game.getBattlefield().contains(filterSwamp, controllerId, 1, game)) { + for(UUID uuid : game.getOpponents(controllerId)){ + if(game.getBattlefield().contains(filterPlains, uuid, 1, game)){ + return true; + } + } + } + return false; + } + + @Override + public MassacreCost copy() { + return new MassacreCost(this); + } + +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/onslaught/ChainOfVapor.java b/Mage.Sets/src/mage/sets/onslaught/ChainOfVapor.java new file mode 100644 index 00000000000..e70723d5cc0 --- /dev/null +++ b/Mage.Sets/src/mage/sets/onslaught/ChainOfVapor.java @@ -0,0 +1,133 @@ +/* + * 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.onslaught; + +import java.util.UUID; +import mage.Constants; +import mage.Constants.CardType; +import mage.Constants.Rarity; +import mage.abilities.Ability; +import mage.abilities.Mode; +import mage.abilities.effects.OneShotEffect; +import mage.Constants.Outcome; +import mage.cards.CardImpl; +import mage.filter.common.FilterControlledLandPermanent; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.game.stack.Spell; +import mage.players.Player; +import mage.target.common.TargetControlledPermanent; +import mage.target.common.TargetNonlandPermanent; + +/** + * + * @author Plopman + */ +public class ChainOfVapor extends CardImpl { + + public ChainOfVapor(UUID ownerId) { + super(ownerId, 73, "Chain of Vapor", Rarity.UNCOMMON, new CardType[]{CardType.INSTANT}, "{U}"); + this.expansionSetCode = "ONS"; + + this.color.setBlue(true); + + // Return target nonland permanent to its owner's hand. Then that permanent's controller may sacrifice a land. If the player does, he or she may copy this spell and may choose a new target for that copy. + this.getSpellAbility().addEffect(new ChainOfVaporEffect()); + this.getSpellAbility().addTarget(new TargetNonlandPermanent()); + } + + public ChainOfVapor(final ChainOfVapor card) { + super(card); + } + + @Override + public ChainOfVapor copy() { + return new ChainOfVapor(this); + } +} + +class ChainOfVaporEffect extends OneShotEffect { + + public ChainOfVaporEffect() { + super(Constants.Outcome.ReturnToHand); + } + + public ChainOfVaporEffect(final ChainOfVaporEffect effect) { + super(effect); + } + + @Override + public ChainOfVaporEffect copy() { + return new ChainOfVaporEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Permanent permanent = game.getPermanent(source.getFirstTarget()); + if (permanent != null) { + if(!permanent.moveToZone(Constants.Zone.HAND, source.getId(), game, false)){ + return false; + } + + Player player = game.getPlayer(permanent.getControllerId()); + if(player.chooseUse(Outcome.ReturnToHand, "Sacrifice a land to copy this spell?", game)){ + TargetControlledPermanent target = new TargetControlledPermanent(new FilterControlledLandPermanent()); + if(player.chooseTarget(Outcome.Sacrifice, target, source, game)){ + Permanent land = game.getPermanent(target.getFirstTarget()); + if(land != null){ + if(land.sacrifice(source.getId(), game)){ + Spell spell = game.getStack().getSpell(source.getId()); + if (spell != null) { + Spell copy = spell.copySpell(); + copy.setControllerId(player.getId()); + copy.setCopiedSpell(true); + game.getStack().push(copy); + copy.chooseNewTargets(game, source.getControllerId()); + String activateMessage = copy.getSpellAbility().getActivatedMessage(game); + if (activateMessage.startsWith(" casts ")) { + activateMessage = activateMessage.substring(6); + } + game.informPlayers(player.getName() + " copies " + activateMessage);; + return true; + } + return false; + } + } + } + } + } + + return true; + } + + @Override + public String getText(Mode mode) { + return "Return target nonland permanent to its owner's hand. Then that permanent's controller may sacrifice a land. If the player does, he or she may copy this spell and may choose a new target for that copy"; + } + +} diff --git a/Mage.Sets/src/mage/sets/saviorsofkamigawa/IdeasUnbound.java b/Mage.Sets/src/mage/sets/saviorsofkamigawa/IdeasUnbound.java new file mode 100644 index 00000000000..d7ead5ce69a --- /dev/null +++ b/Mage.Sets/src/mage/sets/saviorsofkamigawa/IdeasUnbound.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.saviorsofkamigawa; + +import java.util.UUID; +import mage.Constants.CardType; +import mage.Constants.Rarity; +import mage.abilities.common.delayed.AtEndOfTurnDelayedTriggeredAbility; +import mage.abilities.effects.common.CreateDelayedTriggeredAbilityEffect; +import mage.abilities.effects.common.DiscardControllerEffect; +import mage.abilities.effects.common.DrawCardControllerEffect; +import mage.cards.CardImpl; + +/** + * + * @author Plopman + */ +public class IdeasUnbound extends CardImpl { + + public IdeasUnbound(UUID ownerId) { + super(ownerId, 40, "Ideas Unbound", Rarity.COMMON, new CardType[]{CardType.SORCERY}, "{U}{U}"); + this.expansionSetCode = "SOK"; + this.subtype.add("Arcane"); + + this.color.setBlue(true); + + // Draw three cards. Discard three cards at the beginning of the next end step. + this.getSpellAbility().addEffect(new DrawCardControllerEffect(3)); + this.getSpellAbility().addEffect(new CreateDelayedTriggeredAbilityEffect(new AtEndOfTurnDelayedTriggeredAbility(new DiscardControllerEffect(3)))); + } + + public IdeasUnbound(final IdeasUnbound card) { + super(card); + } + + @Override + public IdeasUnbound copy() { + return new IdeasUnbound(this); + } +} diff --git a/Mage.Sets/src/mage/sets/seventhedition/InfernalContract.java b/Mage.Sets/src/mage/sets/seventhedition/InfernalContract.java new file mode 100644 index 00000000000..417a14b1e79 --- /dev/null +++ b/Mage.Sets/src/mage/sets/seventhedition/InfernalContract.java @@ -0,0 +1,96 @@ +/* + * 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.seventhedition; + +import java.util.UUID; +import mage.Constants.CardType; +import mage.Constants.Outcome; +import mage.Constants.Rarity; +import mage.abilities.Ability; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.DrawCardControllerEffect; +import mage.cards.CardImpl; +import mage.game.Game; +import mage.players.Player; + +/** + * + * @author Plopman + */ +public class InfernalContract extends CardImpl { + + public InfernalContract(UUID ownerId) { + super(ownerId, 143, "Infernal Contract", Rarity.RARE, new CardType[]{CardType.SORCERY}, "{B}{B}{B}"); + this.expansionSetCode = "7ED"; + + this.color.setBlack(true); + + // Draw four cards. You lose half your life, rounded up. + this.getSpellAbility().addEffect(new DrawCardControllerEffect(4)); + this.getSpellAbility().addEffect(new InfernalContractLoseLifeEffect()); + } + + public InfernalContract(final InfernalContract card) { + super(card); + } + + @Override + public InfernalContract copy() { + return new InfernalContract(this); + } +} + +class InfernalContractLoseLifeEffect extends OneShotEffect { + + public InfernalContractLoseLifeEffect() { + super(Outcome.LoseLife); + staticText = "You lose half your life, rounded up"; + } + + public InfernalContractLoseLifeEffect(final InfernalContractLoseLifeEffect effect) { + super(effect); + } + + @Override + public InfernalContractLoseLifeEffect copy() { + return new InfernalContractLoseLifeEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player player = game.getPlayer(source.getControllerId()); + if (player != null) { + int amount = (player.getLife() + 1) / 2; + if (amount > 0) { + player.loseLife(amount, game); + return true; + } + } + return false; + } +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/sixthedition/Doomsday.java b/Mage.Sets/src/mage/sets/sixthedition/Doomsday.java new file mode 100644 index 00000000000..f9c9753d046 --- /dev/null +++ b/Mage.Sets/src/mage/sets/sixthedition/Doomsday.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.sixthedition; + +import java.util.UUID; + +/** + * + * @author Plopman + */ +public class Doomsday extends mage.sets.weatherlight.Doomsday { + + public Doomsday(UUID ownerId) { + super(ownerId); + this.cardNumber = 121; + this.expansionSetCode = "6ED"; + } + + public Doomsday(final Doomsday card) { + super(card); + } + + @Override + public Doomsday copy() { + return new Doomsday(this); + } +} diff --git a/Mage.Sets/src/mage/sets/sixthedition/InfernalContract.java b/Mage.Sets/src/mage/sets/sixthedition/InfernalContract.java new file mode 100644 index 00000000000..96efec32caf --- /dev/null +++ b/Mage.Sets/src/mage/sets/sixthedition/InfernalContract.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.sixthedition; + +import java.util.UUID; + +/** + * + * @author Plopman + */ +public class InfernalContract extends mage.sets.seventhedition.InfernalContract { + + public InfernalContract(UUID ownerId) { + super(ownerId); + this.cardNumber = 139; + this.expansionSetCode = "6ED"; + } + + public InfernalContract(final InfernalContract card) { + super(card); + } + + @Override + public InfernalContract copy() { + return new InfernalContract(this); + } +} diff --git a/Mage.Sets/src/mage/sets/urzassaga/RainOfFilth.java b/Mage.Sets/src/mage/sets/urzassaga/RainOfFilth.java new file mode 100644 index 00000000000..5357ea513bb --- /dev/null +++ b/Mage.Sets/src/mage/sets/urzassaga/RainOfFilth.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.urzassaga; + +import java.util.UUID; +import mage.Constants; +import mage.Constants.CardType; +import mage.Constants.Rarity; +import mage.Mana; +import mage.abilities.costs.common.SacrificeSourceCost; +import mage.abilities.effects.common.continious.GainAbilityAllEffect; +import mage.abilities.mana.ManaAbility; +import mage.abilities.mana.SimpleManaAbility; +import mage.cards.CardImpl; +import mage.filter.common.FilterControlledLandPermanent; + +/** + * + * @author Plopman + */ +public class RainOfFilth extends CardImpl { + + public RainOfFilth(UUID ownerId) { + super(ownerId, 151, "Rain of Filth", Rarity.UNCOMMON, new CardType[]{CardType.INSTANT}, "{B}"); + this.expansionSetCode = "USG"; + + this.color.setBlack(true); + + // Until end of turn, lands you control gain "Sacrifice this land: Add {B} to your mana pool." + ManaAbility ability = new SimpleManaAbility(Constants.Zone.BATTLEFIELD, Mana.BlackMana, new SacrificeSourceCost()); + this.getSpellAbility().addEffect(new GainAbilityAllEffect(ability, Constants.Duration.EndOfTurn, new FilterControlledLandPermanent())); + } + + public RainOfFilth(final RainOfFilth card) { + super(card); + } + + @Override + public RainOfFilth copy() { + return new RainOfFilth(this); + } +} diff --git a/Mage.Sets/src/mage/sets/weatherlight/Doomsday.java b/Mage.Sets/src/mage/sets/weatherlight/Doomsday.java new file mode 100644 index 00000000000..4877b1413e7 --- /dev/null +++ b/Mage.Sets/src/mage/sets/weatherlight/Doomsday.java @@ -0,0 +1,143 @@ +/* + * 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; +import mage.Constants; +import mage.Constants.CardType; +import mage.Constants.Outcome; +import mage.Constants.Rarity; +import mage.abilities.Ability; +import mage.abilities.effects.OneShotEffect; +import mage.cards.Card; +import mage.cards.CardImpl; +import mage.cards.Cards; +import mage.cards.CardsImpl; +import mage.filter.FilterCard; +import mage.game.Game; +import mage.players.Player; +import mage.target.TargetCard; + +/** + * + * @author Plopman + */ +public class Doomsday extends CardImpl { + + public Doomsday(UUID ownerId) { + super(ownerId, 8, "Doomsday", Rarity.RARE, new CardType[]{CardType.SORCERY}, "{B}{B}{B}"); + this.expansionSetCode = "WTH"; + + this.color.setBlack(true); + + // Search your library and graveyard for five cards and exile the rest. Put the chosen cards on top of your library in any order. You lose half your life, rounded up. + this.getSpellAbility().addEffect(new DoomsdayEffect()); + } + + public Doomsday(final Doomsday card) { + super(card); + } + + @Override + public Doomsday copy() { + return new Doomsday(this); + } +} + + +class DoomsdayEffect extends OneShotEffect { + + public DoomsdayEffect() { + super(Constants.Outcome.LoseLife); + staticText = "Search your library and graveyard for five cards and exile the rest. Put the chosen cards on top of your library in any order. You lose half your life, rounded up"; + } + + public DoomsdayEffect(final DoomsdayEffect effect) { + super(effect); + } + + @Override + public DoomsdayEffect copy() { + return new DoomsdayEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player player = game.getPlayer(source.getControllerId()); + + if (player != null) { + //Search your library and graveyard for five cards + Cards allCards = new CardsImpl(Constants.Zone.PICK); + Cards cards = new CardsImpl(Constants.Zone.PICK); + allCards.addAll(player.getLibrary().getCardList()); + allCards.addAll(player.getGraveyard()); + int number = Math.min(5, allCards.size()); + TargetCard target = new TargetCard(number, number, Constants.Zone.PICK, new FilterCard()); + + if(player.choose(Outcome.Benefit, allCards, target, game)){ + // exile the rest + for(UUID uuid : allCards){ + if(!target.getTargets().contains(uuid)){ + Card card = game.getCard(uuid); + if(card != null){ + card.moveToExile(null, "Doomsday", source.getId(), game); + } + } + else{ + cards.add(uuid); + } + + } + //Put the chosen cards on top of your library in any order + target = new TargetCard(Constants.Zone.PICK, new FilterCard("Card to put on top")); + target.setRequired(true); + while (cards.size() > 1) { + player.choose(Outcome.Neutral, cards, target, game); + Card card = cards.get(target.getFirstTarget(), game); + if (card != null) { + cards.remove(card); + card.moveToZone(Constants.Zone.LIBRARY, source.getId(), game, true); + } + target.clearChosen(); + } + if (cards.size() == 1) { + Card card = cards.get(cards.iterator().next(), game); + card.moveToZone(Constants.Zone.LIBRARY, source.getId(), game, true); + } + } + + //You lose half your life, rounded up + int amount = (player.getLife() + 1) / 2; + if (amount > 0) { + player.loseLife(amount, game); + return true; + } + } + return false; + } +} \ No newline at end of file