Ok, so I know this topic pretty much beaten to death, but I've been playing around with the Powercards API script a bit lately and was reminded of your multi-attack problem. Lo and behold, I come back here and see that you have a Pro subscription and could therefore install scripts! The Powercards script is pretty flexible, allowing for limited conditional syntax and [even more limited] re-use of rolls. Using Powercards can allow you to roll attacks and damage for exactly the right number of berserkers summoned by the Horn of Valhalla, and also automatically roll the crit damage for only the rolls that actually critted (so you don't have to scan the output and click the api buttons separately anymore). It all happens with one command and two queries (#Attacks & Norm/Adv/DisAdv). Powercards is available for 1-click install, and commands can be run from either Collections macros or Character abilities. There are a couple ways to do it: the easier way (gets almost perfect but is a bit faster adn requires less code) and the more complex way (which has superior formatting but is a little bit slower and a lot more code). Note that neither of these methods can perform a sum of total damage rolls, due to the annoying way inline rolls are processed in Roll20. So, if you want the math done for you, you still gotta use something like we already discussed. Here is the Powercards Wiki, which explains the bazillion commands available. Get your Ctrl-F find text skills handy if you want to dig deeper into what I've included below :). The easier way This method takes advantage of the "Repeat" modifier (<Name>#<number of times to repeat>) to perform an arbitrary number of attacks. How many are possible? I have no idea, but I accidentally repeated damage 900 times once (!) and it didn't break anything, so there's that. As you can see, the syntax is pretty compact. That is, until we start testing for the crits. We are using conditionals based on the repeated RollIDs , but have to explicitly check up to how many attacks you want to allow. Any attack RollIDs beyond what we actually have are just ignored. As you can see from the sample output, we're almost there. The only problem is that when using the repeat modifier, the row titles do not give the index of the attack roll. So no "Attack 1, Attack 2...etc". The example below is for 25 attacks with advantage, resulting in 4 crits (again, with no extra clicks). Here's the Input. !power {{
--name|The Horde Attacks!!!
--leftsub|Horn of Valhalla
--rightsub|Melee Range
--Attack#?{Number of attacks|1}|[[ [$Atk] ?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5 ]] Damage = [[ 1d12 + 3 ]]
--?? ?{Roll} == 1d20 ?? ^3Roll Mode:| Normal
--?? ?{Roll} == 2d20kh1 ?? ^3Roll Mode:| Advantage
--?? ?{Roll} == 2d20kl1 ?? ^3Roll Mode:| Disadvantage
--?? $Atk_1.base == 20 ?? Crit dam (Attack 1):| [[1d12]]
--?? $Atk_2.base == 20 ?? Crit dam (Attack 2):| [[1d12]]
--?? $Atk_3.base == 20 ?? Crit dam (Attack 3):| [[1d12]]
--?? $Atk_4.base == 20 ?? Crit dam (Attack 4):| [[1d12]]
--?? $Atk_5.base == 20 ?? Crit dam (Attack 5):| [[1d12]]
--?? $Atk_6.base == 20 ?? Crit dam (Attack 6):| [[1d12]]
--?? $Atk_7.base == 20 ?? Crit dam (Attack 7):| [[1d12]]
--?? $Atk_8.base == 20 ?? Crit dam (Attack 8):| [[1d12]]
--?? $Atk_9.base == 20 ?? Crit dam (Attack 9):| [[1d12]]
--?? $Atk_10.base == 20 ?? Crit dam (Attack 10):| [[1d12]]
--?? $Atk_11.base == 20 ?? Crit dam (Attack 11):| [[1d12]]
--?? $Atk_12.base == 20 ?? Crit dam (Attack 12):| [[1d12]]
--?? $Atk_13.base == 20 ?? Crit dam (Attack 13):| [[1d12]]
--?? $Atk_14.base == 20 ?? Crit dam (Attack 14):| [[1d12]]
--?? $Atk_15.base == 20 ?? Crit dam (Attack 15):| [[1d12]]
--?? $Atk_16.base == 20 ?? Crit dam (Attack 16):| [[1d12]]
--?? $Atk_17.base == 20 ?? Crit dam (Attack 17):| [[1d12]]
--?? $Atk_18.base == 20 ?? Crit dam (Attack 18):| [[1d12]]
--?? $Atk_19.base == 20 ?? Crit dam (Attack 19):| [[1d12]]
--?? $Atk_20.base == 20 ?? Crit dam (Attack 20):| [[1d12]]
--?? $Atk_21.base == 20 ?? Crit dam (Attack 21):| [[1d12]]
--?? $Atk_22.base == 20 ?? Crit dam (Attack 22):| [[1d12]]
--?? $Atk_23.base == 20 ?? Crit dam (Attack 23):| [[1d12]]
--?? $Atk_24.base == 20 ?? Crit dam (Attack 24):| [[1d12]]
--?? $Atk_25.base == 20 ?? Crit dam (Attack 25):| [[1d12]]
}} The more complex way This method is very similar to the above, except here we are able to add the Attack number identifier to the row captions in the resulting chat window. This requires us to ask for the number of rolls, then use a combination of conditional logic and brute force hardcoding to perform up to 25 attacks. You may also note that the conditional expressions for the critical damage entries need an extra qualifier, since this method is always making all 25 attacks, but only displaying the relevant ones. Without the additional critical damage conditional, it may output crit damage for attack 24 even though only 10 attacks were made, for example. Example output for 15 attacks, "Normal" single d20 rolls, resulting in one crit (attack 14). Here's the input. Note that, since we always make ALL the attacks, and then ALWAYS apply conditional modifiers to each to only display relevant ones, this method take a little longer to execute, especially for Adv/DisAdv rolls. Maybe around 4 seconds on my laptop on a Sunday around 2PM EST. Not sure if it would be faster on a less busy gaming day/time. You'd have to decide if the proper formatting is worth those couple seconds extra. !power {{
--name|The Horde Attacks!!!
--leftsub|Horn of Valhalla
--rightsub|Melee Range
--hroll| [[ [$NumAttacks] 1d0 + ?{Number of attacks|1} ]]
--?? $NumAttacks.total >= 1 ?? Attack 1:| [[ [$Atk1] ?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5 ]] / Damage = [[ 1d12 + 3 ]]
--?? $NumAttacks.total >= 1 ?? Attack 1:| [[ [$Atk1] ?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5 ]] / Damage = [[ 1d12 + 3 ]]
--?? $NumAttacks.total >= 2 ?? Attack 2:| [[ [$Atk2] ?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5 ]] / Damage = [[ 1d12 + 3 ]]
--?? $NumAttacks.total >= 3 ?? Attack 3:| [[ [$Atk3] ?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5 ]] / Damage = [[ 1d12 + 3 ]]
--?? $NumAttacks.total >= 4 ?? Attack 4:| [[ [$Atk4] ?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5 ]] / Damage = [[ 1d12 + 3 ]]
--?? $NumAttacks.total >= 5 ?? Attack 5:| [[ [$Atk5] ?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5 ]] / Damage = [[ 1d12 + 3 ]]
--?? $NumAttacks.total >= 6 ?? Attack 6:| [[ [$Atk6] ?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5 ]] / Damage = [[ 1d12 + 3 ]]
--?? $NumAttacks.total >= 7 ?? Attack 7:| [[ [$Atk7] ?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5 ]] / Damage = [[ 1d12 + 3 ]]
--?? $NumAttacks.total >= 8 ?? Attack 8:| [[ [$Atk8] ?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5 ]] / Damage = [[ 1d12 + 3 ]]
--?? $NumAttacks.total >= 9 ?? Attack 9:| [[ [$Atk9] ?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5 ]] / Damage = [[ 1d12 + 3 ]]
--?? $NumAttacks.total >= 10 ?? Attack 10:| [[ [$Atk10] ?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5 ]] / Damage = [[ 1d12 + 3 ]]
--?? $NumAttacks.total >= 11 ?? Attack 11:| [[ [$Atk11] ?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5 ]] / Damage = [[ 1d12 + 3 ]]
--?? $NumAttacks.total >= 12 ?? Attack 12:| [[ [$Atk12] ?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5 ]] / Damage = [[ 1d12 + 3 ]]
--?? $NumAttacks.total >= 13 ?? Attack 13:| [[ [$Atk13] ?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5 ]] / Damage = [[ 1d12 + 3 ]]
--?? $NumAttacks.total >= 14 ?? Attack 14:| [[ [$Atk14] ?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5 ]] / Damage = [[ 1d12 + 3 ]]
--?? $NumAttacks.total >= 15 ?? Attack 15:| [[ [$Atk15] ?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5 ]] / Damage = [[ 1d12 + 3 ]]
--?? $NumAttacks.total >= 16 ?? Attack 16:| [[ [$Atk16] ?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5 ]] / Damage = [[ 1d12 + 3 ]]
--?? $NumAttacks.total >= 17 ?? Attack 17:| [[ [$Atk17] ?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5 ]] / Damage = [[ 1d12 + 3 ]]
--?? $NumAttacks.total >= 18 ?? Attack 18:| [[ [$Atk18] ?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5 ]] / Damage = [[ 1d12 + 3 ]]
--?? $NumAttacks.total >= 19 ?? Attack 19:| [[ [$Atk19] ?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5 ]] / Damage = [[ 1d12 + 3 ]]
--?? $NumAttacks.total >= 20 ?? Attack 20:| [[ [$Atk20] ?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5 ]] / Damage = [[ 1d12 + 3 ]]
--?? $NumAttacks.total >= 21 ?? Attack 21:| [[ [$Atk21] ?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5 ]] / Damage = [[ 1d12 + 3 ]]
--?? $NumAttacks.total >= 22 ?? Attack 22:| [[ [$Atk22] ?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5 ]] / Damage = [[ 1d12 + 3 ]]
--?? $NumAttacks.total >= 23 ?? Attack 23:| [[ [$Atk23] ?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5 ]] / Damage = [[ 1d12 + 3 ]]
--?? $NumAttacks.total >= 24 ?? Attack 24:| [[ [$Atk24] ?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5 ]] / Damage = [[ 1d12 + 3 ]]
--?? $NumAttacks.total >= 25 ?? Attack 25:| [[ [$Atk25] ?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5 ]] / Damage = [[ 1d12 + 3 ]]
--?? ?{Roll} == 1d20 ?? ^3Roll Mode:| Normal
--?? ?{Roll} == 2d20kh1 ?? ^3Roll Mode:| Advantage
--?? ?{Roll} == 2d20kl1 ?? ^3Roll Mode:| Disadvantage
--?? $Atk1.base == 20 AND $NumAttacks.total >= 1 ?? Crit dam (Attack 1):| [[1d12]]
--?? $Atk2.base == 20 AND $NumAttacks.total >= 2 ?? Crit dam (Attack 2):| [[1d12]]
--?? $Atk3.base == 20 AND $NumAttacks.total >= 3 ?? Crit dam (Attack 3):| [[1d12]]
--?? $Atk4.base == 20 AND $NumAttacks.total >= 4 ?? Crit dam (Attack 4):| [[1d12]]
--?? $Atk5.base == 20 AND $NumAttacks.total >= 5 ?? Crit dam (Attack 5):| [[1d12]]
--?? $Atk6.base == 20 AND $NumAttacks.total >= 6 ?? Crit dam (Attack 6):| [[1d12]]
--?? $Atk7.base == 20 AND $NumAttacks.total >= 7 ?? Crit dam (Attack 7):| [[1d12]]
--?? $Atk8.base == 20 AND $NumAttacks.total >= 8 ?? Crit dam (Attack 8):| [[1d12]]
--?? $Atk9.base == 20 AND $NumAttacks.total >= 9 ?? Crit dam (Attack 9):| [[1d12]]
--?? $Atk10.base == 20 AND $NumAttacks.total >= 10 ?? Crit dam (Attack 10):| [[1d12]]
--?? $Atk11.base == 20 AND $NumAttacks.total >= 11 ?? Crit dam (Attack 11):| [[1d12]]
--?? $Atk12.base == 20 AND $NumAttacks.total >= 12 ?? Crit dam (Attack 12):| [[1d12]]
--?? $Atk13.base == 20 AND $NumAttacks.total >= 13 ?? Crit dam (Attack 13):| [[1d12]]
--?? $Atk14.base == 20 AND $NumAttacks.total >= 14 ?? Crit dam (Attack 14):| [[1d12]]
--?? $Atk15.base == 20 AND $NumAttacks.total >= 15 ?? Crit dam (Attack 15):| [[1d12]]
--?? $Atk16.base == 20 AND $NumAttacks.total >= 16 ?? Crit dam (Attack 16):| [[1d12]]
--?? $Atk17.base == 20 AND $NumAttacks.total >= 17 ?? Crit dam (Attack 17):| [[1d12]]
--?? $Atk18.base == 20 AND $NumAttacks.total >= 18 ?? Crit dam (Attack 18):| [[1d12]]
--?? $Atk19.base == 20 AND $NumAttacks.total >= 19 ?? Crit dam (Attack 19):| [[1d12]]
--?? $Atk20.base == 20 AND $NumAttacks.total >= 20 ?? Crit dam (Attack 20):| [[1d12]]
--?? $Atk21.base == 20 AND $NumAttacks.total >= 21 ?? Crit dam (Attack 21):| [[1d12]]
--?? $Atk22.base == 20 AND $NumAttacks.total >= 22 ?? Crit dam (Attack 22):| [[1d12]]
--?? $Atk23.base == 20 AND $NumAttacks.total >= 23 ?? Crit dam (Attack 23):| [[1d12]]
--?? $Atk24.base == 20 AND $NumAttacks.total >= 24 ?? Crit dam (Attack 24):| [[1d12]]
--?? $Atk25.base == 20 AND $NumAttacks.total >= 25 ?? Crit dam (Attack 25):| [[1d12]]
}} Now if only Roll20 would allow a way to perform math on inline roll results, all of our lives would be so much easier!