mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-18 03:38:01 +00:00
Added a CostChange keyword and 14 cards with it (theres still plenty more that can be added with it). Also did a bit of cleanup to how Phase.GameBegins triggers (It now triggers at the start of the game and when it ends) Also did a bit of cleanup on how spells (Avatar of Woe, etc) reduce mana cost, all the coding for it is based in GameAction.java now.
This commit is contained in:
@@ -38,6 +38,20 @@ snow_covered_mountain.jpg http://www.wizards.com/global/images/magic/gene
|
|||||||
snow_covered_mountain1.jpg http://www.wizards.com/global/images/magic/general/snow_covered_mountain.jpg
|
snow_covered_mountain1.jpg http://www.wizards.com/global/images/magic/general/snow_covered_mountain.jpg
|
||||||
snow_covered_mountain2.jpg http://www.magickartenmarkt.de/img/cards/Ice_Age/snow_covered_mountain.jpg
|
snow_covered_mountain2.jpg http://www.magickartenmarkt.de/img/cards/Ice_Age/snow_covered_mountain.jpg
|
||||||
snow_covered_mountain3.jpg http://www.magickartenmarkt.de/img/cards/Ice_Age/snow_covered_mountain.jpg
|
snow_covered_mountain3.jpg http://www.magickartenmarkt.de/img/cards/Ice_Age/snow_covered_mountain.jpg
|
||||||
|
edgewalker.jpg http://www.wizards.com/global/images/magic/general/edgewalker.jpg
|
||||||
|
thunderscape_familiar.jpg http://www.wizards.com/global/images/magic/general/thunderscape_familiar.jpg
|
||||||
|
sphere_of_resistance.jpg http://www.wizards.com/global/images/magic/general/sphere_of_resistance.jpg
|
||||||
|
training_grounds.jpg http://www.wizards.com/global/images/magic/general/training_grounds.jpg
|
||||||
|
undead_warchief.jpg http://www.wizards.com/global/images/magic/general/undead_warchief.jpg
|
||||||
|
grand_arbiter_augustin_iv.jpg http://www.wizards.com/global/images/magic/general/grand_arbiter_augustin_iv.jpg
|
||||||
|
goblin_warchief.jpg http://www.wizards.com/global/images/magic/general/goblin_warchief.jpg
|
||||||
|
etherium_sculptor.jpg http://www.wizards.com/global/images/magic/general/etherium_sculptor.jpg
|
||||||
|
chill.jpg http://www.wizards.com/global/images/magic/general/chill.jpg
|
||||||
|
centaur_omenreader.jpg http://www.wizards.com/global/images/magic/general/centaur_omenreader.jpg
|
||||||
|
bosk_banneret.jpg http://www.wizards.com/global/images/magic/general/bosk_banneret.jpg
|
||||||
|
ballyrush_banneret.jpg http://www.wizards.com/global/images/magic/general/ballyrush_banneret.jpg
|
||||||
|
andradite_leech.jpg http://www.wizards.com/global/images/magic/general/andradite_leech.jpg
|
||||||
|
alabaster_leech.jpg http://www.wizards.com/global/images/magic/general/alabaster_leech.jpg
|
||||||
leyline_of_singularity.jpg http://www.wizards.com/global/images/magic/general/leyline_of_singularity.jpg
|
leyline_of_singularity.jpg http://www.wizards.com/global/images/magic/general/leyline_of_singularity.jpg
|
||||||
cursed_rack.jpg http://www.wizards.com/global/images/magic/general/cursed_rack.jpg
|
cursed_rack.jpg http://www.wizards.com/global/images/magic/general/cursed_rack.jpg
|
||||||
gnat_miser.jpg http://www.wizards.com/global/images/magic/general/gnat_miser.jpg
|
gnat_miser.jpg http://www.wizards.com/global/images/magic/general/gnat_miser.jpg
|
||||||
|
|||||||
100
res/cards.txt
100
res/cards.txt
@@ -1,3 +1,103 @@
|
|||||||
|
Edgewalker
|
||||||
|
1 W B
|
||||||
|
Creature Human Cleric
|
||||||
|
Cleric spells you cast cost W B less to cast. This effect reduces only the amount of colored mana you pay. (For example, if you cast a Cleric spell with mana cost 1 W, it costs 1 to cast.)
|
||||||
|
2/2
|
||||||
|
CostChange:Player:Less:W:Spell:All:Cleric:NoSpecial
|
||||||
|
CostChange:Player:Less:B:Spell:All:Cleric:NoSpecial
|
||||||
|
|
||||||
|
Thunderscape Familiar
|
||||||
|
1 R
|
||||||
|
Creature Kavu
|
||||||
|
Black spells and green spells you cast cost 1 less to cast.
|
||||||
|
1/1
|
||||||
|
First strike
|
||||||
|
CostChange:Player:Less:1:Spell:black/green:All:OnlyOneBonus
|
||||||
|
|
||||||
|
Sphere of Resistance
|
||||||
|
2
|
||||||
|
Artifact
|
||||||
|
Spells cost 1 more to cast.
|
||||||
|
CostChange:All:More:1:Spell:All:All:NoSpecial
|
||||||
|
|
||||||
|
Training Grounds
|
||||||
|
U
|
||||||
|
Enchantment
|
||||||
|
Activated abilities of creatures you control cost up to 2 less to activate. This effect can't reduce the amount of mana an ability costs to activate to less than one mana.
|
||||||
|
CostChange:Player:Less:2:Ability:All:Creature:TargetInPlay
|
||||||
|
|
||||||
|
Undead Warchief
|
||||||
|
2 B B
|
||||||
|
Creature Zombie
|
||||||
|
Zombie spells you cast cost 1 less to cast. Zombie creatures you control get +2/+1.
|
||||||
|
1/1
|
||||||
|
CostChange:Player:Less:1:Spell:All:Zombie:NoSpecial
|
||||||
|
|
||||||
|
Grand Arbiter Augustin IV
|
||||||
|
2 W U
|
||||||
|
Legendary Creature Human Advisor
|
||||||
|
White spells you cast cost 1 less to cast. Blue spells you cast cost 1 less to cast. Spells your opponents cast cost 1 more to cast.
|
||||||
|
2/3
|
||||||
|
CostChange:Player:Less:1:Spell:white:All:NoSpecial
|
||||||
|
CostChange:Player:Less:1:Spell:blue:All:NoSpecial
|
||||||
|
CostChange:Opponent:More:1:Spell:All:All:NoSpecial
|
||||||
|
|
||||||
|
Goblin Warchief
|
||||||
|
1 R R
|
||||||
|
Creature Goblin
|
||||||
|
Goblin spells you cast cost 1 less to cast. Goblin creatures you control have haste.
|
||||||
|
2/2
|
||||||
|
CostChange:Player:Less:1:Spell:All:Goblin:NoSpecial
|
||||||
|
|
||||||
|
Etherium Sculptor
|
||||||
|
1 U
|
||||||
|
Artifact Creature Vedalken Artificer
|
||||||
|
Artifact spells you cast cost 1 less to cast.
|
||||||
|
1/2
|
||||||
|
CostChange:Player:Less:1:Spell:All:All:NoSpecial
|
||||||
|
|
||||||
|
Chill
|
||||||
|
1 U
|
||||||
|
Enchantment
|
||||||
|
Red spells cost 2 more to cast.
|
||||||
|
CostChange:All:More:2:Spell:red:All:NoSpecial
|
||||||
|
|
||||||
|
Centaur Omenreader
|
||||||
|
3 G
|
||||||
|
Snow Creature Centaur Shaman
|
||||||
|
As long as Centaur Omenreader is tapped, creature spells you cast cost 2 less to cast.
|
||||||
|
3/3
|
||||||
|
CostChange:Player:Less:2:Spell:All:Creature:CardIsTapped
|
||||||
|
|
||||||
|
Bosk Banneret
|
||||||
|
1 G
|
||||||
|
Creature Treefolk Shaman
|
||||||
|
Treefolk spells and Shaman spells you cast cost 1 less to cast.
|
||||||
|
1/3
|
||||||
|
CostChange:Player:Less:1:Spell:All:Treefolk/Shaman:OnlyOneBonus
|
||||||
|
|
||||||
|
Ballyrush Banneret
|
||||||
|
1 W
|
||||||
|
Creature Kithkin Soldier
|
||||||
|
Kithkin spells and Soldier spells you cast cost 1 less to cast.
|
||||||
|
2/1
|
||||||
|
CostChange:Player:Less:1:Spell:All:Kithkin/Soldier:OnlyOneBonus
|
||||||
|
|
||||||
|
Andradite Leech
|
||||||
|
2 B
|
||||||
|
Creature Leech
|
||||||
|
Black spells you cast cost B more to cast.
|
||||||
|
2/2
|
||||||
|
abPump B:+1/+1
|
||||||
|
CostChange:Player:More:B:Spell:black:All:NoSpecial
|
||||||
|
|
||||||
|
Alabaster Leech
|
||||||
|
W
|
||||||
|
Creature Leech
|
||||||
|
White spells you cast cost W more to cast.
|
||||||
|
1/3
|
||||||
|
CostChange:Player:More:W:Spell:white:All:NoSpecial
|
||||||
|
|
||||||
Volcanic Island
|
Volcanic Island
|
||||||
no cost
|
no cost
|
||||||
Land Mountain Island
|
Land Mountain Island
|
||||||
|
|||||||
@@ -510,8 +510,10 @@ public class Card extends MyObservable {
|
|||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
ArrayList<String> keyword = getKeyword();
|
ArrayList<String> keyword = getKeyword();
|
||||||
for(int i = 0; i < keyword.size(); i++) {
|
for(int i = 0; i < keyword.size(); i++) {
|
||||||
|
if(!keyword.get(i).toString().contains("CostChange")) {
|
||||||
if(i != 0) sb.append(", ");
|
if(i != 0) sb.append(", ");
|
||||||
sb.append(keyword.get(i).toString());
|
sb.append(keyword.get(i).toString());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
sb.append("\r\n");
|
sb.append("\r\n");
|
||||||
sb.append(text);
|
sb.append(text);
|
||||||
|
|||||||
@@ -158,80 +158,8 @@ public class ComputerUtil
|
|||||||
{
|
{
|
||||||
land.remove(sa.getSourceCard());
|
land.remove(sa.getSourceCard());
|
||||||
}
|
}
|
||||||
Card originalCard = sa.getSourceCard();
|
|
||||||
ManaCost cost = new ManaCost(sa.getManaCost());
|
ManaCost cost = new ManaCost(sa.getManaCost());
|
||||||
if(sa.isSpell() == true) {
|
cost = AllZone.GameAction.GetSpellCostChange(sa);
|
||||||
if(originalCard.getName().equals("Avatar of Woe")){
|
|
||||||
String player = AllZone.Phase.getActivePlayer();
|
|
||||||
String opponent = AllZone.GameAction.getOpponent(player);
|
|
||||||
PlayerZone PlayerGraveyard = AllZone.getZone(Constant.Zone.Graveyard, player);
|
|
||||||
CardList PlayerCreatureList = new CardList(PlayerGraveyard.getCards());
|
|
||||||
PlayerCreatureList = PlayerCreatureList.getType("Creature");
|
|
||||||
PlayerZone OpponentGraveyard = AllZone.getZone(Constant.Zone.Graveyard, opponent);
|
|
||||||
CardList OpponentCreatureList = new CardList(OpponentGraveyard.getCards());
|
|
||||||
OpponentCreatureList = OpponentCreatureList.getType("Creature");
|
|
||||||
if((PlayerCreatureList.size() + OpponentCreatureList.size()) >= 10) {
|
|
||||||
ManaCost cost2 = new ManaCost("B B");
|
|
||||||
cost = cost2;
|
|
||||||
}
|
|
||||||
} // Avatar of Woe
|
|
||||||
else if(originalCard.getName().equals("Avatar of Will")){
|
|
||||||
String player = AllZone.Phase.getActivePlayer();
|
|
||||||
String opponent = AllZone.GameAction.getOpponent(player);
|
|
||||||
PlayerZone OpponentHand = AllZone.getZone(Constant.Zone.Hand, opponent);
|
|
||||||
CardList OpponentHandList = new CardList(OpponentHand.getCards());
|
|
||||||
if(OpponentHandList.size() == 0) {
|
|
||||||
ManaCost cost2 = new ManaCost("U U");
|
|
||||||
cost = cost2;
|
|
||||||
}
|
|
||||||
} // Avatar of Will
|
|
||||||
else if(originalCard.getName().equals("Avatar of Fury")) {
|
|
||||||
String player = AllZone.Phase.getActivePlayer();
|
|
||||||
String opponent = AllZone.GameAction.getOpponent(player);
|
|
||||||
PlayerZone OpponentPlay = AllZone.getZone(Constant.Zone.Play, opponent);
|
|
||||||
CardList OpponentLand = new CardList(OpponentPlay.getCards());
|
|
||||||
OpponentLand = OpponentLand.getType("Land");
|
|
||||||
if(OpponentLand.size() >= 7) {
|
|
||||||
ManaCost cost2 = new ManaCost("R R");
|
|
||||||
cost = cost2;
|
|
||||||
}
|
|
||||||
} // Avatar of Fury
|
|
||||||
else if(originalCard.getName().equals("Avatar of Might")) {
|
|
||||||
String player = AllZone.Phase.getActivePlayer();
|
|
||||||
String opponent = AllZone.GameAction.getOpponent(player);
|
|
||||||
PlayerZone PlayerPlay = AllZone.getZone(Constant.Zone.Play, player);
|
|
||||||
CardList PlayerCreature = new CardList(PlayerPlay.getCards());
|
|
||||||
PlayerCreature = PlayerCreature.getType("Creature");
|
|
||||||
PlayerZone OpponentPlay = AllZone.getZone(Constant.Zone.Play, opponent);
|
|
||||||
CardList OpponentCreature = new CardList(OpponentPlay.getCards());
|
|
||||||
OpponentCreature = OpponentCreature.getType("Creature");
|
|
||||||
if(OpponentCreature.size() - PlayerCreature.size() >= 4) {
|
|
||||||
ManaCost cost2 = new ManaCost("G G");
|
|
||||||
cost = cost2;
|
|
||||||
}
|
|
||||||
} // Avatar of Might
|
|
||||||
else if(originalCard.getName().equals("Khalni Hydra")) {
|
|
||||||
String player = AllZone.Phase.getActivePlayer();
|
|
||||||
PlayerZone PlayerPlay = AllZone.getZone(Constant.Zone.Play, player);
|
|
||||||
CardList PlayerCreature = new CardList(PlayerPlay.getCards());
|
|
||||||
PlayerCreature = PlayerCreature.getType("Creature");
|
|
||||||
PlayerCreature = PlayerCreature.filter(new CardListFilter() {
|
|
||||||
public boolean addCard(Card c) {
|
|
||||||
return c.isCreature() && CardUtil.getColors(c).contains(Constant.Color.Green);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
String Mana = cost + " ";
|
|
||||||
if(PlayerCreature.size() > 0) {
|
|
||||||
for(int i = 0; i < PlayerCreature.size(); i++) {
|
|
||||||
Mana = Mana.replaceFirst("G ", "");
|
|
||||||
}
|
|
||||||
Mana = Mana.trim();
|
|
||||||
if(Mana.equals("")) Mana = "0";
|
|
||||||
ManaCost cost2 = new ManaCost(Mana);
|
|
||||||
cost = cost2;
|
|
||||||
}
|
|
||||||
} // Khalni Hydra
|
|
||||||
} // is Spell
|
|
||||||
ArrayList<String> colors;
|
ArrayList<String> colors;
|
||||||
|
|
||||||
for(int i = 0; i < land.size(); i++)
|
for(int i = 0; i < land.size(); i++)
|
||||||
@@ -302,81 +230,8 @@ public class ComputerUtil
|
|||||||
{
|
{
|
||||||
land.remove(sa.getSourceCard());
|
land.remove(sa.getSourceCard());
|
||||||
}
|
}
|
||||||
|
|
||||||
Card originalCard = sa.getSourceCard();
|
|
||||||
ManaCost cost = new ManaCost(sa.getManaCost());
|
ManaCost cost = new ManaCost(sa.getManaCost());
|
||||||
if(sa.isSpell() == true) {
|
cost = AllZone.GameAction.GetSpellCostChange(sa);
|
||||||
if(originalCard.getName().equals("Avatar of Woe")){
|
|
||||||
String player = AllZone.Phase.getActivePlayer();
|
|
||||||
String opponent = AllZone.GameAction.getOpponent(player);
|
|
||||||
PlayerZone PlayerGraveyard = AllZone.getZone(Constant.Zone.Graveyard, player);
|
|
||||||
CardList PlayerCreatureList = new CardList(PlayerGraveyard.getCards());
|
|
||||||
PlayerCreatureList = PlayerCreatureList.getType("Creature");
|
|
||||||
PlayerZone OpponentGraveyard = AllZone.getZone(Constant.Zone.Graveyard, opponent);
|
|
||||||
CardList OpponentCreatureList = new CardList(OpponentGraveyard.getCards());
|
|
||||||
OpponentCreatureList = OpponentCreatureList.getType("Creature");
|
|
||||||
if((PlayerCreatureList.size() + OpponentCreatureList.size()) >= 10) {
|
|
||||||
ManaCost cost2 = new ManaCost("B B");
|
|
||||||
cost = cost2;
|
|
||||||
}
|
|
||||||
} // Avatar of Woe
|
|
||||||
else if(originalCard.getName().equals("Avatar of Will")){
|
|
||||||
String player = AllZone.Phase.getActivePlayer();
|
|
||||||
String opponent = AllZone.GameAction.getOpponent(player);
|
|
||||||
PlayerZone OpponentHand = AllZone.getZone(Constant.Zone.Hand, opponent);
|
|
||||||
CardList OpponentHandList = new CardList(OpponentHand.getCards());
|
|
||||||
if(OpponentHandList.size() == 0) {
|
|
||||||
ManaCost cost2 = new ManaCost("U U");
|
|
||||||
cost = cost2;
|
|
||||||
}
|
|
||||||
} // Avatar of Will
|
|
||||||
else if(originalCard.getName().equals("Avatar of Fury")) {
|
|
||||||
String player = AllZone.Phase.getActivePlayer();
|
|
||||||
String opponent = AllZone.GameAction.getOpponent(player);
|
|
||||||
PlayerZone OpponentPlay = AllZone.getZone(Constant.Zone.Play, opponent);
|
|
||||||
CardList OpponentLand = new CardList(OpponentPlay.getCards());
|
|
||||||
OpponentLand = OpponentLand.getType("Land");
|
|
||||||
if(OpponentLand.size() >= 7) {
|
|
||||||
ManaCost cost2 = new ManaCost("R R");
|
|
||||||
cost = cost2;
|
|
||||||
}
|
|
||||||
} // Avatar of Fury
|
|
||||||
else if(originalCard.getName().equals("Avatar of Might")) {
|
|
||||||
String player = AllZone.Phase.getActivePlayer();
|
|
||||||
String opponent = AllZone.GameAction.getOpponent(player);
|
|
||||||
PlayerZone PlayerPlay = AllZone.getZone(Constant.Zone.Play, player);
|
|
||||||
CardList PlayerCreature = new CardList(PlayerPlay.getCards());
|
|
||||||
PlayerCreature = PlayerCreature.getType("Creature");
|
|
||||||
PlayerZone OpponentPlay = AllZone.getZone(Constant.Zone.Play, opponent);
|
|
||||||
CardList OpponentCreature = new CardList(OpponentPlay.getCards());
|
|
||||||
OpponentCreature = OpponentCreature.getType("Creature");
|
|
||||||
if(OpponentCreature.size() - PlayerCreature.size() >= 4) {
|
|
||||||
ManaCost cost2 = new ManaCost("G G");
|
|
||||||
cost = cost2;
|
|
||||||
}
|
|
||||||
} // Avatar of Might
|
|
||||||
else if(originalCard.getName().equals("Khalni Hydra")) {
|
|
||||||
String player = AllZone.Phase.getActivePlayer();
|
|
||||||
PlayerZone PlayerPlay = AllZone.getZone(Constant.Zone.Play, player);
|
|
||||||
CardList PlayerCreature = new CardList(PlayerPlay.getCards());
|
|
||||||
PlayerCreature = PlayerCreature.getType("Creature");
|
|
||||||
PlayerCreature = PlayerCreature.filter(new CardListFilter() {
|
|
||||||
public boolean addCard(Card c) {
|
|
||||||
return c.isCreature() && CardUtil.getColors(c).contains(Constant.Color.Green);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
String Mana = cost + " ";
|
|
||||||
if(PlayerCreature.size() > 0) {
|
|
||||||
for(int i = 0; i < PlayerCreature.size(); i++) {
|
|
||||||
Mana = Mana.replaceFirst("G ", "");
|
|
||||||
}
|
|
||||||
Mana = Mana.trim();
|
|
||||||
if(Mana.equals("")) Mana = "0";
|
|
||||||
ManaCost cost2 = new ManaCost(Mana);
|
|
||||||
cost = cost2;
|
|
||||||
}
|
|
||||||
} // Khalni Hydra
|
|
||||||
} // is Spell
|
|
||||||
ArrayList<String> colors;
|
ArrayList<String> colors;
|
||||||
|
|
||||||
for(int i = 0; i < land.size(); i++)
|
for(int i = 0; i < land.size(); i++)
|
||||||
|
|||||||
@@ -1175,6 +1175,7 @@ public class GameAction {
|
|||||||
|
|
||||||
AllZone.Stack.reset();//this works, it clears the stack of Upkeep effects like Bitterblossom
|
AllZone.Stack.reset();//this works, it clears the stack of Upkeep effects like Bitterblossom
|
||||||
AllZone.InputControl.setInput(new Input_Mulligan());
|
AllZone.InputControl.setInput(new Input_Mulligan());
|
||||||
|
Phase.GameBegins = 1;
|
||||||
}//newGame()
|
}//newGame()
|
||||||
|
|
||||||
//this is where the computer cheats
|
//this is where the computer cheats
|
||||||
@@ -1544,14 +1545,280 @@ public class GameAction {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int CostCutting_GetMultiMickerManaCostPaid = 0;
|
||||||
|
String CostCutting_GetMultiMickerManaCostPaid_Colored = "";
|
||||||
|
public ManaCost GetSpellCostChange(SpellAbility sa) {
|
||||||
|
// Beached
|
||||||
|
Card originalCard = sa.getSourceCard();
|
||||||
|
ManaCost manaCost;
|
||||||
|
SpellAbility spell = sa;
|
||||||
|
manaCost = new ManaCost(sa.getManaCost());
|
||||||
|
if(spell.isSpell() == true) {
|
||||||
|
if(originalCard.getName().equals("Avatar of Woe")){
|
||||||
|
String player = AllZone.Phase.getActivePlayer();
|
||||||
|
String opponent = AllZone.GameAction.getOpponent(player);
|
||||||
|
PlayerZone PlayerGraveyard = AllZone.getZone(Constant.Zone.Graveyard, player);
|
||||||
|
CardList PlayerCreatureList = new CardList(PlayerGraveyard.getCards());
|
||||||
|
PlayerCreatureList = PlayerCreatureList.getType("Creature");
|
||||||
|
PlayerZone OpponentGraveyard = AllZone.getZone(Constant.Zone.Graveyard, opponent);
|
||||||
|
CardList OpponentCreatureList = new CardList(OpponentGraveyard.getCards());
|
||||||
|
OpponentCreatureList = OpponentCreatureList.getType("Creature");
|
||||||
|
if((PlayerCreatureList.size() + OpponentCreatureList.size()) >= 10) {
|
||||||
|
manaCost = new ManaCost("B B");
|
||||||
|
} // Avatar of Woe
|
||||||
|
} else if(originalCard.getName().equals("Avatar of Will")) {
|
||||||
|
String player = AllZone.Phase.getActivePlayer();
|
||||||
|
String opponent = AllZone.GameAction.getOpponent(player);
|
||||||
|
PlayerZone OpponentHand = AllZone.getZone(Constant.Zone.Hand, opponent);
|
||||||
|
CardList OpponentHandList = new CardList(OpponentHand.getCards());
|
||||||
|
if(OpponentHandList.size() == 0) {
|
||||||
|
manaCost = new ManaCost("U U");
|
||||||
|
} // Avatar of Will
|
||||||
|
} else if(originalCard.getName().equals("Avatar of Fury")) {
|
||||||
|
String player = AllZone.Phase.getActivePlayer();
|
||||||
|
String opponent = AllZone.GameAction.getOpponent(player);
|
||||||
|
PlayerZone OpponentPlay = AllZone.getZone(Constant.Zone.Play, opponent);
|
||||||
|
CardList OpponentLand = new CardList(OpponentPlay.getCards());
|
||||||
|
OpponentLand = OpponentLand.getType("Land");
|
||||||
|
if(OpponentLand.size() >= 7) {
|
||||||
|
manaCost = new ManaCost("R R");
|
||||||
|
} // Avatar of Fury
|
||||||
|
} else if(originalCard.getName().equals("Avatar of Might")) {
|
||||||
|
String player = AllZone.Phase.getActivePlayer();
|
||||||
|
String opponent = AllZone.GameAction.getOpponent(player);
|
||||||
|
PlayerZone PlayerPlay = AllZone.getZone(Constant.Zone.Play, player);
|
||||||
|
CardList PlayerCreature = new CardList(PlayerPlay.getCards());
|
||||||
|
PlayerCreature = PlayerCreature.getType("Creature");
|
||||||
|
PlayerZone OpponentPlay = AllZone.getZone(Constant.Zone.Play, opponent);
|
||||||
|
CardList OpponentCreature = new CardList(OpponentPlay.getCards());
|
||||||
|
OpponentCreature = OpponentCreature.getType("Creature");
|
||||||
|
if(OpponentCreature.size() - PlayerCreature.size() >= 4) {
|
||||||
|
manaCost = new ManaCost("G G");
|
||||||
|
} // Avatar of Might
|
||||||
|
}
|
||||||
|
} // isSpell
|
||||||
|
|
||||||
|
// Get Cost Reduction
|
||||||
|
if(Phase.GameBegins == 1) { // Remove GameBegins from Phase and into The starting game code
|
||||||
|
CardList Cards_In_Play = new CardList();
|
||||||
|
Cards_In_Play.addAll(AllZone.getZone(Constant.Zone.Play, Constant.Player.Human).getCards());
|
||||||
|
Cards_In_Play.addAll(AllZone.getZone(Constant.Zone.Play, Constant.Player.Computer).getCards());
|
||||||
|
Cards_In_Play = Cards_In_Play.filter(new CardListFilter() {
|
||||||
|
public boolean addCard(Card c) {
|
||||||
|
if(c.getKeyword().toString().contains("CostChange")) return true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
String Mana = manaCost.toString();
|
||||||
|
CardList Player_Play = new CardList(AllZone.getZone(Constant.Zone.Play, sa.getSourceCard().getController()).getCards());
|
||||||
|
int XBonus = 0;
|
||||||
|
int Max = 25;
|
||||||
|
if(sa.isXCost()) sa.getSourceCard().setXManaCostPaid(0);
|
||||||
|
if(sa.isMultiKicker()) CostCutting_GetMultiMickerManaCostPaid_Colored = "";
|
||||||
|
if(Mana.toString().length() == 0) Mana = "0";
|
||||||
|
for(int i = 0; i < Cards_In_Play.size() ; i++) {
|
||||||
|
Card card = Cards_In_Play.get(i);
|
||||||
|
ArrayList<String> a = card.getKeyword();
|
||||||
|
int CostKeywords = 0;
|
||||||
|
int CostKeyword_Number[] = new int[a.size()];
|
||||||
|
for(int x = 0; x < a.size(); x++)
|
||||||
|
if(a.get(x).toString().startsWith("CostChange")) {
|
||||||
|
CostKeyword_Number[CostKeywords] = x;
|
||||||
|
CostKeywords = CostKeywords + 1;
|
||||||
|
}
|
||||||
|
for(int CKeywords = 0; CKeywords < CostKeywords; CKeywords++) {
|
||||||
|
String parse = card.getKeyword().get(CostKeyword_Number[CKeywords]).toString();
|
||||||
|
String k[] = parse.split(":");
|
||||||
|
|
||||||
|
if(k[2].equals("More")) {
|
||||||
|
if(k[7].equals("OnlyOneBonus")) { // Only Works for Color and Type
|
||||||
|
for(int string_no = 5; string_no < 7; string_no++) {
|
||||||
|
String spilt = k[string_no];
|
||||||
|
String color_spilt[] = spilt.split("/");
|
||||||
|
|
||||||
|
for(int cs_num = 0; cs_num < color_spilt.length; cs_num++) {
|
||||||
|
k[string_no] = color_spilt[cs_num];
|
||||||
|
if(string_no == 5 && CardUtil.getColors(sa.getSourceCard()).contains(k[5])) break;
|
||||||
|
if(string_no == 6 && (sa.getSourceCard().getType().contains(k[6]))) break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if((k[1].equals("Player") && card.getController().equals(sa.getSourceCard().getController())
|
||||||
|
|| (k[1].equals("Opponent") && card.getController().equals(AllZone.GameAction.getOpponent(sa.getSourceCard().getController()))) || k[1].equals("All"))
|
||||||
|
&& ((k[4].equals("Spell") && sa.isSpell() == true) || (k[4].equals("Ability") && sa.isAbility() == true) || k[4].equals("All"))
|
||||||
|
&& ((CardUtil.getColors(sa.getSourceCard()).contains(k[5])) || k[5].equals("All"))
|
||||||
|
&& ((sa.getSourceCard().getType().contains(k[6])) || k[6].equals("All"))) {
|
||||||
|
if(k[7].equals("CardIsTapped")) {
|
||||||
|
if(card.isTapped() == false) k[3] = "0";
|
||||||
|
}
|
||||||
|
if(k[7].equals("TargetInPlay")) {
|
||||||
|
if(Player_Play.contains(sa.getSourceCard())) k[3] = "0";
|
||||||
|
}
|
||||||
|
String[] Numbers = new String[Max];
|
||||||
|
if(!"WUGRB".contains(k[3])) {
|
||||||
|
for(int no = 0; no < Max; no ++) Numbers[no] = String.valueOf(no);
|
||||||
|
String Number_ManaCost = " ";
|
||||||
|
if(Mana.toString().length() == 1) Number_ManaCost = Mana.toString().substring(0, 1);
|
||||||
|
else if(Mana.toString().length() == 0) Number_ManaCost = "0"; // Should Never Occur
|
||||||
|
else Number_ManaCost = Mana.toString().substring(0, 2);
|
||||||
|
Number_ManaCost = Number_ManaCost.trim();
|
||||||
|
|
||||||
|
for(int check = 0; check < Max; check ++) {
|
||||||
|
if(Number_ManaCost.equals(Numbers[check])) {
|
||||||
|
Mana = Mana.replaceFirst(String.valueOf(check),String.valueOf(check + Integer.valueOf(k[3])));
|
||||||
|
}
|
||||||
|
if(Mana.equals("")) Mana = "0";
|
||||||
|
manaCost = new ManaCost(Mana);
|
||||||
|
}
|
||||||
|
if(manaCost.toString().equals("W") || manaCost.toString().equals("U") || manaCost.toString().equals("G")
|
||||||
|
|| manaCost.toString().equals("B") || manaCost.toString().equals("R")) {
|
||||||
|
Mana = k[3] + " " + Mana;
|
||||||
|
manaCost = new ManaCost(Mana);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Mana = Mana + " " + k[3];
|
||||||
|
manaCost = new ManaCost(Mana);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(Mana.equals("0") && spell.isAbility()) {
|
||||||
|
} else {
|
||||||
|
for(int i = 0; i < Cards_In_Play.size() ; i++) {
|
||||||
|
Card card = Cards_In_Play.get(i);
|
||||||
|
ArrayList<String> a = card.getKeyword();
|
||||||
|
int CostKeywords = 0;
|
||||||
|
int CostKeyword_Number[] = new int[a.size()];
|
||||||
|
for(int x = 0; x < a.size(); x++)
|
||||||
|
if(a.get(x).toString().startsWith("CostChange")) {
|
||||||
|
CostKeyword_Number[CostKeywords] = x;
|
||||||
|
CostKeywords = CostKeywords + 1;
|
||||||
|
}
|
||||||
|
for(int CKeywords = 0; CKeywords < CostKeywords; CKeywords++) {
|
||||||
|
String parse = card.getKeyword().get(CostKeyword_Number[CKeywords]).toString();
|
||||||
|
String k[] = parse.split(":");
|
||||||
|
|
||||||
|
if(k[2].equals("Less")) {
|
||||||
|
if(k[7].equals("OnlyOneBonus")) { // Only Works for Color and Type
|
||||||
|
for(int string_no = 5; string_no < 7; string_no++) {
|
||||||
|
String spilt = k[string_no];
|
||||||
|
String color_spilt[] = spilt.split("/");
|
||||||
|
|
||||||
|
for(int cs_num = 0; cs_num < color_spilt.length; cs_num++) {
|
||||||
|
k[string_no] = color_spilt[cs_num];
|
||||||
|
if(string_no == 5 && CardUtil.getColors(sa.getSourceCard()).contains(k[5])) break;
|
||||||
|
if(string_no == 6 && (sa.getSourceCard().getType().contains(k[6]))) break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if((k[1].equals("Player") && card.getController().equals(sa.getSourceCard().getController())
|
||||||
|
|| (k[1].equals("Opponent") && card.getController().equals(AllZone.GameAction.getOpponent(sa.getSourceCard().getController()))) || k[1].equals("All"))
|
||||||
|
&& ((k[4].equals("Spell") && sa.isSpell() == true) || (k[4].equals("Ability") && sa.isAbility() == true) || k[4].equals("All"))
|
||||||
|
&& ((CardUtil.getColors(sa.getSourceCard()).contains(k[5])) || k[5].equals("All"))
|
||||||
|
&& ((sa.getSourceCard().getType().contains(k[6])) || k[6].equals("All"))) {
|
||||||
|
if(k[7].equals("CardIsTapped")) {
|
||||||
|
if(card.isTapped() == false) k[3] = "0";
|
||||||
|
}
|
||||||
|
if(k[7].equals("TargetInPlay")) {
|
||||||
|
if(Player_Play.contains(sa.getSourceCard())) k[3] = "0";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
String[] Numbers = new String[Max];
|
||||||
|
if(!"WUGRB".contains(k[3])) {
|
||||||
|
for(int no = 0; no < Max; no ++) Numbers[no] = String.valueOf(no);
|
||||||
|
String Number_ManaCost = " ";
|
||||||
|
if(Mana.toString().length() == 1) Number_ManaCost = Mana.toString().substring(0, 1);
|
||||||
|
else if(Mana.toString().length() == 0) Number_ManaCost = "0"; // Should Never Occur
|
||||||
|
else Number_ManaCost = Mana.toString().substring(0, 2);
|
||||||
|
Number_ManaCost = Number_ManaCost.trim();
|
||||||
|
|
||||||
|
for(int check = 0; check < Max; check ++) {
|
||||||
|
if(Number_ManaCost.equals(Numbers[check])) {
|
||||||
|
if((spell.isXCost()) || (spell.isMultiKicker()) && (check - Integer.valueOf(k[3])) < 0) XBonus = XBonus - check + Integer.valueOf(k[3]);
|
||||||
|
if(check - Integer.valueOf(k[3]) < 0) k[3] = String.valueOf(check);
|
||||||
|
Mana = Mana.replaceFirst(String.valueOf(check),String.valueOf(check - Integer.valueOf(k[3])));
|
||||||
|
}
|
||||||
|
if(Mana.equals("")) Mana = "0";
|
||||||
|
manaCost = new ManaCost(Mana);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if(Mana.equals(Mana.replaceFirst(k[3], ""))) {
|
||||||
|
// if(sa.isXCost()) sa.getSourceCard().addXManaCostPaid(1); Not Included as X Costs are not in Colored Mana
|
||||||
|
if(sa.isMultiKicker()) CostCutting_GetMultiMickerManaCostPaid_Colored = CostCutting_GetMultiMickerManaCostPaid_Colored + k[3];
|
||||||
|
} else {
|
||||||
|
Mana = Mana.replaceFirst(k[3], "");
|
||||||
|
Mana = Mana.trim();
|
||||||
|
if(Mana.equals("")) Mana = "0";
|
||||||
|
manaCost = new ManaCost(Mana);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Mana = Mana.trim();
|
||||||
|
if(Mana.equals("")) {
|
||||||
|
if(sa.isSpell()) Mana = "0";
|
||||||
|
else {
|
||||||
|
Mana = "1";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
manaCost = new ManaCost(Mana);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(sa.isXCost()) {
|
||||||
|
|
||||||
|
for(int XPaid = 0; XPaid < XBonus; XPaid++) sa.getSourceCard().addXManaCostPaid(1);
|
||||||
|
}
|
||||||
|
if(sa.isMultiKicker()) {
|
||||||
|
CostCutting_GetMultiMickerManaCostPaid = 0;
|
||||||
|
for(int XPaid = 0; XPaid < XBonus; XPaid++) CostCutting_GetMultiMickerManaCostPaid = CostCutting_GetMultiMickerManaCostPaid + 1;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
if(sa.isMultiKicker()) {
|
||||||
|
for(int XPaid = 0; XPaid < XBonus ; XPaid++) {
|
||||||
|
// AllZone.ManaPool.has = AllZone.ManaPool.has.replaceFirst("1", "");
|
||||||
|
AllZone.ManaPool.addMana("1");;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
**/
|
||||||
|
|
||||||
|
}
|
||||||
|
if(originalCard.getName().equals("Khalni Hydra") && spell.isSpell() == true) {
|
||||||
|
String player = AllZone.Phase.getActivePlayer();
|
||||||
|
PlayerZone PlayerPlay = AllZone.getZone(Constant.Zone.Play, player);
|
||||||
|
CardList PlayerCreature = new CardList(PlayerPlay.getCards());
|
||||||
|
PlayerCreature = PlayerCreature.getType("Creature");
|
||||||
|
PlayerCreature = PlayerCreature.filter(new CardListFilter() {
|
||||||
|
public boolean addCard(Card c) {
|
||||||
|
return c.isCreature() && CardUtil.getColors(c).contains(Constant.Color.Green);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
String Mana = manaCost + " ";
|
||||||
|
if(PlayerCreature.size() > 0) {
|
||||||
|
for(int i = 0; i < PlayerCreature.size(); i++) {
|
||||||
|
Mana = Mana.replaceFirst("G ", "");
|
||||||
|
}
|
||||||
|
Mana = Mana.trim();
|
||||||
|
if(Mana.equals("")) Mana = "0";
|
||||||
|
manaCost = new ManaCost(Mana);
|
||||||
|
}
|
||||||
|
} // Khalni Hydra
|
||||||
|
return manaCost;
|
||||||
|
}
|
||||||
|
|
||||||
public void playSpellAbility(SpellAbility sa) {
|
public void playSpellAbility(SpellAbility sa) {
|
||||||
if(sa.getManaCost().equals("0") && sa.getBeforePayMana() == null) {
|
ManaCost manaCost = GetSpellCostChange(sa);
|
||||||
|
if(manaCost.isPaid() /**sa.getManaCost().equals("0")**/ && sa.getBeforePayMana() == null) {
|
||||||
|
CardList HHandList = new CardList(AllZone.getZone(Constant.Zone.Hand, Constant.Player.Human).getCards());
|
||||||
|
if(HHandList.contains(sa.getSourceCard())) AllZone.Human_Hand.remove(sa.getSourceCard());
|
||||||
AllZone.Stack.add(sa);
|
AllZone.Stack.add(sa);
|
||||||
if(sa.isTapAbility() && !sa.wasCancelled()) sa.getSourceCard().tap();
|
if(sa.isTapAbility() && !sa.wasCancelled()) sa.getSourceCard().tap();
|
||||||
if(sa.isUntapAbility()) sa.getSourceCard().untap();
|
if(sa.isUntapAbility()) sa.getSourceCard().untap();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(sa.getBeforePayMana() == null) AllZone.InputControl.setInput(new Input_PayManaCost(sa));
|
if(sa.getBeforePayMana() == null) AllZone.InputControl.setInput(new Input_PayManaCost(sa));
|
||||||
else AllZone.InputControl.setInput(sa.getBeforePayMana());
|
else AllZone.InputControl.setInput(sa.getBeforePayMana());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9872,6 +9872,126 @@ public class GameActionUtil {
|
|||||||
}// execute()
|
}// execute()
|
||||||
};
|
};
|
||||||
|
|
||||||
|
public static Command Goblin_Warchief = new Command() {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = -6707183535529395830L;
|
||||||
|
CardList gloriousAnthemList = new CardList();
|
||||||
|
String[] Akroma_Memorial_Controller = new String[10]; // Shouldn't have more than 8 in play, let alone 10.
|
||||||
|
public void execute() {
|
||||||
|
String keyword = "Haste";
|
||||||
|
CardList list = gloriousAnthemList;
|
||||||
|
Card c;
|
||||||
|
|
||||||
|
CardList Akroma_List = AllZoneUtil.getCardsInPlay("Goblin Warchief");
|
||||||
|
CardList Akroma_Zone = new CardList();
|
||||||
|
for(int i = 0; i < Akroma_List.size(); i++) {
|
||||||
|
Akroma_Zone.clear();
|
||||||
|
Akroma_Zone.addAll(AllZone.getZone(Constant.Zone.Play, Akroma_List.get(i).getController()).getCards());
|
||||||
|
}
|
||||||
|
CardList List_Copy = new CardList();
|
||||||
|
List_Copy.add(list);
|
||||||
|
for(int i = 0; i < List_Copy.size(); i++) {
|
||||||
|
c = List_Copy.get(i);
|
||||||
|
if(!Akroma_Zone.contains(c)) {
|
||||||
|
c.removeExtrinsicKeyword(keyword);
|
||||||
|
list.remove(c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
PlayerZone[] zone = getZone("Goblin Warchief");
|
||||||
|
if(AllZoneUtil.isCardInPlay("Goblin Warchief")) {
|
||||||
|
CardList ControllerCheck = AllZoneUtil.getCardsInPlay("Goblin Warchief");
|
||||||
|
for(int i = 0; i < ControllerCheck.size(); i++) Akroma_Memorial_Controller[i] = ControllerCheck.get(i).getController();
|
||||||
|
for(int outer = 0; outer < zone.length; outer++) {
|
||||||
|
CardList creature = new CardList(
|
||||||
|
zone[outer].getCards());
|
||||||
|
creature = creature.getType("Creature");
|
||||||
|
|
||||||
|
for(int i = 0; i < creature.size(); i++) {
|
||||||
|
c = creature.get(i);
|
||||||
|
if(!list.contains(c)) {
|
||||||
|
gloriousAnthemList.add(c);
|
||||||
|
|
||||||
|
if(!c.getIntrinsicKeyword().contains(keyword)) {
|
||||||
|
c.addExtrinsicKeyword(keyword);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}// for inner
|
||||||
|
}// for outer
|
||||||
|
}
|
||||||
|
}// execute()
|
||||||
|
/**
|
||||||
|
public void execute() {
|
||||||
|
String keyword = "Haste";
|
||||||
|
|
||||||
|
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);
|
||||||
|
c.removeExtrinsicKeyword(keyword);
|
||||||
|
}
|
||||||
|
|
||||||
|
list.clear();
|
||||||
|
PlayerZone[] zone = getZone("Goblin Warchief");
|
||||||
|
|
||||||
|
for(int outer = 0; outer < zone.length; outer++) {
|
||||||
|
CardList creature = new CardList(
|
||||||
|
zone[outer].getCards());
|
||||||
|
creature = creature.getType("Creature");
|
||||||
|
|
||||||
|
for(int i = 0; i < creature.size(); i++) {
|
||||||
|
c = creature.get(i);
|
||||||
|
if(!c.getKeyword().contains(keyword)) {
|
||||||
|
c.addExtrinsicKeyword(keyword);
|
||||||
|
gloriousAnthemList.add(c);
|
||||||
|
}
|
||||||
|
}// for inner
|
||||||
|
}// for outer
|
||||||
|
}// execute()
|
||||||
|
**/
|
||||||
|
};
|
||||||
|
|
||||||
|
public static Command Undead_Warchief = new Command() {
|
||||||
|
private static final long serialVersionUID = -3463429634177142721L;
|
||||||
|
|
||||||
|
CardList gloriousAnthemList = new CardList();
|
||||||
|
|
||||||
|
public void execute() {
|
||||||
|
int pumpAttack = 2;
|
||||||
|
int pumpDefense = 1;
|
||||||
|
|
||||||
|
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);
|
||||||
|
c.addSemiPermanentAttackBoost(-pumpAttack);
|
||||||
|
c.addSemiPermanentDefenseBoost(-pumpDefense);
|
||||||
|
}
|
||||||
|
|
||||||
|
// add +1/+1 to cards
|
||||||
|
list.clear();
|
||||||
|
PlayerZone[] zone = getZone("Undead Warchief");
|
||||||
|
|
||||||
|
// for each zone found add +1/+1 to each card
|
||||||
|
for(int outer = 0; outer < zone.length; outer++) {
|
||||||
|
CardList creature = new CardList();
|
||||||
|
creature.addAll(AllZone.Human_Play.getCards());
|
||||||
|
creature.addAll(AllZone.Computer_Play.getCards());
|
||||||
|
creature = creature.getType("Zombie");
|
||||||
|
|
||||||
|
for(int i = 0; i < creature.size(); i++) {
|
||||||
|
c = creature.get(i);
|
||||||
|
c.addSemiPermanentAttackBoost(pumpAttack);
|
||||||
|
c.addSemiPermanentDefenseBoost(pumpDefense);
|
||||||
|
|
||||||
|
gloriousAnthemList.add(c);
|
||||||
|
}// for inner
|
||||||
|
}// for outer
|
||||||
|
}// execute()
|
||||||
|
}; // Undead Warchief
|
||||||
|
|
||||||
public static Command Leyline_of_Singularity = new Command() {
|
public static Command Leyline_of_Singularity = new Command() {
|
||||||
|
|
||||||
private static final long serialVersionUID = -67071835355151830L;
|
private static final long serialVersionUID = -67071835355151830L;
|
||||||
@@ -18257,6 +18377,8 @@ public class GameActionUtil {
|
|||||||
commands.put("Darksteel_Forge", Darksteel_Forge);
|
commands.put("Darksteel_Forge", Darksteel_Forge);
|
||||||
commands.put("Akromas_Memorial", Akromas_Memorial);
|
commands.put("Akromas_Memorial", Akromas_Memorial);
|
||||||
commands.put("Leyline_of_Singularity", Leyline_of_Singularity);
|
commands.put("Leyline_of_Singularity", Leyline_of_Singularity);
|
||||||
|
commands.put("Goblin_Warchief", Goblin_Warchief);
|
||||||
|
commands.put("Undead_Warchief", Undead_Warchief);
|
||||||
commands.put("Levitation", Levitation);
|
commands.put("Levitation", Levitation);
|
||||||
commands.put("Knighthood", Knighthood);
|
commands.put("Knighthood", Knighthood);
|
||||||
commands.put("Absolute_Law", Absolute_Law);
|
commands.put("Absolute_Law", Absolute_Law);
|
||||||
|
|||||||
@@ -120,7 +120,7 @@ public class Gui_WinLose extends JFrame implements NewConstants {
|
|||||||
|
|
||||||
private void setup() {
|
private void setup() {
|
||||||
WinLose winLose = Constant.Runtime.WinLose;
|
WinLose winLose = Constant.Runtime.WinLose;
|
||||||
|
Phase.GameBegins = 0;
|
||||||
//3 is the match length, 3 is the number of games
|
//3 is the match length, 3 is the number of games
|
||||||
//disable buttons if match is up, or human player won 2 or lost 2 games already
|
//disable buttons if match is up, or human player won 2 or lost 2 games already
|
||||||
if((winLose.countWinLose() == 3) || (winLose.getWin() == 2) || (winLose.getLose() == 2)) {
|
if((winLose.countWinLose() == 3) || (winLose.getWin() == 2) || (winLose.getLose() == 2)) {
|
||||||
|
|||||||
@@ -46,12 +46,14 @@ public class InputUtil
|
|||||||
AllZone.GameInfo.setHumanPlayedFirstLandThisTurn(true);
|
AllZone.GameInfo.setHumanPlayedFirstLandThisTurn(true);
|
||||||
}
|
}
|
||||||
} //land
|
} //land
|
||||||
|
/**
|
||||||
else if(zone.is(Constant.Zone.Hand, Constant.Player.Human) &&
|
else if(zone.is(Constant.Zone.Hand, Constant.Player.Human) &&
|
||||||
card.getManaCost().equals("0"))//for Mox Ruby and the like
|
card.getManaCost().equals("0"))//for Mox Ruby and the like
|
||||||
{
|
{
|
||||||
AllZone.Human_Hand.remove(card);
|
AllZone.Human_Hand.remove(card);
|
||||||
AllZone.Stack.add(card.getSpellAbility()[0]);
|
AllZone.Stack.add(card.getSpellAbility()[0]);
|
||||||
}
|
}
|
||||||
|
**/
|
||||||
else if (zone.is(Constant.Zone.Hand, Constant.Player.Human) || zone.is(Constant.Zone.Play, Constant.Player.Human)
|
else if (zone.is(Constant.Zone.Hand, Constant.Player.Human) || zone.is(Constant.Zone.Play, Constant.Player.Human)
|
||||||
|| (zone.is(Constant.Zone.Play, Constant.Player.Computer)) && (card.isEquipment() || card.isAura()) && card.getController().equals(Constant.Player.Human) )
|
|| (zone.is(Constant.Zone.Play, Constant.Player.Computer)) && (card.isEquipment() || card.isAura()) && card.getController().equals(Constant.Player.Human) )
|
||||||
AllZone.GameAction.playCard(card);
|
AllZone.GameAction.playCard(card);
|
||||||
|
|||||||
@@ -19,90 +19,15 @@ public class Input_PayManaCost extends Input {
|
|||||||
private final SpellAbility spell;
|
private final SpellAbility spell;
|
||||||
|
|
||||||
public Input_PayManaCost(SpellAbility sa) {
|
public Input_PayManaCost(SpellAbility sa) {
|
||||||
originalManaCost = sa.getManaCost();
|
originalManaCost = sa.getSourceCard().getManaCost();
|
||||||
originalCard = sa.getSourceCard();
|
originalCard = sa.getSourceCard();
|
||||||
|
|
||||||
spell = sa;
|
spell = sa;
|
||||||
if(spell.isSpell() == true) {
|
|
||||||
if(originalCard.getName().equals("Avatar of Woe")){
|
|
||||||
String player = AllZone.Phase.getActivePlayer();
|
|
||||||
String opponent = AllZone.GameAction.getOpponent(player);
|
|
||||||
PlayerZone PlayerGraveyard = AllZone.getZone(Constant.Zone.Graveyard, player);
|
|
||||||
CardList PlayerCreatureList = new CardList(PlayerGraveyard.getCards());
|
|
||||||
PlayerCreatureList = PlayerCreatureList.getType("Creature");
|
|
||||||
PlayerZone OpponentGraveyard = AllZone.getZone(Constant.Zone.Graveyard, opponent);
|
|
||||||
CardList OpponentCreatureList = new CardList(OpponentGraveyard.getCards());
|
|
||||||
OpponentCreatureList = OpponentCreatureList.getType("Creature");
|
|
||||||
if((PlayerCreatureList.size() + OpponentCreatureList.size()) >= 10) {
|
|
||||||
manaCost = new ManaCost("B B");
|
|
||||||
} else {
|
|
||||||
manaCost = new ManaCost(sa.getManaCost());
|
|
||||||
} // Avatar of Woe
|
|
||||||
} else if(originalCard.getName().equals("Avatar of Will")) {
|
|
||||||
String player = AllZone.Phase.getActivePlayer();
|
|
||||||
String opponent = AllZone.GameAction.getOpponent(player);
|
|
||||||
PlayerZone OpponentHand = AllZone.getZone(Constant.Zone.Hand, opponent);
|
|
||||||
CardList OpponentHandList = new CardList(OpponentHand.getCards());
|
|
||||||
if(OpponentHandList.size() == 0) {
|
|
||||||
manaCost = new ManaCost("U U");
|
|
||||||
} else {
|
|
||||||
manaCost = new ManaCost(sa.getManaCost());
|
|
||||||
} // Avatar of Will
|
|
||||||
} else if(originalCard.getName().equals("Avatar of Fury")) {
|
|
||||||
String player = AllZone.Phase.getActivePlayer();
|
|
||||||
String opponent = AllZone.GameAction.getOpponent(player);
|
|
||||||
PlayerZone OpponentPlay = AllZone.getZone(Constant.Zone.Play, opponent);
|
|
||||||
CardList OpponentLand = new CardList(OpponentPlay.getCards());
|
|
||||||
OpponentLand = OpponentLand.getType("Land");
|
|
||||||
if(OpponentLand.size() >= 7) {
|
|
||||||
manaCost = new ManaCost("R R");
|
|
||||||
} else {
|
|
||||||
manaCost = new ManaCost(sa.getManaCost());
|
|
||||||
} // Avatar of Fury
|
|
||||||
} else if(originalCard.getName().equals("Avatar of Might")) {
|
|
||||||
String player = AllZone.Phase.getActivePlayer();
|
|
||||||
String opponent = AllZone.GameAction.getOpponent(player);
|
|
||||||
PlayerZone PlayerPlay = AllZone.getZone(Constant.Zone.Play, player);
|
|
||||||
CardList PlayerCreature = new CardList(PlayerPlay.getCards());
|
|
||||||
PlayerCreature = PlayerCreature.getType("Creature");
|
|
||||||
PlayerZone OpponentPlay = AllZone.getZone(Constant.Zone.Play, opponent);
|
|
||||||
CardList OpponentCreature = new CardList(OpponentPlay.getCards());
|
|
||||||
OpponentCreature = OpponentCreature.getType("Creature");
|
|
||||||
if(OpponentCreature.size() - PlayerCreature.size() >= 4) {
|
|
||||||
manaCost = new ManaCost("G G");
|
|
||||||
} else {
|
|
||||||
manaCost = new ManaCost(sa.getManaCost());
|
|
||||||
} // Avatar of Might
|
|
||||||
} else if(originalCard.getName().equals("Khalni Hydra")) {
|
|
||||||
String player = AllZone.Phase.getActivePlayer();
|
|
||||||
PlayerZone PlayerPlay = AllZone.getZone(Constant.Zone.Play, player);
|
|
||||||
CardList PlayerCreature = new CardList(PlayerPlay.getCards());
|
|
||||||
PlayerCreature = PlayerCreature.getType("Creature");
|
|
||||||
PlayerCreature = PlayerCreature.filter(new CardListFilter() {
|
|
||||||
public boolean addCard(Card c) {
|
|
||||||
return c.isCreature() && CardUtil.getColors(c).contains(Constant.Color.Green);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
String Mana = originalManaCost + " ";
|
|
||||||
if(PlayerCreature.size() > 0) {
|
|
||||||
for(int i = 0; i < PlayerCreature.size(); i++) {
|
|
||||||
Mana = Mana.replaceFirst("G ", "");
|
|
||||||
}
|
|
||||||
Mana = Mana.trim();
|
|
||||||
if(Mana.equals("")) Mana = "0";
|
|
||||||
manaCost = new ManaCost(Mana);
|
|
||||||
} else {
|
|
||||||
manaCost = new ManaCost(sa.getManaCost());
|
|
||||||
}
|
|
||||||
} // Khalni Hydra
|
|
||||||
// For all other Spells
|
|
||||||
else {
|
|
||||||
manaCost = new ManaCost(sa.getManaCost());
|
manaCost = new ManaCost(sa.getManaCost());
|
||||||
}
|
if(Phase.GameBegins == 1) {
|
||||||
} // isSpell
|
manaCost = AllZone.GameAction.GetSpellCostChange(sa);
|
||||||
else {
|
}
|
||||||
manaCost = new ManaCost(sa.getManaCost());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void resetManaCost() {
|
private void resetManaCost() {
|
||||||
|
|||||||
@@ -29,6 +29,55 @@ public class MagicStack extends MyObservable
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ManaCost GetMultiKickerSpellCostChange(SpellAbility sa) {
|
||||||
|
int Max = 25;
|
||||||
|
String[] Numbers = new String[Max];
|
||||||
|
for(int no = 0; no < Max; no ++) Numbers[no] = String.valueOf(no);
|
||||||
|
ManaCost manaCost = new ManaCost(sa.getManaCost());
|
||||||
|
String Mana = manaCost.toString();
|
||||||
|
int MultiKickerPaid = AllZone.GameAction.CostCutting_GetMultiMickerManaCostPaid;
|
||||||
|
for(int no = 0; no < Max; no ++) Numbers[no] = String.valueOf(no);
|
||||||
|
String Number_ManaCost = " ";
|
||||||
|
if(Mana.toString().length() == 1) Number_ManaCost = Mana.toString().substring(0, 1);
|
||||||
|
else if(Mana.toString().length() == 0) Number_ManaCost = "0"; // Should Never Occur
|
||||||
|
else Number_ManaCost = Mana.toString().substring(0, 2);
|
||||||
|
Number_ManaCost = Number_ManaCost.trim();
|
||||||
|
|
||||||
|
|
||||||
|
for(int check = 0; check < Max; check ++) {
|
||||||
|
if(Number_ManaCost.equals(Numbers[check])) {
|
||||||
|
|
||||||
|
if(check - MultiKickerPaid < 0) {
|
||||||
|
MultiKickerPaid = MultiKickerPaid - check;
|
||||||
|
AllZone.GameAction.CostCutting_GetMultiMickerManaCostPaid = MultiKickerPaid;
|
||||||
|
Mana = Mana.replaceFirst(String.valueOf(check),"0");
|
||||||
|
} else {
|
||||||
|
Mana = Mana.replaceFirst(String.valueOf(check),String.valueOf(check - MultiKickerPaid));
|
||||||
|
MultiKickerPaid = 0;
|
||||||
|
AllZone.GameAction.CostCutting_GetMultiMickerManaCostPaid = MultiKickerPaid;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Mana = Mana.trim();
|
||||||
|
if(Mana.equals("")) Mana = "0";
|
||||||
|
manaCost = new ManaCost(Mana);
|
||||||
|
}
|
||||||
|
String Color_cut = AllZone.GameAction.CostCutting_GetMultiMickerManaCostPaid_Colored;
|
||||||
|
|
||||||
|
for(int Colored_Cut = 0; Colored_Cut < Color_cut.length(); Colored_Cut++) {
|
||||||
|
if("WUGRB".contains(Color_cut.substring(Colored_Cut, Colored_Cut + 1))) {
|
||||||
|
if(!Mana.equals(Mana.replaceFirst((Color_cut.substring(Colored_Cut, Colored_Cut + 1)), ""))) {
|
||||||
|
Mana = Mana.replaceFirst(Color_cut.substring(Colored_Cut, Colored_Cut + 1), "");
|
||||||
|
AllZone.GameAction.CostCutting_GetMultiMickerManaCostPaid_Colored = AllZone.GameAction.CostCutting_GetMultiMickerManaCostPaid_Colored.replaceFirst(Color_cut.substring(Colored_Cut, Colored_Cut + 1), "");
|
||||||
|
Mana = Mana.trim();
|
||||||
|
if(Mana.equals("")) Mana = "0";
|
||||||
|
manaCost = new ManaCost(Mana);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return manaCost;
|
||||||
|
}
|
||||||
|
|
||||||
public void add(SpellAbility sp)
|
public void add(SpellAbility sp)
|
||||||
{
|
{
|
||||||
if(sp instanceof Ability_Mana || sp instanceof Ability_Triggered)//TODO make working triggered abilities!
|
if(sp instanceof Ability_Mana || sp instanceof Ability_Triggered)//TODO make working triggered abilities!
|
||||||
@@ -64,17 +113,17 @@ public class MagicStack extends MyObservable
|
|||||||
private static final long serialVersionUID = -2224875229611007788L;
|
private static final long serialVersionUID = -2224875229611007788L;
|
||||||
|
|
||||||
public void execute() {
|
public void execute() {
|
||||||
ability.resolve();
|
ability.resolve();
|
||||||
Card crd = sa.getSourceCard();
|
Card crd = sa.getSourceCard();
|
||||||
AllZone.InputControl.setInput(new Input_PayManaCost_Ability("Pay X cost for " + crd.getName() + " (X=" +crd.getXManaCostPaid()+")\r\n",
|
AllZone.InputControl.setInput(new Input_PayManaCost_Ability("Pay X cost for " + crd.getName() + " (X=" +crd.getXManaCostPaid()+")\r\n",
|
||||||
ability.getManaCost(), this, unpaidCommand, true));
|
ability.getManaCost(), this, unpaidCommand, true));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
Card crd = sa.getSourceCard();
|
||||||
if(sp.getSourceCard().getController().equals(Constant.Player.Human)) {
|
if(sp.getSourceCard().getController().equals(Constant.Player.Human)) {
|
||||||
AllZone.InputControl.setInput(new Input_PayManaCost_Ability("Pay X cost for " + sp.getSourceCard().getName() + " (X=0)\r\n",
|
AllZone.InputControl.setInput(new Input_PayManaCost_Ability("Pay X cost for " + sp.getSourceCard().getName() + " (X=" +crd.getXManaCostPaid()+")\r\n",
|
||||||
ability.getManaCost(), paidCommand, unpaidCommand, true));
|
ability.getManaCost(), paidCommand, unpaidCommand, true));
|
||||||
}
|
}
|
||||||
else //computer
|
else //computer
|
||||||
{
|
{
|
||||||
int neededDamage = CardFactoryUtil.getNeededXDamage(sa);
|
int neededDamage = CardFactoryUtil.getNeededXDamage(sa);
|
||||||
@@ -112,14 +161,47 @@ public class MagicStack extends MyObservable
|
|||||||
private static final long serialVersionUID = -6037161763374971106L;
|
private static final long serialVersionUID = -6037161763374971106L;
|
||||||
public void execute() {
|
public void execute() {
|
||||||
ability.resolve();
|
ability.resolve();
|
||||||
AllZone.InputControl.setInput(new Input_PayManaCost_Ability("Multikicker for " + sa.getSourceCard() + "\r\n",
|
ManaCost manaCost = GetMultiKickerSpellCostChange(ability);
|
||||||
ability.getManaCost(), this, unpaidCommand));
|
if(manaCost.isPaid()) {
|
||||||
|
this.execute();
|
||||||
|
} else {
|
||||||
|
if(AllZone.GameAction.CostCutting_GetMultiMickerManaCostPaid == 0
|
||||||
|
&& AllZone.GameAction.CostCutting_GetMultiMickerManaCostPaid_Colored.equals("")) {
|
||||||
|
AllZone.InputControl.setInput(new Input_PayManaCost_Ability("Multikicker for " + sa.getSourceCard() + "\r\n"
|
||||||
|
+ "Times Kicked: " + sa.getSourceCard().getMultiKickerMagnitude() + "\r\n",
|
||||||
|
manaCost.toString(), this, unpaidCommand));
|
||||||
|
} else {
|
||||||
|
AllZone.InputControl.setInput(new Input_PayManaCost_Ability("Multikicker for " + sa.getSourceCard() + "\r\n"
|
||||||
|
+ "Mana in Reserve: " + ((AllZone.GameAction.CostCutting_GetMultiMickerManaCostPaid != 0)?
|
||||||
|
AllZone.GameAction.CostCutting_GetMultiMickerManaCostPaid:"") +
|
||||||
|
AllZone.GameAction.CostCutting_GetMultiMickerManaCostPaid_Colored + "\r\n"
|
||||||
|
+ "Times Kicked: " + sa.getSourceCard().getMultiKickerMagnitude() + "\r\n",
|
||||||
|
manaCost.toString(), this, unpaidCommand));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
if(sp.getSourceCard().getController().equals(Constant.Player.Human)) {
|
if(sp.getSourceCard().getController().equals(Constant.Player.Human)) {
|
||||||
AllZone.InputControl.setInput(new Input_PayManaCost_Ability("Multikicker for " + sp.getSourceCard() + "\r\n",
|
ManaCost manaCost = GetMultiKickerSpellCostChange(ability);
|
||||||
ability.getManaCost(), paidCommand, unpaidCommand));
|
|
||||||
|
if(manaCost.isPaid()) {
|
||||||
|
paidCommand.execute();
|
||||||
|
} else {
|
||||||
|
if(AllZone.GameAction.CostCutting_GetMultiMickerManaCostPaid == 0
|
||||||
|
&& AllZone.GameAction.CostCutting_GetMultiMickerManaCostPaid_Colored.equals("")) {
|
||||||
|
AllZone.InputControl.setInput(new Input_PayManaCost_Ability("Multikicker for " + sa.getSourceCard() + "\r\n"
|
||||||
|
+ "Times Kicked: " + sa.getSourceCard().getMultiKickerMagnitude() + "\r\n",
|
||||||
|
manaCost.toString(), paidCommand, unpaidCommand));
|
||||||
|
} else {
|
||||||
|
AllZone.InputControl.setInput(new Input_PayManaCost_Ability("Multikicker for " + sa.getSourceCard() + "\r\n"
|
||||||
|
+ "Mana in Reserve: " + ((AllZone.GameAction.CostCutting_GetMultiMickerManaCostPaid != 0)?
|
||||||
|
AllZone.GameAction.CostCutting_GetMultiMickerManaCostPaid:"") +
|
||||||
|
AllZone.GameAction.CostCutting_GetMultiMickerManaCostPaid_Colored + "\r\n"
|
||||||
|
+ "Times Kicked: " + sa.getSourceCard().getMultiKickerMagnitude() + "\r\n",
|
||||||
|
manaCost.toString(), paidCommand, unpaidCommand));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else //computer
|
else //computer
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -234,6 +234,7 @@ public class Phase extends MyObservable
|
|||||||
//if(getPhase().equals(Constant.Phase.Untap)) {
|
//if(getPhase().equals(Constant.Phase.Untap)) {
|
||||||
if(is(Constant.Phase.Untap, Constant.Player.Human)) {
|
if(is(Constant.Phase.Untap, Constant.Player.Human)) {
|
||||||
StormCount = 0;
|
StormCount = 0;
|
||||||
|
|
||||||
HighTideCount = 0;
|
HighTideCount = 0;
|
||||||
PlayerSpellCount = 0;
|
PlayerSpellCount = 0;
|
||||||
PlayerCreatureSpellCount = 0;
|
PlayerCreatureSpellCount = 0;
|
||||||
@@ -265,8 +266,7 @@ public class Phase extends MyObservable
|
|||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
if(is(Constant.Phase.Main1, Constant.Player.Human)) {
|
if(is(Constant.Phase.Main1, Constant.Player.Human)) {
|
||||||
if(turn == 1) {
|
if(turn == 1) {
|
||||||
GameBegins = 1; // Omnath
|
|
||||||
StormCount = 0;
|
StormCount = 0;
|
||||||
PlayerSpellCount = 0;
|
PlayerSpellCount = 0;
|
||||||
PlayerCreatureSpellCount = 0;
|
PlayerCreatureSpellCount = 0;
|
||||||
|
|||||||
@@ -162,6 +162,8 @@ public class StaticEffects
|
|||||||
cardToEffectsList.put("Darksteel Forge", new String[] {"Darksteel_Forge"} );
|
cardToEffectsList.put("Darksteel Forge", new String[] {"Darksteel_Forge"} );
|
||||||
cardToEffectsList.put("Akroma's Memorial", new String[] {"Akromas_Memorial"});
|
cardToEffectsList.put("Akroma's Memorial", new String[] {"Akromas_Memorial"});
|
||||||
cardToEffectsList.put("Leyline of Singularity", new String[] {"Leyline_of_Singularity"});
|
cardToEffectsList.put("Leyline of Singularity", new String[] {"Leyline_of_Singularity"});
|
||||||
|
cardToEffectsList.put("Goblin Warchief", new String[] {"Goblin_Warchief"});
|
||||||
|
cardToEffectsList.put("Undead Warchief", new String[] {"Undead_Warchief"});
|
||||||
cardToEffectsList.put("Levitation", new String[] {"Levitation"});
|
cardToEffectsList.put("Levitation", new String[] {"Levitation"});
|
||||||
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"});
|
||||||
|
|||||||
Reference in New Issue
Block a user