From 73c2bd22e37963c83be9718540706f2d70a90f15 Mon Sep 17 00:00:00 2001 From: LoneFox Date: Tue, 18 Aug 2015 14:24:34 +0300 Subject: [PATCH 1/9] Implement cards: Grinning Demon, Junun Efreet, Ravaging Riftwurm, and Tidewalker --- .../mage/sets/arabiannights/JununEfreet.java | 54 ++++++++++++ .../mage/sets/fourthedition/JununEfreet.java | 68 +++++++++++++++ .../sets/futuresight/RavagingRiftwurm.java | 78 +++++++++++++++++ .../sets/masterseditioniv/JununEfreet.java | 52 ++++++++++++ .../mage/sets/onslaught/GrinningDemon.java | 68 +++++++++++++++ .../src/mage/sets/planarchaos/Tidewalker.java | 84 +++++++++++++++++++ .../keyword/VanishingUpkeepAbility.java | 9 +- 7 files changed, 411 insertions(+), 2 deletions(-) create mode 100644 Mage.Sets/src/mage/sets/arabiannights/JununEfreet.java create mode 100644 Mage.Sets/src/mage/sets/fourthedition/JununEfreet.java create mode 100644 Mage.Sets/src/mage/sets/futuresight/RavagingRiftwurm.java create mode 100644 Mage.Sets/src/mage/sets/masterseditioniv/JununEfreet.java create mode 100644 Mage.Sets/src/mage/sets/onslaught/GrinningDemon.java create mode 100644 Mage.Sets/src/mage/sets/planarchaos/Tidewalker.java diff --git a/Mage.Sets/src/mage/sets/arabiannights/JununEfreet.java b/Mage.Sets/src/mage/sets/arabiannights/JununEfreet.java new file mode 100644 index 0000000000..58ca657c48 --- /dev/null +++ b/Mage.Sets/src/mage/sets/arabiannights/JununEfreet.java @@ -0,0 +1,54 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.arabiannights; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author LoneFox + */ +public class JununEfreet extends mage.sets.fourthedition.JununEfreet { + + public JununEfreet(UUID ownerId) { + super(ownerId); + this.cardNumber = 8; + this.expansionSetCode = "ARN"; + this.rarity = Rarity.RARE; + } + + public JununEfreet(final JununEfreet card) { + super(card); + } + + @Override + public JununEfreet copy() { + return new JununEfreet(this); + } +} diff --git a/Mage.Sets/src/mage/sets/fourthedition/JununEfreet.java b/Mage.Sets/src/mage/sets/fourthedition/JununEfreet.java new file mode 100644 index 0000000000..eb6e17f222 --- /dev/null +++ b/Mage.Sets/src/mage/sets/fourthedition/JununEfreet.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.fourthedition; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.SacrificeSourceUnlessPaysEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.TargetController; + +/** + * + * @author LoneFox + */ +public class JununEfreet extends CardImpl { + + public JununEfreet(UUID ownerId) { + super(ownerId, 27, "JunĂșn Efreet", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{1}{B}{B}"); + this.expansionSetCode = "4ED"; + this.subtype.add("Efreet"); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + // At the beginning of your upkeep, sacrifice JunĂșn Efreet unless you pay {B}{B}. + this.addAbility(new BeginningOfUpkeepTriggeredAbility(new SacrificeSourceUnlessPaysEffect(new ManaCostsImpl("{B}{B}")), TargetController.YOU, false)); + } + + public JununEfreet(final JununEfreet card) { + super(card); + } + + @Override + public JununEfreet copy() { + return new JununEfreet(this); + } +} diff --git a/Mage.Sets/src/mage/sets/futuresight/RavagingRiftwurm.java b/Mage.Sets/src/mage/sets/futuresight/RavagingRiftwurm.java new file mode 100644 index 0000000000..30c9a66fcf --- /dev/null +++ b/Mage.Sets/src/mage/sets/futuresight/RavagingRiftwurm.java @@ -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.futuresight; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldAbility; +import mage.abilities.condition.common.KickedCondition; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.abilities.keyword.KickerAbility; +import mage.abilities.keyword.VanishingSacrificeAbility; +import mage.abilities.keyword.VanishingUpkeepAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.counters.CounterType; + +/** + * + * @author LoneFox + */ +public class RavagingRiftwurm extends CardImpl { + + public RavagingRiftwurm(UUID ownerId) { + super(ownerId, 135, "Ravaging Riftwurm", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{1}{G}{G}"); + this.expansionSetCode = "FUT"; + this.subtype.add("Wurm"); + this.power = new MageInt(6); + this.toughness = new MageInt(6); + + // Kicker {4} + this.addAbility(new KickerAbility("{4}")); + // Vanishing 2 + Ability ability = new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.TIME.createInstance(2))); + ability.setRuleVisible(false); + this.addAbility(ability); + this.addAbility(new VanishingUpkeepAbility(2)); + this.addAbility(new VanishingSacrificeAbility()); + // If Ravaging Riftwurm was kicked, it enters the battlefield with three additional time counters on it. + this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.TIME.createInstance(3)), + KickedCondition.getInstance(), true, "If {this} was kicked, it enters the battlefield with three additional time counters on it.", "")); + } + + public RavagingRiftwurm(final RavagingRiftwurm card) { + super(card); + } + + @Override + public RavagingRiftwurm copy() { + return new RavagingRiftwurm(this); + } +} diff --git a/Mage.Sets/src/mage/sets/masterseditioniv/JununEfreet.java b/Mage.Sets/src/mage/sets/masterseditioniv/JununEfreet.java new file mode 100644 index 0000000000..11361effc3 --- /dev/null +++ b/Mage.Sets/src/mage/sets/masterseditioniv/JununEfreet.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.masterseditioniv; + +import java.util.UUID; + +/** + * + * @author LoneFox + */ +public class JununEfreet extends mage.sets.fourthedition.JununEfreet { + + public JununEfreet(UUID ownerId) { + super(ownerId); + this.cardNumber = 88; + this.expansionSetCode = "ME4"; + } + + public JununEfreet(final JununEfreet card) { + super(card); + } + + @Override + public JununEfreet copy() { + return new JununEfreet(this); + } +} diff --git a/Mage.Sets/src/mage/sets/onslaught/GrinningDemon.java b/Mage.Sets/src/mage/sets/onslaught/GrinningDemon.java new file mode 100644 index 0000000000..e11f608d74 --- /dev/null +++ b/Mage.Sets/src/mage/sets/onslaught/GrinningDemon.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.onslaught; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.LoseLifeSourceControllerEffect; +import mage.abilities.keyword.MorphAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.TargetController; + +/** + * + * @author LoneFox + */ +public class GrinningDemon extends CardImpl { + + public GrinningDemon(UUID ownerId) { + super(ownerId, 153, "Grinning Demon", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{2}{B}{B}"); + this.expansionSetCode = "ONS"; + this.subtype.add("Demon"); + this.power = new MageInt(6); + this.toughness = new MageInt(6); + + // At the beginning of your upkeep, you lose 2 life. + this.addAbility(new BeginningOfUpkeepTriggeredAbility(new LoseLifeSourceControllerEffect(2), TargetController.YOU, false)); + // Morph {2}{B}{B} + this.addAbility(new MorphAbility(this, new ManaCostsImpl("{2}{B}{B}"))); + } + + public GrinningDemon(final GrinningDemon card) { + super(card); + } + + @Override + public GrinningDemon copy() { + return new GrinningDemon(this); + } +} diff --git a/Mage.Sets/src/mage/sets/planarchaos/Tidewalker.java b/Mage.Sets/src/mage/sets/planarchaos/Tidewalker.java new file mode 100644 index 0000000000..6a54e43934 --- /dev/null +++ b/Mage.Sets/src/mage/sets/planarchaos/Tidewalker.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.planarchaos; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.EntersBattlefieldAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.dynamicvalue.common.CountersCount; +import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount; +import mage.abilities.effects.common.continuous.SetPowerToughnessSourceEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.abilities.keyword.VanishingSacrificeAbility; +import mage.abilities.keyword.VanishingUpkeepAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.counters.CounterType; +import mage.filter.common.FilterControlledPermanent; +import mage.filter.predicate.mageobject.SubtypePredicate; + +/** + * + * @author LoneFox + */ +public class Tidewalker extends CardImpl { + + private static final FilterControlledPermanent filter = new FilterControlledPermanent("Island you control"); + + static { + filter.add(new SubtypePredicate("Island")); + } + + public Tidewalker(UUID ownerId) { + super(ownerId, 49, "Tidewalker", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{2}{U}"); + this.expansionSetCode = "PLC"; + this.subtype.add("Elemental"); + this.power = new MageInt(0); + this.toughness = new MageInt(0); + + // Tidewalker enters the battlefield with a time counter on it for each Island you control. + this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.TIME.createInstance(0), new PermanentsOnBattlefieldCount(filter), true), "with a time counter on it for each Island you control")); + // Vanishing + this.addAbility(new VanishingUpkeepAbility(0)); + this.addAbility(new VanishingSacrificeAbility()); + // Tidewalker's power and toughness are each equal to the number of time counters on it. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SetPowerToughnessSourceEffect(new CountersCount(CounterType.TIME), Duration.WhileOnBattlefield))); } + + public Tidewalker(final Tidewalker card) { + super(card); + } + + @Override + public Tidewalker copy() { + return new Tidewalker(this); + } +} diff --git a/Mage/src/mage/abilities/keyword/VanishingUpkeepAbility.java b/Mage/src/mage/abilities/keyword/VanishingUpkeepAbility.java index 188ef1bf5a..211867bbae 100644 --- a/Mage/src/mage/abilities/keyword/VanishingUpkeepAbility.java +++ b/Mage/src/mage/abilities/keyword/VanishingUpkeepAbility.java @@ -31,9 +31,14 @@ public class VanishingUpkeepAbility extends BeginningOfUpkeepTriggeredAbility { @Override public String getRule() { - return "Vanishing " + vanishingAmount + if(vanishingAmount > 0) { + return "Vanishing " + vanishingAmount + " (This permanent enters the battlefield with " + CardUtil.numberToText(vanishingAmount) - + " time counters on it. At the beginning of your upkeep, remove a time counter from it. When the last is removed, sacrifice it.)"; + + " time counters on it. At the beginning of your upkeep, remove a time counter from it. When the last is removed, sacrifice it.)"; + } + else { + return "Vanishing (At the beginning of your upkeep, remove a time counter from this permanent. When the last is removed, sacrifice it.)"; + } } } From 667190bf617e5a853e7ea79db892983ad204d68f Mon Sep 17 00:00:00 2001 From: LoneFox Date: Tue, 18 Aug 2015 19:09:51 +0300 Subject: [PATCH 2/9] Implement cards: Battle Frenzy, Deadly Grub, Maelstrom Djinn, and Ursine Fylgja --- .../src/mage/sets/coldsnap/UrsineFylgja.java | 80 ++++++++++++++++ .../mage/sets/futuresight/MaelstromDjinn.java | 84 +++++++++++++++++ .../src/mage/sets/iceage/BattleFrenzy.java | 74 +++++++++++++++ .../src/mage/sets/planarchaos/DeadlyGrub.java | 92 +++++++++++++++++++ Mage/src/mage/counters/CounterType.java | 5 +- 5 files changed, 333 insertions(+), 2 deletions(-) create mode 100644 Mage.Sets/src/mage/sets/coldsnap/UrsineFylgja.java create mode 100644 Mage.Sets/src/mage/sets/futuresight/MaelstromDjinn.java create mode 100644 Mage.Sets/src/mage/sets/iceage/BattleFrenzy.java create mode 100644 Mage.Sets/src/mage/sets/planarchaos/DeadlyGrub.java diff --git a/Mage.Sets/src/mage/sets/coldsnap/UrsineFylgja.java b/Mage.Sets/src/mage/sets/coldsnap/UrsineFylgja.java new file mode 100644 index 0000000000..98a464f1cb --- /dev/null +++ b/Mage.Sets/src/mage/sets/coldsnap/UrsineFylgja.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.coldsnap; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.EntersBattlefieldAbility; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.RemoveCountersSourceCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.PreventDamageToSourceEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.counters.CounterType; + +/** + * + * @author LoneFox + */ +public class UrsineFylgja extends CardImpl { + + public UrsineFylgja(UUID ownerId) { + super(ownerId, 22, "Ursine Fylgja", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{4}{W}"); + this.expansionSetCode = "CSP"; + this.subtype.add("Spirit"); + this.subtype.add("Bear"); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + // Ursine Fylgja enters the battlefield with four healing counters on it. + Effect effect = new AddCountersSourceEffect(CounterType.HEALING.createInstance(4)); + effect.setText("with four healing counters on it."); + this.addAbility(new EntersBattlefieldAbility(effect)); + // Remove a healing counter from Ursine Fylgja: Prevent the next 1 damage that would be dealt to Ursine Fylgja this turn. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new PreventDamageToSourceEffect(Duration.EndOfTurn, 1), + new RemoveCountersSourceCost(CounterType.HEALING.createInstance(1)))); + // {2}{W}: Put a healing counter on Ursine Fylgja. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new AddCountersSourceEffect(CounterType.HEALING.createInstance(1)), + new ManaCostsImpl("{2}{W}"))); + } + + public UrsineFylgja(final UrsineFylgja card) { + super(card); + } + + @Override + public UrsineFylgja copy() { + return new UrsineFylgja(this); + } +} diff --git a/Mage.Sets/src/mage/sets/futuresight/MaelstromDjinn.java b/Mage.Sets/src/mage/sets/futuresight/MaelstromDjinn.java new file mode 100644 index 0000000000..be6656f440 --- /dev/null +++ b/Mage.Sets/src/mage/sets/futuresight/MaelstromDjinn.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.futuresight; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.TurnedFaceUpSourceTriggeredAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.abilities.keyword.MorphAbility; +import mage.abilities.keyword.VanishingSacrificeAbility; +import mage.abilities.keyword.VanishingUpkeepAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.counters.CounterType; + +/** + * + * @author LoneFox + */ +public class MaelstromDjinn extends CardImpl { + + public MaelstromDjinn(UUID ownerId) { + super(ownerId, 39, "Maelstrom Djinn", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{7}{U}"); + this.expansionSetCode = "FUT"; + this.subtype.add("Djinn"); + this.power = new MageInt(5); + this.toughness = new MageInt(6); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + // Morph {2}{U} + this.addAbility(new MorphAbility(this, new ManaCostsImpl("{2}{U}"))); + // When Maelstrom Djinn is turned face up, put two time counters on it and it gains vanishing. + Ability ability = new TurnedFaceUpSourceTriggeredAbility(new AddCountersSourceEffect(CounterType.TIME.createInstance(2))); + Effect effect = new GainAbilitySourceEffect(new VanishingUpkeepAbility(0), Duration.WhileOnBattlefield); + effect.setText("and it gains vanishing"); + ability.addEffect(effect); + effect = new GainAbilitySourceEffect(new VanishingSacrificeAbility(), Duration.WhileOnBattlefield); + effect.setText(""); + ability.addEffect(effect); + this.addAbility(ability); + } + + public MaelstromDjinn(final MaelstromDjinn card) { + super(card); + } + + @Override + public MaelstromDjinn copy() { + return new MaelstromDjinn(this); + } +} diff --git a/Mage.Sets/src/mage/sets/iceage/BattleFrenzy.java b/Mage.Sets/src/mage/sets/iceage/BattleFrenzy.java new file mode 100644 index 0000000000..68353e8508 --- /dev/null +++ b/Mage.Sets/src/mage/sets/iceage/BattleFrenzy.java @@ -0,0 +1,74 @@ +/* + * 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.iceage; + +import java.util.UUID; +import mage.ObjectColor; +import mage.abilities.effects.common.continuous.BoostControlledEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.mageobject.ColorPredicate; + +/** + * + * @author LoneFox + */ +public class BattleFrenzy extends CardImpl { + + private static final FilterCreaturePermanent filter1 = new FilterCreaturePermanent("green creatures"); + private static final FilterCreaturePermanent filter2 = new FilterCreaturePermanent("nongreen creatures"); + + static { + filter1.add(new ColorPredicate(ObjectColor.GREEN)); + filter2.add(Predicates.not(new ColorPredicate(ObjectColor.GREEN))); + } + + + public BattleFrenzy(UUID ownerId) { + super(ownerId, 175, "Battle Frenzy", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{2}{R}"); + this.expansionSetCode = "ICE"; + + // Green creatures you control get +1/+1 until end of turn. + this.getSpellAbility().addEffect(new BoostControlledEffect(1, 1, Duration.EndOfTurn, filter1)); + // Nongreen creatures you control get +1/+0 until end of turn. + this.getSpellAbility().addEffect(new BoostControlledEffect(1, 0, Duration.EndOfTurn, filter2)); + } + + public BattleFrenzy(final BattleFrenzy card) { + super(card); + } + + @Override + public BattleFrenzy copy() { + return new BattleFrenzy(this); + } +} diff --git a/Mage.Sets/src/mage/sets/planarchaos/DeadlyGrub.java b/Mage.Sets/src/mage/sets/planarchaos/DeadlyGrub.java new file mode 100644 index 0000000000..6b580ad132 --- /dev/null +++ b/Mage.Sets/src/mage/sets/planarchaos/DeadlyGrub.java @@ -0,0 +1,92 @@ +/* + * 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.planarchaos; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.DiesTriggeredAbility; +import mage.abilities.common.EntersBattlefieldAbility; +import mage.abilities.condition.common.LastTimeCounterRemovedCondition; +import mage.abilities.decorator.ConditionalTriggeredAbility; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.abilities.keyword.ShroudAbility; +import mage.abilities.keyword.VanishingSacrificeAbility; +import mage.abilities.keyword.VanishingUpkeepAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.counters.CounterType; +import mage.game.permanent.token.Token; + +/** + * + * @author LoneFox + */ +public class DeadlyGrub extends CardImpl { + + public DeadlyGrub(UUID ownerId) { + super(ownerId, 69, "Deadly Grub", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{2}{B}"); + this.expansionSetCode = "PLC"; + this.subtype.add("Insect"); + this.power = new MageInt(3); + this.toughness = new MageInt(1); + + // Vanishing 3 + Ability ability = new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.TIME.createInstance(3))); + ability.setRuleVisible(false); + this.addAbility(ability); + this.addAbility(new VanishingUpkeepAbility(3)); + this.addAbility(new VanishingSacrificeAbility()); + // When Deadly Grub dies, if it had no time counters on it, put a 6/1 green Insect creature token with shroud onto the battlefield. + this.addAbility(new ConditionalTriggeredAbility(new DiesTriggeredAbility(new CreateTokenEffect(new DeadlyGrubToken(), 1)), + new LastTimeCounterRemovedCondition(), "When {this} dies, if it had no time counters on it, put a 6/1 green Insect creature token with shroud onto the battlefield.")); + } + + public DeadlyGrub(final DeadlyGrub card) { + super(card); + } + + @Override + public DeadlyGrub copy() { + return new DeadlyGrub(this); + } +} + +class DeadlyGrubToken extends Token { + DeadlyGrubToken() { + super("Insect", "6/1 green Insect creature token with shroud"); + cardType.add(CardType.CREATURE); + color.setGreen(true); + subtype.add("Insect"); + power = new MageInt(6); + toughness = new MageInt(1); + this.addAbility(ShroudAbility.getInstance()); + } +} diff --git a/Mage/src/mage/counters/CounterType.java b/Mage/src/mage/counters/CounterType.java index 9b8aee1c61..15958a9d83 100644 --- a/Mage/src/mage/counters/CounterType.java +++ b/Mage/src/mage/counters/CounterType.java @@ -33,7 +33,7 @@ package mage.counters; * @author nantuko */ public enum CounterType { - + AGE("age"), AIM("aim"), ARROWHEAD("arrowhead"), @@ -57,6 +57,7 @@ public enum CounterType { FUSE("fuse"), GOLD("gold"), HATCHLING("hatchling"), + HEALING("healing"), HOOFPRINT("hoofprint"), ICE("ice"), JAVELIN("javelin"), @@ -117,7 +118,7 @@ public enum CounterType { } /** - * Create instance of counter type with defined amount of counters of the + * Create instance of counter type with defined amount of counters of the * given type. * * @param amount amount of counters of the given type. From a906fcaefd203dd91d106aa0a4a8354189ad8b1d Mon Sep 17 00:00:00 2001 From: LoneFox Date: Tue, 18 Aug 2015 19:50:24 +0300 Subject: [PATCH 3/9] Implement some trivial creatures that can block only creatures with flying --- .../sets/darksteel/HoverguardObserver.java | 65 +++++++++++++++++ .../mage/sets/guildpact/Stratozeppelid.java | 65 +++++++++++++++++ .../mercadianmasques/RishadanAirship.java | 66 +++++++++++++++++ .../mage/sets/nemesis/BattlefieldPercher.java | 73 +++++++++++++++++++ .../src/mage/sets/nemesis/BelbesPercher.java | 65 +++++++++++++++++ .../mage/sets/nemesis/StrongholdZeppelin.java | 65 +++++++++++++++++ .../mage/sets/onslaught/AscendingAven.java | 70 ++++++++++++++++++ .../src/mage/sets/portal/CloudPirates.java | 66 +++++++++++++++++ 8 files changed, 535 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/darksteel/HoverguardObserver.java create mode 100644 Mage.Sets/src/mage/sets/guildpact/Stratozeppelid.java create mode 100644 Mage.Sets/src/mage/sets/mercadianmasques/RishadanAirship.java create mode 100644 Mage.Sets/src/mage/sets/nemesis/BattlefieldPercher.java create mode 100644 Mage.Sets/src/mage/sets/nemesis/BelbesPercher.java create mode 100644 Mage.Sets/src/mage/sets/nemesis/StrongholdZeppelin.java create mode 100644 Mage.Sets/src/mage/sets/onslaught/AscendingAven.java create mode 100644 Mage.Sets/src/mage/sets/portal/CloudPirates.java diff --git a/Mage.Sets/src/mage/sets/darksteel/HoverguardObserver.java b/Mage.Sets/src/mage/sets/darksteel/HoverguardObserver.java new file mode 100644 index 0000000000..a4f4936ee3 --- /dev/null +++ b/Mage.Sets/src/mage/sets/darksteel/HoverguardObserver.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.darksteel; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.CanBlockOnlyFlyingAbility; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author LoneFox + */ +public class HoverguardObserver extends CardImpl { + + public HoverguardObserver(UUID ownerId) { + super(ownerId, 22, "Hoverguard Observer", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{2}{U}{U}"); + this.expansionSetCode = "DST"; + this.subtype.add("Drone"); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + // Hoverguard Observer can block only creatures with flying. + this.addAbility(new CanBlockOnlyFlyingAbility()); + } + + public HoverguardObserver(final HoverguardObserver card) { + super(card); + } + + @Override + public HoverguardObserver copy() { + return new HoverguardObserver(this); + } +} diff --git a/Mage.Sets/src/mage/sets/guildpact/Stratozeppelid.java b/Mage.Sets/src/mage/sets/guildpact/Stratozeppelid.java new file mode 100644 index 0000000000..7c860d29bb --- /dev/null +++ b/Mage.Sets/src/mage/sets/guildpact/Stratozeppelid.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.guildpact; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.CanBlockOnlyFlyingAbility; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author LoneFox + */ +public class Stratozeppelid extends CardImpl { + + public Stratozeppelid(UUID ownerId) { + super(ownerId, 36, "Stratozeppelid", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{4}{U}"); + this.expansionSetCode = "GPT"; + this.subtype.add("Beast"); + this.power = new MageInt(4); + this.toughness = new MageInt(4); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + // Stratozeppelid can block only creatures with flying. + this.addAbility(new CanBlockOnlyFlyingAbility()); + } + + public Stratozeppelid(final Stratozeppelid card) { + super(card); + } + + @Override + public Stratozeppelid copy() { + return new Stratozeppelid(this); + } +} diff --git a/Mage.Sets/src/mage/sets/mercadianmasques/RishadanAirship.java b/Mage.Sets/src/mage/sets/mercadianmasques/RishadanAirship.java new file mode 100644 index 0000000000..5ea871ef1e --- /dev/null +++ b/Mage.Sets/src/mage/sets/mercadianmasques/RishadanAirship.java @@ -0,0 +1,66 @@ +/* + * 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.mercadianmasques; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.CanBlockOnlyFlyingAbility; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author LoneFox + */ +public class RishadanAirship extends CardImpl { + + public RishadanAirship(UUID ownerId) { + super(ownerId, 91, "Rishadan Airship", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{2}{U}"); + this.expansionSetCode = "MMQ"; + this.subtype.add("Human"); + this.subtype.add("Pirate"); + this.power = new MageInt(3); + this.toughness = new MageInt(1); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + // Rishadan Airship can block only creatures with flying. + this.addAbility(new CanBlockOnlyFlyingAbility()); + } + + public RishadanAirship(final RishadanAirship card) { + super(card); + } + + @Override + public RishadanAirship copy() { + return new RishadanAirship(this); + } +} diff --git a/Mage.Sets/src/mage/sets/nemesis/BattlefieldPercher.java b/Mage.Sets/src/mage/sets/nemesis/BattlefieldPercher.java new file mode 100644 index 0000000000..7d4698c545 --- /dev/null +++ b/Mage.Sets/src/mage/sets/nemesis/BattlefieldPercher.java @@ -0,0 +1,73 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.nemesis; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.CanBlockOnlyFlyingAbility; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.continuous.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.Zone; + +/** + * + * @author LoneFox + */ +public class BattlefieldPercher extends CardImpl { + + public BattlefieldPercher(UUID ownerId) { + super(ownerId, 52, "Battlefield Percher", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{3}{B}{B}"); + this.expansionSetCode = "NMS"; + this.subtype.add("Bird"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + // Battlefield Percher can block only creatures with flying. + this.addAbility(new CanBlockOnlyFlyingAbility()); + // {1}{B}: Battlefield Percher gets +1/+1 until end of turn. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(1, 1, Duration.EndOfTurn), + new ManaCostsImpl("{1}{B}"))); + } + + public BattlefieldPercher(final BattlefieldPercher card) { + super(card); + } + + @Override + public BattlefieldPercher copy() { + return new BattlefieldPercher(this); + } +} diff --git a/Mage.Sets/src/mage/sets/nemesis/BelbesPercher.java b/Mage.Sets/src/mage/sets/nemesis/BelbesPercher.java new file mode 100644 index 0000000000..cf18440b8f --- /dev/null +++ b/Mage.Sets/src/mage/sets/nemesis/BelbesPercher.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.nemesis; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.CanBlockOnlyFlyingAbility; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author LoneFox + */ +public class BelbesPercher extends CardImpl { + + public BelbesPercher(UUID ownerId) { + super(ownerId, 53, "Belbe's Percher", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{2}{B}"); + this.expansionSetCode = "NMS"; + this.subtype.add("Bird"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + // Belbe's Percher can block only creatures with flying. + this.addAbility(new CanBlockOnlyFlyingAbility()); + } + + public BelbesPercher(final BelbesPercher card) { + super(card); + } + + @Override + public BelbesPercher copy() { + return new BelbesPercher(this); + } +} diff --git a/Mage.Sets/src/mage/sets/nemesis/StrongholdZeppelin.java b/Mage.Sets/src/mage/sets/nemesis/StrongholdZeppelin.java new file mode 100644 index 0000000000..8d15644b66 --- /dev/null +++ b/Mage.Sets/src/mage/sets/nemesis/StrongholdZeppelin.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.nemesis; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.CanBlockOnlyFlyingAbility; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author LoneFox + */ +public class StrongholdZeppelin extends CardImpl { + + public StrongholdZeppelin(UUID ownerId) { + super(ownerId, 47, "Stronghold Zeppelin", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{2}{U}{U}"); + this.expansionSetCode = "NMS"; + this.subtype.add("Human"); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + // Stronghold Zeppelin can block only creatures with flying. + this.addAbility(new CanBlockOnlyFlyingAbility()); + } + + public StrongholdZeppelin(final StrongholdZeppelin card) { + super(card); + } + + @Override + public StrongholdZeppelin copy() { + return new StrongholdZeppelin(this); + } +} diff --git a/Mage.Sets/src/mage/sets/onslaught/AscendingAven.java b/Mage.Sets/src/mage/sets/onslaught/AscendingAven.java new file mode 100644 index 0000000000..f0b1e28894 --- /dev/null +++ b/Mage.Sets/src/mage/sets/onslaught/AscendingAven.java @@ -0,0 +1,70 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.onslaught; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.CanBlockOnlyFlyingAbility; +import mage.abilities.keyword.FlyingAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.keyword.MorphAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author LoneFox + */ +public class AscendingAven extends CardImpl { + + public AscendingAven(UUID ownerId) { + super(ownerId, 68, "Ascending Aven", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{2}{U}{U}"); + this.expansionSetCode = "ONS"; + this.subtype.add("Bird"); + this.subtype.add("Soldier"); + this.power = new MageInt(3); + this.toughness = new MageInt(2); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + // Ascending Aven can block only creatures with flying. + this.addAbility(new CanBlockOnlyFlyingAbility()); + // Morph {2}{U} + this.addAbility(new MorphAbility(this, new ManaCostsImpl("{2}{U}"))); + } + + public AscendingAven(final AscendingAven card) { + super(card); + } + + @Override + public AscendingAven copy() { + return new AscendingAven(this); + } +} diff --git a/Mage.Sets/src/mage/sets/portal/CloudPirates.java b/Mage.Sets/src/mage/sets/portal/CloudPirates.java new file mode 100644 index 0000000000..5635495516 --- /dev/null +++ b/Mage.Sets/src/mage/sets/portal/CloudPirates.java @@ -0,0 +1,66 @@ +/* + * 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.portal; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.CanBlockOnlyFlyingAbility; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author LoneFox + */ +public class CloudPirates extends CardImpl { + + public CloudPirates(UUID ownerId) { + super(ownerId, 47, "Cloud Pirates", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{U}"); + this.expansionSetCode = "POR"; + this.subtype.add("Human"); + this.subtype.add("Pirate"); + this.power = new MageInt(1); + this.toughness = new MageInt(1); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + // Cloud Pirates can block only creatures with flying. + this.addAbility(new CanBlockOnlyFlyingAbility()); + } + + public CloudPirates(final CloudPirates card) { + super(card); + } + + @Override + public CloudPirates copy() { + return new CloudPirates(this); + } +} From f5690e937988991498dfec7b4431307b50c33691 Mon Sep 17 00:00:00 2001 From: LoneFox Date: Tue, 18 Aug 2015 19:59:28 +0300 Subject: [PATCH 4/9] Fix card number of Alluring Scent --- Mage.Sets/src/mage/sets/portal/AlluringScent.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Mage.Sets/src/mage/sets/portal/AlluringScent.java b/Mage.Sets/src/mage/sets/portal/AlluringScent.java index fcd20fda21..7d4ac4d3f0 100644 --- a/Mage.Sets/src/mage/sets/portal/AlluringScent.java +++ b/Mage.Sets/src/mage/sets/portal/AlluringScent.java @@ -42,7 +42,7 @@ import mage.target.common.TargetCreaturePermanent; public class AlluringScent extends CardImpl { public AlluringScent(UUID ownerId) { - super(ownerId, 61, "Alluring Scent", Rarity.RARE, new CardType[]{CardType.SORCERY}, "{1}{G}{G}"); + super(ownerId, 80, "Alluring Scent", Rarity.RARE, new CardType[]{CardType.SORCERY}, "{1}{G}{G}"); this.expansionSetCode = "POR"; // All creatures able to block target creature this turn do so. From b4300708518fd2d79e4a73d4008302016cecdd06 Mon Sep 17 00:00:00 2001 From: LoneFox Date: Tue, 18 Aug 2015 21:58:41 +0300 Subject: [PATCH 5/9] Implement cards: Elvish Farmer, Elvish Scout, Mycologist, and Steam Spitter --- .../src/mage/sets/coldsnap/SteamSpitter.java | 69 ++++++++++++++ .../mage/sets/fallenempires/ElvishFarmer.java | 52 +++++++++++ .../mage/sets/fallenempires/ElvishScout1.java | 91 +++++++++++++++++++ .../mage/sets/fallenempires/ElvishScout2.java | 51 +++++++++++ .../mage/sets/fallenempires/ElvishScout3.java | 55 +++++++++++ .../sets/masterseditionii/ElvishFarmer.java | 86 ++++++++++++++++++ .../src/mage/sets/planarchaos/Mycologist.java | 87 ++++++++++++++++++ 7 files changed, 491 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/coldsnap/SteamSpitter.java create mode 100644 Mage.Sets/src/mage/sets/fallenempires/ElvishFarmer.java create mode 100644 Mage.Sets/src/mage/sets/fallenempires/ElvishScout1.java create mode 100644 Mage.Sets/src/mage/sets/fallenempires/ElvishScout2.java create mode 100644 Mage.Sets/src/mage/sets/fallenempires/ElvishScout3.java create mode 100644 Mage.Sets/src/mage/sets/masterseditionii/ElvishFarmer.java create mode 100644 Mage.Sets/src/mage/sets/planarchaos/Mycologist.java diff --git a/Mage.Sets/src/mage/sets/coldsnap/SteamSpitter.java b/Mage.Sets/src/mage/sets/coldsnap/SteamSpitter.java new file mode 100644 index 0000000000..bc75f97216 --- /dev/null +++ b/Mage.Sets/src/mage/sets/coldsnap/SteamSpitter.java @@ -0,0 +1,69 @@ +/* + * 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.coldsnap; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.continuous.BoostSourceEffect; +import mage.abilities.keyword.ReachAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; + +/** + * + * @author LoneFox + */ +public class SteamSpitter extends CardImpl { + + public SteamSpitter(UUID ownerId) { + super(ownerId, 124, "Steam Spitter", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{4}{G}"); + this.expansionSetCode = "CSP"; + this.subtype.add("Spider"); + this.power = new MageInt(1); + this.toughness = new MageInt(5); + + // Reach + this.addAbility(ReachAbility.getInstance()); + // {R}: Steam Spitter gets +1/+0 until end of turn. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(1, 0, Duration.EndOfTurn), new ManaCostsImpl("{R}"))); + } + + public SteamSpitter(final SteamSpitter card) { + super(card); + } + + @Override + public SteamSpitter copy() { + return new SteamSpitter(this); + } +} diff --git a/Mage.Sets/src/mage/sets/fallenempires/ElvishFarmer.java b/Mage.Sets/src/mage/sets/fallenempires/ElvishFarmer.java new file mode 100644 index 0000000000..6433c34c22 --- /dev/null +++ b/Mage.Sets/src/mage/sets/fallenempires/ElvishFarmer.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.fallenempires; + +import java.util.UUID; + +/** + * + * @author LoneFox + */ +public class ElvishFarmer extends mage.sets.masterseditionii.ElvishFarmer { + + public ElvishFarmer(UUID ownerId) { + super(ownerId); + this.cardNumber = 71; + this.expansionSetCode = "FEM"; + } + + public ElvishFarmer(final ElvishFarmer card) { + super(card); + } + + @Override + public ElvishFarmer copy() { + return new ElvishFarmer(this); + } +} diff --git a/Mage.Sets/src/mage/sets/fallenempires/ElvishScout1.java b/Mage.Sets/src/mage/sets/fallenempires/ElvishScout1.java new file mode 100644 index 0000000000..c8e09605ef --- /dev/null +++ b/Mage.Sets/src/mage/sets/fallenempires/ElvishScout1.java @@ -0,0 +1,91 @@ +/* + * 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.fallenempires; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.PreventDamageByTargetEffect; +import mage.abilities.effects.common.PreventDamageToTargetEffect; +import mage.abilities.effects.common.UntapTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.predicate.permanent.AttackingPredicate; +import mage.filter.predicate.permanent.AttackingPredicate; +import mage.target.common.TargetControlledCreaturePermanent; + +/** + * + * @author LoneFox + */ +public class ElvishScout1 extends CardImpl { + + private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("attacking creature you control"); + + static { + filter.add(new AttackingPredicate()); + } + + public ElvishScout1(UUID ownerId) { + super(ownerId, 75, "Elvish Scout", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{G}"); + this.expansionSetCode = "FEM"; + this.subtype.add("Elf"); + this.subtype.add("Scout"); + this.power = new MageInt(1); + this.toughness = new MageInt(1); + + // {G}, {tap}: Untap target attacking creature you control. Prevent all combat damage that would be dealt to and dealt by it this turn. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new UntapTargetEffect(), new ManaCostsImpl("{G}")); + ability.addCost(new TapSourceCost()); + Effect effect = new PreventDamageByTargetEffect(Duration.EndOfTurn, true); + effect.setText("Prevent all combat damage that would be dealt to"); + ability.addEffect(effect); + effect = new PreventDamageToTargetEffect(Duration.EndOfTurn, Integer.MAX_VALUE, true); + effect.setText("and dealt by it this turn"); + ability.addEffect(effect); + ability.addTarget(new TargetControlledCreaturePermanent(filter)); + this.addAbility(ability); + } + + public ElvishScout1(final ElvishScout1 card) { + super(card); + } + + @Override + public ElvishScout1 copy() { + return new ElvishScout1(this); + } +} diff --git a/Mage.Sets/src/mage/sets/fallenempires/ElvishScout2.java b/Mage.Sets/src/mage/sets/fallenempires/ElvishScout2.java new file mode 100644 index 0000000000..4f127a27cc --- /dev/null +++ b/Mage.Sets/src/mage/sets/fallenempires/ElvishScout2.java @@ -0,0 +1,51 @@ +/* + * 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.fallenempires; + +import java.util.UUID; + +/** + * + * @author LoneFox + */ +public class ElvishScout2 extends ElvishScout1 { + + public ElvishScout2(UUID ownerId) { + super(ownerId); + this.cardNumber = 76; + } + + public ElvishScout2(final ElvishScout2 card) { + super(card); + } + + @Override + public ElvishScout2 copy() { + return new ElvishScout2(this); + } +} diff --git a/Mage.Sets/src/mage/sets/fallenempires/ElvishScout3.java b/Mage.Sets/src/mage/sets/fallenempires/ElvishScout3.java new file mode 100644 index 0000000000..061983d0f8 --- /dev/null +++ b/Mage.Sets/src/mage/sets/fallenempires/ElvishScout3.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.fallenempires; + +import java.util.UUID; +import mage.MageInt; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author LoneFox + */ +public class ElvishScout3 extends ElvishScout1 { + + public ElvishScout3(UUID ownerId) { + super(ownerId); + this.cardNumber = 77; + } + + public ElvishScout3(final ElvishScout3 card) { + super(card); + } + + @Override + public ElvishScout3 copy() { + return new ElvishScout3(this); + } +} diff --git a/Mage.Sets/src/mage/sets/masterseditionii/ElvishFarmer.java b/Mage.Sets/src/mage/sets/masterseditionii/ElvishFarmer.java new file mode 100644 index 0000000000..3d06c738ec --- /dev/null +++ b/Mage.Sets/src/mage/sets/masterseditionii/ElvishFarmer.java @@ -0,0 +1,86 @@ +/* + * 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.masterseditionii; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.RemoveCountersSourceCost; +import mage.abilities.costs.common.SacrificeTargetCost; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.effects.common.GainLifeEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.constants.Zone; +import mage.counters.CounterType; +import mage.filter.common.FilterControlledPermanent; +import mage.filter.predicate.mageobject.SubtypePredicate; +import mage.game.permanent.token.SaprolingToken; +import mage.target.common.TargetControlledPermanent; + +/** + * + * @author LoneFox + */ +public class ElvishFarmer extends CardImpl { + + private static final FilterControlledPermanent filter = new FilterControlledPermanent("Saproling"); + + static { + filter.add(new SubtypePredicate("Saproling")); + } + + public ElvishFarmer(UUID ownerId) { + super(ownerId, 156, "Elvish Farmer", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{1}{G}"); + this.expansionSetCode = "ME2"; + this.subtype.add("Elf"); + this.power = new MageInt(0); + this.toughness = new MageInt(2); + + // At the beginning of your upkeep, put a spore counter on Elvish Farmer. + this.addAbility(new BeginningOfUpkeepTriggeredAbility(new AddCountersSourceEffect(CounterType.SPORE.createInstance()), TargetController.YOU, false)); + // Remove three spore counters from Elvish Farmer: Put a 1/1 green Saproling creature token onto the battlefield. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new SaprolingToken()), new RemoveCountersSourceCost(CounterType.SPORE.createInstance(3)))); + // Sacrifice a Saproling: You gain 2 life. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new GainLifeEffect(2), + new SacrificeTargetCost(new TargetControlledPermanent(1, 1, filter, false)))); + } + + public ElvishFarmer(final ElvishFarmer card) { + super(card); + } + + @Override + public ElvishFarmer copy() { + return new ElvishFarmer(this); + } +} diff --git a/Mage.Sets/src/mage/sets/planarchaos/Mycologist.java b/Mage.Sets/src/mage/sets/planarchaos/Mycologist.java new file mode 100644 index 0000000000..8c1d968b68 --- /dev/null +++ b/Mage.Sets/src/mage/sets/planarchaos/Mycologist.java @@ -0,0 +1,87 @@ +/* + * 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.planarchaos; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.RemoveCountersSourceCost; +import mage.abilities.costs.common.SacrificeTargetCost; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.effects.common.GainLifeEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.constants.Zone; +import mage.counters.CounterType; +import mage.filter.common.FilterControlledPermanent; +import mage.filter.predicate.mageobject.SubtypePredicate; +import mage.game.permanent.token.SaprolingToken; +import mage.target.common.TargetControlledPermanent; + +/** + * + * @author LoneFox + */ +public class Mycologist extends CardImpl { + + private static final FilterControlledPermanent filter = new FilterControlledPermanent("Saproling"); + + static { + filter.add(new SubtypePredicate("Saproling")); + } + + public Mycologist(UUID ownerId) { + super(ownerId, 27, "Mycologist", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{1}{W}"); + this.expansionSetCode = "PLC"; + this.subtype.add("Human"); + this.subtype.add("Druid"); + this.power = new MageInt(0); + this.toughness = new MageInt(2); + + // At the beginning of your upkeep, put a spore counter on Mycologist. + this.addAbility(new BeginningOfUpkeepTriggeredAbility(new AddCountersSourceEffect(CounterType.SPORE.createInstance()), TargetController.YOU, false)); + // Remove three spore counters from Mycologist: Put a 1/1 green Saproling creature token onto the battlefield. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new SaprolingToken()), new RemoveCountersSourceCost(CounterType.SPORE.createInstance(3)))); + // Sacrifice a Saproling: You gain 2 life. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new GainLifeEffect(2), + new SacrificeTargetCost(new TargetControlledPermanent(1, 1, filter, false)))); + } + + public Mycologist(final Mycologist card) { + super(card); + } + + @Override + public Mycologist copy() { + return new Mycologist(this); + } +} From 5c047cd92b40aa466b5ff06969b2c45813fa6506 Mon Sep 17 00:00:00 2001 From: LoneFox Date: Wed, 19 Aug 2015 08:00:39 +0300 Subject: [PATCH 6/9] Text fixes --- .../src/mage/sets/planarchaos/BatteringSliver.java | 2 +- Mage.Sets/src/mage/sets/planarchaos/Chronozoa.java | 4 ++-- .../src/mage/sets/planarchaos/DreamscapeArtist.java | 6 +++--- Mage.Sets/src/mage/sets/planarchaos/Ovinize.java | 5 ++++- .../src/mage/sets/planarchaos/PallidMycoderm.java | 7 +++---- .../src/mage/sets/planarchaos/PsychotropeThallid.java | 10 +++++----- .../src/mage/sets/planarchaos/VitasporeThallid.java | 10 +++++----- .../src/mage/sets/planarchaos/WistfulThinking.java | 7 ++++--- 8 files changed, 27 insertions(+), 24 deletions(-) diff --git a/Mage.Sets/src/mage/sets/planarchaos/BatteringSliver.java b/Mage.Sets/src/mage/sets/planarchaos/BatteringSliver.java index d52aa2499c..0f3880bf28 100644 --- a/Mage.Sets/src/mage/sets/planarchaos/BatteringSliver.java +++ b/Mage.Sets/src/mage/sets/planarchaos/BatteringSliver.java @@ -46,7 +46,7 @@ import mage.filter.predicate.mageobject.SubtypePredicate; */ public class BatteringSliver extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent(); + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("all Sliver creatures"); static { filter.add(new SubtypePredicate("Sliver")); diff --git a/Mage.Sets/src/mage/sets/planarchaos/Chronozoa.java b/Mage.Sets/src/mage/sets/planarchaos/Chronozoa.java index ce30729322..c3e250f828 100644 --- a/Mage.Sets/src/mage/sets/planarchaos/Chronozoa.java +++ b/Mage.Sets/src/mage/sets/planarchaos/Chronozoa.java @@ -71,8 +71,8 @@ public class Chronozoa extends CardImpl { this.addAbility(new VanishingSacrificeAbility()); // When Chronozoa is put into a graveyard from play, if it had no time counters on it, put two tokens into play that are copies of it. this.addAbility(new ConditionalTriggeredAbility(new DiesCreatureTriggeredAbility(new CopyCardEffect(this, numCopies), false), - new LastTimeCounterRemovedCondition(), - "When {this} is put into a graveyard from play, if it had no time counters on it, put two tokens into play that are copies of it.")); + new LastTimeCounterRemovedCondition(), + "When {this} dies, if it had no time counters on it, put two tokens that are copies of it onto the battlefield.")); } public Chronozoa(final Chronozoa card) { diff --git a/Mage.Sets/src/mage/sets/planarchaos/DreamscapeArtist.java b/Mage.Sets/src/mage/sets/planarchaos/DreamscapeArtist.java index 14335e8ba6..00a1cea424 100644 --- a/Mage.Sets/src/mage/sets/planarchaos/DreamscapeArtist.java +++ b/Mage.Sets/src/mage/sets/planarchaos/DreamscapeArtist.java @@ -63,12 +63,12 @@ public class DreamscapeArtist extends CardImpl { // {2}{U}, {tap}, Discard a card, Sacrifice a land: Search your library for up to two basic land cards and put them onto the battlefield. Then shuffle your library. TargetCardInLibrary target = new TargetCardInLibrary(0, 2, new FilterBasicLandCard()); Ability ability = new SimpleActivatedAbility( - Zone.BATTLEFIELD, - new SearchLibraryPutInPlayEffect(target, false, Outcome.PutLandInPlay), + Zone.BATTLEFIELD, + new SearchLibraryPutInPlayEffect(target, false, Outcome.PutLandInPlay), new ManaCostsImpl("{2}{U}")); ability.addCost(new TapSourceCost()); ability.addCost(new DiscardCardCost()); - ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent(new FilterControlledLandPermanent("land")))); + ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent(new FilterControlledLandPermanent("a land")))); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/sets/planarchaos/Ovinize.java b/Mage.Sets/src/mage/sets/planarchaos/Ovinize.java index 01a618d528..416f27cba6 100644 --- a/Mage.Sets/src/mage/sets/planarchaos/Ovinize.java +++ b/Mage.Sets/src/mage/sets/planarchaos/Ovinize.java @@ -28,6 +28,7 @@ package mage.sets.planarchaos; import java.util.UUID; +import mage.abilities.effects.Effect; import mage.abilities.effects.common.continuous.LoseAllAbilitiesTargetEffect; import mage.abilities.effects.common.continuous.SetPowerToughnessTargetEffect; import mage.cards.CardImpl; @@ -50,7 +51,9 @@ public class Ovinize extends CardImpl { // Target creature loses all abilities and becomes 0/1 until end of turn. this.getSpellAbility().addTarget(new TargetCreaturePermanent()); this.getSpellAbility().addEffect(new LoseAllAbilitiesTargetEffect(Duration.EndOfTurn)); - this.getSpellAbility().addEffect(new SetPowerToughnessTargetEffect(0, 1, Duration.EndOfTurn)); + Effect effect = new SetPowerToughnessTargetEffect(0, 1, Duration.EndOfTurn); + effect.setText("and has base power and toughness 0/1"); + this.getSpellAbility().addEffect(effect); } public Ovinize(final Ovinize card) { diff --git a/Mage.Sets/src/mage/sets/planarchaos/PallidMycoderm.java b/Mage.Sets/src/mage/sets/planarchaos/PallidMycoderm.java index 8ed3c7192a..1052c0548b 100644 --- a/Mage.Sets/src/mage/sets/planarchaos/PallidMycoderm.java +++ b/Mage.Sets/src/mage/sets/planarchaos/PallidMycoderm.java @@ -59,7 +59,7 @@ import mage.target.common.TargetControlledCreaturePermanent; public class PallidMycoderm extends CardImpl { private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Each creature you control that's a Fungus or a Saproling"); - private static final FilterControlledCreaturePermanent filterSaproling = new FilterControlledCreaturePermanent("Saproling"); + private static final FilterControlledCreaturePermanent filterSaproling = new FilterControlledCreaturePermanent("a Saproling"); static { filter.add(new ControllerPredicate(TargetController.YOU)); filter.add(Predicates.or(new SubtypePredicate("Fungus"), new SubtypePredicate("Saproling"))); @@ -79,10 +79,9 @@ public class PallidMycoderm extends CardImpl { // Remove three spore counters from Pallid Mycoderm: Put a 1/1 green Saproling creature token onto the battlefield. this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new SaprolingToken()), new RemoveCountersSourceCost(CounterType.SPORE.createInstance(3)))); // Sacrifice a Saproling: Each creature you control that's a Fungus or a Saproling gets +1/+1 until end of turn. - this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, - new BoostAllEffect(1,1,Duration.EndOfTurn, filter, false), + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, + new BoostAllEffect(1,1,Duration.EndOfTurn, filter, false), new SacrificeTargetCost(new TargetControlledCreaturePermanent(1,1,filterSaproling, false)))); - } public PallidMycoderm(final PallidMycoderm card) { diff --git a/Mage.Sets/src/mage/sets/planarchaos/PsychotropeThallid.java b/Mage.Sets/src/mage/sets/planarchaos/PsychotropeThallid.java index 19002bc550..7e5babcf3a 100644 --- a/Mage.Sets/src/mage/sets/planarchaos/PsychotropeThallid.java +++ b/Mage.Sets/src/mage/sets/planarchaos/PsychotropeThallid.java @@ -54,8 +54,8 @@ import mage.target.common.TargetControlledCreaturePermanent; * @author fireshoes */ public class PsychotropeThallid extends CardImpl { - - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("Saproling"); + + private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("a Saproling"); static { filter.add(new SubtypePredicate("Saproling")); } @@ -71,11 +71,11 @@ public class PsychotropeThallid extends CardImpl { this.addAbility(new BeginningOfUpkeepTriggeredAbility(new AddCountersSourceEffect(CounterType.SPORE.createInstance()), TargetController.YOU, false)); // Remove three spore counters from Psychotrope Thallid: Put a 1/1 green Saproling creature token onto the battlefield. this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, - new CreateTokenEffect(new SaprolingToken()), + new CreateTokenEffect(new SaprolingToken()), new RemoveCountersSourceCost(CounterType.SPORE.createInstance(3)))); // {1}, Sacrifice a Saproling: Draw a card. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, - new DrawCardSourceControllerEffect(1), + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, + new DrawCardSourceControllerEffect(1), new SacrificeTargetCost(new TargetControlledCreaturePermanent(1,1, filter, false))); ability.addCost(new GenericManaCost(1)); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/sets/planarchaos/VitasporeThallid.java b/Mage.Sets/src/mage/sets/planarchaos/VitasporeThallid.java index c9ea1e225f..0e7d29b505 100644 --- a/Mage.Sets/src/mage/sets/planarchaos/VitasporeThallid.java +++ b/Mage.Sets/src/mage/sets/planarchaos/VitasporeThallid.java @@ -56,8 +56,8 @@ import mage.target.common.TargetCreaturePermanent; * @author fireshoes */ public class VitasporeThallid extends CardImpl { - - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("Saproling"); + + private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("a Saproling"); static { filter.add(new SubtypePredicate("Saproling")); } @@ -73,11 +73,11 @@ public class VitasporeThallid extends CardImpl { this.addAbility(new BeginningOfUpkeepTriggeredAbility(new AddCountersSourceEffect(CounterType.SPORE.createInstance()), TargetController.YOU, false)); // Remove three spore counters from Vitaspore Thallid: Put a 1/1 green Saproling creature token onto the battlefield. this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, - new CreateTokenEffect(new SaprolingToken()), + new CreateTokenEffect(new SaprolingToken()), new RemoveCountersSourceCost(CounterType.SPORE.createInstance(3)))); // Sacrifice a Saproling: Target creature gains haste until end of turn. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, - new GainAbilityTargetEffect(HasteAbility.getInstance(), Duration.EndOfTurn), + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, + new GainAbilityTargetEffect(HasteAbility.getInstance(), Duration.EndOfTurn), new SacrificeTargetCost(new TargetControlledCreaturePermanent(1,1, filter, false))); ability.addTarget(new TargetCreaturePermanent()); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/sets/planarchaos/WistfulThinking.java b/Mage.Sets/src/mage/sets/planarchaos/WistfulThinking.java index 021d6e01b3..b662e319be 100644 --- a/Mage.Sets/src/mage/sets/planarchaos/WistfulThinking.java +++ b/Mage.Sets/src/mage/sets/planarchaos/WistfulThinking.java @@ -28,6 +28,7 @@ package mage.sets.planarchaos; import java.util.UUID; +import mage.abilities.effects.Effect; import mage.abilities.effects.common.DrawCardTargetEffect; import mage.abilities.effects.common.discard.DiscardTargetEffect; import mage.cards.CardImpl; @@ -44,12 +45,12 @@ public class WistfulThinking extends CardImpl { public WistfulThinking(UUID ownerId) { super(ownerId, 53, "Wistful Thinking", Rarity.COMMON, new CardType[]{CardType.SORCERY}, "{2}{U}"); this.expansionSetCode = "PLC"; - - // Target player draws two cards, then discards four cards. this.getSpellAbility().addEffect(new DrawCardTargetEffect(2)); - this.getSpellAbility().addEffect(new DiscardTargetEffect(4)); + Effect effect = new DiscardTargetEffect(4); + effect.setText(", then discards four cards"); + this.getSpellAbility().addEffect(effect); this.getSpellAbility().addTarget(new TargetPlayer()); } From 7db4a8b09de5e537a36d8a4e4f5d3e3902200a06 Mon Sep 17 00:00:00 2001 From: LoneFox Date: Wed, 19 Aug 2015 08:31:01 +0300 Subject: [PATCH 7/9] Text fixes --- .../src/mage/sets/archenemy/SpinIntoMyth.java | 2 +- .../src/mage/sets/futuresight/CloudKey.java | 38 +++++++++---------- .../sets/futuresight/GoldmeadowLookout.java | 4 +- .../mage/sets/futuresight/LymphSliver.java | 9 +++-- .../mage/sets/futuresight/SliverLegion.java | 4 +- .../sets/jacevschandra/KeldonMegaliths.java | 2 +- .../abilities/keyword/TransmuteAbility.java | 4 +- 7 files changed, 32 insertions(+), 31 deletions(-) diff --git a/Mage.Sets/src/mage/sets/archenemy/SpinIntoMyth.java b/Mage.Sets/src/mage/sets/archenemy/SpinIntoMyth.java index a06b14131b..2d0e7b1cc4 100644 --- a/Mage.Sets/src/mage/sets/archenemy/SpinIntoMyth.java +++ b/Mage.Sets/src/mage/sets/archenemy/SpinIntoMyth.java @@ -50,7 +50,7 @@ public class SpinIntoMyth extends CardImpl { this.getSpellAbility().addEffect(new PutOnLibraryTargetEffect(true)); this.getSpellAbility().addTarget(new TargetCreaturePermanent()); Effect effect = new FatesealEffect(2); - effect.setText("then fateseal 2. (To fateseal 2, look at the top two cards of an opponent's library, then put any number of them on the bottom of that player's library and the rest on top in any order.)"); + effect.setText(", then fateseal 2. (To fateseal 2, look at the top two cards of an opponent's library, then put any number of them on the bottom of that player's library and the rest on top in any order.)"); this.getSpellAbility().addEffect(effect); } diff --git a/Mage.Sets/src/mage/sets/futuresight/CloudKey.java b/Mage.Sets/src/mage/sets/futuresight/CloudKey.java index aa721aee04..7fc55b9445 100644 --- a/Mage.Sets/src/mage/sets/futuresight/CloudKey.java +++ b/Mage.Sets/src/mage/sets/futuresight/CloudKey.java @@ -31,45 +31,45 @@ import mage.util.CardUtil; * @author nick.myers */ public class CloudKey extends CardImpl { - + public CloudKey(UUID ownerId) { super(ownerId, 160, "Cloud Key", Rarity.RARE, new CardType[]{CardType.ARTIFACT}, "{3}"); this.expansionSetCode = "FUT"; - - // As Cloud Key enters the battlefield, choose artifact, creature, + + // As Cloud Key enters the battlefield, choose artifact, creature, // enchantment, instant, or sorcery. this.addAbility(new AsEntersBattlefieldAbility(new CloudKeyChooseTypeEffect())); - + // Spells of the chosen type cost {1} less to cast this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new CloudKeyCostModificationEffect())); } - + @Override public CloudKey copy() { return new CloudKey(this); } - + public CloudKey(final CloudKey card) { super(card); } } class CloudKeyChooseTypeEffect extends OneShotEffect { - + public CloudKeyChooseTypeEffect() { super(Outcome.Neutral); - this.staticText = "Choose a spell type"; + this.staticText = "choose artifact, creature, enchantment, instant, or sorcery."; } - + public CloudKeyChooseTypeEffect(final CloudKeyChooseTypeEffect effect) { super(effect); } - + @Override public CloudKeyChooseTypeEffect copy() { return new CloudKeyChooseTypeEffect(this); } - + @Override public boolean apply(Game game, Ability source) { Player controller = game.getPlayer(source.getControllerId()); @@ -90,20 +90,20 @@ class CloudKeyChooseTypeEffect extends OneShotEffect { } return false; } - + } class CloudKeyCostModificationEffect extends CostModificationEffectImpl { public CloudKeyCostModificationEffect() { super(Duration.WhileOnBattlefield, Outcome.Benefit, CostModificationType.REDUCE_COST); - this.staticText = "choose artifact, creature, enchantment, instant, or sorcery. Spells of the chosen type cost {1} less to cast."; + this.staticText = "Spells of the chosen type cost {1} less to cast."; } - + public CloudKeyCostModificationEffect(final CloudKeyCostModificationEffect effect) { super(effect); } - + @Override public CloudKeyCostModificationEffect copy() { return new CloudKeyCostModificationEffect(this); @@ -118,15 +118,15 @@ class CloudKeyCostModificationEffect extends CostModificationEffectImpl { @Override public boolean applies(Ability abilityToModify, Ability source, Game game) { - + if (abilityToModify instanceof SpellAbility && abilityToModify.getControllerId().equals(source.getControllerId())) { Card card = game.getCard(abilityToModify.getSourceId()); - if (card.getCardType().toString().contains((String) game.getState().getValue(source.getSourceId().toString() + "_CloudKey"))) { + if (card.getCardType().toString().contains((String) game.getState().getValue(source.getSourceId().toString() + "_CloudKey"))) { return true; } } - + return false; - } + } } diff --git a/Mage.Sets/src/mage/sets/futuresight/GoldmeadowLookout.java b/Mage.Sets/src/mage/sets/futuresight/GoldmeadowLookout.java index c3471c3316..418a57608a 100644 --- a/Mage.Sets/src/mage/sets/futuresight/GoldmeadowLookout.java +++ b/Mage.Sets/src/mage/sets/futuresight/GoldmeadowLookout.java @@ -77,7 +77,7 @@ public class GoldmeadowLookout extends CardImpl { class GoldmeadowHarrierToken extends Token { public GoldmeadowHarrierToken() { - super("Goldmeadow Harrier", "1/1 white Kithkin Soldier creature token named Goldmeadow Harrier with \"{W}, {tap}: Tap target creature.\""); + super("Goldmeadow Harrier", "1/1 white Kithkin Soldier creature token named Goldmeadow Harrier with \"{W}, {T}: Tap target creature.\""); this.setOriginalExpansionSetCode("FUT"); cardType.add(CardType.CREATURE); color.setWhite(true); @@ -91,4 +91,4 @@ class GoldmeadowHarrierToken extends Token { ability.addTarget(new TargetCreaturePermanent()); this.addAbility(ability); } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/sets/futuresight/LymphSliver.java b/Mage.Sets/src/mage/sets/futuresight/LymphSliver.java index 3d9afb08a2..8af8bdb81d 100644 --- a/Mage.Sets/src/mage/sets/futuresight/LymphSliver.java +++ b/Mage.Sets/src/mage/sets/futuresight/LymphSliver.java @@ -45,7 +45,7 @@ import mage.filter.common.FilterCreaturePermanent; * @author anonymous */ public class LymphSliver extends CardImpl { - + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Sliver", "All Sliver creatures"); public LymphSliver(UUID ownerId) { @@ -57,7 +57,8 @@ public class LymphSliver extends CardImpl { // All Sliver creatures have absorb 1. Ability absorb = new SimpleStaticAbility(Zone.BATTLEFIELD, new SliverAbsorbEffect()); - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAllEffect(absorb, Duration.WhileOnBattlefield, filter, "absorb 1. (If a source would deal damage to a Sliver, prevent 1 of that damage.)"))); + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAllEffect(absorb, + Duration.WhileOnBattlefield, filter, "All Sliver creatures have absorb 1. (If a source would deal damage to a Sliver, prevent 1 of that damage.)"))); } public LymphSliver(final LymphSliver card) { @@ -73,7 +74,7 @@ public class LymphSliver extends CardImpl { class SliverAbsorbEffect extends PreventionEffectImpl { public SliverAbsorbEffect() { super(Duration.WhileOnBattlefield, 1, false, false); - this.staticText = "If a source would deal damage to a Sliver, prevent 1 of that damage"; + this.staticText = "Absorb 1 (If a source would deal damage to this creature, prevent 1 of that damage.)"; } public SliverAbsorbEffect(SliverAbsorbEffect effect) { @@ -84,4 +85,4 @@ class SliverAbsorbEffect extends PreventionEffectImpl { public SliverAbsorbEffect copy() { return new SliverAbsorbEffect(this); } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/sets/futuresight/SliverLegion.java b/Mage.Sets/src/mage/sets/futuresight/SliverLegion.java index 853b5983b1..094ec9968d 100644 --- a/Mage.Sets/src/mage/sets/futuresight/SliverLegion.java +++ b/Mage.Sets/src/mage/sets/futuresight/SliverLegion.java @@ -47,9 +47,9 @@ import mage.filter.predicate.permanent.AnotherPredicate; */ public class SliverLegion extends CardImpl { - + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Sliver", "All Sliver creatures"); - private static final FilterPermanent countfilter = new FilterPermanent("Sliver","each other sliver"); + private static final FilterPermanent countfilter = new FilterPermanent("Sliver", " for each other Sliver on the battlefield"); static { countfilter.add(new AnotherPredicate()); diff --git a/Mage.Sets/src/mage/sets/jacevschandra/KeldonMegaliths.java b/Mage.Sets/src/mage/sets/jacevschandra/KeldonMegaliths.java index c1ffdf3b87..33133b6bbb 100644 --- a/Mage.Sets/src/mage/sets/jacevschandra/KeldonMegaliths.java +++ b/Mage.Sets/src/mage/sets/jacevschandra/KeldonMegaliths.java @@ -57,7 +57,7 @@ public class KeldonMegaliths extends CardImpl { this.addAbility(new RedManaAbility()); // Hellbent - {1}{R}, {tap}: Keldon Megaliths deals 1 damage to target creature or player. Activate this ability only if you have no cards in hand. Ability ability = new ConditionalActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(1), new ManaCostsImpl<>("{1}{R}"), HellbentCondition.getInstance(), - "Hellbent - {1}{R}, {tap}: {this} deals 1 damage to target creature or player. Activate this ability only if you have no cards in hand."); + "Hellbent — {1}{R}, {T}: {this} deals 1 damage to target creature or player. Activate this ability only if you have no cards in hand."); ability.addTarget(new TargetCreatureOrPlayer()); this.addAbility(ability); } diff --git a/Mage/src/mage/abilities/keyword/TransmuteAbility.java b/Mage/src/mage/abilities/keyword/TransmuteAbility.java index f4b095ea41..c861d23621 100644 --- a/Mage/src/mage/abilities/keyword/TransmuteAbility.java +++ b/Mage/src/mage/abilities/keyword/TransmuteAbility.java @@ -57,8 +57,8 @@ public class TransmuteAbility extends SimpleActivatedAbility { @Override public String getRule() { return new StringBuilder("Transmute ").append(this.getManaCosts().getText()) - .append(" (").append(this.getManaCosts().getText()) - .append(", Discard this card: Search your library for a card with the same converted mana cost as this card, reveal it, and put it into your hand. Then shuffle your library. Transmute only as a sorcery.)").toString(); + .append(" (").append(this.getManaCosts().getText()) + .append(", Discard this card: Search your library for a card with the same converted mana cost as this card, reveal it, and put it into your hand. Then shuffle your library. Transmute only as a sorcery.)").toString(); } } From 826ad21f03af53e0d43c22d607d50ca09a431867 Mon Sep 17 00:00:00 2001 From: LoneFox Date: Wed, 19 Aug 2015 08:53:23 +0300 Subject: [PATCH 8/9] Implement cards: Drifter il-Dal, Soltari Crusader, Soltari Foot Soldier, and Thalakos Sentry. Fix the text of Soltari Lancer. --- .../mage/sets/tempest/SoltariCrusader.java | 70 +++++++++++++++++++ .../mage/sets/tempest/SoltariFootSoldier.java | 63 +++++++++++++++++ .../src/mage/sets/tempest/ThalakosSentry.java | 63 +++++++++++++++++ .../sets/tempestremastered/SoltariLancer.java | 6 +- .../mage/sets/timespiral/DrifterIlDal.java | 69 ++++++++++++++++++ 5 files changed, 268 insertions(+), 3 deletions(-) create mode 100644 Mage.Sets/src/mage/sets/tempest/SoltariCrusader.java create mode 100644 Mage.Sets/src/mage/sets/tempest/SoltariFootSoldier.java create mode 100644 Mage.Sets/src/mage/sets/tempest/ThalakosSentry.java create mode 100644 Mage.Sets/src/mage/sets/timespiral/DrifterIlDal.java diff --git a/Mage.Sets/src/mage/sets/tempest/SoltariCrusader.java b/Mage.Sets/src/mage/sets/tempest/SoltariCrusader.java new file mode 100644 index 0000000000..18f8c63619 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempest/SoltariCrusader.java @@ -0,0 +1,70 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempest; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.continuous.BoostSourceEffect; +import mage.abilities.keyword.ShadowAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; + +/** + * + * @author LoneFox + */ +public class SoltariCrusader extends CardImpl { + + public SoltariCrusader(UUID ownerId) { + super(ownerId, 253, "Soltari Crusader", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{2}{W}"); + this.expansionSetCode = "TMP"; + this.subtype.add("Soltari"); + this.subtype.add("Knight"); + this.power = new MageInt(2); + this.toughness = new MageInt(1); + + // Shadow + this.addAbility(ShadowAbility.getInstance()); + // {1}{W}: Soltari Crusader gets +1/+0 until end of turn. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(1, 0, Duration.EndOfTurn), new ManaCostsImpl("{1}{W}"))); + } + + public SoltariCrusader(final SoltariCrusader card) { + super(card); + } + + @Override + public SoltariCrusader copy() { + return new SoltariCrusader(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempest/SoltariFootSoldier.java b/Mage.Sets/src/mage/sets/tempest/SoltariFootSoldier.java new file mode 100644 index 0000000000..f0b128975e --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempest/SoltariFootSoldier.java @@ -0,0 +1,63 @@ +/* + * 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.MageInt; +import mage.abilities.keyword.ShadowAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author LoneFox + */ +public class SoltariFootSoldier extends CardImpl { + + public SoltariFootSoldier(UUID ownerId) { + super(ownerId, 255, "Soltari Foot Soldier", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{W}"); + this.expansionSetCode = "TMP"; + this.subtype.add("Soltari"); + this.subtype.add("Soldier"); + this.power = new MageInt(1); + this.toughness = new MageInt(1); + + // Shadow + this.addAbility(ShadowAbility.getInstance()); + } + + public SoltariFootSoldier(final SoltariFootSoldier card) { + super(card); + } + + @Override + public SoltariFootSoldier copy() { + return new SoltariFootSoldier(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempest/ThalakosSentry.java b/Mage.Sets/src/mage/sets/tempest/ThalakosSentry.java new file mode 100644 index 0000000000..1385e54002 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempest/ThalakosSentry.java @@ -0,0 +1,63 @@ +/* + * 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.MageInt; +import mage.abilities.keyword.ShadowAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author LoneFox + */ +public class ThalakosSentry extends CardImpl { + + public ThalakosSentry(UUID ownerId) { + super(ownerId, 95, "Thalakos Sentry", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{1}{U}"); + this.expansionSetCode = "TMP"; + this.subtype.add("Thalakos"); + this.subtype.add("Soldier"); + this.power = new MageInt(1); + this.toughness = new MageInt(2); + + // Shadow + this.addAbility(ShadowAbility.getInstance()); + } + + public ThalakosSentry(final ThalakosSentry card) { + super(card); + } + + @Override + public ThalakosSentry copy() { + return new ThalakosSentry(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/SoltariLancer.java b/Mage.Sets/src/mage/sets/tempestremastered/SoltariLancer.java index 45b9b6bde0..cd106458ba 100644 --- a/Mage.Sets/src/mage/sets/tempestremastered/SoltariLancer.java +++ b/Mage.Sets/src/mage/sets/tempestremastered/SoltariLancer.java @@ -46,8 +46,8 @@ import mage.filter.common.FilterAttackingCreature; * @author fireshoes */ public class SoltariLancer extends CardImpl { - - private static final String rule = "Spirit of the Night has first strike as long as it's attacking"; + + private static final String rule = "{this} has first strike as long as it's attacking"; public SoltariLancer(UUID ownerId) { super(ownerId, 30, "Soltari Lancer", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{2}{W}"); @@ -59,7 +59,7 @@ public class SoltariLancer extends CardImpl { // Shadow this.addAbility(ShadowAbility.getInstance()); - + // Soltari Lancer has first strike as long as it's attacking. ConditionalContinuousEffect effect = new ConditionalContinuousEffect(new GainAbilitySourceEffect(FirstStrikeAbility.getInstance()), new SourceMatchesFilterCondition(new FilterAttackingCreature()), rule); this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect)); diff --git a/Mage.Sets/src/mage/sets/timespiral/DrifterIlDal.java b/Mage.Sets/src/mage/sets/timespiral/DrifterIlDal.java new file mode 100644 index 0000000000..464fbe54cc --- /dev/null +++ b/Mage.Sets/src/mage/sets/timespiral/DrifterIlDal.java @@ -0,0 +1,69 @@ +/* + * 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.timespiral; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.SacrificeSourceUnlessPaysEffect; +import mage.abilities.keyword.ShadowAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.TargetController; + +/** + * + * @author LoneFox + */ +public class DrifterIlDal extends CardImpl { + + public DrifterIlDal(UUID ownerId) { + super(ownerId, 59, "Drifter il-Dal", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{U}"); + this.expansionSetCode = "TSP"; + this.subtype.add("Human"); + this.subtype.add("Wizard"); + this.power = new MageInt(2); + this.toughness = new MageInt(1); + + // Shadow + this.addAbility(ShadowAbility.getInstance()); + // At the beginning of your upkeep, sacrifice Drifter il-Dal unless you pay {U}. + this.addAbility(new BeginningOfUpkeepTriggeredAbility(new SacrificeSourceUnlessPaysEffect(new ManaCostsImpl("{U}")), TargetController.YOU, false)); + } + + public DrifterIlDal(final DrifterIlDal card) { + super(card); + } + + @Override + public DrifterIlDal copy() { + return new DrifterIlDal(this); + } +} From fcb64de1fd9372f54c791147b4bb63cce6feb167 Mon Sep 17 00:00:00 2001 From: LoneFox Date: Wed, 19 Aug 2015 09:00:22 +0300 Subject: [PATCH 9/9] Fix Deathgrip --- Mage.Sets/src/mage/sets/limitedbeta/Deathgrip.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/Mage.Sets/src/mage/sets/limitedbeta/Deathgrip.java b/Mage.Sets/src/mage/sets/limitedbeta/Deathgrip.java index 7d7bb2a9ce..725a31bd53 100644 --- a/Mage.Sets/src/mage/sets/limitedbeta/Deathgrip.java +++ b/Mage.Sets/src/mage/sets/limitedbeta/Deathgrip.java @@ -29,10 +29,14 @@ package mage.sets.limitedbeta; import java.util.UUID; import mage.ObjectColor; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.common.CounterTargetEffect; import mage.cards.CardImpl; import mage.constants.CardType; import mage.constants.Rarity; +import mage.constants.Zone; import mage.filter.FilterSpell; import mage.filter.predicate.mageobject.ColorPredicate; import mage.target.TargetSpell; @@ -46,14 +50,15 @@ public class Deathgrip extends CardImpl { static{ filter.add(new ColorPredicate(ObjectColor.GREEN)); } - + public Deathgrip(UUID ownerId) { super(ownerId, 9, "Deathgrip", Rarity.UNCOMMON, new CardType[]{CardType.ENCHANTMENT}, "{B}{B}"); this.expansionSetCode = "LEB"; // {B}{B}: Counter target green spell. - this.getSpellAbility().addEffect(new CounterTargetEffect()); - this.getSpellAbility().addTarget(new TargetSpell(filter)); + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CounterTargetEffect(), new ManaCostsImpl("{B}{B}")); + ability.addTarget(new TargetSpell(filter)); + this.addAbility(ability); } public Deathgrip(final Deathgrip card) {