From 66ce27593b939981528a6e47850c4f5a0f54fd1c Mon Sep 17 00:00:00 2001 From: Northmoc Date: Tue, 25 May 2021 13:57:33 -0400 Subject: [PATCH] add support for multiple called flips to FlipCoinEffect --- .../game/ability/effects/FlipCoinEffect.java | 48 ++++++++++++++++--- 1 file changed, 42 insertions(+), 6 deletions(-) diff --git a/forge-game/src/main/java/forge/game/ability/effects/FlipCoinEffect.java b/forge-game/src/main/java/forge/game/ability/effects/FlipCoinEffect.java index 1d37fc3c82b..ba450a6295f 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/FlipCoinEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/FlipCoinEffect.java @@ -62,8 +62,12 @@ public class FlipCoinEffect extends SpellAbilityEffect { final boolean noCall = sa.hasParam("NoCall"); String varName = sa.hasParam("SaveNumFlipsToSVar") ? sa.getParam("SaveNumFlipsToSVar") : "X"; boolean victory = false; + int amount = 1; + if (sa.hasParam("Amount")) { + amount = AbilityUtils.calculateAmount(host, sa.getParam("Amount"), sa); + } - if (!noCall) { + if ((!noCall) && (amount == 1)) { flipMultiplier = getFilpMultiplier(caller.get(0)); victory = flipCoinCall(caller.get(0), sa, flipMultiplier, varName); } @@ -77,11 +81,6 @@ public class FlipCoinEffect extends SpellAbilityEffect { int countHeads = 0; int countTails = 0; - int amount = 1; - if (sa.hasParam("Amount")) { - amount = AbilityUtils.calculateAmount(host, sa.getParam("Amount"), sa); - } - for(int i = 0; i < amount; ++i) { final boolean resultIsHeads = flipCoinNoCall(sa, flipper, flipMultiplier, varName); @@ -113,6 +112,43 @@ public class FlipCoinEffect extends SpellAbilityEffect { AbilityUtils.resolve(sub); } } + } else if (amount > 1){ + flipMultiplier = getFilpMultiplier(flipper); + + int countWins = 0; + int countLosses = 0; + + for(int i = 0; i < amount; ++i) { + final boolean win = flipCoinCall(caller.get(0), sa, flipMultiplier, varName); + + if (win) { + countWins++; + } else { + countLosses++; + } + } + if (countWins > 0) { + SpellAbility sub = sa.getAdditionalAbility("WinSubAbility"); + if (sub != null) { + sub.setSVar("Wins", "Number$" + countWins); + AbilityUtils.resolve(sub); + } + } + if (countLosses > 0) { + SpellAbility sub = sa.getAdditionalAbility("LoseSubAbility"); + if (sub != null) { + sub.setSVar("Losses", "Number$" + countLosses); + AbilityUtils.resolve(sub); + } + } + if (sa.hasParam("RememberNumber")) { + String toRemember = sa.getParam("RememberNumber"); + if (toRemember.startsWith("Win")) { + host.addRemembered(countWins); + } else if (toRemember.startsWith("Loss")) { + host.addRemembered(countLosses); + } + } } else { if (victory) { if (sa.getParam("RememberWinner") != null) {