- Added The Tabernacle at Pendrell Vale and Magus of the Tabernacle.

- Fixed Bog Initiate Manacost.
- Some slight performance improvements for displaying cards (not sure if it helps much).
- A bunch of Adarkar Valkyrie bugs should be fixed now.
This commit is contained in:
jendave
2011-08-06 03:06:38 +00:00
parent 9f64c16995
commit 6fa2eea57f
10 changed files with 452 additions and 74 deletions

View File

@@ -1,3 +1,14 @@
Magus of the Tabernacle
3 W
Creature Human Wizard
All creatures have "At the beginning of your upkeep, sacrifice this creature unless you pay 1."
2/6
The Tabernacle at Pendrell Vale
no cost
Legendary Land
All creatures have "At the beginning of your upkeep, destroy this creature unless you pay 1."
Donate Donate
2 U 2 U
Sorcery Sorcery
@@ -3260,7 +3271,7 @@ no text
1,tap: add WU 1,tap: add WU
Bog Initiate Bog Initiate
B 1 B
Creature Human Wizard Creature Human Wizard
no text no text
1/1 1/1

View File

@@ -16,7 +16,7 @@
<object class="java.awt.Rectangle"> <object class="java.awt.Rectangle">
<int>0</int> <int>0</int>
<int>0</int> <int>0</int>
<int>244</int> <int>245</int>
<int>827</int> <int>827</int>
</object> </object>
</void> </void>
@@ -27,8 +27,8 @@
<object class="java.awt.Rectangle"> <object class="java.awt.Rectangle">
<int>0</int> <int>0</int>
<int>0</int> <int>0</int>
<int>244</int> <int>245</int>
<int>138</int> <int>132</int>
</object> </object>
</void> </void>
<void property="name"> <void property="name">
@@ -47,8 +47,8 @@
<void property="bounds"> <void property="bounds">
<object class="java.awt.Rectangle"> <object class="java.awt.Rectangle">
<int>0</int> <int>0</int>
<int>138</int> <int>132</int>
<int>244</int> <int>245</int>
<int>10</int> <int>10</int>
</object> </object>
</void> </void>
@@ -62,9 +62,9 @@
<void property="bounds"> <void property="bounds">
<object class="java.awt.Rectangle"> <object class="java.awt.Rectangle">
<int>0</int> <int>0</int>
<int>148</int> <int>142</int>
<int>244</int> <int>245</int>
<int>190</int> <int>196</int>
</object> </object>
</void> </void>
<void property="name"> <void property="name">
@@ -84,7 +84,7 @@
<object class="java.awt.Rectangle"> <object class="java.awt.Rectangle">
<int>0</int> <int>0</int>
<int>338</int> <int>338</int>
<int>244</int> <int>245</int>
<int>10</int> <int>10</int>
</object> </object>
</void> </void>
@@ -99,7 +99,7 @@
<object class="java.awt.Rectangle"> <object class="java.awt.Rectangle">
<int>0</int> <int>0</int>
<int>348</int> <int>348</int>
<int>244</int> <int>245</int>
<int>113</int> <int>113</int>
</object> </object>
</void> </void>
@@ -120,7 +120,7 @@
<object class="java.awt.Rectangle"> <object class="java.awt.Rectangle">
<int>0</int> <int>0</int>
<int>461</int> <int>461</int>
<int>244</int> <int>245</int>
<int>10</int> <int>10</int>
</object> </object>
</void> </void>
@@ -135,7 +135,7 @@
<object class="java.awt.Rectangle"> <object class="java.awt.Rectangle">
<int>0</int> <int>0</int>
<int>471</int> <int>471</int>
<int>244</int> <int>245</int>
<int>107</int> <int>107</int>
</object> </object>
</void> </void>
@@ -156,7 +156,7 @@
<object class="java.awt.Rectangle"> <object class="java.awt.Rectangle">
<int>0</int> <int>0</int>
<int>578</int> <int>578</int>
<int>244</int> <int>245</int>
<int>10</int> <int>10</int>
</object> </object>
</void> </void>
@@ -171,7 +171,7 @@
<object class="java.awt.Rectangle"> <object class="java.awt.Rectangle">
<int>0</int> <int>0</int>
<int>588</int> <int>588</int>
<int>244</int> <int>245</int>
<int>239</int> <int>239</int>
</object> </object>
</void> </void>
@@ -202,7 +202,7 @@
<object class="org.jdesktop.swingx.MultiSplitLayout$Divider"> <object class="org.jdesktop.swingx.MultiSplitLayout$Divider">
<void property="bounds"> <void property="bounds">
<object class="java.awt.Rectangle"> <object class="java.awt.Rectangle">
<int>244</int> <int>245</int>
<int>0</int> <int>0</int>
<int>10</int> <int>10</int>
<int>827</int> <int>827</int>
@@ -217,9 +217,9 @@
<object id="MultiSplitLayout$Split2" class="org.jdesktop.swingx.MultiSplitLayout$Split"> <object id="MultiSplitLayout$Split2" class="org.jdesktop.swingx.MultiSplitLayout$Split">
<void property="bounds"> <void property="bounds">
<object class="java.awt.Rectangle"> <object class="java.awt.Rectangle">
<int>254</int> <int>255</int>
<int>0</int> <int>0</int>
<int>926</int> <int>901</int>
<int>827</int> <int>827</int>
</object> </object>
</void> </void>
@@ -228,9 +228,9 @@
<object class="org.jdesktop.swingx.MultiSplitLayout$Leaf"> <object class="org.jdesktop.swingx.MultiSplitLayout$Leaf">
<void property="bounds"> <void property="bounds">
<object class="java.awt.Rectangle"> <object class="java.awt.Rectangle">
<int>254</int> <int>255</int>
<int>0</int> <int>0</int>
<int>926</int> <int>901</int>
<int>147</int> <int>147</int>
</object> </object>
</void> </void>
@@ -249,9 +249,9 @@
<object class="org.jdesktop.swingx.MultiSplitLayout$Divider"> <object class="org.jdesktop.swingx.MultiSplitLayout$Divider">
<void property="bounds"> <void property="bounds">
<object class="java.awt.Rectangle"> <object class="java.awt.Rectangle">
<int>254</int> <int>255</int>
<int>147</int> <int>147</int>
<int>926</int> <int>901</int>
<int>10</int> <int>10</int>
</object> </object>
</void> </void>
@@ -264,9 +264,9 @@
<object class="org.jdesktop.swingx.MultiSplitLayout$Leaf"> <object class="org.jdesktop.swingx.MultiSplitLayout$Leaf">
<void property="bounds"> <void property="bounds">
<object class="java.awt.Rectangle"> <object class="java.awt.Rectangle">
<int>254</int> <int>255</int>
<int>157</int> <int>157</int>
<int>926</int> <int>901</int>
<int>169</int> <int>169</int>
</object> </object>
</void> </void>
@@ -285,9 +285,9 @@
<object class="org.jdesktop.swingx.MultiSplitLayout$Divider"> <object class="org.jdesktop.swingx.MultiSplitLayout$Divider">
<void property="bounds"> <void property="bounds">
<object class="java.awt.Rectangle"> <object class="java.awt.Rectangle">
<int>254</int> <int>255</int>
<int>326</int> <int>326</int>
<int>926</int> <int>901</int>
<int>10</int> <int>10</int>
</object> </object>
</void> </void>
@@ -300,9 +300,9 @@
<object class="org.jdesktop.swingx.MultiSplitLayout$Leaf"> <object class="org.jdesktop.swingx.MultiSplitLayout$Leaf">
<void property="bounds"> <void property="bounds">
<object class="java.awt.Rectangle"> <object class="java.awt.Rectangle">
<int>254</int> <int>255</int>
<int>336</int> <int>336</int>
<int>926</int> <int>901</int>
<int>187</int> <int>187</int>
</object> </object>
</void> </void>
@@ -321,9 +321,9 @@
<object class="org.jdesktop.swingx.MultiSplitLayout$Divider"> <object class="org.jdesktop.swingx.MultiSplitLayout$Divider">
<void property="bounds"> <void property="bounds">
<object class="java.awt.Rectangle"> <object class="java.awt.Rectangle">
<int>254</int> <int>255</int>
<int>523</int> <int>523</int>
<int>926</int> <int>901</int>
<int>10</int> <int>10</int>
</object> </object>
</void> </void>
@@ -336,9 +336,9 @@
<object class="org.jdesktop.swingx.MultiSplitLayout$Leaf"> <object class="org.jdesktop.swingx.MultiSplitLayout$Leaf">
<void property="bounds"> <void property="bounds">
<object class="java.awt.Rectangle"> <object class="java.awt.Rectangle">
<int>254</int> <int>255</int>
<int>533</int> <int>533</int>
<int>926</int> <int>901</int>
<int>145</int> <int>145</int>
</object> </object>
</void> </void>
@@ -357,9 +357,9 @@
<object class="org.jdesktop.swingx.MultiSplitLayout$Divider"> <object class="org.jdesktop.swingx.MultiSplitLayout$Divider">
<void property="bounds"> <void property="bounds">
<object class="java.awt.Rectangle"> <object class="java.awt.Rectangle">
<int>254</int> <int>255</int>
<int>678</int> <int>678</int>
<int>926</int> <int>901</int>
<int>10</int> <int>10</int>
</object> </object>
</void> </void>
@@ -372,9 +372,9 @@
<object class="org.jdesktop.swingx.MultiSplitLayout$Leaf"> <object class="org.jdesktop.swingx.MultiSplitLayout$Leaf">
<void property="bounds"> <void property="bounds">
<object class="java.awt.Rectangle"> <object class="java.awt.Rectangle">
<int>254</int> <int>255</int>
<int>688</int> <int>688</int>
<int>926</int> <int>901</int>
<int>139</int> <int>139</int>
</object> </object>
</void> </void>
@@ -408,7 +408,7 @@
<object class="org.jdesktop.swingx.MultiSplitLayout$Divider"> <object class="org.jdesktop.swingx.MultiSplitLayout$Divider">
<void property="bounds"> <void property="bounds">
<object class="java.awt.Rectangle"> <object class="java.awt.Rectangle">
<int>1180</int> <int>1156</int>
<int>0</int> <int>0</int>
<int>10</int> <int>10</int>
<int>827</int> <int>827</int>
@@ -423,9 +423,9 @@
<object id="MultiSplitLayout$Split3" class="org.jdesktop.swingx.MultiSplitLayout$Split"> <object id="MultiSplitLayout$Split3" class="org.jdesktop.swingx.MultiSplitLayout$Split">
<void property="bounds"> <void property="bounds">
<object class="java.awt.Rectangle"> <object class="java.awt.Rectangle">
<int>1190</int> <int>1166</int>
<int>0</int> <int>0</int>
<int>250</int> <int>274</int>
<int>827</int> <int>827</int>
</object> </object>
</void> </void>
@@ -434,9 +434,9 @@
<object class="org.jdesktop.swingx.MultiSplitLayout$Leaf"> <object class="org.jdesktop.swingx.MultiSplitLayout$Leaf">
<void property="bounds"> <void property="bounds">
<object class="java.awt.Rectangle"> <object class="java.awt.Rectangle">
<int>1190</int> <int>1166</int>
<int>0</int> <int>0</int>
<int>250</int> <int>274</int>
<int>409</int> <int>409</int>
</object> </object>
</void> </void>
@@ -455,9 +455,9 @@
<object class="org.jdesktop.swingx.MultiSplitLayout$Divider"> <object class="org.jdesktop.swingx.MultiSplitLayout$Divider">
<void property="bounds"> <void property="bounds">
<object class="java.awt.Rectangle"> <object class="java.awt.Rectangle">
<int>1190</int> <int>1166</int>
<int>409</int> <int>409</int>
<int>250</int> <int>274</int>
<int>10</int> <int>10</int>
</object> </object>
</void> </void>
@@ -470,9 +470,9 @@
<object class="org.jdesktop.swingx.MultiSplitLayout$Leaf"> <object class="org.jdesktop.swingx.MultiSplitLayout$Leaf">
<void property="bounds"> <void property="bounds">
<object class="java.awt.Rectangle"> <object class="java.awt.Rectangle">
<int>1190</int> <int>1166</int>
<int>419</int> <int>419</int>
<int>250</int> <int>274</int>
<int>408</int> <int>408</int>
</object> </object>
</void> </void>

