skip to Main Content

Online Play-Testing with Roll20

I’m using Roll20 to run remote playtests with Chris and other remote testers. Here are some of my recommendations and the techniques I’m using.

Roll20 is a website that lets you create and play tabletop games online. It is designed with role-playing games in mind, but it has a lot of useful features that make it work well for board games: multiple-user video chat, grids, custom card decks, tokens, dice rolling, etc. I set up Lanterns in Roll20 back in May, and I have been running tests with Chris (the designer) and other testers who do not live near me. In this post, I’ll walk through the different features I used to set up the game.

Let’s start with the components:

  • Tiles
  • Lanterns, either cards or cubes
  • Scoring tokens

Custom Deck Interface

Tiles. Players draw three tiles at a time and keep them secret from each other, much like a hand of cards. I created a custom deck. I uploaded one image for the card back and then individual images for each of the card fronts.

Scoring Tokens: In the physical game, scoring tokens are represented by small cardboard tiles. Unlike the larger tiles, these are not kept secret. I uploaded square images for these to create them as objects on the table.

Lanterns. In the physical game, lanterns are represented by mini cards arranged by color into seven stacks. At first I tried creating seven custom decks, but interacting with that many cards in your hand did not make sense in Roll20. Your lantern inventory is public, so it worked better in Roll20 to treat the lanterns like the scoring tokens. I uploaded a small square image with a border for each lantern.

Beyond the simple components, it took a lot of experimentation to make things work and easy to play. Here are some of the techniques I used:

1. Master Campaign and Copies: Each game in Roll20 is known as a campaign. It takes a lot of work to create a game and set everything in the starting position. After you play the game, it can be a lot of work to set everything back to that starting position. Instead, once I have the game created and set up, I create a copy of it. I invite people to play the copy campaign, and then the starting position is preserved in the master campaign.


2. Grid / Zoom: The default unit in the Roll20 grid is 70 pixels x 70 pixels. That would have worked fine for the tiles, but the other tokens needed to be smaller than that. The trick was to zoom out to 30% (by clicking the magnifying class in the toolbar) and building the game at that zoom level. That essentially made the smallest unit in the grid 21 pixels (70 pixels x 30%) pixels. I made the lantern cubes one grid unit, the scoring tokens 2 x 2, and the tiles 3 x 3.

Platform Tile I’ll give you one important note: if you plan to zoom out like this, your images can end up not being as crisp as the originals. Make your graphics as simple as possible for this environment. For example, the diagonal lines in the platform tiles look a little too fuzzy and pixelated. I don’t expect I’ll be able to use the final artwork in Roll20 because of that, though I’m hoping to try a simpler version of it.

3. Tokens and Drawings: It took me a while to realize the importance of this distinction, but Roll20 has two types of images: tokens and drawings. The terminology and features come from role-playing games, but for me the important difference is that tokens snap to the grid (for position and size) and have stat bubbles that appear when clicked; drawings have neither of these. To change an object, you can right-click on it and choose Advanced > Is Drawing. For Lanterns, the tiles and the scoring tokens work best snapping to grid, but the lantern cubes do not.

Unfortunately, by default, the tiles are treated as drawings. It’s pretty painful in a tile-laying game to have tiles that don’t snap to a grid — especially when rotating them. Roll20 has an API, a way for programmers to write JavaScript code that gets executed during a game, and I asked the community if the API could convert cards to tokens automatically. Someone posted a code snippet that works nicely: see forum thread. (You do need a paid account to run code in the API, but the site gives me a lot of value and I have no problem paying to support it.)

4. Controlled By: As the game creator, you have permission to control all the objects in the game. However, that’s not true for the players unless you make it so. It’s easy to change: double-click on the object and select “All Players” in the “Controlled By” dropdown. If you copy and paste eight of the same object (for example, lantern cubes), it’s much easier to change the first one before copying than to change all eight after the fact. Or so I’ve been told. :-)

5. Returning Lanterns: Using Roll20 to play a board game can be a little clunky. (I don’t mind this when creating a game, but I want the game play experience to be as smooth as possible for the players.) I have been exploring more what kind of code can be written for the API, and I wrote my first API script this week to improve some of the clunkiness. It used to take a lot of mouse movement to get the lanterns back in their stacks, so I wrote some code that provides a “Return” area in the corners of the board: any lantern placed partially in this box gets automatically moved back to its spot in the stack of lanterns. (For anyone interested in this kind of thing, I have posted the code online:….)


Players put lanterns in the Return box; my API code returns them to the supply.

(One important note on using the API: it is not always active. When I first open up a campaign, sometimes none of my code gets executed. The problem seems to go away after the campaign has been open for a while, so in the future I will be opening up my campaigns about an hour before a scheduled game and saving the scripts to hopefully give them time to spin up.)

Roll20 doesn’t replace the tabletop experience, but I’m happy to use Roll20 to play games with people that I otherwise wouldn’t get to play games with. If you have used it, what tips can you share? If not, is it something you think you might want to use? Do you recommend another way to  play games remotely?

I owe Michael Iachini (Clay Crucible Games) a huge thanks for introducing me to Roll20.

This Post Has 2 Comments
  1. I’ve been wanting to try roll20, and this 101 course is a huge help for when I go almost make all these mistakes. Pretty cool to see your coding solution as well. I can write a bit in JS, so I’m excited to know it’s possible to get in under the hood and fix it up a bit. 

    Thanks for sharing! See you in an online game sometime!

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Back To Top
%d bloggers like this: