diff --git a/Mage.Sets/src/mage/sets/magic2011/InfantryVeteran.java b/Mage.Sets/src/mage/sets/magic2011/InfantryVeteran.java index 785f504b03..1a490d18b4 100644 --- a/Mage.Sets/src/mage/sets/magic2011/InfantryVeteran.java +++ b/Mage.Sets/src/mage/sets/magic2011/InfantryVeteran.java @@ -29,16 +29,16 @@ package mage.sets.magic2011; import java.util.UUID; -import mage.constants.CardType; -import mage.constants.Duration; -import mage.constants.Rarity; -import mage.constants.Zone; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.effects.common.continuous.BoostTargetEffect; import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; import mage.target.common.TargetAttackingCreature; /** @@ -56,6 +56,7 @@ public class InfantryVeteran extends CardImpl { this.power = new MageInt(1); this.toughness = new MageInt(1); + // {T}: Target attacking creature gets +1/+1 until end of turn. Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostTargetEffect(1, 1, Duration.EndOfTurn), new TapSourceCost()); ability.addTarget(new TargetAttackingCreature()); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/sets/magicorigins/AnointerOfChampions.java b/Mage.Sets/src/mage/sets/magicorigins/AnointerOfChampions.java new file mode 100644 index 0000000000..a7438c7c8b --- /dev/null +++ b/Mage.Sets/src/mage/sets/magicorigins/AnointerOfChampions.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.magicorigins; + +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.effects.common.continuous.BoostTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.target.common.TargetAttackingCreature; + +/** + * + * @author fireshoes + */ +public class AnointerOfChampions extends CardImpl { + + public AnointerOfChampions(UUID ownerId) { + super(ownerId, 3, "Anointer of Champions", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{W}"); + this.expansionSetCode = "ORI"; + this.subtype.add("Human"); + this.subtype.add("Cleric"); + this.power = new MageInt(1); + this.toughness = new MageInt(1); + + // {T}: Target attacking creature gets +1/+1 until end of turn. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostTargetEffect(1, 1, Duration.EndOfTurn), new TapSourceCost()); + ability.addTarget(new TargetAttackingCreature()); + this.addAbility(ability); + } + + public AnointerOfChampions(final AnointerOfChampions card) { + super(card); + } + + @Override + public AnointerOfChampions copy() { + return new AnointerOfChampions(this); + } +} diff --git a/Mage.Sets/src/mage/sets/magicorigins/ArtificersEpiphany.java b/Mage.Sets/src/mage/sets/magicorigins/ArtificersEpiphany.java new file mode 100644 index 0000000000..dc5b68d353 --- /dev/null +++ b/Mage.Sets/src/mage/sets/magicorigins/ArtificersEpiphany.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.magicorigins; + +import java.util.UUID; +import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition; +import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition.CountType; +import mage.abilities.decorator.ConditionalOneShotEffect; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.abilities.effects.common.discard.DiscardControllerEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.filter.common.FilterControlledPermanent; +import mage.filter.predicate.mageobject.CardTypePredicate; + +/** + * + * @author fireshoes + */ +public class ArtificersEpiphany extends CardImpl { + + private static final FilterControlledPermanent filter = new FilterControlledPermanent("artifacts"); + + static { + filter.add(new CardTypePredicate(CardType.ARTIFACT)); + } + + public ArtificersEpiphany(UUID ownerId) { + super(ownerId, 45, "Artificer's Epiphany", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{2}{U}"); + this.expansionSetCode = "ORI"; + + // Draw two cards. If you control no artifacts, discard a card. + this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(2)); + this.getSpellAbility().addEffect(new ConditionalOneShotEffect( + new DiscardControllerEffect(1), + new PermanentsOnTheBattlefieldCondition(filter, CountType.EQUAL_TO, 0))); + } + + public ArtificersEpiphany(final ArtificersEpiphany card) { + super(card); + } + + @Override + public ArtificersEpiphany copy() { + return new ArtificersEpiphany(this); + } +} diff --git a/Mage.Sets/src/mage/sets/magicorigins/BloodCursedKnight.java b/Mage.Sets/src/mage/sets/magicorigins/BloodCursedKnight.java new file mode 100644 index 0000000000..fb33c0423c --- /dev/null +++ b/Mage.Sets/src/mage/sets/magicorigins/BloodCursedKnight.java @@ -0,0 +1,77 @@ +/* + * 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.magicorigins; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition; +import mage.abilities.decorator.ConditionalContinuousEffect; +import mage.abilities.effects.common.continuous.BoostSourceEffect; +import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; +import mage.abilities.keyword.LifelinkAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterControlledEnchantmentPermanent; + +/** + * + * @author fireshoes + */ +public class BloodCursedKnight extends CardImpl { + + final static private String rule1 = "{this} gets +1/+1 as long as you control an enchantment"; + final static private String rule2 = "{this} has lifelink as long as you control an enchantment"; + + public BloodCursedKnight(UUID ownerId) { + super(ownerId, 211, "Blood-Cursed Knight", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{1}{W}{B}"); + this.expansionSetCode = "ORI"; + this.subtype.add("Vampire"); + this.subtype.add("Knight"); + this.power = new MageInt(3); + this.toughness = new MageInt(2); + + // As long as you control an enchantment, Blood-Cursed Knight gets +1/+1 and has lifelink. + ConditionalContinuousEffect effect1 = new ConditionalContinuousEffect(new BoostSourceEffect(1, 1, Duration.WhileOnBattlefield), new PermanentsOnTheBattlefieldCondition(new FilterControlledEnchantmentPermanent()), rule1); + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect1)); + ConditionalContinuousEffect effect2 = new ConditionalContinuousEffect(new GainAbilitySourceEffect(LifelinkAbility.getInstance(), Duration.WhileOnBattlefield), new PermanentsOnTheBattlefieldCondition(new FilterControlledEnchantmentPermanent()), rule2); + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect2)); + } + + public BloodCursedKnight(final BloodCursedKnight card) { + super(card); + } + + @Override + public BloodCursedKnight copy() { + return new BloodCursedKnight(this); + } +} diff --git a/Mage.Sets/src/mage/sets/magicorigins/ChiefOfTheFoundry.java b/Mage.Sets/src/mage/sets/magicorigins/ChiefOfTheFoundry.java new file mode 100644 index 0000000000..5d9b244765 --- /dev/null +++ b/Mage.Sets/src/mage/sets/magicorigins/ChiefOfTheFoundry.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.magicorigins; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.SimpleStaticAbility; +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.constants.TargetController; +import mage.constants.Zone; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.mageobject.CardTypePredicate; +import mage.filter.predicate.permanent.ControllerPredicate; + +/** + * + * @author fireshoes + */ +public class ChiefOfTheFoundry extends CardImpl { + + private static final FilterCreaturePermanent filterBoosted = new FilterCreaturePermanent("artifact creatures"); + + static { + filterBoosted.add(new CardTypePredicate(CardType.ARTIFACT)); + filterBoosted.add(new ControllerPredicate(TargetController.YOU)); + } + + public ChiefOfTheFoundry(UUID ownerId) { + super(ownerId, 225, "Chief of the Foundry", Rarity.UNCOMMON, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{3}"); + this.expansionSetCode = "ORI"; + this.subtype.add("Construct"); + this.power = new MageInt(2); + this.toughness = new MageInt(3); + + // Other artifact creatures you control get +1/+1. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostControlledEffect(1, 1, Duration.WhileOnBattlefield, filterBoosted, true))); + } + + public ChiefOfTheFoundry(final ChiefOfTheFoundry card) { + super(card); + } + + @Override + public ChiefOfTheFoundry copy() { + return new ChiefOfTheFoundry(this); + } +} diff --git a/Mage.Sets/src/mage/sets/magicorigins/DwynensElite.java b/Mage.Sets/src/mage/sets/magicorigins/DwynensElite.java new file mode 100644 index 0000000000..d13a3b9fcf --- /dev/null +++ b/Mage.Sets/src/mage/sets/magicorigins/DwynensElite.java @@ -0,0 +1,83 @@ +/* + * 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.magicorigins; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.TriggeredAbility; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition; +import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition.CountType; +import mage.abilities.decorator.ConditionalTriggeredAbility; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.filter.common.FilterControlledPermanent; +import mage.filter.predicate.mageobject.SubtypePredicate; +import mage.filter.predicate.permanent.AnotherPredicate; +import mage.game.permanent.token.ElfToken; + +/** + * + * @author fireshoes + */ +public class DwynensElite extends CardImpl { + + private static final FilterControlledPermanent filter = new FilterControlledPermanent("another Elf"); + + static { + filter.add(new AnotherPredicate()); + filter.add(new SubtypePredicate("Elf")); + } + + public DwynensElite(UUID ownerId) { + super(ownerId, 173, "Dwynen's Elite", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{1}{G}"); + this.expansionSetCode = "ORI"; + this.subtype.add("Elf"); + this.subtype.add("Warrior"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // When Dwynen's Elite enters the battlefield, if you control another Elf, put a 1/1 green Elf Warrior creature token onto the battlefield. + TriggeredAbility triggeredAbility = new EntersBattlefieldTriggeredAbility(new CreateTokenEffect(new ElfToken())); + this.addAbility(new ConditionalTriggeredAbility( + triggeredAbility, + new PermanentsOnTheBattlefieldCondition(filter, CountType.MORE_THAN, 0), + "When {this} enters the battlefield, if you control another Elf, put a 1/1 green Elf Warrior creature token onto the battlefield")); + } + + public DwynensElite(final DwynensElite card) { + super(card); + } + + @Override + public DwynensElite copy() { + return new DwynensElite(this); + } +} diff --git a/Mage.Sets/src/mage/sets/magicorigins/ErebossTitan.java b/Mage.Sets/src/mage/sets/magicorigins/ErebosTitan.java similarity index 82% rename from Mage.Sets/src/mage/sets/magicorigins/ErebossTitan.java rename to Mage.Sets/src/mage/sets/magicorigins/ErebosTitan.java index 8d476e550e..0ad18c4d43 100644 --- a/Mage.Sets/src/mage/sets/magicorigins/ErebossTitan.java +++ b/Mage.Sets/src/mage/sets/magicorigins/ErebosTitan.java @@ -1,134 +1,134 @@ -/* - * 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.magicorigins; - -import java.util.UUID; -import mage.MageInt; -import mage.abilities.TriggeredAbilityImpl; -import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition; -import mage.abilities.costs.common.DiscardCardCost; -import mage.abilities.decorator.ConditionalContinuousEffect; -import mage.abilities.effects.common.DoIfCostPaid; -import mage.abilities.effects.common.ReturnSourceFromGraveyardToHandEffect; -import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; -import mage.abilities.keyword.IndestructibleAbility; -import mage.cards.Card; -import mage.cards.CardImpl; -import mage.constants.CardType; -import mage.constants.Duration; -import mage.constants.Rarity; -import mage.constants.TargetController; -import mage.constants.Zone; -import mage.filter.common.FilterCreatureCard; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.other.OwnerPredicate; -import mage.filter.predicate.permanent.ControllerPredicate; -import mage.game.Game; -import mage.game.events.GameEvent; -import mage.game.events.ZoneChangeEvent; -import mage.players.Player; - -/** - * - * @author LevelX2 - */ -public class ErebossTitan extends CardImpl { - - private final static FilterCreaturePermanent filter = new FilterCreaturePermanent(); - private final static FilterCreatureCard filterCard = new FilterCreatureCard(); - - static { - filter.add(new ControllerPredicate(TargetController.OPPONENT)); - filter.add(new OwnerPredicate(TargetController.OPPONENT)); - } - - public ErebossTitan(UUID ownerId) { - super(ownerId, 94, "Erebos's Titan", Rarity.MYTHIC, new CardType[]{CardType.CREATURE}, "{1}{B}{B}{B}"); - this.expansionSetCode = "ORI"; - this.subtype.add("Giant"); - this.power = new MageInt(5); - this.toughness = new MageInt(5); - - // Erebos's Titan has indestructible as long as no opponent controls a creature. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, - new ConditionalContinuousEffect(new GainAbilitySourceEffect(IndestructibleAbility.getInstance(), Duration.WhileOnBattlefield), - new PermanentsOnTheBattlefieldCondition(filter, PermanentsOnTheBattlefieldCondition.CountType.MORE_THAN, 0), - "{this} has indestructible as long as no opponent controls a creature"))); - - // Whenever a creature leaves an opponent's graveyard, you may discard a card. If you do, return Erebos's Titan from your graveyard to your hand. - this.addAbility(new ErebossTitanTriggeredAbility()); - - } - - public ErebossTitan(final ErebossTitan card) { - super(card); - } - - @Override - public ErebossTitan copy() { - return new ErebossTitan(this); - } -} - -class ErebossTitanTriggeredAbility extends TriggeredAbilityImpl { - - public ErebossTitanTriggeredAbility() { - super(Zone.BATTLEFIELD, new DoIfCostPaid(new ReturnSourceFromGraveyardToHandEffect(), new DiscardCardCost())); - } - - public ErebossTitanTriggeredAbility(final ErebossTitanTriggeredAbility ability) { - super(ability); - } - - @Override - public ErebossTitanTriggeredAbility copy() { - return new ErebossTitanTriggeredAbility(this); - } - - @Override - public boolean checkEventType(GameEvent event, Game game) { - return event.getType() == GameEvent.EventType.ZONE_CHANGE; - } - - @Override - public boolean checkTrigger(GameEvent event, Game game) { - ZoneChangeEvent zEvent = (ZoneChangeEvent) event; - if (zEvent.getFromZone().equals(Zone.GRAVEYARD)) { - Card card = game.getCard(zEvent.getTargetId()); - Player controller = game.getPlayer(getControllerId()); - return card != null && controller != null && controller.hasOpponent(card.getOwnerId(), game); - } - return false; - } - - @Override - public String getRule() { - return "Whenever a creature leaves an opponent's graveyard, " + super.getRule(); - } -} +/* + * 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.magicorigins; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.TriggeredAbilityImpl; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition; +import mage.abilities.costs.common.DiscardCardCost; +import mage.abilities.decorator.ConditionalContinuousEffect; +import mage.abilities.effects.common.DoIfCostPaid; +import mage.abilities.effects.common.ReturnSourceFromGraveyardToHandEffect; +import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; +import mage.abilities.keyword.IndestructibleAbility; +import mage.cards.Card; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.constants.Zone; +import mage.filter.common.FilterCreatureCard; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.other.OwnerPredicate; +import mage.filter.predicate.permanent.ControllerPredicate; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.events.ZoneChangeEvent; +import mage.players.Player; + +/** + * + * @author LevelX2 + */ +public class ErebosTitan extends CardImpl { + + private final static FilterCreaturePermanent filter = new FilterCreaturePermanent(); + private final static FilterCreatureCard filterCard = new FilterCreatureCard(); + + static { + filter.add(new ControllerPredicate(TargetController.OPPONENT)); + filter.add(new OwnerPredicate(TargetController.OPPONENT)); + } + + public ErebosTitan(UUID ownerId) { + super(ownerId, 94, "Erebos' Titan", Rarity.MYTHIC, new CardType[]{CardType.CREATURE}, "{1}{B}{B}{B}"); + this.expansionSetCode = "ORI"; + this.subtype.add("Giant"); + this.power = new MageInt(5); + this.toughness = new MageInt(5); + + // Erebos' Titan has indestructible as long as no opponent controls a creature. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, + new ConditionalContinuousEffect(new GainAbilitySourceEffect(IndestructibleAbility.getInstance(), Duration.WhileOnBattlefield), + new PermanentsOnTheBattlefieldCondition(filter, PermanentsOnTheBattlefieldCondition.CountType.MORE_THAN, 0), + "{this} has indestructible as long as no opponent controls a creature"))); + + // Whenever a creature leaves an opponent's graveyard, you may discard a card. If you do, return Erebos' Titan from your graveyard to your hand. + this.addAbility(new ErebosTitanTriggeredAbility()); + + } + + public ErebosTitan(final ErebosTitan card) { + super(card); + } + + @Override + public ErebosTitan copy() { + return new ErebosTitan(this); + } +} + +class ErebosTitanTriggeredAbility extends TriggeredAbilityImpl { + + public ErebosTitanTriggeredAbility() { + super(Zone.BATTLEFIELD, new DoIfCostPaid(new ReturnSourceFromGraveyardToHandEffect(), new DiscardCardCost())); + } + + public ErebosTitanTriggeredAbility(final ErebosTitanTriggeredAbility ability) { + super(ability); + } + + @Override + public ErebosTitanTriggeredAbility copy() { + return new ErebosTitanTriggeredAbility(this); + } + + @Override + public boolean checkEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.ZONE_CHANGE; + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + ZoneChangeEvent zEvent = (ZoneChangeEvent) event; + if (zEvent.getFromZone().equals(Zone.GRAVEYARD)) { + Card card = game.getCard(zEvent.getTargetId()); + Player controller = game.getPlayer(getControllerId()); + return card != null && controller != null && controller.hasOpponent(card.getOwnerId(), game); + } + return false; + } + + @Override + public String getRule() { + return "Whenever a creature leaves an opponent's graveyard, " + super.getRule(); + } +} diff --git a/Mage.Sets/src/mage/sets/magicorigins/FieryImpulse.java b/Mage.Sets/src/mage/sets/magicorigins/FieryImpulse.java new file mode 100644 index 0000000000..8e264dded0 --- /dev/null +++ b/Mage.Sets/src/mage/sets/magicorigins/FieryImpulse.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.magicorigins; + +import java.util.UUID; +import mage.abilities.condition.common.SpellMasteryCondition; +import mage.abilities.decorator.ConditionalOneShotEffect; +import mage.abilities.effects.common.DamageTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author fireshoes + */ +public class FieryImpulse extends CardImpl { + + public FieryImpulse(UUID ownerId) { + super(ownerId, 145, "Fiery Impulse", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{R}"); + this.expansionSetCode = "ORI"; + + // Fiery Impulse deals 2 damage to target creature. + // Spell mastery — If there are two or more instant and/or sorcery cards in your graveyard, Fiery Impulse deals 3 damage to that creature instead. + this.getSpellAbility().addEffect(new ConditionalOneShotEffect(new DamageTargetEffect(3), + new DamageTargetEffect(2), SpellMasteryCondition.getInstance(), + "{this} deals 2 damage to target creature. Spell mastery — If there are two or more instant and/or sorcery cards in your graveyard, {this} deals 3 damage to that creature instead")); + this.getSpellAbility().addTarget(new TargetCreaturePermanent()); + } + + public FieryImpulse(final FieryImpulse card) { + super(card); + } + + @Override + public FieryImpulse copy() { + return new FieryImpulse(this); + } +} diff --git a/Mage.Sets/src/mage/sets/magicorigins/GhirapurGearcrafter.java b/Mage.Sets/src/mage/sets/magicorigins/GhirapurGearcrafter.java new file mode 100644 index 0000000000..5bcaebfeb7 --- /dev/null +++ b/Mage.Sets/src/mage/sets/magicorigins/GhirapurGearcrafter.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.magicorigins; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.game.permanent.token.ThopterColorlessToken; + +/** + * + * @author fireshoes + */ +public class GhirapurGearcrafter extends CardImpl { + + public GhirapurGearcrafter(UUID ownerId) { + super(ownerId, 149, "Ghirapur Gearcrafter", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{2}{R}"); + this.expansionSetCode = "ORI"; + this.subtype.add("Human"); + this.subtype.add("Artificer"); + this.power = new MageInt(2); + this.toughness = new MageInt(1); + + // When Ghirapur Gearcrafter enters the battlefield, put a 1/1 colorless Thopter artifact creature token with flying onto the battlefield. + this.addAbility(new EntersBattlefieldTriggeredAbility(new CreateTokenEffect(new ThopterColorlessToken()))); + } + + public GhirapurGearcrafter(final GhirapurGearcrafter card) { + super(card); + } + + @Override + public GhirapurGearcrafter copy() { + return new GhirapurGearcrafter(this); + } +} diff --git a/Mage.Sets/src/mage/sets/magicorigins/MagmaticInsight.java b/Mage.Sets/src/mage/sets/magicorigins/MagmaticInsight.java new file mode 100644 index 0000000000..fbe9fc9347 --- /dev/null +++ b/Mage.Sets/src/mage/sets/magicorigins/MagmaticInsight.java @@ -0,0 +1,64 @@ +/* + * 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.magicorigins; + +import java.util.UUID; +import mage.abilities.costs.common.DiscardTargetCost; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.filter.common.FilterLandCard; +import mage.target.common.TargetCardInHand; + +/** + * + * @author fireshoes + */ +public class MagmaticInsight extends CardImpl { + + public MagmaticInsight(UUID ownerId) { + super(ownerId, 155, "Magmatic Insight", Rarity.UNCOMMON, new CardType[]{CardType.SORCERY}, "{R}"); + this.expansionSetCode = "ORI"; + + // As an additional cost to cast Magmatic Insight, discard a land card. + this.getSpellAbility().addCost(new DiscardTargetCost(new TargetCardInHand(new FilterLandCard()))); + + // Draw two cards. + this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(2)); + } + + public MagmaticInsight(final MagmaticInsight card) { + super(card); + } + + @Override + public MagmaticInsight copy() { + return new MagmaticInsight(this); + } +} diff --git a/Mage.Sets/src/mage/sets/magicorigins/MoltenVortex.java b/Mage.Sets/src/mage/sets/magicorigins/MoltenVortex.java new file mode 100644 index 0000000000..a51aa655e9 --- /dev/null +++ b/Mage.Sets/src/mage/sets/magicorigins/MoltenVortex.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.magicorigins; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.DiscardTargetCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.DamageTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterLandCard; +import mage.target.common.TargetCardInHand; +import mage.target.common.TargetCreatureOrPlayer; + +/** + * + * @author fireshoes + */ +public class MoltenVortex extends CardImpl { + + public MoltenVortex(UUID ownerId) { + super(ownerId, 156, "Molten Vortex", Rarity.RARE, new CardType[]{CardType.ENCHANTMENT}, "{R}"); + this.expansionSetCode = "ORI"; + + // {R}, Discard a land card: Molten Vortex deals 2 damage to target creature or player. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(2), new DiscardTargetCost(new TargetCardInHand(new FilterLandCard()))); + ability.addCost(new ManaCostsImpl("{R}")); + ability.addTarget(new TargetCreatureOrPlayer()); + this.addAbility(ability); + } + + public MoltenVortex(final MoltenVortex card) { + super(card); + } + + @Override + public MoltenVortex copy() { + return new MoltenVortex(this); + } +} diff --git a/Mage.Sets/src/mage/sets/magicorigins/ReclusiveArtificer.java b/Mage.Sets/src/mage/sets/magicorigins/ReclusiveArtificer.java new file mode 100644 index 0000000000..59c6169d33 --- /dev/null +++ b/Mage.Sets/src/mage/sets/magicorigins/ReclusiveArtificer.java @@ -0,0 +1,81 @@ +/* + * 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.magicorigins; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount; +import mage.abilities.effects.common.DamageTargetEffect; +import mage.abilities.keyword.HasteAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.filter.common.FilterControlledPermanent; +import mage.filter.predicate.mageobject.CardTypePredicate; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author fireshoes + */ +public class ReclusiveArtificer extends CardImpl { + + private static final FilterControlledPermanent filter = new FilterControlledPermanent("artifacts you control"); + + static { + filter.add(new CardTypePredicate(CardType.ARTIFACT)); + } + + public ReclusiveArtificer(UUID ownerId) { + super(ownerId, 216, "Reclusive Artificer", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{2}{U}{R}"); + this.expansionSetCode = "ORI"; + this.subtype.add("Human"); + this.subtype.add("Artificer"); + this.power = new MageInt(2); + this.toughness = new MageInt(3); + + // Haste + this.addAbility(HasteAbility.getInstance()); + + // When Reclusive Artificer enters the battlefield, you may have it deal damage to target creature equal to the number of artifacts you control. + Ability ability = new EntersBattlefieldTriggeredAbility(new DamageTargetEffect(new PermanentsOnBattlefieldCount(filter)), true); + ability.addTarget(new TargetCreaturePermanent()); + this.addAbility(ability); + } + + public ReclusiveArtificer(final ReclusiveArtificer card) { + super(card); + } + + @Override + public ReclusiveArtificer copy() { + return new ReclusiveArtificer(this); + } +} diff --git a/Mage.Sets/src/mage/sets/magicorigins/ShamanOfThePack.java b/Mage.Sets/src/mage/sets/magicorigins/ShamanOfThePack.java new file mode 100644 index 0000000000..7655743a31 --- /dev/null +++ b/Mage.Sets/src/mage/sets/magicorigins/ShamanOfThePack.java @@ -0,0 +1,83 @@ +/* + * 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.magicorigins; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.LoseLifeTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.mageobject.SubtypePredicate; +import mage.filter.predicate.permanent.ControllerPredicate; +import mage.target.common.TargetOpponent; + +/** + * + * @author fireshoes + */ +public class ShamanOfThePack extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("equal to the number of elves you control"); + + static { + filter.add(new ControllerPredicate(TargetController.YOU)); + filter.add(new SubtypePredicate("Elf")); + } + + public ShamanOfThePack(UUID ownerId) { + super(ownerId, 217, "Shaman of the Pack", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{1}{B}{G}"); + this.expansionSetCode = "ORI"; + this.subtype.add("Elf"); + this.subtype.add("Shaman"); + this.power = new MageInt(3); + this.toughness = new MageInt(2); + + // When Shaman of the Pack enters the battlefield, target opponent loses life equal to the number of Elves you control. + Effect effect = new LoseLifeTargetEffect(new PermanentsOnBattlefieldCount(filter)); + effect.setText("target opponent loses life equal to the number of Elves you control"); + Ability ability = new EntersBattlefieldTriggeredAbility(effect, false); + ability.addTarget(new TargetOpponent()); + this.addAbility(ability); + } + + public ShamanOfThePack(final ShamanOfThePack card) { + super(card); + } + + @Override + public ShamanOfThePack copy() { + return new ShamanOfThePack(this); + } +} diff --git a/Mage.Sets/src/mage/sets/magicorigins/SkysnareSpider.java b/Mage.Sets/src/mage/sets/magicorigins/SkysnareSpider.java new file mode 100644 index 0000000000..3db9719348 --- /dev/null +++ b/Mage.Sets/src/mage/sets/magicorigins/SkysnareSpider.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.magicorigins; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.keyword.VigilanceAbility; +import mage.abilities.keyword.ReachAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class SkysnareSpider extends CardImpl { + + public SkysnareSpider(UUID ownerId) { + super(ownerId, 197, "Skysnare Spider", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{4}{G}{G}"); + this.expansionSetCode = "ORI"; + this.subtype.add("Spider"); + this.power = new MageInt(6); + this.toughness = new MageInt(6); + + // Vigilance + this.addAbility(VigilanceAbility.getInstance()); + // Reach + this.addAbility(ReachAbility.getInstance()); + } + + public SkysnareSpider(final SkysnareSpider card) { + super(card); + } + + @Override + public SkysnareSpider copy() { + return new SkysnareSpider(this); + } +} diff --git a/Mage.Sets/src/mage/sets/magicorigins/SomberwaldAlpha.java b/Mage.Sets/src/mage/sets/magicorigins/SomberwaldAlpha.java new file mode 100644 index 0000000000..595ecd65f9 --- /dev/null +++ b/Mage.Sets/src/mage/sets/magicorigins/SomberwaldAlpha.java @@ -0,0 +1,90 @@ +/* + * 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.magicorigins; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.BecomesBlockedAllTriggeredAbility; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.continuous.BoostTargetEffect; +import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; +import mage.abilities.keyword.TrampleAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.constants.Zone; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.permanent.ControllerPredicate; +import mage.target.common.TargetControlledCreaturePermanent; + +/** + * + * @author fireshoes + */ +public class SomberwaldAlpha extends CardImpl { + + final static private FilterCreaturePermanent filter = new FilterCreaturePermanent("a creature you control"); + + static { + filter.add(new ControllerPredicate(TargetController.YOU)); + } + + public SomberwaldAlpha(UUID ownerId) { + super(ownerId, 198, "Somberwald Alpha", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{3}{G}"); + this.expansionSetCode = "ORI"; + this.subtype.add("Wolf"); + this.power = new MageInt(3); + this.toughness = new MageInt(2); + + // Whenever a creature you control becomes blocked, it gets +1/+1 until end of turn. + Effect effect = new BoostTargetEffect(1, 1, Duration.EndOfTurn); + effect.setText("it gets +1/+1 until end of turn"); + this.addAbility(new BecomesBlockedAllTriggeredAbility(effect, false, filter, true)); + + // {1}{G}: Target creature you control gains trample until end of turn. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, + new GainAbilityTargetEffect(TrampleAbility.getInstance(), Duration.EndOfTurn), + new ManaCostsImpl("{1}{G}")); + ability.addTarget(new TargetControlledCreaturePermanent()); + this.addAbility(ability); + } + + public SomberwaldAlpha(final SomberwaldAlpha card) { + super(card); + } + + @Override + public SomberwaldAlpha copy() { + return new SomberwaldAlpha(this); + } +} diff --git a/Mage.Sets/src/mage/sets/magicorigins/WhirlerRogue.java b/Mage.Sets/src/mage/sets/magicorigins/WhirlerRogue.java new file mode 100644 index 0000000000..076b831408 --- /dev/null +++ b/Mage.Sets/src/mage/sets/magicorigins/WhirlerRogue.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.magicorigins; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.TapTargetCost; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.effects.common.combat.CantBeBlockedTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterControlledPermanent; +import mage.filter.predicate.mageobject.CardTypePredicate; +import mage.game.permanent.token.ThopterColorlessToken; +import mage.target.common.TargetControlledPermanent; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author fireshoes + */ +public class WhirlerRogue extends CardImpl { + + private static final FilterControlledPermanent filter = new FilterControlledPermanent("artifacts"); + + static { + filter.add(new CardTypePredicate(CardType.ARTIFACT)); + } + + public WhirlerRogue(UUID ownerId) { + super(ownerId, 83, "Whirler Rogue", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{2}{U}{U}"); + this.expansionSetCode = "ORI"; + this.subtype.add("Human"); + this.subtype.add("Rogue"); + this.subtype.add("Artificer"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // When Whirler Rogue enters the battlefield, put two 1/1 colorless Thopter artifact creature tokens with flying onto the battlefield. + this.addAbility(new EntersBattlefieldTriggeredAbility(new CreateTokenEffect(new ThopterColorlessToken(), 2))); + + // Tap two untapped artifacts you control: Target creature can't be blocked this turn. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CantBeBlockedTargetEffect(), new TapTargetCost(new TargetControlledPermanent(2, 2, filter, true))); + ability.addTarget(new TargetCreaturePermanent()); + this.addAbility(ability); + } + + public WhirlerRogue(final WhirlerRogue card) { + super(card); + } + + @Override + public WhirlerRogue copy() { + return new WhirlerRogue(this); + } +} diff --git a/Mage.Sets/src/mage/sets/mercadianmasques/CloseQuarters.java b/Mage.Sets/src/mage/sets/mercadianmasques/CloseQuarters.java index ad70debcc9..bf910cf1b6 100644 --- a/Mage.Sets/src/mage/sets/mercadianmasques/CloseQuarters.java +++ b/Mage.Sets/src/mage/sets/mercadianmasques/CloseQuarters.java @@ -34,6 +34,9 @@ import mage.abilities.effects.common.DamageTargetEffect; import mage.cards.CardImpl; import mage.constants.CardType; import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.permanent.ControllerPredicate; import mage.target.common.TargetCreatureOrPlayer; /** @@ -41,13 +44,19 @@ import mage.target.common.TargetCreatureOrPlayer; * @author fireshoes */ public class CloseQuarters extends CardImpl { + + final static private FilterCreaturePermanent filter = new FilterCreaturePermanent("a creature you control"); + + static { + filter.add(new ControllerPredicate(TargetController.YOU)); + } public CloseQuarters(UUID ownerId) { super(ownerId, 184, "Close Quarters", Rarity.UNCOMMON, new CardType[]{CardType.ENCHANTMENT}, "{2}{R}{R}"); this.expansionSetCode = "MMQ"; // Whenever a creature you control becomes blocked, Close Quarters deals 1 damage to target creature or player. - Ability ability = new BecomesBlockedAllTriggeredAbility(new DamageTargetEffect(1), true); + Ability ability = new BecomesBlockedAllTriggeredAbility(new DamageTargetEffect(1), false, filter, false); ability.addTarget(new TargetCreatureOrPlayer()); this.addAbility(ability); } diff --git a/Mage/src/mage/abilities/common/BecomesBlockedAllTriggeredAbility.java b/Mage/src/mage/abilities/common/BecomesBlockedAllTriggeredAbility.java index 5d858d2e63..452b40bfad 100644 --- a/Mage/src/mage/abilities/common/BecomesBlockedAllTriggeredAbility.java +++ b/Mage/src/mage/abilities/common/BecomesBlockedAllTriggeredAbility.java @@ -1,96 +1,95 @@ -/* - * 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.abilities.common; - -import mage.abilities.TriggeredAbilityImpl; -import mage.abilities.effects.Effect; -import mage.constants.Zone; -import mage.filter.common.FilterCreaturePermanent; -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 LevelX2 - */ - -public class BecomesBlockedAllTriggeredAbility extends TriggeredAbilityImpl { - - private FilterCreaturePermanent filter; - private boolean setTargetPointer; - - public BecomesBlockedAllTriggeredAbility(Effect effect, boolean optional) { - this(effect, optional, new FilterCreaturePermanent("a creature"), false); - } - public BecomesBlockedAllTriggeredAbility(Effect effect, boolean optional, FilterCreaturePermanent filter, boolean setTargetPointer) { - super(Zone.BATTLEFIELD, effect, optional); - this.filter = filter; - this.setTargetPointer = setTargetPointer; - } - - public BecomesBlockedAllTriggeredAbility(final BecomesBlockedAllTriggeredAbility ability) { - super(ability); - this.filter = ability.filter; - this.setTargetPointer = ability.setTargetPointer; - } - - @Override - public boolean checkEventType(GameEvent event, Game game) { - return event.getType() == GameEvent.EventType.CREATURE_BLOCKED; - } - - @Override - public boolean checkTrigger(GameEvent event, Game game) { - Permanent permanent = game.getPermanent(event.getTargetId()); - if (permanent != null && filter.match(permanent, getSourceId(), getControllerId(), game)) { - if (setTargetPointer) { - for(Effect effect :this.getEffects()) { - effect.setTargetPointer(new FixedTarget(event.getTargetId())); - } - } - return true; - } - return false; - } - - @Override - public String getRule() { - StringBuilder sb = new StringBuilder("Whenever ").append(filter.getMessage()); - sb.append(" becomes blocked, ").append(super.getRule()); - return sb.toString(); - } - - @Override - public BecomesBlockedAllTriggeredAbility copy() { - return new BecomesBlockedAllTriggeredAbility(this); - } -} +/* + * 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.abilities.common; + +import mage.abilities.TriggeredAbilityImpl; +import mage.abilities.effects.Effect; +import mage.constants.Zone; +import mage.filter.common.FilterCreaturePermanent; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.permanent.Permanent; +import mage.target.targetpointer.FixedTarget; + +/** + * + * @author LevelX2 + */ + +public class BecomesBlockedAllTriggeredAbility extends TriggeredAbilityImpl { + + private FilterCreaturePermanent filter; + private boolean setTargetPointer; + + public BecomesBlockedAllTriggeredAbility(Effect effect, boolean optional) { + this(effect, optional, new FilterCreaturePermanent("a creature"), false); + } + public BecomesBlockedAllTriggeredAbility(Effect effect, boolean optional, FilterCreaturePermanent filter, boolean setTargetPointer) { + super(Zone.BATTLEFIELD, effect, optional); + this.filter = filter; + this.setTargetPointer = setTargetPointer; + } + + public BecomesBlockedAllTriggeredAbility(final BecomesBlockedAllTriggeredAbility ability) { + super(ability); + this.filter = ability.filter; + this.setTargetPointer = ability.setTargetPointer; + } + + @Override + public boolean checkEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.CREATURE_BLOCKED; + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + Permanent permanent = game.getPermanent(event.getTargetId()); + if (permanent != null && filter.match(permanent, getSourceId(), getControllerId(), game)) { + if (setTargetPointer) { + for(Effect effect :this.getEffects()) { + effect.setTargetPointer(new FixedTarget(event.getTargetId())); + } + } + return true; + } + return false; + } + + @Override + public String getRule() { + StringBuilder sb = new StringBuilder("Whenever ").append(filter.getMessage()); + sb.append(" becomes blocked, ").append(super.getRule()); + return sb.toString(); + } + + @Override + public BecomesBlockedAllTriggeredAbility copy() { + return new BecomesBlockedAllTriggeredAbility(this); + } +} diff --git a/Utils/mtg-cards-data.txt b/Utils/mtg-cards-data.txt index f2250bf7a7..fa7808e437 100644 --- a/Utils/mtg-cards-data.txt +++ b/Utils/mtg-cards-data.txt @@ -26121,7 +26121,7 @@ Divine Verdict|Magic Origins|274|C|{3}{W}|Instant|||Destroy target attacking or Eagle of the Watch|Magic Origins|275|C|{2}{W}|Creature - Bird|2|1|Flying, vigilance| Serra Angel|Magic Origins|276|U|{3}{W}{W}|Creature - Angel|4|4|Flying$Vigilance| Alhammarret, High Arbiter|Magic Origins|43|R|{5}{U}{U}|Legendary Creature - Sphinx|5|5|Flying$As Alhammarret, High Arbiter enters the battlefield, each opponent reveals his or her hand. You choose the name of a nonland card revealed this way.$Your opponent can't cast spells with the chosen name (as long as this creature is on the battlefield).| -Artificer's Epiphany|Magic Origins|45|C|{2}{U}|Instant|||Draw two cards. If control no artifacts, discard a card.| +Artificer's Epiphany|Magic Origins|45|C|{2}{U}|Instant|||Draw two cards. If you control no artifacts, discard a card.| Aspiring Aeronaut|Magic Origins|46|C|{3}{U}|Creature - Human Artificer|1|2|Flying (This creature can't be blocked except by creatures with flying or reach.)$When Aspiring Aeronaut enters the battlefield, put a 1/1 colorless Thopter artifact creature token with flying onto the battlefield.| Clash of Wills|Magic Origins|49|U|{X}{U}|Instant|||Counter target spell unless its controller pays {X}.| Claustrophobia|Magic Origins|50|C|{1}{U}{U}|Enchantment - Aura|||$Enchant creature$When Claustrophobia enters the battlefield, tap enchanted creature.$Enchanted creature doesn't untap during its controller's untap step.| @@ -26158,7 +26158,7 @@ Dark Petition|Magic Origins|90|R|{3}{B}{B}|Sorcery|||Search your library for a c Deadbridge Shaman|Magic Origins|91|C|{2}{B}|Creature - Elf Shaman|3|1|When Deadbridge Shaman dies, target opponent discards a card.| Demonic Pact|Magic Origins|92|M|{2}{B}{B}|Enchantment|||At the beginning of your upkeep, choose one that hasn't been chosen —$• Demonic Pact deals 4 damage to target creature or player and you gain 4 life.$• Target opponent discards two cards.$• Draw two cards.$• You lose the game.| Despoiler of Souls|Magic Origins|93|R|{B}{B}|Creature - Horror|3|1|Despoiler of Souls can't block.${B}{B}, Exile two other creature cards from your graveyard: Return Despoiler of Souls from your graveyard to the battlefield.| -Erebos's Titan|Magic Origins|94|M|{1}{B}{B}{B}|Creature - Giant|5|5|Erebos's Titan has indestructible as long as no opponent controls a creature.$Whenever a creature leaves an opponent's graveyard, you may discard a card. If you do, return Erebos's Titan from your graveyard to your hand.| +Erebos' Titan|Magic Origins|94|M|{1}{B}{B}{B}|Creature - Giant|5|5|Erebos' Titan has indestructible as long as no opponent controls a creature.$Whenever a creature leaves an opponent's graveyard, you may discard a card. If you do, return Erebos' Titan from your graveyard to your hand.| Eyeblight Assassin|Magic Origins|95|C|{2}{B}|Creature - Elf Assassin|2|2|When Eyeblight Assassin enters the battlefield, target creature an opponent controls gets -1/-1 until end of turn.| Fleshbag Marauder|Magic Origins|98|U|{2}{B}|Creature - Zombie Warrior|3|1|When Fleshbag Marauder enters the battlefield, each player sacrifices a creature.| Gilt-Leaf Winnower|Magic Origins|99|R|{3}{B}{B}|Creature - Elf Warrior|4|3|Menace (This creature can't be blocked except by two or more creatures.)$When Gilt-Leaf Winnower enters the battlefield, you may destroy target non-Elf creature whose power and toughness aren't equal.|