diff --git a/.gitattributes b/.gitattributes index ae8322ab252..e440c943d63 100644 --- a/.gitattributes +++ b/.gitattributes @@ -14087,6 +14087,7 @@ forge-gui/res/cardsfolder/t/task_force.txt svneol=native#text/plain forge-gui/res/cardsfolder/t/task_mage_assembly.txt svneol=native#text/plain forge-gui/res/cardsfolder/t/taste_for_mayhem.txt svneol=native#text/plain forge-gui/res/cardsfolder/t/taste_of_blood.txt svneol=native#text/plain +forge-gui/res/cardsfolder/t/taste_of_paradise.txt -text forge-gui/res/cardsfolder/t/tatsumasa_the_dragons_fang.txt -text forge-gui/res/cardsfolder/t/tattered_drake.txt svneol=native#text/plain forge-gui/res/cardsfolder/t/tatterkite.txt svneol=native#text/plain diff --git a/forge-game/src/main/java/forge/game/card/Card.java b/forge-game/src/main/java/forge/game/card/Card.java index 7cd988f18f3..1fcb5edba72 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -1785,8 +1785,7 @@ public class Card extends GameEntity implements Comparable { || keyword.startsWith("May be played") || keyword.startsWith("Conspire") || keyword.startsWith("Cascade") || keyword.startsWith("Wither") || (keyword.startsWith("Epic") && !sb.toString().contains("Epic")) - || (keyword.startsWith("Split second") && !sb.toString().contains("Split second")) - || (keyword.startsWith("Multikicker") && !sb.toString().contains("Multikicker"))) { + || (keyword.startsWith("Split second") && !sb.toString().contains("Split second"))) { sb.append(keyword).append("\r\n"); } else if (keyword.equals("You may cast CARDNAME as though it had flash if you pay 2 more to cast it.")) { @@ -1818,6 +1817,11 @@ public class Card extends GameEntity implements Comparable { sb.append("Entwine ").append(cost.toSimpleString()); sb.append(" (Choose both if you pay the entwine cost.)"); sb.append("\r\n"); + } else if (keyword.startsWith("Multikicker")) { + if (!keyword.endsWith("Generic")) { + final Cost cost = new Cost(keyword.substring(7), false); + sb.append("Multikicker " + cost.toSimpleString() + "\r\n"); + } } else if (keyword.startsWith("Kicker")) { if (!keyword.endsWith("Generic")) { final Cost cost = new Cost(keyword.substring(7), false); diff --git a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java index 1e771c0b586..4a77a511420 100644 --- a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java +++ b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java @@ -1372,6 +1372,9 @@ public class CardFactoryUtil { if (sq[0].contains("TimesKicked")) { return doXMath(c.getKickerMagnitude(), m, c); } + if (sq[0].contains("TimesPseudokicked")) { + return doXMath(c.getPseudoKickerMagnitude(), m, c); + } // Count$IfMainPhase.. // 7/10 if (sq[0].contains("IfMainPhase")) { @@ -2107,10 +2110,14 @@ public class CardFactoryUtil { for (String keyword : card.getKeywords()) { if (keyword.startsWith("Multikicker")) { final String[] k = keyword.split("kicker "); - + String mkCost = k[1].split(":")[0]; final SpellAbility sa = card.getFirstSpellAbility(); - sa.setMultiKickerManaCost(new ManaCost(new ManaCostParser(k[1]))); - sa.addAnnounceVar("Multikicker"); + sa.setMultiKickerManaCost(new ManaCost(new ManaCostParser(mkCost))); + if (k[1].endsWith("Generic")) { + sa.addAnnounceVar("Pseudo-multikicker"); + } else { + sa.addAnnounceVar("Multikicker"); + } } else if (keyword.startsWith("Replicate")) { card.getFirstSpellAbility().addAnnounceVar("Replicate"); diff --git a/forge-gui/res/cardsfolder/t/taste_of_paradise.txt b/forge-gui/res/cardsfolder/t/taste_of_paradise.txt new file mode 100644 index 00000000000..db5897f2d95 --- /dev/null +++ b/forge-gui/res/cardsfolder/t/taste_of_paradise.txt @@ -0,0 +1,10 @@ +Name:Taste of Paradise +ManaCost:3 G +Types:Sorcery +Text:As an additional cost to cast Taste of Paradise, you may pay {1}{G} any number of times. +K:Multikicker 1 G : Generic +A:SP$ GainLife | Cost$ 3 G | Defined$ You | LifeAmount$ Y | References$ X,Y | SpellDescription$ You gains 3 life plus an additional 3 life for each additional {1}{G} you paid. +SVar:Y:SVar$X/Plus.3 +SVar:X:Count$TimesPseudokicked/Times.3 +SVar:Picture:http://www.wizards.com/global/images/magic/general/taste_of_paradise.jpg +Oracle:As an additional cost to cast Taste of Paradise, you may pay {1}{G} any number of times.\nYou gain 3 life plus an additional 3 life for each additional {1}{G} you paid. diff --git a/forge-gui/src/main/java/forge/player/HumanPlay.java b/forge-gui/src/main/java/forge/player/HumanPlay.java index 59782a5283b..d8385717d4a 100644 --- a/forge-gui/src/main/java/forge/player/HumanPlay.java +++ b/forge-gui/src/main/java/forge/player/HumanPlay.java @@ -743,6 +743,14 @@ public class HumanPlay { } } + int timesPseudokicked = source.getPseudoKickerMagnitude(); + if (timesPseudokicked > 0 && ability.isAnnouncing("Pseudo-multikicker")) { + ManaCost mkCost = ability.getMultiKickerManaCost(); + for (int i = 0; i < timesPseudokicked; i++) { + toPay.addManaCost(mkCost); + } + } + Integer replicate = ability.getSVarInt("Replicate"); if (replicate != null) { ManaCost rCost = source.getManaCost(); diff --git a/forge-gui/src/main/java/forge/player/HumanPlaySpellAbility.java b/forge-gui/src/main/java/forge/player/HumanPlaySpellAbility.java index 370d379442e..b5e2695829e 100644 --- a/forge-gui/src/main/java/forge/player/HumanPlaySpellAbility.java +++ b/forge-gui/src/main/java/forge/player/HumanPlaySpellAbility.java @@ -239,6 +239,8 @@ public class HumanPlaySpellAbility { ability.setSVar(varName, value.toString()); if ("Multikicker".equals(varName)) { card.setKickerMagnitude(value); + } else if ("Pseudo-multikicker".equals(varName)) { + card.setPseudoMultiKickerMagnitude(value); } else { card.setSVar(varName, value.toString());