I was up all night chomping on this, and this is what I came up with. It is suitable for use either by an individual player, or as a campaign script from a DM - since it will work for any players who have the correct attributes. In order for it to work, the script user must have the following attributes on their character; CritRange - contains only the value of the range minimum; e.g. 20, 19 (for 19-20), 18 (for 18-20), etc. BaseAttack STR WeaponDamage (format d6, d8, etc) <-- note, no number - the script doesn't work well for weapons that have multiple base damage dice (e.g. 2d4 won't work) Also the DM (or controller of your enemy) must have an attribute on their token's character sheet named AC Here is the script, along with a description. /roll [[{1d20!>@{selected|CritRange}+@{selected|BaseAttack}+@{selected|STR}}>@{target|AC} ]]@{selected|WeaponDamage} - roll an exploding d20 - only explode above critical range - add base attack - add Strength - based on target's AC for success - and roll that many damage dice. So, this macro first will ask the user to pick a target. It will then roll a d20. If it beats the player's critical threat range, it will roll again, and continue to do so until it does not roll a critical threat. When it finally rolls a non-critical-threatening roll, it goes back through all the rolls it made; each roll that beat the target AC it counts it as a "success". It then totals up the successes and rolls that many damage dice, and delivers the total of the damage rolled. This is obviously set up for melee. A ranged script would require dexterity instead of strength (STR). Also, the attributes listed above don't need to be spelled that way, they only need to be spelled the same way they are in the macro. You can call them whatever you like as long as you make the macro match. It's not perfect but it works. EDIT: My fancy formatting didn't make it; I had each point connected to the part of the code that does it, but it's gone. I hope this make sense.