Roll20

From Omnia
Jump to navigation Jump to search

Sub Pages Table of Contents

Roll 20.net

Moving Tokens

Manipulating Graphics - Roll20 Wiki - https://wiki.roll20.net/Manipulating_Graphics

Alt key for fine movements

Tapping ←, →, ↑ or ↓ arrow keys will move a selected token one grid unit in the specified direction

X key for token past movement

Q key for waypoint movement

E and mouse wheel to rotate

Rotation

When token selected, blue handle will stick out the front of the token.

Can also hold E and mouse wheel to rotate.

Can also hold Alt + E and mouse will to rotate more accurately.

Roll Dice

/roll 1d20+10 vs AC
/roll 1d4+9 Damage
/roll 5+3

Ref: https://wiki.roll20.net/Dice_Reference

Ref: https://roll20.zendesk.com/hc/en-us/articles/360037773133-Dice-Reference

Inline Roll

I like the number [[1d100]] or 5+3

Drop/Keep

Advantage/Disadvantage

/r 4d20k1  # roll 4d20 keep highest
/r 4d20kh1  # roll 4d20 keep highest (ditto)
/r 4d20kl1  # roll 4d20 keep lowest
/r 4d20dl   # drop lowest
/r 4d20dl   # drop highest

Chat

Ref: https://wiki.roll20.net/Text_Chat

Whisper

/w [user] [msg]

Whisper to GM

/w gm [msg]

GM Roll

/gmroll 2d6+3

Emote

/em ...
/me rams his dagger home

Re3GCjh.png

Out of Character

OOC entries always appear as the player (e.g. "Riley D.") rather than the Character you have selected in the "Speaking As" drop-down (e.g. "Orrbain").

/ooc I could really use another Red Bull right now.

Talk To Myself

/talktomyself or /talktomyself on
/talktomyself (again) or /talktomyself off

Chat Markup

Text Chat - Roll20 Wiki https://wiki.roll20.net/Text_Chat

Bold

** bold **

Italicize

* italicize*

Link or Image

[link or image](url)
[x](img_url)
*I* **love** [Roll20](https://app.roll20.net)

Inline Roll

Inline roll 1d20+5

Colored Text

NOTE: Doesn't appear to work...

 <inline style="color: rgb( 31 , 73 , 125 )">blue</inline>
 <span style="background: yellow">OOC: What is this?</span>

Community Forums: Colored text | Roll20: Online virtual tabletop https://app.roll20.net/forum/post/2069398/colored-text

Escape Text

Start line with back tick `

`&{template:default} {{attack=[[1d20]]}}

Useful for sharing Macros

GM Descriptions

/desc  (description not spoken by anyone: center aligned, bold, italicized, black font, light grey highlight)
/as
/emas
/gmroll in secret
/gr

Talk to Myself

/talktomyself on
/talktomyself off

Images

[Gold the Great](https://s3.amazonaws.com/files.d20.io/images/1725103/oXeN9hS_kB395ps0zsHD9Q/med.gif?1377575057&size=200x200#.gif)

UKWY24U.png

Ref: https://app.roll20.net/forum/post/1793704/how-to-show-pictures-slash-images-to-players

---

Image by choice: (will ask for caption, and url, but provides defaults)

[?{Caption|no caption}](?{URL|http://www.d20pfsrd.com/_/rsrc/1420094759946/config/customLogo.gif?revision=40}#.png)

Macros

Anything you can command. Name the macro, and you can then call it with #[MACRO_NAME]

(Nesting Macros) Macros can also call other macros with the #[MACRO_NAME]

Use selected token: (user bar1 value

/r 1d20 + @{selected|bar1}
/r 1d20 + @{selected|Intelligence}
/r 1d20 + @{selected|token_name} fires his gun!  # use selected name
/r 1d20 + @{selected|character_name} fires his gun!  # use selected name

ref: https://wiki.roll20.net/Macros

Roll Query

?{Prompt Message}
//Example:
/roll ?{Number of Dice}d20
//You can also include a default value:  (1 is default)
/roll ?{Number of Dice|1}d20
?{Which macro?|Attack,#use-sword |Defend,#use-shield }

ref: https://wiki.roll20.net/Dice_Reference#Roll_Queries

Choice

?{Which |Charm, #Charm |Fear, #Fear |}

Ref: https://app.roll20.net/forum/post/5220046/macro-with-choices

Share Macros

There is a "Visible To" setting to share Macros with players. (Have to scroll down in the Macro edit).

Calculator Macro

Popup to do some calculations. Only slightly cooler than just typing them in the chat window directly.

**=** [[?{Calculator}}]]

note: the double asterisks simply make the = bold. The only Part you really need is in the brackets.

ref: [1]

True False Macro

On a character sheet,

Create an ability:

[Do I Like It?](~selected|bool[[ 1d2 ]])

Create a "bool1" with "True" and a "bool2" with "False" ability.

Ref: [2]

Templates

Default Template

Works on any character sheet

814INLA.png

&{template:default} {{name=Fey Presence}} {{Charm = [Roll20 Logo](gif)}} {{Effect= A charmed creature can’t Attack the charmer or target
the charmer with harmful Abilities or magical effects. The charmer has advantage on any ability check to interact socially with the creature.}} 

1d20

&{template:default} {{name=Rolls a 1d20  [[1d20]]}}

&{template:default} {{name=Player Name}} {{Rolls a 1d20=[[1d20]]}}

Roll Some Dice

&{template:default} {{name=Roll Some Dice}} {{1d4 = [[1d4]]}} {{1d6 = [[1d6]]}} {{1d10 = [[1d10]]}} {{1d12 = [[1d12]]}} {{1d20 = [[1d20]]}} {{1d100 = [[1d100]]}}

DnD Templates

WARNING: TEMPLATES ARE CHARACTER SHEET SPECIFIC!

Roll Stats

lVJujtQ.png

&{template:default} {{name= Ability Scores}} {{[[4d6kh3]][[4d6kh3]][[4d6kh3]][[4d6kh3]][[4d6kh3]][[4d6kh3]]}}

Other

lVJujtQ.png

&{template:default} {{name= Ability Scores}} {{[[4d6kh3]][[4d6kh3]][[4d6kh3]][[4d6kh3]][[4d6kh3]][[4d6kh3]]}}


LlHtoyG.png

&{template:desc} {{desc=desc}}


lypdXox.png

&{template:simple} {{rname=rname}} {{mod=mod}} {{r1=r1}} {{always=1}} {{r2=r2}} {{charname=charname}}


D%26D_5E_OGL_Spell_Template.jpg

&{template:spell} {{level=school level}} {{name=name}} {{castingtime=castingtime}} {{range=range}} {{target=target}} {{v=1}} {{s=1}} {{m=1}} {{material=material}} {{duration=duration}} {{description=description}} {{athigherlevels=athigherlevels}} {{ritual=1}} {{concentration=1}} {{charname=charname}}


D%26D_5E_OGL_NpcAction_Template.jpg

&{template:npcaction} {{attack=1}} {{damage=1}} {{dmg1flag=1}} {{dmg2flag=1}} {{name=name}} {{rname=rname}} {{r1=r1}} {{always=1}} {{r2=r2}} {{dmg1=dmg1}} {{dmg1type=dmg1type}} {{crit1=crit1}} {{dmg2=dmg2}} {{dmg2type=dmg2type}} {{crit2=crit2}} {{description=description}}


D%26D_5E_OGL_NpcAtk_Template.jpg

&{template:npcatk} {{attack=1}} {{name=name}} {{rname=rname}} {{rnamec=rnamec}} {{r1=r1}} {{always=1}} {{r2=r2}} {{description=description}}


For more templates: https://wiki.roll20.net/D%26D_5e_by_Roll20_Roll_Templates

My Template Creations

Character Initiative:
dR17tyh.png

&{template:simple} {{rname=INITIATIVE}} {{mod= @{selected|initiative_bonus} }} {{r1= [[ 1d20 + @{selected|initiative_bonus} &{tracker} ]] }} {{normal=Hello World}}

NPC Initiative:
nv1wZ5g.png

&{template:npcaction} {{rname=Initiative}} {{description=Initiative: [[ 1d20 + @{selected|initiative_bonus} &{tracker} ]] }}

CoC Templates

Call of Cthulhu Initative

Base character sheet:

&{template:callofcthulhu}{{name=@{Clarence|character_name}}}Template:Title=Initiative{{roll=[[@{selected|dexterity} &{tracker}]]}}

Simple:

@{selected|token_name} has [[ @{selected|dexterity} &{tracker} ]] for initiative.

With readied weapon:

@{selected|token_name} has [[ 50+@{selected|dexterity} &{tracker} ]] for initiative.

Old one I used:

/me rolls [[ @{selected|dexterity_mod}+1d20 &{tracker} ]] for initiative.

Call of Cthulhu Sheet

&{template:callofcthulhu} {{name=Some test...}}

Roll Stats

&{template:default} {{name=ATTRS}} {{STR=[[3d6*5]]}} {{CON=[[3d6*5]]}} {{POW=[[3d6*5]]}} {{DEX=[[3d6*5]]}} {{APP=[[3d6*5]]}} {{SIZ=[[(2d6+6)*5]]}} {{INT=[[(2d6+6)*5]]}} {{EDU=[[(2d6+6)*5]]}} {{LCK=[[3d6*5]]}}

ref: [3]

Roll 1d100 and 1d10

&{template:default} {{name=Roll 1d10}} {{Result = [[1d10]]}}

&{template:default} {{name=Roll 1d100}} {{Result = [[1d100]]}}


&{template:default} {{name=Roll 1d4: ?{For|}}} {{Result = [[1d4]]}}

&{template:default} {{name=Roll 1d6: ?{For|}}} {{Result = [[1d6]]}}

&{template:default} {{name=Roll 1d10: ?{For|}}} {{Result = [[1d10]]}}

&{template:default} {{name=Roll 1d12: ?{For|}}} {{Result = [[1d12]]}}

&{template:default} {{name=Roll 1d20: ?{For|}}} {{Result = [[1d20]]}}

&{template:default} {{name=Roll 1d100: ?{For|}}} {{Result = [[1d100]]}}

Hard vs Extreme

/roll 1d100 vs [[@{selected|accounting}]]/[[floor(@{selected|accounting}/2)]]/[[floor(@{selected|accounting}/5)]]

lZhwomG.png


/roll 1d100 vs [[@{str}]]/[[floor(@{str}/2)]]/[[floor(@{str}/5)]]

General Dice Roller

&{template:callofcthulhu} {{roll_type=General Dice Roller}} {{title=?{Source|Something Strange}}} {{roll=[[?{Dice to Roll|2d6/1d3/3d10}]]}} {{text=Notes: ?{Notes|Put notes here for future reference.}}}

28SfIDu.png

Note: can skipp "roll_type", but keep title.

Firing Damage

&{template:callofcthulhu} {{roll_type="Little" Jimmy Foster}} {{title=Wild Tommy Gun Fire}} {{roll=[[1d6]] Damage}} {{text=For more information, see ***[S⁠tarting The Action](http://journal.roll20.net/handout/-LyjjADrc7rY7Swfqdz_)***.}}

1W1CDas.png

Sanity Rewards

&{template:callofcthulhu} {{roll_type=Conclusion}} {{title=Sanity Rewards}} {{roll=[[?{Stopped Turner without killing him|Yes,2d6|No,0|Killed Turner,-1d6}+?{Stole or secured
the trumpet|Yes,1|No,0}+?{Turned in Boss Bonato|Yes,1d3|No,0}]] Sanity Points}} {{text=For more information, see ***[C⁠onclusion](http://journal.roll20.net/handout/-Lyji5w0exosX92Auwdb)***.}}

k78uzNM.png

Percentile Dice Roller

&{template:callofcthulhu} {{roll_type=Percentile Dice Roller}} {{title=?{Source|Something Strange}}} {{roll=[[1d100]] vs **?{Comparison|0}**}} {{text=Notes: ?{Notes|Put notes here for future reference.}}}

Note: can skipp "roll_type", but keep title.

EUw9cbY.png

Armor

&{template:callofcthulhu} {{name=@{character_name}}} {{title=Armor + Shields + Death Bringer Cloak Absorbs}} {{roll=[[1d8+1d6+1d4]]}}

Delta Green Templates

&{template:rolls} {{header=bob}} {{subheader=50}} {{dice=[[1d2]]}}
&{template:rolls} {{header=bob}} {{desc=hello}}

https://github.com/Roll20/roll20-character-sheets/blob/master/Delta%20Green%202/src/pug/rolltemplate.pug

Script Examples

Ray of Frost damage

Ray of Frost damage 1d8 per 1st, 5th, 11th, 17th

[[round((@{level} + 1) / 6 + 0.5)]]d8

Magic Missile Damage

?{MissleCount|3}d4+?{MissleCount}

Import DnD Beyond Characters

https://github.com/RobinKuiper/Roll20APIScripts

Raw source of script:

https://raw.githubusercontent.com/RobinKuiper/Roll20APIScripts/master/BeyondImporter_5eOGL/BeyondImporter.js

DnD Beyond character add /json, copy and paste into chat:

!beyond --import [JSON.....]

Initiative Roll Macro

WARNING: None of these auto handle advantage initiative...

Initative Template:

&{template:simple} {{rname=INITIATIVE}} {{mod= @{selected|initiative_bonus} }} {{r1= [[ 1d20 + @{selected|initiative_bonus} &{tracker} ]] }} {{normal=1}}

Force Initiative Advantage:

&{template:simple} {{rname=INITIATIVE ADV}} {{mod= @{selected|initiative_bonus} }} {{r1= [[ {1d20,1d20}kh1 + @{selected|initiative_bonus} &{tracker} ]] }} {{normal=1}}


ref: [4]

// @{selected|token_name} rolls [[ @{selected|dex_mod}+1d20 &{tracker} ]] for initiative.
@{selected|token_name} rolls [[ 1d20 + @{selected|initiative_bonus} &{tracker} ]] for initiative.

or

Rolling Initiative for @{selected|token_name}: [[ 1d20+?{Initiative Bonus|0} &{tracker} ]]

NPC Macro: (doesn't work with player characters)

%{selected|npc_init}

DnD Iniative

@{Blarg|wtype}&{template:simple} {{rname=^{init-u}}} {{mod=@{Blarg|initiative_bonus}}} {{r1=[[@{Blarg|initiative_style}+@{Blarg|initiative_bonus}@{Blarg|pbd_safe}[INIT] &{tracker}]]}} Template:Normal=1 @{Blarg|charname_output}

Call of Cthulhu Iniative

@{selected|token_name} has [[ @{selected|dexterity} &{tracker} ]] for initiative.

With readied weapon:

@{selected|token_name} has [[ 50+@{selected|dexterity} &{tracker} ]] for initiative.

Old one I used:

/me rolls [[ @{selected|dexterity_mod}+1d20 &{tracker} ]] for initiative.

Delta Green Initiative

@{selected|token_name} Initiative Roll [[@{selected|dexterity_score} [dexterity_score] &{tracker}]]

What's My Luck

@{selected|token_name} has [[ @{selected|luck} ]] luck

Fog of War and Dynamic Lighting

Fog of War - Forced Darkness layer by DM

Advanced Fog of War - Gray Darkness layer

  • Show Grid - Show grid through fog of war and shadows
  • Dim Light Reveals -
  • All Tokens Reveal (GM) -

Dynamic Lighting

  • Enforce Line of Sight - Players can only see light that they can directly see
  • Only Update on Drop - Update areas only drop (good to keep players from sneaking around walls and back)
  • Restrict Movement - Can't cross DL lines (must have sight)
  • Global Illumination - No shadows (only when you only want restrict only)

Campaign Settings

Allow players to import their own Characters?  Yes
ROLL QUERIES:  Advantage Toggle
WHISPER ROLLS TO GM:  Whisper Toggle

My preferred for Compendium Monster drops:

BAR 1 VALUE:  npc_challenge
BAR 2 VALUE:  npc_ac
BAR 3 VALUE:  hp_max
BAR 3 MAX:  hp_max
* all others are blank
Sanity Score:  On

5e.tools

Import Monster Manual

https://5e.tools/roll20.html
https://wiki.5e.tools/index.php/Better20_User_Guide

Advanced Keyboard Shortcuts

m	Switch to @ Map & Background Layer
o	Switch to b Object & Tokens Layer
k	Switch to E GM Info Layer
,	Switch to r Dynamic Lighting Layer
l m	Move selected object(s) to @ Map & Background Layer	
l o	Move selected object(s) to b Object & Tokens Layer
l k	Move selected object(s) to E GM Info Layer
l ,	Move selected object(s) to r Dynamic Lighting Layer

ref: https://wiki.roll20.net/Advanced_Shortcuts

Tips and Tricks

Community Forums: Stupid Roll20 Tricks (and some clever ones) | Roll20: Online virtual tabletop
https://app.roll20.net/forum/post/5899495/stupid-roll20-tricks-and-some-clever-ones/

Auto Racking Ammunition

  1. Add "5th Edition OGL by Roll20 Companion" API script (Pro only)
  2. Character sheet (or default in game settings) - set "Ammo Tracking" to "On"
  3. Edit equipment to "Use as a resource"
  4. Edit Weapon and set "Ammunition" to name of resource


D&D 5E by Roll20: How to setup Ammunition and Resource tracker - Roll20 Wiki https://wiki.roll20.net/OGL_5e_DnD:_How_to_setup_Ammunition_and_Resource_tracker

Addons

Bloodied and Dead Status Markers

bloodied.js:

on("change:graphic", function(obj) {
    // Settings:
    //var lifeBarNumber = 3;          // 3:red; 2:blue; 1:green
    var lifeBarNumber = 0;          // 3:red; 2:blue; 1:green
    var percentForRedmark = 50;     // Write for example 50 for 50%
    var totalKillThreshold = -10;   // As soon as a tokens life goes bellow this value
                                    // it gets an additional (killed) symbol.
    
    // Auto select bar1 or bar3
    // Is life bar set at all?
    // If not simply escape the function.
    if(obj.get("bar1_max") === "") {
        if(obj.get("bar3_max") === "") {
            return;
        } else {
            lifeBarNumber = 3;
        }
    } else {
        lifeBarNumber = 1;
    }
   
    // Back from the dead?
    if((obj.get("status_dead") == true || obj.status_skull == true) && obj.get("bar" + lifeBarNumber + "_value") > 0){
        SetStatuSymbolById(obj,3,1);
    }
   
    // Total-kill
    if(obj.get("bar" + lifeBarNumber + "_value") <= totalKillThreshold){
        SetStatuSymbolById(obj,0,0);
        SetStatuSymbolById(obj,1,1);
        SetStatuSymbolById(obj,2,1);
        SetStatuSymbolById(obj,3,0);
    }
    // Dead
    else if(obj.get("bar" + lifeBarNumber + "_value") <= 0){
        SetStatuSymbolById(obj,0,0);
        SetStatuSymbolById(obj,1,1);
        SetStatuSymbolById(obj,2,0);
        SetStatuSymbolById(obj,3,0);
    }
    // Bellow x% life
    else if(obj.get("bar" + lifeBarNumber + "_value") <= obj.get("bar" + lifeBarNumber + "_max") / 100 * percentForRedmark) {
        SetStatuSymbolById(obj,0,1);
        SetStatuSymbolById(obj,1,0);
        SetStatuSymbolById(obj,2,0);
    }
    else{
        ResetDeathSymbols(obj);
        
        // Back from the dead but now again with full (or beyond that) health?
        // TODO: >= not working..?
        if(obj.get("bar" + lifeBarNumber + "_value") == obj.get("bar" + lifeBarNumber + "_max")){
            SetStatuSymbolById(obj,3,0);
        }
    }
});

/*
Reset the following symboles
    redmarker, dead & skull
*/
function ResetDeathSymbols(obj){
    SetStatuSymbolById(obj,0,0);
    SetStatuSymbolById(obj,1,0);
    SetStatuSymbolById(obj,2,0);
}

/*
Sets the value of a given tokens symbol by the symbols id
symbolid:
    0:redmarker
    1:dead
    2:skull
    3:death-zone
    x:y
    
value:
    true/1 or false/0
 */
function SetStatuSymbolById(obj, symbolid, value) {
    switch(symbolid){
        case 0:
            SetStatusSymbolByName(obj, "redmarker", value);
            break;
        case 1:
            SetStatusSymbolByName(obj, "dead", value);
            break;
        case 2:
            SetStatusSymbolByName(obj, "skull", value);
            break;
        case 3:
            SetStatusSymbolByName(obj, "death-zone", value);
            break;
        default:
            // Something is wrong so log it and exit.
            log("Error: SetStatuSymbolById - There was no usable number for symbolid given!");
            log("       Object name: " + obj.get("name") + "; symbolid: " + symbolid + "; value: " + value);
            return;
    }
}

/*
Sets the value of a given tokens symbol by the symbols name
value:
    true/1 or false/0
*/
function SetStatusSymbolByName(obj, symbolname, value){
    value = CheckForTrueOrFalse(value);
    
    // Set the symbols value.
    obj.set("status_" + symbolname, value);
}

/*
Checks if a given value is true or false.
value:
    0:false
    1:true
    default:false
*/
function CheckForTrueOrFalse(value){
    if (value === 0){value = false;}
    else if (value === 1){value = true;}
    else if (value === true || value === false){
        // Nothing to do, these are valid values.
    }
    // The input for value is not known, therefore we set it to false.
    else{
        value = false;
        log("Error: CheckForTrueOrFalse - An unhandled value has been used!");
        log("       value has been set to de default value " + value);
    }
    return value;
}

/*
Debug function
Place where ever you would like to see the actual values.
*/
function DebugMe(obj,msg){
    log("--- DEBUG: " + msg + "---");
    log("obj name: " + obj.get("name"));
    log("status values:");
    log("redmarker:    " + obj.get("status_redmarker"));
    log("dead:    " + obj.get("status_dead"));
    log("skull:    " + obj.get("status_skull"));
    log("death:    " + obj.get("status_death"));
}

Original:

Modified: https://app.roll20.net/forum/post/8507481/script-bloodied-and-dead-status-markers-extended-auto-select-bar-1-or-3/?pageforid=8507481#post-8507481

Cuerpo ref: https://app.roll20.net/users/389397/cuerpo

ref: https://wiki.roll20.net/API:Cookboox

:Bloodied_and_Dead_Status_Markers

https://wiki.roll20.net/Script:Bloodied_and_Dead_Status_Markers
Scripts moved to:
https://github.com/Roll20/roll20-api-scripts/tree/44c583189173bd5cfb68031f6b1a6a869c0b24a4/Bloodied%20and%20Dead%20Status%20Markers

bloodied.js

var barValue = "bar1";
var acceptedValues = ["bar1", "bar2", "bar3"];

on('chat:message', function (msg) {
 
    if (msg.type == 'api' && msg.content.indexOf('!ChangeBar') !== -1) {
        var message = msg.content.split(" ")[1];
        log("Message: " + message);
        if (acceptedValues.includes(message)) {
            barValue = message;
            log("Blood and Dead bar value changed to " + message);
        }
    }
});


on("change:graphic:bar1_value", function(obj) {
    if(obj.get("bar1_max") === "") return;
   
    if(obj.get("bar1_value") <= obj.get("bar1_max") / 2) {
        obj.set({
              status_redmarker: true
        });
    }
    else{
        obj.set({
            status_redmarker: false
        })
    }

    if(obj.get("bar1_value") <= 0) {
      obj.set({
         status_dead: true
      });
    }
    else {
      obj.set({
        status_dead: false
      });
    }
});

Roll20 Scripts Collection

https://github.com/Roll20/roll20-api-scripts/

Puzzle Packs

https://marketplace.roll20.net/browse/publisher/91/paul-camp
Escape the Room: Fantasy Edition | Roll20 Marketplace: Digital goods for online tabletop gaming
https://marketplace.roll20.net/browse/gameaddon/359/escape-the-room-fantasy-edition

DnDBeyond Integration

Beyond 20 - Chrome Web Store
https://chrome.google.com/webstore/detail/beyond-20/gnblbpbepfbfmoobegdogkglpbhcjofh?hl=en

Forums

Colored Text

"I do all of my editing in office [Word], then copy/paste into Roll20."

Community Forums: Colored text | Roll20: Online virtual tabletop https://app.roll20.net/forum/post/2069398/colored-text

Status Page

503 Service Unavailable

There was not a server available to handle your request. Most of the time this is a temporary error -- try reloading. If you are consistently seeing this error, then there may be an issue with the site. See the status page: http://status.roll20.net

http://status.roll20.net

Long Rest

The "5th Edition OGL by Roll20 Companion" includes a !longrest command.

If you want to call a list of characters in a super macro:

!longrest @{Bob|character_name}
!longrest @{Sue|character_name}

or by Character ID:

!longrest @{Bob's character id|character_name}
!longrest @{Sue's character id|character_name}


If you add in the ChatSetAttr you can also reset Resources too..

!longrest @{selected|character_name}

!setattr --silent --sel --hp|@{selected|hp|max}

!setattr --silent --sel --class_resource|@{selected|class_resource|max}

!setattr --silent --sel --other_resource|@{selected|other_resource|max}

&{template:npcaction} {{name=@{selected|character_name}}} {{rname=Long Rest}} {{description=Reset HP, Spell Slots, @{selected|class_resource_name}, @{selected|other_resource_name}}}

If you have other resources:

&{template:npcaction} {{name=@{selected|character_name}}} {{rname=Long Rest}} {{description=Reset HP, Spell Slots, @{selected|class_resource_name}, @{selected|other_resource_name}, @{selected|repeating_resource_$0_resource_left_name}, @{selected|repeating_resource_$0_resource_right_name}}}

!setattr --silent --sel --repeating_resource_$0_resource_left|@{selected|repeating_resource_$0_resource_left|max}

!setattr --silent --sel --repeating_resource_$0_resource_right|@{selected|repeating_resource_$0_resource_right|max}

If you don't want HP to reset on Long Rest: (as the values are all calculated prior to the script running)

!setattr --silent --sel --hp|@{selected|hp}


ref: [5] [6] [7]

API Scripts

Category:User API Scripts - Roll20 Wiki https://wiki.roll20.net/Category:User_API_Scripts

My Custom Favorites

Bloodied and Dead Status Markers

World Map Discovery (I like my custom version better)

My 1st Favorites

  • 5th Edition OGL by Roll20 Companion
  • Token Fate
  • True Page Copy

My 2st Favorites

  • DeathTracker
  • DryErase
  • DLEllipseDrawer
  • Hourglass
  • It's a Trap!
  • Path Splitter
  • PublicSheet
  • One-Way Dynamic Lighting
  • TokenNameNumber
  • Torch
  • TurnClock

Dependencies

  • Character Sheet Utils
  • HTML Builder
  • MatrixMath
  • Path Math
  • splitArgs
  • Token Collisions
  • Vector Math

Call of Cthulhu Sheet

&{template:callofcthulhu} {{name=Some test...}}

Keywords