- Added the keyword "AlternateAdditionalCost".

- Added Flamekin Bladewhirl.
This commit is contained in:
Sloth
2012-09-25 18:26:31 +00:00
parent d5e96ef5bd
commit aea50cde77
6 changed files with 254 additions and 207 deletions

1
.gitattributes vendored
View File

@@ -3311,6 +3311,7 @@ res/cardsfolder/f/flameborn_hellion.txt svneol=native#text/plain
res/cardsfolder/f/flameborn_viron.txt svneol=native#text/plain res/cardsfolder/f/flameborn_viron.txt svneol=native#text/plain
res/cardsfolder/f/flamebreak.txt svneol=native#text/plain res/cardsfolder/f/flamebreak.txt svneol=native#text/plain
res/cardsfolder/f/flamecore_elemental.txt svneol=native#text/plain res/cardsfolder/f/flamecore_elemental.txt svneol=native#text/plain
res/cardsfolder/f/flamekin_bladewhirl.txt -text
res/cardsfolder/f/flamekin_brawler.txt svneol=native#text/plain res/cardsfolder/f/flamekin_brawler.txt svneol=native#text/plain
res/cardsfolder/f/flamekin_harbinger.txt svneol=native#text/plain res/cardsfolder/f/flamekin_harbinger.txt svneol=native#text/plain
res/cardsfolder/f/flamekin_spitfire.txt svneol=native#text/plain res/cardsfolder/f/flamekin_spitfire.txt svneol=native#text/plain

View File

@@ -0,0 +1,11 @@
Name:Flamekin Bladewhirl
ManaCost:R
Types:Creature Elemental Warrior
Text:As an additional cost to cast Flamekin Bladewhirl, reveal an Elemental card from your hand or pay 3.
PT:2/1
K:AlternateAdditionalCost:Reveal<1/Elemental>:3
SVar:Rarity:Uncommon
SVar:Picture:http://www.wizards.com/global/images/magic/general/flamekin_bladewhirl.jpg
SetInfo:LRW|Uncommon|http://magiccards.info/scans/en/lw/165.jpg
Oracle:As an additional cost to cast Flamekin Bladewhirl, reveal an Elemental card from your hand or pay {3}.
End

View File

