I have a new campaign coming up soon in my world’s Egyptian/Arabian style region, and I took the time to write a macro that more suits how I think skill checks should work. One of the big issues that I have with games in general, is that a lot of systems have skill checks, and a skill check when rolled for is a game based meta trigger. This article will show how I have gotten around it for the purposes of Roll20, with some details at the end to help players and GMs if they want to do the same, or make it work for themselves.


How did I fix it in Roll20? A Macro of course! The hardest part of this macro, is actually getting the math to work, but once it’s in, it works like a charm, and makes the game more alive for the players. Now before I go on, I want to address the albatross in the room, critical success results in skill checks, and failures too.

I personally think non critical skill checks are wrong. Often in our world, accidents lead to great discoveries. But more often, now and then, someone will do something that is a standout one of a kind, because the universe just happened to line up for them; 99 Red Balloons by Nena is an example. While not her their song and not the only one in that style, but for some reason, this one went nuts. Even when MOST people could not understand 99% of the words. And every now and then an artist makes something, that is just so, SO bad, but they didn’t do much different than any other time.

So how did I handle this? Easily: exploding dice. On a skill check, if you roll a natural 20, roll it again and add it on. It is a simple solution that works surprisingly well. I have the following macro set up with exploding dice, but I also include the step to make it NOT explode (delete one character). So let’s dive into the macro, and go over the steps, and then start looking at modifying it after.

This is for the Community Sheet for 5e on Roll20.


Before you start making this macro, and making it work more specifically, you need to do some prep work on the character sheet. It’s not that hard, but you have to do it on all of the character sheets you want to have access to this macro. Without it, it will fail.

  1. Open your character sheet, and select the third tab along “Attributes & Abilities”
  2. Now you need to add 6 new attributes to the sheet(s), using these guidelines:
    1. Each needs to have a unique name, NOT used by Roll20, so you don’t cause things to go nuts.
    2. Mine for example are ta-str-mod, with each one changing the stat that it links to.
  3. Once done, each needs to have the following formula setup in the “Current” field:
    1. [[floor((@{Strength}-10)/2))]] as an example for Strength rolls.
    2. Again; change the stat to suit. While step b above has a 3-letter version of the stat, but in this field, it MUST be the full word with a capital at the front, or it will fail!

Here is what it should look like.

That is the prep work done. Once every sheet has that in the back end, you can move on to getting the macro done.


At the end of this is a panel to copy the code directly. But I will go over the macro in parts so it’s easy to understand for those that are learning or wanting to do different things with the base I have made here.

The basics:

&{template:5eDefault} {{ability=1}} {{title=@{selected|token_name}

This bit just sets the template, colour as well as the first line of the heading.

?{Skill|Acrobatics,Acrobatics|Animal Handling,Animal Handling|Arcana,Arcana|Athletics,Athletics|Deception,Deception|History,History|Insight,Insight|Intimidation,
Performance,Performance|Persuasion,Persuasion|Religion,Religion|Sleight of Hand,Sleight of Hand|
Stealth,Stealth|Survival,Survival} Skill Roll}} }}

This is the first variable of the macro, it asks what skill is being made. Pretty simple, if you want to add or modify any skill.  All it is is a list of them by name, with their name as the value.

{{subheader=Skill Level: ?{Skill Level|Unskilled,0|Skilled,1|Expert,2}}}

This second variable sets the level of skill of the player. The result you will note is a number, rather than text. I will get to how this works in a section later on. This too can be modified to suit your game system and skill setup.


This allows for you to make custom keys, with custom data. This is used by the “Result” field below, and without it, it will not display. Used in a KEY=VALUE setup.

{{emote=Skill level 0 is no Porf Bonus, 1 uses the PB as is, and 2 for expertise uses the Prof Bonus 2 times.}}

This is an emote, so it places a text box under the title with some text in it. In this case it is giving information about the skill level so the player and GM have clarity over the roll.

{{Result=You have rolled a(n) ***?{Skill}*** skill check, the GM will let you know the results shortly. ***Good Luck!***}}

This just ends the panel for the players.

