Dungeon World Character Keeper with integrated dice roller - BETA

I’m afraid I’m not really a Gauntlet member, I’ve not gamed through the Gauntlet, but frequent the forums here, listen to some of the podcasts and I’m a big fan of this excellent community. It happens that I’m running a Dungeon World game online soon so was checking out some of the excellent resources your community has developed.

The DW character keepers look great, but I figured an integrated dice roller might be a useful addition. Link to a beta version below. It runs in Javascript rather than as a sheet function, so it should avoid the issue where everyone’s view of the sheet gets a different random number. In my testing two different users did see consistent views.

I’ve just added the roller buttons to the first character in the keeper for now, in case any tweaking is needed. In this iteration there’s a Roll button for each stat, which picks up the Mod for that stat, and a “+Forward” modifier I’ve added above the stat block.

Dungeon World Character Keeper - Dice Roller beta

Please test away, any comments welcome. An alternative implementation, that would be simpler to maintain, would be to just add a single dice roller button to each character, and either provide a modifier cell, or just generate the raw number and let the player/GM apply any modifiers themselves. To be honest the latter solution might be superior in many ways as it’s easily the most flexible and transparent.

I’d appreciate input from those of you with significant experience of running games online, as I’ve only played online a few times and not run a game that way before yet.

EDIT: I’ve added a simple 2D6 die roller to the second character sheet in the Keeper, as an example.

Simon Hibbs


So one of the issues we’ve had previously with integrated die rollers is that they show different results to different users in the same sheet iirc. That may be an issue with the Random function. But I may be misremembering that. I think @Gerrit looked at that issue before.


That’s because functions in a cell recalculate independently in each copy of the sheet in each browser.

This works differently. You click a button and that runs a javascript function in your browser, then writes the value to a cell. That cell value then propagates to the other copies of the sheet. If nobody else clicks the button, they won’t run the function and will just see the value you generated.

That’s the theory anyway. As I said it worked for me in testing with two accounts and two copies of the sheet, one in Chrome and the other in Firefox.

I’ve granted Edit on the sheet so anyone can play directly with the copy I shared. Also of course feel free to copy the dice roll code and approach.


Here’s how I set up the Roll button and functions.

  1. Tools -> Script Editor
    Try this in my sheet and you should see the javascript code I’m using. Feel free to take and modify. Due to limitations in Google Sheets you need to have a distinct function for each button.

  2. Insert -> Drawing
    Create the button shape and text in the Drawing widget.

  3. Right-click on the button in Sheets and left-click the little three-dots on the right hand side. Select “Assign a script” and enter the name of the script function for that button. It’s just the bare function name, with no parentheses. You can’t pass in parameters from the button. That’s why I have so many functions that are just wrappers to pass in different parameters to the real function that does all the work.

Note: You will need to grant permissions to the script to access the sheet.

Now if you left-click the drawing ‘button’ it should run the function it’s linked to.

IIRC that’s basically it. Let me know if I missed any steps or details and I’ll update these instructions.



Oh good. I know that had bedeviled folks in the past.


That looks like a nice implementation, @Simon_Hibbs! I hope we can add this in the end to the Gauntlet’s Play Aids folder!

I can’t test it at the moment as I’m not at my computer. And it seems that on my mobile I can’t activate the javascript buttons. But I will best at my desktop.

There once was a Javascript character keeper around but people didn’t want to use it as they were warned that enabling Javascript they can’t trust is risk to their system and files. And as we don’t know with whom we will be playing and that it needs just one player refusing to let Javascript run on their system, the keeper wasn’t use. Unfortunately, it never made it to the Play Aids folder and hence even those who would have been fine couldn’t use it.

The keeper I have created is working without Javascript and simply needs the facilitator to pick at random a seed. From then on, whenever you roll, the keeper just picks a new random number from a pregenerated list of random numbers for results.

It’s more elegant with JavaScript for sure. So I’m looking forward to see how this results in more options for people.

1 Like

The Javascript concerns are fair I suppose, although unless you browse everything with Javascript permanently off you’re exposed anyway. Still, it’s a legitimate decision for each of us to make.

OK, I can see the sheet you’re talking about in the Google Docs share, in the General Templates folder. That’s quite ingenious - just use a pre-generated list of numbers and index into them. I’ll have a think.

BTW Completely happy to share this, I greatly appreciate the open nature of this community and would be thrilled to be able to contribute back in any way.


That is probably very true.

Problem is that Google presents this as super risky: A pop-up window appears, asks for permission, you need to select the Google account you want to grant access to, then thre is this:

and you need to click Advanced and accept there again.

For a simple script using the RAND function and writing into a single cell!

But when it’s your main account with all your e-mails, saved passwords, private calendars, automatic photo backups,… then trusting this guy you never met who made a keeper is a hard take if you could also go for rollforyour.party or something similar where everything is done anonymously.

But still. the design you made is great, I would really like to see built-in dice rolling and would probably use it myself. Personally, I prefer the simple variant, similar to how I have implemented it in my keeper variant or how you have done it for the second character. But that is a matter of taste.

The problem with my version with the random seed is that it took a moment. It was a bit too slow. The programming could have been improved. It doesn’t need so many random numbers but instead one could use a few and generate several dice rolls from just one long enough random number.