@@ -1,32 +1,32 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<preferences type="editor"> <preferences type="editor">
<pref name="stats_catalog" value="true"></pref>
<pref name="stats_deck" value="true"></pref> <pref name="stats_deck" value="true"></pref>
<col enumval="CAT_QUANTITY" identifier="Quantity" show="true" sortpriority="1" sortstate="DESC" width="39"></col> <pref name="stats_catalog" value="true"></pref>
<col enumval="CAT_NAME" identifier="Name" show="true" sortpriority="2" sortstate="DESC" width="50"></col> <col enumval="CAT_QUANTITY" identifier="Quantity" show="true" sortpriority="2" sortstate="ASC" width="75"></col>
<col enumval="CAT_COST" identifier="Cost" show="true" sortpriority="3" sortstate="DESC" width="36"></col> <col enumval="CAT_NAME" identifier="Name" show="true" sortpriority="2" sortstate="ASC" width="139"></col>
<col enumval="CAT_COLOR" identifier="Color" show="true" sortpriority="0" sortstate="NONE" width="30"></col> <col enumval="CAT_COST" identifier="Cost" show="true" sortpriority="3" sortstate="ASC" width="58"></col>
<col enumval="CAT_TYPE" identifier="Type" show="true" sortpriority="0" sortstate="NONE" width="37"></col> <col enumval="CAT_COLOR" identifier="Color" show="true" sortpriority="2" sortstate="ASC" width="44"></col>
<col enumval="CAT_POWER" identifier="Power" show="true" sortpriority="0" sortstate="NONE" width="36"></col> <col enumval="CAT_TYPE" identifier="Type" show="true" sortpriority="1" sortstate="ASC" width="61"></col>
<col enumval="CAT_TOUGHNESS" identifier="Toughness" show="true" sortpriority="0" sortstate="NONE" width="36"></col> <col enumval="CAT_POWER" identifier="Power" show="true" sortpriority="0" sortstate="NONE" width="33"></col>
<col enumval="CAT_TOUGHNESS" identifier="Toughness" show="true" sortpriority="0" sortstate="NONE" width="30"></col>
<col enumval="CAT_CMC" identifier="CMC" show="true" sortpriority="0" sortstate="NONE" width="34"></col> <col enumval="CAT_CMC" identifier="CMC" show="true" sortpriority="0" sortstate="NONE" width="34"></col>
<col enumval="CAT_RARITY" identifier="Rarity" show="true" sortpriority="0" sortstate="NONE" width="19"></col> <col enumval="CAT_RARITY" identifier="Rarity" show="true" sortpriority="0" sortstate="NONE" width="38"></col>
<col enumval="CAT_SET" identifier="Set" show="true" sortpriority="0" sortstate="NONE" width="28"></col> <col enumval="CAT_SET" identifier="Set" show="true" sortpriority="0" sortstate="NONE" width="39"></col>
<col enumval="CAT_AI" identifier="AI" show="true" sortpriority="0" sortstate="NONE" width="39"></col> <col enumval="CAT_AI" identifier="AI" show="true" sortpriority="0" sortstate="NONE" width="46"></col>
<col enumval="CAT_NEW" identifier="New" show="true" sortpriority="0" sortstate="NONE" width="51"></col> <col enumval="CAT_NEW" identifier="New" show="true" sortpriority="1" sortstate="DESC" width="75"></col>
<col enumval="CAT_PURCHASE_PRICE" identifier="Purchase Price" show="true" sortpriority="0" sortstate="NONE" width="59"></col> <col enumval="CAT_PURCHASE_PRICE" identifier="Purchase Price" show="true" sortpriority="0" sortstate="NONE" width="75"></col>
<col enumval="DECK_QUANTITY" identifier="Quantity" show="true" sortpriority="1" sortstate="ASC" width="35"></col> <col enumval="DECK_QUANTITY" identifier="Quantity" show="true" sortpriority="0" sortstate="NONE" width="30"></col>
<col enumval="DECK_NAME" identifier="Name" show="true" sortpriority="0" sortstate="NONE" width="37"></col> <col enumval="DECK_NAME" identifier="Name" show="true" sortpriority="2" sortstate="ASC" width="130"></col>
<col enumval="DECK_COST" identifier="Cost" show="true" sortpriority="0" sortstate="NONE" width="34"></col> <col enumval="DECK_COST" identifier="Cost" show="true" sortpriority="1" sortstate="ASC" width="63"></col>
<col enumval="DECK_COLOR" identifier="Color" show="true" sortpriority="0" sortstate="NONE" width="25"></col> <col enumval="DECK_COLOR" identifier="Color" show="true" sortpriority="0" sortstate="NONE" width="42"></col>
<col enumval="DECK_TYPE" identifier="Type" show="true" sortpriority="0" sortstate="NONE" width="35"></col> <col enumval="DECK_TYPE" identifier="Type" show="true" sortpriority="0" sortstate="NONE" width="147"></col>
<col enumval="DECK_POWER" identifier="Power" show="true" sortpriority="0" sortstate="NONE" width="35"></col> <col enumval="DECK_POWER" identifier="Power" show="true" sortpriority="0" sortstate="NONE" width="35"></col>
<col enumval="DECK_TOUGHNESS" identifier="Toughness" show="true" sortpriority="0" sortstate="NONE" width="35"></col> <col enumval="DECK_TOUGHNESS" identifier="Toughness" show="true" sortpriority="0" sortstate="NONE" width="32"></col>
<col enumval="DECK_CMC" identifier="CMC" show="true" sortpriority="2" sortstate="DESC" width="33"></col> <col enumval="DECK_CMC" identifier="CMC" show="true" sortpriority="3" sortstate="ASC" width="30"></col>
<col enumval="DECK_RARITY" identifier="Rarity" show="true" sortpriority="0" sortstate="NONE" width="43"></col> <col enumval="DECK_RARITY" identifier="Rarity" show="true" sortpriority="0" sortstate="NONE" width="35"></col>
<col enumval="DECK_SET" identifier="Set" show="true" sortpriority="0" sortstate="NONE" width="34"></col> <col enumval="DECK_SET" identifier="Set" show="true" sortpriority="0" sortstate="NONE" width="43"></col>
<col enumval="DECK_AI" identifier="AI" show="true" sortpriority="2" sortstate="ASC" width="27"></col> <col enumval="DECK_AI" identifier="AI" show="true" sortpriority="0" sortstate="NONE" width="48"></col>
<col enumval="DECK_NEW" identifier="New" show="true" sortpriority="0" sortstate="NONE" width="36"></col> <col enumval="DECK_NEW" identifier="New" show="true" sortpriority="0" sortstate="NONE" width="75"></col>
<col enumval="DECK_SALE_PRICE" identifier="Sale Price" show="true" sortpriority="3" sortstate="ASC" width="50"></col> <col enumval="DECK_SALE_PRICE" identifier="Sale Price" show="true" sortpriority="3" sortstate="ASC" width="75"></col>
<col enumval="DECK_DECKS" identifier="Decks" show="true" sortpriority="0" sortstate="NONE" width="35"></col> <col enumval="DECK_DECKS" identifier="Decks" show="true" sortpriority="0" sortstate="NONE" width="75"></col>
</preferences> </preferences>

