This is an initiative roller for V20. 1. You set two macros: !ini ?{Dexterity|2} ?{Wits|2} ?{Celerity|0} ?{Mod|0} 0 !ini ?{Dexterity|2} ?{Wits|2} ?{Celerity|0} ?{Mod|0} 1 2. Let players use them and add them to the bar. The first one is public, the second one is for GM eyes only. If the player uses it, he won't see the roll. You set couple of things: 1. Dexterity and Wits, which will be added to the roll. 2. Celerity you have and didn't use the previous round. 3. Mod. For example, dice pools penalties for sustained damage. And in the end, the script rolls 1d10. Adds it all up and inserts the result to Turn Order with the name of the roller (so if you used a character, s/he's name will be in the Turn Order). I couldn't add portraits to the Turn Order, since from what I saw in the API, you have to get them from Tokens and I'm not using them in anyway. P.S. Yeah, I know the code looks bad. It was done quick and I didn't care about formatting. on("chat:message", function(msg) { if( msg.type != 'api' ) return; var cmd = msg.content.toLowerCase().split(' '); if( cmd[0] == "!ini" ) { var inputName = msg.who; var list = findObjs({ _type: "character", name: inputName }); var str = ""; if (cmd[5] == 1) str = str + "/w gm "; str = str + "<br><b>Initiative Roll</b>"; var roll = Math.floor((Math.random()*10)+1); str = str + "<br>Dexterity: " + cmd[1]; str = str + "<br>Wits: " + cmd[2]; str = str + "<br>Celerity: " + cmd[3]; str = str + "<br>Mod: " + cmd[4]; str = str + "<br>Roll: " + roll; var count = 0; count = roll + parseInt(cmd[1]) + parseInt(cmd[2]) + parseInt(cmd[3]) + parseInt(cmd[4]); str = str + "<br><b>Total: </b>" + count; if (list.length == 0) { sendChat("player|"+msg.playerid, str); } else { sendChat("character|"+list[0].id, str); } var turnorder; var turnorder; if(Campaign().get("turnorder") == "") turnorder = []; //NOTE: We check to make sure that the turnorder isn't just an empty string first. If it is treat it like an empty array. else turnorder = JSON.parse(Campaign().get("turnorder")); //Add a new custom entry to the end of the turn order. turnorder.push({ id: "-1", pr: count, custom: msg.who }); Campaign().set("turnorder", JSON.stringify(turnorder)); } });