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 .
×
Create a free account

Creative Way to Track Wild Shape

  I am posting this for other DM's who may not quite know how to tackle tracking the beast, or  beasts , that is WILD SHAPE!....... (im sorry ill leave now)     For my game I use a roll table to track all of the shapes tokens. This takes an afternoon of work but you will never have to do it again after you set it up. Put all of the tokens in for ALL of your druids shapes.     Make sure the very first token in the list is your druids main token. After that is saved  select the 'token' option  beside the table. The first token on the list should appear on the map for you. Give it your druids stats and make this token your druids default token. Your druid now has the option to right click the token and select 'Choose Side'. This will open a slider bar where they can then choose what animal form they can change into.      In my game I have my druid keep track of her WS HP via a secondary HP bar. That way it is very easy for her to see how much 'Temporary' hp she has at all times. If you have API access you can use Token-mod to create a Wild-Shape macro. The macro will prompt a query for your druid to enter the beasts HP and it will automatically add the secondary hp bar. As seen below. For those interested, here is the macro content for that:  !token-mod --ids tokenid  --set bar2_value|?{Wild Shape HP|} bar2_max|?{Wild Shape HP|}      When your druid shapes back simply go back into the slider and slide all the way to the left to select the first token on the list, your players default image.  To remove the secondary hp bar either set the amount to nothing (not 0) or you can use another macro: !token-mod --ids tokenid --set bar2_value| So when putting all of that together you should be able to smoothly have your player go "I wanna be a bear". They find the bear image on their slider and enter the bear hp for the second bar (or enter it into the macro prompt if you use that). When changing back just slide again and remove bar 2 value. Eazy Peazy. I hope that helps somebody out. This method has been very smooth for me during my almost 2 year long game. If something is unclear or if anyone runs into a wall with it feel free to ask questions. <3
1582518041
The Aaron
Roll20 Production Team
API Scripter
Nice write up. You can also use TokenMod to set the side using: !token-mod --set currentside|3 Or similar, provided the images are in a user library. 
Oh, nice! I can use that for sure. Thank you!
1582524430
keithcurtis
Forum Champion
Marketplace Creator
API Scripter
You could get really fancy and use: !token-mod --set currentside|?{Choose Shape|Druid,1|Bear,2|Wolf,3} ...and so forth. Then you wouldn't need to remember which side was which.
1582525165

Edited 1582525548
I have a master list for her, But yes, ideally a query would be awesome. I will likely make one this week. lol
1582584742

Edited 1582586469
Okay, I made a super macro to make this even more streamlined.  !token-mod ?{Choose Shape:|Ape, --set currentside|2 bar2_value|19 bar2_Max|19 width|70 height|70|Babboon, --set currentside|3 bar2_value|3 bar2_Max|3 width|70 height|70} That macro will apply the correct 'side' of the token for the animal shape chosen, as well as update the secondary hp bar with that shapes hp and change the token to be the beasts correct size. You would have to set your own numbers based on the order in your Roll Table.  !token-mod --set bar2_value| currentside|1 height|70 width|70 That one will return your druid to their normal shape and size, and delete the extra hp bar. 
1582596961

Edited 1582602651
Dumbhuman
Pro
Marketplace Creator
TokenMod also makes it so that you don't need to bother with rollable tables to create a multi-sided token. !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. 
1582599262
keithcurtis
Forum Champion
Marketplace Creator
API Scripter
That's really cool and thorough, KC. Would you mind adding this post to the  Stupid Tricks  thread? It's a very useful procedure.
1582602534

Edited 1582602549
Dumbhuman
Pro
Marketplace Creator
keithcurtis said: That's really cool and thorough, KC. Would you mind adding this post to the  Stupid Tricks  thread? It's a very useful procedure. I just did, but mostly to further remind myself how this procedure is supposed to be a stop gap along the way toward a more efficient one that only requires a single character sheet (or to inspire someone to write the Druid Wild Shape API to end all other Wild Shape methods once and for all)!
Wow, I didn't know you could add sides to a token without a roll table. That's very useful.  I'm torn by the multi-character sheet method. On the one hand I love the idea of having all of the traits and attacks readily available when my druid changes shape. On the other hand I hate having that huge list of sheets in my journal. Am I the only DM that is getting a tad overwhelmed by the sheer amount of things in my journal?  I think I will try your method tonight. 
1582610126
Dumbhuman
Pro
Marketplace Creator
Large amounts of characters in your journal can unfortunately start to overwhelm even your players that never see them by causing the game to take a long time to load and other performance issues.  I have a game containing every single beast, elemental, and tons of other creatures so that they can all be set up with custom tokens, custom abilities, token actions, etc.  I don't run actual sessions in that game anymore, but rather use it as storage and typically make liberal use of the Transmogrifier to keep only those things that I currently need in the game where I actually have play sessions.
1582612040
The Aaron
Roll20 Production Team
API Scripter
You actually don't need the html entities for this with TokenMod. You can use a # instead of a | separator for this exact use case: !token-mod ?{Choose Shape:|Ape, --set currentside#2 bar2_value#19 bar2_Max#19 scale#1u|Babboon, --set currentside#3 bar2_value#3 bar2_Max#3 scale#1u} You can also use scale|<value> to set height and width in one go, and make use of units. 1u = 70, 1g = a square on the correct grid, 5ft = what ever is 5ft on the current page, etc. 
1582616648
Dumbhuman
Pro
Marketplace Creator
The Aaron said: You can also use scale|<value> to set height and width in one go... I know I should use scale more often, but my brain keeps telling me it's only good for multiplying the current token size no matter how many times I tell my brain that it's completely wrong about that.  I just wish you'd named it "size"!
1582644910
The Aaron
Roll20 Production Team
API Scripter
Yeah, I struggled with the naming. I can add size as an alias, if that helps. =D. There was some reason I didn't use size, I'll have to think about it...
1582649780
Dumbhuman
Pro
Marketplace Creator
Needing neurons to adapt is good mental exercise though and you've got plenty of more important tasks, I'm sure!
1582662627

