Using TokenMod and ChatSetAttr to Set Up Druid Wild Shapes (uses API)
TokenMod makes it so that you don't need to bother with rollable tables to create a multi-sided token (as long as all of the images involved are in your user library).
!token-mod --set imgsrc|+@{target|token_id} --ids @{selected|token_id}
Select
your Druid's token, use the macro above and click their token as your target. They now have a multi-sided token with their base token as
side 1. Put down some beast form tokens and add them to the Druid's
token. Don't forget to save the token as their default token or you
won't have any additional sides the next time you drag their token out.
!token-mod --set defaulttoken
I
find this so much faster than creating/updating lots of rollable
tables, especially because I tend to add multiple sides to the majority
of tokens in my games (variations on appearance whenever I can for
enemies, players, etc).
I use separate character sheets for all
the Wild Shapes that Druids might have (so that I can have appropriate
token macros for attacks and such for each). So if I have two Druids in
my game named Bob and Mary Sue and they both like to turn into wolves,
then I'll have a Wolf sheet (for use with Conjure Animals and such), a
Wolf Bob character sheet with Bob's mental stats/proficiencies/saves,
and a Wolf Mary Sue sheet with Mary Sue's mental stats/saves. Setting
up the Druid specific sheets correctly for mental
stats/proficiences/saves is easy enough if you have the ChatSetAttr API
script.
You just need to have the tokens for the Druid and Wild
Shape to be modified and then run the following three macros, selecting
the appropriate targets as prompted.
The first sets up the Wild Shape character sheet with the Druid's mental stats and proficiency bonus:
!setattr {{
--charid @{target|Wild Shape|character_id}
--evaluate
--pb_custom|(%pb_custom% < @{target|Druid|pb}) ? @{target|Druid|pb} : %pb_custom%
--intelligence|@{target|Druid|intelligence}
--intelligence_mod|@{target|Druid|intelligence_mod}
--wisdom|@{target|Druid|wisdom}
--wisdom_mod|@{target|Druid|wisdom_mod}
--charisma|@{target|Druid|charisma}
--charisma_mod|@{target|Druid|charisma_mod}
}}
The
second does a little needed preparation to the Wild Shape character
sheet (making sure that all the necessary fields are actually using
numbers for the attributes to be evaluated in the next step):
!setattr {{
--charid @{target|Wild Shape|character_id}
--evaluate
--npc_saving_flag|1
--npc_skills_flag|1
--strength_mod|"%strength_mod%" ? "%strength_mod%" : "0"
--dexterity_mod|"%dexterity_mod%" ? "%dexterity_mod%" : "0"
--constitution_mod|"%constitution_mod%" ? "%constitution_mod%" : "0"
--intelligence_mod|"%intelligence_mod%" ? "%intelligence_mod%" : "0"
--wisdom_mod|"%wisdom_mod%" ? "%wisdom_mod%" : "0"
--charisma_mod|"%charisma_mod%" ? "%charisma_mod%" : "0"
--npc_str_save_flag|"%npc_str_save_flag%" ? "%npc_str_save_flag%" : "0"
--npc_dex_save_flag|"%npc_dex_save_flag%" ? "%npc_dex_save_flag%" : "0"
--npc_con_save_flag|"%npc_con_save_flag%" ? "%npc_con_save_flag%" : "0"
--npc_int_save_flag|"%npc_int_save_flag%" ? "%npc_int_save_flag%" : "0"
--npc_wis_save_flag|"%npc_wis_save_flag%" ? "%npc_wis_save_flag%" : "0"
--npc_cha_save_flag|"%npc_cha_save_flag%" ? "%npc_cha_save_flag%" : "0"
--npc_athletics_flag|"%npc_athletics_flag%" ? "%npc_athletics_flag%" : "0"
--npc_acrobatics_flag|"%npc_acrobatics_flag%" ? "%npc_acrobatics_flag%" : "0"
--npc_sleight_of_hand_flag|"%npc_sleight_of_hand_flag%" ? "%npc_sleight_of_hand_flag%" : "0"
--npc_stealth_flag|"%npc_stealth_flag%" ? "%npc_stealth_flag%" : "0"
--npc_arcana_flag|"%npc_arcana_flag%" ? "%npc_arcana_flag%" : "0"
--npc_history_flag|"%npc_history_flag%" ? "%npc_history_flag%" : "0"
--npc_investigation_flag|"%npc_investigation_flag%" ? "%npc_investigation_flag%" : "0"
--npc_nature_flag|"%npc_nature_flag%" ? "%npc_nature_flag%" : "0"
--npc_religion_flag|"%npc_religion_flag%" ? "%npc_religion_flag%" : "0"
--npc_animal_handling_flag|"%npc_animal_handling_flag%" ? "%npc_animal_handling_flag%" : "0"
--npc_insight_flag|"%npc_insight_flag%" ? "%npc_insight_flag%" : "0"
--npc_medicine_flag|"%npc_medicine_flag%" ? "%npc_medicine_flag%" : "0"
--npc_perception_flag|"%npc_perception_flag%" ? "%npc_perception_flag%" : "0"
--npc_survival_flag|"%npc_survival_flag%" ? "%npc_survival_flag%" : "0"
--npc_deception_flag|"%npc_deception_flag%" ? "%npc_deception_flag%" : "0"
--npc_intimidation_flag|"%npc_intimidation_flag%" ? "%npc_intimidation_flag%" : "0"
--npc_performance_flag|"%npc_performance_flag%" ? "%npc_performance_flag%" : "0"
--npc_persuasion_flag|"%npc_persuasion_flag%" ? "%npc_persuasion_flag%" : "0"
}}
The
final macro compares saves/skills between the Druid and the Wild Shape
and adds the newly calculated values to the Wild Shape:
!setattr {{
--charid @{target|Wild Shape|character_id}
--evaluate
--npc_str_save_flag|(@{target|Druid|strength_save_prof}!==0)?1:%npc_str_save_flag%
--npc_dex_save_flag|(@{target|Druid|dexterity_save_prof}!==0)?1:%npc_dex_save_flag%
--npc_con_save_flag|(@{target|Druid|constitution_save_prof}!==0)?1:%npc_con_save_flag%
--npc_int_save_flag|(@{target|Druid|intelligence_save_prof}!==0)?1:%npc_int_save_flag%
--npc_wis_save_flag|(@{target|Druid|wisdom_save_prof}!==0)?1:%npc_wis_save_flag%
--npc_cha_save_flag|(@{target|Druid|charisma_save_prof}!==0)?1:%npc_cha_save_flag%
--npc_athletics_flag|(@{target|Druid|athletics_prof}!==0)?1:%npc_athletics_flag%
--npc_acrobatics_flag|(@{target|Druid|acrobatics_prof}!==0)?1:%npc_acrobatics_flag%
--npc_sleight_of_hand_flag|(@{target|Druid|sleight_of_hand_prof}!==0)?1:%npc_sleight_of_hand_flag%
--npc_stealth_flag|(@{target|Druid|stealth_prof}!==0)?1:%npc_stealth_flag%
--npc_arcana_flag|(@{target|Druid|arcana_prof}!==0)?1:%npc_arcana_flag%
--npc_history_flag|(@{target|Druid|history_prof}!==0)?1:%npc_history_flag%
--npc_investigation_flag|(@{target|Druid|investigation_prof}!==0)?1:%npc_investigation_flag%
--npc_nature_flag|(@{target|Druid|nature_prof}!==0)?1:%npc_nature_flag%
--npc_religion_flag|(@{target|Druid|religion_prof}!==0)?1:%npc_religion_flag%
--npc_animal_handling_flag|(@{target|Druid|animal_handling_prof}!==0)?1:%npc_animal_handling_flag%
--npc_insight_flag|(@{target|Druid|insight_prof}!==0)?1:%npc_insight_flag%
--npc_medicine_flag|(@{target|Druid|medicine_prof}!==0)?1:%npc_medicine_flag%
--npc_perception_flag|(@{target|Druid|perception_prof}!==0)?1:%npc_perception_flag%
--npc_survival_flag|(@{target|Druid|survival_prof}!==0)?1:%npc_survival_flag%
--npc_deception_flag|(@{target|Druid|deception_prof}!==0)?1:%npc_deception_flag%
--npc_intimidation_flag|(@{target|Druid|intimidation_prof}!==0)?1:%npc_intimidation_flag%
--npc_performance_flag|(@{target|Druid|performance_prof}!==0)?1:%npc_performance_flag%
--npc_persuasion_flag|(@{target|Druid|persuasion_prof}!==0)?1:%npc_persuasion_flag%
--npc_str_save|(%pb_custom% + %strength_mod%)
--npc_dex_save|(%pb_custom% + %dexterity_mod%)
--npc_con_save|(%pb_custom% + %constitution_mod%)
--npc_int_save|(%pb_custom% + %intelligence_mod%)
--npc_wis_save|(%pb_custom% + %wisdom_mod%)
--npc_cha_save|(%pb_custom% + %charisma_mod%)
--npc_athletics|(%pb_custom% + %strength_mod%)
--npc_acrobatics|(%pb_custom% + %dexterity_mod%)
--npc_sleight_of_hand|(%pb_custom% + %dexterity_mod%)
--npc_stealth|(%pb_custom% + %dexterity_mod%)
--npc_arcana|(%pb_custom% + %intelligence_mod%)
--npc_history|(%pb_custom% + %intelligence_mod%)
--npc_investigation|(%pb_custom% + %intelligence_mod%)
--npc_nature|(%pb_custom% + %intelligence_mod%)
--npc_religion|(%pb_custom% + %intelligence_mod%)
--npc_animal_handling|(%pb_custom% + %wisdom_mod%)
--npc_insight|(%pb_custom% + %wisdom_mod%)
--npc_medicine|(%pb_custom% + %wisdom_mod%)
--npc_perception|(%pb_custom% + %wisdom_mod%)
--npc_survival|(%pb_custom% + %wisdom_mod%)
--npc_cha_save|(%pb_custom% + %charisma_mod%)
--npc_cha_save|(%pb_custom% + %charisma_mod%)
--npc_cha_save|(%pb_custom% + %charisma_mod%)
--npc_cha_save|(%pb_custom% + %charisma_mod%)
}}
For
the Druid's base form and each Wild Shape, I add a macro as an ability
on the Druid's character sheet. It uses TokenMod to switch their token
to the correct side and size for that Wild Shape, links it to the
appropriate character sheet, sets the correct (dark)vision, displays
speed in bar 1 (sometimes using bar1_value and bar1_max to remind me of
multiple speeds like the climbing speed for spiders), displays AC in bar
2, and rolls hit points based on the Wild Shapes hit point formula into
bar 3. A couple of examples below:
!token-mod {{
--set currentside|1
height|70
width|70
represents|"Mary Sue"
light_radius|12
light_dimradius|=-5
bar1_link|speed
bar2_link|ac
bar3_link|hp
}}
!token-mod {{
--set currentside|6
height|140
width|140
represents|"Giant Spider Mary Sue"
light_radius|60
light_dimradius|0
bar1_value|30
bar1_max|30
bar2_value|@{Giant Spider Mary Sue|npc_ac}
bar3|[[@{Giant Spider Mary Sue|npc_hpformula}]]
}}
Finally
each Druid gets an ability called "Wild Shapes" which just whispers them
a bunch of buttons linked up to the forms they have available. Select
the Show in Macro Bar option for that one so it'll be available no
matter what shape they're using. That macro looks something like this:
/w "Mary Sue" [Base](~Mary Sue|BaseForm) [Giant Spider](~Mary Sue|GiantSpider) ...
When
the Druid gets a new Wild Shape, you just need to click a few macro
buttons to add the image to their token, duplicate and rename the
shape's character sheet, then set up a new ability for that shape, and
finally add a new button to the Wild Shape menu. It's actually pretty
fast using the macros above, but I do still wish someone would make one
API to handle all of that.
That said, I really feel like this is more towards the stupid end of the spectrum than the clever one, because a clever one wouldn't be quite as resource intensive as requiring all those separate character sheets for each Druid. I've tinkered around a little bit with a method that makes back up copies of the Druid's base attributes and then overwrites a Wild Shape's attributes on the Druid character sheet as well as adding abilities for the Wild Shape's attacks, but it's so far from being ready that I probably shouldn't even be mentioning it.