diff --git a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/HistoricalStandard.java b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/HistoricalStandard.java
index 38c577f35ad..9fef3463b57 100644
--- a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/HistoricalStandard.java
+++ b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/HistoricalStandard.java
@@ -85,7 +85,7 @@ public class HistoricalStandard extends Constructed {
* done in the overridden validate function.
*/
public HistoricalStandard() {
- super("Variant Magic - Historical Standard");
+ super("Constructed - Historical Standard");
// banned cards
banned.add("Balance");
diff --git a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/SuperStandard.java b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/SuperStandard.java
index f1fa0b0fa50..4eb4d5c4e8a 100644
--- a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/SuperStandard.java
+++ b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/SuperStandard.java
@@ -61,7 +61,7 @@ public class SuperStandard extends Constructed {
* done in the overridden validate function.
*/
public SuperStandard() {
- super("Variant Magic - Super Standard");
+ super("Constructed - Super Standard");
banned.add("Ancient Den");
banned.add("Disciple of the Vault");
diff --git a/Mage.Sets/src/mage/sets/conspiracy/BiteOfTheBlackRose.java b/Mage.Sets/src/mage/sets/conspiracy/BiteOfTheBlackRose.java
new file mode 100644
index 00000000000..d8f9840867e
--- /dev/null
+++ b/Mage.Sets/src/mage/sets/conspiracy/BiteOfTheBlackRose.java
@@ -0,0 +1,114 @@
+/*
+ * 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.conspiracy;
+
+import java.util.UUID;
+import mage.abilities.Ability;
+import mage.abilities.dynamicvalue.common.StaticValue;
+import mage.abilities.effects.ContinuousEffect;
+import mage.abilities.effects.OneShotEffect;
+import mage.abilities.effects.common.continuous.BoostOpponentsEffect;
+import mage.abilities.effects.common.discard.DiscardEachPlayerEffect;
+import mage.cards.CardImpl;
+import mage.constants.CardType;
+import mage.constants.Duration;
+import mage.constants.Outcome;
+import mage.constants.Rarity;
+import mage.constants.TargetController;
+import mage.game.Game;
+import mage.players.Player;
+
+/**
+ *
+ * @author fireshoes
+ */
+public class BiteOfTheBlackRose extends CardImpl {
+
+ public BiteOfTheBlackRose(UUID ownerId) {
+ super(ownerId, 26, "Bite of the Black Rose", Rarity.UNCOMMON, new CardType[]{CardType.SORCERY}, "{3}{B}");
+ this.expansionSetCode = "CNS";
+
+ // Will of the council - Starting with you, each player votes for sickness or psychosis. If sickness gets more votes, creatures your opponents control get -2/-2 until end of turn. If psychosis gets more votes or the vote is tied, each opponent discards two cards.
+ this.getSpellAbility().addEffect(new BiteOfTheBlackRoseEffect());
+ }
+
+ public BiteOfTheBlackRose(final BiteOfTheBlackRose card) {
+ super(card);
+ }
+
+ @Override
+ public BiteOfTheBlackRose copy() {
+ return new BiteOfTheBlackRose(this);
+ }
+}
+
+class BiteOfTheBlackRoseEffect extends OneShotEffect {
+
+ BiteOfTheBlackRoseEffect() {
+ super(Outcome.Benefit);
+ this.staticText = "Will of the council - Starting with you, each player votes for sickness or psychosis. If sickness gets more votes, creatures your opponents control get -2/-2 until end of turn. If psychosis gets more votes or the vote is tied, each opponent discards two cards";
+ }
+
+ BiteOfTheBlackRoseEffect(final BiteOfTheBlackRoseEffect effect) {
+ super(effect);
+ }
+
+ @Override
+ public BiteOfTheBlackRoseEffect copy() {
+ return new BiteOfTheBlackRoseEffect(this);
+ }
+
+ @Override
+ public boolean apply(Game game, Ability source) {
+ Player controller = game.getPlayer(source.getControllerId());
+ if (controller != null) {
+ int sicknessCount = 0;
+ int psychosisCount = 0;
+ for (UUID playerId : game.getState().getPlayersInRange(controller.getId(), game)) {
+ Player player = game.getPlayer(playerId);
+ if (player != null) {
+ if (player.chooseUse(Outcome.ExtraTurn, "Choose sickness?", source, game)) {
+ sicknessCount++;
+ game.informPlayers(player.getLogName() + " has chosen: sickness");
+ } else {
+ psychosisCount++;
+ game.informPlayers(player.getLogName() + " has chosen: psychosis");
+ }
+ }
+ }
+ if (sicknessCount > psychosisCount) {
+ ContinuousEffect effect = new BoostOpponentsEffect(-2, -2, Duration.EndOfTurn);
+ game.addEffect(effect, source);
+ } else {
+ new DiscardEachPlayerEffect(new StaticValue(2), false, TargetController.OPPONENT).apply(game, source);
+ }
+ return true;
+ }
+ return false;
+ }
+}
\ No newline at end of file
diff --git a/Mage.Sets/src/mage/sets/ftvangels/SerraAngel.java b/Mage.Sets/src/mage/sets/ftvangels/SerraAngel.java
new file mode 100644
index 00000000000..f9db2c50cc4
--- /dev/null
+++ b/Mage.Sets/src/mage/sets/ftvangels/SerraAngel.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification, are
+ * permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this list of
+ * conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice, this list
+ * of conditions and the following disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * The views and conclusions contained in the software and documentation are those of the
+ * authors and should not be interpreted as representing official policies, either expressed
+ * or implied, of BetaSteward_at_googlemail.com.
+ */
+package mage.sets.ftvangels;
+
+import java.util.UUID;
+import mage.constants.Rarity;
+
+/**
+ *
+ * @author fireshoes
+ */
+public class SerraAngel extends mage.sets.tenthedition.SerraAngel {
+
+ public SerraAngel(UUID ownerId) {
+ super(ownerId);
+ this.cardNumber = 14;
+ this.expansionSetCode = "V15";
+ this.rarity = Rarity.MYTHIC;
+ }
+
+ public SerraAngel(final SerraAngel card) {
+ super(card);
+ }
+
+ @Override
+ public SerraAngel copy() {
+ return new SerraAngel(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/sets/ftvangels/TarielReckonerOfSouls.java b/Mage.Sets/src/mage/sets/ftvangels/TarielReckonerOfSouls.java
new file mode 100644
index 00000000000..e63b716a94e
--- /dev/null
+++ b/Mage.Sets/src/mage/sets/ftvangels/TarielReckonerOfSouls.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.ftvangels;
+
+import java.util.UUID;
+
+/**
+ *
+ * @author fireshoes
+ */
+public class TarielReckonerOfSouls extends mage.sets.commander.TarielReckonerOfSouls {
+
+ public TarielReckonerOfSouls(UUID ownerId) {
+ super(ownerId);
+ this.cardNumber = 15;
+ this.expansionSetCode = "V15";
+ }
+
+ public TarielReckonerOfSouls(final TarielReckonerOfSouls card) {
+ super(card);
+ }
+
+ @Override
+ public TarielReckonerOfSouls copy() {
+ return new TarielReckonerOfSouls(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/sets/gatecrash/DyingWish.java b/Mage.Sets/src/mage/sets/gatecrash/DyingWish.java
index 772d3a72ad9..6b98ffc389e 100644
--- a/Mage.Sets/src/mage/sets/gatecrash/DyingWish.java
+++ b/Mage.Sets/src/mage/sets/gatecrash/DyingWish.java
@@ -28,17 +28,21 @@
package mage.sets.gatecrash;
import java.util.UUID;
-import mage.constants.CardType;
-import mage.constants.Outcome;
-import mage.constants.Rarity;
import mage.abilities.Ability;
import mage.abilities.common.DiesAttachedTriggeredAbility;
import mage.abilities.dynamicvalue.DynamicValue;
+import mage.abilities.effects.Effect;
import mage.abilities.effects.common.AttachEffect;
import mage.abilities.effects.common.GainLifeEffect;
import mage.abilities.effects.common.LoseLifeTargetEffect;
import mage.abilities.keyword.EnchantAbility;
import mage.cards.CardImpl;
+import mage.constants.CardType;
+import mage.constants.Outcome;
+import mage.constants.Rarity;
+import mage.constants.Zone;
+import mage.game.Game;
+import mage.game.permanent.Permanent;
import mage.target.TargetPermanent;
import mage.target.TargetPlayer;
import mage.target.common.TargetControlledCreaturePermanent;
@@ -62,9 +66,8 @@ public class DyingWish extends CardImpl {
Ability ability = new EnchantAbility(auraTarget.getTargetName());
this.addAbility(ability);
-
// When enchanted creature dies, target player loses X life and you gain X life, where X is its power.
- DynamicValue attachedPower = new AttachedPermanentPowerCount();
+ DynamicValue attachedPower = new DyingWishAttachedPermanentPowerCount();
ability = new DiesAttachedTriggeredAbility(new LoseLifeTargetEffect(attachedPower), "enchanted creature");
ability.addEffect(new GainLifeEffect(attachedPower));
ability.addTarget(new TargetPlayer());
@@ -80,3 +83,38 @@ public class DyingWish extends CardImpl {
return new DyingWish(this);
}
}
+
+class DyingWishAttachedPermanentPowerCount implements DynamicValue {
+
+ @Override
+ public int calculate(Game game, Ability sourceAbility, Effect effect) {
+ Permanent attachmentPermanent = game.getPermanent(sourceAbility.getSourceId());
+ if (attachmentPermanent == null) {
+ attachmentPermanent = (Permanent) game.getLastKnownInformation(sourceAbility.getSourceId(), Zone.BATTLEFIELD, sourceAbility.getSourceObjectZoneChangeCounter());
+ }
+ if (attachmentPermanent != null && attachmentPermanent.getAttachedTo() != null) {
+ if (effect.getValue("attachedTo") != null) {
+ Permanent attached = (Permanent) effect.getValue("attachedTo");
+ if (attached != null) {
+ return attached.getPower().getValue();
+ }
+ }
+ }
+ return 0;
+ }
+
+ @Override
+ public DynamicValue copy() {
+ return new DyingWishAttachedPermanentPowerCount();
+ }
+
+ @Override
+ public String toString() {
+ return "X";
+ }
+
+ @Override
+ public String getMessage() {
+ return "its power";
+ }
+}
diff --git a/Mage.Sets/src/mage/sets/invasion/OrimsTouch.java b/Mage.Sets/src/mage/sets/invasion/OrimsTouch.java
new file mode 100644
index 00000000000..bec89d9ae44
--- /dev/null
+++ b/Mage.Sets/src/mage/sets/invasion/OrimsTouch.java
@@ -0,0 +1,74 @@
+/*
+ * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification, are
+ * permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this list of
+ * conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice, this list
+ * of conditions and the following disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * The views and conclusions contained in the software and documentation are those of the
+ * authors and should not be interpreted as representing official policies, either expressed
+ * or implied, of BetaSteward_at_googlemail.com.
+ */
+package mage.sets.invasion;
+
+import java.util.UUID;
+import mage.abilities.condition.LockedInCondition;
+import mage.abilities.condition.common.KickedCondition;
+import mage.abilities.decorator.ConditionalReplacementEffect;
+import mage.abilities.effects.Effect;
+import mage.abilities.effects.common.PreventDamageToTargetEffect;
+import mage.abilities.keyword.KickerAbility;
+import mage.cards.CardImpl;
+import mage.constants.CardType;
+import mage.constants.Duration;
+import mage.constants.Rarity;
+import mage.target.common.TargetCreatureOrPlayer;
+
+/**
+ *
+ * @author fireshoes
+ */
+public class OrimsTouch extends CardImpl {
+
+ public OrimsTouch(UUID ownerId) {
+ super(ownerId, 23, "Orim's Touch", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{W}");
+ this.expansionSetCode = "INV";
+
+ // Kicker {1}
+ this.addAbility(new KickerAbility("{1}"));
+
+ // Prevent the next 2 damage that would be dealt to target creature or player this turn. If Orim's Touch was kicked, prevent the next 4 damage that would be dealt to that creature or player this turn instead.
+ Effect effect = new ConditionalReplacementEffect(
+ new PreventDamageToTargetEffect(Duration.EndOfTurn, 4),
+ new LockedInCondition(KickedCondition.getInstance()),
+ new PreventDamageToTargetEffect(Duration.EndOfTurn, 2));
+ effect.setText("Prevent the next 2 damage that would be dealt to target creature or player this turn. If Orim's Touch was kicked, prevent the next 4 damage that would be dealt to that creature or player this turn instead");
+ this.getSpellAbility().addTarget(new TargetCreatureOrPlayer());
+ this.getSpellAbility().addEffect(effect);
+ }
+
+ public OrimsTouch(final OrimsTouch card) {
+ super(card);
+ }
+
+ @Override
+ public OrimsTouch copy() {
+ return new OrimsTouch(this);
+ }
+}
\ No newline at end of file
diff --git a/Mage.Sets/src/mage/sets/mediainserts/VoidmageHusher.java b/Mage.Sets/src/mage/sets/mediainserts/VoidmageHusher.java
new file mode 100644
index 00000000000..a6ec8c9bc4b
--- /dev/null
+++ b/Mage.Sets/src/mage/sets/mediainserts/VoidmageHusher.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.mediainserts;
+
+import java.util.UUID;
+import mage.MageInt;
+import mage.abilities.Ability;
+import mage.abilities.common.EntersBattlefieldTriggeredAbility;
+import mage.abilities.common.SpellCastControllerTriggeredAbility;
+import mage.abilities.effects.common.CounterTargetEffect;
+import mage.abilities.effects.common.ReturnToHandSourceEffect;
+import mage.abilities.keyword.FlashAbility;
+import mage.cards.CardImpl;
+import mage.constants.CardType;
+import mage.constants.Rarity;
+import mage.target.common.TargetActivatedAbility;
+
+/**
+ *
+ * @author andyfries
+ */
+public class VoidmageHusher extends CardImpl {
+
+ public VoidmageHusher(UUID ownerId) {
+ super(ownerId, 62, "Voidmage Husher", Rarity.SPECIAL, new CardType[]{CardType.CREATURE}, "{3}{U}");
+ this.expansionSetCode = "MBP";
+ this.subtype.add("Human");
+ this.subtype.add("Wizard");
+ this.power = new MageInt(2);
+ this.toughness = new MageInt(2);
+
+ // Flash
+ this.addAbility(FlashAbility.getInstance());
+
+ // When Voidmage Husher enters the battlefield, counter target activated ability.
+ Ability ability = new EntersBattlefieldTriggeredAbility(new CounterTargetEffect());
+ ability.addTarget(new TargetActivatedAbility());
+ this.addAbility(ability);
+
+ // Whenever you cast a spell, you may return Voidmage Husher to its owner's hand.
+ this.addAbility(new SpellCastControllerTriggeredAbility(new ReturnToHandSourceEffect(true), true));
+ }
+
+ public VoidmageHusher(final VoidmageHusher card) {
+ super(card);
+ }
+
+ @Override
+ public VoidmageHusher copy() {
+ return new VoidmageHusher(this);
+ }
+}
\ No newline at end of file
diff --git a/Mage.Sets/src/mage/sets/mercadianmasques/CacklingWitch.java b/Mage.Sets/src/mage/sets/mercadianmasques/CacklingWitch.java
new file mode 100644
index 00000000000..93bc1c8ca47
--- /dev/null
+++ b/Mage.Sets/src/mage/sets/mercadianmasques/CacklingWitch.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.mercadianmasques;
+
+import java.util.UUID;
+import mage.MageInt;
+import mage.abilities.Ability;
+import mage.abilities.common.SimpleActivatedAbility;
+import mage.abilities.costs.common.DiscardCardCost;
+import mage.abilities.costs.common.TapSourceCost;
+import mage.abilities.costs.mana.ManaCostsImpl;
+import mage.abilities.dynamicvalue.common.ManacostVariableValue;
+import mage.abilities.dynamicvalue.common.StaticValue;
+import mage.abilities.effects.common.continuous.BoostTargetEffect;
+import mage.cards.CardImpl;
+import mage.constants.CardType;
+import mage.constants.Duration;
+import mage.constants.Rarity;
+import mage.constants.Zone;
+import mage.target.common.TargetCreaturePermanent;
+
+/**
+ *
+ * @author fireshoes
+ */
+public class CacklingWitch extends CardImpl {
+
+ public CacklingWitch(UUID ownerId) {
+ super(ownerId, 119, "Cackling Witch", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{1}{B}");
+ this.expansionSetCode = "MMQ";
+ this.subtype.add("Human");
+ this.subtype.add("Spellshaper");
+ this.power = new MageInt(1);
+ this.toughness = new MageInt(1);
+
+ // {X}{B}, {tap}, Discard a card: Target creature gets +X/+0 until end of turn.
+ ManacostVariableValue manaX = new ManacostVariableValue();
+ Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD,
+ new BoostTargetEffect(manaX, new StaticValue(0), Duration.EndOfTurn),
+ new ManaCostsImpl("{X}{B}"));
+ ability.addCost(new TapSourceCost());
+ ability.addCost(new DiscardCardCost());
+ ability.addTarget(new TargetCreaturePermanent());
+ this.addAbility(ability);
+ }
+
+ public CacklingWitch(final CacklingWitch card) {
+ super(card);
+ }
+
+ @Override
+ public CacklingWitch copy() {
+ return new CacklingWitch(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/sets/mirage/PoliticalTrickery.java b/Mage.Sets/src/mage/sets/mirage/PoliticalTrickery.java
new file mode 100644
index 00000000000..75727938267
--- /dev/null
+++ b/Mage.Sets/src/mage/sets/mirage/PoliticalTrickery.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.mirage;
+
+import java.util.UUID;
+
+import mage.abilities.effects.Effect;
+import mage.abilities.effects.common.continuous.ExchangeControlTargetEffect;
+import mage.cards.CardImpl;
+import mage.constants.CardType;
+import mage.constants.Duration;
+import mage.constants.Rarity;
+import mage.constants.TargetController;
+import mage.filter.common.FilterControlledLandPermanent;
+import mage.filter.common.FilterLandPermanent;
+import mage.filter.predicate.permanent.ControllerPredicate;
+import mage.target.TargetPermanent;
+import mage.target.common.TargetControlledPermanent;
+
+/**
+ *
+ * @author andyfries
+ */
+public class PoliticalTrickery extends CardImpl {
+
+ private static final String rule = "exchange control of target land you control and target land an opponent controls";
+
+ private static final FilterLandPermanent filter = new FilterLandPermanent("land an opponent controls");
+
+ static {
+ filter.add(new ControllerPredicate(TargetController.OPPONENT));
+ }
+
+ public PoliticalTrickery(UUID ownerId) {
+ super(ownerId, 81, "Political Trickery", Rarity.RARE, new CardType[]{CardType.SORCERY}, "{2}{U}");
+ this.expansionSetCode = "MIR";
+
+ // Exchange control of target land you control and target land an opponent controls.
+ Effect effect = new ExchangeControlTargetEffect(Duration.EndOfGame, rule, false, true);
+ effect.setText("exchange control of target land you control and target land an opponent controls");
+ this.getSpellAbility().addEffect(effect);
+ this.getSpellAbility().addTarget(new TargetControlledPermanent(new FilterControlledLandPermanent()));
+ this.getSpellAbility().addTarget(new TargetPermanent(filter));
+ }
+
+ public PoliticalTrickery(final PoliticalTrickery card) {
+ super(card);
+ }
+
+ @Override
+ public PoliticalTrickery copy() {
+ return new PoliticalTrickery(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/sets/morningtide/VioletPall.java b/Mage.Sets/src/mage/sets/morningtide/VioletPall.java
index 228a57579be..7b760e28e44 100644
--- a/Mage.Sets/src/mage/sets/morningtide/VioletPall.java
+++ b/Mage.Sets/src/mage/sets/morningtide/VioletPall.java
@@ -28,15 +28,18 @@
package mage.sets.morningtide;
import java.util.UUID;
+import mage.MageInt;
import mage.constants.CardType;
import mage.constants.Rarity;
import mage.ObjectColor;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.DestroyTargetEffect;
+import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.Predicates;
import mage.filter.predicate.mageobject.ColorPredicate;
+import mage.game.permanent.token.Token;
import mage.target.common.TargetCreaturePermanent;
/**
@@ -58,7 +61,7 @@ public class VioletPall extends CardImpl {
this.getSpellAbility().addEffect(new DestroyTargetEffect());
this.getSpellAbility().addTarget(new TargetCreaturePermanent(filter));
- this.getSpellAbility().addEffect(new CreateTokenEffect(new FaerieToken(), 1));
+ this.getSpellAbility().addEffect(new CreateTokenEffect(new VioletPallFaerieToken(), 1));
}
public VioletPall(final VioletPall card) {
@@ -70,3 +73,17 @@ public class VioletPall extends CardImpl {
return new VioletPall(this);
}
}
+
+class VioletPallFaerieToken extends Token {
+
+ VioletPallFaerieToken() {
+ super("Faerie Rogue", "1/1 black Faerie Rogue creature token with flying");
+ cardType.add(CardType.CREATURE);
+ color.setBlack(true);
+ subtype.add("Faerie");
+ subtype.add("Rogue");
+ power = new MageInt(1);
+ toughness = new MageInt(1);
+ this.addAbility(FlyingAbility.getInstance());
+ }
+}
diff --git a/Mage.Sets/src/mage/sets/planeshift/PollenRemedy.java b/Mage.Sets/src/mage/sets/planeshift/PollenRemedy.java
index 7e3d7d8b1b7..dd294e5e17c 100644
--- a/Mage.Sets/src/mage/sets/planeshift/PollenRemedy.java
+++ b/Mage.Sets/src/mage/sets/planeshift/PollenRemedy.java
@@ -41,8 +41,8 @@ import mage.constants.Duration;
import mage.constants.Rarity;
import mage.filter.common.FilterControlledLandPermanent;
import mage.game.Game;
-import mage.target.common.TargetCreatureOrPlayerAmount;
import mage.target.common.TargetControlledPermanent;
+import mage.target.common.TargetCreatureOrPlayerAmount;
/**
*
diff --git a/Mage.Sets/src/mage/sets/timespiral/VoidmageHusher.java b/Mage.Sets/src/mage/sets/timespiral/VoidmageHusher.java
new file mode 100644
index 00000000000..f74b44b3dcb
--- /dev/null
+++ b/Mage.Sets/src/mage/sets/timespiral/VoidmageHusher.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification, are
+ * permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this list of
+ * conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice, this list
+ * of conditions and the following disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * The views and conclusions contained in the software and documentation are those of the
+ * authors and should not be interpreted as representing official policies, either expressed
+ * or implied, of BetaSteward_at_googlemail.com.
+ */
+package mage.sets.timespiral;
+
+import java.util.UUID;
+import mage.constants.Rarity;
+
+/**
+ *
+ * @author andyfries
+ */
+public class VoidmageHusher extends mage.sets.mediainserts.VoidmageHusher {
+
+ public VoidmageHusher(UUID ownerId) {
+ super(ownerId);
+ this.cardNumber = 92;
+ this.expansionSetCode = "TSP";
+ this.rarity = Rarity.UNCOMMON;
+ }
+
+ public VoidmageHusher(final VoidmageHusher card) {
+ super(card);
+ }
+
+ @Override
+ public VoidmageHusher copy() {
+ return new VoidmageHusher(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/sets/urzassaga/LiltingRefrain.java b/Mage.Sets/src/mage/sets/urzassaga/LiltingRefrain.java
index cf8cf62f232..e4cfe2d3823 100644
--- a/Mage.Sets/src/mage/sets/urzassaga/LiltingRefrain.java
+++ b/Mage.Sets/src/mage/sets/urzassaga/LiltingRefrain.java
@@ -55,7 +55,7 @@ public class LiltingRefrain extends CardImpl {
// At the beginning of your upkeep, you may put a verse counter on Lilting Refrain.
this.addAbility(new BeginningOfUpkeepTriggeredAbility(new AddCountersSourceEffect(CounterType.VERSE.createInstance()), TargetController.YOU, true));
-
+
// Sacrifice Lilting Refrain: Counter target spell unless its controller pays {X}, where X is the number of verse counters on Lilting Refrain.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CounterUnlessPaysEffect(new CountersCount(CounterType.VERSE)), new SacrificeSourceCost());
ability.addTarget(new TargetSpell());
@@ -70,4 +70,4 @@ public class LiltingRefrain extends CardImpl {
public LiltingRefrain copy() {
return new LiltingRefrain(this);
}
-}
\ No newline at end of file
+}
diff --git a/Mage/src/mage/counters/CounterType.java b/Mage/src/mage/counters/CounterType.java
index 2f0aa49ad8d..4fa55678416 100644
--- a/Mage/src/mage/counters/CounterType.java
+++ b/Mage/src/mage/counters/CounterType.java
@@ -34,6 +34,7 @@ package mage.counters;
* @author nantuko
*/
public enum CounterType {
+
AGE("age"),
AIM("aim"),
ARROWHEAD("arrowhead"),
@@ -76,6 +77,7 @@ public enum CounterType {
POISON("poison"),
PRESSURE("pressure"),
QUEST("quest"),
+ SHIELD("shield"),
SLIME("slime"),
SPORE("spore"),
STORAGE("storage"),
@@ -84,6 +86,7 @@ public enum CounterType {
TIME("time"),
TOWER("tower"),
VELOCITY("velocity"),
+ VERSE("verse"),
VILE("vile"),
WISH("wish");
@@ -112,7 +115,8 @@ public enum CounterType {
}
/**
- * Create instance of counter type with defined amount of counters of the given type.
+ * Create instance of counter type with defined amount of counters of the
+ * given type.
*
* @param amount amount of counters of the given type.
* @return
@@ -129,4 +133,4 @@ public enum CounterType {
return new Counter(name, amount);
}
}
-}
\ No newline at end of file
+}
diff --git a/Utils/mtg-cards-data.txt b/Utils/mtg-cards-data.txt
index e6fcd5d3cb4..9c5ddb74ea1 100644
--- a/Utils/mtg-cards-data.txt
+++ b/Utils/mtg-cards-data.txt
@@ -27237,5 +27237,7 @@ Akroma, Angel of Fury|From the Vault: Angels|1|M|{5}{R}{R}{R}|Legendary Creature
Akroma, Angel of Wrath|From the Vault: Angels|2|M|{5}{W}{W}{W}|Legendary Creature - Angel|6|6|Flying, first strike, vigilance, trample, haste, protection from black and from red|
Avacyn, Angel of Hope|From the Vault: Angels|5|M|{5}{W}{W}{W}|Legendary Creature - Angel|8|8|Flying, vigilance$Avacyn, Angel of Hope and other permanents you control are indestructible.|
Iona, Shield of Emeria|From the Vault: Angels|9|M|{6}{W}{W}{W}|Legendary Creature - Angel|7|7|Flying$As Iona, Shield of Emeria enters the battlefield, choose a color.$Your opponents can't cast spells of the chosen color.|
+Serra Angel|From the Vault: Angels|14|M|{3}{W}{W}|Creature - Angel|4|4|Flying$Vigilance (Attacking doesn't cause this creature to tap.)|
+Tariel, Reckoner of Souls|From the Vault: Angels|15|M|{4}{W}{B}{R}|Legendary Creature - Angel|4|7|Flying, vigilance${tap}: Choose a creature card at random from target opponent's graveyard. Put that card onto the battlefield under your control.|
Oblivion Sower|Battle for Zendikar|999|M|{6}|Creature - Eldrazi|5|8|When you cast Oblivion Sower, target opponent exiles the top four cards of his or her library, then you may put any number of land cards that player owns from exile onto the battlefield under your control.|
Evolving Wilds|Battle for Zendikar|236|C||Land|||{T}, Sacrifice Evolving Wilds: Search your library for a basic land card and put it onto the battlefield tapped. Then shuffle your library.|
\ No newline at end of file