diff --git a/.gitattributes b/.gitattributes index 3cf620e4cbe..e74462bf024 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1442,6 +1442,7 @@ res/cardsfolder/fire_lit_thicket.txt -text svneol=native#text/plain res/cardsfolder/fire_sprites.txt -text svneol=native#text/plain res/cardsfolder/fire_tempest.txt -text svneol=native#text/plain res/cardsfolder/fireball.txt -text svneol=native#text/plain +res/cardsfolder/fireblast.txt -text svneol=native#text/plain res/cardsfolder/firebolt.txt -text svneol=native#text/plain res/cardsfolder/firefly.txt -text svneol=native#text/plain res/cardsfolder/fires_of_yavimaya.txt -text svneol=native#text/plain diff --git a/res/cardsfolder/bringer_of_the_blue_dawn.txt b/res/cardsfolder/bringer_of_the_blue_dawn.txt index a71b9da4d74..ca87ddb3ca8 100644 --- a/res/cardsfolder/bringer_of_the_blue_dawn.txt +++ b/res/cardsfolder/bringer_of_the_blue_dawn.txt @@ -4,6 +4,7 @@ Types:Creature Bringer Text:At the beginning of your upkeep, you may draw two cards. PT:5/5 K:Trample +SVar:AltCost:W U B R G SVar:Rarity:Rare SVar:Picture:http://www.wizards.com/global/images/magic/general/bringer_of_the_blue_dawn.jpg End diff --git a/res/cardsfolder/bringer_of_the_green_dawn.txt b/res/cardsfolder/bringer_of_the_green_dawn.txt index 1957fcd6c46..ef1e2f6e77b 100644 --- a/res/cardsfolder/bringer_of_the_green_dawn.txt +++ b/res/cardsfolder/bringer_of_the_green_dawn.txt @@ -4,6 +4,7 @@ Types:Creature Bringer Text:At the beginning of your upkeep, you may put a 3/3 green Beast creature token into play. PT:5/5 K:Trample +SVar:AltCost:W U B R G SVar:Rarity:Rare SVar:Picture:http://www.wizards.com/global/images/magic/general/bringer_of_the_green_dawn.jpg End diff --git a/res/cardsfolder/bringer_of_the_white_dawn.txt b/res/cardsfolder/bringer_of_the_white_dawn.txt index 9be41a796ca..c15fd8c146d 100644 --- a/res/cardsfolder/bringer_of_the_white_dawn.txt +++ b/res/cardsfolder/bringer_of_the_white_dawn.txt @@ -4,6 +4,7 @@ Types:Creature Bringer Text:At the beginning of your upkeep, you may return target artifact card from your graveyard to play. PT:5/5 K:Trample +SVar:AltCost:W U B R G SVar:Rarity:Rare SVar:Picture:http://www.wizards.com/global/images/magic/general/bringer_of_the_white_dawn.jpg End diff --git a/res/cardsfolder/fireblast.txt b/res/cardsfolder/fireblast.txt new file mode 100644 index 00000000000..9683be7aa5d --- /dev/null +++ b/res/cardsfolder/fireblast.txt @@ -0,0 +1,9 @@ +Name:Fireblast +ManaCost:4 R R +Types:Instant +Text:no text +A:SP$DealDamage|Cost$4 R R|Tgt$TgtCP|NumDmg$4|SpellDescription$CARDNAME deals 4 damage to target creature or player. +SVar:AltCost:Sac<2/Mountain> +SVar:Rarity:Common +SVar:Picture:http://www.wizards.com/global/images/magic/general/fireblast.jpg +End diff --git a/src/forge/Ability_Cost.java b/src/forge/Ability_Cost.java index 24ef3eacbb0..78a17271ae4 100644 --- a/src/forge/Ability_Cost.java +++ b/src/forge/Ability_Cost.java @@ -191,8 +191,10 @@ public class Ability_Cost { } public void changeCost(SpellAbility sa){ - if (manaCost != "0") - manaCost = AllZone.GameAction.GetSpellCostChange(sa).toString(); + if (manaCost != "0"){ + String mana = getMana(); + manaCost = AllZone.GameAction.GetSpellCostChange(sa, new ManaCost(mana)).toString(); + } } public String toString() @@ -200,20 +202,31 @@ public class Ability_Cost { if (isAbility) return abilityToString(); else - return spellToString(); + return spellToString(true); } // maybe add a conversion method that turns the amounts into words 1=a(n), 2=two etc. - private String spellToString() { - StringBuilder cost = new StringBuilder("As an additional cost to cast "); - cost.append(name); - cost.append(", "); + public String toStringAlt(){ + return spellToString(false); + } + + + private String spellToString(boolean bFlag) { + StringBuilder cost = new StringBuilder(); + + if (bFlag) + cost.append("As an additional cost to cast ").append(name).append(", "); + boolean first = true; - if (!(manaCost.equals("0") || manaCost.equals(""))){ + if (!bFlag){ // usually no additional mana cost for spells // only three Alliances cards have additional mana costs, but they are basically kicker/multikicker + if (!getMana().equals("") && !getMana().equals("0")){ + cost.append("pay ").append(getMana()); + first = false; + } } if (tapCost || untapCost){ @@ -277,7 +290,9 @@ public class Ability_Cost { if (first) return ""; - cost.append(".").append("\n"); + if (bFlag) + cost.append(".").append("\n"); + return cost.toString(); } diff --git a/src/forge/CardFactory.java b/src/forge/CardFactory.java index b77548beae6..effe5c006a4 100644 --- a/src/forge/CardFactory.java +++ b/src/forge/CardFactory.java @@ -11592,6 +11592,28 @@ public class CardFactory implements NewConstants { } }//Vanishing + // AltCost + SpellAbility[] abilities = card.getSpellAbility(); + if (abilities.length > 0){ + String altCost = card.getSVar("AltCost"); + SpellAbility sa = abilities[0]; + if (!altCost.equals("") && sa.isSpell()) + { + SpellAbility altCostSA = sa.copy(); + + Ability_Cost abCost = new Ability_Cost(altCost, card.getName(), altCostSA.isAbility()); + altCostSA.payCosts = abCost; + + StringBuilder sb = new StringBuilder(); + + sb.append("You may ").append(abCost.toStringAlt()); + sb.append(" rather than pay ").append(card.getName()).append("'s mana cost"); + + altCostSA.setDescription(sb.toString()); + + card.addSpellAbility(altCostSA); + } + } return card; } diff --git a/src/forge/CardFactory_Creatures.java b/src/forge/CardFactory_Creatures.java index edf799cb160..e1772e677ac 100644 --- a/src/forge/CardFactory_Creatures.java +++ b/src/forge/CardFactory_Creatures.java @@ -10470,40 +10470,6 @@ public class CardFactory_Creatures { }//*************** END ************ END ************************** - //*************** START *********** START ************************** - else if(cardName.equals("Bringer of the Green Dawn") || cardName.equals("Bringer of the Blue Dawn") - || cardName.equals("Bringer of the White Dawn")) { - final SpellAbility diffCost = new Spell(card) { - private static final long serialVersionUID = -1598664186463358630L; - - @Override - public void resolve() { - PlayerZone hand = AllZone.getZone(Constant.Zone.Hand, card.getController()); - PlayerZone play = AllZone.getZone(Constant.Zone.Play, card.getController()); - - - hand.remove(card); - play.add(card); - //card.comesIntoPlay(); //do i need this? - } - - @Override - public boolean canPlay() { - return AllZone.Phase.getActivePlayer().equals(card.getController()) - && !AllZone.Phase.getPhase().equals("End of Turn") - && !AllZone.GameAction.isCardInPlay(card) && super.canPlay(); - } - - }; - diffCost.setManaCost("W U B R G"); - diffCost.setDescription("You may pay W U B R G rather than pay " + card.getName() + "'s mana cost. "); - diffCost.setStackDescription(card.getName() + " - Creature 5/5"); - card.addSpellAbility(diffCost); - - - }//*************** END ************ END ************************** - - //*************** START *********** START ************************** else if(cardName.equals("Thelonite Hermit")) { diff --git a/src/forge/ComputerUtil.java b/src/forge/ComputerUtil.java index 82da9e041e9..1bed4d8205c 100644 --- a/src/forge/ComputerUtil.java +++ b/src/forge/ComputerUtil.java @@ -188,7 +188,10 @@ public class ComputerUtil land.remove(sa.getSourceCard()); } // Beached - Delete old - ManaCost cost = AllZone.GameAction.GetSpellCostChange(sa); + String mana = sa.getPayCosts() != null ? sa.getPayCosts().getMana() : sa.getManaCost(); + ManaCost cost = new ManaCost(mana); + + cost = AllZone.GameAction.GetSpellCostChange(sa, cost); if(cost.isPaid()) return canPayAdditionalCosts(sa); // Beached - Delete old @@ -377,7 +380,10 @@ public class ComputerUtil { land.remove(sa.getSourceCard()); } - ManaCost cost = AllZone.GameAction.GetSpellCostChange(sa); + + String mana = sa.getPayCosts() != null ? sa.getPayCosts().getMana() : sa.getManaCost(); + + ManaCost cost = AllZone.GameAction.GetSpellCostChange(sa, new ManaCost(mana)); // Beached - Delete old if(cost.isPaid()) return; diff --git a/src/forge/GameAction.java b/src/forge/GameAction.java index acfd04d4544..85c93911a49 100644 --- a/src/forge/GameAction.java +++ b/src/forge/GameAction.java @@ -3207,12 +3207,12 @@ public class GameAction { int CostCutting_GetMultiMickerManaCostPaid = 0; String CostCutting_GetMultiMickerManaCostPaid_Colored = ""; - public ManaCost GetSpellCostChange(SpellAbility sa) { + public ManaCost GetSpellCostChange(SpellAbility sa, ManaCost originalCost) { // Beached Card originalCard = sa.getSourceCard(); - ManaCost manaCost; SpellAbility spell = sa; - manaCost = new ManaCost(sa.getManaCost()); + ManaCost manaCost = new ManaCost(originalCost.toString()); + if(spell.isSpell() == true) { if(originalCard.getName().equals("Avatar of Woe")){ Player player = AllZone.Phase.getActivePlayer(); @@ -3618,7 +3618,8 @@ public class GameAction { if(sa.getSourceCard().isCopiedSpell() && sa.isSpell()) { manaCost = new ManaCost("0"); } else { - manaCost = GetSpellCostChange(sa); + + manaCost = GetSpellCostChange(sa, new ManaCost(sa.getManaCost())); } if(manaCost.isPaid() && sa.getBeforePayMana() == null) { if (sa.getAfterPayMana() == null){ diff --git a/src/forge/Input_PayCostMana.java b/src/forge/Input_PayCostMana.java index c2926731334..8c91a75153e 100644 --- a/src/forge/Input_PayCostMana.java +++ b/src/forge/Input_PayCostMana.java @@ -23,7 +23,8 @@ public class Input_PayCostMana extends Input { if(sa.getSourceCard().isCopiedSpell() && sa.isSpell()) { manaCost = new ManaCost("0"); } else { - manaCost = AllZone.GameAction.GetSpellCostChange(sa); + String mana = payment.getCost().getMana(); + manaCost = AllZone.GameAction.GetSpellCostChange(sa, new ManaCost(mana)); } } else diff --git a/src/forge/Input_PayManaCost.java b/src/forge/Input_PayManaCost.java index 509a7aa5fd5..2ee161474b9 100644 --- a/src/forge/Input_PayManaCost.java +++ b/src/forge/Input_PayManaCost.java @@ -32,7 +32,7 @@ public class Input_PayManaCost extends Input { AllZone.Stack.add(spell); } } else { - manaCost = AllZone.GameAction.GetSpellCostChange(sa); + manaCost = AllZone.GameAction.GetSpellCostChange(sa, new ManaCost(originalManaCost)); } } else