View File

@@ -81,6 +81,8 @@ public class Card extends MyObservable
private String text = ""; private String text = "";
private String manaCost = ""; private String manaCost = "";
private String upkeepCost = ""; private String upkeepCost = "";
private String tabernacleUpkeepCost = "";
private String magusTabernacleUpkeepCost = "";
private String echoCost = ""; private String echoCost = "";
private String chosenType = ""; private String chosenType = "";
private String chosenColor = ""; private String chosenColor = "";
@@ -254,6 +256,12 @@ public class Card extends MyObservable
public String getUpkeepCost() {return upkeepCost;} public String getUpkeepCost() {return upkeepCost;}
public boolean hasUpkeepCost(){return upkeepCost.length() > 0 && !upkeepCost.equals("0");} public boolean hasUpkeepCost(){return upkeepCost.length() > 0 && !upkeepCost.equals("0");}
public void setTabernacleUpkeepCost(String s) { tabernacleUpkeepCost = s; }
public String getTabernacleUpkeepCost() { return tabernacleUpkeepCost; }
public void setMagusTabernacleUpkeepCost(String s) { magusTabernacleUpkeepCost = s; }
public String getMagusTabernacleUpkeepCost() { return magusTabernacleUpkeepCost; }
//used for cards like Belbe's Portal, Conspiracy, Cover of Darkness, etc. //used for cards like Belbe's Portal, Conspiracy, Cover of Darkness, etc.
public String getChosenType() { return chosenType;} public String getChosenType() { return chosenType;}
public void setChosenType(String s) {chosenType = s;} public void setChosenType(String s) {chosenType = s;}