Edited 1582667105
Okay, I can easily replace the html jumble with #. That's a lot smoother.  I feel like I'm learning so much about what Token-Mod is capable of.  The Aaron said: You actually don't need the html entities for this with TokenMod. You can use a # instead of a | separator for this exact use case: !token-mod ?{Choose Shape:|Ape, --set currentside#2 bar2_value#19 bar2_Max#19 scale#1u|Babboon, --set currentside#3 bar2_value#3 bar2_Max#3 scale#1u} You can also use scale|<value> to set height and width in one go, and make use of units. 1u = 70, 1g = a square on the correct grid , 5ft = what ever is 5ft on the current page, etc.  Omg, sweet jesus it'll adjust to the correct grid too!? *cries* That being said, say I'm trying to avoid doing the character sheet thing. I still like the roll table for the tokens personally, especially since I can set the 'currentside' easily. So I prefer to simply adjust my Druids token/sheet each time she changes shape through macro use. I essentially have two macros that need to fire off when my Druid Wild Shapes.  1. The !token-mod macro that changes the image, size, hp bar, and sight. !token-mod ?{Choose Shape|Tenerife, --set currentside#1 bar2_value# bar2_Max#95 scale#1g light_radius#60 light_dimradius#0|Ape, --set currentside#2 bar2_value#19 bar2_Max#19 scale#1g light_radius#5 light_dimradius#0|Babboon,  --set currentside#31 bar2_value#3 bar2_Max#3 scale#1g light_radius#5 light_dimradius#0|Badger, --set currentside#3 bar2_value#3 bar2_Max#3 scale#1g light_radius#30 light_dimradius#0|Bat, --set currentside#4 bar2_value#1 bar2_Max#1 scale#1g|Black Bear,  --set currentside#32 bar2_value#19 bar2_Max#19 scale#2g|Boar, --set currentside#33 bar2_value#11 bar2_Max#11 scale#1g|Brown Bear, --set currentside#32 bar2_value#34 bar2_Max#34 scale#2g|Camel, --set currentside#7 bar2_value#15 bar2_Max#15 scale#2g|Cat, --set currentside#5 bar2_value#2 bar2_Max#2 scale#1g|Constrictor Snake,  --set currentside#6 bar2_value#13 bar2_Max#13 scale#2g|Crab, --set currentside#34 bar2_value#2 bar2_Max#2 scale#1g|Crocodile, --set currentside#8 bar2_value#19 bar2_Max#19 scale#2g|Deer, --set currentside#9 bar2_value#4 bar2_Max#4 scale#2g|Draft Horse, --set currentside#10 bar2_value#19 bar2_Max#19 scale#2g|Eagle, --set currentside#35 bar2_value#3 bar2_Max#3 scale#0.5g|Elk, --set currentside#11 bar2_value#13 bar2_Max#13 scale#2g|Frog, --set currentside#12 bar2_value#1 bar2_Max#1 scale#1g light_radius#30 light_dimradius#0|Giant Badger, --set currentside#3 bar2_value#13 bar2_Max#13 scale#2g light_radius#30 light_dimradius#0|Giant Bat, --set currentside#4 bar2_value#22 bar2_Max#22 scale#2g|Giant Centipede, --set currentside#36 bar2_value#4 bar2_Max#4 scale#2g|Giant Crab, --set currentside#34 bar2_value#13 bar2_Max#13 scale#2g|Giant Eagle, --set currentside#35 bar2_value#26 bar2_Max#26 scale#2g|Giant Frog, --set currentside#12 bar2_value#18 bar2_Max#18 scale#2g light_radius#30 light_dimradius#0|Giant Goat, --set currentside#37 bar2_value#19 bar2_Max#19 scale#2g|Giant Hyena, --set currentside#38 bar2_value#45 bar2_Max#45 scale#2g|Giant Lizard, --set currentside#39 bar2_value#19 bar2_Max#19 scale#2g light_radius#30 light_dimradius#0|Giant Octopus, --set currentside#13 bar2_value#52 bar2_Max#52 scale#2g light_radius#30 light_dimradius#0|Giant Owl, --set currentside#19 bar2_value#19 bar2_Max#19 scale#2g|Giant Poisonous Snake, --set currentside#40 bar2_value#11 bar2_Max#11 scale#1g light_radius#30 light_dimradius#0|Giant Rat, --set currentside#23 bar2_value#7 bar2_Max#7 scale#2g light_radius#60 light_dimradius#0|Giant Sea Horse, --set currentside#41 bar2_value#16 bar2_Max#16scale#2g|Giant Toad, --set currentside#14 bar2_value#39 bar2_Max#39scale#2g light_radius#30 light_dimradius#0|Giant Vulture, --set currentside#48 bar2_value#22 bar2_Max#22scale#2g|Giant Wasp, --set currentside#15 bar2_value#13 bar2_Max#13 scale#1g|Giant Weasel, --set currentside#29 bar2_value#9 bar2_Max#9 scale#2g light_radius#60 light_dimradius#0|Giant Wolf Spider, --set currentside#42 bar2_value#11 bar2_Max#11 scale#2g light_radius#30 light_dimradius#0|Goat, --set currentside#37 bar2_value#4 bar2_Max#4 scale#1g|Hawk, --set currentside#43 bar2_value#1 bar2_Max#1 scale#1g|Hyena, --set currentside#38 bar2_value#5 bar2_Max#5 scale#1g|Jackal, --set currentside#16 bar2_value#3 bar2_Max#3 scale#1g|Lion, --set currentside#44 bar2_value#26 bar2_Max#26 scale#2g|Lizard, --set currentside#17 bar2_value#2 bar2_Max#2 scale#1g light_radius#30 light_dimradius#0|Mastiff, --set currentside#18 bar2_value#5 bar2_Max#5 scale#1g|Octopus, --set currentside#13 bar2_value#3 bar2_Max#3 scale#1g light_radius#30 light_dimradius#0|Owl, --set currentside#19 bar2_value#1 bar2_Max#1 scale#1g light_radius#120 light_dimradius#0|Panther, --set currentside#20 bar2_value#13 bar2_Max#13 scale#1g|Poisonous Snake, --set currentside#21 bar2_value#2 bar2_Max#2 scale#1g|Pony, --set currentside#22 bar2_value#11 bar2_Max#11 scale#1g|Quipper, --set currentside#28 bar2_value#1 bar2_Max#1 scale#0.5g light_radius#60 light_dimradius#0|Rat, --set currentside#23 bar2_value#1 bar2_Max#1 scale#1g light_radius#30 light_dimradius#0|Raven, --set currentside#24 bar2_value#1 bar2_Max#1 scale#1g|Reef Shark, --set currentside#25 bar2_value#22 bar2_Max#22 scale#1g|Riding Horse, --set currentside#26 bar2_value#13 bar2_Max#13 scale#2g|Scorpion, --set currentside#45 bar2_value#1 bar2_Max#1 scale#1g|Sea Horse, --set currentside#41 bar2_value#1 bar2_Max#1 scale#1g|Tiger, --set currentside#46 bar2_value#37 bar2_Max#37 scale#2g light_radius#60 light_dimradius#0|Vulture, --set currentside#47 bar2_value#5 bar2_Max#5 scale#1g|Weasel, --set currentside#29 bar2_value#1 bar2_Max#1 scale#1g|Wolf, --set currentside#30 bar2_value#11 bar2_Max#11 scale#1g} 2. The !setattr macro that adjusts my druids STR, DEX, CON to the beasts and back. !setattr --sel ?{Choose Shape|Tenerife, --strength#11 --dexterity#11 --constitution#14|Ape, --strength#16 --dexterity#14 --constitution#14|Babboon, --strength#8 --dexterity#14 --constitution#11|Badger, --strength#4 --dexterity#11 --constitution#12|Bat, --strength#2 --dexterity#15 --constitution#18|Black Bear, --strength#15 --dexterity#10 --constitution#14|Boar, --strength#16 --dexterity#14 --constitution#14|Brown Bear, --strength#19 --dexterity#10 --constitution#16|Camel, --strength#16 --dexterity#8 --constitution#14|Cat, --strength#3 --dexterity#15 --constitution#10|Constrictor Snake, --strength#16 --dexterity#14 --constitution#14|Crab,  --strength#2 --dexterity#11 --constitution#10|Crocodile, --strength#15 --dexterity#10 --constitution#13|Deer, --strength#11 --dexterity#16 --constitution#11|Draft Horse, --strength#18 --dexterity#10 --constitution#12|Eagle, --strength#18 --dexterity#10 --constitution#12|Elk, --strength#16 --dexterity#10 --constitution#12|Frog, --strength#1 --dexterity#13 --constitution#8|Giant Badger, --strength#13 --dexterity#10 --constitution#15|Giant Bat, --strength#15 --dexterity#16 --constitution#11|Giant Centipede, --strength#5 --dexterity#14 --constitution#12|Giant Crab, --strength#13 --dexterity#15 --constitution#11|Giant eagle, --strength#16 --dexterity#17 --constitution#13|Giant Frog,  --strength#12 --dexterity#13 --constitution#11|Giant Goat, --strength#17 --dexterity#11 --constitution#12|Giant Hyena, --strength#16 --dexterity#14 --constitution#14|Giant Lizard, --strength#15 --dexterity#12 --constitution#13|Giant Octopus, --strength#17 --dexterity#13 --constitution#13|Giant Owl, --strength#13 --dexterity#15 --constitution#12|Giant Poisonous Snake, --strength#10 --dexterity#18 --constitution#13|Giant Rat, --strength#7 --dexterity#15 --constitution#11|Giant Sea Horse, --strength#12 --dexterity#15 --constitution#11|Giant Toad, --strength#15 --dexterity#13 --constitution#13|Giant Vulture, --strength#15 --dexterity#10 --constitution#15|Giant Wasp, --strength#10 --dexterity#14 --constitution#10|Giant Weasel,  --strength#11 --dexterity#16 --constitution#10|Giant Wolf spider, --strength#12 --dexterity#16 --constitution#13|Goat, --strength#12 --dexterity#10 --constitution#11|Hawk, --strength#5 --dexterity#16 --constitution#8|Hyena, --strength#11 --dexterity#13 --constitution#12|Jackal, --strength#8 --dexterity#15 --constitution#11|Lion, --strength#17 --dexterity#15 --constitution#13|Lizard, --strength#2 --dexterity#11 --constitution#10|Mastiff, --strength#13 --dexterity#14 --constitution#12|Octopus, --strength#4 --dexterity#15 --constitution#11|Owl, --strength#3 --dexterity#13 --constitution#8|Panther, --strength#14 --dexterity#15 --constitution#10|Poisonous Snake, --strength#2 --dexterity#16 --constitution#11|Pony, --strength#15 --dexterity#10 --constitution#13|Quipper,  --strength#2 --dexterity#16 --constitution#9|Rat, --strength#2 --dexterity#11 --constitution#19|Raven, --strength#2 --dexterity#14 --constitution#8|Reef Shark, --strength#14 --dexterity#13 --constitution#13|Riding Horse, --strength#16 --dexterity#10 --constitution#12|corpion, --strength#2 --dexterity#11 --constitution#8|Sea Horse, --strength#1 --dexterity#12 --constitution#8|Tiger, --strength#17 --dexterity#15 --constitution#14|Vulture, --strength#7 --dexterity#10 --constitution#13|Weasel, --strength#3 --dexterity#16 --constitution#8|Wolf, --strength#12 --dexterity#15 --constitution#12} These work great separately but I cant put all of the information within a single macro or the information gets jumbled around. So, first question, is there a way to combine the two macros into one seamlessly. OR. Is there a clean way to fire off both macros at once with one click?  Another thing I'd love to do is have the !ammo command kick off as well and subtract her Wild Shape resource, but I don't want it to reduce when she changes back to normal form. Right now I have all beast forms AND normal form combined in the macros. Would the only way to do this be to either; A) Make a new macro just for reducing the !ammo B) Make a 'Wild-Shape-Back' macro that just changes her back to default and not include the !ammo command in that one? Anyone have thoughts?
1582666693

