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 88098689550..ef8dfcba924 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 @@ -150,14 +150,14 @@ public class CharmEffect extends SpellAbilityEffect { return ""; } - public static void makeChoices(SpellAbility sa) { + public static boolean makeChoices(SpellAbility sa) { //this resets all previous choices sa.setSubAbility(null); // Entwine does use all Choices if (sa.isEntwine()) { chainAbilities(sa, makePossibleOptions(sa)); - return; + return true; } final int num = sa.hasParam("CharmNumOnResolve") ? @@ -181,6 +181,7 @@ public class CharmEffect extends SpellAbilityEffect { List chosen = chooser.getController().chooseModeForAbility(sa, min, num, sa.hasParam("CanRepeatModes")); chainAbilities(sa, chosen); + return chosen != null && !chosen.isEmpty(); } private static void chainAbilities(SpellAbility sa, List chosen) { diff --git a/forge-game/src/main/java/forge/game/card/CardFactory.java b/forge-game/src/main/java/forge/game/card/CardFactory.java index 9a9f08e1551..82db7497427 100644 --- a/forge-game/src/main/java/forge/game/card/CardFactory.java +++ b/forge-game/src/main/java/forge/game/card/CardFactory.java @@ -25,8 +25,6 @@ import forge.card.mana.ManaCost; import forge.game.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.cost.Cost; import forge.game.player.Player; import forge.game.replacement.ReplacementHandler; @@ -680,9 +678,6 @@ public class CardFactory { } trig.setStackDescription(trig.toString()); - if (trig.getApi() == ApiType.Charm && !trig.isWrapper()) { - CharmEffect.makeChoices(trig); - } WrappedAbility wrapperAbility = new WrappedAbility(t, trig, ((WrappedAbility) sa).getDecider()); wrapperAbility.setTrigger(true); diff --git a/forge-game/src/main/java/forge/game/trigger/TriggerHandler.java b/forge-game/src/main/java/forge/game/trigger/TriggerHandler.java index 308b373411d..6d10443816a 100644 --- a/forge-game/src/main/java/forge/game/trigger/TriggerHandler.java +++ b/forge-game/src/main/java/forge/game/trigger/TriggerHandler.java @@ -636,7 +636,10 @@ public class TriggerHandler { sa.setStackDescription(sa.toString()); if (sa.getApi() == ApiType.Charm && !sa.isWrapper()) { - CharmEffect.makeChoices(sa); + if (!CharmEffect.makeChoices(sa)) { + // 603.3c If no mode is chosen, the ability is removed from the stack. + return; + } } Player decider = null;