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

Zweihander v1.1 questions

My players called out an issue with the sheet. Here's what I found, is there an updated version? The 'cast' button on the sheet seems to be flakey. after setting difficulty, you click it, set set the modification if any and Nothing is output to the chat. This behavior doesn't seem to matter which spell you cast. or if all the items are filled out or just the minimum to save the spell.  EXCEPT when you toggle the channeling dropdown. If you use it or move it down then set it back to none then the cast button will send info to the chat tab. Is there a fix for this? I didn't see anyplace to put this into the github for this project.
I sent a note to Wes , the sheet developer. Has anyone else noticed this or other issues with the current sheet. BTW other than that there are few issues as is. There are a number of Nice to Have things on the sheet. I'd love to have free text blocks for many of the items.
Sheet Author
This is an issue caused by not having default values set. I'm working on updating this and cleaning up the double numbers on the roll template.
I'd like to add something I found today. Example name:Wyndyn I'm making a macro for Awareness on Wyndyn's character sheet macros ... %{Wyndyn|awareness} does not work %{selected|awareness} does not work when I select Wyndyn, but works when I select any other characters
All of the other skill tags work correctly
Continued information on that last bug... I removed the macro I had made and just put %{Wyndyn|awareness} into the chat box ... it worked! I remade the macro ... the macro didn't work (as before) AND if I put the %{Wyndyn|awareness} into the chat box IT DIDN'T work! I got rid of the macro and put it into the chat box and it worked again. This is strange!
Wes said: This is an issue caused by not having default values set. I'm working on updating this and cleaning up the double numbers on the roll template. I tested out your updates Wes, they looked great. I didn't have any further issues with cast. or any of the other sheet mechanics. Will this be public soon?
NEW BUG: minor problem When you use the ATTRIBUTE buttons (Combat, Brawn, etc.) the Modifier box displays the Roll instead of the modifier. All of the attribute buttons
New BUG: range values of weapons are not shown when combat roll is made. doesn't matter if they are set using arrows or by typing they are always 0.  New BUG: Shield's Parry Modifier isn't calculated into the rolled parry value. Also if a weapon has the Defensive quality it provides a +10% to parry. I accounted for this in shield, so that's why I saw the bug. Doesn't matter if all the shield values are filled in or not.
Sheet Author
I have a pull request: #6209 in to fix the following: Attribute and Skill rolls now show difficulty and modifiers properly in the roll template output. Range Values now show properly in the roll template output. Shield Parry Modifier is now added to the Parry Script Calculation and in the Modifier roll template output. Wes

Edited 1591375553
@GiGs created a Script API that works off this sheet. It is pasted below. It takes a character sheet's selections for peril and damage tracks and changes the bars on the token attached to the character sheet. You do manually need to set the max of said bar to 5 on the token. See below: on('ready', () => { const bars = { // 1 is green top bar, 2 is blue middle bar and 3 is bottom red bar. Set them below as you see fit. peril: 1, damage: 2 }; const damages = ['Damage_Track_2', 'Damage_Track_3', 'Damage_Track_4', 'Damage_Track_5', 'Damage_Track_6']; const perils = [ 'peril_imperiled','peril_ignore_one','peril_ignore_two','peril_ignore_three','peril_incapcitated']; const calcScore = (charid, peril = false) => { const stats = peril ? perils : damages; return stats.reduce((total, name) => total += (parseInt(getAttrByName(charid, name))||0) === 0 ? 0 : 1, 0); }; on('change:attribute:current', function(obj) { const att = obj.get('name'); if(perils.includes(att) || damages.includes(att)) { const char = getObj('character', obj.get('characterid')); // do a search of all matching tokens const tokens = findObjs({ _type: 'graphic', represents: }); const score = calcScore (, perils.includes(att)); tokens.forEach(token => { token.set({[`bar${perils.includes(att) ? bars.peril : bars.damage}_value`]: score}); }); } }); on('add:graphic', function(obj) { if(obj.get('represents') != '') { const token_id =; _.delay(()=>{ const token=getObj('graphic',token_id); if(token){ const char = getObj('character', obj.get('represents')); obj.set({ [`bar${bars.peril}_value`]: calcScore(, true), [`bar${bars.damage}_value`]: calcScore(, false) }); } }, 300); } }); });