Edited 1582667850
Dumbhuman
Pro
Marketplace Creator
That being said, say I'm trying to avoid doing the character sheet thing. I still like the roll table for the tokens personally, especially since I can set the 'currentside' easily. So I prefer to simply adjust my Druids token/sheet each time she changes shape through macro use. I essentially have two macros that need to fire off when my Druid Wild Shapes.  1. The !token-mod macro that changes the image, size, hp bar, and sight.  2. The !setattr macro that adjusts my druids STR, DEX, CON to the beasts and back.  These work great separately but I cant put all of the information within a single macro or the information gets jumbled around. So, first question, is there a way to combine the two macros into one seamlessly. OR. Is there a clean way to fire off both macros at once with one click? If you can wait until tomorrow, I'm just about done with a solution that only involves having just one duplicate character per Druid.  I just need to verify the setting of skill/save proficiency and then there's the (not so) little matter of data entry to populate the list of Wild Shapes available.  It will require installing one additional API (which I had to tweak slightly to get it to work), but you can definitely string multiple macro/API calls together in a single macro which is what I'm doing to accomplish things.  You just need to be sure that you don't have spaces between the lines of one API call and the next. For example, here's what I'm currently using to turn a Druid (or rather his duplicate) named Wild Shape Scenery into a Giant Rat: !token-mod {{ --set represents|"Wild Shape Scenery" name|"Giant Rat Scenery" currentside|2 scale|1u light_radius|60 light_dimradius|0 bar1_value|30 bar1_max| bar2_value| bar2_max| bar3|[[2d6]] }} !setattr {{ --charid -M0vUlsQ3rtb1LtNN8j7 --strength#7 --dexterity#15 --constitution#11 --speed#30 --ac#12 }} !delability {{ --charid -M0vUlsQ3rtb1LtNN8j7 --deleteall }} !setability {{ --charid -M0vUlsQ3rtb1LtNN8j7 --token --replace --RollInit#\p{%%character_id%%|initiative} --WildShapes#\p{Scenery|WildShapes} --Bite#\amp{template:npcaction} \begattack=1\end \begdamage=1\end \begdmg1flag=1\end \begname=\at{selected|character_name\end} \begrname=Bite\end \begr1=\[1d20+\at{selected|pb}+\at{selected|dexterity_mod}\]\end \begalways=1\end \begr2=\[1d20+\at{selected|pb}+\at{selected|dexterity_mod}\]\end \begdmg1=\[1d4+\at{selected|dexterity_mod}\]\end \begdmg1type=piercing\end \begcrit1=\[1d4\]\end --Keen Smell#\amp{template:npcaction} \begrname=Keen Smell\end \begname=\at{selected|character_name\end} \begdescription=The rat has advantage on Wisdom (Perception) checks that rely on smell.\end --Pack Tactics#\amp{template:npcaction} \begrname=Pack Tactics\end \begname=\at{selected|character_name\end} \begdescription=The rat has advantage on an attack roll against a creature if at least one of the rat's allies is within 5 ft. of the creature and the ally isn't incapacitated.\end }} That's far from the final form which will be made more generic so it functions with any selected token, but it all runs at the same time even though there are four separate API calls. Currently with that character selected I have a token button called WildShapes.  When I click that, it whispers the player a chat menu with buttons for Base Form, Giant Rat, and Giant Owl.  Clicking Giant Rat will run the commands above which do the following: TokenMod switches the token to refer to the Druid's Wild Shape character sheet (very important so that items won't be present on the Wild Shape and you'll have the original character just as you left it with hit points and abilities untouched when you return to it), changes the token's name, changes the token's side to the one with an image of a Giant Rat, makes it the right size, gives it darkvision out to 60', sets bar1 to a Giant Rat's speed, sets bar2 to a Giant Rat's AC, and rolls hit points for the Giant Rat in bar3. ChatSetAttr writes the Giant Rat's Str, Dex, Con, speed, and AC to the Druid's Wild Shape character sheet. SetAbility deletes all abilities from the Druid's Wild Shape character sheet (cleaning up the abilities of the previous Wild Shape used). SetAbility creates new token abilities so that when you select the token you have clickable buttons on top for rolling initiative (that was really just there as an example for me to follow), bringing up the WildShapes chat menu again (to switch back to Druid form or to another Wild Shape), using the rat's Bite action (which adds the Druid's proficiency bonus), or viewing its Keen Smell and Pack Tactics traits. Eventually it will also add any additional save/skill proficiency which the Wild Shape has that the Druid might lack, but that's a little finicky to figure out. The process to get back to using the original Druid token and character sheet is much simpler and can be handled just by TokenMod: !token-mod {{ --set represents|"Scenery" name|"Scenery" currentside|1 scale|1u light_radius|60 light_dimradius|0 bar1_link|speed bar2_link|ac bar3_link|hp }} The biggest problem with this method is data entry for all the possible forms, but if I can get someone to teach me how to set up a spreadsheet to help with that aspect of things ( like this one by KeithCurtis ), then I could probably just set up macros for all the beasts and elementals in the SRD and share that with people who'd like to use this much more streamlined method.  I'll also have to share the code tweak I made to SetAbility, because I had to add a couple more replacers in order to handle the {{ }} format of roll templates.  Actually, I can share that here too if you really want to dive into playing around with things yourself, but I *highly* recommend only doing this on duplicates of character sheets rather than any you actually care about. SetAbility courtesy of Jakob (with a couple of added replacers): // setAbility version 1.0 var setAbility = setAbility || (function () { 'use strict'; const version = '1.1', replacers = [ ['[[', /\\\[/g], [']]', /\\\]/g], ['-', /\~/g], ['?', /\\q/g], ['@', /\\at/g], ['%', /\\p/g], ['&', /\\amp/g], ['#', /\\h/g], ['{{', /\\beg/g], ['}}', /\\end/g] ], checkInstall = function () { log(`-=> SetAbility v${version} <=-`); }, isDef = function (value) { return !_.isUndefined(value); }, getWhisperPrefix = function (playerid) { let player = getObj('player', playerid); if (player && player.get('_displayname')) { return '/w "' + player.get('_displayname') + '" '; } else { return '/w GM '; } }, sendChatMessage = function (msg) { sendChat('setAbility', msg, null, { noarchive: true }); }, handleErrors = function (whisper, errors) { if (errors.length) { let output = whisper + '<div style="border:1px solid black;' + `background-color:#FFBABA;padding:3px"><h4>Errors</h4>` + `<p>${errors.join('<br>')}</p></div>`; sendChatMessage(output); errors.splice(0, errors.length); } }, getCharNameById = function (id) { let character = getObj('character', id); return (character) ? character.get('name') : ''; }, htmlReplace = function (str) { let entities = { '<': 'lt', '>': 'gt', "'": '#39', '*': '#42', '@': '#64', '{': '#123', '|': '#124', '}': '#125', '[': '#91', ']': '#93', '_': '#95', '"': 'quot' }; return str.split('') .map(c => (entities[c]) ? ('&' + entities[c] + ';') : c) .join(''); }, processInlinerolls = function (msg) { if (msg['inlinerolls']) { return _.chain(msg.inlinerolls) .reduce(function (m, v, k) { let ti = _.reduce(v.results.rolls, function (m2, v2) { if (_.has(v2, 'table')) { m2.push(_.reduce(v2.results, function (m3, v3) { m3.push(v3.tableItem.name); return m3; }, []) .join(', ')); } return m2; }, []) .join(', '); m['$[[' + k + ']]'] = (ti.length && ti) || v.results.total || 0; return m; }, {}) .reduce((m, v, k) => m.replace(k, v), msg.content) .value(); } else { return msg.content; } }, getAbilities = function (list, abilityNames, errors, createMissing, deleteMode, getAll) { let abilityNamesUpper = abilityNames.map(x => x.toUpperCase()), allAbilities = {}; list.forEach(charid => { allAbilities[charid] = {}; findObjs({ _type: 'ability', _characterid: charid }).forEach(o => { if (getAll) { allAbilities[charid][o.get('_id')] = o; } else { let nameIndex = abilityNamesUpper.indexOf(o.get('name').toUpperCase()); if (nameIndex !== -1) { allAbilities[charid][abilityNames[nameIndex]] = o; } } }); if (!getAll) { abilityNames.filter(x => !Object.keys(allAbilities[charid]).includes(x)) .forEach(key => { if (createMissing) { allAbilities[charid][key] = createObj('ability', { characterid: charid, name: key }); } else if (!deleteMode) { errors.push(`Missing ability ${key} not created for` + ` character ${getCharNameById(charid)}.`); } }); } }); return allAbilities; }, delayedSetAbilities = function (whisper, list, setting, errors, allAbilities, fillIn, opts) { let cList = [...list], feedback = [], dWork = function (charid) { setCharAbilities(charid, setting, errors, feedback, allAbilities[charid], fillIn, opts); if (cList.length) { _.delay(dWork, 50, cList.shift()); } else { if (!opts.mute) handleErrors(whisper, errors); if (!opts.silent) sendFeedback(whisper, feedback); } } dWork(cList.shift()); }, setCharAbilities = function (charid, setting, errors, feedback, abilities, fillIn, opts) { let charFeedback = {}; Object.entries(abilities).forEach(([abilityName, ability]) => { let newValue = fillIn[abilityName] ? fillInAttrValues(charid, setting[abilityName]) : setting[abilityName]; if (opts.evaluate) { try { let parsed = eval(newValue); if (_.isString(parsed) || _.isFinite(parsed) || _.isBoolean(parsed)) { newValue = parsed.toString(); } } catch (err) { errors.push(`Something went wrong with --evaluate` + ` for the character ${getCharNameById(charid)}.` + ` You were warned. The error message was: ${err}.` + ` Ability ${abilityName} left unchanged.`); return; } } let finalValue = {}; if (opts.token) finalValue.istokenaction = true; if (newValue + '' === newValue) finalValue.action = newValue; charFeedback[abilityName] = newValue; ability.set(finalValue); }); // Feedback if (!opts.silent) { charFeedback = Object.entries(charFeedback).map(([name, value]) => { if (value !== false) return `${name} to ${htmlReplace(value) || '<i>(empty)</i>'}`; else return null; }) .filter(x => !!x); if (charFeedback.length) { feedback.push(`Setting abilities ${charFeedback.join(', ')} for` + ` character ${getCharNameById(charid)}.`); } else if (opts.token) { feedback.push(`Changing token action status for character ${getCharNameById(charid)}.`); } else { feedback.push(`Nothing to do for character ${getCharNameById(charid)}.`); } } return; }, fillInAttrValues = function (charid, expression) { let match = expression.match(/%%(\S.*?)(?:_(max))?%%/), replacer; while (match) { replacer = getAttrByName(charid, match[1], match[2] || 'current') || ''; expression = expression.replace(/%%(\S.*?)(?:_(max))?%%/, replacer); match = expression.match(/%%(\S.*?)(?:_(max))?%%/); } return expression; }, deleteAbilities = function (whisper, allAbilities, silent, deleteall) { let feedback = {}; Object.entries(allAbilities).forEach(([charid, charAbilities]) => { feedback[charid] = []; Object.entries(charAbilities).forEach(([name, ability]) => { feedback[charid].push(deleteall ? ability.get('name') : name); ability.remove(); }); }); if (!silent) sendDeleteFeedback(whisper, feedback); }, // These functions parse the chat input. parseOpts = function (content, hasValue) { // Input: content - string of the form command --opts1 --opts2 value --opts3. // values come separated by whitespace. // hasValue - array of all options which come with a value // Output: object containing key:true if key is not in hasValue. and containing // key:value otherwise return content.replace(/<br\/>\n/g, ' ') .replace(/\s*$/g, '') .replace(/({{(.*?)\s*}}$)/g, '$2') .split(/\s+--/) .slice(1) .reduce((m, arg) => { let kv = arg.split(/\s(.+)/); if (hasValue.includes(kv[0])) { m[kv[0]] = kv[1]; } else { m[arg] = true; } return m; }, {}); }, parseAbilities = function (args, fillIn, replace) { return args.map(str => { let split = str.split('#'); return [split.shift(), split.join('#')]; }) .reduce((m, c) => { if (c[0] && c[1] !== undefined) { let str = c[1]; fillIn[c[0]] = str.search(/%%(\S.*?)(?:_(max))?%%/) !== -1; if (replace) { replacers.forEach(rep => { str = str.replace(rep[1], rep[0]); }); } m[c[0]] = str; } else if (c[0]) { m[c[0]] = false; } return m; }, {}); }, // These functions are used to get a list of character ids from the input, // and check for permissions. checkPermissions = function (list, errors, playerid, isGM) { return list.filter(id => { let character = getObj('character', id); if (character) { let control = character.get('controlledby').split(/,/); if (!(isGM || control.includes('all') || control.includes(playerid))) { errors.push(`Permission error for character ${character.get('name')}.`); return false; } else return true; } else { errors.push(`Invalid character id ${id}.`); return false; } }); }, getIDsFromTokens = function (selected) { return selected.map(obj => getObj('graphic', obj._id)) .filter(x => !!x) .map(token => token.get('represents')) .filter(id => getObj('character', id || '')); }, getIDsFromNames = function (charNames, errors) { return charNames.split(/\s*,\s*/) .map(name => { let character = findObjs({ _type: 'character', name: name }, { caseInsensitive: true })[0]; if (character) { return character.id; } else { errors.push(`No character named ${name} found.`); return null; } }) .filter(x => !!x); }, sendFeedback = function (whisper, feedback) { let output = whisper + '<div style="border:1px solid black;background-color:' + '#FFFFFF;padding:3px;"><h3>Setting abilities</h3><p>' + (feedback.join('<br>') || 'Nothing to do.') + '</p></div>'; sendChatMessage(output); }, sendDeleteFeedback = function (whisper, feedback) { let output = whisper + '<div style="border:1px solid black;background-color:' + '#FFFFFF;padding:3px;"><h3>Deleting abilities</h3><p>'; output += _.chain(feedback) .omit(arr => arr.length === 0) .map(function (arr, charid) { return `Deleting abilities(s) ${arr.join(', ')} for character` + ` ${getCharNameById(charid)}.`; }) .join('<br>') .value() || 'Nothing to do.'; output += '</p></div>'; sendChatMessage(output); }, // Main function, called after chat message input handleInput = function (msg) { if (msg.type !== 'api') { return; } const mode = msg.content.match(/^!(set|del|)ability\b/), whisper = getWhisperPrefix(msg.playerid); if (!mode) return; // Parsing input let charIDList = [], fillIn = {}, errors = []; const hasValue = ['charid', 'name'], optsArray = ['all', 'allgm', 'charid', 'name', 'allplayers', 'sel', 'replace', 'nocreate', 'evaluate', 'silent', 'mute', 'token', 'deleteall' ], opts = parseOpts(processInlinerolls(msg), hasValue), deleteMode = (mode[1] === 'del'), setting = parseAbilities(_.chain(opts) .omit(optsArray) .keys() .value(), fillIn, opts.replace), isGM = msg.playerid === 'API' || playerIsGM(msg.playerid); opts.silent = opts.silent || opts.mute; opts.token = opts.token || false; if (opts.evaluate && !isGM) { if (!opts.mute) handleErrors(whisper, ['The --evaluate option is only available to the GM.']); return; } // Get list of character IDs if (opts.all && isGM) { charIDList = findObjs({ _type: 'character' }).map(c => c.id); } else if (opts.allgm && isGM) { charIDList = findObjs({ _type: 'character' }).filter(c => c.get('controlledby') === '') .map(c => c.id); } else if (opts.allplayers && isGM) { charIDList = findObjs({ _type: 'character' }).filter(c => c.get('controlledby') !== '') .map(c => c.id); } else { (opts.charid) ? charIDList.push(...opts.charid.split(/\s*,\s*/)): null; (opts.name) ? charIDList.push(...getIDsFromNames(opts.name, errors)): null; (opts.sel) ? charIDList.push(...getIDsFromTokens(msg.selected)): null; charIDList = checkPermissions(_.uniq(charIDList), errors, msg.playerid, isGM); } if (_.isEmpty(charIDList)) { errors.push('No target characters. You need to supply one of --all, --allgm, --sel,' + ' --allplayers, --charid, or --name.'); } if (_.isEmpty(setting) && !(deleteMode && opts.deleteall)) { errors.push('No abilities supplied.'); } // Get abilities let allAbilities = getAbilities(charIDList, Object.keys(setting), errors, !opts.nocreate && !deleteMode, deleteMode, deleteMode && opts.deleteall); if (!opts.mute) handleErrors(whisper, errors); // Set or delete abilities if (!(charIDList.length === 0) && (!_.isEmpty(setting) || (deleteMode && opts.deleteall))) { if (deleteMode) { deleteAbilities(whisper, allAbilities, opts.silent, opts.deleteall); } else { delayedSetAbilities(whisper, charIDList, setting, errors, allAbilities, fillIn, _.pick(opts, optsArray)); } } return; }, registerEventHandlers = function () { on('chat:message', handleInput); }; return { CheckInstall: checkInstall, RegisterEventHandlers: registerEventHandlers }; }()); on('ready', function () { 'use strict'; setAbility.CheckInstall(); setAbility.RegisterEventHandlers(); }); Overall though, I'm very glad I saw this post of yours because it got me working on this again and getting very close to something I've wanted for a long time.
Awesome. My game isn't till Sunday, I'm just tinkering around with this until then.  I'll def mess with SetAbility a bit. I can think of a few uses for that already. 
You can make an attack called wild shape with wild shape as the ammunition, that would burn one of the uses.  I'm not sure but you may even be able to tie it to the above macros in the attack description.  If not, you could certainly create a 2nd macro that combined the attack and another macro to both burn a wild shape and do the whole token change.   If you wanted to use the character sheets but not clog your journal, you can still access them when they are archived.  I have many handouts that are archived that I access as needed with a single handout that is like an index of the others.  I just tried it and saw that you can link to character sheets in the same way.
1582701702

Edited 1582701805
Okay, I have something really nice working here.  I ended up doing the character sheets but archiving them as @Patrick suggested. That does help quite a bit. I then have 3 macros that my druid has control of.  #Wild-Shape !token-mod ?{Choose Shape|Ape, --set currentside#2 represents#-LjDHODD99NfABWziFHh bar2_value#19 bar2_Max#19 scale#1g light_radius#5 light_dimradius#0|Babboon, --set currentside#31 represents#-M0zs61kDlD8jsSwDHSm bar2_value#3 bar2_Max#3 scale#1g light_radius#5 light_dimradius#0|Badger, --set currentside#3 represents#-LcJK6Cxq5Y4daHBCaAR bar2_value#3 bar2_Max#3 scale#1g light_radius#30 light_dimradius#0|Bat, --set currentside#4 represents#-LcJWMERnOam_dM55wNr bar2_value#1 bar2_Max#1 scale#1g light_radius#60 light_dimradius#|Black Bear, --set currentside#32 represents#-M0zsIj9VHx8ojFzrpJ6 bar2_value#19 bar2_Max#19 scale#2g|Boar, --set currentside#33 represents#-M0zsORfniBW2HUN_SQa bar2_value#11 bar2_Max#11 scale#1g light_radius#5 light_dimradius#0|Brown Bear, --set currentside#32 represents#-M0zsanm2Ss8reVslDCI bar2_value#34 bar2_Max#34 scale#2g light_radius#5 light_dimradius#0|Camel, --set currentside#7 represents#-Lmm4imT00gb-85iv-nD bar2_value#15 bar2_Max#15 scale#2g light_radius#5 light_dimradius#0|Cat, --set currentside#5 represents#-LcJK9RUorcNAR2a0dA3 bar2_value#2 bar2_Max#2 scale#1g light_radius#5 light_dimradius#0|Constrictor Snake, --set currentside#6 represents#-LjDHQmC6eYhIkmSq76W bar2_value#13 bar2_Max#13 scale#2g light_radius#30 light_dimradius#|Crab, --set currentside#34 represents#-M0zt0E5KZ8lvWioZCKH bar2_value#2 bar2_Max#2 scale#1g light_radius#10 light_dimradius#|Crocodile, --set currentside#8 represents#-LcJW8aSmUEzH1d5XwbM bar2_value#19 bar2_Max#19 scale#2g light_radius#30 light_dimradius#|Deer, --set currentside#9 represents#-LcJKE0Xm-LiH6sCmQZS bar2_value#4 bar2_Max#4 scale#2g light_radius#5 light_dimradius#0|Draft Horse, --set currentside#10 represents#-LcJKtwyC_QjXAZ2WuHJ bar2_value#19 bar2_Max#19 scale#2g light_radius#5 light_dimradius#0|Eagle, --set currentside#35 represents#-M0ztPmgMg7KzcaUNItU bar2_value#3 bar2_Max#3 scale#0.5g light_radius#5 light_dimradius#0|Elk, --set currentside#11 represents#-LcJKwwuSrFx-1ubae4u bar2_value#13 bar2_Max#13 scale#2g light_radius#5 light_dimradius#0|Frog, --set currentside#12 represents#-M0ztWnyx8QY6ZAg26ve bar2_value#1 bar2_Max#1 scale#1g light_radius#30 light_dimradius#0|Giant Badger, --set currentside#3 represents#-LeNTppIN3rT79fy0Wro bar2_value#13 bar2_Max#13 scale#2g light_radius#30 light_dimradius#0|Giant Bat, --set currentside#4 represents#-M0zth-UjBnFl-6t6bCD bar2_value#22 bar2_Max#22 scale#2g light_radius#60 light_dimradius#|Giant Centipede, --set currentside#36 represents#-M0ztnW8Gb6_IdnDULuZ bar2_value#4 bar2_Max#4 scale#1g light_radius#30 light_dimradius#|Giant Crab, --set currentside#34 represents#-M0zttRJ23CwCfiAyF_M bar2_value#13 bar2_Max#13 scale#2g light_radius#30 light_dimradius#|Giant Eagle, --set currentside#35 represents#-M0zu-HZ6dXzcUuVvHfM bar2_value#26 bar2_Max#26 scale#2g light_radius#5 light_dimradius#0|Giant Frog, --set currentside#12 represents#-LcJSViBSBBnDwoDfPpq bar2_value#18 bar2_Max#18 scale#2g light_radius#30 light_dimradius#0|Giant Goat, --set currentside#37 represents#-M0uQYsuGf5_OYRs614x bar2_value#19 bar2_Max#19 scale#2g light_radius#5 light_dimradius#0|Giant Hyena, --set currentside#38 represents#-M0zuByCH7Ce6jhhEwwh bar2_value#45 bar2_Max#45 scale#2g light_radius#5 light_dimradius#0|Giant Lizard, --set currentside#39 represents#-M0zuIR9VRCXExychieI bar2_value#19 bar2_Max#19 scale#2g light_radius#30 light_dimradius#0|Giant Octopus, --set currentside#13 represents#-Le4vaMn1UziiRVNUSMh bar2_value#52 bar2_Max#52 scale#2g light_radius#30 light_dimradius#0|Giant Owl, --set currentside#19 represents#-LcJW_YbnMxE6xhL16ft bar2_value#19 bar2_Max#19 scale#2g light_radius#120 light_dimradius#0|Giant Poisonous Snake, --set currentside#40 represents#-M0zuYsGJd6eRGrmOEyD bar2_value#11 bar2_Max#11 scale#1g light_radius#30 light_dimradius#0|Giant Rat, --set currentside#23 represents#-M0zufHAJRleZO0nnxr1 bar2_value#7 bar2_Max#7 scale#2g light_radius#60 light_dimradius#0|Giant Sea Horse, --set currentside#41 represents#-M0zul3GTn0gqTQAH9S9 represents# bar2_value#16 bar2_Max#16scale#2g light_radius#5 light_dimradius#0|Giant Toad, --set currentside#14 represents#-LcJWlyypZ5nnilQWbJd bar2_value#39 bar2_Max#39scale#2g light_radius#30 light_dimradius#0|Giant Vulture, --set currentside#48 represents#-M0zvE2AIiXZgZmtSNki bar2_value#22 bar2_Max#22 scale#2g light_radius#5 light_dimradius#0|Giant Wasp, --set currentside#15 represents#-LcJWfpYCQ6Xt8BA_Jl5 bar2_value#13 bar2_Max#13 scale#1g light_radius#5 light_dimradius#0|Giant Weasel, --set currentside#29 represents#-M0zvPoLN5x63IImscAF bar2_value#9 bar2_Max#9 scale#2g light_radius#60 light_dimradius#0|Giant Wolf Spider, --set currentside#42 represents#-M0zvUzXrYq8MXbiv-Kh bar2_value#11 bar2_Max#11 scale#2g light_radius#30 light_dimradius#0|Goat, --set currentside#37 represents#-M0zvabKjevdb3T9LLtP bar2_value#4 bar2_Max#4 scale#1g light_radius#5 light_dimradius#0|Hawk, --set currentside#43 represents#-M0zvgYCzDJKDtf2C6cI bar2_value#1 bar2_Max#1 scale#1g light_radius#5 light_dimradius#0|Hyena, --set currentside#38 represents#-M0zvmyLQcOVsoLx2dH2 bar2_value#5 bar2_Max#5 scale#1g light_radius#5 light_dimradius#0|Jackal, --set currentside#16 represents#-LcJKNEFy2-4jF5tJmtG bar2_value#3 bar2_Max#3 scale#1g light_radius#5 light_dimradius#0|Lion, --set currentside#44 represents#-M0zvuCfy2wZQY9twDx9 bar2_value#26 bar2_Max#26 scale#2g light_radius#5 light_dimradius#0|Lizard, --set currentside#17 represents#-M0zw01EcvGJkKqYd78M bar2_value#2 bar2_Max#2 scale#1g light_radius#30 light_dimradius#0|Mastiff, --set currentside#18 represents#-LcJKnENzOyS_6_P6Osn bar2_value#5 bar2_Max#5 scale#1g light_radius#5 light_dimradius#0|Octopus, --set currentside#13 represents#-Le4vcrSIN8y6b9NYZ8x bar2_value#3 bar2_Max#3 scale#1g light_radius#30 light_dimradius#0|Owl, --set currentside#19 represents#-M0zw9QvFCq0q_Jh2elM bar2_value#1 bar2_Max#1 scale#1g light_radius#120 light_dimradius#0|Panther, --set currentside#20 represents#-LgAf0sywKlKRGeMfVuh bar2_value#13 bar2_Max#13 scale#1g light_radius#5 light_dimradius#0|Poisonous Snake, --set currentside#21 represents#-M0zwLV37X3uJWBkhBoQ bar2_value#2 bar2_Max#2 scale#1g light_radius#10 light_dimradius#|Pony, --set currentside#22 represents#-M0zwQTRdumHwCjhUtWc bar2_value#11 bar2_Max#11 scale#1g light_radius#5 light_dimradius#0|Quipper, --set currentside#28 represents#M0zwWVbWQd1qiY05xhk bar2_value#1 bar2_Max#1 scale#0.5g light_radius#60 light_dimradius#0|Rat, --set currentside#23 represents#-M0zwbSn99ElJGEZjjYY bar2_value#1 bar2_Max#1 scale#1g light_radius#30 light_dimradius#0|Raven, --set currentside#24 represents#-M0zwivw5FqSevoaKw8G bar2_value#1 bar2_Max#1 scale#1g light_radius#5 light_dimradius#0|Reef Shark, --set currentside#25 #represents#-M0zwp4pcOrqVjRfUspB bar2_value#22 bar2_Max#22 scale#1g light_radius#30 light_dimradius#|Riding Horse, --set currentside#26 represents#-M0zwytr7ZwUKHDy4r29 bar2_value#13 bar2_Max#13 scale#2g light_radius#5 light_dimradius#0|Scorpion, --set currentside#45 represents#-M0zx46b2_WZ11eegbwp bar2_value#1 bar2_Max#1 scale#1g light_radius#10 light_dimradius#|Sea Horse, --set currentside#41 represents#-M0zxA2ZSK9e8qpfiCF_ bar2_value#1 bar2_Max#1 scale#1g light_radius#5 light_dimradius#0|Tiger, --set currentside#46 represents#-M0zxI0kaFymkUyfaodF bar2_value#37 bar2_Max#37 scale#2g light_radius#60 light_dimradius#0|Vulture, --set currentside#47 represents#-M0zxNiFgFygn91tu8tE bar2_value#5 bar2_Max#5 scale#1g light_radius#5 light_dimradius#0|Weasel, --set currentside#29 represents#-M0zxTHYrLeySaw5TIbm bar2_value#1 bar2_Max#1 scale#1g light_radius#5 light_dimradius#0|Wolf, --set currentside#30 represents#-M0zxYhHGG13S9LKl0KD bar2_value#11 bar2_Max#11 scale#1g light_radius#5 light_dimradius#0} #Wild-Shape-Back !token-mod --set bar2_value| currentside|1 scale|1g light_radius|60 light_dimradius|0 represents|-LS1cVywaYH1gGpoodzO !ammo -LS1cVywaYH1gGpoodzO class_resource -1 Wild Shape #WS-Attack !power {{ --name|@{selected|character_name} --whisper|self --format|tenerife --tokenid|@{selected|token_id} --npc_attribute_summary|@{selected|character_id} --npc_qualities_summary|@{selected|character_id} --npc_skills_summary|@{selected|character_id} --npc_action_list|@{selected|character_id} --npc_reaction_list|@{selected|character_id} --npc_legendaryaction_list|@{selected|character_id} --npc_trait_list|@{selected|character_id} }} This is quite seamless from her POV and it takes the responsibilities off of me to change her token and such. This will work very well. . . at least until someone come sup with something even better. lol.
The Devilish DM said: Okay, I have something really nice working here.  I ended up doing the character sheets but archiving them as @Patrick suggested. That does help quite a bit. I then have 3 macros that my druid has control of.  #Wild-Shape !token-mod ?{Choose Shape|Ape, --set currentside#2 represents#-LjDHODD99NfABWziFHh bar2_value#19 bar2_Max#19 scale#1g light_radius#5 light_dimradius#0|Babboon, --set currentside#31 represents#-M0zs61kDlD8jsSwDHSm bar2_value#3 bar2_Max#3 scale#1g light_radius#5 light_dimradius#0|Badger, --set currentside#3 represents#-LcJK6Cxq5Y4daHBCaAR bar2_value#3 bar2_Max#3 scale#1g light_radius#30 light_dimradius#0|Bat, --set currentside#4 represents#-LcJWMERnOam_dM55wNr bar2_value#1 bar2_Max#1 scale#1g light_radius#60 light_dimradius#|Black Bear, --set currentside#32 represents#-M0zsIj9VHx8ojFzrpJ6 bar2_value#19 bar2_Max#19 scale#2g|Boar, --set currentside#33 represents#-M0zsORfniBW2HUN_SQa bar2_value#11 bar2_Max#11 scale#1g light_radius#5 light_dimradius#0|Brown Bear, --set currentside#32 represents#-M0zsanm2Ss8reVslDCI bar2_value#34 bar2_Max#34 scale#2g light_radius#5 light_dimradius#0|Camel, --set currentside#7 represents#-Lmm4imT00gb-85iv-nD bar2_value#15 bar2_Max#15 scale#2g light_radius#5 light_dimradius#0|Cat, --set currentside#5 represents#-LcJK9RUorcNAR2a0dA3 bar2_value#2 bar2_Max#2 scale#1g light_radius#5 light_dimradius#0|Constrictor Snake, --set currentside#6 represents#-LjDHQmC6eYhIkmSq76W bar2_value#13 bar2_Max#13 scale#2g light_radius#30 light_dimradius#|Crab, --set currentside#34 represents#-M0zt0E5KZ8lvWioZCKH bar2_value#2 bar2_Max#2 scale#1g light_radius#10 light_dimradius#|Crocodile, --set currentside#8 represents#-LcJW8aSmUEzH1d5XwbM bar2_value#19 bar2_Max#19 scale#2g light_radius#30 light_dimradius#|Deer, --set currentside#9 represents#-LcJKE0Xm-LiH6sCmQZS bar2_value#4 bar2_Max#4 scale#2g light_radius#5 light_dimradius#0|Draft Horse, --set currentside#10 represents#-LcJKtwyC_QjXAZ2WuHJ bar2_value#19 bar2_Max#19 scale#2g light_radius#5 light_dimradius#0|Eagle, --set currentside#35 represents#-M0ztPmgMg7KzcaUNItU bar2_value#3 bar2_Max#3 scale#0.5g light_radius#5 light_dimradius#0|Elk, --set currentside#11 represents#-LcJKwwuSrFx-1ubae4u bar2_value#13 bar2_Max#13 scale#2g light_radius#5 light_dimradius#0|Frog, --set currentside#12 represents#-M0ztWnyx8QY6ZAg26ve bar2_value#1 bar2_Max#1 scale#1g light_radius#30 light_dimradius#0|Giant Badger, --set currentside#3 represents#-LeNTppIN3rT79fy0Wro bar2_value#13 bar2_Max#13 scale#2g light_radius#30 light_dimradius#0|Giant Bat, --set currentside#4 represents#-M0zth-UjBnFl-6t6bCD bar2_value#22 bar2_Max#22 scale#2g light_radius#60 light_dimradius#|Giant Centipede, --set currentside#36 represents#-M0ztnW8Gb6_IdnDULuZ bar2_value#4 bar2_Max#4 scale#1g light_radius#30 light_dimradius#|Giant Crab, --set currentside#34 represents#-M0zttRJ23CwCfiAyF_M bar2_value#13 bar2_Max#13 scale#2g light_radius#30 light_dimradius#|Giant Eagle, --set currentside#35 represents#-M0zu-HZ6dXzcUuVvHfM bar2_value#26 bar2_Max#26 scale#2g light_radius#5 light_dimradius#0|Giant Frog, --set currentside#12 represents#-LcJSViBSBBnDwoDfPpq bar2_value#18 bar2_Max#18 scale#2g light_radius#30 light_dimradius#0|Giant Goat, --set currentside#37 represents#-M0uQYsuGf5_OYRs614x bar2_value#19 bar2_Max#19 scale#2g light_radius#5 light_dimradius#0|Giant Hyena, --set currentside#38 represents#-M0zuByCH7Ce6jhhEwwh bar2_value#45 bar2_Max#45 scale#2g light_radius#5 light_dimradius#0|Giant Lizard, --set currentside#39 represents#-M0zuIR9VRCXExychieI bar2_value#19 bar2_Max#19 scale#2g light_radius#30 light_dimradius#0|Giant Octopus, --set currentside#13 represents#-Le4vaMn1UziiRVNUSMh bar2_value#52 bar2_Max#52 scale#2g light_radius#30 light_dimradius#0|Giant Owl, --set currentside#19 represents#-LcJW_YbnMxE6xhL16ft bar2_value#19 bar2_Max#19 scale#2g light_radius#120 light_dimradius#0|Giant Poisonous Snake, --set currentside#40 represents#-M0zuYsGJd6eRGrmOEyD bar2_value#11 bar2_Max#11 scale#1g light_radius#30 light_dimradius#0|Giant Rat, --set currentside#23 represents#-M0zufHAJRleZO0nnxr1 bar2_value#7 bar2_Max#7 scale#2g light_radius#60 light_dimradius#0|Giant Sea Horse, --set currentside#41 represents#-M0zul3GTn0gqTQAH9S9 represents# bar2_value#16 bar2_Max#16scale#2g light_radius#5 light_dimradius#0|Giant Toad, --set currentside#14 represents#-LcJWlyypZ5nnilQWbJd bar2_value#39 bar2_Max#39scale#2g light_radius#30 light_dimradius#0|Giant Vulture, --set currentside#48 represents#-M0zvE2AIiXZgZmtSNki bar2_value#22 bar2_Max#22 scale#2g light_radius#5 light_dimradius#0|Giant Wasp, --set currentside#15 represents#-LcJWfpYCQ6Xt8BA_Jl5 bar2_value#13 bar2_Max#13 scale#1g light_radius#5 light_dimradius#0|Giant Weasel, --set currentside#29 represents#-M0zvPoLN5x63IImscAF bar2_value#9 bar2_Max#9 scale#2g light_radius#60 light_dimradius#0|Giant Wolf Spider, --set currentside#42 represents#-M0zvUzXrYq8MXbiv-Kh bar2_value#11 bar2_Max#11 scale#2g light_radius#30 light_dimradius#0|Goat, --set currentside#37 represents#-M0zvabKjevdb3T9LLtP bar2_value#4 bar2_Max#4 scale#1g light_radius#5 light_dimradius#0|Hawk, --set currentside#43 represents#-M0zvgYCzDJKDtf2C6cI bar2_value#1 bar2_Max#1 scale#1g light_radius#5 light_dimradius#0|Hyena, --set currentside#38 represents#-M0zvmyLQcOVsoLx2dH2 bar2_value#5 bar2_Max#5 scale#1g light_radius#5 light_dimradius#0|Jackal, --set currentside#16 represents#-LcJKNEFy2-4jF5tJmtG bar2_value#3 bar2_Max#3 scale#1g light_radius#5 light_dimradius#0|Lion, --set currentside#44 represents#-M0zvuCfy2wZQY9twDx9 bar2_value#26 bar2_Max#26 scale#2g light_radius#5 light_dimradius#0|Lizard, --set currentside#17 represents#-M0zw01EcvGJkKqYd78M bar2_value#2 bar2_Max#2 scale#1g light_radius#30 light_dimradius#0|Mastiff, --set currentside#18 represents#-LcJKnENzOyS_6_P6Osn bar2_value#5 bar2_Max#5 scale#1g light_radius#5 light_dimradius#0|Octopus, --set currentside#13 represents#-Le4vcrSIN8y6b9NYZ8x bar2_value#3 bar2_Max#3 scale#1g light_radius#30 light_dimradius#0|Owl, --set currentside#19 represents#-M0zw9QvFCq0q_Jh2elM bar2_value#1 bar2_Max#1 scale#1g light_radius#120 light_dimradius#0|Panther, --set currentside#20 represents#-LgAf0sywKlKRGeMfVuh bar2_value#13 bar2_Max#13 scale#1g light_radius#5 light_dimradius#0|Poisonous Snake, --set currentside#21 represents#-M0zwLV37X3uJWBkhBoQ bar2_value#2 bar2_Max#2 scale#1g light_radius#10 light_dimradius#|Pony, --set currentside#22 represents#-M0zwQTRdumHwCjhUtWc bar2_value#11 bar2_Max#11 scale#1g light_radius#5 light_dimradius#0|Quipper, --set currentside#28 represents#M0zwWVbWQd1qiY05xhk bar2_value#1 bar2_Max#1 scale#0.5g light_radius#60 light_dimradius#0|Rat, --set currentside#23 represents#-M0zwbSn99ElJGEZjjYY bar2_value#1 bar2_Max#1 scale#1g light_radius#30 light_dimradius#0|Raven, --set currentside#24 represents#-M0zwivw5FqSevoaKw8G bar2_value#1 bar2_Max#1 scale#1g light_radius#5 light_dimradius#0|Reef Shark, --set currentside#25 #represents#-M0zwp4pcOrqVjRfUspB bar2_value#22 bar2_Max#22 scale#1g light_radius#30 light_dimradius#|Riding Horse, --set currentside#26 represents#-M0zwytr7ZwUKHDy4r29 bar2_value#13 bar2_Max#13 scale#2g light_radius#5 light_dimradius#0|Scorpion, --set currentside#45 represents#-M0zx46b2_WZ11eegbwp bar2_value#1 bar2_Max#1 scale#1g light_radius#10 light_dimradius#|Sea Horse, --set currentside#41 represents#-M0zxA2ZSK9e8qpfiCF_ bar2_value#1 bar2_Max#1 scale#1g light_radius#5 light_dimradius#0|Tiger, --set currentside#46 represents#-M0zxI0kaFymkUyfaodF bar2_value#37 bar2_Max#37 scale#2g light_radius#60 light_dimradius#0|Vulture, --set currentside#47 represents#-M0zxNiFgFygn91tu8tE bar2_value#5 bar2_Max#5 scale#1g light_radius#5 light_dimradius#0|Weasel, --set currentside#29 represents#-M0zxTHYrLeySaw5TIbm bar2_value#1 bar2_Max#1 scale#1g light_radius#5 light_dimradius#0|Wolf, --set currentside#30 represents#-M0zxYhHGG13S9LKl0KD bar2_value#11 bar2_Max#11 scale#1g light_radius#5 light_dimradius#0} #Wild-Shape-Back !token-mod --set bar2_value| currentside|1 scale|1g light_radius|60 light_dimradius|0 represents|-LS1cVywaYH1gGpoodzO !ammo -LS1cVywaYH1gGpoodzO class_resource -1 Wild Shape #WS-Attack !power {{ --name|@{selected|character_name} --whisper|self --format|tenerife --tokenid|@{selected|token_id} --npc_attribute_summary|@{selected|character_id} --npc_qualities_summary|@{selected|character_id} --npc_skills_summary|@{selected|character_id} --npc_action_list|@{selected|character_id} --npc_reaction_list|@{selected|character_id} --npc_legendaryaction_list|@{selected|character_id} --npc_trait_list|@{selected|character_id} }} This is quite seamless from her POV and it takes the responsibilities off of me to change her token and such. This will work very well. . . at least until someone come sup with something even better. lol. This is amazing, thank you! One problem I'm running into though is that my token bars do not seem to change properly. When I use the macros the token changes shape, but the bars start reading incorrectly ie. they don't switch properly to the monster stats in the same format I have them on the token for the PC (I currently have them set to hp, ac, none). Am I doing something wrong? Cheers!
That has to do with which bar (#1, 2, 3) that you have set up for those values.  I’d bet that you just need to figure out which bars the macros are using and change your standard to use those bars.  If the colors are wrong, you can change them in the settings tab from within your game.
The Devilish DM said: Okay, I have something really nice working here.  I ended up doing the character sheets but archiving them as @Patrick suggested. That does help quite a bit. I then have 3 macros that my druid has control of.  #Wild-Shape !token-mod ?{Choose Shape|Ape, --set currentside#2 represents#-LjDHODD99NfABWziFHh bar2_value#19 bar2_Max#19 scale#1g light_radius#5 light_dimradius#0|Babboon, --set currentside#31 represents#-M0zs61kDlD8jsSwDHSm bar2_value#3 bar2_Max#3 scale#1g light_radius#5 light_dimradius#0|Badger, --set currentside#3 represents#-LcJK6Cxq5Y4daHBCaAR bar2_value#3 bar2_Max#3 scale#1g light_radius#30 light_dimradius#0|Bat, --set currentside#4 represents#-LcJWMERnOam_dM55wNr bar2_value#1 bar2_Max#1 scale#1g light_radius#60 light_dimradius#|Black Bear, --set currentside#32 represents#-M0zsIj9VHx8ojFzrpJ6 bar2_value#19 bar2_Max#19 scale#2g|Boar, --set currentside#33 represents#-M0zsORfniBW2HUN_SQa bar2_value#11 bar2_Max#11 scale#1g light_radius#5 light_dimradius#0|Brown Bear, --set currentside#32 represents#-M0zsanm2Ss8reVslDCI bar2_value#34 bar2_Max#34 scale#2g light_radius#5 light_dimradius#0|Camel, --set currentside#7 represents#-Lmm4imT00gb-85iv-nD bar2_value#15 bar2_Max#15 scale#2g light_radius#5 light_dimradius#0|Cat, --set currentside#5 represents#-LcJK9RUorcNAR2a0dA3 bar2_value#2 bar2_Max#2 scale#1g light_radius#5 light_dimradius#0|Constrictor Snake, --set currentside#6 represents#-LjDHQmC6eYhIkmSq76W bar2_value#13 bar2_Max#13 scale#2g light_radius#30 light_dimradius#|Crab, --set currentside#34 represents#-M0zt0E5KZ8lvWioZCKH bar2_value#2 bar2_Max#2 scale#1g light_radius#10 light_dimradius#|Crocodile, --set currentside#8 represents#-LcJW8aSmUEzH1d5XwbM bar2_value#19 bar2_Max#19 scale#2g light_radius#30 light_dimradius#|Deer, --set currentside#9 represents#-LcJKE0Xm-LiH6sCmQZS bar2_value#4 bar2_Max#4 scale#2g light_radius#5 light_dimradius#0|Draft Horse, --set currentside#10 represents#-LcJKtwyC_QjXAZ2WuHJ bar2_value#19 bar2_Max#19 scale#2g light_radius#5 light_dimradius#0|Eagle, --set currentside#35 represents#-M0ztPmgMg7KzcaUNItU bar2_value#3 bar2_Max#3 scale#0.5g light_radius#5 light_dimradius#0|Elk, --set currentside#11 represents#-LcJKwwuSrFx-1ubae4u bar2_value#13 bar2_Max#13 scale#2g light_radius#5 light_dimradius#0|Frog, --set currentside#12 represents#-M0ztWnyx8QY6ZAg26ve bar2_value#1 bar2_Max#1 scale#1g light_radius#30 light_dimradius#0|Giant Badger, --set currentside#3 represents#-LeNTppIN3rT79fy0Wro bar2_value#13 bar2_Max#13 scale#2g light_radius#30 light_dimradius#0|Giant Bat, --set currentside#4 represents#-M0zth-UjBnFl-6t6bCD bar2_value#22 bar2_Max#22 scale#2g light_radius#60 light_dimradius#|Giant Centipede, --set currentside#36 represents#-M0ztnW8Gb6_IdnDULuZ bar2_value#4 bar2_Max#4 scale#1g light_radius#30 light_dimradius#|Giant Crab, --set currentside#34 represents#-M0zttRJ23CwCfiAyF_M bar2_value#13 bar2_Max#13 scale#2g light_radius#30 light_dimradius#|Giant Eagle, --set currentside#35 represents#-M0zu-HZ6dXzcUuVvHfM bar2_value#26 bar2_Max#26 scale#2g light_radius#5 light_dimradius#0|Giant Frog, --set currentside#12 represents#-LcJSViBSBBnDwoDfPpq bar2_value#18 bar2_Max#18 scale#2g light_radius#30 light_dimradius#0|Giant Goat, --set currentside#37 represents#-M0uQYsuGf5_OYRs614x bar2_value#19 bar2_Max#19 scale#2g light_radius#5 light_dimradius#0|Giant Hyena, --set currentside#38 represents#-M0zuByCH7Ce6jhhEwwh bar2_value#45 bar2_Max#45 scale#2g light_radius#5 light_dimradius#0|Giant Lizard, --set currentside#39 represents#-M0zuIR9VRCXExychieI bar2_value#19 bar2_Max#19 scale#2g light_radius#30 light_dimradius#0|Giant Octopus, --set currentside#13 represents#-Le4vaMn1UziiRVNUSMh bar2_value#52 bar2_Max#52 scale#2g light_radius#30 light_dimradius#0|Giant Owl, --set currentside#19 represents#-LcJW_YbnMxE6xhL16ft bar2_value#19 bar2_Max#19 scale#2g light_radius#120 light_dimradius#0|Giant Poisonous Snake, --set currentside#40 represents#-M0zuYsGJd6eRGrmOEyD bar2_value#11 bar2_Max#11 scale#1g light_radius#30 light_dimradius#0|Giant Rat, --set currentside#23 represents#-M0zufHAJRleZO0nnxr1 bar2_value#7 bar2_Max#7 scale#2g light_radius#60 light_dimradius#0|Giant Sea Horse, --set currentside#41 represents#-M0zul3GTn0gqTQAH9S9 represents# bar2_value#16 bar2_Max#16scale#2g light_radius#5 light_dimradius#0|Giant Toad, --set currentside#14 represents#-LcJWlyypZ5nnilQWbJd bar2_value#39 bar2_Max#39scale#2g light_radius#30 light_dimradius#0|Giant Vulture, --set currentside#48 represents#-M0zvE2AIiXZgZmtSNki bar2_value#22 bar2_Max#22 scale#2g light_radius#5 light_dimradius#0|Giant Wasp, --set currentside#15 represents#-LcJWfpYCQ6Xt8BA_Jl5 bar2_value#13 bar2_Max#13 scale#1g light_radius#5 light_dimradius#0|Giant Weasel, --set currentside#29 represents#-M0zvPoLN5x63IImscAF bar2_value#9 bar2_Max#9 scale#2g light_radius#60 light_dimradius#0|Giant Wolf Spider, --set currentside#42 represents#-M0zvUzXrYq8MXbiv-Kh bar2_value#11 bar2_Max#11 scale#2g light_radius#30 light_dimradius#0|Goat, --set currentside#37 represents#-M0zvabKjevdb3T9LLtP bar2_value#4 bar2_Max#4 scale#1g light_radius#5 light_dimradius#0|Hawk, --set currentside#43 represents#-M0zvgYCzDJKDtf2C6cI bar2_value#1 bar2_Max#1 scale#1g light_radius#5 light_dimradius#0|Hyena, --set currentside#38 represents#-M0zvmyLQcOVsoLx2dH2 bar2_value#5 bar2_Max#5 scale#1g light_radius#5 light_dimradius#0|Jackal, --set currentside#16 represents#-LcJKNEFy2-4jF5tJmtG bar2_value#3 bar2_Max#3 scale#1g light_radius#5 light_dimradius#0|Lion, --set currentside#44 represents#-M0zvuCfy2wZQY9twDx9 bar2_value#26 bar2_Max#26 scale#2g light_radius#5 light_dimradius#0|Lizard, --set currentside#17 represents#-M0zw01EcvGJkKqYd78M bar2_value#2 bar2_Max#2 scale#1g light_radius#30 light_dimradius#0|Mastiff, --set currentside#18 represents#-LcJKnENzOyS_6_P6Osn bar2_value#5 bar2_Max#5 scale#1g light_radius#5 light_dimradius#0|Octopus, --set currentside#13 represents#-Le4vcrSIN8y6b9NYZ8x bar2_value#3 bar2_Max#3 scale#1g light_radius#30 light_dimradius#0|Owl, --set currentside#19 represents#-M0zw9QvFCq0q_Jh2elM bar2_value#1 bar2_Max#1 scale#1g light_radius#120 light_dimradius#0|Panther, --set currentside#20 represents#-LgAf0sywKlKRGeMfVuh bar2_value#13 bar2_Max#13 scale#1g light_radius#5 light_dimradius#0|Poisonous Snake, --set currentside#21 represents#-M0zwLV37X3uJWBkhBoQ bar2_value#2 bar2_Max#2 scale#1g light_radius#10 light_dimradius#|Pony, --set currentside#22 represents#-M0zwQTRdumHwCjhUtWc bar2_value#11 bar2_Max#11 scale#1g light_radius#5 light_dimradius#0|Quipper, --set currentside#28 represents#M0zwWVbWQd1qiY05xhk bar2_value#1 bar2_Max#1 scale#0.5g light_radius#60 light_dimradius#0|Rat, --set currentside#23 represents#-M0zwbSn99ElJGEZjjYY bar2_value#1 bar2_Max#1 scale#1g light_radius#30 light_dimradius#0|Raven, --set currentside#24 represents#-M0zwivw5FqSevoaKw8G bar2_value#1 bar2_Max#1 scale#1g light_radius#5 light_dimradius#0|Reef Shark, --set currentside#25 #represents#-M0zwp4pcOrqVjRfUspB bar2_value#22 bar2_Max#22 scale#1g light_radius#30 light_dimradius#|Riding Horse, --set currentside#26 represents#-M0zwytr7ZwUKHDy4r29 bar2_value#13 bar2_Max#13 scale#2g light_radius#5 light_dimradius#0|Scorpion, --set currentside#45 represents#-M0zx46b2_WZ11eegbwp bar2_value#1 bar2_Max#1 scale#1g light_radius#10 light_dimradius#|Sea Horse, --set currentside#41 represents#-M0zxA2ZSK9e8qpfiCF_ bar2_value#1 bar2_Max#1 scale#1g light_radius#5 light_dimradius#0|Tiger, --set currentside#46 represents#-M0zxI0kaFymkUyfaodF bar2_value#37 bar2_Max#37 scale#2g light_radius#60 light_dimradius#0|Vulture, --set currentside#47 represents#-M0zxNiFgFygn91tu8tE bar2_value#5 bar2_Max#5 scale#1g light_radius#5 light_dimradius#0|Weasel, --set currentside#29 represents#-M0zxTHYrLeySaw5TIbm bar2_value#1 bar2_Max#1 scale#1g light_radius#5 light_dimradius#0|Wolf, --set currentside#30 represents#-M0zxYhHGG13S9LKl0KD bar2_value#11 bar2_Max#11 scale#1g light_radius#5 light_dimradius#0} #Wild-Shape-Back !token-mod --set bar2_value| currentside|1 scale|1g light_radius|60 light_dimradius|0 represents|-LS1cVywaYH1gGpoodzO !ammo -LS1cVywaYH1gGpoodzO class_resource -1 Wild Shape #WS-Attack !power {{ --name|@{selected|character_name} --whisper|self --format|tenerife --tokenid|@{selected|token_id} --npc_attribute_summary|@{selected|character_id} --npc_qualities_summary|@{selected|character_id} --npc_skills_summary|@{selected|character_id} --npc_action_list|@{selected|character_id} --npc_reaction_list|@{selected|character_id} --npc_legendaryaction_list|@{selected|character_id} --npc_trait_list|@{selected|character_id} }} This is quite seamless from her POV and it takes the responsibilities off of me to change her token and such. This will work very well. . . at least until someone come sup with something even better. lol. Bit of a necro here, sorry. I really loved the execution of this macro but I seem to be having some issues getting it to function so I thought I would reach out and see if you minded helping me out. #Wild-Shape seems to be only changing the health and size values of the token, while leaving the AC, token picture, character stats etc the exact same. #Wild-Shape-Back is only changing the size of the token back while leaving the health the same as the wild shape from the above macro #WS-Attack seems to not do anything at all for me, strangely enough. Thank you