diff --git a/.classpath b/.classpath
index c4a47895836..c81385aa834 100644
--- a/.classpath
+++ b/.classpath
@@ -1,14 +1,12 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/res/cards.txt b/res/cards.txt
index 0f40031b3eb..5221debdc70 100644
--- a/res/cards.txt
+++ b/res/cards.txt
@@ -1,3 +1,8 @@
+Jace, the Mind Sculptor
+2 U U
+Planeswalker - Jace
+no text
+
Raging Ravine
no cost
Land
diff --git a/src/forge/CardFactory.java b/src/forge/CardFactory.java
index 04f4daf4fad..ffade2e5bcf 100644
--- a/src/forge/CardFactory.java
+++ b/src/forge/CardFactory.java
@@ -16234,10 +16234,9 @@ return land.size() > 1 && CardFactoryUtil.AI_isMainPhase();
if (player.equals("Human") && lands.size() > 0)
{
- String[] choices =
- { "Yes", "No" };
+ String[] choices = { "Yes", "No" };
Object choice = AllZone.Display.getChoice(
- "Search fo Basic Land?", choices);
+ "Search for Basic Land?", choices);
if (choice.equals("Yes"))
{
Object o = AllZone.Display
diff --git a/src/forge/CardFactory_Planeswalkers.java b/src/forge/CardFactory_Planeswalkers.java
index 5657c2d9372..3686cce4366 100644
--- a/src/forge/CardFactory_Planeswalkers.java
+++ b/src/forge/CardFactory_Planeswalkers.java
@@ -2728,6 +2728,241 @@ class CardFactory_Planeswalkers {
//end ability 3
return card2;
+ }//*************** END ************ END **************************
+
+
+ //*************** START *********** START **************************
+ if(cardName.equals("Jace, the Mind Sculptor"))
+ {
+ final int turn[] = new int[1];
+ turn[0] = -1;
+
+ final Card card2 = new Card()
+ {
+ public void addDamage(int n, Card source)
+ {
+ subtractCounter(Counters.LOYALTY,n);
+ AllZone.GameAction.checkStateEffects();
+ }
+ };
+ card2.setOwner(owner);
+ card2.setController(owner);
+
+ card2.setName(card.getName());
+ card2.setType(card.getType());
+ card2.setManaCost(card.getManaCost());
+ card2.addSpellAbility(new Spell_Permanent(card2));
+ card2.addComesIntoPlayCommand(CardFactoryUtil.entersBattleFieldWithCounters(card2, Counters.LOYALTY, 3));
+
+ final Ability ability1 = new Ability(card2, "0")
+ {
+ public void resolve()
+ {
+ turn[0] = AllZone.Phase.getTurn();
+ card2.addCounterFromNonEffect(Counters.LOYALTY, 2);
+ String targetPlayer = getTargetPlayer();
+
+ PlayerZone lib = AllZone.getZone(Constant.Zone.Library, targetPlayer);
+
+ if (lib.size() == 0)
+ return;
+
+ Card c = lib.get(0);
+
+ if (card2.getController().equals(Constant.Player.Human))
+ {
+
+ String[] choices = { "Yes", "No" };
+ Object choice = AllZone.Display.getChoice("Put " + c + " on bottom of owner's library?", choices);
+ if (choice != null)
+ {
+ if (choice.equals("Yes"))
+ {
+ lib.remove(c);
+ lib.add(c);
+ }
+ }
+ }
+ else //compy
+ {
+ PlayerZone humanPlay = AllZone.getZone(Constant.Zone.Play, Constant.Player.Human);
+ CardList land = new CardList(humanPlay.getCards());
+ land = land.getType("Land");
+
+ //TODO: improve this:
+ if (land.size() > 4 && c.isLand())
+ ;
+ else
+ {
+ lib.remove(c);
+ lib.add(c);
+ }
+ }
+ }
+
+ public boolean canPlayAI()
+ {
+ return card2.getCounters(Counters.LOYALTY) < 13 && AllZone.Human_Library.size() > 2;
+ }
+
+ public boolean canPlay()
+ {
+ return AllZone.getZone(card2).is(Constant.Zone.Play) &&
+ turn[0] != AllZone.Phase.getTurn() &&
+ AllZone.Phase.getActivePlayer().equals(card2.getController()) &&
+ !AllZone.Phase.getPhase().equals("End of Turn") &&
+ (AllZone.Phase.getPhase().equals("Main1") || AllZone.Phase.getPhase().equals("Main2"))
+ && AllZone.Stack.size() == 0;
+ }//canPlay()
+ };
+ ability1.setDescription("+2: Look at the top card of target player's library. You may put that card on the bottom of that player's library.");
+ ability1.setStackDescription(card2 + " - Look at the top card of target player's library. You may put that card on the bottom of that player's library.");
+ ability1.setBeforePayMana(CardFactoryUtil.input_targetPlayer(ability1));
+ ability1.setChooseTargetAI(CardFactoryUtil.AI_targetHuman());
+ card2.addSpellAbility(ability1);
+
+ final Ability ability2 = new Ability(card2, "0")
+ {
+ public void resolve()
+ {
+ turn[0] = AllZone.Phase.getTurn();
+ AllZone.GameAction.drawCard(card.getController());
+ AllZone.GameAction.drawCard(card.getController());
+ AllZone.GameAction.drawCard(card.getController());
+
+ String player = card.getController();
+ if(player.equals(Constant.Player.Human))
+ humanResolve();
+ //else
+ // computerResolve();
+ }
+
+ public void humanResolve()
+ {
+ PlayerZone hand = AllZone.getZone(Constant.Zone.Hand, Constant.Player.Human);
+ PlayerZone lib = AllZone.getZone(Constant.Zone.Library, Constant.Player.Human);
+
+ CardList putOnTop = new CardList(hand.getCards());
+
+ Object o = AllZone.Display.getChoiceOptional("First card to put on top: ", putOnTop.toArray());
+ if(o != null)
+ {
+ Card c1 = (Card)o;
+ putOnTop.remove(c1);
+ hand.remove(c1);
+ lib.add(c1,0);
+ }
+ o = AllZone.Display.getChoiceOptional("Second card to put on top: ", putOnTop.toArray());
+ if(o != null)
+ {
+ Card c2 = (Card)o;
+ putOnTop.remove(c2);
+ hand.remove(c2);
+ lib.add(c2,0);
+ }
+ }
+
+ public boolean canPlayAI()
+ {
+ return false;
+ }
+
+ public boolean canPlay()
+ {
+ return AllZone.getZone(card2).is(Constant.Zone.Play) &&
+ turn[0] != AllZone.Phase.getTurn() &&
+ AllZone.Phase.getActivePlayer().equals(card2.getController()) &&
+ !AllZone.Phase.getPhase().equals("End of Turn") &&
+ (AllZone.Phase.getPhase().equals("Main1") || AllZone.Phase.getPhase().equals("Main2"))
+ && AllZone.Stack.size() == 0;
+ }//canPlay()
+ };
+ ability2.setDescription("0: Draw three cards, then put two cards from your hand on top of your library in any order.");
+ ability2.setStackDescription(card2 + " - Draw three cards, then put two cards from your hand on top of your library in any order.");
+ card2.addSpellAbility(ability2);
+
+ final Ability ability3 = new Ability(card, "0")
+ {
+ public void resolve()
+ {
+ turn[0] = AllZone.Phase.getTurn();
+ card2.subtractCounter(Counters.LOYALTY, 1);
+
+ if(AllZone.GameAction.isCardInPlay(getTargetCard()) && CardFactoryUtil.canTarget(card, getTargetCard()) )
+ {
+ if(getTargetCard().isToken())
+ AllZone.getZone(getTargetCard()).remove(getTargetCard());
+ else
+ {
+ PlayerZone hand = AllZone.getZone(Constant.Zone.Hand, getTargetCard().getOwner());
+ AllZone.GameAction.moveTo(hand, getTargetCard());
+ }
+ }//if
+ }//resolve()
+
+ public boolean canPlay()
+ {
+ return card2.getCounters(Counters.LOYALTY) >= 1 && AllZone.getZone(card2).is(Constant.Zone.Play) &&
+ turn[0] != AllZone.Phase.getTurn() &&
+ AllZone.Phase.getActivePlayer().equals(card2.getController()) &&
+ !AllZone.Phase.getPhase().equals("End of Turn") &&
+ (AllZone.Phase.getPhase().equals("Main1") || AllZone.Phase.getPhase().equals("Main2"))
+ && AllZone.Stack.size() == 0;
+ }
+ };
+ ability3.setDescription("-1: Return target creature to its owner's hand.");
+ ability3.setBeforePayMana(CardFactoryUtil.input_targetCreature(ability3));
+ card2.addSpellAbility(ability3);
+
+ final Ability ability4 = new Ability(card, "0")
+ {
+ public void resolve()
+ {
+ turn[0] = AllZone.Phase.getTurn();
+ card2.subtractCounter(Counters.LOYALTY, 12);
+
+ String player = getTargetPlayer();
+
+ PlayerZone lib = AllZone.getZone(Constant.Zone.Library, player);
+ PlayerZone hand = AllZone.getZone(Constant.Zone.Hand, player);
+
+ CardList libList = new CardList(lib.getCards());
+ CardList handList = new CardList(hand.getCards());
+
+ for (Card c:libList)
+ AllZone.GameAction.removeFromGame(c);
+
+ handList.shuffle();
+ for (Card c:handList)
+ {
+ hand.remove(c);
+ lib.add(c);
+ }
+ }
+
+ public boolean canPlayAI()
+ {
+ int libSize = AllZone.Human_Library.size();
+ int handSize = AllZone.Human_Hand.size();
+ return libSize > 10 && (libSize > handSize);
+ }
+
+ public boolean canPlay()
+ {
+ return card2.getCounters(Counters.LOYALTY) >= 12 && AllZone.getZone(card2).is(Constant.Zone.Play) &&
+ turn[0] != AllZone.Phase.getTurn() &&
+ AllZone.Phase.getActivePlayer().equals(card2.getController()) &&
+ !AllZone.Phase.getPhase().equals("End of Turn") &&
+ (AllZone.Phase.getPhase().equals("Main1") || AllZone.Phase.getPhase().equals("Main2"))
+ && AllZone.Stack.size() == 0;
+ }
+ };
+ ability4.setDescription("-12: Exile all cards from target player's library, then that player shuffles his or her hand into his or her library.");
+ ability4.setBeforePayMana(CardFactoryUtil.input_targetPlayer(ability4));
+ ability4.setChooseTargetAI(CardFactoryUtil.AI_targetHuman());
+ card2.addSpellAbility(ability4);
+
+ return card2;
}//*************** END ************ END **************************
return card;
diff --git a/src/forge/Gui_NewGame.java b/src/forge/Gui_NewGame.java
index 06adcf13746..8e934e271a0 100644
--- a/src/forge/Gui_NewGame.java
+++ b/src/forge/Gui_NewGame.java
@@ -660,7 +660,7 @@ public class Gui_NewGame extends JFrame implements NewConstants, NewConstants.LA
LAFMap.put("Gemini", "org.jvnet.substance.api.skin.SubstanceGeminiLookAndFeel");
LAFMap.put("Graphite Aqua", "org.jvnet.substance.api.skin.SubstanceGraphiteAquaLookAndFeel");
LAFMap.put("Moderate", "org.jvnet.substance.skin.SubstanceModerateLookAndFeel");
- LAFMap.put("Magellan", "org.jvnet.substance.skin.SubstanceMagellanLookAndFeel");
+ //LAFMap.put("Magellan", "org.jvnet.substance.skin.SubstanceMagellanLookAndFeel");
LAFMap.put("Magma", "org.jvnet.substance.skin.SubstanceMagmaLookAndFeel");
LAFMap.put("Mist Aqua", "org.jvnet.substance.skin.SubstanceMistAquaLookAndFeel");
LAFMap.put("Mist Silver", "org.jvnet.substance.skin.SubstanceMistSilverLookAndFeel");