I want to set down the macros I’ve end up using over the past few years of playing D&D 5e on the Roll20 VTT.
(Yes, I owe a bigger article about Roll20 and its plusses and minuses. One day.)
Roll20 has a moderately rich macro language, and an mod/API setup sitting behind that for further extensions to what macros can do.
I have written very few of these; most I inherited (and then tweaked and refined and customized) from the guy who was DMing the game before me, or else found out on the Roll20 forums, or sub-Reddits, etc. I apologize to the original authors for losing their names.
In Bar Macros
These are macros that I indicate should be in the macro bar at the bottom of the page.
The PC macros have player character names in them. The full names need to match the names on their Character Sheet in the Journal for the macro language to pick up the values in their character sheet.
PC-Health
This creates a quick list in the chat for the GM of current and max HP for each character. Sometimes that’s more useful than looking at health bars.
/w gm &{template:default} {{name=Party Health}} {{Theren=@{Theren Silverkin|hp} (@{Theren Silverkin|hp|max})}} {{Nala=@{Kimbatuul Nala|hp} (@{Kimbatuul Nala|hp|max}) }} {{William=@{William Steadman|hp} (@{William Steadman|hp|max})}} {{Faith=@{Faith d'Deneir|hp} (@{Faith d'Deneir|hp|max})}} {{Moony=@{(Moony) Rising Moon Cozy Cave|hp} (@{(Moony) Rising Moon Cozy Cave|hp|max})}}
PC-Percept
This gives to the GM in Chat the Passive Perception and then an Active Perception roll for each character in the party. I find it works faster (and is often more useful) to roll this for everyone at once than select a token and do it for an individual character, even if there’s just once character I’m interested in.
I use this same macro for Insight (insight_bonus), Investigation (investigation_bonus), and Stealth (stealth_bonus).
/w gm &{template:default} {{name=Party Passive/Active Perception}} {{Theren=[[10+@{Theren Silverkin|perception_bonus}]] / [[1d20+@{Theren Silverkin|Perception_Bonus}]] }} {{Nala=[[10+@{Kimbatuul Nala|perception_bonus}]] / [[1d20+@{Kimbatuul Nala|Perception_Bonus}]] }} {{William=[[10+@{William Steadman|perception_bonus}]] / [[1d20+@{William Steadman|Perception_Bonus}]] }} {{Faith=[[10+@{Faith d'Deneir|perception_bonus}]] / [[1d20+@{Faith d'Deneir|Perception_Bonus}]] }} {{Moony=[[10+@{(Moony) Rising Moon Cozy Cave|perception_bonus}]] / [[1d20+@{(Moony) Rising Moon Cozy Cave|Perception_Bonus}]] }}
The Talking Weapon
We had an intelligent weapon in our Princes of the Apocalypse campaign. Rather than fumbling with the Chat each time I wanted to say something from Windvane (the weapon) to Faith (the person carrying Windvane), I wrote this macro, which was a lot faster to use. For recurring NPC→PC chat partners, this can be easily tailored for use.
/w Faith &{template:default} {{name= A soft whisper in your mind ... }} {{ ?{What message from Windvane?} }}
Token Actions
These macros are IDed in the macro as being Token Actions, i.e., they are only valid (and show up for use) after you select a token you control (the GM controls all tokens, the players generally only control their own).
Initiative
&{template:simple} {{rname=INITIATIVE}} {{mod=[[@{selected|initiative_bonus}]]}} {{r1=[[1d20+@{selected|initiative_bonus}&{tracker}]]}} {{normal=[[1]]}} {{charname=@{selected|token_name}}}
This rolls Initiative for a player character, putting it up both in the Chat and into the Initiative Tracker.
Inspiration
This giver/taker of Inspiration is based on the work of Keith Curtis (see here and here), and uses the Dealer API in Roll20.
You’ll need to create an infinite 1-card deck with whatever symbol you want to use (I use a golden D20), and when you give Inspiration to a token, it “deals” that symbol atop their player ID at the bottom of the Roll20 screen and makes a little announcement in chat; when you take Inspiration, it takes it away. This makes Inspiration very visible to the GM and to the Players.
(Note that it does allow for multiple Inspiration to be given to a character, which is not how the rules operate, but that can be handled manually.)
Inspiration-Give
!deal --give --Inspiration &{template:npcaction} {{rname=Congratulations!}} {{description=**@{selected|character_name}** has just been granted **Inspiration!** [x](https://s3.amazonaws.com/files.d20.io/images/210322160/r0ri9AKLAaLbYyle0nhPCw/max.png)}}
The image URL is what that card image translated to, so that it shows up in the chat entry.
Inspiration-Use
!deal --take --Inspiration &{template:npcaction} {{rname=Inspiration!}} {{description=**@{selected|character_name}** has just spent their **Inspiration!** }}
Light
This uses the invaluable TokenMod API by The Aaron. It applies various lighting and vision conditions to a character. It could use some tweaking, but it’s useful in its current state.
!token-mod {{ --set ?{Lighting/Vision Options |Normal Vision, has_bright_light_vision#yes has_limit_field_of_vision#yes limit_field_of_vision_total#360 limit_field_of_night_vision_total#360 statusmarkers#-Blinded |add Darkvision (60) red, night_vision#yes limit_field_of_night_vision_total#360 night_vision_distance#60 night_vision_tint##ff0000 night_vision_effect#nocturnal |add Darkvision (60) blue, night_vision#yes limit_field_of_night_vision_total#360 night_vision_distance#60 night_vision_effect#nocturnal night_vision_tint##0000ff |add Darkvision (60) purple, night_vision#yes limit_field_of_night_vision_total#360 night_vision_distance#60 night_vision_effect#nocturnal night_vision_tint##9900ff |Blinded, statusmarkers#Blinded has_bright_light_vision#yes has_limit_field_of_vision#yes limit_field_of_vision_total#0 limit_field_of_night_vision_total#0 |-, |Source None, emits_bright_light#off emits_low_light#off tint_color#transparent statusmarkers#-yellow |Source Candle (br5/dim10), emits_bright_light#on emits_low_light#on bright_light_distance#5 low_light_distance#5 tint_color##f1c232 statusmarkers#yellow |Source Low Flame (br10/dim10), emits_bright_light#on emits_low_light#on bright_light_distance#10 low_light_distance#10 tint_color##f1c232 statusmarkers#orange |Source Torch (br20/dim20), emits_bright_light#on emits_low_light#on bright_light_distance#20 low_light_distance#20 tint_color##f1c232 statusmarkers#yellow |Source Light Spell (br20/dim20), emits_bright_light#on emits_low_light#on bright_light_distance#20 low_light_distance#20 tint_color#transparent statusmarkers#yellow |Source Daylight Spell (br60/dim60), emits_bright_light#on emits_low_light#on bright_light_distance#60 low_light_distance#60 tint_color#transparent statusmarkers#yellow |Source Holy Weapon (br30/dim30), emits_bright_light#on emits_low_light#on bright_light_distance#30 low_light_distance#30 tint_color#transparent statusmarkers#yellow |Source Hooded Lantern (br30/dim30), has_bright_light_vision#on emits_bright_light#on emits_low_light#on bright_light_distance#30 low_light_distance#30 tint_color##f1c232 statusmarkers#yellow } }}
NPC-Init
%{selected|npc_init}
This let me easily roll Initiative for NPCs without going into their character sheets. I also have a tool that lets me execute a macro against multiple selected tokens, so that’s handy, too.
(Technically, the rules say that all creatures of a given type roll a single Init, but that’s an artifact of pencil-and-paper gaming; we can do better on a VTT and let each goblin have their own go.)
NPC-Save
It’s easier to have all the saves rolled for the highlighted NPC, even if it takes marginally longer to proc, than to select a save type. Everything is rolled twice in case there’s (Dis)Advantage. If there is not, I just take the 1st roll.
/w gm &{template:default} {{name=Saving Throws with Advantage}} {{NPC= @{selected|token_name}}} {{Str Save= [[ 1d20 + [[@{selected|npc_str_save}]] ]] or [[ 1d20 + [[@{selected|npc_str_save}]] ]] }} {{Dex Save= [[ 1d20 + [[@{selected|npc_dex_save}]] ]] or [[ 1d20 + [[@{selected|npc_dex_save}]] ]] }} {{Con Save= [[ 1d20 + [[@{selected|npc_con_save}]] ]] or [[ 1d20 + [[@{selected|npc_con_save}]] ]] }} {{Int Save= [[ 1d20 + [[@{selected|npc_int_save}]] ]] or [[ 1d20 + [[@{selected|npc_int_save}]] ]] }} {{Wis Save= [[ 1d20 + [[@{selected|npc_wis_save}]] ]] or [[ 1d20 + [[@{selected|npc_wis_save}]] ]] }} {{Cha Save= [[ 1d20 + [[@{selected|npc_cha_save}]] ]] or [[ 1d20 + [[@{selected|npc_cha_save}]] ]] }}
NPC-Skillz
The most commonly accessed NPC skills, rolled twice in case of (Dis)Advantage. This could be easily expanded, if desired.
/w gm &{template:default} {{name=Skill Rolls with Advantage}} {{NPC= @{selected|token_name}}} {{Stealth= [[ 1d20 + [[@{selected|npc_stealth}]] ]] or [[ 1d20 + [[@{selected|npc_stealth}]] ]] }} {{Percept= [[ 1d20 + [[@{selected|npc_perception}]] ]] or [[ 1d20 + [[@{selected|npc_perception}]] ]] }} {{Deceive= [[ 1d20 + [[@{selected|npc_deception}]] ]] or [[ 1d20 + [[@{selected|npc_deception}]] ]] }} {{Insight= [[ 1d20 + [[@{selected|npc_insight}]] ]] or [[ 1d20 + [[@{selected|npc_insight}]] ]] }}
NPC-Token
Another one that uses TokenMod. This takes an NPC token as provided in the game and turns on/off all the settings I want for it that differ from the Roll20 (or scenario) bog-standard. (What each element is doing should be pretty obvious.)
!token-mod --set bar_location|overlap_bottom compact_bar|on showname|yes showplayers_name|yes showplayers_bar1|yes show_tooltip|yes bar1_link|hp bar2_link|npc_ac bar3_link|speed bar1_reset|
Roll-Ability
This lets a player or the GM make an ability roll on the prompt-selected Ability without going into their character sheet.
And, yes, there are those weird HTML special characters that are necessary to make it work and which have a tendency on this (and the succeeding macros) to get messed up (e.g., by re-opening the macro editor) at which point the macro will stop working and you need to cut and paste the text in again.
Origin: Craig (and Kyle G), here.
@{selected|wtype}&{template:simple} @{selected|rtype}?{Stat |Strength,+[[@{selected|strength_mod}]][STR] ]]}} {{rname=^{strength-u}}} {{mod=[[ [[@{selected|strength_mod}]][STR] ]]}} {{r1=[[@{selected|d20}+[[@{selected|strength_mod}]][STR] ]] |Dexterity,+[[@{selected|dexterity_mod}]][DEX] ]]}} {{rname=^{dexterity-u}}} {{mod=[[ [[@{selected|dexterity_mod}]][DEX] ]]}} {{r1=[[@{selected|d20}+[[@{selected|dexterity_mod}]][DEX] ]] |Constitution,+[[@{selected|constitution_mod}]][CON] ]]}} {{rname=^{constitution-u}}} {{mod=[[ [[@{selected|constitution_mod}]][CON] ]]}} {{r1=[[@{selected|d20}+[[@{selected|constitution_mod}]][CON] ]] |Intelligence,+[[@{selected|intelligence_mod}]][INT] ]]}} {{rname=^{intelligence-u}}} {{mod=[[ [[@{selected|intelligence_mod}]][INT] ]]}} {{r1=[[@{selected|d20}+[[@{selected|intelligence_mod}]][INT] ]] |Wisdom,+[[@{selected|wisdom_mod}]][WIS] ]]}} {{rname=^{wisdom-u}}} {{mod=[[ [[@{selected|wisdom_mod}]][WIS] ]]}} {{r1=[[@{selected|d20}+[[@{selected|wisdom_mod}]][WIS] ]] |Charisma,+[[@{selected|charisma_mod}]][CHA] ]]}} {{rname=^{charisma-u}}} {{mod=[[ [[@{selected|charisma_mod}]][CHA] ]]}} {{r1=[[@{selected|d20}+[[@{selected|charisma_mod}]][CHA] ]] }}} {{global=@{selected|global_skill_mod}}} @{selected|charname_output}
Roll-Save
As above, only it prompts for what sort of Save you want to roll. Again, fragile.
Origin: Craig (and Kyle G), here.
@{selected|wtype}&{template:simple} @{selected|rtype}?{Save |Strength,+[[(@{selected|strength_save_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_str_save}*@{selected|npc})]][STR SAVE] ]]}} {{rname=^{strength-save-u}}} {{mod=[[ [[(@{selected|strength_save_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_str_save}*@{selected|npc})]][STR SAVE] ]]}} {{r1=[[@{selected|d20}+[[(@{selected|strength_save_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_str_save}*@{selected|npc})]][STR SAVE] ]] |Dexterity,+[[(@{selected|dexterity_save_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_dex_save}*@{selected|npc})]][DEX SAVE] ]]}} {{rname=^{dexterity-save-u}}} {{mod=[[ [[(@{selected|dexterity_save_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_dex_save}*@{selected|npc})]][DEX SAVE] ]]}} {{r1=[[@{selected|d20}+[[(@{selected|dexterity_save_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_dex_save}*@{selected|npc})]][DEX SAVE] ]] |Constitution,+[[(@{selected|constitution_save_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_con_save}*@{selected|npc})]][CON SAVE] ]]}} {{rname=^{constitution-save-u}}} {{mod=[[ [[(@{selected|constitution_save_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_con_save}*@{selected|npc})]][CON SAVE] ]]}} {{r1=[[@{selected|d20}+[[(@{selected|constitution_save_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_con_save}*@{selected|npc})]][CON SAVE] ]] |Intelligence,+[[(@{selected|intelligence_save_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_int_save}*@{selected|npc})]][INT SAVE] ]]}} {{rname=^{intelligence-save-u}}} {{mod=[[ [[(@{selected|intelligence_save_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_int_save}*@{selected|npc})]][INT SAVE] ]]}} {{r1=[[@{selected|d20}+[[(@{selected|intelligence_save_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_int_save}*@{selected|npc})]][INT SAVE] ]] |Wisdom,+[[(@{selected|wisdom_save_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_wis_save}*@{selected|npc})]][WIS SAVE] ]]}} {{rname=^{wisdom-save-u}}} {{mod=[[ [[(@{selected|wisdom_save_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_wis_save}*@{selected|npc})]][WIS SAVE] ]]}} {{r1=[[@{selected|d20}+[[(@{selected|wisdom_save_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_wis_save}*@{selected|npc})]][WIS SAVE] ]] |Charisma,+[[(@{selected|charisma_save_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_cha_save}*@{selected|npc})]][CHA SAVE] ]]}} {{rname=^{charisma-save-u}}} {{mod=[[ [[(@{selected|charisma_save_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_cha_save}*@{selected|npc})]][CHA SAVE] ]]}} {{r1=[[@{selected|d20}+[[(@{selected|charisma_save_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_cha_save}*@{selected|npc})]][CHA SAVE] ]] }}} {{global=@{selected|global_save_mod}}} @{selected|charname_output}
Roll-Skill
As above, but with all the Skills. Awesome when it works.
Origin: Craig (and Kyle G), here.
@{selected|wtype}&{template:simple} @{selected|rtype}?{Skill |Acrobatics,+[[(@{selected|acrobatics_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_acrobatics}*@{selected|npc})]][ACRO] ]]}} {{rname=^{acrobatics-u}}} {{mod=[[ [[(@{selected|acrobatics_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_acrobatics}*@{selected|npc})]][ACRO] ]]}} {{r1=[[@{selected|d20}+[[(@{selected|acrobatics_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_acrobatics}*@{selected|npc})]][ACRO] ]] |Animal Handling,+[[(@{selected|animal_handling_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_animal_handling}*@{selected|npc})]][ANIM] ]]}} {{rname=^{animal-handling-u}}} {{mod=[[ [[(@{selected|animal_handling_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_animal_handling}*@{selected|npc})]][ANIM] ]]}} {{r1=[[@{selected|d20}+[[(@{selected|animal_handling_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_animal_handling}*@{selected|npc})]][ANIM] ]] |Arcana,+[[(@{selected|arcana_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_arcana}*@{selected|npc})]][ARC] ]]}} {{rname=^{arcana-u}}} {{mod=[[ [[(@{selected|arcana_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_arcana}*@{selected|npc})]][ARCA] ]]}} {{r1=[[@{selected|d20}+[[(@{selected|arcana_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_arcana}*@{selected|npc})]][ARCA] ]] |Athletics,+[[(@{selected|athletics_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_athletics}*@{selected|npc})]][ARC] ]]}} {{rname=^{athletics-u}}} {{mod=[[ [[(@{selected|athletics_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_athletics}*@{selected|npc})]][ATHL] ]]}} {{r1=[[@{selected|d20}+[[(@{selected|athletics_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_athletics}*@{selected|npc})]][ATHL] ]] |Deception,+[[(@{selected|deception_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_deception}*@{selected|npc})]][ARC] ]]}} {{rname=^{deception-u}}} {{mod=[[ [[(@{selected|deception_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_deception}*@{selected|npc})]][DECE] ]]}} {{r1=[[@{selected|d20}+[[(@{selected|deception_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_deception}*@{selected|npc})]][DECE] ]] |History,+[[(@{selected|history_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_history}*@{selected|npc})]][ARC] ]]}} {{rname=^{history-u}}} {{mod=[[ [[(@{selected|history_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_history}*@{selected|npc})]][HIST] ]]}} {{r1=[[@{selected|d20}+[[(@{selected|history_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_history}*@{selected|npc})]][HIST] ]] |Insight,+[[(@{selected|insight_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_insight}*@{selected|npc})]][ARC] ]]}} {{rname=^{insight-u}}} {{mod=[[ [[(@{selected|insight_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_insight}*@{selected|npc})]][INSI] ]]}} {{r1=[[@{selected|d20}+[[(@{selected|insight_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_insight}*@{selected|npc})]][INSI] ]] |Intimidation,+[[(@{selected|intimidation_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_intimidation}*@{selected|npc})]][ARC] ]]}} {{rname=^{intimidation-u}}} {{mod=[[ [[(@{selected|intimidation_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_intimidation}*@{selected|npc})]][INTI] ]]}} {{r1=[[@{selected|d20}+[[(@{selected|intimidation_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_intimidation}*@{selected|npc})]][INTI] ]] |Investigation,+[[(@{selected|investigation_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_investigation}*@{selected|npc})]][ARC] ]]}} {{rname=^{investigation-u}}} {{mod=[[ [[(@{selected|investigation_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_investigation}*@{selected|npc})]][INVE] ]]}} {{r1=[[@{selected|d20}+[[(@{selected|investigation_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_investigation}*@{selected|npc})]][INVE] ]] |Medicine,+[[(@{selected|medicine_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_medicine}*@{selected|npc})]][ARC] ]]}} {{rname=^{medicine-u}}} {{mod=[[ [[(@{selected|medicine_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_medicine}*@{selected|npc})]][MEDI] ]]}} {{r1=[[@{selected|d20}+[[(@{selected|medicine_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_medicine}*@{selected|npc})]][MEDI] ]] |Nature,+[[(@{selected|nature_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_nature}*@{selected|npc})]][ARC] ]]}} {{rname=^{nature-u}}} {{mod=[[ [[(@{selected|nature_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_nature}*@{selected|npc})]][NATU] ]]}} {{r1=[[@{selected|d20}+[[(@{selected|nature_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_nature}*@{selected|npc})]][NATU] ]] |Perception,+[[(@{selected|perception_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_perception}*@{selected|npc})]][ARC] ]]}} {{rname=^{perception-u}}} {{mod=[[ [[(@{selected|perception_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_perception}*@{selected|npc})]][PERC] ]]}} {{r1=[[@{selected|d20}+[[(@{selected|perception_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_perception}*@{selected|npc})]][PERC] ]] |Performance,+[[(@{selected|performance_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_performance}*@{selected|npc})]][ARC] ]]}} {{rname=^{performance-u}}} {{mod=[[ [[(@{selected|performance_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_performance}*@{selected|npc})]][PERF] ]]}} {{r1=[[@{selected|d20}+[[(@{selected|performance_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_performance}*@{selected|npc})]][PERF] ]] |Persuasion,+[[(@{selected|persuasion_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_persuasion}*@{selected|npc})]][ARC] ]]}} {{rname=^{persuasion-u}}} {{mod=[[ [[(@{selected|persuasion_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_persuasion}*@{selected|npc})]][PERS] ]]}} {{r1=[[@{selected|d20}+[[(@{selected|persuasion_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_persuasion}*@{selected|npc})]][PERS] ]] |Religion,+[[(@{selected|religion_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_religion}*@{selected|npc})]][ARC] ]]}} {{rname=^{religion-u}}} {{mod=[[ [[(@{selected|religion_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_religion}*@{selected|npc})]][RELI] ]]}} {{r1=[[@{selected|d20}+[[(@{selected|religion_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_religion}*@{selected|npc})]][RELI] ]] |Sleight of Hand,+[[(@{selected|sleight_of_hand_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_sleight_of_hand}*@{selected|npc})]][ARC] ]]}} {{rname=^{sleight_of_hand-u}}} {{mod=[[ [[(@{selected|sleight_of_hand_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_sleight_of_hand}*@{selected|npc})]][SLEI] ]]}} {{r1=[[@{selected|d20}+[[(@{selected|sleight_of_hand_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_sleight_of_hand}*@{selected|npc})]][SLEI] ]] |Stealth,+[[(@{selected|stealth_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_stealth}*@{selected|npc})]][ARC] ]]}} {{rname=^{stealth-u}}} {{mod=[[ [[(@{selected|stealth_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_stealth}*@{selected|npc})]][STEA] ]]}} {{r1=[[@{selected|d20}+[[(@{selected|stealth_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_stealth}*@{selected|npc})]][STEA] ]] |Survival,+[[(@{selected|survival_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_survival}*@{selected|npc})]][ARC] ]]}} {{rname=^{survival-u}}} {{mod=[[ [[(@{selected|survival_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_survival}*@{selected|npc})]][SURV] ]]}} {{r1=[[@{selected|d20}+[[(@{selected|survival_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_survival}*@{selected|npc})]][SURV] ]] }}} {{global=@{selected|global_skill_mod}}} @{selected|charname_output}
William’s Starry Form
For our party druid, Circle of Stars, when he would take on his Starry Form. Good example of a macro that does something without choices. This one turns things on and off by reinvoking them in TokenMod.
!token-mod {{ --flip emits_bright_light emits_low_light --set statusmarkers#!blue bright_light_distance#10 low_light_distance#10 tint_color#transparent }}
Status-Dead
Everyone’s favorite status macro! Uses TokenMod API for most of its action.
!token-mod {{ --set statusmarkers|=dead bar1_current|0 --off showname emits_bright_light show_tooltip }} &{template:npcaction}} {{rname=Defeated!}}{{description=@{selected|token_name} is dead.}}
Status-0
Zeroes out the status markers on a character. Uses TokenMod API.
!token-mod --set statusmarkers
Status-Set
Adding (or turning off) a status marker on a token, grouped by broad function. The markers used are from my custom status marker set, but you can modify it to use any status markers, including the defaults. Again, uses the TokenMod API. You can undo any of the statuses by reinvoking it.
!token-mod ?{Status |Concentrating, --set statusmarkers#!Concentrating |Helping, --set statusmarkers#!Helping |Hiding, --set statusmarkers#!Ninja-Mask |Dodging, --set statusmarkers#!Dodging |Readying, --set statusmarkers#!Readying |-, |Blinded, --set statusmarkers#Blinded --set limit_field_of_vision_total#0 --set limit_field_of_night_vision_total#0 |(Unblinded), --set statusmarkers#-Blinded --set limit_field_of_vision_total#360 --set limit_field_of_night_vision_total#360 |Charmed, --set statusmarkers#!Charmed |Deafened, --set statusmarkers#!Deafened |Drowning, --set statusmarkers#!Drowning |Exhausted, --set statusmarkers#!Exhausted |Frightened, --set statusmarkers#!Frightened |Grappled, --set statusmarkers#!Grappled |Paralyzed, --set statusmarkers#!Paralyzed |Petrified, --set statusmarkers#!Petrified |Poisoned, --set statusmarkers#!Poisoned |Restrained, --set statusmarkers#!Restrained |Slowed, --set statusmarkers#!Slowed |Stunned, --set statusmarkers#!Stunned |Surprised, --set statusmarkers#!Surprised |-, |Blessed, --set statusmarkers#!Blessed |Hastened, --set statusmarkers#!Hastened |Invisibile, --set statusmarkers#!Invisible |Marked, --set statusmarkers#!Marked |Raging, --set statusmarkers#!Raging |Shielded, --set statusmarkers#!bolt-shield |-, |Prone, --set statusmarkers#!Prone |Incapacitated, --set statusmarkers#!Incapacitated |Unconscious/Asleep, --set statusmarkers#!Unconscious |Dying, --set statusmarkers#!Dying |-, |Clear All, --set statusmarkers#=blue#-blue}
Surprised
Just a shortcut to quickly put the Surprised status marker on a token (uses the name from my custom token marker set, so you can change it to whatever you use). Uses the TokenMod API.
!token-mod --set statusmarkers#!Surprised