diff --git a/res/cards.txt b/res/cards.txt index 5af7d1ab14c..bb567c53935 100644 --- a/res/cards.txt +++ b/res/cards.txt @@ -1,3 +1,8 @@ +Prosperity +X U +Sorcery +no text + Azorius Chancery no cost Land diff --git a/src/forge/Card.java b/src/forge/Card.java index 00bac0bdc7f..502d5a78ef7 100644 --- a/src/forge/Card.java +++ b/src/forge/Card.java @@ -80,6 +80,8 @@ public class Card extends MyObservable { private int X = 0; + private int xManaCostPaid = 0; + private int multiKickerMagnitude = 0; private String owner = ""; @@ -151,6 +153,21 @@ public class Card extends MyObservable { //***************/ + public void addXManaCostPaid(int n) + { + xManaCostPaid += n; + } + + public void setXManaCostPaid(int n) + { + xManaCostPaid = n; + } + + public int getXManaCostPaid() + { + return xManaCostPaid; + } + public void setCheckedPropagandaThisTurn(boolean b) { checkedPropagandaThisTurn = b; diff --git a/src/forge/CardFactory.java b/src/forge/CardFactory.java index db79d12f451..ebd56c4031a 100644 --- a/src/forge/CardFactory.java +++ b/src/forge/CardFactory.java @@ -272,6 +272,8 @@ public class CardFactory implements NewConstants { } } + + /* //Creatures with simple, self-targeted mana-activated keyword adding abilities //-1 means not found while(hasKeyword(card, "KPump") != -1) @@ -16645,6 +16647,36 @@ public class CardFactory implements NewConstants { } //*************** END ************ END ************************** + + //*************** START *********** START ************************** + else if (cardName.equals("Prosperity")) + { + final SpellAbility spell = new Spell(card) + { + private static final long serialVersionUID = -4885933011194027735L; + + public void resolve() + { + for (int i=0;i colors = new ArrayList(); + + for(int i = 0; i < land.size(); i++) + { + colors = getColors(land.get(i)); + int once = 0; + + for(int j =0; j < colors.size(); j++) + { + if(manacost.isNeeded(colors.get(j)) && once == 0) + { + manacost.subtractMana(colors.get(j)); + once++; + } + + if(manacost.isPaid()) { + return true; + } + } + } + return false; + }//canPayCost() static public void payManaCost(SpellAbility sa) diff --git a/src/forge/MagicStack.java b/src/forge/MagicStack.java index a178ffbf717..94e7d49f2a7 100644 --- a/src/forge/MagicStack.java +++ b/src/forge/MagicStack.java @@ -16,11 +16,53 @@ public class MagicStack extends MyObservable if(sp instanceof Ability_Mana || sp instanceof Ability_Triggered)//TODO make working triggered abilities! sp.resolve(); else { - if (!sp.isMultiKicker()) + if (!sp.isMultiKicker() && !sp.isXCost()) { push(sp); } - else //this spell does have multikicker + else if (sp.isXCost()) + { + final SpellAbility sa = sp; + final Ability ability = new Ability(sp.getSourceCard(), sa.getXManaCost()) + { + public void resolve() + { + this.getSourceCard().addXManaCostPaid(1); + } + }; + + final Command unpaidCommand = new Command() + { + private static final long serialVersionUID = -3342222770086269767L; + + public void execute() + { + push(sa); + } + }; + + final Command paidCommand = new Command() { + private static final long serialVersionUID = -2224875229611007788L; + + public void execute() { + ability.resolve(); + Card crd = sa.getSourceCard(); + AllZone.InputControl.setInput(new Input_PayManaCost_Ability("Pay X cost for " + crd.getName() + " (X=" +crd.getXManaCostPaid()+")\r\n", + ability.getManaCost(), this, unpaidCommand)); + } + }; + + 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", + ability.getManaCost(), paidCommand, unpaidCommand)); + } + else //computer + { + while(ComputerUtil.canPayCost(ability)) ComputerUtil.playNoStack(ability); + push(sa); + } + } + else if (sp.isMultiKicker()) //both X and multi is not supported yet { final SpellAbility sa = sp; final Ability ability = new Ability(sp.getSourceCard(), sp.getMultiKickerManaCost()) @@ -34,7 +76,9 @@ public class MagicStack extends MyObservable final Command unpaidCommand = new Command() { - public void execute() + private static final long serialVersionUID = -3342222770086269767L; + + public void execute() { push(sa); } @@ -56,6 +100,7 @@ public class MagicStack extends MyObservable else //computer { while(ComputerUtil.canPayCost(ability)) ComputerUtil.playNoStack(ability); + push(sa); } } diff --git a/src/forge/ManaCost.java b/src/forge/ManaCost.java index 29a98484058..5b1e9f3db04 100644 --- a/src/forge/ManaCost.java +++ b/src/forge/ManaCost.java @@ -11,6 +11,8 @@ class ManaCost { private Mana_PayCost m; public ManaCost(String cost) { + while (cost.startsWith("X")) + cost = cost.substring(2); m = new Mana_PayCost(cost); } diff --git a/src/forge/SpellAbility.java b/src/forge/SpellAbility.java index 2c9980ae5e2..c1bf3af5b70 100644 --- a/src/forge/SpellAbility.java +++ b/src/forge/SpellAbility.java @@ -17,6 +17,7 @@ public abstract class SpellAbility { private String manaCost = ""; private String additionalManaCost = ""; private String multiKickerManaCost= ""; + private String xManaCost = ""; private String type = "Intrinsic"; //set to Intrinsic by default @@ -29,6 +30,7 @@ public abstract class SpellAbility { private boolean buyBackAbility = false; //false by default private boolean flashBackAbility = false; private boolean multiKicker = false; + private boolean xCost = false; private Input beforePayMana; private Input afterResolve; @@ -115,6 +117,16 @@ public abstract class SpellAbility { multiKickerManaCost = cost; } + public String getXManaCost() + { + return xManaCost; + } + + public void setXManaCost(String cost) + { + xManaCost = cost; + } + public boolean isSpell() { return spell; } @@ -153,6 +165,15 @@ public abstract class SpellAbility { return multiKicker; } + public void setIsXCost(boolean b) { + xCost = b; + } + + public boolean isXCost(){ + return xCost; + } + + public void setSourceCard(Card c) { sourceCard = c; }