You can use Javascript's Math.random() property to accomplish this on your own, although writing a whole parser is a bit complex. I have one here: <a href="https://github.com/TableMUSH/NodeBot-Dice/blob/master/Parsers/dd.js" rel="nofollow">https://github.com/TableMUSH/NodeBot-Dice/blob/master/Parsers/dd.js</a> , which relies on this parent class: <a href="https://github.com/TableMUSH/NodeBot/blob/master/Lib/Parser.js" rel="nofollow">https://github.com/TableMUSH/NodeBot/blob/master/Lib/Parser.js</a> and this Tokenizer class: <a href="https://github.com/TableMUSH/NodeBot/blob/master/Lib/Tokenizer.js" rel="nofollow">https://github.com/TableMUSH/NodeBot/blob/master/Lib/Tokenizer.js</a> and this Token class: <a href="https://github.com/TableMUSH/NodeBot/blob/master/Lib/Token.js" rel="nofollow">https://github.com/TableMUSH/NodeBot/blob/master/Lib/Token.js</a> All of this could be converted to Roll20 (except that you'd want to go back to using Math.random() instead of random.org, since we can't do Ajax on Roll20), especially given we know the scripts get concatenated together, which means they can probably reference one another's global namespaces. Alternatively, a roll() function would be a nice and easy way to bundle this up. :)