Steven B. said: Hi all. Does the 5e character sheet support the cleric feature "Disciple of Life" in an automated fashion? (Whenever you use a spell of 1st level or higher to restore HP to a creature, the creature regains additional HP = to 2+the spell's level.) The character sheet itself supports VERY LITTLE animation; you need a pro sub to gain access to APIs, which provide all the animation you're looking for at a cost of a high learning curve. If you're not into programming Javascript/ understanding functions and operands, it's cheaper to just do things manually. Still, I think what you're looking for is a macro. That is some reworking/ retooling of every heal spell your Life Domain character(s) ha(s/ve). First off, if you do this, you have to make certain Charactermancer does not UNDO it. To do that, you have to consider 2 things: 1. You need to rename the spell. In the below example, for cure wounds, we will rename the spell "cure wounds (Disciple of Life)". That will prevent charactermancer from overwriting the spell 2. Charactermancer will not recognize that you've reworked a chosen spell. So one of two things will happen: a. It will think a spell was deleted, and ask you to replace the spell with a new one (because you no longer chose cure wounds, according to it's line of thinking). This means, at a level you might only have gained one spell to memorize, it's asking for two. If that's the case - you need to repick Cure Wounds, and delete the Vanilla version again after charactermancer runs. Keep this behavior in mind. It's a long way to 20, and you'll need to do this EVERY TIME you use Charactermancer to level! b. It will know it doesn't have the previously chosen version of Cure Wounds and automatically add it back again. That's fine. Just delete the Vanilla version, each time you level. Problem solved. Ok - so you're still with me? Good. Stay off the lawn though. Grass seed is expensive. And I don't validate parking. Let's do this! 1. Know where to put the info. In this case you will be breaking up the descriptive text of the spell to insert an additional line. Depending on where in the info dump fed to chat the appropriate line falls, this may work. But if the line you need comes after the description, it won't. Output to chat will always show the LAST entry when a line is duplicated. The other thing to know about this is that the player needs to know to never mess with the gobbledygook you've entered in their descriptive text! "Well it looks weird when I look at it!" YES ... IT WILL! This is the code we are working with for OGL from a Firbolg I just birthed named TesterCleric. Isn't he cute? No no, that's his no no square - no touch!: @{TesterCleric|wtype}&{template:atkdmg} {{mod=-}} {{rname=Cure Wounds}} {{r1=[[0d20cs>20]]}} {{r2=[[0d20cs>20]]}} 0 {{range=Touch}} {{damage=1}} {{dmg1flag=1}} {{dmg1=[[1d8 + 3[WIS]]]}} {{dmg1type=Healing}} 0 {{dmg2=[[0]]}} {{dmg2type=}} {{crit1=[[1d8[CRIT]]]}} {{crit2=[[0[CRIT]]]}} 0 {{desc=}} {{hldmg=[[(1*?{Cast at what level?|Level 1,0|Level 2,1|Level 3,2|Level 4,3|Level 5,4|Level 6,5|Level 7,6|Level 8,7|Level 9,8})d8]]}} {{hldmgcrit=[[(1*?{Cast at what level?|Level 1,0|Level 2,1|Level 3,2|Level 4,3|Level 5,4|Level 6,5|Level 7,6|Level 8,7|Level 9,8})d8]]}} {{spelllevel=1}} {{innate=}} {{globalattack=@{TesterCleric|global_attack_mod}}} {{globaldamage=[[0]]}} {{globaldamagecrit=[[0]]}} {{globaldamagetype=@{TesterCleric|global_damage_mod_type}}} ammo= {{spelldesc_link=[Show Spell Description](~-MqtVAC8ea1X7KqET6wf|repeating_attack_-MqtW4cGRPrTHfFJdmns_spelldesc_link)}} @{TesterCleric|charname_output} So all of the above? It's Ok (will work), because: {{dmg1=[[1d8 + 3[WIS]]]}} Comes before {{desc=}} Keep another thing in mind, too. We really need something else from this; {{hldmg=[[(1*?{Cast at what level?|Level 1,0|Level 2,1|Level 3,2|Level 4,3|Level 5,4|Level 6,5|Level 7,6|Level 8,7|Level 9,8})d8]]}} That's a level query. We really need to know how to duplicate that and make use of it going forward! 2. Next, we need to know what Disciple of Life states: Also starting at 1st level, your healing spells are more effective. Whenever you use a spell of 1st level or higher to restore hit points to a creature, the creature regains additional hit points equal to 2 + the spell's level. And turn that into code that works: [[2+(?{Cast at what level?|Level 1,0|Level 2,1|Level 3,2|Level 4,3|Level 5,4|Level 6,5|Level 7,6|Level 8,7|Level 9,8}+1)]] Translation? 2 + ( ( Query Spell level - 1 ) + 1 ) The Query we are using that is already in the vanilla version of the spell wants to deduct a level by reducing it 1 level, because it's in the higher level damage area. We want to reuse it, so we allow it to do its thing, and add the level back in. Also, add in the extra two at the beginning. Following me so far? 3. But now we need it to work. In the description box for the "Cure Wounds: Disciple of Life" spell, place the following at the end of anything there: ~~~Spoiler Alert: BELOW IS WHAT YOU'VE WAITED FOR, if tl;dr~~~ }}{{dmg1= [[1d8 + @{wisdom_mod} [WIS] + [[2+(?{Cast at what level?|Level 1,0|Level 2,1|Level 3,2|Level 4,3|Level 5,4|Level 6,5|Level 7,6|Level 8,7|Level 9,8}+1)]][Disciple of Life] ]]}} {{ So - what's happening there? the first double brackets ( }} ) end the desc text box and send it back to the chat code and called in a replacement line (that line was already rolled before in the macro - we're replacing it though. You will see two lines of ( {{dmg1= ) if you cast and hit the up arrow in your chat box. But only the second one outputs to the chat window, which is what you want. IMO, the desc text should always be the last thing in every roll template that OGL uses, so that you can always do tricks like this easily. you changed the wisdom modifier from static (3) to dynamic ( @{wisdom_mod} ), looking at the current value rather than what it was at macro coding (so level ups actually mean something) you've coded the whole query and math of Disciple of Life into the amount healed + [[2+(?{Cast at what level?|Level 1,0|Level 2,1|Level 3,2|Level 4,3|Level 5,4|Level 6,5|Level 7,6|Level 8,7|Level 9,8}+1)]] , and named it for the rollover text. [Disiple of Life] You've ended and created a blank chat item ( }}{{ ), as the original desc box will want to code in it's own }}. In your review, you will find after the second dmg1: ..}} {{}} {{... which doesn't even output anything. Voila! Cast the spell now! (Third Level Casting) Now, your Cure Wounds Attack will say something that doesn't include the Disciple of Life in it. While you 'could' put the code in directly to the damage section of the attack and then show it, it's not a good idea to enter a string that long into that area, especially when it concatenates other data behind the scenes, effectively undoing your macro by doing it there. Technically - you could enter 0d0 in that section, it will get replaced anyway ... but - even wrongly shown, it isn't hurting anyone. Leave it Alone. Always ask for consent before touching ANYTHING! I'm watching you! So your next question will be the 6th level feature, Blessed Healer , right? Easy-Peezee, gotcha covered. Description of feature: Beginning at 6th level, the healing spells you cast on others heal you as well. When you cast a spell of 1st level or higher that restores hit points to a creature other than you, you regain hit points equal to 2 + the spell’s level. It's the same code to use again! This one you'll add in the box description itself (no chat code breaks here). I'd add it to the top of the description area, directly in the attack section: **I heal for [[2+((?{Cast at what level?|Level 1,0|Level 2,1|Level 3,2|Level 4,3|Level 5,4|Level 6,5|Level 7,6|Level 8,7|Level 9,8})+1)[Blessed Healer]]] HP as I cast this spell** ... vanilla code descriptive text of cure wounds here, if you so choose ... And that 3rd level casting looks like this! Ain't it purdy? Well - I know I was your hero to this point ... BUT ... Your lucky cleric and awesome campaign leveled him to 17, right? Dang. The Heroes Feast is over. So here is the problem I mentioned before - the order of parsing. We can easily replace things that happen BEFORE the desc box is outputted. Sadly ... not after (as our modifications are replaced instead in that case). Sure - I know the code and can change the level 1 portion of it easily - change the d in 1d8 to a multiplier ... 1*8 ... and make sure there still is a die roll faked in (as output depends on die rolls - no die roll, no output ... so, strangely, this works) and add + 0d0 +, like this }}{{dmg1=[[1 * 8 + 0d0 + @{wisdom_mod}[WIS] + [[2+(?{Cast at what level?|Level 1,0|Level 2,1|Level 3,2|Level 4,3|Level 5,4|Level 6,5|Level 7,6|Level 8,7|Level 9,8}+1)]][Disciple of Life]]]}}{{ For our level 17 feature, Supreme Healing : Starting at 17th level, when you would normally roll one or more dice to restore hit points with a spell, you instead use the highest number possible for each die. For example, instead of restoring 2d6 hit points to a creature, you restore 12. Buuuuuuuut ... when we go to do that with the higher level damage fields ... it never shows anything ... because we were first in line, and the chat parser sees only last in line. It's like the DMV woman waiting to go home for the day ... she isn't paying attention to you, she wants the guard to lock the main entrance and let you and everyone else out the side door so she can clock out... }}{{dmg1=[[1*8 + 0d0 + @{wisdom_mod}[WIS] + [[2+(?{Cast at what level?|Level 1,0|Level 2,1|Level 3,2|Level 4,3|Level 5,4|Level 6,5|Level 7,6|Level 8,7|Level 9,8}+1)]][Disciple of Life]]]}} {{hldmg=[[(1*?{Cast at what level?|Level 1,0|Level 2,1|Level 3,2|Level
4,3|Level 5,4|Level 6,5|Level 7,6|Level 8,7|Level 9,8})*8+0d0]]} {{ Again - in every roll template, {{desc=}} should be the LAST in order of parsing to make macro work easier on us all. But in this case, following the desc field are the following fields (in bold, generated behind the scenes from the roll template): {{desc=**I heal for [[2+((?{Cast at what level?|Level 1,0|Level 2,1|Level 3,2|Level 4,3|Level 5,4|Level 6,5|Level 7,6|Level 8,7|Level 9,8})+1)[Blessed Healer]]] HP as I cast this spell** }}{{dmg1=[[1*8 + 0d0 + @{TesterCleric|wisdom_mod}[WIS] + [[2+(?{Cast at what level?|Level 1,0|Level 2,1|Level 3,2|Level 4,3|Level 5,4|Level 6,5|Level 7,6|Level 8,7|Level 9,8}+1)]][Disciple of Life]]]}}{{}} {{hldmg=[[(1*?{Cast at what level?|Level 1,0|Level 2,1|Level 3,2|Level 4,3|Level 5,4|Level 6,5|Level 7,6|Level 8,7|Level 9,8})d8]]}} {{hldmgcrit=[[(1*?{Cast at what level?|Level 1,0|Level 2,1|Level 3,2|Level 4,3|Level 5,4|Level 6,5|Level 7,6|Level 8,7|Level 9,8})d8]]}} {{spelllevel=1}} {{innate=}} {{globalattack=@{TesterCleric|global_attack_mod}}} {{globaldamage=[[0]]}} {{globaldamagecrit=[[0]]}} {{globaldamagetype=@{TesterCleric|global_damage_mod_type}}} ammo= {{spelldesc_link=[Show Spell Description](~-MqtVAC8ea1X7KqET6wf|repeating_attack_-MqtW4cGRPrTHfFJdmns_spelldesc_link)}} @{TesterCleric|charname_output} You can't replace anything in the bold text from the sheet directly, as it follows after the desc block. At that point, you have to recreate the spell as a Token Macro and tell it verbatim what to do. It suxx, but I didn't program this sheet. It's the only work-around you have. ~~~~~~~~~ Were it up to me, I wouldn't even HAVE the global and higher level damage adds. Everything could be figured from one roll by macro. It's aweful weird when that Shaman (Barbarian Druid) has decided to hold back his rage but forgot to uncheck the rage box. And now he hits me with a Cure Wounds that includes +2 Rage damage? "Seriously - I know it's a touch spell, but you don't have to punch me to make me feel better! Does Raise dead involve decapitation?!!" And when he upcast it, I should have one number - why do this on a computer if I can't depend on the computer doing all the maths for me? Tchh! Really??!!! C'mon programmers - let's get it together! The {{hldmg=}} field could be something in the backend that gets added to the {{dmg1=}} output in chat, as the Ability Modifiers get added beyond the damage entered. Same thing for Global Modifiers, which could be refined better - knowing the difference between: Melee Attacks Ranged Attacks Spell Melee Attacks Spell Ranged Attacks Healing ... and only output in the appropriate strings. "Shaman! Stop Squeezing me! It's not funny! It hurts! What are you so angry about anyway? Fine! I'll do the healing, you hit the kobolds! EEEEESH!" ( No one ever wants to play the healer in this game... Didn't the DM say his girlfriend was gonna join us? .... hmmmm .... I think I have a suggestion on what class she should play ... Life Cleric ... ) I know ... I know ... you 'NEVER' thought or did that to the DM's girlfriend did you? 'Sure' you didn't. That's why my girlfriend is playing a Life Cleric in my campaign and I know all this stuff ... *Glares at you intently on your next words, tapping a foot. ... As an idea hits you, you're cut off abruptly* ... "NO SHE DOESN'T WANT TO PLAY A LIFE CLERIC IN YOUR GAME! GET OUT!!! AND STAY OFF THE GRASS!" . . . . . (lol ... l8r folks!)