From 47abc28d781541ed0c952eea7d5ece52c2712726 Mon Sep 17 00:00:00 2001 From: North Date: Sun, 11 Mar 2012 17:12:04 +0200 Subject: [PATCH] [DKA] Jar of Eyeballs [DIS] Proper Burial [10E] Grave Pact [TMP] Essence Bottle, Torture Chamber --- .../sets/darkascension/JarOfEyeballs.java | 233 ++++++++++++++++++ .../mage/sets/dissension/ProperBurial.java | 101 ++++++++ .../mage/sets/eighthedition/GravePact.java | 52 ++++ .../src/mage/sets/ninthedition/GravePact.java | 139 +++++++++++ .../src/mage/sets/planechase/GravePact.java | 52 ++++ .../src/mage/sets/tempest/EssenceBottle.java | 154 ++++++++++++ .../src/mage/sets/tempest/TortureChamber.java | 188 ++++++++++++++ Mage.Sets/src/mage/sets/tenth/GravePact.java | 52 ++++ Mage/src/mage/counters/CounterType.java | 11 +- .../mage/counters/common/ElixirCounter.java | 47 ++++ .../mage/counters/common/EyeballCounter.java | 47 ++++ .../src/mage/counters/common/PainCounter.java | 47 ++++ 12 files changed, 1122 insertions(+), 1 deletion(-) create mode 100644 Mage.Sets/src/mage/sets/darkascension/JarOfEyeballs.java create mode 100644 Mage.Sets/src/mage/sets/dissension/ProperBurial.java create mode 100644 Mage.Sets/src/mage/sets/eighthedition/GravePact.java create mode 100644 Mage.Sets/src/mage/sets/ninthedition/GravePact.java create mode 100644 Mage.Sets/src/mage/sets/planechase/GravePact.java create mode 100644 Mage.Sets/src/mage/sets/tempest/EssenceBottle.java create mode 100644 Mage.Sets/src/mage/sets/tempest/TortureChamber.java create mode 100644 Mage.Sets/src/mage/sets/tenth/GravePact.java create mode 100644 Mage/src/mage/counters/common/ElixirCounter.java create mode 100644 Mage/src/mage/counters/common/EyeballCounter.java create mode 100644 Mage/src/mage/counters/common/PainCounter.java diff --git a/Mage.Sets/src/mage/sets/darkascension/JarOfEyeballs.java b/Mage.Sets/src/mage/sets/darkascension/JarOfEyeballs.java new file mode 100644 index 00000000000..a91199446cd --- /dev/null +++ b/Mage.Sets/src/mage/sets/darkascension/JarOfEyeballs.java @@ -0,0 +1,233 @@ +/* + * 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.darkascension; + +import java.util.UUID; +import mage.Constants.CardType; +import mage.Constants.Outcome; +import mage.Constants.Rarity; +import mage.Constants.Zone; +import mage.abilities.Ability; +import mage.abilities.TriggeredAbilityImpl; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.Cost; +import mage.abilities.costs.CostImpl; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.GenericManaCost; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.cards.Card; +import mage.cards.CardImpl; +import mage.cards.Cards; +import mage.cards.CardsImpl; +import mage.counters.CounterType; +import mage.filter.FilterCard; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.events.ZoneChangeEvent; +import mage.game.permanent.Permanent; +import mage.players.Player; +import mage.target.TargetCard; + +/** + * + * @author North + */ +public class JarOfEyeballs extends CardImpl { + + public JarOfEyeballs(UUID ownerId) { + super(ownerId, 152, "Jar of Eyeballs", Rarity.RARE, new CardType[]{CardType.ARTIFACT}, "{3}"); + this.expansionSetCode = "DKA"; + + // Whenever a creature you control dies, put two eyeball counters on Jar of Eyeballs. + this.addAbility(new JarOfEyeballsTriggeredAbility()); + // {3}, {tap}, Remove all eyeball counters from Jar of Eyeballs: + // Look at the top X cards of your library, where X is the number of eyeball counters removed this way. + // Put one of them into your hand and the rest on the bottom of your library in any order. + SimpleActivatedAbility ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new JarOfEyeballsEffect(), new GenericManaCost(3)); + ability.addCost(new TapSourceCost()); + ability.addCost(new JarOfEyeballsCost()); + this.addAbility(ability); + } + + public JarOfEyeballs(final JarOfEyeballs card) { + super(card); + } + + @Override + public JarOfEyeballs copy() { + return new JarOfEyeballs(this); + } +} + +class JarOfEyeballsTriggeredAbility extends TriggeredAbilityImpl { + + public JarOfEyeballsTriggeredAbility() { + super(Zone.BATTLEFIELD, new AddCountersSourceEffect(CounterType.EYEBALL.createInstance(2))); + } + + public JarOfEyeballsTriggeredAbility(final JarOfEyeballsTriggeredAbility ability) { + super(ability); + } + + @Override + public JarOfEyeballsTriggeredAbility copy() { + return new JarOfEyeballsTriggeredAbility(this); + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + if (event.getType() == GameEvent.EventType.ZONE_CHANGE + && ((ZoneChangeEvent) event).getToZone() == Zone.GRAVEYARD + && ((ZoneChangeEvent) event).getFromZone() == Zone.BATTLEFIELD) { + Permanent permanent = (Permanent) game.getLastKnownInformation(event.getTargetId(), Zone.BATTLEFIELD); + if (permanent.getControllerId().equals(this.getControllerId()) && permanent.getCardType().contains(CardType.CREATURE)) { + return true; + } + } + return false; + } + + @Override + public String getRule() { + return "Whenever a creature you control dies, " + super.getRule(); + } +} + +class JarOfEyeballsCost extends CostImpl { + + private int removedCounters; + + public JarOfEyeballsCost() { + super(); + this.removedCounters = 0; + this.text = "Remove all eyeball counters from {this}"; + } + + public JarOfEyeballsCost(JarOfEyeballsCost cost) { + super(cost); + this.removedCounters = cost.removedCounters; + } + + @Override + public boolean canPay(UUID sourceId, UUID controllerId, Game game) { + return true; + } + + @Override + public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana) { + Permanent permanent = game.getPermanent(ability.getSourceId()); + if (permanent != null) { + this.removedCounters = permanent.getCounters().getCount(CounterType.EYEBALL); + if (this.removedCounters > 0) { + permanent.removeCounters(CounterType.EYEBALL.createInstance(this.removedCounters), game); + } + } + this.paid = true; + return true; + } + + @Override + public JarOfEyeballsCost copy() { + return new JarOfEyeballsCost(this); + } + + public int getRemovedCounters() { + return this.removedCounters; + } +} + +class JarOfEyeballsEffect extends OneShotEffect { + + public JarOfEyeballsEffect() { + super(Outcome.DrawCard); + this.staticText = "Look at the top X cards of your library, where X is the number of eyeball counters removed this way. Put one of them into your hand and the rest on the bottom of your library in any order"; + } + + public JarOfEyeballsEffect(final JarOfEyeballsEffect effect) { + super(effect); + } + + @Override + public JarOfEyeballsEffect copy() { + return new JarOfEyeballsEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + int countersRemoved = 0; + for (Cost cost : source.getCosts()) { + if (cost instanceof JarOfEyeballsCost) { + countersRemoved = ((JarOfEyeballsCost) cost).getRemovedCounters(); + } + } + + Player player = game.getPlayer(source.getControllerId()); + if (player == null) { + return false; + } + + Cards cards = new CardsImpl(Zone.PICK); + int count = Math.min(player.getLibrary().size(), countersRemoved); + for (int i = 0; i < count; i++) { + Card card = player.getLibrary().removeFromTop(game); + if (card != null) { + cards.add(card); + game.setZone(card.getId(), Zone.PICK); + } + } + player.lookAtCards("Jar of Eyeballs", cards, game); + + TargetCard target = new TargetCard(Zone.PICK, new FilterCard("card to put into your hand")); + if (player.choose(Outcome.DrawCard, cards, target, game)) { + Card card = cards.get(target.getFirstTarget(), game); + if (card != null) { + cards.remove(card); + card.moveToZone(Zone.HAND, source.getId(), game, false); + } + } + + target = new TargetCard(Zone.PICK, new FilterCard("card to put on the bottom of your library")); + 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(Zone.LIBRARY, source.getId(), game, false); + } + target.clearChosen(); + } + if (cards.size() == 1) { + Card card = cards.get(cards.iterator().next(), game); + card.moveToZone(Zone.LIBRARY, source.getId(), game, false); + } + + return true; + } +} diff --git a/Mage.Sets/src/mage/sets/dissension/ProperBurial.java b/Mage.Sets/src/mage/sets/dissension/ProperBurial.java new file mode 100644 index 00000000000..663c3e419cd --- /dev/null +++ b/Mage.Sets/src/mage/sets/dissension/ProperBurial.java @@ -0,0 +1,101 @@ +/* + * 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.dissension; + +import java.util.UUID; +import mage.Constants.CardType; +import mage.Constants.Rarity; +import mage.Constants.Zone; +import mage.abilities.TriggeredAbilityImpl; +import mage.abilities.effects.common.GainLifeEffect; +import mage.cards.CardImpl; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.events.ZoneChangeEvent; +import mage.game.permanent.Permanent; + +/** + * + * @author North + */ +public class ProperBurial extends CardImpl { + + public ProperBurial(UUID ownerId) { + super(ownerId, 16, "Proper Burial", Rarity.RARE, new CardType[]{CardType.ENCHANTMENT}, "{3}{W}"); + this.expansionSetCode = "DIS"; + + this.color.setWhite(true); + + // Whenever a creature you control dies, you gain life equal to that creature's toughness. + this.addAbility(new ProperBurialTriggeredAbility()); + } + + public ProperBurial(final ProperBurial card) { + super(card); + } + + @Override + public ProperBurial copy() { + return new ProperBurial(this); + } +} + +class ProperBurialTriggeredAbility extends TriggeredAbilityImpl { + + public ProperBurialTriggeredAbility() { + super(Zone.BATTLEFIELD, null); + } + + public ProperBurialTriggeredAbility(final ProperBurialTriggeredAbility ability) { + super(ability); + } + + @Override + public ProperBurialTriggeredAbility copy() { + return new ProperBurialTriggeredAbility(this); + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + if (event.getType() == GameEvent.EventType.ZONE_CHANGE + && ((ZoneChangeEvent) event).getToZone() == Zone.GRAVEYARD + && ((ZoneChangeEvent) event).getFromZone() == Zone.BATTLEFIELD) { + Permanent permanent = (Permanent) game.getLastKnownInformation(event.getTargetId(), Zone.BATTLEFIELD); + if (permanent.getControllerId().equals(this.getControllerId()) && permanent.getCardType().contains(CardType.CREATURE)) { + this.addEffect(new GainLifeEffect(permanent.getToughness().getValue())); + return true; + } + } + return false; + } + + @Override + public String getRule() { + return "Whenever a creature you control dies, you gain life equal to that creature's toughness."; + } +} diff --git a/Mage.Sets/src/mage/sets/eighthedition/GravePact.java b/Mage.Sets/src/mage/sets/eighthedition/GravePact.java new file mode 100644 index 00000000000..9a4399450bd --- /dev/null +++ b/Mage.Sets/src/mage/sets/eighthedition/GravePact.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.eighthedition; + +import java.util.UUID; + +/** + * + * @author North + */ +public class GravePact extends mage.sets.ninthedition.GravePact { + + public GravePact(UUID ownerId) { + super(ownerId); + this.cardNumber = 137; + this.expansionSetCode = "8ED"; + } + + public GravePact(final GravePact card) { + super(card); + } + + @Override + public GravePact copy() { + return new GravePact(this); + } +} diff --git a/Mage.Sets/src/mage/sets/ninthedition/GravePact.java b/Mage.Sets/src/mage/sets/ninthedition/GravePact.java new file mode 100644 index 00000000000..2aa6455e0ed --- /dev/null +++ b/Mage.Sets/src/mage/sets/ninthedition/GravePact.java @@ -0,0 +1,139 @@ +/* + * 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.ninthedition; + +import java.util.UUID; +import mage.Constants.CardType; +import mage.Constants.Outcome; +import mage.Constants.Rarity; +import mage.Constants.Zone; +import mage.abilities.Ability; +import mage.abilities.TriggeredAbilityImpl; +import mage.abilities.effects.OneShotEffect; +import mage.cards.CardImpl; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.events.ZoneChangeEvent; +import mage.game.permanent.Permanent; +import mage.players.Player; +import mage.target.Target; +import mage.target.common.TargetControlledCreaturePermanent; + +/** + * + * @author North + */ +public class GravePact extends CardImpl { + + public GravePact(UUID ownerId) { + super(ownerId, 135, "Grave Pact", Rarity.RARE, new CardType[]{CardType.ENCHANTMENT}, "{1}{B}{B}{B}"); + this.expansionSetCode = "9ED"; + + this.color.setBlack(true); + + // Whenever a creature you control dies, each other player sacrifices a creature. + this.addAbility(new GravePactTriggeredAbility()); + } + + public GravePact(final GravePact card) { + super(card); + } + + @Override + public GravePact copy() { + return new GravePact(this); + } +} + +class GravePactTriggeredAbility extends TriggeredAbilityImpl { + + public GravePactTriggeredAbility() { + super(Zone.BATTLEFIELD, new GravePactEffect()); + } + + public GravePactTriggeredAbility(final GravePactTriggeredAbility ability) { + super(ability); + } + + @Override + public GravePactTriggeredAbility copy() { + return new GravePactTriggeredAbility(this); + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + if (event.getType() == GameEvent.EventType.ZONE_CHANGE + && ((ZoneChangeEvent) event).getToZone() == Zone.GRAVEYARD + && ((ZoneChangeEvent) event).getFromZone() == Zone.BATTLEFIELD) { + Permanent permanent = (Permanent) game.getLastKnownInformation(event.getTargetId(), Zone.BATTLEFIELD); + if (permanent.getControllerId().equals(this.getControllerId()) && permanent.getCardType().contains(CardType.CREATURE)) { + return true; + } + } + return false; + } + + @Override + public String getRule() { + return "Whenever a creature you control dies, " + super.getRule(); + } +} + +class GravePactEffect extends OneShotEffect { + + public GravePactEffect() { + super(Outcome.Sacrifice); + this.staticText = "each other player sacrifices a creature"; + } + + public GravePactEffect(final GravePactEffect effect) { + super(effect); + } + + @Override + public GravePactEffect copy() { + return new GravePactEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + for (UUID playerId : game.getPlayerList()) { + if (!playerId.equals(source.getControllerId())) { + Player player = game.getPlayer(playerId); + Target target = new TargetControlledCreaturePermanent(); + if (player != null && player.choose(Outcome.Sacrifice, target, source.getSourceId(), game)) { + Permanent permanent = game.getPermanent(target.getFirstTarget()); + if (permanent != null) { + permanent.sacrifice(source.getSourceId(), game); + } + } + } + } + return false; + } +} diff --git a/Mage.Sets/src/mage/sets/planechase/GravePact.java b/Mage.Sets/src/mage/sets/planechase/GravePact.java new file mode 100644 index 00000000000..023b40c7a8b --- /dev/null +++ b/Mage.Sets/src/mage/sets/planechase/GravePact.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.planechase; + +import java.util.UUID; + +/** + * + * @author North + */ +public class GravePact extends mage.sets.ninthedition.GravePact { + + public GravePact(UUID ownerId) { + super(ownerId); + this.cardNumber = 28; + this.expansionSetCode = "HOP"; + } + + public GravePact(final GravePact card) { + super(card); + } + + @Override + public GravePact copy() { + return new GravePact(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempest/EssenceBottle.java b/Mage.Sets/src/mage/sets/tempest/EssenceBottle.java new file mode 100644 index 00000000000..463d1863748 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempest/EssenceBottle.java @@ -0,0 +1,154 @@ +/* + * 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.tempest; + +import java.util.UUID; +import mage.Constants.CardType; +import mage.Constants.Outcome; +import mage.Constants.Rarity; +import mage.Constants.Zone; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.Cost; +import mage.abilities.costs.CostImpl; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.GenericManaCost; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.cards.CardImpl; +import mage.counters.CounterType; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.players.Player; + +/** + * + * @author North + */ +public class EssenceBottle extends CardImpl { + + public EssenceBottle(UUID ownerId) { + super(ownerId, 276, "Essence Bottle", Rarity.UNCOMMON, new CardType[]{CardType.ARTIFACT}, "{2}"); + this.expansionSetCode = "TMP"; + // {3}, {tap}: Put an elixir counter on Essence Bottle. + SimpleActivatedAbility ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, + new AddCountersSourceEffect(CounterType.ELIXIR.createInstance()), + new GenericManaCost(3)); + ability.addCost(new TapSourceCost()); + this.addAbility(ability); + // {tap}, Remove all elixir counters from Essence Bottle: You gain 2 life for each elixir counter removed this way. + ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new EssenceBottleEffect(), new TapSourceCost()); + ability.addCost(new EssenceBottleCost()); + this.addAbility(ability); + } + + public EssenceBottle(final EssenceBottle card) { + super(card); + } + + @Override + public EssenceBottle copy() { + return new EssenceBottle(this); + } +} + +class EssenceBottleCost extends CostImpl { + + private int removedCounters; + + public EssenceBottleCost() { + super(); + this.removedCounters = 0; + this.text = "Remove all elixir counters from {this}"; + } + + public EssenceBottleCost(EssenceBottleCost cost) { + super(cost); + this.removedCounters = cost.removedCounters; + } + + @Override + public boolean canPay(UUID sourceId, UUID controllerId, Game game) { + return true; + } + + @Override + public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana) { + Permanent permanent = game.getPermanent(ability.getSourceId()); + if (permanent != null) { + this.removedCounters = permanent.getCounters().getCount(CounterType.ELIXIR); + if (this.removedCounters > 0) { + permanent.removeCounters(CounterType.ELIXIR.createInstance(this.removedCounters), game); + } + } + this.paid = true; + return true; + } + + @Override + public EssenceBottleCost copy() { + return new EssenceBottleCost(this); + } + + public int getRemovedCounters() { + return this.removedCounters; + } +} + +class EssenceBottleEffect extends OneShotEffect { + + public EssenceBottleEffect() { + super(Outcome.GainLife); + this.staticText = "You gain 2 life for each elixir counter removed this way"; + } + + public EssenceBottleEffect(final EssenceBottleEffect effect) { + super(effect); + } + + @Override + public EssenceBottleEffect copy() { + return new EssenceBottleEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + int countersRemoved = 0; + for (Cost cost : source.getCosts()) { + if (cost instanceof EssenceBottleCost) { + countersRemoved = ((EssenceBottleCost) cost).getRemovedCounters(); + } + } + Player player = game.getPlayer(source.getControllerId()); + if (player != null) { + player.gainLife(countersRemoved * 2, game); + return true; + } + return false; + } +} diff --git a/Mage.Sets/src/mage/sets/tempest/TortureChamber.java b/Mage.Sets/src/mage/sets/tempest/TortureChamber.java new file mode 100644 index 00000000000..6a9b7ea0ccb --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempest/TortureChamber.java @@ -0,0 +1,188 @@ +/* + * 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.tempest; + +import java.util.UUID; +import mage.Constants.CardType; +import mage.Constants.Outcome; +import mage.Constants.Rarity; +import mage.Constants.Zone; +import mage.abilities.Ability; +import mage.abilities.common.BeginningOfYourEndStepTriggeredAbility; +import mage.abilities.common.OnEventTriggeredAbility; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.Cost; +import mage.abilities.costs.CostImpl; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.GenericManaCost; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.cards.CardImpl; +import mage.counters.CounterType; +import mage.game.Game; +import mage.game.events.GameEvent.EventType; +import mage.game.permanent.Permanent; +import mage.players.Player; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author North + */ +public class TortureChamber extends CardImpl { + + public TortureChamber(UUID ownerId) { + super(ownerId, 303, "Torture Chamber", Rarity.RARE, new CardType[]{CardType.ARTIFACT}, "{3}"); + this.expansionSetCode = "TMP"; + + // At the beginning of your upkeep, put a pain counter on Torture Chamber. + this.addAbility(new OnEventTriggeredAbility(EventType.UPKEEP_STEP_PRE, "beginning of your upkeep", new AddCountersSourceEffect(CounterType.PAIN.createInstance()))); + // At the beginning of your end step, Torture Chamber deals damage to you equal to the number of pain counters on it. + this.addAbility(new BeginningOfYourEndStepTriggeredAbility(new TortureChamberEffect1(), false)); + // {1}, {tap}, Remove all pain counters from Torture Chamber: Torture Chamber deals damage to target creature equal to the number of pain counters removed this way. + SimpleActivatedAbility ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new TortureChamberEffect2(), new GenericManaCost(1)); + ability.addCost(new TapSourceCost()); + ability.addCost(new TortureChamberCost()); + ability.addTarget(new TargetCreaturePermanent()); + this.addAbility(ability); + } + + public TortureChamber(final TortureChamber card) { + super(card); + } + + @Override + public TortureChamber copy() { + return new TortureChamber(this); + } +} + +class TortureChamberCost extends CostImpl { + + private int removedCounters; + + public TortureChamberCost() { + super(); + this.removedCounters = 0; + this.text = "Remove all pain counters from {this}"; + } + + public TortureChamberCost(TortureChamberCost cost) { + super(cost); + this.removedCounters = cost.removedCounters; + } + + @Override + public boolean canPay(UUID sourceId, UUID controllerId, Game game) { + return true; + } + + @Override + public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana) { + Permanent permanent = game.getPermanent(ability.getSourceId()); + if (permanent != null) { + this.removedCounters = permanent.getCounters().getCount(CounterType.PAIN); + if (this.removedCounters > 0) { + permanent.removeCounters(CounterType.PAIN.createInstance(this.removedCounters), game); + } + } + this.paid = true; + return true; + } + + @Override + public TortureChamberCost copy() { + return new TortureChamberCost(this); + } + + public int getRemovedCounters() { + return this.removedCounters; + } +} + +class TortureChamberEffect1 extends OneShotEffect { + + public TortureChamberEffect1() { + super(Outcome.Damage); + this.staticText = "{this} deals damage to you equal to the number of pain counters on it"; + } + + public TortureChamberEffect1(final TortureChamberEffect1 effect) { + super(effect); + } + + @Override + public TortureChamberEffect1 copy() { + return new TortureChamberEffect1(this); + } + + @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) { + int painCounters = permanent.getCounters().getCount(CounterType.PAIN); + player.damage(painCounters, source.getSourceId(), game, false, true); + return true; + } + return false; + } +} + +class TortureChamberEffect2 extends OneShotEffect { + + public TortureChamberEffect2() { + super(Outcome.Damage); + this.staticText = "{this} deals damage to target creature equal to the number of pain counters removed this way"; + } + + public TortureChamberEffect2(final TortureChamberEffect2 effect) { + super(effect); + } + + @Override + public TortureChamberEffect2 copy() { + return new TortureChamberEffect2(this); + } + + @Override + public boolean apply(Game game, Ability source) { + int countersRemoved = 0; + for (Cost cost : source.getCosts()) { + if (cost instanceof TortureChamberCost) { + countersRemoved = ((TortureChamberCost) cost).getRemovedCounters(); + } + } + Permanent permanent = game.getPermanent(source.getFirstTarget()); + if (permanent != null) { + permanent.damage(countersRemoved, source.getSourceId(), game, true, false); + return true; + } + return false; + } +} diff --git a/Mage.Sets/src/mage/sets/tenth/GravePact.java b/Mage.Sets/src/mage/sets/tenth/GravePact.java new file mode 100644 index 00000000000..537e29985b7 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tenth/GravePact.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.tenth; + +import java.util.UUID; + +/** + * + * @author North + */ +public class GravePact extends mage.sets.ninthedition.GravePact { + + public GravePact(UUID ownerId) { + super(ownerId); + this.cardNumber = 144; + this.expansionSetCode = "10E"; + } + + public GravePact(final GravePact card) { + super(card); + } + + @Override + public GravePact copy() { + return new GravePact(this); + } +} diff --git a/Mage/src/mage/counters/CounterType.java b/Mage/src/mage/counters/CounterType.java index 91ff51e2ae2..972f33003ff 100644 --- a/Mage/src/mage/counters/CounterType.java +++ b/Mage/src/mage/counters/CounterType.java @@ -60,7 +60,10 @@ public enum CounterType { KI(new KiCounter().name), SLIME(new SlimeCounter().name), SPORE(new SporeCounter().name), - STUDY(new StudyCounter().name); + STUDY(new StudyCounter().name), + EYEBALL(new EyeballCounter().name), + ELIXIR(new ElixirCounter().name), + PAIN(new PainCounter().name); private String name; @@ -144,6 +147,12 @@ public enum CounterType { return new SporeCounter(amount); case STUDY: return new StudyCounter(amount); + case EYEBALL: + return new EyeballCounter(amount); + case ELIXIR: + return new ElixirCounter(amount); + case PAIN: + return new PainCounter(amount); } return null; } diff --git a/Mage/src/mage/counters/common/ElixirCounter.java b/Mage/src/mage/counters/common/ElixirCounter.java new file mode 100644 index 00000000000..b31fb6df46d --- /dev/null +++ b/Mage/src/mage/counters/common/ElixirCounter.java @@ -0,0 +1,47 @@ +/* + * 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.counters.common; + +import mage.counters.Counter; + +/** + * + * @author North + */ +public class ElixirCounter extends Counter { + + public ElixirCounter() { + super("Elixir"); + this.count = 1; + } + + public ElixirCounter(int amount) { + super("Elixir"); + this.count = amount; + } +} diff --git a/Mage/src/mage/counters/common/EyeballCounter.java b/Mage/src/mage/counters/common/EyeballCounter.java new file mode 100644 index 00000000000..a0949d85dd3 --- /dev/null +++ b/Mage/src/mage/counters/common/EyeballCounter.java @@ -0,0 +1,47 @@ +/* + * 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.counters.common; + +import mage.counters.Counter; + +/** + * + * @author North + */ +public class EyeballCounter extends Counter { + + public EyeballCounter() { + super("Eyeball"); + this.count = 1; + } + + public EyeballCounter(int amount) { + super("Eyeball"); + this.count = amount; + } +} diff --git a/Mage/src/mage/counters/common/PainCounter.java b/Mage/src/mage/counters/common/PainCounter.java new file mode 100644 index 00000000000..e3f9f4809a5 --- /dev/null +++ b/Mage/src/mage/counters/common/PainCounter.java @@ -0,0 +1,47 @@ +/* + * 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.counters.common; + +import mage.counters.Counter; + +/** + * + * @author North + */ +public class PainCounter extends Counter { + + public PainCounter() { + super("Pain"); + this.count = 1; + } + + public PainCounter(int amount) { + super("Pain"); + this.count = amount; + } +}