diff --git a/Mage.Sets/src/mage/sets/archenemy/ImperialHellkite.java b/Mage.Sets/src/mage/sets/archenemy/ImperialHellkite.java new file mode 100644 index 00000000000..f5a85182220 --- /dev/null +++ b/Mage.Sets/src/mage/sets/archenemy/ImperialHellkite.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.archenemy; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.TurnedFaceUpSourceTriggeredAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.search.SearchLibraryPutInHandEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.abilities.keyword.MorphAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.filter.common.FilterBySubtypeCard; +import mage.target.common.TargetCardInLibrary; + +/** + * + * @author fireshoes + */ +public class ImperialHellkite extends CardImpl { + + public ImperialHellkite(UUID ownerId) { + super(ownerId, 42, "Imperial Hellkite", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{5}{R}{R}"); + this.expansionSetCode = "ARC"; + this.subtype.add("Dragon"); + this.power = new MageInt(6); + this.toughness = new MageInt(6); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + + // Morph {6}{R}{R} + this.addAbility(new MorphAbility(this, new ManaCostsImpl("{6}{R}{R}"))); + + // When Imperial Hellkite is turned face up, you may search your library for a Dragon card, reveal it, and put it into your hand. If you do, shuffle your library. + Effect effect = new SearchLibraryPutInHandEffect(new TargetCardInLibrary(0, 1, new FilterBySubtypeCard("Dragon")), true, true); + effect.setText("you may search your library for a Dragon card, reveal it, and put it into your hand. If you do, shuffle your library"); + this.addAbility(new TurnedFaceUpSourceTriggeredAbility(effect)); + } + + public ImperialHellkite(final ImperialHellkite card) { + super(card); + } + + @Override + public ImperialHellkite copy() { + return new ImperialHellkite(this); + } +} diff --git a/Mage.Sets/src/mage/sets/fifthdawn/HelmOfKaldra.java b/Mage.Sets/src/mage/sets/fifthdawn/HelmOfKaldra.java index 40ae18645a0..1192c0ff152 100644 --- a/Mage.Sets/src/mage/sets/fifthdawn/HelmOfKaldra.java +++ b/Mage.Sets/src/mage/sets/fifthdawn/HelmOfKaldra.java @@ -1,183 +1,183 @@ -/* - * 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.fifthdawn; - -import java.util.UUID; -import mage.MageInt; -import mage.abilities.Ability; -import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.Condition; -import mage.abilities.costs.mana.GenericManaCost; -import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.decorator.ConditionalActivatedAbility; -import mage.abilities.effects.Effect; -import mage.abilities.effects.OneShotEffect; -import mage.abilities.effects.common.CreateTokenEffect; -import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect; -import mage.abilities.keyword.EquipAbility; -import mage.abilities.keyword.FirstStrikeAbility; -import mage.abilities.keyword.HasteAbility; -import mage.abilities.keyword.TrampleAbility; -import mage.cards.CardImpl; -import mage.constants.AttachmentType; -import mage.constants.CardType; -import mage.constants.Outcome; -import mage.constants.Rarity; -import mage.constants.Zone; -import mage.filter.common.FilterControlledArtifactPermanent; -import mage.filter.predicate.mageobject.NamePredicate; -import mage.game.Game; -import mage.game.permanent.Permanent; -import mage.game.permanent.token.Token; - -/** - * - * @author LevelX2 - */ -public class HelmOfKaldra extends CardImpl { - - public static final FilterControlledArtifactPermanent filterHelm = new FilterControlledArtifactPermanent(); - public static final FilterControlledArtifactPermanent filterShield = new FilterControlledArtifactPermanent(); - public static final FilterControlledArtifactPermanent filterSword = new FilterControlledArtifactPermanent(); - - static { - filterHelm.add(new NamePredicate("Helm of Kaldra")); - filterShield.add(new NamePredicate("Shield of Kaldra")); - filterSword.add(new NamePredicate("Sword of Kaldra")); - } - - public HelmOfKaldra(UUID ownerId) { - super(ownerId, 131, "Helm of Kaldra", Rarity.RARE, new CardType[]{CardType.ARTIFACT}, "{3}"); - this.expansionSetCode = "5DN"; - this.supertype.add("Legendary"); - this.subtype.add("Equipment"); - - // Equipped creature has first strike, trample, and haste. - Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(FirstStrikeAbility.getInstance(), AttachmentType.EQUIPMENT)); - Effect effect = new GainAbilityAttachedEffect(TrampleAbility.getInstance(), AttachmentType.EQUIPMENT); - effect.setText(", trample"); - ability.addEffect(effect); - effect = new GainAbilityAttachedEffect(HasteAbility.getInstance(), AttachmentType.EQUIPMENT); - effect.setText("and haste"); - ability.addEffect(effect); - this.addAbility(ability); - // {1}: If you control Equipment named Helm of Kaldra, Sword of Kaldra, and Shield of Kaldra, put a legendary 4/4 colorless Avatar creature token named Kaldra onto the battlefield and attach those Equipment to it. - this.addAbility(new ConditionalActivatedAbility( - Zone.BATTLEFIELD, - new HelmOfKaldraEffect(), - new GenericManaCost(1), - new HelmOfKaldraCondition(), - "{1}: If you control Equipment named Helm of Kaldra, Sword of Kaldra, and Shield of Kaldra, put a legendary 4/4 colorless Avatar creature token named Kaldra onto the battlefield and attach those Equipment to it")); - // Equip {2} - this.addAbility(new EquipAbility(Outcome.Benefit, new ManaCostsImpl("{2}"))); - } - - public HelmOfKaldra(final HelmOfKaldra card) { - super(card); - } - - @Override - public HelmOfKaldra copy() { - return new HelmOfKaldra(this); - } -} - -class HelmOfKaldraCondition implements Condition { - - @Override - public boolean apply(Game game, Ability source) { - if (game.getBattlefield().count(HelmOfKaldra.filterHelm, source.getSourceId(), source.getControllerId(), game) < 1) { - return false; - } - if (game.getBattlefield().count(HelmOfKaldra.filterShield, source.getSourceId(), source.getControllerId(), game) < 1) { - return false; - } - return game.getBattlefield().count(HelmOfKaldra.filterShield, source.getSourceId(), source.getControllerId(), game) >= 1; - } - -} - -class HelmOfKaldraEffect extends OneShotEffect { - - public HelmOfKaldraEffect() { - super(Outcome.Benefit); - this.staticText = "If you control Equipment named Helm of Kaldra, Sword of Kaldra, and Shield of Kaldra, put a legendary 4/4 colorless Avatar creature token named Kaldra onto the battlefield and attach those Equipment to it"; - } - - public HelmOfKaldraEffect(final HelmOfKaldraEffect effect) { - super(effect); - } - - @Override - public HelmOfKaldraEffect copy() { - return new HelmOfKaldraEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - if (new HelmOfKaldraCondition().apply(game, source)) { - CreateTokenEffect effect = new CreateTokenEffect(new KaldraToken()); - effect.apply(game, source); - for (UUID tokenId : effect.getLastAddedTokenIds()) { - Permanent kaldra = game.getPermanent(tokenId); - if (kaldra != null) { - // Attach helm to the token - for (Permanent kaldrasHelm : game.getBattlefield().getAllActivePermanents(HelmOfKaldra.filterHelm, source.getControllerId(), game)) { - kaldra.addAttachment(kaldrasHelm.getId(), game); - break; - } - // Attach shield to the token - for (Permanent kaldrasShield : game.getBattlefield().getAllActivePermanents(HelmOfKaldra.filterShield, source.getControllerId(), game)) { - kaldra.addAttachment(kaldrasShield.getId(), game); - break; - } - // Attach sword to the token - for (Permanent kaldrasSword : game.getBattlefield().getAllActivePermanents(HelmOfKaldra.filterSword, source.getControllerId(), game)) { - kaldra.addAttachment(kaldrasSword.getId(), game); - break; - } - - } - return true; - } - } - return false; - } -} - -class KaldraToken extends Token { - - public KaldraToken() { - super("Kaldra", "legendary 4/4 colorless Avatar creature token named Kaldra"); - supertype.add("Legendary"); - cardType.add(CardType.CREATURE); - subtype.add("Avatar"); - power = new MageInt(4); - toughness = new MageInt(4); - } -} +/* + * 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.fifthdawn; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.condition.Condition; +import mage.abilities.costs.mana.GenericManaCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.decorator.ConditionalActivatedAbility; +import mage.abilities.effects.Effect; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect; +import mage.abilities.keyword.EquipAbility; +import mage.abilities.keyword.FirstStrikeAbility; +import mage.abilities.keyword.HasteAbility; +import mage.abilities.keyword.TrampleAbility; +import mage.cards.CardImpl; +import mage.constants.AttachmentType; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterControlledArtifactPermanent; +import mage.filter.predicate.mageobject.NamePredicate; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.game.permanent.token.Token; + +/** + * + * @author LevelX2 + */ +public class HelmOfKaldra extends CardImpl { + + public static final FilterControlledArtifactPermanent filterHelm = new FilterControlledArtifactPermanent(); + public static final FilterControlledArtifactPermanent filterShield = new FilterControlledArtifactPermanent(); + public static final FilterControlledArtifactPermanent filterSword = new FilterControlledArtifactPermanent(); + + static { + filterHelm.add(new NamePredicate("Helm of Kaldra")); + filterShield.add(new NamePredicate("Shield of Kaldra")); + filterSword.add(new NamePredicate("Sword of Kaldra")); + } + + public HelmOfKaldra(UUID ownerId) { + super(ownerId, 131, "Helm of Kaldra", Rarity.RARE, new CardType[]{CardType.ARTIFACT}, "{3}"); + this.expansionSetCode = "5DN"; + this.supertype.add("Legendary"); + this.subtype.add("Equipment"); + + // Equipped creature has first strike, trample, and haste. + Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(FirstStrikeAbility.getInstance(), AttachmentType.EQUIPMENT)); + Effect effect = new GainAbilityAttachedEffect(TrampleAbility.getInstance(), AttachmentType.EQUIPMENT); + effect.setText(", trample"); + ability.addEffect(effect); + effect = new GainAbilityAttachedEffect(HasteAbility.getInstance(), AttachmentType.EQUIPMENT); + effect.setText("and haste"); + ability.addEffect(effect); + this.addAbility(ability); + // {1}: If you control Equipment named Helm of Kaldra, Sword of Kaldra, and Shield of Kaldra, put a legendary 4/4 colorless Avatar creature token named Kaldra onto the battlefield and attach those Equipment to it. + this.addAbility(new ConditionalActivatedAbility( + Zone.BATTLEFIELD, + new HelmOfKaldraEffect(), + new GenericManaCost(1), + new HelmOfKaldraCondition(), + "{1}: If you control Equipment named Helm of Kaldra, Sword of Kaldra, and Shield of Kaldra, put a legendary 4/4 colorless Avatar creature token named Kaldra onto the battlefield and attach those Equipment to it")); + // Equip {2} + this.addAbility(new EquipAbility(Outcome.Benefit, new ManaCostsImpl("{2}"))); + } + + public HelmOfKaldra(final HelmOfKaldra card) { + super(card); + } + + @Override + public HelmOfKaldra copy() { + return new HelmOfKaldra(this); + } +} + +class HelmOfKaldraCondition implements Condition { + + @Override + public boolean apply(Game game, Ability source) { + if (game.getBattlefield().count(HelmOfKaldra.filterHelm, source.getSourceId(), source.getControllerId(), game) < 1) { + return false; + } + if (game.getBattlefield().count(HelmOfKaldra.filterSword, source.getSourceId(), source.getControllerId(), game) < 1) { + return false; + } + return game.getBattlefield().count(HelmOfKaldra.filterShield, source.getSourceId(), source.getControllerId(), game) >= 1; + } + +} + +class HelmOfKaldraEffect extends OneShotEffect { + + public HelmOfKaldraEffect() { + super(Outcome.Benefit); + this.staticText = "If you control Equipment named Helm of Kaldra, Sword of Kaldra, and Shield of Kaldra, put a legendary 4/4 colorless Avatar creature token named Kaldra onto the battlefield and attach those Equipment to it"; + } + + public HelmOfKaldraEffect(final HelmOfKaldraEffect effect) { + super(effect); + } + + @Override + public HelmOfKaldraEffect copy() { + return new HelmOfKaldraEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + if (new HelmOfKaldraCondition().apply(game, source)) { + CreateTokenEffect effect = new CreateTokenEffect(new KaldraToken()); + effect.apply(game, source); + for (UUID tokenId : effect.getLastAddedTokenIds()) { + Permanent kaldra = game.getPermanent(tokenId); + if (kaldra != null) { + // Attach helm to the token + for (Permanent kaldrasHelm : game.getBattlefield().getAllActivePermanents(HelmOfKaldra.filterHelm, source.getControllerId(), game)) { + kaldra.addAttachment(kaldrasHelm.getId(), game); + break; + } + // Attach shield to the token + for (Permanent kaldrasShield : game.getBattlefield().getAllActivePermanents(HelmOfKaldra.filterShield, source.getControllerId(), game)) { + kaldra.addAttachment(kaldrasShield.getId(), game); + break; + } + // Attach sword to the token + for (Permanent kaldrasSword : game.getBattlefield().getAllActivePermanents(HelmOfKaldra.filterSword, source.getControllerId(), game)) { + kaldra.addAttachment(kaldrasSword.getId(), game); + break; + } + + } + return true; + } + } + return false; + } +} + +class KaldraToken extends Token { + + public KaldraToken() { + super("Kaldra", "legendary 4/4 colorless Avatar creature token named Kaldra"); + supertype.add("Legendary"); + cardType.add(CardType.CREATURE); + subtype.add("Avatar"); + power = new MageInt(4); + toughness = new MageInt(4); + } +} diff --git a/Mage.Sets/src/mage/sets/invasion/CoalitionVictory.java b/Mage.Sets/src/mage/sets/invasion/CoalitionVictory.java new file mode 100644 index 00000000000..f255546428d --- /dev/null +++ b/Mage.Sets/src/mage/sets/invasion/CoalitionVictory.java @@ -0,0 +1,54 @@ +/* + * 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.invasion; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author anonymous + */ +public class CoalitionVictory extends mage.sets.timeshifted.CoalitionVictory { + + public CoalitionVictory(UUID ownerId) { + super(ownerId); + this.cardNumber = 241; + this.expansionSetCode = "INV"; + this.rarity = Rarity.RARE; + } + + public CoalitionVictory(final CoalitionVictory card) { + super(card); + } + + @Override + public CoalitionVictory copy() { + return new CoalitionVictory(this); + } +} diff --git a/Mage.Sets/src/mage/sets/legions/ImperialHellkite.java b/Mage.Sets/src/mage/sets/legions/ImperialHellkite.java new file mode 100644 index 00000000000..6a3e96faf3f --- /dev/null +++ b/Mage.Sets/src/mage/sets/legions/ImperialHellkite.java @@ -0,0 +1,52 @@ +/* + * 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.legions; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class ImperialHellkite extends mage.sets.archenemy.ImperialHellkite { + + public ImperialHellkite(UUID ownerId) { + super(ownerId); + this.cardNumber = 103; + this.expansionSetCode = "LGN"; + } + + public ImperialHellkite(final ImperialHellkite card) { + super(card); + } + + @Override + public ImperialHellkite copy() { + return new ImperialHellkite(this); + } +} diff --git a/Mage.Sets/src/mage/sets/mirage/ZirilanOfTheClaw.java b/Mage.Sets/src/mage/sets/mirage/ZirilanOfTheClaw.java new file mode 100644 index 00000000000..69c00094294 --- /dev/null +++ b/Mage.Sets/src/mage/sets/mirage/ZirilanOfTheClaw.java @@ -0,0 +1,139 @@ +/* + * 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.mirage; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.DelayedTriggeredAbility; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.ContinuousEffect; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.ExileTargetEffect; +import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; +import mage.abilities.keyword.HasteAbility; +import mage.cards.Card; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterPermanentCard; +import mage.filter.predicate.mageobject.SubtypePredicate; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.players.Player; +import mage.target.common.TargetCardInLibrary; +import mage.target.targetpointer.FixedTarget; + +/** + * + * @author fireshoes + */ +public class ZirilanOfTheClaw extends CardImpl { + + public ZirilanOfTheClaw(UUID ownerId) { + super(ownerId, 204, "Zirilan of the Claw", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{3}{R}{R}"); + this.expansionSetCode = "MIR"; + this.supertype.add("Legendary"); + this.subtype.add("Viashino"); + this.subtype.add("Shaman"); + this.power = new MageInt(3); + this.toughness = new MageInt(4); + + // {1}{R}{R}, {tap}: Search your library for a Dragon permanent card and put that card onto the battlefield. Then shuffle your library. + // That Dragon gains haste until end of turn. Exile it at the beginning of the next end step. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ZirilanOfTheClawEffect(), new ManaCostsImpl("{1}{R}{R}")); + ability.addCost(new TapSourceCost()); + this.addAbility(ability); + } + + public ZirilanOfTheClaw(final ZirilanOfTheClaw card) { + super(card); + } + + @Override + public ZirilanOfTheClaw copy() { + return new ZirilanOfTheClaw(this); + } +} + +class ZirilanOfTheClawEffect extends OneShotEffect { + + public ZirilanOfTheClawEffect() { + super(Outcome.PutCreatureInPlay); + this.staticText = "Search your library for a Dragon permanent card and put that card onto the battlefield. Then shuffle your library." + + "That Dragon gains haste until end of turn. Exile it at the beginning of the next end step"; + } + + public ZirilanOfTheClawEffect(final ZirilanOfTheClawEffect effect) { + super(effect); + } + + @Override + public ZirilanOfTheClawEffect copy() { + return new ZirilanOfTheClawEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null) { + FilterPermanentCard filter = new FilterPermanentCard("a Dragon permanent card"); + filter.add(new SubtypePredicate("Dragon")); + TargetCardInLibrary target = new TargetCardInLibrary(filter); + if (controller.searchLibrary(target, game)) { + Card card = controller.getLibrary().getCard(target.getFirstTarget(), game); + if (card != null) { + card.putOntoBattlefield(game, Zone.LIBRARY, source.getSourceId(), source.getControllerId()); + Permanent permanent = game.getPermanent(card.getId()); + if (permanent != null) { + // gains haste + ContinuousEffect effect = new GainAbilityTargetEffect(HasteAbility.getInstance(), Duration.EndOfTurn); + effect.setTargetPointer(new FixedTarget(permanent, game)); + game.addEffect(effect, source); + // Exile at begin of next end step + ExileTargetEffect exileEffect = new ExileTargetEffect(null, null, Zone.BATTLEFIELD); + exileEffect.setTargetPointer(new FixedTarget(permanent, game)); + DelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(exileEffect); + delayedAbility.setSourceId(source.getSourceId()); + delayedAbility.setControllerId(source.getControllerId()); + delayedAbility.setSourceObject(source.getSourceObject(game), game); + game.addDelayedTriggeredAbility(delayedAbility); + } + } + return true; + } + } + return false; + } +} diff --git a/Mage.Sets/src/mage/sets/timeshifted/CoalitionVictory.java b/Mage.Sets/src/mage/sets/timeshifted/CoalitionVictory.java new file mode 100644 index 00000000000..cbc0ae7fda2 --- /dev/null +++ b/Mage.Sets/src/mage/sets/timeshifted/CoalitionVictory.java @@ -0,0 +1,128 @@ +/* + * 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.timeshifted; + +import java.util.UUID; +import mage.ObjectColor; +import mage.abilities.Ability; +import mage.abilities.condition.Condition; +import mage.abilities.decorator.ConditionalOneShotEffect; +import mage.abilities.effects.common.WinGameSourceControllerEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledLandPermanent; +import mage.filter.predicate.mageobject.ColorPredicate; +import mage.filter.predicate.mageobject.SubtypePredicate; +import mage.game.Game; + +/** + * + * @author fireshoes + */ +public class CoalitionVictory extends CardImpl { + + public static final FilterControlledLandPermanent filterPlains = new FilterControlledLandPermanent(); + public static final FilterControlledLandPermanent filterIsland = new FilterControlledLandPermanent(); + public static final FilterControlledLandPermanent filterSwamp = new FilterControlledLandPermanent(); + public static final FilterControlledLandPermanent filterMountain = new FilterControlledLandPermanent(); + public static final FilterControlledLandPermanent filterForest = new FilterControlledLandPermanent(); + public static final FilterControlledCreaturePermanent filterWhite = new FilterControlledCreaturePermanent(); + public static final FilterControlledCreaturePermanent filterBlue = new FilterControlledCreaturePermanent(); + public static final FilterControlledCreaturePermanent filterBlack = new FilterControlledCreaturePermanent(); + public static final FilterControlledCreaturePermanent filterRed = new FilterControlledCreaturePermanent(); + public static final FilterControlledCreaturePermanent filterGreen = new FilterControlledCreaturePermanent(); + + static { + filterPlains.add(new SubtypePredicate("Plains")); + filterIsland.add(new SubtypePredicate("Island")); + filterSwamp.add(new SubtypePredicate("Swamp")); + filterMountain.add(new SubtypePredicate("Mountain")); + filterForest.add(new SubtypePredicate("Forest")); + filterWhite.add(new ColorPredicate(ObjectColor.WHITE)); + filterBlue.add(new ColorPredicate(ObjectColor.BLUE)); + filterBlack.add(new ColorPredicate(ObjectColor.BLACK)); + filterRed.add(new ColorPredicate(ObjectColor.RED)); + filterGreen.add(new ColorPredicate(ObjectColor.GREEN)); + } + + public CoalitionVictory(UUID ownerId) { + super(ownerId, 91, "Coalition Victory", Rarity.RARE, new CardType[]{CardType.SORCERY}, "{3}{W}{U}{B}{R}{G}"); + this.expansionSetCode = "TSB"; + + // You win the game if you control a land of each basic land type and a creature of each color. + this.getSpellAbility().addEffect(new ConditionalOneShotEffect(new WinGameSourceControllerEffect(), + new CoalitionVictoryCondition(), + "You win the game if you control a land of each basic land type and a creature of each color.")); + } + + public CoalitionVictory(final CoalitionVictory card) { + super(card); + } + + @Override + public CoalitionVictory copy() { + return new CoalitionVictory(this); + } +} + +class CoalitionVictoryCondition implements Condition { + + @Override + public boolean apply(Game game, Ability source) { + if (game.getBattlefield().count(CoalitionVictory.filterPlains, source.getSourceId(), source.getControllerId(), game) < 1) { + return false; + } + if (game.getBattlefield().count(CoalitionVictory.filterIsland, source.getSourceId(), source.getControllerId(), game) < 1) { + return false; + } + if (game.getBattlefield().count(CoalitionVictory.filterSwamp, source.getSourceId(), source.getControllerId(), game) < 1) { + return false; + } + if (game.getBattlefield().count(CoalitionVictory.filterMountain, source.getSourceId(), source.getControllerId(), game) < 1) { + return false; + } + if (game.getBattlefield().count(CoalitionVictory.filterForest, source.getSourceId(), source.getControllerId(), game) < 1) { + return false; + } + if (game.getBattlefield().count(CoalitionVictory.filterWhite, source.getSourceId(), source.getControllerId(), game) < 1) { + return false; + } + if (game.getBattlefield().count(CoalitionVictory.filterBlue, source.getSourceId(), source.getControllerId(), game) < 1) { + return false; + } + if (game.getBattlefield().count(CoalitionVictory.filterBlack, source.getSourceId(), source.getControllerId(), game) < 1) { + return false; + } + if (game.getBattlefield().count(CoalitionVictory.filterRed, source.getSourceId(), source.getControllerId(), game) < 1) { + return false; + } + return game.getBattlefield().count(CoalitionVictory.filterGreen, source.getSourceId(), source.getControllerId(), game) >= 1; + } +} \ No newline at end of file