{"id":3176,"date":"2023-12-05T18:11:59","date_gmt":"2023-12-06T01:11:59","guid":{"rendered":"https:\/\/hill-kleerup.org\/blog\/heroes\/?p=3176"},"modified":"2023-12-05T18:11:59","modified_gmt":"2023-12-06T01:11:59","slug":"dd-5e-and-roll20-macros","status":"publish","type":"post","link":"https:\/\/hill-kleerup.org\/blog\/heroes\/2023\/12\/dd-5e-and-roll20-macros.html","title":{"rendered":"D&#038;D 5e and Roll20 Macros"},"content":{"rendered":"<p><a href=\"https:\/\/hill-kleerup.org\/blog\/heroes\/wp\/wp-content\/uploads\/2023\/12\/Roll20-VTT.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-medium wp-image-3177\" src=\"https:\/\/hill-kleerup.org\/blog\/heroes\/wp\/wp-content\/uploads\/2023\/12\/Roll20-VTT-229x300.png\" alt=\"Roll20 VTT\" width=\"229\" height=\"300\" srcset=\"https:\/\/hill-kleerup.org\/blog\/heroes\/wp\/wp-content\/uploads\/2023\/12\/Roll20-VTT-229x300.png 229w, https:\/\/hill-kleerup.org\/blog\/heroes\/wp\/wp-content\/uploads\/2023\/12\/Roll20-VTT-496x650.png 496w, https:\/\/hill-kleerup.org\/blog\/heroes\/wp\/wp-content\/uploads\/2023\/12\/Roll20-VTT.png 686w\" sizes=\"auto, (max-width: 229px) 85vw, 229px\" \/><\/a>I want to set down the macros I&#8217;ve end up using over the past few years of playing <strong>D&amp;D 5e<\/strong> on the <strong>Roll20 VTT<\/strong>.<\/p>\n<p>(Yes, I owe a bigger article about Roll20 and its plusses and minuses. One day.)<\/p>\n<p>Roll20 has a moderately rich macro language, and an mod\/API setup sitting behind that for further extensions to what macros can do.<\/p>\n<p>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.<\/p>\n<h1>In Bar Macros<\/h1>\n<p>These are macros that I indicate should be in the macro bar at the bottom of the page.<\/p>\n<p>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.<\/p>\n<h2>PC-Health<\/h2>\n<p>This creates a quick list in the chat for the GM of current and max HP for each character. Sometimes that&#8217;s more useful than looking at health bars.<\/p>\n<pre>\/w gm &amp;{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})}}<\/pre>\n<h2>PC-Percept<\/h2>\n<p>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&#8217;s just once character I&#8217;m interested in.<\/p>\n<p>I use this same macro for <strong>Insight<\/strong> (insight_bonus), <strong>Investigation<\/strong> (investigation_bonus), and <strong>Stealth<\/strong> (stealth_bonus).<\/p>\n<pre>\/w gm &amp;{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}]] }}<\/pre>\n<h2>The Talking Weapon<\/h2>\n<p>We had an intelligent weapon in our <em>Princes of the Apocalypse<\/em> 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\u2192PC chat partners, this can be easily tailored for use.<\/p>\n<pre>\/w Faith &amp;{template:default} {{name= A soft whisper in your mind ... }} {{ ?{What message from Windvane?} }}<\/pre>\n<h1>Token Actions<\/h1>\n<p>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).<\/p>\n<h2>\u00a0Initiative<\/h2>\n<pre>&amp;{template:simple} {{rname=INITIATIVE}} {{mod=[[@{selected|initiative_bonus}]]}} {{r1=[[1d20+@{selected|initiative_bonus}&amp;{tracker}]]}} {{normal=[[1]]}} {{charname=@{selected|token_name}}}<\/pre>\n<p>This rolls Initiative for a player character, putting it up both in the Chat and into the Initiative Tracker.<\/p>\n<h2>Inspiration<\/h2>\n<p>This giver\/taker of Inspiration is based on the work of Keith Curtis (see <a href=\"https:\/\/app.roll20.net\/forum\/post\/7667773\/script-inspiration\/\">here<\/a> and <a href=\"https:\/\/app.roll20.net\/forum\/post\/7687278\/script-dealer\">here<\/a>), and uses the <strong>Dealer<\/strong> API in Roll20.<\/p>\n<p>You&#8217;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 &#8220;deals&#8221; 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.<\/p>\n<p>(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.)<\/p>\n<h3>Inspiration-Give<\/h3>\n<pre>!deal --give --Inspiration\r\n&amp;{template:npcaction} {{rname=Congratulations!}} {{description=**@{selected|character_name}** has just been granted **Inspiration!**\r\n[x](https:\/\/s3.amazonaws.com\/files.d20.io\/images\/210322160\/r0ri9AKLAaLbYyle0nhPCw\/max.png)}}<\/pre>\n<p>The image URL is what that card image translated to, so that it shows up in the chat entry.<\/p>\n<h3>Inspiration-Use<\/h3>\n<pre>!deal --take --Inspiration\r\n&amp;{template:npcaction} {{rname=Inspiration!}} {{description=**@{selected|character_name}** has just spent their **Inspiration!** }}<\/pre>\n<h2>Light<\/h2>\n<p>This uses the invaluable <a href=\"https:\/\/wiki.roll20.net\/Script:Token_Mod\">TokenMod<\/a> API by The Aaron. It applies various lighting and vision conditions to a character. It could use some tweaking, but it&#8217;s useful in its current state.<\/p>\n<pre>!token-mod {{\r\n--set ?{Lighting\/Vision Options\r\n|Normal Vision, \r\n  has_bright_light_vision#yes\r\n  has_limit_field_of_vision#yes \r\n  limit_field_of_vision_total#360 \r\n  limit_field_of_night_vision_total#360\r\n  statusmarkers#-Blinded\r\n|add Darkvision (60) red, \r\n  night_vision#yes\r\n  limit_field_of_night_vision_total#360\r\n  night_vision_distance#60\r\n  night_vision_tint##ff0000\r\n  night_vision_effect#nocturnal\r\n|add Darkvision (60) blue, \r\n  night_vision#yes\r\n  limit_field_of_night_vision_total#360\r\n  night_vision_distance#60\r\n  night_vision_effect#nocturnal\r\nnight_vision_tint##0000ff\r\n|add Darkvision (60) purple, \r\n  night_vision#yes\r\n  limit_field_of_night_vision_total#360\r\n  night_vision_distance#60\r\n  night_vision_effect#nocturnal\r\n  night_vision_tint##9900ff\r\n|Blinded, \r\n  statusmarkers#Blinded\r\n  has_bright_light_vision#yes\r\n  has_limit_field_of_vision#yes \r\n  limit_field_of_vision_total#0\r\n  limit_field_of_night_vision_total#0\r\n|-,\r\n|Source None, \r\n  emits_bright_light#off\r\n  emits_low_light#off \r\n  tint_color#transparent \r\n  statusmarkers#-yellow\r\n|Source Candle (br5\/dim10),\r\n  emits_bright_light#on\r\n  emits_low_light#on\r\n  bright_light_distance#5\r\n  low_light_distance#5 \r\n  tint_color##f1c232\r\n  statusmarkers#yellow\r\n|Source Low Flame (br10\/dim10),\r\n  emits_bright_light#on\r\n  emits_low_light#on\r\n  bright_light_distance#10\r\n  low_light_distance#10 \r\n  tint_color##f1c232\r\n  statusmarkers#orange\r\n|Source Torch (br20\/dim20),\r\n  emits_bright_light#on\r\n  emits_low_light#on\r\n  bright_light_distance#20\r\n  low_light_distance#20 \r\n  tint_color##f1c232\r\n  statusmarkers#yellow\r\n|Source Light Spell (br20\/dim20),\r\n  emits_bright_light#on\r\n  emits_low_light#on\r\n  bright_light_distance#20\r\n  low_light_distance#20\r\n  tint_color#transparent\r\n  statusmarkers#yellow\r\n|Source Daylight Spell (br60\/dim60),\r\n  emits_bright_light#on\r\n  emits_low_light#on\r\n  bright_light_distance#60\r\n  low_light_distance#60\r\n  tint_color#transparent\r\n  statusmarkers#yellow\r\n|Source Holy Weapon (br30\/dim30),\r\n  emits_bright_light#on\r\n  emits_low_light#on\r\n  bright_light_distance#30\r\n  low_light_distance#30\r\n  tint_color#transparent\r\n  statusmarkers#yellow\r\n|Source Hooded Lantern (br30\/dim30),\r\n  has_bright_light_vision#on\r\n  emits_bright_light#on\r\n  emits_low_light#on\r\n  bright_light_distance#30\r\n  low_light_distance#30\r\n  tint_color##f1c232\r\n  statusmarkers#yellow\r\n}\r\n}}<\/pre>\n<h2>NPC-Init<\/h2>\n<pre>%{selected|npc_init}<\/pre>\n<p>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&#8217;s handy, too.<\/p>\n<p>(Technically, the rules say that all creatures of a given type roll a single Init, but that&#8217;s an artifact of pencil-and-paper gaming; we can do better on a VTT and let each goblin have their own go.)<\/p>\n<h2>NPC-Save<\/h2>\n<p>It&#8217;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&#8217;s (Dis)Advantage. If there is not, I just take the 1st roll.<\/p>\n<pre>\/w gm &amp;{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}]] ]] }}<\/pre>\n<h2>NPC-Skillz<\/h2>\n<p>The most commonly accessed NPC skills, rolled twice in case of (Dis)Advantage. This could be easily expanded, if desired.<\/p>\n<pre>\/w gm &amp;{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}]] ]] }}<\/pre>\n<h2>NPC-Token<\/h2>\n<p>Another one that uses <a href=\"https:\/\/wiki.roll20.net\/Script:Token_Mod\">TokenMod<\/a>.\u00a0 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.)<\/p>\n<pre>!token-mod --set \r\nbar_location|overlap_bottom \r\ncompact_bar|on \r\nshowname|yes \r\nshowplayers_name|yes \r\nshowplayers_bar1|yes \r\nshow_tooltip|yes \r\nbar1_link|hp \r\nbar2_link|npc_ac \r\nbar3_link|speed \r\nbar1_reset|<\/pre>\n<h2>Roll-Ability<\/h2>\n<p>This lets a player or the GM make an ability roll on the prompt-selected Ability without going into their character sheet.<\/p>\n<p>And, yes, there are those weird HTML special characters that are necessary to make it work <em>and<\/em> 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.<\/p>\n<p>Origin: Craig (and Kyle G), <a href=\"https:\/\/app.roll20.net\/forum\/post\/5591522\/5e-ogl-universal-ability-check-macro-updated-for-v2-dot-0\">here<\/a>.<\/p>\n<pre>@{selected|wtype}&amp;{template:simple} @{selected|rtype}?{Stat\r\n|Strength,+[[@{selected|strength_mod}]][STR] ]]&amp;#125;&amp;#125; {{rname=^{strength-u&amp;#125;&amp;#125;&amp;#125; {{mod=[[ [[@{selected|strength_mod}]][STR] ]]&amp;#125;&amp;#125; {{r1=[[@{selected|d20}+[[@{selected|strength_mod}]][STR] ]]\r\n|Dexterity,+[[@{selected|dexterity_mod}]][DEX] ]]&amp;#125;&amp;#125; {{rname=^{dexterity-u&amp;#125;&amp;#125;&amp;#125; {{mod=[[ [[@{selected|dexterity_mod}]][DEX] ]]&amp;#125;&amp;#125; {{r1=[[@{selected|d20}+[[@{selected|dexterity_mod}]][DEX] ]]\r\n|Constitution,+[[@{selected|constitution_mod}]][CON] ]]&amp;#125;&amp;#125; {{rname=^{constitution-u&amp;#125;&amp;#125;&amp;#125; {{mod=[[ [[@{selected|constitution_mod}]][CON] ]]&amp;#125;&amp;#125; {{r1=[[@{selected|d20}+[[@{selected|constitution_mod}]][CON] ]]\r\n|Intelligence,+[[@{selected|intelligence_mod}]][INT] ]]&amp;#125;&amp;#125; {{rname=^{intelligence-u&amp;#125;&amp;#125;&amp;#125; {{mod=[[ [[@{selected|intelligence_mod}]][INT] ]]&amp;#125;&amp;#125; {{r1=[[@{selected|d20}+[[@{selected|intelligence_mod}]][INT] ]]\r\n|Wisdom,+[[@{selected|wisdom_mod}]][WIS] ]]&amp;#125;&amp;#125; {{rname=^{wisdom-u&amp;#125;&amp;#125;&amp;#125; {{mod=[[ [[@{selected|wisdom_mod}]][WIS] ]]&amp;#125;&amp;#125; {{r1=[[@{selected|d20}+[[@{selected|wisdom_mod}]][WIS] ]]\r\n|Charisma,+[[@{selected|charisma_mod}]][CHA] ]]&amp;#125;&amp;#125; {{rname=^{charisma-u&amp;#125;&amp;#125;&amp;#125; {{mod=[[ [[@{selected|charisma_mod}]][CHA] ]]&amp;#125;&amp;#125; {{r1=[[@{selected|d20}+[[@{selected|charisma_mod}]][CHA] ]]\r\n}}} {{global=@{selected|global_skill_mod}}} @{selected|charname_output}<\/pre>\n<h2>Roll-Save<\/h2>\n<p>As above, only it prompts for what sort of Save you want to roll. Again, fragile.<\/p>\n<p>Origin: Craig (and Kyle G), <a href=\"https:\/\/app.roll20.net\/forum\/post\/5591512\/5e-ogl-universal-saving-throw-macro-updated-for-v2-dot-0\">here<\/a>.<\/p>\n<pre>@{selected|wtype}&amp;{template:simple} @{selected|rtype}?{Save\r\n|Strength,+[[(@{selected|strength_save_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_str_save}*@{selected|npc})]][STR SAVE] ]]&amp;#125;&amp;#125; {{rname=^{strength-save-u&amp;#125;&amp;#125;&amp;#125; {{mod=[[ [[(@{selected|strength_save_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_str_save}*@{selected|npc})]][STR SAVE] ]]&amp;#125;&amp;#125; {{r1=[[@{selected|d20}+[[(@{selected|strength_save_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_str_save}*@{selected|npc})]][STR SAVE] ]]\r\n|Dexterity,+[[(@{selected|dexterity_save_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_dex_save}*@{selected|npc})]][DEX SAVE] ]]&amp;#125;&amp;#125; {{rname=^{dexterity-save-u&amp;#125;&amp;#125;&amp;#125; {{mod=[[ [[(@{selected|dexterity_save_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_dex_save}*@{selected|npc})]][DEX SAVE] ]]&amp;#125;&amp;#125; {{r1=[[@{selected|d20}+[[(@{selected|dexterity_save_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_dex_save}*@{selected|npc})]][DEX SAVE] ]]\r\n|Constitution,+[[(@{selected|constitution_save_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_con_save}*@{selected|npc})]][CON SAVE] ]]&amp;#125;&amp;#125; {{rname=^{constitution-save-u&amp;#125;&amp;#125;&amp;#125; {{mod=[[ [[(@{selected|constitution_save_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_con_save}*@{selected|npc})]][CON SAVE] ]]&amp;#125;&amp;#125; {{r1=[[@{selected|d20}+[[(@{selected|constitution_save_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_con_save}*@{selected|npc})]][CON SAVE] ]]\r\n|Intelligence,+[[(@{selected|intelligence_save_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_int_save}*@{selected|npc})]][INT SAVE] ]]&amp;#125;&amp;#125; {{rname=^{intelligence-save-u&amp;#125;&amp;#125;&amp;#125; {{mod=[[ [[(@{selected|intelligence_save_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_int_save}*@{selected|npc})]][INT SAVE] ]]&amp;#125;&amp;#125; {{r1=[[@{selected|d20}+[[(@{selected|intelligence_save_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_int_save}*@{selected|npc})]][INT SAVE] ]]\r\n|Wisdom,+[[(@{selected|wisdom_save_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_wis_save}*@{selected|npc})]][WIS SAVE] ]]&amp;#125;&amp;#125; {{rname=^{wisdom-save-u&amp;#125;&amp;#125;&amp;#125; {{mod=[[ [[(@{selected|wisdom_save_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_wis_save}*@{selected|npc})]][WIS SAVE] ]]&amp;#125;&amp;#125; {{r1=[[@{selected|d20}+[[(@{selected|wisdom_save_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_wis_save}*@{selected|npc})]][WIS SAVE] ]]\r\n|Charisma,+[[(@{selected|charisma_save_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_cha_save}*@{selected|npc})]][CHA SAVE] ]]&amp;#125;&amp;#125; {{rname=^{charisma-save-u&amp;#125;&amp;#125;&amp;#125; {{mod=[[ [[(@{selected|charisma_save_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_cha_save}*@{selected|npc})]][CHA SAVE] ]]&amp;#125;&amp;#125; {{r1=[[@{selected|d20}+[[(@{selected|charisma_save_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_cha_save}*@{selected|npc})]][CHA SAVE] ]]\r\n}}} {{global=@{selected|global_save_mod}}} @{selected|charname_output}<\/pre>\n<h2>Roll-Skill<\/h2>\n<p>As above, but with all the Skills. Awesome when it works.<\/p>\n<p>Origin: Craig (and Kyle G), <a href=\"https:\/\/app.roll20.net\/forum\/post\/5591526\/5e-ogl-universal-skill-check-macro-updated-for-v2-dot-0\">here<\/a>.<\/p>\n<pre>@{selected|wtype}&amp;{template:simple} @{selected|rtype}?{Skill\r\n|Acrobatics,+[[(@{selected|acrobatics_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_acrobatics}*@{selected|npc})]][ACRO] ]]&amp;#125;&amp;#125; {{rname=^{acrobatics-u&amp;#125;&amp;#125;&amp;#125; {{mod=[[ [[(@{selected|acrobatics_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_acrobatics}*@{selected|npc})]][ACRO] ]]&amp;#125;&amp;#125; {{r1=[[@{selected|d20}+[[(@{selected|acrobatics_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_acrobatics}*@{selected|npc})]][ACRO] ]]\r\n|Animal Handling,+[[(@{selected|animal_handling_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_animal_handling}*@{selected|npc})]][ANIM] ]]&amp;#125;&amp;#125; {{rname=^{animal-handling-u&amp;#125;&amp;#125;&amp;#125; {{mod=[[ [[(@{selected|animal_handling_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_animal_handling}*@{selected|npc})]][ANIM] ]]&amp;#125;&amp;#125; {{r1=[[@{selected|d20}+[[(@{selected|animal_handling_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_animal_handling}*@{selected|npc})]][ANIM] ]]\r\n|Arcana,+[[(@{selected|arcana_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_arcana}*@{selected|npc})]][ARC] ]]&amp;#125;&amp;#125; {{rname=^{arcana-u&amp;#125;&amp;#125;&amp;#125; {{mod=[[ [[(@{selected|arcana_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_arcana}*@{selected|npc})]][ARCA] ]]&amp;#125;&amp;#125; {{r1=[[@{selected|d20}+[[(@{selected|arcana_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_arcana}*@{selected|npc})]][ARCA] ]]\r\n|Athletics,+[[(@{selected|athletics_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_athletics}*@{selected|npc})]][ARC] ]]&amp;#125;&amp;#125; {{rname=^{athletics-u&amp;#125;&amp;#125;&amp;#125; {{mod=[[ [[(@{selected|athletics_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_athletics}*@{selected|npc})]][ATHL] ]]&amp;#125;&amp;#125; {{r1=[[@{selected|d20}+[[(@{selected|athletics_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_athletics}*@{selected|npc})]][ATHL] ]]\r\n|Deception,+[[(@{selected|deception_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_deception}*@{selected|npc})]][ARC] ]]&amp;#125;&amp;#125; {{rname=^{deception-u&amp;#125;&amp;#125;&amp;#125; {{mod=[[ [[(@{selected|deception_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_deception}*@{selected|npc})]][DECE] ]]&amp;#125;&amp;#125; {{r1=[[@{selected|d20}+[[(@{selected|deception_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_deception}*@{selected|npc})]][DECE] ]]\r\n|History,+[[(@{selected|history_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_history}*@{selected|npc})]][ARC] ]]&amp;#125;&amp;#125; {{rname=^{history-u&amp;#125;&amp;#125;&amp;#125; {{mod=[[ [[(@{selected|history_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_history}*@{selected|npc})]][HIST] ]]&amp;#125;&amp;#125; {{r1=[[@{selected|d20}+[[(@{selected|history_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_history}*@{selected|npc})]][HIST] ]]\r\n|Insight,+[[(@{selected|insight_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_insight}*@{selected|npc})]][ARC] ]]&amp;#125;&amp;#125; {{rname=^{insight-u&amp;#125;&amp;#125;&amp;#125; {{mod=[[ [[(@{selected|insight_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_insight}*@{selected|npc})]][INSI] ]]&amp;#125;&amp;#125; {{r1=[[@{selected|d20}+[[(@{selected|insight_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_insight}*@{selected|npc})]][INSI] ]]\r\n|Intimidation,+[[(@{selected|intimidation_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_intimidation}*@{selected|npc})]][ARC] ]]&amp;#125;&amp;#125; {{rname=^{intimidation-u&amp;#125;&amp;#125;&amp;#125; {{mod=[[ [[(@{selected|intimidation_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_intimidation}*@{selected|npc})]][INTI] ]]&amp;#125;&amp;#125; {{r1=[[@{selected|d20}+[[(@{selected|intimidation_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_intimidation}*@{selected|npc})]][INTI] ]]\r\n|Investigation,+[[(@{selected|investigation_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_investigation}*@{selected|npc})]][ARC] ]]&amp;#125;&amp;#125; {{rname=^{investigation-u&amp;#125;&amp;#125;&amp;#125; {{mod=[[ [[(@{selected|investigation_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_investigation}*@{selected|npc})]][INVE] ]]&amp;#125;&amp;#125; {{r1=[[@{selected|d20}+[[(@{selected|investigation_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_investigation}*@{selected|npc})]][INVE] ]]\r\n|Medicine,+[[(@{selected|medicine_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_medicine}*@{selected|npc})]][ARC] ]]&amp;#125;&amp;#125; {{rname=^{medicine-u&amp;#125;&amp;#125;&amp;#125; {{mod=[[ [[(@{selected|medicine_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_medicine}*@{selected|npc})]][MEDI] ]]&amp;#125;&amp;#125; {{r1=[[@{selected|d20}+[[(@{selected|medicine_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_medicine}*@{selected|npc})]][MEDI] ]]\r\n|Nature,+[[(@{selected|nature_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_nature}*@{selected|npc})]][ARC] ]]&amp;#125;&amp;#125; {{rname=^{nature-u&amp;#125;&amp;#125;&amp;#125; {{mod=[[ [[(@{selected|nature_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_nature}*@{selected|npc})]][NATU] ]]&amp;#125;&amp;#125; {{r1=[[@{selected|d20}+[[(@{selected|nature_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_nature}*@{selected|npc})]][NATU] ]]\r\n|Perception,+[[(@{selected|perception_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_perception}*@{selected|npc})]][ARC] ]]&amp;#125;&amp;#125; {{rname=^{perception-u&amp;#125;&amp;#125;&amp;#125; {{mod=[[ [[(@{selected|perception_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_perception}*@{selected|npc})]][PERC] ]]&amp;#125;&amp;#125; {{r1=[[@{selected|d20}+[[(@{selected|perception_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_perception}*@{selected|npc})]][PERC] ]]\r\n|Performance,+[[(@{selected|performance_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_performance}*@{selected|npc})]][ARC] ]]&amp;#125;&amp;#125; {{rname=^{performance-u&amp;#125;&amp;#125;&amp;#125; {{mod=[[ [[(@{selected|performance_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_performance}*@{selected|npc})]][PERF] ]]&amp;#125;&amp;#125; {{r1=[[@{selected|d20}+[[(@{selected|performance_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_performance}*@{selected|npc})]][PERF] ]]\r\n|Persuasion,+[[(@{selected|persuasion_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_persuasion}*@{selected|npc})]][ARC] ]]&amp;#125;&amp;#125; {{rname=^{persuasion-u&amp;#125;&amp;#125;&amp;#125; {{mod=[[ [[(@{selected|persuasion_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_persuasion}*@{selected|npc})]][PERS] ]]&amp;#125;&amp;#125; {{r1=[[@{selected|d20}+[[(@{selected|persuasion_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_persuasion}*@{selected|npc})]][PERS] ]]\r\n|Religion,+[[(@{selected|religion_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_religion}*@{selected|npc})]][ARC] ]]&amp;#125;&amp;#125; {{rname=^{religion-u&amp;#125;&amp;#125;&amp;#125; {{mod=[[ [[(@{selected|religion_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_religion}*@{selected|npc})]][RELI] ]]&amp;#125;&amp;#125; {{r1=[[@{selected|d20}+[[(@{selected|religion_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_religion}*@{selected|npc})]][RELI] ]]\r\n|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] ]]&amp;#125;&amp;#125; {{rname=^{sleight_of_hand-u&amp;#125;&amp;#125;&amp;#125; {{mod=[[ [[(@{selected|sleight_of_hand_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_sleight_of_hand}*@{selected|npc})]][SLEI] ]]&amp;#125;&amp;#125; {{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] ]]\r\n|Stealth,+[[(@{selected|stealth_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_stealth}*@{selected|npc})]][ARC] ]]&amp;#125;&amp;#125; {{rname=^{stealth-u&amp;#125;&amp;#125;&amp;#125; {{mod=[[ [[(@{selected|stealth_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_stealth}*@{selected|npc})]][STEA] ]]&amp;#125;&amp;#125; {{r1=[[@{selected|d20}+[[(@{selected|stealth_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_stealth}*@{selected|npc})]][STEA] ]]\r\n|Survival,+[[(@{selected|survival_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_survival}*@{selected|npc})]][ARC] ]]&amp;#125;&amp;#125; {{rname=^{survival-u&amp;#125;&amp;#125;&amp;#125; {{mod=[[ [[(@{selected|survival_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_survival}*@{selected|npc})]][SURV] ]]&amp;#125;&amp;#125; {{r1=[[@{selected|d20}+[[(@{selected|survival_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_survival}*@{selected|npc})]][SURV] ]]\r\n}}} {{global=@{selected|global_skill_mod}}} @{selected|charname_output}<\/pre>\n<h2>William&#8217;s Starry Form<\/h2>\n<p>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 <a href=\"https:\/\/wiki.roll20.net\/Script:Token_Mod\">TokenMod<\/a>.<\/p>\n<pre>!token-mod {{\r\n--flip\r\nemits_bright_light\r\nemits_low_light\r\n--set \r\nstatusmarkers#!blue\r\nbright_light_distance#10\r\nlow_light_distance#10\r\ntint_color#transparent\r\n}}<\/pre>\n<h2>Status-Dead<\/h2>\n<p>Everyone&#8217;s favorite status macro! Uses TokenMod API for most of its action.<\/p>\n<pre>!token-mod {{\r\n--set\r\nstatusmarkers|=dead\r\nbar1_current|0\r\n--off\r\nshowname\r\nemits_bright_light\r\nshow_tooltip\r\n}}\r\n&amp;{template:npcaction}} {{rname=Defeated!}}{{description=@{selected|token_name} is dead.}}<\/pre>\n<h2>Status-0<\/h2>\n<p>Zeroes out the status markers on a character. Uses <a href=\"https:\/\/wiki.roll20.net\/Script:Token_Mod\">TokenMod<\/a> API.<\/p>\n<pre>!token-mod --set statusmarkers<\/pre>\n<h2>Status-Set<\/h2>\n<p>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 <a href=\"https:\/\/wiki.roll20.net\/Script:Token_Mod\">TokenMod<\/a> API. You can undo any of the statuses by reinvoking it.<\/p>\n<pre>!token-mod ?{Status\r\n|Concentrating, --set statusmarkers#!Concentrating\r\n|Helping, --set statusmarkers#!Helping\r\n|Hiding, --set statusmarkers#!Ninja-Mask\r\n|Dodging, --set statusmarkers#!Dodging\r\n|Readying, --set statusmarkers#!Readying\r\n|-, \r\n|Blinded, --set statusmarkers#Blinded --set limit_field_of_vision_total#0 --set limit_field_of_night_vision_total#0\r\n|(Unblinded), --set statusmarkers#-Blinded --set limit_field_of_vision_total#360 --set limit_field_of_night_vision_total#360\r\n|Charmed, --set statusmarkers#!Charmed\r\n|Deafened, --set statusmarkers#!Deafened\r\n|Drowning, --set statusmarkers#!Drowning\r\n|Exhausted, --set statusmarkers#!Exhausted\r\n|Frightened, --set statusmarkers#!Frightened\r\n|Grappled, --set statusmarkers#!Grappled\r\n|Paralyzed, --set statusmarkers#!Paralyzed\r\n|Petrified, --set statusmarkers#!Petrified\r\n|Poisoned, --set statusmarkers#!Poisoned\r\n|Restrained, --set statusmarkers#!Restrained\r\n|Slowed, --set statusmarkers#!Slowed\r\n|Stunned, --set statusmarkers#!Stunned\r\n|Surprised, --set statusmarkers#!Surprised\r\n|-, \r\n|Blessed, --set statusmarkers#!Blessed\r\n|Hastened, --set statusmarkers#!Hastened\r\n|Invisibile, --set statusmarkers#!Invisible\r\n|Marked, --set statusmarkers#!Marked\r\n|Raging, --set statusmarkers#!Raging\r\n|Shielded, --set statusmarkers#!bolt-shield\r\n|-, \r\n|Prone, --set statusmarkers#!Prone\r\n|Incapacitated, --set statusmarkers#!Incapacitated\r\n|Unconscious\/Asleep, --set statusmarkers#!Unconscious\r\n|Dying, --set statusmarkers#!Dying\r\n|-, \r\n|Clear All, --set statusmarkers#=blue#-blue}<\/pre>\n<h2>Surprised<\/h2>\n<p>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).\u00a0 Uses the <a href=\"https:\/\/wiki.roll20.net\/Script:Token_Mod\">TokenMod<\/a> API.<\/p>\n<pre>!token-mod --set statusmarkers#!Surprised<\/pre>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Macros make player and GM lives easier<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_seopress_robots_primary_cat":"","_seopress_titles_title":"","_seopress_titles_desc":"","_seopress_robots_index":"","footnotes":""},"categories":[44,7],"tags":[74,73,72],"class_list":["post-3176","post","type-post","status-publish","format-standard","hentry","category-dd","category-resources-rules","tag-macros","tag-roll20","tag-vtt"],"_links":{"self":[{"href":"https:\/\/hill-kleerup.org\/blog\/heroes\/wp-json\/wp\/v2\/posts\/3176","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hill-kleerup.org\/blog\/heroes\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/hill-kleerup.org\/blog\/heroes\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/hill-kleerup.org\/blog\/heroes\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/hill-kleerup.org\/blog\/heroes\/wp-json\/wp\/v2\/comments?post=3176"}],"version-history":[{"count":2,"href":"https:\/\/hill-kleerup.org\/blog\/heroes\/wp-json\/wp\/v2\/posts\/3176\/revisions"}],"predecessor-version":[{"id":3179,"href":"https:\/\/hill-kleerup.org\/blog\/heroes\/wp-json\/wp\/v2\/posts\/3176\/revisions\/3179"}],"wp:attachment":[{"href":"https:\/\/hill-kleerup.org\/blog\/heroes\/wp-json\/wp\/v2\/media?parent=3176"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/hill-kleerup.org\/blog\/heroes\/wp-json\/wp\/v2\/categories?post=3176"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/hill-kleerup.org\/blog\/heroes\/wp-json\/wp\/v2\/tags?post=3176"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}