What keith says is true for complex crit logic. However, if you just want to roll another die or something simple on a crit (roll>n) roll on a d20, there are a couple options, depending on what character sheet you are using. Many sheets, like the 5E D&D for Roll20 sheet for example, have crits are built into it. Assuming it is not built in to your sheet (since you probably wouldn't be asking the question), there is a trick that I saw from one of Oosh's posts recently that uses the default template and inline roll referencing that is pretty neat. Take the simple example below. 1d20 with no modifiers for attack (crit on 20), 1d8+3 normal damage, and another 1d8 on a crit. &{template:default} {{name=Attack Macro}} [[[[floor([[1d20cs>20]]/20)]]d8[CRIT]]] {{Atk $[[0]] atk, [[1d8+3]]+$[[2]] dmg}} The [[floor(....]] function returns 1 on a 20, and returns 0 for less than 20. So the crit damage is either 0d8 or 1d8 depending on the roll. $[[0]] returns the value of the first inline roll (the d20), while the $[[2]] returns the (0or1)d8 inline roll. Not used here is the 2nd inline roll evaluation $[[1]], which is just going to be either 0 or 1 as described above, and generally not useful to report on it's own. Also note, unfortunately you can't use the $[[n]] references for any additional math (so $[[2]]+5 doesn't work). Just a quirk of the system. Sample output for a non crit: Sample output for a crit: You can easily replace the static modifiers with character attribute calls, as required. E.g. @{strength_mod} or @{selected|strength_mod}, etc. Note, however : If a modifier is added to the attack roll, you would need to replace the "/20" in the floor function with "/(20+total modifier)". So, if the attack roll ended up being 1d20+5 after all modifiers, you would use "/25" in the floor function. Finally, I was told this trick only works when using the default template. I checked with some 5E templates with no luck . EDIT: Oosh clarified why this wasn't working for me before. Unrelated to the floor/$[[n]] trick.