View File

@@ -2179,32 +2179,36 @@ public class Card extends GameEntity implements Comparable<Card> {
* keywordsToText. * keywordsToText.
* </p> * </p>
* *
* @param keyword * @param keywords
* a {@link java.util.ArrayList} object. * a {@link java.util.ArrayList} object.
* @return a {@link java.lang.String} object. * @return a {@link java.lang.String} object.
*/ */
public final String keywordsToText(final ArrayList<String> keyword) { public final String keywordsToText(final ArrayList<String> keywords) {
final StringBuilder sb = new StringBuilder(); final StringBuilder sb = new StringBuilder();
final StringBuilder sbLong = new StringBuilder(); final StringBuilder sbLong = new StringBuilder();
final StringBuilder sbMana = new StringBuilder(); final StringBuilder sbMana = new StringBuilder();
for (int i = 0; i < keyword.size(); i++) { for (int i = 0; i < keywords.size(); i++) {
if (!keyword.get(i).toString().startsWith("Permanents don't untap during their controllers' untap steps") String keyword = keywords.get(i).toString();
&& !keyword.get(i).toString().startsWith("PreventAllDamageBy") if (keyword.startsWith("Permanents don't untap during their controllers' untap steps")
&& !keyword.get(i).toString().startsWith("CantBlock") || keyword.startsWith("PreventAllDamageBy")
&& !keyword.get(i).toString().startsWith("CantBeBlockedBy")) { || keyword.startsWith("CantBlock")
if (keyword.get(i).toString().startsWith("CostChange")) { || keyword.startsWith("CantBeBlockedBy")
final String[] k = keyword.get(i).split(":"); || keyword.startsWith("AlternateAdditionalCost")) {
continue;
}
if (keyword.startsWith("CostChange")) {
final String[] k = keywords.get(i).split(":");
if (k.length > 8) { if (k.length > 8) {
sbLong.append(k[8]).append("\r\n"); sbLong.append(k[8]).append("\r\n");
} }
} else if (keyword.get(i).toString().startsWith("AdjustLandPlays")) { } else if (keyword.startsWith("AdjustLandPlays")) {
final String[] k = keyword.get(i).split(":"); final String[] k = keywords.get(i).split(":");
if (k.length > 3) { if (k.length > 3) {
sbLong.append(k[3]).append("\r\n"); sbLong.append(k[3]).append("\r\n");
} }
} else if (keyword.get(i).toString().startsWith("etbCounter")) { } else if (keyword.startsWith("etbCounter")) {
final String[] p = keyword.get(i).split(":"); final String[] p = keywords.get(i).split(":");
final StringBuilder s = new StringBuilder(); final StringBuilder s = new StringBuilder();
if (p.length > 4) { if (p.length > 4) {
s.append(p[4]); s.append(p[4]);
@@ -2223,29 +2227,29 @@ public class Card extends GameEntity implements Comparable<Card> {
s.append(" on it."); s.append(" on it.");
} }
sbLong.append(s).append("\r\n"); sbLong.append(s).append("\r\n");
} else if (keyword.get(i).toString().startsWith("Protection:")) { } else if (keyword.startsWith("Protection:")) {
final String[] k = keyword.get(i).split(":"); final String[] k = keywords.get(i).split(":");
sbLong.append(k[2]).append("\r\n"); sbLong.append(k[2]).append("\r\n");
} else if (keyword.get(i).toString().startsWith("Creatures can't attack unless their controller pays")) { } else if (keyword.startsWith("Creatures can't attack unless their controller pays")) {
final String[] k = keyword.get(i).split(":"); final String[] k = keywords.get(i).split(":");
if (!k[3].equals("no text")) { if (!k[3].equals("no text")) {
sbLong.append(k[3]).append("\r\n"); sbLong.append(k[3]).append("\r\n");
} }
} else if (keyword.get(i).startsWith("Enchant")) { } else if (keyword.startsWith("Enchant")) {
String k = keyword.get(i); String k = keywords.get(i);
k = k.replace("Curse", ""); k = k.replace("Curse", "");
sbLong.append(k).append("\r\n"); sbLong.append(k).append("\r\n");
} else if (keyword.get(i).startsWith("Soulshift") || keyword.get(i).startsWith("Devour") } else if (keyword.startsWith("Soulshift") || keywords.get(i).startsWith("Devour")
|| keyword.get(i).startsWith("Fading") || keyword.startsWith("Fading")
|| keyword.get(i).startsWith("Ripple") || keyword.get(i).startsWith("Unearth") || keyword.startsWith("Ripple") || keywords.get(i).startsWith("Unearth")
|| keyword.get(i).startsWith("Vanishing") || keyword.get(i).startsWith("Madness")) { || keyword.startsWith("Vanishing") || keywords.get(i).startsWith("Madness")) {
String k = keyword.get(i); String k = keywords.get(i);
k = k.replace(":", " "); k = k.replace(":", " ");
sbLong.append(k).append("\r\n"); sbLong.append(k).append("\r\n");
} else if (keyword.get(i).startsWith("Morph")) { } else if (keyword.startsWith("Morph")) {
sbLong.append("Morph"); sbLong.append("Morph");
if (keyword.get(i).contains(":")) { if (keyword.contains(":")) {
final Cost mCost = new Cost(this, keyword.get(i).substring(6), true); final Cost mCost = new Cost(this, keywords.get(i).substring(6), true);
if (!mCost.isOnlyManaCost()) { if (!mCost.isOnlyManaCost()) {
sbLong.append(" -"); sbLong.append(" -");
} }
@@ -2255,34 +2259,34 @@ public class Card extends GameEntity implements Comparable<Card> {
} }
sbLong.append("\r\n"); sbLong.append("\r\n");
} }
} else if (keyword.get(i).startsWith("Echo")) { } else if (keyword.startsWith("Echo")) {
sbLong.append("Echo "); sbLong.append("Echo ");
final String[] upkeepCostParams = keyword.get(i).split(":"); final String[] upkeepCostParams = keywords.get(i).split(":");
final String cost = upkeepCostParams[1]; final String cost = upkeepCostParams[1];
final String costDesc = upkeepCostParams.length > 2 ? "- " + upkeepCostParams[2] : cost; final String costDesc = upkeepCostParams.length > 2 ? "- " + upkeepCostParams[2] : cost;
sbLong.append(costDesc); sbLong.append(costDesc);
sbLong.append("\r\n"); sbLong.append("\r\n");
} else if (keyword.get(i).startsWith("Cumulative upkeep")) { } else if (keyword.startsWith("Cumulative upkeep")) {
sbLong.append("Cumulative upkeep "); sbLong.append("Cumulative upkeep ");
final String[] upkeepCostParams = keyword.get(i).split(":"); final String[] upkeepCostParams = keywords.get(i).split(":");
final String cost = upkeepCostParams[1]; final String cost = upkeepCostParams[1];
final String costDesc = upkeepCostParams.length > 2 ? "- " + upkeepCostParams[2] : cost; final String costDesc = upkeepCostParams.length > 2 ? "- " + upkeepCostParams[2] : cost;
sbLong.append(costDesc); sbLong.append(costDesc);
sbLong.append("\r\n"); sbLong.append("\r\n");
} else if (keyword.get(i).startsWith("Amplify")) { } else if (keyword.startsWith("Amplify")) {
sbLong.append("Amplify "); sbLong.append("Amplify ");
final String[] ampParams = keyword.get(i).split(":"); final String[] ampParams = keywords.get(i).split(":");
final String magnitude = ampParams[1]; final String magnitude = ampParams[1];
sbLong.append(magnitude); sbLong.append(magnitude);
sbLong.append("(As this creature enters the battlefield, put a +1/+1 counter on it for each "); sbLong.append("(As this creature enters the battlefield, put a +1/+1 counter on it for each ");
sbLong.append(ampParams[2].replace(",", " and/or ")).append(" card you reveal in your hand.)"); sbLong.append(ampParams[2].replace(",", " and/or ")).append(" card you reveal in your hand.)");
sbLong.append("\r\n"); sbLong.append("\r\n");
} else if (keyword.get(i).startsWith("Alternative Cost")) { } else if (keyword.startsWith("Alternative Cost")) {
sbLong.append("Has alternative cost."); sbLong.append("Has alternative cost.");
} else if (keyword.get(i).startsWith("Kicker")) { } else if (keyword.startsWith("Kicker")) {
final Cost cost = new Cost(this, keyword.get(i).substring(7), false); final Cost cost = new Cost(this, keywords.get(i).substring(7), false);
sbLong.append("Kicker " + cost.toSimpleString() + "\r\n"); sbLong.append("Kicker " + cost.toSimpleString() + "\r\n");
} else if (keyword.get(i).startsWith("Champion")) { } else if (keyword.startsWith("Champion")) {
final String k = this.getKeyword().get(i); final String k = this.getKeyword().get(i);
final String[] kk = k.split(":"); final String[] kk = k.split(":");
String types = kk[1]; String types = kk[1];
@@ -2303,17 +2307,17 @@ public class Card extends GameEntity implements Comparable<Card> {
sbLong.append(types); sbLong.append(types);
sbLong.append(" you control. When this leaves the battlefield, "); sbLong.append(" you control. When this leaves the battlefield, ");
sbLong.append("that card returns to the battlefield.)\r\n"); sbLong.append("that card returns to the battlefield.)\r\n");
} else if (keyword.get(i).endsWith(".") && !keyword.get(i).startsWith("Haunt")) { } else if (keyword.endsWith(".") && !keywords.get(i).startsWith("Haunt")) {
sbLong.append(keyword.get(i).toString()).append("\r\n"); sbLong.append(keywords.get(i).toString()).append("\r\n");
} else if (keyword.get(i).contains("At the beginning of your upkeep, ") } else if (keyword.contains("At the beginning of your upkeep, ")
&& keyword.get(i).contains(" unless you pay")) { && keyword.contains(" unless you pay")) {
sbLong.append(keyword.get(i).toString()).append("\r\n"); sbLong.append(keywords.get(i).toString()).append("\r\n");
} else if (keyword.get(i).toString().contains("tap: add ")) { } else if (keyword.toString().contains("tap: add ")) {
sbMana.append(keyword.get(i).toString()).append("\r\n"); sbMana.append(keywords.get(i).toString()).append("\r\n");
} else if (keyword.get(i).contains("Bloodthirst")) { } else if (keyword.contains("Bloodthirst")) {
final String k = keyword.get(i); final String k = keywords.get(i);
final String[] kk = k.split(" "); final String[] kk = k.split(" ");
sbLong.append(keyword.get(i)).append( sbLong.append(keywords.get(i)).append(
" (If an opponent was dealt damage this turn, this creature enters the battlefield with "); " (If an opponent was dealt damage this turn, this creature enters the battlefield with ");
sbLong.append(kk[1]).append(" +1/+1 counter"); sbLong.append(kk[1]).append(" +1/+1 counter");
if (kk[1].equals("X")) { if (kk[1].equals("X")) {
@@ -2325,17 +2329,17 @@ public class Card extends GameEntity implements Comparable<Card> {
} }
sbLong.append(" on it.)").append("\r\n"); sbLong.append(" on it.)").append("\r\n");
} }
} else if (keyword.get(i).startsWith("Modular")) { } else if (keyword.startsWith("Modular")) {
continue; continue;
} else if (keyword.get(i).startsWith("Provoke")) { } else if (keyword.startsWith("Provoke")) {
sbLong.append(keyword.get(i)); sbLong.append(keywords.get(i));
sbLong.append(" (When this attacks, you may have target creature "); sbLong.append(" (When this attacks, you may have target creature ");
sbLong.append("defending player controls untap and block it if able.)"); sbLong.append("defending player controls untap and block it if able.)");
} else if (keyword.get(i).startsWith("MayEffectFromOpeningHand")) { } else if (keyword.startsWith("MayEffectFromOpeningHand")) {
continue; continue;
} else if (keyword.get(i).startsWith("ETBReplacement")) { } else if (keyword.startsWith("ETBReplacement")) {
continue; continue;
} else if (keyword.get(i).contains("Haunt")) { } else if (keyword.contains("Haunt")) {
sb.append("\r\nHaunt ("); sb.append("\r\nHaunt (");
if (this.isCreature()) { if (this.isCreature()) {
sb.append("When this creature dies, exile it haunting target creature."); sb.append("When this creature dies, exile it haunting target creature.");
@@ -2345,26 +2349,25 @@ public class Card extends GameEntity implements Comparable<Card> {
} }
sb.append(")"); sb.append(")");
continue; continue;
} else if (keyword.get(i).equals("Convoke")) { } else if (keyword.equals("Convoke")) {
if (sb.length() != 0) { if (sb.length() != 0) {
sb.append("\r\n"); sb.append("\r\n");
} }
sb.append("Convoke (Each creature you tap while casting this spell reduces its cost by 1 or by one mana of that creature's color.)"); sb.append("Convoke (Each creature you tap while casting this spell reduces its cost by 1 or by one mana of that creature's color.)");
} else if (keyword.get(i).startsWith("Soulbond")) { } else if (keyword.startsWith("Soulbond")) {
sbLong.append(keyword.get(i)); sbLong.append(keywords.get(i));
sbLong.append(" (You may pair this creature "); sbLong.append(" (You may pair this creature ");
sbLong.append("with another unpaired creature when either "); sbLong.append("with another unpaired creature when either ");
sbLong.append("enters the battlefield. They remain paired for "); sbLong.append("enters the battlefield. They remain paired for ");
sbLong.append("as long as you control both of them)"); sbLong.append("as long as you control both of them)");
} else if (keyword.get(i).startsWith("Equip")) { } else if (keyword.startsWith("Equip")) {
// keyword parsing takes care of adding a proper description // keyword parsing takes care of adding a proper description
continue; continue;
} else { } else {
if ((i != 0) && (sb.length() != 0)) { if ((i != 0) && (sb.length() != 0)) {
sb.append(", "); sb.append(", ");
} }
sb.append(keyword.get(i).toString()); sb.append(keyword);
}
} }
} }
if (sb.length() > 0) { if (sb.length() > 0) {

View File

@@ -43,7 +43,6 @@ import forge.card.spellability.SpellAbility;
import forge.card.spellability.SpellAbilityRestriction; import forge.card.spellability.SpellAbilityRestriction;
import forge.control.input.InputPayDiscardCost; import forge.control.input.InputPayDiscardCost;
import forge.control.input.InputPayManaCostAbility; import forge.control.input.InputPayManaCostAbility;
import forge.control.input.InputPayManaCostUtil;
import forge.control.input.InputPayReturnCost; import forge.control.input.InputPayReturnCost;
import forge.control.input.InputPaySacCost; import forge.control.input.InputPaySacCost;
import forge.game.GameLossReason; import forge.game.GameLossReason;
@@ -1819,6 +1818,39 @@ public final class GameActionUtil {
} }
abilities.addAll(0, newAbilities); abilities.addAll(0, newAbilities);
newAbilities.clear(); newAbilities.clear();
} else if (keyword.startsWith("AlternateAdditionalCost")) {
String costString1 = keyword.split(":")[1];
String costString2 = keyword.split(":")[2];
for (SpellAbility sa : abilities) {
final SpellAbility newSA = sa.copy();
newSA.setBasicSpell(false);
newSA.setPayCosts(GameActionUtil.combineCosts(newSA, costString1));
newSA.setManaCost("");
final Cost cost1 = new Cost(source, costString1, false);
newSA.setDescription(sa.getDescription() + " (Additional cost " + cost1.toSimpleString() + ")");
ArrayList<String> newoacs = new ArrayList<String>();
newoacs.addAll(sa.getOptionalAdditionalCosts());
newSA.setOptionalAdditionalCosts(newoacs);
if (newSA.canPlay()) {
newAbilities.add(newAbilities.size(), newSA);
}
//second option
final SpellAbility newSA2 = sa.copy();
newSA2.setBasicSpell(false);
newSA2.setPayCosts(GameActionUtil.combineCosts(newSA2, costString2));
newSA2.setManaCost("");
final Cost cost2 = new Cost(source, costString2, false);
newSA2.setDescription(sa.getDescription() + " (Additional cost " + cost2.toSimpleString() + ")");
ArrayList<String> newoacs2 = new ArrayList<String>();
newoacs.addAll(sa.getOptionalAdditionalCosts());
newSA2.setOptionalAdditionalCosts(newoacs2);
if (newSA2.canPlay()) {
newAbilities.add(newAbilities.size(), newSA2);
}
}
abilities.clear();
abilities.addAll(0, newAbilities);
newAbilities.clear();
} }
} }

View File

@@ -253,9 +253,9 @@ public class CostReveal extends CostPartWithList {
this.done(); this.done();
} }
if (handList.size() + this.nReveal < nNeeded) { /*if (handList.size() + this.nReveal < nNeeded) {
this.stop(); this.stop();
} }*/
final StringBuilder type = new StringBuilder(""); final StringBuilder type = new StringBuilder("");
if (!discType.equals("Card")) { if (!discType.equals("Card")) {
type.append(" ").append(discType); type.append(" ").append(discType);