diff --git a/Mage.Sets/src/mage/sets/commander2015/ScouredBarrens.java b/Mage.Sets/src/mage/sets/commander2015/ScouredBarrens.java index 217cf672c2..3ffe6f59bf 100644 --- a/Mage.Sets/src/mage/sets/commander2015/ScouredBarrens.java +++ b/Mage.Sets/src/mage/sets/commander2015/ScouredBarrens.java @@ -37,7 +37,7 @@ public class ScouredBarrens extends mage.sets.khansoftarkir.ScouredBarrens { public ScouredBarrens(UUID ownerId) { super(ownerId); - this.cardNumber = 302; + this.cardNumber = 303; this.expansionSetCode = "C15"; } diff --git a/Mage.Sets/src/mage/sets/commander2015/SecludedSteppe.java b/Mage.Sets/src/mage/sets/commander2015/SecludedSteppe.java index 6443d1f85c..ad46e9f008 100644 --- a/Mage.Sets/src/mage/sets/commander2015/SecludedSteppe.java +++ b/Mage.Sets/src/mage/sets/commander2015/SecludedSteppe.java @@ -37,7 +37,7 @@ public class SecludedSteppe extends mage.sets.onslaught.SecludedSteppe { public SecludedSteppe(UUID ownerId) { super(ownerId); - this.cardNumber = 303; + this.cardNumber = 304; this.expansionSetCode = "C15"; } diff --git a/Mage.Sets/src/mage/sets/mirrodinbesieged/VictorysHerald.java b/Mage.Sets/src/mage/sets/mirrodinbesieged/VictorysHerald.java index 8522d1dc1d..bfeae818b9 100644 --- a/Mage.Sets/src/mage/sets/mirrodinbesieged/VictorysHerald.java +++ b/Mage.Sets/src/mage/sets/mirrodinbesieged/VictorysHerald.java @@ -1,72 +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.mirrodinbesieged; - -import java.util.UUID; - -import mage.constants.CardType; -import mage.constants.Rarity; -import mage.MageInt; -import mage.abilities.Ability; -import mage.abilities.common.AttacksTriggeredAbility; -import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; -import mage.abilities.keyword.FlyingAbility; -import mage.abilities.keyword.LifelinkAbility; -import mage.cards.CardImpl; -import mage.constants.Duration; -import mage.filter.common.FilterAttackingCreature; - -/** - * - * @author Loki - */ -public class VictorysHerald extends CardImpl { - - public VictorysHerald (UUID ownerId) { - super(ownerId, 18, "Victory's Herald", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{3}{W}{W}{W}"); - this.expansionSetCode = "MBS"; - this.subtype.add("Angel"); - - this.power = new MageInt(4); - this.toughness = new MageInt(4); - Ability ability = new AttacksTriggeredAbility(new GainAbilityControlledEffect(FlyingAbility.getInstance(), Duration.EndOfTurn, new FilterAttackingCreature()), false); - ability.addEffect(new GainAbilityControlledEffect(LifelinkAbility.getInstance(), Duration.EndOfTurn, new FilterAttackingCreature())); - this.addAbility(ability); - } - - public VictorysHerald (final VictorysHerald card) { - super(card); - } - - @Override - public VictorysHerald copy() { - return new VictorysHerald(this); - } - -} +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ + +package mage.sets.mirrodinbesieged; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.AttacksTriggeredAbility; +import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.abilities.keyword.LifelinkAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.filter.common.FilterAttackingCreature; + +/** + * + * @author Loki + */ +public class VictorysHerald extends CardImpl { + + public VictorysHerald (UUID ownerId) { + super(ownerId, 18, "Victory's Herald", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{3}{W}{W}{W}"); + this.expansionSetCode = "MBS"; + this.subtype.add("Angel"); + + this.power = new MageInt(4); + this.toughness = new MageInt(4); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + + // Whenever Victory's Herald attacks, attacking creatures gain flying and lifelink until end of turn. + Ability ability = new AttacksTriggeredAbility(new GainAbilityControlledEffect(FlyingAbility.getInstance(), Duration.EndOfTurn, new FilterAttackingCreature()), false); + ability.addEffect(new GainAbilityControlledEffect(LifelinkAbility.getInstance(), Duration.EndOfTurn, new FilterAttackingCreature())); + this.addAbility(ability); + } + + public VictorysHerald (final VictorysHerald card) { + super(card); + } + + @Override + public VictorysHerald copy() { + return new VictorysHerald(this); + } + +} diff --git a/Mage.Sets/src/mage/sets/odyssey/SkeletalScrying.java b/Mage.Sets/src/mage/sets/odyssey/SkeletalScrying.java index 48eb832d79..c05825392c 100644 --- a/Mage.Sets/src/mage/sets/odyssey/SkeletalScrying.java +++ b/Mage.Sets/src/mage/sets/odyssey/SkeletalScrying.java @@ -1,142 +1,141 @@ -/* - * 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.odyssey; - -import mage.abilities.Ability; -import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.costs.common.ExileFromGraveCost; -import mage.abilities.dynamicvalue.DynamicValue; -import mage.abilities.dynamicvalue.common.ManacostVariableValue; -import mage.abilities.dynamicvalue.common.StaticValue; -import mage.abilities.effects.OneShotEffect; -import mage.cards.CardImpl; -import mage.constants.CardType; -import mage.constants.Outcome; -import mage.constants.Rarity; -import mage.constants.Zone; -import mage.filter.FilterCard; -import mage.game.Game; -import mage.players.Player; -import mage.target.common.TargetCardInYourGraveyard; - -import java.util.UUID; - -/** - * - * @author jeffwadsworth - */ -public class SkeletalScrying extends CardImpl { - - public SkeletalScrying(UUID ownerId) { - super(ownerId, 161, "Skeletal Scrying", Rarity.UNCOMMON, new CardType[]{CardType.INSTANT}, "{X}{B}"); - this.expansionSetCode = "ODY"; - - - // As an additional cost to cast Skeletal Scrying, exile X cards from your graveyard. - Ability ability = new SimpleStaticAbility(Zone.ALL,new SkeletalScryingRuleEffect()); - ability.setRuleAtTheTop(true); - this.addAbility(ability); - // You draw X cards and you lose X life. - this.getSpellAbility().addEffect(new SkeletalScryingEffect(new ManacostVariableValue())); - - } - - public SkeletalScrying(final SkeletalScrying card) { - super(card); - } - - @Override - public void adjustCosts(Ability ability, Game game) { - int xValue = ability.getManaCostsToPay().getX(); - if (xValue > 0) { - ability.addCost(new ExileFromGraveCost(new TargetCardInYourGraveyard(xValue, xValue, new FilterCard("cards from your graveyard")))); - } - } - - @Override - public SkeletalScrying copy() { - return new SkeletalScrying(this); - } -} - -class SkeletalScryingRuleEffect extends OneShotEffect { - - public SkeletalScryingRuleEffect() { - super(Outcome.Benefit); - this.staticText = "As an additional cost to cast Skeletal Scrying, exile X cards from your graveyard"; - } - - public SkeletalScryingRuleEffect(final SkeletalScryingRuleEffect effect) { - super(effect); - } - - @Override - public SkeletalScryingRuleEffect copy() { - return new SkeletalScryingRuleEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - return true; - } -} -class SkeletalScryingEffect extends OneShotEffect { - - protected DynamicValue amount; - - public SkeletalScryingEffect(int amount) { - this(new StaticValue(amount)); - } - - public SkeletalScryingEffect(DynamicValue amount) { - super(Outcome.Neutral); - this.amount = amount.copy(); - staticText = "You draw " + amount + " cards and you lose " + amount + " life"; - } - - public SkeletalScryingEffect(final SkeletalScryingEffect effect) { - super(effect); - this.amount = effect.amount; - } - - @Override - public SkeletalScryingEffect copy() { - return new SkeletalScryingEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Player controller = game.getPlayer(source.getControllerId()); - if ( controller != null ) { - controller.drawCards(amount.calculate(game, source, this), game); - controller.loseLife(amount.calculate(game, source, this), game); - return true; - } - return false; - } -} +/* + * 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.odyssey; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.costs.common.ExileFromGraveCost; +import mage.abilities.dynamicvalue.DynamicValue; +import mage.abilities.dynamicvalue.common.ManacostVariableValue; +import mage.abilities.dynamicvalue.common.StaticValue; +import mage.abilities.effects.OneShotEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.FilterCard; +import mage.game.Game; +import mage.players.Player; +import mage.target.common.TargetCardInYourGraveyard; + +/** + * + * @author jeffwadsworth + */ +public class SkeletalScrying extends CardImpl { + + public SkeletalScrying(UUID ownerId) { + super(ownerId, 161, "Skeletal Scrying", Rarity.UNCOMMON, new CardType[]{CardType.INSTANT}, "{X}{B}"); + this.expansionSetCode = "ODY"; + + + // As an additional cost to cast Skeletal Scrying, exile X cards from your graveyard. + Ability ability = new SimpleStaticAbility(Zone.ALL, new SkeletalScryingRuleEffect()); + ability.setRuleAtTheTop(true); + this.addAbility(ability); + // You draw X cards and you lose X life. + this.getSpellAbility().addEffect(new SkeletalScryingEffect(new ManacostVariableValue())); + + } + + public SkeletalScrying(final SkeletalScrying card) { + super(card); + } + + @Override + public void adjustCosts(Ability ability, Game game) { + int xValue = ability.getManaCostsToPay().getX(); + if (xValue > 0) { + ability.addCost(new ExileFromGraveCost(new TargetCardInYourGraveyard(xValue, xValue, new FilterCard("cards from your graveyard")))); + } + } + + @Override + public SkeletalScrying copy() { + return new SkeletalScrying(this); + } +} + +class SkeletalScryingRuleEffect extends OneShotEffect { + + public SkeletalScryingRuleEffect() { + super(Outcome.Benefit); + this.staticText = "As an additional cost to cast {this}, exile X cards from your graveyard"; + } + + public SkeletalScryingRuleEffect(final SkeletalScryingRuleEffect effect) { + super(effect); + } + + @Override + public SkeletalScryingRuleEffect copy() { + return new SkeletalScryingRuleEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + return true; + } +} +class SkeletalScryingEffect extends OneShotEffect { + + protected DynamicValue amount; + + public SkeletalScryingEffect(int amount) { + this(new StaticValue(amount)); + } + + public SkeletalScryingEffect(DynamicValue amount) { + super(Outcome.Neutral); + this.amount = amount.copy(); + staticText = "You draw " + amount + " cards and you lose " + amount + " life"; + } + + public SkeletalScryingEffect(final SkeletalScryingEffect effect) { + super(effect); + this.amount = effect.amount; + } + + @Override + public SkeletalScryingEffect copy() { + return new SkeletalScryingEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + if ( controller != null ) { + controller.drawCards(amount.calculate(game, source, this), game); + controller.loseLife(amount.calculate(game, source, this), game); + return true; + } + return false; + } +} diff --git a/Mage/src/main/java/mage/abilities/effects/common/DontUntapAsLongAsSourceTappedEffect.java b/Mage/src/main/java/mage/abilities/effects/common/DontUntapAsLongAsSourceTappedEffect.java index f84dc06cee..553a2ea964 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/DontUntapAsLongAsSourceTappedEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/DontUntapAsLongAsSourceTappedEffect.java @@ -28,11 +28,9 @@ package mage.abilities.effects.common; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.condition.common.SourceTappedCondition; import mage.abilities.decorator.ConditionalContinuousRuleModifyingEffect; -import mage.abilities.effects.common.DontUntapInControllersUntapStepTargetEffect; import mage.constants.Duration; import mage.game.Game; import mage.game.events.GameEvent;