Roll20 uses cookies to improve your experience on our site. Cookies enable you to enjoy certain features, social sharing functionality, and tailor message and display ads to your interests on our site and others. They also help us understand how our site is being used. By continuing to use our site, you consent to our use of cookies. Update your cookie preferences .
×
D&D 2024 has arrived! Pre-order the new core rulebooks now and get an exclusive pre-order bonus for free!
Create a free account

D&D 5E Statblock Macro Mule (v3)

The 'Description' buttons for each of the spells was previously formatted for the whisper setting like this: (!
@{MM|whisper} %{@{selected|character_name}|repeating_spell-cantrip_$0_output}%{MM|SpellLinkStyle} display: inline-block@{selected|repeating_spell-cantrip_$0_spellname|max};" class="showtip" title="Casting Time: @{selected|repeating_spell-cantrip_$0_spellcastingtime}%NEWLINE%Duration: @{selected|repeating_spell-cantrip_$0_spellduration}%NEWLINE%Target: @{selected|repeating_spell-cantrip_$0_spelltarget} )  All I had to do was change the '@' to '@' for each item and it delayed the processing of the {MM|whisper} so that it wouldn't get screwed up if there are any " " in the attribute. (!
@{MM|whisper} %{@{selected|character_name}|repeating_spell-cantrip_$0_output}%{MM|SpellLinkStyle} display: inline-block@{selected|repeating_spell-cantrip_$0_spellname|max};" class="showtip" title="Casting Time: @{selected|repeating_spell-cantrip_$0_spellcastingtime}%NEWLINE%Duration: @{selected|repeating_spell-cantrip_$0_spellduration}%NEWLINE%Target: @{selected|repeating_spell-cantrip_$0_spelltarget} )  I did some pretty thorough testing through several whisper settings with both PCs and NPCs and it looked all good now, but please let me know if you have any other issues!
This is great yet again! Thanks Jarren for this tool. Any chance the future will see a clickable inventory functionality (to post item descriptions to chat by using _itemcontent?)
So forgive this if it's an absolute newb inquiry, but what would I want to use for macros if I wanted to be able to toggle on and off whether an NPC sheet would whisper to the gm? Is there a simple script to use for this?
Teccam said: This is great yet again! Thanks Jarren for this tool. Any chance the future will see a clickable inventory functionality (to post item descriptions to chat by using _itemcontent?) Yeah I can look into adding that.  It'll add 30 more Abilities (just like the 'Desc' abilities for NPC Actions, etc. Roll20 just announced a new character sheet.  I've requested they add 'output' fields for everything, and if that's the case then an updated MacroMule for the new sheet would be a lot simpler to code.
Robin W. said: So forgive this if it's an absolute newb inquiry, but what would I want to use for macros if I wanted to be able to toggle on and off whether an NPC sheet would whisper to the gm? Is there a simple script to use for this? Currently there is nothing built into this MacroMule that will trigger any other scripts.  The Mod script approach only has two features: the first is to automate building the MacroMule character instead of importing it from my game or manually copying all of the attributes and abilities; and the second is the !self command to be used for 'whisper to myself' functionality instead of using Macro Overloading . If you want to toggle on and off whisper settings, then you'll need to use a Mod script such as ChatSetAttr. In order to use Mod scripts, the game creator will need to have a Roll20 Pro subscription (I see that you have a Plus subscription, not a Pro). Here is a ChatSetAttr command to toggle the whisper setting to 'Query Whisper': !setattr {{   --silent   --sel   --replace   --wtype|\ques{Whisper\ques\|Public Roll,\|Whisper Roll,/w gm }|  }}
1707933664

Edited 1707934471
Jarren said: Robin W. said: So forgive this if it's an absolute newb inquiry, but what would I want to use for macros if I wanted to be able to toggle on and off whether an NPC sheet would whisper to the gm? Is there a simple script to use for this? Currently there is nothing built into this MacroMule that will trigger any other scripts.  The Mod script approach only has two features: the first is to automate building the MacroMule character instead of importing it from my game or manually copying all of the attributes and abilities; and the second is the !self command to be used for 'whisper to myself' functionality instead of using Macro Overloading . If you want to toggle on and off whisper settings, then you'll need to use a Mod script such as ChatSetAttr. In order to use Mod scripts, the game creator will need to have a Roll20 Pro subscription (I see that you have a Plus subscription, not a Pro). Here is a ChatSetAttr command to toggle the whisper setting to 'Query Whisper': !setattr {{   --silent   --sel   --replace   --wtype|\ques{Whisper\ques\|Public Roll,\|Whisper Roll,/w gm }|  }} Cool, follow up issue, one of my NPC spellcasters does this when I click spells. I'm assuming I've done something wrong somewhere. Spells: Save DC 13 | Attack +5   -- Cantrips --  |repeating_spell-cantrip_$0_output}" style="text-decoration: none; background: none; padding: 0px; font-size: 13px; cursor: text; display:none; cursor: pointer; color: purple; display: inline-block;" class="showtip" title="Casting Time: 1 action Duration: 1 round Target: The space of a creature within range ) Chill Touch |repeating_spell-cantrip_$0_spell" style="text-decoration: none; background: none; padding: 0px; font-size: 13px; cursor: text; display:none; cursor: pointer; color: purple; display: inline-block;) (120 feet)  |repeating_spell-cantrip_$1_output}" style="text-decoration: none; background: none; padding: 0px; font-size: 13px; cursor: text; display:none; cursor: pointer; color: purple; color: purpleselected|repeating_spell-cantrip_$selected|repeating_spell-cantrip_$1_spellpreparedselected|repeating_spell-cantrip_$1_spellprepared1_spellname|max;display: inline-block;" class="showtip" title="Casting Time: 1 action Duration: up to 1 minute Target: ) There's a lot more, and it does this for basically every spell, even spell levels that don't have spells listed. When I click any spell names on it, it says "TypeError: zt is undefined"
Robin W. said: Cool, follow up issue, one of my NPC spellcasters does this when I click spells. I'm assuming I've done something wrong somewhere. There's a lot more, and it does this for basically every spell, even spell levels that don't have spells listed. When I click any spell names on it, it says "TypeError: zt is undefined" Can you post a screenshot?   Does this only happen with one NPC, or several?  If it only happens with a single NPC, then there is something that needs to be fixed on that character; not on the MacroMule.  It’ll probably be easiest for me to troubleshoot if you’re willing to PM me a game invitation and promote me to GM. Feel free to make a game copy first and invite me to that one so we don’t have to test in your regular game. 
Jarren said: Robin W. said: Cool, follow up issue, one of my NPC spellcasters does this when I click spells. I'm assuming I've done something wrong somewhere. There's a lot more, and it does this for basically every spell, even spell levels that don't have spells listed. When I click any spell names on it, it says "TypeError: zt is undefined" Can you post a screenshot?   Does this only happen with one NPC, or several?  If it only happens with a single NPC, then there is something that needs to be fixed on that character; not on the MacroMule.  It’ll probably be easiest for me to troubleshoot if you’re willing to PM me a game invitation and promote me to GM. Feel free to make a game copy first and invite me to that one so we don’t have to test in your regular game.  It does happen to more than one but not all of them. I'll make a copy of the game in just a moment and DM it to you. Here's a screenshot for reference.
Robin W. said: Cool, follow up issue, one of my NPC spellcasters does this when I click spells. I'm assuming I've done something wrong somewhere. For anyone else that has a similar issue (it will also show up on other menus, such as Stats): the problem is  Known Limitation #4 : 4. Characters cannot have any parentheses or quotation marks in their character names. (The name that is displayed in the journal.) HTML replacements won't work either. This limitation also applies to some other fields, such as 'range' for spells and weapons. Other 'control' characters (! @ # $ % ^ & ( ) { } [ ] " ' : ; ,) may cause issues as well. The problem characters in question had parentheses in their names.  Replacing the parentheses with square brackets or a dash should fix the issue.
1710526002

