diff --git a/forge-game/src/main/java/forge/game/ability/effects/ChooseCardEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ChooseCardEffect.java index 58c6141c8b0..af29e46cf5e 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ChooseCardEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ChooseCardEffect.java @@ -203,6 +203,18 @@ public class ChooseCardEffect extends SpellAbilityEffect { chosenPool.add(choice); } chosen.addAll(chosenPool); + } else if (sa.hasParam("ControlAndNot")) { + String title = sa.hasParam("ChoiceTitle") ? sa.getParam("ChoiceTitle") : Localizer.getInstance().getMessage("lblChooseCreature"); + // Targeted player (p) chooses N creatures that belongs to them + CardCollection tgtPlayerCtrl = CardLists.filterControlledBy(choices, p); + chosen.addAll(p.getController().chooseCardsForEffect(tgtPlayerCtrl, sa, title + " " + "you control", minAmount, validAmount, + !sa.hasParam("Mandatory"), null)); + // Targeted player (p) chooses N creatures that don't belong to them + CardCollection notTgtPlayerCtrl = new CardCollection(choices); + notTgtPlayerCtrl.removeAll(tgtPlayerCtrl); + chosen.addAll(p.getController().chooseCardsForEffect(notTgtPlayerCtrl, sa, title + " " + "you don't control", minAmount, validAmount, + !sa.hasParam("Mandatory"), null)); + } else if ((tgt == null) || p.canBeTargetedBy(sa)) { if (sa.hasParam("AtRandom") && !choices.isEmpty()) { Aggregates.random(choices, validAmount, chosen); @@ -233,8 +245,13 @@ public class ChooseCardEffect extends SpellAbilityEffect { } } } - if (sa.hasParam("Reveal")) { - game.getAction().reveal(chosen, p, true, Localizer.getInstance().getMessage("lblChosenCards") + " "); + if (sa.hasParam("Reveal") && !sa.hasParam("SecretlyChoose")) { + game.getAction().reveal(chosen, p, true, sa.hasParam("RevealTitle") ? sa.getParam("RevealTitle") : Localizer.getInstance().getMessage("lblChosenCards") + " "); + } + } + if(sa.hasParam("Reveal") && sa.hasParam("SecretlyChoose")) { + for (final Player p : tgtPlayers) { + game.getAction().reveal(chosen, p, true, sa.hasParam("RevealTitle") ? sa.getParam("RevealTitle") : Localizer.getInstance().getMessage("lblChosenCards") + " "); } } host.setChosenCards(chosen); diff --git a/forge-gui/res/cardsfolder/upcoming/call_to_the_void.txt b/forge-gui/res/cardsfolder/upcoming/call_to_the_void.txt new file mode 100644 index 00000000000..1d3cdcd9124 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/call_to_the_void.txt @@ -0,0 +1,6 @@ +Name:Call to the Void +ManaCost:4 B +Types:Sorcery +A:SP$ ChooseCard | Defined$ Player | Choices$ Creature | SecretlyChoose$ True | Amount$ 1 | ControlAndNot$ True | ChoiceTitle$ Secretly choose a creature | Reveal$ True | RevealTitle$ OVERRIDE Chosen creatures. They will be destroyed. | SubAbility$ DBDestroyChosen | Mandatory$ True +SVar:DBDestroyChosen:DB$ DestroyAll | ValidCards$ Creature.ChosenCard +Oracle:Each player secretly chooses a creature they control and a creature they don't control. Then those choices are revealed. Destroy each creature chosen this way.