From f217cab0b935c2024a82ead1e9d7a1b0e4932b34 Mon Sep 17 00:00:00 2001 From: Northmoc Date: Fri, 13 Nov 2020 10:27:39 -0500 Subject: [PATCH 1/3] wheel_of_misfortune.txt --- .../res/cardsfolder/upcoming/wheel_of_misfortune.txt | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 forge-gui/res/cardsfolder/upcoming/wheel_of_misfortune.txt diff --git a/forge-gui/res/cardsfolder/upcoming/wheel_of_misfortune.txt b/forge-gui/res/cardsfolder/upcoming/wheel_of_misfortune.txt new file mode 100644 index 00000000000..2becc56d26f --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/wheel_of_misfortune.txt @@ -0,0 +1,10 @@ +Name:Wheel of Misfortune +ManaCost:2 R +Types:Sorcery +A:SP$ ChooseNumber | Cost$ 2 R | Defined$ Player | SecretlyChoose$ True | Highest$ DBLoseLife | NotLowest$ DBDiscard | AILogic$ HighestLoseLife | StackDescription$ SpellDescription | SpellDescription$ Each player secretly chooses a number 0 or greater, then all players reveal those numbers simultaneously and determine the highest and lowest numbers revealed this way. CARDNAME deals damage equal to the highest number to each player who chose that number. Each player who didn’t choose the lowest number discards their hand, then draws seven cards. +SVar:DBLoseLife:DB$ DealDamage | Defined$ Remembered | References$ X | NumDmg$ X +SVar:X:Count$ChosenNumber +SVar:DBDiscard:DB$ Discard | Defined$ Player.IsRemembered | Mode$ Hand | SubAbility$ DBDraw +SVar:DBDraw:DB$ Draw | Defined$ Remembered | NumCards$ 7 +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +Oracle:Each player secretly chooses a number 0 or greater, then all players reveal those numbers simultaneously and determine the highest and lowest numbers revealed this way. Wheel of Misfortune deals damage equal to the highest number to each player who chose that number. Each player who didn’t choose the lowest number discards their hand, then draws seven cards. From 8f4fbcf8052343979dedfe044f5fbfc29b6c54c1 Mon Sep 17 00:00:00 2001 From: Northmoc Date: Fri, 13 Nov 2020 10:28:25 -0500 Subject: [PATCH 2/3] HighestLoseLife AI support --- forge-ai/src/main/java/forge/ai/AiController.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/forge-ai/src/main/java/forge/ai/AiController.java b/forge-ai/src/main/java/forge/ai/AiController.java index e6e4f8ee169..f3b430aab70 100644 --- a/forge-ai/src/main/java/forge/ai/AiController.java +++ b/forge-ai/src/main/java/forge/ai/AiController.java @@ -1762,6 +1762,8 @@ public class AiController { return Math.max(remaining, min) / 2; } else if ("LowestLoseLife".equals(logic)) { return MyRandom.getRandom().nextInt(Math.min(player.getLife() / 3, player.getWeakestOpponent().getLife())) + 1; + } else if ("HighestLoseLife".equals(logic)) { + return MyRandom.getRandom().nextInt(Math.max(player.getLife() / 3, player.getWeakestOpponent().getLife())) + 1; } else if ("HighestGetCounter".equals(logic)) { return MyRandom.getRandom().nextInt(3); } else if (source.hasSVar("EnergyToPay")) { From 028465148888585087e1ab0bc3154349a1052116 Mon Sep 17 00:00:00 2001 From: Northmoc Date: Fri, 13 Nov 2020 10:29:07 -0500 Subject: [PATCH 3/3] NotLowest param support --- .../java/forge/game/ability/AbilityFactory.java | 2 +- .../ability/effects/ChooseNumberEffect.java | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/forge-game/src/main/java/forge/game/ability/AbilityFactory.java b/forge-game/src/main/java/forge/game/ability/AbilityFactory.java index f388eb60c1c..ab7bff7ac30 100644 --- a/forge-game/src/main/java/forge/game/ability/AbilityFactory.java +++ b/forge-game/src/main/java/forge/game/ability/AbilityFactory.java @@ -46,7 +46,7 @@ public final class AbilityFactory { static final List additionalAbilityKeys = Lists.newArrayList( "WinSubAbility", "OtherwiseSubAbility", // Clash - "ChooseNumberSubAbility", "Lowest", "Highest", // ChooseNumber + "ChooseNumberSubAbility", "Lowest", "Highest", "NotLowest", // ChooseNumber "HeadsSubAbility", "TailsSubAbility", "LoseSubAbility", // FlipCoin "TrueSubAbility", "FalseSubAbility", // Branch "ChosenPile", "UnchosenPile", // MultiplePiles & TwoPiles diff --git a/forge-game/src/main/java/forge/game/ability/effects/ChooseNumberEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ChooseNumberEffect.java index d54b3579625..986ddf51fd9 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ChooseNumberEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ChooseNumberEffect.java @@ -125,6 +125,23 @@ public class ChooseNumberEffect extends SpellAbilityEffect { card.clearRemembered(); } } + + if (sa.hasParam("NotLowest")) { + List notLowestNum = Lists.newArrayList(); + for (Player p : chooseMap.keySet()) { + if (!lowestNum.contains(p)) { + notLowestNum.add(p); + } + } + AbilitySub sub = sa.getAdditionalAbility("NotLowest"); + + for (Player p : notLowestNum) { + card.addRemembered(p); + AbilityUtils.resolve(sub); + card.clearRemembered(); + } + } + if (sa.hasParam("Highest")) { AbilitySub sub = sa.getAdditionalAbility("Highest");