View File

@@ -7826,8 +7826,8 @@ public class CardFactory_Creatures {
if(AllZone.GameAction.isCardInZone(target[0], grave)) if(AllZone.GameAction.isCardInZone(target[0], grave))
{ {
PlayerZone play = AllZone.getZone(Constant.Zone.Play, card.getController()); PlayerZone play = AllZone.getZone(Constant.Zone.Play, card.getController());
AllZone.GameAction.moveTo(play, target[0]);
target[0].setController(card.getController()); target[0].setController(card.getController());
AllZone.GameAction.moveTo(play, target[0]);
} }
} }
}); });

View File

@@ -1625,7 +1625,7 @@ class CardFactory_Lands {
} }
} }
if (cards.size() > 0 && AllZone.GameAction.isCardInPlay(card) && card.isUntapped()) if (super.canPlay() && cards.size() > 0 && AllZone.GameAction.isCardInPlay(card) && card.isUntapped())
return true; return true;
else else
return false; return false;

View File

@@ -134,8 +134,8 @@ private Card getCurrentCard(int ID)
public void discardHand(String player) public void discardHand(String player)
{ {
PlayerZone hand = AllZone.getZone(Constant.Zone.Hand, player); PlayerZone hand = AllZone.getZone(Constant.Zone.Hand, player);
for (int i=0;i<hand.size();i++) CardList list = new CardList(hand.getCards());
discardRandom(player); discardRandom(player, list.size());
} }
public void AI_discardNumUnless(int numDiscard, String uType) public void AI_discardNumUnless(int numDiscard, String uType)

