Powered by Squarespace

I use Roll20 for running Tabletop RPG games both in-person and online.  Setting up Roll20 for online interaction is fairly well defined in many YouTube videos and tutorials.  I'd like to go into more detail on how I use Roll20 for in-person interaction at a table.  In this case, I'm going to go over how I setup the 5th Edition D&D Murderhobos Anonymous campaign I stream on Twitch.

Roll20 Campaign Settings

I create the campaign using the 5th Edition (OGL by Roll20) Character sheet, primarily because the official 5e modules use it, and I don't want to muck around with trying to convert them to another sheet.  The 5e shaped sheet has a ton of really useful features for players, but because the in-person players will be handling their own character sheets, the OGL NPC sheet works just fine.

Game Default Settings

Assuming that I don't need to make any NPC character sheets, I set the following Default Game Settings in the Campaign Settings tab:

Token Defaults

  • Bar 1: 5/5
  • Bar 2: AC
  • Check "Show Nameplate"
  • Player Permissions: Check See for "Name", "Aura 1", "Aura 2"
  • Emits Light: Check "Has Sight"

I set Bar 1 to 5/5 so that 2/5 HP colors the tokens Yellow, and 1/5 HP colors the token red.  I'll go into more detail on that in the API section.

I set Bar 2 to AC, so that I remember to enter the AC of the player character in the bar.

Checking "Show Nameplate" makes sure that the token names are shown.

Setting the player permissions for the Name, and both Auras saves time later if I need to show an aura on a player token (Spirit Guardians, Paladin Auras, etc).

Player characters have sight, so having sight is nice.

Page Defaults

For page defaults, I generally leave it as is, at the very least, I check "Enforce Line of Sight" and "Restrict Movement" for dynamic lighting.  Both of them are only relevant if there is dynamic lighting on a page.

Access Compendium In-Game

