diff --git a/Mage.Sets/src/mage/sets/gatecrash/Biovisionary.java b/Mage.Sets/src/mage/sets/gatecrash/Biovisionary.java new file mode 100644 index 00000000000..f709758602f --- /dev/null +++ b/Mage.Sets/src/mage/sets/gatecrash/Biovisionary.java @@ -0,0 +1,79 @@ +/* + * 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.gatecrash; + +import java.util.UUID; +import mage.Constants; +import mage.Constants.CardType; +import mage.Constants.Rarity; +import mage.MageInt; +import mage.abilities.common.BeginningOfEndStepTriggeredAbility; +import mage.abilities.condition.common.ControlsPermanentCondition; +import mage.abilities.effects.common.WinGameEffect; +import mage.cards.CardImpl; +import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.predicate.mageobject.NamePredicate; + +/** + * + * @author Plopman + */ +public class Biovisionary extends CardImpl { + + private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("if you control four or more creatures named Biovisionary"); + static{ + filter.add(new NamePredicate("Biovisionary")); + } + + public Biovisionary(UUID ownerId) { + super(ownerId, 146, "Biovisionary", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{1}{G}{U}"); + this.expansionSetCode = "GTC"; + this.subtype.add("Human"); + this.subtype.add("Wizard"); + + + this.color.setGreen(true); + this.color.setBlue(true); + + this.power = new MageInt(2); + this.toughness = new MageInt(3); + + //At the beginning of the end step, if you control four or more creatures named Biovisionary, you win the game. + this.addAbility(new BeginningOfEndStepTriggeredAbility(Constants.Zone.BATTLEFIELD, new WinGameEffect(), Constants.TargetController.ANY, new ControlsPermanentCondition(filter, ControlsPermanentCondition.CountType.MORE_THAN, 3), false)); + } + + public Biovisionary(final Biovisionary card) { + super(card); + } + + @Override + public Biovisionary copy() { + return new Biovisionary(this); + } +} + diff --git a/Mage.Sets/src/mage/sets/gatecrash/CryptGhast.java b/Mage.Sets/src/mage/sets/gatecrash/CryptGhast.java new file mode 100644 index 00000000000..d871fea4ec7 --- /dev/null +++ b/Mage.Sets/src/mage/sets/gatecrash/CryptGhast.java @@ -0,0 +1,113 @@ +/* +/* + * 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.gatecrash; + +import java.util.UUID; +import mage.Constants; +import mage.Constants.CardType; +import mage.Constants.Rarity; +import mage.MageInt; +import mage.Mana; +import mage.abilities.effects.common.BasicManaEffect; +import mage.abilities.keyword.ExtortAbility; +import mage.abilities.mana.TriggeredManaAbility; +import mage.cards.CardImpl; +import mage.filter.common.FilterControlledLandPermanent; +import mage.filter.predicate.mageobject.SubtypePredicate; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.permanent.Permanent; + +/** + * + * @author Plopman + */ +public class CryptGhast extends CardImpl { + + public CryptGhast(UUID ownerId) { + super(ownerId, 61, "Crypt Ghast", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{3}{B}"); + this.expansionSetCode = "GTC"; + this.subtype.add("Spirit"); + + this.color.setBlack(true); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + //Extort (Whenever you cast a spell, you may pay {WB}. If you do, each opponent loses 1 life and you gain that much life.) + this.addAbility(new ExtortAbility()); + //Whenever you tap a Swamp for mana, you may add {B} to your mana pool. + this.addAbility(new CryptGhastTriggeredAbility()); + } + + public CryptGhast(final CryptGhast card) { + super(card); + } + + @Override + public CryptGhast copy() { + return new CryptGhast(this); + } +} + +class CryptGhastTriggeredAbility extends TriggeredManaAbility { + + private final static FilterControlledLandPermanent filter = new FilterControlledLandPermanent("Island"); + + static { + filter.add(new SubtypePredicate("Swamp")); + } + + public CryptGhastTriggeredAbility() { + super(Constants.Zone.BATTLEFIELD, new BasicManaEffect(Mana.BlackMana)); + this.usesStack = false; + } + + public CryptGhastTriggeredAbility(CryptGhastTriggeredAbility ability) { + super(ability); + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + Permanent land = game.getPermanent(event.getTargetId()); + if (event.getType() == GameEvent.EventType.TAPPED_FOR_MANA && land != null && filter.match(land, game)) { + return true; + } + return false; + } + + @Override + public CryptGhastTriggeredAbility copy() { + return new CryptGhastTriggeredAbility(this); + } + + @Override + public String getRule() { + return "Whenever you tap a Swamp for mana, you may add {B} to your mana pool"; + } +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/gatecrash/DeathpactAngel.java b/Mage.Sets/src/mage/sets/gatecrash/DeathpactAngel.java new file mode 100644 index 00000000000..83bddf5b75a --- /dev/null +++ b/Mage.Sets/src/mage/sets/gatecrash/DeathpactAngel.java @@ -0,0 +1,109 @@ +/* +/* + * 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.gatecrash; + +import java.util.UUID; +import mage.Constants; +import mage.Constants.CardType; +import mage.Constants.Rarity; +import mage.MageInt; +import mage.ObjectColor; +import mage.abilities.Ability; +import mage.abilities.common.DiesTriggeredAbility; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.SacrificeSourceCost; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToBattlefieldTargetEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.filter.common.FilterCreatureCard; +import mage.filter.predicate.mageobject.NamePredicate; +import mage.game.permanent.token.Token; +import mage.target.common.TargetCardInYourGraveyard; + +/** + * + * @author Plopman + */ +public class DeathpactAngel extends CardImpl { + + public DeathpactAngel(UUID ownerId) { + super(ownerId, 153, "Deathpact Angel", Rarity.MYTHIC, new CardType[]{CardType.CREATURE}, "{3}{W}{B}{B}"); + this.expansionSetCode = "GTC"; + this.subtype.add("Angel"); + + this.color.setBlack(true); + this.color.setWhite(true); + this.power = new MageInt(5); + this.toughness = new MageInt(5); + + //Flying + this.addAbility(FlyingAbility.getInstance()); + //When Deathpact Angel dies, put a 1/1 white and black Cleric creature token onto the battlefield. It has "{3}{W}{B}{B}, {T}, Sacrifice this creature: Return a card named Deathpact Angel from your graveyard to the battlefield." + this.addAbility(new DiesTriggeredAbility(new CreateTokenEffect(new DeathpactAngelToken()))); + } + + public DeathpactAngel(final DeathpactAngel card) { + super(card); + } + + @Override + public DeathpactAngel copy() { + return new DeathpactAngel(this); + } +} + + +class DeathpactAngelToken extends Token { + + private static final FilterCreatureCard filter = new FilterCreatureCard("card named Deathpact Angel from your graveyard"); + static { + filter.add(new NamePredicate("Deathpact Angel")); + } + public DeathpactAngelToken() { + super("Cleric", "1/1 white and black Cleric creature token onto the battlefield. It has \"{3}{W}{B}{B}, {T}, Sacrifice this creature: Return a card named Deathpact Angel from your graveyard to the battlefield.\""); + cardType.add(CardType.CREATURE); + + color = ObjectColor.BLACK; + + subtype.add("Cleric"); + + power = new MageInt(1); + toughness = new MageInt(1); + + Ability ability = new SimpleActivatedAbility(Constants.Zone.BATTLEFIELD, new ReturnFromGraveyardToBattlefieldTargetEffect(), new ManaCostsImpl("{3}{W}{B}{B}")); + ability.addCost(new TapSourceCost()); + ability.addCost(new SacrificeSourceCost()); + ability.addTarget(new TargetCardInYourGraveyard(filter)); + this.addAbility(ability); + } + +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/gatecrash/FiveAlarmFire.java b/Mage.Sets/src/mage/sets/gatecrash/FiveAlarmFire.java new file mode 100644 index 00000000000..74c80501e23 --- /dev/null +++ b/Mage.Sets/src/mage/sets/gatecrash/FiveAlarmFire.java @@ -0,0 +1,113 @@ +/* + * 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.gatecrash; + +import java.util.UUID; +import mage.Constants; +import mage.Constants.CardType; +import mage.Constants.Rarity; +import mage.abilities.Ability; +import mage.abilities.TriggeredAbilityImpl; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.RemoveCountersSourceCost; +import mage.abilities.effects.common.DamageTargetEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.cards.CardImpl; +import mage.counters.CounterType; +import mage.filter.common.FilterControlledCreaturePermanent; +import mage.game.Game; +import mage.game.events.DamagedCreatureEvent; +import mage.game.events.GameEvent; +import mage.game.permanent.Permanent; +import mage.target.common.TargetCreatureOrPlayer; + +/** + * + * @author Plopman + */ +public class FiveAlarmFire extends CardImpl { + + public FiveAlarmFire(UUID ownerId) { + super(ownerId, 91, "Five-Alarm Fire", Rarity.RARE, new CardType[]{CardType.ENCHANTMENT}, "{1}{R}{R}"); + this.expansionSetCode = "GTC"; + + this.color.setRed(true); + + //Whenever a creature you control deals combat damage, put a blaze counter on Five-Alarm Fire. + this.addAbility(new FiveAlarmFireTriggeredAbility()); + //Remove five blaze counters from Five-Alarm Fire: Five-Alarm Fire deals 5 damage to target creature or player. + Ability ability = new SimpleActivatedAbility(Constants.Zone.BATTLEFIELD, new DamageTargetEffect(5), new RemoveCountersSourceCost(CounterType.BLAZE.createInstance(5))); + ability.addTarget(new TargetCreatureOrPlayer()); + this.addAbility(ability); + } + + public FiveAlarmFire(final FiveAlarmFire card) { + super(card); + } + + @Override + public FiveAlarmFire copy() { + return new FiveAlarmFire(this); + } +} + + +class FiveAlarmFireTriggeredAbility extends TriggeredAbilityImpl { + + private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent(); + + public FiveAlarmFireTriggeredAbility() { + super(Constants.Zone.BATTLEFIELD, new AddCountersSourceEffect(CounterType.BLAZE.createInstance()), false); + } + + public FiveAlarmFireTriggeredAbility(final FiveAlarmFireTriggeredAbility ability) { + super(ability); + } + + @Override + public FiveAlarmFireTriggeredAbility copy() { + return new FiveAlarmFireTriggeredAbility(this); + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + if (event.getType() == GameEvent.EventType.DAMAGED_CREATURE || event.getType() == GameEvent.EventType.DAMAGED_PLANESWALKER || event.getType() == GameEvent.EventType.DAMAGED_PLAYER) { + Permanent permanent = game.getPermanent(event.getSourceId()); + if(permanent != null && filter.match(permanent, sourceId, controllerId, game) && ((DamagedCreatureEvent) event).isCombatDamage()){ + return true; + } + } + return false; + } + + @Override + public String getRule() { + return "Whenever a creature you control deals combat damage, " + super.getRule(); + } + +} diff --git a/Mage.Sets/src/mage/sets/gatecrash/HighPriestOfPenance.java b/Mage.Sets/src/mage/sets/gatecrash/HighPriestOfPenance.java new file mode 100644 index 00000000000..1f9ee006f3a --- /dev/null +++ b/Mage.Sets/src/mage/sets/gatecrash/HighPriestOfPenance.java @@ -0,0 +1,109 @@ +/* +/* + * 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.gatecrash; + +import java.util.UUID; +import mage.Constants; +import mage.Constants.CardType; +import mage.Constants.Rarity; +import mage.MageInt; +import mage.abilities.TriggeredAbilityImpl; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.DestroyTargetEffect; +import mage.cards.CardImpl; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.target.common.TargetNonlandPermanent; + +/** + * + * @author Plopman + */ +public class HighPriestOfPenance extends CardImpl { + + public HighPriestOfPenance(UUID ownerId) { + super(ownerId, 171, "High Priest of Penance", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{W}{B}"); + this.expansionSetCode = "GTC"; + this.subtype.add("Human"); + this.subtype.add("Cleric"); + + this.color.setWhite(true); + this.color.setBlack(true); + + this.power = new MageInt(1); + this.toughness = new MageInt(1); + + //Whenever High Priest of Penance is dealt damage, you may destroy target nonland permanent. + this.addAbility(new HighPriestOfPenanceTriggeredAbility()); + } + + public HighPriestOfPenance(final HighPriestOfPenance card) { + super(card); + } + + @Override + public HighPriestOfPenance copy() { + return new HighPriestOfPenance(this); + } +} + +class HighPriestOfPenanceTriggeredAbility extends TriggeredAbilityImpl { + + + public HighPriestOfPenanceTriggeredAbility() { + super(Constants.Zone.BATTLEFIELD, new DestroyTargetEffect(), true); + this.addTarget(new TargetNonlandPermanent()); + } + + public HighPriestOfPenanceTriggeredAbility(final HighPriestOfPenanceTriggeredAbility ability) { + super(ability); + } + + @Override + public HighPriestOfPenanceTriggeredAbility copy() { + return new HighPriestOfPenanceTriggeredAbility(this); + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + if (event.getType() == GameEvent.EventType.DAMAGED_CREATURE) { + if (event.getTargetId().equals(this.sourceId)) { + return true; + } + + } + return false; + } + + @Override + public String getRule() { + return "Whenever {this} of Penance is dealt damage, " + super.getRule(); + } + +}