diff --git a/forge-game/src/main/java/forge/game/ability/SpellAbilityEffect.java b/forge-game/src/main/java/forge/game/ability/SpellAbilityEffect.java index 4c9ce9f09fa..27a0c9c575f 100644 --- a/forge-game/src/main/java/forge/game/ability/SpellAbilityEffect.java +++ b/forge-game/src/main/java/forge/game/ability/SpellAbilityEffect.java @@ -6,6 +6,7 @@ import java.util.Map; import java.util.Set; import java.util.StringTokenizer; +import forge.util.lang.LangEnglish; import org.apache.commons.lang3.StringUtils; import com.google.common.collect.Iterables; @@ -80,14 +81,34 @@ public abstract class SpellAbilityEffect { // Own description String stackDesc = params.get("StackDescription"); if (stackDesc != null) { + String[] reps = null; + if (stackDesc.startsWith("REP")) { + reps = stackDesc.substring(4).split(" & "); + stackDesc = "SpellDescription"; + } // by typing "SpellDescription" they want to bypass the Effect's string builder if ("SpellDescription".equalsIgnoreCase(stackDesc)) { - if (params.get("SpellDescription") != null) { - sb.append(CardTranslation.translateSingleDescriptionText(params.get("SpellDescription"), sa.getHostCard().getName())); - } - if (sa.getTargets() != null && !sa.getTargets().isEmpty()) { - sb.append(" (Targeting: ").append(sa.getTargets()).append(")"); - } + if (params.get("SpellDescription") != null) { + String spellDesc = CardTranslation.translateSingleDescriptionText(params.get("SpellDescription"), + sa.getHostCard().getName()); + if (Lang.getInstance() instanceof LangEnglish && reps != null) { + for (String s : reps) { + String[] rep = s.split("_",2); + spellDesc = spellDesc.replaceFirst(rep[0], rep[1]); + } + } + if (spellDesc.contains("(")) { //trim reminder text from StackDesc + spellDesc = spellDesc.substring(0, spellDesc.indexOf("(") - 1); + } + if (reps == null) { + sb.append(spellDesc); + } else { + tokenizeString(sa, sb, spellDesc); + } + } + if (sa.getTargets() != null && !sa.getTargets().isEmpty() && reps == null) { + sb.append(" (Targeting: ").append(Lang.joinHomogenous(sa.getTargets())).append(")"); + } } else if (!"None".equalsIgnoreCase(stackDesc)) { // by typing "none" they want to suppress output tokenizeString(sa, sb, stackDesc); } diff --git a/forge-gui/res/cardsfolder/a/alchemists_gift.txt b/forge-gui/res/cardsfolder/a/alchemists_gift.txt index 5797814a6fb..896d166575a 100644 --- a/forge-gui/res/cardsfolder/a/alchemists_gift.txt +++ b/forge-gui/res/cardsfolder/a/alchemists_gift.txt @@ -1,6 +1,6 @@ Name:Alchemist's Gift ManaCost:B Types:Instant -A:SP$ Pump | ValidTgts$ Creature | NumAtt$ +1 | NumDef$ +1 | KWChoice$ Deathtouch,Lifelink | StackDescription$ {c:Targeted} gets +1/+1 and gains your choice of deathtouch or lifelink until end of turn. | SpellDescription$ Target creature gets +1/+1 and gains your choice of deathtouch or lifelink until end of turn. (Any amount of damage a creature with deathtouch deals to a creature is enough to destroy it. Damage dealt by a creature with lifelink also causes its controller to gain that much life.) +A:SP$ Pump | ValidTgts$ Creature | NumAtt$ +1 | NumDef$ +1 | KWChoice$ Deathtouch,Lifelink | StackDescription$ REP Target creature_{c:Targeted} & your_{p:You}'s | SpellDescription$ Target creature gets +1/+1 and gains your choice of deathtouch or lifelink until end of turn. (Any amount of damage a creature with deathtouch deals to a creature is enough to destroy it. Damage dealt by a creature with lifelink also causes its controller to gain that much life.) DeckHas:Ability$LifeGain Oracle:Target creature gets +1/+1 and gains your choice of deathtouch or lifelink until end of turn. (Any amount of damage a creature with deathtouch deals to a creature is enough to destroy it. Damage dealt by a creature with lifelink also causes its controller to gain that much life.) diff --git a/forge-gui/res/cardsfolder/f/fists_of_flame.txt b/forge-gui/res/cardsfolder/f/fists_of_flame.txt index 06b7a92609c..db175276cbc 100644 --- a/forge-gui/res/cardsfolder/f/fists_of_flame.txt +++ b/forge-gui/res/cardsfolder/f/fists_of_flame.txt @@ -1,7 +1,7 @@ Name:Fists of Flame ManaCost:1 R Types:Instant -A:SP$ Draw | Cost$ 1 R | NumCards$ 1 | SubAbility$ DBPump | SpellDescription$ Draw a card. Until end of turn, target creature gains trample and gets +1/+0 for each card you've drawn this turn. -SVar:DBPump:DB$ Pump | ValidTgts$ Creature | KW$ Trample | NumAtt$ +X +A:SP$ Draw | NumCards$ 1 | SubAbility$ DBPump | SpellDescription$ Draw a card. +SVar:DBPump:DB$ Pump | ValidTgts$ Creature | KW$ Trample | NumAtt$ +X | StackDescription$ REP target creature_{c:Targeted} | SpellDescription$ Until end of turn, target creature gains trample and gets +1/+0 for each card you've drawn this turn. SVar:X:Count$YouDrewThisTurn Oracle:Draw a card. Until end of turn, target creature gains trample and gets +1/+0 for each card you've drawn this turn. diff --git a/forge-gui/res/cardsfolder/p/part_water.txt b/forge-gui/res/cardsfolder/p/part_water.txt index 35461b85414..47650da3548 100644 --- a/forge-gui/res/cardsfolder/p/part_water.txt +++ b/forge-gui/res/cardsfolder/p/part_water.txt @@ -1,7 +1,7 @@ Name:Part Water ManaCost:X X U Types:Sorcery -A:SP$ Pump | Cost$ X X U | KW$ Islandwalk | TargetMin$ X | TargetMax$ X | ValidTgts$ Creature | TgtPrompt$ Select X target creatures | StackDescription$ X target creatures [{c:Targeted}] gain islandwalk until end of turn. | SpellDescription$ X target creatures gain islandwalk until end of turn. (They can't be blocked as long as defending player controls an Island.) +A:SP$ Pump | KW$ Islandwalk | TargetMin$ X | TargetMax$ X | ValidTgts$ Creature | TgtPrompt$ Select X target creatures | StackDescription$ SpellDescription | SpellDescription$ X target creatures gain islandwalk until end of turn. (They can't be blocked as long as defending player controls an Island.) SVar:X:Count$xPaid AI:RemoveDeck:Random DeckHas:Keyword$IslandWalk