- Added the beginnings of X manacost support, also added the card Prosperity.

This commit is contained in:
jendave
2011-08-06 03:32:05 +00:00
parent d7d6b54569
commit d324c21f2c
8 changed files with 170 additions and 3 deletions

View File

@@ -1,3 +1,8 @@
Prosperity
X U
Sorcery
no text
Azorius Chancery
no cost
Land

View File

@@ -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;

View File

@@ -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<card.getXManaCostPaid();i++)
{
AllZone.GameAction.drawCard(Constant.Player.Human);
AllZone.GameAction.drawCard(Constant.Player.Computer);
}
card.setXManaCostPaid(0);
}
public boolean canPlayAI()
{
return AllZone.Computer_Hand.size() < 5 && ComputerUtil.canPayCost("3 U");
}
};
spell.setDescription("Each player draws X cards.");
spell.setStackDescription(card + " - Each player draws X cards.");
card.clearSpellAbility();
card.addSpellAbility(spell);
}
//*************** END ************ END **************************
// Cards with Cycling abilities
// -1 means keyword "Cycling" not found
@@ -16717,6 +16749,17 @@ public class CardFactory implements NewConstants {
}
}//Vanishing
if (card.getManaCost().contains("X"))
{
SpellAbility sa = card.getSpellAbility()[0];
sa.setIsXCost(true);
if (card.getManaCost().startsWith("X X"))
sa.setXManaCost("2");
else if (card.getManaCost().startsWith("X"))
sa.setXManaCost("1");
}
return card;
}//getCard2

View File

@@ -198,6 +198,9 @@ public class CardUtil {
if(manaCost.equals("")) return 0;
while (manaCost.startsWith("X"))
manaCost = manaCost.substring(2);
if(!manaCost.matches(".*[A-Z]+.*")) {
try {
return Integer.parseInt(manaCost);

View File

@@ -185,6 +185,37 @@ public class ComputerUtil
}
return false;
}//canPayCost()
static public boolean canPayCost(String cost)
{
if(cost.equals(("0")))
return true;
CardList land = getAvailableMana();
ManaCost manacost = new ManaCost(cost);
ArrayList<String> colors = new ArrayList<String>();
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)

View File

@@ -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);
}
}

View File

@@ -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);
}

View File

@@ -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;
}