/w GM &{template:5eDefault} {{ability=1}} {{title=@{selected|token_name}


This part sets the header for the GM section. The /w GM whispering the GM only the results of the roll.

Using “?{Skill}” like this takes the result from the earlier input by the player and applies it, rather than re-asking for it again.

(?{Stat|Strength,@{selected|ta-str-mod}|Dexterity,@{selected|ta-dex-mod}|Constitution,@{selected|ta-con-mod}|Intelligence,@{selected|ta-int-mod}|Wisdom,@{selected|ta-wis-mod}|Charisma,@{selected|ta-cha-mod}} ) }}

This bit also asks the player for the stat they want to use, and then grabs the result from the 6 fields we added to the character sheet in the “Attributes & Abilities” tab.

Make sure you change this to what ever name you used in your setup above in Step 1.

{{showclassactions=1}} {{***Result***=[[ 1d20! + [[@{selected|global_check_bonus}]] + [[ @{selected|PB}*?{Skill Level} ]] + [[ ?{Stat} ]] ]] }}

Again the class action allows us to customise the output. There are a couple of important parts to this last section, so I will break them down:

  1. The result calculation is a 1d20 roll, plus any global check bonus that apply, and the selected token’s Proficiency Bonus (PB). Now after the bonus, you see it calls on the Skill Level selector from before, and multiplies the PB by the resulting value of the skill level checked.This section can be modified as well, and could include somewhere in the GM display the skill level as well, using this same method.
  2. The last thing it adds is the Stat being used, as per the selector earlier. Same thing with this as the PB, in that it allows you to re-display the stat being used for the check. This call though pulls the result from the Part 1 setup, grabbing the result of [[floor((@{Strength}-10)/2))]] for example for a Strength check.
  3. The last point of note, is that with the d20 roll, you should notice now I am pointing it out, there is a “!” at the end of the 1d20. This is what generates an exploding dice calculation, and if you don’t want that in your game, just delete the “!” and it will work fine.


That is it. Very simple compared to some, and no API makes it easier. Hopefully this article will either give you a tool you can use straight out of the box, or something at least to start your own, and maybe some help with just something else you are working on.

Here is the full code to copy and paste, and an example of the 6 fields from Part 1 (above) with how I set them up, so you can more easily copy or use then as is.

&{template:5eDefault} {{ability=1}} {{title=@{selected|token_name}
?{Skill|Acrobatics,Acrobatics|Animal Handling,Animal Handling|Arcana,Arcana|Athletics,Athletics|Deception,Deception|History,History|Insight,Insight|
Performance,Performance|Persuasion,Persuasion|Religion,Religion|Sleight of Hand,Sleight of Hand|
Stealth,Stealth|Survival,Survival} Skill Roll}} }} {{subheader=Skill Level: ?{Skill Level|Unskilled,0|Skilled,1|Expert,2}}} {{showclassactions=1}} {{emote=Skill level 0 is no Porf Bonus, 1 uses the PB as is, and 2 for expertise uses the Prof Bonus 2 times.}} {{Result=You have rolled a(n) ***?{Skill}*** skill check, the GM will let you know the results shortly.

***Good Luck!***}}

/w GM &{template:5eDefault} {{ability=1}} {{title=@{selected|token_name}
?{Skill} (?{Stat|Strength,@{selected|ta-str-mod}|Dexterity,@{selected|ta-dex-mod}|Constitution,@{selected|ta-con-mod}|Intelligence,@{selected|ta-int-mod}|Wisdom,@{selected|ta-wis-mod}|Charisma,@{selected|ta-cha-mod}} ) }} {{showclassactions=1}} {{***Result***=[[ 1d20! + [[@{selected|global_check_bonus}]] + [[ @{selected|PB}*?{Skill Level} ]] + [[ ?{Stat} ]] ]] }}

ta-str-mod [[floor((@{Strength}-10)/2))]] ta-dex-mod [[floor((@{Dexterity}-10)/2))]] ta-con-mod [[floor((@{Constitution}-10)/2))]] ta-int-mod [[floor((@{Intelligence}-10)/2))]] ta-wis-mod [[floor((@{Wisdom}-10)/2))]] ta-cha-mod [[floor((@{Charisma}-10)/2))]]