From 2ff213ca32d4567d143770afd18ccbe9118b21ff Mon Sep 17 00:00:00 2001 From: Jeff Date: Sun, 30 Jun 2013 18:17:19 -0500 Subject: [PATCH] - Added Fight to the Death, Giant Ambush Beetle, Jund Hackblade, Morbid Bloom, and Slave of Boras. --- .../sets/alarareborn/FightToTheDeath.java | 74 ++++++++++++ .../sets/alarareborn/GiantAmbushBeetle.java | 76 +++++++++++++ .../mage/sets/alarareborn/JundHackblade.java | 94 +++++++++++++++ .../mage/sets/alarareborn/MorbidBloom.java | 99 ++++++++++++++++ .../mage/sets/alarareborn/SlaveOfBolas.java | 107 ++++++++++++++++++ 5 files changed, 450 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/alarareborn/FightToTheDeath.java create mode 100644 Mage.Sets/src/mage/sets/alarareborn/GiantAmbushBeetle.java create mode 100644 Mage.Sets/src/mage/sets/alarareborn/JundHackblade.java create mode 100644 Mage.Sets/src/mage/sets/alarareborn/MorbidBloom.java create mode 100644 Mage.Sets/src/mage/sets/alarareborn/SlaveOfBolas.java diff --git a/Mage.Sets/src/mage/sets/alarareborn/FightToTheDeath.java b/Mage.Sets/src/mage/sets/alarareborn/FightToTheDeath.java new file mode 100644 index 00000000000..ec1a209022e --- /dev/null +++ b/Mage.Sets/src/mage/sets/alarareborn/FightToTheDeath.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.alarareborn; + +import java.util.UUID; +import mage.abilities.effects.common.DestroyAllEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.permanent.BlockedPredicate; +import mage.filter.predicate.permanent.BlockingPredicate; + +/** + * + * @author jeffwadsworth + */ +public class FightToTheDeath extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("all blocking creatures and all blocked creatures"); + + static { + filter.add(Predicates.or( + new BlockingPredicate(), + new BlockedPredicate())); + } + + public FightToTheDeath(UUID ownerId) { + super(ownerId, 97, "Fight to the Death", Rarity.RARE, new CardType[]{CardType.INSTANT}, "{R}{W}"); + this.expansionSetCode = "ARB"; + + this.color.setRed(true); + this.color.setWhite(true); + + // Destroy all blocking creatures and all blocked creatures. + this.getSpellAbility().addEffect(new DestroyAllEffect(filter)); + + } + + public FightToTheDeath(final FightToTheDeath card) { + super(card); + } + + @Override + public FightToTheDeath copy() { + return new FightToTheDeath(this); + } +} diff --git a/Mage.Sets/src/mage/sets/alarareborn/GiantAmbushBeetle.java b/Mage.Sets/src/mage/sets/alarareborn/GiantAmbushBeetle.java new file mode 100644 index 00000000000..9df5d196445 --- /dev/null +++ b/Mage.Sets/src/mage/sets/alarareborn/GiantAmbushBeetle.java @@ -0,0 +1,76 @@ +/* + * 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.alarareborn; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.effects.common.MustBlockSourceTargetEffect; +import mage.abilities.keyword.HasteAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author jeffwadsworth + */ +public class GiantAmbushBeetle extends CardImpl { + + public GiantAmbushBeetle(UUID ownerId) { + super(ownerId, 137, "Giant Ambush Beetle", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{3}{B/G}{R}"); + this.expansionSetCode = "ARB"; + this.subtype.add("Insect"); + + this.color.setRed(true); + this.color.setGreen(true); + this.color.setBlack(true); + this.power = new MageInt(4); + this.toughness = new MageInt(3); + + // Haste + this.addAbility(HasteAbility.getInstance()); + + // When Giant Ambush Beetle enters the battlefield, you may have target creature block it this turn if able. + Ability ability = new EntersBattlefieldTriggeredAbility(new MustBlockSourceTargetEffect(Duration.EndOfTurn), true); + ability.addTarget(new TargetCreaturePermanent()); + this.addAbility(ability); + } + + public GiantAmbushBeetle(final GiantAmbushBeetle card) { + super(card); + } + + @Override + public GiantAmbushBeetle copy() { + return new GiantAmbushBeetle(this); + } +} diff --git a/Mage.Sets/src/mage/sets/alarareborn/JundHackblade.java b/Mage.Sets/src/mage/sets/alarareborn/JundHackblade.java new file mode 100644 index 00000000000..4770275636c --- /dev/null +++ b/Mage.Sets/src/mage/sets/alarareborn/JundHackblade.java @@ -0,0 +1,94 @@ +/* + * 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.alarareborn; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.condition.common.ControlsPermanentCondition; +import mage.abilities.decorator.ConditionalContinousEffect; +import mage.abilities.effects.common.continious.BoostSourceEffect; +import mage.abilities.effects.common.continious.GainAbilitySourceEffect; +import mage.abilities.keyword.HasteAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.predicate.mageobject.MulticoloredPredicate; +import mage.filter.predicate.permanent.AnotherPredicate; + +/** + * + * @author jeffwadsworth + */ +public class JundHackblade extends CardImpl { + + private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("another multicolor permanent"); + + static { + filter.add(new MulticoloredPredicate()); + filter.add(new AnotherPredicate()); + } + + public JundHackblade(UUID ownerId) { + super(ownerId, 138, "Jund Hackblade", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{B/G}{R}"); + this.expansionSetCode = "ARB"; + this.subtype.add("Goblin"); + this.subtype.add("Berserker"); + + this.color.setRed(true); + this.color.setGreen(true); + this.color.setBlack(true); + this.power = new MageInt(2); + this.toughness = new MageInt(1); + + // As long as you control another multicolored permanent, Jund Hackblade gets +1/+1 and has haste. + Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinousEffect( + new BoostSourceEffect(1,1, Duration.WhileOnBattlefield), + new ControlsPermanentCondition(filter), + "As long as you control another multicolored permanent, {this} gets +1/+1")); + Ability ability2 = new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinousEffect( + new GainAbilitySourceEffect(HasteAbility.getInstance()), + new ControlsPermanentCondition(filter), + "As long as you control another multicolored permanent, {this} has haste")); + this.addAbility(ability); + this.addAbility(ability2); + } + + public JundHackblade(final JundHackblade card) { + super(card); + } + + @Override + public JundHackblade copy() { + return new JundHackblade(this); + } +} diff --git a/Mage.Sets/src/mage/sets/alarareborn/MorbidBloom.java b/Mage.Sets/src/mage/sets/alarareborn/MorbidBloom.java new file mode 100644 index 00000000000..a957e306c1f --- /dev/null +++ b/Mage.Sets/src/mage/sets/alarareborn/MorbidBloom.java @@ -0,0 +1,99 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.alarareborn; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.effects.OneShotEffect; +import mage.cards.Card; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.filter.common.FilterCreatureCard; +import mage.game.Game; +import mage.game.permanent.token.SaprolingToken; +import mage.target.common.TargetCardInGraveyard; + +/** + * + * @author jeffwadsworth + */ +public class MorbidBloom extends CardImpl { + + public MorbidBloom(UUID ownerId) { + super(ownerId, 94, "Morbid Bloom", Rarity.UNCOMMON, new CardType[]{CardType.SORCERY}, "{4}{B}{G}"); + this.expansionSetCode = "ARB"; + + this.color.setGreen(true); + this.color.setBlack(true); + + // Exile target creature card from a graveyard, then put X 1/1 green Saproling creature tokens onto the battlefield, where X is the exiled card's toughness. + this.getSpellAbility().addEffect(new MorbidBloomEffect()); + this.getSpellAbility().addTarget(new TargetCardInGraveyard(new FilterCreatureCard("creature from a graveyard"))); + + } + + public MorbidBloom(final MorbidBloom card) { + super(card); + } + + @Override + public MorbidBloom copy() { + return new MorbidBloom(this); + } +} + +class MorbidBloomEffect extends OneShotEffect { + + public MorbidBloomEffect() { + super(Outcome.PutCreatureInPlay); + staticText = "Exile target creature card from a graveyard, then put X 1/1 green Saproling creature tokens onto the battlefield, where X is the exiled card's toughness"; + } + + public MorbidBloomEffect(final MorbidBloomEffect effect) { + super(effect); + } + + @Override + public MorbidBloomEffect copy() { + return new MorbidBloomEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Card targetCreatureCard = game.getCard(source.getFirstTarget()); + if (targetCreatureCard != null) { + targetCreatureCard.moveToExile(null, null, source.getId(), game); + int toughness = targetCreatureCard.getToughness().getValue(); + SaprolingToken token = new SaprolingToken(); + return token.putOntoBattlefield(toughness, game, source.getId(), source.getControllerId()); + } + return false; + } +} diff --git a/Mage.Sets/src/mage/sets/alarareborn/SlaveOfBolas.java b/Mage.Sets/src/mage/sets/alarareborn/SlaveOfBolas.java new file mode 100644 index 00000000000..07b7caaf8d0 --- /dev/null +++ b/Mage.Sets/src/mage/sets/alarareborn/SlaveOfBolas.java @@ -0,0 +1,107 @@ +/* + * 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.alarareborn; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.DelayedTriggeredAbility; +import mage.abilities.common.delayed.AtEndOfTurnDelayedTriggeredAbility; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.SacrificeTargetEffect; +import mage.abilities.effects.common.UntapTargetEffect; +import mage.abilities.effects.common.continious.GainAbilityTargetEffect; +import mage.abilities.effects.common.continious.GainControlTargetEffect; +import mage.abilities.keyword.HasteAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.game.Game; +import mage.target.common.TargetCreaturePermanent; +import mage.target.targetpointer.FixedTarget; + +/** + * + * @author jeffwadsworth + */ +public class SlaveOfBolas extends CardImpl { + + public SlaveOfBolas(UUID ownerId) { + super(ownerId, 136, "Slave of Bolas", Rarity.UNCOMMON, new CardType[]{CardType.SORCERY}, "{3}{U/R}{B}"); + this.expansionSetCode = "ARB"; + + this.color.setRed(true); + this.color.setBlue(true); + this.color.setBlack(true); + + // Gain control of target creature. Untap that creature. It gains haste until end of turn. Sacrifice it at the beginning of the next end step. + this.getSpellAbility().addEffect(new GainControlTargetEffect(Duration.EndOfTurn)); + this.getSpellAbility().addEffect(new UntapTargetEffect()); + this.getSpellAbility().addEffect(new GainAbilityTargetEffect(HasteAbility.getInstance(), Duration.EndOfTurn)); + this.getSpellAbility().addEffect(new SlaveOfBolasEffect()); + this.getSpellAbility().addTarget(new TargetCreaturePermanent()); + } + + public SlaveOfBolas(final SlaveOfBolas card) { + super(card); + } + + @Override + public SlaveOfBolas copy() { + return new SlaveOfBolas(this); + } +} + +class SlaveOfBolasEffect extends OneShotEffect { + + public SlaveOfBolasEffect() { + super(Outcome.Sacrifice); + staticText = "Sacrifice it at the beginning of the next end step"; + } + + public SlaveOfBolasEffect(final SlaveOfBolasEffect effect) { + super(effect); + } + + @Override + public SlaveOfBolasEffect copy() { + return new SlaveOfBolasEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + SacrificeTargetEffect sacrificeEffect = new SacrificeTargetEffect("sacrifice this"); + sacrificeEffect.setTargetPointer(new FixedTarget(source.getFirstTarget())); + DelayedTriggeredAbility delayedAbility = new AtEndOfTurnDelayedTriggeredAbility(sacrificeEffect); + delayedAbility.setSourceId(source.getSourceId()); + delayedAbility.setControllerId(source.getControllerId()); + game.addDelayedTriggeredAbility(delayedAbility); + return true; + } +}