Roll20 uses cookies to improve your experience on our site. Cookies enable you to enjoy certain features, social sharing functionality, and tailor message and display ads to your interests on our site and others. They also help us understand how our site is being used. By continuing to use our site, you consent to our use of cookies. Update your cookie preferences .
×
Create a free account

LF Help with Macro - Horn of Valhalla - Multiple attacks

hey guys, I would like to use something like this: (This is a Macro, used for the Spell: Animated Objects) &{template:default} {{name=Animate Objects}} {{=*?{Size|Tiny, [Tiny](-2)|Small, [Small](0)|Medium, [Medium](1)|Large, [Large](2)|Huge, [Huge](4)} objects attack!* }} {{[1](#).=[[ ?{Roll|Normal, 1d20|Advantage, 2d20kh1|Disadvantage, 2d20kl1} + [[abs(?{Size} - 1) + 5]] + {0} ]] atk, [[ [[1 + ceil(?{Size} / 4)]]d[[floor((?{Size} - 2 * {0, 3}=[[2 + ?{Size}]]) / 2) * 2 + 8]] + [[abs(?{Size} - 1) + 1]] ]] bld. (crit? +[[ [[1 + ceil(?{Size} / 4)]]d[[floor((?{Size} - 2 * {0, 3}=[[2 + ?{Size}]]) / 2) * 2 + 8]] ]]) }} {{[[[{?{Number of attacks|1|2|3|4|5|6|7|8|9|10}, 2}kl1]]](#).=[[ ?{Roll} + [[abs(?{Size} - 1) + 5]] + {0} ]] atk, [[ [[1 + ceil(?{Size} / 4)]]d[[floor((?{Size} - 2 * {0, 3}=[[2 + ?{Size}]]) / 2) * 2 + 8]] + [[abs(?{Size} - 1) + 1]] ]] bld. (crit? +[[ [[1 + ceil(?{Size} / 4)]]d[[floor((?{Size} - 2 * {0, 3}=[[2 + ?{Size}]]) / 2) * 2 + 8]] ]]) }} {{[[[{?{Number of attacks}, 3}kl1]]](#).=[[ ?{Roll} + [[abs(?{Size} - 1) + 5]] + {0} ]] atk, [[ [[1 + ceil(?{Size} / 4)]]d[[floor((?{Size} - 2 * {0, 3}=[[2 + ?{Size}]]) / 2) * 2 + 8]] + [[abs(?{Size} - 1) + 1]] ]] bld. (crit? +[[ [[1 + ceil(?{Size} / 4)]]d[[floor((?{Size} - 2 * {0, 3}=[[2 + ?{Size}]]) / 2) * 2 + 8]] ]]) }} {{[[[{?{Number of attacks}, 4}kl1]]](#).=[[ ?{Roll} + [[abs(?{Size} - 1) + 5]] + {0} ]] atk, [[ [[1 + ceil(?{Size} / 4)]]d[[floor((?{Size} - 2 * {0, 3}=[[2 + ?{Size}]]) / 2) * 2 + 8]] + [[abs(?{Size} - 1) + 1]] ]] bld. (crit? +[[ [[1 + ceil(?{Size} / 4)]]d[[floor((?{Size} - 2 * {0, 3}=[[2 + ?{Size}]]) / 2) * 2 + 8]] ]]) }} {{[[[{?{Number of attacks}, 5}kl1]]](#).=[[ ?{Roll} + [[abs(?{Size} - 1) + 5]] + {0} ]] atk, [[ [[1 + ceil(?{Size} / 4)]]d[[floor((?{Size} - 2 * {0, 3}=[[2 + ?{Size}]]) / 2) * 2 + 8]] + [[abs(?{Size} - 1) + 1]] ]] bld. (crit? +[[ [[1 + ceil(?{Size} / 4)]]d[[floor((?{Size} - 2 * {0, 3}=[[2 + ?{Size}]]) / 2) * 2 + 8]] ]]) }} {{[[[{?{Number of attacks}, 6}kl1]]](#).=[[ ?{Roll} + [[abs(?{Size} - 1) + 5]] + {0} ]] atk, [[ [[1 + ceil(?{Size} / 4)]]d[[floor((?{Size} - 2 * {0, 3}=[[2 + ?{Size}]]) / 2) * 2 + 8]] + [[abs(?{Size} - 1) + 1]] ]] bld. (crit? +[[ [[1 + ceil(?{Size} / 4)]]d[[floor((?{Size} - 2 * {0, 3}=[[2 + ?{Size}]]) / 2) * 2 + 8]] ]]) }} {{[[[{?{Number of attacks}, 7}kl1]]](#).=[[ ?{Roll} + [[abs(?{Size} - 1) + 5]] + {0} ]] atk, [[ [[1 + ceil(?{Size} / 4)]]d[[floor((?{Size} - 2 * {0, 3}=[[2 + ?{Size}]]) / 2) * 2 + 8]] + [[abs(?{Size} - 1) + 1]] ]] bld. (crit? +[[ [[1 + ceil(?{Size} / 4)]]d[[floor((?{Size} - 2 * {0, 3}=[[2 + ?{Size}]]) / 2) * 2 + 8]] ]]) }} {{[[[{?{Number of attacks}, 8}kl1]]](#).=[[ ?{Roll} + [[abs(?{Size} - 1) + 5]] + {0} ]] atk, [[ [[1 + ceil(?{Size} / 4)]]d[[floor((?{Size} - 2 * {0, 3}=[[2 + ?{Size}]]) / 2) * 2 + 8]] + [[abs(?{Size} - 1) + 1]] ]] bld. (crit? +[[ [[1 + ceil(?{Size} / 4)]]d[[floor((?{Size} - 2 * {0, 3}=[[2 + ?{Size}]]) / 2) * 2 + 8]] ]]) }} {{[[[{?{Number of attacks}, 9}kl1]]](#).=[[ ?{Roll} + [[abs(?{Size} - 1) + 5]] + {0} ]] atk, [[ [[1 + ceil(?{Size} / 4)]]d[[floor((?{Size} - 2 * {0, 3}=[[2 + ?{Size}]]) / 2) * 2 + 8]] + [[abs(?{Size} - 1) + 1]] ]] bld. (crit? +[[ [[1 + ceil(?{Size} / 4)]]d[[floor((?{Size} - 2 * {0, 3}=[[2 + ?{Size}]]) / 2) * 2 + 8]] ]]) }} {{[[[{?{Number of attacks}, 10}kl1]]](#).=[[ ?{Roll} + [[abs(?{Size} - 1) + 5]] + {0} ]] atk, [[ [[1 + ceil(?{Size} / 4)]]d[[floor((?{Size} - 2 * {0, 3}=[[2 + ?{Size}]]) / 2) * 2 + 8]] + [[abs(?{Size} - 1) + 1]] ]] bld. (crit? +[[ [[1 + ceil(?{Size} / 4)]]d[[floor((?{Size} - 2 * {0, 3}=[[2 + ?{Size}]]) / 2) * 2 + 8]] ]]) }} What i Try to create, is something that asks me in the same way: Input Value:    Roll? -> Normal/Advantage/Disadvantage Input Value:    Number of attacks? -> Numbers 4-25 The Attack modifier is +5 to hit and 1d12+3 slashing damage.  Like in the "Animate Objects" Macro above, should there be a alternate crit damage count to adjust, if there´s a critical hit in it. Thanks for your support, i hope someone can help me to figure this out. And hopefully its a help for others in advance. Greetings.
1594632467

Edited 1594648127
I try to update my Progress in here: Status: In Progress | It Works 13th July, 2020 - 3pm CEST Pro: The macro works like it should. Great display of dmg, crit, dis-/advantage Con: there is only 1 dmg outcome at the moment &{template:default} {{name=Horn of Valhalla - Berserkers}} [[(1d12+3)[DMG]+[[floor([[?{Roll|Normal, 1d20|Advantage, 2d20kh1|Disadvantage, 2d20kl1}]]/20)]]d12[CRIT]]] {{Atk [[[{?{Number of attacks|4},1}kl1]]](#)=$[[0]] atk, $[[2]] dmg}} Top -> Works like it should for one attack Bottom - > First try to apply some other attacks to work with the "input Value" {{Atk [[[{?{Number of attacks}, 4}kl1]]](#)=$[[0]] atk, [[1d12+3]]+$[[2]] dmg {{Atk [[[{?{Number of attacks}, 5}kl1]]](#)=$[[0]] atk, [[1d12+3]]+$[[2]] dmg............. 6}kl1]]](#)=$[[0]] atk, [[1d12+3]]+$[[2]] dmg 7}kl1]]](#)=$[[0]] atk, [[1d12+3]]+$[[2]] dmg 8}kl1]]](#)=$[[0]] atk, [[1d12+3]]+$[[2]] dmg 9}kl1]]](#)=$[[0]] atk, [[1d12+3]]+$[[2]] dmg 10}kl1]]](#)=$[[0]] atk, [[1d12+3]]+$[[2]] dmg 11}kl1]]](#)=$[[0]] atk, [[1d12+3]]+$[[2]] dmg 12}kl1]]](#)=$[[0]] atk, [[1d12+3]]+$[[2]] dmg 13}kl1]]](#)=$[[0]] atk, [[1d12+3]]+$[[2]] dmg 14}kl1]]](#)=$[[0]] atk, [[1d12+3]]+$[[2]] dmg 15}kl1]]](#)=$[[0]] atk, [[1d12+3]]+$[[2]] dmg 16}kl1]]](#)=$[[0]] atk, [[1d12+3]]+$[[2]] dmg 17}kl1]]](#)=$[[0]] atk, [[1d12+3]]+$[[2]] dmg 18}kl1]]](#)=$[[0]] atk, [[1d12+3]]+$[[2]] dmg 19}kl1]]](#)=$[[0]] atk, [[1d12+3]]+$[[2]] dmg 20}kl1]]](#)=$[[0]] atk, [[1d12+3]]+$[[2]] dmg }}
1594637655

Edited 1594638938
Oosh
Sheet Author
API Scripter
The Attack modifier is +5 to hit and 1d12+3 slashing damage. They're static modifiers which will never change? Or did you want a Query for them in there? Also, did you want the crit separate like the Animated Objects macro, or already added in (you can still mouseover for detail). So, like this: &{template:default} {{name=Attack Macro}} [[(1d12+3)[DMG]+[[floor([[?{Roll|Normal, 1d20|Advantage, 2d20kh1|Disadvantage, 2d20kl1}]]/20)]]d12[CRIT]]] {{Atk [[[{?{Number of attacks|4},1}kl1]]](#)=$[[0]] atk, $[[2]] dmg}} Or like this: &{template:default} {{name=Attack Macro}} [[[[floor([[?{Roll|Normal, 1d20|Advantage, 2d20kh1|Disadvantage, 2d20kl1}]]/20)]]d12[CRIT]]] {{Atk [[[{?{Number of attacks|4},1}kl1]]](#)=$[[0]] atk, [[1d12+3]]+$[[2]] dmg}} Both versions roll 0 crit damage if the attack is not a crit, it's just a different display.
1594643840

Edited 1594645210
Oosh said: The Attack modifier is +5 to hit and 1d12+3 slashing damage. They're static modifiers which will never change? Or did you want a Query for them in there? The Statistics never Change, its always the common Berserker dmg Also, did you want the crit separate like the Animated Objects macro, or already added in (you can still mouseover for detail). So, like this: &{template:default} {{name=Attack Macro}} [[(1d12+3)[DMG]+[[floor([[?{Roll|Normal, 1d20|Advantage, 2d20kh1|Disadvantage, 2d20kl1}]]/20)]]d12[CRIT]]] {{Atk [[[{?{Number of attacks|4},1}kl1]]](#)=$[[0]] atk, $[[2]] dmg}} Or like this: &{template:default} {{name=Attack Macro}} [[[[floor([[?{Roll|Normal, 1d20|Advantage, 2d20kh1|Disadvantage, 2d20kl1}]]/20)]]d12[CRIT]]] {{Atk [[[{?{Number of attacks|4},1}kl1]]](#)=$[[0]] atk, [[1d12+3]]+$[[2]] dmg}} Both versions roll 0 crit damage if the attack is not a crit, it's just a different display. That lightened something up! I think i just need a macro for @selected Token - Number of attacks (4-25) - set DC to hit - show hits/dmg Is that possible without the Groupcheck API? btw, we´re talking about D&D 5E. Thanks Oosh, you´re always a big help :) Edit: I am working on it. Your suggestions are great for a Player used macro. The Idea about "set DC to hit" and "apply Damage", would be great for a DM used macro - depends on the role. Both ways are way easier then click 20 times Updated Progression above!
1594651626

Edited 1594661730
David M.
Pro
API Scripter
Klaus K. said: I think i just need a macro for @selected Token - Number of attacks (4-25) - set DC to hit - show hits/dmg Will something like this work? See Ed S.'s solution to this problem: <a href="https://app.roll20.net/forum/post/4608575/trying-to-get-a-macro-to-properly-work-one-that-rolls-for-multiple-hits-and-then-for-multiple-instances-of-damage" rel="nofollow">https://app.roll20.net/forum/post/4608575/trying-to-get-a-macro-to-properly-work-one-that-rolls-for-multiple-hits-and-then-for-multiple-instances-of-damage</a>
David M. said: Klaus K. said: I think i just need a macro for @selected Token - Number of attacks (4-25) - set DC to hit - show hits/dmg Will something like this work? See Ed S.'s solution to this problem: <a href="https://app.roll20.net/forum/post/4608575/trying-to-get-a-macro-to-properly-work-one-that-rolls-for-multiple-hits-and-then-for-multiple-instances-of-damage" rel="nofollow">https://app.roll20.net/forum/post/4608575/trying-to-get-a-macro-to-properly-work-one-that-rolls-for-multiple-hits-and-then-for-multiple-instances-of-damage</a> Thats great - except the Advantage/Disadvantage is missing. Try to implement that, but its harder then it looks like^^
1594654640

Edited 1594655098
How can i add the Value of the Roll (Normal, Advantage, Disadvantage) - because the berserker attack Reckless [[?{Roll|Normal, 1d20|Advantage, 2d20kh1|Disadvantage, 2d20kl1}]] to the macro David M. Suggested: [[{?{Number of Attackers|4}d20 + ?{To hit modifiers +|8}}&gt;[[?{Target AC|15}]] ]] hits vs **AC**[[?{Target AC}d1]]
1594661151

Edited 1594662132
David M.
Pro
API Scripter
OK, thinking outside of the box a bit (EDIT - Forgot to give credit to TheAaron for a forum posting from a few years ago, here ): how about using rollable tables for the die roll instead of normal die roll syntax? You could set up three rollable tables for norm/adv/disadv. Call them d20Norm , d20Adv , and d20DisAdv . There would be 20 items in each, with weights set to the probabilities of rolling each based on the roll type. Can't use decimal weights, so would multiply probabilities by 10,000 1,000. So, instead of referring to advantage with [[ 1d20kh1 ]], it would instead be [[ t[d20Adv] ]] Ading a query for the roll type would become: &nbsp;t[?{RollType|Normal,d20Norm|Advantage,d20Adv|Disadvantage,d20DisAdv}] So, the final macro to find the number of hits would become this: [[{?{Number of Attackers|4}t[?{RollType|Normal,d20Norm|Advantage,d20Adv|Disadvantage,d20DisAdv}] + ?{To hit modifiers +|8}}&gt;[[?{Target AC|15}]] ]] hits vs **AC**[[?{Target AC}d1]] Notes regarding the probabilities/weights for the rollable tables. Obviously, the d20Norm table would have all numbers equally weighted (=1) Use the following to determine the weights for the d20Adv table: Roll Num occurrences (w/Adv) Prob Weight 1 1 0.25% 25 2 3 0.75% 75 3 5 1.25% 125 4 7 1.75% 175 5 9 2.25% 225 6 11 2.75% 275 7 13 3.25% 325 8 15 3.75% 375 9 17 4.25% 425 10 19 4.75% 475 11 21 5.25% 525 12 23 5.75% 575 13 25 6.25% 625 14 27 6.75% 675 15 29 7.25% 725 16 31 7.75% 775 17 33 8.25% 825 18 35 8.75% 875 19 37 9.25% 925 20 39 9.75% 975 &nbsp;&nbsp; And the following for Disadvantage: Roll Num occurrences (w/DisAdv) Prob Weight 1 39 9.75% 975 2 37 9.25% 925 3 35 8.75% 875 4 33 8.25% 825 5 31 7.75% 775 6 29 7.25% 725 7 27 6.75% 675 8 25 6.25% 625 9 23 5.75% 575 10 21 5.25% 525 11 19 4.75% 475 12 17 4.25% 425 13 15 3.75% 375 14 13 3.25% 325 15 11 2.75% 275 16 9 2.25% 225 17 7 1.75% 175 18 5 1.25% 125 19 3 0.75% 75 20 1 0.25% 25 A little initial setup time, but I think it would ultimately work for you!
Wow, thats a lot of stuff to work in. I just wanted to make stuff easier :) What about: &amp;{template:default} {{name=Horn of Valhalla - Berserkers}} [[?{Roll|Normal, 1d20|Advantage, 2d20kh1|Disadvantage, 2d20kl1}]]*[[{?{Number of Attackers|10}d20]]} something like that. In fact, i just need the following macro, inspired by the try above: Roll Adv,Disadv,normal? - &gt; How many attacks&nbsp; GM can hover and count the hits -&gt; use: [[ (?{Number of hits|1}?{Damage die|1d12} + (?{Damage bonus|3}*?{Number of hits}) ]] ?{damage type|bludgeoning} Would be one macro to count the hits and another for the dmg.
1594680690

Edited 1594680859
David M.
Pro
API Scripter
I gave a long explanation, but it really just comes down to making three rollable tables with the given weights. The Macro part is already figured out, is pretty simple to use, and doesn't require any manual comparisons after the fact. The only thing is this approach doesn't work great as a player macro unless you tell them the AC, which I can see kind of ruining the mystery.&nbsp; &nbsp; So if you don't want to go that route, no worries! I had fun working it out. It's like Sudoko, for RPG nerds :) I have to step away for a bit, but could look at it again later (probably tomorrow) to see if we could come up with a more universal solution.&nbsp; Btw, what character sheet are you using?&nbsp;D&amp;D 5th Edition by Roll20? I made a macro that added a bunch of richochet longbow attacks in the description field of a template for somebody a couple weeks ago. Maybe could use a similar approach, possibly merging with some of Oosh's formatting? Here is how we approached that problem, if you wanted to start thinking about it or playing around with it.&nbsp;
1594685526

Edited 1594685557
Oosh
Sheet Author
API Scripter
Had to do some sleeping. If you're still trying to get the macro going... here is a version that only goes up to 10 attacks: &amp;{template:default} [[(1d12+3)[DMG]+[[floor([[?{Roll|Normal, 1d20+5|Advantage, 2d20kh1+5|Disadvantage, 2d20kl1+5}]]/25)]]d12[CRIT]]] [[(1d12+3)[DMG]+[[floor([[?{Roll}]]/25)]]d12[CRIT]]] [[(1d12+3)[DMG]+[[floor([[?{Roll}]]/25)]]d12[CRIT]]] [[(1d12+3)[DMG]+[[floor([[?{Roll}]]/25)]]d12[CRIT]]] [[(1d12+3)[DMG]+[[floor([[?{Roll}]]/25)]]d12[CRIT]]] [[(1d12+3)[DMG]+[[floor([[?{Roll}]]/25)]]d12[CRIT]]] [[(1d12+3)[DMG]+[[floor([[?{Roll}]]/25)]]d12[CRIT]]] [[(1d12+3)[DMG]+[[floor([[?{Roll}]]/25)]]d12[CRIT]]] [[(1d12+3)[DMG]+[[floor([[?{Roll}]]/25)]]d12[CRIT]]] [[(1d12+3)[DMG]+[[floor([[?{Roll}]]/25)]]d12[CRIT]]] {{name=Attack Macro}} {{Atk [[[{?{Number of attacks|4},1}kl1]]](#)=$[[0]] atk, $[[2]] dmg}} {{Atk [[[{?{Number of attacks},2}kl1]]](#)=$[[3]] atk, $[[6]] dmg}} {{Atk [[[{?{Number of attacks},3}kl1]]](#)=$[[4]] atk, $[[11]] dmg}} {{Atk [[[{?{Number of attacks},4}kl1]]](#)=$[[7]] atk, $[[13]] dmg}} {{Atk [[[{?{Number of attacks},5}kl1]]](#)=$[[9]] atk, $[[20]] dmg}} {{Atk [[[{?{Number of attacks},6}kl1]]](#)=$[[12]] atk, $[[22]] dmg}} {{Atk [[[{?{Number of attacks},7}kl1]]](#)=$[[14]] atk, $[[24]] dmg}} {{Atk [[[{?{Number of attacks},8}kl1]]](#)=$[[16]] atk, $[[37]] dmg}} {{Atk [[[{?{Number of attacks},9}kl1]]](#)=$[[18]] atk, $[[38]] dmg}} {{Atk [[[{?{Number of attacks},10}kl1]]](#)=$[[21]] atk, $[[39]] dmg}} I'd forgotten about the problem with the $[[0]] calls getting out of order with groups of nested rolls, so it all needs to be manually done, and breaks if you add any more rolls. There is an alternative as you've described above, a macro for rolling hits and another one to roll damage. The big advantage of this method is that you can display TOTAL damage, no manual adding up required. You can also display it in a 5e template, where as the clever trick for displaying the number of attacks in the Animate Objects macro only works in the default template. I'll dig up that other one that does damage separately, see what you think of it. @David M. I like the idea of using the tables! I'm sure I'll find a use for that.
1594697268
David M.
Pro
API Scripter
Yeah Oosh, that's where I was afraid it was going to go, haha! But I suppose with up to 10 attacks possible, you'd only be calling it a max of 3 times. Probably the most complete solution you can get without writing some one-off custom api script, since it will work for both player and GM.&nbsp; I still am a little unclear on how the nested $[[n]] references get [dis]ordered. I wasn't aware of that "feature". Also wasn't aware that the num attacks trick only worked in the default template. Thanks for the tip!
1594707591
Oosh
Sheet Author
API Scripter
Yeah I was trying to find a pattern in there until I went cross-eyed. I tried shifting them around to different bits of the macro, putting them in actual fields... I couldn't make any sense of it. I'm definitely not going up to 25 attacks! :)
1594709843

Edited 1594709888
Oosh
Sheet Author
API Scripter
Ok this is probably a bit simpler. It's pretty much what you had up above. You have the choice of inputting the AC and counting up the successes (like David has in his Tables macro) or of displaying the dice rolls and counting the successes manually - you can't show both using a $[[0]] call unfortunately, as the successes operator won't work if the die roll is wrapped in [[ ]] its own safe space. Anyway, this is 2 macros, I'd recommend saving them as Ability macros on a character sheet (called Macros in this example). First macro is ValhallaAttack: &amp;{template:default} {{Atk [[[{?{Number of attacks|4},1}kl1]]](#)= [[?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5]] }} {{Atk [[[{?{Number of attacks|4},1}kl1]]](#)= [[?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5]] }} {{Atk [[[{?{Number of attacks|4},2}kl1]]](#)= [[?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5]] }}{{Atk [[[{?{Number of attacks|4},3}kl1]]](#)= [[?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5]] }}{{Atk [[[{?{Number of attacks|4},4}kl1]]](#)= [[?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5]] }}{{Atk [[[{?{Number of attacks|4},5}kl1]]](#)= [[?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5]] }}{{Atk [[[{?{Number of attacks|4},6}kl1]]](#)= [[?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5]] }}{{Atk [[[{?{Number of attacks|4},7}kl1]]](#)= [[?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5]] }}{{Atk [[[{?{Number of attacks|4},8}kl1]]](#)= [[?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5]] }}{{Atk [[[{?{Number of attacks|4},9}kl1]]](#)= [[?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5]] }}{{Atk [[[{?{Number of attacks|4},10}kl1]]](#)= [[?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5]] }}{{Atk [[[{?{Number of attacks|4},11}kl1]]](#)= [[?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5]] }}{{Atk [[[{?{Number of attacks|4},12}kl1]]](#)= [[?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5]] }}{{Atk [[[{?{Number of attacks|4},13}kl1]]](#)= [[?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5]] }}{{Atk [[[{?{Number of attacks|4},14}kl1]]](#)= [[?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5]] }}{{Atk [[[{?{Number of attacks|4},15}kl1]]](#)= [[?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5]] }}{{Atk [[[{?{Number of attacks|4},16}kl1]]](#)= [[?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5]] }}{{Atk [[[{?{Number of attacks|4},17}kl1]]](#)= [[?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5]] }}{{Atk [[[{?{Number of attacks|4},18}kl1]]](#)= [[?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5]] }}{{Atk [[[{?{Number of attacks|4},19}kl1]]](#)= [[?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5]] }}{{Atk [[[{?{Number of attacks|4},20}kl1]]](#)= [[?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5]] }}{{Atk [[[{?{Number of attacks|4},21}kl1]]](#)= [[?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5]] }}{{Atk [[[{?{Number of attacks|4},22}kl1]]](#)= [[?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5]] }}{{Atk [[[{?{Number of attacks|4},23}kl1]]](#)= [[?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5]] }}{{Atk [[[{?{Number of attacks|4},24}kl1]]](#)= [[?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5]] }}{{Atk [[[{?{Number of attacks|4},25}kl1]]](#)= [[?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5]] }}{{[Roll Damage](~Macros|ValhallaDamage)}} {{name=Valhalla Attack}} There's a button at the end to link straight ot the damage macro. The second macro is called ValhallaDamage &amp;{template:default}{{name=Valhalla Damage}}{{**Valhalla** hits for a total of** [[ [[ ([[?{How many attacks hit?|1}]] + [[?{How many attacks critically hit?|0}]])]]d12 + ?{How many attacks hit?}*3]] slashing damage**. $[[0]] attacks hit the target and $[[1]]of those critically hit!}}
1594731369

Edited 1594815266
David M.
Pro
API Scripter
Cool, Oosh, that got me thinking a bit. The npcattack template from the 5E sheet&nbsp;, while unable to use the number of attackers trick, displays in a much more compact format. How about just always making the 25 attacks and only using the ones you want? Doesn't spam the chat window too bad with that template, and it's one less query to input since we're always making 25 attacks. Then, in order to avoid having to figure out the $[[0]] calls to auto proc the crit damage, just put an ability button on each line to click if there is a crit (easy to pick out the green text for the crit attack). See the output below. Attack 02 was a crit, so I then clicked the button (the text "Crit?") at the far right of that line, which generated the line in the output using the npcdamage template. It all fits in a single chat window, with room to spare. Taking another queue from Oosh, this was done with two ability macros, ValhallaAttack and ValhallaCrit, which obviously can be added as token actions for the selected token or put in the macro bar. ValhallaAttack &amp;{template:npcatk} {{name=The Horde Attacks!!!}} {{description=Atk01: [[?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5]] Dam:[[1d12+3]] [Crit?](~ValhallaCrit) Atk02: [[?{Roll|Normal,2d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5]] Dam:[[1d12+3]] [Crit?](~ValhallaCrit) Atk03: [[?{Roll|Normal,2d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5]] Dam:[[1d12+3]] [Crit?](~ValhallaCrit) Atk04: [[?{Roll|Normal,2d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5]] Dam:[[1d12+3]] [Crit?](~ValhallaCrit) Atk05: [[?{Roll|Normal,2d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5]] Dam:[[1d12+3]] [Crit?](~ValhallaCrit) Atk06: [[?{Roll|Normal,2d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5]] Dam:[[1d12+3]] [Crit?](~ValhallaCrit) Atk07: [[?{Roll|Normal,2d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5]] Dam:[[1d12+3]] [Crit?](~ValhallaCrit) Atk08: [[?{Roll|Normal,2d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5]] Dam:[[1d12+3]] [Crit?](~ValhallaCrit) Atk09: [[?{Roll|Normal,2d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5]] Dam:[[1d12+3]] [Crit?](~ValhallaCrit) Atk10: [[?{Roll|Normal,2d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5]] Dam:[[1d12+3]] [Crit?](~ValhallaCrit) Atk11: [[?{Roll|Normal,2d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5]] Dam:[[1d12+3]] [Crit?](~ValhallaCrit) Atk12: [[?{Roll|Normal,2d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5]] Dam:[[1d12+3]] [Crit?](~ValhallaCrit) Atk13: [[?{Roll|Normal,2d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5]] Dam:[[1d12+3]] [Crit?](~ValhallaCrit) Atk14: [[?{Roll|Normal,2d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5]] Dam:[[1d12+3]] [Crit?](~ValhallaCrit) Atk15: [[?{Roll|Normal,2d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5]] Dam:[[1d12+3]] [Crit?](~ValhallaCrit) Atk16: [[?{Roll|Normal,2d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5]] Dam:[[1d12+3]] [Crit?](~ValhallaCrit) Atk17: [[?{Roll|Normal,2d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5]] Dam:[[1d12+3]] [Crit?](~ValhallaCrit) Atk18: [[?{Roll|Normal,2d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5]] Dam:[[1d12+3]] [Crit?](~ValhallaCrit) Atk19: [[?{Roll|Normal,2d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5]] Dam:[[1d12+3]] [Crit?](~ValhallaCrit) Atk20: [[?{Roll|Normal,2d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5]] Dam:[[1d12+3]] [Crit?](~ValhallaCrit) Atk21: [[?{Roll|Normal,2d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5]] Dam:[[1d12+3]] [Crit?](~ValhallaCrit) Atk22: [[?{Roll|Normal,2d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5]] Dam:[[1d12+3]] [Crit?](~ValhallaCrit) Atk23: [[?{Roll|Normal,2d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5]] Dam:[[1d12+3]] [Crit?](~ValhallaCrit) Atk24: [[?{Roll|Normal,2d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5]] Dam:[[1d12+3]] [Crit?](~ValhallaCrit) Atk25: [[?{Roll|Normal,2d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5]] Dam:[[1d12+3]] [Crit?](~ValhallaCrit) }} ValhallaCrit &amp;{template:npcdmg} {{damage=}} {{dmg1flag=1}} {{dmg1= [[1d12]] Crit Damage}} Klaus, if you haven't made ability macros with the 5E sheet before, just go to the Attributes &amp; Abilities tab of the character sheet, then click +Add on the upper right. Click the pencil icon to edit, then paste the ability macro text and name them appropriately. Apologies if you already knew all of this, just including for completeness or for anyone else following this thread :) Still have to manually add the total damage, but if the berserker horde is attacking multiple enemies, their normal and crit damage can be distributed as needed (e.g. 15 attacks: berserkers 1-8 attack the Death Knight, 9-15 attack the Dracolich, and 16-25 are ignored). Think that's the best I can do.&nbsp; Klaus, you could even keep both methods handy depending on the situation. Oosh's total damage solution is nice if most/all are attacking the BBEG, or you could use the above if they are more distributed.
1594774360
Oosh
Sheet Author
API Scripter
So many options! Almost as many as there are attacks! I do like that feature of the npcdmg template, that it'll happily attach to the bottom of the previous one. It looks good for this kind of use. Also, minor tweak: the crit damage shouldn't add the +3 modifier, just roll the d12.
1594815370
David M.
Pro
API Scripter
Haha, good catch Oosh! A little trigger happy with my cut and paste. I edited the post with your correction, thanks!
Oosh said: So many options! Almost as many as there are attacks! I am sorry, i guess you two had a lot of time invested to this macro. David M. said: I gave a long explanation, but it really just comes down to making three rollable tables with the given weights. The Macro part is already figured out, is pretty simple to use, and doesn't require any manual comparisons after the fact. The only thing is this approach doesn't work great as a player macro unless you tell them the AC, which I can see kind of ruining the mystery.&nbsp; &nbsp; Absolutly Stunning Idea with the table. I tried it a bit for other stuff i use for my own campaigns/Games. Its amazing as a GM. At the very end: You guys are unbelivable. Thank you very much! I hope there is a way to support you in some way. I´ll check your wishlists out :) I can use all of those macros in different situations as a Player and also as&nbsp; GM. You´d done a very good job, and i hope there will be others find a use in this breaking stuff you guys did :D
1594930628
David M.
Pro
API Scripter
No worries, Klaus, happy that you are finding uses for them. It's fun to think about problems and add to the bag of tools. You never know what can be applied elsewhere down the road!
1595182455
David M.
Pro
API Scripter
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 &amp; Norm/Adv/DisAdv). Powercards is available for 1-click install, and commands can be run from either Collections macros or Character abilities.&nbsp; 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 &nbsp;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 :).&nbsp; The easier way This method takes advantage of the "Repeat" modifier (&lt;Name&gt;#&lt;number of times to repeat&gt;) 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.&nbsp; !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.&nbsp; 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 &gt;= 1 ?? Attack 1:| [[ [$Atk1] ?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5 ]] / Damage = [[ 1d12 + 3 ]] --?? $NumAttacks.total &gt;= 1 ?? Attack 1:| [[ [$Atk1] ?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5 ]] / Damage = [[ 1d12 + 3 ]] --?? $NumAttacks.total &gt;= 2 ?? Attack 2:| [[ [$Atk2] ?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5 ]] / Damage = [[ 1d12 + 3 ]] --?? $NumAttacks.total &gt;= 3 ?? Attack 3:| [[ [$Atk3] ?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5 ]] / Damage = [[ 1d12 + 3 ]] --?? $NumAttacks.total &gt;= 4 ?? Attack 4:| [[ [$Atk4] ?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5 ]] / Damage = [[ 1d12 + 3 ]] --?? $NumAttacks.total &gt;= 5 ?? Attack 5:| [[ [$Atk5] ?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5 ]] / Damage = [[ 1d12 + 3 ]] --?? $NumAttacks.total &gt;= 6 ?? Attack 6:| [[ [$Atk6] ?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5 ]] / Damage = [[ 1d12 + 3 ]] --?? $NumAttacks.total &gt;= 7 ?? Attack 7:| [[ [$Atk7] ?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5 ]] / Damage = [[ 1d12 + 3 ]] --?? $NumAttacks.total &gt;= 8 ?? Attack 8:| [[ [$Atk8] ?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5 ]] / Damage = [[ 1d12 + 3 ]] --?? $NumAttacks.total &gt;= 9 ?? Attack 9:| [[ [$Atk9] ?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5 ]] / Damage = [[ 1d12 + 3 ]] --?? $NumAttacks.total &gt;= 10 ?? Attack 10:| [[ [$Atk10] ?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5 ]] / Damage = [[ 1d12 + 3 ]] --?? $NumAttacks.total &gt;= 11 ?? Attack 11:| [[ [$Atk11] ?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5 ]] / Damage = [[ 1d12 + 3 ]] --?? $NumAttacks.total &gt;= 12 ?? Attack 12:| [[ [$Atk12] ?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5 ]] / Damage = [[ 1d12 + 3 ]] --?? $NumAttacks.total &gt;= 13 ?? Attack 13:| [[ [$Atk13] ?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5 ]] / Damage = [[ 1d12 + 3 ]] --?? $NumAttacks.total &gt;= 14 ?? Attack 14:| [[ [$Atk14] ?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5 ]] / Damage = [[ 1d12 + 3 ]] --?? $NumAttacks.total &gt;= 15 ?? Attack 15:| [[ [$Atk15] ?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5 ]] / Damage = [[ 1d12 + 3 ]] --?? $NumAttacks.total &gt;= 16 ?? Attack 16:| [[ [$Atk16] ?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5 ]] / Damage = [[ 1d12 + 3 ]] --?? $NumAttacks.total &gt;= 17 ?? Attack 17:| [[ [$Atk17] ?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5 ]] / Damage = [[ 1d12 + 3 ]] --?? $NumAttacks.total &gt;= 18 ?? Attack 18:| [[ [$Atk18] ?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5 ]] / Damage = [[ 1d12 + 3 ]] --?? $NumAttacks.total &gt;= 19 ?? Attack 19:| [[ [$Atk19] ?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5 ]] / Damage = [[ 1d12 + 3 ]] --?? $NumAttacks.total &gt;= 20 ?? Attack 20:| [[ [$Atk20] ?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5 ]] / Damage = [[ 1d12 + 3 ]] --?? $NumAttacks.total &gt;= 21 ?? Attack 21:| [[ [$Atk21] ?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5 ]] / Damage = [[ 1d12 + 3 ]] --?? $NumAttacks.total &gt;= 22 ?? Attack 22:| [[ [$Atk22] ?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5 ]] / Damage = [[ 1d12 + 3 ]] --?? $NumAttacks.total &gt;= 23 ?? Attack 23:| [[ [$Atk23] ?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5 ]] / Damage = [[ 1d12 + 3 ]] --?? $NumAttacks.total &gt;= 24 ?? Attack 24:| [[ [$Atk24] ?{Roll|Normal,1d20|Advantage,2d20kh1|Disadvantage,2d20kl1}+5 ]] / Damage = [[ 1d12 + 3 ]] --?? $NumAttacks.total &gt;= 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 &gt;= 1 ?? Crit dam (Attack 1):| [[1d12]] --?? $Atk2.base == 20 AND $NumAttacks.total &gt;= 2 ?? Crit dam (Attack 2):| [[1d12]] --?? $Atk3.base == 20 AND $NumAttacks.total &gt;= 3 ?? Crit dam (Attack 3):| [[1d12]] --?? $Atk4.base == 20 AND $NumAttacks.total &gt;= 4 ?? Crit dam (Attack 4):| [[1d12]] --?? $Atk5.base == 20 AND $NumAttacks.total &gt;= 5 ?? Crit dam (Attack 5):| [[1d12]] --?? $Atk6.base == 20 AND $NumAttacks.total &gt;= 6 ?? Crit dam (Attack 6):| [[1d12]] --?? $Atk7.base == 20 AND $NumAttacks.total &gt;= 7 ?? Crit dam (Attack 7):| [[1d12]] --?? $Atk8.base == 20 AND $NumAttacks.total &gt;= 8 ?? Crit dam (Attack 8):| [[1d12]] --?? $Atk9.base == 20 AND $NumAttacks.total &gt;= 9 ?? Crit dam (Attack 9):| [[1d12]] --?? $Atk10.base == 20 AND $NumAttacks.total &gt;= 10 ?? Crit dam (Attack 10):| [[1d12]] --?? $Atk11.base == 20 AND $NumAttacks.total &gt;= 11 ?? Crit dam (Attack 11):| [[1d12]] --?? $Atk12.base == 20 AND $NumAttacks.total &gt;= 12 ?? Crit dam (Attack 12):| [[1d12]] --?? $Atk13.base == 20 AND $NumAttacks.total &gt;= 13 ?? Crit dam (Attack 13):| [[1d12]] --?? $Atk14.base == 20 AND $NumAttacks.total &gt;= 14 ?? Crit dam (Attack 14):| [[1d12]] --?? $Atk15.base == 20 AND $NumAttacks.total &gt;= 15 ?? Crit dam (Attack 15):| [[1d12]] --?? $Atk16.base == 20 AND $NumAttacks.total &gt;= 16 ?? Crit dam (Attack 16):| [[1d12]] --?? $Atk17.base == 20 AND $NumAttacks.total &gt;= 17 ?? Crit dam (Attack 17):| [[1d12]] --?? $Atk18.base == 20 AND $NumAttacks.total &gt;= 18 ?? Crit dam (Attack 18):| [[1d12]] --?? $Atk19.base == 20 AND $NumAttacks.total &gt;= 19 ?? Crit dam (Attack 19):| [[1d12]] --?? $Atk20.base == 20 AND $NumAttacks.total &gt;= 20 ?? Crit dam (Attack 20):| [[1d12]] --?? $Atk21.base == 20 AND $NumAttacks.total &gt;= 21 ?? Crit dam (Attack 21):| [[1d12]] --?? $Atk22.base == 20 AND $NumAttacks.total &gt;= 22 ?? Crit dam (Attack 22):| [[1d12]] --?? $Atk23.base == 20 AND $NumAttacks.total &gt;= 23 ?? Crit dam (Attack 23):| [[1d12]] --?? $Atk24.base == 20 AND $NumAttacks.total &gt;= 24 ?? Crit dam (Attack 24):| [[1d12]] --?? $Atk25.base == 20 AND $NumAttacks.total &gt;= 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! &nbsp;&nbsp;