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 76d5c2020e0..7b4a35f8c3a 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 @@ -13,7 +13,9 @@ import forge.game.player.Player; import forge.game.spellability.AbilitySub; import forge.game.spellability.SpellAbility; import forge.util.Aggregates; +import forge.util.CardTranslation; import forge.util.Lang; +import forge.util.Localizer; import forge.util.collect.FCollection; public class CharmEffect extends SpellAbilityEffect { @@ -65,6 +67,7 @@ public class CharmEffect extends SpellAbilityEffect { } final int min = sa.hasParam("MinCharmNum") ? AbilityUtils.calculateAmount(source, sa.getParamOrDefault("MinCharmNum", "1"), sa) : num; + boolean optional = sa.hasParam("Optional"); boolean repeat = sa.hasParam("CanRepeatModes"); boolean random = sa.hasParam("Random"); boolean limit = sa.hasParam("ActivationLimit"); @@ -107,7 +110,11 @@ public class CharmEffect extends SpellAbilityEffect { } if (additionalDesc) { - sb.append(" ").append(sa.getParam("AdditionalDescription").trim()); + if (optional) { + sb.append(". ").append(sa.getParam("AdditionalDescription").trim()); + } else { + sb.append(" ").append(sa.getParam("AdditionalDescription").trim()); + } } if (!list.isEmpty()) { @@ -158,6 +165,11 @@ public class CharmEffect extends SpellAbilityEffect { return false; } + boolean isOptional = sa.hasParam("Optional"); + if (isOptional && !activator.getController().confirmAction(sa, null, Localizer.getInstance().getMessage("lblWouldYouLikeCharm", CardTranslation.getTranslatedName(source.getName())))) { + return false; + } + if (sa.hasParam("Random")) { chainAbilities(sa, Aggregates.random(choices, num)); return true;