Edited 1710570503
Updated code v3.5 MacroMule Character Vault Game Update:   Lots of changes in this update.  Again, I always suggest renaming/copying your current MacroMule before creating the updated one, just in case you need to revert back. Light / Dark Mode:       A dded 'Color_Mode' attribute to switch between light & dark colors       Updated all 'Style' Abilities update with light/dark friendly colors  Equipment      Added Info description buttons to inventory items PCs      Multiclass descriptions on PCStats and PCBio      Changed Hit Point stat to reference 'hp' instead of 'bar1'  on PCStats Rolls Menu      Added Save modifiers      Added Proficiency and Expertise icons      Adjusted so each line will fit better when not using Stylus      Listing can be toggled between Alphabetical or Sorted by type Spellcasting      Spells 'unprepared' colors no longer apply to Range and Innate      Added Concentration icon       Added Ritual icon  Various      Updated the Menu ability buttons with invisible leading characters to sort them on the Token Action bar      Several minor appearance tweaks       Added attributes to the MacroMule character to show as a 'vehicle' and so the charactermancer prompt does not appear  I've also gone back through this thread and edited/updated all of my initial posts with  new screenshots and  (hopefully)  better descriptions and explanations.
Thank you for this update Jarren.  Really like the icons/sorting on the token action buttons.  Great stuff!
I'm also jumping on this love train!  Thank you so much for this!  Lots of respect and love here, this is now one of my top five dm'ing aids! Cheers! 
Thank you!
Question (and it's likely I just missed it in the finer details):  How can I set it so my players' rolls and such are public, and keep mine whispered?
Eponymous  said: Question (and it's likely I just missed it in the finer details):  How can I set it so my players' rolls and such are public, and keep mine whispered? Whisper settings for rolls are set on the character sheets individually for each character.   The only whisper settings that are controlled by the MacroMule character are for the chat menus and Info description buttons. All of the rolls (skill checks, saving throws, attack rolls, etc.) are controlled by the linked character sheets, and are the exact same roll that would happen if you clicked on the roll from the character sheet itself.  E.g. if you click on the Init [roll] button, that is exactly the same as opening the character sheet and clicking on the Initiative button there. If you wanted the menus and Info descriptions to be set to public (I don't recommend this!), then change the 'PCWhisper' attribute to be blank. To adjust the whisper setting for a character you can follow KeithCurtis' instructions here , or you can use a script such as ChatSetAttr. This ChatSetAttr command will set the Whisper for a character to the 'Query Whisper' settings. !setattr {{   --silent   --sel   --replace   --wtype|\ques{Whisper\ques\|Public Roll,\|Whisper Roll,/w gm}|  }}
Thank you, Jarren.  I just needed confirmation that I should be seeing the rolls.  I don't need the menus and such.   Thanks again!
Hello Jarren, I just started using the Macro Mule and first I just want to say thank you for all your hard work.  This thing is amazing!!!  Second, I can't seem to find how to roll for Hit Dice.  I have tried every macro (Menu, Roll, traits, etc.) but I don't see it.  Is it there? Where is it? Can you add it? Thanks again for all your time working so hard on this!
The roll for Hit Dice is not currently included.  I should be able to add it easily enough. I would add it to the Rolls menu below Initiative and Death Saves, unless there is strong reasoning to include it somewhere else. However, I know there are issues with multiclassed characters.  I haven't played around with it enough to figure out all the details, but I know that how Hit Dice are displayed and rolled gets super weird with multiclassed characters.  I think that was why I didn't include the Hit Dice roll previously.  
Cool.  thanks! Yea, the multiclass issue makes sense.  In my game, we just roll the highest die.  It's usually only a 1 or 2 hp difference anyway.
1713383023

Edited 1713392252
Updated code to 3.5.1 to add 'Hit Dice' rolls to the PC Roll menus. Caveats: I have done very little testing, other than to check and see that it does appear to show up for both single-classed and multi-classed PCs.  Based on how the attributes are written it may be difficult/impossible to add second or third multi-class dice to display. For multi-class characters, the value that is shown is whatever hit dice that is listed for the primary (first) class selected. To make this update manually, just update these two fields: PCRollsList-Alphabetical [**Init.**](%{MM|StatLinkStyle} display: inline-block; ) [roll](~@{selected|character_name}|initiative%{MM|RollLinkStyle} display: inline-block; ) ([+](%{MM|InfoLinkStyle} display: inline-block; display: none@{MM|at}{MM|show@{selected|npc_dex_negative}}; )[**@{selected|initiative_bonus}**](%{MM|InfoLinkStyle} display: inline-block; )) | [**Hit Die**](%{MM|StatLinkStyle} display: inline-block; ) [roll](~@{selected|character_name}|hit_dice%{MM|RollLinkStyle} display: inline-block; ) ([**d@{selected|hitdietype}**](%{MM|InfoLinkStyle} display: inline-block; ))[ ](" style="height: 0.0px; display: block;) [**Death**](%{MM|StatLinkStyle} display: inline-block; ) [save](~@{selected|character_name}|death_save%{MM|RollLinkStyle} display: inline-block; ) ([+](%{MM|InfoLinkStyle} display: inline-block; )[**@{selected|death_save_bonus}**](%{MM|InfoLinkStyle} display: inline-block; ))   [](%{MM|StatLinkStyle} font-size: 6px; display: inline-block@{MM|at}{MM|show@{selected|deathsave_succ1}};) [](%{MM|StatLinkStyle} font-size: 6px; display: inline-block@{MM|at}{MM|show@{selected|deathsave_succ2}};) [](%{MM|StatLinkStyle} font-size: 6px; display: inline-block@{MM|at}{MM|show@{selected|deathsave_succ3}};) [❌](%{MM|StatLinkStyle} font-size: 6px; display: inline-block@{MM|at}{MM|show@{selected|deathsave_fail1}};) [❌](%{MM|StatLinkStyle} font-size: 6px; display: inline-block@{MM|at}{MM|show@{selected|deathsave_fail2}};) [❌](%{MM|StatLinkStyle} font-size: 6px; display: inline-block@{MM|at}{MM|show@{selected|deathsave_fail3}};) [ ](%{MM|RedLine};)[**Str**](%{MM|StatLinkStyle} display: inline-block;) [**@{selected|strength}** ](%{MM|InfoLinkStyle} display: inline-block;) [check](~@{selected|character_name}|strength%{MM|RollLinkStyle} display: inline-block; ) ([+](%{MM|InfoLinkStyle} display: inline-block; display: none@{MM|at}{MM|show@{selected|npc_str_negative}}; )[**@{selected|strength_mod}**](%{MM|InfoLinkStyle} display: inline-block; )) | [save](~@{selected|character_name}|strength_save%{MM|RollLinkStyle} display: inline-block; )[@{MM|at}{MM|at}{MM|show@{selected|strength_save_prof}|max} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block@{MM|at}{MM|at}{MM|show@{selected|strength_save_prof}};) ([+](%{MM|InfoLinkStyle} display: inline-block; display: none@{MM|at}{MM|show@{selected|npc_str_negative}}; )[**@{selected|strength_save_bonus}**](%{MM|InfoLinkStyle} display: inline-block; )) [ ](" style="height: 0.0px; display: block;) [**Dex**](%{MM|StatLinkStyle} display: inline-block;) [**@{selected|dexterity}** ](%{MM|InfoLinkStyle} display: inline-block;) [check](~@{selected|character_name}|dexterity%{MM|RollLinkStyle} display: inline-block; ) ([+](%{MM|InfoLinkStyle} display: inline-block; display: none@{MM|at}{MM|show@{selected|npc_dex_negative}}; )[**@{selected|dexterity_mod}**](%{MM|InfoLinkStyle} display: inline-block; )) | [save](~@{selected|character_name}|dexterity_save%{MM|RollLinkStyle} display: inline-block; )[@{MM|at}{MM|at}{MM|show@{selected|dexterity_save_prof}|max} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block@{MM|at}{MM|at}{MM|show@{selected|dexterity_save_prof}};) ([+](%{MM|InfoLinkStyle} display: inline-block; display: none@{MM|at}{MM|show@{selected|npc_dex_negative}}; )[**@{selected|dexterity_save_bonus}**](%{MM|InfoLinkStyle} display: inline-block; )) [ ](" style="height: 0.0px; display: block;) [**Con**](%{MM|StatLinkStyle} display: inline-block;) [**@{selected|constitution}** ](%{MM|InfoLinkStyle} display: inline-block;) [check](~@{selected|character_name}|constitution%{MM|RollLinkStyle} display: inline-block; ) ([+](%{MM|InfoLinkStyle} display: inline-block; display: none@{MM|at}{MM|show@{selected|npc_con_negative}}; )[**@{selected|constitution_mod}**](%{MM|InfoLinkStyle} display: inline-block; )) | [save](~@{selected|character_name}|constitution_save%{MM|RollLinkStyle} display: inline-block; )[@{MM|at}{MM|at}{MM|show@{selected|constitution_save_prof}|max} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block@{MM|at}{MM|at}{MM|show@{selected|constitution_save_prof}};) ([+](%{MM|InfoLinkStyle} display: inline-block; display: none@{MM|at}{MM|show@{selected|npc_con_negative}}; )[**@{selected|constitution_save_bonus}**](%{MM|InfoLinkStyle} display: inline-block; )) [ ](" style="height: 0.0px; display: block;) [**Int**](%{MM|StatLinkStyle} display: inline-block;) [**@{selected|intelligence}** ](%{MM|InfoLinkStyle} display: inline-block;) [check](~@{selected|character_name}|intelligence%{MM|RollLinkStyle} display: inline-block; ) ([+](%{MM|InfoLinkStyle} display: inline-block; display: none@{MM|at}{MM|show@{selected|npc_int_negative}}; )[**@{selected|intelligence_mod}**](%{MM|InfoLinkStyle} display: inline-block; )) | [save](~@{selected|character_name}|intelligence_save%{MM|RollLinkStyle} display: inline-block; )[@{MM|at}{MM|at}{MM|show@{selected|intelligence_save_prof}|max} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block@{MM|at}{MM|at}{MM|show@{selected|intelligence_save_prof}};) ([+](%{MM|InfoLinkStyle} display: inline-block; display: none@{MM|at}{MM|show@{selected|npc_int_negative}}; )[**@{selected|intelligence_save_bonus}**](%{MM|InfoLinkStyle} display: inline-block; )) [ ](" style="height: 0.0px; display: block;) [**Wis**](%{MM|StatLinkStyle} display: inline-block;) [**@{selected|wisdom}** ](%{MM|InfoLinkStyle} display: inline-block;) [check](~@{selected|character_name}|wisdom%{MM|RollLinkStyle} display: inline-block; ) ([+](%{MM|InfoLinkStyle} display: inline-block; display: none@{MM|at}{MM|show@{selected|npc_wis_negative}}; )[**@{selected|wisdom_mod}**](%{MM|InfoLinkStyle} display: inline-block; )) | [save](~@{selected|character_name}|wisdom_save%{MM|RollLinkStyle} display: inline-block; )[@{MM|at}{MM|at}{MM|show@{selected|wisdom_save_prof}|max} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block@{MM|at}{MM|at}{MM|show@{selected|wisdom_save_prof}};) ([+](%{MM|InfoLinkStyle} display: inline-block; display: none@{MM|at}{MM|show@{selected|npc_wis_negative}}; )[**@{selected|wisdom_save_bonus}**](%{MM|InfoLinkStyle} display: inline-block; )) [ ](" style="height: 0.0px; display: block;) [**Cha**](%{MM|StatLinkStyle} display: inline-block;) [**@{selected|charisma}** ](%{MM|InfoLinkStyle} display: inline-block;) [check](~@{selected|character_name}|charisma%{MM|RollLinkStyle} display: inline-block; ) ([+](%{MM|InfoLinkStyle} display: inline-block; display: none@{MM|at}{MM|show@{selected|npc_cha_negative}}; )[**@{selected|charisma_mod}**](%{MM|InfoLinkStyle} display: inline-block; )) | [save](~@{selected|character_name}|charisma_save%{MM|RollLinkStyle} display: inline-block; )[@{MM|at}{MM|at}{MM|show@{selected|charisma_save_prof}|max} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block@{MM|at}{MM|at}{MM|show@{selected|charisma_save_prof}};) ([+](%{MM|InfoLinkStyle} display: inline-block; display: none@{MM|at}{MM|show@{selected|npc_cha_negative}}; )[**@{selected|charisma_save_bonus}**](%{MM|InfoLinkStyle} display: inline-block; )) [ ](%{MM|RedLine};)[Acrobatics](~@{selected|character_name}|acrobatics%{MM|RollLinkStyle} display: inline-block; )[@{MM|at}{MM|at}{MM|show@{selected|acrobatics_prof}|max} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block@{MM|at}{MM|at}{MM|show@{selected|acrobatics_prof}};) | [Animal Handling](~@{selected|character_name}|animal_handling%{MM|RollLinkStyle} display: inline-block; )[@{MM|at}{MM|at}{MM|show@{selected|animal_handling_prof}|max} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block@{MM|at}{MM|at}{MM|show@{selected|animal_handling_prof}};) | [Arcana](~@{selected|character_name}|arcana%{MM|RollLinkStyle} display: inline-block; )[@{MM|at}{MM|at}{MM|show@{selected|arcana_prof}|max} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block@{MM|at}{MM|at}{MM|show@{selected|arcana_prof}};) | [Athletics](~@{selected|character_name}|athletics%{MM|RollLinkStyle} display: inline-block; )[@{MM|at}{MM|at}{MM|show@{selected|athletics_prof}|max} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block@{MM|at}{MM|at}{MM|show@{selected|athletics_prof}};) | [Deception](~@{selected|character_name}|deception%{MM|RollLinkStyle} display: inline-block; )[@{MM|at}{MM|at}{MM|show@{selected|deception_prof}|max} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block@{MM|at}{MM|at}{MM|show@{selected|deception_prof}};) | [History](~@{selected|character_name}|history%{MM|RollLinkStyle} display: inline-block; )[@{MM|at}{MM|at}{MM|show@{selected|history_prof}|max} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block@{MM|at}{MM|at}{MM|show@{selected|history_prof}};) | [Insight](~@{selected|character_name}|insight%{MM|RollLinkStyle} display: inline-block; )[@{MM|at}{MM|at}{MM|show@{selected|insight_prof}|max} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block@{MM|at}{MM|at}{MM|show@{selected|insight_prof}};) | [Intimidation](~@{selected|character_name}|intimidation%{MM|RollLinkStyle} display: inline-block; )[@{MM|at}{MM|at}{MM|show@{selected|intimidation_prof}|max} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block@{MM|at}{MM|at}{MM|show@{selected|intimidation_prof}};) | [Investigation](~@{selected|character_name}|investigation%{MM|RollLinkStyle} display: inline-block; )[@{MM|at}{MM|at}{MM|show@{selected|investigation_prof}|max} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block@{MM|at}{MM|at}{MM|show@{selected|investigation_prof}};) | [Medicine](~@{selected|character_name}|medicine%{MM|RollLinkStyle} display: inline-block; )[@{MM|at}{MM|at}{MM|show@{selected|medicine_prof}|max} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block@{MM|at}{MM|at}{MM|show@{selected|medicine_prof}};) | [Nature](~@{selected|character_name}|nature%{MM|RollLinkStyle} display: inline-block; )[@{MM|at}{MM|at}{MM|show@{selected|nature_prof}|max} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block@{MM|at}{MM|at}{MM|show@{selected|nature_prof}};) | [Perception](~@{selected|character_name}|perception%{MM|RollLinkStyle} display: inline-block; )[@{MM|at}{MM|at}{MM|show@{selected|perception_prof}|max} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block@{MM|at}{MM|at}{MM|show@{selected|perception_prof}};) | [Performance](~@{selected|character_name}|performance%{MM|RollLinkStyle} display: inline-block; )[@{MM|at}{MM|at}{MM|show@{selected|performance_prof}|max} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block@{MM|at}{MM|at}{MM|show@{selected|performance_prof}};) | [Persuasion](~@{selected|character_name}|persuasion%{MM|RollLinkStyle} display: inline-block; )[@{MM|at}{MM|at}{MM|show@{selected|persuasion_prof}|max} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block@{MM|at}{MM|at}{MM|show@{selected|persuasion_prof}};) | [Religion](~@{selected|character_name}|religion%{MM|RollLinkStyle} display: inline-block; )[@{MM|at}{MM|at}{MM|show@{selected|religion_prof}|max} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block@{MM|at}{MM|at}{MM|show@{selected|religion_prof}};) | [Sleight Of Hand](~@{selected|character_name}|sleight_of_hand%{MM|RollLinkStyle} display: inline-block; )[@{MM|at}{MM|at}{MM|show@{selected|sleight_of_hand_prof}|max} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block@{MM|at}{MM|at}{MM|show@{selected|sleight_of_hand_prof}};) | [Stealth](~@{selected|character_name}|stealth%{MM|RollLinkStyle} display: inline-block; )[@{MM|at}{MM|at}{MM|show@{selected|stealth_prof}|max} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block@{MM|at}{MM|at}{MM|show@{selected|stealth_prof}};) | [Survival](~@{selected|character_name}|survival%{MM|RollLinkStyle} display: inline-block; )[@{MM|at}{MM|at}{MM|show@{selected|survival_prof}|max} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block@{MM|at}{MM|at}{MM|show@{selected|survival_prof}};) PCRollsList-Sorted [**Init.**](%{MM|StatLinkStyle} display: inline-block; ) [roll](~@{selected|character_name}|initiative%{MM|RollLinkStyle} display: inline-block; ) ([+](%{MM|InfoLinkStyle} display: inline-block; display: none@{MM|at}{MM|show@{selected|npc_dex_negative}}; )[**@{selected|initiative_bonus}**](%{MM|InfoLinkStyle} display: inline-block; )) | [**Hit Die**](%{MM|StatLinkStyle} display: inline-block; ) [roll](~@{selected|character_name}|hit_dice%{MM|RollLinkStyle} display: inline-block; ) ([**d@{selected|hitdietype}**](%{MM|InfoLinkStyle} display: inline-block; ))[ ](" style="height: 0.0px; display: block;) [**Death**](%{MM|StatLinkStyle} display: inline-block; ) [save](~@{selected|character_name}|death_save%{MM|RollLinkStyle} display: inline-block; ) ([+](%{MM|InfoLinkStyle} display: inline-block; )[**@{selected|death_save_bonus}**](%{MM|InfoLinkStyle} display: inline-block; ))   [](%{MM|StatLinkStyle} font-size: 6px; display: inline-block@{MM|at}{MM|show@{selected|deathsave_succ1}};) [](%{MM|StatLinkStyle} font-size: 6px; display: inline-block@{MM|at}{MM|show@{selected|deathsave_succ2}};) [](%{MM|StatLinkStyle} font-size: 6px; display: inline-block@{MM|at}{MM|show@{selected|deathsave_succ3}};) [❌](%{MM|StatLinkStyle} font-size: 6px; display: inline-block@{MM|at}{MM|show@{selected|deathsave_fail1}};) [❌](%{MM|StatLinkStyle} font-size: 6px; display: inline-block@{MM|at}{MM|show@{selected|deathsave_fail2}};) [❌](%{MM|StatLinkStyle} font-size: 6px; display: inline-block@{MM|at}{MM|show@{selected|deathsave_fail3}};) [ ](%{MM|RedLine};)[**Str**](%{MM|StatLinkStyle} display: inline-block;) [**@{selected|strength}** ](%{MM|InfoLinkStyle} display: inline-block;) [check](~@{selected|character_name}|strength%{MM|RollLinkStyle} display: inline-block; ) ([+](%{MM|InfoLinkStyle} display: inline-block; display: none@{MM|at}{MM|show@{selected|npc_str_negative}}; )[**@{selected|strength_mod}**](%{MM|InfoLinkStyle} display: inline-block; )) | [save](~@{selected|character_name}|strength_save%{MM|RollLinkStyle} display: inline-block; )[@{MM|at}{MM|at}{MM|show@{selected|strength_save_prof}|max} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block@{MM|at}{MM|at}{MM|show@{selected|strength_save_prof}};) ([+](%{MM|InfoLinkStyle} display: inline-block; display: none@{MM|at}{MM|show@{selected|npc_str_negative}}; )[**@{selected|strength_save_bonus}**](%{MM|InfoLinkStyle} display: inline-block; )) [ ](%{MM|StatLinkStyle} height: 0.0px; display: block;) [Athletics](~@{selected|character_name}|athletics%{MM|RollLinkStyle} display: inline-block; )[@{MM|at}{MM|at}{MM|show@{selected|athletics_prof}|max} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block@{MM|at}{MM|at}{MM|show@{selected|athletics_prof}};) [ ](%{MM|RedLine}; opacity: 30%;) [**Dex**](%{MM|StatLinkStyle} display: inline-block;) [**@{selected|dexterity}** ](%{MM|InfoLinkStyle} display: inline-block;) [check](~@{selected|character_name}|dexterity%{MM|RollLinkStyle} display: inline-block; ) ([+](%{MM|InfoLinkStyle} display: inline-block; display: none@{MM|at}{MM|show@{selected|npc_dex_negative}}; )[**@{selected|dexterity_mod}**](%{MM|InfoLinkStyle} display: inline-block; )) | [save](~@{selected|character_name}|dexterity_save%{MM|RollLinkStyle} display: inline-block; )[@{MM|at}{MM|at}{MM|show@{selected|dexterity_save_prof}|max} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block@{MM|at}{MM|at}{MM|show@{selected|dexterity_save_prof}};) ([+](%{MM|InfoLinkStyle} display: inline-block; display: none@{MM|at}{MM|show@{selected|npc_dex_negative}}; )[**@{selected|dexterity_save_bonus}**](%{MM|InfoLinkStyle} display: inline-block; )) [ ](%{MM|StatLinkStyle} height: 0.0px; display: block;) [Acrobatics](~@{selected|character_name}|acrobatics%{MM|RollLinkStyle} display: inline-block; )[@{MM|at}{MM|at}{MM|show@{selected|acrobatics_prof}|max} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block@{MM|at}{MM|at}{MM|show@{selected|acrobatics_prof}};) | [Sleight Of Hand](~@{selected|character_name}|sleight_of_hand%{MM|RollLinkStyle} display: inline-block; )[@{MM|at}{MM|at}{MM|show@{selected|sleight_of_hand_prof}|max} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block@{MM|at}{MM|at}{MM|show@{selected|sleight_of_hand_prof}};) | [Stealth](~@{selected|character_name}|stealth%{MM|RollLinkStyle} display: inline-block; )[@{MM|at}{MM|at}{MM|show@{selected|stealth_prof}|max} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block@{MM|at}{MM|at}{MM|show@{selected|stealth_prof}};) [ ](%{MM|RedLine}; opacity: 30%;) [**Con**](%{MM|StatLinkStyle} display: inline-block;) [**@{selected|constitution}** ](%{MM|InfoLinkStyle} display: inline-block;) [check](~@{selected|character_name}|constitution%{MM|RollLinkStyle} display: inline-block; ) ([+](%{MM|InfoLinkStyle} display: inline-block; display: none@{MM|at}{MM|show@{selected|npc_con_negative}}; )[**@{selected|constitution_mod}**](%{MM|InfoLinkStyle} display: inline-block; )) | [save](~@{selected|character_name}|constitution_save%{MM|RollLinkStyle} display: inline-block; )[@{MM|at}{MM|at}{MM|show@{selected|constitution_save_prof}|max} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block@{MM|at}{MM|at}{MM|show@{selected|constitution_save_prof}};) ([+](%{MM|InfoLinkStyle} display: inline-block; display: none@{MM|at}{MM|show@{selected|npc_con_negative}}; )[**@{selected|constitution_save_bonus}**](%{MM|InfoLinkStyle} display: inline-block; )) [ ](%{MM|RedLine}; opacity: 30%;) [**Int**](%{MM|StatLinkStyle} display: inline-block;) [**@{selected|intelligence}** ](%{MM|InfoLinkStyle} display: inline-block;) [check](~@{selected|character_name}|intelligence%{MM|RollLinkStyle} display: inline-block; ) ([+](%{MM|InfoLinkStyle} display: inline-block; display: none@{MM|at}{MM|show@{selected|npc_int_negative}}; )[**@{selected|intelligence_mod}**](%{MM|InfoLinkStyle} display: inline-block; )) | [save](~@{selected|character_name}|intelligence_save%{MM|RollLinkStyle} display: inline-block; )[@{MM|at}{MM|at}{MM|show@{selected|intelligence_save_prof}|max} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block@{MM|at}{MM|at}{MM|show@{selected|intelligence_save_prof}};) ([+](%{MM|InfoLinkStyle} display: inline-block; display: none@{MM|at}{MM|show@{selected|npc_int_negative}}; )[**@{selected|intelligence_save_bonus}**](%{MM|InfoLinkStyle} display: inline-block; )) [ ](%{MM|StatLinkStyle} height: 0.0px; display: block;) [Arcana](~@{selected|character_name}|arcana%{MM|RollLinkStyle} display: inline-block; )[@{MM|at}{MM|at}{MM|show@{selected|arcana_prof}|max} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block@{MM|at}{MM|at}{MM|show@{selected|arcana_prof}};) | [History](~@{selected|character_name}|history%{MM|RollLinkStyle} display: inline-block; )[@{MM|at}{MM|at}{MM|show@{selected|history_prof}|max} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block@{MM|at}{MM|at}{MM|show@{selected|history_prof}};) | [Investigation](~@{selected|character_name}|investigation%{MM|RollLinkStyle} display: inline-block; )[@{MM|at}{MM|at}{MM|show@{selected|investigation_prof}|max} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block@{MM|at}{MM|at}{MM|show@{selected|investigation_prof}};) [ ](%{MM|RedLine}; opacity: 30%;) [**Wis**](%{MM|StatLinkStyle} display: inline-block;) [**@{selected|wisdom}** ](%{MM|InfoLinkStyle} display: inline-block;) [check](~@{selected|character_name}|wisdom%{MM|RollLinkStyle} display: inline-block; ) ([+](%{MM|InfoLinkStyle} display: inline-block; display: none@{MM|at}{MM|show@{selected|npc_wis_negative}}; )[**@{selected|wisdom_mod}**](%{MM|InfoLinkStyle} display: inline-block; )) | [save](~@{selected|character_name}|wisdom_save%{MM|RollLinkStyle} display: inline-block; )[@{MM|at}{MM|at}{MM|show@{selected|wisdom_save_prof}|max} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block@{MM|at}{MM|at}{MM|show@{selected|wisdom_save_prof}};) ([+](%{MM|InfoLinkStyle} display: inline-block; display: none@{MM|at}{MM|show@{selected|npc_wis_negative}}; )[**@{selected|wisdom_save_bonus}**](%{MM|InfoLinkStyle} display: inline-block; )) [ ](%{MM|StatLinkStyle} height: 0.0px; display: block;) [Animal Handling](~@{selected|character_name}|animal_handling%{MM|RollLinkStyle} display: inline-block; )[@{MM|at}{MM|at}{MM|show@{selected|animal_handling_prof}|max} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block@{MM|at}{MM|at}{MM|show@{selected|animal_handling_prof}};) | [Insight](~@{selected|character_name}|insight%{MM|RollLinkStyle} display: inline-block; )[@{MM|at}{MM|at}{MM|show@{selected|insight_prof}|max} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block@{MM|at}{MM|at}{MM|show@{selected|insight_prof}};) | [Medicine](~@{selected|character_name}|medicine%{MM|RollLinkStyle} display: inline-block; )[@{MM|at}{MM|at}{MM|show@{selected|medicine_prof}|max} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block@{MM|at}{MM|at}{MM|show@{selected|medicine_prof}};) | [Nature](~@{selected|character_name}|nature%{MM|RollLinkStyle} display: inline-block; )[@{MM|at}{MM|at}{MM|show@{selected|nature_prof}|max} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block@{MM|at}{MM|at}{MM|show@{selected|nature_prof}};) | [Perception](~@{selected|character_name}|perception%{MM|RollLinkStyle} display: inline-block; )[@{MM|at}{MM|at}{MM|show@{selected|perception_prof}|max} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block@{MM|at}{MM|at}{MM|show@{selected|perception_prof}};) | [Religion](~@{selected|character_name}|religion%{MM|RollLinkStyle} display: inline-block; )[@{MM|at}{MM|at}{MM|show@{selected|religion_prof}|max} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block@{MM|at}{MM|at}{MM|show@{selected|religion_prof}};) | [Survival](~@{selected|character_name}|survival%{MM|RollLinkStyle} display: inline-block; )[@{MM|at}{MM|at}{MM|show@{selected|survival_prof}|max} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block@{MM|at}{MM|at}{MM|show@{selected|survival_prof}};) [ ](%{MM|RedLine}; opacity: 30%;) [**Cha**](%{MM|StatLinkStyle} display: inline-block;) [**@{selected|charisma}** ](%{MM|InfoLinkStyle} display: inline-block;) [check](~@{selected|character_name}|charisma%{MM|RollLinkStyle} display: inline-block; ) ([+](%{MM|InfoLinkStyle} display: inline-block; display: none@{MM|at}{MM|show@{selected|npc_cha_negative}}; )[**@{selected|charisma_mod}**](%{MM|InfoLinkStyle} display: inline-block; )) | [save](~@{selected|character_name}|charisma_save%{MM|RollLinkStyle} display: inline-block; )[@{MM|at}{MM|at}{MM|show@{selected|charisma_save_prof}|max} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block@{MM|at}{MM|at}{MM|show@{selected|charisma_save_prof}};) ([+](%{MM|InfoLinkStyle} display: inline-block; display: none@{MM|at}{MM|show@{selected|npc_cha_negative}}; )[**@{selected|charisma_save_bonus}**](%{MM|InfoLinkStyle} display: inline-block; )) [ ](%{MM|StatLinkStyle} height: 0.0px; display: block;) [Deception](~@{selected|character_name}|deception%{MM|RollLinkStyle} display: inline-block; )[@{MM|at}{MM|at}{MM|show@{selected|deception_prof}|max} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block@{MM|at}{MM|at}{MM|show@{selected|deception_prof}};) | [Intimidation](~@{selected|character_name}|intimidation%{MM|RollLinkStyle} display: inline-block; )[@{MM|at}{MM|at}{MM|show@{selected|intimidation_prof}|max} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block@{MM|at}{MM|at}{MM|show@{selected|intimidation_prof}};) | [Performance](~@{selected|character_name}|performance%{MM|RollLinkStyle} display: inline-block; )[@{MM|at}{MM|at}{MM|show@{selected|performance_prof}|max} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block@{MM|at}{MM|at}{MM|show@{selected|performance_prof}};) | [Persuasion](~@{selected|character_name}|persuasion%{MM|RollLinkStyle} display: inline-block; )[@{MM|at}{MM|at}{MM|show@{selected|persuasion_prof}|max} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block@{MM|at}{MM|at}{MM|show@{selected|persuasion_prof}};) Copy/Paste those into your MacroMule (make sure to do a 'Search and Replace' for 'MM' and change it to whatever your MacroMule name is if it's different). 
Awesome!  It worked for me!  I only have one hit die type for my multiclass PC but that's fine.  Not a big deal. Thanks again for doing this!
Hello again.  Love the Mule.  I have a question.  I was wondering how the mule works.  See, I have entered gifs into my character sheet attributes.  For example, intelligence_save_roll has a GIF and athletics_roll has a GIF.  But the gifs only seem to appear for athletics.  I don't think any of the GIFs for the saves appear but they do appear for the checks.  Is the code different for saves and checks?  The first two outcomes occur when utilizing the Mule, while the last two occur upon clicking on my character sheet. Thanks in advance.
Guy L. said: Hello again.  Love the Mule.  I have a question.  I was wondering how the mule works.  See, I have entered gifs into my character sheet attributes.  For example, intelligence_save_roll has a GIF and athletics_roll has a GIF.  But the gifs only seem to appear for athletics.  I don't think any of the GIFs for the saves appear but they do appear for the checks.  Is the code different for saves and checks?  The first two outcomes occur when utilizing the Mule, while the last two occur upon clicking on my character sheet. Thanks in advance. Which version of the MacroMule are you using?  I think one of my earlier versions accidentally had the button for the saves link to the check rolls, which is what it looks like is happening for you here.  You can see the first image lists INTELLIGENCE (0) instead of INTELLIGENCE SAVE (3) - clicking on the 'Intelligence Save' is instead rolling an 'Intelligence Check'.  The buttons are all intended to function exactly the same as clicking on buttons directly on the character sheet. Make sure you have the most current copy (version 3.5.1) - you should see have 'PCRollsList-Alphabetical' and 'PCRollsList-Sorted' abilities on the MacroMule character. If you look at the code for either of those and the section that has the Intelligence Check & Save, it should look like this: [**Int**](%{MM|StatLinkStyle} display: inline-block;) [**@{selected|intelligence}** ](%{MM|InfoLinkStyle} display: inline-block;) [check](~@{selected|character_name}|intelligence %{MM|RollLinkStyle} display: inline-block; ) ([+](%{MM|InfoLinkStyle} display: inline-block; display: none@{MM|at}{MM|show@{selected|npc_int_negative}}; )[**@{selected|intelligence_mod}**](%{MM|InfoLinkStyle} display: inline-block; )) | [save](~@{selected|character_name}|intelligence_save %{MM|RollLinkStyle} display: inline-block; )[@{MM|at}{MM|at}{MM|show@{selected|intelligence_save_prof}|max} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block@{MM|at}{MM|at}{MM|show@{selected|intelligence_save_prof}};) ([+](%{MM|InfoLinkStyle} display: inline-block; display: none@{MM|at}{MM|show@{selected|npc_int_negative}}; )[**@{selected|intelligence_save_bonus}**](%{MM|InfoLinkStyle} display: inline-block; )) [ ](" style="height: 0.0px; display: block;)  And the difference between the two buttons is this: [check](~@{selected|character_name}|intelligence [save](~@{selected|character_name}|intelligence_save It looks like your current code has this: [save](~@{selected|character_name}|intelligence
Oops!  Looks like this is human error.  My bad!  I did click on check instead of save.  I just tried clicking on the INT Save and it works perfectly with GIF and everything.  However, That brings up another question, where do I put the GIF to get it to appear for checks>?
Guy L. said: See, I have entered gifs into my character sheet attributes.  For example, intelligence_save_roll has a GIF and athletics_roll has a GIF.  Is the code different for saves and checks?  However, That brings up another question, where do I put the GIF to get it to appear for checks>? Unfortunately, the code is different for saves and checks. It sounds like the 'intelligence_save_roll' attribute had something like this that you modified to add the GIF? I'm guessing in the {{mod=}} field? @{wtype}&{template:simple} {{rname=^{intelligence-save-u}}} {{mod=@{intelligence_save_bonus}}} {{r1=[[@{d20}+@{intelligence_save_bonus}@{pbd_safe}]]}} @{advantagetoggle}+@{intelligence_save_bonus}@{pbd_safe}]]}} {{global=@{global_save_mod}}} @{charname_output} Unfortunately there is not a corresponding 'intelligence_check_roll' attribute.  Checks are created dynamically by the sheetworkers.   Here's an example of the html for the button to roll an Intelligence check: <button type="roll" name="roll_intelligence" value="@{wtype}&{template:simple} {{rname=^{intelligence-u}}} {{mod=@{intelligence_mod}@{jack_bonus}}} {{r1=[[@{d20}+@{intelligence_mod}@{jack_attr}[INT]]]}} @{rtype}+@{intelligence_mod}@{jack_attr}[INT]]]}} @{charname_output}" data-i18n="intelligence-u" class="btn ui-draggable">INTELLIGENCE</button> Compare that to the html for an Intelligence save: <button type="roll" name="roll_intelligence_save" value="@{intelligence_save_roll}" data-i18n="intelligence" class="btn ui-draggable">Intelligence</button> The 'value' portion of the button pulls from the 'intelligence_save_roll' for saves, but it is statically input for checks.
1716471565

Edited 1716471622
Is it okay if I distribute a Korean translation of this macro? I will include a link to the original here.
루시엔 said: Is it okay if I distribute a Korean translation of this macro? I will include a link to the original here. Absolutely!  I'm happy to hear this tool has people using it internationally!  Just an FYI that it does get updates every so often, so hopefully it's not too difficult for you to do some kind of search & replace. :) 
1716491631

Edited 1716699047
New supplementary feature that I'm working on - an EncounterMule for GMs to get a quick chat menu listing out up to six NPCs for an encounter.&nbsp; Here's a couple mockups for what the 'Cragmaw Cave' and 'Redbrand Hideout' from Lost Mine of Phandelver look like. Cragmaw Cave: &nbsp; &nbsp; Redbrand Hideout: NPCs can be grouped together in sets of up to three, or all six displayed together. Planned features &amp; known limitations: This works in conjunction with the Statblock MacroMule character, and&nbsp; doesn't function on its own . Currently it's set up to list up to 6 NPCs at a time, but that could be expanded easily. The 'headings' for each section are all clickable and link to the Statblock MacroMule buttons.&nbsp;&nbsp; (Such as 'A:' for attacks will link to the&nbsp; 'Actions' list; 'T:' will link to the 'Traits' list; etc. ).&nbsp; These buttons will require the desired character token to be selected.&nbsp; Each attack, trait, etc. is clickable to be displayed in chat, and will always have a 'whisper query' to either whisper it to yourself or to your players.&nbsp; This will override any other whisper settings (such as from the Statblock MacroMule or from the character sheet itself). Links to the respective Spells menus for any spellcasting NPC with Spell Save DC and Spell Attack modifier shown. There's a footer that links to the Statblock MacroMule 'Stats', 'Rolls' and 'Abilities' buttons for NPCs. The EncounterMule does not currently work for PC characters. &nbsp; I'm going to look at adding that functionality after I'm done with this initial version.&nbsp; As much as I would like it to, there's no way to display the current hit points for tokens on the page without somehow hardcoding a bunch of @{target queries, so hit points are not included.&nbsp;&nbsp; Playtesting / Feedback If you're able/willing to provide any feedback and test it out for any bugs, that would be appreciated!&nbsp; There's a Feedback post in the ' MacroMuleTest' game forum. Game link with instructions in the game forum:&nbsp; <a href="https://app.roll20.net/join/16809808/BcN3Jg" rel="nofollow">https://app.roll20.net/join/16809808/BcN3Jg</a> .&nbsp;&nbsp; For Plus and Free users with open export slots,&nbsp; I've added the 'EM' character to the 'MacroMuleTest' game there and you should be able to import it into your&nbsp; Characters page &nbsp;and then export it into another one of your games. Or the Attributes and Abilities can be cut and pasted into your game if you don't have any open export slots. For Pro users I have a very rough Mod script to create the 'EM' character. (I just crudely copied and pasted from the main CreateMacroMule script - I'm planning on rolling it all together into a single script.)&nbsp; <a href="https://raw.githubusercontent.com/kinchj/Roll20API/main/D%26D%205E%20Encounter%20Mule" rel="nofollow">https://raw.githubusercontent.com/kinchj/Roll20API/main/D%26D%205E%20Encounter%20Mule</a>
This is very cool, Jarren.&nbsp; I'll try to get some time to play with it.&nbsp; Thank you for all the amazing work you've done on this!
This is so cool.&nbsp; You are amazing!
Jarren said: Playtesting / Feedback ... Game link with instructions in the game forum:&nbsp; <a href="https://app.roll20.net/join/16809808/BcN3Jg" rel="nofollow">https://app.roll20.net/join/16809808/BcN3Jg</a>) .&nbsp;&nbsp; FYI, that ")" in the link makes it not work.
Very cool! Can't wait to get into it! =D
There is an error in RollsList-Sorted. Nature and religion are Int, not Wis. :)
1717218805

Edited 1717219338
루시엔 said: There is an error in RollsList-Sorted. Nature and religion are Int, not Wis. Whoops! Yep. I've updated the Mod script to 3.5.2 . If you want to quickly manually copy-and-paste to update those two Abilities: PCRollsList-Sorted [**Init.**](%{MM|StatLinkStyle} display: inline-block; ) [roll](~@{selected|character_name}|initiative%{MM|RollLinkStyle} display: inline-block; ) ([+](%{MM|InfoLinkStyle} display: inline-block; display: none@{MM|at}{MM|show@{selected|npc_dex_negative}}; )[**@{selected|initiative_bonus}**](%{MM|InfoLinkStyle} display: inline-block; )) | [**Hit Die**](%{MM|StatLinkStyle} display: inline-block; ) [roll](~@{selected|character_name}|hit_dice%{MM|RollLinkStyle} display: inline-block; ) ([**d@{selected|hitdietype}**](%{MM|InfoLinkStyle} display: inline-block; ))[ ](" style="height: 0.0px; display: block;) [**Death**](%{MM|StatLinkStyle} display: inline-block; ) [save](~@{selected|character_name}|death_save%{MM|RollLinkStyle} display: inline-block; ) ([+](%{MM|InfoLinkStyle} display: inline-block; )[**@{selected|death_save_bonus}**](%{MM|InfoLinkStyle} display: inline-block; )) &amp;nbsp; [](%{MM|StatLinkStyle} font-size: 6px; display: inline-block@{MM|at}{MM|show@{selected|deathsave_succ1}};) [](%{MM|StatLinkStyle} font-size: 6px; display: inline-block@{MM|at}{MM|show@{selected|deathsave_succ2}};) [](%{MM|StatLinkStyle} font-size: 6px; display: inline-block@{MM|at}{MM|show@{selected|deathsave_succ3}};) [❌](%{MM|StatLinkStyle} font-size: 6px; display: inline-block@{MM|at}{MM|show@{selected|deathsave_fail1}};) [❌](%{MM|StatLinkStyle} font-size: 6px; display: inline-block@{MM|at}{MM|show@{selected|deathsave_fail2}};) [❌](%{MM|StatLinkStyle} font-size: 6px; display: inline-block@{MM|at}{MM|show@{selected|deathsave_fail3}};) [ ](%{MM|RedLine};)[**Str**](%{MM|StatLinkStyle} display: inline-block;) [**@{selected|strength}** ](%{MM|InfoLinkStyle} display: inline-block;) [check](~@{selected|character_name}|strength%{MM|RollLinkStyle} display: inline-block; ) ([+](%{MM|InfoLinkStyle} display: inline-block; display: none@{MM|at}{MM|show@{selected|npc_str_negative}}; )[**@{selected|strength_mod}**](%{MM|InfoLinkStyle} display: inline-block; )) | [save](~@{selected|character_name}|strength_save%{MM|RollLinkStyle} display: inline-block; )[@{MM|at}{MM|at}{MM|show@{selected|strength_save_prof}|max} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block@{MM|at}{MM|at}{MM|show@{selected|strength_save_prof}};) ([+](%{MM|InfoLinkStyle} display: inline-block; display: none@{MM|at}{MM|show@{selected|npc_str_negative}}; )[**@{selected|strength_save_bonus}**](%{MM|InfoLinkStyle} display: inline-block; )) [ ](%{MM|StatLinkStyle} height: 0.0px; display: block;) [Athletics](~@{selected|character_name}|athletics%{MM|RollLinkStyle} display: inline-block; )[@{MM|at}{MM|at}{MM|show@{selected|athletics_prof}|max} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block@{MM|at}{MM|at}{MM|show@{selected|athletics_prof}};) [ ](%{MM|RedLine}; opacity: 30%;) [**Dex**](%{MM|StatLinkStyle} display: inline-block;) [**@{selected|dexterity}** ](%{MM|InfoLinkStyle} display: inline-block;) [check](~@{selected|character_name}|dexterity%{MM|RollLinkStyle} display: inline-block; ) ([+](%{MM|InfoLinkStyle} display: inline-block; display: none@{MM|at}{MM|show@{selected|npc_dex_negative}}; )[**@{selected|dexterity_mod}**](%{MM|InfoLinkStyle} display: inline-block; )) | [save](~@{selected|character_name}|dexterity_save%{MM|RollLinkStyle} display: inline-block; )[@{MM|at}{MM|at}{MM|show@{selected|dexterity_save_prof}|max} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block@{MM|at}{MM|at}{MM|show@{selected|dexterity_save_prof}};) ([+](%{MM|InfoLinkStyle} display: inline-block; display: none@{MM|at}{MM|show@{selected|npc_dex_negative}}; )[**@{selected|dexterity_save_bonus}**](%{MM|InfoLinkStyle} display: inline-block; )) [ ](%{MM|StatLinkStyle} height: 0.0px; display: block;) [Acrobatics](~@{selected|character_name}|acrobatics%{MM|RollLinkStyle} display: inline-block; )[@{MM|at}{MM|at}{MM|show@{selected|acrobatics_prof}|max} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block@{MM|at}{MM|at}{MM|show@{selected|acrobatics_prof}};) | [Sleight Of Hand](~@{selected|character_name}|sleight_of_hand%{MM|RollLinkStyle} display: inline-block; )[@{MM|at}{MM|at}{MM|show@{selected|sleight_of_hand_prof}|max} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block@{MM|at}{MM|at}{MM|show@{selected|sleight_of_hand_prof}};) | [Stealth](~@{selected|character_name}|stealth%{MM|RollLinkStyle} display: inline-block; )[@{MM|at}{MM|at}{MM|show@{selected|stealth_prof}|max} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block@{MM|at}{MM|at}{MM|show@{selected|stealth_prof}};) [ ](%{MM|RedLine}; opacity: 30%;) [**Con**](%{MM|StatLinkStyle} display: inline-block;) [**@{selected|constitution}** ](%{MM|InfoLinkStyle} display: inline-block;) [check](~@{selected|character_name}|constitution%{MM|RollLinkStyle} display: inline-block; ) ([+](%{MM|InfoLinkStyle} display: inline-block; display: none@{MM|at}{MM|show@{selected|npc_con_negative}}; )[**@{selected|constitution_mod}**](%{MM|InfoLinkStyle} display: inline-block; )) | [save](~@{selected|character_name}|constitution_save%{MM|RollLinkStyle} display: inline-block; )[@{MM|at}{MM|at}{MM|show@{selected|constitution_save_prof}|max} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block@{MM|at}{MM|at}{MM|show@{selected|constitution_save_prof}};) ([+](%{MM|InfoLinkStyle} display: inline-block; display: none@{MM|at}{MM|show@{selected|npc_con_negative}}; )[**@{selected|constitution_save_bonus}**](%{MM|InfoLinkStyle} display: inline-block; )) [ ](%{MM|RedLine}; opacity: 30%;) [**Int**](%{MM|StatLinkStyle} display: inline-block;) [**@{selected|intelligence}** ](%{MM|InfoLinkStyle} display: inline-block;) [check](~@{selected|character_name}|intelligence%{MM|RollLinkStyle} display: inline-block; ) ([+](%{MM|InfoLinkStyle} display: inline-block; display: none@{MM|at}{MM|show@{selected|npc_int_negative}}; )[**@{selected|intelligence_mod}**](%{MM|InfoLinkStyle} display: inline-block; )) | [save](~@{selected|character_name}|intelligence_save%{MM|RollLinkStyle} display: inline-block; )[@{MM|at}{MM|at}{MM|show@{selected|intelligence_save_prof}|max} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block@{MM|at}{MM|at}{MM|show@{selected|intelligence_save_prof}};) ([+](%{MM|InfoLinkStyle} display: inline-block; display: none@{MM|at}{MM|show@{selected|npc_int_negative}}; )[**@{selected|intelligence_save_bonus}**](%{MM|InfoLinkStyle} display: inline-block; )) [ ](%{MM|StatLinkStyle} height: 0.0px; display: block;) [Arcana](~@{selected|character_name}|arcana%{MM|RollLinkStyle} display: inline-block; )[@{MM|at}{MM|at}{MM|show@{selected|arcana_prof}|max} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block@{MM|at}{MM|at}{MM|show@{selected|arcana_prof}};) | [History](~@{selected|character_name}|history%{MM|RollLinkStyle} display: inline-block; )[@{MM|at}{MM|at}{MM|show@{selected|history_prof}|max} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block@{MM|at}{MM|at}{MM|show@{selected|history_prof}};) | [Investigation](~@{selected|character_name}|investigation%{MM|RollLinkStyle} display: inline-block; )[@{MM|at}{MM|at}{MM|show@{selected|investigation_prof}|max} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block@{MM|at}{MM|at}{MM|show@{selected|investigation_prof}};) | [Nature](~@{selected|character_name}|nature%{MM|RollLinkStyle} display: inline-block; )[@{MM|at}{MM|at}{MM|show@{selected|nature_prof}|max} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block@{MM|at}{MM|at}{MM|show@{selected|nature_prof}};) | [Religion](~@{selected|character_name}|religion%{MM|RollLinkStyle} display: inline-block; )[@{MM|at}{MM|at}{MM|show@{selected|religion_prof}|max} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block@{MM|at}{MM|at}{MM|show@{selected|religion_prof}};) [ ](%{MM|RedLine}; opacity: 30%;) [**Wis**](%{MM|StatLinkStyle} display: inline-block;) [**@{selected|wisdom}** ](%{MM|InfoLinkStyle} display: inline-block;) [check](~@{selected|character_name}|wisdom%{MM|RollLinkStyle} display: inline-block; ) ([+](%{MM|InfoLinkStyle} display: inline-block; display: none@{MM|at}{MM|show@{selected|npc_wis_negative}}; )[**@{selected|wisdom_mod}**](%{MM|InfoLinkStyle} display: inline-block; )) | [save](~@{selected|character_name}|wisdom_save%{MM|RollLinkStyle} display: inline-block; )[@{MM|at}{MM|at}{MM|show@{selected|wisdom_save_prof}|max} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block@{MM|at}{MM|at}{MM|show@{selected|wisdom_save_prof}};) ([+](%{MM|InfoLinkStyle} display: inline-block; display: none@{MM|at}{MM|show@{selected|npc_wis_negative}}; )[**@{selected|wisdom_save_bonus}**](%{MM|InfoLinkStyle} display: inline-block; )) [ ](%{MM|StatLinkStyle} height: 0.0px; display: block;) [Animal Handling](~@{selected|character_name}|animal_handling%{MM|RollLinkStyle} display: inline-block; )[@{MM|at}{MM|at}{MM|show@{selected|animal_handling_prof}|max} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block@{MM|at}{MM|at}{MM|show@{selected|animal_handling_prof}};) | [Insight](~@{selected|character_name}|insight%{MM|RollLinkStyle} display: inline-block; )[@{MM|at}{MM|at}{MM|show@{selected|insight_prof}|max} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block@{MM|at}{MM|at}{MM|show@{selected|insight_prof}};) | [Medicine](~@{selected|character_name}|medicine%{MM|RollLinkStyle} display: inline-block; )[@{MM|at}{MM|at}{MM|show@{selected|medicine_prof}|max} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block@{MM|at}{MM|at}{MM|show@{selected|medicine_prof}};) | [Perception](~@{selected|character_name}|perception%{MM|RollLinkStyle} display: inline-block; )[@{MM|at}{MM|at}{MM|show@{selected|perception_prof}|max} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block@{MM|at}{MM|at}{MM|show@{selected|perception_prof}};) | [Survival](~@{selected|character_name}|survival%{MM|RollLinkStyle} display: inline-block; )[@{MM|at}{MM|at}{MM|show@{selected|survival_prof}|max} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block@{MM|at}{MM|at}{MM|show@{selected|survival_prof}};) [ ](%{MM|RedLine}; opacity: 30%;) [**Cha**](%{MM|StatLinkStyle} display: inline-block;) [**@{selected|charisma}** ](%{MM|InfoLinkStyle} display: inline-block;) [check](~@{selected|character_name}|charisma%{MM|RollLinkStyle} display: inline-block; ) ([+](%{MM|InfoLinkStyle} display: inline-block; display: none@{MM|at}{MM|show@{selected|npc_cha_negative}}; )[**@{selected|charisma_mod}**](%{MM|InfoLinkStyle} display: inline-block; )) | [save](~@{selected|character_name}|charisma_save%{MM|RollLinkStyle} display: inline-block; )[@{MM|at}{MM|at}{MM|show@{selected|charisma_save_prof}|max} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block@{MM|at}{MM|at}{MM|show@{selected|charisma_save_prof}};) ([+](%{MM|InfoLinkStyle} display: inline-block; display: none@{MM|at}{MM|show@{selected|npc_cha_negative}}; )[**@{selected|charisma_save_bonus}**](%{MM|InfoLinkStyle} display: inline-block; )) [ ](%{MM|StatLinkStyle} height: 0.0px; display: block;) [Deception](~@{selected|character_name}|deception%{MM|RollLinkStyle} display: inline-block; )[@{MM|at}{MM|at}{MM|show@{selected|deception_prof}|max} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block@{MM|at}{MM|at}{MM|show@{selected|deception_prof}};) | [Intimidation](~@{selected|character_name}|intimidation%{MM|RollLinkStyle} display: inline-block; )[@{MM|at}{MM|at}{MM|show@{selected|intimidation_prof}|max} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block@{MM|at}{MM|at}{MM|show@{selected|intimidation_prof}};) | [Performance](~@{selected|character_name}|performance%{MM|RollLinkStyle} display: inline-block; )[@{MM|at}{MM|at}{MM|show@{selected|performance_prof}|max} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block@{MM|at}{MM|at}{MM|show@{selected|performance_prof}};) | [Persuasion](~@{selected|character_name}|persuasion%{MM|RollLinkStyle} display: inline-block; )[@{MM|at}{MM|at}{MM|show@{selected|persuasion_prof}|max} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block@{MM|at}{MM|at}{MM|show@{selected|persuasion_prof}};) NPCRollsList-Sorted [**Init.**](%{MM|StatLinkStyle} display: inline-block; ) [roll](~@{selected|character_name}|npc_init%{MM|RollLinkStyle} display: inline-block; ) ([+](%{MM|InfoLinkStyle} display: inline-block; display: none@{MM|at}{MM|show@{selected|npc_dex_negative}}; )[**@{selected|initiative_bonus}**](%{MM|InfoLinkStyle} display: inline-block; )) | [**Death**](%{MM|StatLinkStyle} display: inline-block; ) [save](~@{selected|character_name}|death_save%{MM|RollLinkStyle} display: inline-block; ) ([+](%{MM|InfoLinkStyle} display: inline-block; )[**@{selected|death_save_bonus}**](%{MM|InfoLinkStyle} display: inline-block; )) &amp;nbsp; [ ](%{MM|RedLine};)[**Str**](%{MM|StatLinkStyle} display: inline-block;) [**@{selected|strength_base}** ](%{MM|InfoLinkStyle} display: inline-block;) [check](~@{selected|character_name}|npc_str%{MM|RollLinkStyle} display: inline-block; ) ([+](%{MM|InfoLinkStyle} display: inline-block; display: none@{MM|at}{MM|show@{selected|npc_str_negative}}; )[**@{selected|strength_mod}**](%{MM|InfoLinkStyle} display: inline-block; )) | [save](~@{selected|character_name}|npc_str_save%{MM|RollLinkStyle} display: inline-block; )[@{MM|ProficiencyButton} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block; display: @{selected|npc_str_save_base}none;) ([+](%{MM|InfoLinkStyle} display: @{selected|npc_str_save_base}inline-block; display: @{MM|at}{MM|show@{selected|npc_str_negative}}none;)[**@{selected|npc_str_save_base}**](%{MM|InfoLinkStyle} display: inline-block; )[**@{selected|strength_save_bonus} **](%{MM|InfoLinkStyle} display: @{selected|npc_str_save_base}inline-block; ))[ ](%{MM|StatLinkStyle} height: 0.0px; display: block;) [Athletics](~@{selected|character_name}|npc_athletics%{MM|RollLinkStyle} display: inline-block; )[@{MM|ProficiencyButton} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block; display: @{selected|npc_athletics_base}none;) [ ](%{MM|RedLine}; opacity: 30%;) [**Dex**](%{MM|StatLinkStyle} display: inline-block;) [**@{selected|dexterity_base}** ](%{MM|InfoLinkStyle} display: inline-block;) [check](~@{selected|character_name}|npc_dex%{MM|RollLinkStyle} display: inline-block; ) ([+](%{MM|InfoLinkStyle} display: inline-block; display: none@{MM|at}{MM|show@{selected|npc_dex_negative}}; )[**@{selected|dexterity_mod}**](%{MM|InfoLinkStyle} display: inline-block; )) | [save](~@{selected|character_name}|npc_dex_save%{MM|RollLinkStyle} display: inline-block; )[@{MM|ProficiencyButton} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block; display: @{selected|npc_dex_save_base}none;) ([+](%{MM|InfoLinkStyle} display: @{selected|npc_dex_save_base}inline-block; display: @{MM|at}{MM|show@{selected|npc_dex_negative}}none;)[**@{selected|npc_dex_save_base}**](%{MM|InfoLinkStyle} display: inline-block; )[**@{selected|dexterity_save_bonus} **](%{MM|InfoLinkStyle} display: @{selected|npc_dex_save_base}inline-block; ))[ ](%{MM|StatLinkStyle} height: 0.0px; display: block;) [Acrobatics](~@{selected|character_name}|npc_acrobatics%{MM|RollLinkStyle} display: inline-block; )[@{MM|ProficiencyButton} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block; display: @{selected|npc_acrobatics_base}none;) | [Sleight Of Hand](~@{selected|character_name}|npc_sleight_of_hand%{MM|RollLinkStyle} display: inline-block; )[@{MM|ProficiencyButton} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block; display: @{selected|npc_sleight_of_hand_base}none;) | [Stealth](~@{selected|character_name}|npc_stealth%{MM|RollLinkStyle} display: inline-block; )[@{MM|ProficiencyButton} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block; display: @{selected|npc_stealth_base}none;) [ ](%{MM|RedLine}; opacity: 30%;) [**Con**](%{MM|StatLinkStyle} display: inline-block;) [**@{selected|constitution_base}** ](%{MM|InfoLinkStyle} display: inline-block;) [check](~@{selected|character_name}|npc_con%{MM|RollLinkStyle} display: inline-block; ) ([+](%{MM|InfoLinkStyle} display: inline-block; display: none@{MM|at}{MM|show@{selected|npc_con_negative}}; )[**@{selected|constitution_mod}**](%{MM|InfoLinkStyle} display: inline-block; )) | [save](~@{selected|character_name}|npc_con_save%{MM|RollLinkStyle} display: inline-block; )[@{MM|ProficiencyButton} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block; display: @{selected|npc_con_save_base}none;) ([+](%{MM|InfoLinkStyle} display: @{selected|npc_con_save_base}inline-block; display: @{MM|at}{MM|show@{selected|npc_con_negative}}none;)[**@{selected|npc_con_save_base}**](%{MM|InfoLinkStyle} display: inline-block; )[**@{selected|constitution_save_bonus} **](%{MM|InfoLinkStyle} display: @{selected|npc_con_save_base}inline-block; ))[ ](%{MM|RedLine}; opacity: 30%;) [**Int**](%{MM|StatLinkStyle} display: inline-block;) [**@{selected|intelligence_base}** ](%{MM|InfoLinkStyle} display: inline-block;) [check](~@{selected|character_name}|npc_int%{MM|RollLinkStyle} display: inline-block; ) ([+](%{MM|InfoLinkStyle} display: inline-block; display: none@{MM|at}{MM|show@{selected|npc_int_negative}}; )[**@{selected|intelligence_mod}**](%{MM|InfoLinkStyle} display: inline-block; )) | [save](~@{selected|character_name}|npc_int_save%{MM|RollLinkStyle} display: inline-block; )[@{MM|ProficiencyButton} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block; display: @{selected|npc_int_save_base}none;) ([+](%{MM|InfoLinkStyle} display: @{selected|npc_int_save_base}inline-block; display: @{MM|at}{MM|show@{selected|npc_int_negative}}none;)[**@{selected|npc_int_save_base}**](%{MM|InfoLinkStyle} display: inline-block; )[**@{selected|intelligence_save_bonus} **](%{MM|InfoLinkStyle} display: @{selected|npc_int_save_base}inline-block; ))[ ](%{MM|StatLinkStyle} height: 0.0px; display: block;) [Arcana](~@{selected|character_name}|npc_arcana%{MM|RollLinkStyle} display: inline-block; )[@{MM|ProficiencyButton} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block; display: @{selected|npc_arcana_base}none;) | [History](~@{selected|character_name}|npc_history%{MM|RollLinkStyle} display: inline-block; )[@{MM|ProficiencyButton} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block; display: @{selected|npc_history_base}none;) | [Investigation](~@{selected|character_name}|npc_investigation%{MM|RollLinkStyle} display: inline-block; )[@{MM|ProficiencyButton} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block; display: @{selected|npc_investigation_base}none;) | [Nature](~@{selected|character_name}|npc_nature%{MM|RollLinkStyle} display: inline-block; )[@{MM|ProficiencyButton} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block; display: @{selected|npc_nature_base}none;) | [Religion](~@{selected|character_name}|npc_religion%{MM|RollLinkStyle} display: inline-block; )[@{MM|ProficiencyButton} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block; display: @{selected|npc_religion_base}none;) [ ](%{MM|RedLine}; opacity: 30%;) [**Wis**](%{MM|StatLinkStyle} display: inline-block;) [**@{selected|wisdom_base}** ](%{MM|InfoLinkStyle} display: inline-block;) [check](~@{selected|character_name}|npc_wis%{MM|RollLinkStyle} display: inline-block; ) ([+](%{MM|InfoLinkStyle} display: inline-block; display: none@{MM|at}{MM|show@{selected|npc_wis_negative}}; )[**@{selected|wisdom_mod}**](%{MM|InfoLinkStyle} display: inline-block; )) | [save](~@{selected|character_name}|npc_wis_save%{MM|RollLinkStyle} display: inline-block; )[@{MM|ProficiencyButton} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block; display: @{selected|npc_wis_save_base}none;) ([+](%{MM|InfoLinkStyle} display: @{selected|npc_wis_save_base}inline-block; display: @{MM|at}{MM|show@{selected|npc_wis_negative}}none;)[**@{selected|npc_wis_save_base}**](%{MM|InfoLinkStyle} display: inline-block; )[**@{selected|wisdom_save_bonus} **](%{MM|InfoLinkStyle} display: @{selected|npc_wis_save_base}inline-block; ))[ ](%{MM|StatLinkStyle} height: 0.0px; display: block;) [Animal Handling](~@{selected|character_name}|npc_animal_handling%{MM|RollLinkStyle} display: inline-block; )[@{MM|ProficiencyButton} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block; display: @{selected|npc_animal_handling_base}none;) | [Insight](~@{selected|character_name}|npc_insight%{MM|RollLinkStyle} display: inline-block; )[@{MM|ProficiencyButton} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block; display: @{selected|npc_insight_base}none;) | [Medicine](~@{selected|character_name}|npc_medicine%{MM|RollLinkStyle} display: inline-block; )[@{MM|ProficiencyButton} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block; display: @{selected|npc_medicine_base}none;) | [Perception](~@{selected|character_name}|npc_perception%{MM|RollLinkStyle} display: inline-block; )[@{MM|ProficiencyButton} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block; display: @{selected|npc_perception_base}none;) | [Survival](~@{selected|character_name}|npc_survival%{MM|RollLinkStyle} display: inline-block; )[@{MM|ProficiencyButton} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block; display: @{selected|npc_survival_base}none;) [ ](%{MM|RedLine}; opacity: 30%;) [**Cha**](%{MM|StatLinkStyle} display: inline-block;) [**@{selected|charisma_base}** ](%{MM|InfoLinkStyle} display: inline-block;) [check](~@{selected|character_name}|npc_cha%{MM|RollLinkStyle} display: inline-block; ) ([+](%{MM|InfoLinkStyle} display: inline-block; display: none@{MM|at}{MM|show@{selected|npc_cha_negative}}; )[**@{selected|charisma_mod}**](%{MM|InfoLinkStyle} display: inline-block; )) | [save](~@{selected|character_name}|npc_cha_save%{MM|RollLinkStyle} display: inline-block; )[@{MM|ProficiencyButton} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block; display: @{selected|npc_cha_save_base}none;) ([+](%{MM|InfoLinkStyle} display: @{selected|npc_cha_save_base}inline-block; display: @{MM|at}{MM|show@{selected|npc_cha_negative}}none;)[**@{selected|npc_cha_save_base}**](%{MM|InfoLinkStyle} display: inline-block; )[**@{selected|charisma_save_bonus} **](%{MM|InfoLinkStyle} display: @{selected|npc_cha_save_base}inline-block; ))[ ](%{MM|StatLinkStyle} height: 0.0px; display: block;) [Deception](~@{selected|character_name}|npc_deception%{MM|RollLinkStyle} display: inline-block; )[@{MM|ProficiencyButton} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block; display: @{selected|npc_deception_base}none;) | [Intimidation](~@{selected|character_name}|npc_intimidation%{MM|RollLinkStyle} display: inline-block; )[@{MM|ProficiencyButton} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block; display: @{selected|npc_intimidation_base}none;) | [Performance](~@{selected|character_name}|npc_performance%{MM|RollLinkStyle} display: inline-block; )[@{MM|ProficiencyButton} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block; display: @{selected|npc_performance_base}none;) | [Persuasion](~@{selected|character_name}|npc_persuasion%{MM|RollLinkStyle} display: inline-block; )[@{MM|ProficiencyButton} ](%{MM|InfoLinkStyle} font-size: 10px; display: inline-block; display: @{selected|npc_persuasion_base}none;)
Hi Jarren, Mike, the Admin &nbsp;at Trident Games, introduced me to your macros. I am a newbie and using your update in a campaign I am running. My players are going to love what your macros are going to do for the game . I really appreciate your creativity, knowledge of RPGs, and scripting skills to enhance the Roll20 gaming experience and make DM tools that make DMing a lot more fun.
Hey Jarren,&nbsp; I wanted to make a suggestion.&nbsp; Is there anyway to make individual buttons for each Spell Level?&nbsp; Pressing the Spell button to get all my spells slows down Roll20 a bit and sometimes the list is too long. etc. etc.&nbsp; Anyways just a suggestion.&nbsp; Love the Mule!!!
Guy L. said: Hey Jarren,&nbsp; I wanted to make a suggestion.&nbsp; Is there anyway to make individual buttons for each Spell Level?&nbsp; Pressing the Spell button to get all my spells slows down Roll20 a bit and sometimes the list is too long. etc. etc.&nbsp; Anyways just a suggestion.&nbsp; Love the Mule!!! Yep, that's already included: <a href="https://app.roll20.net/forum/permalink/11344856/" rel="nofollow">https://app.roll20.net/forum/permalink/11344856/</a> Create Collection Macros or Individual Macros on character sheets If you had to copy everything manually, then you're almost done!&nbsp; The names of these can all be changed &nbsp;(but not the content of the macro, other than the name - changing it from 'MM' to whatever you want your MacroMule to be called). &nbsp; Individual Macros Or you could add macros on individual characters to reflect their specific abilities: Cantrips %{MM|Cantrips} &amp;{noerror} Lvl1 %{MM|Lvl1} &amp;{noerror} Lvl2 %{MM|Lvl2} &amp;{noerror} Lvl3 %{MM|Lvl3} &amp;{noerror} Lvl4 %{MM|Lvl4} &amp;{noerror} Lvl5 %{MM|Lvl5} &amp;{noerror} Lvl6 %{MM|Lvl6} &amp;{noerror} Lvl7 %{MM|Lvl7} &amp;{noerror} Lvl8 %{MM|Lvl8} &amp;{noerror} Lvl9 %{MM|Lvl9} &amp;{noerror} I didn't include it by default, as many games may not need/want all of the extra Collections Macros and Token Actions, which will clutter up the Collections Macro list and Token Action bar really quickly. My suggestion is to create those as Abilities on the specific characters that have a lot of spells or who often need to reference specific spell level lists.&nbsp;&nbsp; Option 2: Another option (and what I typically use), is to use the 'Menu' button when I want to quickly reference a Spellcasters specific level spells, as that menu doesn't take up a lot of space in chat. Option 3: A third option is to create your own custom menus on the MM character.&nbsp; If you take the 'Lvl1' Ability: Lvl1 %{MM|SpellsTemplate}%{MM|Lvl1List}%{MM|StatsFooter}}} {{name=Level 1 Spells}} &amp;{noerror} You could create a copy that would look like this: Lvl1-3 %{MM|SpellsTemplate}%{MM|Lvl1List}%{MM|Lvl2List}%{MM|Lvl3List}%{MM|StatsFooter}}} {{name=Level 1 - 3 Spells}} &amp;{noerror} That will show spells from Level 1 - 3. Then you'd create a Collections Macro or an Ability on the specific character that you want to have that button on that looks like this: Lvl1-3 %{MM|Lvl1-3} &amp;{noerror} Option 4: If you know that you won't have a lot of higher level spells, you can speed the menus up by removing parts of the spell lists for higher numbered spells. E.g. on the 'Lvl9List' if you find all of the '[@{MM|InfoButton} ]' that start each spell reference, you can likely delete everything after the 3rd or 5th spell and not affect anything for the majority of your spellcasters. Just make sure to keep the last section of code that looks like this: [ &amp;nbsp; More Level 9 Spells Not Shown&amp;nbsp;](%{MM|SpellStyle} color: red; cursor: text; font-weight: bold; display:inline-block@{selected|repeating_spell-9_$15_spellname|max};)&nbsp; And change the $15 to be $3 or $5 instead (or whatever the next spell reference number would be) in case you do end up with a spellcaster that has more spells, so you'll still get a message that there are additional spells not being shown .&nbsp; I adjust my spells lists to only include 10 spells for Cantrips and Levels 1 - 3, 5 spells for Levels 4 - 5, and 3 spells for Levels 6 - 9. There is a noticeable improvement in speed. Also, FYI the next update is going to include a toggle to completely hide unprepared spells, which may help with the spell lists taking up too much space in chat. (It won't help with speeding up the display unfortunately!)&nbsp; That's a feature I've had a few requests for and have seen posts occasionally looking for some way to do that.&nbsp; There will be a separate toggle for PCs versus NPCs, so you'll be able to hide PC unprepared spells, but still show NPC unprepared spells. I'm still looking at places in the code (especially the spell lists) where things can be optimized.&nbsp; There is just so much data in the spell lists that it sometimes takes several seconds for the menu to populate!&nbsp;
Awesome, this is what I was looking for.&nbsp; The "hide unprepared spells" option would be great!&nbsp; Good looking out as always!
Hey Jarren. Is there any way to avoid the truncation of spell lists at a particular level? I get that in the summary it might be necessary, but for the lists of just a particular level it would be good to see everything. Similarly when you do have the truncation it would be good if that text flag was a link that opens out the full list for only the respective level. i.e. all level 1 spells in the below example. I assume this is just the same link as clicking the "1" in the footer.
I'm wondering how the truncation determination is actually being made. The PC attacks list also truncates, even when there is not a significant number of items. I'm running v3.5.1 on Chrome fwiw.
MykeMyke said: Hey Jarren. Is there any way to avoid the truncation of spell lists at a particular level? I get that in the summary it might be necessary, but for the lists of just a particular level it would be good to see everything. Similarly when you do have the truncation it would be good if that text flag was a link that opens out the full list for only the respective level. i.e. all level 1 spells in the below example. I assume this is just the same link as clicking the "1" in the footer. If by truncated you mean "More Level 1 Spells Not Shown", that is Known Limitation #5 : 5. There is a limit on the number of items that will be displayed for different references.&nbsp; 15 spells per level, 30 items in inventory, etc.&nbsp; These are not hard limits, but I wasn't sure what number would be best so I set a number that I think will fit at least 95% of use cases.&nbsp; I can easily tweak the relevant macros to include more if needed. Short answer: Version 3.5.1 only included 5 PC Attacks,&nbsp; 5 NPC Actions, and&nbsp; 10 spells per level. 3.5.2 has 20 PC Attacks,&nbsp; 10 NPC Actions, and&nbsp; 15 spells per level. So update to 3.5.2 and that should help! Much longer answer: 15 spells per level is sort of a soft limit, just based on the Excel spreadsheet I use to put the code together.&nbsp; There's a character limit when everything gets Concatenated together into a single cell to get copied over... I can work around that but at some point it also makes the MacroMule a bit unwieldy and slow - especially for spells! :)&nbsp;&nbsp; As a point of comparison, the code for each PC Attack has 185 characters, each NPC Action has 621 characters, but the code for each Spell has 2,234 characters. The CONCAT() function in Excel has a limit of&nbsp;32,767 characters per cell, so going beyond 15 is exceeding that and throwing an #VALUE error. Sidenote: I just mentioned in my last comment that next version 3.5.3 will have the option to completely hide Unprepared spells, which adds more code characters to each spell line, and I'm finding it is limiting each spell list to 14. I'm still trying to see if there's places that I can improve the code to optimize that. Another option I'm starting to consider is a 'FullSpellList' that just lists all of the spells by level, without any of the additional spell information, which would make it easy to see all of a character's spells, then you could click on a specific spell to cast it quickly, or click on the button for that specific spell level to see all of the information about the spells for that level. That and/or splitting each spell list into Lvl1ListA, Lvl1ListB etc. to have more spells listed per level. MykeMyke said: I'm wondering how the truncation determination is actually being made. The PC attacks list also truncates, even when there is not a significant number of items. I'm running v3.5.1 on Chrome fwiw. The truncation is made from simply referencing the next repeating item in the list. The first NPC Action references "repeating_npcaction_$0_ " with various attributes: [@{MM|InfoButton} ](~MM|NPCAction1Desc%{MM|ActionStyle} display:inline-block@{selected|repeating_npcaction_$0_name|max};) [@{selected|repeating_npcaction_$0_name} ](~@{selected|character_name}|repeating_npcaction_$0_npc_action%{MM|ActionStyle} display:inline-block@{selected|repeating_npcaction_$0_name|max};) [(@{selected|repeating_npcaction_$0_attack_range})&amp;nbsp;](%{MM|InfoStyle} display:inline-block@{selected|repeating_npcaction_$0_name|max}; display:none@{selected|repeating_npcaction_$0_attack_range};)[ ](%{MM|BreakStyle} display:block@{selected|repeating_npcaction_$0_name|max};)&nbsp; Then the next item is "repeating_npcaction_$1_ " and so forth to whatever number I arbitrarily chose to stop at, which in the case of 3.5.1 was $4 and in the case of 3.5.2 was $9.&nbsp; I initially chose 5 repeating NPC Actions as I didn't see any NPCs with more actions than that at the time.&nbsp; I also don't actually use the Roll20 Character sheet for my players as we use D&amp;D Beyond and the Beyond20 extension... so I think I noticed an NPC with more, and another user asked me to increase the limits for PC attacks, so I made those revisions in 3.5.2. Then the last part of the NPCActionList is this bit to simply inform you that there are more items that aren't being shown (3.5.1 would use $5, and 3.5.2 uses $10): [ &amp;nbsp; More Actions Not Shown&amp;nbsp;](%{MM|ActionStyle} color: red; cursor: text; font-weight: bold; display:inline-block@{selected|repeating_npcaction_$10_name|max};) [ ](%{MM|BreakStyle} display:block@{selected|repeating_npcaction_$10_name|max};) I added that just to be a catch-all way of informing players that the MacroMule wasn't showing everything.&nbsp;&nbsp; If you find that you need more than 10 NPC Actions, or more than 30 Inventory items, or anything else like that, just let me know!&nbsp; I can upload a custom version with higher limits for you pretty easily. The only fields where I'm hitting a soft limit are the spell lists, but again I can figure out a way to work around that.&nbsp; Also keep in mind that the more items in a list, the more lag you'll notice when clicking on macro buttons to display the chat menus.&nbsp; Most menus are not noticeable, other than the spells - because there are so many attributes being referenced for each spell.