View File

@@ -11,6 +11,8 @@ public class GameActionUtil
upkeep_UpkeepCost(); upkeep_UpkeepCost();
upkeep_CumulativeUpkeepCost(); upkeep_CumulativeUpkeepCost();
upkeep_Echo(); upkeep_Echo();
upkeep_TabernacleUpkeepCost();
upkeep_MagusTabernacleUpkeepCost();
// upkeep_CheckEmptyDeck_Lose(); //still a little buggy // upkeep_CheckEmptyDeck_Lose(); //still a little buggy
upkeep_Phyrexian_Arena(); upkeep_Phyrexian_Arena();
upkeep_Honden_of_Cleansing_Fire(); upkeep_Honden_of_Cleansing_Fire();
@@ -2468,7 +2470,7 @@ public class GameActionUtil
} }
} }
public static void upkeep_UpkeepCost() public static void upkeep_TabernacleUpkeepCost()
{ {
String player = AllZone.Phase.getActivePlayer(); String player = AllZone.Phase.getActivePlayer();
@@ -2483,10 +2485,11 @@ public class GameActionUtil
ArrayList<String> a = c.getKeyword(); ArrayList<String> a = c.getKeyword();
for (int i = 0; i < a.size(); i++) for (int i = 0; i < a.size(); i++)
{ {
if (a.get(i).toString().startsWith("At the beginning of your upkeep, sacrifice ")) if (a.get(i).toString().startsWith("At the beginning of your upkeep, destroy this creature unless you pay"))
{ {
String k[] = a.get(i).toString().split(":"); String k[] = a.get(i).toString().split("pay ");
c.setUpkeepCost(k[1]); k[1] = k[1].substring(0, k[1].length()-1);
c.setTabernacleUpkeepCost(k[1]);
return true; return true;
} }
} }
@@ -2498,7 +2501,7 @@ public class GameActionUtil
{ {
final Card c = list.get(i); final Card c = list.get(i);
final Ability sacAbility = new Ability(c, c.getUpkeepCost()) final Ability destroyAbility = new Ability(c, c.getTabernacleUpkeepCost())
{ {
public void resolve() public void resolve()
{ {
@@ -2511,7 +2514,7 @@ public class GameActionUtil
private static final long serialVersionUID = -8737736216222268696L; private static final long serialVersionUID = -8737736216222268696L;
public void execute() { public void execute() {
AllZone.GameAction.sacrifice(c); AllZone.GameAction.destroy(c);
} }
}; };
@@ -2525,17 +2528,86 @@ public class GameActionUtil
//AllZone.Stack.add(sacAbility); //AllZone.Stack.add(sacAbility);
if (c.getController().equals(Constant.Player.Human)) { if (c.getController().equals(Constant.Player.Human)) {
AllZone.InputControl.setInput(new Input_PayManaCost_Ability("Upkeep for "+ c +"\r\n", sacAbility.getManaCost(), paidCommand, unpaidCommand)); AllZone.InputControl.setInput(new Input_PayManaCost_Ability("Tabernacle Upkeep for "+ c +"\r\n", destroyAbility.getManaCost(), paidCommand, unpaidCommand));
} }
else //computer else //computer
{ {
if (ComputerUtil.canPayCost(sacAbility)) if (ComputerUtil.canPayCost(destroyAbility))
ComputerUtil.playNoStack(sacAbility); ComputerUtil.playNoStack(destroyAbility);
else
AllZone.GameAction.destroy(c);
}
}
}//TabernacleUpkeepCost
public static void upkeep_MagusTabernacleUpkeepCost()
{
String player = AllZone.Phase.getActivePlayer();
PlayerZone play = AllZone.getZone(Constant.Zone.Play, player);
CardList list = new CardList();
list.addAll(play.getCards());
//list = list.getType("Creature");
list = list.filter(new CardListFilter()
{
public boolean addCard(Card c)
{
ArrayList<String> a = c.getKeyword();
for (int i = 0; i < a.size(); i++)
{
if (a.get(i).toString().startsWith("At the beginning of your upkeep, sacrifice this creature unless you pay"))
{
String k[] = a.get(i).toString().split("pay ");
k[1] = k[1].substring(0, k[1].length()-1);
c.setMagusTabernacleUpkeepCost(k[1]);
return true;
}
}
return false;
}
});
for (int i=0; i<list.size();i++)
{
final Card c = list.get(i);
final Ability sacrificeAbility = new Ability(c, c.getMagusTabernacleUpkeepCost())
{
public void resolve()
{
;
}
};
final Command unpaidCommand = new Command() {
private static final long serialVersionUID = 660060621665783254L;
public void execute() {
AllZone.GameAction.sacrifice(c);
}
};
final Command paidCommand = new Command() {
private static final long serialVersionUID = 7896720208740364774L;
public void execute() {
;
}
};
//AllZone.Stack.add(sacAbility);
if (c.getController().equals(Constant.Player.Human)) {
AllZone.InputControl.setInput(new Input_PayManaCost_Ability("Magus of the Tabernacle Upkeep for "+ c +"\r\n", sacrificeAbility.getManaCost(), paidCommand, unpaidCommand));
}
else //computer
{
if (ComputerUtil.canPayCost(sacrificeAbility))
ComputerUtil.playNoStack(sacrificeAbility);
else else
AllZone.GameAction.sacrifice(c); AllZone.GameAction.sacrifice(c);
} }
} }
}//upkeepCost }//MagusTabernacleUpkeepCost
public static void upkeep_CumulativeUpkeepCost() public static void upkeep_CumulativeUpkeepCost()
{ {
@@ -2665,11 +2737,80 @@ public class GameActionUtil
AllZone.GameAction.sacrifice(c); AllZone.GameAction.sacrifice(c);
} }
c.removeIntrinsicKeyword("(Echo unpaid)"); c.removeIntrinsicKeyword("(Echo unpaid)");
} }
} }
} }//echo
public static void upkeep_UpkeepCost()
{
String player = AllZone.Phase.getActivePlayer();
PlayerZone play = AllZone.getZone(Constant.Zone.Play, player);
CardList list = new CardList();
list.addAll(play.getCards());
//list = list.getType("Creature");
list = list.filter(new CardListFilter()
{
public boolean addCard(Card c)
{
ArrayList<String> a = c.getKeyword();
for (int i = 0; i < a.size(); i++)
{
if (a.get(i).toString().startsWith("At the beginning of your upkeep, sacrifice " +c.getName()))
{
String k[] = a.get(i).toString().split(":");
c.setUpkeepCost(k[1]);
return true;
}
}
return false;
}
});
for (int i=0; i<list.size();i++)
{
final Card c = list.get(i);
final Ability sacAbility = new Ability(c, c.getUpkeepCost())
{
public void resolve()
{
;
}
};
final Command unpaidCommand = new Command() {
private static final long serialVersionUID = -6483405139208343935L;
public void execute() {
AllZone.GameAction.sacrifice(c);
}
};
final Command paidCommand = new Command() {
private static final long serialVersionUID = -8303368287601871955L;
public void execute() {
;
}
};
//AllZone.Stack.add(sacAbility);
if (c.getController().equals(Constant.Player.Human)) {
AllZone.InputControl.setInput(new Input_PayManaCost_Ability("Upkeep for "+ c +"\r\n", sacAbility.getManaCost(), paidCommand, unpaidCommand));
}
else //computer
{
if (ComputerUtil.canPayCost(sacAbility))
ComputerUtil.playNoStack(sacAbility);
else
AllZone.GameAction.sacrifice(c);
}
}
}//upkeepCost
public static void removeAttackedBlockedThisTurn() public static void removeAttackedBlockedThisTurn()
@@ -4835,6 +4976,8 @@ public class GameActionUtil
} }
private static void upkeep_AEther_Vial() private static void upkeep_AEther_Vial()
{ {
final String player = AllZone.Phase.getActivePlayer(); final String player = AllZone.Phase.getActivePlayer();
@@ -7669,7 +7812,6 @@ public class GameActionUtil
Wirewood_Hivemaster.execute(); Wirewood_Hivemaster.execute();
Sacrifice_NoIslands.execute(); Sacrifice_NoIslands.execute();
//Angelic_Chorus.execute(); //Angelic_Chorus.execute();
/* /*
@@ -8675,6 +8817,114 @@ public class GameActionUtil
}// execute() }// execute()
}; };
public static Command Tabernacle = new Command()
{
private static final long serialVersionUID = -3233715310427996429L;
CardList gloriousAnthemList = new CardList();
public void execute()
{
String keyword = "At the beginning of your upkeep, destroy this creature unless you pay";
CardList list = gloriousAnthemList;
Card c;
// reset all cards in list - aka "old" cards
for (int i = 0; i < list.size(); i++)
{
c = list.get(i);
ArrayList<String> a = c.getKeyword();
for (String s : a)
{
if (s.startsWith(keyword))
c.removeExtrinsicKeyword(s);
}
}
list.clear();
PlayerZone cPlay = AllZone.Computer_Play;
PlayerZone hPlay = AllZone.Human_Play;
CardList clist = new CardList();
clist.addAll(cPlay.getCards());
clist.addAll(hPlay.getCards());
clist = clist.filter(new CardListFilter(){
public boolean addCard(Card c)
{
return c.getName().equals("The Tabernacle at Pendrell Vale"); /*|| c.getName().equals("Magus of the Tabernacle");*/
}
});
int number = clist.size();
//System.out.println("Tabernacle Number:" + number);
if (number > 0) {
CardList creature = new CardList();
creature.addAll(AllZone.Human_Play.getCards());
creature.addAll(AllZone.Computer_Play.getCards());
creature = creature.getType("Creature");
for (int i = 0; i < creature.size(); i++)
{
c = creature.get(i);
c.addExtrinsicKeyword(keyword + " " + number + ".");
gloriousAnthemList.add(c);
}// for inner
}
}// execute()
};
public static Command Magus_of_the_Tabernacle = new Command()
{
private static final long serialVersionUID = -249708982895077034L;
CardList gloriousAnthemList = new CardList();
public void execute()
{
String keyword = "At the beginning of your upkeep, sacrifice this creature unless you pay";
CardList list = gloriousAnthemList;
Card c;
// reset all cards in list - aka "old" cards
for (int i = 0; i < list.size(); i++)
{
c = list.get(i);
ArrayList<String> a = c.getKeyword();
for (String s : a)
{
if (s.startsWith(keyword))
c.removeExtrinsicKeyword(s);
}
}
list.clear();
PlayerZone cPlay = AllZone.Computer_Play;
PlayerZone hPlay = AllZone.Human_Play;
CardList clist = new CardList();
clist.addAll(cPlay.getCards());
clist.addAll(hPlay.getCards());
clist = clist.filter(new CardListFilter(){
public boolean addCard(Card c)
{
return c.getName().equals("Magus of the Tabernacle");
}
});
int number = clist.size();
//System.out.println("Tabernacle Number:" + number);
if (number > 0) {
CardList creature = new CardList();
creature.addAll(AllZone.Human_Play.getCards());
creature.addAll(AllZone.Computer_Play.getCards());
creature = creature.getType("Creature");
for (int i = 0; i < creature.size(); i++)
{
c = creature.get(i);
c.addExtrinsicKeyword(keyword + " " + number + ".");
gloriousAnthemList.add(c);
}// for inner
}
}// execute()
};
public static Command Serras_Blessing = new Command() public static Command Serras_Blessing = new Command()
{ {
@@ -15731,6 +15981,8 @@ public class GameActionUtil
commands.put("Knighthood", Knighthood); commands.put("Knighthood", Knighthood);
commands.put("Absolute_Law", Absolute_Law); commands.put("Absolute_Law", Absolute_Law);
commands.put("Absolute_Grace", Absolute_Grace); commands.put("Absolute_Grace", Absolute_Grace);
commands.put("Tabernacle", Tabernacle);
commands.put("Magus_of_the_Tabernacle", Magus_of_the_Tabernacle);
commands.put("Mobilization", Mobilization); commands.put("Mobilization", Mobilization);
commands.put("Serras_Blessing", Serras_Blessing); commands.put("Serras_Blessing", Serras_Blessing);
commands.put("Cover_of_Darkness", Cover_of_Darkness); commands.put("Cover_of_Darkness", Cover_of_Darkness);

View File

@@ -83,6 +83,9 @@ public class GuiDisplay3 extends JFrame implements Display, NewConstants, NewCon
public Color c3 = new Color(204,204,204); public Color c3 = new Color(204,204,204);
*/ */
private String current_picture = "";
private int count = 0;
public static Color c1 = new Color(204, 204, 204); public static Color c1 = new Color(204, 204, 204);
public static Color c2 = new Color(204, 204, 204); public static Color c2 = new Color(204, 204, 204);
public static Color c3 = new Color(0, 164, 0); public static Color c3 = new Color(0, 164, 0);
@@ -256,7 +259,10 @@ public class GuiDisplay3 extends JFrame implements Display, NewConstants, NewCon
if(choices[0] instanceof Card) { if(choices[0] instanceof Card) {
list.addListSelectionListener(new ListSelectionListener() { list.addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent ev) { public void valueChanged(ListSelectionEvent ev) {
if(list.getSelectedValue() instanceof Card) updateCardDetail((Card) list.getSelectedValue()); if(list.getSelectedValue() instanceof Card){
updateCardDetailText((Card) list.getSelectedValue());
updateCardDetailPicture((Card) list.getSelectedValue());
}
} }
}); });
} }
@@ -272,7 +278,10 @@ public class GuiDisplay3 extends JFrame implements Display, NewConstants, NewCon
if(choices[0] instanceof Card) { if(choices[0] instanceof Card) {
list.addListSelectionListener(new ListSelectionListener() { list.addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent ev) { public void valueChanged(ListSelectionEvent ev) {
if(list.getSelectedValue() instanceof Card) updateCardDetail((Card) list.getSelectedValue()); if(list.getSelectedValue() instanceof Card) {
updateCardDetailText((Card) list.getSelectedValue());
updateCardDetailPicture((Card) list.getSelectedValue());
}
} }
}); });
} }
@@ -402,7 +411,7 @@ public class GuiDisplay3 extends JFrame implements Display, NewConstants, NewCon
}//addListener() }//addListener()
public void updateCardDetail(Card c) { public void updateCardDetailText(Card c) {
// if(! c.isToken()) // if(! c.isToken())
// System.out.println(c +" " +c.getSpellAbility()[0].canPlay() +" " +c.getSpellAbility()[0].getManaCost()); // System.out.println(c +" " +c.getSpellAbility()[0].canPlay() +" " +c.getSpellAbility()[0].getManaCost());
@@ -530,14 +539,24 @@ public class GuiDisplay3 extends JFrame implements Display, NewConstants, NewCon
cdPanel.setBorder(GuiDisplayUtil.getBorder(c)); cdPanel.setBorder(GuiDisplayUtil.getBorder(c));
cCardHQ = c; cCardHQ = c;
}
public void updateCardDetailPicture(Card c)
{
if (c.getImageName().equals(current_picture) /*&& !c.isBasicLand()*/)
return;
//picture //picture
System.out.println("UPDATING PICTURE!!! #:" + count++);
current_picture = c.getImageName();
picturePanel.removeAll(); picturePanel.removeAll();
JPanel pic = GuiDisplayUtil.getPicture(c); JPanel pic = GuiDisplayUtil.getPicture(c);
pic.setSize(300, 300); pic.setSize(300, 300);
picturePanel.add(pic); picturePanel.add(pic);
picturePanel.revalidate(); picturePanel.revalidate();
System.gc();
//System.out.println(picturePanel.getComponentCount());
}//updateCardDetail() }//updateCardDetail()
private void addObservers() { private void addObservers() {
@@ -632,7 +651,8 @@ public class GuiDisplay3 extends JFrame implements Display, NewConstants, NewCon
@Override @Override
public void mouseMoved(MouseEvent me) { public void mouseMoved(MouseEvent me) {
GuiDisplay3.this.updateCardDetail(cardPanel.getCard()); GuiDisplay3.this.updateCardDetailText(cardPanel.getCard());
GuiDisplay3.this.updateCardDetailPicture(cardPanel.getCard());
}//mouseMoved }//mouseMoved
}); });
@@ -1377,7 +1397,10 @@ class Gui_MultipleBlockers3 extends JFrame {
AllZone.GameAction.addAssignedDamage(c, att, /*c.getTotalAssignedDamage() +*/ 1); AllZone.GameAction.addAssignedDamage(c, att, /*c.getTotalAssignedDamage() +*/ 1);
if(guiDisplay != null) guiDisplay.updateCardDetail(c); if(guiDisplay != null) {
guiDisplay.updateCardDetailText(c);
guiDisplay.updateCardDetailPicture(c);
}
} }
//reduce damage, show new user message, exit if necessary //reduce damage, show new user message, exit if necessary
assignDamage--; assignDamage--;
@@ -1395,7 +1418,11 @@ class Gui_MultipleBlockers3 extends JFrame {
CardPanel cardPanel = (CardPanel) o; CardPanel cardPanel = (CardPanel) o;
Card c = cardPanel.getCard(); Card c = cardPanel.getCard();
if(guiDisplay != null) guiDisplay.updateCardDetail(c); if(guiDisplay != null) {
guiDisplay.updateCardDetailText(c);
guiDisplay.updateCardDetailPicture(c);
}
} }
} }

