diff --git a/forge-game/src/main/java/forge/game/ability/effects/CharmEffect.java b/forge-game/src/main/java/forge/game/ability/effects/CharmEffect.java index 2c313aa97e1..ce205b9e718 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/CharmEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/CharmEffect.java @@ -81,6 +81,34 @@ public class CharmEffect extends SpellAbilityEffect { return sb.toString(); } + public static String makeFormatedDescription(SpellAbility sa) { + int num = Integer.parseInt(sa.getParamOrDefault("CharmNum", "1")); + int min = Integer.parseInt(sa.getParamOrDefault("MinCharmNum", String.valueOf(num))); + boolean repeat = sa.hasParam("CanRepeatModes"); + + List list = CharmEffect.makePossibleOptions(sa); + + StringBuilder sb = new StringBuilder("Choose "); + if (num == min) { + sb.append(Lang.getNumeral(num)); + } else { + sb.append(Lang.getNumeral(min)).append(" or ").append(list.size() == 2 ? "both" : "more"); + } + + if (repeat) { + sb.append(". You may choose the same mode more than once."); + } + + if (!list.isEmpty()) { + sb.append(" \u2014\r\n"); + for (AbilitySub sub : list) { + sb.append("\u2022 ").append(sub.getParam("SpellDescription")); + sb.append("\r\n"); + } + } + return sb.toString(); + } + @Override public void resolve(SpellAbility sa) { // all chosen modes have been chained as subabilities to this sa. 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 08285377ebe..d05bddb0372 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -32,6 +32,7 @@ import forge.game.*; import forge.game.ability.AbilityFactory; import forge.game.ability.AbilityUtils; import forge.game.ability.ApiType; +import forge.game.ability.effects.CharmEffect; import forge.game.card.CardPredicates.Presets; import forge.game.combat.AttackingBand; import forge.game.combat.Combat; @@ -1901,30 +1902,7 @@ public class Card extends GameEntity implements Comparable { //Determine if a card has multiple choices, then format it in an easier to read list. if (ApiType.Charm.equals(sa.getApi())) { - // Only split once! Otherwise some Charm spells looks broken - final String[] splitElemText = elementText.split("-", 2); - final String chooseText = splitElemText[0].trim(); - final String[] choices = splitElemText.length > 1 ? splitElemText[1].split(";") : null; - - sb.append(chooseText); - - if (choices != null) { - sb.append(" \u2014\r\n"); - for (int i = 0; i < choices.length; i++) { - String choice = choices[i].trim(); - - if (choice.startsWith("Or ") || choice.startsWith("or ")) { - choice = choice.substring(3); - } - - sb.append("\u2022 ").append(Character.toUpperCase(choice.charAt(0))) - .append(choice.substring(1)); - if (i < choices.length - 1) { - sb.append("."); - } - sb.append("\r\n"); - } - } + sb.append(CharmEffect.makeFormatedDescription(sa)); } else { sb.append(elementText).append("\r\n"); }