From beaa80f16e41f8bcbe46bfa5dd908acd91840ae8 Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Sat, 14 Mar 2015 16:19:09 +0100 Subject: [PATCH] [DTK] Added 23 green cards. Some other fixes. Added handling of Fight events. --- .../sets/avacynrestored/AbundantGrowth.java | 2 +- .../mage/sets/bornofthegods/PillarOfWar.java | 4 +- .../mage/sets/dragonsmaze/ScabClanGiant.java | 4 +- .../dragonsoftarkir/AinokArtillerist.java | 71 ++++++++ .../dragonsoftarkir/AssaultFormation.java | 127 ++++++++++++++ .../dragonsoftarkir/AtarkaBeastbreaker.java | 76 ++++++++ .../dragonsoftarkir/AvatarOfTheResolute.java | 3 +- .../sets/dragonsoftarkir/CircleOfElders.java | 80 +++++++++ .../dragonsoftarkir/CollectedCompany.java | 3 +- .../sets/dragonsoftarkir/CraterElemental.java | 1 - .../sets/dragonsoftarkir/DeathmistRaptor.java | 109 ++++++++++++ .../dragonsoftarkir/DisplayOfDominance.java | 133 ++++++++++++++ .../dragonsoftarkir/DragonScarredBear.java | 77 ++++++++ .../sets/dragonsoftarkir/DromokasGift.java | 58 ++++++ .../sets/dragonsoftarkir/FoeRazerRegent.java | 165 ++++++++++++++++++ .../sets/dragonsoftarkir/GladeWatcher.java | 79 +++++++++ .../dragonsoftarkir/GuardianShieldBearer.java | 83 +++++++++ .../sets/dragonsoftarkir/InspiringCall.java | 75 ++++++++ .../sets/dragonsoftarkir/LurkingArynx.java | 76 ++++++++ .../sets/dragonsoftarkir/ObscuringAEther.java | 78 +++++++++ .../sets/dragonsoftarkir/PinionFeast.java | 72 ++++++++ .../dragonsoftarkir/PressTheAdvantage.java | 68 ++++++++ .../sets/dragonsoftarkir/RevealingWind.java | 121 +++++++++++++ .../SaltRoadQuartermasters.java | 82 +++++++++ .../dragonsoftarkir/SandsteppeScavenger.java | 64 +++++++ .../dragonsoftarkir/ScaleguardSentinels.java | 52 ++++++ .../sets/dragonsoftarkir/SegmentedKrotiq.java | 63 +++++++ .../dragonsoftarkir/ServantOfTheScale.java | 115 ++++++++++++ .../sets/dragonsoftarkir/ShapeTheSands.java | 70 ++++++++ .../sets/dragonsoftarkir/ShelteredAerie.java | 81 +++++++++ .../dragonsoftarkir/SightOfTheScalelords.java | 83 +++++++++ .../mage/sets/dragonsoftarkir/TreadUpon.java | 69 ++++++++ .../src/mage/sets/eventide/FloodedGrove.java | 7 +- .../sets/fatereforged/TemurWarShaman.java | 3 +- .../sets/futuresight/VeilstoneAmulet.java | 19 +- .../mage/sets/gatecrash/GruulRagebeast.java | 4 +- .../src/mage/sets/guildpact/Wildsize.java | 12 +- .../sets/innistrad/NightfallPredator.java | 4 +- .../mage/sets/khansoftarkir/SecretPlans.java | 44 +---- .../mage/sets/limitedalpha/AnimateWall.java | 4 +- .../mage/sets/lorwyn/DoranTheSiegeTower.java | 14 +- .../sets/mirrodinbesieged/SpireSerpent.java | 4 +- .../mage/sets/returntoravnica/ChaosImps.java | 13 +- .../src/mage/sets/tempest/SpikeDrone.java | 6 +- .../src/mage/sets/tenth/AngelicBlessing.java | 16 +- .../src/mage/sets/theros/ColossusOfAkros.java | 4 +- .../src/mage/sets/theros/ReturnedPhalanx.java | 4 +- .../TurnedFaceUpAllTriggeredAbility.java | 10 +- .../common/AddManaOfAnyColorEffect.java | 2 +- .../common/FightTargetSourceEffect.java | 5 +- .../effects/common/FightTargetsEffect.java | 4 +- ...oughtItDidntHaveDefenderSourceEffect.java} | 14 +- ...houghtItDidntHaveDefenderTargetEffect.java | 84 +++++++++ Mage/src/mage/game/combat/Combat.java | 17 +- Mage/src/mage/game/combat/CombatGroup.java | 2 +- Mage/src/mage/game/events/GameEvent.java | 1 + Mage/src/mage/game/permanent/Permanent.java | 2 + .../mage/game/permanent/PermanentImpl.java | 9 +- 58 files changed, 2426 insertions(+), 126 deletions(-) create mode 100644 Mage.Sets/src/mage/sets/dragonsoftarkir/AinokArtillerist.java create mode 100644 Mage.Sets/src/mage/sets/dragonsoftarkir/AssaultFormation.java create mode 100644 Mage.Sets/src/mage/sets/dragonsoftarkir/AtarkaBeastbreaker.java create mode 100644 Mage.Sets/src/mage/sets/dragonsoftarkir/CircleOfElders.java create mode 100644 Mage.Sets/src/mage/sets/dragonsoftarkir/DeathmistRaptor.java create mode 100644 Mage.Sets/src/mage/sets/dragonsoftarkir/DisplayOfDominance.java create mode 100644 Mage.Sets/src/mage/sets/dragonsoftarkir/DragonScarredBear.java create mode 100644 Mage.Sets/src/mage/sets/dragonsoftarkir/DromokasGift.java create mode 100644 Mage.Sets/src/mage/sets/dragonsoftarkir/FoeRazerRegent.java create mode 100644 Mage.Sets/src/mage/sets/dragonsoftarkir/GladeWatcher.java create mode 100644 Mage.Sets/src/mage/sets/dragonsoftarkir/GuardianShieldBearer.java create mode 100644 Mage.Sets/src/mage/sets/dragonsoftarkir/InspiringCall.java create mode 100644 Mage.Sets/src/mage/sets/dragonsoftarkir/LurkingArynx.java create mode 100644 Mage.Sets/src/mage/sets/dragonsoftarkir/ObscuringAEther.java create mode 100644 Mage.Sets/src/mage/sets/dragonsoftarkir/PinionFeast.java create mode 100644 Mage.Sets/src/mage/sets/dragonsoftarkir/PressTheAdvantage.java create mode 100644 Mage.Sets/src/mage/sets/dragonsoftarkir/RevealingWind.java create mode 100644 Mage.Sets/src/mage/sets/dragonsoftarkir/SaltRoadQuartermasters.java create mode 100644 Mage.Sets/src/mage/sets/dragonsoftarkir/SandsteppeScavenger.java create mode 100644 Mage.Sets/src/mage/sets/dragonsoftarkir/ScaleguardSentinels.java create mode 100644 Mage.Sets/src/mage/sets/dragonsoftarkir/SegmentedKrotiq.java create mode 100644 Mage.Sets/src/mage/sets/dragonsoftarkir/ServantOfTheScale.java create mode 100644 Mage.Sets/src/mage/sets/dragonsoftarkir/ShapeTheSands.java create mode 100644 Mage.Sets/src/mage/sets/dragonsoftarkir/ShelteredAerie.java create mode 100644 Mage.Sets/src/mage/sets/dragonsoftarkir/SightOfTheScalelords.java create mode 100644 Mage.Sets/src/mage/sets/dragonsoftarkir/TreadUpon.java rename Mage/src/mage/abilities/effects/common/combat/{CanAttackAsThoughtItDidntHaveDefenderEffect.java => CanAttackAsThoughtItDidntHaveDefenderSourceEffect.java} (78%) create mode 100644 Mage/src/mage/abilities/effects/common/combat/CanAttackAsThoughtItDidntHaveDefenderTargetEffect.java diff --git a/Mage.Sets/src/mage/sets/avacynrestored/AbundantGrowth.java b/Mage.Sets/src/mage/sets/avacynrestored/AbundantGrowth.java index c5a18998f1..92af4cd0f7 100644 --- a/Mage.Sets/src/mage/sets/avacynrestored/AbundantGrowth.java +++ b/Mage.Sets/src/mage/sets/avacynrestored/AbundantGrowth.java @@ -58,7 +58,7 @@ public class AbundantGrowth extends CardImpl { // Enchant land TargetPermanent auraTarget = new TargetLandPermanent(); this.getSpellAbility().addTarget(auraTarget); - this.getSpellAbility().addEffect(new AttachEffect(Outcome.Detriment)); + this.getSpellAbility().addEffect(new AttachEffect(Outcome.Benefit)); Ability ability = new EnchantAbility(auraTarget.getTargetName()); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/sets/bornofthegods/PillarOfWar.java b/Mage.Sets/src/mage/sets/bornofthegods/PillarOfWar.java index 56c09aec43..7cad13237f 100644 --- a/Mage.Sets/src/mage/sets/bornofthegods/PillarOfWar.java +++ b/Mage.Sets/src/mage/sets/bornofthegods/PillarOfWar.java @@ -34,7 +34,7 @@ import mage.abilities.common.SimpleStaticAbility; import mage.abilities.condition.common.EnchantedCondition; import mage.abilities.decorator.ConditionalAsThoughEffect; import mage.abilities.effects.Effect; -import mage.abilities.effects.common.combat.CanAttackAsThoughtItDidntHaveDefenderEffect; +import mage.abilities.effects.common.combat.CanAttackAsThoughtItDidntHaveDefenderSourceEffect; import mage.abilities.keyword.DefenderAbility; import mage.cards.CardImpl; import mage.constants.CardType; @@ -60,7 +60,7 @@ public class PillarOfWar extends CardImpl { this.addAbility(DefenderAbility.getInstance()); // As long as Pillar of War is enchanted, it can attack as though it didn't have defender. Effect effect = new ConditionalAsThoughEffect( - new CanAttackAsThoughtItDidntHaveDefenderEffect(Duration.WhileOnBattlefield), + new CanAttackAsThoughtItDidntHaveDefenderSourceEffect(Duration.WhileOnBattlefield), new EnchantedCondition()); effect.setText("As long as {this} is enchanted, it can attack as though it didn't have defender"); this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect)); diff --git a/Mage.Sets/src/mage/sets/dragonsmaze/ScabClanGiant.java b/Mage.Sets/src/mage/sets/dragonsmaze/ScabClanGiant.java index 51ee138fd7..6338e83699 100644 --- a/Mage.Sets/src/mage/sets/dragonsmaze/ScabClanGiant.java +++ b/Mage.Sets/src/mage/sets/dragonsmaze/ScabClanGiant.java @@ -108,9 +108,7 @@ class ScabClanGiantEffect extends OneShotEffect { // 20110930 - 701.10 if (creature1 != null && creature2 != null) { if (creature1.getCardType().contains(CardType.CREATURE) && creature2.getCardType().contains(CardType.CREATURE)) { - creature1.damage(creature2.getPower().getValue(), creature2.getId(), game, false, true); - creature2.damage(creature1.getPower().getValue(), creature1.getId(), game, false, true); - return true; + return creature1.fight(creature2, source, game); } } return false; diff --git a/Mage.Sets/src/mage/sets/dragonsoftarkir/AinokArtillerist.java b/Mage.Sets/src/mage/sets/dragonsoftarkir/AinokArtillerist.java new file mode 100644 index 0000000000..3440aa88f7 --- /dev/null +++ b/Mage.Sets/src/mage/sets/dragonsoftarkir/AinokArtillerist.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.dragonsoftarkir; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.condition.common.SourceHasCounterCondition; +import mage.abilities.decorator.ConditionalContinuousEffect; +import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; +import mage.abilities.keyword.ReachAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.counters.CounterType; + +/** + * + * @author LevelX2 + */ +public class AinokArtillerist extends CardImpl { + + public AinokArtillerist(UUID ownerId) { + super(ownerId, 171, "Ainok Artillerist", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{2}{G}"); + this.expansionSetCode = "DTK"; + this.subtype.add("Hound"); + this.subtype.add("Arch"); + this.power = new MageInt(4); + this.toughness = new MageInt(1); + + // Ainok Artillerist has reach as long as it has a +1/+1 counter on it. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, + new ConditionalContinuousEffect(new GainAbilitySourceEffect(ReachAbility.getInstance()), + new SourceHasCounterCondition(CounterType.P1P1),"{this} has reach as long as it has a +1/+1 counter on it"))); + } + + public AinokArtillerist(final AinokArtillerist card) { + super(card); + } + + @Override + public AinokArtillerist copy() { + return new AinokArtillerist(this); + } +} diff --git a/Mage.Sets/src/mage/sets/dragonsoftarkir/AssaultFormation.java b/Mage.Sets/src/mage/sets/dragonsoftarkir/AssaultFormation.java new file mode 100644 index 0000000000..5e30ae6d56 --- /dev/null +++ b/Mage.Sets/src/mage/sets/dragonsoftarkir/AssaultFormation.java @@ -0,0 +1,127 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.dragonsoftarkir; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.ContinuousEffectImpl; +import mage.abilities.effects.common.combat.CanAttackAsThoughtItDidntHaveDefenderTargetEffect; +import mage.abilities.effects.common.continuous.BoostControlledEffect; +import mage.abilities.keyword.DefenderAbility; +import mage.cards.CardImpl; +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.constants.Zone; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.predicate.permanent.ControllerIdPredicate; +import mage.game.Game; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author LevelX2 + */ +public class AssaultFormation extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with defender"); + + static { + filter.add(new AbilityPredicate(DefenderAbility.class)); + } + + public AssaultFormation(UUID ownerId) { + super(ownerId, 173, "Assault Formation", Rarity.RARE, new CardType[]{CardType.ENCHANTMENT}, "{1}{G}"); + this.expansionSetCode = "DTK"; + + // Each creature you control assigns combat damage equal to its toughness rather than its power. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new AssaultFormationCombatDamageRuleEffect())); + + // {G}: Target creature with defender can attack this turn as though it didn't have defender. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CanAttackAsThoughtItDidntHaveDefenderTargetEffect(Duration.EndOfTurn), new ManaCostsImpl("{G}")); + ability.addTarget(new TargetCreaturePermanent(filter)); + this.addAbility(ability); + + // {2}{G}: Creatures you control get +0/+1 until end of turn. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostControlledEffect(0,1,Duration.EndOfTurn), new ManaCostsImpl("{2}{G}"))); + + } + + public AssaultFormation(final AssaultFormation card) { + super(card); + } + + @Override + public AssaultFormation copy() { + return new AssaultFormation(this); + } +} + +class AssaultFormationCombatDamageRuleEffect extends ContinuousEffectImpl { + + public AssaultFormationCombatDamageRuleEffect() { + super(Duration.WhileOnBattlefield, Outcome.Detriment); + staticText = "Each creature assigns combat damage equal to its toughness rather than its power"; + } + + public AssaultFormationCombatDamageRuleEffect(final AssaultFormationCombatDamageRuleEffect effect) { + super(effect); + } + + @Override + public AssaultFormationCombatDamageRuleEffect copy() { + return new AssaultFormationCombatDamageRuleEffect(this); + } + + @Override + public boolean apply(Layer layer, SubLayer sublayer, Ability source, Game game) { + // Change the rule + FilterCreaturePermanent filter = new FilterCreaturePermanent(); + filter.add(new ControllerIdPredicate(source.getControllerId())); + game.getCombat().setUseToughnessForDamage(true); + game.getCombat().addUseToughnessForDamageFilter(filter); + return true; + } + + @Override + public boolean apply(Game game, Ability source) { + return false; + } + + @Override + public boolean hasLayer(Layer layer) { + return layer == Layer.RulesEffects; + } +} diff --git a/Mage.Sets/src/mage/sets/dragonsoftarkir/AtarkaBeastbreaker.java b/Mage.Sets/src/mage/sets/dragonsoftarkir/AtarkaBeastbreaker.java new file mode 100644 index 0000000000..d0fda78ed9 --- /dev/null +++ b/Mage.Sets/src/mage/sets/dragonsoftarkir/AtarkaBeastbreaker.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.dragonsoftarkir; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.ActivateIfConditionActivatedAbility; +import mage.abilities.condition.common.FormidableCondition; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.continuous.BoostSourceEffect; +import mage.cards.CardImpl; +import mage.constants.AbilityWord; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; + +/** + * + * @author LevelX2 + */ +public class AtarkaBeastbreaker extends CardImpl { + + public AtarkaBeastbreaker(UUID ownerId) { + super(ownerId, 174, "Atarka Beastbreaker", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{1}{G}"); + this.expansionSetCode = "DTK"; + this.subtype.add("Human"); + this.subtype.add("Warrior"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // Formidable - {4}{G}: Atarka Beastbreaker gets +4/+4 until end of turn. Activate this only if creatures you control have total power 8 or greater. + Ability ability = new ActivateIfConditionActivatedAbility( + Zone.BATTLEFIELD, + new BoostSourceEffect(4,4, Duration.EndOfTurn), + new ManaCostsImpl("{4}{G}"), + FormidableCondition.getInstance()); + ability.setAbilityWord(AbilityWord.FORMIDABLE); + this.addAbility(ability); + } + + public AtarkaBeastbreaker(final AtarkaBeastbreaker card) { + super(card); + } + + @Override + public AtarkaBeastbreaker copy() { + return new AtarkaBeastbreaker(this); + } +} diff --git a/Mage.Sets/src/mage/sets/dragonsoftarkir/AvatarOfTheResolute.java b/Mage.Sets/src/mage/sets/dragonsoftarkir/AvatarOfTheResolute.java index d1de1ad6ad..ac00d35b5d 100644 --- a/Mage.Sets/src/mage/sets/dragonsoftarkir/AvatarOfTheResolute.java +++ b/Mage.Sets/src/mage/sets/dragonsoftarkir/AvatarOfTheResolute.java @@ -71,7 +71,8 @@ public class AvatarOfTheResolute extends CardImpl { // Avatar of the Resolute enters the battlefield with a +1/+1 counter on it for each other creature you control with a +1/+1 counter on it. DynamicValue numberCounters = new PermanentsOnBattlefieldCount(filter); - this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance(), numberCounters, true))); + this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance(), numberCounters, true), + "with a +1/+1 counter on it for each other creature you control with a +1/+1 counter on it")); } diff --git a/Mage.Sets/src/mage/sets/dragonsoftarkir/CircleOfElders.java b/Mage.Sets/src/mage/sets/dragonsoftarkir/CircleOfElders.java new file mode 100644 index 0000000000..d91d3f2a86 --- /dev/null +++ b/Mage.Sets/src/mage/sets/dragonsoftarkir/CircleOfElders.java @@ -0,0 +1,80 @@ +/* + * 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.dragonsoftarkir; + +import java.util.UUID; +import mage.MageInt; +import mage.Mana; +import mage.abilities.Ability; +import mage.abilities.condition.common.FormidableCondition; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.effects.common.BasicManaEffect; +import mage.abilities.keyword.VigilanceAbility; +import mage.abilities.mana.ActivateIfConditionManaAbility; +import mage.cards.CardImpl; +import mage.constants.AbilityWord; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; + +/** + * + * @author LevelX2 + */ +public class CircleOfElders extends CardImpl { + + public CircleOfElders(UUID ownerId) { + super(ownerId, 176, "Circle of Elders", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{2}{G}{G}"); + this.expansionSetCode = "DTK"; + this.subtype.add("Human"); + this.subtype.add("Shaman"); + this.power = new MageInt(2); + this.toughness = new MageInt(4); + + // Vigilance + this.addAbility(VigilanceAbility.getInstance()); + + // Formidable - {T}: Add {3} to your mana pool. Activate this only if creatures you control have total power 8 or greater. + Ability ability = new ActivateIfConditionManaAbility( + Zone.BATTLEFIELD, + new BasicManaEffect(new Mana(0,0,0,0,0,3,0)), + new TapSourceCost(), + FormidableCondition.getInstance()); + ability.setAbilityWord(AbilityWord.FORMIDABLE); + this.addAbility(ability); + } + + public CircleOfElders(final CircleOfElders card) { + super(card); + } + + @Override + public CircleOfElders copy() { + return new CircleOfElders(this); + } +} diff --git a/Mage.Sets/src/mage/sets/dragonsoftarkir/CollectedCompany.java b/Mage.Sets/src/mage/sets/dragonsoftarkir/CollectedCompany.java index a2dcc66fb0..565b64438e 100644 --- a/Mage.Sets/src/mage/sets/dragonsoftarkir/CollectedCompany.java +++ b/Mage.Sets/src/mage/sets/dragonsoftarkir/CollectedCompany.java @@ -32,6 +32,7 @@ import mage.abilities.effects.common.LookLibraryAndPickControllerEffect; import mage.cards.CardImpl; import mage.constants.CardType; import mage.constants.Rarity; +import mage.constants.Zone; import mage.filter.Filter.ComparisonType; import mage.filter.FilterCard; import mage.filter.predicate.mageobject.CardTypePredicate; @@ -55,7 +56,7 @@ public class CollectedCompany extends CardImpl { this.expansionSetCode = "DTK"; // Look at the top six cards of your library. Put up to two creature cards with converted mana cost 3 or less from among them onto the battlefield. Put the rest on the bottom of your library in any order. - this.getSpellAbility().addEffect(new LookLibraryAndPickControllerEffect(6, 2, filter, true)); + this.getSpellAbility().addEffect(new LookLibraryAndPickControllerEffect(6, 2, filter, false, true, Zone.BATTLEFIELD, false)); } diff --git a/Mage.Sets/src/mage/sets/dragonsoftarkir/CraterElemental.java b/Mage.Sets/src/mage/sets/dragonsoftarkir/CraterElemental.java index b24004f326..642794ddda 100644 --- a/Mage.Sets/src/mage/sets/dragonsoftarkir/CraterElemental.java +++ b/Mage.Sets/src/mage/sets/dragonsoftarkir/CraterElemental.java @@ -37,7 +37,6 @@ import mage.abilities.costs.common.SacrificeSourceCost; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.dynamicvalue.common.StaticValue; -import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.effects.common.DamageTargetEffect; import mage.abilities.effects.common.continuous.SetPowerSourceEffect; import mage.cards.CardImpl; diff --git a/Mage.Sets/src/mage/sets/dragonsoftarkir/DeathmistRaptor.java b/Mage.Sets/src/mage/sets/dragonsoftarkir/DeathmistRaptor.java new file mode 100644 index 0000000000..b3aec80aac --- /dev/null +++ b/Mage.Sets/src/mage/sets/dragonsoftarkir/DeathmistRaptor.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.dragonsoftarkir; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.TurnedFaceUpAllTriggeredAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.keyword.DeathtouchAbility; +import mage.abilities.keyword.MorphAbility; +import mage.cards.Card; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterControlledPermanent; +import mage.game.Game; +import mage.players.Player; + +/** + * + * @author LevelX2 + */ +public class DeathmistRaptor extends CardImpl { + + public DeathmistRaptor(UUID ownerId) { + super(ownerId, 180, "Deathmist Raptor", Rarity.MYTHIC, new CardType[]{CardType.CREATURE}, "{1}{G}{G}"); + this.expansionSetCode = "DTK"; + this.subtype.add("Lizard"); + this.subtype.add("Beast"); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + // Deathtouch + this.addAbility(DeathtouchAbility.getInstance()); + + // Whenever a permanent you control is turned face up, you may return Deathmist Raptor from your graveyard to the battlefield face up or face down. + this.addAbility(new TurnedFaceUpAllTriggeredAbility(Zone.GRAVEYARD, new DeathmistRaptorEffect(), new FilterControlledPermanent(), false, true)); + + // Megamorph {4}{G} + this.addAbility(new MorphAbility(this, new ManaCostsImpl("{4}{G}"), true)); + } + + public DeathmistRaptor(final DeathmistRaptor card) { + super(card); + } + + @Override + public DeathmistRaptor copy() { + return new DeathmistRaptor(this); + } +} + +class DeathmistRaptorEffect extends OneShotEffect { + + public DeathmistRaptorEffect() { + super(Outcome.Benefit); + this.staticText = "you may return {this} from your graveyard to the battlefield face up or face down"; + } + + public DeathmistRaptorEffect(final DeathmistRaptorEffect effect) { + super(effect); + } + + @Override + public DeathmistRaptorEffect copy() { + return new DeathmistRaptorEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + Card card = game.getCard(source.getSourceId()); + if (controller != null && card != null) { + controller.putOntoBattlefieldWithInfo(card, game, Zone.GRAVEYARD, source.getSourceId(), false, + controller.chooseUse(Outcome.Detriment, "Return " + card.getName() + " face down to battlefield?", game)); + return true; + } + return false; + } +} diff --git a/Mage.Sets/src/mage/sets/dragonsoftarkir/DisplayOfDominance.java b/Mage.Sets/src/mage/sets/dragonsoftarkir/DisplayOfDominance.java new file mode 100644 index 0000000000..04b2d05bc3 --- /dev/null +++ b/Mage.Sets/src/mage/sets/dragonsoftarkir/DisplayOfDominance.java @@ -0,0 +1,133 @@ +/* + * 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.dragonsoftarkir; + +import java.util.UUID; +import mage.MageObject; +import mage.ObjectColor; +import mage.abilities.Ability; +import mage.abilities.Mode; +import mage.abilities.effects.ContinuousRuleModifyingEffectImpl; +import mage.abilities.effects.common.DestroyTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.filter.FilterPermanent; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.mageobject.CardTypePredicate; +import mage.filter.predicate.mageobject.ColorPredicate; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.events.GameEvent.EventType; +import mage.game.permanent.Permanent; +import mage.game.stack.Spell; +import mage.target.TargetPermanent; + +/** + * + * @author LevelX2 + */ +public class DisplayOfDominance extends CardImpl { + + private static final FilterPermanent filter = new FilterPermanent("blue or black noncreature permanent"); + + static { + filter.add(Predicates.or( + new ColorPredicate(ObjectColor.BLUE), + new ColorPredicate(ObjectColor.BLACK))); + filter.add(Predicates.not(new CardTypePredicate(CardType.CREATURE))); + } + + public DisplayOfDominance(UUID ownerId) { + super(ownerId, 182, "Display of Dominance", Rarity.UNCOMMON, new CardType[]{CardType.INSTANT}, "{1}{G}"); + this.expansionSetCode = "DTK"; + + // Choose one - + this.getSpellAbility().getModes().setMinModes(1); + this.getSpellAbility().getModes().setMaxModes(1); + + // Destroy target blue or black noncreature permanent + this.getSpellAbility().addEffect(new DestroyTargetEffect()); + this.getSpellAbility().addTarget(new TargetPermanent(filter)); + + // or Permanents you control can't be the targets of blue or black spells your opponents control this turn + Mode mode = new Mode(); + mode.getEffects().add(new DisplayOfDominanceEffect()); + this.getSpellAbility().getModes().addMode(mode); + } + + public DisplayOfDominance(final DisplayOfDominance card) { + super(card); + } + + @Override + public DisplayOfDominance copy() { + return new DisplayOfDominance(this); + } +} + +class DisplayOfDominanceEffect extends ContinuousRuleModifyingEffectImpl { + + public DisplayOfDominanceEffect() { + super(Duration.EndOfTurn, Outcome.Benefit); + staticText = "permanents you control can't be the targets of blue or black spells your opponents control this turn"; + } + + public DisplayOfDominanceEffect(final DisplayOfDominanceEffect effect) { + super(effect); + } + + @Override + public DisplayOfDominanceEffect copy() { + return new DisplayOfDominanceEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + return true; + } + + @Override + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == EventType.TARGET; + } + + @Override + public boolean applies(GameEvent event, Ability ability, Game game) { + MageObject mageObject = game.getObject(event.getSourceId()); + if (game.getPlayer(ability.getControllerId()).hasOpponent(event.getPlayerId(), game) && + mageObject instanceof Spell && + (mageObject.getColor().isBlack() || mageObject.getColor().isBlue())) { + Permanent permanent = game.getPermanent(event.getTargetId()); + return permanent != null && permanent.getControllerId().equals(ability.getControllerId()); + } + return false; + } +} diff --git a/Mage.Sets/src/mage/sets/dragonsoftarkir/DragonScarredBear.java b/Mage.Sets/src/mage/sets/dragonsoftarkir/DragonScarredBear.java new file mode 100644 index 0000000000..283c45181b --- /dev/null +++ b/Mage.Sets/src/mage/sets/dragonsoftarkir/DragonScarredBear.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.dragonsoftarkir; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.ActivateIfConditionActivatedAbility; +import mage.abilities.condition.common.FormidableCondition; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.RegenerateSourceEffect; +import mage.abilities.effects.common.continuous.BoostSourceEffect; +import mage.cards.CardImpl; +import mage.constants.AbilityWord; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; + +/** + * + * @author LevelX2 + */ +public class DragonScarredBear extends CardImpl { + + public DragonScarredBear(UUID ownerId) { + super(ownerId, 183, "Dragon-Scarred Bear", Rarity.COMMON, new CardType[]{}, "{2}{G}"); + this.expansionSetCode = "DTK"; + this.supertype.add("Creaure"); + this.supertype.add("Bear"); + this.power = new MageInt(3); + this.toughness = new MageInt(2); + + // Formidable - {1}{G}: Regenerate Dragon-Scarred Bear. Activate this only if creatures you control have total power 8 or greater. + Ability ability = new ActivateIfConditionActivatedAbility( + Zone.BATTLEFIELD, + new RegenerateSourceEffect(), + new ManaCostsImpl("{1}{G}"), + FormidableCondition.getInstance()); + ability.setAbilityWord(AbilityWord.FORMIDABLE); + this.addAbility(ability); + } + + public DragonScarredBear(final DragonScarredBear card) { + super(card); + } + + @Override + public DragonScarredBear copy() { + return new DragonScarredBear(this); + } +} diff --git a/Mage.Sets/src/mage/sets/dragonsoftarkir/DromokasGift.java b/Mage.Sets/src/mage/sets/dragonsoftarkir/DromokasGift.java new file mode 100644 index 0000000000..100ee420e4 --- /dev/null +++ b/Mage.Sets/src/mage/sets/dragonsoftarkir/DromokasGift.java @@ -0,0 +1,58 @@ +/* + * 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.dragonsoftarkir; + +import java.util.UUID; +import mage.abilities.effects.keyword.BolsterEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author LevelX2 + */ +public class DromokasGift extends CardImpl { + + public DromokasGift(UUID ownerId) { + super(ownerId, 184, "Dromoka's Gift", Rarity.UNCOMMON, new CardType[]{CardType.INSTANT}, "{4}{G}"); + this.expansionSetCode = "DTK"; + + // Bolster 4. + this.getSpellAbility().addEffect(new BolsterEffect(4)); + } + + public DromokasGift(final DromokasGift card) { + super(card); + } + + @Override + public DromokasGift copy() { + return new DromokasGift(this); + } +} diff --git a/Mage.Sets/src/mage/sets/dragonsoftarkir/FoeRazerRegent.java b/Mage.Sets/src/mage/sets/dragonsoftarkir/FoeRazerRegent.java new file mode 100644 index 0000000000..93568ecf4f --- /dev/null +++ b/Mage.Sets/src/mage/sets/dragonsoftarkir/FoeRazerRegent.java @@ -0,0 +1,165 @@ +/* + * 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.dragonsoftarkir; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.DelayedTriggeredAbility; +import mage.abilities.TriggeredAbilityImpl; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.effects.Effect; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.CreateDelayedTriggeredAbilityEffect; +import mage.abilities.effects.common.FightTargetSourceEffect; +import mage.abilities.effects.common.counter.AddCountersTargetEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.constants.Zone; +import mage.counters.CounterType; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.permanent.ControllerPredicate; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.events.GameEvent.EventType; +import mage.game.permanent.Permanent; +import mage.target.common.TargetCreaturePermanent; +import mage.target.targetpointer.FixedTarget; + +/** + * + * @author LevelX2 + */ +public class FoeRazerRegent extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature you don't control"); + + static { + filter.add(new ControllerPredicate(TargetController.NOT_YOU)); + } + + public FoeRazerRegent(UUID ownerId) { + super(ownerId, 187, "Foe-Razer Regent", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{5}{G}{G}"); + this.expansionSetCode = "DTK"; + this.subtype.add("Dragon"); + this.power = new MageInt(4); + this.toughness = new MageInt(5); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + + // When Foe-Razer Regent enters the battlefield, you may have it fight target creature you don't control. + Ability ability = new EntersBattlefieldTriggeredAbility(new FightTargetSourceEffect(), true); + ability.addTarget(new TargetCreaturePermanent(filter)); + this.addAbility(ability); + + // Whenever a creature you control fights, put two +1/+1 counters on it at the beginning of the next end step. + this.addAbility(new FoeRazerRegentTriggeredAbility()); + } + + public FoeRazerRegent(final FoeRazerRegent card) { + super(card); + } + + @Override + public FoeRazerRegent copy() { + return new FoeRazerRegent(this); + } +} + +class FoeRazerRegentTriggeredAbility extends TriggeredAbilityImpl { + + public FoeRazerRegentTriggeredAbility() { + super(Zone.BATTLEFIELD, new CreateDelayedTriggeredAbilityEffect(new FoeRazerRegentDelayedTriggeredAbility(), true), false); + } + + public FoeRazerRegentTriggeredAbility(final FoeRazerRegentTriggeredAbility ability) { + super(ability); + } + + @Override + public FoeRazerRegentTriggeredAbility copy() { + return new FoeRazerRegentTriggeredAbility(this); + } + + @Override + public boolean checkEventType(GameEvent event, Game game) { + return event.getType().equals(EventType.FIGHTED_PERMANENT); + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + Permanent permanent = game.getPermanentOrLKIBattlefield(event.getSourceId()); + if (permanent != null && permanent.getControllerId().equals(getControllerId())) { + for (Effect effect: this.getEffects()) { + effect.setTargetPointer(new FixedTarget(event.getSourceId())); + } + return true; + } + return false; + } + + @Override + public String getRule() { + return "Whenever a creature you control fights, put two +1/+1 counters on it at the beginning of the next end step."; + } +} + +class FoeRazerRegentDelayedTriggeredAbility extends DelayedTriggeredAbility { + + public FoeRazerRegentDelayedTriggeredAbility() { + super(new AddCountersTargetEffect(CounterType.P1P1.createInstance(2))); + } + + public FoeRazerRegentDelayedTriggeredAbility(final FoeRazerRegentDelayedTriggeredAbility ability) { + super(ability); + } + + @Override + public FoeRazerRegentDelayedTriggeredAbility copy() { + return new FoeRazerRegentDelayedTriggeredAbility(this); + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + if (event.getType() == EventType.END_TURN_STEP_PRE) { + return true; + } + return false; + } + + @Override + public String getRule() { + return "put two +1/+1 counters on it at the beginning of the next end step"; + } + +} diff --git a/Mage.Sets/src/mage/sets/dragonsoftarkir/GladeWatcher.java b/Mage.Sets/src/mage/sets/dragonsoftarkir/GladeWatcher.java new file mode 100644 index 0000000000..964d318d10 --- /dev/null +++ b/Mage.Sets/src/mage/sets/dragonsoftarkir/GladeWatcher.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.dragonsoftarkir; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.ActivateIfConditionActivatedAbility; +import mage.abilities.condition.common.FormidableCondition; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.combat.CanAttackAsThoughtItDidntHaveDefenderSourceEffect; +import mage.abilities.effects.common.continuous.BoostSourceEffect; +import mage.abilities.keyword.DefenderAbility; +import mage.cards.CardImpl; +import mage.constants.AbilityWord; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; + +/** + * + * @author LevelX2 + */ +public class GladeWatcher extends CardImpl { + + public GladeWatcher(UUID ownerId) { + super(ownerId, 188, "Glade Watcher", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{1}{G}"); + this.expansionSetCode = "DTK"; + this.subtype.add("Elemental"); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + // Defender + this.addAbility(DefenderAbility.getInstance()); + // Formidable - {G}: Glade Watcher can attack this turn as though it didn't have defender. Activate this ability only if creatures you control have total power 8 or greater. + Ability ability = new ActivateIfConditionActivatedAbility( + Zone.BATTLEFIELD, + new CanAttackAsThoughtItDidntHaveDefenderSourceEffect(Duration.EndOfTurn), + new ManaCostsImpl("{G}"), + FormidableCondition.getInstance()); + ability.setAbilityWord(AbilityWord.FORMIDABLE); + this.addAbility(ability); + } + + public GladeWatcher(final GladeWatcher card) { + super(card); + } + + @Override + public GladeWatcher copy() { + return new GladeWatcher(this); + } +} diff --git a/Mage.Sets/src/mage/sets/dragonsoftarkir/GuardianShieldBearer.java b/Mage.Sets/src/mage/sets/dragonsoftarkir/GuardianShieldBearer.java new file mode 100644 index 0000000000..41856949b0 --- /dev/null +++ b/Mage.Sets/src/mage/sets/dragonsoftarkir/GuardianShieldBearer.java @@ -0,0 +1,83 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.dragonsoftarkir; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.TurnedFaceUpSourceTriggeredAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.counter.AddCountersTargetEffect; +import mage.abilities.keyword.MorphAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.counters.CounterType; +import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.predicate.permanent.AnotherPredicate; +import mage.target.common.TargetControlledCreaturePermanent; + +/** + * + * @author LevelX2 + */ +public class GuardianShieldBearer extends CardImpl { + + private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("another target creature you control"); + + static { + filter.add(new AnotherPredicate()); + } + + public GuardianShieldBearer(UUID ownerId) { + super(ownerId, 189, "Guardian Shield-Bearer", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{1}{G}"); + this.expansionSetCode = "DTK"; + this.subtype.add("Human"); + this.subtype.add("Soldier"); + this.power = new MageInt(2); + this.toughness = new MageInt(1); + + // Megamorph {3}{G} + this.addAbility(new MorphAbility(this, new ManaCostsImpl("{3}{G}"), true)); + + // When Guardian Shield-Bearer is turned face up, put a +1/+1 counter on another target creature you control. + Ability ability = new TurnedFaceUpSourceTriggeredAbility(new AddCountersTargetEffect(CounterType.P1P1.createInstance()), false); + ability.addTarget(new TargetControlledCreaturePermanent(filter)); + this.addAbility(ability); + + } + + public GuardianShieldBearer(final GuardianShieldBearer card) { + super(card); + } + + @Override + public GuardianShieldBearer copy() { + return new GuardianShieldBearer(this); + } +} diff --git a/Mage.Sets/src/mage/sets/dragonsoftarkir/InspiringCall.java b/Mage.Sets/src/mage/sets/dragonsoftarkir/InspiringCall.java new file mode 100644 index 0000000000..57b4dfc73f --- /dev/null +++ b/Mage.Sets/src/mage/sets/dragonsoftarkir/InspiringCall.java @@ -0,0 +1,75 @@ +/* + * 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.dragonsoftarkir; + +import java.util.UUID; +import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; +import mage.abilities.keyword.IndestructibleAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.counters.CounterType; +import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.predicate.permanent.CounterPredicate; + +/** + * + * @author LevelX2 + */ +public class InspiringCall extends CardImpl { + + private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("creature you control with a +1/+1 counter on it"); + + static { + filter.add(new CounterPredicate(CounterType.P1P1)); + } + + public InspiringCall(UUID ownerId) { + super(ownerId, 191, "Inspiring Call", Rarity.UNCOMMON, new CardType[]{CardType.INSTANT}, "{2}{G}"); + this.expansionSetCode = "DTK"; + + // Draw a card for each creature you control with a +1/+1 counter on it. Those creatures gain indestructible until end of turn. (Damage and effects that say "destroy" don't destroy them.) + this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(new PermanentsOnBattlefieldCount(filter))); + Effect effect = new GainAbilityControlledEffect(IndestructibleAbility.getInstance(), Duration.EndOfTurn, filter); + effect.setText("Those creatures gain indestructible until end of turn. (Damage and effects that say \"destroy\" don't destroy them.)"); + this.getSpellAbility().addEffect(effect); + } + + public InspiringCall(final InspiringCall card) { + super(card); + } + + @Override + public InspiringCall copy() { + return new InspiringCall(this); + } +} diff --git a/Mage.Sets/src/mage/sets/dragonsoftarkir/LurkingArynx.java b/Mage.Sets/src/mage/sets/dragonsoftarkir/LurkingArynx.java new file mode 100644 index 0000000000..02ec94552f --- /dev/null +++ b/Mage.Sets/src/mage/sets/dragonsoftarkir/LurkingArynx.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.dragonsoftarkir; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.ActivateIfConditionActivatedAbility; +import mage.abilities.condition.common.FormidableCondition; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.combat.MustBeBlockedByTargetSourceEffect; +import mage.cards.CardImpl; +import mage.constants.AbilityWord; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; + +/** + * + * @author LevelX2 + */ +public class LurkingArynx extends CardImpl { + + public LurkingArynx(UUID ownerId) { + super(ownerId, 192, "Lurking Arynx", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{4}{G}"); + this.expansionSetCode = "DTK"; + this.subtype.add("Cat"); + this.subtype.add("Beast"); + this.power = new MageInt(3); + this.toughness = new MageInt(5); + + // Formidable - {2}{G}: Target creature blocks Lurking Arynx this turn if able. Activate this ability only if creatures you control have total power 8 or greater. + Ability ability = new ActivateIfConditionActivatedAbility( + Zone.BATTLEFIELD, + new MustBeBlockedByTargetSourceEffect(Duration.EndOfTurn), + new ManaCostsImpl("{2}{G}"), + FormidableCondition.getInstance()); + ability.setAbilityWord(AbilityWord.FORMIDABLE); + this.addAbility(ability); + } + + public LurkingArynx(final LurkingArynx card) { + super(card); + } + + @Override + public LurkingArynx copy() { + return new LurkingArynx(this); + } +} diff --git a/Mage.Sets/src/mage/sets/dragonsoftarkir/ObscuringAEther.java b/Mage.Sets/src/mage/sets/dragonsoftarkir/ObscuringAEther.java new file mode 100644 index 0000000000..d4f858d69a --- /dev/null +++ b/Mage.Sets/src/mage/sets/dragonsoftarkir/ObscuringAEther.java @@ -0,0 +1,78 @@ +/* + * 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.dragonsoftarkir; + +import java.util.UUID; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.continuous.BecomesFaceDownCreatureEffect; +import mage.abilities.effects.common.cost.SpellsCostReductionControllerEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterCreatureCard; +import mage.filter.predicate.other.FaceDownPredicate; + +/** + * + * @author LevelX2 + */ +public class ObscuringAEther extends CardImpl { + + private static final FilterCreatureCard filter = new FilterCreatureCard("Face-down creature spells"); + + static { + filter.add(new FaceDownPredicate()); + } + + public ObscuringAEther(UUID ownerId) { + super(ownerId, 194, "Obscuring AEther", Rarity.RARE, new CardType[]{CardType.ENCHANTMENT}, "{G}"); + this.expansionSetCode = "DTK"; + + // Face-down creature spells you cast cost {1} less to cast. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionControllerEffect(filter, 1))); + + // {1}{G}: Turn Obscuring AEther face down. + Effect effect = new BecomesFaceDownCreatureEffect(null, BecomesFaceDownCreatureEffect.FaceDownType.MANIFESTED); + effect.setText("Turn Obscuring AEther face down. (It becomes a 2/2 creature.)"); + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, effect, new ManaCostsImpl("{1}{G}"))); + + } + + public ObscuringAEther(final ObscuringAEther card) { + super(card); + } + + @Override + public ObscuringAEther copy() { + return new ObscuringAEther(this); + } +} diff --git a/Mage.Sets/src/mage/sets/dragonsoftarkir/PinionFeast.java b/Mage.Sets/src/mage/sets/dragonsoftarkir/PinionFeast.java new file mode 100644 index 0000000000..04f841d011 --- /dev/null +++ b/Mage.Sets/src/mage/sets/dragonsoftarkir/PinionFeast.java @@ -0,0 +1,72 @@ +/* + * 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.dragonsoftarkir; + +import java.util.UUID; +import mage.abilities.effects.common.DestroyTargetEffect; +import mage.abilities.effects.keyword.BolsterEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author LevelX2 + */ +public class PinionFeast extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with flying"); + + static { + filter.add(new AbilityPredicate(FlyingAbility.class)); + } + + public PinionFeast(UUID ownerId) { + super(ownerId, 195, "Pinion Feast", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{4}{G}"); + this.expansionSetCode = "DTK"; + + // Destroy target creature with flying. Bolster 2. + this.getSpellAbility().addEffect(new DestroyTargetEffect()); + this.getSpellAbility().addTarget(new TargetCreaturePermanent(filter)); + this.getSpellAbility().addEffect(new BolsterEffect(2)); + + } + + public PinionFeast(final PinionFeast card) { + super(card); + } + + @Override + public PinionFeast copy() { + return new PinionFeast(this); + } +} diff --git a/Mage.Sets/src/mage/sets/dragonsoftarkir/PressTheAdvantage.java b/Mage.Sets/src/mage/sets/dragonsoftarkir/PressTheAdvantage.java new file mode 100644 index 0000000000..91f557286e --- /dev/null +++ b/Mage.Sets/src/mage/sets/dragonsoftarkir/PressTheAdvantage.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.dragonsoftarkir; + +import java.util.UUID; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.continuous.BoostTargetEffect; +import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; +import mage.abilities.keyword.TrampleAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author LevelX2 + */ +public class PressTheAdvantage extends CardImpl { + + public PressTheAdvantage(UUID ownerId) { + super(ownerId, 196, "Press the Advantage", Rarity.UNCOMMON, new CardType[]{CardType.INSTANT}, "{2}{G}{G}"); + this.expansionSetCode = "DTK"; + + // Up to two target creatures each get +2/+2 and gain trample until end of turn. + Effect effect = new BoostTargetEffect(2,2, Duration.EndOfTurn); + effect.setText("Up to two target creatures each get +2/+2"); + this.getSpellAbility().addEffect(effect); + effect = new GainAbilityTargetEffect(TrampleAbility.getInstance(), Duration.EndOfTurn, "and gain trample until end of turn"); + this.getSpellAbility().addEffect(effect); + this.getSpellAbility().addTarget(new TargetCreaturePermanent(0,2)); + } + + public PressTheAdvantage(final PressTheAdvantage card) { + super(card); + } + + @Override + public PressTheAdvantage copy() { + return new PressTheAdvantage(this); + } +} diff --git a/Mage.Sets/src/mage/sets/dragonsoftarkir/RevealingWind.java b/Mage.Sets/src/mage/sets/dragonsoftarkir/RevealingWind.java new file mode 100644 index 0000000000..ee1ac205cb --- /dev/null +++ b/Mage.Sets/src/mage/sets/dragonsoftarkir/RevealingWind.java @@ -0,0 +1,121 @@ +/* + * 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.dragonsoftarkir; + +import java.util.UUID; +import mage.MageObject; +import mage.abilities.Ability; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.PreventAllDamageByAllEffect; +import mage.cards.Card; +import mage.cards.CardImpl; +import mage.cards.Cards; +import mage.cards.CardsImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.filter.common.FilterAttackingOrBlockingCreature; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.other.FaceDownPredicate; +import mage.game.Game; +import mage.players.Player; +import mage.target.Target; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author LevelX2 + */ +public class RevealingWind extends CardImpl { + + public RevealingWind(UUID ownerId) { + super(ownerId, 197, "Revealing Wind", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{2}{G}"); + this.expansionSetCode = "DTK"; + + // Prevent all combat damage that would be dealt this turn. You may look at each face-down creature that's attacking or blocking. + this.getSpellAbility().addEffect(new PreventAllDamageByAllEffect(Duration.EndOfTurn, true)); + this.getSpellAbility().addEffect(new RevealingWindEffect()); + } + + public RevealingWind(final RevealingWind card) { + super(card); + } + + @Override + public RevealingWind copy() { + return new RevealingWind(this); + } +} + +class RevealingWindEffect extends OneShotEffect { + + private static final FilterCreaturePermanent filter = new FilterAttackingOrBlockingCreature("face-down creature that's attacking or blocking"); + + static { + filter.add(new FaceDownPredicate()); + } + + public RevealingWindEffect() { + super(Outcome.Benefit); + this.staticText = "You may look at each face-down creature that's attacking or blocking"; + } + + public RevealingWindEffect(final RevealingWindEffect effect) { + super(effect); + } + + @Override + public RevealingWindEffect copy() { + return new RevealingWindEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + MageObject sourceObject = source.getSourceObject(game); + if (controller != null && sourceObject != null) { + while (game.getBattlefield().count(filter, source.getOriginalId(), source.getControllerId(), game) > 0 && + controller.chooseUse(outcome, "Look at a face-down attacking creature?", game)) { + if (!controller.isInGame()) { + return false; + } + Target target = new TargetCreaturePermanent(filter); + if (controller.chooseTarget(outcome, target, source, game)) { + Card card = game.getCard(target.getFirstTarget()); + if (card != null) { + Cards cards = new CardsImpl(); + controller.lookAtCards(sourceObject.getName(), cards, game); + game.informPlayers(controller.getName() + " look at a face-down attacking creature"); + } + } + } + } + return true; + } +} diff --git a/Mage.Sets/src/mage/sets/dragonsoftarkir/SaltRoadQuartermasters.java b/Mage.Sets/src/mage/sets/dragonsoftarkir/SaltRoadQuartermasters.java new file mode 100644 index 0000000000..744d14889b --- /dev/null +++ b/Mage.Sets/src/mage/sets/dragonsoftarkir/SaltRoadQuartermasters.java @@ -0,0 +1,82 @@ +/* + * 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.dragonsoftarkir; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldAbility; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.RemoveCountersSourceCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.abilities.effects.common.counter.AddCountersTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.counters.CounterType; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author LevelX2 + */ +public class SaltRoadQuartermasters extends CardImpl { + + public SaltRoadQuartermasters(UUID ownerId) { + super(ownerId, 199, "Salt Road Quartermasters", Rarity.UNCOMMON, new CardType[]{}, "{2}{G}"); + this.expansionSetCode = "DTK"; + this.supertype.add("Creautre"); + this.supertype.add("Human"); + this.supertype.add("Soldier"); + this.power = new MageInt(1); + this.toughness = new MageInt(1); + + // Salt Road QUartermasters enters the battlefield with two +1/+1 counters on it. + this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance(2)), + "with two +1/+1 counters on it")); + + // {2}{G}, Remove a +1/+1 counter from Salt Road Quartermasters: Put a +1/+1 counter on target creature. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new AddCountersTargetEffect(CounterType.P1P1.createInstance(1)), new ManaCostsImpl("{2}{G}")); + ability.addCost(new RemoveCountersSourceCost(CounterType.P1P1.createInstance(1))); + ability.addTarget(new TargetCreaturePermanent()); + this.addAbility(ability); + + + } + + public SaltRoadQuartermasters(final SaltRoadQuartermasters card) { + super(card); + } + + @Override + public SaltRoadQuartermasters copy() { + return new SaltRoadQuartermasters(this); + } +} diff --git a/Mage.Sets/src/mage/sets/dragonsoftarkir/SandsteppeScavenger.java b/Mage.Sets/src/mage/sets/dragonsoftarkir/SandsteppeScavenger.java new file mode 100644 index 0000000000..820a7af85f --- /dev/null +++ b/Mage.Sets/src/mage/sets/dragonsoftarkir/SandsteppeScavenger.java @@ -0,0 +1,64 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.dragonsoftarkir; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.effects.keyword.BolsterEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author LevelX2 + */ +public class SandsteppeScavenger extends CardImpl { + + public SandsteppeScavenger(UUID ownerId) { + super(ownerId, 200, "Sandsteppe Scavenger", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{4}{G}"); + this.expansionSetCode = "DTK"; + this.subtype.add("Hound"); + this.subtype.add("Scount"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // When Sandsteppe Scavenger enters the battlefield, bolster 2. + this.addAbility(new EntersBattlefieldTriggeredAbility(new BolsterEffect(2), false)); + } + + public SandsteppeScavenger(final SandsteppeScavenger card) { + super(card); + } + + @Override + public SandsteppeScavenger copy() { + return new SandsteppeScavenger(this); + } +} diff --git a/Mage.Sets/src/mage/sets/dragonsoftarkir/ScaleguardSentinels.java b/Mage.Sets/src/mage/sets/dragonsoftarkir/ScaleguardSentinels.java new file mode 100644 index 0000000000..dfd10080cb --- /dev/null +++ b/Mage.Sets/src/mage/sets/dragonsoftarkir/ScaleguardSentinels.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.dragonsoftarkir; + +import java.util.UUID; + +/** + * + * @author LevelX2 + */ +public class ScaleguardSentinels extends mage.sets.gameday.ScaleguardSentinels { + + public ScaleguardSentinels(UUID ownerId) { + super(ownerId); + this.cardNumber = 201; + this.expansionSetCode = "DTK"; + } + + public ScaleguardSentinels(final ScaleguardSentinels card) { + super(card); + } + + @Override + public ScaleguardSentinels copy() { + return new ScaleguardSentinels(this); + } +} diff --git a/Mage.Sets/src/mage/sets/dragonsoftarkir/SegmentedKrotiq.java b/Mage.Sets/src/mage/sets/dragonsoftarkir/SegmentedKrotiq.java new file mode 100644 index 0000000000..c2b6ec94bb --- /dev/null +++ b/Mage.Sets/src/mage/sets/dragonsoftarkir/SegmentedKrotiq.java @@ -0,0 +1,63 @@ +/* + * 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.dragonsoftarkir; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.keyword.MorphAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author LevelX2 + */ +public class SegmentedKrotiq extends CardImpl { + + public SegmentedKrotiq(UUID ownerId) { + super(ownerId, 202, "Segmented Krotiq", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{5}{G}"); + this.expansionSetCode = "DTK"; + this.subtype.add("Insect"); + this.power = new MageInt(6); + this.toughness = new MageInt(5); + + // Megamorph {6}{G} + this.addAbility(new MorphAbility(this, new ManaCostsImpl("{6}{G}"), true)); + } + + public SegmentedKrotiq(final SegmentedKrotiq card) { + super(card); + } + + @Override + public SegmentedKrotiq copy() { + return new SegmentedKrotiq(this); + } +} diff --git a/Mage.Sets/src/mage/sets/dragonsoftarkir/ServantOfTheScale.java b/Mage.Sets/src/mage/sets/dragonsoftarkir/ServantOfTheScale.java new file mode 100644 index 0000000000..426e84d95c --- /dev/null +++ b/Mage.Sets/src/mage/sets/dragonsoftarkir/ServantOfTheScale.java @@ -0,0 +1,115 @@ +/* + * 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.dragonsoftarkir; + +import java.util.UUID; +import mage.MageInt; +import mage.MageObject; +import mage.abilities.Ability; +import mage.abilities.common.DiesTriggeredAbility; +import mage.abilities.common.EntersBattlefieldAbility; +import mage.abilities.effects.Effect; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.abilities.effects.common.counter.AddCountersTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.counters.CounterType; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.players.Player; +import mage.target.common.TargetControlledCreaturePermanent; + +/** + * + * @author LevelX2 + */ +public class ServantOfTheScale extends CardImpl { + + public ServantOfTheScale(UUID ownerId) { + super(ownerId, 203, "Servant of the Scale", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{G}"); + this.expansionSetCode = "DTK"; + this.subtype.add("Human"); + this.subtype.add("Soldier"); + this.power = new MageInt(0); + this.toughness = new MageInt(0); + + // Servant of the Scale enters the battlefield with a +1/+1 counter on it. + this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance(2)), + "with a +1/+1 counters on it")); + + // When Servant of the Scale dies, put X +1/+1 counters on target creature you control, where X is the number of +1/+1 counter on Servant of the Scale. + Ability ability = new DiesTriggeredAbility(new ServantOfTheScaleEffect(), false); + ability.addTarget(new TargetControlledCreaturePermanent()); + this.addAbility(ability); + } + + public ServantOfTheScale(final ServantOfTheScale card) { + super(card); + } + + @Override + public ServantOfTheScale copy() { + return new ServantOfTheScale(this); + } +} + +class ServantOfTheScaleEffect extends OneShotEffect { + + public ServantOfTheScaleEffect() { + super(Outcome.BoostCreature); + this.staticText = "put X +1/+1 counters on target creature you control, where X is the number of +1/+1 counter on {this}"; + } + + public ServantOfTheScaleEffect(final ServantOfTheScaleEffect effect) { + super(effect); + } + + @Override + public ServantOfTheScaleEffect copy() { + return new ServantOfTheScaleEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + MageObject sourceObject = source.getSourceObject(game); + if (sourceObject != null && controller != null && sourceObject instanceof Permanent) { + int amount = ((Permanent)sourceObject).getCounters().getCount(CounterType.P1P1); + if (amount > 0) { + Effect effect = new AddCountersTargetEffect(CounterType.P1P1.createInstance(amount)); + effect.setTargetPointer(targetPointer); + effect.apply(game, source); + } + return true; + } + return false; + } +} diff --git a/Mage.Sets/src/mage/sets/dragonsoftarkir/ShapeTheSands.java b/Mage.Sets/src/mage/sets/dragonsoftarkir/ShapeTheSands.java new file mode 100644 index 0000000000..9dc24f5643 --- /dev/null +++ b/Mage.Sets/src/mage/sets/dragonsoftarkir/ShapeTheSands.java @@ -0,0 +1,70 @@ +/* + * 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.dragonsoftarkir; + +import java.util.UUID; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.continuous.BoostTargetEffect; +import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; +import mage.abilities.keyword.ReachAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author LevelX2 + */ +public class ShapeTheSands extends CardImpl { + + public ShapeTheSands(UUID ownerId) { + super(ownerId, 205, "Shape the Sands", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{G}"); + this.expansionSetCode = "DTK"; + + // Target creature gets +0/+5 and gains reach until end of turn. + Effect effect = new BoostTargetEffect(0, 5, Duration.EndOfTurn); + effect.setText("Target creature gets +0/+5"); + this.getSpellAbility().addEffect(effect); + effect = new GainAbilityTargetEffect(ReachAbility.getInstance(), Duration.EndOfTurn); + effect.setText("and gains reach until end of turn"); + this.getSpellAbility().addEffect(effect); + this.getSpellAbility().addTarget(new TargetCreaturePermanent()); + + } + + public ShapeTheSands(final ShapeTheSands card) { + super(card); + } + + @Override + public ShapeTheSands copy() { + return new ShapeTheSands(this); + } +} diff --git a/Mage.Sets/src/mage/sets/dragonsoftarkir/ShelteredAerie.java b/Mage.Sets/src/mage/sets/dragonsoftarkir/ShelteredAerie.java new file mode 100644 index 0000000000..a87b81eca4 --- /dev/null +++ b/Mage.Sets/src/mage/sets/dragonsoftarkir/ShelteredAerie.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.dragonsoftarkir; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.effects.common.AddManaOfAnyColorEffect; +import mage.abilities.effects.common.AttachEffect; +import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect; +import mage.abilities.keyword.EnchantAbility; +import mage.abilities.mana.AnyColorManaAbility; +import mage.abilities.mana.SimpleManaAbility; +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.target.TargetPermanent; +import mage.target.common.TargetLandPermanent; + +/** + * + * @author LevelX2 + */ +public class ShelteredAerie extends CardImpl { + + public ShelteredAerie(UUID ownerId) { + super(ownerId, 206, "Sheltered Aerie", Rarity.COMMON, new CardType[]{CardType.ENCHANTMENT}, "{2}{G}"); + this.expansionSetCode = "DTK"; + this.subtype.add("Aura"); + + // Enchant land + TargetPermanent auraTarget = new TargetLandPermanent(); + this.getSpellAbility().addTarget(auraTarget); + this.getSpellAbility().addEffect(new AttachEffect(Outcome.Benefit)); + Ability ability = new EnchantAbility(auraTarget.getTargetName()); + this.addAbility(ability); + + // Enchanted land has "{T}: Add two mana of any one color to your mana pool." + Ability gainedAbility = new SimpleManaAbility(Zone.BATTLEFIELD, new AddManaOfAnyColorEffect(2), new TapSourceCost()); + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(gainedAbility, AttachmentType.AURA))); + + } + + public ShelteredAerie(final ShelteredAerie card) { + super(card); + } + + @Override + public ShelteredAerie copy() { + return new ShelteredAerie(this); + } +} diff --git a/Mage.Sets/src/mage/sets/dragonsoftarkir/SightOfTheScalelords.java b/Mage.Sets/src/mage/sets/dragonsoftarkir/SightOfTheScalelords.java new file mode 100644 index 0000000000..92a8c17d9c --- /dev/null +++ b/Mage.Sets/src/mage/sets/dragonsoftarkir/SightOfTheScalelords.java @@ -0,0 +1,83 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.dragonsoftarkir; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.common.BeginningOfCombatTriggeredAbility; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.continuous.BoostControlledEffect; +import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; +import mage.abilities.keyword.VigilanceAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.constants.Zone; +import mage.filter.Filter; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.mageobject.ToughnessPredicate; +import mage.filter.predicate.permanent.ControllerPredicate; + +/** + * + * @author LevelX2 + */ +public class SightOfTheScalelords extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creatures you control with toughness 4 or greater"); + + static { + filter.add(new ControllerPredicate(TargetController.YOU)); + filter.add(new ToughnessPredicate(Filter.ComparisonType.GreaterThan, 3)); + } + + public SightOfTheScalelords(UUID ownerId) { + super(ownerId, 207, "Sight of the Scalelords", Rarity.UNCOMMON, new CardType[]{CardType.ENCHANTMENT}, "{4}{G}"); + this.expansionSetCode = "DTK"; + + // At the beginning of combat on your turn, creature you control with toughness 4 or greater get +2/+2 and gain vigilance until end of turn. + Effect effect = new BoostControlledEffect(2,2,Duration.EndOfTurn, filter, false); + effect.setText("creature you control with toughness 4 or greater get +2/+2"); + Ability ability = new BeginningOfCombatTriggeredAbility(Zone.BATTLEFIELD, effect, TargetController.YOU, false, false); + effect = new GainAbilityControlledEffect(VigilanceAbility.getInstance(), Duration.EndOfTurn, filter); + effect.setText("and gain vigilance until end of turn"); + ability.addEffect(effect); + this.addAbility(ability); + } + + public SightOfTheScalelords(final SightOfTheScalelords card) { + super(card); + } + + @Override + public SightOfTheScalelords copy() { + return new SightOfTheScalelords(this); + } +} diff --git a/Mage.Sets/src/mage/sets/dragonsoftarkir/TreadUpon.java b/Mage.Sets/src/mage/sets/dragonsoftarkir/TreadUpon.java new file mode 100644 index 0000000000..7fbee0befa --- /dev/null +++ b/Mage.Sets/src/mage/sets/dragonsoftarkir/TreadUpon.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.dragonsoftarkir; + +import java.util.UUID; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.continuous.BoostTargetEffect; +import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; +import mage.abilities.keyword.TrampleAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author LevelX2 + */ +public class TreadUpon extends CardImpl { + + public TreadUpon(UUID ownerId) { + super(ownerId, 211, "Tread Upon", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{1}{G}"); + this.expansionSetCode = "DTK"; + + // Target creature gets +2/+2 and gains trample until end of turn. + Effect effect = new BoostTargetEffect(2, 2, Duration.EndOfTurn); + effect.setText("Target creature gets +2/+2"); + this.getSpellAbility().addEffect(effect); + effect = new GainAbilityTargetEffect(TrampleAbility.getInstance(), Duration.EndOfTurn); + effect.setText("and gains trample until end of turn"); + this.getSpellAbility().addEffect(effect); + this.getSpellAbility().addTarget(new TargetCreaturePermanent()); + } + + public TreadUpon(final TreadUpon card) { + super(card); + } + + @Override + public TreadUpon copy() { + return new TreadUpon(this); + } +} diff --git a/Mage.Sets/src/mage/sets/eventide/FloodedGrove.java b/Mage.Sets/src/mage/sets/eventide/FloodedGrove.java index 67dcf95d30..dfae1c21ce 100644 --- a/Mage.Sets/src/mage/sets/eventide/FloodedGrove.java +++ b/Mage.Sets/src/mage/sets/eventide/FloodedGrove.java @@ -29,17 +29,14 @@ package mage.sets.eventide; import java.util.UUID; -import mage.constants.CardType; -import mage.constants.Rarity; import mage.Mana; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.effects.common.BasicManaEffect; -import mage.abilities.mana.BasicManaAbility; import mage.abilities.mana.ColorlessManaAbility; -import mage.abilities.mana.ManaAbility; import mage.abilities.mana.SimpleManaAbility; import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; import mage.constants.Zone; /** diff --git a/Mage.Sets/src/mage/sets/fatereforged/TemurWarShaman.java b/Mage.Sets/src/mage/sets/fatereforged/TemurWarShaman.java index 581b8ad41b..445b291f85 100644 --- a/Mage.Sets/src/mage/sets/fatereforged/TemurWarShaman.java +++ b/Mage.Sets/src/mage/sets/fatereforged/TemurWarShaman.java @@ -124,8 +124,7 @@ class TemurWarShamanFightEffect extends OneShotEffect { && target != null && triggeredCreature.getCardType().contains(CardType.CREATURE) && target.getCardType().contains(CardType.CREATURE)) { - triggeredCreature.damage(target.getPower().getValue(), target.getId(), game, false, true); - target.damage(triggeredCreature.getPower().getValue(), triggeredCreature.getId(), game, false, true); + triggeredCreature.fight(target, source, game); return true; } return false; diff --git a/Mage.Sets/src/mage/sets/futuresight/VeilstoneAmulet.java b/Mage.Sets/src/mage/sets/futuresight/VeilstoneAmulet.java index 95280cf3fc..40ad79cecc 100644 --- a/Mage.Sets/src/mage/sets/futuresight/VeilstoneAmulet.java +++ b/Mage.Sets/src/mage/sets/futuresight/VeilstoneAmulet.java @@ -89,16 +89,19 @@ class VeilstoneAmuletEffect extends ContinuousRuleModifyingEffectImpl { return true; } + @Override + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == EventType.TARGET; + } + @Override public boolean applies(GameEvent event, Ability ability, Game game) { - if (event.getType() == EventType.TARGET) { - Permanent permanent = game.getPermanent(event.getTargetId()); - if (permanent != null) { - if (permanent.getCardType().contains(CardType.CREATURE) && - permanent.getControllerId().equals(ability.getControllerId()) && - game.getPlayer(ability.getControllerId()).hasOpponent(event.getPlayerId(), game)) { - return true; - } + Permanent permanent = game.getPermanent(event.getTargetId()); + if (permanent != null) { + if (permanent.getCardType().contains(CardType.CREATURE) && + permanent.getControllerId().equals(ability.getControllerId()) && + game.getPlayer(ability.getControllerId()).hasOpponent(event.getPlayerId(), game)) { + return true; } } return false; diff --git a/Mage.Sets/src/mage/sets/gatecrash/GruulRagebeast.java b/Mage.Sets/src/mage/sets/gatecrash/GruulRagebeast.java index d836ce1415..e228654ddd 100644 --- a/Mage.Sets/src/mage/sets/gatecrash/GruulRagebeast.java +++ b/Mage.Sets/src/mage/sets/gatecrash/GruulRagebeast.java @@ -144,9 +144,7 @@ class GruulRagebeastEffect extends OneShotEffect { && target != null && triggeredCreature.getCardType().contains(CardType.CREATURE) && target.getCardType().contains(CardType.CREATURE)) { - triggeredCreature.damage(target.getPower().getValue(), target.getId(), game, false, true); - target.damage(triggeredCreature.getPower().getValue(), triggeredCreature.getId(), game, false, true); - return true; + return triggeredCreature.fight(target, source, game); } return false; } diff --git a/Mage.Sets/src/mage/sets/guildpact/Wildsize.java b/Mage.Sets/src/mage/sets/guildpact/Wildsize.java index 30e5756fe6..57b7dc140f 100644 --- a/Mage.Sets/src/mage/sets/guildpact/Wildsize.java +++ b/Mage.Sets/src/mage/sets/guildpact/Wildsize.java @@ -28,6 +28,7 @@ package mage.sets.guildpact; import java.util.UUID; +import mage.abilities.effects.Effect; import mage.constants.CardType; import mage.constants.Rarity; @@ -48,9 +49,14 @@ public class Wildsize extends CardImpl { public Wildsize(UUID ownerId) { super(ownerId, 98, "Wildsize", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{2}{G}"); this.expansionSetCode = "GPT"; - this.color.setGreen(true); - this.getSpellAbility().addEffect(new BoostTargetEffect(2, 2, Duration.EndOfTurn)); - this.getSpellAbility().addEffect(new GainAbilityTargetEffect(TrampleAbility.getInstance(), Duration.EndOfTurn)); + + // Target creature gets +2/+2 and gains trample until end of turn. + Effect effect = new BoostTargetEffect(2, 2, Duration.EndOfTurn); + effect.setText("Target creature gets +2/+2"); + this.getSpellAbility().addEffect(effect); + effect = new GainAbilityTargetEffect(TrampleAbility.getInstance(), Duration.EndOfTurn); + effect.setText("and gains trample until end of turn"); + this.getSpellAbility().addEffect(effect); this.getSpellAbility().addTarget(new TargetCreaturePermanent()); this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1)); } diff --git a/Mage.Sets/src/mage/sets/innistrad/NightfallPredator.java b/Mage.Sets/src/mage/sets/innistrad/NightfallPredator.java index d44c9856cf..0ae6d76c6b 100644 --- a/Mage.Sets/src/mage/sets/innistrad/NightfallPredator.java +++ b/Mage.Sets/src/mage/sets/innistrad/NightfallPredator.java @@ -112,9 +112,7 @@ class NightfallPredatorEffect extends OneShotEffect { // 20110930 - 701.10 if (creature1 != null && creature2 != null) { if (creature1.getCardType().contains(CardType.CREATURE) && creature2.getCardType().contains(CardType.CREATURE)) { - creature1.damage(creature2.getPower().getValue(), creature2.getId(), game, false, true); - creature2.damage(creature1.getPower().getValue(), creature1.getId(), game, false, true); - return true; + return creature1.fight(creature2, source, game); } } return false; diff --git a/Mage.Sets/src/mage/sets/khansoftarkir/SecretPlans.java b/Mage.Sets/src/mage/sets/khansoftarkir/SecretPlans.java index 57e7e20693..7e04365d26 100644 --- a/Mage.Sets/src/mage/sets/khansoftarkir/SecretPlans.java +++ b/Mage.Sets/src/mage/sets/khansoftarkir/SecretPlans.java @@ -28,9 +28,8 @@ package mage.sets.khansoftarkir; import java.util.UUID; -import mage.abilities.TriggeredAbilityImpl; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.effects.Effect; +import mage.abilities.common.TurnedFaceUpAllTriggeredAbility; import mage.abilities.effects.common.DrawCardSourceControllerEffect; import mage.abilities.effects.common.continuous.BoostControlledEffect; import mage.cards.CardImpl; @@ -38,11 +37,9 @@ import mage.constants.CardType; import mage.constants.Duration; import mage.constants.Rarity; import mage.constants.Zone; +import mage.filter.common.FilterControlledPermanent; import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.other.FaceDownPredicate; -import mage.game.Game; -import mage.game.events.GameEvent; -import mage.game.permanent.Permanent; /** * @@ -67,7 +64,7 @@ public class SecretPlans extends CardImpl { this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostControlledEffect(0,1, Duration.WhileOnBattlefield, filter))); // Whenever a permanent you control is turned face up, draw a card. - this.addAbility(new SecretPlanTriggeredAbility(new DrawCardSourceControllerEffect(1), false)); + this.addAbility(new TurnedFaceUpAllTriggeredAbility(new DrawCardSourceControllerEffect(1), new FilterControlledPermanent())); } @@ -80,38 +77,3 @@ public class SecretPlans extends CardImpl { return new SecretPlans(this); } } - -class SecretPlanTriggeredAbility extends TriggeredAbilityImpl{ - - public SecretPlanTriggeredAbility(Effect effect, boolean optional) { - super(Zone.BATTLEFIELD, effect, optional); - } - - public SecretPlanTriggeredAbility(final SecretPlanTriggeredAbility ability) { - super(ability); - } - - @Override - public SecretPlanTriggeredAbility copy() { - return new SecretPlanTriggeredAbility(this); - } - - @Override - public boolean checkEventType(GameEvent event, Game game) { - return event.getType() == GameEvent.EventType.TURNEDFACEUP; - } - - @Override - public boolean checkTrigger(GameEvent event, Game game) { - Permanent permanent = game.getPermanent(event.getTargetId()); - if (permanent.getControllerId().equals(this.controllerId)) { - return true; - } - return false; - } - - @Override - public String getRule() { - return "When a permanent you control is turned face up, " + super.getRule(); - } -} diff --git a/Mage.Sets/src/mage/sets/limitedalpha/AnimateWall.java b/Mage.Sets/src/mage/sets/limitedalpha/AnimateWall.java index 3ea63ab008..992995d721 100644 --- a/Mage.Sets/src/mage/sets/limitedalpha/AnimateWall.java +++ b/Mage.Sets/src/mage/sets/limitedalpha/AnimateWall.java @@ -32,7 +32,7 @@ import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.effects.Effect; import mage.abilities.effects.common.AttachEffect; -import mage.abilities.effects.common.combat.CanAttackAsThoughtItDidntHaveDefenderEffect; +import mage.abilities.effects.common.combat.CanAttackAsThoughtItDidntHaveDefenderSourceEffect; import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect; import mage.abilities.keyword.EnchantAbility; import mage.cards.CardImpl; @@ -74,7 +74,7 @@ public class AnimateWall extends CardImpl { this.addAbility(ability); // Enchanted Wall can attack as though it didn't have defender. - Ability canAttackAbility = new SimpleStaticAbility(Zone.BATTLEFIELD, new CanAttackAsThoughtItDidntHaveDefenderEffect(Duration.WhileOnBattlefield)); + Ability canAttackAbility = new SimpleStaticAbility(Zone.BATTLEFIELD, new CanAttackAsThoughtItDidntHaveDefenderSourceEffect(Duration.WhileOnBattlefield)); Effect enchantEffect = new GainAbilityAttachedEffect(canAttackAbility, AttachmentType.AURA, Duration.WhileOnBattlefield); enchantEffect.setText("Enchanted Wall can attack as though it didn't have defender"); this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, enchantEffect)); diff --git a/Mage.Sets/src/mage/sets/lorwyn/DoranTheSiegeTower.java b/Mage.Sets/src/mage/sets/lorwyn/DoranTheSiegeTower.java index ca1c813019..9be51ddef1 100644 --- a/Mage.Sets/src/mage/sets/lorwyn/DoranTheSiegeTower.java +++ b/Mage.Sets/src/mage/sets/lorwyn/DoranTheSiegeTower.java @@ -41,6 +41,7 @@ import mage.cards.CardImpl; import mage.constants.Duration; import mage.constants.Layer; import mage.constants.SubLayer; +import mage.filter.common.FilterCreaturePermanent; import mage.game.Game; /** @@ -87,6 +88,8 @@ public class DoranTheSiegeTower extends CardImpl { class DoranTheSiegeTowerCombatDamageRuleEffect extends ContinuousEffectImpl { + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent(); + public DoranTheSiegeTowerCombatDamageRuleEffect() { super(Duration.WhileOnBattlefield, Outcome.Detriment); staticText = "Each creature assigns combat damage equal to its toughness rather than its power"; @@ -103,13 +106,10 @@ class DoranTheSiegeTowerCombatDamageRuleEffect extends ContinuousEffectImpl { @Override public boolean apply(Layer layer, SubLayer sublayer, Ability source, Game game) { - switch (layer) { - case RulesEffects: - // Change the rule - game.getCombat().setUseToughnessForDamage(true); - break; - } - return false; + // Change the rule + game.getCombat().setUseToughnessForDamage(true); + game.getCombat().addUseToughnessForDamageFilter(filter); + return true; } @Override diff --git a/Mage.Sets/src/mage/sets/mirrodinbesieged/SpireSerpent.java b/Mage.Sets/src/mage/sets/mirrodinbesieged/SpireSerpent.java index 7e1b27204b..f753cc56de 100644 --- a/Mage.Sets/src/mage/sets/mirrodinbesieged/SpireSerpent.java +++ b/Mage.Sets/src/mage/sets/mirrodinbesieged/SpireSerpent.java @@ -41,7 +41,7 @@ import mage.abilities.decorator.ConditionalAsThoughEffect; import mage.abilities.decorator.ConditionalContinuousEffect; import mage.abilities.effects.Effect; import mage.abilities.effects.common.continuous.BoostSourceEffect; -import mage.abilities.effects.common.combat.CanAttackAsThoughtItDidntHaveDefenderEffect; +import mage.abilities.effects.common.combat.CanAttackAsThoughtItDidntHaveDefenderSourceEffect; import mage.abilities.keyword.DefenderAbility; import mage.cards.CardImpl; @@ -64,7 +64,7 @@ public class SpireSerpent extends CardImpl { this.addAbility(DefenderAbility.getInstance()); ConditionalContinuousEffect effect1 = new ConditionalContinuousEffect(new BoostSourceEffect(2, 2, Duration.WhileOnBattlefield), MetalcraftCondition.getInstance(), abilityText1); Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, effect1); - Effect effect = new ConditionalAsThoughEffect(new CanAttackAsThoughtItDidntHaveDefenderEffect(Duration.WhileOnBattlefield), + Effect effect = new ConditionalAsThoughEffect(new CanAttackAsThoughtItDidntHaveDefenderSourceEffect(Duration.WhileOnBattlefield), MetalcraftCondition.getInstance()); effect.setText("and can attack as though it didn't have defender"); ability.addEffect(effect); diff --git a/Mage.Sets/src/mage/sets/returntoravnica/ChaosImps.java b/Mage.Sets/src/mage/sets/returntoravnica/ChaosImps.java index 6bbae1f41e..674ed9da05 100644 --- a/Mage.Sets/src/mage/sets/returntoravnica/ChaosImps.java +++ b/Mage.Sets/src/mage/sets/returntoravnica/ChaosImps.java @@ -28,9 +28,6 @@ package mage.sets.returntoravnica; import java.util.UUID; -import mage.constants.CardType; -import mage.constants.Rarity; -import mage.constants.Zone; import mage.MageInt; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.condition.common.SourceHasCounterCondition; @@ -40,8 +37,11 @@ import mage.abilities.keyword.FlyingAbility; import mage.abilities.keyword.TrampleAbility; import mage.abilities.keyword.UnleashAbility; import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; import mage.counters.CounterType; - + /** * * @author LevelX2 @@ -52,8 +52,7 @@ public class ChaosImps extends CardImpl { super(ownerId, 90, "Chaos Imps", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{4}{R}{R}"); this.expansionSetCode = "RTR"; this.subtype.add("Imp"); - - this.color.setRed(true); + this.power = new MageInt(6); this.toughness = new MageInt(5); @@ -66,7 +65,7 @@ public class ChaosImps extends CardImpl { // Chaos Imps has trample as long as it has a +1/+1 counter on it. this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect(new GainAbilitySourceEffect(TrampleAbility.getInstance()), - new SourceHasCounterCondition(CounterType.P1P1),"Chaos Imps has trample as long as it has a +1/+1 counter on it"))); + new SourceHasCounterCondition(CounterType.P1P1),"{this} has trample as long as it has a +1/+1 counter on it"))); } diff --git a/Mage.Sets/src/mage/sets/tempest/SpikeDrone.java b/Mage.Sets/src/mage/sets/tempest/SpikeDrone.java index ae719c78cc..fd6448cb0f 100644 --- a/Mage.Sets/src/mage/sets/tempest/SpikeDrone.java +++ b/Mage.Sets/src/mage/sets/tempest/SpikeDrone.java @@ -33,6 +33,7 @@ import mage.constants.CardType; import mage.constants.Rarity; import mage.MageInt; import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.RemoveCountersSourceCost; @@ -58,7 +59,10 @@ public class SpikeDrone extends CardImpl { this.color.setGreen(true); this.power = new MageInt(0); this.toughness = new MageInt(0); - this.addAbility(new EntersBattlefieldTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance(1)))); + + this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance(2)), + "{this} enters the battlefield with a +1/+1 counters on it")); + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new AddCountersTargetEffect(CounterType.P1P1.createInstance(1)), new GenericManaCost(2)); ability.addCost(new RemoveCountersSourceCost(CounterType.P1P1.createInstance(1))); ability.addTarget(new TargetCreaturePermanent()); diff --git a/Mage.Sets/src/mage/sets/tenth/AngelicBlessing.java b/Mage.Sets/src/mage/sets/tenth/AngelicBlessing.java index d459ef8ba4..3f64015adb 100644 --- a/Mage.Sets/src/mage/sets/tenth/AngelicBlessing.java +++ b/Mage.Sets/src/mage/sets/tenth/AngelicBlessing.java @@ -28,14 +28,14 @@ package mage.sets.tenth; import java.util.UUID; - -import mage.constants.CardType; -import mage.constants.Rarity; +import mage.abilities.effects.Effect; import mage.abilities.effects.common.continuous.BoostTargetEffect; import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; +import mage.constants.CardType; import mage.constants.Duration; +import mage.constants.Rarity; import mage.target.common.TargetCreaturePermanent; /** @@ -47,9 +47,13 @@ public class AngelicBlessing extends CardImpl { public AngelicBlessing(UUID ownerId) { super(ownerId, 3, "Angelic Blessing", Rarity.COMMON, new CardType[]{CardType.SORCERY}, "{2}{W}"); this.expansionSetCode = "10E"; - this.color.setWhite(true); - this.getSpellAbility().addEffect(new BoostTargetEffect(3, 3, Duration.EndOfTurn)); - this.getSpellAbility().addEffect(new GainAbilityTargetEffect(FlyingAbility.getInstance(), Duration.EndOfTurn)); + + Effect effect = new BoostTargetEffect(3, 3, Duration.EndOfTurn); + effect.setText("Target creature gets +3/+3"); + this.getSpellAbility().addEffect(effect); + effect = new GainAbilityTargetEffect(FlyingAbility.getInstance(), Duration.EndOfTurn); + effect.setText("and gains flying until end of turn"); + this.getSpellAbility().addEffect(effect); this.getSpellAbility().addTarget(new TargetCreaturePermanent()); } diff --git a/Mage.Sets/src/mage/sets/theros/ColossusOfAkros.java b/Mage.Sets/src/mage/sets/theros/ColossusOfAkros.java index f52116132a..9515c4f37d 100644 --- a/Mage.Sets/src/mage/sets/theros/ColossusOfAkros.java +++ b/Mage.Sets/src/mage/sets/theros/ColossusOfAkros.java @@ -35,7 +35,7 @@ import mage.abilities.condition.common.MonstrousCondition; import mage.abilities.decorator.ConditionalAsThoughEffect; import mage.abilities.decorator.ConditionalContinuousEffect; import mage.abilities.effects.Effect; -import mage.abilities.effects.common.combat.CanAttackAsThoughtItDidntHaveDefenderEffect; +import mage.abilities.effects.common.combat.CanAttackAsThoughtItDidntHaveDefenderSourceEffect; import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; import mage.abilities.keyword.DefenderAbility; import mage.abilities.keyword.IndestructibleAbility; @@ -73,7 +73,7 @@ public class ColossusOfAkros extends CardImpl { new ConditionalContinuousEffect(new GainAbilitySourceEffect(TrampleAbility.getInstance(), Duration.WhileOnBattlefield), MonstrousCondition.getInstance(), "As long as {this} is monstrous, it has trample")); - Effect effect = new ConditionalAsThoughEffect(new CanAttackAsThoughtItDidntHaveDefenderEffect(Duration.WhileOnBattlefield), + Effect effect = new ConditionalAsThoughEffect(new CanAttackAsThoughtItDidntHaveDefenderSourceEffect(Duration.WhileOnBattlefield), MonstrousCondition.getInstance()); effect.setText("and can attack as though it didn't have defender"); ability.addEffect(effect); diff --git a/Mage.Sets/src/mage/sets/theros/ReturnedPhalanx.java b/Mage.Sets/src/mage/sets/theros/ReturnedPhalanx.java index b07e565c53..26d9fa0d72 100644 --- a/Mage.Sets/src/mage/sets/theros/ReturnedPhalanx.java +++ b/Mage.Sets/src/mage/sets/theros/ReturnedPhalanx.java @@ -31,7 +31,7 @@ import java.util.UUID; import mage.MageInt; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.effects.common.combat.CanAttackAsThoughtItDidntHaveDefenderEffect; +import mage.abilities.effects.common.combat.CanAttackAsThoughtItDidntHaveDefenderSourceEffect; import mage.abilities.keyword.DefenderAbility; import mage.cards.CardImpl; import mage.constants.CardType; @@ -58,7 +58,7 @@ public class ReturnedPhalanx extends CardImpl { // Defender this.addAbility(DefenderAbility.getInstance()); // {1}{U}: Returned Phalanx can attack this turn as though it didn't have defender. - this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new CanAttackAsThoughtItDidntHaveDefenderEffect(Duration.EndOfTurn), new ManaCostsImpl("{1}{U}"))); + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new CanAttackAsThoughtItDidntHaveDefenderSourceEffect(Duration.EndOfTurn), new ManaCostsImpl("{1}{U}"))); } public ReturnedPhalanx(final ReturnedPhalanx card) { diff --git a/Mage/src/mage/abilities/common/TurnedFaceUpAllTriggeredAbility.java b/Mage/src/mage/abilities/common/TurnedFaceUpAllTriggeredAbility.java index 3b17240518..367388fc06 100644 --- a/Mage/src/mage/abilities/common/TurnedFaceUpAllTriggeredAbility.java +++ b/Mage/src/mage/abilities/common/TurnedFaceUpAllTriggeredAbility.java @@ -34,7 +34,6 @@ import mage.constants.Zone; import mage.filter.FilterPermanent; import mage.game.Game; import mage.game.events.GameEvent; -import mage.game.events.GameEvent.EventType; import mage.game.permanent.Permanent; import mage.target.targetpointer.FixedTarget; @@ -53,12 +52,15 @@ public class TurnedFaceUpAllTriggeredAbility extends TriggeredAbilityImpl { } public TurnedFaceUpAllTriggeredAbility(Effect effect, FilterPermanent filter, boolean setTargetPointer) { - super(Zone.BATTLEFIELD, effect); + this(Zone.BATTLEFIELD, effect, filter, setTargetPointer, false); + } + + public TurnedFaceUpAllTriggeredAbility(Zone zone, Effect effect, FilterPermanent filter, boolean setTargetPointer, boolean optional) { + super(zone, effect, optional); // has to be set so the ability triggers if card itself is turn faced up this.setWorksFaceDown(true); this.filter = filter; this.setTargetPointer = setTargetPointer; - } public TurnedFaceUpAllTriggeredAbility(final TurnedFaceUpAllTriggeredAbility ability) { @@ -105,7 +107,7 @@ public class TurnedFaceUpAllTriggeredAbility extends TriggeredAbilityImpl { @Override public String getRule() { - return "When " + filter.getMessage() + " is turned face up, " + super.getRule(); + return "Whenever " + filter.getMessage() + " is turned face up, " + super.getRule(); } } diff --git a/Mage/src/mage/abilities/effects/common/AddManaOfAnyColorEffect.java b/Mage/src/mage/abilities/effects/common/AddManaOfAnyColorEffect.java index 5a080336e7..b79149a846 100644 --- a/Mage/src/mage/abilities/effects/common/AddManaOfAnyColorEffect.java +++ b/Mage/src/mage/abilities/effects/common/AddManaOfAnyColorEffect.java @@ -46,7 +46,7 @@ public class AddManaOfAnyColorEffect extends BasicManaEffect { } public AddManaOfAnyColorEffect(final int amount) { - super(new Mana(0,0,0,0,0,0,1)); + super(new Mana(0,0,0,0,0,0, amount)); this.amount = amount; this.staticText = new StringBuilder("add ") .append(CardUtil.numberToText(amount)) diff --git a/Mage/src/mage/abilities/effects/common/FightTargetSourceEffect.java b/Mage/src/mage/abilities/effects/common/FightTargetSourceEffect.java index dda84ffa5f..91b0bd9f34 100644 --- a/Mage/src/mage/abilities/effects/common/FightTargetSourceEffect.java +++ b/Mage/src/mage/abilities/effects/common/FightTargetSourceEffect.java @@ -57,13 +57,10 @@ public class FightTargetSourceEffect extends OneShotEffect { // only if target is legal the effect will be applied if (source.getTargets().get(0).isLegal(source, game)) { Permanent creature1 = game.getPermanent(source.getTargets().get(0).getFirstTarget()); - // 20110930 - 701.10 if (creature1 != null && sourcePermanent != null) { if (creature1.getCardType().contains(CardType.CREATURE) && sourcePermanent.getCardType().contains(CardType.CREATURE)) { - creature1.damage(sourcePermanent.getPower().getValue(), sourcePermanent.getId(), game, false, true); - sourcePermanent.damage(creature1.getPower().getValue(), creature1.getId(), game, false, true); - return true; + return sourcePermanent.fight(creature1, source, game); } } } diff --git a/Mage/src/mage/abilities/effects/common/FightTargetsEffect.java b/Mage/src/mage/abilities/effects/common/FightTargetsEffect.java index 42386c8f28..82b02c18d9 100644 --- a/Mage/src/mage/abilities/effects/common/FightTargetsEffect.java +++ b/Mage/src/mage/abilities/effects/common/FightTargetsEffect.java @@ -61,9 +61,7 @@ public class FightTargetsEffect extends OneShotEffect { // 20110930 - 701.10 if (creature1 != null && creature2 != null) { if (creature1.getCardType().contains(CardType.CREATURE) && creature2.getCardType().contains(CardType.CREATURE)) { - creature1.damage(creature2.getPower().getValue(), creature2.getId(), game, false, true); - creature2.damage(creature1.getPower().getValue(), creature1.getId(), game, false, true); - return true; + return creature1.fight(creature2, source, game); } } } diff --git a/Mage/src/mage/abilities/effects/common/combat/CanAttackAsThoughtItDidntHaveDefenderEffect.java b/Mage/src/mage/abilities/effects/common/combat/CanAttackAsThoughtItDidntHaveDefenderSourceEffect.java similarity index 78% rename from Mage/src/mage/abilities/effects/common/combat/CanAttackAsThoughtItDidntHaveDefenderEffect.java rename to Mage/src/mage/abilities/effects/common/combat/CanAttackAsThoughtItDidntHaveDefenderSourceEffect.java index f63d0a2624..eb7dcc3c53 100644 --- a/Mage/src/mage/abilities/effects/common/combat/CanAttackAsThoughtItDidntHaveDefenderEffect.java +++ b/Mage/src/mage/abilities/effects/common/combat/CanAttackAsThoughtItDidntHaveDefenderSourceEffect.java @@ -40,14 +40,14 @@ import mage.game.Game; * @author LevelX2 */ -public class CanAttackAsThoughtItDidntHaveDefenderEffect extends AsThoughEffectImpl { +public class CanAttackAsThoughtItDidntHaveDefenderSourceEffect extends AsThoughEffectImpl { - public CanAttackAsThoughtItDidntHaveDefenderEffect(Duration duration) { + public CanAttackAsThoughtItDidntHaveDefenderSourceEffect(Duration duration) { super(AsThoughEffectType.ATTACK, duration, Outcome.Benefit); staticText = "{this} can attack as though it didn't have defender"; } - public CanAttackAsThoughtItDidntHaveDefenderEffect(final CanAttackAsThoughtItDidntHaveDefenderEffect effect) { + public CanAttackAsThoughtItDidntHaveDefenderSourceEffect(final CanAttackAsThoughtItDidntHaveDefenderSourceEffect effect) { super(effect); } @@ -57,13 +57,13 @@ public class CanAttackAsThoughtItDidntHaveDefenderEffect extends AsThoughEffectI } @Override - public CanAttackAsThoughtItDidntHaveDefenderEffect copy() { - return new CanAttackAsThoughtItDidntHaveDefenderEffect(this); + public CanAttackAsThoughtItDidntHaveDefenderSourceEffect copy() { + return new CanAttackAsThoughtItDidntHaveDefenderSourceEffect(this); } @Override - public boolean applies(UUID sourceId, Ability source, UUID affectedControllerId, Game game) { - return sourceId.equals(source.getSourceId()); + public boolean applies(UUID objectId, Ability source, UUID affectedControllerId, Game game) { + return objectId.equals(source.getSourceId()); } } diff --git a/Mage/src/mage/abilities/effects/common/combat/CanAttackAsThoughtItDidntHaveDefenderTargetEffect.java b/Mage/src/mage/abilities/effects/common/combat/CanAttackAsThoughtItDidntHaveDefenderTargetEffect.java new file mode 100644 index 0000000000..604fa931fa --- /dev/null +++ b/Mage/src/mage/abilities/effects/common/combat/CanAttackAsThoughtItDidntHaveDefenderTargetEffect.java @@ -0,0 +1,84 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.abilities.effects.common.combat; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.Mode; +import mage.abilities.effects.AsThoughEffectImpl; +import mage.constants.AsThoughEffectType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.game.Game; + +/** + * + * @author LevelX2 + */ + +public class CanAttackAsThoughtItDidntHaveDefenderTargetEffect extends AsThoughEffectImpl { + + public CanAttackAsThoughtItDidntHaveDefenderTargetEffect(Duration duration) { + super(AsThoughEffectType.ATTACK, duration, Outcome.Benefit); + } + + public CanAttackAsThoughtItDidntHaveDefenderTargetEffect(final CanAttackAsThoughtItDidntHaveDefenderTargetEffect effect) { + super(effect); + } + + @Override + public boolean apply(Game game, Ability source) { + return true; + } + + @Override + public CanAttackAsThoughtItDidntHaveDefenderTargetEffect copy() { + return new CanAttackAsThoughtItDidntHaveDefenderTargetEffect(this); + } + + @Override + public boolean applies(UUID objectId, Ability source, UUID affectedControllerId, Game game) { + return this.getTargetPointer().getTargets(game, source).contains(objectId); + } + + @Override + public String getText(Mode mode) { + if (staticText != null && !staticText.isEmpty()) { + return staticText; + } + if (!mode.getTargets().isEmpty()) { + if (this.duration == Duration.EndOfTurn) { + return "Target " + mode.getTargets().get(0).getTargetName() + " can attack this turn as though it didn't have defender"; + } else { + return "Target " + mode.getTargets().get(0).getTargetName() + " can attack as though it didn't have defender"; + } + } else { + throw new UnsupportedOperationException("No target defined"); + } + } +} diff --git a/Mage/src/mage/game/combat/Combat.java b/Mage/src/mage/game/combat/Combat.java index 8223e5116a..143a1dd9de 100644 --- a/Mage/src/mage/game/combat/Combat.java +++ b/Mage/src/mage/game/combat/Combat.java @@ -61,6 +61,7 @@ public class Combat implements Serializable, Copyable { private static FilterCreatureForCombatBlock filterBlockers = new FilterCreatureForCombatBlock(); // There are effects that let creatures assigns combat damage equal to its toughness rather than its power private boolean useToughnessForDamage; + private List useToughnessForDamageFilters = new ArrayList<>(); protected List groups = new ArrayList<>(); protected Map blockingGroups = new HashMap<>(); @@ -130,16 +131,28 @@ public class Combat implements Serializable, Copyable { return blockers; } - public boolean useToughnessForDamage() { - return useToughnessForDamage; + public boolean useToughnessForDamage(Permanent permanent, Game game) { + if (useToughnessForDamage) { + for(FilterCreaturePermanent filter: useToughnessForDamageFilters) { + if (filter.match(permanent, game)) { + return true; + } + } + } + return false; } public void setUseToughnessForDamage(boolean useToughnessForDamage) { this.useToughnessForDamage = useToughnessForDamage; } + public void addUseToughnessForDamageFilter(FilterCreaturePermanent filter) { + this.useToughnessForDamageFilters.add(filter); + } + public void reset() { this.useToughnessForDamage = false; + this.useToughnessForDamageFilters.clear(); } public void clear() { diff --git a/Mage/src/mage/game/combat/CombatGroup.java b/Mage/src/mage/game/combat/CombatGroup.java index 806a0fb8b9..d02267478c 100644 --- a/Mage/src/mage/game/combat/CombatGroup.java +++ b/Mage/src/mage/game/combat/CombatGroup.java @@ -599,7 +599,7 @@ public class CombatGroup implements Serializable, Copyable { * @return */ private int getDamageValueFromPermanent(Permanent permanent, Game game) { - if (game.getCombat().useToughnessForDamage()) { + if (game.getCombat().useToughnessForDamage(permanent, game)) { return permanent.getToughness().getValue(); } else { return permanent.getPower().getValue(); diff --git a/Mage/src/mage/game/events/GameEvent.java b/Mage/src/mage/game/events/GameEvent.java index c4db2d3c9a..e5a1e11f8f 100644 --- a/Mage/src/mage/game/events/GameEvent.java +++ b/Mage/src/mage/game/events/GameEvent.java @@ -125,6 +125,7 @@ public class GameEvent { DAMAGE_PLANESWALKER, DAMAGED_PLANESWALKER, DESTROY_PERMANENT, DESTROYED_PERMANENT, SACRIFICE_PERMANENT, SACRIFICED_PERMANENT, + FIGHTED_PERMANENT, EXPLOIDED_CREATURE, ATTACH, ATTACHED, UNATTACH, UNATTACHED, diff --git a/Mage/src/mage/game/permanent/Permanent.java b/Mage/src/mage/game/permanent/Permanent.java index 99745dad18..aab2f10f6a 100644 --- a/Mage/src/mage/game/permanent/Permanent.java +++ b/Mage/src/mage/game/permanent/Permanent.java @@ -119,6 +119,8 @@ public interface Permanent extends Card, Controllable { boolean destroy(UUID sourceId, Game game, boolean noRegen); boolean sacrifice(UUID sourceId, Game game); boolean regenerate(UUID sourceId, Game game); + boolean fight(Permanent fightTarget, Ability source, Game game); + void entersBattlefield(UUID sourceId, Game game, Zone fromZone, boolean fireEvent); String getValue(); diff --git a/Mage/src/mage/game/permanent/PermanentImpl.java b/Mage/src/mage/game/permanent/PermanentImpl.java index bc407e2fb1..90a26a0dc6 100644 --- a/Mage/src/mage/game/permanent/PermanentImpl.java +++ b/Mage/src/mage/game/permanent/PermanentImpl.java @@ -1297,5 +1297,12 @@ public abstract class PermanentImpl extends CardImpl implements Permanent { this.secondSideCard = card; } - + @Override + public boolean fight(Permanent fightTarget, Ability source, Game game) { + game.fireEvent(GameEvent.getEvent(GameEvent.EventType.FIGHTED_PERMANENT, fightTarget.getId(), getId(), source.getControllerId())); + game.fireEvent(GameEvent.getEvent(GameEvent.EventType.FIGHTED_PERMANENT, getId(), fightTarget.getId(), source.getControllerId())); + damage(fightTarget.getPower().getValue(), fightTarget.getId(), game, false, true); + fightTarget.damage(getPower().getValue(), getId(), game, false, true); + return true; + } }