View File

@@ -159,7 +159,8 @@ public class GuiDisplayUtil implements NewConstants {
if((o != null) && (o instanceof CardPanel)) { if((o != null) && (o instanceof CardPanel)) {
CardPanel cardPanel = (CardPanel) o; CardPanel cardPanel = (CardPanel) o;
visual.updateCardDetail(cardPanel.getCard()); visual.updateCardDetailText(cardPanel.getCard());
visual.updateCardDetailPicture(cardPanel.getCard());
} }
}//mouseMoved }//mouseMoved
}; };
@@ -199,6 +200,80 @@ public class GuiDisplayUtil implements NewConstants {
return returnString; return returnString;
} }
public static ImageIcon getImageIcon(Card c)
{
String suffix = ".jpg";
String filename = "";
if(!c.isFaceDown()) {
String basicLandSuffix = "";
if(c.isBasicLand()) {
if(c.getRandomPicture() != 0) basicLandSuffix = Integer.toString(c.getRandomPicture());
}
filename = cleanString(c.getImageName()) + basicLandSuffix + suffix;
} else filename = "morph" + suffix;
String loc = "";
if (!c.isToken())
loc = IMAGE_BASE;
else
loc = IMAGE_TOKEN;
File file = new File(ForgeProps.getFile(loc), filename);
//try current directory
if(!file.exists()) {
filename = cleanString(c.getName()) + suffix;
file = new File(filename);
}
if(file.exists()) {
if(c.isFaceDown()){
return new ImageIcon(filename);
}else{
int cWidth = 0;
int cHeight = 0;
try {
cWidth = GuiDisplayUtil.getPictureHQwidth(c);
} catch (IOException e) {
e.printStackTrace();
}
try {
cHeight = GuiDisplayUtil.getPictureHQheight(c);
} catch (IOException e) {
e.printStackTrace();
}
if(cWidth<=312 || cHeight<=445) {
return new ImageIcon(filename);
}else{
return new ImageIcon(filename);
}
}
}
/*else {
ImageIcon i = new ImageIcon();
JTextArea text = new JTextArea("\r\n\r\n" + filename, 10, 15);
Font f = text.getFont();
f = f.deriveFont(f.getSize() + 2.0f);
text.setFont(f);
text.setBackground(p.getBackground());
i.add(text);
if(c.isToken()) return new ImageIcon();
return i;
}//else
*/
return new ImageIcon();
}
public static JPanel getPicture(Card c) { public static JPanel getPicture(Card c) {
if(AllZone.NameChanger.shouldChangeCardName()) return new JPanel(); if(AllZone.NameChanger.shouldChangeCardName()) return new JPanel();
@@ -208,10 +283,13 @@ public class GuiDisplayUtil implements NewConstants {
if(!c.isFaceDown()) { if(!c.isFaceDown()) {
String basicLandSuffix = ""; String basicLandSuffix = "";
if(c.isBasicLand()) { if(c.isBasicLand()) {
if(c.getRandomPicture() != 0) basicLandSuffix = Integer.toString(c.getRandomPicture()); if(c.getRandomPicture() != 0) {
} basicLandSuffix = Integer.toString(c.getRandomPicture());
//c.setImageName(c.getImageName() + basicLandSuffix);
}
filename = cleanString(c.getImageName()) + basicLandSuffix + suffix; }
filename = cleanString(c.getImageName())+ basicLandSuffix + suffix;
} else filename = "morph" + suffix; } else filename = "morph" + suffix;
String loc = ""; String loc = "";

View File

@@ -127,6 +127,8 @@ public class StateBasedEffects
cardToEffectsList.put("Knighthood", new String[] {"Knighthood"}); cardToEffectsList.put("Knighthood", new String[] {"Knighthood"});
cardToEffectsList.put("Absolute Law", new String[] {"Absolute_Law"}); cardToEffectsList.put("Absolute Law", new String[] {"Absolute_Law"});
cardToEffectsList.put("Absolute Grace", new String[] {"Absolute_Grace"}); cardToEffectsList.put("Absolute Grace", new String[] {"Absolute_Grace"});
cardToEffectsList.put("The Tabernacle at Pendrell Vale", new String[] {"Tabernacle"});
cardToEffectsList.put("Magus of the Tabernacle", new String[] {"Magus_of_the_Tabernacle"});
cardToEffectsList.put("Mobilization", new String[] {"Mobilization"}); cardToEffectsList.put("Mobilization", new String[] {"Mobilization"});
cardToEffectsList.put("Serra's Blessing", new String[] {"Serras_Blessing"}); cardToEffectsList.put("Serra's Blessing", new String[] {"Serras_Blessing"});
cardToEffectsList.put("Cover of Darkness", new String[] {"Cover_of_Darkness"}); cardToEffectsList.put("Cover of Darkness", new String[] {"Cover_of_Darkness"});