diff --git a/Mage.Sets/src/mage/sets/gatecrash/DuskmantleSeer.java b/Mage.Sets/src/mage/sets/gatecrash/DuskmantleSeer.java new file mode 100644 index 00000000000..0191fa33947 --- /dev/null +++ b/Mage.Sets/src/mage/sets/gatecrash/DuskmantleSeer.java @@ -0,0 +1,119 @@ +/* + * 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.Outcome; +import mage.Constants.Rarity; +import mage.Constants.Zone; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.Card; +import mage.cards.CardImpl; +import mage.cards.Cards; +import mage.cards.CardsImpl; +import mage.game.Game; +import mage.players.Player; + +/** + * + * @author LevelX2 + */ +public class DuskmantleSeer extends CardImpl { + + public DuskmantleSeer(UUID ownerId) { + super(ownerId, 159, "Duskmantle Seer", Rarity.MYTHIC, new CardType[]{CardType.CREATURE}, "{2}{U}{B}"); + this.expansionSetCode = "GTC"; + this.subtype.add("Vampire"); + this.subtype.add("Wizard"); + + this.color.setBlue(true); + this.color.setBlack(true); + this.power = new MageInt(4); + this.toughness = new MageInt(4); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + // At the beginning of your upkeep, each player reveals the top card of his or her library, loses life equal to that card's converted mana cost, then puts it into his or her hand. + this.addAbility(new BeginningOfUpkeepTriggeredAbility(Constants.Zone.BATTLEFIELD, new DuskmantleSeerEffect(), Constants.TargetController.YOU, false, false)); + + } + + public DuskmantleSeer(final DuskmantleSeer card) { + super(card); + } + + @Override + public DuskmantleSeer copy() { + return new DuskmantleSeer(this); + } +} + +class DuskmantleSeerEffect extends OneShotEffect { + + public DuskmantleSeerEffect() { + super(Outcome.Detriment); + this.staticText = "each player reveals the top card of his or her library, loses life equal to that card's converted mana cost, then puts it into his or her hand"; + } + + public DuskmantleSeerEffect(final DuskmantleSeerEffect effect) { + super(effect); + } + + @Override + public DuskmantleSeerEffect copy() { + return new DuskmantleSeerEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Card sourceCard = game.getCard(source.getSourceId()); + if (sourceCard == null) { + return false; + } + for (Player player: game.getPlayers().values()) { + if(player.getLibrary().size() > 0){ + Card card = player.getLibrary().removeFromTop(game); + if (card != null) { + Cards cards = new CardsImpl(); + cards.add(card); + player.revealCards(new StringBuilder(sourceCard.getName()).append(": Revealed by ").append(player.getName()).toString(), cards, game); + int lifeLost = player.loseLife(card.getManaCost().convertedManaCost(), game); + game.informPlayers(new StringBuilder(sourceCard.getName()).append(": ").append(player.getName()).append(" loses ").append(lifeLost).append(" life").toString()); + card.moveToZone(Zone.HAND, source.getSourceId(), game, true); + } + } + } + return true; + } +} diff --git a/Mage.Sets/src/mage/sets/gatecrash/ElusiveKrasis.java b/Mage.Sets/src/mage/sets/gatecrash/ElusiveKrasis.java new file mode 100644 index 00000000000..b9cb3766b92 --- /dev/null +++ b/Mage.Sets/src/mage/sets/gatecrash/ElusiveKrasis.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.gatecrash; + +import java.util.UUID; +import mage.Constants.CardType; +import mage.Constants.Rarity; +import mage.MageInt; +import mage.abilities.keyword.EvolveAbility; +import mage.abilities.keyword.UnblockableAbility; +import mage.cards.CardImpl; + +/** + * + * @author LevelX2 + */ +public class ElusiveKrasis extends CardImpl { + + public ElusiveKrasis(UUID ownerId) { + super(ownerId, 160, "Elusive Krasis", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{1}{G}{U}"); + this.expansionSetCode = "GTC"; + this.subtype.add("Fish"); + this.subtype.add("Mutant"); + + this.color.setBlue(true); + this.color.setGreen(true); + this.power = new MageInt(0); + this.toughness = new MageInt(4); + + // Elusive Krasis is unblockable. + this.addAbility(new UnblockableAbility()); + // Evolve + this.addAbility(new EvolveAbility()); + } + + public ElusiveKrasis(final ElusiveKrasis card) { + super(card); + } + + @Override + public ElusiveKrasis copy() { + return new ElusiveKrasis(this); + } +} diff --git a/Mage.Sets/src/mage/sets/gatecrash/ExecutionersSwing.java b/Mage.Sets/src/mage/sets/gatecrash/ExecutionersSwing.java new file mode 100644 index 00000000000..31bd6b07816 --- /dev/null +++ b/Mage.Sets/src/mage/sets/gatecrash/ExecutionersSwing.java @@ -0,0 +1,118 @@ +/* + * 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.HashSet; +import java.util.Set; +import java.util.UUID; +import mage.Constants.CardType; +import mage.Constants.Duration; +import mage.Constants.Rarity; +import mage.abilities.Ability; +import mage.abilities.effects.common.continious.BoostTargetEffect; +import mage.cards.CardImpl; +import mage.filter.common.FilterCreaturePermanent; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.target.TargetPermanent; +import mage.target.common.TargetCreaturePermanent; +import mage.watchers.common.SourceDidDamageWatcher; + +/** + * + * @author LevelX2 + */ +public class ExecutionersSwing extends CardImpl { + + public ExecutionersSwing(UUID ownerId) { + super(ownerId, 161, "Executioner's Swing", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{W}{B}"); + this.expansionSetCode = "GTC"; + + this.color.setBlack(true); + this.color.setWhite(true); + + // Target creature that dealt damage this turn gets -5/-5 until end of turn. + this.getSpellAbility().addEffect(new BoostTargetEffect(-5,-5, Duration.EndOfTurn)); + this.getSpellAbility().addTarget(new TargetCreaturePermanentThatDealtDamageThisTurn()); + + this.addWatcher(new SourceDidDamageWatcher()); + } + + public ExecutionersSwing(final ExecutionersSwing card) { + super(card); + } + + @Override + public ExecutionersSwing copy() { + return new ExecutionersSwing(this); + } +} + +class TargetCreaturePermanentThatDealtDamageThisTurn> extends TargetPermanent> { + + public TargetCreaturePermanentThatDealtDamageThisTurn() { + super(1, 1, new FilterCreaturePermanent(), false); + targetName = "creature that dealt damage this turn"; + } + + public TargetCreaturePermanentThatDealtDamageThisTurn(final TargetCreaturePermanentThatDealtDamageThisTurn target) { + super(target); + } + + @Override + public boolean canTarget(UUID id, Ability source, Game game) { + SourceDidDamageWatcher watcher = (SourceDidDamageWatcher) game.getState().getWatchers().get("SourceDidDamageWatcher"); + if (watcher != null) { + if (watcher.damageSources.contains(id)) { + return super.canTarget(id, source, game); + } + } + return false; + } + + @Override + public Set possibleTargets(UUID sourceId, UUID sourceControllerId, Game game) { + Set availablePossibleTargets = super.possibleTargets(sourceId, sourceControllerId, game); + Set possibleTargets = new HashSet(); + SourceDidDamageWatcher watcher = (SourceDidDamageWatcher) game.getState().getWatchers().get("SourceDidDamageWatcher"); + if (watcher != null) { + for (UUID targetId : availablePossibleTargets) { + Permanent permanent = game.getPermanent(targetId); + if (permanent != null && watcher.damageSources.contains(targetId)) { + possibleTargets.add(targetId); + } + } + } + return possibleTargets; + } + + @Override + public TargetCreaturePermanentThatDealtDamageThisTurn copy() { + return new TargetCreaturePermanentThatDealtDamageThisTurn(this); + } +} diff --git a/Mage.Sets/src/mage/sets/gatecrash/FortressCyclops.java b/Mage.Sets/src/mage/sets/gatecrash/FortressCyclops.java new file mode 100644 index 00000000000..3cd9e601df1 --- /dev/null +++ b/Mage.Sets/src/mage/sets/gatecrash/FortressCyclops.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.gatecrash; + +import java.util.UUID; +import mage.Constants.CardType; +import mage.Constants.Duration; +import mage.Constants.Rarity; +import mage.MageInt; +import mage.abilities.common.AttacksTriggeredAbility; +import mage.abilities.common.BlocksTriggeredAbility; +import mage.abilities.effects.common.continious.BoostSourceEffect; +import mage.cards.CardImpl; + +/** + * + * @author LevelX2 + */ +public class FortressCyclops extends CardImpl { + + public FortressCyclops(UUID ownerId) { + super(ownerId, 164, "Fortress Cyclops", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{3}{R}{W}"); + this.expansionSetCode = "GTC"; + this.subtype.add("Cyclops"); + this.subtype.add("Soldier"); + + this.color.setRed(true); + this.color.setWhite(true); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + // Whenever Fortress Cyclops attacks, it gets +3/+0 until end of turn. + this.addAbility(new AttacksTriggeredAbility(new BoostSourceEffect(3,0, Duration.EndOfTurn), false)); + // Whenever Fortress Cyclops blocks, it gets +0/+3 until end of turn. + this.addAbility(new BlocksTriggeredAbility(new BoostSourceEffect(0,3, Duration.EndOfTurn), false)); + } + + public FortressCyclops(final FortressCyclops card) { + super(card); + } + + @Override + public FortressCyclops copy() { + return new FortressCyclops(this); + } +} diff --git a/Mage.Sets/src/mage/sets/gatecrash/GhorClanRampager.java b/Mage.Sets/src/mage/sets/gatecrash/GhorClanRampager.java new file mode 100644 index 00000000000..05c3cae9546 --- /dev/null +++ b/Mage.Sets/src/mage/sets/gatecrash/GhorClanRampager.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.gatecrash; + +import java.util.UUID; +import mage.Constants; +import mage.Constants.CardType; +import mage.Constants.Rarity; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.effects.common.continious.BoostTargetEffect; +import mage.abilities.effects.common.continious.GainAbilityTargetEffect; +import mage.abilities.keyword.BloodrushAbility; +import mage.abilities.keyword.TrampleAbility; +import mage.cards.CardImpl; +import mage.target.common.TargetAttackingCreature; + +/** + * + * @author LevelX2 + */ +public class GhorClanRampager extends CardImpl { + + public GhorClanRampager(UUID ownerId) { + super(ownerId, 167, "Ghor-Clan Rampager", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{2}{R}{G}"); + this.expansionSetCode = "GTC"; + this.subtype.add("Beast"); + + this.color.setRed(true); + this.color.setGreen(true); + this.power = new MageInt(4); + this.toughness = new MageInt(4); + + // Trample + this.addAbility(TrampleAbility.getInstance()); + // Bloodrush - {R}{G}, Discard Ghor-Clan Rampager: Target attacking creature gets +4/+4 and gains trample until end of turn. + Ability ability = new BloodrushAbility("{R}{G}",new BoostTargetEffect(4,4, Constants.Duration.EndOfTurn)); + ability.addEffect(new GainAbilityTargetEffect(TrampleAbility.getInstance(), Constants.Duration.EndOfTurn)); + ability.addTarget(new TargetAttackingCreature()); + this.addAbility(ability); + } + + public GhorClanRampager(final GhorClanRampager card) { + super(card); + } + + @Override + public GhorClanRampager copy() { + return new GhorClanRampager(this); + } +} diff --git a/Mage.Sets/src/mage/sets/gatecrash/GroundAssault.java b/Mage.Sets/src/mage/sets/gatecrash/GroundAssault.java new file mode 100644 index 00000000000..9c0297c6a2b --- /dev/null +++ b/Mage.Sets/src/mage/sets/gatecrash/GroundAssault.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.gatecrash; + +import java.util.UUID; +import mage.Constants.CardType; +import mage.Constants.Rarity; +import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount; +import mage.abilities.effects.common.DamageTargetEffect; +import mage.cards.CardImpl; +import mage.filter.common.FilterControlledLandPermanent; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author LevelX2 + */ +public class GroundAssault extends CardImpl { + + public GroundAssault(UUID ownerId) { + super(ownerId, 168, "Ground Assault", Rarity.UNCOMMON, new CardType[]{CardType.SORCERY}, "{R}{G}"); + this.expansionSetCode = "GTC"; + + this.color.setRed(true); + this.color.setGreen(true); + + // Ground Assault deals damage to target creature equal to the number of lands you control. + this.getSpellAbility().addEffect(new DamageTargetEffect(new PermanentsOnBattlefieldCount(new FilterControlledLandPermanent()))); + this.getSpellAbility().addTarget(new TargetCreaturePermanent()); + } + + public GroundAssault(final GroundAssault card) { + super(card); + } + + @Override + public GroundAssault copy() { + return new GroundAssault(this); + } +} diff --git a/Mage.Sets/src/mage/sets/gatecrash/HellkiteTyrant.java b/Mage.Sets/src/mage/sets/gatecrash/HellkiteTyrant.java new file mode 100644 index 00000000000..8af16d7f751 --- /dev/null +++ b/Mage.Sets/src/mage/sets/gatecrash/HellkiteTyrant.java @@ -0,0 +1,164 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.gatecrash; + +import java.util.List; +import java.util.UUID; +import mage.Constants; +import mage.Constants.CardType; +import mage.Constants.Duration; +import mage.Constants.Layer; +import mage.Constants.Outcome; +import mage.Constants.Rarity; +import mage.Constants.SubLayer; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.TriggeredAbility; +import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; +import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility; +import mage.abilities.condition.common.ControlsPermanentCondition; +import mage.abilities.decorator.ConditionalTriggeredAbility; +import mage.abilities.effects.ContinuousEffect; +import mage.abilities.effects.ContinuousEffectImpl; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.WinGameEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.abilities.keyword.TrampleAbility; +import mage.cards.CardImpl; +import mage.filter.FilterPermanent; +import mage.filter.common.FilterArtifactPermanent; +import mage.filter.predicate.permanent.ControllerIdPredicate; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.players.Player; +import mage.target.targetpointer.FixedTarget; + +/** + * + * @author LevelX2 + */ +public class HellkiteTyrant extends CardImpl { + + public HellkiteTyrant(UUID ownerId) { + super(ownerId, 94, "Hellkite Tyrant", Rarity.MYTHIC, new CardType[]{CardType.CREATURE}, "{4}{R}{R}"); + this.expansionSetCode = "GTC"; + this.subtype.add("Dragon"); + + this.color.setRed(true); + this.power = new MageInt(6); + this.toughness = new MageInt(5); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + // Trample + this.addAbility(TrampleAbility.getInstance()); + // Whenever Hellkite Tyrant deals combat damage to a player, gain control of all artifacts that player controls. + this.addAbility(new DealsCombatDamageToAPlayerTriggeredAbility(new HellkiteTyrantEffect(),false, true)); + + // At the beginning of your upkeep, if you control twenty or more artifacts, you win the game. + TriggeredAbility ability = new BeginningOfUpkeepTriggeredAbility(new WinGameEffect(), Constants.TargetController.YOU, false); + this.addAbility(new ConditionalTriggeredAbility( + ability, + new ControlsPermanentCondition(new FilterArtifactPermanent(), ControlsPermanentCondition.CountType.MORE_THAN,19), + "At the beginning of your upkeep, if you control twenty or more artifacts, you win the game.")); + + } + + public HellkiteTyrant(final HellkiteTyrant card) { + super(card); + } + + @Override + public HellkiteTyrant copy() { + return new HellkiteTyrant(this); + } +} + +class HellkiteTyrantEffect extends OneShotEffect { + + public HellkiteTyrantEffect() { + super(Outcome.GainControl); + this.staticText = "gain control of all artifacts that player controls"; + } + + public HellkiteTyrantEffect(final HellkiteTyrantEffect effect) { + super(effect); + } + + @Override + public HellkiteTyrantEffect copy() { + return new HellkiteTyrantEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player player = game.getPlayer(getTargetPointer().getFirst(game, source)); + if (player == null) { + return false; + } + FilterPermanent filter = new FilterArtifactPermanent(); + filter.add(new ControllerIdPredicate(player.getId())); + + List permanents = game.getBattlefield().getActivePermanents(filter, source.getControllerId() , game); + for (Permanent permanent : permanents) { + ContinuousEffect effect = new HellkiteTyrantControlEffect(source.getControllerId()); + effect.setTargetPointer(new FixedTarget(permanent.getId())); + game.addEffect(effect, source); + } + return true; + } +} + +class HellkiteTyrantControlEffect extends ContinuousEffectImpl { + + private UUID controllerId; + + public HellkiteTyrantControlEffect(UUID controllerId) { + super(Duration.WhileOnBattlefield, Layer.ControlChangingEffects_2, SubLayer.NA, Outcome.GainControl); + this.controllerId = controllerId; + } + + public HellkiteTyrantControlEffect(final HellkiteTyrantControlEffect effect) { + super(effect); + this.controllerId = effect.controllerId; + } + + @Override + public HellkiteTyrantControlEffect copy() { + return new HellkiteTyrantControlEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Permanent permanent = game.getPermanent(targetPointer.getFirst(game, source)); + if (permanent != null && controllerId != null) { + return permanent.changeControllerId(controllerId, game); + } + return false; + } +} diff --git a/Mage.Sets/src/mage/sets/gatecrash/Hydroform.java b/Mage.Sets/src/mage/sets/gatecrash/Hydroform.java new file mode 100644 index 00000000000..69e8b967e13 --- /dev/null +++ b/Mage.Sets/src/mage/sets/gatecrash/Hydroform.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.gatecrash; + +import java.util.UUID; +import mage.Constants; +import mage.Constants.CardType; +import mage.Constants.Rarity; +import mage.MageInt; +import mage.abilities.effects.common.continious.BecomesCreatureTargetEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.game.permanent.token.Token; +import mage.target.common.TargetLandPermanent; + +/** + * + * @author LevelX2 + */ +public class Hydroform extends CardImpl { + + public Hydroform(UUID ownerId) { + super(ownerId, 172, "Hydroform", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{G}{U}"); + this.expansionSetCode = "GTC"; + + this.color.setBlue(true); + this.color.setGreen(true); + + // Target land becomes a 3/3 Elemental creature with flying until end of turn. It's still a land. + this.getSpellAbility().addEffect(new BecomesCreatureTargetEffect(new HydroformToken(), "land", Constants.Duration.EndOfTurn)); + this.getSpellAbility().addTarget(new TargetLandPermanent()); + } + + public Hydroform(final Hydroform card) { + super(card); + } + + @Override + public Hydroform copy() { + return new Hydroform(this); + } +} + +class HydroformToken extends Token { + + public HydroformToken() { + super("", "3/3 Elemental creature with flying"); + this.cardType.add(CardType.CREATURE); + this.getSubtype().add("Elemental"); + + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + this.addAbility(FlyingAbility.getInstance()); + } +} diff --git a/Mage.Sets/src/mage/sets/gatecrash/KingpinsPet.java b/Mage.Sets/src/mage/sets/gatecrash/KingpinsPet.java new file mode 100644 index 00000000000..a68d62c78db --- /dev/null +++ b/Mage.Sets/src/mage/sets/gatecrash/KingpinsPet.java @@ -0,0 +1,68 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.gatecrash; + +import java.util.UUID; +import mage.Constants.CardType; +import mage.Constants.Rarity; +import mage.MageInt; +import mage.abilities.keyword.FlyingAbility; +import mage.abilities.keyword.ExtortAbility; +import mage.cards.CardImpl; + +/** + * + * @author LevelX2 + */ +public class KingpinsPet extends CardImpl { + + public KingpinsPet(UUID ownerId) { + super(ownerId, 173, "Kingpin's Pet", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{1}{W}{B}"); + this.expansionSetCode = "GTC"; + this.subtype.add("Thrull"); + + this.color.setBlack(true); + this.color.setWhite(true); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + // Extort + this.addAbility(new ExtortAbility()); + } + + public KingpinsPet(final KingpinsPet card) { + super(card); + } + + @Override + public KingpinsPet copy() { + return new KingpinsPet(this); + } +}