From 78188d6f24b3cef63b693085211cde8fbd21eb38 Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Mon, 22 Jun 2015 15:31:15 +0200 Subject: [PATCH 01/18] Removed dispay of card ID for looked at cards to prevent unfair use of card identity. --- Mage.Common/src/mage/view/LookedAtView.java | 2 +- .../src/test/java/org/mage/test/player/TestPlayer.java | 7 ++++++- Mage/src/mage/game/LookedAt.java | 7 ++++--- Mage/src/mage/players/Player.java | 2 ++ Mage/src/mage/players/PlayerImpl.java | 6 ++++++ 5 files changed, 19 insertions(+), 5 deletions(-) diff --git a/Mage.Common/src/mage/view/LookedAtView.java b/Mage.Common/src/mage/view/LookedAtView.java index db1759c0c08..a7485e7120f 100644 --- a/Mage.Common/src/mage/view/LookedAtView.java +++ b/Mage.Common/src/mage/view/LookedAtView.java @@ -46,7 +46,7 @@ public class LookedAtView implements Serializable { public LookedAtView(String name, Cards cards, Game game) { this.name = name; for (Card card: cards.getCards(game)) { - this.cards.put(card.getId(), new CardView(card, game, card.getId())); + this.cards.put(card.getId(), new SimpleCardView(card.getId(), card.getExpansionSetCode(), card.getCardNumber(), card.getUsesVariousArt(), card.getTokenSetCode())); } } diff --git a/Mage.Tests/src/test/java/org/mage/test/player/TestPlayer.java b/Mage.Tests/src/test/java/org/mage/test/player/TestPlayer.java index be7c65487a0..6de99aff263 100644 --- a/Mage.Tests/src/test/java/org/mage/test/player/TestPlayer.java +++ b/Mage.Tests/src/test/java/org/mage/test/player/TestPlayer.java @@ -1127,7 +1127,12 @@ public class TestPlayer implements Player { public void lookAtCards(String name, Cards cards, Game game) { computerPlayer.lookAtCards(name, cards, game); } - + + @Override + public void lookAtCards(String name, Card card, Game game) { + computerPlayer.lookAtCards(name, card, game); + } + @Override public void phasing(Game game) { computerPlayer.phasing(game); diff --git a/Mage/src/mage/game/LookedAt.java b/Mage/src/mage/game/LookedAt.java index 17b8af9b8ac..501cb34c70d 100644 --- a/Mage/src/mage/game/LookedAt.java +++ b/Mage/src/mage/game/LookedAt.java @@ -52,13 +52,14 @@ public class LookedAt extends HashMap implements Serializable, Co } } - public void add(String name, Card card) { - this.get(name).add(card); + public void add(String name, Card card) { + this.createLookedAt(name).add(card); } public void add(String name, Cards cards) { - if (!this.containsKey(name)) + if (!this.containsKey(name)) { createLookedAt(name); + } this.put(name, cards.copy()); } diff --git a/Mage/src/mage/players/Player.java b/Mage/src/mage/players/Player.java index c2f4a016acd..c369e8f045e 100644 --- a/Mage/src/mage/players/Player.java +++ b/Mage/src/mage/players/Player.java @@ -293,6 +293,7 @@ public interface Player extends MageItem, Copyable { void revealCards(String name, Cards cards, Game game); void revealCards(String name, Cards cards, Game game, boolean postToLog); + void lookAtCards(String name, Card card, Game game); void lookAtCards(String name, Cards cards, Game game); @Override @@ -488,6 +489,7 @@ public interface Player extends MageItem, Copyable { * @param sourceId * @param game * @param fromZone if null, this info isn't postet + * @param withName * @return */ boolean moveCardToExileWithInfo(Card card, UUID exileId, String exileName, UUID sourceId, Game game, Zone fromZone, boolean withName); diff --git a/Mage/src/mage/players/PlayerImpl.java b/Mage/src/mage/players/PlayerImpl.java index 65228de1e6b..fe29574f394 100644 --- a/Mage/src/mage/players/PlayerImpl.java +++ b/Mage/src/mage/players/PlayerImpl.java @@ -1332,6 +1332,12 @@ public abstract class PlayerImpl implements Player, Serializable { } } + @Override + public void lookAtCards(String name, Card card, Game game) { + game.getState().getLookedAt(this.playerId).add(name, card); + game.fireUpdatePlayersEvent(); + } + @Override public void lookAtCards(String name, Cards cards, Game game) { game.getState().getLookedAt(this.playerId).add(name, cards); From 6fa1f4c2e05bbb8c7a53156236300814a93afe95 Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Mon, 22 Jun 2015 15:32:00 +0200 Subject: [PATCH 02/18] Hideaway - Some minor fixes. --- .../sets/commander2013/MosswortBridge.java | 2 +- .../src/mage/sets/lorwyn/HowltoothHollow.java | 2 +- .../src/mage/sets/lorwyn/ShelldockIsle.java | 2 +- .../src/mage/sets/lorwyn/SpinerockKnoll.java | 2 +- .../mage/sets/lorwyn/WindbriskHeights.java | 2 +- .../effects/ReplacementEffectImpl.java | 1 - .../effects/common/HideawayPlayEffect.java | 4 +- .../abilities/keyword/HideawayAbility.java | 76 +++++++------------ 8 files changed, 35 insertions(+), 56 deletions(-) diff --git a/Mage.Sets/src/mage/sets/commander2013/MosswortBridge.java b/Mage.Sets/src/mage/sets/commander2013/MosswortBridge.java index 7b06549eec6..67a79cfed71 100644 --- a/Mage.Sets/src/mage/sets/commander2013/MosswortBridge.java +++ b/Mage.Sets/src/mage/sets/commander2013/MosswortBridge.java @@ -55,7 +55,7 @@ public class MosswortBridge extends CardImpl { this.expansionSetCode = "C13"; // Hideaway (This land enters the battlefield tapped. When it does, look at the top four cards of your library, exile one face down, then put the rest on the bottom of your library.) - this.addAbility(new HideawayAbility(this)); + this.addAbility(new HideawayAbility()); // {tap}: Add {G} to your mana pool. this.addAbility(new GreenManaAbility()); diff --git a/Mage.Sets/src/mage/sets/lorwyn/HowltoothHollow.java b/Mage.Sets/src/mage/sets/lorwyn/HowltoothHollow.java index 94b1f779edf..81a296af4c7 100644 --- a/Mage.Sets/src/mage/sets/lorwyn/HowltoothHollow.java +++ b/Mage.Sets/src/mage/sets/lorwyn/HowltoothHollow.java @@ -53,7 +53,7 @@ public class HowltoothHollow extends CardImpl { this.expansionSetCode = "LRW"; // Hideaway - this.addAbility(new HideawayAbility(this)); + this.addAbility(new HideawayAbility()); // {tap}: Add {B} to your mana pool. this.addAbility(new BlackManaAbility()); diff --git a/Mage.Sets/src/mage/sets/lorwyn/ShelldockIsle.java b/Mage.Sets/src/mage/sets/lorwyn/ShelldockIsle.java index cb3936fecaf..38128358b29 100644 --- a/Mage.Sets/src/mage/sets/lorwyn/ShelldockIsle.java +++ b/Mage.Sets/src/mage/sets/lorwyn/ShelldockIsle.java @@ -53,7 +53,7 @@ public class ShelldockIsle extends CardImpl { this.expansionSetCode = "LRW"; // Hideaway - this.addAbility(new HideawayAbility(this)); + this.addAbility(new HideawayAbility()); // {tap}: Add {U} to your mana pool. this.addAbility(new BlueManaAbility()); // {U}, {tap}: You may play the exiled card without paying its mana cost if a library has twenty or fewer cards in it. diff --git a/Mage.Sets/src/mage/sets/lorwyn/SpinerockKnoll.java b/Mage.Sets/src/mage/sets/lorwyn/SpinerockKnoll.java index b4579162792..f7a2d919754 100644 --- a/Mage.Sets/src/mage/sets/lorwyn/SpinerockKnoll.java +++ b/Mage.Sets/src/mage/sets/lorwyn/SpinerockKnoll.java @@ -61,7 +61,7 @@ public class SpinerockKnoll extends CardImpl { this.expansionSetCode = "LRW"; // Hideaway - this.addAbility(new HideawayAbility(this)); + this.addAbility(new HideawayAbility()); // {tap}: Add {R} to your mana pool. this.addAbility(new RedManaAbility()); diff --git a/Mage.Sets/src/mage/sets/lorwyn/WindbriskHeights.java b/Mage.Sets/src/mage/sets/lorwyn/WindbriskHeights.java index da4e1a83b5a..3fa54c32957 100644 --- a/Mage.Sets/src/mage/sets/lorwyn/WindbriskHeights.java +++ b/Mage.Sets/src/mage/sets/lorwyn/WindbriskHeights.java @@ -54,7 +54,7 @@ public class WindbriskHeights extends CardImpl { this.expansionSetCode = "LRW"; // Hideaway (This land enters the battlefield tapped. When it does, look at the top four cards of your library, exile one face down, then put the rest on the bottom of your library.) - this.addAbility(new HideawayAbility(this)); + this.addAbility(new HideawayAbility()); // {tap}: Add {W} to your mana pool. this.addAbility(new WhiteManaAbility()); // {W}, {tap}: You may play the exiled card without paying its mana cost if you attacked with three or more creatures this turn. diff --git a/Mage/src/mage/abilities/effects/ReplacementEffectImpl.java b/Mage/src/mage/abilities/effects/ReplacementEffectImpl.java index 48b96a68bee..a0c22083815 100644 --- a/Mage/src/mage/abilities/effects/ReplacementEffectImpl.java +++ b/Mage/src/mage/abilities/effects/ReplacementEffectImpl.java @@ -33,7 +33,6 @@ import mage.constants.Duration; import mage.constants.EffectType; import mage.constants.Outcome; import mage.game.Game; -import mage.game.events.GameEvent; /** * diff --git a/Mage/src/mage/abilities/effects/common/HideawayPlayEffect.java b/Mage/src/mage/abilities/effects/common/HideawayPlayEffect.java index 039ce418f73..63358fb60ca 100644 --- a/Mage/src/mage/abilities/effects/common/HideawayPlayEffect.java +++ b/Mage/src/mage/abilities/effects/common/HideawayPlayEffect.java @@ -70,7 +70,7 @@ public class HideawayPlayEffect extends OneShotEffect { if (card.getCardType().contains(CardType.LAND)) { // If the revealed card is a land, you can play it only if it's your turn and you haven't yet played a land this turn. if (game.getActivePlayerId().equals(source.getControllerId()) && controller.canPlayLand()) { - if (controller.chooseUse(Outcome.Benefit, new StringBuilder("Play ").append(card.getName()).append(" from Exile?").toString(), game)) { + if (controller.chooseUse(Outcome.Benefit, "Play " + card.getLogName() + " from Exile?", game)) { card.setFaceDown(false, game); return controller.playLand(card, game); } @@ -82,7 +82,7 @@ public class HideawayPlayEffect extends OneShotEffect { // The land's last ability allows you to play the removed card as part of the resolution of that ability. // Timing restrictions based on the card's type are ignored (for instance, if it's a creature or sorcery). // Other play restrictions are not (such as "Play [this card] only during combat"). - if (controller.chooseUse(Outcome.Benefit, new StringBuilder("Cast ").append(card.getName()).append(" without paying it's mana cost?").toString(), game)) { + if (controller.chooseUse(Outcome.Benefit, "Cast "+ card.getLogName() + " without paying it's mana cost?", game)) { card.setFaceDown(false, game); return controller.cast(card.getSpellAbility(), game, true); } diff --git a/Mage/src/mage/abilities/keyword/HideawayAbility.java b/Mage/src/mage/abilities/keyword/HideawayAbility.java index b59172bccf0..124e7eec056 100644 --- a/Mage/src/mage/abilities/keyword/HideawayAbility.java +++ b/Mage/src/mage/abilities/keyword/HideawayAbility.java @@ -64,7 +64,7 @@ import mage.util.CardUtil; */ public class HideawayAbility extends StaticAbility { - public HideawayAbility(Card card) { + public HideawayAbility() { super(Zone.BATTLEFIELD, new EntersBattlefieldEffect(new TapSourceEffect(true))); Ability ability = new EntersBattlefieldTriggeredAbility(new HideawayExileEffect(), false); ability.setRuleVisible(false); @@ -93,7 +93,6 @@ public class HideawayAbility extends StaticAbility { class HideawayExileEffect extends OneShotEffect { private static FilterCard filter1 = new FilterCard("card to exile face down"); - private static FilterCard filter2 = new FilterCard("card to put on the bottom of your library"); public HideawayExileEffect() { super(Outcome.Benefit); @@ -111,46 +110,26 @@ class HideawayExileEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { - Player player = game.getPlayer(source.getControllerId()); - Cards cards = new CardsImpl(Zone.PICK); - int count = Math.min(player.getLibrary().size(), 4); - for (int i = 0; i < count; i++) { - Card card = player.getLibrary().removeFromTop(game); - cards.add(card); - game.setZone(card.getId(), Zone.PICK); - } - + Player controller = game.getPlayer(source.getControllerId()); Permanent hideawaySource = game.getPermanent(source.getSourceId()); - if (cards.size() == 0 || hideawaySource == null) { + if (hideawaySource == null || controller == null) { return false; } - - TargetCard target1 = new TargetCard(Zone.PICK, filter1); - if (player.choose(Outcome.Detriment, cards, target1, game)) { - Card card = cards.get(target1.getFirstTarget(), game); - if (card != null) { - cards.remove(card); - card.moveToExile(CardUtil.getCardExileZoneId(game, source), - new StringBuilder("Hideaway (").append(hideawaySource.getName()).append(")").toString(), - source.getSourceId(), game); - card.setFaceDown(true, game); - } - target1.clearChosen(); - } - + + Cards cards = new CardsImpl(Zone.LIBRARY); + cards.addAll(controller.getLibrary().getTopCards(game, 4)); if (cards.size() > 0) { - TargetCard target2 = new TargetCard(Zone.PICK, filter2); - while (player.isInGame() && cards.size() > 1) { - player.choose(Outcome.Benefit, cards, target2, game); - Card card = cards.get(target2.getFirstTarget(), game); + TargetCard target1 = new TargetCard(Zone.LIBRARY, filter1); + if (controller.choose(Outcome.Detriment, cards, target1, game)) { + Card card = cards.get(target1.getFirstTarget(), game); if (card != null) { cards.remove(card); - card.moveToZone(Zone.LIBRARY, source.getSourceId(), game, false); + controller.moveCardToExileWithInfo(card, CardUtil.getCardExileZoneId(game, source), + "Hideaway (" + hideawaySource.getIdName() +")", source.getSourceId(), game, Zone.LIBRARY, false); + card.setFaceDown(true, game); } - target2.clearChosen(); } - Card card = cards.get(cards.iterator().next(), game); - card.moveToZone(Zone.LIBRARY, source.getSourceId(), game, false); + controller.putCardsOnBottomOfLibrary(cards, game, source, true); } return true; @@ -179,24 +158,25 @@ class HideawayLookAtFaceDownCardEffect extends AsThoughEffectImpl { } @Override - public boolean applies(UUID sourceId, Ability source, UUID affectedControllerId, Game game) { - Card card = game.getCard(sourceId); - if (card != null && game.getState().getZone(sourceId) == Zone.EXILED) { - Card sourceCard = game.getCard(source.getSourceId()); - if (sourceCard == null) { - return false; - } - + public boolean applies(UUID objectId, Ability source, UUID affectedControllerId, Game game) { + if (game.getState().getZone(objectId) != Zone.EXILED + || !game.getState().getCardState(objectId).isFaceDown()) { + return false; + } + // TODO: Does not handle if a player had the control of the land permanent some time before + // we would need to add a watcher to handle this + Permanent sourcePermanet = game.getPermanentOrLKIBattlefield(source.getSourceId()); + if (sourcePermanet != null && sourcePermanet.getControllerId().equals(affectedControllerId)) { ExileZone exile = game.getExile().getExileZone(CardUtil.getCardExileZoneId(game, source)); - if (exile != null && exile.contains(sourceId)) { - Cards cards = new CardsImpl(card); - Player controller = game.getPlayer(source.getControllerId()); - if (controller != null) { - // only the controller can see the card, so return always false - controller.lookAtCards("Exiled with " + sourceCard.getName(), cards, game); + Card card = game.getCard(objectId); + if (exile != null && exile.contains(objectId) && card != null) { + Player player = game.getPlayer(affectedControllerId); + if (player != null) { + player.lookAtCards("Hideaway by " + sourcePermanet.getIdName(), card, game); } } } + // only the current or a previous controller can see the card, so always return false for reveal request return false; } } From ebeec78c7fcbf855ee85241bbccffe07fa2341be Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Mon, 22 Jun 2015 15:32:14 +0200 Subject: [PATCH 03/18] Added some tests. --- .../sets/magic2015/GoblinRabblemaster.java | 1 - .../requirement/AttackRequirementTest.java | 91 +++++++++++++++++++ 2 files changed, 91 insertions(+), 1 deletion(-) create mode 100644 Mage.Tests/src/test/java/org/mage/test/cards/requirement/AttackRequirementTest.java diff --git a/Mage.Sets/src/mage/sets/magic2015/GoblinRabblemaster.java b/Mage.Sets/src/mage/sets/magic2015/GoblinRabblemaster.java index 98442e2a751..9d23e6719af 100644 --- a/Mage.Sets/src/mage/sets/magic2015/GoblinRabblemaster.java +++ b/Mage.Sets/src/mage/sets/magic2015/GoblinRabblemaster.java @@ -46,7 +46,6 @@ import mage.constants.Rarity; import mage.constants.TargetController; import mage.constants.Zone; import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.SubtypePredicate; import mage.filter.predicate.permanent.AnotherPredicate; import mage.filter.predicate.permanent.AttackingPredicate; import mage.filter.predicate.permanent.ControllerPredicate; diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/requirement/AttackRequirementTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/requirement/AttackRequirementTest.java new file mode 100644 index 00000000000..6fcfd8a4435 --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/cards/requirement/AttackRequirementTest.java @@ -0,0 +1,91 @@ +/* + * 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 org.mage.test.cards.requirement; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX2 + */ + +public class AttackRequirementTest extends CardTestPlayerBase { + + + @Test + public void testSimpleAttackRequirement() { + // Defender + // {G}: Wall of Tanglecord gains reach until end of turn. (It can block creatures with flying.) + addCard(Zone.BATTLEFIELD, playerA, "Wall of Tanglecord"); // 0/6 + + // Juggernaut attacks each turn if able. + // Juggernaut can't be blocked by Walls + addCard(Zone.BATTLEFIELD, playerB, "Juggernaut"); // 5/3 + + // Juggernaut should be forced to ttack + block(2, playerA, "Wall of Tanglecord", "Juggernaut"); // this block should'nt work because of Juggernauts restriction + + setStopAt(2, PhaseStep.POSTCOMBAT_MAIN); + execute(); + + assertLife(playerA, 15); + assertLife(playerB, 20); + + } + + + @Test + public void testAttackRequirementWithAttackRestriction() { + addCard(Zone.BATTLEFIELD, playerA, "Plains", 3); + // Defender + // {G}: Wall of Tanglecord gains reach until end of turn. (It can block creatures with flying.) + addCard(Zone.BATTLEFIELD, playerA, "Wall of Tanglecord"); // 0/6 + + // Creatures can't attack you unless their controller pays {2} for each creature he or she controls that's attacking you + addCard(Zone.HAND, playerA, "Ghostly Prison"); + + // Juggernaut attacks each turn if able. + // Juggernaut can't be blocked by Walls + addCard(Zone.BATTLEFIELD, playerB, "Juggernaut"); // 5/3 + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Ghostly Prison"); + + // Juggernaut is forced to attack but can't without paying the Ghostly Prison cost and don't has to pay the costs so no attack + + setStopAt(2, PhaseStep.POSTCOMBAT_MAIN); + execute(); + + assertLife(playerA, 20); + assertLife(playerB, 20); + + } + +} From 314681837414ffb25fb2c782ab8b705dc444f5e3 Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Mon, 22 Jun 2015 19:32:07 +0200 Subject: [PATCH 04/18] * Fixed possible null pointer exception of ReturnToLibrarySpellEffect.. --- .../effects/common/ReturnToLibrarySpellEffect.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/Mage/src/mage/abilities/effects/common/ReturnToLibrarySpellEffect.java b/Mage/src/mage/abilities/effects/common/ReturnToLibrarySpellEffect.java index 35e32920238..bc8af09cfe3 100644 --- a/Mage/src/mage/abilities/effects/common/ReturnToLibrarySpellEffect.java +++ b/Mage/src/mage/abilities/effects/common/ReturnToLibrarySpellEffect.java @@ -33,6 +33,7 @@ import mage.cards.Card; import mage.constants.Outcome; import mage.constants.Zone; import mage.game.Game; +import mage.game.stack.Spell; import mage.players.Player; /** @@ -58,9 +59,12 @@ public class ReturnToLibrarySpellEffect extends OneShotEffect { public boolean apply(Game game, Ability source) { Player controller = game.getPlayer(source.getControllerId()); if (controller != null) { - Card spellCard = game.getStack().getSpell(source.getSourceId()).getCard(); - if (spellCard != null) { - controller.moveCardToLibraryWithInfo(spellCard, source.getSourceId(), game, Zone.STACK, toTop, true); + Spell spell = game.getStack().getSpell(source.getSourceId()); + if (spell != null) { + Card spellCard = game.getStack().getSpell(source.getSourceId()).getCard(); + if (spellCard != null) { + controller.moveCardToLibraryWithInfo(spellCard, source.getSourceId(), game, Zone.STACK, toTop, true); + } } return true; } From bcd81309e981c5c717551de4b3ee57e2dd6e9fff Mon Sep 17 00:00:00 2001 From: emerald000 Date: Mon, 22 Jun 2015 14:21:29 -0400 Subject: [PATCH 05/18] Added Dwynen Gilt-Leaf Daen and Elemental Bond. --- .../sets/magicorigins/DwynenGiltLeafDaen.java | 85 +++++++++++++++++++ .../mage/sets/magicorigins/ElementalBond.java | 68 +++++++++++++++ 2 files changed, 153 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/magicorigins/DwynenGiltLeafDaen.java create mode 100644 Mage.Sets/src/mage/sets/magicorigins/ElementalBond.java diff --git a/Mage.Sets/src/mage/sets/magicorigins/DwynenGiltLeafDaen.java b/Mage.Sets/src/mage/sets/magicorigins/DwynenGiltLeafDaen.java new file mode 100644 index 00000000000..6dbf311ecec --- /dev/null +++ b/Mage.Sets/src/mage/sets/magicorigins/DwynenGiltLeafDaen.java @@ -0,0 +1,85 @@ +/* + * 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.magicorigins; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.AttacksTriggeredAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount; +import mage.abilities.effects.common.GainLifeEffect; +import mage.abilities.effects.common.continuous.BoostControlledEffect; +import mage.abilities.keyword.ReachAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.permanent.AttackingPredicate; + +/** + * + * @author emerald000 + */ +public class DwynenGiltLeafDaen extends CardImpl { + + private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("Elf", "attacking Elf you control"); + static { + filter.add(new AttackingPredicate()); + } + + public DwynenGiltLeafDaen(UUID ownerId) { + super(ownerId, 172, "Dwynen, Gilt-Leaf Daen", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{2}{G}{G}"); + this.expansionSetCode = "ORI"; + this.supertype.add("Legendary"); + this.subtype.add("Elf"); + this.subtype.add("Warrior"); + this.power = new MageInt(3); + this.toughness = new MageInt(4); + + // Reach + this.addAbility(ReachAbility.getInstance()); + + // Other Elf creatures you control get +1/+1. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostControlledEffect(1, 1, Duration.WhileOnBattlefield, new FilterCreaturePermanent("Elf", "Elf creatures"), true))); + + // Whenever Dwynen, Gilt-Leaf Daen attacks, you gain 1 life for each attacking Elf you control. + this.addAbility(new AttacksTriggeredAbility(new GainLifeEffect(new PermanentsOnBattlefieldCount(filter)), false)); + } + + public DwynenGiltLeafDaen(final DwynenGiltLeafDaen card) { + super(card); + } + + @Override + public DwynenGiltLeafDaen copy() { + return new DwynenGiltLeafDaen(this); + } +} diff --git a/Mage.Sets/src/mage/sets/magicorigins/ElementalBond.java b/Mage.Sets/src/mage/sets/magicorigins/ElementalBond.java new file mode 100644 index 00000000000..4c0b67a0c3f --- /dev/null +++ b/Mage.Sets/src/mage/sets/magicorigins/ElementalBond.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.magicorigins; + +import java.util.UUID; +import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.filter.Filter.ComparisonType; +import mage.filter.FilterPermanent; +import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.predicate.mageobject.PowerPredicate; + +/** + * + * @author emerald000 + */ +public class ElementalBond extends CardImpl { + + private static final FilterPermanent filter = new FilterControlledCreaturePermanent("creature with power 3 or greater"); + static { + filter.add(new PowerPredicate(ComparisonType.GreaterThan, 2)); + } + + public ElementalBond(UUID ownerId) { + super(ownerId, 174, "Elemental Bond", Rarity.UNCOMMON, new CardType[]{CardType.ENCHANTMENT}, "{2}{G}"); + this.expansionSetCode = "ORI"; + + // Whenever a creature with power 3 or greater enters the battlefield under your control, draw a card. + this.addAbility(new EntersBattlefieldControlledTriggeredAbility(new DrawCardSourceControllerEffect(1), filter)); + } + + public ElementalBond(final ElementalBond card) { + super(card); + } + + @Override + public ElementalBond copy() { + return new ElementalBond(this); + } +} From 259ef3aed563e168c812056098113eaf937bdaf0 Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Mon, 22 Jun 2015 21:02:07 +0200 Subject: [PATCH 06/18] * Kicker - Fixed that multikicker activation number was not reset after canceled cast. --- Mage/src/mage/abilities/keyword/KickerAbility.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Mage/src/mage/abilities/keyword/KickerAbility.java b/Mage/src/mage/abilities/keyword/KickerAbility.java index 6828e26a060..ada8a8248fc 100644 --- a/Mage/src/mage/abilities/keyword/KickerAbility.java +++ b/Mage/src/mage/abilities/keyword/KickerAbility.java @@ -141,7 +141,9 @@ public class KickerAbility extends StaticAbility implements OptionalAdditionalSo return kickerCost; } - public void resetKicker() { + public void resetKicker(Game game, Ability source) { + String key = getActivationKey(source, "", game); + activations.remove(key); for (OptionalAdditionalCost cost: kickerCosts) { cost.reset(); } @@ -196,13 +198,13 @@ public class KickerAbility extends StaticAbility implements OptionalAdditionalSo if (ability instanceof SpellAbility) { Player player = game.getPlayer(controllerId); if (player != null) { - this.resetKicker(); + this.resetKicker(game, ability); for (OptionalAdditionalCost kickerCost: kickerCosts) { boolean again = true; while (player.isInGame() && again) { String times = ""; if (kickerCost.isRepeatable()) { - int activatedCount = kickerCost.getActivateCount(); + int activatedCount = getKickedCounter(game, ability); times = Integer.toString(activatedCount + 1) + (activatedCount == 0 ? " time ":" times "); } if (kickerCost.canPay(ability, sourceId, controllerId, game) && From 67e9ee1fa91ed240b0d9a845d921e3281e5dc190 Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Tue, 23 Jun 2015 00:46:27 +0200 Subject: [PATCH 07/18] * Changed graveyard window handling to a window that can stay open. --- .../main/java/mage/client/cards/Cards.java | 27 ++++-- .../components/ext/dlg/DialogManager.java | 2 +- .../client/dialog/CardInfoWindowDialog.form | 2 +- .../client/dialog/CardInfoWindowDialog.java | 93 ++++++++----------- .../main/java/mage/client/game/GamePanel.java | 36 +++++++ .../java/mage/client/game/HelperPanel.java | 2 +- .../java/mage/client/game/PlayerPanelExt.java | 39 +++++--- 7 files changed, 120 insertions(+), 81 deletions(-) diff --git a/Mage.Client/src/main/java/mage/client/cards/Cards.java b/Mage.Client/src/main/java/mage/client/cards/Cards.java index 3360df11601..c6ee605bbb8 100644 --- a/Mage.Client/src/main/java/mage/client/cards/Cards.java +++ b/Mage.Client/src/main/java/mage/client/cards/Cards.java @@ -34,20 +34,31 @@ package mage.client.cards; +import java.awt.Color; +import java.awt.Component; +import java.awt.Dimension; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Map.Entry; +import java.util.UUID; +import javax.swing.border.Border; +import javax.swing.border.EmptyBorder; import mage.cards.MageCard; import mage.client.plugins.impl.Plugins; import mage.client.util.CardsViewUtil; import mage.client.util.Config; -import mage.view.*; +import mage.view.CardView; +import mage.view.CardsView; +import mage.view.PermanentView; +import mage.view.SimpleCardsView; +import mage.view.StackAbilityView; import org.apache.log4j.Logger; import org.mage.card.arcane.CardPanel; -import javax.swing.border.Border; -import javax.swing.border.EmptyBorder; -import java.awt.*; -import java.util.*; -import java.util.Map.Entry; - /** * * @author BetaSteward_at_googlemail.com @@ -58,7 +69,7 @@ public class Cards extends javax.swing.JPanel { private final Map cards = new LinkedHashMap<>(); private boolean dontDisplayTapped = false; - private static final int GAP_X = 5; + private static final int GAP_X = 0; private String zone; private static final Border emptyBorder = new EmptyBorder(0,0,0,0); diff --git a/Mage.Client/src/main/java/mage/client/components/ext/dlg/DialogManager.java b/Mage.Client/src/main/java/mage/client/components/ext/dlg/DialogManager.java index 66db7ad4c36..2c9dc93239f 100644 --- a/Mage.Client/src/main/java/mage/client/components/ext/dlg/DialogManager.java +++ b/Mage.Client/src/main/java/mage/client/components/ext/dlg/DialogManager.java @@ -20,7 +20,7 @@ import java.util.UUID; public class DialogManager extends JComponent implements MouseListener, MouseMotionListener { - private final static Map dialogManagers = new HashMap(); + private final static Map dialogManagers = new HashMap<>(); public static DialogManager getManager(UUID gameId) { if (!dialogManagers.containsKey(gameId)) { diff --git a/Mage.Client/src/main/java/mage/client/dialog/CardInfoWindowDialog.form b/Mage.Client/src/main/java/mage/client/dialog/CardInfoWindowDialog.form index df7949b8fcf..caf3d657505 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/CardInfoWindowDialog.form +++ b/Mage.Client/src/main/java/mage/client/dialog/CardInfoWindowDialog.form @@ -23,7 +23,7 @@ - + diff --git a/Mage.Client/src/main/java/mage/client/dialog/CardInfoWindowDialog.java b/Mage.Client/src/main/java/mage/client/dialog/CardInfoWindowDialog.java index 67e8fa74018..18d3cbdc590 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/CardInfoWindowDialog.java +++ b/Mage.Client/src/main/java/mage/client/dialog/CardInfoWindowDialog.java @@ -34,16 +34,19 @@ package mage.client.dialog; +import static com.sun.java.accessibility.util.AWTEventMonitor.addWindowListener; import java.awt.Point; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; import java.beans.PropertyVetoException; import java.util.UUID; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.ImageIcon; import javax.swing.SwingUtilities; -import static javax.swing.WindowConstants.DISPOSE_ON_CLOSE; import mage.client.cards.BigCard; import mage.client.util.Config; +import mage.client.util.ImageHelper; import mage.client.util.SettingsManager; import mage.client.util.gui.GuiDisplayUtil; import mage.view.CardsView; @@ -57,17 +60,19 @@ import org.mage.plugins.card.utils.impl.ImageManagerImpl; */ public class CardInfoWindowDialog extends MageDialog { - public static enum ShowType { REVEAL, LOOKED_AT, EXILE, OTHER }; + public static enum ShowType { REVEAL, LOOKED_AT, EXILE, GRAVEYARD, OTHER }; private ShowType showType; private boolean positioned; + private String name; public CardInfoWindowDialog(ShowType showType, String name) { + this.name = name; this.title = name; this.showType = showType; this.positioned = false; - this.setDefaultCloseOperation(DISPOSE_ON_CLOSE); initComponents(); + this.setModal(false); switch(this.showType) { case LOOKED_AT: @@ -78,6 +83,18 @@ public class CardInfoWindowDialog extends MageDialog { this.setFrameIcon(new ImageIcon(ImageManagerImpl.getInstance().getRevealedImage())); this.setClosable(true); break; + case GRAVEYARD: + this.setFrameIcon(new ImageIcon(ImageHelper.getImageFromResources("/info/grave.png"))); + this.setIconifiable(false); + this.setClosable(true); + this.setDefaultCloseOperation(HIDE_ON_CLOSE); + addWindowListener(new WindowAdapter() { + @Override + public void windowClosing(WindowEvent e) { + CardInfoWindowDialog.this.hideDialog(); + } + }); + break; case EXILE: this.setFrameIcon(new ImageIcon(ImageManagerImpl.getInstance().getExileImage())); break; @@ -92,72 +109,38 @@ public class CardInfoWindowDialog extends MageDialog { } public void loadCards(SimpleCardsView showCards, BigCard bigCard, UUID gameId) { - - boolean changed = cards.loadCards(showCards, bigCard, gameId); - if (showCards.size() > 0) { - show(); - if (changed) { - try { - if (!positioned) { - this.setIcon(false); - firstWindowPosition(); - } - } catch (PropertyVetoException ex) { - Logger.getLogger(CardInfoWindowDialog.class.getName()).log(Level.SEVERE, null, ex); - } - } - } - else { - this.hideDialog(); - } + cards.loadCards(showCards, bigCard, gameId); + showAndPositionWindow(); } public void loadCards(CardsView showCards, BigCard bigCard, UUID gameId) { - boolean changed = cards.loadCards(showCards, bigCard, gameId, null); - - if (showCards.size() > 0) { - show(); - if (changed) { - try { - if (!positioned) { - this.setIcon(false); - firstWindowPosition(); - } else { - - } - } catch (PropertyVetoException ex) { - Logger.getLogger(CardInfoWindowDialog.class.getName()).log(Level.SEVERE, null, ex); - } - } - + cards.loadCards(showCards, bigCard, gameId, null); + if (showType.equals(ShowType.GRAVEYARD)) { + setTitle(name + "'s Graveyard (" + showCards.size() + ")"); + this.setTitelBarToolTip(name); } - else { - this.hideDialog(); - } + showAndPositionWindow(); } - private void firstWindowPosition() { + private void showAndPositionWindow() { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { - if (!positioned) { - int width = CardInfoWindowDialog.this.getWidth(); - int height = CardInfoWindowDialog.this.getHeight(); - if (width > 0 && height > 0) { + int width = CardInfoWindowDialog.this.getWidth(); + int height = CardInfoWindowDialog.this.getHeight(); + if (width > 0 && height > 0) { + Point centered = SettingsManager.getInstance().getComponentPosition(width, height); + if (!positioned) { positioned = true; - Point centered = SettingsManager.getInstance().getComponentPosition(width, height); int xPos = centered.x / 2; int yPos = centered.y / 2; CardInfoWindowDialog.this.setLocation(xPos, yPos); - GuiDisplayUtil.keepComponentInsideScreen(centered.x, centered.y, CardInfoWindowDialog.this); - CardInfoWindowDialog.this.show(); - } + show(); + } + GuiDisplayUtil.keepComponentInsideScreen(centered.x, centered.y, CardInfoWindowDialog.this); } - - - // ShowCardsDialog.this.setVisible(true); } - }); + }); } public void loadCards(ExileView exile, BigCard bigCard, UUID gameId) { @@ -197,7 +180,7 @@ public class CardInfoWindowDialog extends MageDialog { getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(cards, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 418, Short.MAX_VALUE) + .addComponent(cards, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 239, Short.MAX_VALUE) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) diff --git a/Mage.Client/src/main/java/mage/client/game/GamePanel.java b/Mage.Client/src/main/java/mage/client/game/GamePanel.java index 6837a7ed6e0..43af41bc1d7 100644 --- a/Mage.Client/src/main/java/mage/client/game/GamePanel.java +++ b/Mage.Client/src/main/java/mage/client/game/GamePanel.java @@ -148,6 +148,8 @@ public final class GamePanel extends javax.swing.JPanel { private final Map exiles = new HashMap<>(); private final Map revealed = new HashMap<>(); private final Map lookedAt = new HashMap<>(); + private final Map graveyardWindows = new HashMap<>(); + private final Map graveyards = new HashMap<>(); private final ArrayList pickTarget = new ArrayList<>(); private UUID gameId; private UUID playerId; // playerId of the player @@ -261,6 +263,10 @@ public final class GamePanel extends javax.swing.JPanel { exileDialog.cleanUp(); exileDialog.removeDialog(); } + for (CardInfoWindowDialog graveyardDialog: graveyardWindows.values()) { + graveyardDialog.cleanUp(); + graveyardDialog.removeDialog(); + } for (CardInfoWindowDialog revealDialog: revealed.values()) { revealDialog.cleanUp(); revealDialog.removeDialog(); @@ -650,6 +656,17 @@ public final class GamePanel extends javax.swing.JPanel { if (player.getPlayerId().equals(playerId)) { updateSkipButtons(player.isPassedTurn(), player.isPassedUntilEndOfTurn(), player.isPassedUntilNextMain(), player.isPassedAllTurns(), player.isPassedUntilStackResolved()); } + // update open or remove closed graveyard windows + + graveyards.put(player.getName(), player.getGraveyard()); + if (graveyardWindows.containsKey(player.getName())) { + CardInfoWindowDialog cardInfoWindowDialog = graveyardWindows.get(player.getName()); + if (cardInfoWindowDialog.isClosed()) { + graveyardWindows.remove(player.getName()); + } else { + cardInfoWindowDialog.loadCards(player.getGraveyard(), bigCard, gameId); + } + } } else { logger.warn("Couldn't find player."); logger.warn(" uuid:" + player.getPlayerId()); @@ -691,6 +708,7 @@ public final class GamePanel extends javax.swing.JPanel { } exiles.get(exile.getId()).loadCards(exile, bigCard, gameId); } + showRevealed(game); showLookedAt(game); if (game.getCombat().size() > 0) { @@ -808,6 +826,24 @@ public final class GamePanel extends javax.swing.JPanel { } } + public void openGraveyardWindow(String playerName) { + if(graveyardWindows.containsKey(playerName)) { + CardInfoWindowDialog cardInfoWindowDialog = graveyardWindows.get(playerName); + if (cardInfoWindowDialog.isVisible()) { + cardInfoWindowDialog.hideDialog(); + } else { + cardInfoWindowDialog.show(); + } +// if (!cardInfoWindowDialog.isClosed()) { + return; +// } + } + CardInfoWindowDialog newGraveyard = new CardInfoWindowDialog(ShowType.GRAVEYARD, playerName); + graveyardWindows.put(playerName, newGraveyard); + MageFrame.getDesktop().add(newGraveyard, JLayeredPane.MODAL_LAYER); + newGraveyard.loadCards(graveyards.get(playerName), bigCard, gameId); + } + private void showRevealed(GameView game) { for (RevealedView revealView: game.getRevealed()) { handleGameInfoWindow(revealed, ShowType.REVEAL, revealView.getName(), revealView.getCards()); diff --git a/Mage.Client/src/main/java/mage/client/game/HelperPanel.java b/Mage.Client/src/main/java/mage/client/game/HelperPanel.java index 5f325d1f98b..602e94b6b1a 100644 --- a/Mage.Client/src/main/java/mage/client/game/HelperPanel.java +++ b/Mage.Client/src/main/java/mage/client/game/HelperPanel.java @@ -226,7 +226,7 @@ public class HelperPanel extends JPanel { if (message.length() < this.getWidth() / 10) { message = getSmallText(message); } else { - message = "Use ability?" + getSmallText(message.substring(this.getWidth() / 10)); + message = "Use ability?" + getSmallText(message.substring(0, this.getWidth() / 10)); } } textArea.setText(message); diff --git a/Mage.Client/src/main/java/mage/client/game/PlayerPanelExt.java b/Mage.Client/src/main/java/mage/client/game/PlayerPanelExt.java index 47b9f520489..de217391c73 100644 --- a/Mage.Client/src/main/java/mage/client/game/PlayerPanelExt.java +++ b/Mage.Client/src/main/java/mage/client/game/PlayerPanelExt.java @@ -34,6 +34,28 @@ package mage.client.game; +import java.awt.Color; +import java.awt.Dimension; +import java.awt.Font; +import java.awt.Image; +import java.awt.Rectangle; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.image.BufferedImage; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; +import javax.swing.BorderFactory; +import javax.swing.GroupLayout; +import javax.swing.GroupLayout.Alignment; +import javax.swing.ImageIcon; +import javax.swing.JButton; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.LayoutStyle.ComponentPlacement; +import javax.swing.SwingConstants; +import javax.swing.border.Border; +import javax.swing.border.LineBorder; import mage.MageException; import mage.cards.MageCard; import mage.cards.action.ActionCallback; @@ -60,20 +82,6 @@ import mage.view.ManaPoolView; import mage.view.PlayerView; import org.mage.card.arcane.ManaSymbols; -import javax.swing.*; -import javax.swing.GroupLayout.Alignment; -import javax.swing.LayoutStyle.ComponentPlacement; -import javax.swing.border.Border; -import javax.swing.border.LineBorder; -import java.awt.*; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.image.BufferedImage; -import java.util.HashMap; -import java.util.LinkedHashMap; -import java.util.Map; -import java.util.UUID; - /** * Enhanced player pane. * @@ -787,11 +795,12 @@ public class PlayerPanelExt extends javax.swing.JPanel { } private void btnGraveActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnGraveActionPerformed + MageFrame.getGame(gameId).openGraveyardWindow(player.getName()); /*if (graveyard == null) { graveyard = new ShowCardsDialog(); }*/ //graveyard.loadCards(player.getName() + " graveyard", player.getGraveyard(), bigCard, Config.dimensions, gameId, false); - DialogManager.getManager(gameId).showGraveyardDialog(player.getGraveyard(), bigCard, gameId); + // DialogManager.getManager(gameId).showGraveyardDialog(player.getGraveyard(), bigCard, gameId); } private void btnCommandZoneActionPerformed(java.awt.event.ActionEvent evt) { From c7184a605578ecf23493a1e85f536ffbb62c58de Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Tue, 23 Jun 2015 01:09:31 +0200 Subject: [PATCH 08/18] * Browbeat - Fixed player list handling. --- .../src/mage/sets/judgment/Browbeat.java | 26 +++++++------------ Mage/src/mage/game/GameState.java | 23 +++++++++++++++- 2 files changed, 31 insertions(+), 18 deletions(-) diff --git a/Mage.Sets/src/mage/sets/judgment/Browbeat.java b/Mage.Sets/src/mage/sets/judgment/Browbeat.java index 7884cf7a6e2..fb71c3674c5 100644 --- a/Mage.Sets/src/mage/sets/judgment/Browbeat.java +++ b/Mage.Sets/src/mage/sets/judgment/Browbeat.java @@ -28,22 +28,17 @@ package mage.sets.judgment; import java.util.UUID; - import mage.abilities.Ability; -import mage.abilities.Mode; -import mage.abilities.costs.common.DiscardTargetCost; import mage.abilities.effects.OneShotEffect; import mage.cards.CardImpl; import mage.constants.CardType; import mage.constants.Outcome; import mage.constants.Rarity; -import mage.filter.FilterCard; import mage.game.Game; import mage.game.stack.Spell; import mage.game.stack.StackObject; import mage.players.Player; import mage.target.TargetPlayer; -import mage.target.common.TargetCardInHand; /** * @@ -55,7 +50,6 @@ public class Browbeat extends CardImpl { super(ownerId, 82, "Browbeat", Rarity.UNCOMMON, new CardType[]{CardType.SORCERY}, "{2}{R}"); this.expansionSetCode = "JUD"; - // Any player may have Browbeat deal 5 damage to him or her. If no one does, target player draws three cards. this.getSpellAbility().addEffect(new BrowbeatDrawEffect()); this.getSpellAbility().addTarget(new TargetPlayer()); @@ -75,6 +69,7 @@ class BrowbeatDrawEffect extends OneShotEffect { public BrowbeatDrawEffect() { super(Outcome.DrawCard); + staticText = "Any player may have {source} deal 5 damage to him or her. If no one does, target player draws three cards."; } public BrowbeatDrawEffect(final BrowbeatDrawEffect effect) { @@ -88,6 +83,10 @@ class BrowbeatDrawEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + if (controller == null) { + return false; + } StackObject spell = null; for(StackObject object : game.getStack()){ if(object instanceof Spell && object.getSourceId().equals(source.getSourceId())){ @@ -96,12 +95,12 @@ class BrowbeatDrawEffect extends OneShotEffect { } if(spell != null){ boolean drawCards = true; - for(UUID uuid : game.getPlayerList()){ - Player player = game.getPlayer(uuid); - if(player != null && player.chooseUse(Outcome.Detriment, "Have " + spell.getName() + " deal 5 damage to you?", game)){ + for(UUID playerId : game.getState().getPlayersInRange(controller.getId(), game)){ + Player player = game.getPlayer(playerId); + if (player != null && player.chooseUse(Outcome.Detriment, "Have " + spell.getLogName() + " deal 5 damage to you?", game)){ drawCards = false; player.damage(5, source.getSourceId(), game, false, true); - game.informPlayers(player.getLogName() + " has " + spell.getName() + " deal 5 to him or her"); + game.informPlayers(player.getLogName() + " has " + spell.getLogName() + " deal 5 to him or her"); } } if (drawCards) { @@ -116,11 +115,4 @@ class BrowbeatDrawEffect extends OneShotEffect { return false; } - @Override - public String getText(Mode mode) { - if (staticText != null && !staticText.isEmpty()) { - return staticText; - } - return "Any player may have {source} deal 5 damage to him or her. If no one does, target player draws three cards."; - } } diff --git a/Mage/src/mage/game/GameState.java b/Mage/src/mage/game/GameState.java index 6f5db885c19..c48ba70ad04 100644 --- a/Mage/src/mage/game/GameState.java +++ b/Mage/src/mage/game/GameState.java @@ -585,7 +585,28 @@ public class GameState implements Serializable, Copyable { newPlayerList.setCurrent(playerId); return newPlayerList; } - + /** + * Returns a list of all active players of the game in range of playerId, + * also setting the playerId to the current player of the list. + * + * @param playerId + * @param game + * @return playerList + */ + public PlayerList getPlayersInRange(UUID playerId, Game game) { + PlayerList newPlayerList = new PlayerList(); + Player currentPlayer = game.getPlayer(playerId); + if (currentPlayer != null) { + for (Player player: players.values()) { + if (!player.hasLeft()&& !player.hasLost() && currentPlayer.getInRange().contains(player.getId())) { + newPlayerList.add(player.getId()); + } + } + newPlayerList.setCurrent(playerId); + } + return newPlayerList; + } + public Permanent getPermanent(UUID permanentId) { if (permanentId != null && battlefield.containsPermanent(permanentId)) { Permanent permanent = battlefield.getPermanent(permanentId); From 00569c4047d47a966140e6b90b7f61a62980a2c6 Mon Sep 17 00:00:00 2001 From: fireshoes Date: Mon, 22 Jun 2015 18:46:01 -0500 Subject: [PATCH 09/18] Added 12 Clash Pack promos, 5 judge promos, 2 upcoming FNM promos, renamed MerfolkToken to MerfolkWizardToken, added collector's number that were missing for ORI in mtg-cards-data.txt, added other various cards. --- .../plugins/card/dl/sources/GathererSets.java | 2 +- .../dl/sources/MagicCardsImageSource.java | 1 + .../src/main/resources/card-pictures-tok.txt | 17 ++ .../src/main/resources/image.url.properties | 4 +- Mage.Sets/src/mage/sets/ClashPack.java | 50 +++++ .../mage/sets/clashpack/CourserOfKruphix.java | 54 ++++++ .../sets/clashpack/FatedIntervention.java | 54 ++++++ .../mage/sets/clashpack/FontOfFertility.java | 54 ++++++ .../mage/sets/clashpack/HerosDownfall.java | 54 ++++++ .../mage/sets/clashpack/HydraBroodmaster.java | 54 ++++++ .../mage/sets/clashpack/NecropolisFiend.java | 54 ++++++ .../mage/sets/clashpack/PrognosticSphinx.java | 54 ++++++ .../mage/sets/clashpack/ProphetOfKruphix.java | 54 ++++++ .../mage/sets/clashpack/ReaperOfTheWilds.java | 54 ++++++ .../mage/sets/clashpack/SultaiAscendancy.java | 54 ++++++ .../mage/sets/clashpack/TempleOfMystery.java | 54 ++++++ .../src/mage/sets/clashpack/WhipOfErebos.java | 54 ++++++ .../mage/sets/commander/ChromeshellCrab.java | 90 +++++++++ .../sets/fourthedition/ApprenticeWizard.java | 52 +++++ .../sets/fridaynightmagic/PathToExile.java | 52 +++++ .../sets/fridaynightmagic/SerumVisions.java | 52 +++++ .../mage/sets/futuresight/UnblinkingBleb.java | 69 +++++++ .../src/mage/sets/invasion/SleepersRobe.java | 82 ++++++++ .../src/mage/sets/judgepromo/Damnation.java | 52 +++++ .../mage/sets/judgepromo/DualcasterMage.java | 52 +++++ .../sets/judgepromo/FeldonOfTheThirdPath.java | 52 +++++ .../mage/sets/judgepromo/RavagesOfWar.java | 52 +++++ .../{Wasteland.java => Wasteland1.java} | 12 +- .../src/mage/sets/judgepromo/Wasteland2.java | 54 ++++++ .../sets/legends/ConcordantCrossroads.java | 52 +++++ .../mage/sets/legions/ChromeshellCrab.java | 52 +++++ .../src/mage/sets/lorwyn/Benthicore.java | 179 +++++++++--------- .../src/mage/sets/lorwyn/BoggartMob.java | 92 +++++++++ .../src/mage/sets/lorwyn/SummonTheSchool.java | 158 ++++++++-------- .../sets/mastersedition/ApprenticeWizard.java | 70 +++++++ .../ConcordantCrossroads.java | 65 +++++++ .../mercadianmasques/DiplomaticImmunity.java | 79 ++++++++ .../src/mage/sets/mirage/ChokingSands.java | 52 +++++ .../morningtide/StonybrookSchoolmaster.java | 65 +++++++ .../sets/morningtide/SupremeExemplar.java | 74 ++++++++ .../mage/sets/onslaught/AphettoAlchemist.java | 86 +++++++++ .../mage/sets/onslaught/AvenSoulgazer.java | 126 ++++++++++++ .../sets/onslaught/DisruptivePitmage.java | 76 ++++++++ .../src/mage/sets/onslaught/NosyGoblin.java | 79 ++++++++ .../mage/sets/scourge/AphettoRunecaster.java | 66 +++++++ .../mage/sets/scourge/MischievousQuanar.java | 95 ++++++++++ .../mage/sets/stronghold/ConstantMists.java | 66 +++++++ .../mage/sets/thedark/ApprenticeWizard.java | 54 ++++++ .../sets/vintagemasters/ChokingSands.java | 109 +++++++++++ ...folkToken.java => MerfolkWizardToken.java} | 42 ++-- Utils/known-sets.txt | 1 + Utils/mtg-cards-data.txt | 138 ++++++++++---- Utils/mtg-sets-data.txt | 1 + 53 files changed, 3033 insertions(+), 237 deletions(-) create mode 100644 Mage.Sets/src/mage/sets/ClashPack.java create mode 100644 Mage.Sets/src/mage/sets/clashpack/CourserOfKruphix.java create mode 100644 Mage.Sets/src/mage/sets/clashpack/FatedIntervention.java create mode 100644 Mage.Sets/src/mage/sets/clashpack/FontOfFertility.java create mode 100644 Mage.Sets/src/mage/sets/clashpack/HerosDownfall.java create mode 100644 Mage.Sets/src/mage/sets/clashpack/HydraBroodmaster.java create mode 100644 Mage.Sets/src/mage/sets/clashpack/NecropolisFiend.java create mode 100644 Mage.Sets/src/mage/sets/clashpack/PrognosticSphinx.java create mode 100644 Mage.Sets/src/mage/sets/clashpack/ProphetOfKruphix.java create mode 100644 Mage.Sets/src/mage/sets/clashpack/ReaperOfTheWilds.java create mode 100644 Mage.Sets/src/mage/sets/clashpack/SultaiAscendancy.java create mode 100644 Mage.Sets/src/mage/sets/clashpack/TempleOfMystery.java create mode 100644 Mage.Sets/src/mage/sets/clashpack/WhipOfErebos.java create mode 100644 Mage.Sets/src/mage/sets/commander/ChromeshellCrab.java create mode 100644 Mage.Sets/src/mage/sets/fourthedition/ApprenticeWizard.java create mode 100644 Mage.Sets/src/mage/sets/fridaynightmagic/PathToExile.java create mode 100644 Mage.Sets/src/mage/sets/fridaynightmagic/SerumVisions.java create mode 100644 Mage.Sets/src/mage/sets/futuresight/UnblinkingBleb.java create mode 100644 Mage.Sets/src/mage/sets/invasion/SleepersRobe.java create mode 100644 Mage.Sets/src/mage/sets/judgepromo/Damnation.java create mode 100644 Mage.Sets/src/mage/sets/judgepromo/DualcasterMage.java create mode 100644 Mage.Sets/src/mage/sets/judgepromo/FeldonOfTheThirdPath.java create mode 100644 Mage.Sets/src/mage/sets/judgepromo/RavagesOfWar.java rename Mage.Sets/src/mage/sets/judgepromo/{Wasteland.java => Wasteland1.java} (89%) create mode 100644 Mage.Sets/src/mage/sets/judgepromo/Wasteland2.java create mode 100644 Mage.Sets/src/mage/sets/legends/ConcordantCrossroads.java create mode 100644 Mage.Sets/src/mage/sets/legions/ChromeshellCrab.java create mode 100644 Mage.Sets/src/mage/sets/lorwyn/BoggartMob.java create mode 100644 Mage.Sets/src/mage/sets/mastersedition/ApprenticeWizard.java create mode 100644 Mage.Sets/src/mage/sets/masterseditioniii/ConcordantCrossroads.java create mode 100644 Mage.Sets/src/mage/sets/mercadianmasques/DiplomaticImmunity.java create mode 100644 Mage.Sets/src/mage/sets/mirage/ChokingSands.java create mode 100644 Mage.Sets/src/mage/sets/morningtide/StonybrookSchoolmaster.java create mode 100644 Mage.Sets/src/mage/sets/morningtide/SupremeExemplar.java create mode 100644 Mage.Sets/src/mage/sets/onslaught/AphettoAlchemist.java create mode 100644 Mage.Sets/src/mage/sets/onslaught/AvenSoulgazer.java create mode 100644 Mage.Sets/src/mage/sets/onslaught/DisruptivePitmage.java create mode 100644 Mage.Sets/src/mage/sets/onslaught/NosyGoblin.java create mode 100644 Mage.Sets/src/mage/sets/scourge/AphettoRunecaster.java create mode 100644 Mage.Sets/src/mage/sets/scourge/MischievousQuanar.java create mode 100644 Mage.Sets/src/mage/sets/stronghold/ConstantMists.java create mode 100644 Mage.Sets/src/mage/sets/thedark/ApprenticeWizard.java create mode 100644 Mage.Sets/src/mage/sets/vintagemasters/ChokingSands.java rename Mage/src/mage/game/permanent/token/{MerfolkToken.java => MerfolkWizardToken.java} (67%) diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GathererSets.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GathererSets.java index a65db2670eb..fa6428a9f3d 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GathererSets.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GathererSets.java @@ -43,7 +43,7 @@ public class GathererSets implements Iterable { "CMD", "C13", "C14", "PC2", "ISD", "DKA", "AVR", "RTR", "GTC", "DGM", - "MMA", + "MMA", "MM2", "THS", "BNG", "JOU", "CNS", "VMA", "TPR", "KTK", "FRF", "DTK"}; diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/MagicCardsImageSource.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/MagicCardsImageSource.java index 5bb3f704db9..80c7b7b4dc2 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/MagicCardsImageSource.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/MagicCardsImageSource.java @@ -16,6 +16,7 @@ public class MagicCardsImageSource implements CardImageSource { private static final Map setNameTokenReplacement = new HashMap() { { + put("CLASH", "clash-pack"); put("TPR", "tempest-remastered"); put("ORI", "magic-origins"); put("MM2", "modern-masters-2015"); diff --git a/Mage.Client/src/main/resources/card-pictures-tok.txt b/Mage.Client/src/main/resources/card-pictures-tok.txt index 93fdf9a8e0b..406edd79263 100644 --- a/Mage.Client/src/main/resources/card-pictures-tok.txt +++ b/Mage.Client/src/main/resources/card-pictures-tok.txt @@ -1,3 +1,20 @@ +#Generate|TOK:MM2|Eldrazi Spawn 1| +#Generate|TOK:MM2|Eldrazi Spawn 2| +#Generate|TOK:MM2|Eldrazi Spawn 3| +#Generate|TOK:MM2|Elephant| +#Generate|TOK:MM2|Faerie Rogue| +#Generate|TOK:MM2|Germ| +#Generate|TOK:MM2|Golem| +#Generate|TOK:MM2|Insect| +#Generate|TOK:MM2|Myr| +#Generate|TOK:MM2|Saproling| +#Generate|TOK:MM2|Snake| +#Generate|TOK:MM2|Soldier| +#Generate|TOK:MM2|Spirit| +#Generate|TOK:MM2|Thrull| +#Generate|TOK:MM2|Wolf| +#Generate|TOK:MM2|Wurm| + #Generate|TOK:TPR|Goblin| #Generate|TOK:TPR|Pegasus| #Generate|TOK:TPR|Rat| diff --git a/Mage.Client/src/main/resources/image.url.properties b/Mage.Client/src/main/resources/image.url.properties index 21a5556cc22..75f83debf0d 100644 --- a/Mage.Client/src/main/resources/image.url.properties +++ b/Mage.Client/src/main/resources/image.url.properties @@ -64,6 +64,6 @@ ddd=gvl unh=uh dde=pvc # Remove setname as soon as the images can be downloaded -ignore.urls=TOK,MMB +ignore.urls=TOK,MM2 # sets ordered by release time (newest goes first) -token.lookup.order=TPR,MPRP,DD3,DDO,ORI,MMB,PTC,DTK,FRF,KTK,M15,VMA,CNS,JOU,BNG,THS,DDL,M14,MMA,DGM,GTC,RTR,M13,AVR,DDI,DKA,ISD,M12,NPH,MBS,SOM,M11,ROE,DDE,WWK,ZEN,M10,GVL,ARB,DVD,CFX,JVC,ALA,EVE,SHM,EVG,MOR,LRW,10E,CLS,CHK,GRC \ No newline at end of file +token.lookup.order=TPR,MPRP,DD3,DDO,ORI,MM2,PTC,DTK,FRF,KTK,M15,VMA,CNS,JOU,BNG,THS,DDL,M14,MMA,DGM,GTC,RTR,M13,AVR,DDI,DKA,ISD,M12,NPH,MBS,SOM,M11,ROE,DDE,WWK,ZEN,M10,GVL,ARB,DVD,CFX,JVC,ALA,EVE,SHM,EVG,MOR,LRW,10E,CLS,CHK,GRC \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/ClashPack.java b/Mage.Sets/src/mage/sets/ClashPack.java new file mode 100644 index 00000000000..88c39d8b8eb --- /dev/null +++ b/Mage.Sets/src/mage/sets/ClashPack.java @@ -0,0 +1,50 @@ +/* +* 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; + +import java.util.GregorianCalendar; +import mage.cards.ExpansionSet; +import mage.constants.SetType; + +/** + * + * @author LevelX2 + */ +public class ClashPack extends ExpansionSet { + private static final ClashPack fINSTANCE = new ClashPack(); + + public static ClashPack getInstance() { + return fINSTANCE; + } + + private ClashPack() { + super("Clash Pack", "CLASH", "mage.sets.clashpack", new GregorianCalendar(2014, 7, 18).getTime(), SetType.SUPPLEMENTAL); + this.hasBasicLands = false; + } +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/clashpack/CourserOfKruphix.java b/Mage.Sets/src/mage/sets/clashpack/CourserOfKruphix.java new file mode 100644 index 00000000000..98524ef6af6 --- /dev/null +++ b/Mage.Sets/src/mage/sets/clashpack/CourserOfKruphix.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.clashpack; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class CourserOfKruphix extends mage.sets.bornofthegods.CourserOfKruphix { + + public CourserOfKruphix(UUID ownerId) { + super(ownerId); + this.cardNumber = 12; + this.expansionSetCode = "CLASH"; + this.rarity = Rarity.SPECIAL; + } + + public CourserOfKruphix(final CourserOfKruphix card) { + super(card); + } + + @Override + public CourserOfKruphix copy() { + return new CourserOfKruphix(this); + } +} diff --git a/Mage.Sets/src/mage/sets/clashpack/FatedIntervention.java b/Mage.Sets/src/mage/sets/clashpack/FatedIntervention.java new file mode 100644 index 00000000000..df451800e4f --- /dev/null +++ b/Mage.Sets/src/mage/sets/clashpack/FatedIntervention.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.clashpack; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class FatedIntervention extends mage.sets.bornofthegods.FatedIntervention { + + public FatedIntervention(UUID ownerId) { + super(ownerId); + this.cardNumber = 2; + this.expansionSetCode = "CLASH"; + this.rarity = Rarity.SPECIAL; + } + + public FatedIntervention(final FatedIntervention card) { + super(card); + } + + @Override + public FatedIntervention copy() { + return new FatedIntervention(this); + } +} diff --git a/Mage.Sets/src/mage/sets/clashpack/FontOfFertility.java b/Mage.Sets/src/mage/sets/clashpack/FontOfFertility.java new file mode 100644 index 00000000000..65dc6e6c423 --- /dev/null +++ b/Mage.Sets/src/mage/sets/clashpack/FontOfFertility.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.clashpack; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class FontOfFertility extends mage.sets.journeyintonyx.FontOfFertility { + + public FontOfFertility(UUID ownerId) { + super(ownerId); + this.cardNumber = 3; + this.expansionSetCode = "CLASH"; + this.rarity = Rarity.SPECIAL; + } + + public FontOfFertility(final FontOfFertility card) { + super(card); + } + + @Override + public FontOfFertility copy() { + return new FontOfFertility(this); + } +} diff --git a/Mage.Sets/src/mage/sets/clashpack/HerosDownfall.java b/Mage.Sets/src/mage/sets/clashpack/HerosDownfall.java new file mode 100644 index 00000000000..94d55e720b1 --- /dev/null +++ b/Mage.Sets/src/mage/sets/clashpack/HerosDownfall.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.clashpack; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class HerosDownfall extends mage.sets.theros.HerosDownfall { + + public HerosDownfall(UUID ownerId) { + super(ownerId); + this.cardNumber = 8; + this.expansionSetCode = "CLASH"; + this.rarity = Rarity.SPECIAL; + } + + public HerosDownfall(final HerosDownfall card) { + super(card); + } + + @Override + public HerosDownfall copy() { + return new HerosDownfall(this); + } +} diff --git a/Mage.Sets/src/mage/sets/clashpack/HydraBroodmaster.java b/Mage.Sets/src/mage/sets/clashpack/HydraBroodmaster.java new file mode 100644 index 00000000000..be735b6dbdf --- /dev/null +++ b/Mage.Sets/src/mage/sets/clashpack/HydraBroodmaster.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.clashpack; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class HydraBroodmaster extends mage.sets.journeyintonyx.HydraBroodmaster { + + public HydraBroodmaster(UUID ownerId) { + super(ownerId); + this.cardNumber = 4; + this.expansionSetCode = "CLASH"; + this.rarity = Rarity.SPECIAL; + } + + public HydraBroodmaster(final HydraBroodmaster card) { + super(card); + } + + @Override + public HydraBroodmaster copy() { + return new HydraBroodmaster(this); + } +} diff --git a/Mage.Sets/src/mage/sets/clashpack/NecropolisFiend.java b/Mage.Sets/src/mage/sets/clashpack/NecropolisFiend.java new file mode 100644 index 00000000000..920343b98e4 --- /dev/null +++ b/Mage.Sets/src/mage/sets/clashpack/NecropolisFiend.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.clashpack; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class NecropolisFiend extends mage.sets.khansoftarkir.NecropolisFiend { + + public NecropolisFiend(UUID ownerId) { + super(ownerId); + this.cardNumber = 7; + this.expansionSetCode = "CLASH"; + this.rarity = Rarity.SPECIAL; + } + + public NecropolisFiend(final NecropolisFiend card) { + super(card); + } + + @Override + public NecropolisFiend copy() { + return new NecropolisFiend(this); + } +} diff --git a/Mage.Sets/src/mage/sets/clashpack/PrognosticSphinx.java b/Mage.Sets/src/mage/sets/clashpack/PrognosticSphinx.java new file mode 100644 index 00000000000..1c831c9ab0b --- /dev/null +++ b/Mage.Sets/src/mage/sets/clashpack/PrognosticSphinx.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.clashpack; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class PrognosticSphinx extends mage.sets.theros.PrognosticSphinx { + + public PrognosticSphinx(UUID ownerId) { + super(ownerId); + this.cardNumber = 1; + this.expansionSetCode = "CLASH"; + this.rarity = Rarity.SPECIAL; + } + + public PrognosticSphinx(final PrognosticSphinx card) { + super(card); + } + + @Override + public PrognosticSphinx copy() { + return new PrognosticSphinx(this); + } +} diff --git a/Mage.Sets/src/mage/sets/clashpack/ProphetOfKruphix.java b/Mage.Sets/src/mage/sets/clashpack/ProphetOfKruphix.java new file mode 100644 index 00000000000..7437e2fab4f --- /dev/null +++ b/Mage.Sets/src/mage/sets/clashpack/ProphetOfKruphix.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.clashpack; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class ProphetOfKruphix extends mage.sets.theros.ProphetOfKruphix { + + public ProphetOfKruphix(UUID ownerId) { + super(ownerId); + this.cardNumber = 5; + this.expansionSetCode = "CLASH"; + this.rarity = Rarity.SPECIAL; + } + + public ProphetOfKruphix(final ProphetOfKruphix card) { + super(card); + } + + @Override + public ProphetOfKruphix copy() { + return new ProphetOfKruphix(this); + } +} diff --git a/Mage.Sets/src/mage/sets/clashpack/ReaperOfTheWilds.java b/Mage.Sets/src/mage/sets/clashpack/ReaperOfTheWilds.java new file mode 100644 index 00000000000..dcaa6a58121 --- /dev/null +++ b/Mage.Sets/src/mage/sets/clashpack/ReaperOfTheWilds.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.clashpack; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class ReaperOfTheWilds extends mage.sets.theros.ReaperOfTheWilds { + + public ReaperOfTheWilds(UUID ownerId) { + super(ownerId); + this.cardNumber = 10; + this.expansionSetCode = "CLASH"; + this.rarity = Rarity.SPECIAL; + } + + public ReaperOfTheWilds(final ReaperOfTheWilds card) { + super(card); + } + + @Override + public ReaperOfTheWilds copy() { + return new ReaperOfTheWilds(this); + } +} diff --git a/Mage.Sets/src/mage/sets/clashpack/SultaiAscendancy.java b/Mage.Sets/src/mage/sets/clashpack/SultaiAscendancy.java new file mode 100644 index 00000000000..3cba2cae8fd --- /dev/null +++ b/Mage.Sets/src/mage/sets/clashpack/SultaiAscendancy.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.clashpack; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class SultaiAscendancy extends mage.sets.khansoftarkir.SultaiAscendancy { + + public SultaiAscendancy(UUID ownerId) { + super(ownerId); + this.cardNumber = 9; + this.expansionSetCode = "CLASH"; + this.rarity = Rarity.SPECIAL; + } + + public SultaiAscendancy(final SultaiAscendancy card) { + super(card); + } + + @Override + public SultaiAscendancy copy() { + return new SultaiAscendancy(this); + } +} diff --git a/Mage.Sets/src/mage/sets/clashpack/TempleOfMystery.java b/Mage.Sets/src/mage/sets/clashpack/TempleOfMystery.java new file mode 100644 index 00000000000..fb8fbee4809 --- /dev/null +++ b/Mage.Sets/src/mage/sets/clashpack/TempleOfMystery.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.clashpack; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class TempleOfMystery extends mage.sets.theros.TempleOfMystery { + + public TempleOfMystery(UUID ownerId) { + super(ownerId); + this.cardNumber = 6; + this.expansionSetCode = "CLASH"; + this.rarity = Rarity.SPECIAL; + } + + public TempleOfMystery(final TempleOfMystery card) { + super(card); + } + + @Override + public TempleOfMystery copy() { + return new TempleOfMystery(this); + } +} diff --git a/Mage.Sets/src/mage/sets/clashpack/WhipOfErebos.java b/Mage.Sets/src/mage/sets/clashpack/WhipOfErebos.java new file mode 100644 index 00000000000..f48c4ba0854 --- /dev/null +++ b/Mage.Sets/src/mage/sets/clashpack/WhipOfErebos.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.clashpack; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class WhipOfErebos extends mage.sets.theros.WhipOfErebos { + + public WhipOfErebos(UUID ownerId) { + super(ownerId); + this.cardNumber = 11; + this.expansionSetCode = "CLASH"; + this.rarity = Rarity.SPECIAL; + } + + public WhipOfErebos(final WhipOfErebos card) { + super(card); + } + + @Override + public WhipOfErebos copy() { + return new WhipOfErebos(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander/ChromeshellCrab.java b/Mage.Sets/src/mage/sets/commander/ChromeshellCrab.java new file mode 100644 index 00000000000..5c46924088f --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander/ChromeshellCrab.java @@ -0,0 +1,90 @@ +/* + * 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.commander; + +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.Effect; +import mage.abilities.effects.common.continuous.ExchangeControlTargetEffect; +import mage.abilities.keyword.MorphAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.permanent.ControllerPredicate; +import mage.target.common.TargetControlledCreaturePermanent; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author fireshoes + */ +public class ChromeshellCrab extends CardImpl { + + private static final String rule = "you may exchange control of target creature you control and target creature an opponent controls"; + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature an opponent controls"); + + static { + filter.add(new ControllerPredicate(TargetController.OPPONENT)); + } + + public ChromeshellCrab(UUID ownerId) { + super(ownerId, 41, "Chromeshell Crab", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{4}{U}"); + this.expansionSetCode = "CMD"; + this.subtype.add("Crab"); + this.subtype.add("Beast"); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + // Morph {4}{U} + this.addAbility(new MorphAbility(this, new ManaCostsImpl("{4}{U}"))); + + // When Chromeshell Crab is turned face up, you may exchange control of target creature you control and target creature an opponent controls. + Effect effect = new ExchangeControlTargetEffect(Duration.EndOfGame, rule, false, true); + effect.setText("exchange control of target creature you control and target creature an opponent controls"); + Ability ability = new TurnedFaceUpSourceTriggeredAbility(effect, false, true); + ability.addTarget(new TargetControlledCreaturePermanent()); + ability.addTarget(new TargetCreaturePermanent(filter)); + this.addAbility(ability); + } + + public ChromeshellCrab(final ChromeshellCrab card) { + super(card); + } + + @Override + public ChromeshellCrab copy() { + return new ChromeshellCrab(this); + } +} diff --git a/Mage.Sets/src/mage/sets/fourthedition/ApprenticeWizard.java b/Mage.Sets/src/mage/sets/fourthedition/ApprenticeWizard.java new file mode 100644 index 00000000000..34537065eaf --- /dev/null +++ b/Mage.Sets/src/mage/sets/fourthedition/ApprenticeWizard.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.fourthedition; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class ApprenticeWizard extends mage.sets.mastersedition.ApprenticeWizard { + + public ApprenticeWizard(UUID ownerId) { + super(ownerId); + this.cardNumber = 61; + this.expansionSetCode = "4ED"; + } + + public ApprenticeWizard(final ApprenticeWizard card) { + super(card); + } + + @Override + public ApprenticeWizard copy() { + return new ApprenticeWizard(this); + } +} diff --git a/Mage.Sets/src/mage/sets/fridaynightmagic/PathToExile.java b/Mage.Sets/src/mage/sets/fridaynightmagic/PathToExile.java new file mode 100644 index 00000000000..5a5e9dbe4e0 --- /dev/null +++ b/Mage.Sets/src/mage/sets/fridaynightmagic/PathToExile.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.fridaynightmagic; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class PathToExile extends mage.sets.conflux.PathToExile { + + public PathToExile(UUID ownerId) { + super(ownerId); + this.cardNumber = 182; + this.expansionSetCode = "FNMP"; + } + + public PathToExile(final PathToExile card) { + super(card); + } + + @Override + public PathToExile copy() { + return new PathToExile(this); + } +} diff --git a/Mage.Sets/src/mage/sets/fridaynightmagic/SerumVisions.java b/Mage.Sets/src/mage/sets/fridaynightmagic/SerumVisions.java new file mode 100644 index 00000000000..4a98857ee02 --- /dev/null +++ b/Mage.Sets/src/mage/sets/fridaynightmagic/SerumVisions.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.fridaynightmagic; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class SerumVisions extends mage.sets.fifthdawn.SerumVisions { + + public SerumVisions(UUID ownerId) { + super(ownerId); + this.cardNumber = 183; + this.expansionSetCode = "FNMP"; + } + + public SerumVisions(final SerumVisions card) { + super(card); + } + + @Override + public SerumVisions copy() { + return new SerumVisions(this); + } +} diff --git a/Mage.Sets/src/mage/sets/futuresight/UnblinkingBleb.java b/Mage.Sets/src/mage/sets/futuresight/UnblinkingBleb.java new file mode 100644 index 00000000000..75cd4c35bf9 --- /dev/null +++ b/Mage.Sets/src/mage/sets/futuresight/UnblinkingBleb.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.futuresight; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.TurnedFaceUpAllTriggeredAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.keyword.ScryEffect; +import mage.abilities.keyword.MorphAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.filter.FilterPermanent; + +/** + * + * @author fireshoes + */ +public class UnblinkingBleb extends CardImpl { + + public UnblinkingBleb(UUID ownerId) { + super(ownerId, 45, "Unblinking Bleb", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{3}{U}"); + this.expansionSetCode = "FUT"; + this.subtype.add("Illusion"); + this.power = new MageInt(1); + this.toughness = new MageInt(3); + + // Morph {2}{U} + this.addAbility(new MorphAbility(this, new ManaCostsImpl("{2}{U}"))); + + // Whenever Unblinking Bleb or another permanent is turned face up, you may scry 2. + this.addAbility(new TurnedFaceUpAllTriggeredAbility(new ScryEffect(2), new FilterPermanent("{this} or another permanent"), true)); + } + + public UnblinkingBleb(final UnblinkingBleb card) { + super(card); + } + + @Override + public UnblinkingBleb copy() { + return new UnblinkingBleb(this); + } +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/invasion/SleepersRobe.java b/Mage.Sets/src/mage/sets/invasion/SleepersRobe.java new file mode 100644 index 00000000000..4efa36bc20d --- /dev/null +++ b/Mage.Sets/src/mage/sets/invasion/SleepersRobe.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.invasion; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.common.DealsDamageToAPlayerAttachedTriggeredAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.common.AttachEffect; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect; +import mage.abilities.keyword.EnchantAbility; +import mage.abilities.keyword.FearAbility; +import mage.cards.CardImpl; +import mage.constants.AttachmentType; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.constants.Zone; +import mage.target.TargetPermanent; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author fireshoes + */ +public class SleepersRobe extends CardImpl { + + public SleepersRobe(UUID ownerId) { + super(ownerId, 273, "Sleeper's Robe", Rarity.UNCOMMON, new CardType[]{CardType.ENCHANTMENT}, "{U}{B}"); + this.expansionSetCode = "INV"; + this.subtype.add("Aura"); + + // Enchant creature + TargetPermanent auraTarget = new TargetCreaturePermanent(); + this.getSpellAbility().addTarget(auraTarget); + this.getSpellAbility().addEffect(new AttachEffect(Outcome.AddAbility)); + Ability ability = new EnchantAbility(auraTarget.getTargetName()); + this.addAbility(ability); + + // Enchanted creature has fear. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(FearAbility.getInstance(), AttachmentType.AURA))); + + // Whenever enchanted creature deals combat damage to an opponent, you may draw a card. + this.addAbility(new DealsDamageToAPlayerAttachedTriggeredAbility(new DrawCardSourceControllerEffect(1), "enchanted creature", true, false, false, TargetController.OPPONENT)); + } + + public SleepersRobe(final SleepersRobe card) { + super(card); + } + + @Override + public SleepersRobe copy() { + return new SleepersRobe(this); + } +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/judgepromo/Damnation.java b/Mage.Sets/src/mage/sets/judgepromo/Damnation.java new file mode 100644 index 00000000000..b52992b4a05 --- /dev/null +++ b/Mage.Sets/src/mage/sets/judgepromo/Damnation.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.judgepromo; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Damnation extends mage.sets.planarchaos.Damnation { + + public Damnation(UUID ownerId) { + super(ownerId); + this.cardNumber = 94; + this.expansionSetCode = "JR"; + } + + public Damnation(final Damnation card) { + super(card); + } + + @Override + public Damnation copy() { + return new Damnation(this); + } +} diff --git a/Mage.Sets/src/mage/sets/judgepromo/DualcasterMage.java b/Mage.Sets/src/mage/sets/judgepromo/DualcasterMage.java new file mode 100644 index 00000000000..3b3b3502ca7 --- /dev/null +++ b/Mage.Sets/src/mage/sets/judgepromo/DualcasterMage.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.judgepromo; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class DualcasterMage extends mage.sets.commander2014.DualcasterMage { + + public DualcasterMage(UUID ownerId) { + super(ownerId); + this.cardNumber = 95; + this.expansionSetCode = "JR"; + } + + public DualcasterMage(final DualcasterMage card) { + super(card); + } + + @Override + public DualcasterMage copy() { + return new DualcasterMage(this); + } +} diff --git a/Mage.Sets/src/mage/sets/judgepromo/FeldonOfTheThirdPath.java b/Mage.Sets/src/mage/sets/judgepromo/FeldonOfTheThirdPath.java new file mode 100644 index 00000000000..624e723230c --- /dev/null +++ b/Mage.Sets/src/mage/sets/judgepromo/FeldonOfTheThirdPath.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.judgepromo; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class FeldonOfTheThirdPath extends mage.sets.commander2014.FeldonOfTheThirdPath { + + public FeldonOfTheThirdPath(UUID ownerId) { + super(ownerId); + this.cardNumber = 96; + this.expansionSetCode = "JR"; + } + + public FeldonOfTheThirdPath(final FeldonOfTheThirdPath card) { + super(card); + } + + @Override + public FeldonOfTheThirdPath copy() { + return new FeldonOfTheThirdPath(this); + } +} diff --git a/Mage.Sets/src/mage/sets/judgepromo/RavagesOfWar.java b/Mage.Sets/src/mage/sets/judgepromo/RavagesOfWar.java new file mode 100644 index 00000000000..9287aef52e8 --- /dev/null +++ b/Mage.Sets/src/mage/sets/judgepromo/RavagesOfWar.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.judgepromo; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class RavagesOfWar extends mage.sets.portalthreekingdoms.RavagesOfWar { + + public RavagesOfWar(UUID ownerId) { + super(ownerId); + this.cardNumber = 97; + this.expansionSetCode = "JR"; + } + + public RavagesOfWar(final RavagesOfWar card) { + super(card); + } + + @Override + public RavagesOfWar copy() { + return new RavagesOfWar(this); + } +} diff --git a/Mage.Sets/src/mage/sets/judgepromo/Wasteland.java b/Mage.Sets/src/mage/sets/judgepromo/Wasteland1.java similarity index 89% rename from Mage.Sets/src/mage/sets/judgepromo/Wasteland.java rename to Mage.Sets/src/mage/sets/judgepromo/Wasteland1.java index 51b136604e2..4b0cf0a571b 100644 --- a/Mage.Sets/src/mage/sets/judgepromo/Wasteland.java +++ b/Mage.Sets/src/mage/sets/judgepromo/Wasteland1.java @@ -33,20 +33,20 @@ import java.util.UUID; * * @author fireshoes */ -public class Wasteland extends mage.sets.tempest.Wasteland { +public class Wasteland1 extends mage.sets.tempest.Wasteland { - public Wasteland(UUID ownerId) { + public Wasteland1(UUID ownerId) { super(ownerId); this.cardNumber = 55; this.expansionSetCode = "JR"; } - public Wasteland(final Wasteland card) { + public Wasteland1(final Wasteland1 card) { super(card); } @Override - public Wasteland copy() { - return new Wasteland(this); + public Wasteland1 copy() { + return new Wasteland1(this); } -} +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/judgepromo/Wasteland2.java b/Mage.Sets/src/mage/sets/judgepromo/Wasteland2.java new file mode 100644 index 00000000000..3f62f4a6739 --- /dev/null +++ b/Mage.Sets/src/mage/sets/judgepromo/Wasteland2.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.judgepromo; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class Wasteland2 extends mage.sets.tempest.Wasteland { + + public Wasteland2(UUID ownerId) { + super(ownerId); + this.cardNumber = 98; + this.expansionSetCode = "JR"; + this.rarity = Rarity.RARE; + } + + public Wasteland2(final Wasteland2 card) { + super(card); + } + + @Override + public Wasteland2 copy() { + return new Wasteland2(this); + } +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/legends/ConcordantCrossroads.java b/Mage.Sets/src/mage/sets/legends/ConcordantCrossroads.java new file mode 100644 index 00000000000..421d353dfb2 --- /dev/null +++ b/Mage.Sets/src/mage/sets/legends/ConcordantCrossroads.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.legends; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class ConcordantCrossroads extends mage.sets.masterseditioniii.ConcordantCrossroads { + + public ConcordantCrossroads(UUID ownerId) { + super(ownerId); + this.cardNumber = 93; + this.expansionSetCode = "LEG"; + } + + public ConcordantCrossroads(final ConcordantCrossroads card) { + super(card); + } + + @Override + public ConcordantCrossroads copy() { + return new ConcordantCrossroads(this); + } +} diff --git a/Mage.Sets/src/mage/sets/legions/ChromeshellCrab.java b/Mage.Sets/src/mage/sets/legions/ChromeshellCrab.java new file mode 100644 index 00000000000..89d6e431aa1 --- /dev/null +++ b/Mage.Sets/src/mage/sets/legions/ChromeshellCrab.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.legions; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class ChromeshellCrab extends mage.sets.commander.ChromeshellCrab { + + public ChromeshellCrab(UUID ownerId) { + super(ownerId); + this.cardNumber = 32; + this.expansionSetCode = "LGN"; + } + + public ChromeshellCrab(final ChromeshellCrab card) { + super(card); + } + + @Override + public ChromeshellCrab copy() { + return new ChromeshellCrab(this); + } +} diff --git a/Mage.Sets/src/mage/sets/lorwyn/Benthicore.java b/Mage.Sets/src/mage/sets/lorwyn/Benthicore.java index 2f1de4dda32..13503b6c747 100644 --- a/Mage.Sets/src/mage/sets/lorwyn/Benthicore.java +++ b/Mage.Sets/src/mage/sets/lorwyn/Benthicore.java @@ -1,88 +1,91 @@ -/* - * 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.lorwyn; - -import mage.constants.CardType; -import mage.constants.Rarity; -import mage.MageInt; -import mage.abilities.Ability; -import mage.abilities.common.EntersBattlefieldTriggeredAbility; -import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.costs.common.TapTargetCost; -import mage.abilities.effects.common.CreateTokenEffect; -import mage.abilities.effects.common.UntapSourceEffect; -import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; -import mage.abilities.keyword.ShroudAbility; -import mage.cards.CardImpl; -import mage.constants.Duration; -import mage.constants.Zone; -import mage.filter.common.FilterControlledPermanent; -import mage.filter.predicate.Predicates; -import mage.filter.predicate.mageobject.SubtypePredicate; -import mage.filter.predicate.permanent.TappedPredicate; -import mage.game.permanent.token.MerfolkToken; -import mage.target.common.TargetControlledPermanent; - -import java.util.UUID; - -/** - * - * @author Loki - */ -public class Benthicore extends CardImpl { - - private static final FilterControlledPermanent filter = new FilterControlledPermanent("untapped Merfolk you control"); - - static { - filter.add(Predicates.not(new TappedPredicate())); - filter.add(new SubtypePredicate("Merfolk")); - } - - public Benthicore(UUID ownerId) { - super(ownerId, 53, "Benthicore", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{6}{U}"); - this.expansionSetCode = "LRW"; - this.subtype.add("Elemental"); - - this.power = new MageInt(5); - this.toughness = new MageInt(5); - this.addAbility(new EntersBattlefieldTriggeredAbility(new CreateTokenEffect(new MerfolkToken(), 2), false)); - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new UntapSourceEffect(), new TapTargetCost(new TargetControlledPermanent(2, 2, filter, false))); - ability.addEffect(new GainAbilitySourceEffect(ShroudAbility.getInstance(), Duration.EndOfTurn)); - this.addAbility(ability); - } - - public Benthicore(final Benthicore card) { - super(card); - } - - @Override - public Benthicore copy() { - return new Benthicore(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.lorwyn; + +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.TapTargetCost; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.effects.common.UntapSourceEffect; +import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; +import mage.abilities.keyword.ShroudAbility; +import mage.cards.CardImpl; +import mage.constants.Duration; +import mage.constants.Zone; +import mage.filter.common.FilterControlledPermanent; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.mageobject.SubtypePredicate; +import mage.filter.predicate.permanent.TappedPredicate; +import mage.game.permanent.token.MerfolkWizardToken; +import mage.target.common.TargetControlledPermanent; + +import java.util.UUID; + +/** + * + * @author Loki + */ +public class Benthicore extends CardImpl { + + private static final FilterControlledPermanent filter = new FilterControlledPermanent("untapped Merfolk you control"); + + static { + filter.add(Predicates.not(new TappedPredicate())); + filter.add(new SubtypePredicate("Merfolk")); + } + + public Benthicore(UUID ownerId) { + super(ownerId, 53, "Benthicore", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{6}{U}"); + this.expansionSetCode = "LRW"; + this.subtype.add("Elemental"); + this.color.setBlue(true); + this.power = new MageInt(5); + this.toughness = new MageInt(5); + + // When Benthicore enters the battlefield, put two 1/1 blue Merfolk Wizard creature tokens onto the battlefield. + this.addAbility(new EntersBattlefieldTriggeredAbility(new CreateTokenEffect(new MerfolkWizardToken(), 2), false)); + + // Tap two untapped Merfolk you control: Untap Benthicore. It gains shroud until end of turn. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new UntapSourceEffect(), new TapTargetCost(new TargetControlledPermanent(2, 2, filter, false))); + ability.addEffect(new GainAbilitySourceEffect(ShroudAbility.getInstance(), Duration.EndOfTurn)); + this.addAbility(ability); + } + + public Benthicore(final Benthicore card) { + super(card); + } + + @Override + public Benthicore copy() { + return new Benthicore(this); + } +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/lorwyn/BoggartMob.java b/Mage.Sets/src/mage/sets/lorwyn/BoggartMob.java new file mode 100644 index 00000000000..0bfee0cd162 --- /dev/null +++ b/Mage.Sets/src/mage/sets/lorwyn/BoggartMob.java @@ -0,0 +1,92 @@ +/* + * 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.lorwyn; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.DealsDamageToAPlayerAllTriggeredAbility; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.keyword.ChampionAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.SetTargetPointer; +import mage.filter.common.FilterControlledPermanent; +import mage.filter.predicate.mageobject.SubtypePredicate; +import mage.game.permanent.token.Token; + +/** + * + * @author fireshoes + */ +public class BoggartMob extends CardImpl { + + private static final FilterControlledPermanent filter = new FilterControlledPermanent("a Goblin you control"); + + static { + filter.add(new SubtypePredicate("Goblin")); + } + + public BoggartMob(UUID ownerId) { + super(ownerId, 104, "Boggart Mob", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{3}{B}"); + this.expansionSetCode = "LRW"; + this.subtype.add("Goblin"); + this.subtype.add("Warrior"); + this.power = new MageInt(5); + this.toughness = new MageInt(5); + + // Champion a Goblin + this.addAbility(new ChampionAbility(this, "Goblin")); + + // Whenever a Goblin you control deals combat damage to a player, you may put a 1/1 black Goblin Rogue creature token onto the battlefield. + this.addAbility(new DealsDamageToAPlayerAllTriggeredAbility( + new CreateTokenEffect(new BlackGoblinRogueToken()), + filter, true, SetTargetPointer.NONE, true)); + } + + public BoggartMob(final BoggartMob card) { + super(card); + } + + @Override + public BoggartMob copy() { + return new BoggartMob(this); + } +} + +class BlackGoblinRogueToken extends Token { + BlackGoblinRogueToken() { + super("Goblin Rogue", "1/1 black Goblin Rogue creature token"); + cardType.add(CardType.CREATURE); + color.setBlack(true); + subtype.add("Goblin"); + subtype.add("Rogue"); + power = new MageInt(1); + toughness = new MageInt(1); + } +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/lorwyn/SummonTheSchool.java b/Mage.Sets/src/mage/sets/lorwyn/SummonTheSchool.java index f69a60c2ca2..ca8c1add579 100644 --- a/Mage.Sets/src/mage/sets/lorwyn/SummonTheSchool.java +++ b/Mage.Sets/src/mage/sets/lorwyn/SummonTheSchool.java @@ -1,79 +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.lorwyn; - -import mage.constants.CardType; -import mage.constants.Rarity; -import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.costs.common.TapTargetCost; -import mage.abilities.effects.common.CreateTokenEffect; -import mage.abilities.effects.common.ReturnToHandSourceEffect; -import mage.cards.CardImpl; -import mage.constants.Zone; -import mage.filter.common.FilterControlledPermanent; -import mage.filter.predicate.Predicates; -import mage.filter.predicate.mageobject.SubtypePredicate; -import mage.filter.predicate.permanent.TappedPredicate; -import mage.game.permanent.token.MerfolkToken; -import mage.target.common.TargetControlledPermanent; - -import java.util.UUID; - -/** - * - * @author Loki - */ -public class SummonTheSchool extends CardImpl { - - private static final FilterControlledPermanent filter = new FilterControlledPermanent("untapped Merfolk you control"); - - static { - filter.add(Predicates.not(new TappedPredicate())); - filter.add(new SubtypePredicate("Merfolk")); - } - - public SummonTheSchool(UUID ownerId) { - super(ownerId, 42, "Summon the School", Rarity.UNCOMMON, new CardType[]{CardType.TRIBAL, CardType.SORCERY}, "{3}{W}"); - this.expansionSetCode = "LRW"; - this.subtype.add("Merfolk"); - - // Put two 1/1 blue Merfolk Wizard creature tokens onto the battlefield. - this.getSpellAbility().addEffect(new CreateTokenEffect(new MerfolkToken(), 2)); - // Tap four untapped Merfolk you control: Return Summon the School from your graveyard to your hand. - this.addAbility(new SimpleActivatedAbility(Zone.GRAVEYARD, new ReturnToHandSourceEffect(), new TapTargetCost(new TargetControlledPermanent(4, 4, filter, false)))); - } - - public SummonTheSchool(final SummonTheSchool card) { - super(card); - } - - @Override - public SummonTheSchool copy() { - return new SummonTheSchool(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.lorwyn; + +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.TapTargetCost; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.effects.common.ReturnToHandSourceEffect; +import mage.cards.CardImpl; +import mage.constants.Zone; +import mage.filter.common.FilterControlledPermanent; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.mageobject.SubtypePredicate; +import mage.filter.predicate.permanent.TappedPredicate; +import mage.game.permanent.token.MerfolkWizardToken; +import mage.target.common.TargetControlledPermanent; + +import java.util.UUID; + +/** + * + * @author Loki + */ +public class SummonTheSchool extends CardImpl { + + private static final FilterControlledPermanent filter = new FilterControlledPermanent("untapped Merfolk you control"); + + static { + filter.add(Predicates.not(new TappedPredicate())); + filter.add(new SubtypePredicate("Merfolk")); + } + + public SummonTheSchool(UUID ownerId) { + super(ownerId, 42, "Summon the School", Rarity.UNCOMMON, new CardType[]{CardType.TRIBAL, CardType.SORCERY}, "{3}{W}"); + this.expansionSetCode = "LRW"; + this.subtype.add("Merfolk"); + this.color.setWhite(true); + // Put two 1/1 blue Merfolk Wizard creature tokens onto the battlefield. + this.getSpellAbility().addEffect(new CreateTokenEffect(new MerfolkWizardToken(), 2)); + // Tap four untapped Merfolk you control: Return Summon the School from your graveyard to your hand. + this.addAbility(new SimpleActivatedAbility(Zone.GRAVEYARD, new ReturnToHandSourceEffect(), new TapTargetCost(new TargetControlledPermanent(4, 4, filter, false)))); + } + + public SummonTheSchool(final SummonTheSchool card) { + super(card); + } + + @Override + public SummonTheSchool copy() { + return new SummonTheSchool(this); + } +} diff --git a/Mage.Sets/src/mage/sets/mastersedition/ApprenticeWizard.java b/Mage.Sets/src/mage/sets/mastersedition/ApprenticeWizard.java new file mode 100644 index 00000000000..7269e5fe276 --- /dev/null +++ b/Mage.Sets/src/mage/sets/mastersedition/ApprenticeWizard.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.mastersedition; + +import java.util.UUID; +import mage.MageInt; +import mage.Mana; +import mage.abilities.Ability; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.mana.SimpleManaAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; + +/** + * + * @author fireshoes + */ +public class ApprenticeWizard extends CardImpl { + + public ApprenticeWizard(UUID ownerId) { + super(ownerId, 30, "Apprentice Wizard", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{1}{U}{U}"); + this.expansionSetCode = "MED"; + this.subtype.add("Human"); + this.subtype.add("Wizard"); + this.power = new MageInt(0); + this.toughness = new MageInt(1); + + // {U}, {tap}: Add {3} to your mana pool. + Ability ability = new SimpleManaAbility(Zone.BATTLEFIELD, Mana.ColorlessMana(3), new ManaCostsImpl("{U}")); + ability.addCost(new TapSourceCost()); + this.addAbility(ability); + } + + public ApprenticeWizard(final ApprenticeWizard card) { + super(card); + } + + @Override + public ApprenticeWizard copy() { + return new ApprenticeWizard(this); + } +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/masterseditioniii/ConcordantCrossroads.java b/Mage.Sets/src/mage/sets/masterseditioniii/ConcordantCrossroads.java new file mode 100644 index 00000000000..8a0a0ed3b7d --- /dev/null +++ b/Mage.Sets/src/mage/sets/masterseditioniii/ConcordantCrossroads.java @@ -0,0 +1,65 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.masterseditioniii; + +import java.util.UUID; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.common.continuous.GainAbilityAllEffect; +import mage.abilities.keyword.HasteAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterCreaturePermanent; + +/** + * + * @author fireshoes + */ +public class ConcordantCrossroads extends CardImpl { + + public ConcordantCrossroads(UUID ownerId) { + super(ownerId, 114, "Concordant Crossroads", Rarity.RARE, new CardType[]{CardType.ENCHANTMENT}, "{G}"); + this.expansionSetCode = "ME3"; + this.supertype.add("World"); + + // All creatures have haste. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, + new GainAbilityAllEffect(HasteAbility.getInstance(), Duration.WhileOnBattlefield, new FilterCreaturePermanent("Creatures")))); + } + + public ConcordantCrossroads(final ConcordantCrossroads card) { + super(card); + } + + @Override + public ConcordantCrossroads copy() { + return new ConcordantCrossroads(this); + } +} diff --git a/Mage.Sets/src/mage/sets/mercadianmasques/DiplomaticImmunity.java b/Mage.Sets/src/mage/sets/mercadianmasques/DiplomaticImmunity.java new file mode 100644 index 00000000000..b8bcda5eff6 --- /dev/null +++ b/Mage.Sets/src/mage/sets/mercadianmasques/DiplomaticImmunity.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.mercadianmasques; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.common.AttachEffect; +import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect; +import mage.abilities.keyword.EnchantAbility; +import mage.abilities.keyword.ShroudAbility; +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.TargetCreaturePermanent; + +/** + * + * @author fireshoes + */ +public class DiplomaticImmunity extends CardImpl { + + public DiplomaticImmunity(UUID ownerId) { + super(ownerId, 75, "Diplomatic Immunity", Rarity.COMMON, new CardType[]{CardType.ENCHANTMENT}, "{1}{U}"); + this.expansionSetCode = "MMQ"; + this.subtype.add("Aura"); + + // Enchant creature + TargetPermanent auraTarget = new TargetCreaturePermanent(); + this.getSpellAbility().addTarget(auraTarget); + this.getSpellAbility().addEffect(new AttachEffect(Outcome.AddAbility)); + Ability ability = new EnchantAbility(auraTarget.getTargetName()); + this.addAbility(ability); + + // Shroud + this.addAbility(ShroudAbility.getInstance()); + + // Enchanted creature has shroud. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(ShroudAbility.getInstance(), AttachmentType.AURA))); + } + + public DiplomaticImmunity(final DiplomaticImmunity card) { + super(card); + } + + @Override + public DiplomaticImmunity copy() { + return new DiplomaticImmunity(this); + } +} diff --git a/Mage.Sets/src/mage/sets/mirage/ChokingSands.java b/Mage.Sets/src/mage/sets/mirage/ChokingSands.java new file mode 100644 index 00000000000..5ecbfc820c2 --- /dev/null +++ b/Mage.Sets/src/mage/sets/mirage/ChokingSands.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.mirage; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class ChokingSands extends mage.sets.vintagemasters.ChokingSands { + + public ChokingSands(UUID ownerId) { + super(ownerId); + this.cardNumber = 11; + this.expansionSetCode = "MIR"; + } + + public ChokingSands(final ChokingSands card) { + super(card); + } + + @Override + public ChokingSands copy() { + return new ChokingSands(this); + } +} diff --git a/Mage.Sets/src/mage/sets/morningtide/StonybrookSchoolmaster.java b/Mage.Sets/src/mage/sets/morningtide/StonybrookSchoolmaster.java new file mode 100644 index 00000000000..691d5c6c073 --- /dev/null +++ b/Mage.Sets/src/mage/sets/morningtide/StonybrookSchoolmaster.java @@ -0,0 +1,65 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.morningtide; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.BecomesTappedTriggeredAbility; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.game.permanent.token.MerfolkWizardToken; + +/** + * + * @author fireshoes + */ +public class StonybrookSchoolmaster extends CardImpl { + + public StonybrookSchoolmaster(UUID ownerId) { + super(ownerId, 25, "Stonybrook Schoolmaster", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{2}{W}"); + this.expansionSetCode = "MOR"; + this.subtype.add("Merfolk"); + this.subtype.add("Wizard"); + this.power = new MageInt(1); + this.toughness = new MageInt(2); + + // Whenever Stonybrook Schoolmaster becomes tapped, you may put a 1/1 blue Merfolk Wizard creature token onto the battlefield. + this.addAbility(new BecomesTappedTriggeredAbility(new CreateTokenEffect(new MerfolkWizardToken()), true)); + } + + public StonybrookSchoolmaster(final StonybrookSchoolmaster card) { + super(card); + } + + @Override + public StonybrookSchoolmaster copy() { + return new StonybrookSchoolmaster(this); + } +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/morningtide/SupremeExemplar.java b/Mage.Sets/src/mage/sets/morningtide/SupremeExemplar.java new file mode 100644 index 00000000000..77b80554c8b --- /dev/null +++ b/Mage.Sets/src/mage/sets/morningtide/SupremeExemplar.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.morningtide; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.keyword.ChampionAbility; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.filter.common.FilterControlledPermanent; +import mage.filter.predicate.mageobject.SubtypePredicate; + +/** + * + * @author fireshoes + */ +public class SupremeExemplar extends CardImpl { + + private static final FilterControlledPermanent filter = new FilterControlledPermanent("Elemental"); + + static { + filter.add(new SubtypePredicate("Elemental")); + } + + public SupremeExemplar(UUID ownerId) { + super(ownerId, 53, "Supreme Exemplar", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{6}{U}"); + this.expansionSetCode = "MOR"; + this.subtype.add("Elemental"); + this.power = new MageInt(10); + this.toughness = new MageInt(10); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + + // Champion an Elemental + this.addAbility(new ChampionAbility(this, "Elemental")); + } + + public SupremeExemplar(final SupremeExemplar card) { + super(card); + } + + @Override + public SupremeExemplar copy() { + return new SupremeExemplar(this); + } +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/onslaught/AphettoAlchemist.java b/Mage.Sets/src/mage/sets/onslaught/AphettoAlchemist.java new file mode 100644 index 00000000000..de5eaff598c --- /dev/null +++ b/Mage.Sets/src/mage/sets/onslaught/AphettoAlchemist.java @@ -0,0 +1,86 @@ +/* + * 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.onslaught; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.UntapTargetEffect; +import mage.abilities.keyword.MorphAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.FilterPermanent; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.mageobject.CardTypePredicate; +import mage.target.TargetPermanent; + +/** + * + * @author fireshoes + */ +public class AphettoAlchemist extends CardImpl { + + private static final FilterPermanent filter = new FilterPermanent("artifact or creature"); + + static { + filter.add(Predicates.or( + new CardTypePredicate(CardType.ARTIFACT), + new CardTypePredicate(CardType.CREATURE))); + } + + public AphettoAlchemist(UUID ownerId) { + super(ownerId, 64, "Aphetto Alchemist", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{1}{U}"); + this.expansionSetCode = "ONS"; + this.subtype.add("Human"); + this.subtype.add("Wizard"); + this.power = new MageInt(1); + this.toughness = new MageInt(2); + + // {tap}: Untap target artifact or creature. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new UntapTargetEffect(), new TapSourceCost()); + ability.addTarget(new TargetPermanent(filter)); + this.addAbility(ability); + + // Morph {U} + this.addAbility(new MorphAbility(this, new ManaCostsImpl("{U}"))); + } + + public AphettoAlchemist(final AphettoAlchemist card) { + super(card); + } + + @Override + public AphettoAlchemist copy() { + return new AphettoAlchemist(this); + } +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/onslaught/AvenSoulgazer.java b/Mage.Sets/src/mage/sets/onslaught/AvenSoulgazer.java new file mode 100644 index 00000000000..10cdf3ad74e --- /dev/null +++ b/Mage.Sets/src/mage/sets/onslaught/AvenSoulgazer.java @@ -0,0 +1,126 @@ +/* + * 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.onslaught; + +import java.util.UUID; +import mage.MageInt; +import mage.MageObject; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.cards.Cards; +import mage.cards.CardsImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.other.FaceDownPredicate; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.players.Player; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author fireshoes + */ +public class AvenSoulgazer extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("face down creature"); + + static { + filter.add(new FaceDownPredicate()); + } + + public AvenSoulgazer(UUID ownerId) { + super(ownerId, 8, "Aven Soulgazer", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{3}{W}{W}"); + this.expansionSetCode = "ONS"; + this.subtype.add("Bird"); + this.subtype.add("Cleric"); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + + // {2}{W}: Look at target face-down creature. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new AvenSoulgazerLookFaceDownEffect(), new ManaCostsImpl("{2}{W}")); + ability.addTarget(new TargetCreaturePermanent(filter)); + this.addAbility(ability); + } + + public AvenSoulgazer(final AvenSoulgazer card) { + super(card); + } + + @Override + public AvenSoulgazer copy() { + return new AvenSoulgazer(this); + } +} + +class AvenSoulgazerLookFaceDownEffect extends OneShotEffect { + + public AvenSoulgazerLookFaceDownEffect() { + super(Outcome.Benefit); + this.staticText = "Look at target face-down creature"; + } + + public AvenSoulgazerLookFaceDownEffect(final AvenSoulgazerLookFaceDownEffect effect) { + super(effect); + } + + @Override + public AvenSoulgazerLookFaceDownEffect copy() { + return new AvenSoulgazerLookFaceDownEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player player = game.getPlayer(source.getControllerId()); + MageObject mageObject = game.getObject(source.getSourceId()); + if (player == null || mageObject == null) { + return false; + } + Permanent faceDownCreature = game.getPermanent(getTargetPointer().getFirst(game, source)); + if (faceDownCreature != null) { + Permanent copyFaceDown = faceDownCreature.copy(); + copyFaceDown.setFaceDown(false, game); + Cards cards = new CardsImpl(); + cards.add(copyFaceDown); + player.lookAtCards("face down card - " + mageObject.getName(), cards, game); + } else { + return false; + } + return true; + } +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/onslaught/DisruptivePitmage.java b/Mage.Sets/src/mage/sets/onslaught/DisruptivePitmage.java new file mode 100644 index 00000000000..471f920adf0 --- /dev/null +++ b/Mage.Sets/src/mage/sets/onslaught/DisruptivePitmage.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.onslaught; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.GenericManaCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.CounterUnlessPaysEffect; +import mage.abilities.keyword.MorphAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.target.TargetSpell; + +/** + * + * @author fireshoes + */ +public class DisruptivePitmage extends CardImpl { + + public DisruptivePitmage(UUID ownerId) { + super(ownerId, 81, "Disruptive Pitmage", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{2}{U}"); + this.expansionSetCode = "ONS"; + this.subtype.add("Human"); + this.subtype.add("Wizard"); + this.power = new MageInt(1); + this.toughness = new MageInt(1); + + // {tap}: Counter target spell unless its controller pays {1}. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CounterUnlessPaysEffect(new GenericManaCost(1)), new TapSourceCost()); + ability.addTarget(new TargetSpell()); + this.addAbility(ability); + + // Morph {U} + this.addAbility(new MorphAbility(this, new ManaCostsImpl("{U}"))); + } + + public DisruptivePitmage(final DisruptivePitmage card) { + super(card); + } + + @Override + public DisruptivePitmage copy() { + return new DisruptivePitmage(this); + } +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/onslaught/NosyGoblin.java b/Mage.Sets/src/mage/sets/onslaught/NosyGoblin.java new file mode 100644 index 00000000000..b82adb51100 --- /dev/null +++ b/Mage.Sets/src/mage/sets/onslaught/NosyGoblin.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.onslaught; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.SacrificeSourceCost; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.effects.common.DestroyTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.other.FaceDownPredicate; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author fireshoes + */ +public class NosyGoblin extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("face down creature"); + + static { + filter.add(new FaceDownPredicate()); + } + + public NosyGoblin(UUID ownerId) { + super(ownerId, 220, "Nosy Goblin", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{2}{R}"); + this.expansionSetCode = "ONS"; + this.subtype.add("Goblin"); + this.power = new MageInt(2); + this.toughness = new MageInt(1); + + // {tap}, Sacrifice Nosy Goblin: Destroy target face-down creature. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DestroyTargetEffect(), new TapSourceCost()); + ability.addCost(new SacrificeSourceCost()); + ability.addTarget(new TargetCreaturePermanent(filter)); + this.addAbility(ability); + } + + public NosyGoblin(final NosyGoblin card) { + super(card); + } + + @Override + public NosyGoblin copy() { + return new NosyGoblin(this); + } +} diff --git a/Mage.Sets/src/mage/sets/scourge/AphettoRunecaster.java b/Mage.Sets/src/mage/sets/scourge/AphettoRunecaster.java new file mode 100644 index 00000000000..ab5295e4c7d --- /dev/null +++ b/Mage.Sets/src/mage/sets/scourge/AphettoRunecaster.java @@ -0,0 +1,66 @@ +/* + * 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.scourge; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.TurnedFaceUpAllTriggeredAbility; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.FilterPermanent; + +/** + * + * @author fireshoes + */ +public class AphettoRunecaster extends CardImpl { + + public AphettoRunecaster(UUID ownerId) { + super(ownerId, 28, "Aphetto Runecaster", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{3}{U}"); + this.expansionSetCode = "SCG"; + this.subtype.add("Human"); + this.subtype.add("Wizard"); + this.power = new MageInt(2); + this.toughness = new MageInt(3); + + // Whenever a permanent is turned face up, you may draw a card. + this.addAbility(new TurnedFaceUpAllTriggeredAbility(Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(1), new FilterPermanent("a permanent"), false, true)); + } + + public AphettoRunecaster(final AphettoRunecaster card) { + super(card); + } + + @Override + public AphettoRunecaster copy() { + return new AphettoRunecaster(this); + } +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/scourge/MischievousQuanar.java b/Mage.Sets/src/mage/sets/scourge/MischievousQuanar.java new file mode 100644 index 00000000000..8c26c18b5ab --- /dev/null +++ b/Mage.Sets/src/mage/sets/scourge/MischievousQuanar.java @@ -0,0 +1,95 @@ +/* + * 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.scourge; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.common.TurnedFaceUpSourceTriggeredAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.CopyTargetSpellEffect; +import mage.abilities.effects.common.continuous.BecomesFaceDownCreatureEffect; +import mage.abilities.keyword.MorphAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.FilterSpell; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.mageobject.CardTypePredicate; +import mage.target.TargetSpell; + +/** + * + * @author fireshoes + */ +public class MischievousQuanar extends CardImpl { + + private static final FilterSpell filter = new FilterSpell("instant or sorcery spell"); + + static { + filter.add(Predicates.or( + new CardTypePredicate(CardType.INSTANT), + new CardTypePredicate(CardType.SORCERY))); + } + + public MischievousQuanar(UUID ownerId) { + super(ownerId, 42, "Mischievous Quanar", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{4}{U}"); + this.expansionSetCode = "SCG"; + this.subtype.add("Beast"); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + // {3}{U}{U}: Turn Mischievous Quanar face down. + Effect effect = new BecomesFaceDownCreatureEffect(Duration.Custom, BecomesFaceDownCreatureEffect.FaceDownType.MANUAL); + effect.setText("Turn Michievous Quanar face down. (It becomes a 2/2 creature.)"); + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, effect, new ManaCostsImpl("{3}{U}{U}"))); + + // Morph {1}{U}{U} + this.addAbility(new MorphAbility(this, new ManaCostsImpl("{1}{U}{U}"))); + + // When Mischievous Quanar is turned face up, copy target instant or sorcery spell. You may choose new targets for that copy. + Effect effect2 = new CopyTargetSpellEffect(); + effect2.setText("copy target instant or sorcery spell. You may choose new targets for that copy"); + Ability ability = new TurnedFaceUpSourceTriggeredAbility(effect2); + ability.addTarget(new TargetSpell(filter)); + this.addAbility(ability); + } + + public MischievousQuanar(final MischievousQuanar card) { + super(card); + } + + @Override + public MischievousQuanar copy() { + return new MischievousQuanar(this); + } +} diff --git a/Mage.Sets/src/mage/sets/stronghold/ConstantMists.java b/Mage.Sets/src/mage/sets/stronghold/ConstantMists.java new file mode 100644 index 00000000000..a35e1777b99 --- /dev/null +++ b/Mage.Sets/src/mage/sets/stronghold/ConstantMists.java @@ -0,0 +1,66 @@ +/* + * 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.stronghold; + +import java.util.UUID; +import mage.abilities.costs.common.SacrificeTargetCost; +import mage.abilities.effects.common.PreventAllDamageByAllEffect; +import mage.abilities.keyword.BuybackAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.filter.common.FilterControlledLandPermanent; +import mage.target.common.TargetControlledPermanent; + +/** + * + * @author fireshoes + */ +public class ConstantMists extends CardImpl { + + public ConstantMists(UUID ownerId) { + super(ownerId, 54, "Constant Mists", Rarity.UNCOMMON, new CardType[]{CardType.INSTANT}, "{1}{G}"); + this.expansionSetCode = "STH"; + + // Buyback-Sacrifice a land. + this.addAbility(new BuybackAbility(new SacrificeTargetCost(new TargetControlledPermanent(new FilterControlledLandPermanent("a land"))))); + + // Prevent all combat damage that would be dealt this turn. + this.getSpellAbility().addEffect(new PreventAllDamageByAllEffect(Duration.EndOfTurn, true)); + } + + public ConstantMists(final ConstantMists card) { + super(card); + } + + @Override + public ConstantMists copy() { + return new ConstantMists(this); + } +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/thedark/ApprenticeWizard.java b/Mage.Sets/src/mage/sets/thedark/ApprenticeWizard.java new file mode 100644 index 00000000000..2c669936879 --- /dev/null +++ b/Mage.Sets/src/mage/sets/thedark/ApprenticeWizard.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.thedark; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class ApprenticeWizard extends mage.sets.mastersedition.ApprenticeWizard { + + public ApprenticeWizard(UUID ownerId) { + super(ownerId); + this.cardNumber = 20; + this.expansionSetCode = "DRK"; + this.rarity = Rarity.RARE; + } + + public ApprenticeWizard(final ApprenticeWizard card) { + super(card); + } + + @Override + public ApprenticeWizard copy() { + return new ApprenticeWizard(this); + } +} diff --git a/Mage.Sets/src/mage/sets/vintagemasters/ChokingSands.java b/Mage.Sets/src/mage/sets/vintagemasters/ChokingSands.java new file mode 100644 index 00000000000..a7c36337cac --- /dev/null +++ b/Mage.Sets/src/mage/sets/vintagemasters/ChokingSands.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.vintagemasters; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.DestroyTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterLandPermanent; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.mageobject.SubtypePredicate; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.players.Player; +import mage.target.common.TargetLandPermanent; + +/** + * + * @author fireshoes + */ +public class ChokingSands extends CardImpl { + + private static final FilterLandPermanent filter = new FilterLandPermanent("non-Swamp"); + + static { + filter.add(Predicates.not(new SubtypePredicate("Swamp"))); + } + + public ChokingSands(UUID ownerId) { + super(ownerId, 109, "Choking Sands", Rarity.COMMON, new CardType[]{CardType.SORCERY}, "{1}{B}{B}"); + this.expansionSetCode = "VMA"; + + // Destroy target non-Swamp land. + this.getSpellAbility().addEffect(new DestroyTargetEffect()); + this.getSpellAbility().addTarget(new TargetLandPermanent(filter)); + + // If that land was nonbasic, Choking Sands deals 2 damage to the land's controller. + this.getSpellAbility().addEffect(new ChokingSandsEffect()); + } + + public ChokingSands(final ChokingSands card) { + super(card); + } + + @Override + public ChokingSands copy() { + return new ChokingSands(this); + } +} + +class ChokingSandsEffect extends OneShotEffect { + + public ChokingSandsEffect() { + super(Outcome.Damage); + this.staticText = "If that land was nonbasic, Choking Sands deals 2 damage to the land's controller"; + } + + public ChokingSandsEffect(final ChokingSandsEffect effect) { + super(effect); + } + + @Override + public ChokingSandsEffect copy() { + return new ChokingSandsEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Permanent permanent = (Permanent) game.getLastKnownInformation(source.getFirstTarget(), Zone.BATTLEFIELD); + if (permanent != null && !permanent.getSupertype().contains("Basic")) { + Player player = game.getPlayer(permanent.getControllerId()); + if (player != null) { + player.damage(2, source.getSourceId(), game, false, true); + return true; + } + } + return false; + } +} \ No newline at end of file diff --git a/Mage/src/mage/game/permanent/token/MerfolkToken.java b/Mage/src/mage/game/permanent/token/MerfolkWizardToken.java similarity index 67% rename from Mage/src/mage/game/permanent/token/MerfolkToken.java rename to Mage/src/mage/game/permanent/token/MerfolkWizardToken.java index ee97ff82a86..ad83a93e282 100644 --- a/Mage/src/mage/game/permanent/token/MerfolkToken.java +++ b/Mage/src/mage/game/permanent/token/MerfolkWizardToken.java @@ -1,21 +1,21 @@ -package mage.game.permanent.token; - -import mage.MageInt; -import mage.constants.CardType; - -/** - * - * @author Loki - */ -public class MerfolkToken extends Token { - - public MerfolkToken() { - super("Merfolk", "1/1 blue Merfolk Wizard creature token"); - cardType.add(CardType.CREATURE); - color.setBlue(true); - subtype.add("Merfolk"); - subtype.add("Wizard"); - power = new MageInt(1); - toughness = new MageInt(1); - } -} +package mage.game.permanent.token; + +import mage.MageInt; +import mage.constants.CardType; + +/** + * + * @author Loki + */ +public class MerfolkWizardToken extends Token { + + public MerfolkWizardToken() { + super("Merfolk Wizard", "1/1 blue Merfolk Wizard creature token"); + cardType.add(CardType.CREATURE); + color.setBlue(true); + subtype.add("Merfolk"); + subtype.add("Wizard"); + power = new MageInt(1); + toughness = new MageInt(1); + } +} diff --git a/Utils/known-sets.txt b/Utils/known-sets.txt index 3397c42b57c..28a4e10182a 100644 --- a/Utils/known-sets.txt +++ b/Utils/known-sets.txt @@ -8,6 +8,7 @@ Avacyn Restored|avacynrestored| Betrayers of Kamigawa|betrayersofkamigawa| Born of the Gods|bornofthegods| Champions of Kamigawa|championsofkamigawa| +Clash Pack|clashpack| Classic Sixth Edition|classicsixthedition| Coldsnap|coldsnap| Commander 2013 Edition|commander2013| diff --git a/Utils/mtg-cards-data.txt b/Utils/mtg-cards-data.txt index 00a8867a887..f290c3fef15 100644 --- a/Utils/mtg-cards-data.txt +++ b/Utils/mtg-cards-data.txt @@ -1,4 +1,4 @@ -Ardent Plea|Alara Reborn|1|U|{1}{W}{U}|Enchantment|||Exalted (Whenever a creature you control attacks alone, that creature gets +1/+1 until end of turn.)$Cascade (When you cast this spell, exile cards from the top of your library until you exile a nonland card that costs less. You may cast it without paying its mana cost. Put the exiled cards on the bottom in a random order.)| +Ardent Plea|Alara Reborn|1|U|{1}{W}{U}|Enchantment|||Exalted (Whenever a creature you control attacks alone, that creature gets +1/+1 until end of turn.)$Cascade (When you cast this spell, exile cards from the top of your library until you exile a nonland card that costs less. You may cast it without paying its mana cost. Put the exiled cards on the bottom in a random order.)| Aven Mimeomancer|Alara Reborn|2|R|{1}{W}{U}|Creature - Bird Wizard|3|1|Flying$At the beginning of your upkeep, you may put a feather counter on target creature. If you do, that creature is 3/1 and has flying for as long as it has a feather counter on it.| Ethercaste Knight|Alara Reborn|3|C|{W}{U}|Artifact Creature - Human Knight|1|3|Exalted (Whenever a creature you control attacks alone, that creature gets +1/+1 until end of turn.)| Ethersworn Shieldmage|Alara Reborn|4|C|{1}{W}{U}|Artifact Creature - Vedalken Wizard|2|2|Flash$When Ethersworn Shieldmage enters the battlefield, prevent all damage that would be dealt to artifact creatures this turn.| @@ -5889,6 +5889,8 @@ Hordeling Outburst|Friday Night Magic|178|U|{1}{R}{R}|Sorcery|||Put three 1/1 re Suspension Field|Friday Night Magic|179|U|{1}{W}|Enchantment|||When Suspension Field enters the battlefield, you may exile target creature with toughness 3 or greater until Suspension Field leaves the battlefield. (That creature returns under its owner's control.)| Abzan Beastmaster|Friday Night Magic|180|U|{2}{G}|Creature - Hound Shaman|2|1|At the beginning of your upkeep, draw a card if you control the creature with the greatest toughness or tied for the greatest toughness.| Frost Walker|Friday Night Magic|181|U|{1}{U}|Creature - Elemental|4|1|When Frost Walker becomes the target of a spell or ability, sacrifice it.| +Path to Exile|Friday Night Magic|182|U|{W}|Instant|||Exile target creature. Its controller may search his or her library for a basic land card, put that card onto the battlefield tapped, then shuffle his or her library.| +Serum Visions|Friday Night Magic|183|C|{U}|Sorcery|||Draw a card.$Scry 2. (To scry 2, look at the top two cards of your library, then put any number of them on the bottom of your library and the rest on top in any order.)| Bladewing the Risen|From the Vault: Dragons|1|R|{3}{B}{B}{R}{R}|Legendary Creature - Zombie Dragon|4|4|Flying$When Bladewing the Risen enters the battlefield, you may return target Dragon permanent card from your graveyard to the battlefield.${B}{R}: Dragon creatures get +1/+1 until end of turn.| Nicol Bolas|From the Vault: Dragons|10|R|{2}{U}{U}{B}{B}{R}{R}|Legendary Creature - Elder Dragon|7|7|Flying$At the beginning of your upkeep, sacrifice Nicol Bolas unless you pay {U}{B}{R}.$Whenever Nicol Bolas deals damage to an opponent, that player discards his or her hand.| Niv-Mizzet, the Firemind|From the Vault: Dragons|11|R|{2}{U}{U}{R}{R}|Legendary Creature - Dragon Wizard|4|4|Flying$Whenever you draw a card, Niv-Mizzet, the Firemind deals 1 damage to target creature or player.${tap}: Draw a card.| @@ -7878,6 +7880,10 @@ Island|Judge Promo|90|L||Land|||({T}: Add {U} to your mana pool.)| Swamp|Judge Promo|91|L||Land|||({T}: Add {B} to your mana pool.)| Mountain|Judge Promo|92|L||Land|||({T}: Add {R} to your mana pool.)| Forest|Judge Promo|93|L||Land|||({T}: Add {G} to your mana pool.)| +Damnation|Judge Promo|94|R|{2}{B}{B}|Sorcery|||Destroy all creatures. They can't be regenerated.| +Dualcaster Mage|Judge Promo|95|R|{1}{R}{R}|Creature - Human Wizard|2|2|Flash$When Dualcaster Mage enters the battlefield, copy target instant or sorcery spell. You may choose new targets for the copy.| +Feldon of the Third Path|Judge Promo|96|M|{1}{R}{R}|Legendary Creature - Human Artificer|2|3|{2}{R}, {tap}: Put a token onto the battlefield that's a copy of target creature card in your graveyard, except it's an artifact in addition to its other types. It gains haste. Sacrifice it at the beginning of the next end step.| +Ravages of War|Judge Promo|97|R|{3}{W}|Sorcery|||Destroy all lands.| Ancestor's Chosen|Judgment|1|U|{5}{W}{W}|Creature - Human Cleric|4|4|First strike (This creature deals combat damage before creatures without first strike.)$When Ancestor's Chosen enters the battlefield, you gain 1 life for each card in your graveyard.| Funeral Pyre|Judgment|10|C|{W}|Instant|||Exile target card from a graveyard. Its owner puts a 1/1 white Spirit creature token with flying onto the battlefield.| Spellgorger Barbarian|Judgment|100|C|{3}{R}|Creature - Human Nightmare Barbarian|3|1|When Spellgorger Barbarian enters the battlefield, discard a card at random.$When Spellgorger Barbarian leaves the battlefield, draw a card.| @@ -25676,6 +25682,46 @@ Mercurial Pretender|Prerelease Events|84|Special|{4}{U}|Creature - Shapeshifter| Indulgent Tormentor|Prerelease Events|85|Special|{3}{B}{B}|Creature - Demon|5|3|Flying$At the beginning of your upkeep, draw a card unless target opponent sacrifices a creature or pays 3 life.| Siege Dragon|Prerelease Events|86|Special|{5}{R}{R}|Creature - Dragon|5|5|Flying$When Siege Dragon enters the battlefield, destroy all Walls your opponents control.$Whenever Siege Dragon attacks, if defending player controls no Walls, it deals 2 damage to each creature without flying that player controls.| Phytotitan|Prerelease Events|87|Special|{4}{G}{G}|Creature - Plant Elemental|7|2|When Phytotitan dies, return it to the battlefield tapped under its owner's control at the beginning of his or her next upkeep.| +Abzan Ascendancy|Prerelease Events|88|Special|{W}{B}{G}|Enchantment|||When Abzan Ascendancy enters the battlefield, put a +1/+1 counter on each creature you control.$Whenever a nontoken creature you control dies, put a 1/1 white Spirit creature token with flying onto the battlefield.| +Anafenza, the Foremost|Prerelease Events|89|Special|{W}{B}{G}|Legendary Creature - Human Soldier|4|4|Whenever Anafenza, the Foremost attacks, put a +1/+1 counter on another target tapped creature you control.$If a creature card would be put into an opponent's graveyard from anywhere, exile it instead.| +Ankle Shanker|Prerelease Events|90|Special|{2}{R}{W}{B}|Creature - Goblin Berserker|2|2|Haste$Whenever Ankle Shanker attacks, creatures you control gain first strike and deathtouch until end of turn.| +Avalanche Tusker|Prerelease Events|91|Special|{2}{G}{U}{R}|Creature - Elephant Warrior|6|4|Whenever Avalanche Tusker attacks, target creature defending player controls blocks it this combat if able.| +Bloodsoaked Champion|Prerelease Events|92|Special|{B}|Creature - Human Warrior|2|1|Bloodsoaked Champion can't block.$Raid - {1}{B}: Return Bloodsoaked Champion from your graveyard to the battlefield. Activate this ability only if you attacked with a creature this turn.| +Butcher of the Horde|Prerelease Events|93|Special|{1}{R}{W}{B}|Creature - Demon|5|4|Flying$Sacrifice another creature: Butcher of the Horde gains your choice of vigilance, lifelink, or haste until end of turn.| +Crackling Doom|Prerelease Events|94|Special|{R}{W}{B}|Instant|||Crackling Doom deals 2 damage to each opponent. Each opponent sacrifices a creature with the greatest power among creatures he or she controls.| +Crater's Claws|Prerelease Events|95|Special|{X}{R}|Sorcery|||Crater's Claws deals X damage to target creature or player.$Ferocious - Crater's Claws deals X plus 2 damage to that creature or player instead if you control a creature with power 4 or greater.| +Deflecting Palm|Prerelease Events|96|Special|{R}{W}|Instant|||The next time a source of your choice would deal damage to you this turn, prevent that damage. If damage is prevented this way, Deflecting Palm deals that much damage to that source's controller.| +Dig Through Time|Prerelease Events|97|Special|{6}{U}{U}|Instant|||Delve (Each card you exile from your graveyard while casting this spell pays for {1}.)$Look at the top seven cards of your library. Put two of them into your hand and the rest on the bottom of your library in any order.| +Dragon-Style Twins|Prerelease Events|98|Special|{3}{R}{R}|Creature - Human Monk|3|3|Double strike$Prowess (Whenever you cast a noncreature spell, this creature gets +1/+1 until end of turn.)| +Duneblast|Prerelease Events|99|Special|{4}{W}{B}{G}|Sorcery|||Choose up to one creature. Destroy the rest.| +Flying Crane Technique|Prerelease Events|100|Special|{3}{U}{R}{W}|Instant|||Untap all creatures you control. They gain flying and double strike until end of turn.| +Grim Haruspex|Prerelease Events|101|Special|{2}{B}|Creature - Human Wizard|3|2|Morph {B} (You may cast this card face down as a 2/2 creature for {3}. Turn it face up any time for its morph cost.)$Whenever another nontoken creature you control dies, draw a card.| +Hardened Scales|Prerelease Events|102|Special|{G}|Enchantment|||If one or more +1/+1 counters would be placed on a creature you control, that many plus one +1/+1 counters are placed on it instead.| +Herald of Anafenza|Prerelease Events|103|Special|{W}|Creature - Human Soldier|1|2|Outlast {2}{W} ({2}{W}, {tap}: Put a +1/+1 counter on this creature. Outlast only as a sorcery.)$Whenever you activate Herald of Anafenza's outlast ability, put a 1/1 white Warrior creature token onto the battlefield.| +High Sentinels of Arashin|Prerelease Events|104|Special|{3}{W}|Creature - Bird Soldier|3|4|Flying$High Sentinels of Arashin gets +1/+1 for each other creature you control with a +1/+1 counter on it.${3}{W}: Put a +1/+1 counter on target creature.| +Icy Blast|Prerelease Events|105|Special|{X}{U}|Instant|||Tap X target creatures.$Ferocious - If you control a creature with power 4 or greater, those creatures don't untap during their controllers' next untap steps.| +Ivorytusk Fortress|Prerelease Events|106|Special|{2}{W}{B}{G}|Creature - Elephant|5|7|Untap each creature you control with a +1/+1 counter on it during each other player's untap step.| +Jeering Instigator|Prerelease Events|107|Special|{1}{R}|Creature - Goblin Rogue|2|1|Morph {2}{R} (You may cast this card face down as a 2/2 creature for {3}. Turn it face up any time for its morph cost.)$When Jeering Instigator is turned face up, if it's your turn, gain control of another target creature until end of turn. Untap that creature. It gains haste until end of turn.| +Jeskai Ascendancy|Prerelease Events|108|Special|{U}{R}{W}|Enchantment|||Whenever you cast a noncreature spell, creatures you control get +1/+1 until end of turn. Untap those creatures.$Whenever you cast a noncreature spell, you may draw a card. If you do, discard a card.| +Kheru Lich Lord|Prerelease Events|109|Special|{3}{B}{G}{U}|Creature - Zombie Wizard|4|4|At the beginning of your upkeep, you may pay {2}{B}. If you do, return a creature card at random from your graveyard to the battlefield. It gains flying, trample, and haste. Exile that card at the beginning of your next end step. If it would leave the battlefield, exile it instead of putting it anywhere else.| +Mardu Ascendancy|Prerelease Events|110|Special|{R}{W}{B}|Enchantment|||Whenever a nontoken creature you control attacks, put a 1/1 red Goblin creature token onto the battlefield tapped and attacking.$Sacrifice Mardu Ascendancy: Creatures you control get +0/+3 until end of turn.| +Master of Pearls|Prerelease Events|111|Special|{1}{W}|Creature - Human Monk|2|2|Morph {3}{W}{W} (You may cast this card face down as a 2/2 creature for {3}. Turn it face up any time for its morph cost.)$When Master of Pearls is turned face up, creatures you control get +2/+2 until end of turn.| +Narset, Enlightened Master|Prerelease Events|112|Special|{3}{U}{R}{W}|Legendary Creature - Human Monk|3|2|First strike, hexproof$Whenever Narset, Enlightened Master attacks, exile the top four cards of your library. Until end of turn, you may cast noncreature cards exiled with Narset this turn without paying their mana costs.| +Necropolis Fiend|Prerelease Events|113|Special|{7}{B}{B}|Creature - Demon|4|5|Delve (Each card you exile from your graveyard while casting this spell pays for {1}.)$Flying${X}, {tap}, Exile X cards from your graveyard: Target creature gets -X/-X until end of turn.| +Rakshasa Vizier|Prerelease Events|114|Special|{2}{B}{G}{U}|Creature - Cat Demon|4|4|Whenever one or more cards are put into exile from your graveyard, put that many +1/+1 counters on Rakshasa Vizier.| +Rattleclaw Mystic|Prerelease Events|115|Special|{1}{G}|Creature - Human Shaman|2|1|{tap}: Add {G}, {U}, or {R} to your mana pool.$Morph {2} (You may cast this card face down as a 2/2 creature for {3}. Turn it face up any time for its morph cost.)$When Rattleclaw Mystic is turned face up, add {G}{U}{R} to your mana pool.| +Sage of the Inward Eye|Prerelease Events|116|Special|{2}{U}{R}{W}|Creature - Djinn Wizard|3|4|Flying$Whenever you cast a noncreature spell, creatures you control gain lifelink until end of turn.| +Sidisi, Brood Tyrant|Prerelease Events|117|Special|{1}{B}{G}{U}|Legendary Creature - Naga Shaman|3|3|Whenever Sidisi, Brood Tyrant enters the battlefield or attacks, put the top three cards of your library into your graveyard.$Whenever one or more creature cards are put into your graveyard from your library, put a 2/2 black Zombie creature token onto the battlefield.| +Siege Rhino|Prerelease Events|118|Special|{1}{W}{B}{G}|Creature - Rhino|4|5|Trample$When Siege Rhino enters the battlefield, each opponent loses 3 life and you gain 3 life.| +Sultai Ascendancy|Prerelease Events|119|Special|{B}{G}{U}|Enchantment|||At the beginning of your upkeep, look at the top two cards of your library. Put any number of them into your graveyard and the rest back on top of your library in any order.| +Surrak Dragonclaw|Prerelease Events|120|Special|{2}{G}{U}{R}|Legendary Creature - Human Warrior|6|6|Flash$Surrak Dragonclaw can't be countered.$Creature spells you control can't be countered.$Other creatures you control have trample.| +Temur Ascendancy|Prerelease Events|121|Special|{G}{U}{R}|Enchantment|||Creatures you control have haste.$Whenever a creature with power 4 or greater enters the battlefield under your control, you may draw a card.| +Thousand Winds|Prerelease Events|122|Special|{4}{U}{U}|Creature - Elemental|5|6|Flying$Morph {5}{U}{U} (You may cast this card face down as a 2/2 creature for {3}. Turn it face up any time for its morph cost.)$When Thousand Winds is turned face up, return all other tapped creatures to their owners' hands.| +Trail of Mystery|Prerelease Events|123|Special|{1}{G}|Enchantment|||Whenever a face-down creature enters the battlefield under your control, you may search your library for a basic land card, reveal it, put it into your hand, then shuffle your library.$Whenever a permanent you control is turned face up, if it's a creature, it gets +2/+2 until end of turn.| +Trap Essence|Prerelease Events|124|Special|{G}{U}{R}|Instant|||Counter target creature spell. Put two +1/+1 counters on up to one target creature.| +Utter End|Prerelease Events|125|Special|{2}{W}{B}|Instant|||Exile target nonland permanent.| +Villainous Wealth|Prerelease Events|126|Special|{X}{B}{G}{U}|Sorcery|||Target opponent exiles the top X cards of his or her library. You may cast any number of nonland cards with converted mana cost X or less from among them without paying their mana costs.| +Zurgo Helmsmasher|Prerelease Events|127|Special|{2}{R}{W}{B}|Legendary Creature - Orc Warrior|7|2|Haste$Zurgo Helmsmasher attacks each combat if able.$Zurgo Helmsmasher has indestructible as long as it's your turn.$Whenever a creature dealt damage by Zurgo Helmsmasher this turn dies, put a +1/+1 counter on Zurgo Helmsmasher.| Scion of Ugin|Dragons of Tarkir|1|U|{6}|Creature - Dragon Spirit|4|4|Flying| Anafenza, Kin-Tree Spirit|Dragons of Tarkir|2|R|{W}{W}|Legendary Creature - Spirit Soldier|2|2|Whenever another nontoken creature enters the battlefield under your control, bolster 1. (Choose a creature with the least toughness among creatures you control and put a +1/+1 counter on it.)| Arashin Foremost|Dragons of Tarkir|3|R|{1}{W}{W}|Creature - Human Warrior|2|2|Double strike$Whenever Arashin Foremost enters the battlefield or attacks, another target Warrior creature you control gains double strike until end of turn.| @@ -26189,41 +26235,33 @@ Sickle Ripper|Modern Masters 2015 Edition|96|C|{1}{B}|Creature - Elemental Warri Sign in Blood|Modern Masters 2015 Edition|97|C|{B}{B}|Sorcery|||Target player draws two cards and loses 2 life.| Spread the Sickness|Modern Masters 2015 Edition|98|U|{4}{B}|Sorcery|||Destroy target creature, then proliferate. (You choose any number of permanents and/or players with counters on them, then give each another counter of a kind already there.)| Surgical Extraction|Modern Masters 2015 Edition|99|R|{BP}|Instant|||({BP} can be paid with either {B} or 2 life.)$Choose target card in a graveyard other than a basic land card. Search its owner's graveyard, hand, and library for any number of cards with the same name as that card and exile them. Then that player shuffles his or her library.| -Charging Griffin|Magic Origins|?|C|{3}{W}{3}{W}|Creature - Griffin|2|22|2|Flying$Whenever Charging Griffin attacks, it gets +1/+1 until end of turn.$Flying$Whenever Charging Griffin attacks, it gets +1/+1 until end of turn.| -Mighty Leap|Magic Origins|?|C|{1}{W}{1}{W}|Instant|||Target creature gets +2/+2 and gains flying until end of turn.$Target creature gets +2/+2 and gains flying until end of turn.| -Yoked Ox|Magic Origins|?|C|{W}{W}|Creature - Ox|0|40|4|| Akroan Jailer|Magic Origins|1|C|{W}|Creature - Human Soldier|1|1|{2}{W}, {T}: Tap target creature.| +Charging Griffin|Magic Origins|9|C|{3}{W}{3}{W}|Creature - Griffin|2|22|2|Flying$Whenever Charging Griffin attacks, it gets +1/+1 until end of turn.$Flying$Whenever Charging Griffin attacks, it gets +1/+1 until end of turn.| Grasp of the Hieromancer|Magic Origins|15|C|{1}{W}|Enchantment - Aura|||Enchant creature$Enchanted creature gets +1/+1 and has "Whenever this creature attacks, tap target creature defending player controls."| Heavy Infantry|Magic Origins|18|C|{4}{W}|Creature - Human Soldier|3|4|When Heavy Infantry enters the battlefield, tap target creature an opponent controls.| Hixus, Prison Warden|Magic Origins|19|R|{3}{W}{W}{3}{W}{W}|Legendary Creature - Human Soldier|4|44|4|Flash$Whenever a creature deals combat damage to you, if Hixus, Prison Warden entered the battlefield this turn, exile that creature until Hixus leaves the battlefield.$Flash$Whenever a creature deals combat damage to you, if Hixus, Prison Warden entered the battlefield this turn, exile that creature until Hixus leaves the battlefield.| Gideon, Battle-Forged|Magic Origins|23|M||Planeswalker - Gideon|3|+2: Up to one target creature an opponent controls attacks Gideon, Battle-Forged during its controller's next turn if able.$+1: Until your next turn, target creature gains indestructible. Untap that creature.$0: Until end of turn, Gideon, Battle-Forged becomes a 4/4 Human Soldier creature with indestructible that's still a planeswalker. Prevent all damage that would be dealt to him this turn.| Kytheon, Hero of Akros|Magic Origins|23|M|{W}|Legendary Creature - Human Soldier|2|1|At end of combat, if Kytheon, Hero of Akros and at least two other creatures attacked this combat, exile Kytheon, then return him to the battlefield transformed under his owner's control.${2}{W}: Kytheon gains indestructible until end of turn.| +Mighty Leap|Magic Origins|26|C|{1}{W}{1}{W}|Instant|||Target creature gets +2/+2 and gains flying until end of turn.$Target creature gets +2/+2 and gains flying until end of turn.| Sentinel of the Eternal Watch|Magic Origins|30|U|{5}{W}|Creature - Giant Soldier|4|6|Vigilance (Attacking doesn't cause this creature to tap.)$At the beginning of combat on each opponent's turn, tap target creature that player controls.| Valor in Akros|Magic Origins|39|U|{3}{W}|Enchantment|||Whenever a creature enters the battlefield under your control, creatures you control get +1/+1 until end of turn.| -Aegis Angel|Magic Origins|273|R|{4}{W}{W}{4}{W}{W}|Creature - Angel|5|55|5|Flying$When Aegis Angel enters the battlefield, another target permanent gains indestructible for as long as you control Aegis Angel.$Flying$When Aegis Angel enters the battlefield, another target permanent gains indestructible for as long as you control Aegis Angel.| -Divine Verdict|Magic Origins|274|C|{3}{W}{3}{W}|Instant|||Destroy target attacking or blocking creature.$Destroy target attacking or blocking creature.| -Eagle of the Watch|Magic Origins|275|C|{2}{W}|Creature - Bird|2|1|Flying, vigilance| -Serra Angel|Magic Origins|276|U|{3}{W}{W}{3}{W}{W}|Creature - Angel|4|44|4|Flying$Vigilance$Flying$Vigilance| -Claustrophobia|Magic Origins|?|C|{1}{U}{U}{1}{U}{U}|Enchantment - Aura|||$Enchant creature$When Claustrophobia enters the battlefield, tap enchanted creature.$Enchanted creature doesn't untap during its controller's untap step.$Enchant creature$When Claustrophobia enters the battlefield, tap enchanted creature.$Enchanted creature doesn't untap during its controller's untap step.| -Disperse|Magic Origins|?|C|{1}{U}{1}{U}|Instant|||Return target nonland permanent to its owner's hand.$Return target nonland permanent to its owner's hand.| +Yoked Ox|Magic Origins|42|C|{W}{W}|Creature - Ox|0|40|4|| +Claustrophobia|Magic Origins|50|C|{1}{U}{U}{1}{U}{U}|Enchantment - Aura|||$Enchant creature$When Claustrophobia enters the battlefield, tap enchanted creature.$Enchanted creature doesn't untap during its controller's untap step.$Enchant creature$When Claustrophobia enters the battlefield, tap enchanted creature.$Enchanted creature doesn't untap during its controller's untap step.| +Disperse|Magic Origins|54|C|{1}{U}{1}{U}|Instant|||Return target nonland permanent to its owner's hand.$Return target nonland permanent to its owner's hand.| Displacement Wave|Magic Origins|?|?mtg-set-icon mtg-set-magic-origins-unknown|{X}{U}{U}{X}{U}{U}|Sorcery|||Return all nonland permanents with converted mana cost X or less to their owners' hands.$Return all nonland permanents with converted mana cost X or less to their owners' hands.| -Maritime Guard|Magic Origins|?|C|{1}{U}{1}{U}|Creature - Merfolk Soldier|1|31|3|| Mizzium Meddler|Magic Origins|?|R|{2}{U}{2}{U}|Creature - Vedalken Wizard|1|41|4|Flash$When Mizzium Meddler enters the battlefield, change a target of target spell or ability to Mizzium Meddler.$Flash$When Mizzium Meddler enters the battlefield, change a target of target spell or ability to Mizzium Meddler.| -Scrapskin Drake|Magic Origins|?|C|{2}{U}{2}{U}|Creature - Zombie Drake|2|32|3|Flying$Scrapskin Drake can block only creatures with flying.$Flying$Scrapskin Drake can block only creatures with flying.| -Tower Geist|Magic Origins|?|U|{3}{U}{3}{U}|Creature - Spirit|2|22|2|Flying$When Tower Geist enters the battlefield, look at the top two cards of your library. Put one of them into your hand and the other into your graveyard.$Flying$When Tower Geist enters the battlefield, look at the top two cards of your library. Put one of them into your hand and the other into your graveyard.| Hydrolash|Magic Origins|59|U|{2}{U}|Instant|||Attacking creatures get -2/-0 until end of turn.$Draw a card.| Jace, Telepath Unbound|Magic Origins|60|M||Planeswalker - Jace|55|+1: Up to one target creature gets -2/-0 until your next turn.$-3: You may cast target instant or sorcery card from your graveyard this turn. If that card would be put into your graveyard this turn, exile it instead.$-9: You get an emblem with "Whenever you cast a spell, target opponent puts the top five cards of his or her library into his or her graveyard". $+1: Up to one target creature gets -2/-0 until your next turn.$-3: You may cast target instant or sorcery card from your graveyard this turn. If that card would be put into your graveyard this turn, exile it instead.$-9: You get an emblem with "Whenever you cast a spell, target opponent puts the top five cards of his or her library into his or her graveyard". | Jace, Vryn's Prodigy|Magic Origins|60|M|{1}{U}{1}{U}|Legendary Creature - Human Wizard|0|20|2|{T}: Draw a card, then discard a card. If there are five or more cards in your graveyard, exile Jace, Vryn''s Prodigy, then return him to the battefield transformed under his owner's control. ${T}: Draw a card, then discard a card. If there are five or more cards in your graveyard, exile Jace, Vryn''s Prodigy, then return him to the battefield transformed under his owner's control. | Jhessian Thief|Magic Origins|62|U|{2}{U}|Creature - Human Rogue|1|3|Prowess (Whenever you cast a noncreature spell, this creature gets +1/+1 until end of turn.)$Whenever Jhessian Thief deals combat damage to a player, draw a card.| -Ringwarden Owl|Magic Origins|068|C|{3}{U}{U}|Creature - Bird|3|3|Flying (This creature can't be blocked except by creatures with flying or reach.)$Prowess (Whenever you cast a noncreature spell, this creature gets +1/+1 until end of turn.)| +Maritime Guard|Magic Origins|63|C|{1}{U}{1}{U}|Creature - Merfolk Soldier|1|31|3|| +Ringwarden Owl|Magic Origins|68|C|{3}{U}{U}|Creature - Bird|3|3|Flying (This creature can't be blocked except by creatures with flying or reach.)$Prowess (Whenever you cast a noncreature spell, this creature gets +1/+1 until end of turn.)| +Scrapskin Drake|Magic Origins|69|C|{2}{U}{2}{U}|Creature - Zombie Drake|2|32|3|Flying$Scrapskin Drake can block only creatures with flying.$Flying$Scrapskin Drake can block only creatures with flying.| Separatist Voidmage|Magic Origins|72|C|{3}{U}|Creature - Human Wizard|2|2|When Separatist Voidmage enters the battlefield, you may return target creature to its owner's hand.| Sphinx's Tutelage|Magic Origins|76|U|{2}{U}|Enchantment|||Whenever you draw a card, target opponent puts the top two cards of his or her library into his or her graveyard. If they're both nonland cards that share a color, repeat this process.${5}{U}: Draw a card, then discard a card.| -Into the Void|Magic Origins|277|U|{3}{U}{3}{U}|Sorcery|||Return up to two target creatures to their owners' hands.$Return up to two target creatures to their owners' hands.| -Mahamoti Djinn|Magic Origins|278|R|{4}{U}{U}{4}{U}{U}|Creature - Djinn|5|65|6|Flying$Flying| -Weave Fate|Magic Origins|279|C|{3}{U}{3}{U}|Instant|||Draw two cards.$Draw two cards.| -Catacomb Slug|Magic Origins|?|C|{4}{B}{4}{B}|Creature - Slug|2|62|6|| -Cruel Revival|Magic Origins|?|C|{4}{B}{4}{B}|Instant|||Destroy target non-Zombie creature. It can't be regenerated. Return up to one target Zombie card from your graveyard to your hand.$Destroy target non-Zombie creature. It can't be regenerated. Return up to one target Zombie card from your graveyard to your hand.| -Weight of the Underworld|Magic Origins|?|C|{3}{B}{3}{B}|Enchantment - Aura|||Enchant creature$Enchanted creature gets -3/-2.$Enchant creature$Enchanted creature gets -3/-2.| +Tower Geist|Magic Origins|80|U|{3}{U}{3}{U}|Creature - Spirit|2|22|2|Flying$When Tower Geist enters the battlefield, look at the top two cards of your library. Put one of them into your hand and the other into your graveyard.$Flying$When Tower Geist enters the battlefield, look at the top two cards of your library. Put one of them into your hand and the other into your graveyard.| +Catacomb Slug|Magic Origins|86|C|{4}{B}{4}{B}|Creature - Slug|2|62|6|| +Cruel Revival|Magic Origins|88|C|{4}{B}{4}{B}|Instant|||Destroy target non-Zombie creature. It can't be regenerated. Return up to one target Zombie card from your graveyard to your hand.$Destroy target non-Zombie creature. It can't be regenerated. Return up to one target Zombie card from your graveyard to your hand.| Deadbridge Shaman|Magic Origins|91|C|{2}{B}|Creature - Elf Shaman|3|1|When Deadbridge Shaman dies, target opponent discards a card.| Eyeblight Assassin|Magic Origins|95|C|{2}{B}|Creature - Elf Assassin|2|2|When Eyeblight Assassin enters the battlefield, target creature an opponent controls gets -1/-1 until end of turn.| Infernal Scarring|Magic Origins|102|C|{1}{B}|Enchantment - Aura|||Enchant creature$Enchanted creature gets +2/+0 and has "When this creature dies, draw a card."| @@ -26233,14 +26271,8 @@ Malakir Cullblade|Magic Origins|108|U|{1}{B}|Creature - Vampire Warrior|1|1|When Rabid Bloodsucker|Magic Origins|113|C|{4}{B}|Creature - Vampire|3|2|Flying$When Rabid Bloodsucker enters the battlefield, each player loses 2 life.| Reave Soul|Magic Origins|115|C|{1}{B}|Sorcery|||Destroy target creature with power 3 or less.| Shambling Ghoul|Magic Origins|119|C|{1}{B}|Creature - Zombie|2|3|Shambling Ghoul enters the battlefield tapped.| -Flesh to Dust|Magic Origins|280|C|{3}{B}{B}{3}{B}{B}|Instant|||Destroy target creature. It can't be regenerated.$Destroy target creature. It can't be regenerated.| -Mind Rot|Magic Origins|281|C|{2}{B}{2}{B}|Sorcery|||Target player discards two cards.$Target player discards two cards.| -Nightmare|Magic Origins|282|R|{5}{B}{5}{B}|Creature - Nightmare Horse|0|00|0|Flying$Nightmare's power and toughness are each equal to the number of Swamps you control.$Flying$Nightmare's power and toughness are each equal to the number of Swamps you control.| -Sengir Vampire|Magic Origins|283|U|{3}{B}{B}{3}{B}{B}|Creature - Vampire|4|44|4|Flying$Whenever a creature dealt damage by Sengir Vampire this turn dies, put a +1/+1 counter on Sengir Vampire.$Flying$Whenever a creature dealt damage by Sengir Vampire this turn dies, put a +1/+1 counter on Sengir Vampire.| -Act of Treason|Magic Origins|?|C|{2}{R}{2}{R}|Sorcery|||Gain control of target creature until end of turn. Untap that creature. It gains haste until end of turn.$Gain control of target creature until end of turn. Untap that creature. It gains haste until end of turn.| -Cobblebrute|Magic Origins|?|C|{3}{R}{3}{R}|Creature - Elemental|5|25|2|| -Fiery Conclusion|Magic Origins|?|C|{1}{R}{1}{R}|Instant|||As an additional cost to cast Fiery Conclusion, sacrifice a creature.$Fiery Conclusion deals 5 damage to target creature.$As an additional cost to cast Fiery Conclusion, sacrifice a creature.$Fiery Conclusion deals 5 damage to target creature.| -Titan's Strength|Magic Origins|?|C|{R}{R}|Instant|||Target creature gets +3/+1 until end of turn. Scry 1.$Target creature gets +3/+1 until end of turn. Scry 1.| +Weight of the Underworld|Magic Origins|126|C|{3}{B}{3}{B}|Enchantment - Aura|||Enchant creature$Enchanted creature gets -3/-2.$Enchant creature$Enchanted creature gets -3/-2.| +Act of Treason|Magic Origins|129|C|{2}{R}{2}{R}|Sorcery|||Gain control of target creature until end of turn. Untap that creature. It gains haste until end of turn.$Gain control of target creature until end of turn. Untap that creature. It gains haste until end of turn.| Avaricious Dragon|Magic Origins|131|M|{2}{R}{R}|Creature - Dragon|4|4|Flying$At the beginning of your draw step, draw an additional card.$At the beginning of your end step, discard your hand.| Bellows Lizard|Magic Origins|132|C|{R}{R}|Creature - Lizard|1|11|1|{1}{R}: Bellows Lizard gets +1/+0 until end of turn.${1}{R}: Bellows Lizard gets +1/+0 until end of turn.| Boggart Brute|Magic Origins|133|C|{2}{R}|Creature - Goblin Warrior|3|2|Menace (This creature can't be blocked except by two or more creatures.)| @@ -26248,19 +26280,20 @@ Chandra, Fire of Kaladesh|Magic Origins|135|M|{1}{R}{R}{1}{R}{R}|Legendary Creat Chandra, Roaring Flame|Magic Origins|135|M||Planeswalker - Chandra|44|+1: Chandra, Roaring Flame deals 2 damage to target player.$-2: Chandra, Roaring Flame deals 2 damage to target creature.$-7: Chandra, Roaring Flame deals 6 damage to each opponent. Each player dealt damage this way gets an emblem with "At the beginning of your upkeep, this emblem deals 3 damage to you."$+1: Chandra, Roaring Flame deals 2 damage to target player.$-2: Chandra, Roaring Flame deals 2 damage to target creature.$-7: Chandra, Roaring Flame deals 6 damage to each opponent. Each player dealt damage this way gets an emblem with "At the beginning of your upkeep, this emblem deals 3 damage to you."| Chandra's Fury|Magic Origins|136|C|{4}{R}{4}{R}|Instant|||Chandra's Fury deals 4 damage to target player and 1 damage to each creature that player controls.$Chandra's Fury deals 4 damage to target player and 1 damage to each creature that player controls.| Chandra's Ignition|Magic Origins|137|R|{3}{R}{R}|Sorcery|||Target creature you control deals damage equal to its power to each other creature and each opponent.| +Cobblebrute|Magic Origins|138|C|{3}{R}{3}{R}|Creature - Elemental|5|25|2|| Enthralling Victor|Magic Origins|142|U|{3}{R}|Creature - Human Warrior|3|2|When Enthralling Victor enters the battlefield, gain control of target creature an opponent controls with power 2 or less until end of turn. Untap that creature. It gains haste until end of turn.| +Fiery Conclusion|Magic Origins|144|C|{1}{R}{1}{R}|Instant|||As an additional cost to cast Fiery Conclusion, sacrifice a creature.$Fiery Conclusion deals 5 damage to target creature.$As an additional cost to cast Fiery Conclusion, sacrifice a creature.$Fiery Conclusion deals 5 damage to target creature.| Lightning Javelin|Magic Origins|153|C|{3}{R}|Sorcery|||Lightning Javelin deals 3 damage to target creature or player. Scry 1.| Pia and Kiran Nalaar|Magic Origins|157|R|{2}{R}{R}|Legendary Creature - Human Artificer|2|2|When Pia and Kiran Nalaar enters the battlefield put 2 1/1 colorless Thopter artifact creature tokens with flying onto the battlefield.${2}{R}, Sacrifice an artifact: Pia and Kiran Nalaar deals 2 damage to target creature or player.| Ravaging Blaze|Magic Origins|159|U|{X}{R}{R}|Instant|||Ravaging Blaze deals X damage to target creature. $Spell mastery — If there are two or more instant and/or sorcery cards in your graveyard, Ravaging Blaze also deals X damage to that creature's controller.| Seismic Elemental|Magic Origins|161|U|{3}{R}{R}|Creature - Elemental|4|4|When Seismic Elemental enters the battlefield, creatures without flying can't block this turn.| Subterranean Scout|Magic Origins|164|C|{1}{R}|Creature - Goblin Scout|2|1|When Subterranean Scout enters the battlefield, target creature with power 2 or less can't be blocked this turn.| +Titan's Strength|Magic Origins|166|C|{R}{R}|Instant|||Target creature gets +3/+1 until end of turn. Scry 1.$Target creature gets +3/+1 until end of turn. Scry 1.| Volcanic Rambler|Magic Origins|167|C|{5}{R}|Creature - Elemental|6|4|{2}{R}: Volcanic Rambler deals 1 damage to target player.| -Fiery Hellhound|Magic Origins|284|C|{1}{R}{R}{1}{R}{R}|Creature - Elemental Hound|2|22|2|{R}: Fiery Hellhound gets +1/+0 until end of turn.${R}: Fiery Hellhound gets +1/+0 until end of turn.| -Shivan Dragon|Magic Origins|285|R|{4}{R}{R}{4}{R}{R}|Creature - Dragon|5|55|5|Flying${R}: Shivan Dragon gets +1/+0 until end of turn.$Flying${R}: Shivan Dragon gets +1/+0 until end of turn.| -Elvish Visionary|Magic Origins|?|C|{1}{G}{1}{G}|Creature - Elf Shaman|1|11|1|When Elvish Visionary enters the battlefield, draw a card.$When Elvish Visionary enters the battlefield, draw a card.| -Leaf Gilder|Magic Origins|?|C|{1}{G}{1}{G}|Creature - Elf Druid|2|12|1|{T}: Add {G} to your mana pool.${T}: Add {G} to your mana pool.| +Elvish Visionary|Magic Origins|175|C|{1}{G}{1}{G}|Creature - Elf Shaman|1|11|1|When Elvish Visionary enters the battlefield, draw a card.$When Elvish Visionary enters the battlefield, draw a card.| +Leaf Gilder|Magic Origins|184|C|{1}{G}{1}{G}|Creature - Elf Druid|2|12|1|{T}: Add {G} to your mana pool.${T}: Add {G} to your mana pool.| Titanic Growth|Magic Origins|?|C|{1}{G}{1}{G}|Instant|||Target creature gets +4/+4 until end of turn.$Target creature gets +4/+4 until end of turn.| -Vastwood Gorger|Magic Origins|?|C|{5}{G}{5}{G}|Creature - Wurm|5|65|6|| +Vastwood Gorger|Magic Origins|204|C|{5}{G}{5}{G}|Creature - Wurm|5|65|6|| Yeva's Forcemage|Magic Origins|?|C|{2}{G}{2}{G}|Creature - Elf Shaman|2|22|2|When Yeva's Forcemage enters the battlefield, target creature gets +2/+2 until end of turn.$When Yeva's Forcemage enters the battlefield, target creature gets +2/+2 until end of turn.| Conclave Naturalists|Magic Origins|171|U|{4}{G}|Creature - Dryad|4|4|When Conclave Naturalists enters the battlefield, you may destroy target artifact or enchantment.| Dwynen, Gilt-Leaf Daen|Magic Origins|172|R|{2}{G}{G}|Legendary Creature - Elf Warrior|3|4|Reach$Other Elf creatures you control get +1/+1.$Whenever Dwynen, Gilt-Leaf Daen attacks, you gain 1 life for each attacking Elf you control.| @@ -26270,15 +26303,28 @@ Joraga Invocation|Magic Origins|183|U|{4}{G}{G}|Sorcery|||Each creature you cont Mantle of Webs|Magic Origins|187|C|{1}{G}|Enchantment - Aura|||Enchant Creature$Enchanted creature gets +1/+3 and has reach.| Nissa, Sage Animist|Magic Origins|189|M||Planeswalker - Nissa|33|+1: Reveal the top card of your library. If it's a land card, put it onto the battlefield. Otherwise, put it into your hand.$-2: Put a legendary 4/4 green Elemental creature token named Ashaya, the Awoken World onto the battlefield.$-7: Untap up to six target lands. They become 6/6 Elemental creatures. They're still lands.$+1: Reveal the top card of your library. If it's a land card, put it onto the battlefield. Otherwise, put it into your hand.$-2: Put a legendary 4/4 green Elemental creature token named Ashaya, the Awoken World onto the battlefield.$-7: Untap up to six target lands. They become 6/6 Elemental creatures. They're still lands.| Nissa, Vastwood Seer|Magic Origins|189|M|{2}{G}{2}{G}|Legendary Creature - Elf Scout|2|22|2|When Nissa, Vastwood Seer enters the battlefield, you may search your library for a basic Forest card, reveal it, put it into your hand, then shuffle your library.$Whenever a land enters the battlefield under your control, if you control seven or more lands, exile Nissa, then return her to the battlefield transformed under her owner's control.$When Nissa, Vastwood Seer enters the battlefield, you may search your library for a basic Forest card, reveal it, put it into your hand, then shuffle your library.$Whenever a land enters the battlefield under your control, if you control seven or more lands, exile Nissa, then return her to the battlefield transformed under her owner's control.| +Zendikar Incarnate|Magic Origins|219|U|{2}{R}{G}|Creature - Elemental|0|4|Zendikar Incarnate's power is equal to the amount of lands you control.| +Gold-Forged Sentinel|Magic Origins|226|U|{6}{6}|Artifact Creature - Chimera|4|44|4|Flying$Flying| +Jayemdae Tome|Magic Origins|231|U|{4}{4}|Artifact|||{4}, {T}: Draw a card.${4}, {T}: Draw a card.| +Meteorite|Magic Origins|233|U|{5}{5}|Artifact|||When Meteorite enters the battlefield, it deals 2 damage to target creature or player.${T}: Add one mana of any color to your mana pool.$When Meteorite enters the battlefield, it deals 2 damage to target creature or player.${T}: Add one mana of any color to your mana pool.| +Runed Servitor|Magic Origins|238|U|{2}{2}|Artifact Creature - Construct|2|22|2|When Runed Servitor dies, each player draws a card.$When Runed Servitor dies, each player draws a card.| +Veteran's Sidearm|Magic Origins|242|C|{2}|Artifact - Equipment|||Equipped creature gets +1/+1.$Equip {1}| +Aegis Angel|Magic Origins|273|R|{4}{W}{W}{4}{W}{W}|Creature - Angel|5|55|5|Flying$When Aegis Angel enters the battlefield, another target permanent gains indestructible for as long as you control Aegis Angel.$Flying$When Aegis Angel enters the battlefield, another target permanent gains indestructible for as long as you control Aegis Angel.| +Divine Verdict|Magic Origins|274|C|{3}{W}{3}{W}|Instant|||Destroy target attacking or blocking creature.$Destroy target attacking or blocking creature.| +Eagle of the Watch|Magic Origins|275|C|{2}{W}|Creature - Bird|2|1|Flying, vigilance| +Serra Angel|Magic Origins|276|U|{3}{W}{W}{3}{W}{W}|Creature - Angel|4|44|4|Flying$Vigilance$Flying$Vigilance| +Into the Void|Magic Origins|277|U|{3}{U}{3}{U}|Sorcery|||Return up to two target creatures to their owners' hands.$Return up to two target creatures to their owners' hands.| +Mahamoti Djinn|Magic Origins|278|R|{4}{U}{U}{4}{U}{U}|Creature - Djinn|5|65|6|Flying$Flying| +Weave Fate|Magic Origins|279|C|{3}{U}{3}{U}|Instant|||Draw two cards.$Draw two cards.| +Flesh to Dust|Magic Origins|280|C|{3}{B}{B}{3}{B}{B}|Instant|||Destroy target creature. It can't be regenerated.$Destroy target creature. It can't be regenerated.| +Mind Rot|Magic Origins|281|C|{2}{B}{2}{B}|Sorcery|||Target player discards two cards.$Target player discards two cards.| +Nightmare|Magic Origins|282|R|{5}{B}{5}{B}|Creature - Nightmare Horse|0|00|0|Flying$Nightmare's power and toughness are each equal to the number of Swamps you control.$Flying$Nightmare's power and toughness are each equal to the number of Swamps you control.| +Sengir Vampire|Magic Origins|283|U|{3}{B}{B}{3}{B}{B}|Creature - Vampire|4|44|4|Flying$Whenever a creature dealt damage by Sengir Vampire this turn dies, put a +1/+1 counter on Sengir Vampire.$Flying$Whenever a creature dealt damage by Sengir Vampire this turn dies, put a +1/+1 counter on Sengir Vampire.| +Fiery Hellhound|Magic Origins|284|C|{1}{R}{R}{1}{R}{R}|Creature - Elemental Hound|2|22|2|{R}: Fiery Hellhound gets +1/+0 until end of turn.${R}: Fiery Hellhound gets +1/+0 until end of turn.| +Shivan Dragon|Magic Origins|285|R|{4}{R}{R}{4}{R}{R}|Creature - Dragon|5|55|5|Flying${R}: Shivan Dragon gets +1/+0 until end of turn.$Flying${R}: Shivan Dragon gets +1/+0 until end of turn.| Plummet|Magic Origins|286|C|{1}{G}{1}{G}|Instant|||Destroy target creature with flying.$Destroy target creature with flying.| Prized Unicorn|Magic Origins|287|U|{3}{G}{3}{G}|Creature - Unicorn|2|22|2|All creatures able to block Prized Unicorn do so.$All creatures able to block Prized Unicorn do so.| Terra Stomper|Magic Origins|288|R|{3}{G}{G}{G}{3}{G}{G}{G}|Creature - Beast|8|88|8|Terra Stomper can't be countered.$Trample$Terra Stomper can't be countered.$Trample| -Zendikar Incarnate|Magic Origins|219|U|{2}{R}{G}|Creature - Elemental|0|4|Zendikar Incarnate's power is equal to the amount of lands you control.| -Meteorite|Magic Origins|?|U|{5}{5}|Artifact|||When Meteorite enters the battlefield, it deals 2 damage to target creature or player.${T}: Add one mana of any color to your mana pool.$When Meteorite enters the battlefield, it deals 2 damage to target creature or player.${T}: Add one mana of any color to your mana pool.| -Gold-Forged Sentinel|Magic Origins|?|U|{6}{6}|Artifact Creature - Chimera|4|44|4|Flying$Flying| -Runed Servitor|Magic Origins|?|U|{2}{2}|Artifact Creature - Construct|2|22|2|When Runed Servitor dies, each player draws a card.$When Runed Servitor dies, each player draws a card.| -Jayemdae Tome|Magic Origins|?|U|{4}{4}|Artifact|||{4}, {T}: Draw a card.${4}, {T}: Draw a card.| -Veteran's Sidearm|Magic Origins|242|C|{2}|Artifact - Equipment|||Equipped creature gets +1/+1.$Equip {1}| Ambush Commander|Duel Decks: Anthology, Elves vs. Goblins|1|R|{3}{G}{G}|Creature - Elf|2|2|Forests you control are 1/1 green Elf creatures that are still lands.${1}{G}, Sacrifice an Elf: Target creature gets +3/+3 until end of turn.| Lys Alana Huntmaster|Duel Decks: Anthology, Elves vs. Goblins|10|C|{2}{G}{G}|Creature - Elf Warrior|3|3|Whenever you cast an Elf spell, you may put a 1/1 green Elf Warrior creature token onto the battlefield.| Stonewood Invoker|Duel Decks: Anthology, Elves vs. Goblins|11|C|{1}{G}|Creature - Elf Mutant|2|2|{7}{G}: Stonewood Invoker gets +5/+5 until end of turn.| @@ -26914,4 +26960,16 @@ Mountain|Tempest Remastered|265|L||Basic Land - Mountain|||R| Forest|Tempest Remastered|266|L||Basic Land - Forest|||G| Forest|Tempest Remastered|267|L||Basic Land - Forest|||G| Forest|Tempest Remastered|268|L||Basic Land - Forest|||G| -Forest|Tempest Remastered|269|L||Basic Land - Forest|||G| \ No newline at end of file +Forest|Tempest Remastered|269|L||Basic Land - Forest|||G| +Prognostic Sphinx|Clash Pack|1|Special|{3}{U}{U}|Creature - Sphinx|3|5|Flying$Discard a card: Prognostic Sphinx gains hexproof until end of turn. Tap it.$Whenever Prognostic Sphinx attacks, scry 3. (Look at the top three cards of your library, then put any number of them on the bottom of your library and the rest on top in any order.)| +Fated Intervention|Clash Pack|2|Special|{2}{G}{G}{G}|Insant|||Put two 3/3 green Centaur enchantment creature tokens onto the battlefield. If it's your turn, scry 2.| +Font of Fertility|Clash Pack|3|Special|{G}|Enchantment|||{1}{G}, Sacrifice Font of Fertility: Search your library for a basic land card, put it onto the battlefield tapped, then shuffle your library.| +Hydra Broodmaster|Clash Pack|4|Special|{4}{G}{G}|Creature - Hydra|7|7|{X}{X}{G}: Monstrosity X. (If this creature isn't monstrous, put X +1/+1 counters on it and it becomes monstrous.)$When Hydra Broodmaster becomes monstrous, put X X/X green Hydra creature tokens onto the battlefield.| +Prophet of Kruphix|Clash Pack|5|Special|{3}{U}{G}|Creature - Human Wizard|2|3|Untap all creatures and lands you control during each other player's untap step.$You may cast creature cards as though they had flash.| +Temple of Mystery|Clash Pack|6|Special||Land|||Temple of Mystery enters the battlefield tapped.$When Temple of Mystery enters the battlefield, scry 1. (Look at the top card of your library. You may put that card on the bottom of your library.)${tap}: Add {G} or {U} to your mana pool.| +Necropolis Fiend|Clash Pack|7|Special|{7}{B}{B}|Creature - Demon|4|5|Delve (Each card you exile from your graveyard while casting this spell pays for {1}.)$Flying${X}, {tap}, Exile X cards from your graveyard: Target creature gets -X/-X until end of turn.| +Hero's Downfall|Clash Pack|8|Special|{1}{B}{B}|Instant|||Destroy target creature or planeswalker.| +Sultai Ascendancy|Clash Pack|9|Special|{B}{G}{U}|Enchantment|||At the beginning of your upkeep, look at the top two cards of your library. Put any number of them into your graveyard and the rest back on top of your library in any order.| +Reaper of the Wilds|Clash Pack|10|Special|{2}{B}{G}|Creature - Gorgon|4|5|Whenever another creature dies, scry 1. (Look at the top card of your library. You may put that card on the bottom of your library.)${B}: Reaper of the Wilds gains deathtouch until end of turn.${1}{G}: Reaper of the Wilds gains hexproof until end of turn.| +Whip of Erebos|Clash Pack|11|Special|{2}{B}{B}|Legendary Enchantment Artifact|||Creatures you control have lifelink.${2}{B}{B}, {tap}: Return target creature card from your graveyard to the battlefield. It gains haste. Exile it at the beginning of the next end step. If it would leave the battlefield, exile it instead of putting it anywhere else. Activate this ability only any time you could cast a sorcery.| +Courser of Kruphix|Clash Pack|12|Special|{1}{G}{G}|Enchantment Creature Centaur|2|4|Play with the top card of your library revealed.$You may play the top card of your library if it's a land card.$Whenever a land enters the battlefield under your control, you gain 1 life.| \ No newline at end of file diff --git a/Utils/mtg-sets-data.txt b/Utils/mtg-sets-data.txt index 5d9cfa41e0a..c1af58d3ac4 100644 --- a/Utils/mtg-sets-data.txt +++ b/Utils/mtg-sets-data.txt @@ -21,6 +21,7 @@ Beatdown Box Set|BTD| Born of the Gods|BNG| Champions of Kamigawa|CHK| Chronicles|CHR| +Clash Pack|CLASH| Commander 2013 Edition|C13| Commander 2014 Edition|C14| Conflux|CON| From 993db1b04da80d46bcf591874078879bb37314e0 Mon Sep 17 00:00:00 2001 From: fireshoes Date: Mon, 22 Jun 2015 20:15:53 -0500 Subject: [PATCH 10/18] Updated mtg-cards-data with new spoilers and cleaned up a double power/toughness/loyalty issue in the file. (maybe script problem?) Removed set color flag from a couple merfolk cards I had changed the token info in. --- .../src/mage/sets/lorwyn/Benthicore.java | 1 - .../src/mage/sets/lorwyn/SummonTheSchool.java | 2 +- Utils/mtg-cards-data.txt | 107 ++++++++++-------- 3 files changed, 61 insertions(+), 49 deletions(-) diff --git a/Mage.Sets/src/mage/sets/lorwyn/Benthicore.java b/Mage.Sets/src/mage/sets/lorwyn/Benthicore.java index 13503b6c747..bf454890b0d 100644 --- a/Mage.Sets/src/mage/sets/lorwyn/Benthicore.java +++ b/Mage.Sets/src/mage/sets/lorwyn/Benthicore.java @@ -67,7 +67,6 @@ public class Benthicore extends CardImpl { super(ownerId, 53, "Benthicore", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{6}{U}"); this.expansionSetCode = "LRW"; this.subtype.add("Elemental"); - this.color.setBlue(true); this.power = new MageInt(5); this.toughness = new MageInt(5); diff --git a/Mage.Sets/src/mage/sets/lorwyn/SummonTheSchool.java b/Mage.Sets/src/mage/sets/lorwyn/SummonTheSchool.java index ca8c1add579..a06e49f902a 100644 --- a/Mage.Sets/src/mage/sets/lorwyn/SummonTheSchool.java +++ b/Mage.Sets/src/mage/sets/lorwyn/SummonTheSchool.java @@ -61,7 +61,7 @@ public class SummonTheSchool extends CardImpl { super(ownerId, 42, "Summon the School", Rarity.UNCOMMON, new CardType[]{CardType.TRIBAL, CardType.SORCERY}, "{3}{W}"); this.expansionSetCode = "LRW"; this.subtype.add("Merfolk"); - this.color.setWhite(true); + // Put two 1/1 blue Merfolk Wizard creature tokens onto the battlefield. this.getSpellAbility().addEffect(new CreateTokenEffect(new MerfolkWizardToken(), 2)); // Tap four untapped Merfolk you control: Return Summon the School from your graveyard to your hand. diff --git a/Utils/mtg-cards-data.txt b/Utils/mtg-cards-data.txt index f290c3fef15..52bea82e0b2 100644 --- a/Utils/mtg-cards-data.txt +++ b/Utils/mtg-cards-data.txt @@ -26236,95 +26236,108 @@ Sign in Blood|Modern Masters 2015 Edition|97|C|{B}{B}|Sorcery|||Target player dr Spread the Sickness|Modern Masters 2015 Edition|98|U|{4}{B}|Sorcery|||Destroy target creature, then proliferate. (You choose any number of permanents and/or players with counters on them, then give each another counter of a kind already there.)| Surgical Extraction|Modern Masters 2015 Edition|99|R|{BP}|Instant|||({BP} can be paid with either {B} or 2 life.)$Choose target card in a graveyard other than a basic land card. Search its owner's graveyard, hand, and library for any number of cards with the same name as that card and exile them. Then that player shuffles his or her library.| Akroan Jailer|Magic Origins|1|C|{W}|Creature - Human Soldier|1|1|{2}{W}, {T}: Tap target creature.| -Charging Griffin|Magic Origins|9|C|{3}{W}{3}{W}|Creature - Griffin|2|22|2|Flying$Whenever Charging Griffin attacks, it gets +1/+1 until end of turn.$Flying$Whenever Charging Griffin attacks, it gets +1/+1 until end of turn.| +Blessed Spirits|Magic Origins|7|U|{2}{W}|Creature - Spirit|2|2|Flying$Whenever you cast an enchantment spell, put a +1/+1 counter on Blessed Spirits.| +Charging Griffin|Magic Origins|9|C|{3}{W}|Creature - Griffin|2|2|Flying$Whenever Charging Griffin attacks, it gets +1/+1 until end of turn.$Flying$Whenever Charging Griffin attacks, it gets +1/+1 until end of turn.| +Enshrouding Mist|Magic Origins|13|C|{W}|Instant|||Target creature gets +1/+1 until end of turn. Prevent all damage that would dealt to it this turn. If it's renowned, untap it.| Grasp of the Hieromancer|Magic Origins|15|C|{1}{W}|Enchantment - Aura|||Enchant creature$Enchanted creature gets +1/+1 and has "Whenever this creature attacks, tap target creature defending player controls."| Heavy Infantry|Magic Origins|18|C|{4}{W}|Creature - Human Soldier|3|4|When Heavy Infantry enters the battlefield, tap target creature an opponent controls.| -Hixus, Prison Warden|Magic Origins|19|R|{3}{W}{W}{3}{W}{W}|Legendary Creature - Human Soldier|4|44|4|Flash$Whenever a creature deals combat damage to you, if Hixus, Prison Warden entered the battlefield this turn, exile that creature until Hixus leaves the battlefield.$Flash$Whenever a creature deals combat damage to you, if Hixus, Prison Warden entered the battlefield this turn, exile that creature until Hixus leaves the battlefield.| +Hixus, Prison Warden|Magic Origins|19|R|{3}{W}{W}|Legendary Creature - Human Soldier|4|4|Flash$Whenever a creature deals combat damage to you, if Hixus, Prison Warden entered the battlefield this turn, exile that creature until Hixus leaves the battlefield.$Flash$Whenever a creature deals combat damage to you, if Hixus, Prison Warden entered the battlefield this turn, exile that creature until Hixus leaves the battlefield.| +Knight of the Pilgrim's Road|Magic Origins|20|C|{2}{W}|Creature - Human Knight|3|2|Renown 1 (When this creature deals combat damage to a player, if it isn't renowned, put a +1/+1 counter on it and it becomes renowned.)| Gideon, Battle-Forged|Magic Origins|23|M||Planeswalker - Gideon|3|+2: Up to one target creature an opponent controls attacks Gideon, Battle-Forged during its controller's next turn if able.$+1: Until your next turn, target creature gains indestructible. Untap that creature.$0: Until end of turn, Gideon, Battle-Forged becomes a 4/4 Human Soldier creature with indestructible that's still a planeswalker. Prevent all damage that would be dealt to him this turn.| Kytheon, Hero of Akros|Magic Origins|23|M|{W}|Legendary Creature - Human Soldier|2|1|At end of combat, if Kytheon, Hero of Akros and at least two other creatures attacked this combat, exile Kytheon, then return him to the battlefield transformed under his owner's control.${2}{W}: Kytheon gains indestructible until end of turn.| -Mighty Leap|Magic Origins|26|C|{1}{W}{1}{W}|Instant|||Target creature gets +2/+2 and gains flying until end of turn.$Target creature gets +2/+2 and gains flying until end of turn.| +Mighty Leap|Magic Origins|26|C|{1}{W}|Instant|||Target creature gets +2/+2 and gains flying until end of turn.$Target creature gets +2/+2 and gains flying until end of turn.| +Patron of the Valiant|Magic Origins|28|U|{3}{W}{W}|4|4|Flying$When Patron of the Valiant enters the battlefield, put a +1/+1 counter on each creature you control with a +1/+1 counter on it.| +Relic Hunter|Magic Origins|29|R|{1}{W}|Creature - Human|2|2|Renown 1 (When this creature deals combat damage to a player, put a +1/+1 counter on it and it becomes renowned.)$When Relic Hunter becomes renowned, you may search your library for an Equipment card, reveal it, put it in your hand, then shuffle your library.| Sentinel of the Eternal Watch|Magic Origins|30|U|{5}{W}|Creature - Giant Soldier|4|6|Vigilance (Attacking doesn't cause this creature to tap.)$At the beginning of combat on each opponent's turn, tap target creature that player controls.| Valor in Akros|Magic Origins|39|U|{3}{W}|Enchantment|||Whenever a creature enters the battlefield under your control, creatures you control get +1/+1 until end of turn.| -Yoked Ox|Magic Origins|42|C|{W}{W}|Creature - Ox|0|40|4|| -Claustrophobia|Magic Origins|50|C|{1}{U}{U}{1}{U}{U}|Enchantment - Aura|||$Enchant creature$When Claustrophobia enters the battlefield, tap enchanted creature.$Enchanted creature doesn't untap during its controller's untap step.$Enchant creature$When Claustrophobia enters the battlefield, tap enchanted creature.$Enchanted creature doesn't untap during its controller's untap step.| -Disperse|Magic Origins|54|C|{1}{U}{1}{U}|Instant|||Return target nonland permanent to its owner's hand.$Return target nonland permanent to its owner's hand.| +Yoked Ox|Magic Origins|42|C|{W}|Creature - Ox|0|4|| +Alhammarrat, High Arbiter|43|R|{5}{U}{U}|Legendary Creature - Sphinx|5|5|Flying$As Alhammarret, High Arbiter enters the battlefield, each opponent reveals his or her hand. You choose the name of a nonland card revealed this way.$Your opponents can't cast spells with the chosen name (as long as this creature is on the battlefield).| +Clash of Wills|49|U|{X}{U}|Instant|||Counter target spell unless its controller pays {X}.| +Claustrophobia|Magic Origins|50|C|{1}{U}{U}|Enchantment - Aura|||$Enchant creature$When Claustrophobia enters the battlefield, tap enchanted creature.$Enchanted creature doesn't untap during its controller's untap step.$Enchant creature$When Claustrophobia enters the battlefield, tap enchanted creature.$Enchanted creature doesn't untap during its controller's untap step.| +Disperse|Magic Origins|54|C|{1}{U}|Instant|||Return target nonland permanent to its owner's hand.$Return target nonland permanent to its owner's hand.| Displacement Wave|Magic Origins|?|?mtg-set-icon mtg-set-magic-origins-unknown|{X}{U}{U}{X}{U}{U}|Sorcery|||Return all nonland permanents with converted mana cost X or less to their owners' hands.$Return all nonland permanents with converted mana cost X or less to their owners' hands.| -Mizzium Meddler|Magic Origins|?|R|{2}{U}{2}{U}|Creature - Vedalken Wizard|1|41|4|Flash$When Mizzium Meddler enters the battlefield, change a target of target spell or ability to Mizzium Meddler.$Flash$When Mizzium Meddler enters the battlefield, change a target of target spell or ability to Mizzium Meddler.| Hydrolash|Magic Origins|59|U|{2}{U}|Instant|||Attacking creatures get -2/-0 until end of turn.$Draw a card.| -Jace, Telepath Unbound|Magic Origins|60|M||Planeswalker - Jace|55|+1: Up to one target creature gets -2/-0 until your next turn.$-3: You may cast target instant or sorcery card from your graveyard this turn. If that card would be put into your graveyard this turn, exile it instead.$-9: You get an emblem with "Whenever you cast a spell, target opponent puts the top five cards of his or her library into his or her graveyard". $+1: Up to one target creature gets -2/-0 until your next turn.$-3: You may cast target instant or sorcery card from your graveyard this turn. If that card would be put into your graveyard this turn, exile it instead.$-9: You get an emblem with "Whenever you cast a spell, target opponent puts the top five cards of his or her library into his or her graveyard". | -Jace, Vryn's Prodigy|Magic Origins|60|M|{1}{U}{1}{U}|Legendary Creature - Human Wizard|0|20|2|{T}: Draw a card, then discard a card. If there are five or more cards in your graveyard, exile Jace, Vryn''s Prodigy, then return him to the battefield transformed under his owner's control. ${T}: Draw a card, then discard a card. If there are five or more cards in your graveyard, exile Jace, Vryn''s Prodigy, then return him to the battefield transformed under his owner's control. | +Jace, Telepath Unbound|Magic Origins|60|M||Planeswalker - Jace|5|+1: Up to one target creature gets -2/-0 until your next turn.$-3: You may cast target instant or sorcery card from your graveyard this turn. If that card would be put into your graveyard this turn, exile it instead.$-9: You get an emblem with "Whenever you cast a spell, target opponent puts the top five cards of his or her library into his or her graveyard". $+1: Up to one target creature gets -2/-0 until your next turn.$-3: You may cast target instant or sorcery card from your graveyard this turn. If that card would be put into your graveyard this turn, exile it instead.$-9: You get an emblem with "Whenever you cast a spell, target opponent puts the top five cards of his or her library into his or her graveyard". | +Jace, Vryn's Prodigy|Magic Origins|60|M|{1}{U}|Legendary Creature - Human Wizard|0|2|{T}: Draw a card, then discard a card. If there are five or more cards in your graveyard, exile Jace, Vryn''s Prodigy, then return him to the battefield transformed under his owner's control. ${T}: Draw a card, then discard a card. If there are five or more cards in your graveyard, exile Jace, Vryn''s Prodigy, then return him to the battefield transformed under his owner's control. | Jhessian Thief|Magic Origins|62|U|{2}{U}|Creature - Human Rogue|1|3|Prowess (Whenever you cast a noncreature spell, this creature gets +1/+1 until end of turn.)$Whenever Jhessian Thief deals combat damage to a player, draw a card.| -Maritime Guard|Magic Origins|63|C|{1}{U}{1}{U}|Creature - Merfolk Soldier|1|31|3|| +Maritime Guard|Magic Origins|63|C|{1}{U}|Creature - Merfolk Soldier|1|3|| +Mizzium Meddler|Magic Origins|?|R|{2}{U}|Creature - Vedalken Wizard|1|4|Flash$When Mizzium Meddler enters the battlefield, change a target of target spell or ability to Mizzium Meddler.$Flash$When Mizzium Meddler enters the battlefield, change a target of target spell or ability to Mizzium Meddler.| Ringwarden Owl|Magic Origins|68|C|{3}{U}{U}|Creature - Bird|3|3|Flying (This creature can't be blocked except by creatures with flying or reach.)$Prowess (Whenever you cast a noncreature spell, this creature gets +1/+1 until end of turn.)| -Scrapskin Drake|Magic Origins|69|C|{2}{U}{2}{U}|Creature - Zombie Drake|2|32|3|Flying$Scrapskin Drake can block only creatures with flying.$Flying$Scrapskin Drake can block only creatures with flying.| +Scrapskin Drake|Magic Origins|69|C|{2}{U}|Creature - Zombie Drake|2|3|Flying$Scrapskin Drake can block only creatures with flying.$Flying$Scrapskin Drake can block only creatures with flying.| +Send to Sleep|Magic Origins|71|C|{1}{U}|Instant|||Tap up to two target creatures.$Spell mastery - If there are two or more instant and/or sorcery cards in your graveyard, those creatures don't untap during their controllers' next untap steps.| Separatist Voidmage|Magic Origins|72|C|{3}{U}|Creature - Human Wizard|2|2|When Separatist Voidmage enters the battlefield, you may return target creature to its owner's hand.| Sphinx's Tutelage|Magic Origins|76|U|{2}{U}|Enchantment|||Whenever you draw a card, target opponent puts the top two cards of his or her library into his or her graveyard. If they're both nonland cards that share a color, repeat this process.${5}{U}: Draw a card, then discard a card.| -Tower Geist|Magic Origins|80|U|{3}{U}{3}{U}|Creature - Spirit|2|22|2|Flying$When Tower Geist enters the battlefield, look at the top two cards of your library. Put one of them into your hand and the other into your graveyard.$Flying$When Tower Geist enters the battlefield, look at the top two cards of your library. Put one of them into your hand and the other into your graveyard.| -Catacomb Slug|Magic Origins|86|C|{4}{B}{4}{B}|Creature - Slug|2|62|6|| -Cruel Revival|Magic Origins|88|C|{4}{B}{4}{B}|Instant|||Destroy target non-Zombie creature. It can't be regenerated. Return up to one target Zombie card from your graveyard to your hand.$Destroy target non-Zombie creature. It can't be regenerated. Return up to one target Zombie card from your graveyard to your hand.| +Tower Geist|Magic Origins|80|U|{3}{U}|Creature - Spirit|2|2|Flying$When Tower Geist enters the battlefield, look at the top two cards of your library. Put one of them into your hand and the other into your graveyard.$Flying$When Tower Geist enters the battlefield, look at the top two cards of your library. Put one of them into your hand and the other into your graveyard.| +Catacomb Slug|Magic Origins|86|C|{4}{B}|Creature - Slug|2|6|| +Cruel Revival|Magic Origins|88|C|{4}{B}|Instant|||Destroy target non-Zombie creature. It can't be regenerated. Return up to one target Zombie card from your graveyard to your hand.$Destroy target non-Zombie creature. It can't be regenerated. Return up to one target Zombie card from your graveyard to your hand.| Deadbridge Shaman|Magic Origins|91|C|{2}{B}|Creature - Elf Shaman|3|1|When Deadbridge Shaman dies, target opponent discards a card.| Eyeblight Assassin|Magic Origins|95|C|{2}{B}|Creature - Elf Assassin|2|2|When Eyeblight Assassin enters the battlefield, target creature an opponent controls gets -1/-1 until end of turn.| Infernal Scarring|Magic Origins|102|C|{1}{B}|Enchantment - Aura|||Enchant creature$Enchanted creature gets +2/+0 and has "When this creature dies, draw a card."| +Kothophed, Soul Hoarder|Magic Origins|104|R|{4}{B}{B}|Legendary Creature - Demon|6|6|Flying$Whenever a permanent owned by another player is put into the graveyard from the battlefield, you draw one card and lose 1 life.| +Languish|Magic Origins|105|R|{2}{B}{B}|Sorcery|||All creatures get -4/-4 until end of turn.| Liliana, Defiant Necromancer|Magic Origins|106|M||Planeswalker - Liliana|3|+2: Each player discards a card.$-X: Return target nonlegendary creature with converted mana cost X from your graveyard to the battlefield.$-8: You get an emblem with "Whenever a creature you control dies, return it to the battlefield under your control at the beginning of the next end step."| Liliana, Heretical Healer|Magic Origins|106|M|{1}{B}{B}|Legendary Creature - Human Cleric|2|3|Lifelink$Whenever another nontoken creature you control dies, exile Liliana Heretical Healer, then return her to the battlefield transformed under her owner's control. If you do, put a 2/2 black Zombie creature token onto the battlefield.| Malakir Cullblade|Magic Origins|108|U|{1}{B}|Creature - Vampire Warrior|1|1|Whenever a creature an opponent controls dies, put a +1/+1 counter on Malakir Cullblade.| Rabid Bloodsucker|Magic Origins|113|C|{4}{B}|Creature - Vampire|3|2|Flying$When Rabid Bloodsucker enters the battlefield, each player loses 2 life.| Reave Soul|Magic Origins|115|C|{1}{B}|Sorcery|||Destroy target creature with power 3 or less.| Shambling Ghoul|Magic Origins|119|C|{1}{B}|Creature - Zombie|2|3|Shambling Ghoul enters the battlefield tapped.| -Weight of the Underworld|Magic Origins|126|C|{3}{B}{3}{B}|Enchantment - Aura|||Enchant creature$Enchanted creature gets -3/-2.$Enchant creature$Enchanted creature gets -3/-2.| +Weight of the Underworld|Magic Origins|126|C|{3}{B}|Enchantment - Aura|||Enchant creature$Enchanted creature gets -3/-2.$Enchant creature$Enchanted creature gets -3/-2.| Act of Treason|Magic Origins|129|C|{2}{R}{2}{R}|Sorcery|||Gain control of target creature until end of turn. Untap that creature. It gains haste until end of turn.$Gain control of target creature until end of turn. Untap that creature. It gains haste until end of turn.| Avaricious Dragon|Magic Origins|131|M|{2}{R}{R}|Creature - Dragon|4|4|Flying$At the beginning of your draw step, draw an additional card.$At the beginning of your end step, discard your hand.| -Bellows Lizard|Magic Origins|132|C|{R}{R}|Creature - Lizard|1|11|1|{1}{R}: Bellows Lizard gets +1/+0 until end of turn.${1}{R}: Bellows Lizard gets +1/+0 until end of turn.| +Bellows Lizard|Magic Origins|132|C|{R}|Creature - Lizard|1|1|{1}{R}: Bellows Lizard gets +1/+0 until end of turn.${1}{R}: Bellows Lizard gets +1/+0 until end of turn.| Boggart Brute|Magic Origins|133|C|{2}{R}|Creature - Goblin Warrior|3|2|Menace (This creature can't be blocked except by two or more creatures.)| -Chandra, Fire of Kaladesh|Magic Origins|135|M|{1}{R}{R}{1}{R}{R}|Legendary Creature - Human Shaman|2|22|2|Whenever you cast a red spell, untap Chandra, Fire of Kaladesh.${T}: Chandra, Fire of Kaladesh deals 1 damage to target player. If Chandra has dealt 3 or more damage this turn, exile her, then return her to the battlefield transformed under her owner's control.$Whenever you cast a red spell, untap Chandra, Fire of Kaladesh.${T}: Chandra, Fire of Kaladesh deals 1 damage to target player. If Chandra has dealt 3 or more damage this turn, exile her, then return her to the battlefield transformed under her owner's control.| -Chandra, Roaring Flame|Magic Origins|135|M||Planeswalker - Chandra|44|+1: Chandra, Roaring Flame deals 2 damage to target player.$-2: Chandra, Roaring Flame deals 2 damage to target creature.$-7: Chandra, Roaring Flame deals 6 damage to each opponent. Each player dealt damage this way gets an emblem with "At the beginning of your upkeep, this emblem deals 3 damage to you."$+1: Chandra, Roaring Flame deals 2 damage to target player.$-2: Chandra, Roaring Flame deals 2 damage to target creature.$-7: Chandra, Roaring Flame deals 6 damage to each opponent. Each player dealt damage this way gets an emblem with "At the beginning of your upkeep, this emblem deals 3 damage to you."| -Chandra's Fury|Magic Origins|136|C|{4}{R}{4}{R}|Instant|||Chandra's Fury deals 4 damage to target player and 1 damage to each creature that player controls.$Chandra's Fury deals 4 damage to target player and 1 damage to each creature that player controls.| +Chandra, Fire of Kaladesh|Magic Origins|135|M|{1}{R}{R}|Legendary Creature - Human Shaman|2|2|Whenever you cast a red spell, untap Chandra, Fire of Kaladesh.${T}: Chandra, Fire of Kaladesh deals 1 damage to target player. If Chandra has dealt 3 or more damage this turn, exile her, then return her to the battlefield transformed under her owner's control.$Whenever you cast a red spell, untap Chandra, Fire of Kaladesh.${T}: Chandra, Fire of Kaladesh deals 1 damage to target player. If Chandra has dealt 3 or more damage this turn, exile her, then return her to the battlefield transformed under her owner's control.| +Chandra, Roaring Flame|Magic Origins|135|M||Planeswalker - Chandra|4|+1: Chandra, Roaring Flame deals 2 damage to target player.$-2: Chandra, Roaring Flame deals 2 damage to target creature.$-7: Chandra, Roaring Flame deals 6 damage to each opponent. Each player dealt damage this way gets an emblem with "At the beginning of your upkeep, this emblem deals 3 damage to you."$+1: Chandra, Roaring Flame deals 2 damage to target player.$-2: Chandra, Roaring Flame deals 2 damage to target creature.$-7: Chandra, Roaring Flame deals 6 damage to each opponent. Each player dealt damage this way gets an emblem with "At the beginning of your upkeep, this emblem deals 3 damage to you."| +Chandra's Fury|Magic Origins|136|C|{4}{R}|Instant|||Chandra's Fury deals 4 damage to target player and 1 damage to each creature that player controls.$Chandra's Fury deals 4 damage to target player and 1 damage to each creature that player controls.| Chandra's Ignition|Magic Origins|137|R|{3}{R}{R}|Sorcery|||Target creature you control deals damage equal to its power to each other creature and each opponent.| -Cobblebrute|Magic Origins|138|C|{3}{R}{3}{R}|Creature - Elemental|5|25|2|| +Cobblebrute|Magic Origins|138|C|{3}{R}{3}{R}|Creature - Elemental|5|2|| Enthralling Victor|Magic Origins|142|U|{3}{R}|Creature - Human Warrior|3|2|When Enthralling Victor enters the battlefield, gain control of target creature an opponent controls with power 2 or less until end of turn. Untap that creature. It gains haste until end of turn.| -Fiery Conclusion|Magic Origins|144|C|{1}{R}{1}{R}|Instant|||As an additional cost to cast Fiery Conclusion, sacrifice a creature.$Fiery Conclusion deals 5 damage to target creature.$As an additional cost to cast Fiery Conclusion, sacrifice a creature.$Fiery Conclusion deals 5 damage to target creature.| +Fiery Conclusion|Magic Origins|144|C|{1}{R}|Instant|||As an additional cost to cast Fiery Conclusion, sacrifice a creature.$Fiery Conclusion deals 5 damage to target creature.$As an additional cost to cast Fiery Conclusion, sacrifice a creature.$Fiery Conclusion deals 5 damage to target creature.| +Fiery Impulse|Magic Origins|145|C|{R}|Instant|||Fiery Imulse deals 2 damage to target creature.$Spell mastery - If there are two or more instant and/or sorcery cards in your graveyard, Fiery Impulse deals 3 damage to that creature instead.| Lightning Javelin|Magic Origins|153|C|{3}{R}|Sorcery|||Lightning Javelin deals 3 damage to target creature or player. Scry 1.| Pia and Kiran Nalaar|Magic Origins|157|R|{2}{R}{R}|Legendary Creature - Human Artificer|2|2|When Pia and Kiran Nalaar enters the battlefield put 2 1/1 colorless Thopter artifact creature tokens with flying onto the battlefield.${2}{R}, Sacrifice an artifact: Pia and Kiran Nalaar deals 2 damage to target creature or player.| Ravaging Blaze|Magic Origins|159|U|{X}{R}{R}|Instant|||Ravaging Blaze deals X damage to target creature. $Spell mastery — If there are two or more instant and/or sorcery cards in your graveyard, Ravaging Blaze also deals X damage to that creature's controller.| Seismic Elemental|Magic Origins|161|U|{3}{R}{R}|Creature - Elemental|4|4|When Seismic Elemental enters the battlefield, creatures without flying can't block this turn.| Subterranean Scout|Magic Origins|164|C|{1}{R}|Creature - Goblin Scout|2|1|When Subterranean Scout enters the battlefield, target creature with power 2 or less can't be blocked this turn.| -Titan's Strength|Magic Origins|166|C|{R}{R}|Instant|||Target creature gets +3/+1 until end of turn. Scry 1.$Target creature gets +3/+1 until end of turn. Scry 1.| +Titan's Strength|Magic Origins|166|C|{R}|Instant|||Target creature gets +3/+1 until end of turn. Scry 1.$Target creature gets +3/+1 until end of turn. Scry 1.| Volcanic Rambler|Magic Origins|167|C|{5}{R}|Creature - Elemental|6|4|{2}{R}: Volcanic Rambler deals 1 damage to target player.| -Elvish Visionary|Magic Origins|175|C|{1}{G}{1}{G}|Creature - Elf Shaman|1|11|1|When Elvish Visionary enters the battlefield, draw a card.$When Elvish Visionary enters the battlefield, draw a card.| -Leaf Gilder|Magic Origins|184|C|{1}{G}{1}{G}|Creature - Elf Druid|2|12|1|{T}: Add {G} to your mana pool.${T}: Add {G} to your mana pool.| -Titanic Growth|Magic Origins|?|C|{1}{G}{1}{G}|Instant|||Target creature gets +4/+4 until end of turn.$Target creature gets +4/+4 until end of turn.| -Vastwood Gorger|Magic Origins|204|C|{5}{G}{5}{G}|Creature - Wurm|5|65|6|| -Yeva's Forcemage|Magic Origins|?|C|{2}{G}{2}{G}|Creature - Elf Shaman|2|22|2|When Yeva's Forcemage enters the battlefield, target creature gets +2/+2 until end of turn.$When Yeva's Forcemage enters the battlefield, target creature gets +2/+2 until end of turn.| Conclave Naturalists|Magic Origins|171|U|{4}{G}|Creature - Dryad|4|4|When Conclave Naturalists enters the battlefield, you may destroy target artifact or enchantment.| Dwynen, Gilt-Leaf Daen|Magic Origins|172|R|{2}{G}{G}|Legendary Creature - Elf Warrior|3|4|Reach$Other Elf creatures you control get +1/+1.$Whenever Dwynen, Gilt-Leaf Daen attacks, you gain 1 life for each attacking Elf you control.| Elemental Bond|Magic Origins|174|U|{2}{G}|Enchantment|||Whenever a creature with power 3 or greater enters the battlefield under your control, draw a card.| +Elvish Visionary|Magic Origins|175|C|{1}{G}|Creature - Elf Shaman|1|1|When Elvish Visionary enters the battlefield, draw a card.$When Elvish Visionary enters the battlefield, draw a card.| Hitchclaw Recluse|Magic Origins|181|C|{2}{G}|Creature - Spider|1|4|Reach| Joraga Invocation|Magic Origins|183|U|{4}{G}{G}|Sorcery|||Each creature you control gets +3/+3 until end of turn and must be blocked this turn if able.| +Leaf Gilder|Magic Origins|184|C|{1}{G}|Creature - Elf Druid|2|1|{T}: Add {G} to your mana pool.${T}: Add {G} to your mana pool.| Mantle of Webs|Magic Origins|187|C|{1}{G}|Enchantment - Aura|||Enchant Creature$Enchanted creature gets +1/+3 and has reach.| -Nissa, Sage Animist|Magic Origins|189|M||Planeswalker - Nissa|33|+1: Reveal the top card of your library. If it's a land card, put it onto the battlefield. Otherwise, put it into your hand.$-2: Put a legendary 4/4 green Elemental creature token named Ashaya, the Awoken World onto the battlefield.$-7: Untap up to six target lands. They become 6/6 Elemental creatures. They're still lands.$+1: Reveal the top card of your library. If it's a land card, put it onto the battlefield. Otherwise, put it into your hand.$-2: Put a legendary 4/4 green Elemental creature token named Ashaya, the Awoken World onto the battlefield.$-7: Untap up to six target lands. They become 6/6 Elemental creatures. They're still lands.| -Nissa, Vastwood Seer|Magic Origins|189|M|{2}{G}{2}{G}|Legendary Creature - Elf Scout|2|22|2|When Nissa, Vastwood Seer enters the battlefield, you may search your library for a basic Forest card, reveal it, put it into your hand, then shuffle your library.$Whenever a land enters the battlefield under your control, if you control seven or more lands, exile Nissa, then return her to the battlefield transformed under her owner's control.$When Nissa, Vastwood Seer enters the battlefield, you may search your library for a basic Forest card, reveal it, put it into your hand, then shuffle your library.$Whenever a land enters the battlefield under your control, if you control seven or more lands, exile Nissa, then return her to the battlefield transformed under her owner's control.| +Nissa, Sage Animist|Magic Origins|189|M||Planeswalker - Nissa|3|+1: Reveal the top card of your library. If it's a land card, put it onto the battlefield. Otherwise, put it into your hand.$-2: Put a legendary 4/4 green Elemental creature token named Ashaya, the Awoken World onto the battlefield.$-7: Untap up to six target lands. They become 6/6 Elemental creatures. They're still lands.$+1: Reveal the top card of your library. If it's a land card, put it onto the battlefield. Otherwise, put it into your hand.$-2: Put a legendary 4/4 green Elemental creature token named Ashaya, the Awoken World onto the battlefield.$-7: Untap up to six target lands. They become 6/6 Elemental creatures. They're still lands.| +Nissa, Vastwood Seer|Magic Origins|189|M|{2}{G}|Legendary Creature - Elf Scout|2|2|When Nissa, Vastwood Seer enters the battlefield, you may search your library for a basic Forest card, reveal it, put it into your hand, then shuffle your library.$Whenever a land enters the battlefield under your control, if you control seven or more lands, exile Nissa, then return her to the battlefield transformed under her owner's control.$When Nissa, Vastwood Seer enters the battlefield, you may search your library for a basic Forest card, reveal it, put it into your hand, then shuffle your library.$Whenever a land enters the battlefield under your control, if you control seven or more lands, exile Nissa, then return her to the battlefield transformed under her owner's control.| +Rhox Maulers|Magic Origins|196|C|{4}{G}|Creature - Rhino Soldier|4|4|Trample (This creature can deal excess combat damage to defending player or planeswalker while attacking.)$Renown 2 (When this creature deals combat damage to a player, if it isn't renowned, put two +1/+1 counters on it and it becomes renowned.)| +Titanic Growth|Magic Origins|201|C|{1}{G}|Instant|||Target creature gets +4/+4 until end of turn.$Target creature gets +4/+4 until end of turn.| +Vastwood Gorger|Magic Origins|204|C|{5}{G}|Creature - Wurm|5|6|| +Yeva's Forcemage|Magic Origins|208|C|{2}{G}|Creature - Elf Shaman|2|2|When Yeva's Forcemage enters the battlefield, target creature gets +2/+2 until end of turn.$When Yeva's Forcemage enters the battlefield, target creature gets +2/+2 until end of turn.| +Blazing Hellhound|Magic Origins|210|U|{2}{B}{R}|Creature - Elemental Hound|4|3|{1}, Sacrifice another creature: Blazing Hellhound deals 1 damage to target creature or player.| Zendikar Incarnate|Magic Origins|219|U|{2}{R}{G}|Creature - Elemental|0|4|Zendikar Incarnate's power is equal to the amount of lands you control.| -Gold-Forged Sentinel|Magic Origins|226|U|{6}{6}|Artifact Creature - Chimera|4|44|4|Flying$Flying| -Jayemdae Tome|Magic Origins|231|U|{4}{4}|Artifact|||{4}, {T}: Draw a card.${4}, {T}: Draw a card.| -Meteorite|Magic Origins|233|U|{5}{5}|Artifact|||When Meteorite enters the battlefield, it deals 2 damage to target creature or player.${T}: Add one mana of any color to your mana pool.$When Meteorite enters the battlefield, it deals 2 damage to target creature or player.${T}: Add one mana of any color to your mana pool.| -Runed Servitor|Magic Origins|238|U|{2}{2}|Artifact Creature - Construct|2|22|2|When Runed Servitor dies, each player draws a card.$When Runed Servitor dies, each player draws a card.| +Gold-Forged Sentinel|Magic Origins|226|U|{6}|Artifact Creature - Chimera|4|4|Flying$Flying| +Jayemdae Tome|Magic Origins|231|U|{4}|Artifact|||{4}, {T}: Draw a card.${4}, {T}: Draw a card.| +Meteorite|Magic Origins|233|U|{5}|Artifact|||When Meteorite enters the battlefield, it deals 2 damage to target creature or player.${T}: Add one mana of any color to your mana pool.$When Meteorite enters the battlefield, it deals 2 damage to target creature or player.${T}: Add one mana of any color to your mana pool.| +Runed Servitor|Magic Origins|238|U|{2}|Artifact Creature - Construct|2|2|When Runed Servitor dies, each player draws a card.$When Runed Servitor dies, each player draws a card.| Veteran's Sidearm|Magic Origins|242|C|{2}|Artifact - Equipment|||Equipped creature gets +1/+1.$Equip {1}| -Aegis Angel|Magic Origins|273|R|{4}{W}{W}{4}{W}{W}|Creature - Angel|5|55|5|Flying$When Aegis Angel enters the battlefield, another target permanent gains indestructible for as long as you control Aegis Angel.$Flying$When Aegis Angel enters the battlefield, another target permanent gains indestructible for as long as you control Aegis Angel.| -Divine Verdict|Magic Origins|274|C|{3}{W}{3}{W}|Instant|||Destroy target attacking or blocking creature.$Destroy target attacking or blocking creature.| +Aegis Angel|Magic Origins|273|R|{4}{W}{W}|Creature - Angel|5|5|Flying$When Aegis Angel enters the battlefield, another target permanent gains indestructible for as long as you control Aegis Angel.$Flying$When Aegis Angel enters the battlefield, another target permanent gains indestructible for as long as you control Aegis Angel.| +Divine Verdict|Magic Origins|274|C|{3}{W}|Instant|||Destroy target attacking or blocking creature.$Destroy target attacking or blocking creature.| Eagle of the Watch|Magic Origins|275|C|{2}{W}|Creature - Bird|2|1|Flying, vigilance| -Serra Angel|Magic Origins|276|U|{3}{W}{W}{3}{W}{W}|Creature - Angel|4|44|4|Flying$Vigilance$Flying$Vigilance| -Into the Void|Magic Origins|277|U|{3}{U}{3}{U}|Sorcery|||Return up to two target creatures to their owners' hands.$Return up to two target creatures to their owners' hands.| -Mahamoti Djinn|Magic Origins|278|R|{4}{U}{U}{4}{U}{U}|Creature - Djinn|5|65|6|Flying$Flying| -Weave Fate|Magic Origins|279|C|{3}{U}{3}{U}|Instant|||Draw two cards.$Draw two cards.| -Flesh to Dust|Magic Origins|280|C|{3}{B}{B}{3}{B}{B}|Instant|||Destroy target creature. It can't be regenerated.$Destroy target creature. It can't be regenerated.| -Mind Rot|Magic Origins|281|C|{2}{B}{2}{B}|Sorcery|||Target player discards two cards.$Target player discards two cards.| -Nightmare|Magic Origins|282|R|{5}{B}{5}{B}|Creature - Nightmare Horse|0|00|0|Flying$Nightmare's power and toughness are each equal to the number of Swamps you control.$Flying$Nightmare's power and toughness are each equal to the number of Swamps you control.| -Sengir Vampire|Magic Origins|283|U|{3}{B}{B}{3}{B}{B}|Creature - Vampire|4|44|4|Flying$Whenever a creature dealt damage by Sengir Vampire this turn dies, put a +1/+1 counter on Sengir Vampire.$Flying$Whenever a creature dealt damage by Sengir Vampire this turn dies, put a +1/+1 counter on Sengir Vampire.| -Fiery Hellhound|Magic Origins|284|C|{1}{R}{R}{1}{R}{R}|Creature - Elemental Hound|2|22|2|{R}: Fiery Hellhound gets +1/+0 until end of turn.${R}: Fiery Hellhound gets +1/+0 until end of turn.| -Shivan Dragon|Magic Origins|285|R|{4}{R}{R}{4}{R}{R}|Creature - Dragon|5|55|5|Flying${R}: Shivan Dragon gets +1/+0 until end of turn.$Flying${R}: Shivan Dragon gets +1/+0 until end of turn.| +Serra Angel|Magic Origins|276|U|{3}{W}{W}|Creature - Angel|4|4|Flying$Vigilance$Flying$Vigilance| +Into the Void|Magic Origins|277|U|{3}{U}|Sorcery|||Return up to two target creatures to their owners' hands.$Return up to two target creatures to their owners' hands.| +Mahamoti Djinn|Magic Origins|278|R|{4}{U}{U}|Creature - Djinn|5|6|Flying$Flying| +Weave Fate|Magic Origins|279|C|{3}{U}|Instant|||Draw two cards.$Draw two cards.| +Flesh to Dust|Magic Origins|280|C|{3}{B}{B}|Instant|||Destroy target creature. It can't be regenerated.$Destroy target creature. It can't be regenerated.| +Mind Rot|Magic Origins|281|C|{2}{B}|Sorcery|||Target player discards two cards.$Target player discards two cards.| +Nightmare|Magic Origins|282|R|{5}{B}|Creature - Nightmare Horse|0|0|Flying$Nightmare's power and toughness are each equal to the number of Swamps you control.$Flying$Nightmare's power and toughness are each equal to the number of Swamps you control.| +Sengir Vampire|Magic Origins|283|U|{3}{B}{B}|Creature - Vampire|4|4|Flying$Whenever a creature dealt damage by Sengir Vampire this turn dies, put a +1/+1 counter on Sengir Vampire.$Flying$Whenever a creature dealt damage by Sengir Vampire this turn dies, put a +1/+1 counter on Sengir Vampire.| +Fiery Hellhound|Magic Origins|284|C|{1}{R}{R}|Creature - Elemental Hound|2|2|{R}: Fiery Hellhound gets +1/+0 until end of turn.${R}: Fiery Hellhound gets +1/+0 until end of turn.| +Shivan Dragon|Magic Origins|285|R|{4}{R}{R}|Creature - Dragon|5|5|Flying${R}: Shivan Dragon gets +1/+0 until end of turn.$Flying${R}: Shivan Dragon gets +1/+0 until end of turn.| Plummet|Magic Origins|286|C|{1}{G}{1}{G}|Instant|||Destroy target creature with flying.$Destroy target creature with flying.| -Prized Unicorn|Magic Origins|287|U|{3}{G}{3}{G}|Creature - Unicorn|2|22|2|All creatures able to block Prized Unicorn do so.$All creatures able to block Prized Unicorn do so.| -Terra Stomper|Magic Origins|288|R|{3}{G}{G}{G}{3}{G}{G}{G}|Creature - Beast|8|88|8|Terra Stomper can't be countered.$Trample$Terra Stomper can't be countered.$Trample| +Prized Unicorn|Magic Origins|287|U|{3}{G}|Creature - Unicorn|2|22|2|All creatures able to block Prized Unicorn do so.$All creatures able to block Prized Unicorn do so.| +Terra Stomper|Magic Origins|288|R|{3}{G}{G}{G}|Creature - Beast|8|8|Terra Stomper can't be countered.$Trample$Terra Stomper can't be countered.$Trample| Ambush Commander|Duel Decks: Anthology, Elves vs. Goblins|1|R|{3}{G}{G}|Creature - Elf|2|2|Forests you control are 1/1 green Elf creatures that are still lands.${1}{G}, Sacrifice an Elf: Target creature gets +3/+3 until end of turn.| Lys Alana Huntmaster|Duel Decks: Anthology, Elves vs. Goblins|10|C|{2}{G}{G}|Creature - Elf Warrior|3|3|Whenever you cast an Elf spell, you may put a 1/1 green Elf Warrior creature token onto the battlefield.| Stonewood Invoker|Duel Decks: Anthology, Elves vs. Goblins|11|C|{1}{G}|Creature - Elf Mutant|2|2|{7}{G}: Stonewood Invoker gets +5/+5 until end of turn.| From 9586ad95e3df5c630885248adb94cd9aa33d7c3a Mon Sep 17 00:00:00 2001 From: fireshoes Date: Mon, 22 Jun 2015 21:12:32 -0500 Subject: [PATCH 11/18] Updated mtg-cards-data because of doubled abilities on some ORI cards. --- .../sets/magicorigins/MizziumMeddler.java | 171 ++++++++++++++++++ Utils/mtg-cards-data.txt | 80 ++++---- 2 files changed, 211 insertions(+), 40 deletions(-) create mode 100644 Mage.Sets/src/mage/sets/magicorigins/MizziumMeddler.java diff --git a/Mage.Sets/src/mage/sets/magicorigins/MizziumMeddler.java b/Mage.Sets/src/mage/sets/magicorigins/MizziumMeddler.java new file mode 100644 index 00000000000..fa22c008452 --- /dev/null +++ b/Mage.Sets/src/mage/sets/magicorigins/MizziumMeddler.java @@ -0,0 +1,171 @@ +/* + * 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.magicorigins; + +import java.util.UUID; +import mage.MageInt; +import mage.MageObject; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.keyword.FlashAbility; +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.stack.Spell; +import mage.game.stack.StackAbility; +import mage.game.stack.StackObject; +import mage.players.Player; +import mage.target.Target; +import mage.target.TargetStackObject; +import mage.target.Targets; + +/** + * + * @author fireshoes + */ +public class MizziumMeddler extends CardImpl { + + public MizziumMeddler(UUID ownerId) { + super(ownerId, 64, "Mizzium Meddler", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{2}{U}"); + this.expansionSetCode = "ORI"; + this.subtype.add("Vedalken"); + this.subtype.add("Wizard"); + this.power = new MageInt(1); + this.toughness = new MageInt(4); + + // Flash + this.addAbility(FlashAbility.getInstance()); + + // When Mizzium Meddler enters the battlefield, change a target of target spell or ability to Mizzium Meddler. + Ability ability = new EntersBattlefieldTriggeredAbility(new MizziumMeddlerEffect()); + ability.addTarget(new TargetStackObject()); + this.addAbility(ability); + } + + public MizziumMeddler(final MizziumMeddler card) { + super(card); + } + + @Override + public MizziumMeddler copy() { + return new MizziumMeddler(this); + } +} + +class MizziumMeddlerEffect extends OneShotEffect { + + public MizziumMeddlerEffect() { + super(Outcome.Neutral); + staticText = "Change a target of target spell or ability to {this}"; + } + + public MizziumMeddlerEffect(final MizziumMeddlerEffect effect) { + super(effect); + } + + @Override + public boolean apply(Game game, Ability source) { + StackObject stackObject = game.getStack().getStackObject(source.getFirstTarget()); + MageObject sourceObject = game.getObject(source.getSourceId()); + if (stackObject != null && sourceObject != null) { + Targets targets; + Ability sourceAbility; + MageObject oldTarget = null; + if (stackObject instanceof Spell) { + Spell spell = (Spell)stackObject; + sourceAbility = spell.getSpellAbility(); + targets = spell.getSpellAbility().getTargets(); + } else if (stackObject instanceof StackAbility) { + StackAbility stackAbility = (StackAbility)stackObject; + sourceAbility = stackAbility; + targets = stackAbility.getTargets(); + } else { + return false; + } + boolean twoTimesTarget = false; + if (targets.size() == 1 && targets.get(0).getTargets().size() == 1) { + Target target = targets.get(0); + if (target.canTarget(stackObject.getControllerId(), source.getSourceId(), sourceAbility, game)) { + oldTarget = game.getObject(targets.getFirstTarget()); + target.clearChosen(); + // The source is still the spell on the stack + target.addTarget(source.getSourceId(), stackObject.getStackAbility(), game); + } + } else { + Player player = game.getPlayer(source.getControllerId()); + for (Target target: targets) { + for (UUID targetId: target.getTargets()) { + MageObject object = game.getObject(targetId); + String name; + if (object == null) { + Player targetPlayer = game.getPlayer(targetId); + name = targetPlayer.getLogName(); + } else { + name = object.getName(); + } + if (!targetId.equals(source.getSourceId()) && target.getTargets().contains(source.getSourceId())) { + // you can't change this target to MizziumMeddler because MizziumMeddler is already another targetId of that target. + twoTimesTarget = true; + continue; + } + if (name != null && player.chooseUse(Outcome.Neutral, new StringBuilder("Change target from ").append(name).append(" to ").append(sourceObject.getName()).append("?").toString(), game)) { + if (target.canTarget(stackObject.getControllerId(), source.getSourceId(), sourceAbility, game)) { + oldTarget = game.getObject(targets.getFirstTarget()); + target.remove(targetId); + // The source is still the spell on the stack + target.addTarget(source.getSourceId(), stackObject.getStackAbility(), game); + break; + } + } + } + } + } + if (oldTarget != null) { + game.informPlayers(sourceObject.getLogName() + ": Changed target of " +stackObject.getLogName() + " from " + oldTarget.getLogName() + " to " + sourceObject.getLogName()); + } else { + if (twoTimesTarget) { + game.informPlayers(sourceObject.getLogName() + ": Target not changed to " + sourceObject.getLogName() + " because its not valid to target it twice for " + stackObject.getName()); + } else { + game.informPlayers(sourceObject.getLogName() + ": Target not changed to " + sourceObject.getLogName() + " because its no valid target for " + stackObject.getName()); + } + } + return true; + } + return false; + } + + @Override + public MizziumMeddlerEffect copy() { + return new MizziumMeddlerEffect(this); + } + +} \ No newline at end of file diff --git a/Utils/mtg-cards-data.txt b/Utils/mtg-cards-data.txt index 52bea82e0b2..b456543804c 100644 --- a/Utils/mtg-cards-data.txt +++ b/Utils/mtg-cards-data.txt @@ -26237,15 +26237,15 @@ Spread the Sickness|Modern Masters 2015 Edition|98|U|{4}{B}|Sorcery|||Destroy ta Surgical Extraction|Modern Masters 2015 Edition|99|R|{BP}|Instant|||({BP} can be paid with either {B} or 2 life.)$Choose target card in a graveyard other than a basic land card. Search its owner's graveyard, hand, and library for any number of cards with the same name as that card and exile them. Then that player shuffles his or her library.| Akroan Jailer|Magic Origins|1|C|{W}|Creature - Human Soldier|1|1|{2}{W}, {T}: Tap target creature.| Blessed Spirits|Magic Origins|7|U|{2}{W}|Creature - Spirit|2|2|Flying$Whenever you cast an enchantment spell, put a +1/+1 counter on Blessed Spirits.| -Charging Griffin|Magic Origins|9|C|{3}{W}|Creature - Griffin|2|2|Flying$Whenever Charging Griffin attacks, it gets +1/+1 until end of turn.$Flying$Whenever Charging Griffin attacks, it gets +1/+1 until end of turn.| +Charging Griffin|Magic Origins|9|C|{3}{W}|Creature - Griffin|2|2|Flying$Whenever Charging Griffin attacks, it gets +1/+1 until end of turn.| Enshrouding Mist|Magic Origins|13|C|{W}|Instant|||Target creature gets +1/+1 until end of turn. Prevent all damage that would dealt to it this turn. If it's renowned, untap it.| Grasp of the Hieromancer|Magic Origins|15|C|{1}{W}|Enchantment - Aura|||Enchant creature$Enchanted creature gets +1/+1 and has "Whenever this creature attacks, tap target creature defending player controls."| Heavy Infantry|Magic Origins|18|C|{4}{W}|Creature - Human Soldier|3|4|When Heavy Infantry enters the battlefield, tap target creature an opponent controls.| -Hixus, Prison Warden|Magic Origins|19|R|{3}{W}{W}|Legendary Creature - Human Soldier|4|4|Flash$Whenever a creature deals combat damage to you, if Hixus, Prison Warden entered the battlefield this turn, exile that creature until Hixus leaves the battlefield.$Flash$Whenever a creature deals combat damage to you, if Hixus, Prison Warden entered the battlefield this turn, exile that creature until Hixus leaves the battlefield.| +Hixus, Prison Warden|Magic Origins|19|R|{3}{W}{W}|Legendary Creature - Human Soldier|4|4|Flash$Whenever a creature deals combat damage to you, if Hixus, Prison Warden entered the battlefield this turn, exile that creature until Hixus leaves the battlefield.| Knight of the Pilgrim's Road|Magic Origins|20|C|{2}{W}|Creature - Human Knight|3|2|Renown 1 (When this creature deals combat damage to a player, if it isn't renowned, put a +1/+1 counter on it and it becomes renowned.)| Gideon, Battle-Forged|Magic Origins|23|M||Planeswalker - Gideon|3|+2: Up to one target creature an opponent controls attacks Gideon, Battle-Forged during its controller's next turn if able.$+1: Until your next turn, target creature gains indestructible. Untap that creature.$0: Until end of turn, Gideon, Battle-Forged becomes a 4/4 Human Soldier creature with indestructible that's still a planeswalker. Prevent all damage that would be dealt to him this turn.| Kytheon, Hero of Akros|Magic Origins|23|M|{W}|Legendary Creature - Human Soldier|2|1|At end of combat, if Kytheon, Hero of Akros and at least two other creatures attacked this combat, exile Kytheon, then return him to the battlefield transformed under his owner's control.${2}{W}: Kytheon gains indestructible until end of turn.| -Mighty Leap|Magic Origins|26|C|{1}{W}|Instant|||Target creature gets +2/+2 and gains flying until end of turn.$Target creature gets +2/+2 and gains flying until end of turn.| +Mighty Leap|Magic Origins|26|C|{1}{W}|Instant|||Target creature gets +2/+2 and gains flying until end of turn.| Patron of the Valiant|Magic Origins|28|U|{3}{W}{W}|4|4|Flying$When Patron of the Valiant enters the battlefield, put a +1/+1 counter on each creature you control with a +1/+1 counter on it.| Relic Hunter|Magic Origins|29|R|{1}{W}|Creature - Human|2|2|Renown 1 (When this creature deals combat damage to a player, put a +1/+1 counter on it and it becomes renowned.)$When Relic Hunter becomes renowned, you may search your library for an Equipment card, reveal it, put it in your hand, then shuffle your library.| Sentinel of the Eternal Watch|Magic Origins|30|U|{5}{W}|Creature - Giant Soldier|4|6|Vigilance (Attacking doesn't cause this creature to tap.)$At the beginning of combat on each opponent's turn, tap target creature that player controls.| @@ -26253,23 +26253,23 @@ Valor in Akros|Magic Origins|39|U|{3}{W}|Enchantment|||Whenever a creature enter Yoked Ox|Magic Origins|42|C|{W}|Creature - Ox|0|4|| Alhammarrat, High Arbiter|43|R|{5}{U}{U}|Legendary Creature - Sphinx|5|5|Flying$As Alhammarret, High Arbiter enters the battlefield, each opponent reveals his or her hand. You choose the name of a nonland card revealed this way.$Your opponents can't cast spells with the chosen name (as long as this creature is on the battlefield).| Clash of Wills|49|U|{X}{U}|Instant|||Counter target spell unless its controller pays {X}.| -Claustrophobia|Magic Origins|50|C|{1}{U}{U}|Enchantment - Aura|||$Enchant creature$When Claustrophobia enters the battlefield, tap enchanted creature.$Enchanted creature doesn't untap during its controller's untap step.$Enchant creature$When Claustrophobia enters the battlefield, tap enchanted creature.$Enchanted creature doesn't untap during its controller's untap step.| -Disperse|Magic Origins|54|C|{1}{U}|Instant|||Return target nonland permanent to its owner's hand.$Return target nonland permanent to its owner's hand.| -Displacement Wave|Magic Origins|?|?mtg-set-icon mtg-set-magic-origins-unknown|{X}{U}{U}{X}{U}{U}|Sorcery|||Return all nonland permanents with converted mana cost X or less to their owners' hands.$Return all nonland permanents with converted mana cost X or less to their owners' hands.| +Claustrophobia|Magic Origins|50|C|{1}{U}{U}|Enchantment - Aura|||$Enchant creature$When Claustrophobia enters the battlefield, tap enchanted creature.$Enchanted creature doesn't untap during its controller's untap step.| +Disperse|Magic Origins|54|C|{1}{U}|Instant|||Return target nonland permanent to its owner's hand.| +Displacement Wave|Magic Origins|?|?mtg-set-icon mtg-set-magic-origins-unknown|{X}{U}{U}{X}{U}{U}|Sorcery|||Return all nonland permanents with converted mana cost X or less to their owners' hands.| Hydrolash|Magic Origins|59|U|{2}{U}|Instant|||Attacking creatures get -2/-0 until end of turn.$Draw a card.| Jace, Telepath Unbound|Magic Origins|60|M||Planeswalker - Jace|5|+1: Up to one target creature gets -2/-0 until your next turn.$-3: You may cast target instant or sorcery card from your graveyard this turn. If that card would be put into your graveyard this turn, exile it instead.$-9: You get an emblem with "Whenever you cast a spell, target opponent puts the top five cards of his or her library into his or her graveyard". $+1: Up to one target creature gets -2/-0 until your next turn.$-3: You may cast target instant or sorcery card from your graveyard this turn. If that card would be put into your graveyard this turn, exile it instead.$-9: You get an emblem with "Whenever you cast a spell, target opponent puts the top five cards of his or her library into his or her graveyard". | Jace, Vryn's Prodigy|Magic Origins|60|M|{1}{U}|Legendary Creature - Human Wizard|0|2|{T}: Draw a card, then discard a card. If there are five or more cards in your graveyard, exile Jace, Vryn''s Prodigy, then return him to the battefield transformed under his owner's control. ${T}: Draw a card, then discard a card. If there are five or more cards in your graveyard, exile Jace, Vryn''s Prodigy, then return him to the battefield transformed under his owner's control. | Jhessian Thief|Magic Origins|62|U|{2}{U}|Creature - Human Rogue|1|3|Prowess (Whenever you cast a noncreature spell, this creature gets +1/+1 until end of turn.)$Whenever Jhessian Thief deals combat damage to a player, draw a card.| Maritime Guard|Magic Origins|63|C|{1}{U}|Creature - Merfolk Soldier|1|3|| -Mizzium Meddler|Magic Origins|?|R|{2}{U}|Creature - Vedalken Wizard|1|4|Flash$When Mizzium Meddler enters the battlefield, change a target of target spell or ability to Mizzium Meddler.$Flash$When Mizzium Meddler enters the battlefield, change a target of target spell or ability to Mizzium Meddler.| +Mizzium Meddler|Magic Origins|?|R|{2}{U}|Creature - Vedalken Wizard|1|4|Flash$When Mizzium Meddler enters the battlefield, change a target of target spell or ability to Mizzium Meddler.| Ringwarden Owl|Magic Origins|68|C|{3}{U}{U}|Creature - Bird|3|3|Flying (This creature can't be blocked except by creatures with flying or reach.)$Prowess (Whenever you cast a noncreature spell, this creature gets +1/+1 until end of turn.)| -Scrapskin Drake|Magic Origins|69|C|{2}{U}|Creature - Zombie Drake|2|3|Flying$Scrapskin Drake can block only creatures with flying.$Flying$Scrapskin Drake can block only creatures with flying.| +Scrapskin Drake|Magic Origins|69|C|{2}{U}|Creature - Zombie Drake|2|3|Flying$Scrapskin Drake can block only creatures with flying.| Send to Sleep|Magic Origins|71|C|{1}{U}|Instant|||Tap up to two target creatures.$Spell mastery - If there are two or more instant and/or sorcery cards in your graveyard, those creatures don't untap during their controllers' next untap steps.| Separatist Voidmage|Magic Origins|72|C|{3}{U}|Creature - Human Wizard|2|2|When Separatist Voidmage enters the battlefield, you may return target creature to its owner's hand.| Sphinx's Tutelage|Magic Origins|76|U|{2}{U}|Enchantment|||Whenever you draw a card, target opponent puts the top two cards of his or her library into his or her graveyard. If they're both nonland cards that share a color, repeat this process.${5}{U}: Draw a card, then discard a card.| -Tower Geist|Magic Origins|80|U|{3}{U}|Creature - Spirit|2|2|Flying$When Tower Geist enters the battlefield, look at the top two cards of your library. Put one of them into your hand and the other into your graveyard.$Flying$When Tower Geist enters the battlefield, look at the top two cards of your library. Put one of them into your hand and the other into your graveyard.| +Tower Geist|Magic Origins|80|U|{3}{U}|Creature - Spirit|2|2|Flying$When Tower Geist enters the battlefield, look at the top two cards of your library. Put one of them into your hand and the other into your graveyard.| Catacomb Slug|Magic Origins|86|C|{4}{B}|Creature - Slug|2|6|| -Cruel Revival|Magic Origins|88|C|{4}{B}|Instant|||Destroy target non-Zombie creature. It can't be regenerated. Return up to one target Zombie card from your graveyard to your hand.$Destroy target non-Zombie creature. It can't be regenerated. Return up to one target Zombie card from your graveyard to your hand.| +Cruel Revival|Magic Origins|88|C|{4}{B}|Instant|||Destroy target non-Zombie creature. It can't be regenerated. Return up to one target Zombie card from your graveyard to your hand.| Deadbridge Shaman|Magic Origins|91|C|{2}{B}|Creature - Elf Shaman|3|1|When Deadbridge Shaman dies, target opponent discards a card.| Eyeblight Assassin|Magic Origins|95|C|{2}{B}|Creature - Elf Assassin|2|2|When Eyeblight Assassin enters the battlefield, target creature an opponent controls gets -1/-1 until end of turn.| Infernal Scarring|Magic Origins|102|C|{1}{B}|Enchantment - Aura|||Enchant creature$Enchanted creature gets +2/+0 and has "When this creature dies, draw a card."| @@ -26281,63 +26281,63 @@ Malakir Cullblade|Magic Origins|108|U|{1}{B}|Creature - Vampire Warrior|1|1|When Rabid Bloodsucker|Magic Origins|113|C|{4}{B}|Creature - Vampire|3|2|Flying$When Rabid Bloodsucker enters the battlefield, each player loses 2 life.| Reave Soul|Magic Origins|115|C|{1}{B}|Sorcery|||Destroy target creature with power 3 or less.| Shambling Ghoul|Magic Origins|119|C|{1}{B}|Creature - Zombie|2|3|Shambling Ghoul enters the battlefield tapped.| -Weight of the Underworld|Magic Origins|126|C|{3}{B}|Enchantment - Aura|||Enchant creature$Enchanted creature gets -3/-2.$Enchant creature$Enchanted creature gets -3/-2.| -Act of Treason|Magic Origins|129|C|{2}{R}{2}{R}|Sorcery|||Gain control of target creature until end of turn. Untap that creature. It gains haste until end of turn.$Gain control of target creature until end of turn. Untap that creature. It gains haste until end of turn.| +Weight of the Underworld|Magic Origins|126|C|{3}{B}|Enchantment - Aura|||Enchant creature$Enchanted creature gets -3/-2.| +Act of Treason|Magic Origins|129|C|{2}{R}{2}{R}|Sorcery|||Gain control of target creature until end of turn. Untap that creature. It gains haste until end of turn.| Avaricious Dragon|Magic Origins|131|M|{2}{R}{R}|Creature - Dragon|4|4|Flying$At the beginning of your draw step, draw an additional card.$At the beginning of your end step, discard your hand.| Bellows Lizard|Magic Origins|132|C|{R}|Creature - Lizard|1|1|{1}{R}: Bellows Lizard gets +1/+0 until end of turn.${1}{R}: Bellows Lizard gets +1/+0 until end of turn.| Boggart Brute|Magic Origins|133|C|{2}{R}|Creature - Goblin Warrior|3|2|Menace (This creature can't be blocked except by two or more creatures.)| -Chandra, Fire of Kaladesh|Magic Origins|135|M|{1}{R}{R}|Legendary Creature - Human Shaman|2|2|Whenever you cast a red spell, untap Chandra, Fire of Kaladesh.${T}: Chandra, Fire of Kaladesh deals 1 damage to target player. If Chandra has dealt 3 or more damage this turn, exile her, then return her to the battlefield transformed under her owner's control.$Whenever you cast a red spell, untap Chandra, Fire of Kaladesh.${T}: Chandra, Fire of Kaladesh deals 1 damage to target player. If Chandra has dealt 3 or more damage this turn, exile her, then return her to the battlefield transformed under her owner's control.| -Chandra, Roaring Flame|Magic Origins|135|M||Planeswalker - Chandra|4|+1: Chandra, Roaring Flame deals 2 damage to target player.$-2: Chandra, Roaring Flame deals 2 damage to target creature.$-7: Chandra, Roaring Flame deals 6 damage to each opponent. Each player dealt damage this way gets an emblem with "At the beginning of your upkeep, this emblem deals 3 damage to you."$+1: Chandra, Roaring Flame deals 2 damage to target player.$-2: Chandra, Roaring Flame deals 2 damage to target creature.$-7: Chandra, Roaring Flame deals 6 damage to each opponent. Each player dealt damage this way gets an emblem with "At the beginning of your upkeep, this emblem deals 3 damage to you."| -Chandra's Fury|Magic Origins|136|C|{4}{R}|Instant|||Chandra's Fury deals 4 damage to target player and 1 damage to each creature that player controls.$Chandra's Fury deals 4 damage to target player and 1 damage to each creature that player controls.| +Chandra, Fire of Kaladesh|Magic Origins|135|M|{1}{R}{R}|Legendary Creature - Human Shaman|2|2|Whenever you cast a red spell, untap Chandra, Fire of Kaladesh.${T}: Chandra, Fire of Kaladesh deals 1 damage to target player. If Chandra has dealt 3 or more damage this turn, exile her, then return her to the battlefield transformed under her owner's control.| +Chandra, Roaring Flame|Magic Origins|135|M||Planeswalker - Chandra|4|+1: Chandra, Roaring Flame deals 2 damage to target player.$-2: Chandra, Roaring Flame deals 2 damage to target creature.$-7: Chandra, Roaring Flame deals 6 damage to each opponent. Each player dealt damage this way gets an emblem with "At the beginning of your upkeep, this emblem deals 3 damage to you."| +Chandra's Fury|Magic Origins|136|C|{4}{R}|Instant|||Chandra's Fury deals 4 damage to target player and 1 damage to each creature that player controls.| Chandra's Ignition|Magic Origins|137|R|{3}{R}{R}|Sorcery|||Target creature you control deals damage equal to its power to each other creature and each opponent.| Cobblebrute|Magic Origins|138|C|{3}{R}{3}{R}|Creature - Elemental|5|2|| Enthralling Victor|Magic Origins|142|U|{3}{R}|Creature - Human Warrior|3|2|When Enthralling Victor enters the battlefield, gain control of target creature an opponent controls with power 2 or less until end of turn. Untap that creature. It gains haste until end of turn.| -Fiery Conclusion|Magic Origins|144|C|{1}{R}|Instant|||As an additional cost to cast Fiery Conclusion, sacrifice a creature.$Fiery Conclusion deals 5 damage to target creature.$As an additional cost to cast Fiery Conclusion, sacrifice a creature.$Fiery Conclusion deals 5 damage to target creature.| +Fiery Conclusion|Magic Origins|144|C|{1}{R}|Instant|||As an additional cost to cast Fiery Conclusion, sacrifice a creature.$Fiery Conclusion deals 5 damage to target creature.| Fiery Impulse|Magic Origins|145|C|{R}|Instant|||Fiery Imulse deals 2 damage to target creature.$Spell mastery - If there are two or more instant and/or sorcery cards in your graveyard, Fiery Impulse deals 3 damage to that creature instead.| Lightning Javelin|Magic Origins|153|C|{3}{R}|Sorcery|||Lightning Javelin deals 3 damage to target creature or player. Scry 1.| Pia and Kiran Nalaar|Magic Origins|157|R|{2}{R}{R}|Legendary Creature - Human Artificer|2|2|When Pia and Kiran Nalaar enters the battlefield put 2 1/1 colorless Thopter artifact creature tokens with flying onto the battlefield.${2}{R}, Sacrifice an artifact: Pia and Kiran Nalaar deals 2 damage to target creature or player.| Ravaging Blaze|Magic Origins|159|U|{X}{R}{R}|Instant|||Ravaging Blaze deals X damage to target creature. $Spell mastery — If there are two or more instant and/or sorcery cards in your graveyard, Ravaging Blaze also deals X damage to that creature's controller.| Seismic Elemental|Magic Origins|161|U|{3}{R}{R}|Creature - Elemental|4|4|When Seismic Elemental enters the battlefield, creatures without flying can't block this turn.| Subterranean Scout|Magic Origins|164|C|{1}{R}|Creature - Goblin Scout|2|1|When Subterranean Scout enters the battlefield, target creature with power 2 or less can't be blocked this turn.| -Titan's Strength|Magic Origins|166|C|{R}|Instant|||Target creature gets +3/+1 until end of turn. Scry 1.$Target creature gets +3/+1 until end of turn. Scry 1.| +Titan's Strength|Magic Origins|166|C|{R}|Instant|||Target creature gets +3/+1 until end of turn. Scry 1.| Volcanic Rambler|Magic Origins|167|C|{5}{R}|Creature - Elemental|6|4|{2}{R}: Volcanic Rambler deals 1 damage to target player.| Conclave Naturalists|Magic Origins|171|U|{4}{G}|Creature - Dryad|4|4|When Conclave Naturalists enters the battlefield, you may destroy target artifact or enchantment.| Dwynen, Gilt-Leaf Daen|Magic Origins|172|R|{2}{G}{G}|Legendary Creature - Elf Warrior|3|4|Reach$Other Elf creatures you control get +1/+1.$Whenever Dwynen, Gilt-Leaf Daen attacks, you gain 1 life for each attacking Elf you control.| Elemental Bond|Magic Origins|174|U|{2}{G}|Enchantment|||Whenever a creature with power 3 or greater enters the battlefield under your control, draw a card.| -Elvish Visionary|Magic Origins|175|C|{1}{G}|Creature - Elf Shaman|1|1|When Elvish Visionary enters the battlefield, draw a card.$When Elvish Visionary enters the battlefield, draw a card.| +Elvish Visionary|Magic Origins|175|C|{1}{G}|Creature - Elf Shaman|1|1|When Elvish Visionary enters the battlefield, draw a card.| Hitchclaw Recluse|Magic Origins|181|C|{2}{G}|Creature - Spider|1|4|Reach| Joraga Invocation|Magic Origins|183|U|{4}{G}{G}|Sorcery|||Each creature you control gets +3/+3 until end of turn and must be blocked this turn if able.| -Leaf Gilder|Magic Origins|184|C|{1}{G}|Creature - Elf Druid|2|1|{T}: Add {G} to your mana pool.${T}: Add {G} to your mana pool.| +Leaf Gilder|Magic Origins|184|C|{1}{G}|Creature - Elf Druid|2|1|{T}: Add {G} to your mana pool.| Mantle of Webs|Magic Origins|187|C|{1}{G}|Enchantment - Aura|||Enchant Creature$Enchanted creature gets +1/+3 and has reach.| -Nissa, Sage Animist|Magic Origins|189|M||Planeswalker - Nissa|3|+1: Reveal the top card of your library. If it's a land card, put it onto the battlefield. Otherwise, put it into your hand.$-2: Put a legendary 4/4 green Elemental creature token named Ashaya, the Awoken World onto the battlefield.$-7: Untap up to six target lands. They become 6/6 Elemental creatures. They're still lands.$+1: Reveal the top card of your library. If it's a land card, put it onto the battlefield. Otherwise, put it into your hand.$-2: Put a legendary 4/4 green Elemental creature token named Ashaya, the Awoken World onto the battlefield.$-7: Untap up to six target lands. They become 6/6 Elemental creatures. They're still lands.| -Nissa, Vastwood Seer|Magic Origins|189|M|{2}{G}|Legendary Creature - Elf Scout|2|2|When Nissa, Vastwood Seer enters the battlefield, you may search your library for a basic Forest card, reveal it, put it into your hand, then shuffle your library.$Whenever a land enters the battlefield under your control, if you control seven or more lands, exile Nissa, then return her to the battlefield transformed under her owner's control.$When Nissa, Vastwood Seer enters the battlefield, you may search your library for a basic Forest card, reveal it, put it into your hand, then shuffle your library.$Whenever a land enters the battlefield under your control, if you control seven or more lands, exile Nissa, then return her to the battlefield transformed under her owner's control.| +Nissa, Sage Animist|Magic Origins|189|M||Planeswalker - Nissa|3|+1: Reveal the top card of your library. If it's a land card, put it onto the battlefield. Otherwise, put it into your hand.$-2: Put a legendary 4/4 green Elemental creature token named Ashaya, the Awoken World onto the battlefield.$-7: Untap up to six target lands. They become 6/6 Elemental creatures. They're still lands.$| +Nissa, Vastwood Seer|Magic Origins|189|M|{2}{G}|Legendary Creature - Elf Scout|2|2|When Nissa, Vastwood Seer enters the battlefield, you may search your library for a basic Forest card, reveal it, put it into your hand, then shuffle your library.$Whenever a land enters the battlefield under your control, if you control seven or more lands, exile Nissa, then return her to the battlefield transformed under her owner's control.| Rhox Maulers|Magic Origins|196|C|{4}{G}|Creature - Rhino Soldier|4|4|Trample (This creature can deal excess combat damage to defending player or planeswalker while attacking.)$Renown 2 (When this creature deals combat damage to a player, if it isn't renowned, put two +1/+1 counters on it and it becomes renowned.)| -Titanic Growth|Magic Origins|201|C|{1}{G}|Instant|||Target creature gets +4/+4 until end of turn.$Target creature gets +4/+4 until end of turn.| +Titanic Growth|Magic Origins|201|C|{1}{G}|Instant|||Target creature gets +4/+4 until end of turn.| Vastwood Gorger|Magic Origins|204|C|{5}{G}|Creature - Wurm|5|6|| -Yeva's Forcemage|Magic Origins|208|C|{2}{G}|Creature - Elf Shaman|2|2|When Yeva's Forcemage enters the battlefield, target creature gets +2/+2 until end of turn.$When Yeva's Forcemage enters the battlefield, target creature gets +2/+2 until end of turn.| +Yeva's Forcemage|Magic Origins|208|C|{2}{G}|Creature - Elf Shaman|2|2|When Yeva's Forcemage enters the battlefield, target creature gets +2/+2 until end of turn.| Blazing Hellhound|Magic Origins|210|U|{2}{B}{R}|Creature - Elemental Hound|4|3|{1}, Sacrifice another creature: Blazing Hellhound deals 1 damage to target creature or player.| Zendikar Incarnate|Magic Origins|219|U|{2}{R}{G}|Creature - Elemental|0|4|Zendikar Incarnate's power is equal to the amount of lands you control.| Gold-Forged Sentinel|Magic Origins|226|U|{6}|Artifact Creature - Chimera|4|4|Flying$Flying| Jayemdae Tome|Magic Origins|231|U|{4}|Artifact|||{4}, {T}: Draw a card.${4}, {T}: Draw a card.| -Meteorite|Magic Origins|233|U|{5}|Artifact|||When Meteorite enters the battlefield, it deals 2 damage to target creature or player.${T}: Add one mana of any color to your mana pool.$When Meteorite enters the battlefield, it deals 2 damage to target creature or player.${T}: Add one mana of any color to your mana pool.| -Runed Servitor|Magic Origins|238|U|{2}|Artifact Creature - Construct|2|2|When Runed Servitor dies, each player draws a card.$When Runed Servitor dies, each player draws a card.| +Meteorite|Magic Origins|233|U|{5}|Artifact|||When Meteorite enters the battlefield, it deals 2 damage to target creature or player.${T}: Add one mana of any color to your mana pool.| +Runed Servitor|Magic Origins|238|U|{2}|Artifact Creature - Construct|2|2|When Runed Servitor dies, each player draws a card.| Veteran's Sidearm|Magic Origins|242|C|{2}|Artifact - Equipment|||Equipped creature gets +1/+1.$Equip {1}| -Aegis Angel|Magic Origins|273|R|{4}{W}{W}|Creature - Angel|5|5|Flying$When Aegis Angel enters the battlefield, another target permanent gains indestructible for as long as you control Aegis Angel.$Flying$When Aegis Angel enters the battlefield, another target permanent gains indestructible for as long as you control Aegis Angel.| -Divine Verdict|Magic Origins|274|C|{3}{W}|Instant|||Destroy target attacking or blocking creature.$Destroy target attacking or blocking creature.| +Aegis Angel|Magic Origins|273|R|{4}{W}{W}|Creature - Angel|5|5|Flying$When Aegis Angel enters the battlefield, another target permanent gains indestructible for as long as you control Aegis Angel.| +Divine Verdict|Magic Origins|274|C|{3}{W}|Instant|||Destroy target attacking or blocking creature.| Eagle of the Watch|Magic Origins|275|C|{2}{W}|Creature - Bird|2|1|Flying, vigilance| -Serra Angel|Magic Origins|276|U|{3}{W}{W}|Creature - Angel|4|4|Flying$Vigilance$Flying$Vigilance| -Into the Void|Magic Origins|277|U|{3}{U}|Sorcery|||Return up to two target creatures to their owners' hands.$Return up to two target creatures to their owners' hands.| -Mahamoti Djinn|Magic Origins|278|R|{4}{U}{U}|Creature - Djinn|5|6|Flying$Flying| -Weave Fate|Magic Origins|279|C|{3}{U}|Instant|||Draw two cards.$Draw two cards.| -Flesh to Dust|Magic Origins|280|C|{3}{B}{B}|Instant|||Destroy target creature. It can't be regenerated.$Destroy target creature. It can't be regenerated.| -Mind Rot|Magic Origins|281|C|{2}{B}|Sorcery|||Target player discards two cards.$Target player discards two cards.| -Nightmare|Magic Origins|282|R|{5}{B}|Creature - Nightmare Horse|0|0|Flying$Nightmare's power and toughness are each equal to the number of Swamps you control.$Flying$Nightmare's power and toughness are each equal to the number of Swamps you control.| -Sengir Vampire|Magic Origins|283|U|{3}{B}{B}|Creature - Vampire|4|4|Flying$Whenever a creature dealt damage by Sengir Vampire this turn dies, put a +1/+1 counter on Sengir Vampire.$Flying$Whenever a creature dealt damage by Sengir Vampire this turn dies, put a +1/+1 counter on Sengir Vampire.| -Fiery Hellhound|Magic Origins|284|C|{1}{R}{R}|Creature - Elemental Hound|2|2|{R}: Fiery Hellhound gets +1/+0 until end of turn.${R}: Fiery Hellhound gets +1/+0 until end of turn.| -Shivan Dragon|Magic Origins|285|R|{4}{R}{R}|Creature - Dragon|5|5|Flying${R}: Shivan Dragon gets +1/+0 until end of turn.$Flying${R}: Shivan Dragon gets +1/+0 until end of turn.| -Plummet|Magic Origins|286|C|{1}{G}{1}{G}|Instant|||Destroy target creature with flying.$Destroy target creature with flying.| -Prized Unicorn|Magic Origins|287|U|{3}{G}|Creature - Unicorn|2|22|2|All creatures able to block Prized Unicorn do so.$All creatures able to block Prized Unicorn do so.| -Terra Stomper|Magic Origins|288|R|{3}{G}{G}{G}|Creature - Beast|8|8|Terra Stomper can't be countered.$Trample$Terra Stomper can't be countered.$Trample| +Serra Angel|Magic Origins|276|U|{3}{W}{W}|Creature - Angel|4|4|Flying$Vigilance| +Into the Void|Magic Origins|277|U|{3}{U}|Sorcery|||Return up to two target creatures to their owners' hands.| +Mahamoti Djinn|Magic Origins|278|R|{4}{U}{U}|Creature - Djinn|5|6|Flying| +Weave Fate|Magic Origins|279|C|{3}{U}|Instant|||Draw two cards.| +Flesh to Dust|Magic Origins|280|C|{3}{B}{B}|Instant|||Destroy target creature. It can't be regenerated.| +Mind Rot|Magic Origins|281|C|{2}{B}|Sorcery|||Target player discards two cards.| +Nightmare|Magic Origins|282|R|{5}{B}|Creature - Nightmare Horse|0|0|Flying$Nightmare's power and toughness are each equal to the number of Swamps you control.| +Sengir Vampire|Magic Origins|283|U|{3}{B}{B}|Creature - Vampire|4|4|Flying$Whenever a creature dealt damage by Sengir Vampire this turn dies, put a +1/+1 counter on Sengir Vampire.| +Fiery Hellhound|Magic Origins|284|C|{1}{R}{R}|Creature - Elemental Hound|2|2|{R}: Fiery Hellhound gets +1/+0 until end of turn.| +Shivan Dragon|Magic Origins|285|R|{4}{R}{R}|Creature - Dragon|5|5|Flying${R}: Shivan Dragon gets +1/+0 until end of turn.| +Plummet|Magic Origins|286|C|{1}{G}{1}{G}|Instant|||Destroy target creature with flying.| +Prized Unicorn|Magic Origins|287|U|{3}{G}|Creature - Unicorn|2|22|2|All creatures able to block Prized Unicorn do so.| +Terra Stomper|Magic Origins|288|R|{3}{G}{G}{G}|Creature - Beast|8|8|Terra Stomper can't be countered.$Trample| Ambush Commander|Duel Decks: Anthology, Elves vs. Goblins|1|R|{3}{G}{G}|Creature - Elf|2|2|Forests you control are 1/1 green Elf creatures that are still lands.${1}{G}, Sacrifice an Elf: Target creature gets +3/+3 until end of turn.| Lys Alana Huntmaster|Duel Decks: Anthology, Elves vs. Goblins|10|C|{2}{G}{G}|Creature - Elf Warrior|3|3|Whenever you cast an Elf spell, you may put a 1/1 green Elf Warrior creature token onto the battlefield.| Stonewood Invoker|Duel Decks: Anthology, Elves vs. Goblins|11|C|{1}{G}|Creature - Elf Mutant|2|2|{7}{G}: Stonewood Invoker gets +5/+5 until end of turn.| From 397a5d25dbd62b5503b32985c3ad55a196957b81 Mon Sep 17 00:00:00 2001 From: fireshoes Date: Mon, 22 Jun 2015 23:40:29 -0500 Subject: [PATCH 12/18] [ORI] Added 13 cards --- .../sets/magicorigins/BlazingHellhound.java | 82 +++++++++++++ .../sets/magicorigins/BlessedSpirits.java | 75 ++++++++++++ .../sets/magicorigins/DeadbridgeShaman.java | 68 +++++++++++ .../sets/magicorigins/EyeblightAssassin.java | 78 ++++++++++++ .../mage/sets/magicorigins/JhessianThief.java | 68 +++++++++++ .../src/mage/sets/magicorigins/Languish.java | 59 +++++++++ .../sets/magicorigins/MalakirCullblade.java | 74 ++++++++++++ .../sets/magicorigins/MizziumMeddler.java | 1 - .../sets/magicorigins/PatronOfTheValiant.java | 112 ++++++++++++++++++ .../sets/magicorigins/RabidBloodsucker.java | 67 +++++++++++ .../src/mage/sets/magicorigins/ReaveSoul.java | 69 +++++++++++ .../sets/magicorigins/ShamblingGhoul.java | 65 ++++++++++ .../sets/magicorigins/ZendikarIncarnate.java | 73 ++++++++++++ Utils/mtg-cards-data.txt | 4 +- 14 files changed, 892 insertions(+), 3 deletions(-) create mode 100644 Mage.Sets/src/mage/sets/magicorigins/BlazingHellhound.java create mode 100644 Mage.Sets/src/mage/sets/magicorigins/BlessedSpirits.java create mode 100644 Mage.Sets/src/mage/sets/magicorigins/DeadbridgeShaman.java create mode 100644 Mage.Sets/src/mage/sets/magicorigins/EyeblightAssassin.java create mode 100644 Mage.Sets/src/mage/sets/magicorigins/JhessianThief.java create mode 100644 Mage.Sets/src/mage/sets/magicorigins/Languish.java create mode 100644 Mage.Sets/src/mage/sets/magicorigins/MalakirCullblade.java create mode 100644 Mage.Sets/src/mage/sets/magicorigins/PatronOfTheValiant.java create mode 100644 Mage.Sets/src/mage/sets/magicorigins/RabidBloodsucker.java create mode 100644 Mage.Sets/src/mage/sets/magicorigins/ReaveSoul.java create mode 100644 Mage.Sets/src/mage/sets/magicorigins/ShamblingGhoul.java create mode 100644 Mage.Sets/src/mage/sets/magicorigins/ZendikarIncarnate.java diff --git a/Mage.Sets/src/mage/sets/magicorigins/BlazingHellhound.java b/Mage.Sets/src/mage/sets/magicorigins/BlazingHellhound.java new file mode 100644 index 00000000000..c8dd7b764ab --- /dev/null +++ b/Mage.Sets/src/mage/sets/magicorigins/BlazingHellhound.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.magicorigins; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.SacrificeTargetCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.DamageTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterControlledPermanent; +import mage.filter.predicate.permanent.AnotherPredicate; +import mage.target.common.TargetControlledPermanent; +import mage.target.common.TargetCreatureOrPlayer; + +/** + * + * @author fireshoes + */ +public class BlazingHellhound extends CardImpl { + + private static final FilterControlledPermanent filter = new FilterControlledCreaturePermanent("another creature"); + + static { + filter.add(new AnotherPredicate()); + } + + public BlazingHellhound(UUID ownerId) { + super(ownerId, 210, "Blazing Hellhound", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{2}{B}{R}"); + this.expansionSetCode = "ORI"; + this.subtype.add("Elemental"); + this.subtype.add("Hound"); + this.power = new MageInt(4); + this.toughness = new MageInt(3); + + // {1}, Sacrifice another creature: Blazing Hellhound deals 1 damage to target creature or player. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(1), new ManaCostsImpl("{1}")); + ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent(filter))); + ability.addTarget(new TargetCreatureOrPlayer()); + this.addAbility(ability); + } + + public BlazingHellhound(final BlazingHellhound card) { + super(card); + } + + @Override + public BlazingHellhound copy() { + return new BlazingHellhound(this); + } +} diff --git a/Mage.Sets/src/mage/sets/magicorigins/BlessedSpirits.java b/Mage.Sets/src/mage/sets/magicorigins/BlessedSpirits.java new file mode 100644 index 00000000000..2564e3ab3bf --- /dev/null +++ b/Mage.Sets/src/mage/sets/magicorigins/BlessedSpirits.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.magicorigins; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.SpellCastControllerTriggeredAbility; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.counters.CounterType; +import mage.filter.FilterSpell; +import mage.filter.predicate.mageobject.CardTypePredicate; + +/** + * + * @author fireshoes + */ +public class BlessedSpirits extends CardImpl { + + private static final FilterSpell filter = new FilterSpell("an enchantment spell"); + static { + filter.add(new CardTypePredicate(CardType.ENCHANTMENT)); + } + + public BlessedSpirits(UUID ownerId) { + super(ownerId, 7, "Blessed Spirits", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{2}{W}"); + this.expansionSetCode = "ORI"; + this.subtype.add("Spirit"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + + // Whenever you cast an enchantment spell, put a +1/+1 counter on Blessed Spirits. + this.addAbility(new SpellCastControllerTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), filter, false)); + } + + public BlessedSpirits(final BlessedSpirits card) { + super(card); + } + + @Override + public BlessedSpirits copy() { + return new BlessedSpirits(this); + } +} diff --git a/Mage.Sets/src/mage/sets/magicorigins/DeadbridgeShaman.java b/Mage.Sets/src/mage/sets/magicorigins/DeadbridgeShaman.java new file mode 100644 index 00000000000..1acfb3132e9 --- /dev/null +++ b/Mage.Sets/src/mage/sets/magicorigins/DeadbridgeShaman.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.magicorigins; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.DiesTriggeredAbility; +import mage.abilities.effects.common.discard.DiscardTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.target.common.TargetOpponent; + +/** + * + * @author fireshoes + */ +public class DeadbridgeShaman extends CardImpl { + + public DeadbridgeShaman(UUID ownerId) { + super(ownerId, 91, "Deadbridge Shaman", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{2}{B}"); + this.expansionSetCode = "ORI"; + this.subtype.add("Elf"); + this.subtype.add("Shaman"); + this.power = new MageInt(3); + this.toughness = new MageInt(1); + + // When Deadbridge Shaman dies, target opponent discards a card. + Ability ability = new DiesTriggeredAbility(new DiscardTargetEffect(1)); + ability.addTarget(new TargetOpponent()); + this.addAbility(ability); + } + + public DeadbridgeShaman(final DeadbridgeShaman card) { + super(card); + } + + @Override + public DeadbridgeShaman copy() { + return new DeadbridgeShaman(this); + } +} diff --git a/Mage.Sets/src/mage/sets/magicorigins/EyeblightAssassin.java b/Mage.Sets/src/mage/sets/magicorigins/EyeblightAssassin.java new file mode 100644 index 00000000000..39512764c91 --- /dev/null +++ b/Mage.Sets/src/mage/sets/magicorigins/EyeblightAssassin.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.magicorigins; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +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.TargetController; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.permanent.ControllerPredicate; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author fireshoes + */ +public class EyeblightAssassin extends CardImpl { + + private static final FilterCreaturePermanent filterOpponentCreature = new FilterCreaturePermanent("creature an opponent controls"); + + static { + filterOpponentCreature.add(new ControllerPredicate(TargetController.OPPONENT)); + } + + public EyeblightAssassin(UUID ownerId) { + super(ownerId, 95, "Eyeblight Assassin", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{2}{B}"); + this.expansionSetCode = "ORI"; + this.subtype.add("Elf"); + this.subtype.add("Assassin"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // When Eyeblight Assassin enters the battlefield, target creature an opponent controls gets -1/-1 until end of turn. + Ability ability = new EntersBattlefieldTriggeredAbility(new BoostTargetEffect(-1,-1, Duration.EndOfTurn)); + ability.addTarget(new TargetCreaturePermanent(filterOpponentCreature)); + this.addAbility(ability); + } + + public EyeblightAssassin(final EyeblightAssassin card) { + super(card); + } + + @Override + public EyeblightAssassin copy() { + return new EyeblightAssassin(this); + } +} diff --git a/Mage.Sets/src/mage/sets/magicorigins/JhessianThief.java b/Mage.Sets/src/mage/sets/magicorigins/JhessianThief.java new file mode 100644 index 00000000000..c92a125cee7 --- /dev/null +++ b/Mage.Sets/src/mage/sets/magicorigins/JhessianThief.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.magicorigins; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.abilities.keyword.ProwessAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class JhessianThief extends CardImpl { + + public JhessianThief(UUID ownerId) { + super(ownerId, 62, "Jhessian Thief", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{2}{U}"); + this.expansionSetCode = "ORI"; + this.subtype.add("Human"); + this.subtype.add("Rogue"); + this.power = new MageInt(1); + this.toughness = new MageInt(3); + + // Prowess + this.addAbility(new ProwessAbility()); + + // Whenever Jhessian Thief deals combat damage to a player, draw a card. + this.addAbility(new DealsCombatDamageToAPlayerTriggeredAbility(new DrawCardSourceControllerEffect(1), false)); + } + + public JhessianThief(final JhessianThief card) { + super(card); + } + + @Override + public JhessianThief copy() { + return new JhessianThief(this); + } +} diff --git a/Mage.Sets/src/mage/sets/magicorigins/Languish.java b/Mage.Sets/src/mage/sets/magicorigins/Languish.java new file mode 100644 index 00000000000..d97d157cd95 --- /dev/null +++ b/Mage.Sets/src/mage/sets/magicorigins/Languish.java @@ -0,0 +1,59 @@ +/* + * 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.magicorigins; + +import java.util.UUID; +import mage.abilities.effects.common.continuous.BoostAllEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class Languish extends CardImpl { + + public Languish(UUID ownerId) { + super(ownerId, 105, "Languish", Rarity.RARE, new CardType[]{CardType.SORCERY}, "{2}{B}{B}"); + this.expansionSetCode = "ORI"; + + // All creatures get -4/-4 until end of turn. + this.getSpellAbility().addEffect(new BoostAllEffect(-4, -4, Duration.EndOfTurn)); + } + + public Languish(final Languish card) { + super(card); + } + + @Override + public Languish copy() { + return new Languish(this); + } +} diff --git a/Mage.Sets/src/mage/sets/magicorigins/MalakirCullblade.java b/Mage.Sets/src/mage/sets/magicorigins/MalakirCullblade.java new file mode 100644 index 00000000000..cff4821e9da --- /dev/null +++ b/Mage.Sets/src/mage/sets/magicorigins/MalakirCullblade.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.magicorigins; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.DiesCreatureTriggeredAbility; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.counters.CounterType; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.permanent.ControllerPredicate; + +/** + * + * @author fireshoes + */ +public class MalakirCullblade extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("a creature an opponent controls"); + + static { + filter.add(new ControllerPredicate(TargetController.OPPONENT)); + } + + public MalakirCullblade(UUID ownerId) { + super(ownerId, 108, "Malakir Cullblade", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{1}{B}"); + this.expansionSetCode = "ORI"; + this.subtype.add("Vampire"); + this.subtype.add("Warrior"); + this.power = new MageInt(1); + this.toughness = new MageInt(1); + + // Whenever a creature an opponent controls dies, put a +1/+1 counter on Malakir Cullblade. + this.addAbility(new DiesCreatureTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), false, filter)); + } + + public MalakirCullblade(final MalakirCullblade card) { + super(card); + } + + @Override + public MalakirCullblade copy() { + return new MalakirCullblade(this); + } +} diff --git a/Mage.Sets/src/mage/sets/magicorigins/MizziumMeddler.java b/Mage.Sets/src/mage/sets/magicorigins/MizziumMeddler.java index fa22c008452..9521c64b235 100644 --- a/Mage.Sets/src/mage/sets/magicorigins/MizziumMeddler.java +++ b/Mage.Sets/src/mage/sets/magicorigins/MizziumMeddler.java @@ -38,7 +38,6 @@ 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.stack.Spell; import mage.game.stack.StackAbility; diff --git a/Mage.Sets/src/mage/sets/magicorigins/PatronOfTheValiant.java b/Mage.Sets/src/mage/sets/magicorigins/PatronOfTheValiant.java new file mode 100644 index 00000000000..33ad7ae9261 --- /dev/null +++ b/Mage.Sets/src/mage/sets/magicorigins/PatronOfTheValiant.java @@ -0,0 +1,112 @@ +/* + * 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.magicorigins; + +import java.util.UUID; +import mage.MageInt; +import mage.MageObject; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.counters.CounterType; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.permanent.CounterPredicate; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.players.Player; + +/** + * + * @author fireshoes + */ +public class PatronOfTheValiant extends CardImpl { + + public PatronOfTheValiant(UUID ownerId) { + super(ownerId, 28, "Patron of the Valiant", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{3}{W}{W}"); + this.expansionSetCode = "ORI"; + this.subtype.add("Angel"); + this.power = new MageInt(4); + this.toughness = new MageInt(4); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + + // When Patron of the Valiant enters the battlefield, put a +1/+1 counter on each creature you control with a +1/+1 counter on it. + this.addAbility(new EntersBattlefieldTriggeredAbility(new PatronOfTheValiantEffect())); + } + + public PatronOfTheValiant(final PatronOfTheValiant card) { + super(card); + } + + @Override + public PatronOfTheValiant copy() { + return new PatronOfTheValiant(this); + } +} + +class PatronOfTheValiantEffect extends OneShotEffect { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent(); + + static { + filter.add(new CounterPredicate(CounterType.P1P1)); + } + + public PatronOfTheValiantEffect() { + super(Outcome.Benefit); + this.staticText = "put a +1/+1 counter on each creature you control with a +1/+1 counter on it."; + } + + public PatronOfTheValiantEffect(final PatronOfTheValiantEffect effect) { + super(effect); + } + + @Override + public PatronOfTheValiantEffect copy() { + return new PatronOfTheValiantEffect(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) { + for(Permanent permanent: game.getState().getBattlefield().getAllActivePermanents(filter , controller.getId(), game)) { + permanent.addCounters(CounterType.P1P1.createInstance(), game); + game.informPlayers(sourceObject.getName() + ": Put a +1/+1 counter on " + permanent.getLogName()); + } + } + return true; + } +} diff --git a/Mage.Sets/src/mage/sets/magicorigins/RabidBloodsucker.java b/Mage.Sets/src/mage/sets/magicorigins/RabidBloodsucker.java new file mode 100644 index 00000000000..41d8ed865f3 --- /dev/null +++ b/Mage.Sets/src/mage/sets/magicorigins/RabidBloodsucker.java @@ -0,0 +1,67 @@ +/* + * 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.magicorigins; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.effects.common.LoseLifeAllPlayersEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class RabidBloodsucker extends CardImpl { + + public RabidBloodsucker(UUID ownerId) { + super(ownerId, 113, "Rabid Bloodsucker", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{4}{B}"); + this.expansionSetCode = "ORI"; + this.subtype.add("Vampire"); + this.power = new MageInt(3); + this.toughness = new MageInt(2); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + + // When Rabid Bloodsucker enters the battlefield, each player loses 2 life. + this.addAbility(new EntersBattlefieldTriggeredAbility(new LoseLifeAllPlayersEffect(2), false)); + } + + public RabidBloodsucker(final RabidBloodsucker card) { + super(card); + } + + @Override + public RabidBloodsucker copy() { + return new RabidBloodsucker(this); + } +} diff --git a/Mage.Sets/src/mage/sets/magicorigins/ReaveSoul.java b/Mage.Sets/src/mage/sets/magicorigins/ReaveSoul.java new file mode 100644 index 00000000000..8a55934f72a --- /dev/null +++ b/Mage.Sets/src/mage/sets/magicorigins/ReaveSoul.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.magicorigins; + +import java.util.UUID; +import mage.abilities.effects.common.DestroyTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.filter.Filter; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.mageobject.PowerPredicate; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author fireshoes + */ +public class ReaveSoul extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with power 3 or less"); + + static { + filter.add(new PowerPredicate(Filter.ComparisonType.LessThan, 4)); + } + + public ReaveSoul(UUID ownerId) { + super(ownerId, 115, "Reave Soul", Rarity.COMMON, new CardType[]{CardType.SORCERY}, "{1}{B}"); + this.expansionSetCode = "ORI"; + + // Destroy target creature with power 3 or less. + this.getSpellAbility().addEffect(new DestroyTargetEffect()); + this.getSpellAbility().addTarget(new TargetCreaturePermanent(filter)); + } + + public ReaveSoul(final ReaveSoul card) { + super(card); + } + + @Override + public ReaveSoul copy() { + return new ReaveSoul(this); + } +} diff --git a/Mage.Sets/src/mage/sets/magicorigins/ShamblingGhoul.java b/Mage.Sets/src/mage/sets/magicorigins/ShamblingGhoul.java new file mode 100644 index 00000000000..b13d42776de --- /dev/null +++ b/Mage.Sets/src/mage/sets/magicorigins/ShamblingGhoul.java @@ -0,0 +1,65 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.magicorigins; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.EntersBattlefieldAbility; +import mage.abilities.effects.common.TapSourceEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class ShamblingGhoul extends CardImpl { + + private static final String staticText = "{this} enters the battlefield tapped"; + + public ShamblingGhoul(UUID ownerId) { + super(ownerId, 119, "Shambling Ghoul", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{1}{B}"); + this.expansionSetCode = "ORI"; + this.subtype.add("Zombie"); + this.power = new MageInt(2); + this.toughness = new MageInt(3); + + // Shambling Ghoul enters the battlefield tapped. + this.addAbility(new EntersBattlefieldAbility(new TapSourceEffect(), staticText)); + } + + public ShamblingGhoul(final ShamblingGhoul card) { + super(card); + } + + @Override + public ShamblingGhoul copy() { + return new ShamblingGhoul(this); + } +} diff --git a/Mage.Sets/src/mage/sets/magicorigins/ZendikarIncarnate.java b/Mage.Sets/src/mage/sets/magicorigins/ZendikarIncarnate.java new file mode 100644 index 00000000000..d5d9a205d07 --- /dev/null +++ b/Mage.Sets/src/mage/sets/magicorigins/ZendikarIncarnate.java @@ -0,0 +1,73 @@ +/* + * 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.magicorigins; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.dynamicvalue.DynamicValue; +import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount; +import mage.abilities.effects.common.continuous.SetPowerSourceEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterControlledLandPermanent; +import mage.filter.common.FilterControlledPermanent; + +/** + * + * @author fireshoes + */ +public class ZendikarIncarnate extends CardImpl { + + private static final FilterControlledPermanent filter = new FilterControlledLandPermanent("lands you control"); + + public ZendikarIncarnate(UUID ownerId) { + super(ownerId, 219, "Zendikar Incarnate", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{2}{R}{G}"); + this.expansionSetCode = "ORI"; + this.subtype.add("Elemental"); + this.power = new MageInt(0); + this.toughness = new MageInt(4); + + DynamicValue controlledLands = new PermanentsOnBattlefieldCount(filter); + + // Zendikar Incarnate's power is equal to the amount of lands you control. + this.addAbility(new SimpleStaticAbility(Zone.ALL, new SetPowerSourceEffect(controlledLands, Duration.EndOfGame))); + } + + public ZendikarIncarnate(final ZendikarIncarnate card) { + super(card); + } + + @Override + public ZendikarIncarnate copy() { + return new ZendikarIncarnate(this); + } +} diff --git a/Utils/mtg-cards-data.txt b/Utils/mtg-cards-data.txt index b456543804c..0e3974d0b5f 100644 --- a/Utils/mtg-cards-data.txt +++ b/Utils/mtg-cards-data.txt @@ -26246,7 +26246,7 @@ Knight of the Pilgrim's Road|Magic Origins|20|C|{2}{W}|Creature - Human Knight|3 Gideon, Battle-Forged|Magic Origins|23|M||Planeswalker - Gideon|3|+2: Up to one target creature an opponent controls attacks Gideon, Battle-Forged during its controller's next turn if able.$+1: Until your next turn, target creature gains indestructible. Untap that creature.$0: Until end of turn, Gideon, Battle-Forged becomes a 4/4 Human Soldier creature with indestructible that's still a planeswalker. Prevent all damage that would be dealt to him this turn.| Kytheon, Hero of Akros|Magic Origins|23|M|{W}|Legendary Creature - Human Soldier|2|1|At end of combat, if Kytheon, Hero of Akros and at least two other creatures attacked this combat, exile Kytheon, then return him to the battlefield transformed under his owner's control.${2}{W}: Kytheon gains indestructible until end of turn.| Mighty Leap|Magic Origins|26|C|{1}{W}|Instant|||Target creature gets +2/+2 and gains flying until end of turn.| -Patron of the Valiant|Magic Origins|28|U|{3}{W}{W}|4|4|Flying$When Patron of the Valiant enters the battlefield, put a +1/+1 counter on each creature you control with a +1/+1 counter on it.| +Patron of the Valiant|Magic Origins|28|U|{3}{W}{W}|Creature - Angel|4|4|Flying$When Patron of the Valiant enters the battlefield, put a +1/+1 counter on each creature you control with a +1/+1 counter on it.| Relic Hunter|Magic Origins|29|R|{1}{W}|Creature - Human|2|2|Renown 1 (When this creature deals combat damage to a player, put a +1/+1 counter on it and it becomes renowned.)$When Relic Hunter becomes renowned, you may search your library for an Equipment card, reveal it, put it in your hand, then shuffle your library.| Sentinel of the Eternal Watch|Magic Origins|30|U|{5}{W}|Creature - Giant Soldier|4|6|Vigilance (Attacking doesn't cause this creature to tap.)$At the beginning of combat on each opponent's turn, tap target creature that player controls.| Valor in Akros|Magic Origins|39|U|{3}{W}|Enchantment|||Whenever a creature enters the battlefield under your control, creatures you control get +1/+1 until end of turn.| @@ -26255,7 +26255,7 @@ Alhammarrat, High Arbiter|43|R|{5}{U}{U}|Legendary Creature - Sphinx|5|5|Flying$ Clash of Wills|49|U|{X}{U}|Instant|||Counter target spell unless its controller pays {X}.| Claustrophobia|Magic Origins|50|C|{1}{U}{U}|Enchantment - Aura|||$Enchant creature$When Claustrophobia enters the battlefield, tap enchanted creature.$Enchanted creature doesn't untap during its controller's untap step.| Disperse|Magic Origins|54|C|{1}{U}|Instant|||Return target nonland permanent to its owner's hand.| -Displacement Wave|Magic Origins|?|?mtg-set-icon mtg-set-magic-origins-unknown|{X}{U}{U}{X}{U}{U}|Sorcery|||Return all nonland permanents with converted mana cost X or less to their owners' hands.| +Displacement Wave|Magic Origins|55|R|{X}{U}{U}{X}{U}{U}|Sorcery|||Return all nonland permanents with converted mana cost X or less to their owners' hands.| Hydrolash|Magic Origins|59|U|{2}{U}|Instant|||Attacking creatures get -2/-0 until end of turn.$Draw a card.| Jace, Telepath Unbound|Magic Origins|60|M||Planeswalker - Jace|5|+1: Up to one target creature gets -2/-0 until your next turn.$-3: You may cast target instant or sorcery card from your graveyard this turn. If that card would be put into your graveyard this turn, exile it instead.$-9: You get an emblem with "Whenever you cast a spell, target opponent puts the top five cards of his or her library into his or her graveyard". $+1: Up to one target creature gets -2/-0 until your next turn.$-3: You may cast target instant or sorcery card from your graveyard this turn. If that card would be put into your graveyard this turn, exile it instead.$-9: You get an emblem with "Whenever you cast a spell, target opponent puts the top five cards of his or her library into his or her graveyard". | Jace, Vryn's Prodigy|Magic Origins|60|M|{1}{U}|Legendary Creature - Human Wizard|0|2|{T}: Draw a card, then discard a card. If there are five or more cards in your graveyard, exile Jace, Vryn''s Prodigy, then return him to the battefield transformed under his owner's control. ${T}: Draw a card, then discard a card. If there are five or more cards in your graveyard, exile Jace, Vryn''s Prodigy, then return him to the battefield transformed under his owner's control. | From f13c1a5794dcfcdd9125ee29f8b6757846ab16cb Mon Sep 17 00:00:00 2001 From: fireshoes Date: Tue, 23 Jun 2015 00:50:14 -0500 Subject: [PATCH 13/18] Added Holiday Cube 2015 --- .../tournament/cubes/HolidayCube2015.java | 582 ++++++++++++++++++ Mage.Server/config/config.xml | 11 +- Mage.Server/release/config/config.xml | 9 +- 3 files changed, 593 insertions(+), 9 deletions(-) create mode 100644 Mage.Server.Plugins/Mage.Tournament.BoosterDraft/src/mage/tournament/cubes/HolidayCube2015.java diff --git a/Mage.Server.Plugins/Mage.Tournament.BoosterDraft/src/mage/tournament/cubes/HolidayCube2015.java b/Mage.Server.Plugins/Mage.Tournament.BoosterDraft/src/mage/tournament/cubes/HolidayCube2015.java new file mode 100644 index 00000000000..7d8d980924a --- /dev/null +++ b/Mage.Server.Plugins/Mage.Tournament.BoosterDraft/src/mage/tournament/cubes/HolidayCube2015.java @@ -0,0 +1,582 @@ +/* + * 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.tournament.cubes; + +import mage.game.draft.DraftCube; + +/** + * + * @author fireshoes + */ +public class HolidayCube2015 extends DraftCube { + + public HolidayCube2015() { + super("MTGO Holiday Cube 2015"); + + cubeCards.add(new CardIdentity("Abrupt Decay", "")); + cubeCards.add(new CardIdentity("Academy Ruins", "")); + cubeCards.add(new CardIdentity("Acidic Slime", "")); + cubeCards.add(new CardIdentity("Adarkar Wastes", "")); + cubeCards.add(new CardIdentity("Ajani Goldmane", "")); + cubeCards.add(new CardIdentity("Ajani Vengeant", "")); + cubeCards.add(new CardIdentity("Ajani, Caller of the Pride", "")); + cubeCards.add(new CardIdentity("Alesha, Who Smiles at Death", "")); + cubeCards.add(new CardIdentity("Ancestral Recall", "")); + cubeCards.add(new CardIdentity("Ancestral Vision", "")); + cubeCards.add(new CardIdentity("Ancient Grudge", "")); + cubeCards.add(new CardIdentity("Ancient Tomb", "")); + cubeCards.add(new CardIdentity("Angel of Serenity", "")); + cubeCards.add(new CardIdentity("Animate Dead", "")); + cubeCards.add(new CardIdentity("Arbor Elf", "")); + cubeCards.add(new CardIdentity("Archangel of Thune", "")); + cubeCards.add(new CardIdentity("Arid Mesa", "")); + cubeCards.add(new CardIdentity("Armageddon", "")); + cubeCards.add(new CardIdentity("Ashiok, Nightmare Weaver", "")); + cubeCards.add(new CardIdentity("Augur of Bolas", "")); + cubeCards.add(new CardIdentity("Avacyn's Pilgrim", "")); + cubeCards.add(new CardIdentity("Avalanche Riders", "")); + cubeCards.add(new CardIdentity("Avenger of Zendikar", "")); + cubeCards.add(new CardIdentity("Awakening Zone", "")); + cubeCards.add(new CardIdentity("Azorius Signet", "")); + cubeCards.add(new CardIdentity("Badlands", "")); + cubeCards.add(new CardIdentity("Balance", "")); + cubeCards.add(new CardIdentity("Baleful Strix", "")); + cubeCards.add(new CardIdentity("Baneslayer Angel", "")); + cubeCards.add(new CardIdentity("Banisher Priest", "")); + cubeCards.add(new CardIdentity("Banishing Light", "")); + cubeCards.add(new CardIdentity("Basalt Monolith", "")); + cubeCards.add(new CardIdentity("Batterskull", "")); + cubeCards.add(new CardIdentity("Battlefield Forge", "")); + cubeCards.add(new CardIdentity("Bayou", "")); + cubeCards.add(new CardIdentity("Bazaar of Baghdad", "")); + cubeCards.add(new CardIdentity("Beast Within", "")); + cubeCards.add(new CardIdentity("Birds of Paradise", "")); + cubeCards.add(new CardIdentity("Birthing Pod", "")); + cubeCards.add(new CardIdentity("Bitterblossom", "")); + cubeCards.add(new CardIdentity("Black Lotus", "")); + cubeCards.add(new CardIdentity("Blade Splicer", "")); + cubeCards.add(new CardIdentity("Blightsteel Colossus", "")); + cubeCards.add(new CardIdentity("Blood Crypt", "")); + cubeCards.add(new CardIdentity("Bloodbraid Elf", "")); + cubeCards.add(new CardIdentity("Bloodghast", "")); + cubeCards.add(new CardIdentity("Bloodline Keeper", "")); + cubeCards.add(new CardIdentity("Bloodsoaked Champion", "")); + cubeCards.add(new CardIdentity("Bloodstained Mire", "")); + cubeCards.add(new CardIdentity("Bone Shredder", "")); + cubeCards.add(new CardIdentity("Bonfire of the Damned", "")); + cubeCards.add(new CardIdentity("Boros Charm", "")); + cubeCards.add(new CardIdentity("Boros Reckoner", "")); + cubeCards.add(new CardIdentity("Boros Signet", "")); + cubeCards.add(new CardIdentity("Braids, Cabal Minion", "")); + cubeCards.add(new CardIdentity("Brain Freeze", "")); + cubeCards.add(new CardIdentity("Brain Maggot", "")); + cubeCards.add(new CardIdentity("Brainstorm", "")); + cubeCards.add(new CardIdentity("Breeding Pool", "")); + cubeCards.add(new CardIdentity("Bribery", "")); + cubeCards.add(new CardIdentity("Brimaz, King of Oreskos", "")); + cubeCards.add(new CardIdentity("Brimstone Volley", "")); + cubeCards.add(new CardIdentity("Buried Alive", "")); + cubeCards.add(new CardIdentity("Burning of Xinye", "")); + cubeCards.add(new CardIdentity("Burst Lightning", "")); + cubeCards.add(new CardIdentity("Caves of Koilos", "")); + cubeCards.add(new CardIdentity("Chain Lightning", "")); + cubeCards.add(new CardIdentity("Chandra, Pyromaster", "")); + cubeCards.add(new CardIdentity("Chandra's Phoenix", "")); + cubeCards.add(new CardIdentity("Char", "")); + cubeCards.add(new CardIdentity("Channel", "")); + cubeCards.add(new CardIdentity("Chrome Mox", "")); + cubeCards.add(new CardIdentity("Clifftop Retreat", "")); + cubeCards.add(new CardIdentity("Cloudgoat Ranger", "")); + cubeCards.add(new CardIdentity("Coalition Relic", "")); + cubeCards.add(new CardIdentity("Compulsive Research", "")); + cubeCards.add(new CardIdentity("Consecrated Sphinx", "")); + cubeCards.add(new CardIdentity("Control Magic", "")); + cubeCards.add(new CardIdentity("Corpse Dance", "")); + cubeCards.add(new CardIdentity("Council's Judgment", "")); + cubeCards.add(new CardIdentity("Counterspell", "")); + cubeCards.add(new CardIdentity("Courser of Kruphix", "")); + cubeCards.add(new CardIdentity("Crater's Claws", "")); + cubeCards.add(new CardIdentity("Craterhoof Behemoth", "")); + cubeCards.add(new CardIdentity("Crucible of Worlds", "")); + cubeCards.add(new CardIdentity("Cryptic Command", "")); + cubeCards.add(new CardIdentity("Dack Fayden", "")); + cubeCards.add(new CardIdentity("Damnation", "")); + cubeCards.add(new CardIdentity("Daretti, Scrap Savant", "")); + cubeCards.add(new CardIdentity("Dark Confidant", "")); + cubeCards.add(new CardIdentity("Dark Ritual", "")); + cubeCards.add(new CardIdentity("Day of Judgment", "")); + cubeCards.add(new CardIdentity("Daze", "")); + cubeCards.add(new CardIdentity("Deathrite Shaman", "")); + cubeCards.add(new CardIdentity("Deceiver Exarch", "")); + cubeCards.add(new CardIdentity("Delver of Secrets", "")); + cubeCards.add(new CardIdentity("Demonic Tutor", "")); + cubeCards.add(new CardIdentity("Deranged Hermit", "")); + cubeCards.add(new CardIdentity("Desecration Demon", "")); + cubeCards.add(new CardIdentity("Diabolic Edict", "")); + cubeCards.add(new CardIdentity("Dig Through Time", "")); + cubeCards.add(new CardIdentity("Dimir Signet", "")); + cubeCards.add(new CardIdentity("Disenchant", "")); + cubeCards.add(new CardIdentity("Disfigure", "")); + cubeCards.add(new CardIdentity("Dismember", "")); + cubeCards.add(new CardIdentity("Domri Rade", "")); + cubeCards.add(new CardIdentity("Dragon Hunter", "")); + cubeCards.add(new CardIdentity("Dragonlord Atarka", "")); + cubeCards.add(new CardIdentity("Dragonlord Silumgar", "")); + cubeCards.add(new CardIdentity("Dragonskull Summit", "")); + cubeCards.add(new CardIdentity("Dreadbore", "")); + cubeCards.add(new CardIdentity("Drowned Catacomb", "")); + cubeCards.add(new CardIdentity("Dualcaster Mage", "")); + cubeCards.add(new CardIdentity("Duplicant", "")); + cubeCards.add(new CardIdentity("Duress", "")); + cubeCards.add(new CardIdentity("Edric, Spymaster of Trest", "")); + cubeCards.add(new CardIdentity("Eidolon of the Great Revel", "")); + cubeCards.add(new CardIdentity("Electrolyze", "")); + cubeCards.add(new CardIdentity("Elesh Norn, Grand Cenobite", "")); + cubeCards.add(new CardIdentity("Elspeth, Knight-Errant", "")); + cubeCards.add(new CardIdentity("Elspeth, Sun's Champion", "")); + cubeCards.add(new CardIdentity("Elves of Deep Shadow", "")); + cubeCards.add(new CardIdentity("Elvish Mystic", "")); + cubeCards.add(new CardIdentity("Emeria Angel", "")); + cubeCards.add(new CardIdentity("Empty the Warrens", "")); + cubeCards.add(new CardIdentity("Emrakul, the Aeons Torn", "")); + cubeCards.add(new CardIdentity("Enlightened Tutor", "")); + cubeCards.add(new CardIdentity("Entomb", "")); + cubeCards.add(new CardIdentity("Eternal Witness", "")); + cubeCards.add(new CardIdentity("Eureka", "")); + cubeCards.add(new CardIdentity("Everflowing Chalice", "")); + cubeCards.add(new CardIdentity("Exalted Angel", "")); + cubeCards.add(new CardIdentity("Fact or Fiction", "")); + cubeCards.add(new CardIdentity("Faith's Fetters", "")); + cubeCards.add(new CardIdentity("Faithless Looting", "")); + cubeCards.add(new CardIdentity("Fastbond", "")); + cubeCards.add(new CardIdentity("Fauna Shaman", "")); + cubeCards.add(new CardIdentity("Fiend Hunter", "")); + cubeCards.add(new CardIdentity("Figure of Destiny", "")); + cubeCards.add(new CardIdentity("Fire // Ice", "")); + cubeCards.add(new CardIdentity("Fireblast", "")); + cubeCards.add(new CardIdentity("Firebolt", "")); + cubeCards.add(new CardIdentity("Firedrinker Satyr", "")); + cubeCards.add(new CardIdentity("Firestorm", "")); + cubeCards.add(new CardIdentity("Flametongue Kavu", "")); + cubeCards.add(new CardIdentity("Flickerwisp", "")); + cubeCards.add(new CardIdentity("Flooded Strand", "")); + cubeCards.add(new CardIdentity("Force of Will", "")); + cubeCards.add(new CardIdentity("Force Spike", "")); + cubeCards.add(new CardIdentity("Frantic Search", "")); + cubeCards.add(new CardIdentity("Freyalise, Llanowar's Fury", "")); + cubeCards.add(new CardIdentity("Frost Titan", "")); + cubeCards.add(new CardIdentity("Fyndhorn Elves", "")); + cubeCards.add(new CardIdentity("Gaddock Teeg", "")); + cubeCards.add(new CardIdentity("Gaea's Cradle", "")); + cubeCards.add(new CardIdentity("Garruk Relentless", "")); + cubeCards.add(new CardIdentity("Garruk Wildspeaker", "")); + cubeCards.add(new CardIdentity("Garruk, Apex Predator", "")); + cubeCards.add(new CardIdentity("Garruk, Caller of Beasts", "")); + cubeCards.add(new CardIdentity("Garruk, Primal Hunter", "")); + cubeCards.add(new CardIdentity("Gatekeeper of Malakir", "")); + cubeCards.add(new CardIdentity("Geist of Saint Traft", "")); + cubeCards.add(new CardIdentity("Genesis Wave", "")); + cubeCards.add(new CardIdentity("Geralf's Messenger", "")); + cubeCards.add(new CardIdentity("Gideon Jura", "")); + cubeCards.add(new CardIdentity("Gifts Ungiven", "")); + cubeCards.add(new CardIdentity("Gilded Lotus", "")); + cubeCards.add(new CardIdentity("Gitaxian Probe", "")); + cubeCards.add(new CardIdentity("Glacial Fortress", "")); + cubeCards.add(new CardIdentity("Glen Elendra Archmage", "")); + cubeCards.add(new CardIdentity("Go for the Throat", "")); + cubeCards.add(new CardIdentity("Goblin Guide", "")); + cubeCards.add(new CardIdentity("Goblin Welder", "")); + cubeCards.add(new CardIdentity("Godless Shrine", "")); + cubeCards.add(new CardIdentity("Golgari Signet", "")); + cubeCards.add(new CardIdentity("Gore-House Chainwalker", "")); + cubeCards.add(new CardIdentity("Grave Titan", "")); + cubeCards.add(new CardIdentity("Greater Gargadon", "")); + cubeCards.add(new CardIdentity("Green Sun's Zenith", "")); + cubeCards.add(new CardIdentity("Grim Lavamancer", "")); + cubeCards.add(new CardIdentity("Grim Monolith", "")); + cubeCards.add(new CardIdentity("Griselbrand", "")); + cubeCards.add(new CardIdentity("Grove of the Burnwillows", "")); + cubeCards.add(new CardIdentity("Gruul Signet", "")); + cubeCards.add(new CardIdentity("Gurmag Angler", "")); + cubeCards.add(new CardIdentity("Gush", "")); + cubeCards.add(new CardIdentity("Guttersnipe", "")); + cubeCards.add(new CardIdentity("Hallowed Fountain", "")); + cubeCards.add(new CardIdentity("Hallowed Spiritkeeper", "")); + cubeCards.add(new CardIdentity("Harmonize", "")); + cubeCards.add(new CardIdentity("Heartbeat of Spring", "")); + cubeCards.add(new CardIdentity("Hellrider", "")); + cubeCards.add(new CardIdentity("Hero of Bladehold", "")); + cubeCards.add(new CardIdentity("Hero of Oxid Ridge", "")); + cubeCards.add(new CardIdentity("Hero's Downfall", "")); + cubeCards.add(new CardIdentity("Hinterland Harbor", "")); + cubeCards.add(new CardIdentity("Honor of the Pure", "")); + cubeCards.add(new CardIdentity("Horizon Canopy", "")); + cubeCards.add(new CardIdentity("Huntmaster of the Fells", "")); + cubeCards.add(new CardIdentity("Hymn to Tourach", "")); + cubeCards.add(new CardIdentity("Hypnotic Specter", "")); + cubeCards.add(new CardIdentity("Imperial Recruiter", "")); + cubeCards.add(new CardIdentity("Imperial Seal", "")); + cubeCards.add(new CardIdentity("Impulse", "")); + cubeCards.add(new CardIdentity("Incinerate", "")); + cubeCards.add(new CardIdentity("Indrik Stomphowler", "")); + cubeCards.add(new CardIdentity("Inferno Titan", "")); + cubeCards.add(new CardIdentity("Inkwell Leviathan", "")); + cubeCards.add(new CardIdentity("Inquisition of Kozilek", "")); + cubeCards.add(new CardIdentity("Iona, Shield of Emeria", "")); + cubeCards.add(new CardIdentity("Isamaru, Hound of Konda", "")); + cubeCards.add(new CardIdentity("Isochron Scepter", "")); + cubeCards.add(new CardIdentity("Isolated Chapel", "")); + cubeCards.add(new CardIdentity("Izzet Charm", "")); + cubeCards.add(new CardIdentity("Izzet Signet", "")); + cubeCards.add(new CardIdentity("Jace Beleren", "")); + cubeCards.add(new CardIdentity("Jace, Architect of Thought", "")); + cubeCards.add(new CardIdentity("Jace, the Mind Sculptor", "")); + cubeCards.add(new CardIdentity("Jackal Pup", "")); + cubeCards.add(new CardIdentity("Jeskai Ascendancy", "")); + cubeCards.add(new CardIdentity("Joraga Treespeaker", "")); + cubeCards.add(new CardIdentity("Journey to Nowhere", "")); + cubeCards.add(new CardIdentity("Karakas", "")); + cubeCards.add(new CardIdentity("Kargan Dragonlord", "")); + cubeCards.add(new CardIdentity("Karn Liberated", "")); + cubeCards.add(new CardIdentity("Kiki-Jiki, Mirror Breaker", "")); + cubeCards.add(new CardIdentity("Kiora, the Crashing Wave", "")); + cubeCards.add(new CardIdentity("Kitchen Finks", "")); + cubeCards.add(new CardIdentity("Koth of the Hammer", "")); + cubeCards.add(new CardIdentity("Kozilek, Butcher of Truth", "")); + cubeCards.add(new CardIdentity("Krosan Grip", "")); + cubeCards.add(new CardIdentity("Kuldotha Forgemaster", "")); + cubeCards.add(new CardIdentity("Land Tax", "")); + cubeCards.add(new CardIdentity("Leonin Arbiter", "")); + cubeCards.add(new CardIdentity("Leonin Relic-Warder", "")); + cubeCards.add(new CardIdentity("Library of Alexandria", "")); + cubeCards.add(new CardIdentity("Life from the Loam", "")); + cubeCards.add(new CardIdentity("Lifebane Zombie", "")); + cubeCards.add(new CardIdentity("Lightning Bolt", "")); + cubeCards.add(new CardIdentity("Lightning Greaves", "")); + cubeCards.add(new CardIdentity("Lightning Helix", "")); + cubeCards.add(new CardIdentity("Lightning Mauler", "")); + cubeCards.add(new CardIdentity("Lightning Strike", "")); + cubeCards.add(new CardIdentity("Liliana of the Veil", "")); + cubeCards.add(new CardIdentity("Lingering Souls", "")); + cubeCards.add(new CardIdentity("Lion's Eye Diamond", "")); + cubeCards.add(new CardIdentity("Living Death", "")); + cubeCards.add(new CardIdentity("Llanowar Elves", "")); + cubeCards.add(new CardIdentity("Llanowar Wastes", "")); + cubeCards.add(new CardIdentity("Lodestone Golem", "")); + cubeCards.add(new CardIdentity("Looter il-Kor", "")); + cubeCards.add(new CardIdentity("Lotus Bloom", "")); + cubeCards.add(new CardIdentity("Lotus Cobra", "")); + cubeCards.add(new CardIdentity("Maelstrom Pulse", "")); + cubeCards.add(new CardIdentity("Magma Jet", "")); + cubeCards.add(new CardIdentity("Magus of the Moon", "")); + cubeCards.add(new CardIdentity("Makeshift Mannequin", "")); + cubeCards.add(new CardIdentity("Mana Confluence", "")); + cubeCards.add(new CardIdentity("Mana Crypt", "")); + cubeCards.add(new CardIdentity("Mana Drain", "")); + cubeCards.add(new CardIdentity("Mana Leak", "")); + cubeCards.add(new CardIdentity("Mana Tithe", "")); + cubeCards.add(new CardIdentity("Mana Vault", "")); + cubeCards.add(new CardIdentity("Manic Vandal", "")); + cubeCards.add(new CardIdentity("Man-o'-War", "")); + cubeCards.add(new CardIdentity("Mardu Woe-Reaper", "")); + cubeCards.add(new CardIdentity("Marsh Flats", "")); + cubeCards.add(new CardIdentity("Massacre Wurm", "")); + cubeCards.add(new CardIdentity("Master of the Wild Hunt", "")); + cubeCards.add(new CardIdentity("Masticore", "")); + cubeCards.add(new CardIdentity("Maze of Ith", "")); + cubeCards.add(new CardIdentity("Meloku the Clouded Mirror", "")); + cubeCards.add(new CardIdentity("Mental Misstep", "")); + cubeCards.add(new CardIdentity("Memory Jar", "")); + cubeCards.add(new CardIdentity("Mesmeric Fiend", "")); + cubeCards.add(new CardIdentity("Metalworker", "")); + cubeCards.add(new CardIdentity("Mind Twist", "")); + cubeCards.add(new CardIdentity("Mindslaver", "")); + cubeCards.add(new CardIdentity("Mind's Desire", "")); + cubeCards.add(new CardIdentity("Mirari's Wake", "")); + cubeCards.add(new CardIdentity("Mirran Crusader", "")); + cubeCards.add(new CardIdentity("Mishra's Factory", "")); + cubeCards.add(new CardIdentity("Mishra's Workshop", "")); + cubeCards.add(new CardIdentity("Misty Rainforest", "")); + cubeCards.add(new CardIdentity("Mizzium Mortars", "")); + cubeCards.add(new CardIdentity("Moat", "")); + cubeCards.add(new CardIdentity("Momentary Blink", "")); + cubeCards.add(new CardIdentity("Monastery Mentor", "")); + cubeCards.add(new CardIdentity("Monastery Swiftspear", "")); + cubeCards.add(new CardIdentity("Mother of Runes", "")); + cubeCards.add(new CardIdentity("Mox Diamond", "")); + cubeCards.add(new CardIdentity("Mox Emerald", "")); + cubeCards.add(new CardIdentity("Mox Jet", "")); + cubeCards.add(new CardIdentity("Mox Pearl", "")); + cubeCards.add(new CardIdentity("Mox Ruby", "")); + cubeCards.add(new CardIdentity("Mox Sapphire", "")); + cubeCards.add(new CardIdentity("Mulldrifter", "")); + cubeCards.add(new CardIdentity("Murderous Cut", "")); + cubeCards.add(new CardIdentity("Mutavault", "")); + cubeCards.add(new CardIdentity("Myr Battlesphere", "")); + cubeCards.add(new CardIdentity("Mystical Tutor", "")); + cubeCards.add(new CardIdentity("Mystic Snake", "")); + cubeCards.add(new CardIdentity("Narset Transcendent", "")); + cubeCards.add(new CardIdentity("Natural Order", "")); + cubeCards.add(new CardIdentity("Nature's Claim", "")); + cubeCards.add(new CardIdentity("Necromancy", "")); + cubeCards.add(new CardIdentity("Necropotence", "")); + cubeCards.add(new CardIdentity("Nekrataal", "")); + cubeCards.add(new CardIdentity("Nether Void", "")); + cubeCards.add(new CardIdentity("Nevinyrral's Disk", "")); + cubeCards.add(new CardIdentity("Nezumi Graverobber", "")); + cubeCards.add(new CardIdentity("Nezumi Shortfang", "")); + cubeCards.add(new CardIdentity("Nicol Bolas, Planeswalker", "")); + cubeCards.add(new CardIdentity("Nissa, Worldwaker", "")); + cubeCards.add(new CardIdentity("Noble Hierarch", "")); + cubeCards.add(new CardIdentity("Oath of Druids", "")); + cubeCards.add(new CardIdentity("Oblivion Ring", "")); + cubeCards.add(new CardIdentity("Olivia Voldaren", "")); + cubeCards.add(new CardIdentity("Oona's Prowler", "")); + cubeCards.add(new CardIdentity("Ophiomancer", "")); + cubeCards.add(new CardIdentity("Opposition", "")); + cubeCards.add(new CardIdentity("Oracle of Mul Daya", "")); + cubeCards.add(new CardIdentity("Orzhov Signet", "")); + cubeCards.add(new CardIdentity("Outpost Siege", "")); + cubeCards.add(new CardIdentity("Overgrown Tomb", "")); + cubeCards.add(new CardIdentity("Pack Rat", "")); + cubeCards.add(new CardIdentity("Palinchron", "")); + cubeCards.add(new CardIdentity("Parallax Wave", "")); + cubeCards.add(new CardIdentity("Path to Exile", "")); + cubeCards.add(new CardIdentity("Pattern of Rebirth", "")); + cubeCards.add(new CardIdentity("Pentad Prism", "")); + cubeCards.add(new CardIdentity("Pernicious Deed", "")); + cubeCards.add(new CardIdentity("Pestermite", "")); + cubeCards.add(new CardIdentity("Phantasmal Image", "")); + cubeCards.add(new CardIdentity("Phyrexian Metamorph", "")); + cubeCards.add(new CardIdentity("Phyrexian Obliterator", "")); + cubeCards.add(new CardIdentity("Phyrexian Revoker", "")); + cubeCards.add(new CardIdentity("Pithing Needle", "")); + cubeCards.add(new CardIdentity("Plateau", "")); + cubeCards.add(new CardIdentity("Polluted Delta", "")); + cubeCards.add(new CardIdentity("Polukranos, World Eater", "")); + cubeCards.add(new CardIdentity("Ponder", "")); + cubeCards.add(new CardIdentity("Porcelain Legionnaire", "")); + cubeCards.add(new CardIdentity("Preordain", "")); + cubeCards.add(new CardIdentity("Primal Command", "")); + cubeCards.add(new CardIdentity("Primeval Titan", "")); + cubeCards.add(new CardIdentity("Progenitus", "")); + cubeCards.add(new CardIdentity("Prophetic Flamespeaker", "")); + cubeCards.add(new CardIdentity("Punishing Fire", "")); + cubeCards.add(new CardIdentity("Puppeteer Clique", "")); + cubeCards.add(new CardIdentity("Putrid Imp", "")); + cubeCards.add(new CardIdentity("Qasali Pridemage", "")); + cubeCards.add(new CardIdentity("Rakdos Cackler", "")); + cubeCards.add(new CardIdentity("Rakdos Signet", "")); + cubeCards.add(new CardIdentity("Rakdos's Return", "")); + cubeCards.add(new CardIdentity("Ral Zarek", "")); + cubeCards.add(new CardIdentity("Ranger of Eos", "")); + cubeCards.add(new CardIdentity("Ravages of War", "")); + cubeCards.add(new CardIdentity("Reanimate", "")); + cubeCards.add(new CardIdentity("Reclamation Sage", "")); + cubeCards.add(new CardIdentity("Recurring Nightmare", "")); + cubeCards.add(new CardIdentity("Regrowth", "")); + cubeCards.add(new CardIdentity("Remand", "")); + cubeCards.add(new CardIdentity("Repeal", "")); + cubeCards.add(new CardIdentity("Restoration Angel", "")); + cubeCards.add(new CardIdentity("Reveillark", "")); + cubeCards.add(new CardIdentity("Rift Bolt", "")); + cubeCards.add(new CardIdentity("Riftwing Cloudskate", "")); + cubeCards.add(new CardIdentity("Rishadan Port", "")); + cubeCards.add(new CardIdentity("Rofellos, Llanowar Emissary", "")); + cubeCards.add(new CardIdentity("Rootbound Crag", "")); + cubeCards.add(new CardIdentity("Sacred Foundry", "")); + cubeCards.add(new CardIdentity("Sakura-Tribe Elder", "")); + cubeCards.add(new CardIdentity("Sarkhan, the Dragonspeaker", "")); + cubeCards.add(new CardIdentity("Savannah", "")); + cubeCards.add(new CardIdentity("Scalding Tarn", "")); + cubeCards.add(new CardIdentity("Scavenging Ooze", "")); + cubeCards.add(new CardIdentity("Scroll Rack", "")); + cubeCards.add(new CardIdentity("Scrubland", "")); + cubeCards.add(new CardIdentity("Search for Tomorrow", "")); + cubeCards.add(new CardIdentity("Searing Blaze", "")); + cubeCards.add(new CardIdentity("Searing Spear", "")); + cubeCards.add(new CardIdentity("Secure the Wastes", "")); + cubeCards.add(new CardIdentity("Seeker of the Way", "")); + cubeCards.add(new CardIdentity("Seething Song", "")); + cubeCards.add(new CardIdentity("Selesnya Signet", "")); + cubeCards.add(new CardIdentity("Sensei's Divining Top", "")); + cubeCards.add(new CardIdentity("Shadowmage Infiltrator", "")); + cubeCards.add(new CardIdentity("Shallow Grave", "")); + cubeCards.add(new CardIdentity("Shardless Agent", "")); + cubeCards.add(new CardIdentity("Shelldock Isle", "")); + cubeCards.add(new CardIdentity("Sheoldred, Whispering One", "")); + cubeCards.add(new CardIdentity("Shivan Reef", "")); + cubeCards.add(new CardIdentity("Show and Tell", "")); + cubeCards.add(new CardIdentity("Shriekmaw", "")); + cubeCards.add(new CardIdentity("Shrine of Burning Rage", "")); + cubeCards.add(new CardIdentity("Sidisi, Undead Vizier", "")); + cubeCards.add(new CardIdentity("Siege Rhino", "")); + cubeCards.add(new CardIdentity("Siege-Gang Commander", "")); + cubeCards.add(new CardIdentity("Silverblade Paladin", "")); + cubeCards.add(new CardIdentity("Simic Signet", "")); + cubeCards.add(new CardIdentity("Sin Collector", "")); + cubeCards.add(new CardIdentity("Skinrender", "")); + cubeCards.add(new CardIdentity("Skullclamp", "")); + cubeCards.add(new CardIdentity("Smash to Smithereens", "")); + cubeCards.add(new CardIdentity("Smokestack", "")); + cubeCards.add(new CardIdentity("Snapcaster Mage", "")); + cubeCards.add(new CardIdentity("Sneak Attack", "")); + cubeCards.add(new CardIdentity("Sol Ring", "")); + cubeCards.add(new CardIdentity("Soldier of the Pantheon", "")); + cubeCards.add(new CardIdentity("Solemn Simulacrum", "")); + cubeCards.add(new CardIdentity("Song of the Dryads", "")); + cubeCards.add(new CardIdentity("Sorin, Lord of Innistrad", "")); + cubeCards.add(new CardIdentity("Soulfire Grand Master", "")); + cubeCards.add(new CardIdentity("Sower of Temptation", "")); + cubeCards.add(new CardIdentity("Spear of Heliod", "")); + cubeCards.add(new CardIdentity("Spectral Procession", "")); + cubeCards.add(new CardIdentity("Spell Pierce", "")); + cubeCards.add(new CardIdentity("Spellskite", "")); + cubeCards.add(new CardIdentity("Sphinx of the Steel Wind", "")); + cubeCards.add(new CardIdentity("Sphinx's Revelation", "")); + cubeCards.add(new CardIdentity("Spirit of the Labyrinth", "")); + cubeCards.add(new CardIdentity("Splinter Twin", "")); + cubeCards.add(new CardIdentity("Staff of Domination", "")); + cubeCards.add(new CardIdentity("Steam Vents", "")); + cubeCards.add(new CardIdentity("Stomping Ground", "")); + cubeCards.add(new CardIdentity("Stoneforge Mystic", "")); + cubeCards.add(new CardIdentity("Stormbreath Dragon", "")); + cubeCards.add(new CardIdentity("Strip Mine", "")); + cubeCards.add(new CardIdentity("Stromkirk Noble", "")); + cubeCards.add(new CardIdentity("Student of Warfare", "")); + cubeCards.add(new CardIdentity("Stunted Growth", "")); + cubeCards.add(new CardIdentity("Sulfur Falls", "")); + cubeCards.add(new CardIdentity("Sulfuric Vortex", "")); + cubeCards.add(new CardIdentity("Sulfurous Springs", "")); + cubeCards.add(new CardIdentity("Sun Titan", "")); + cubeCards.add(new CardIdentity("Sundering Titan", "")); + cubeCards.add(new CardIdentity("Sunpetal Grove", "")); + cubeCards.add(new CardIdentity("Supreme Verdict", "")); + cubeCards.add(new CardIdentity("Survival of the Fittest", "")); + cubeCards.add(new CardIdentity("Sword of Body and Mind", "")); + cubeCards.add(new CardIdentity("Sword of Feast and Famine", "")); + cubeCards.add(new CardIdentity("Sword of Fire and Ice", "")); + cubeCards.add(new CardIdentity("Sword of Light and Shadow", "")); + cubeCards.add(new CardIdentity("Sword of War and Peace", "")); + cubeCards.add(new CardIdentity("Swords to Plowshares", "")); + cubeCards.add(new CardIdentity("Sylvan Caryatid", "")); + cubeCards.add(new CardIdentity("Sylvan Library", "")); + cubeCards.add(new CardIdentity("Taiga", "")); + cubeCards.add(new CardIdentity("Tamiyo, the Moon Sage", "")); + cubeCards.add(new CardIdentity("Tangle Wire", "")); + cubeCards.add(new CardIdentity("Tarmogoyf", "")); + cubeCards.add(new CardIdentity("Tasigur, the Golden Fang", "")); + cubeCards.add(new CardIdentity("Temple Garden", "")); + cubeCards.add(new CardIdentity("Tendrils of Agony", "")); + cubeCards.add(new CardIdentity("Terastodon", "")); + cubeCards.add(new CardIdentity("Terminate", "")); + cubeCards.add(new CardIdentity("Tezzeret the Seeker", "")); + cubeCards.add(new CardIdentity("Tezzeret, Agent of Bolas", "")); + cubeCards.add(new CardIdentity("Thada Adel, Acquisitor", "")); + cubeCards.add(new CardIdentity("Thalia, Guardian of Thraben", "")); + cubeCards.add(new CardIdentity("The Abyss", "")); + cubeCards.add(new CardIdentity("Thirst for Knowledge", "")); + cubeCards.add(new CardIdentity("Thoughtseize", "")); + cubeCards.add(new CardIdentity("Thragtusk", "")); + cubeCards.add(new CardIdentity("Thran Dynamo", "")); + cubeCards.add(new CardIdentity("Through the Breach", "")); + cubeCards.add(new CardIdentity("Thrun, the Last Troll", "")); + cubeCards.add(new CardIdentity("Thundermaw Hellkite", "")); + cubeCards.add(new CardIdentity("Tidehollow Sculler", "")); + cubeCards.add(new CardIdentity("Time Spiral", "")); + cubeCards.add(new CardIdentity("Time Walk", "")); + cubeCards.add(new CardIdentity("Timetwister", "")); + cubeCards.add(new CardIdentity("Tinker", "")); + cubeCards.add(new CardIdentity("Tolarian Academy", "")); + cubeCards.add(new CardIdentity("Tombstalker", "")); + cubeCards.add(new CardIdentity("Tooth and Nail", "")); + cubeCards.add(new CardIdentity("Torch Fiend", "")); + cubeCards.add(new CardIdentity("Treachery", "")); + cubeCards.add(new CardIdentity("Treasure Cruise", "")); + cubeCards.add(new CardIdentity("Treetop Village", "")); + cubeCards.add(new CardIdentity("Trinket Mage", "")); + cubeCards.add(new CardIdentity("Troll Ascetic", "")); + cubeCards.add(new CardIdentity("Tropical Island", "")); + cubeCards.add(new CardIdentity("True-Name Nemesis", "")); + cubeCards.add(new CardIdentity("Trygon Predator", "")); + cubeCards.add(new CardIdentity("Tundra", "")); + cubeCards.add(new CardIdentity("Turnabout", "")); + cubeCards.add(new CardIdentity("Ugin, the Spirit Dragon", "")); + cubeCards.add(new CardIdentity("Ulamog, the Infinite Gyre", "")); + cubeCards.add(new CardIdentity("Ultimate Price", "")); + cubeCards.add(new CardIdentity("Umezawa's Jitte", "")); + cubeCards.add(new CardIdentity("Unburial Rites", "")); + cubeCards.add(new CardIdentity("Underground River", "")); + cubeCards.add(new CardIdentity("Underground Sea", "")); + cubeCards.add(new CardIdentity("Unexpectedly Absent", "")); + cubeCards.add(new CardIdentity("Upheaval", "")); + cubeCards.add(new CardIdentity("Urborg, Tomb of Yawgmoth", "")); + cubeCards.add(new CardIdentity("Utter End", "")); + cubeCards.add(new CardIdentity("Vampire Nighthawk", "")); + cubeCards.add(new CardIdentity("Vampiric Tutor", "")); + cubeCards.add(new CardIdentity("Vedalken Shackles", "")); + cubeCards.add(new CardIdentity("Vendilion Clique", "")); + cubeCards.add(new CardIdentity("Vengevine", "")); + cubeCards.add(new CardIdentity("Venser, Shaper Savant", "")); + cubeCards.add(new CardIdentity("Venser, the Sojourner", "")); + cubeCards.add(new CardIdentity("Verdant Catacombs", "")); + cubeCards.add(new CardIdentity("Villainous Wealth", "")); + cubeCards.add(new CardIdentity("Vindicate", "")); + cubeCards.add(new CardIdentity("Voice of Resurgence", "")); + cubeCards.add(new CardIdentity("Volcanic Island", "")); + cubeCards.add(new CardIdentity("Volrath's Stronghold", "")); + cubeCards.add(new CardIdentity("Wall of Blossoms", "")); + cubeCards.add(new CardIdentity("Wall of Omens", "")); + cubeCards.add(new CardIdentity("Wall of Roots", "")); + cubeCards.add(new CardIdentity("War Priest of Thune", "")); + cubeCards.add(new CardIdentity("Wasteland", "")); + cubeCards.add(new CardIdentity("Watery Grave", "")); + cubeCards.add(new CardIdentity("Weathered Wayfarer", "")); + cubeCards.add(new CardIdentity("Wheel of Fortune", "")); + cubeCards.add(new CardIdentity("Whisperwood Elemental", "")); + cubeCards.add(new CardIdentity("Wildfire", "")); + cubeCards.add(new CardIdentity("Windswept Heath", "")); + cubeCards.add(new CardIdentity("Winter Orb", "")); + cubeCards.add(new CardIdentity("Wolfir Silverheart", "")); + cubeCards.add(new CardIdentity("Wooded Foothills", "")); + cubeCards.add(new CardIdentity("Woodfall Primus", "")); + cubeCards.add(new CardIdentity("Woodland Cemetery", "")); + cubeCards.add(new CardIdentity("Worn Powerstone", "")); + cubeCards.add(new CardIdentity("Wrath of God", "")); + cubeCards.add(new CardIdentity("Wurmcoil Engine", "")); + cubeCards.add(new CardIdentity("Xenagos, the Reveler", "")); + cubeCards.add(new CardIdentity("Yavimaya Coast", "")); + cubeCards.add(new CardIdentity("Yavimaya Elder", "")); + cubeCards.add(new CardIdentity("Yawgmoth's Bargain", "")); + cubeCards.add(new CardIdentity("Yawgmoth's Will", "")); + cubeCards.add(new CardIdentity("Young Pyromancer", "")); + cubeCards.add(new CardIdentity("Zealous Conscripts", "")); + cubeCards.add(new CardIdentity("Zuran Orb", "")); + cubeCards.add(new CardIdentity("Zurgo Bellstriker", "")); + } +} diff --git a/Mage.Server/config/config.xml b/Mage.Server/config/config.xml index ec01eac5b80..e7945542303 100644 --- a/Mage.Server/config/config.xml +++ b/Mage.Server/config/config.xml @@ -41,14 +41,14 @@ - + - + @@ -70,6 +70,7 @@ + @@ -82,6 +83,9 @@ + + + @@ -91,9 +95,6 @@ - - - diff --git a/Mage.Server/release/config/config.xml b/Mage.Server/release/config/config.xml index 6e34884d6ce..ad1e56d3164 100644 --- a/Mage.Server/release/config/config.xml +++ b/Mage.Server/release/config/config.xml @@ -27,7 +27,7 @@ - + @@ -48,6 +48,7 @@ + @@ -61,6 +62,9 @@ + + + @@ -70,9 +74,6 @@ - - - From ba9d616a27d1fe87290619a5b6151f4b4dde18b6 Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Tue, 23 Jun 2015 08:35:23 +0200 Subject: [PATCH 14/18] Fixed two old URLs. --- Mage.Client/src/main/java/mage/client/dialog/ConnectDialog.java | 2 +- .../src/main/java/mage/server/console/ConnectDialog.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Mage.Client/src/main/java/mage/client/dialog/ConnectDialog.java b/Mage.Client/src/main/java/mage/client/dialog/ConnectDialog.java index 2e53ee5cdd4..0eec9111ea9 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/ConnectDialog.java +++ b/Mage.Client/src/main/java/mage/client/dialog/ConnectDialog.java @@ -429,7 +429,7 @@ public class ConnectDialog extends MageDialog { BufferedReader in = null; try { - URL serverListURL = new URL(PreferencesDialog.getCachedValue(PreferencesDialog.KEY_CONNECTION_URL_SERVER_LIST, "http://176.31.186.181/files/server-list.txt")); + URL serverListURL = new URL(PreferencesDialog.getCachedValue(PreferencesDialog.KEY_CONNECTION_URL_SERVER_LIST, "http://xmage.de/files/server-list.txt")); Connection.ProxyType configProxyType = Connection.ProxyType.valueByText(PreferencesDialog.getCachedValue(PreferencesDialog.KEY_PROXY_TYPE, "None")); Proxy p = null; diff --git a/Mage.Server.Console/src/main/java/mage/server/console/ConnectDialog.java b/Mage.Server.Console/src/main/java/mage/server/console/ConnectDialog.java index a4ef94288bd..127efc1b713 100644 --- a/Mage.Server.Console/src/main/java/mage/server/console/ConnectDialog.java +++ b/Mage.Server.Console/src/main/java/mage/server/console/ConnectDialog.java @@ -487,7 +487,7 @@ public class ConnectDialog extends JDialog { private void findPublicServerActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed BufferedReader in = null; try { - URL serverListURL = new URL("http://XMage.info/files/server-list.txt"); + URL serverListURL = new URL("http://XMage.de/files/server-list.txt"); in = new BufferedReader(new InputStreamReader(serverListURL.openStream())); List servers = new ArrayList<>(); From a9ba34395f7fc992b30ec63d12453974c84e1e52 Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Tue, 23 Jun 2015 11:27:30 +0200 Subject: [PATCH 15/18] Fixed ShuffleIntoLibrarySourceEffect not working for permanent objects. --- .../ShuffleIntoLibrarySourceEffect.java | 30 ++++++++++++++----- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/Mage/src/mage/abilities/effects/common/ShuffleIntoLibrarySourceEffect.java b/Mage/src/mage/abilities/effects/common/ShuffleIntoLibrarySourceEffect.java index 22f8bf9f667..5310e509388 100644 --- a/Mage/src/mage/abilities/effects/common/ShuffleIntoLibrarySourceEffect.java +++ b/Mage/src/mage/abilities/effects/common/ShuffleIntoLibrarySourceEffect.java @@ -28,12 +28,14 @@ package mage.abilities.effects.common; +import mage.MageObject; import mage.abilities.Ability; import mage.abilities.effects.OneShotEffect; import mage.cards.Card; import mage.constants.Outcome; import mage.constants.Zone; import mage.game.Game; +import mage.game.permanent.Permanent; import mage.players.Player; /** @@ -54,15 +56,27 @@ public class ShuffleIntoLibrarySourceEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { - Card card = game.getCard(source.getSourceId()); - if (card != null) { - Player player = game.getPlayer(card.getOwnerId()); - if (player != null) { - Zone fromZone = game.getState().getZone(card.getId()); - player.moveCardToLibraryWithInfo(card, source.getSourceId(), game, fromZone, true, true); - player.shuffleLibrary(game); - return true; + MageObject mageObject = source.getSourceObjectIfItStillExists(game); + if (mageObject != null) { + Zone fromZone = game.getState().getZone(mageObject.getId()); + Player owner; + if (mageObject instanceof Permanent) { + owner = game.getPlayer(((Permanent) mageObject).getOwnerId()); + if (owner != null) { + owner.moveCardToLibraryWithInfo((Permanent)mageObject, source.getSourceId(), game, fromZone, true, true); + owner.shuffleLibrary(game); + return true; + } + } else if (mageObject instanceof Card) { + owner = game.getPlayer(((Card) mageObject).getOwnerId()); + if (owner != null) { + owner.moveCardToLibraryWithInfo((Card)mageObject, source.getSourceId(), game, fromZone, true, true); + owner.shuffleLibrary(game); + return true; + } } + + } return false; } From 2f996847b36532bf0e80edbe1fd99beca55909c2 Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Tue, 23 Jun 2015 13:10:49 +0200 Subject: [PATCH 16/18] * Mossbridge Troll - Fixed that the Troll was also regenerated of detroy effect if it was not possible to regenerate. --- .../mage/sets/shadowmoor/MossbridgeTroll.java | 2 +- .../oneshot/destroy/WrathOfGodTest.java | 71 +++++++++++++++++++ 2 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 Mage.Tests/src/test/java/org/mage/test/cards/abilities/oneshot/destroy/WrathOfGodTest.java diff --git a/Mage.Sets/src/mage/sets/shadowmoor/MossbridgeTroll.java b/Mage.Sets/src/mage/sets/shadowmoor/MossbridgeTroll.java index 9fa0b2ed6ca..539b8f9d3d0 100644 --- a/Mage.Sets/src/mage/sets/shadowmoor/MossbridgeTroll.java +++ b/Mage.Sets/src/mage/sets/shadowmoor/MossbridgeTroll.java @@ -105,7 +105,7 @@ class MossbridgeTrollReplacementEffect extends ReplacementEffectImpl { @Override public boolean replaceEvent(GameEvent event, Ability source, Game game) { Permanent mossbridgeTroll = game.getPermanent(event.getTargetId()); - if (mossbridgeTroll != null) { + if (mossbridgeTroll != null && event.getAmount() == 0) { // 1=noRegen return mossbridgeTroll.regenerate(source.getSourceId(), game); } return false; diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/oneshot/destroy/WrathOfGodTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/oneshot/destroy/WrathOfGodTest.java new file mode 100644 index 00000000000..3cf17c6fd6b --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/oneshot/destroy/WrathOfGodTest.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 org.mage.test.cards.abilities.oneshot.destroy; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX2 + */ +public class WrathOfGodTest extends CardTestPlayerBase { + + @Test + public void testDestroy() { + addCard(Zone.BATTLEFIELD, playerA, "Plains",4); + addCard(Zone.HAND, playerA, "Wrath of God"); + + addCard(Zone.BATTLEFIELD, playerA, "Silvercoat Lion"); + // If Mossbridge Troll would be destroyed, regenerate it. + // Tap any number of untapped creatures you control other than Mossbridge Troll with total power 10 or greater: Mossbridge Troll gets +20/+20 until end of turn. + addCard(Zone.BATTLEFIELD, playerA, "Mossbridge Troll"); + + // Flying + // Darksteel Gargoyle is indestructible. ("Destroy" effects and lethal damage don't destroy it.) + addCard(Zone.BATTLEFIELD, playerA, "Darksteel Gargoyle"); + + addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion"); + addCard(Zone.BATTLEFIELD, playerB, "Mossbridge Troll"); + addCard(Zone.BATTLEFIELD, playerB, "Darksteel Gargoyle"); + + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Wrath of God"); + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + assertPermanentCount(playerA, "Silvercoat Lion", 0); + assertPermanentCount(playerA, "Mossbridge Troll", 0); + assertPermanentCount(playerA, "Darksteel Gargoyle", 1); + assertPermanentCount(playerB, "Silvercoat Lion", 0); + assertPermanentCount(playerB, "Mossbridge Troll", 0); + assertPermanentCount(playerB, "Darksteel Gargoyle", 1); + } +} \ No newline at end of file From 5b02b5b32c876e954d5faab81573f82ae20cac32 Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Tue, 23 Jun 2015 16:14:11 +0200 Subject: [PATCH 17/18] Exile, Reveal, Looked At windows of a game are hidden now as you switch to another pane (e.g. other game, tables, deck editor) and shown again as you switch back. --- .../main/java/mage/client/game/GamePane.java | 10 +++++ .../main/java/mage/client/game/GamePanel.java | 41 +++++++++++++++++-- 2 files changed, 48 insertions(+), 3 deletions(-) diff --git a/Mage.Client/src/main/java/mage/client/game/GamePane.java b/Mage.Client/src/main/java/mage/client/game/GamePane.java index 35d1c16a97f..9b7c00a5eb7 100644 --- a/Mage.Client/src/main/java/mage/client/game/GamePane.java +++ b/Mage.Client/src/main/java/mage/client/game/GamePane.java @@ -114,6 +114,16 @@ public class GamePane extends MagePane { return gameId; } + @Override + public void deactivated() { + gamePanel.deactivated(); + } + + @Override + public void activated() { + gamePanel.activated(); + } + private mage.client.game.GamePanel gamePanel; private javax.swing.JScrollPane jScrollPane1; private UUID gameId; diff --git a/Mage.Client/src/main/java/mage/client/game/GamePanel.java b/Mage.Client/src/main/java/mage/client/game/GamePanel.java index 43af41bc1d7..ade062dacb9 100644 --- a/Mage.Client/src/main/java/mage/client/game/GamePanel.java +++ b/Mage.Client/src/main/java/mage/client/game/GamePanel.java @@ -145,11 +145,14 @@ public final class GamePanel extends javax.swing.JPanel { private static final int X_PHASE_WIDTH = 55; private static final int STACK_MIN_CARDS_OFFSET_Y = 7; private final Map players = new HashMap<>(); + + // non modal frames private final Map exiles = new HashMap<>(); private final Map revealed = new HashMap<>(); private final Map lookedAt = new HashMap<>(); private final Map graveyardWindows = new HashMap<>(); private final Map graveyards = new HashMap<>(); + private final ArrayList pickTarget = new ArrayList<>(); private UUID gameId; private UUID playerId; // playerId of the player @@ -826,6 +829,40 @@ public final class GamePanel extends javax.swing.JPanel { } } + // Called if the game frame is deactivated because the tabled the deck editor or other frames go to foreground + public void deactivated() { + // hide the non modal windows (because otherwise they are shown on top of the new active pane) + for (CardInfoWindowDialog exileDialog: exiles.values()) { + exileDialog.hideDialog(); + } + for (CardInfoWindowDialog graveyardDialog: graveyardWindows.values()) { + graveyardDialog.hideDialog(); + } + for (CardInfoWindowDialog revealDialog: revealed.values()) { + revealDialog.hideDialog(); + } + for (CardInfoWindowDialog lookedAtDialog: lookedAt.values()) { + lookedAtDialog.hideDialog(); + } + } + + // Called if the game frame comes to front again + public void activated() { + // hide the non modal windows (because otherwise they are shown on top of the new active pane) + for (CardInfoWindowDialog exileDialog: exiles.values()) { + exileDialog.show(); + } + for (CardInfoWindowDialog graveyardDialog: graveyardWindows.values()) { + graveyardDialog.show(); + } + for (CardInfoWindowDialog revealDialog: revealed.values()) { + revealDialog.show(); + } + for (CardInfoWindowDialog lookedAtDialog: lookedAt.values()) { + lookedAtDialog.show(); + } + } + public void openGraveyardWindow(String playerName) { if(graveyardWindows.containsKey(playerName)) { CardInfoWindowDialog cardInfoWindowDialog = graveyardWindows.get(playerName); @@ -834,9 +871,7 @@ public final class GamePanel extends javax.swing.JPanel { } else { cardInfoWindowDialog.show(); } -// if (!cardInfoWindowDialog.isClosed()) { - return; -// } + return; } CardInfoWindowDialog newGraveyard = new CardInfoWindowDialog(ShowType.GRAVEYARD, playerName); graveyardWindows.put(playerName, newGraveyard); From 2547753dcba12dbfe2358dcde741a02c29b514d0 Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Tue, 23 Jun 2015 16:15:14 +0200 Subject: [PATCH 18/18] Added Sen Triplets (Alara Reborn = 100%). --- .../main/java/mage/client/cards/Cards.java | 2 +- .../mage/sets/alarareborn/SenTriplets.java | 191 ++++++++++++++++++ .../avacynrestored/MisthollowGriffin.java | 2 +- .../mage/sets/avacynrestored/StolenGoods.java | 2 +- .../betrayersofkamigawa/OrnateKanzashi.java | 2 +- .../sets/coldsnap/HaakonStromgaldScourge.java | 4 +- .../sets/commander/KaradorGhostChieftain.java | 2 +- .../sets/darkascension/FiendOfTheShadows.java | 2 +- .../mage/sets/darkascension/Gravecrawler.java | 2 +- .../mage/sets/darkascension/HavengulLich.java | 2 +- .../sets/dragonsoftarkir/CommuneWithLava.java | 2 +- .../sets/dragonsoftarkir/HedonistsTrove.java | 4 +- .../mage/sets/dragonsoftarkir/IreShaman.java | 2 +- .../dragonsoftarkir/RisenExecutioner.java | 2 +- .../sets/fatereforged/MarangRiverProwler.java | 2 +- .../mage/sets/fatereforged/OutpostSiege.java | 2 +- .../mage/sets/gatecrash/NightveilSpecter.java | 2 +- .../mage/sets/innistrad/SkaabRuinator.java | 2 +- .../journeyintonyx/PropheticFlamespeaker.java | 2 +- .../src/mage/sets/judgment/Spelljack.java | 2 +- .../khansoftarkir/KheruSpellsnatcher.java | 2 +- .../NarsetEnlightenedMaster.java | 2 +- .../sets/magic2014/ChandraPyromaster.java | 2 +- .../src/mage/sets/magic2015/ActOnImpulse.java | 2 +- .../modernmasters2015/WorldheartPhoenix.java | 2 +- .../mage/sets/newphyrexia/PraetorsGrasp.java | 2 +- .../sets/planarchaos/IntetTheDreamer.java | 2 +- .../src/mage/sets/ravnica/SinsOfThePast.java | 2 +- .../mage/sets/shadowmoor/KnacksawClique.java | 2 +- .../src/mage/sets/theros/DaxosOfMeletis.java | 2 +- .../mage/sets/theros/PsychicIntrusion.java | 2 +- .../mage/sets/timeshifted/GrinningTotem.java | 2 +- .../mage/sets/vintagemasters/MindsDesire.java | 2 +- .../sets/worldwake/ThadaAdelAcquisitor.java | 2 +- Mage/src/mage/abilities/PlayLandAbility.java | 5 +- Mage/src/mage/abilities/SpellAbility.java | 3 +- .../continuous/PlayTheTopCardEffect.java | 2 +- .../mage/constants/AsThoughEffectType.java | 2 +- Mage/src/mage/game/Revealed.java | 4 + Mage/src/mage/players/PlayerImpl.java | 23 ++- 40 files changed, 249 insertions(+), 51 deletions(-) create mode 100644 Mage.Sets/src/mage/sets/alarareborn/SenTriplets.java diff --git a/Mage.Client/src/main/java/mage/client/cards/Cards.java b/Mage.Client/src/main/java/mage/client/cards/Cards.java index c6ee605bbb8..14c7109b1bc 100644 --- a/Mage.Client/src/main/java/mage/client/cards/Cards.java +++ b/Mage.Client/src/main/java/mage/client/cards/Cards.java @@ -69,7 +69,7 @@ public class Cards extends javax.swing.JPanel { private final Map cards = new LinkedHashMap<>(); private boolean dontDisplayTapped = false; - private static final int GAP_X = 0; + private static final int GAP_X = 5; // needed for marking cards with coloured fram (e.g. on hand) private String zone; private static final Border emptyBorder = new EmptyBorder(0,0,0,0); diff --git a/Mage.Sets/src/mage/sets/alarareborn/SenTriplets.java b/Mage.Sets/src/mage/sets/alarareborn/SenTriplets.java new file mode 100644 index 00000000000..394d3170caa --- /dev/null +++ b/Mage.Sets/src/mage/sets/alarareborn/SenTriplets.java @@ -0,0 +1,191 @@ +/* + * 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.alarareborn; + +import java.util.UUID; +import mage.MageInt; +import mage.MageObject; +import mage.abilities.Ability; +import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; +import mage.abilities.effects.AsThoughEffectImpl; +import mage.abilities.effects.ContinuousEffectImpl; +import mage.abilities.effects.ContinuousRuleModifyingEffectImpl; +import mage.cards.Card; +import mage.cards.CardImpl; +import mage.constants.AsThoughEffectType; +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.TargetController; +import mage.constants.Zone; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.players.Player; +import mage.target.common.TargetOpponent; + +/** + * + * @author LevelX2 + */ +public class SenTriplets extends CardImpl { + + public SenTriplets(UUID ownerId) { + super(ownerId, 109, "Sen Triplets", Rarity.MYTHIC, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{2}{W}{U}{B}"); + this.expansionSetCode = "ARB"; + this.supertype.add("Legendary"); + this.subtype.add("Human"); + this.subtype.add("Wizard"); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + // At the beginning of your upkeep, choose target opponent. + // This turn, that player can't cast spells or activate abilities and plays with his or her hand revealed. + // You may play cards from that player's hand this turn. + Ability ability = new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD, new SenTripletsRuleModifyingEffect(), TargetController.YOU, false, false); + ability.addEffect(new SenTripletsOpponentRevealsHandEffect()); + ability.addEffect(new SenTripletsPlayFromOpponentsHandEffect()); + ability.addTarget(new TargetOpponent()); + this.addAbility(ability); + } + + public SenTriplets(final SenTriplets card) { + super(card); + } + + @Override + public SenTriplets copy() { + return new SenTriplets(this); + } +} + +class SenTripletsRuleModifyingEffect extends ContinuousRuleModifyingEffectImpl { + + public SenTripletsRuleModifyingEffect() { + super(Duration.EndOfTurn, Outcome.Benefit); + staticText = "At the beginning of your upkeep, choose target opponent. This turn, that player can't cast spells or activate abilities"; + } + + public SenTripletsRuleModifyingEffect(final SenTripletsRuleModifyingEffect effect) { + super(effect); + } + + @Override + public SenTripletsRuleModifyingEffect copy() { + return new SenTripletsRuleModifyingEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + return true; + } + + @Override + public String getInfoMessage(Ability source, GameEvent event, Game game) { + Player targetPlayer = game.getPlayer(getTargetPointer().getFirst(game, source)); + MageObject mageObject = game.getObject(source.getSourceId()); + if (targetPlayer != null && mageObject != null) { + return "This turn you can't cast spells or activate abilities" + + " (" + mageObject.getLogName() + ")"; + } + return null; + } + + @Override + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.CAST_SPELL || event.getType() == GameEvent.EventType.ACTIVATE_ABILITY; + } + + @Override + public boolean applies(GameEvent event, Ability source, Game game) { + return event.getPlayerId().equals(getTargetPointer().getFirst(game, source)); + } +} + +class SenTripletsOpponentRevealsHandEffect extends ContinuousEffectImpl { + + public SenTripletsOpponentRevealsHandEffect() { + super(Duration.EndOfTurn, Layer.PlayerEffects, SubLayer.NA, Outcome.Detriment); + staticText = "and plays with his or her hand revealed"; + } + + public SenTripletsOpponentRevealsHandEffect(final SenTripletsOpponentRevealsHandEffect effect) { + super(effect); + } + + @Override + public boolean apply(Game game, Ability source) { + Player player = game.getPlayer(getTargetPointer().getFirst(game, source)); + if (player != null) { + player.revealCards(player.getName() + "'s hand cards", player.getHand(), game, false); + } + return true; + } + + @Override + public SenTripletsOpponentRevealsHandEffect copy() { + return new SenTripletsOpponentRevealsHandEffect(this); + } +} + +class SenTripletsPlayFromOpponentsHandEffect extends AsThoughEffectImpl { + + + public SenTripletsPlayFromOpponentsHandEffect() { + super(AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, Duration.EndOfTurn, Outcome.Benefit); + staticText = "You may play cards from that player's hand this turn"; + } + + public SenTripletsPlayFromOpponentsHandEffect(final SenTripletsPlayFromOpponentsHandEffect effect) { + super(effect); + } + + @Override + public boolean apply(Game game, Ability source) { + return true; + } + + @Override + public SenTripletsPlayFromOpponentsHandEffect copy() { + return new SenTripletsPlayFromOpponentsHandEffect(this); + } + + @Override + public boolean applies(UUID objectId, Ability source, UUID affectedControllerId, Game game) { + Card card = game.getCard(objectId); + return card != null && + card.getOwnerId().equals(getTargetPointer().getFirst(game, source)) && + game.getState().getZone(objectId).equals(Zone.HAND) && + affectedControllerId.equals(source.getControllerId()); + } + +} + + diff --git a/Mage.Sets/src/mage/sets/avacynrestored/MisthollowGriffin.java b/Mage.Sets/src/mage/sets/avacynrestored/MisthollowGriffin.java index 82b73f9be33..e8cf377ac80 100644 --- a/Mage.Sets/src/mage/sets/avacynrestored/MisthollowGriffin.java +++ b/Mage.Sets/src/mage/sets/avacynrestored/MisthollowGriffin.java @@ -76,7 +76,7 @@ public class MisthollowGriffin extends CardImpl { class MisthollowGriffinPlayEffect extends AsThoughEffectImpl { public MisthollowGriffinPlayEffect() { - super(AsThoughEffectType.PLAY_FROM_NON_HAND_ZONE, Duration.EndOfGame, Outcome.Benefit); + super(AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, Duration.EndOfGame, Outcome.Benefit); staticText = "You may cast {this} from exile"; } diff --git a/Mage.Sets/src/mage/sets/avacynrestored/StolenGoods.java b/Mage.Sets/src/mage/sets/avacynrestored/StolenGoods.java index 0d1a260fe2c..7709f8614fb 100644 --- a/Mage.Sets/src/mage/sets/avacynrestored/StolenGoods.java +++ b/Mage.Sets/src/mage/sets/avacynrestored/StolenGoods.java @@ -115,7 +115,7 @@ class StolenGoodsEffect extends OneShotEffect { class StolenGoodsCastFromExileEffect extends AsThoughEffectImpl { public StolenGoodsCastFromExileEffect() { - super(AsThoughEffectType.PLAY_FROM_NON_HAND_ZONE, Duration.EndOfTurn, Outcome.Benefit); + super(AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, Duration.EndOfTurn, Outcome.Benefit); staticText = "You may cast card from exile"; } diff --git a/Mage.Sets/src/mage/sets/betrayersofkamigawa/OrnateKanzashi.java b/Mage.Sets/src/mage/sets/betrayersofkamigawa/OrnateKanzashi.java index e18a5447498..504916c8d76 100644 --- a/Mage.Sets/src/mage/sets/betrayersofkamigawa/OrnateKanzashi.java +++ b/Mage.Sets/src/mage/sets/betrayersofkamigawa/OrnateKanzashi.java @@ -119,7 +119,7 @@ class OrnateKanzashiEffect extends OneShotEffect { class OrnateKanzashiCastFromExileEffect extends AsThoughEffectImpl { public OrnateKanzashiCastFromExileEffect(UUID cardId) { - super(AsThoughEffectType.PLAY_FROM_NON_HAND_ZONE, Duration.EndOfTurn, Outcome.Benefit); + super(AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, Duration.EndOfTurn, Outcome.Benefit); staticText = "You may play that card from exile this turn"; } diff --git a/Mage.Sets/src/mage/sets/coldsnap/HaakonStromgaldScourge.java b/Mage.Sets/src/mage/sets/coldsnap/HaakonStromgaldScourge.java index feb91905247..3905fb266aa 100644 --- a/Mage.Sets/src/mage/sets/coldsnap/HaakonStromgaldScourge.java +++ b/Mage.Sets/src/mage/sets/coldsnap/HaakonStromgaldScourge.java @@ -90,7 +90,7 @@ public class HaakonStromgaldScourge extends CardImpl { class HaakonStromgaldScourgePlayEffect extends AsThoughEffectImpl { public HaakonStromgaldScourgePlayEffect() { - super(AsThoughEffectType.PLAY_FROM_NON_HAND_ZONE, Duration.EndOfGame, Outcome.Benefit); + super(AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, Duration.EndOfGame, Outcome.Benefit); staticText = "You may cast {this} from your graveyard"; } @@ -163,7 +163,7 @@ class HaakonStromgaldScourgePlayEffect2 extends ContinuousRuleModifyingEffectImp class HaakonPlayKnightsFromGraveyardEffect extends AsThoughEffectImpl { public HaakonPlayKnightsFromGraveyardEffect () { - super(AsThoughEffectType.PLAY_FROM_NON_HAND_ZONE, Duration.WhileOnBattlefield, Outcome.Benefit); + super(AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, Duration.WhileOnBattlefield, Outcome.Benefit); staticText = "As long as {this} is on the battlefield, you may play Knight cards from your graveyard"; } diff --git a/Mage.Sets/src/mage/sets/commander/KaradorGhostChieftain.java b/Mage.Sets/src/mage/sets/commander/KaradorGhostChieftain.java index d466c65ca49..74aa3fba191 100644 --- a/Mage.Sets/src/mage/sets/commander/KaradorGhostChieftain.java +++ b/Mage.Sets/src/mage/sets/commander/KaradorGhostChieftain.java @@ -160,7 +160,7 @@ class KaradorGhostChieftainContinuousEffect extends ContinuousEffectImpl { class KaradorGhostChieftainCastFromGraveyardEffect extends AsThoughEffectImpl { KaradorGhostChieftainCastFromGraveyardEffect() { - super(AsThoughEffectType.PLAY_FROM_NON_HAND_ZONE, Duration.EndOfTurn, Outcome.Benefit); + super(AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, Duration.EndOfTurn, Outcome.Benefit); staticText = "You may cast one creature card from your graveyard"; } diff --git a/Mage.Sets/src/mage/sets/darkascension/FiendOfTheShadows.java b/Mage.Sets/src/mage/sets/darkascension/FiendOfTheShadows.java index 933b2050b9c..42579afa738 100644 --- a/Mage.Sets/src/mage/sets/darkascension/FiendOfTheShadows.java +++ b/Mage.Sets/src/mage/sets/darkascension/FiendOfTheShadows.java @@ -95,7 +95,7 @@ class FiendOfTheShadowsEffect extends AsThoughEffectImpl { private final UUID exileId; public FiendOfTheShadowsEffect(UUID exileId) { - super(AsThoughEffectType.PLAY_FROM_NON_HAND_ZONE, Duration.EndOfGame, Outcome.Benefit); + super(AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, Duration.EndOfGame, Outcome.Benefit); this.exileId = exileId; staticText = "You may play that card for as long as it remains exiled"; } diff --git a/Mage.Sets/src/mage/sets/darkascension/Gravecrawler.java b/Mage.Sets/src/mage/sets/darkascension/Gravecrawler.java index 41db14c4d53..acaaa23dbbd 100644 --- a/Mage.Sets/src/mage/sets/darkascension/Gravecrawler.java +++ b/Mage.Sets/src/mage/sets/darkascension/Gravecrawler.java @@ -87,7 +87,7 @@ class GravecrawlerPlayEffect extends AsThoughEffectImpl { } public GravecrawlerPlayEffect() { - super(AsThoughEffectType.PLAY_FROM_NON_HAND_ZONE, Duration.EndOfGame, Outcome.Benefit); + super(AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, Duration.EndOfGame, Outcome.Benefit); staticText = "You may cast {this} from your graveyard as long as you control a Zombie"; } diff --git a/Mage.Sets/src/mage/sets/darkascension/HavengulLich.java b/Mage.Sets/src/mage/sets/darkascension/HavengulLich.java index 61935aede9b..2c0818761ef 100644 --- a/Mage.Sets/src/mage/sets/darkascension/HavengulLich.java +++ b/Mage.Sets/src/mage/sets/darkascension/HavengulLich.java @@ -94,7 +94,7 @@ public class HavengulLich extends CardImpl { class HavengulLichPlayEffect extends AsThoughEffectImpl { public HavengulLichPlayEffect() { - super(AsThoughEffectType.PLAY_FROM_NON_HAND_ZONE, Duration.EndOfTurn, Outcome.Benefit); + super(AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, Duration.EndOfTurn, Outcome.Benefit); staticText = "You may cast target creature card in a graveyard this turn"; } diff --git a/Mage.Sets/src/mage/sets/dragonsoftarkir/CommuneWithLava.java b/Mage.Sets/src/mage/sets/dragonsoftarkir/CommuneWithLava.java index 1518ef2cc86..4487794cdf5 100644 --- a/Mage.Sets/src/mage/sets/dragonsoftarkir/CommuneWithLava.java +++ b/Mage.Sets/src/mage/sets/dragonsoftarkir/CommuneWithLava.java @@ -115,7 +115,7 @@ class CommuneWithLavaMayPlayEffect extends AsThoughEffectImpl { int castOnTurn = 0; public CommuneWithLavaMayPlayEffect() { - super(AsThoughEffectType.PLAY_FROM_NON_HAND_ZONE, Duration.Custom, Outcome.Benefit); + super(AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, Duration.Custom, Outcome.Benefit); this.staticText = "Until the end of your next turn, you may play that card."; } diff --git a/Mage.Sets/src/mage/sets/dragonsoftarkir/HedonistsTrove.java b/Mage.Sets/src/mage/sets/dragonsoftarkir/HedonistsTrove.java index ab7d60e272d..4174deb76ff 100644 --- a/Mage.Sets/src/mage/sets/dragonsoftarkir/HedonistsTrove.java +++ b/Mage.Sets/src/mage/sets/dragonsoftarkir/HedonistsTrove.java @@ -118,7 +118,7 @@ class HedonistsTroveExileEffect extends OneShotEffect { class HedonistsTrovePlayLandEffect extends AsThoughEffectImpl { public HedonistsTrovePlayLandEffect() { - super(AsThoughEffectType.PLAY_FROM_NON_HAND_ZONE, Duration.WhileOnBattlefield, Outcome.Benefit); + super(AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, Duration.WhileOnBattlefield, Outcome.Benefit); staticText = "You may play land cards exiled by {this}"; } @@ -157,7 +157,7 @@ class HedonistsTroveCastNonlandCardsEffect extends AsThoughEffectImpl { private UUID cardId; public HedonistsTroveCastNonlandCardsEffect() { - super(AsThoughEffectType.PLAY_FROM_NON_HAND_ZONE, Duration.WhileOnBattlefield, Outcome.Benefit); + super(AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, Duration.WhileOnBattlefield, Outcome.Benefit); staticText = "You may cast nonland cards exiled with {this}. You can't cast more than one spell this way each turn"; } diff --git a/Mage.Sets/src/mage/sets/dragonsoftarkir/IreShaman.java b/Mage.Sets/src/mage/sets/dragonsoftarkir/IreShaman.java index 093bc8ae692..6f26e4f1127 100644 --- a/Mage.Sets/src/mage/sets/dragonsoftarkir/IreShaman.java +++ b/Mage.Sets/src/mage/sets/dragonsoftarkir/IreShaman.java @@ -125,7 +125,7 @@ class IreShamanExileEffect extends OneShotEffect { class IreShamanCastFromExileEffect extends AsThoughEffectImpl { public IreShamanCastFromExileEffect() { - super(AsThoughEffectType.PLAY_FROM_NON_HAND_ZONE, Duration.EndOfTurn, Outcome.Benefit); + super(AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, Duration.EndOfTurn, Outcome.Benefit); staticText = "You may play the card from exile"; } diff --git a/Mage.Sets/src/mage/sets/dragonsoftarkir/RisenExecutioner.java b/Mage.Sets/src/mage/sets/dragonsoftarkir/RisenExecutioner.java index a1b4f29babe..901c17b4324 100644 --- a/Mage.Sets/src/mage/sets/dragonsoftarkir/RisenExecutioner.java +++ b/Mage.Sets/src/mage/sets/dragonsoftarkir/RisenExecutioner.java @@ -100,7 +100,7 @@ public class RisenExecutioner extends CardImpl { class RisenExecutionerCastEffect extends AsThoughEffectImpl { RisenExecutionerCastEffect() { - super(AsThoughEffectType.PLAY_FROM_NON_HAND_ZONE, Duration.EndOfGame, Outcome.Benefit); + super(AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, Duration.EndOfGame, Outcome.Benefit); staticText = "You may cast {this} from your graveyard"; } diff --git a/Mage.Sets/src/mage/sets/fatereforged/MarangRiverProwler.java b/Mage.Sets/src/mage/sets/fatereforged/MarangRiverProwler.java index 5c4ddec9a43..3e87e840612 100644 --- a/Mage.Sets/src/mage/sets/fatereforged/MarangRiverProwler.java +++ b/Mage.Sets/src/mage/sets/fatereforged/MarangRiverProwler.java @@ -92,7 +92,7 @@ class MarangRiverProwlerCastEffect extends AsThoughEffectImpl { } MarangRiverProwlerCastEffect() { - super(AsThoughEffectType.PLAY_FROM_NON_HAND_ZONE, Duration.EndOfGame, Outcome.Benefit); + super(AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, Duration.EndOfGame, Outcome.Benefit); staticText = "You may cast {this} from your graveyard as long as you control a black or green permanent"; } diff --git a/Mage.Sets/src/mage/sets/fatereforged/OutpostSiege.java b/Mage.Sets/src/mage/sets/fatereforged/OutpostSiege.java index 418d99d1e1c..f49e7e15cc9 100644 --- a/Mage.Sets/src/mage/sets/fatereforged/OutpostSiege.java +++ b/Mage.Sets/src/mage/sets/fatereforged/OutpostSiege.java @@ -136,7 +136,7 @@ class OutpostSiegeExileEffect extends OneShotEffect { class CastFromNonHandZoneTargetEffect extends AsThoughEffectImpl { public CastFromNonHandZoneTargetEffect(Duration duration) { - super(AsThoughEffectType.PLAY_FROM_NON_HAND_ZONE, duration, Outcome.Benefit); + super(AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, duration, Outcome.Benefit); staticText = "until end of turn, you may play that card"; } diff --git a/Mage.Sets/src/mage/sets/gatecrash/NightveilSpecter.java b/Mage.Sets/src/mage/sets/gatecrash/NightveilSpecter.java index 25086caf897..3e5c8e6f902 100644 --- a/Mage.Sets/src/mage/sets/gatecrash/NightveilSpecter.java +++ b/Mage.Sets/src/mage/sets/gatecrash/NightveilSpecter.java @@ -127,7 +127,7 @@ class NightveilSpecterExileEffect extends OneShotEffect { class NightveilSpecterEffect extends AsThoughEffectImpl { public NightveilSpecterEffect() { - super(AsThoughEffectType.PLAY_FROM_NON_HAND_ZONE, Duration.EndOfGame, Outcome.Benefit); + super(AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, Duration.EndOfGame, Outcome.Benefit); staticText = "You may play cards exiled with {this}"; } diff --git a/Mage.Sets/src/mage/sets/innistrad/SkaabRuinator.java b/Mage.Sets/src/mage/sets/innistrad/SkaabRuinator.java index d49ad5e7eda..067d091f727 100644 --- a/Mage.Sets/src/mage/sets/innistrad/SkaabRuinator.java +++ b/Mage.Sets/src/mage/sets/innistrad/SkaabRuinator.java @@ -85,7 +85,7 @@ public class SkaabRuinator extends CardImpl { class SkaabRuinatorPlayEffect extends AsThoughEffectImpl { public SkaabRuinatorPlayEffect() { - super(AsThoughEffectType.PLAY_FROM_NON_HAND_ZONE, Duration.EndOfGame, Outcome.PutCreatureInPlay); + super(AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, Duration.EndOfGame, Outcome.PutCreatureInPlay); staticText = "You may cast {this} from your graveyard"; } diff --git a/Mage.Sets/src/mage/sets/journeyintonyx/PropheticFlamespeaker.java b/Mage.Sets/src/mage/sets/journeyintonyx/PropheticFlamespeaker.java index 9d4da3d5a30..8a6a8ef222a 100644 --- a/Mage.Sets/src/mage/sets/journeyintonyx/PropheticFlamespeaker.java +++ b/Mage.Sets/src/mage/sets/journeyintonyx/PropheticFlamespeaker.java @@ -122,7 +122,7 @@ class PropheticFlamespeakerExileEffect extends OneShotEffect { class PropheticFlamespeakerCastFromExileEffect extends AsThoughEffectImpl { public PropheticFlamespeakerCastFromExileEffect() { - super(AsThoughEffectType.PLAY_FROM_NON_HAND_ZONE, Duration.EndOfTurn, Outcome.Benefit); + super(AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, Duration.EndOfTurn, Outcome.Benefit); staticText = "You may play the card from exile"; } diff --git a/Mage.Sets/src/mage/sets/judgment/Spelljack.java b/Mage.Sets/src/mage/sets/judgment/Spelljack.java index 69b3746899d..4c5f862cbe5 100644 --- a/Mage.Sets/src/mage/sets/judgment/Spelljack.java +++ b/Mage.Sets/src/mage/sets/judgment/Spelljack.java @@ -118,7 +118,7 @@ class SpelljackEffect extends OneShotEffect { class SpelljackCastFromExileEffect extends AsThoughEffectImpl { SpelljackCastFromExileEffect() { - super(AsThoughEffectType.PLAY_FROM_NON_HAND_ZONE, Duration.Custom, Outcome.Benefit); + super(AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, Duration.Custom, Outcome.Benefit); staticText = "You may cast that card without paying its mana cost as long as it remains exiled"; } diff --git a/Mage.Sets/src/mage/sets/khansoftarkir/KheruSpellsnatcher.java b/Mage.Sets/src/mage/sets/khansoftarkir/KheruSpellsnatcher.java index c0f15ac9e3c..19cced0b3a5 100644 --- a/Mage.Sets/src/mage/sets/khansoftarkir/KheruSpellsnatcher.java +++ b/Mage.Sets/src/mage/sets/khansoftarkir/KheruSpellsnatcher.java @@ -131,7 +131,7 @@ class KheruSpellsnatcherEffect extends OneShotEffect { class KheruSpellsnatcherCastFromExileEffect extends AsThoughEffectImpl { KheruSpellsnatcherCastFromExileEffect() { - super(AsThoughEffectType.PLAY_FROM_NON_HAND_ZONE, Duration.Custom, Outcome.Benefit); + super(AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, Duration.Custom, Outcome.Benefit); staticText = "You may cast that card without paying its mana cost as long as it remains exiled"; } diff --git a/Mage.Sets/src/mage/sets/khansoftarkir/NarsetEnlightenedMaster.java b/Mage.Sets/src/mage/sets/khansoftarkir/NarsetEnlightenedMaster.java index cd3ee2eee14..70d9517368d 100644 --- a/Mage.Sets/src/mage/sets/khansoftarkir/NarsetEnlightenedMaster.java +++ b/Mage.Sets/src/mage/sets/khansoftarkir/NarsetEnlightenedMaster.java @@ -127,7 +127,7 @@ class NarsetEnlightenedMasterExileEffect extends OneShotEffect { class NarsetEnlightenedMasterCastFromExileEffect extends AsThoughEffectImpl { public NarsetEnlightenedMasterCastFromExileEffect() { - super(AsThoughEffectType.PLAY_FROM_NON_HAND_ZONE, Duration.EndOfTurn, Outcome.Benefit); + super(AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, Duration.EndOfTurn, Outcome.Benefit); staticText = "Until end of turn, you may cast noncreature cards exiled with {this} this turn without paying their mana costs"; } diff --git a/Mage.Sets/src/mage/sets/magic2014/ChandraPyromaster.java b/Mage.Sets/src/mage/sets/magic2014/ChandraPyromaster.java index 0323d025555..a9f736fb55e 100644 --- a/Mage.Sets/src/mage/sets/magic2014/ChandraPyromaster.java +++ b/Mage.Sets/src/mage/sets/magic2014/ChandraPyromaster.java @@ -228,7 +228,7 @@ class ChandraPyromasterEffect2 extends OneShotEffect { class ChandraPyromasterCastFromExileEffect extends AsThoughEffectImpl { public ChandraPyromasterCastFromExileEffect() { - super(AsThoughEffectType.PLAY_FROM_NON_HAND_ZONE, Duration.EndOfTurn, Outcome.Benefit); + super(AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, Duration.EndOfTurn, Outcome.Benefit); staticText = "You may play the card from exile this turn"; } diff --git a/Mage.Sets/src/mage/sets/magic2015/ActOnImpulse.java b/Mage.Sets/src/mage/sets/magic2015/ActOnImpulse.java index 7779ef4b830..3034e346a40 100644 --- a/Mage.Sets/src/mage/sets/magic2015/ActOnImpulse.java +++ b/Mage.Sets/src/mage/sets/magic2015/ActOnImpulse.java @@ -119,7 +119,7 @@ class ActOnImpulseMayPlayExiledEffect extends AsThoughEffectImpl { public List cards = new ArrayList<>(); public ActOnImpulseMayPlayExiledEffect(List cards) { - super(AsThoughEffectType.PLAY_FROM_NON_HAND_ZONE, Duration.EndOfTurn, Outcome.Benefit); + super(AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, Duration.EndOfTurn, Outcome.Benefit); this.cards.addAll(cards); } diff --git a/Mage.Sets/src/mage/sets/modernmasters2015/WorldheartPhoenix.java b/Mage.Sets/src/mage/sets/modernmasters2015/WorldheartPhoenix.java index b5053cf16b1..b9ca13546a4 100644 --- a/Mage.Sets/src/mage/sets/modernmasters2015/WorldheartPhoenix.java +++ b/Mage.Sets/src/mage/sets/modernmasters2015/WorldheartPhoenix.java @@ -86,7 +86,7 @@ public class WorldheartPhoenix extends CardImpl { class WorldheartPhoenixPlayEffect extends AsThoughEffectImpl { public WorldheartPhoenixPlayEffect() { - super(AsThoughEffectType.PLAY_FROM_NON_HAND_ZONE, Duration.EndOfGame, Outcome.Benefit); + super(AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, Duration.EndOfGame, Outcome.Benefit); staticText = "You may cast {this} from your graveyard by paying {W}{U}{B}{R}{G} rather than paying its mana cost"; } diff --git a/Mage.Sets/src/mage/sets/newphyrexia/PraetorsGrasp.java b/Mage.Sets/src/mage/sets/newphyrexia/PraetorsGrasp.java index 82ea8bc0814..79671b61280 100644 --- a/Mage.Sets/src/mage/sets/newphyrexia/PraetorsGrasp.java +++ b/Mage.Sets/src/mage/sets/newphyrexia/PraetorsGrasp.java @@ -121,7 +121,7 @@ class PraetorsGraspPlayEffect extends AsThoughEffectImpl { private UUID cardId; public PraetorsGraspPlayEffect(UUID cardId) { - super(AsThoughEffectType.PLAY_FROM_NON_HAND_ZONE, Duration.EndOfGame, Outcome.Benefit); + super(AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, Duration.EndOfGame, Outcome.Benefit); this.cardId = cardId; staticText = "You may look at and play that card for as long as it remains exiled"; } diff --git a/Mage.Sets/src/mage/sets/planarchaos/IntetTheDreamer.java b/Mage.Sets/src/mage/sets/planarchaos/IntetTheDreamer.java index f286cdf5b97..ea9a46de998 100644 --- a/Mage.Sets/src/mage/sets/planarchaos/IntetTheDreamer.java +++ b/Mage.Sets/src/mage/sets/planarchaos/IntetTheDreamer.java @@ -121,7 +121,7 @@ class IntetTheDreamerExileEffect extends OneShotEffect { class IntetTheDreamerEffect extends AsThoughEffectImpl { public IntetTheDreamerEffect() { - super(AsThoughEffectType.PLAY_FROM_NON_HAND_ZONE, Duration.WhileOnBattlefield, Outcome.Benefit); + super(AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, Duration.WhileOnBattlefield, Outcome.Benefit); staticText = "You may play the card from exile without paying its mana cost for as long as {this} remains on the battlefield"; } diff --git a/Mage.Sets/src/mage/sets/ravnica/SinsOfThePast.java b/Mage.Sets/src/mage/sets/ravnica/SinsOfThePast.java index f9863b55a72..01743f1db50 100644 --- a/Mage.Sets/src/mage/sets/ravnica/SinsOfThePast.java +++ b/Mage.Sets/src/mage/sets/ravnica/SinsOfThePast.java @@ -110,7 +110,7 @@ class SinsOfThePastEffect extends OneShotEffect { class SinsOfThePastCastFromGraveyardEffect extends AsThoughEffectImpl { SinsOfThePastCastFromGraveyardEffect() { - super(AsThoughEffectType.PLAY_FROM_NON_HAND_ZONE, Duration.EndOfTurn, Outcome.PlayForFree); + super(AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, Duration.EndOfTurn, Outcome.PlayForFree); } SinsOfThePastCastFromGraveyardEffect(final SinsOfThePastCastFromGraveyardEffect effect) { diff --git a/Mage.Sets/src/mage/sets/shadowmoor/KnacksawClique.java b/Mage.Sets/src/mage/sets/shadowmoor/KnacksawClique.java index 6679cc7a4a6..24e5ea3e54c 100644 --- a/Mage.Sets/src/mage/sets/shadowmoor/KnacksawClique.java +++ b/Mage.Sets/src/mage/sets/shadowmoor/KnacksawClique.java @@ -128,7 +128,7 @@ class KnacksawCliqueCastFromExileEffect extends AsThoughEffectImpl { private final UUID exileId; public KnacksawCliqueCastFromExileEffect(UUID cardId, UUID exileId) { - super(AsThoughEffectType.PLAY_FROM_NON_HAND_ZONE, Duration.EndOfTurn, Outcome.Benefit); + super(AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, Duration.EndOfTurn, Outcome.Benefit); staticText = "Until end of turn, you may play that card"; this.cardId = cardId; this.exileId = exileId; diff --git a/Mage.Sets/src/mage/sets/theros/DaxosOfMeletis.java b/Mage.Sets/src/mage/sets/theros/DaxosOfMeletis.java index ee8929301d0..f59829ce400 100644 --- a/Mage.Sets/src/mage/sets/theros/DaxosOfMeletis.java +++ b/Mage.Sets/src/mage/sets/theros/DaxosOfMeletis.java @@ -148,7 +148,7 @@ class DaxosOfMeletisCastFromExileEffect extends AsThoughEffectImpl { private UUID exileId; public DaxosOfMeletisCastFromExileEffect(UUID cardId, UUID exileId) { - super(AsThoughEffectType.PLAY_FROM_NON_HAND_ZONE, Duration.EndOfTurn, Outcome.Benefit); + super(AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, Duration.EndOfTurn, Outcome.Benefit); staticText = "Until end of turn, you may cast that card and you may spend mana as though it were mana of any color to cast it"; this.cardId = cardId; this.exileId = exileId; diff --git a/Mage.Sets/src/mage/sets/theros/PsychicIntrusion.java b/Mage.Sets/src/mage/sets/theros/PsychicIntrusion.java index 3ca67cd231b..d2ae49b8cc4 100644 --- a/Mage.Sets/src/mage/sets/theros/PsychicIntrusion.java +++ b/Mage.Sets/src/mage/sets/theros/PsychicIntrusion.java @@ -155,7 +155,7 @@ class PsychicIntrusionExileEffect extends OneShotEffect { class PsychicIntrusionCastFromExileEffect extends AsThoughEffectImpl { public PsychicIntrusionCastFromExileEffect() { - super(AsThoughEffectType.PLAY_FROM_NON_HAND_ZONE, Duration.Custom, Outcome.Benefit); + super(AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, Duration.Custom, Outcome.Benefit); staticText = "You may cast that card for as long as it remains exiled, and you may spend mana as though it were mana of any color to cast that spell"; } diff --git a/Mage.Sets/src/mage/sets/timeshifted/GrinningTotem.java b/Mage.Sets/src/mage/sets/timeshifted/GrinningTotem.java index e9f1a93b72f..5ae1263948b 100644 --- a/Mage.Sets/src/mage/sets/timeshifted/GrinningTotem.java +++ b/Mage.Sets/src/mage/sets/timeshifted/GrinningTotem.java @@ -136,7 +136,7 @@ class GrinningTotemSearchAndExileEffect extends OneShotEffect { class GrinningTotemMayPlayEffect extends AsThoughEffectImpl { public GrinningTotemMayPlayEffect() { - super(AsThoughEffectType.PLAY_FROM_NON_HAND_ZONE, Duration.Custom, Outcome.Benefit); + super(AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, Duration.Custom, Outcome.Benefit); this.staticText = "Until the beginning of your next upkeep, you may play that card."; } diff --git a/Mage.Sets/src/mage/sets/vintagemasters/MindsDesire.java b/Mage.Sets/src/mage/sets/vintagemasters/MindsDesire.java index 2d9aeb91bbb..0533cb5b646 100644 --- a/Mage.Sets/src/mage/sets/vintagemasters/MindsDesire.java +++ b/Mage.Sets/src/mage/sets/vintagemasters/MindsDesire.java @@ -114,7 +114,7 @@ class MindsDesireEffect extends OneShotEffect { class MindsDesireCastFromExileEffect extends AsThoughEffectImpl { MindsDesireCastFromExileEffect() { - super(AsThoughEffectType.PLAY_FROM_NON_HAND_ZONE, Duration.EndOfTurn, Outcome.Benefit); + super(AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, Duration.EndOfTurn, Outcome.Benefit); staticText = "you may play that card without paying its mana cost"; } diff --git a/Mage.Sets/src/mage/sets/worldwake/ThadaAdelAcquisitor.java b/Mage.Sets/src/mage/sets/worldwake/ThadaAdelAcquisitor.java index 75ef0f6be80..409950b8a77 100644 --- a/Mage.Sets/src/mage/sets/worldwake/ThadaAdelAcquisitor.java +++ b/Mage.Sets/src/mage/sets/worldwake/ThadaAdelAcquisitor.java @@ -127,7 +127,7 @@ class ThadaAdelAcquisitorEffect extends OneShotEffect { class ThadaAdelPlayFromExileEffect extends AsThoughEffectImpl { public ThadaAdelPlayFromExileEffect() { - super(AsThoughEffectType.PLAY_FROM_NON_HAND_ZONE, Duration.EndOfTurn, Outcome.Benefit); + super(AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, Duration.EndOfTurn, Outcome.Benefit); staticText = "You may play this card from exile"; } diff --git a/Mage/src/mage/abilities/PlayLandAbility.java b/Mage/src/mage/abilities/PlayLandAbility.java index 416bb45003a..60a60797ccf 100644 --- a/Mage/src/mage/abilities/PlayLandAbility.java +++ b/Mage/src/mage/abilities/PlayLandAbility.java @@ -30,9 +30,9 @@ package mage.abilities; import java.util.UUID; import mage.constants.AbilityType; +import mage.constants.AsThoughEffectType; import mage.constants.Zone; import mage.game.Game; -import mage.game.events.GameEvent; /** * @@ -52,7 +52,8 @@ public class PlayLandAbility extends ActivatedAbilityImpl { @Override public boolean canActivate(UUID playerId, Game game) { - if (!controlsAbility(playerId, game)) { + if (!controlsAbility(playerId, game) && + !game.getContinuousEffects().asThough(getSourceId(), AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, playerId, game)) { return false; } //20091005 - 114.2a diff --git a/Mage/src/mage/abilities/SpellAbility.java b/Mage/src/mage/abilities/SpellAbility.java index 6deef056b07..2c2d9c0fa2d 100644 --- a/Mage/src/mage/abilities/SpellAbility.java +++ b/Mage/src/mage/abilities/SpellAbility.java @@ -96,7 +96,8 @@ public class SpellAbility extends ActivatedAbilityImpl { return false; } // fix for Gitaxian Probe and casting opponent's spells - if (!controllerId.equals(playerId)) { + if (!game.getContinuousEffects().asThough(getSourceId(), AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, playerId, game) + && !controllerId.equals(playerId)) { return false; } // Check if spell has no costs (not {0} mana costs), than it's not castable. E.g. for spells like Living End, that only can be cast by Suspend Ability. diff --git a/Mage/src/mage/abilities/effects/common/continuous/PlayTheTopCardEffect.java b/Mage/src/mage/abilities/effects/common/continuous/PlayTheTopCardEffect.java index 4a3ac3919a7..0c68c6db678 100644 --- a/Mage/src/mage/abilities/effects/common/continuous/PlayTheTopCardEffect.java +++ b/Mage/src/mage/abilities/effects/common/continuous/PlayTheTopCardEffect.java @@ -52,7 +52,7 @@ public class PlayTheTopCardEffect extends AsThoughEffectImpl { } public PlayTheTopCardEffect(FilterCard filter) { - super(AsThoughEffectType.PLAY_FROM_NON_HAND_ZONE, Duration.WhileOnBattlefield, Outcome.Benefit); + super(AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, Duration.WhileOnBattlefield, Outcome.Benefit); this.filter = filter; staticText = "You may play the top card of your library if it's a " + filter.getMessage(); } diff --git a/Mage/src/mage/constants/AsThoughEffectType.java b/Mage/src/mage/constants/AsThoughEffectType.java index 66f09ee2406..433fbd7c038 100644 --- a/Mage/src/mage/constants/AsThoughEffectType.java +++ b/Mage/src/mage/constants/AsThoughEffectType.java @@ -11,7 +11,7 @@ public enum AsThoughEffectType { BLOCK_SHADOW, BLOCK_DRAGON, BE_BLOCKED, - PLAY_FROM_NON_HAND_ZONE, + PLAY_FROM_NOT_OWN_HAND_ZONE, CAST_AS_INSTANT, ACTIVATE_AS_INSTANT, DAMAGE, diff --git a/Mage/src/mage/game/Revealed.java b/Mage/src/mage/game/Revealed.java index f7400ca8748..af4b7cd320b 100644 --- a/Mage/src/mage/game/Revealed.java +++ b/Mage/src/mage/game/Revealed.java @@ -55,6 +55,10 @@ public class Revealed extends HashMap implements Serializable, Co this.get(name).add(card); } + public void update(String name, Cards cards) { + this.put(name, cards.copy()); + } + public void add(String name, Cards cards) { if (this.containsKey(name)) { this.get(name).addAll(cards); diff --git a/Mage/src/mage/players/PlayerImpl.java b/Mage/src/mage/players/PlayerImpl.java index fe29574f394..d87e64e5401 100644 --- a/Mage/src/mage/players/PlayerImpl.java +++ b/Mage/src/mage/players/PlayerImpl.java @@ -41,7 +41,6 @@ import java.util.Map.Entry; import java.util.Random; import java.util.Set; import java.util.UUID; - import mage.MageObject; import mage.Mana; import mage.abilities.Abilities; @@ -130,7 +129,6 @@ import mage.target.common.TargetCardInLibrary; import mage.target.common.TargetDiscard; import mage.util.CardUtil; import mage.util.GameLog; - import org.apache.log4j.Logger; public abstract class PlayerImpl implements Player, Serializable { @@ -1097,10 +1095,9 @@ public abstract class PlayerImpl implements Player, Serializable { return true; } if (ability instanceof PlayLandAbility) { - Card card = hand.get(ability.getSourceId(), game); - if (card == null) { - card = game.getCard(ability.getSourceId()); - } + + + Card card = game.getCard(ability.getSourceId()); result = playLand(card, game); } else { if (!ability.canActivate(this.playerId, game)) { @@ -1214,7 +1211,7 @@ public abstract class PlayerImpl implements Player, Serializable { } } } - if (zone != Zone.BATTLEFIELD && game.getContinuousEffects().asThough(object.getId(), AsThoughEffectType.PLAY_FROM_NON_HAND_ZONE, this.getId(), game)) { + if (zone != Zone.BATTLEFIELD && game.getContinuousEffects().asThough(object.getId(), AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, this.getId(), game)) { for (Ability ability : object.getAbilities()) { ability.setControllerId(this.getId()); if (ability instanceof ActivatedAbility && ability.getZone().match(Zone.HAND) @@ -1317,7 +1314,11 @@ public abstract class PlayerImpl implements Player, Serializable { @Override public void revealCards(String name, Cards cards, Game game, boolean postToLog) { - game.getState().getRevealed().add(name, cards); + if (postToLog) { + game.getState().getRevealed().add(name, cards); + } else { + game.getState().getRevealed().update(name, cards); + } if (postToLog && !game.isSimulation()) { StringBuilder sb = new StringBuilder(getLogName()).append(" reveals "); int current = 0, last = cards.size(); @@ -2409,7 +2410,7 @@ public abstract class PlayerImpl implements Player, Serializable { } } for (Card card : graveyard.getUniqueCards(game)) { - boolean asThoughtCast = game.getContinuousEffects().asThough(card.getId(), AsThoughEffectType.PLAY_FROM_NON_HAND_ZONE, this.getId(), game); + boolean asThoughtCast = game.getContinuousEffects().asThough(card.getId(), AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, this.getId(), game); for (ActivatedAbility ability : card.getAbilities().getActivatedAbilities(Zone.ALL)) { boolean possible = false; if (ability.getZone().match(Zone.GRAVEYARD)) { @@ -2431,7 +2432,7 @@ public abstract class PlayerImpl implements Player, Serializable { } for (ExileZone exile : game.getExile().getExileZones()) { for (Card card : exile.getCards(game)) { - if (game.getContinuousEffects().asThough(card.getId(), AsThoughEffectType.PLAY_FROM_NON_HAND_ZONE, this.getId(), game)) { + if (game.getContinuousEffects().asThough(card.getId(), AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, this.getId(), game)) { for (Ability ability : card.getAbilities()) { if (ability.getZone().match(Zone.HAND)) { ability.setControllerId(this.getId()); // controller must be set for case owner != caster @@ -2447,7 +2448,7 @@ public abstract class PlayerImpl implements Player, Serializable { } for (Cards cards : game.getState().getRevealed().values()) { for (Card card : cards.getCards(game)) { - if (game.getContinuousEffects().asThough(card.getId(), AsThoughEffectType.PLAY_FROM_NON_HAND_ZONE, this.getId(), game)) { + if (game.getContinuousEffects().asThough(card.getId(), AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, this.getId(), game)) { for (ActivatedAbility ability : card.getAbilities().getActivatedAbilities(Zone.HAND)) { if (ability instanceof SpellAbility || ability instanceof PlayLandAbility) { playable.add(ability);