Compendium Access is very important for finding info fast, and pulling unexpected creatures into your campaign (I'm looking at you, Druid with Conjure Creatures).

Default Sheet Settings

The Default Sheet settings are nice, but because I'm only using the actual character sheets for NPCs, I typically only set it up for NPCs, or leave it as default.

Roll20 API Scripts

Note that you will need to be a Pro level Roll20 subscriber to access the Roll20 API.

I am going to go through each of the API scripts I regularly setup in my campaigns.  Most of them are available through the built-in API Script Library, but some of them are not.  I'll try to link to forum posts where I can.

5th Edition OGL by Roll20 Companion

There isn't much that I use this script for, I mostly keep it handy because it extends the capabilities of the OGL sheet.  Mainly, I might deactivate the spell slot tracking, because it tends to complain when you're using the NPC sheet.


This is an invaluable script for rolling initiative for multiple tokens at once (for instance, when those 20 goblins attack the party all at once).  Normally if I was using minis on a grid map, I would group the mobs into squads, and roll initiative for each squad, so that I have less enemies to track.  But in Roll20, the initiative tracker makes managing a large number of tokens much much easier.  I can zip through 15-20 NPCs in initiative very quickly, without slow combat down too much.

You will need to setup GroupIntiative for the system and character sheet that you are using.  In my case, with the 5e OGL sheet, I enter the following commands into the campaign chat:

!group-init --del-group 1

!group-init --add-group --Stat-DnD dexterity

I setup a macro to run: "!group-init", and set it up on my macro bar.  Then I only have to select any number of NPC tokens, and hit the macro button.  Because I'm not using Roll20 Character sheets for Player Tokens, I'll have to right click on them and select "Add Turn", and then manually add the initiative values that they rolled at the table.


This handy script makes it easy to make macros that modify Token settings.  I primarily use it with the following macro script to quickly modify token sight.

!token-mod --set ?{Vision|Torch, light_radius#40 light_dimradius#20 light_hassight#yes light_angle#360 light_otherplayers#yes|Daylight, light_radius#60 light_dimradius#30 light_hassight#yes light_angle#360 light_otherplayers#yes|No light source, light_radius#5 light_dimradius#=-5 light_hassight#yes light_angle#360 light_otherplayers#no|Darkvision (60'), light_radius#60 light_dimradius#=-5 light_hassight#yes light_angle#360 light_otherplayers#no|Darkvision (120'), light_radius#120 light_dimradius#=-5 light_hassight#yes light_angle#360 light_otherplayers#no|Warlock Devil's Sight, light_radius#120 light_dimradius#=120 light_hassight#yes light_angle#360 light_otherplayers#no}

Aura/Tint HealthColors

I've recently started using this script, and I'm really liking it.  The purpose of this script is to tint tokens based on how much damage they've taken.  This script adds additional features, like special FX for damaging and healing tokens.  It can also play a sound from your Jukebox on the death of a token.  I have a Wilhelm scream that plays on token death.

Marching Order

Another new edition to my setup, this lets you select a group of tokens, and they will all follow the front token in a line.  This greatly simplifies exploring a dungeon, as I used to either try to keep all the tokens in a relative group manually, or give up and move just one token for the entire group, then worry about placement when it matters.  Now I can just move 1 token, and the rest will follow.


The last new edition to my setup, and the last of the built-in API scripts.  This lets me select a group of NPCs and run checks and saves with all of them, such as when a PC drops a fireball on them.  It's functionality is further expanded with the ApplyDamage script, which I'll detail below.  You'll want to run the following command in chat, to set it up for the 5e OGL sheet:

!group-check-config --import 5E-OGL


This script works along with GroupCheck so that after I've made a group check with a number of tokens, I can then automatically apply damage to those tokens, based on whether they've saved or not.  I've only used this script in one game since writing this, but it immediately saved a bunch of time that I would have spent individually rolling and applying damage to tokens.

Use the following macro to run a GroupCheck that automatically applies damage.  It places a Red status marker on tokens that failed the save:


!group-check {{
--?{Which Save Stat|Strength,Strength Save|Dexterity,Dexterity Save|Constitution,Constitution Save|Intelligence,Intelligence Save|Wisdom,Wisdom Save|Charisma,Charisma Save}
--subheader vs DC ?{DC}
--button ApplyDamage !apply-damage
~dmg [[?{Damage}]]
~type ?{Damage on Save|Half,half|None,none}
~DC ?{DC}
~saves RESULTS(,)
~ids IDS(,)
~status red
!group-check {{--hideformula--public--?{Which Save Stat|Strength,Strength Save|Dexterity,Dexterity Save|Constitution,Constitution Save|Intelligence,Intelligence Save|Wisdom,Wisdom Save|Charisma,Charisma Save}--process--subheader vs DC ?{DC}--button ApplyDamage !apply-damage~dmg [[?{Damage}]]~type ?{Damage on Save|Half,half|None,none}~DC ?{DC}~saves RESULTS(,)~ids IDS(,)~status red}}



This is a tiny utility script that I can use to select a number of tokens, and reroll their hit points based on their NPC sheet.  This is useful because the official Roll20 modules have all of the NPCs on the pages set to their average value.  Rolling HP like this adds a little variaty to combat.  However, be careful about selecting an entire map worth of tokens, and running this script.  It will reroll the HP for special NPCs that may start with a specified number of HP.


This script adds so much to in-person tabletop games, that I'm not sure how I managed before it was written.  Essentially, it toggles token sight based on who is currently at the top of the initiative tracker.  This means that when it's a player's turn, they can only see what their token can actually see, and not everyone's sight added together.  When an NPC goes, it resets the token sight back to everyone.  This script is only useful for in-person campaigns, and would be very confusing for an online game.  In order for the script to work, you need to collect the Token ID numbers for each of the Player Tokens, and add it to a specific line in the API script.

I use the following macro to make it easier to copy:

/w gm "@{selected|character_id}", 

The macro will send in chat exactly what you need to copy into the script.