diff --git a/res/card-pictures.txt b/res/card-pictures.txt index 4f5a6936e57..38e635e4d81 100644 --- a/res/card-pictures.txt +++ b/res/card-pictures.txt @@ -18,6 +18,17 @@ forest.jpg http://resources.wizards.com/magic/cards/unh/en-us/card73946.jpg forest1.jpg http://gatherer.wizards.com/handlers/image.ashx?type=card&multiverseid=2748 forest2.jpg http://gatherer.wizards.com/handlers/image.ashx?type=card&multiverseid=587 forest3.jpg http://gatherer.wizards.com/handlers/image.ashx?type=card&multiverseid=586 +glimpse_the_unthinkable.jpg http://www.wizards.com/global/images/magic/general/glimpse_the_unthinkable.jpg +tome_scour.jpg http://www.wizards.com/global/images/magic/general/tome_scour.jpg +memory_erosion.jpg http://www.wizards.com/global/images/magic/general/memory_erosion.jpg +forced_fruition.jpg http://www.wizards.com/global/images/magic/general/Forced_Fruition.jpg +vedalken_entrancer.jpg http://www.wizards.com/global/images/magic/general/vedalken_entrancer.jpg +raven_guild_master.jpg http://www.wizards.com/global/images/magic/general/raven_guild_master.jpg +ambassador_laquatus.jpg http://www.wizards.com/global/images/magic/general/ambassador_laquatus.jpg +vampire_lacerator.jpg http://www.wizards.com/global/images/magic/general/vampire_lacerator.jpg +nemesis_of_reason.jpg http://www.wizards.com/global/images/magic/general/nemesis_of_reason.jpg +duskmantle_house_of_shadow.jpg http://www.wizards.com/global/images/magic/general/Duskmantle_House_of_Shadow.jpg +moroii.jpg http://www.wizards.com/global/images/magic/general/moroii.jpg laquatuss_champion.jpg http://www.wizards.com/global/images/magic/general/laquatuss_champion.jpg identity_crisis.jpg http://www.wizards.com/global/images/magic/general/identity_crisis.jpg lobotomy.jpg http://www.wizards.com/global/images/magic/general/lobotomy.jpg diff --git a/res/cards.txt b/res/cards.txt index d6e4507896f..f1a594ec5df 100644 --- a/res/cards.txt +++ b/res/cards.txt @@ -1,3 +1,67 @@ +Glimpse the Unthinkable +U B +Sorcery +Target player puts the top ten cards of his or her library into his or her graveyard. + +Tome Scour +U +Sorcery +Target player puts the top five cards of his or her library into his or her graveyard. + +Memory Erosion +1 U U +Enchantment +Whenever an opponent casts a spell, that player puts the top two cards of his or her library into his or her graveyard. + +Forced Fruition +4 U U +Enchantment +Whenever an opponent casts a spell, that player draws seven cards. + +Vedalken Entrancer +3 U +Creature Vedalken Wizard +no text +1/4 + +Raven Guild Master +1 U U +Creature Wizard Mutant +Whenever Raven Guild Master deals combat damage to a player, that player removes the top ten cards of his or her library from the game. +1/1 +Morph:2 U U + +Ambassador Laquatus +1 U U +Legendary Creature Merfolk Wizard +no text +1/3 + +Vampire Lacerator +B +Creature Vampire Warrior +At the beginning of your upkeep, you lose 1 life unless an opponent has 10 or less life. +2/2 + +Nemesis of Reason +3 U B +Creature Leviathan Horror +Whenever Nemesis of Reason attacks, defending player puts the top ten cards of his or her library into his or her graveyard. +3/7 + +Duskmantle, House of Shadow +no cost +Land +no text +tap: add 1 + +Moroii +2 U B +Creature Vampire +At the beginning of your upkeep, you lose 1 life. +4/4 +Flying + Identity Crisis 2 W W B B Sorcery diff --git a/src/forge/CardFactory.java b/src/forge/CardFactory.java index 16abcd40cef..a0d595fbef9 100644 --- a/src/forge/CardFactory.java +++ b/src/forge/CardFactory.java @@ -1631,7 +1631,6 @@ public class CardFactory implements NewConstants { } } } - if (results.size() > 0) { @@ -17345,6 +17344,48 @@ return land.size() > 1 && CardFactoryUtil.AI_isMainPhase(); }//*************** END ************ END ************************** + //*************** START *********** START ************************** + if (cardName.equals("Glimpse the Unthinkable") || cardName.equals("Tome Scour")) + { + final SpellAbility spell = new Spell(card) + { + private static final long serialVersionUID = 42470566751344693L; + + public boolean canPlayAI() + { + String player = getTargetPlayer(); + PlayerZone lib = AllZone.getZone(Constant.Zone.Library, player); + CardList libList = new CardList(lib.getCards()); + return libList.size() > 0; + } + + public void resolve() + { + String player = getTargetPlayer(); + + PlayerZone lib = AllZone.getZone(Constant.Zone.Library, player); + PlayerZone grave = AllZone.getZone(Constant.Zone.Graveyard, player); + CardList libList = new CardList(lib.getCards()); + + int max = 0; + if (cardName.equals("Glimpse the Unthinkable")) max = 10; else max = 5; + if (libList.size() < max) + max = libList.size(); + + for (int i=0;i 1 && CardFactoryUtil.AI_isMainPhase(); CardList grvList = new CardList(grave.getCards()); CardList fullHand = new CardList(hand.getCards()); Card[] handChoices = removeLand(hand.getCards()); - + if (fullHand.size() > 0 && card.getController().equals(Constant.Player.Human)) + AllZone.Display.getChoice("Revealing hand", fullHand.toArray()); if(card.getController().equals(Constant.Player.Human)) { choice = (Card) AllZone.Display.getChoice("Choose", handChoices); @@ -17578,7 +17620,7 @@ return land.size() > 1 && CardFactoryUtil.AI_isMainPhase(); card.addSpellAbility(spell); spell.setBeforePayMana(CardFactoryUtil.input_targetPlayer(spell)); - }//*************** END ************ END ************************** + }//*************** END ************ END ************************** //*************** START *********** START ************************** diff --git a/src/forge/CardFactory_Creatures.java b/src/forge/CardFactory_Creatures.java index a644c72a381..b52fb1de137 100644 --- a/src/forge/CardFactory_Creatures.java +++ b/src/forge/CardFactory_Creatures.java @@ -10299,7 +10299,7 @@ public class CardFactory_Creatures { c.setController(card.getController()); c.setName("Minor Demon"); - c.setImageName("BR 1 1 Demon"); + c.setImageName("BR 1 1 Minor Demon"); c.setManaCost("B R"); c.setToken(true); @@ -17499,6 +17499,95 @@ public class CardFactory_Creatures { }; card.addComesIntoPlayCommand(intoPlay); }//*************** END ************ END ************************** + + + //*************** START *********** START ************************** + else if(cardName.equals("Ambassador Laquatus")) + { + final SpellAbility a1 = new Ability(card, "3") + { + + public void resolve() + { + String player = getTargetPlayer(); + + PlayerZone lib = AllZone.getZone(Constant.Zone.Library, player); + PlayerZone grave = AllZone.getZone(Constant.Zone.Graveyard, player); + CardList libList = new CardList(lib.getCards()); + + int max = 3; + if (libList.size() < 3) + max = libList.size(); + + for (int i=0;i 0; + } + };//SpellAbility + card.addSpellAbility(a1); + a1.setDescription("3: Target player puts the top three cards of his or her library into his or her graveyard."); + a1.setStackDescription("Player puts the top three cards of his or her library into his or her graveyard"); + a1.setBeforePayMana(new Input_PayManaCost(a1)); + a1.setBeforePayMana(CardFactoryUtil.input_targetPlayer(a1)); + }//*************** END ************ END ************************** + + + //*************** START *********** START ************************** + else if(cardName.equals("Vedalken Entrancer")) + { + final SpellAbility a1 = new Ability_Tap(card, "U") + { + private static final long serialVersionUID = 2359247592519063187L; + + public void resolve() + { + String player = getTargetPlayer(); + + PlayerZone lib = AllZone.getZone(Constant.Zone.Library, player); + PlayerZone grave = AllZone.getZone(Constant.Zone.Graveyard, player); + CardList libList = new CardList(lib.getCards()); + + int max = 2; + if (libList.size() < 2) + max = libList.size(); + + for (int i=0;i 0; + } + };//SpellAbility + card.addSpellAbility(a1); + a1.setDescription("3, tap: Target player puts the top two cards of his or her library into his or her graveyard."); + a1.setStackDescription("Player puts the top two cards of his or her library into his or her graveyard"); + a1.setBeforePayMana(new Input_PayManaCost(a1)); + a1.setBeforePayMana(CardFactoryUtil.input_targetPlayer(a1)); + }//*************** END ************ END ************************** + // Cards with Cycling abilities // -1 means keyword "Cycling" not found diff --git a/src/forge/CardFactory_Lands.java b/src/forge/CardFactory_Lands.java index 10b36b23d3c..a25bfd15703 100644 --- a/src/forge/CardFactory_Lands.java +++ b/src/forge/CardFactory_Lands.java @@ -2620,6 +2620,50 @@ class CardFactory_Lands { }//*************** END ************ END ************************** + //*************** START *********** START ************************** + if(cardName.equals("Duskmantle, House of Shadow")) + { + card.clearSpellKeepManaAbility(); + + Ability_Tap ability = new Ability_Tap(card,"U B") + { + private static final long serialVersionUID = 42470566751344693L; + + public boolean canPlayAI() + { + String player = getTargetPlayer(); + PlayerZone lib = AllZone.getZone(Constant.Zone.Library, player); + CardList libList = new CardList(lib.getCards()); + return libList.size() > 0; + } + + public void resolve() + { + String player = getTargetPlayer(); + + PlayerZone lib = AllZone.getZone(Constant.Zone.Library, player); + PlayerZone grave = AllZone.getZone(Constant.Zone.Graveyard, player); + CardList libList = new CardList(lib.getCards()); + + int max = 1; + if (libList.size() < 1) + max = libList.size(); + + for (int i=0;i 0) }//Preeminent Captain + else if(c.getName().equals("Nemesis of Reason") && !c.getCreatureAttackedThisTurn()) + { + String player = AllZone.GameAction.getOpponent(c.getController()); + //if (c.getController().equals(Constant.Player.Human)) + //player="Human"; + //else if (c.getController().equals(Constant.Player.Computer)) + //player="Computer"; + + PlayerZone lib = AllZone.getZone(Constant.Zone.Library, player); + PlayerZone grave = AllZone.getZone(Constant.Zone.Graveyard, player); + CardList libList = new CardList(lib.getCards()); + + int max = 10; + if (libList.size() < 10) + max = libList.size(); + + for (int i=0;i 0) c.setDealtCombatDmgToOppThisTurn(true); @@ -1963,6 +2066,45 @@ public class GameActionUtil } // if } + private static void playerCombatDamage_Raven_Guild_Master(Card c) + { + final String player = c.getController(); + final String opponent = AllZone.GameAction.getOpponent(player); + + if (c.getNetAttack() > 0) + { + Ability ability = new Ability(c, "0") + { + public void resolve() + { + AllZone.GameAction.discardRandom(opponent); + + //////////// + + + PlayerZone lib = AllZone.getZone(Constant.Zone.Library, opponent); + PlayerZone exiled = AllZone.getZone(Constant.Zone.Removed_From_Play, opponent); + CardList libList = new CardList(lib.getCards()); + + int max = 10; + if (libList.size() < 10) + max = libList.size(); + + for (int i=0;i 10) + {AllZone.GameAction.getPlayerLife(player).subtractLife(1);} + else{ if (player == "Computer" && AllZone.Computer_Life.getLife() > 10) + {AllZone.GameAction.getPlayerLife(player).subtractLife(1);}} + } + }// upkeep_Vampire_Lacerator + private static void upkeep_Grinning_Demon() { final String player = AllZone.Phase.getActivePlayer(); @@ -4879,7 +5054,7 @@ public class GameActionUtil AllZone.Stack.add(ability); } }// for - }// upkeep_Juzam_Djinn() + }// upkeep_Grinning_Demon() private static void upkeep_Juzam_Djinn() {