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")) { 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"); 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.