diff --git a/forge-game/src/main/java/forge/game/ability/AbilityUtils.java b/forge-game/src/main/java/forge/game/ability/AbilityUtils.java index ba5ae4da658..57613bb05dc 100644 --- a/forge-game/src/main/java/forge/game/ability/AbilityUtils.java +++ b/forge-game/src/main/java/forge/game/ability/AbilityUtils.java @@ -673,17 +673,18 @@ public class AbilityUtils { final SpellAbility root = sa.getRootAbility(); final String[] l = calcX[1].split("/"); final String m = CardFactoryUtil.extractOperators(calcX[1]); + final Object to = root.getTriggeringObject(AbilityKey.fromString(l[0])); Integer count = null; - if (calcX[0].endsWith("Max")) { + if (to instanceof Iterable) { @SuppressWarnings("unchecked") - Iterable numbers = (Iterable) root.getTriggeringObject(AbilityKey.fromString(l[0])); - for (Integer n : numbers) { - if (count == null || n > count) { - count = n; - } + Iterable numbers = (Iterable) to; + if (calcX[0].endsWith("Max")) { + count = Aggregates.max(numbers, Functions.identity()); + } else { + count = Aggregates.sum(numbers, Functions.identity()); } } else { - count = (Integer) root.getTriggeringObject(AbilityKey.fromString(l[0])); + count = (Integer) to; } val = doXMath(ObjectUtils.firstNonNull(count, 0), m, card, ability); diff --git a/forge-gui/res/cardsfolder/b/bloatfly_swarm.txt b/forge-gui/res/cardsfolder/b/bloatfly_swarm.txt index 8a6b2e6e175..9d9cbae841a 100644 --- a/forge-gui/res/cardsfolder/b/bloatfly_swarm.txt +++ b/forge-gui/res/cardsfolder/b/bloatfly_swarm.txt @@ -5,9 +5,10 @@ PT:0/0 K:Flying K:etbCounter:P1P1:5 R:Event$ DamageDone | ActiveZones$ Battlefield | ValidTarget$ Card.Self+counters_GE1_P1P1 | ReplaceWith$ Counters | PreventionEffect$ True | AlwaysReplace$ True | Description$ If damage would be dealt to CARDNAME while it has a +1/+1 counter on it, prevent that damage, remove that many +1/+1 counters it, then give each player a rad counter for each +1/+1 counter removed this way. -SVar:Counters:DB$ RemoveCounter | Defined$ ReplacedTarget | CounterType$ P1P1 | CounterNum$ Y | RememberRemoved$ True | SubAbility$ DBRadiation -SVar:DBRadiation:DB$ Radiation | Defined$ Player | Num$ Y | SubAbility$ DBCleanup +SVar:Counters:DB$ RemoveCounter | Defined$ ReplacedTarget | CounterType$ P1P1 | CounterNum$ Y | RememberAmount$ True | SubAbility$ DBRadiation +SVar:DBRadiation:DB$ Radiation | Defined$ Player | Num$ Z | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:Y:ReplaceCount$DamageAmount +SVar:Z:Count$RememberedNumber DeckHas:Ability$Counters Oracle:Flying\nBloatfly Swarm enters the battlefield with five +1/+1 counters on it.\nIf damage would be dealt to Bloatfly Swarm while it has a +1/+1 counter on it, prevent that damage, remove that many +1/+1 counters from it, then give each player a rad counter for each +1/+1 counter removed this way. diff --git a/forge-gui/res/cardsfolder/v/vexing_puzzlebox.txt b/forge-gui/res/cardsfolder/v/vexing_puzzlebox.txt index d04afe51704..73ce27632c9 100644 --- a/forge-gui/res/cardsfolder/v/vexing_puzzlebox.txt +++ b/forge-gui/res/cardsfolder/v/vexing_puzzlebox.txt @@ -2,7 +2,7 @@ Name:Vexing Puzzlebox ManaCost:3 Types:Artifact T:Mode$ RolledDieOnce | TriggerZones$ Battlefield | ValidPlayer$ You | Execute$ TrigPutCounter | TriggerDescription$ Whenever you roll one or more dice, put a number of charge counters on CARDNAME equal to the result. -SVar:DiceResult:TriggerCountMax$Result +SVar:DiceResult:TriggerCount$Result SVar:TrigPutCounter:DB$ PutCounter | CounterType$ CHARGE | CounterNum$ DiceResult A:AB$ Mana | Cost$ T | Produced$ Any | SubAbility$ DBRollDice | SpellDescription$ Add one mana of any color. Roll a d20. SVar:DBRollDice:DB$ RollDice | Sides$ 20