From b28cbf9046a355444878f1bacf77045294291903 Mon Sep 17 00:00:00 2001 From: Jeff Date: Fri, 16 Jan 2015 22:30:10 -0600 Subject: [PATCH] - FRF Added Atarka, World Render, Renowned Weaponsmith, Shockmaw Dragon, Temur Battle Rage, Vaultbreaker, and Wild Slash. Did not get to test these well; will do so ASAP. Just wanted to get them commited before launch. --- .../sets/fatereforged/AtarkaWorldRender.java | 127 ++++++++++++++ .../fatereforged/RenownedWeaponsmith.java | 164 ++++++++++++++++++ .../sets/fatereforged/ShockmawDragon.java | 105 +++++++++++ .../sets/fatereforged/TemurBattleRage.java | 71 ++++++++ .../mage/sets/fatereforged/Vaultbreaker.java | 104 +++++++++++ .../src/mage/sets/fatereforged/WildSlash.java | 108 ++++++++++++ 6 files changed, 679 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/fatereforged/AtarkaWorldRender.java create mode 100644 Mage.Sets/src/mage/sets/fatereforged/RenownedWeaponsmith.java create mode 100644 Mage.Sets/src/mage/sets/fatereforged/ShockmawDragon.java create mode 100644 Mage.Sets/src/mage/sets/fatereforged/TemurBattleRage.java create mode 100644 Mage.Sets/src/mage/sets/fatereforged/Vaultbreaker.java create mode 100644 Mage.Sets/src/mage/sets/fatereforged/WildSlash.java diff --git a/Mage.Sets/src/mage/sets/fatereforged/AtarkaWorldRender.java b/Mage.Sets/src/mage/sets/fatereforged/AtarkaWorldRender.java new file mode 100644 index 0000000000..afa4b698a5 --- /dev/null +++ b/Mage.Sets/src/mage/sets/fatereforged/AtarkaWorldRender.java @@ -0,0 +1,127 @@ +/* + * 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.fatereforged; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.TriggeredAbilityImpl; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.continious.GainAbilityTargetEffect; +import mage.abilities.keyword.DoubleStrikeAbility; +import mage.abilities.keyword.FlyingAbility; +import mage.abilities.keyword.TrampleAbility; +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.SubtypePredicate; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.events.GameEvent.EventType; +import mage.game.permanent.Permanent; +import mage.target.targetpointer.FixedTarget; + +/** + * + * @author jeffwadsworth + */ +public class AtarkaWorldRender extends CardImpl { + + public AtarkaWorldRender(UUID ownerId) { + super(ownerId, 149, "Atarka, World Render", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{5}{R}{G}"); + this.expansionSetCode = "FRF"; + this.supertype.add("Legendary"); + this.subtype.add("Dragon"); + this.power = new MageInt(6); + this.toughness = new MageInt(4); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + + // Trample + this.addAbility(TrampleAbility.getInstance()); + + // Whenever a Dragon you control attacks, it gains double strike until end of turn. + this.addAbility(new AtarkaWorldRenderEffect()); + + } + + public AtarkaWorldRender(final AtarkaWorldRender card) { + super(card); + } + + @Override + public AtarkaWorldRender copy() { + return new AtarkaWorldRender(this); + } +} + +class AtarkaWorldRenderEffect extends TriggeredAbilityImpl { + + private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("dragon you control"); + + static { + filter.add(new SubtypePredicate("Dragon")); + } + + public AtarkaWorldRenderEffect() { + super(Zone.BATTLEFIELD, new GainAbilityTargetEffect(DoubleStrikeAbility.getInstance(), Duration.EndOfTurn)); + } + + public AtarkaWorldRenderEffect(final AtarkaWorldRenderEffect ability) { + super(ability); + } + + @Override + public AtarkaWorldRenderEffect copy() { + return new AtarkaWorldRenderEffect(this); + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + if (event.getType() == EventType.ATTACKER_DECLARED) { + Permanent attacker = game.getPermanent(event.getSourceId()); + if (attacker != null + && filter.match(attacker, game)) { + for (Effect effect : this.getEffects()) { + effect.setTargetPointer(new FixedTarget(attacker.getId())); + } + return true; + } + } + return false; + } + + @Override + public String getRule() { + return "Whenever a Dragon you control attacks, it gains double strike until end of turn."; + } + +} diff --git a/Mage.Sets/src/mage/sets/fatereforged/RenownedWeaponsmith.java b/Mage.Sets/src/mage/sets/fatereforged/RenownedWeaponsmith.java new file mode 100644 index 0000000000..f592afdabf --- /dev/null +++ b/Mage.Sets/src/mage/sets/fatereforged/RenownedWeaponsmith.java @@ -0,0 +1,164 @@ +/* + * 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.fatereforged; + +import java.util.UUID; +import mage.ConditionalMana; +import mage.MageInt; +import mage.MageObject; +import mage.Mana; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.condition.Condition; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.mana.ConditionalColorlessManaAbility; +import mage.abilities.mana.builder.ConditionalManaBuilder; +import mage.cards.Card; +import mage.cards.CardImpl; +import mage.cards.Cards; +import mage.cards.CardsImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.FilterCard; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.mageobject.NamePredicate; +import mage.game.Game; +import mage.players.Player; +import mage.target.common.TargetCardInLibrary; + +/** + * + * @author jeffwadsworth + */ +public class RenownedWeaponsmith extends CardImpl { + + public RenownedWeaponsmith(UUID ownerId) { + super(ownerId, 48, "Renowned Weaponsmith", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{1}{U}"); + this.expansionSetCode = "FRF"; + this.subtype.add("Human"); + this.subtype.add("Artificer"); + this.power = new MageInt(1); + this.toughness = new MageInt(3); + + // {t}: Add {2} to your mana pool. Spend this mana only to cast artifact spells or activate abilities of artifacts. + this.addAbility(new ConditionalColorlessManaAbility(new TapSourceCost(), 2, new RenownedWeaponsmithManaBuilder())); + + // {U}, {t}: Search your library for a card named Heart-Piercer Bow or Vial of Dragonfire, reveal it, put it into your hand, then shuffle your library. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new RenownedWeaponsmithEffect(), new ManaCostsImpl("{U")); + ability.addCost(new TapSourceCost()); + this.addAbility(ability); + + } + + public RenownedWeaponsmith(final RenownedWeaponsmith card) { + super(card); + } + + @Override + public RenownedWeaponsmith copy() { + return new RenownedWeaponsmith(this); + } +} + +class RenownedWeaponsmithManaBuilder extends ConditionalManaBuilder { + + @Override + public ConditionalMana build(Object... options) { + return new RenownedWeaponsmithConditionalMana(this.mana); + } + + @Override + public String getRule() { + return "Spend this mana only to cast artifact spells or activate abilities of artifacts"; + } +} + +class RenownedWeaponsmithConditionalMana extends ConditionalMana { + + public RenownedWeaponsmithConditionalMana(Mana mana) { + super(mana); + addCondition(new RenownedWeaponsmithCondition()); + } +} + +class RenownedWeaponsmithCondition implements Condition { + + @Override + public boolean apply(Game game, Ability source) { + MageObject object = game.getObject(source.getSourceId()); + return (object != null + && object.getCardType().contains(CardType.ARTIFACT)); + } +} + +class RenownedWeaponsmithEffect extends OneShotEffect { + + private static final FilterCard filter = new FilterCard("card named Heart-Piercer Bow or Heart-Piercer Bow"); + + static { + filter.add(Predicates.or(new NamePredicate("Heart-Piercer Bow"), + new NamePredicate("Heart-Piercer Bow"))); + } + + public RenownedWeaponsmithEffect() { + super(Outcome.DrawCard); + staticText = "Search your library for a card named Heart-Piercer Bow or Vial of Dragonfire, reveal it, put it into your hand, then shuffle your library"; + } + + public RenownedWeaponsmithEffect(final RenownedWeaponsmithEffect effect) { + super(effect); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null) { + TargetCardInLibrary target = new TargetCardInLibrary(filter); + if (controller.searchLibrary(target, game)) { + if (target.getTargets().size() > 0) { + Card card = game.getCard(target.getFirstTarget()); + Cards revealed = new CardsImpl(); + revealed.add(card); + controller.revealCards("Renowned Weaponsmith", revealed, game); + controller.moveCardToHandWithInfo(card, source.getSourceId(), game, Zone.LIBRARY); + controller.shuffleLibrary(game); + } + } + } + return false; + } + + @Override + public RenownedWeaponsmithEffect copy() { + return new RenownedWeaponsmithEffect(this); + } +} diff --git a/Mage.Sets/src/mage/sets/fatereforged/ShockmawDragon.java b/Mage.Sets/src/mage/sets/fatereforged/ShockmawDragon.java new file mode 100644 index 0000000000..2aa0e3accb --- /dev/null +++ b/Mage.Sets/src/mage/sets/fatereforged/ShockmawDragon.java @@ -0,0 +1,105 @@ +/* + * 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.fatereforged; + +import java.util.List; +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.filter.common.FilterCreaturePermanent; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.players.Player; + +/** + * + * @author jeffwadsworth + */ +public class ShockmawDragon extends CardImpl { + + public ShockmawDragon(UUID ownerId) { + super(ownerId, 114, "Shockmaw Dragon", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{4}{R}{R}"); + this.expansionSetCode = "FRF"; + this.subtype.add("Dragon"); + this.power = new MageInt(4); + this.toughness = new MageInt(4); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + + // Whenever Shockmaw Dragon deals combat damage to a player, it deals 1 damage to each creature that player controls. + this.addAbility(new DealsCombatDamageToAPlayerTriggeredAbility(new ShockmawDragonEffect(), false, true)); + } + + public ShockmawDragon(final ShockmawDragon card) { + super(card); + } + + @Override + public ShockmawDragon copy() { + return new ShockmawDragon(this); + } +} + +class ShockmawDragonEffect extends OneShotEffect { + + public ShockmawDragonEffect() { + super(Outcome.Damage); + staticText = "it deals 1 damage to each creature that player controls"; + } + + public ShockmawDragonEffect(final ShockmawDragonEffect effect) { + super(effect); + } + + @Override + public boolean apply(Game game, Ability source) { + Player player = game.getPlayer(targetPointer.getFirst(game, source)); + if (player != null) { + List creatures = game.getBattlefield().getAllActivePermanents(new FilterCreaturePermanent(), player.getId(), game); + for (Permanent creature : creatures) { + if (creature != null) { + creature.damage(1, source.getSourceId(), game, false, true); + } + } + } + return false; + } + + @Override + public ShockmawDragonEffect copy() { + return new ShockmawDragonEffect(this); + } +} diff --git a/Mage.Sets/src/mage/sets/fatereforged/TemurBattleRage.java b/Mage.Sets/src/mage/sets/fatereforged/TemurBattleRage.java new file mode 100644 index 0000000000..8dff3f9538 --- /dev/null +++ b/Mage.Sets/src/mage/sets/fatereforged/TemurBattleRage.java @@ -0,0 +1,71 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.fatereforged; + +import java.util.UUID; +import mage.abilities.condition.common.FerociousCondition; +import mage.abilities.decorator.ConditionalContinousEffect; +import mage.abilities.effects.common.continious.GainAbilityTargetEffect; +import mage.abilities.keyword.DoubleStrikeAbility; +import mage.abilities.keyword.TrampleAbility; +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 TemurBattleRage extends CardImpl { + + private final static String rule = "Ferocious — That creature also gains trample until end of turn if you control a creature with power 4 or greater"; + + public TemurBattleRage(UUID ownerId) { + super(ownerId, 116, "Temur Battle Rage", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{1}{R}"); + this.expansionSetCode = "FRF"; + + // Target creature gains double strike until end of turn. + this.getSpellAbility().addEffect(new GainAbilityTargetEffect(DoubleStrikeAbility.getInstance(), Duration.EndOfTurn)); + this.getSpellAbility().addTarget(new TargetCreaturePermanent()); + + // Ferocious That creature also gains trample until end of turn if you control a creature with power 4 or greater. + this.getSpellAbility().addEffect(new ConditionalContinousEffect(new GainAbilityTargetEffect(TrampleAbility.getInstance(), Duration.EndOfTurn), FerociousCondition.getInstance(), rule)); + + } + + public TemurBattleRage(final TemurBattleRage card) { + super(card); + } + + @Override + public TemurBattleRage copy() { + return new TemurBattleRage(this); + } +} diff --git a/Mage.Sets/src/mage/sets/fatereforged/Vaultbreaker.java b/Mage.Sets/src/mage/sets/fatereforged/Vaultbreaker.java new file mode 100644 index 0000000000..d0e3f58f16 --- /dev/null +++ b/Mage.Sets/src/mage/sets/fatereforged/Vaultbreaker.java @@ -0,0 +1,104 @@ +/* + * 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.fatereforged; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.AttacksTriggeredAbility; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.keyword.DashAbility; +import mage.cards.CardImpl; +import mage.cards.Cards; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.game.Game; +import mage.players.Player; + +/** + * + * @author jeffwadsworth + */ +public class Vaultbreaker extends CardImpl { + + public Vaultbreaker(UUID ownerId) { + super(ownerId, 117, "Vaultbreaker", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{3}{R}"); + this.expansionSetCode = "FRF"; + this.subtype.add("Orc"); + this.subtype.add("Rogue"); + this.power = new MageInt(4); + this.toughness = new MageInt(2); + + // Whenever Vaultbreaker attacks, you may discard a card. If you do, draw a card. + this.addAbility(new AttacksTriggeredAbility(new VaultbreakerEffect(), true)); + + // Dash {2}{R} + this.addAbility(new DashAbility(this, "{2}{R}")); + + } + + public Vaultbreaker(final Vaultbreaker card) { + super(card); + } + + @Override + public Vaultbreaker copy() { + return new Vaultbreaker(this); + } +} + +class VaultbreakerEffect extends OneShotEffect { + + VaultbreakerEffect() { + super(Outcome.Neutral); + staticText = "you may discard a card. If you do, draw a card"; + } + + VaultbreakerEffect(final VaultbreakerEffect effect) { + super(effect); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null) { + Cards discardedCard = controller.discard(1, true, source, game); + if (discardedCard != null) { + controller.drawCards(1, game); + return true; + } + } + return false; + } + + @Override + public VaultbreakerEffect copy() { + return new VaultbreakerEffect(this); + } +} diff --git a/Mage.Sets/src/mage/sets/fatereforged/WildSlash.java b/Mage.Sets/src/mage/sets/fatereforged/WildSlash.java new file mode 100644 index 0000000000..f27ccc2cb5 --- /dev/null +++ b/Mage.Sets/src/mage/sets/fatereforged/WildSlash.java @@ -0,0 +1,108 @@ +/* + * 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.fatereforged; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.condition.common.FerociousCondition; +import mage.abilities.decorator.ConditionalContinuousRuleModifyingEffect; +import mage.abilities.effects.ContinuousRuleModifiyingEffect; +import mage.abilities.effects.ContinuousRuleModifiyingEffectImpl; +import mage.abilities.effects.common.DamageTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.target.common.TargetCreatureOrPlayer; + +/** + * + * @author jeffwadsworth + */ +public class WildSlash extends CardImpl { + + public WildSlash(UUID ownerId) { + super(ownerId, 118, "Wild Slash", Rarity.UNCOMMON, new CardType[]{CardType.INSTANT}, "{R}"); + this.expansionSetCode = "FRF"; + + // Ferocious If you control a creature with power 4 or greater, damage can't be prevented this turn. + ContinuousRuleModifiyingEffect effect = new DamageCantBePreventedEffect(); + effect.setText("Ferocious — If you control a creature with power 4 or greater, damage can't be prevented this turn"); + this.addAbility(new SimpleStaticAbility(Zone.ALL, new ConditionalContinuousRuleModifyingEffect(effect, + FerociousCondition.getInstance()))); + + // Wild Slash deals 2 damage to target creature or player. + this.getSpellAbility().addEffect(new DamageTargetEffect(2)); + this.getSpellAbility().addTarget(new TargetCreatureOrPlayer()); + + } + + public WildSlash(final WildSlash card) { + super(card); + } + + @Override + public WildSlash copy() { + return new WildSlash(this); + } +} + +class DamageCantBePreventedEffect extends ContinuousRuleModifiyingEffectImpl { + + public DamageCantBePreventedEffect() { + super(Duration.EndOfTurn, Outcome.Benefit, false, false); + staticText = "Damage can't be prevented this turn"; + } + + public DamageCantBePreventedEffect(final DamageCantBePreventedEffect effect) { + super(effect); + } + + @Override + public DamageCantBePreventedEffect copy() { + return new DamageCantBePreventedEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + return true; + } + + @Override + public boolean applies(GameEvent event, Ability source, Game game) { + if (event.getType().equals(GameEvent.EventType.PREVENT_DAMAGE)) { + return true; + } + return false; + } +}