Files
roll20-character-sheets/HarnMaster3/harnsheet.html
T
olafvantol 4b54e396d5 Minor html typo correction
Missing ";"in html resulted in "nbsp" tag showing on horse combat stats
2024-09-27 11:53:48 +02:00

2646 lines
180 KiB
HTML

<!-- div to hold notification about new sheet version -->
<input class="showupgradenotification" name="attr_notifyupgrade" type="hidden" value="0"/><!-- hide upgrade notice if not relevant or dismissed -->
<div class="newversion-notifcation">
The sheet has been updated to a new version. Please check the information in the <button id=settingstab type="action" name="act_settings" class="buttonaslink">Settings</button> tab
<button type="action" name="act_dismissupgradenotice" class="dismissnotification">Dismiss notification</button>
</div>
<div class=avatarbanner>
<img class='avatarimage' name='attr_character_avatar' alt="Character Avatar">
</div>
<!-- buttons to select desired tab -->
<div class="tab-buttons">
<button id=chartab type="action" name="act_character" >Character<span class="buttonicon">&nbsp;U </span></button>
<button id=inventab type="action" name="act_inventory" >Inventory<span class="buttonicon">&nbsp;O </span></button>
<button id=settingstab type="action" name="act_settings" >Settings<span class="buttonicon">&nbsp;x </span></button>
</div>
<!-- inputs to switch tabs and various other things -->
<input type='hidden' class='tabstoggle' name='attr_sheettab' value='character' />
<input type="hidden" name="attr_sheetversion" value='1'><!-- to facilitate migration from old HarnMaster3 sheet to v2 -->
<!-- actual character sheet, divided in tabs -->
<div class='character'> <!-- CHARACTER TAB -->
<h2 class='tab-header'>HârnMaster</h2>
<h1 class='tab-header'>Character Profile</h1>
<div class='character-grid'> <!-- CHARACTER grid container-->
<div class='character-grid-section personal personal-grid colored-grid'>
<div class="skill-section-title">PERSONAL</div>
<label for=charname>Name</label><input type="text" id=charname name="attr_character_name" class="personal-input">
<label for=race>Race</label><input type="text" id=race name="attr_species" class="personal-input">
<label for=gender>Gender</label><input type="text" id=gender name="attr_gender" class="personal-input">
<label for=birthdate>Birthdate</label><input type="text" id=birthdate name="attr_birthdate" class="personal-input">
<label for=sunsign>Sunsign</label>
<input type="text" id=sunsign name="attr_sunsign" class="personal-input" list="sunsigns">
<datalist id="sunsigns">
<option value="ulandus">ulandus</option>
<option value="ulandus-aralius">ulandus-aralius</option>
<option value="aralius">aralius</option>
<option value="aralius-feniri">aralius-feniri</option>
<option value="feniri">feniri</option>
<option value="feniri-ahnu">feniri-ahnu</option>
<option value="ahnu">ahnu</option>
<option value="ahnu-angberelius">ahnu-angberelius</option>
<option value="angberelius">angberelius</option>
<option value="angberelius-nadai">angberelius-nadai</option>
<option value="nadai">nadai</option>
<option value="nadai-hirin">nadai-hirin</option>
<option value="hirin">hirin</option>
<option value="hirin-tarael">hirin-tarael</option>
<option value="tarael">tarael</option>
<option value="tarael-tai">tarael-tai</option>
<option value="tai">tai</option>
<option value="tai-skorus">tai-skorus</option>
<option value="skorus">skorus</option>
<option value="skorus-masara">skorus-masara</option>
<option value="masara">masara</option>
<option value="masara-lado">masara-lado</option>
<option value="lado">lado</option>
<option value="lado-ulandus">lado-ulandus</option>
</datalist>
</div>
<div class='character-grid-section attribs attribs-grid colored-grid'>
<div class="skill-section-title">ATTRIBUTES</div>
<label for=str>STR</label>
<input id=str type="number" name="attr_str" class="attribute-input" value="0">
<button type="roll" value="&{template:custom} {{color=harn}} {{title=@{character_name} tests Strength}} {{rolltarget=[[{[[{[[@{str} * ?{Attribute multiplier?|3|4|5|6|7} - [[(@{physical_penalty})*5]] ]],5}kh1]],95}kl1]]}} {{Target Level=[[@{str} * ?{Attribute multiplier?}]] ( @{str} * ?{Attribute multiplier?} ) }} {{penalty=[[(@{physical_penalty})*5]]}} {{rollresult=[[1d100cs5cs10cs15cs20cs25cs30cs35cs40cs45cs50cs55cs60cs65cs70cs75cs80cs85cs90cs95cs100]]}}" name="roll_StrengthCheck">
</button>
<label for=eye>EYE</label>
<input id=eye type="number" name="attr_eye" class="attribute-input" value="0">
<button type="roll" value="&{template:custom} {{color=harn}} {{title=@{character_name} tests Eye}} {{rolltarget=[[{[[{[[@{eye} * ?{Attribute multiplier?|3|4|5|6|7} - [[(@{physical_penalty})*5]] ]],5}kh1]],95}kl1]]}} {{Target Level=[[@{eye} * ?{Attribute multiplier?}]] (@{eye} * ?{Attribute multiplier?}) }} {{penalty=[[(@{physical_penalty})*5]]}} {{rollresult=[[1d100cs5cs10cs15cs20cs25cs30cs35cs40cs45cs50cs55cs60cs65cs70cs75cs80cs85cs90cs95cs100]]}} " name="roll_EyeCheck">
</button>
<label for=sta>STA</label>
<input id=sta type="number" name="attr_sta" class="attribute-input" value="0">
<button type="roll" value="&{template:custom} {{color=harn}} {{title=@{character_name} tests Stamina}} {{rolltarget=[[{[[{[[@{sta} * ?{Attribute multiplier?|3|4|5|6|7} - [[(@{physical_penalty})*5]] ]],5}kh1]],95}kl1]]}} {{Target Level=[[@{sta} * ?{Attribute multiplier?}]] (@{sta} * ?{Attribute multiplier?}) }} {{penalty=[[(@{physical_penalty})*5]]}} {{rollresult=[[1d100cs5cs10cs15cs20cs25cs30cs35cs40cs45cs50cs55cs60cs65cs70cs75cs80cs85cs90cs95cs100]]}}" name="roll_StaminaCheck">
</button>
<label for=hrg>HRG</label>
<input id=hrg type="number" name="attr_hrg" class="attribute-input" value="0">
<button type="roll" value="&{template:custom} {{color=harn}} {{title=@{character_name} tests Hearing}} {{rolltarget=[[{[[{[[@{hrg} * ?{Attribute multiplier?|3|4|5|6|7} - [[(@{physical_penalty})*5]] ]],5}kh1]],95}kl1]]}} {{Target Level=[[@{hrg} * ?{Attribute multiplier?}]] (@{hrg} * ?{Attribute multiplier?}) }} {{penalty=[[(@{physical_penalty})*5]]}} {{rollresult=[[1d100cs5cs10cs15cs20cs25cs30cs35cs40cs45cs50cs55cs60cs65cs70cs75cs80cs85cs90cs95cs100]]}} " name="roll_HearingCheck">
</button>
<label for=dex>DEX</label>
<input id=dex type="number" name="attr_dex" class="attribute-input" value="0">
<button type="roll" value="&{template:custom} {{color=harn}} {{title=@{character_name} tests Dexterity}} {{rolltarget=[[{[[{[[@{dex} * ?{Attribute multiplier?|3|4|5|6|7} - [[(@{physical_penalty})*5]] ]],5}kh1]],95}kl1]]}} {{Target Level=[[@{dex} * ?{Attribute multiplier?}]] (@{dex} * ?{Attribute multiplier?}) }} {{penalty=[[(@{physical_penalty})*5]]}} {{rollresult=[[1d100cs5cs10cs15cs20cs25cs30cs35cs40cs45cs50cs55cs60cs65cs70cs75cs80cs85cs90cs95cs100]]}} " name="roll_DexterityCheck">
</button>
<label for=sml>SML</label>
<input id=sml type="number" name="attr_sml" class="attribute-input" value="0">
<button type="roll" value="&{template:custom} {{color=harn}} {{title=@{character_name} tests Smell}} {{rolltarget=[[{[[{[[@{sml} * ?{Attribute multiplier?|3|4|5|6|7} - [[(@{physical_penalty})*5]] ]],5}kh1]],95}kl1]]}} {{Target Level=[[@{sml} * ?{Attribute multiplier?} ]] (@{sml} * ?{Attribute multiplier?}) }} {{penalty=[[(@{physical_penalty})*5]]}} {{rollresult=[[1d100cs5cs10cs15cs20cs25cs30cs35cs40cs45cs50cs55cs60cs65cs70cs75cs80cs85cs90cs95cs100]]}} " name="roll_SmellCheck">
</button>
<label for=agl>AGL</label>
<input id=agl type="number" name="attr_agl" class="attribute-input" value="0">
<button type="roll" value="&{template:custom} {{color=harn}} {{title=@{character_name} tests Agility}} {{rolltarget=[[{[[{[[@{agl} * ?{Attribute multiplier?|3|4|5|6|7} - [[(@{physical_penalty})*5]] ]],5}kh1]],95}kl1]]}} {{Target Level=[[@{agl} * ?{Attribute multiplier?}]] (@{agl} * ?{Attribute multiplier?}) }} {{penalty=[[(@{physical_penalty})*5]]}} {{rollresult=[[1d100cs5cs10cs15cs20cs25cs30cs35cs40cs45cs50cs55cs60cs65cs70cs75cs80cs85cs90cs95cs100]]}} " name="roll_AgilityCheck">
</button>
<label for=voi>VOI</label>
<input id=voi type="number" name="attr_voi" class="attribute-input" value="0">
<button type="roll" value="&{template:custom} {{color=harn}} {{title=@{character_name} tests Voice}} {{rolltarget=[[{[[{[[@{voi} * ?{Attribute multiplier?|3|4|5|6|7} - [[(@{universal_penalty})*5]] ]],5}kh1]],95}kl1]]}} {{Target Level=[[@{voi} * ?{Attribute multiplier?}]] (@{voi} * ?{Attribute multiplier?}) }} {{penalty=[[(@{universal_penalty})*5]]}} {{rollresult=[[1d100cs5cs10cs15cs20cs25cs30cs35cs40cs45cs50cs55cs60cs65cs70cs75cs80cs85cs90cs95cs100]]}} " name="roll_VoiceCheck">
</button>
<label for=int>INT</label>
<input id=int type="number" name="attr_int" class="attribute-input" value="0">
<button type="roll" value="&{template:custom} {{color=harn}} {{title=@{character_name} tests Intelligence}} {{rolltarget=[[{[[{[[@{int} * ?{Attribute multiplier?|3|4|5|6|7} - [[(@{universal_penalty})*5]] ]],5}kh1]],95}kl1]]}} {{Target Level=[[@{int} * ?{Attribute multiplier?}]] (@{int} * ?{Attribute multiplier?}) }} {{penalty=[[(@{universal_penalty})*5]]}} {{rollresult=[[1d100cs5cs10cs15cs20cs25cs30cs35cs40cs45cs50cs55cs60cs65cs70cs75cs80cs85cs90cs95cs100]]}} " name="roll_IntelligenceCheck">
</button>
<label for=cml>CML</label>
<input id=cml type="number" name="attr_cml" class="attribute-input" value="0">
<button type="roll" value="&{template:custom} {{color=harn}} {{title=@{character_name} tests Comeliness}} {{rolltarget=[[{[[{[[@{cml} * ?{Attribute multiplier?|3|4|5|6|7} - [[(@{universal_penalty})*5]] ]],5}kh1]],95}kl1]]}} {{Target Level=[[@{cml} * ?{Attribute multiplier?}]] (@{cml} * ?{Attribute multiplier?}) }} {{penalty=[[(@{universal_penalty})*5]]}} {{rollresult=[[1d100cs5cs10cs15cs20cs25cs30cs35cs40cs45cs50cs55cs60cs65cs70cs75cs80cs85cs90cs95cs100]]}} " name="roll_ComelinessCheck">
</button>
<label for=aur>AUR</label>
<input id=aur type="number" name="attr_aur" class="attribute-input" value="0">
<button type="roll" value="&{template:custom} {{color=harn}} {{title=@{character_name} tests Aura}} {{rolltarget=[[{[[{[[@{aur} * ?{Attribute multiplier?|3|4|5|6|7} - [[(@{universal_penalty})*5]] ]],5}kh1]],95}kl1]]}} {{Target Level=[[@{aur} * ?{Attribute multiplier?}]] (@{aur} * ?{Attribute multiplier?}) }} {{penalty=[[(@{universal_penalty})*5]]}} {{rollresult=[[1d100cs5cs10cs15cs20cs25cs30cs35cs40cs45cs50cs55cs60cs65cs70cs75cs80cs85cs90cs95cs100]]}} " name="roll_AuraCheck">
</button>
<label for=wil>WIL</label>
<input id=wil type="number" name="attr_wil" class="attribute-input" value="0">
<button type="roll" value="&{template:custom} {{color=harn}} {{title=@{character_name} tests Willpower}} {{rolltarget=[[{[[{[[@{wil} * ?{Attribute multiplier?|3|4|5|6|7} - [[(@{universal_penalty})*5]] ]],5}kh1]],95}kl1]]}} {{Target Level=[[@{wil} * ?{Attribute multiplier?}]] (@{wil} * ?{Attribute multiplier?}) }} {{penalty=[[(@{universal_penalty})*5]]}} {{rollresult=[[1d100cs5cs10cs15cs20cs25cs30cs35cs40cs45cs50cs55cs60cs65cs70cs75cs80cs85cs90cs95cs100]]}} " name="roll_WillpowerCheck">
</button>
</div>
<div class='character-grid-section family family-grid colored-grid'>
<div class="skill-section-title">FAMILY</div>
<label for=birthplace>Birthplace</label>
<input id=birthplace type="text" name="attr_birthplace" class="family-input">
<label for=culture>Culture</label>
<input id=culture type="text" name="attr_culture" class="family-input">
<label for=socialclass>Social Class</label>
<input id=socialclass type="text" name="attr_social_class" class="family-input">
<label for=siblingrank>Sibling Rank</label>
<input id=siblingrank type="text" name="attr_sibling_rank" class="family-input">
<label for=parent>Parent</label>
<input id=parent type="text" name="attr_parent" class="family-input">
<label for=estrangement>Estrangement</label>
<input id=estrangement type="text" name="attr_estrangement" class="family-input">
<label for=clanhead>Clanhead</label>
<input id=clanhead type="text" name="attr_clanhead" class="family-input">
<label for=mental>Mental</label>
<input id=mental type="text" name="attr_mental" class="family-input">
<label for=physical>Physical</label>
<input id=physical type="text" name="attr_physical" class="family-input">
</div>
<div class='character-grid-section physical physical-grid colored-grid'>
<label for=age>Age</label><input type="number" id=age name="attr_age" class="physical-input">
<label for=skin>Skin</label><input type="text" id=skin name="attr_complexion" class="physical-input">
<label for=height>Height</label><input type="text" id=height name="attr_height" class="physical-input skill-value">
<label for=frame>Frame</label><input type="text" id=frame name="attr_frame" class="physical-input">
<label for=weight>Weight</label><input type="number" id=weight name="attr_weight" class="physical-input">
<label for=hair>Hair</label><input type="text" id=hair name="attr_hair_colors" class="physical-input">
<label for=morality>Morality</label><input type="number" id=morality name="attr_moral" class="physical-input">
<label for=eyes>Eyes</label><input type="text" id=eyes name="attr_eye_color" class="physical-input">
<input class="showsinglepiety" name="attr_hrconsolidatedpiety" type="hidden" value="1"/><label for=piety>Piety</label><input type="number" id=piety name="attr_piety" class="physical-input">
</div>
<div class='character-grid-section section-title'><h2>Skills</h2></div>
<div class='character-grid-section skills skills-grid colored-grid'>
<div class="skill-section-title">COMBAT SKILLS</div>
<div class="skill-header skill-label">Skill</div>
<div class="skill-header">&nbsp;</div>
<div class="skill-header skill-value">SB</div>
<div class="skill-header skill-value">ML</div>
<div class="skill-header">&nbsp;</div>
<input type="text" class="skill-label" name="attr_initiative_name" value="Initiative" disabled="true">
<button type="roll" value="&{template:custom} {{skilldevroll=1}} {{color=harn}} {{title=@{character_name} tries to improve @{initiative_name}}} {{rolltarget=[[@{initiative_ml}]]}} {{rollresult=[[1d100+@{initiative_sb}]]}}" name="roll_InitiativeDevelop" class="skilldev-button">
</button>
<input type="number" name="attr_initiative_sb" class="skill-value" value="0">
<input type="number" name="attr_initiative_ml" class="skill-value" value="0">
<!-- <button type="roll" value="&{template:custom} {{color=harn}} {{title=@{character_name} tests @{initiative_name}}} {{rolltarget=[[{[[{[[@{initiative_ml} - [[(@{physical_penalty})*5]] + ?{Target Modifier?|0}]],5}kh1]],95}kl1]]}} {{penalty=[[(@{physical_penalty})*5]]}} {{rollresult=[[1d100cs5cs10cs15cs20cs25cs30cs35cs40cs45cs50cs55cs60cs65cs70cs75cs80cs85cs90cs95cs100]]}} {{Modifier=[[?{Target Modifier?|0}]]}} {{Mastery Lvl=[[@{initiative_ml}]]}}" name="roll_InitiativeCheck">
</button> -->
<button type="roll" value="&{template:custom} {{color=harn}} {{title=@{character_name} tests @{initiative_name}}} {{Mastery Lvl=[[@{initiative_ml}]]}} {{penalty=[[(@{physical_penalty})*5]]}} {{Modifiers=[[?{Target Modifier?|0}]]}} {{rolltarget=[[{[[{[[@{initiative_ml} - [[(@{physical_penalty})*5]] + ?{Target Modifier?|0}]],5}kh1]],95}kl1]]}} {{rollresult=[[1d100cs5cs10cs15cs20cs25cs30cs35cs40cs45cs50cs55cs60cs65cs70cs75cs80cs85cs90cs95cs100]]}}" name="roll_InitiativeCheck" >
</button>
<input type="text" class="skill-label" name="attr_unarmed_name" value="Unarmed" disabled="true">
<button type="roll" value="&{template:custom} {{skilldevroll=1}} {{color=harn}} {{title=@{character_name} tries to improve @{unarmed_name}}} {{rolltarget=[[@{unarmed_ml}]]}} {{rollresult=[[1d100+@{unarmed_sb}]]}}" name="roll_UnarmedDevelop" class="skilldev-button"></button>
<input type="number" name="attr_unarmed_sb" class="skill-value" value="0">
<input type="number" name="attr_unarmed_ml" class="skill-value" value="0">
<button type="roll" value="&{template:custom} {{color=harn}} {{title=@{character_name} tests @{unarmed_name}}} {{rolltarget=[[{[[{[[@{unarmed_ml} - [[(@{physical_penalty})*5]] + ?{Target Modifier?|0}]],5}kh1]],95}kl1]]}} {{Mastery Lvl=[[@{unarmed_ml}]]}} {{penalty=[[(@{physical_penalty})*5]]}} {{rollresult=[[1d100cs5cs10cs15cs20cs25cs30cs35cs40cs45cs50cs55cs60cs65cs70cs75cs80cs85cs90cs95cs100]]}} {{Modifier=[[?{Target Modifier?|0}]]}}" name="roll_UnarmedCheck">
</button>
<input type="text" class="skill-label" name="attr_dodge_name" value="Dodge" disabled="true">
<button type="roll" value="&{template:custom} {{skilldevroll=1}} {{color=harn}} {{title=@{character_name} tries to improve @{dodge_name}}} {{rolltarget=[[@{dodge_ml}]]}} {{rollresult=[[1d100+@{dodge_sb}]]}}" name="roll_DodgeDevelop" class="skilldev-button">
</button>
<input type="number" name="attr_dodge_sb" class="skill-value" value="0">
<input type="number" name="attr_dodge_ml" class="skill-value" value="0">
<button type="roll" value="&{template:custom} {{color=harn}} {{title=@{character_name} tests @{dodge_name}}} {{rolltarget=[[{[[{[[@{dodge_ml} - [[(@{physical_penalty})*5]] + ?{Target Modifier?|0}]],5}kh1]],95}kl1]]}} {{Mastery Lvl=[[@{dodge_ml}]]}} {{penalty=[[(@{physical_penalty})*5]]}} {{rollresult=[[1d100cs5cs10cs15cs20cs25cs30cs35cs40cs45cs50cs55cs60cs65cs70cs75cs80cs85cs90cs95cs100]]}} {{Modifier=[[?{Target Modifier?|0}]]}}" name="roll_DodgeCheck">
</button>
<fieldset class="repeating_combatskill">
<input type="text" name="attr_combatskill_name" class="skill-label">
<button type="roll" value="&{template:custom} {{skilldevroll=1}} {{color=harn}} {{title=@{character_name} tries to improve @{combatskill_name}}} {{rolltarget=[[@{combatskill_ml}]]}} {{rollresult=[[1d100+@{combatskill_sb}]]}}" name="roll_CombatSkillDevelop" class="skilldev-button">
</button>
<input type="number" name="attr_combatskill_sb" class="skill-value" value="0">
<input type="number" name="attr_combatskill_ml" class="skill-value" value="0">
<button type="roll" value="&{template:custom} {{color=harn}} {{title=@{character_name} tests @{combatskill_name}}} {{rolltarget=[[{[[{[[@{combatskill_ml} - [[(@{physical_penalty})*5]] + ?{Target Modifier?|0}]],5}kh1]],95}kl1]]}} {{Mastery Lvl=[[@{combatskill_ml}]]}} {{penalty=[[(@{physical_penalty})*5]]}} {{rollresult=[[1d100cs5cs10cs15cs20cs25cs30cs35cs40cs45cs50cs55cs60cs65cs70cs75cs80cs85cs90cs95cs100]]}} {{Modifier=[[?{Target Modifier?|0}]]}}" name="roll_CombatSkillCheck">
</button>
</fieldset>
</div>
<div class='character-grid-section skills skills-grid colored-grid'>
<div class="skill-section-title">PHYSICAL SKILLS</div>
<div class="skill-header skill-label">Skill</div>
<div class="skill-header">&nbsp;</div>
<div class="skill-header skill-value">SB</div>
<div class="skill-header skill-value">ML</div>
<div class="skill-header">&nbsp;</div>
<input type="text" class="skill-label" name="attr_climbing_name" value="Climbing" disabled="true">
<button type="roll" value="&{template:custom} {{skilldevroll=1}} {{color=harn}} {{title=@{character_name} tries to improve @{climbing_name}}} {{rolltarget=[[@{climbing_ml}]]}} {{rollresult=[[1d100+@{climbing_sb}]]}}" name="roll_ClimbingDevelop" class="skilldev-button">
</button>
<input type="number" name="attr_climbing_sb" class="skill-value" value="0">
<input type="number" name="attr_climbing_ml" class="skill-value" value="0">
<button type="roll" value="&{template:custom} {{color=harn}} {{title=@{character_name} tests @{climbing_name}}} {{rolltarget=[[{[[{[[@{climbing_ml} - [[(@{physical_penalty})*5]] + ?{Target Modifier?|0}]],5}kh1]],95}kl1]]}} {{Mastery Lvl=[[@{climbing_ml}]]}} {{penalty=[[(@{physical_penalty})*5]]}} {{rollresult=[[1d100cs5cs10cs15cs20cs25cs30cs35cs40cs45cs50cs55cs60cs65cs70cs75cs80cs85cs90cs95cs100]]}} {{Modifier=[[?{Target Modifier?|0}]]}}" name="roll_ClimbingSkillCheck">
</button>
<input type="text" class="skill-label" name="attr_condition_name" value="Condition" disabled="true">
<button type="roll" value="&{template:custom} {{skilldevroll=1}} {{color=harn}} {{title=@{character_name} tries to improve @{condition_name}}} {{rolltarget=[[@{condition_ml}]]}} {{rollresult=[[1d100+@{condition_sb}]]}}" name="roll_ConditionDevelop" class="skilldev-button"></button>
<input type="number" name="attr_condition_sb" class="skill-value" value="0">
<input type="number" name="attr_condition_ml" class="skill-value" value="0">
<button type="roll" value="&{template:custom} {{color=harn}} {{title=@{character_name} tests @{condition_name}}} {{rolltarget=[[{[[{[[@{condition_ml} - [[(@{physical_penalty})*5]] + ?{Target Modifier?|0}]],5}kh1]],95}kl1]]}} {{Mastery Lvl=[[@{condition_ml}]]}} {{penalty=[[(@{physical_penalty})*5]]}} {{rollresult=[[1d100cs5cs10cs15cs20cs25cs30cs35cs40cs45cs50cs55cs60cs65cs70cs75cs80cs85cs90cs95cs100]]}} {{Modifier=[[?{Target Modifier?|0}]]}}" name="roll_ConditionSkillCheck">
</button>
<input type="text" class="skill-label" name="attr_jumping_name" value="Jumping" disabled="true">
<button type="roll" value="&{template:custom} {{skilldevroll=1}} {{color=harn}} {{title=@{character_name} tries to improve @{jumping_name}}} {{rolltarget=[[@{jumping_ml}]]}} {{rollresult=[[1d100+@{jumping_sb}]]}}" name="roll_JumpingDevelop" class="skilldev-button">
</button>
<input type="number" name="attr_jumping_sb" class="skill-value" value="0">
<input type="number" name="attr_jumping_ml" class="skill-value" value="0">
<button type="roll" value="&{template:custom} {{color=harn}} {{title=@{character_name} tests @{jumping_name}}} {{rolltarget=[[{[[{[[@{jumping_ml} - [[(@{physical_penalty})*5]] + ?{Target Modifier?|0}]],5}kh1]],95}kl1]]}} {{Mastery Lvl=[[@{jumping_ml}]]}} {{penalty=[[(@{physical_penalty})*5]]}} {{rollresult=[[1d100cs5cs10cs15cs20cs25cs30cs35cs40cs45cs50cs55cs60cs65cs70cs75cs80cs85cs90cs95cs100]]}} {{Modifier=[[?{Target Modifier?|0}]]}}" name="roll_JumpingSkillCheck">
</button>
<input type="text" class="skill-label" name="attr_ridingpersonal_name" value="Riding (Personal)" disabled="true">
<button type="roll" value="&{template:custom} {{skilldevroll=1}} {{color=harn}} {{title=@{character_name} tries to improve @{ridingpersonal_name}}} {{rolltarget=[[@{ridingpersonal_ml}]]}} {{rollresult=[[1d100+@{ridingpersonal_sb}]]}}" name="roll_RidingDevelop" class="skilldev-button">
</button>
<input type="number" name="attr_ridingpersonal_sb" class="skill-value" value="0">
<input type="number" name="attr_ridingpersonal_ml" class="skill-value" value="0">
<button type="roll" value="&{template:custom} {{color=harn}} {{title=@{character_name} tests @{ridingpersonal_name}}} {{rolltarget=[[{[[{[[@{ridingpersonal_ml} - [[(@{physical_penalty})*5]] + ?{Target Modifier?|0}]],5}kh1]],95}kl1]]}} {{Mastery Lvl=[[@{ridingpersonal_ml}]]}} {{penalty=[[(@{physical_penalty})*5]]}} {{rollresult=[[1d100cs5cs10cs15cs20cs25cs30cs35cs40cs45cs50cs55cs60cs65cs70cs75cs80cs85cs90cs95cs100]]}} {{Modifier=[[?{Target Modifier?|0}]]}}" name="roll_RidingPersonalCheck">
</button>
<input class="showhorse" name="attr_hrhorseonsheet" type="hidden" value="1"/><!-- hide calculated EML for horse-riding if horse is not shown on sheet -->
<div class="horse-section">
<div class="harntooltip" data-tooltiptext="Your effective ML for your current horse, calculated based on personal riding skill and horse initiative. All rider and horse penalties are taken into account, do NOT adjust this number further.">
<input type="text" class="skill-label harntooltip " data-tooltiptext="Your effective ML for your current horse, calculated based on personal riding skill and horse initiative. All rider and horse penalties are taken into account, do NOT adjust this number further." name="attr_ridinghorse_name" value="Riding EML" disabled="true">
</div>
<div class="horse-section">&nbsp;</div>
<input type="text" name="attr_ridinghorse_sb" class="skill-value" value="n/a" readonly>
<input name="attr_ridinghorse_ml" class="skill-value harntooltip" data-tooltiptext="Your effective ML for your current horse, calculated based on personal riding skill and horse initiative" readonly>
<button type="roll" value="&{template:custom} {{color=harn}} {{title=@{character_name} tests riding @{hname}}} {{rolltarget=[[{[[{[[@{ridinghorse_ml} + ?{Target Modifier?|0}]],5}kh1]],95}kl1]]}} {{rollresult=[[1d100cs5cs10cs15cs20cs25cs30cs35cs40cs45cs50cs55cs60cs65cs70cs75cs80cs85cs90cs95cs100]]}} {{Mastery Lvl=[[@{ridinghorse_ml}]]}} {{Modifier=[[?{Target Modifier?|0}]]}} {{desc=Roll does not include physical penalties as they are already accounted for in Riding EML}}" name="roll_RidingHorseCheck" class="harntooltip" data-tooltiptext="Your effective ML for your current horse, calculated based on personal riding skill and horse initiative">
</button>
</div>
<input type="text" class="skill-label" name="attr_stealth_name" value="Stealth" disabled="true">
<button type="roll" value="&{template:custom} {{skilldevroll=1}} {{color=harn}} {{title=@{character_name} tries to improve @{stealth_name}}} {{rolltarget=[[@{stealth_ml}]]}} {{rollresult=[[1d100+@{stealth_sb}]]}}" name="roll_StealthDevelop" class="skilldev-button">
</button>
<input type="number" name="attr_stealth_sb" class="skill-value" value="0">
<input type="number" name="attr_stealth_ml" class="skill-value" value="0">
<button type="roll" value="&{template:custom} {{color=harn}} {{title=@{character_name} tests @{stealth_name}}} {{rolltarget=[[{[[{[[@{stealth_ml} - [[(@{physical_penalty})*5]] + ?{Target Modifier?|0}]],5}kh1]],95}kl1]]}} {{Mastery Lvl=[[@{stealth_ml}]]}} {{penalty=[[(@{physical_penalty})*5]]}} {{rollresult=[[1d100cs5cs10cs15cs20cs25cs30cs35cs40cs45cs50cs55cs60cs65cs70cs75cs80cs85cs90cs95cs100]]}} {{Modifier=[[?{Target Modifier?|0}]]}}" name="roll_StealthSkillCheck">
</button>
<input type="text" class="skill-label" name="attr_throwing_name" value="Throwing" disabled="true">
<button type="roll" value="&{template:custom} {{skilldevroll=1}} {{color=harn}} {{title=@{character_name} tries to improve @{throwing_name}}} {{rolltarget=[[@{throwing_ml}]]}} {{rollresult=[[1d100+@{throwing_sb}]]}}" name="roll_ThrowingDevelop" class="skilldev-button">
</button>
<input type="number" name="attr_throwing_sb" class="skill-value" value="0">
<input type="number" name="attr_throwing_ml" class="skill-value" value="0">
<button type="roll" value="&{template:custom} {{color=harn}} {{title=@{character_name} tests @{throwing_name}}} {{rolltarget=[[{[[{[[@{throwing_ml} - [[(@{physical_penalty})*5]] + ?{Target Modifier?|0}]],5}kh1]],95}kl1]]}} {{Mastery Lvl=[[@{throwing_ml}]]}} {{penalty=[[(@{physical_penalty})*5]]}} {{rollresult=[[1d100cs5cs10cs15cs20cs25cs30cs35cs40cs45cs50cs55cs60cs65cs70cs75cs80cs85cs90cs95cs100]]}} {{Modifier=[[?{Target Modifier?|0}]]}}" name="roll_ThrowingSkillCheck">
</button>
<fieldset class="repeating_physicalskill">
<input type="text" name="attr_physicalskill_name" class="skill-label">
<button type="roll" value="&{template:custom} {{skilldevroll=1}} {{color=harn}} {{title=@{character_name} tries to improve @{physicalskill_name}}} {{rolltarget=[[@{physicalskill_ml}]]}} {{rollresult=[[1d100+@{physicalskill_sb}]]}}" name="roll_PhysSkillDevelop" class="skilldev-button">
</button>
<input type="number" name="attr_physicalskill_sb" class="skill-value" value="0">
<input type="number" name="attr_physicalskill_ml" class="skill-value" value="0">
<button type="roll" value="&{template:custom} {{color=harn}} {{title=@{character_name} tests @{physicalskill_name}}} {{rolltarget=[[{[[{[[@{physicalskill_ml} - [[(@{physical_penalty})*5]] + ?{Target Modifier?|0}]],5}kh1]],95}kl1]]}} {{Mastery Lvl=[[@{physicalskill_ml}]]}} {{penalty=[[(@{physical_penalty})*5]]}} {{rollresult=[[1d100cs5cs10cs15cs20cs25cs30cs35cs40cs45cs50cs55cs60cs65cs70cs75cs80cs85cs90cs95cs100]]}} {{Modifier=[[?{Target Modifier?|0}]]}}" name="roll_PhysicalSkillCheck">
</button>
</fieldset>
</div>
<div class='character-grid-section skills skills-grid colored-grid'>
<div class="skill-section-title">COMMUNICATION SKILLS</div>
<div class="skill-header skill-label">Skill</div>
<div class="skill-header">&nbsp;</div>
<div class="skill-header skill-value">SB</div>
<div class="skill-header skill-value">ML</div>
<div class="skill-header">&nbsp;</div>
<input type="text" class="skill-label" name="attr_awareness_name" value="Awareness" disabled="true">
<button type="roll" value="&{template:custom} {{skilldevroll=1}} {{color=harn}} {{title=@{character_name} tries to improve @{awareness_name}}} {{rolltarget=[[@{awareness_ml}]]}} {{rollresult=[[1d100+@{awareness_sb}]]}}" name="roll_AwarenessDevelop" class="skilldev-button">
</button>
<input type="number" name="attr_awareness_sb" class="skill-value" value="0">
<input type="number" name="attr_awareness_ml" class="skill-value" value="0">
<button type="roll" value="&{template:custom} {{color=harn}} {{title=@{character_name} tests @{awareness_name}}} {{rolltarget=[[{[[{[[@{awareness_ml} - [[(@{universal_penalty})*5]] + ?{Target Modifier?|0}]],5}kh1]],95}kl1]]}} {{Mastery Lvl=[[@{awareness_ml}]]}} {{penalty=[[(@{universal_penalty})*5]]}} {{rollresult=[[1d100cs5cs10cs15cs20cs25cs30cs35cs40cs45cs50cs55cs60cs65cs70cs75cs80cs85cs90cs95cs100]]}} {{Modifier=[[?{Target Modifier?|0}]]}}" name="roll_AwarenessSkillCheck">
</button>
<input type="text" class="skill-label" name="attr_intrigue_name" value="Intrigue" disabled="true">
<button type="roll" value="&{template:custom} {{skilldevroll=1}} {{color=harn}} {{title=@{character_name} tries to improve @{intrigue_name}}} {{rolltarget=[[@{intrigue_ml}]]}} {{rollresult=[[1d100+@{intrigue_sb}]]}}" name="roll_IntrigueDevelop" class="skilldev-button">
</button>
<input type="number" name="attr_intrigue_sb" class="skill-value" value="0">
<input type="number" name="attr_intrigue_ml" class="skill-value" value="0">
<button type="roll" value="&{template:custom} {{color=harn}} {{title=@{character_name} tests @{intrigue_name}}} {{rolltarget=[[{[[{[[@{intrigue_ml} - [[(@{universal_penalty})*5]] + ?{Target Modifier?|0}]],5}kh1]],95}kl1]]}} {{Mastery Lvl=[[@{intrigue_ml}]]}} {{penalty=[[(@{universal_penalty})*5]]}} {{rollresult=[[1d100cs5cs10cs15cs20cs25cs30cs35cs40cs45cs50cs55cs60cs65cs70cs75cs80cs85cs90cs95cs100]]}} {{Modifier=[[?{Target Modifier?|0}]]}}" name="roll_IntrigueSkillCheck">
</button>
<input type="text" class="skill-label" name="attr_oratory_name" value="Oratory" disabled="true">
<button type="roll" value="&{template:custom} {{skilldevroll=1}} {{color=harn}} {{title=@{character_name} tries to improve @{oratory_name}}} {{rolltarget=[[@{oratory_ml}]]}} {{rollresult=[[1d100+@{oratory_sb}]]}}" name="roll_OratoryDevelop" class="skilldev-button">
</button>
<input type="number" name="attr_oratory_sb" class="skill-value" value="0">
<input type="number" name="attr_oratory_ml" class="skill-value" value="0">
<button type="roll" value="&{template:custom} {{color=harn}} {{title=@{character_name} tests @{oratory_name}}} {{rolltarget=[[{[[{[[@{oratory_ml} - [[(@{universal_penalty})*5]] + ?{Target Modifier?|0}]],5}kh1]],95}kl1]]}} {{Mastery Lvl=[[@{oratory_ml}]]}} {{penalty=[[(@{universal_penalty})*5]]}} {{rollresult=[[1d100cs5cs10cs15cs20cs25cs30cs35cs40cs45cs50cs55cs60cs65cs70cs75cs80cs85cs90cs95cs100]]}} {{Modifier=[[?{Target Modifier?|0}]]}}" name="roll_OratorySkillCheck">
</button>
<input type="text" class="skill-label" name="attr_rhetoric_name" value="Rhetoric" disabled="true">
<button type="roll" value="&{template:custom} {{skilldevroll=1}} {{color=harn}} {{title=@{character_name} tries to improve @{rhetoric_name}}} {{rolltarget=[[@{rhetoric_ml}]]}} {{rollresult=[[1d100+@{rhetoric_sb}]]}}" name="roll_RhetoricDevelop" class="skilldev-button">
</button>
<input type="number" name="attr_rhetoric_sb" class="skill-value" value="0">
<input type="number" name="attr_rhetoric_ml" class="skill-value" value="0">
<button type="roll" value="&{template:custom} {{color=harn}} {{title=@{character_name} tests @{rhetoric_name}}} {{rolltarget=[[{[[{[[@{rhetoric_ml} - [[(@{universal_penalty})*5]] + ?{Target Modifier?|0}]],5}kh1]],95}kl1]]}} {{Mastery Lvl=[[@{rhetoric_ml}]]}} {{penalty=[[(@{universal_penalty})*5]]}} {{rollresult=[[1d100cs5cs10cs15cs20cs25cs30cs35cs40cs45cs50cs55cs60cs65cs70cs75cs80cs85cs90cs95cs100]]}} {{Modifier=[[?{Target Modifier?|0}]]}}" name="roll_RhetoricSkillCheck">
</button>
<input type="text" class="skill-label" name="attr_singing_name" value="Singing" disabled="true">
<button type="roll" value="&{template:custom} {{skilldevroll=1}} {{color=harn}} {{title=@{character_name} tries to improve @{singing_name}}} {{rolltarget=[[@{singing_ml}]]}} {{rollresult=[[1d100+@{singing_sb}]]}}" name="roll_SingingDevelop" class="skilldev-button">
</button>
<input type="number" name="attr_singing_sb" class="skill-value" value="0">
<input type="number" name="attr_singing_ml" class="skill-value" value="0">
<button type="roll" value="&{template:custom} {{color=harn}} {{title=@{character_name} tests @{singing_name}}} {{rolltarget=[[{[[{[[@{singing_ml} - [[(@{universal_penalty})*5]] + ?{Target Modifier?|0}]],5}kh1]],95}kl1]]}} {{Mastery Lvl=[[@{singing_ml}]]}} {{penalty=[[(@{universal_penalty})*5]]}} {{rollresult=[[1d100cs5cs10cs15cs20cs25cs30cs35cs40cs45cs50cs55cs60cs65cs70cs75cs80cs85cs90cs95cs100]]}} {{Modifier=[[?{Target Modifier?|0}]]}}" name="roll_SingingSkillCheck">
</button>
<fieldset class="repeating_communicationskill">
<input type="text" name="attr_communicationskill_name" class="skill-label">
<button type="roll" value="&{template:custom} {{skilldevroll=1}} {{color=harn}} {{title=@{character_name} tries to improve @{communicationskill_name}}} {{rolltarget=[[@{communicationskill_ml}]]}} {{rollresult=[[1d100+@{communicationskill_sb}]]}}" name="roll_CommSkillDevelop" class="skilldev-button">
</button>
<input type="number" name="attr_communicationskill_sb" class="skill-value" value="0">
<input type="number" name="attr_communicationskill_ml" class="skill-value" value="0">
<button type="roll" value="&{template:custom} {{color=harn}} {{title=@{character_name} tests @{communicationskill_name}}} {{rolltarget=[[{[[{[[@{communicationskill_ml} - [[(@{universal_penalty})*5]] + ?{Target Modifier?|0}]],5}kh1]],95}kl1]]}} {{Mastery Lvl=[[@{communicationskill_ml}]]}} {{penalty=[[(@{universal_penalty})*5]]}} {{rollresult=[[1d100cs5cs10cs15cs20cs25cs30cs35cs40cs45cs50cs55cs60cs65cs70cs75cs80cs85cs90cs95cs100]]}} {{Modifier=[[?{Target Modifier?|0}]]}}" name="roll_CommunicationSkillCheck">
</button>
</fieldset>
</div>
<div class='character-grid-section skills skills-grid colored-grid'>
<div class="skill-section-title">CRAFT/LORE SKILLS</div>
<div class="skill-header skill-label">Skill</div>
<div class="skill-header">&nbsp;</div>
<div class="skill-header skill-value">SB</div>
<div class="skill-header skill-value">ML</div>
<div class="skill-header">&nbsp;</div>
<fieldset class="repeating_loreskill">
<input type="text" name="attr_loreskill_name" class="skill-label">
<button type="roll" value="&{template:custom} {{skilldevroll=1}} {{color=harn}} {{title=@{character_name} tries to improve @{loreskill_name}}} {{rolltarget=[[@{loreskill_ml}]]}} {{rollresult=[[1d100+@{loreskill_sb}]]}}" name="roll_LoreSkillDevelop" class="skilldev-button">
</button>
<input type="number" name="attr_loreskill_sb" class="skill-value" value="0">
<input type="number" name="attr_loreskill_ml" class="skill-value" value="0">
<button type="roll" value="&{template:custom} {{color=harn}} {{title=@{character_name} tests @{loreskill_name}}} {{rolltarget=[[{[[{[[@{loreskill_ml} - [[(@{universal_penalty})*5]] + ?{Target Modifier?|0}]],5}kh1]],95}kl1]]}} {{Mastery Lvl=[[@{loreskill_ml}]]}} {{penalty=[[(@{universal_penalty})*5]]}} {{rollresult=[[1d100cs5cs10cs15cs20cs25cs30cs35cs40cs45cs50cs55cs60cs65cs70cs75cs80cs85cs90cs95cs100]]}} {{Modifier=[[?{Target Modifier?|0}]]}}" name="roll_LoreSkillCheck">
</button>
</fieldset>
</div>
<div class='character-grid-section skills skills-grid colored-grid'>
<div class="skill-section-title">RITUAL SKILLS</div>
<div class="skill-header skill-label">Skill</div>
<div class="skill-header">&nbsp;</div>
<div class="skill-header skill-value">SB</div>
<div class="skill-header skill-value">ML</div>
<div class="skill-header">&nbsp;</div>
<fieldset class="repeating_ritualskill">
<input type="text" name="attr_ritualskill_name" class="skill-label">
<button type="roll" value="&{template:custom} {{skilldevroll=1}} {{color=harn}} {{title=@{character_name} tries to improve @{ritualskill_name}}} {{rolltarget=[[@{ritualskill_ml}]]}} {{rollresult=[[1d100+@{ritualskill_sb}]]}}" name="roll_RitualSkillDevelop" class="skilldev-button">
</button>
<input type="number" name="attr_ritualskill_sb" class="skill-value" value="0">
<input type="number" name="attr_ritualskill_ml" class="skill-value" value="0">
<button type="roll" value="&{template:custom} {{color=harn}} {{title=@{character_name} tests @{ritualskill_name}}} {{rolltarget=[[{[[{[[@{ritualskill_ml} - [[(@{universal_penalty})*5]] + ?{Target Modifier?|0}]],5}kh1]],95}kl1]]}} {{Mastery Lvl=[[@{ritualskill_ml}]]}} {{penalty=[[(@{universal_penalty})*5]]}} {{rollresult=[[1d100cs5cs10cs15cs20cs25cs30cs35cs40cs45cs50cs55cs60cs65cs70cs75cs80cs85cs90cs95cs100]]}} {{Modifier=[[?{Target Modifier?|0}]]}}" name="roll_RitualSkillCheck">
</button>
</fieldset>
</div>
<div class='character-grid-section skills skills-grid colored-grid'>
<div class="skill-section-title">SHEK PVAR</div>
<div class="skill-header skill-label">Skill</div>
<div class="skill-header">&nbsp;</div>
<div class="skill-header skill-value">SB</div>
<div class="skill-header skill-value">ML</div>
<div class="skill-header">&nbsp;</div>
<fieldset class="repeating_magicskill">
<input type="text" name="attr_magicskill_name" class="skill-label">
<button type="roll" value="&{template:custom} {{skilldevroll=1}} {{color=harn}} {{title=@{character_name} tries to improve @{magicskill_name}}} {{rolltarget=[[@{magicskill_ml}]]}} {{rollresult=[[1d100+@{magicskill_sb}]]}}" name="roll_MagicSkillDevelop" class="skilldev-button">
</button>
<input type="number" name="attr_magicskill_sb" class="skill-value" value="0">
<input type="number" name="attr_magicskill_ml" class="skill-value" value="0">
<button type="roll" value="&{template:custom} {{color=harn}} {{title=@{character_name} tests @{magicskill_name}}} {{rolltarget=[[{[[{[[@{magicskill_ml} - [[(@{universal_penalty})*5]] + ?{Target Modifier?|0}]],5}kh1]],95}kl1]]}} {{Mastery Lvl=[[@{magicskill_ml}]]}} {{penalty=[[(@{universal_penalty})*5]]}} {{rollresult=[[1d100cs5cs10cs15cs20cs25cs30cs35cs40cs45cs50cs55cs60cs65cs70cs75cs80cs85cs90cs95cs100]]}} {{Modifier=[[?{Target Modifier?|0}]]}}" name="roll_MagicSkillCheck">
</button>
</fieldset>
</div>
<div class='character-grid-section section-title'><h2>Combat Profile</h2></div>
<div class='character-grid-section combat combat-grid colored-grid'>
<div class="skill-section-title">COMBAT STATS</div>
<label for=combatinit>Combat Init</label>
<input id=combatinit type="number" name="attr_combat_initiative" class="skill-value" value="0" readonly>
<button type="roll" value="&{template:custom} {{color=harn}} {{title=Turn Order}} {{subtitle=@{character_name}}} {{Initiative=[[@{combat_initiative} &{tracker}]]}} {{desc=Initiative (adjusted for penalties) added to the Turn Order}}" name="roll_CombatInitiativeToTurn" class="turnorder-button harntooltip" data-tooltiptext="Add current initiative to Turn Order. Remember to select your token!">
</button>
<label for=combatend>Endurance</label>
<input id=combatend type="number" name="attr_combat_endurance" class="skill-value" value="0" readonly>
<div>&nbsp;</div>
<label for=combatcarry class="harntooltip" data-tooltiptext="This can used to calculate encumbrance and for Shock-Fumble-Stumble tests, dependant on the setting of the &amp;quot;Use Condition&amp;quot; houserule on the settings tab. Equal to Endurance if no condition skill present">Condition/5</label>
<input id=combatcarry type="number" name="attr_combat_effectivecondition" class="skill-value" value="0" readonly>
<div>&nbsp;</div>
<input type="hidden" name="attr_healing_effectivecondition" class="skill-value" value="0" readonly><!-- place to store condition based endurance if this rule is enabled in the settings -->
<label for=combatdex>Dexterity</label>
<input id=combatdex type="number" name="attr_dex" readonly class="skill-value" readonly>
<div>&nbsp;</div>
<label for=combatagl>Agility</label>
<input id=combatagl type="number" name="attr_agl" readonly class="skill-value" readonly>
<div>&nbsp;</div>
<label for=combatmove>Move(hex)</label>
<input id=combatmove type="number" name="attr_combat_move" class="skill-value" value="0" readonly>
<div>&nbsp;</div>
<label for=combatdodge>Dodge</label>
<input id=combatdodge type="number" name="attr_dodge_ml" class="skill-value" readonly>
<button type="roll" value="&{template:custom} {{color=harn}} {{title=@{character_name} tests dodge}} {{rolltarget=[[{[[{[[@{dodge_ml} - [[(@{physical_penalty})*5]] + ?{Target Modifier?|0}]],5}kh1]],95}kl1]]}} {{Mastery Lvl=[[@{dodge_ml}]]}} {{penalty=[[(@{physical_penalty})*5]]}} {{rollresult=[[1d100cs5cs10cs15cs20cs25cs30cs35cs40cs45cs50cs55cs60cs65cs70cs75cs80cs85cs90cs95cs100]]}} {{Modifier=[[?{Target Modifier?|0}]]}}" name="roll_CombatDodgeCheck"></button>
</div>
<div class='character-grid-section load load-grid colored-grid'>
<div class="skill-section-title">LOAD CARRIED</div>
<label for=weaponload>Weapons</label>
<input id=weaponload type="number" name="attr_load_weapons_total" value="0" class="skill-value" readonly>
<label for=armorload>Armour</label>
<input id=armorload type="number" name="attr_load_armor_total" class="skill-value" value="0" class="number-value" readonly>
<label for=invenload>Inventory</label>
<input id=invenload type="number" name="attr_load_inventory_total" class="skill-value" value="0" class="number-value" readonly>
<label for=totalweight class="sumrow">Total Weight</label>
<input id=totalweight type="number" name="attr_load_total" class="skill-value sumrow" value="0" readonly>
<div>&nbsp;</div> <div>&nbsp;</div>
<label for=mountedtoggle>Mounted?</label>
<input id=mountedtoggle type="checkbox" name="attr_is_mounted" value="1">
<input type="hidden" name="attr_is_mounted" class="display-mounted-status"> <!-- this is filled with the value set by the is carried checkbox above-->
<div class="mounted-display full-width"> <img class="full-width" src="https://github.com/olafvantol/roll20-character-sheets/blob/77eb88aea6fe38651e24c68cfae1b6f3ab5f4c60/HarnMaster3_v2/mounted-icon-v2.png?raw=true" /> </div>
<div class="unmounted-display full-width"> <img class="full-width" src="https://github.com/olafvantol/roll20-character-sheets/blob/77eb88aea6fe38651e24c68cfae1b6f3ab5f4c60/HarnMaster3_v2/on-foot-icon-v2.png?raw=true" /> </div>
</div>
<div class='character-grid-section penalties penalties-grid colored-grid'>
<div class="skill-section-title">PENALTIES</div>
<label for=injurylvl>Injury Lvls</label>
<input id=injurylvl type="number" name="attr_injury_total" value="0" class="skill-value" readonly>
<label for=fatigue>Fatigue</label>
<input id=fatigue type="number" name="attr_fatigue_total" value="0" class="skill-value">
<label for=universalpenalty class="sumrow">Universal</label>
<input id=universalpenalty type="number" name="attr_universal_penalty" class="skill-value sumrow" readonly>
<label for=encumbrance>Encumb.</label>
<input id=encumbrance type="number" name="attr_encumbrance" value="0" class="skill-value" readonly>
<label for=physicalpenalty class="sumrow">Physical</label>
<input id=physicalpenalty type="number" name="attr_physical_penalty" value="0" class="skill-value sumrow" readonly>
</div>
<div class='character-grid-section injuries injuries-grid colored-grid'>
<div class="skill-section-title">INJURIES</div>
<div class="skill-header skill-label">Location/Type</div>
<div class="skill-header skill-value">SV</div>
<div class="skill-header skill-value">LvL</div>
<div class="skill-header skill-value">HR</div>
<div class="skill-header skill-value">Day</div>
<div class="skill-header skill-value">&nbsp;</div>
<div class="skill-header">Inf</div>
<fieldset class="repeating_injury">
<input type="text" name="attr_injury_location" class="skill-label">
<select name="attr_injury_severity" class="skill-label">
<option value="M">M</option>
<option value="S">S</option>
<option value="G">G</option>
<option value="K">K</option>
</select>
<input type="number" name="attr_injury_level" class="skill-value" value="0">
<input type="number" name="attr_injury_healingroll" class="skill-value" value="0">
<input type="number" name="attr_injury_day" class="skill-value" value="0">
<button type="roll" value="&{template:custom} {{color=harn}} {{title=@{character_name} rolls a healing check}} {{infected=[[@{injury_infected_feedback}]]}} {{rolltarget=[[{[[{[[(@{injury_healingroll} * [[@{healing_effectivecondition}]]) + ?{Target Modifier?|0}]],5}kh1]],95}kl1]]}} {{rollresult=[[1d100cs5cs10cs15cs20cs25cs30cs35cs40cs45cs50cs55cs60cs65cs70cs75cs80cs85cs90cs95cs100]]}} {{Modifiers=[[?{Target Modifier?|0}]]}} {{Healing Roll=[[@{injury_healingroll} * [[@{healing_effectivecondition}]]]]}} {{desc=@{injury_location} @{injury_severity}@{injury_level} H@{injury_healingroll}}}" name="roll_healingcheck"></button>
<input type="checkbox" name="attr_injury_infected"><span></span>
<input type="hidden" name="attr_injury_infected_feedback" value="0" readonly>
</fieldset>
<div class="injuryrollbutton-grid">
<div>&nbsp;</div>
<button type="roll" class="injuryroll"
value="&{template:custom} {{color=harn}} {{nocrit=1}} {{title=@{character_name} tests shock}} {{rolltarget=[[@{healing_effectivecondition}]]}} {{rollresult=[[[[@{universal_penalty}]]d6]]}} {{base=@{healing_effectivecondition}}} {{rolltype=[[@{universal_penalty}]]d6}}"
name="roll_ShockCheck">Shock
</button>
<button type="roll" class="injuryroll"
value="&{template:custom} {{color=harn}} {{nocrit=1}} {{title=@{character_name} tests stumble}} {{rolltarget=[[@{agl}]]}} {{rollresult=[[[[3d6]] + @{fumblestumblepenalty}]]}} {{base=@{agl}}} {{rolltype=3d6+[[@{fumblestumblepenalty}]]}}"
name="roll_StumbleCheck">Stumble
</button>
<button type="roll" class="injuryroll"
value="&{template:custom} {{color=harn}} {{nocrit=1}} {{title=@{character_name} tests fumble}} {{rolltarget=[[@{dex}]]}} {{rollresult=[[[[3d6]] + @{fumblestumblepenalty}]]}} {{base=@{dex}}} {{rolltype=3d6+[[@{fumblestumblepenalty}]]}}"
name="roll_FumbleCheck">Fumble
</button>
<div>&nbsp;</div>
</div>
</div>
<div class='character-grid-section armorprotection armorprotection-grid bordered-grid'>
<div class="skill-section-title">ARMOR PROTECTION</div>
<div class="skill-label skill-header">Location</div>
<div class="skill-label skill-header">Compound Layers</div>
<div class="skill-value skill-header">B</div>
<div class="skill-value skill-header">E</div>
<div class="skill-value skill-header">P</div>
<div class="skill-value skill-header">F</div>
<div class="sectionarmourhead full-width sectionwrapper">
<label for=skull>Skull</label>
<input id=skull type="text" name="attr_skull_layers" class="armor-label">
<input type="number" name="attr_sk_b" class="skill-value" value="0" readonly>
<input type="number" name="attr_sk_e" class="skill-value" value="0" readonly>
<input type="number" name="attr_sk_p" class="skill-value" value="0" readonly>
<input type="number" name="attr_sk_f" class="skill-value" value="0" readonly>
<label for=face>Face</label>
<input id=face type="text" name="attr_face_layers" class="armor-label">
<input type="number" name="attr_fa_b" class="skill-value" value="0" readonly>
<input type="number" name="attr_fa_e" class="skill-value" value="0" readonly>
<input type="number" name="attr_fa_p" class="skill-value" value="0" readonly>
<input type="number" name="attr_fa_f" class="skill-value" value="0" readonly>
<label for=neck>Neck</label>
<input id=neck type="text" name="attr_neck_layers" class="armor-label">
<input type="number" name="attr_nk_b" class="skill-value" value="0" readonly>
<input type="number" name="attr_nk_e" class="skill-value" value="0" readonly>
<input type="number" name="attr_nk_p" class="skill-value" value="0" readonly>
<input type="number" name="attr_nk_f" class="skill-value" value="0" readonly>
</div>
<div class="sectionarmourarms full-width sectionwrapper">
<label for=shoulder>Shoulder</label>
<input id=shoulder type="text" name="attr_shoulder_layers" class="armor-label">
<input type="number" name="attr_sh_b" class="skill-value" value="0" readonly>
<input type="number" name="attr_sh_e" class="skill-value" value="0" readonly>
<input type="number" name="attr_sh_p" class="skill-value" value="0" readonly>
<input type="number" name="attr_sh_f" class="skill-value" value="0" readonly>
<label for=upperarm>Upper Arm</label>
<input id=upperarm type="text" name="attr_upperarm_layers" class="armor-label">
<input type="number" name="attr_ua_b" class="skill-value" value="0" readonly>
<input type="number" name="attr_ua_e" class="skill-value" value="0" readonly>
<input type="number" name="attr_ua_p" class="skill-value" value="0" readonly>
<input type="number" name="attr_ua_f" class="skill-value" value="0" readonly>
<label for=elbow>Elbow</label>
<input id=elbow type="text" name="attr_elbow_layers" class="armor-label">
<input type="number" name="attr_el_b" class="skill-value" value="0" readonly>
<input type="number" name="attr_el_e" class="skill-value" value="0" readonly>
<input type="number" name="attr_el_p" class="skill-value" value="0" readonly>
<input type="number" name="attr_el_f" class="skill-value" value="0" readonly>
<label for=forearm>Forearm</label>
<input id=forearm type="text" name="attr_forearm_layers" class="armor-label">
<input type="number" name="attr_fo_b" class="skill-value" value="0" readonly>
<input type="number" name="attr_fo_e" class="skill-value" value="0" readonly>
<input type="number" name="attr_fo_p" class="skill-value" value="0" readonly>
<input type="number" name="attr_fo_f" class="skill-value" value="0" readonly>
<label for=hand>Hand</label>
<input id=hand type="text" name="attr_hand_layers" class="armor-label">
<input type="number" name="attr_ha_b" class="skill-value" value="0" readonly>
<input type="number" name="attr_ha_e" class="skill-value" value="0" readonly>
<input type="number" name="attr_ha_p" class="skill-value" value="0" readonly>
<input type="number" name="attr_ha_f" class="skill-value" value="0" readonly>
</div>
<div class="sectionarmourtorso full-width sectionwrapper">
<label for=thorax>Thorax</label>
<input id=thorax type="text" name="attr_thorax_layers" class="armor-label">
<input type="number" name="attr_tx_b" class="skill-value" value="0" readonly>
<input type="number" name="attr_tx_e" class="skill-value" value="0" readonly>
<input type="number" name="attr_tx_p" class="skill-value" value="0" readonly>
<input type="number" name="attr_tx_f" class="skill-value" value="0" readonly>
<label for=abdomen>Abdomen</label>
<input id=abdomen type="text" name="attr_abdomen_layers" class="armor-label">
<input type="number" name="attr_ab_b" class="skill-value" value="0" readonly>
<input type="number" name="attr_ab_e" class="skill-value" value="0" readonly>
<input type="number" name="attr_ab_p" class="skill-value" value="0" readonly>
<input type="number" name="attr_ab_f" class="skill-value" value="0" readonly>
<label for=hip>Hip</label>
<input id=hp type="text" name="attr_hp_layers" class="armor-label">
<input type="number" name="attr_hp_b" class="skill-value" value="0" readonly>
<input type="number" name="attr_hp_e" class="skill-value" value="0" readonly>
<input type="number" name="attr_hp_p" class="skill-value" value="0" readonly>
<input type="number" name="attr_hp_f" class="skill-value" value="0" readonly>
<label for=groin>Groin</label>
<input id=groin type="text" name="attr_groin_layers" class="armor-label">
<input type="number" name="attr_gr_b" class="skill-value" value="0" readonly>
<input type="number" name="attr_gr_e" class="skill-value" value="0" readonly>
<input type="number" name="attr_gr_p" class="skill-value" value="0" readonly>
<input type="number" name="attr_gr_f" class="skill-value" value="0" readonly>
</div>
<div class="sectionarmourlegs full-width sectionwrapper">
<label for=thigh>Thigh</label>
<input id=thigh type="text" name="attr_thigh_layers" class="armor-label">
<input type="number" name="attr_th_b" class="skill-value" value="0" readonly>
<input type="number" name="attr_th_e" class="skill-value" value="0" readonly>
<input type="number" name="attr_th_p" class="skill-value" value="0" readonly>
<input type="number" name="attr_th_f" class="skill-value" value="0" readonly>
<label for=knee>Knee</label>
<input id=knee type="text" name="attr_knee_layers" class="armor-label">
<input type="number" name="attr_kn_b" class="skill-value" value="0" readonly>
<input type="number" name="attr_kn_e" class="skill-value" value="0" readonly>
<input type="number" name="attr_kn_p" class="skill-value" value="0" readonly>
<input type="number" name="attr_kn_f" class="skill-value" value="0" readonly>
<label for=calf>Calf</label>
<input id=calf type="text" name="attr_calf_layers" class="armor-label">
<input type="number" name="attr_ca_b" class="skill-value" value="0" readonly>
<input type="number" name="attr_ca_e" class="skill-value" value="0" readonly>
<input type="number" name="attr_ca_p" class="skill-value" value="0" readonly>
<input type="number" name="attr_ca_f" class="skill-value" value="0" readonly>
<label for=foot>Foot</label>
<input id=foot type="text" name="attr_foot_layers" class="armor-label">
<input type="number" name="attr_ft_b" class="skill-value" value="0" readonly>
<input type="number" name="attr_ft_e" class="skill-value" value="0" readonly>
<input type="number" name="attr_ft_p" class="skill-value" value="0" readonly>
<input type="number" name="attr_ft_f" class="skill-value" value="0" readonly>
</div>
</div>
<div class='character-grid-section carriedweapons weapons-grid colored-grid'>
<div class="skill-section-title">CARRIED MELEE WEAPONS</div>
<div class="skill-header weapon-label">Weapon</div>
<div class="skill-header skill-value harntooltip" data-tooltiptext="Equipped?">E</div>
<div class="skill-header skill-value">WGT</div>
<div class="skill-header skill-value">WQ</div>
<div class="skill-header skill-value">&nbsp;</div>
<div class="skill-header skill-value">ATK</div>
<div class="skill-header skill-value">DEF</div>
<div class="skill-header skill-value">HM</div>
<div class="skill-header skill-value">&nbsp;</div>
<div class="skill-header skill-value">B</div>
<div class="skill-header skill-value">E</div>
<div class="skill-header skill-value">P</div>
<div class="skill-header skill-value">F</div>
<div class="skill-header skill-value">ML</div>
<div class="skill-header skill-value">AML</div>
<div class="skill-header skill-value">&nbsp;</div>
<div class="skill-header skill-value">DML</div>
<div class="skill-header skill-value">&nbsp;</div>
<div class="skill-header skill-label weapon-note">Note</div>
<input type="text" name="attr_punch_weapon_name" class="weapon-label" disabled="true" value="Punch">
<div>&nbsp;</div>
<input type="number" name="attr_punch_weapon_wgt" class="skill-value" disabled="true" value="0">
<input type="number" name="attr_punch_weapon_wq" class="skill-value" disabled="true" value="0">
<button type="roll" value="&{template:custom} {{color=harn}} {{nocrit=1}} {{title=@{character_name} tests weapon break}} {{subtitle=@{punch_weapon_name}}} {{rolltarget=[[@{punch_weapon_wq}]]}} {{rollresult=[[3d6]]}} {{base=@{punch_weapon_wq}}} {{rolltype=3d6}}" name="roll_unarmedweaponbreakcheck">
</button>
<input type="number" name="attr_punch_weapon_atk" class="skill-value" disabled="true" value="0">
<input type="number" name="attr_punch_weapon_def" class="skill-value" disabled="true" value="15">
<input type="number" name="attr_punch_weapon_hm" class="skill-value" disabled="true" value="0">
<div>&nbsp;</div>
<input type="number" name="attr_punch_weapon_b" class="skill-value" disabled="true" value="0">
<input type="number" name="attr_punch_weapon_e" class="skill-value" disabled="true" value="0">
<input type="number" name="attr_punch_weapon_p" class="skill-value" disabled="true" value="0">
<input type="number" name="attr_punch_weapon_f" class="skill-value" disabled="true" value="0">
<input type="number" name="attr_punch_weapon_ml" class="skill-value" readonly>
<input type="number" name="attr_punch_weapon_aml" class="skill-value" readonly>
<button type="roll" value="&{template:custom} {{color=harn}} {{title=@{character_name} attacks with @{punch_weapon_name}}} {{rolltarget=[[{[[{[[@{punch_weapon_aml} - [[(@{physical_penalty})*5]] + ?{Target Modifier?|0}]],5}kh1]],95}kl1]]}} {{Mastery Lvl=[[@{punch_weapon_aml}]]}} {{penalty=[[(@{physical_penalty})*5]]}} {{rollresult=[[1d100cs5cs10cs15cs20cs25cs30cs35cs40cs45cs50cs55cs60cs65cs70cs75cs80cs85cs90cs95cs100]]}} {{Modifiers=[[?{Target Modifier?|0}]]}} {{desc=B(@{punch_weapon_b}) E(@{punch_weapon_e}) P(@{punch_weapon_p})}}" name="roll_UnarmedWeaponAMLSkillCheck">
</button>
<input type="number" name="attr_punch_weapon_dml" class="skill-value" readonly>
<button type="roll" value="&{template:custom} {{color=harn}} {{title=@{character_name} blocks with a @{punch_weapon_name}}} {{rolltarget=[[{[[{[[@{punch_weapon_dml} - [[(@{physical_penalty})*5]] + ?{Target Modifier?|0}]],5}kh1]],95}kl1]]}} {{Mastery Lvl=[[@{punch_weapon_dml}]]}} {{penalty=[[(@{physical_penalty})*5]]}} {{rollresult=[[1d100cs5cs10cs15cs20cs25cs30cs35cs40cs45cs50cs55cs60cs65cs70cs75cs80cs85cs90cs95cs100]]}} {{Modifiers=[[?{Target Modifier?|0}]]}}" name="roll_unarmedweapondmlskillcheck">
</button>
<input type="text" name="attr_punch_weapon_note" class="skill-label weapon-note">
<input type="text" name="attr_kick_weapon_name" class="weapon-label" disabled="true" value="Kick">
<div>&nbsp;</div>
<input type="number" name="attr_kick_weapon_wgt" class="skill-value" disabled="true" value="0">
<input type="number" name="attr_kick_weapon_wq" class="skill-value" disabled="true" value="0">
<button type="roll" value="&{template:custom} {{color=harn}} {{nocrit=1}} {{title=@{character_name} tests weapon break}} {{subtitle=@{kick_weapon_name}}} {{rolltarget=[[@{kick_weapon_wq}]]}} {{rollresult=[[3d6]]}} {{base=@{kick_weapon_wq}}} {{rolltype=3d6}}" name="roll_unarmedweaponbreakcheck">
</button>
<input type="number" name="attr_kick_weapon_atk" class="skill-value" disabled="true" value="5">
<input type="number" name="attr_kick_weapon_def" class="skill-value" disabled="true" value="5">
<input type="number" name="attr_kick_weapon_hm" class="skill-value" disabled="true" value="0">
<div>&nbsp;</div>
<input type="number" name="attr_kick_weapon_b" class="skill-value" disabled="true" value="1">
<input type="number" name="attr_kick_weapon_e" class="skill-value" disabled="true" value="0">
<input type="number" name="attr_kick_weapon_p" class="skill-value" disabled="true" value="0">
<input type="number" name="attr_kick_weapon_f" class="skill-value" disabled="true" value="0">
<input type="number" name="attr_kick_weapon_ml" class="skill-value" readonly>
<input type="number" name="attr_kick_weapon_aml" class="skill-value" readonly>
<button type="roll" value="&{template:custom} {{color=harn}} {{title=@{character_name} attacks with a @{kick_weapon_name}}} {{rolltarget=[[{[[{[[@{kick_weapon_aml} - [[(@{physical_penalty})*5]] + ?{Target Modifier?|0}]],5}kh1]],95}kl1]]}}{{Mastery Lvl=[[@{kick_weapon_aml}]]}} {{penalty=[[(@{physical_penalty})*5]]}} {{rollresult=[[1d100cs5cs10cs15cs20cs25cs30cs35cs40cs45cs50cs55cs60cs65cs70cs75cs80cs85cs90cs95cs100]]}} {{Modifiers=[[?{Target Modifier?|0}]]}} {{desc=B(@{kick_weapon_b}) E(@{kick_weapon_e}) P(@{kick_weapon_p})}}" name="roll_UnarmedWeaponAMLSkillCheck">
</button>
<input type="number" name="attr_kick_weapon_dml" class="skill-value" readonly>
<button type="roll" value="&{template:custom} {{color=harn}} {{title=@{character_name} defends with a @{kick_weapon_name}}} {{rolltarget=[[{[[{[[@{kick_weapon_dml} - [[(@{physical_penalty})*5]] + ?{Target Modifier?|0}]],5}kh1]],95}kl1]]}} {{Mastery Lvl=[[@{kick_weapon_dml}]]}} {{penalty=[[(@{physical_penalty})*5]]}} {{rollresult=[[1d100cs5cs10cs15cs20cs25cs30cs35cs40cs45cs50cs55cs60cs65cs70cs75cs80cs85cs90cs95cs100]]}} {{Modifiers=[[?{Target Modifier?|0}]]}}" name="roll_unarmedweapondmlskillcheck">
</button>
<input type="text" name="attr_kick_weapon_note" class="skill-label weapon-note">
<fieldset class="repeating_weapon">
<input type="hidden" name="attr_weapon_iscarried" class="display-carried-weapon"> <!-- this is filled with the value set by the is carried checkbox above-->
<div class="weapon-display">
<input type="text" name="attr_weapon_name" class="weapon-label" readonly>
<input type="checkbox" name="attr_weapon_iscarried" value="1">
<input type="number" name="attr_weapon_wgt" class="skill-value" readonly>
<input type="number" name="attr_weapon_wq" class="skill-value" readonly>
<button type="roll" value="&{template:custom} {{color=harn}} {{nocrit=1}} {{title=@{character_name} tests weapon break}} {{subtitle=@{weapon_name}}} {{rolltarget=[[@{weapon_wq}]]}} {{rollresult=[[3d6]]}} {{base=@{weapon_wq}}} {{rolltype=3d6}}" name="roll_WeaponBreakCheck">
</button>
<input type="number" name="attr_weapon_atk" class="skill-value" readonly>
<input type="number" name="attr_weapon_def" class="skill-value" readonly>
<input type="number" name="attr_weapon_hm" class="skill-value" readonly>
<button type="roll" class="harntooltip" value="&{template:custom} {{color=harn}} {{title=@{character_name} attacks with a @{weapon_name}}} {{subtitle=With HM penalty}} {{rolltarget=[[{[[{[[@{weapon_aml} + @{weapon_hm} - [[(@{physical_penalty})*5]] + ?{Target Modifier?|0}]],5}kh1]],95}kl1]]}} {{Mastery Lvl=[[@{weapon_aml}]]}} {{penalty=[[[[(@{physical_penalty})*5]] + [[-1*@{weapon_hm}]]]]}} {{rollresult=[[1d100cs5cs10cs15cs20cs25cs30cs35cs40cs45cs50cs55cs60cs65cs70cs75cs80cs85cs90cs95cs100]]}} {{Modifier=[[?{Target Modifier?|0}]]}} {{desc=B(@{weapon_b}) E(@{weapon_e}) P(@{weapon_p}) F(@{weapon_f})}}" name="roll_WeaponHMAMLSkillCheck" data-tooltiptext="Use this button to roll attack with included HM penalty">
</button>
<input type="number" name="attr_weapon_b" class="skill-value" readonly>
<input type="number" name="attr_weapon_e" class="skill-value" readonly>
<input type="number" name="attr_weapon_p" class="skill-value" readonly>
<input type="number" name="attr_weapon_f" class="skill-value" readonly>
<input type="number" name="attr_weapon_ml" class="skill-value" readonly>
<input type="number" name="attr_weapon_aml" class="skill-value" readonly>
<button type="roll" class="harntooltip" value="&{template:custom} {{color=harn}} {{title=@{character_name} attacks with a @{weapon_name}}} {{rolltarget=[[{[[{[[@{weapon_aml} - [[(@{physical_penalty})*5]] + ?{Target Modifier?|0}]],5}kh1]],95}kl1]]}}{{Mastery Lvl=[[@{weapon_aml}]]}} {{penalty=[[(@{physical_penalty})*5]]}} {{rollresult=[[1d100cs5cs10cs15cs20cs25cs30cs35cs40cs45cs50cs55cs60cs65cs70cs75cs80cs85cs90cs95cs100]]}} {{Modifier=[[?{Target Modifier?|0}]]}} {{successdesc=B(@{weapon_b}) E(@{weapon_e}) P(@{weapon_p}) F(@{weapon_f})}}" name="roll_WeaponAMLSkillCheck" data-tooltiptext="Use this button to roll a normal attack">
</button>
<input type="number" name="attr_weapon_dml" class="skill-value" readonly>
<button type="roll" value="&{template:custom} {{color=harn}} {{title=@{character_name} blocks with a @{weapon_name}}} {{rolltarget=[[{[[{[[@{weapon_dml} - [[(@{physical_penalty})*5]] + ?{Target Modifier?|0}]],5}kh1]],95}kl1]]}} {{Mastery Lvl=[[@{weapon_dml}]]}} {{penalty=[[(@{physical_penalty})*5]]}} {{rollresult=[[1d100cs5cs10cs15cs20cs25cs30cs35cs40cs45cs50cs55cs60cs65cs70cs75cs80cs85cs90cs95cs100]]}} {{Modifier=[[?{Target Modifier?|0}]]}} {{desc=WQ @{weapon_wq}}}" name="roll_WeaponDMLSkillCheck">
</button>
<input type="text" name="attr_weapon_note" class="skill-label weapon-note" readonly>
</div>
</fieldset>
</div>
<div class='character-grid-section carriedmissileweapons missileweapons-grid colored-grid'>
<div class="skill-section-title">CARRIED MISSILE WEAPONS</div>
<div class="skill-header weapon-label">Missile Weapon</div>
<div class="skill-header skill-value harntooltip" data-tooltiptext="Equipped?">E</div>
<div class="skill-header skill-value harntooltip" data-tooltiptext="Missile aspect for impact">A</div>
<div class="skill-header skill-value harntooltip" data-tooltiptext="Missile impact">IMP</div>
<div class="skill-header skill-value">ML</div>
<div class="skill-header skill-value">Short</div>
<div class="skill-header skill-value">AML</div>
<div class="skill-header skill-value">Dmg</div>
<div class="skill-header skill-value">&nbsp;</div>
<div class="mw-extraranges">
<div class="skill-header skill-value">Medium</div>
<div class="skill-header skill-value">AML</div>
<div class="skill-header skill-value">Dmg</div>
<div class="skill-header skill-value">&nbsp;</div>
<div class="skill-header skill-value">Long</div>
<div class="skill-header skill-value">AML</div>
<div class="skill-header skill-value">Dmg</div>
<div class="skill-header skill-value">&nbsp;</div>
<div class="skill-header skill-value">Ext</div>
<div class="skill-header skill-value">AML</div>
<div class="skill-header skill-value">Dmg</div>
<div class="skill-header skill-value">&nbsp;</div>
</div>
<div class="skill-header skill-value">Ammo</div>
<fieldset class="repeating_missileweapon">
<input type="hidden" name="attr_missileweapon_iscarried" class="display-carried-missileweapon"> <!-- this is filled with the value set by the is carried checkbox above-->
<div class="missileweapon-display">
<input type="text" name="attr_missileweapon_name" class="weapon-label" readonly>
<input type="checkbox" name="attr_missileweapon_iscarried" value="1">
<input type="text" name="attr_missileweapon_aspect" class="skill-value" readonly>
<input type="number" name="attr_missileweapon_p" class="skill-value" value="0" readonly>
<input type="number" name="attr_missileweapon_ml" class="skill-value" value="0" readonly>
<input type="number" name="attr_missileweapon_short" class="skill-value" value="0" readonly>
<input type="number" name="attr_missileweapon_short_aml" class="skill-value" value="0" readonly>
<input type="number" name="attr_missileweapon_short_dmg" class="skill-value" value="0" readonly>
<button type="roll" value="&{template:custom} {{color=harn}} {{title=@{character_name} shoots with a @{missileweapon_name}}} {{subtitle=at Short Range}} {{rolltarget=[[{[[{[[@{missileweapon_short_aml} - [[(@{physical_penalty})*5]] - [[(@{is_mounted})*10]] + ?{Target Modifier?|0}]],5}kh1]],95}kl1]]}} {{Mastery Lvl=[[@{missileweapon_short_aml}]]}} {{penalty=[[(@{physical_penalty})*5 +(@{is_mounted})*10]]}} {{rollresult=[[1d100cs5cs10cs15cs20cs25cs30cs35cs40cs45cs50cs55cs60cs65cs70cs75cs80cs85cs90cs95cs100]]}} {{Modifier=[[?{Target Modifier?|0}]]}} {{successdesc=@{missileweapon_aspect}(@{missileweapon_short_dmg}) }}" name="roll_MissileWeaponShortSkillCheck">
</button>
<div class="mw-extraranges">
<input type="number" name="attr_missileweapon_medium" class="skill-value" value="0" readonly>
<input type="number" name="attr_missileweapon_medium_aml" class="skill-value" value="0" readonly>
<input type="number" name="attr_missileweapon_medium_dmg" class="skill-value" value="0" readonly>
<button type="roll" value="&{template:custom} {{color=harn}} {{title=@{character_name} shoots with a @{missileweapon_name}}} {{subtitle=at Medium Range}} {{rolltarget=[[{[[{[[@{missileweapon_medium_aml} - [[(@{physical_penalty})*5]] - [[(@{is_mounted})*10]] + ?{Target Modifier?|0}]],5}kh1]],95}kl1]]}} {{Mastery Lvl=[[@{missileweapon_medium_aml}]]}} {{penalty=[[(@{physical_penalty})*5 +(@{is_mounted})*10]]}} {{rollresult=[[1d100cs5cs10cs15cs20cs25cs30cs35cs40cs45cs50cs55cs60cs65cs70cs75cs80cs85cs90cs95cs100]]}} {{Modifier=[[?{Target Modifier?|0}]]}} {{successdesc=@{missileweapon_aspect}(@{missileweapon_medium_dmg})}}" name="roll_MissileWeaponMediumSkillCheck">
</button>
<input type="number" name="attr_missileweapon_long" class="skill-value" value="0" readonly>
<input type="number" name="attr_missileweapon_long_aml" class="skill-value" value="0" readonly>
<input type="number" name="attr_missileweapon_long_dmg" class="skill-value" value="0" readonly>
<button type="roll" value="&{template:custom} {{color=harn}} {{title=@{character_name} shoots with a @{missileweapon_name}}} {{subtitle=at Long Range}} {{rolltarget=[[{[[{[[@{missileweapon_long_aml} - [[(@{physical_penalty})*5]] - [[(@{is_mounted})*10]] + ?{Target Modifier?|0}]],5}kh1]],95}kl1]]}} {{Mastery Lvl=[[@{missileweapon_long_aml}]]}} {{penalty=[[(@{physical_penalty})*5 +(@{is_mounted})*10]]}} {{rollresult=[[1d100cs5cs10cs15cs20cs25cs30cs35cs40cs45cs50cs55cs60cs65cs70cs75cs80cs85cs90cs95cs100]]}} {{Modifier=[[?{Target Modifier?|0}]]}} {{successdesc=@{missileweapon_aspect}(@{missileweapon_long_dmg})}}" name="roll_MissileWeaponLongSkillCheck">
</button>
<input type="number" name="attr_missileweapon_extreme" class="skill-value" value="0" readonly>
<input type="number" name="attr_missileweapon_extreme_aml" class="skill-value" value="0" readonly>
<input type="number" name="attr_missileweapon_extreme_dmg" class="skill-value" value="0" readonly>
<button type="roll" value="&{template:custom} {{color=harn}} {{title=@{character_name} shoots with a @{missileweapon_name}}} {{subtitle=at Extreme Range}} {{rolltarget=[[{[[{[[@{missileweapon_extreme_aml} - [[(@{physical_penalty})*5]] - [[(@{is_mounted})*10]] + ?{Target Modifier?|0}]],5}kh1]],95}kl1]]}} {{Mastery Lvl=[[@{missileweapon_extreme_aml}]]}} {{penalty=[[(@{physical_penalty})*5 +(@{is_mounted})*10]]}} {{rollresult=[[1d100cs5cs10cs15cs20cs25cs30cs35cs40cs45cs50cs55cs60cs65cs70cs75cs80cs85cs90cs95cs100]]}} {{Modifier=[[?{Target Modifier?|0}]]}} {{successdesc=@{missileweapon_aspect}(@{missileweapon_extreme_dmg})}}" name="roll_MissileWeaponExtremeSkillCheck">
</button>
</div>
<input type="number" name="attr_missileweapon_ammo" class="skill-value">
</div>
</fieldset>
</div>
<div class='character-grid-section section-title-half sectionoptions'><h2>Magic & Religion</h2></div>
<span>Show: </span>
<span>Spells</span>
<input type="checkbox" name="attr_show_spells" class="toggle-show-spells" checked/>
<span>Rituals</span>
<input type="checkbox" name="attr_show_rituals" class="toggle-show-rituals" checked/>
<span>Psionic</span>
<input type="checkbox" name="attr_show_psionic" class="toggle-show-psionic" checked/>
<input class="showsinglepiety" name="attr_hrconsolidatedpiety" type="hidden" value="1"/>
<div class='character-grid-section magic magic-grid mr-spells colored-grid'>
<div class="skill-section-title">SPELLS</div>
<div class="skill-header ">Name</div>
<div class="skill-header">Convocation</div>
<div class="skill-header">&nbsp;</div>
<div class="skill-header skill-value">Lvl</div>
<div class="skill-header skill-value harntooltip" data-tooltiptext="Casting Time (seconds)">CT</div>
<div class="skill-header skill-value harntooltip" data-tooltiptext="Duration (seconds)">Dur</div>
<div class="skill-header skill-value harntooltip" data-tooltiptext="Range (meters, self or touch)">Range</div>
<div class="skill-header skill-value harntooltip" data-tooltiptext="Skill Base of spell when using individual spell skills">SB</div>
<div class="skill-header skill-value harntooltip" data-tooltiptext="Skill Index of spell when using individual spell skills">SI</div>
<div class="skill-header skill-value">ML</div>
<div class="skill-header">&nbsp;</div>
<fieldset class="repeating_spells">
<input type="text" name="attr_spell_name" class="magic-label">
<input type="text" name="attr_spell_convocation" class="magic-label">
<div>&nbsp;</div>
<input type="number" name="attr_spell_level" class="skill-value" value="0">
<input type="number" name="attr_spell_ct" class="skill-value" value="0">
<input type="number" name="attr_spell_duration" class="skill-value" value="0">
<input type="text" name="attr_spell_range" class="skill-value" value="0">
<input type="number" name="attr_spell_sb" class="skill-value" value="0">
<input type="number" name="attr_spell_si" class="skill-value" value="0" readonly>
<input type="number" name="attr_spell_eml" class="skill-value" value="0">
<button type="roll" value="&{template:custom} {{color=harn}} {{title=@{character_name} casts @{spell_name}}} {{subtitle=@{spell_convocation}}} {{rolltarget=[[{[[{[[@{spell_eml} - [[(@{universal_penalty})*5]] + ?{Target Modifier?|0}]],5}kh1]],95}kl1]]}} {{Mastery Lvl=[[@{spell_eml}]]}} {{penalty=[[(@{universal_penalty})*5]]}} {{rollresult=[[1d100cs5cs10cs15cs20cs25cs30cs35cs40cs45cs50cs55cs60cs65cs70cs75cs80cs85cs90cs95cs100]]}} {{Modifiers=[[?{Target Modifier?|0}]]}} {{successdesc=@{spell_note}}}" name="roll_spellcastcheck">
</button>
<label for="spell-description">Spell description</label>
<input id="spell-description" type="text" name="attr_spell_note" class="magic-note">
</fieldset>
</div>
<div class='character-grid-section magic magic-grid mr-rituals colored-grid'>
<div class="skill-section-title">RITUALS</div>
<div class="skill-header">Name</div>
<div class="skill-header">Deity</div>
<div class="skill-header">&nbsp;</div>
<div class="skill-header skill-value">Lvl</div>
<div class="skill-header skill-value harntooltip" data-tooltiptext="Casting Time (seconds)">CT</div>
<div class="skill-header skill-value harntooltip" data-tooltiptext="Duration (seconds)">Dur</div>
<div class="skill-header skill-value harntooltip" data-tooltiptext="Range (meters, self or touch)">Range</div>
<div class="skill-header skill-value harntooltip" data-tooltiptext="Skill Base of spell when using individual ritual skills">SB</div>
<div class="skill-header skill-value harntooltip" data-tooltiptext="Skill Index of spell when using individual ritual skills">SI</div>
<div class="skill-header skill-value">ML</div>
<div class="skill-header">&nbsp;</div>
<fieldset class="repeating_rituals">
<input type="text" name="attr_ritual_name" class="magic-label ">
<input type="text" name="attr_ritual_religion" class="piety-label">
<div>&nbsp;</div>
<input type="number" name="attr_ritual_level" class="skill-value" value="0">
<input type="number" name="attr_ritual_ct" class="skill-value" value="0">
<input type="number" name="attr_ritual_duration" class="skill-value" value="0">
<input type="text" name="attr_ritual_range" class="skill-value" value="0">
<input type="number" name="attr_ritual_sb" class="skill-value" value="0">
<input type="number" name="attr_ritual_si" class="skill-value" value="0" readonly>
<input type="number" name="attr_ritual_eml" class="skill-value" value="0">
<button type="roll" value="&{template:custom} {{color=harn}} {{title=@{character_name} performs @{ritual_name}}} {{subtitle=@{ritual_religion}}} {{rolltarget=[[{[[{[[@{ritual_eml} - [[(@{universal_penalty})*5]] + ?{Target Modifier?|0}]],5}kh1]],95}kl1]]}} {{Mastery Lvl=[[@{ritual_eml}]]}} {{penalty=[[(@{universal_penalty})*5]]}} {{rollresult=[[1d100cs5cs10cs15cs20cs25cs30cs35cs40cs45cs50cs55cs60cs65cs70cs75cs80cs85cs90cs95cs100]]}} {{Modifiers=[[?{Target Modifier?|0}]]}} {{successdesc=@{ritual_note}}}" name="roll_ritualcheck"></button>
<label for="ritual-description">Ritual description</label>
<input id="ritual-description" type="text" name="attr_ritual_note" class="magic-note">
</fieldset>
</div>
<div class='character-grid-section magic magic-grid mr-psionic colored-grid'>
<div class="skill-section-title">PSIONIC POWERS</div>
<div class="skill-header">Talent</div>
<div class="skill-header">&nbsp;</div>
<div class="skill-header">&nbsp;</div>
<div class="skill-value skill-header harntooltip" data-tooltiptext="Fatigue Penalty">FP</div>
<div class="skill-header skill-value harntooltip" data-tooltiptext="Casting Time (seconds)">CT</div>
<div class="skill-header skill-value harntooltip" data-tooltiptext="Duration (seconds)">Dur</div>
<div class="skill-header skill-value harntooltip" data-tooltiptext="Range (meters, self or touch)">Range</div>
<div class="skill-header skill-value harntooltip" data-tooltiptext="Skill Base of spell when using individual spell skills">SB</div>
<div class="skill-header skill-value harntooltip" data-tooltiptext="Skill Index of spell when using individual spell skills">SI</div>
<div class="skill-header skill-value">ML</div>
<div class="skill-header">&nbsp;</div>
<fieldset class="repeating_psionics">
<input type="text" name="attr_talent_name" class="magic-label ">
<div>&nbsp;</div>
<div>&nbsp;</div>
<input type="number" name="attr_talent_fatigue" class="skill-value" value="0">
<input type="number" name="attr_talent_time" class="skill-value" value="0">
<input type="number" name="attr_talent_duration" class="skill-value" value="0">
<input type="text" name="attr_talent_range" class="skill-value" value="0">
<input type="number" name="attr_talent_sb" class="skill-value" value="0">
<input type="number" name="attr_talent_si" class="skill-value" value="0" readonly>
<input type="number" name="attr_talent_eml" class="skill-value" value="0">
<button type="roll" value="&{template:custom} {{color=harn}} {{title=@{character_name} invokes @{talent_name}}} {{rolltarget=[[{[[{[[@{talent_eml} - [[(@{universal_penalty})*5]] + ?{Target Modifier?|0}]],5}kh1]],95}kl1]]}} {{Mastery Lvl=[[@{talent_eml}]]}} {{penalty=[[(@{universal_penalty})*5]]}} {{rollresult=[[1d100cs5cs10cs15cs20cs25cs30cs35cs40cs45cs50cs55cs60cs65cs70cs75cs80cs85cs90cs95cs100]]}} {{Modifiers=[[?{Target Modifier?|0}]]}} {{successdesc=(@{talent_time}); @{talent_note}}}" name="roll_talentcheck"></button>
<label for="psionic-description">Talent description</label>
<input id="psionic-description" type="text" name="attr_talent_note" class="magic-note">
</fieldset>
</div>
<input class="showsinglepiety" name="attr_hrconsolidatedpiety" type="hidden" value="1"/>
<div class='character-grid-section piety piety-grid colored-grid'>
<div class="skill-section-title">PIETY</div>
<div class="skill-header">God</div>
<div class="skill-value skill-header">Pts</div>
<fieldset class="repeating_piety">
<input type="text" name="attr_piety_name" class="piety-label">
<input type="number" name="attr_piety_points" class="skill-value" value="0">
</fieldset>
</div>
</div>
<input class="showhorse" name="attr_hrhorseonsheet" type="hidden" value="1"/>
<div class='character-grid horse-grid'> <!-- HORSE section (optional) -->
<div class='character-grid-section horse-section section-title'><h2>Horse</h2></div>
<div class='character-grid-section horse-section basichorseinfo bhigrid colored-grid'>
<label for=horsename>Horse Name</label>
<input id=horsename type="text" name="attr_hname" class="skill-label">
<label for=horsebreed>Horse Breed</label>
<input type="text" id=horsebreed name="attr_hspecies" class="skill-label" list="hbreeds">
<datalist id="hbreeds">
<option value="Reksyni">Reksyni</option><!-- standard Harn value-->
<option value="Hacherdad">Hacherdad</option><!-- standard Harn value-->
<option value="Lankum">Lankum</option><!-- standard Harn value-->
<option value="Khanset">Khanset</option><!-- standard Harn value-->
<option value="Hodiri">Hodiri</option><!-- standard Harn value-->
<option value="Chelni">Chelni</option><!-- standard Harn value-->
<option value="Asil">Asil</option><!-- our setting custom value-->
<option value="Goklan">Goklan</option><!-- our setting custom value-->
</datalist>
<label for=horsegender>Gender</label>
<input type="text" id=horsegender name="attr_hgender" class="skill-label" list="hgender">
<datalist id="hgender">
<option value="Stallion">Stallion</option>
<option value="Mare">Mare</option>
</datalist>
</div>
<div class='character-grid-section horse-section horseattribs horseattribs-grid bordered-grid'>
<div class="skill-section-title">ATTRIBUTES</div>
<label for=horsestr>STR</label>
<input id=horsestr type="number" name="attr_hstr" class="skill-value" value="0">
<label for=horseint>INT</label>
<input id=horseint type="number" name="attr_hint" class="skill-value" value="0">
<label for=horsesta>STA</label>
<input id=horsesta type="number" name="attr_hsta" class="skill-value" value="0">
<label for=horseaur>AURA</label>
<input id=horseaur type="number" name="attr_haura" class="skill-value" value="0">
<label for=horseagl>AGL</label>
<input id=horseagl type="number" name="attr_hagl" class="skill-value" value="0">
<label for=horsewil>WILL</label>
<input id=horsewil type="number" name="attr_hwil" class="skill-value" value="0">
<label for=horseeye >EYE</label>
<input id=horseeye type="number" name="attr_heye" class="skill-value" value="0">
<label for=horsemove>Move</label>
<input id=horsemove type="number" name="attr_hmove" class="skill-value" value="0">
<label for=horsehrg>HRG</label>
<input id=horsehrg type="number" name="attr_hhrg" class="skill-value" value="0">
<label for=horsesml>SML</label>
<input id=horsesml type="number" name="attr_hsmell" class="skill-value" value="0">
<label for=horseloadlimit class="width-2col">Load Limit</label>
<div class="labelinputjoin">&nbsp </div>
<input id=horseloadlimit type="number" name="attr_hloadlimit" class="skill-value" readonly>
</div>
<div class='character-grid-section horse-section horseabilities horseabilities-grid colored-grid'>
<div class="skill-section-title">ABILITIES</div>
<div class="skill-header">Skill</div>
<div class="skill-header">SB</div>
<div class="skill-header">ML</div>
<div class="skill-header">&nbsp </div>
<input type="text" class="skill-label" name="attr_hawareness_name" value="Awareness" disabled="true">
<input type="number" name="attr_hawareness_sb" class="skill-value" value="0">
<input type="number" name="attr_hawareness_ml" class="skill-value" value="0">
<button type="roll" value="&{template:custom} {{color=harn}} {{title=@{hname} tests @{hawareness_name}}} {{rolltarget=[[{[[{[[@{hawareness_ml} - [[(@{hphysical_penalty})*5]] + ?{Target Modifier?|0}]],5}kh1]],95}kl1]]}} {{Mastery Lvl=[[@{hawareness_ml}]]}} {{Modifiers=[[?{Target Modifier?|0}]]}} {{penalty=[[(@{hphysical_penalty})*5]]}} {{rollresult=[[1d100cs5cs10cs15cs20cs25cs30cs35cs40cs45cs50cs55cs60cs65cs70cs75cs80cs85cs90cs95cs100]]}}" name="roll_HorseAwarenessCheck">
</button>
<input type="text" class="skill-label" name="attr_hdodge_name" value="Dodge" disabled="true">
<input type="number" name="attr_hdodge_sb" class="skill-value" value="0">
<input type="number" name="attr_hdodge_ml" class="skill-value" value="0">
<button type="roll" value="&{template:custom} {{color=harn}} {{title=@{hname} tests @{hdodge_name}}} {{rolltarget=[[{[[{[[@{hdodge_ml} - [[(@{hphysical_penalty})*5]] + ?{Target Modifier?|0}]],5}kh1]],95}kl1]]}} {{Mastery Lvl=[[@{hdodge_ml}]]}} {{Modifiers=[[?{Target Modifier?|0}]]}} {{penalty=[[(@{hphysical_penalty})*5]]}} {{rollresult=[[1d100cs5cs10cs15cs20cs25cs30cs35cs40cs45cs50cs55cs60cs65cs70cs75cs80cs85cs90cs95cs100]]}}" name="roll_HorseDodgeCheck">
</button>
<input type="text" class="skill-label" name="attr_hinitiative_name" value="Horse Initiative" disabled="true">
<input type="number" name="attr_hinitiative_sb" class="skill-value" value="0">
<input type="number" name="attr_hinitiative_ml" class="skill-value" value="0">
<button type="roll" value="&{template:custom} {{color=harn}} {{title=@{hname} tests @{hinitiative_name}}} {{rolltarget=[[{[[{[[@{hinitiative_ml} - [[(@{hphysical_penalty})*5]] + ?{Target Modifier?|0}]],5}kh1]],95}kl1]]}} {{Mastery Lvl=[[@{hinitiative_ml}]]}} {{Modifiers=[[?{Target Modifier?|0}]]}} {{penalty=[[(@{hphysical_penalty})*5]]}} {{rollresult=[[1d100cs5cs10cs15cs20cs25cs30cs35cs40cs45cs50cs55cs60cs65cs70cs75cs80cs85cs90cs95cs100]]}}" name="roll_HorseInitiativeCheck">
</button>
<input type="text" class="skill-label" name="attr_hjumping_name" value="Jumping" disabled="true">
<input type="number" name="attr_hjumping_sb" class="skill-value" value="0">
<input type="number" name="attr_hjumping_ml" class="skill-value" value="0">
<button type="roll" value="&{template:custom} {{color=harn}} {{title=@{hname} tests @{hjumping_name}}} {{rolltarget=[[{[[{[[@{hjumping_ml} - [[(@{hphysical_penalty})*5]] + ?{Target Modifier?|0}]],5}kh1]],95}kl1]]}} {{Mastery Lvl=[[@{hjumping_ml}]]}} {{Modifiers=[[?{Target Modifier?|0}]]}} {{penalty=[[(@{hphysical_penalty})*5]]}} {{rollresult=[[1d100cs5cs10cs15cs20cs25cs30cs35cs40cs45cs50cs55cs60cs65cs70cs75cs80cs85cs90cs95cs100]]}}" name="roll_HorseJumpCheck">
</button>
<input type="text" class="skill-label" name="attr_hstealth_name" value="Stealth" disabled="true">
<input type="number" name="attr_hstealth_sb" class="skill-value" value="0">
<input type="number" name="attr_hstealth_ml" class="skill-value" value="0">
<button type="roll" value="&{template:custom} {{color=harn}} {{title=@{hname} tests @{hstealth_name}}} {{rolltarget=[[{[[{[[@{hstealth_ml} - [[(@{hphysical_penalty})*5]] + ?{Target Modifier?|0}]],5}kh1]],95}kl1]]}} {{Mastery Lvl=[[@{hstealth_ml}]]}} {{Modifiers=[[?{Target Modifier?|0}]]}} {{penalty=[[(@{hphysical_penalty})*5]]}} {{rollresult=[[1d100cs5cs10cs15cs20cs25cs30cs35cs40cs45cs50cs55cs60cs65cs70cs75cs80cs85cs90cs95cs100]]}}" name="roll_HorseStealthCheck">
</button>
<input type="text" class="skill-label" name="attr_htrample_name" value="Trample" disabled="true">
<input type="number" name="attr_htrample_sb" class="skill-value" value="0">
<input type="number" name="attr_htrample_ml" class="skill-value" value="0">
</div>
<div class='character-grid-section horse-section horsecombat horsecombat-grid colored-grid'>
<div class="skill-section-title">COMBAT</div>
<label for=horseinit>Horse Init</label>
<input id=horseinit type="number" name="attr_hcombat_initiative" value="0" class="skill-value" readonly>
<div>&nbsp; </div>
<label for=horseendurance>Endurance</label>
<input id=horseendurance type="number" name="attr_hcombat_endurance" class="skill-value" value="0" readonly>
<div>&nbsp; </div>
<label for=horseagility>Agility</label>
<input id=horseagility type="number" name="attr_hagl" readonly class="skill-value">
<div>&nbsp; </div>
<label for=horsecombatmove>Move / min. move</label>
<input id=horsecombatmove type="number" name="attr_hcombat_move" class="skill-value" value="0" readonly>
<div>/
<span name="attr_hcombat_min_move" class="skill-value"></span>
</div>
<label for=horseturn>60&deg; turn (hex)</label>
<input id=horseturn type="number" name="attr_hturn" readonly value="0" class="skill-value">
<div>&nbsp; </div>
<label for=horsecombatdodge>Dodge</label>
<input id=horsecombatdodge type="number" name="attr_hdodge_ml" class="skill-value" readonly>
<button type="roll" value="&{template:custom} {{color=harn}} {{title=@{hname} dodges}} {{rolltarget=[[{[[{[[@{hdodge_ml} - [[(@{hphysical_penalty})*5]] + ?{Target Modifier?|0}]],5}kh1]],95}kl1]]}} {{Mastery Lvl=[[@{hdodge_ml}]]}} {{Modifiers=[[?{Target Modifier?|0}]]}} {{penalty=[[(@{hphysical_penalty})*5]]}} {{rollresult=[[1d100cs5cs10cs15cs20cs25cs30cs35cs40cs45cs50cs55cs60cs65cs70cs75cs80cs85cs90cs95cs100]]}}" name="roll_HorseCombatDodgeCheck">
</button>
<label for=horsespeed>Horse speed:</label>
<select id=horsespeed name="attr_horse_speed" class="skill-label width-2col">
<option value=0 selected="selected">Stop</option>
<option value=0.5>Walk</option>
<option value=1>Trot</option>
<option value=2>Canter</option>
<option value=3>Gallop</option>
</select>
</div>
<div class='character-grid-section horse-section horseload horseload-grid colored-grid'>
<div class="skill-section-title">LOAD CARRIED</div>
<label for=riderload>Total Rider Load</label>
<input id=horseriderload type="number" name="attr_hload_rider_total" class="skill-value" value="0" readonly>
<label for=horsearmorload>Horse Armour</label>
<input id=horsearmorload type="number" name="attr_hload_armor_total" class="skill-value" value="0" class="number-value" readonly>
<label for=horseinvenload>Horse Inventory</label>
<input id=horseinvenload type="number" name="attr_hload_inventory_total" class="skill-value" value="0" class="number-value" readonly>
<label for=htotalweight class="sumrow">Total Weight</label>
<input id=htotalweight type="number" name="attr_hload_total" class="skill-value sumrow" value="0" readonly>
<label for=hadjload class="sumrow">Adjusted Load</label>
<input id=hadjload type="number" name="attr_hadjusted_load" class="skill-value sumrow" value="0" readonly>
</div>
<div class='character-grid-section horse-section horseap horseap-grid colored-grid'>
<div class="skill-section-title">ARMOUR PROTECTION</div>
<div class="info-label skill-header">Location</div>
<div class="skill-header">Compound Layers</div>
<div class="skill-value skill-header">AQ</div>
<div class="skill-value skill-header">B</div>
<div class="skill-value skill-header">E</div>
<div class="skill-value skill-header">P</div>
<div class="skill-value skill-header">F</div>
<div class="info-label">All (-/- eyes)</div>
<input type="text" name="attr_hnatural_layers" class="armor-label" disabled="true" value="Natural Armour">
<input type="number" name="attr_hnatural_aq" class="skill-value" value="0">
<input type="number" name="attr_hnatural_b" class="skill-value" value="4" readonly >
<input type="number" name="attr_hnatural_e" class="skill-value" value="3" readonly >
<input type="number" name="attr_hnatural_p" class="skill-value" value="1" readonly >
<input type="number" name="attr_hnatural_f" class="skill-value" value="3" readonly >
<div class="info-label">All (-/- eyes)</div>
<input type="text" name="attr_hall_layers" class="armor-label">
<input type="number" name="attr_hall_aq" class="skill-value" value="0">
<input type="number" name="attr_hall_b" class="skill-value" value="0">
<input type="number" name="attr_hall_e" class="skill-value" value="0">
<input type="number" name="attr_hall_p" class="skill-value" value="0">
<input type="number" name="attr_hall_f" class="skill-value" value="0">
</div>
<div class='character-grid-section horse-section horseinjuries horseinjuries-grid colored-grid'>
<div class="skill-section-title">INJURIES</div>
<div class="skill-header">Location/Type</div>
<div class="skill-header skill-value">SV</div>
<div class="skill-header skill-value">LvL</div>
<div class="skill-header skill-value">HR</div>
<div class="skill-header skill-value">Day</div>
<div class="skill-header skill-value">&nbsp;</div>
<div class="skill-header check-col">Inf</div>
<fieldset class="repeating_hinjury">
<input type="text" name="attr_hinjury_location" class="skill-label">
<select name="attr_hinjury_severity" class="skill-label">
<option value="m">M</option>
<option value="s">S</option>
<option value="g">G</option>
<option value="k">K</option>
</select>
<input type="number" name="attr_hinjury_level" class="skill-value" value="0">
<input type="number" name="attr_hinjury_healingroll" class="skill-value" value="0">
<input type="number" name="attr_hinjury_day" class="skill-value" value="0">
<button type="roll" value="&{template:custom} {{color=harn}} {{title=@{hname} rolls a healing check}} {{infected=[[@{hinjury_infected_feedback}]]}} {{rolltarget=[[{[[{[[(@{hinjury_healingroll} * [[@{hcombat_endurance}]]) + ?{Target Modifier?|0}]],5}kh1]],95}kl1]]}} {{Healing Roll=[[@{hinjury_healingroll} * [[@{hcombat_endurance}]]]]}} {{Modifiers=[[?{Target Modifier?|0}]]}} {{penalty=[[0]]}} {{rollresult=[[1d100cs5cs10cs15cs20cs25cs30cs35cs40cs45cs50cs55cs60cs65cs70cs75cs80cs85cs90cs95cs100]]}} {{desc=@{hinjury_location} @{hinjury_severity}@{hinjury_level} h@{hinjury_healingroll}}}" name="roll_horsehealingcheck">
</button>
<input type="checkbox" name="attr_hinjury_infected"><span></span>
<input type="hidden" name="attr_hinjury_infected_feedback" value="0" readonly>
</fieldset>
</div>
<div class='character-grid-section horse-section horsepenalties horsepenalties-grid colored-grid'>
<div class="skill-section-title">PENALTIES</div>
<label for=hinjurylvl>Injury Levels</label>
<input id=hinjurylvl type="number" name="attr_hinjury_total" value="0" class="skill-value" readonly>
<label for=hfatigue>Fatigue</label>
<input id=hfatigue type="number" name="attr_hfatigue_total" class="skill-value" value="0">
<label for=hunipenalty class="sumrow">Universal</label>
<input id=hunipenalty type="number" value="0" class="skill-value sumrow" name="attr_huniversal_penalty" readonly>
<label for=hencumbrance>Encumbrance</label>
<input id=hencumbrance type="number" name="attr_hencumbrance" class="skill-value" value="0" readonly>
<label for=hphyspenalty class="sumrow">Physical</label>
<input id=hphyspenalty type="number" name="attr_hphysical_penalty" class="skill-value sumrow" value="0" readonly>
</div>
<div class='character-grid-section horse-section horseattacks horseattacks-grid colored-grid'>
<div class="skill-section-title">ATTACKS</div>
<div class="skill-header skill-label">Attack</div>
<div class="skill-header skill-value">B</div>
<div class="skill-header skill-value">E</div>
<div class="skill-header skill-value">P</div>
<div class="skill-header skill-value">ML</div>
<div class="skill-header skill-value">AML</div>
<div class="skill-header skill-value">&nbsp;</div>
<input type="text" name="attr_trample_weapon_name" class="skill-label" disabled="true" value="Trample">
<input type="number" name="attr_trample_weapon_b" class="skill-value" value="8">
<input type="number" name="attr_trample_weapon_e" class="skill-value" disabled="true" value="0">
<input type="number" name="attr_trample_weapon_p" class="skill-value" disabled="true" value="0">
<input type="number" name="attr_htrample_ml" class="skill-value" readonly>
<input type="number" name="attr_htrample_ml" class="skill-value" readonly>
<button type="roll" value="&{template:custom} {{color=harn}} {{title=@{hname} tramples}} {{rolltarget=[[{[[{[[@{htrample_ml} - [[(@{hphysical_penalty})*5]] + ?{Target Modifier?|0}]],5}kh1]],95}kl1]]}} {{Mastery Lvl=[[@{htrample_ml}]]}} {{Modifiers=[[?{Target Modifier?|0}]]}} {{penalty=[[(@{hphysical_penalty})*5]]}} {{rollresult=[[1d100cs5cs10cs15cs20cs25cs30cs35cs40cs45cs50cs55cs60cs65cs70cs75cs80cs85cs90cs95cs100]]}} {{note=B(@{trample_weapon_b}) E(@{trample_weapon_e}) P(@{trample_weapon_p})}}" name="roll_trampleweaponamlskillcheck">
</button>
</div>
</div>
</div>
<div class='inventory'> <!-- INVENTORY TAB -->
<h2 class='tab-header'>HârnMaster</h2>
<h1 class='tab-header'>Character Inventory</h1>
<div class='inventory-grid'> <!-- grid container-->
<div class='inventory-grid-section inven-weapons weapons-grid colored-grid'>
<div class="skill-section-title">MELEE WEAPONS</div>
<div class="skill-header weapon-label">Weapon</div>
<div class="skill-header skill-value harntooltip" data-tooltiptext="Equipped?">E</div>
<div class="skill-header skill-value">WGT</div>
<div class="skill-header skill-value">WQ</div>
<div class="skill-header skill-value">&nbsp;</div>
<div class="skill-header skill-value">ATK</div>
<div class="skill-header skill-value">DEF</div>
<div class="skill-header skill-value">HM</div>
<div class="skill-header skill-value">B</div>
<div class="skill-header skill-value">E</div>
<div class="skill-header skill-value">P</div>
<div class="skill-header skill-value">F</div>
<div class="skill-header skill-value">ML</div>
<div class="skill-header skill-value">AML</div>
<div class="skill-header skill-value">&nbsp;</div>
<div class="skill-header skill-value">DML</div>
<div class="skill-header skill-value">&nbsp;</div>
<div class="skill-header skill-label width-2col">Note</div>
<fieldset class="repeating_weapon">
<input type="text" name="attr_weapon_name" class="weapon-label">
<input type="checkbox" name="attr_weapon_iscarried" value="1">
<input type="number" name="attr_weapon_wgt" class="skill-value" value="0">
<input type="number" name="attr_weapon_wq" class="skill-value" value="0">
<div>&nbsp;</div>
<input type="number" name="attr_weapon_atk" class="skill-value" value="0">
<input type="number" name="attr_weapon_def" class="skill-value" value="0">
<input type="number" name="attr_weapon_hm" class="skill-value" value="0">
<input type="number" name="attr_weapon_b" class="skill-value" value="0">
<input type="number" name="attr_weapon_e" class="skill-value" value="0">
<input type="number" name="attr_weapon_p" class="skill-value" value="0">
<input type="number" name="attr_weapon_f" class="skill-value" value="0">
<input type="number" name="attr_weapon_ml" class="skill-value" value="0">
<input type="number" name="attr_weapon_aml" class="skill-value" readonly>
<div>&nbsp;</div>
<input type="number" name="attr_weapon_dml" class="skill-value" readonly>
<div>&nbsp;</div>
<input type="text" name="attr_weapon_note" class="skill-label width-2col">
</fieldset>
<div class="footnote"> <details><summary>Note: checking the "E" checkbox denotes the weapon is equipped/carried</summary><p>This means it will show up on the character tab and its weight will count towards the characters encumbrance (automatically calculated).</p></details></div>
</div>
<div class='inventory-grid-section inven-missileweapons missileweapons-grid colored-grid'>
<div class="skill-section-title">MISSILE WEAPONS</div>
<div class="skill-header weapon-label">Missile Weapon</div>
<div class="skill-header skill-value harntooltip" data-tooltiptext="Equipped?">E</div>
<div class="skill-header skill-value harntooltip" data-tooltiptext="Missile aspect for impact">A</div>
<div class="skill-header skill-value harntooltip" data-tooltiptext="Missile impact">IMP</div>
<div class="skill-header skill-value">ML</div>
<div class="skill-header skill-value">Short</div>
<div class="skill-header skill-value">AML</div>
<div class="skill-header skill-value">Dmg</div>
<div class="skill-header skill-value">&nbsp;</div>
<div class="mw-extraranges">
<div class="skill-header skill-value">Medium</div>
<div class="skill-header skill-value">AML</div>
<div class="skill-header skill-value">Dmg</div>
<div class="skill-header skill-value">&nbsp;</div>
<div class="skill-header skill-value">Long</div>
<div class="skill-header skill-value">AML</div>
<div class="skill-header skill-value">Dmg</div>
<div class="skill-header skill-value">&nbsp;</div>
<div class="skill-header skill-value">Ext</div>
<div class="skill-header skill-value">AML</div>
<div class="skill-header skill-value">Dmg</div>
<div class="skill-header skill-value">&nbsp;</div>
</div>
<div class="skill-header skill-value">Ammo</div>
<fieldset class="repeating_missileweapon">
<input type="text" name="attr_missileweapon_name" class="weapon-label">
<input type="checkbox" name="attr_missileweapon_iscarried" value="1">
<input type="text" name="attr_missileweapon_aspect" class="skill-value" value="P">
<input type="number" name="attr_missileweapon_p" class="skill-value" value="0">
<input type="number" name="attr_missileweapon_ml" class="skill-value" value="0">
<input type="number" name="attr_missileweapon_short" class="skill-value" value="0">
<input type="number" name="attr_missileweapon_short_aml" class="skill-value" readonly value="0">
<input type="number" name="attr_missileweapon_short_dmg" class="skill-value" readonly value="0">
<div class="skill-value">&nbsp;</div>
<div class="mw-extraranges">
<input type="number" name="attr_missileweapon_medium" class="skill-value" value="0">
<input type="number" name="attr_missileweapon_medium_aml" class="skill-value" readonly value="0">
<input type="number" name="attr_missileweapon_medium_dmg" class="skill-value" readonly value="0">
<div class="skill-value">&nbsp;</div>
<input type="number" name="attr_missileweapon_long" class="skill-value" value="0">
<input type="number" name="attr_missileweapon_long_aml" class="skill-value" readonly value="0">
<input type="number" name="attr_missileweapon_long_dmg" class="skill-value" readonly value="0">
<div class="skill-value">&nbsp;</div>
<input type="number" name="attr_missileweapon_extreme" class="skill-value" value="0">
<input type="number" name="attr_missileweapon_extreme_aml" class="skill-value" readonly value="0">
<input type="number" name="attr_missileweapon_extreme_dmg" class="skill-value" readonly value="0">
<div class="skill-value">&nbsp;</div>
</div>
<input type="number" name="attr_missileweapon_ammo" class="skill-value">
</fieldset>
<div class="footnote"> Note: If you have a missile weapon equipped, make sure to add it to the "Weapons" list above too, with weight and the equipped checkbox ticked</div>
</div>
<div class='inventory-grid-section inven-armor armorinvengrid colored-grid'>
<div class="skill-section-title">ARMOUR</div>
<div class="skill-header">Armour/Clothing</div>
<div class="skill-header skill-value harntooltip" data-tooltiptext="Equipped?">E</div>
<div class="skill-header skill-value">WGT</div>
<div class="skill-header skill-value">AQ</div>
<div class="skill-header skill-value">B</div>
<div class="skill-header skill-value">E</div>
<div class="skill-header skill-value">P</div>
<div class="skill-header skill-value">F</div>
<div class="armourareawrapper">
<div class="skill-header skill-value sectionarmourhead">Sk</div>
<div class="skill-header skill-value sectionarmourhead">Fa</div>
<div class="skill-header skill-value sectionarmourhead">Nk</div>
<div class="skill-header skill-value sectionarmourarms">Sh</div>
<div class="skill-header skill-value sectionarmourarms">Ua</div>
<div class="skill-header skill-value sectionarmourarms">El</div>
<div class="skill-header skill-value sectionarmourarms">Fo</div>
<div class="skill-header skill-value sectionarmourarms">Ha</div>
<div class="skill-header skill-value sectionarmourtorso">Tx</div>
<div class="skill-header skill-value sectionarmourtorso">Ab</div>
<div class="skill-header skill-value sectionarmourtorso">Hp</div>
<div class="skill-header skill-value sectionarmourtorso">Gr</div>
<div class="skill-header skill-value sectionarmourlegs">Th</div>
<div class="skill-header skill-value sectionarmourlegs">Kn</div>
<div class="skill-header skill-value sectionarmourlegs">Ca</div>
<div class="skill-header skill-value sectionarmourlegs">Ft</div>
</div>
<fieldset class="repeating_armoritems">
<input type="text" name="attr_armor_name" class="skill-label">
<input type="checkbox" name="attr_armor_iscarried" value="1">
<input type="number" step="any" name="attr_armor_wgt" class="skill-value" value="0">
<input type="number" name="attr_armor_aq" class="skill-value" value="0">
<input type="number" name="attr_armor_b" class="skill-value" value="0">
<input type="number" name="attr_armor_e" class="skill-value" value="0">
<input type="number" name="attr_armor_p" class="skill-value" value="0">
<input type="number" name="attr_armor_f" class="skill-value" value="0">
<div class="invensectionwrapper sectionarmourhead">
<input type="checkbox" name="attr_armor_loc_sk" class="skill-value " value="1">
<input type="hidden" name="attr_armor_sk_bvalue" class="skill-value " value="1">
<input type="hidden" name="attr_armor_sk_evalue" class="skill-value " value="1">
<input type="hidden" name="attr_armor_sk_pvalue" class="skill-value " value="1">
<input type="hidden" name="attr_armor_sk_fvalue" class="skill-value " value="1">
<input type="checkbox" name="attr_armor_loc_fa" class="skill-value " value="1">
<input type="hidden" name="attr_armor_fa_bvalue" class="skill-value " value="1">
<input type="hidden" name="attr_armor_fa_evalue" class="skill-value " value="1">
<input type="hidden" name="attr_armor_fa_pvalue" class="skill-value " value="1">
<input type="hidden" name="attr_armor_fa_fvalue" class="skill-value " value="1">
<input type="checkbox" name="attr_armor_loc_nk" class="skill-value " value="1">
<input type="hidden" name="attr_armor_nk_bvalue" class="skill-value " value="1">
<input type="hidden" name="attr_armor_nk_evalue" class="skill-value " value="1">
<input type="hidden" name="attr_armor_nk_pvalue" class="skill-value " value="1">
<input type="hidden" name="attr_armor_nk_fvalue" class="skill-value " value="1">
</div>
<div class="invensectionwrapper sectionarmourarms">
<input type="checkbox" name="attr_armor_loc_sh" class="skill-value " value="1">
<input type="hidden" name="attr_armor_sh_bvalue" class="skill-value " value="1">
<input type="hidden" name="attr_armor_sh_evalue" class="skill-value " value="1">
<input type="hidden" name="attr_armor_sh_pvalue" class="skill-value " value="1">
<input type="hidden" name="attr_armor_sh_fvalue" class="skill-value " value="1">
<input type="checkbox" name="attr_armor_loc_ua" class="skill-value " value="1">
<input type="hidden" name="attr_armor_ua_bvalue" class="skill-value " value="1">
<input type="hidden" name="attr_armor_ua_evalue" class="skill-value " value="1">
<input type="hidden" name="attr_armor_ua_pvalue" class="skill-value " value="1">
<input type="hidden" name="attr_armor_ua_fvalue" class="skill-value " value="1">
<input type="checkbox" name="attr_armor_loc_el" class="skill-value " value="1">
<input type="hidden" name="attr_armor_el_bvalue" class="skill-value " value="1">
<input type="hidden" name="attr_armor_el_evalue" class="skill-value " value="1">
<input type="hidden" name="attr_armor_el_pvalue" class="skill-value " value="1">
<input type="hidden" name="attr_armor_el_fvalue" class="skill-value " value="1">
<input type="checkbox" name="attr_armor_loc_fo" class="skill-value " value="1">
<input type="hidden" name="attr_armor_fo_bvalue" class="skill-value " value="1">
<input type="hidden" name="attr_armor_fo_evalue" class="skill-value " value="1">
<input type="hidden" name="attr_armor_fo_pvalue" class="skill-value " value="1">
<input type="hidden" name="attr_armor_fo_fvalue" class="skill-value " value="1">
<input type="checkbox" name="attr_armor_loc_ha" class="skill-value " value="1">
<input type="hidden" name="attr_armor_ha_bvalue" class="skill-value " value="1">
<input type="hidden" name="attr_armor_ha_evalue" class="skill-value " value="1">
<input type="hidden" name="attr_armor_ha_pvalue" class="skill-value " value="1">
<input type="hidden" name="attr_armor_ha_fvalue" class="skill-value " value="1">
</div>
<div class="invensectionwrapper sectionarmourtorso">
<input type="checkbox" name="attr_armor_loc_tx" class="skill-value " value="1">
<input type="hidden" name="attr_armor_tx_bvalue" class="skill-value " value="1">
<input type="hidden" name="attr_armor_tx_evalue" class="skill-value " value="1">
<input type="hidden" name="attr_armor_tx_pvalue" class="skill-value " value="1">
<input type="hidden" name="attr_armor_tx_fvalue" class="skill-value " value="1">
<input type="checkbox" name="attr_armor_loc_ab" class="skill-value " value="1">
<input type="hidden" name="attr_armor_ab_bvalue" class="skill-value " value="1">
<input type="hidden" name="attr_armor_ab_evalue" class="skill-value " value="1">
<input type="hidden" name="attr_armor_ab_pvalue" class="skill-value " value="1">
<input type="hidden" name="attr_armor_ab_fvalue" class="skill-value " value="1">
<input type="checkbox" name="attr_armor_loc_hp" class="skill-value " value="1">
<input type="hidden" name="attr_armor_hp_bvalue" class="skill-value " value="1">
<input type="hidden" name="attr_armor_hp_evalue" class="skill-value " value="1">
<input type="hidden" name="attr_armor_hp_pvalue" class="skill-value " value="1">
<input type="hidden" name="attr_armor_hp_fvalue" class="skill-value " value="1">
<input type="checkbox" name="attr_armor_loc_gr" class="skill-value " value="1">
<input type="hidden" name="attr_armor_gr_bvalue" class="skill-value " value="1">
<input type="hidden" name="attr_armor_gr_evalue" class="skill-value " value="1">
<input type="hidden" name="attr_armor_gr_pvalue" class="skill-value " value="1">
<input type="hidden" name="attr_armor_gr_fvalue" class="skill-value " value="1">
</div>
<div class="invensectionwrapper sectionarmourlegs">
<input type="checkbox" name="attr_armor_loc_th" class="skill-value " value="1">
<input type="hidden" name="attr_armor_th_bvalue" class="skill-value " value="1">
<input type="hidden" name="attr_armor_th_evalue" class="skill-value " value="1">
<input type="hidden" name="attr_armor_th_pvalue" class="skill-value " value="1">
<input type="hidden" name="attr_armor_th_fvalue" class="skill-value " value="1">
<input type="checkbox" name="attr_armor_loc_kn" class="skill-value " value="1">
<input type="hidden" name="attr_armor_kn_bvalue" class="skill-value " value="1">
<input type="hidden" name="attr_armor_kn_evalue" class="skill-value " value="1">
<input type="hidden" name="attr_armor_kn_pvalue" class="skill-value " value="1">
<input type="hidden" name="attr_armor_kn_fvalue" class="skill-value " value="1">
<input type="checkbox" name="attr_armor_loc_ca" class="skill-value " value="1">
<input type="hidden" name="attr_armor_ca_bvalue" class="skill-value " value="1">
<input type="hidden" name="attr_armor_ca_evalue" class="skill-value " value="1">
<input type="hidden" name="attr_armor_ca_pvalue" class="skill-value " value="1">
<input type="hidden" name="attr_armor_ca_fvalue" class="skill-value " value="1">
<input type="checkbox" name="attr_armor_loc_ft" class="skill-value " value="1">
<input type="hidden" name="attr_armor_ft_bvalue" class="skill-value " value="1">
<input type="hidden" name="attr_armor_ft_evalue" class="skill-value " value="1">
<input type="hidden" name="attr_armor_ft_pvalue" class="skill-value " value="1">
<input type="hidden" name="attr_armor_ft_fvalue" class="skill-value " value="1">
</div>
</fieldset>
<div class="footnote"> <details><summary>Note: Equipped (E) armour will count towards encumbrance (weight) and armour protection on the character tab.</summary><p>Fill in the B/E/P/F protection values from the rulebook and tick each location that is protected by the armour. The protection values will be added to the Armour Protection table on the Character Tab its weight will count towards the characters encumbrance (automatically calculated).</p></details></div>
</div>
<input class="hidelegacyarmor" name="attr_legacyarmorhidden" type="hidden" value="0"/>
<div class='character-grid-section bordered-grid legacyarmor-grid'>
<div class="skill-section-title">ARMOR PROTECTION - LEGACY INFORMATION</div>
<div class="skill-label skill-header">Location</div>
<div class="skill-label skill-header">Compound Layers</div>
<div class="skill-value skill-header">AQ</div>
<div class="skill-value skill-header">B</div>
<div class="skill-value skill-header">E</div>
<div class="skill-value skill-header">P</div>
<div class="skill-value skill-header">F</div>
<div class="skill-label skill-header">Location</div>
<div class="skill-label skill-header">Compound Layers</div>
<div class="skill-value skill-header">AQ</div>
<div class="skill-value skill-header">B</div>
<div class="skill-value skill-header">E</div>
<div class="skill-value skill-header">P</div>
<div class="skill-value skill-header">F</div>
<label for=skull2>Skull</label>
<input id=skull2 type="text" name="attr_skull_layers" class="armor-label">
<input type="number" name="attr_skull_aq" class="skill-value" value="0" readonly>
<input type="number" name="attr_skull_b" class="skill-value" value="0" readonly>
<input type="number" name="attr_skull_e" class="skill-value" value="0" readonly>
<input type="number" name="attr_skull_p" class="skill-value" value="0" readonly>
<input type="number" name="attr_skull_f" class="skill-value" value="0" readonly>
<label for=thorax2>Thorax</label>
<input id=thorax2 type="text" name="attr_thorax_layers" class="armor-label">
<input type="number" name="attr_thorax_aq" class="skill-value" value="0" readonly>
<input type="number" name="attr_thorax_b" class="skill-value" value="0" readonly>
<input type="number" name="attr_thorax_e" class="skill-value" value="0" readonly>
<input type="number" name="attr_thorax_p" class="skill-value" value="0" readonly>
<input type="number" name="attr_thorax_f" class="skill-value" value="0" readonly>
<label for=face2>Face</label>
<input id=face2 type="text" name="attr_face_layers" class="armor-label">
<input type="number" name="attr_face_aq" class="skill-value" value="0" readonly>
<input type="number" name="attr_face_b" class="skill-value" value="0" readonly>
<input type="number" name="attr_face_e" class="skill-value" value="0" readonly>
<input type="number" name="attr_face_p" class="skill-value" value="0" readonly>
<input type="number" name="attr_face_f" class="skill-value" value="0" readonly>
<label for=abdomen2>Abdomen</label>
<input id=abdomen2 type="text" name="attr_abdomen_layers" class="armor-label">
<input type="number" name="attr_abdomen_aq" class="skill-value" value="0" readonly>
<input type="number" name="attr_abdomen_b" class="skill-value" value="0" readonly>
<input type="number" name="attr_abdomen_e" class="skill-value" value="0" readonly>
<input type="number" name="attr_abdomen_p" class="skill-value" value="0" readonly>
<input type="number" name="attr_abdomen_f" class="skill-value" value="0" readonly>
<label for=neck2>Neck</label>
<input id=neck2 type="text" name="attr_neck_layers" class="armor-label">
<input type="number" name="attr_neck_aq" class="skill-value" value="0" readonly>
<input type="number" name="attr_neck_b" class="skill-value" value="0" readonly>
<input type="number" name="attr_neck_e" class="skill-value" value="0" readonly>
<input type="number" name="attr_neck_p" class="skill-value" value="0" readonly>
<input type="number" name="attr_neck_f" class="skill-value" value="0" readonly>
<label for=hip2>Hip</label>
<input id=hip2 type="text" name="attr_hip_layers" class="armor-label">
<input type="number" name="attr_hip_aq" class="skill-value" value="0" readonly>
<input type="number" name="attr_hip_b" class="skill-value" value="0" readonly>
<input type="number" name="attr_hip_e" class="skill-value" value="0" readonly>
<input type="number" name="attr_hip_p" class="skill-value" value="0" readonly>
<input type="number" name="attr_hip_f" class="skill-value" value="0" readonly>
<label for=shoulder2>Shoulder</label>
<input id=shoulder2 type="text" name="attr_shoulder_layers" class="armor-label">
<input type="number" name="attr_shoulder_aq" class="skill-value" value="0" readonly>
<input type="number" name="attr_shoulder_b" class="skill-value" value="0" readonly>
<input type="number" name="attr_shoulder_e" class="skill-value" value="0" readonly>
<input type="number" name="attr_shoulder_p" class="skill-value" value="0" readonly>
<input type="number" name="attr_shoulder_f" class="skill-value" value="0" readonly>
<label for=groin2>Groin</label>
<input id=groin2 type="text" name="attr_groin_layers" class="armor-label">
<input type="number" name="attr_groin_aq" class="skill-value" value="0" readonly>
<input type="number" name="attr_groin_b" class="skill-value" value="0" readonly>
<input type="number" name="attr_groin_e" class="skill-value" value="0" readonly>
<input type="number" name="attr_groin_p" class="skill-value" value="0" readonly>
<input type="number" name="attr_groin_f" class="skill-value" value="0" readonly>
<label for=upperarm2>Upper Arm</label>
<input id=upperarm2 type="text" name="attr_upperarm_layers" class="armor-label">
<input type="number" name="attr_upperarm_aq" class="skill-value" value="0" readonly>
<input type="number" name="attr_upperarm_b" class="skill-value" value="0" readonly>
<input type="number" name="attr_upperarm_e" class="skill-value" value="0" readonly>
<input type="number" name="attr_upperarm_p" class="skill-value" value="0" readonly>
<input type="number" name="attr_upperarm_f" class="skill-value" value="0" readonly>
<label for=thigh2>Thigh</label>
<input id=thigh2 type="text" name="attr_thigh_layers" class="armor-label">
<input type="number" name="attr_thigh_aq" class="skill-value" value="0" readonly>
<input type="number" name="attr_thigh_b" class="skill-value" value="0" readonly>
<input type="number" name="attr_thigh_e" class="skill-value" value="0" readonly>
<input type="number" name="attr_thigh_p" class="skill-value" value="0" readonly>
<input type="number" name="attr_thigh_f" class="skill-value" value="0" readonly>
<label for=elbow2>Elbow</label>
<input id=elbow2 type="text" name="attr_elbow_layers" class="armor-label">
<input type="number" name="attr_elbow_aq" class="skill-value" value="0" readonly>
<input type="number" name="attr_elbow_b" class="skill-value" value="0" readonly>
<input type="number" name="attr_elbow_e" class="skill-value" value="0" readonly>
<input type="number" name="attr_elbow_p" class="skill-value" value="0" readonly>
<input type="number" name="attr_elbow_f" class="skill-value" value="0" readonly>
<label for=knee2>Knee</label>
<input id=knee2 type="text" name="attr_knee_layers" class="armor-label">
<input type="number" name="attr_knee_aq" class="skill-value" value="0" readonly>
<input type="number" name="attr_knee_b" class="skill-value" value="0" readonly>
<input type="number" name="attr_knee_e" class="skill-value" value="0" readonly>
<input type="number" name="attr_knee_p" class="skill-value" value="0" readonly>
<input type="number" name="attr_knee_f" class="skill-value" value="0" readonly>
<label for=forearm2>Forearm</label>
<input id=forearm2 type="text" name="attr_forearm_layers" class="armor-label">
<input type="number" name="attr_forearm_aq" class="skill-value" value="0" readonly>
<input type="number" name="attr_forearm_b" class="skill-value" value="0" readonly>
<input type="number" name="attr_forearm_e" class="skill-value" value="0" readonly>
<input type="number" name="attr_forearm_p" class="skill-value" value="0" readonly>
<input type="number" name="attr_forearm_f" class="skill-value" value="0" readonly>
<label for=calf2>Calf</label>
<input id=calf2 type="text" name="attr_calf_layers" class="armor-label">
<input type="number" name="attr_calf_aq" class="skill-value" value="0" readonly>
<input type="number" name="attr_calf_b" class="skill-value" value="0" readonly>
<input type="number" name="attr_calf_e" class="skill-value" value="0" readonly>
<input type="number" name="attr_calf_p" class="skill-value" value="0" readonly>
<input type="number" name="attr_calf_f" class="skill-value" value="0" readonly>
<label for=hand2>Hand</label>
<input id=hand2 type="text" name="attr_hand_layers" class="armor-label">
<input type="number" name="attr_hand_aq" class="skill-value" value="0" readonly>
<input type="number" name="attr_hand_b" class="skill-value" value="0" readonly>
<input type="number" name="attr_hand_e" class="skill-value" value="0" readonly>
<input type="number" name="attr_hand_p" class="skill-value" value="0" readonly>
<input type="number" name="attr_hand_f" class="skill-value" value="0" readonly>
<label for=foot2>Foot</label>
<input id=foot2 type="text" name="attr_foot_layers" class="armor-label">
<input type="number" name="attr_foot_aq" class="skill-value" value="0" readonly>
<input type="number" name="attr_foot_b" class="skill-value" value="0" readonly>
<input type="number" name="attr_foot_e" class="skill-value" value="0" readonly>
<input type="number" name="attr_foot_p" class="skill-value" value="0" readonly>
<input type="number" name="attr_foot_f" class="skill-value" value="0" readonly>
<div class="footnote"> <details><summary>Copied over from old sheet, please move to new armour section</summary><p>For more information see the readme in the roll20 repository (https://github.com/roll20/roll20-character-sheets/tree/master/HarnMaster3#readme) . Click the the button below to hide this section</p></details></div>
<div class="footnote"><button type="action" name="act_hidelegacyarmor">Remove legacy armor</button> </div>
</div>
<input class="showhorse" name="attr_hrhorseonsheet" type="hidden" value="1"/>
<div class='inventory-grid-section inven-personal personalinvengrid colored-grid'>
<div class="skill-section-title">PERSONAL INVENTORY</div>
<div class="skill-header skill-label">Item</div>
<div class="skill-header skill-value">WGT</div>
<div class="skill-header skill-value">C</div>
<fieldset class="repeating_inventoryitems">
<input type="text" name="attr_inventory_name" class="inventory-label">
<input type="number" name="attr_inventory_wgt" class="skill-value" value="0">
<input type="checkbox" name="attr_inventory_iscarried" value="1">
</fieldset>
<div class="footnote"> Note: checking the "C" checkbox denotes the item is carried/equipped on your person, and the weight will count towards the characters encumbrance</div>
</div>
<input class="showhorse" name="attr_hrhorseonsheet" type="hidden" value="1"/>
<div class='inventory-grid-section horse-inven-section inven-horse horseinvengrid colored-grid'>
<div class="skill-section-title">HORSE INVENTORY</div>
<div class="skill-header skill-label">Item</div>
<div class="skill-header skill-value">WGT</div>
<fieldset class="repeating_hinventoryitems">
<input type="text" name="attr_hinventory_name" class="inventory-label">
<input type="number" name="attr_hinventory_wgt" class="skill-value" value="0">
</fieldset>
<div class="footnote">Note: these items count towards horse's encumbrance</div>
<div class="footnote">on the character tab</div>
</div>
<input class="showhorse" name="attr_hrhorseonsheet" type="hidden" value="1"/>
<div class='inventory-grid-section horse-inven-section inven-horsearmor horsearmorinvengrid colored-grid'>
<div class="skill-section-title">HORSE ARMOUR WORN</div>
<div class="skill-header skill-label">Armour</div>
<div class="skill-header skill-value">AQ</div>
<div class="skill-header skill-value">WGT</div>
<fieldset class="repeating_harmoritems">
<input type="text" name="attr_harmor_name" class="inventory-label-xsmall">
<input type="number" name="attr_harmor_aq" class="skill-value" value="0">
<input type="number" step="any" name="attr_harmor_wgt" class="skill-value" value="0">
</fieldset>
<div class="footnote">Note: this armour counts towards horse's encumbrance</div>
</div>
<div class='inventory-grid-section inven-moneypersonal moneygrid colored-grid'>
<!--note: the attributes are named after coinage we used in our customised Harn session, users can rename this easily to other namings such as copper/silver/gold etc -->
<div class="skill-section-title">MONEY (PERSON)</div>
<label for=moneycomment>Comment:</label>
<input id=moneycomment type="text" name="attr_money_comment" class="money-label">
<div class="skill-header width-3col">Type</div>
<div class="skill-header skill-value">#</div>
<input type="text" name="attr_money_person_akce_name" value="akçe" class="skill-label">
<input type="number" name="attr_money_person_akce_amount" class="skill-value" value="0">
<input type="text" name="attr_money_person_para_name" value="para" class="skill-label">
<input type="number" name="attr_money_person_para_amount" class="skill-value" value="0">
<input type="text" name="attr_money_person_kurus_name" value="kuruş" class="skill-label">
<input type="number" name="attr_money_person_kurus_amount" class="skill-value" value="0">
</div>
<div class='inventory-grid-section inven-moneybank moneygrid colored-grid'>
<div class="skill-section-title">MONEY (BANK)</div>
<label for=moneybank>Location:</label>
<input id=moneybank type="text" name="attr_money_bank_name" class="money-label">
<div class="skill-header width-3col">Type</div>
<div class="skill-header skill-value">#</div>
<input type="text" name="attr_money_bank_akce_name" value="akçe" class="skill-label">
<input type="number" name="attr_money_bank_akce_amount" class="skill-value" value="0">
<input type="text" name="attr_money_bank_para_name" value="para" class="skill-label">
<input type="number" name="attr_money_bank_para_amount" class="skill-value" value="0">
<input type="text" name="attr_money_bank_kurus_name" value="kuruş" class="skill-label">
<input type="number" name="attr_money_bank_kurus_amount" class="skill-value" value="0">
</div>
<div class='inventory-grid-section inven-moneygroup moneygrid colored-grid'>
<div class="skill-section-title">MONEY (GROUP)</div>
<label for=moneygroup>Group:</label>
<input id=moneygroup type="text" name="attr_money_group_name" class="money-label">
<div class="skill-header width-3col">Type</div>
<div class="skill-header skill-value">#</div>
<input type="text" name="attr_money_group_akce_name" value="akçe" class="skill-label">
<input type="number" name="attr_money_group_akce_amount" class="skill-value" value="0">
<input type="text" name="attr_money_group_para_name" value="para" class="skill-label">
<input type="number" name="attr_money_group_para_amount" class="skill-value" value="0">
<input type="text" name="attr_money_group_kurus_name" value="kuruş" class="skill-label">
<input type="number" name="attr_money_group_kurus_amount" class="skill-value" value="0">
</div>
<div class='inventory-grid-section inven-notes colored-grid'>
<div class="skill-section-title">NOTES</div>
<textarea name="attr_various_notes" class="notes"></textarea>
</div>
</div>
</div>
<div class='settings'> <!-- SETTINGS TAB -->
<h2 class='tab-header'>Character Sheet</h2>
<h1 class='tab-header'>Settings</h1><!-- TODO add tooltips to clarify settings -->
<div class='settings-grid'> <!-- grid container-->
<div class='settings-grid-section settingsgroup colored-grid'>
<div class="skill-section-title">Houserules</div>
<div class="full-width skill-header">Use Condition</div>
<label for=conditionskillonly>Only as a skill</label>
<input id=conditionskillonly name="attr_hrcondition4endurance" type="radio" value="0">
<label for=conditionloadtoggle>as Endurance for load only</label>
<input id=conditionloadtoggle name="attr_hrcondition4endurance" type="radio" value="1">
<label for=conditionendurancetoggle>for all Endurance checks (default Harn)</label>
<input id=conditionendurancetoggle name="attr_hrcondition4endurance" type="radio" value="2" checked>
<input name="attr_hrcondition4endurance" type="hidden" value="2"> <!-- set default for new sheets to HarnMaster3 rules-->
<div class="full-width">&nbsp;</div>
<div class="full-width skill-header">Fumble/Stumble</div>
<label for=fumblestumblehrtoggle>Use universal penalty instead of physical penalty for Fumble/Stumble?</label>
<input id=fumblestumblehrtoggle name="attr_hrfumblestumblepenalty" type="checkbox" value="1">
<input name="attr_fumblestumblepenalty" type="hidden" value="0"> <!-- provide a default value in case someone rolls before either the option or any penalty is set -->
</div>
<div class='settings-grid-section settingsgroup colored-grid'>
<div class="skill-section-title">Sheet settings</div>
<div class="full-width skill-header">Custom section control</div>
<label for=showhorsetoggle>Show Horse on sheet?</label>
<input id=showhorsetoggle name="attr_hrhorseonsheet" type="checkbox" value="1" checked>
<label for=showpietytoggle class="harntooltip" data-tooltiptext="When this is unchecked the sheet will show space for tracking piety per god with repeating rows" >Show consolidated piety?</label>
<input id=showpietytoggle name="attr_hrconsolidatedpiety" type="checkbox" value="1" checked>
<div class="full-width skill-header">Legacy info</div>
<label for=showlegacyarmortoggle>Hide armor info from legacy (v1) sheet?</label>
<input id=showlegacyarmortoggle name="attr_legacyarmorhidden" type="checkbox" value="1">
<label for=legacycharname class="full-width">Name stored in old "name" field:</label>
<input id=legacycharname name="attr_name" type="text" class="full-width" readonly>
<div class="full-width skill-header">Sheet version</div>
<div class="full-width">
<input name="attr_character_sheet_version" type="number" value="20240927" readonly>
<input type="hidden" name="attr_data_version" value="" readonly>
</div>
</div>
</div>
<div class="changelog">
<h2>Changelog</h2>
<h3>20240927 - Version 3.0.2</h3>
<details>
<summary class="changelog-summary">
<p class="changelog-summary">Minor typo fix</p>
</summary>
<ul>
<li>Missing ";"in html resulted in "nbsp" tag showing on horse combat stats</li>
</ul>
</details>
<h3>20240917 - Version 3.0.1</h3>
<details>
<summary class="changelog-summary">
<p class="changelog-summary">Minor fix in horse endurance calculation</p>
</summary>
<ul>
<li>Due to a typo horse willpower wasn't used in horse endurance calculation. Fixed now.</li>
<li>Old data will be migrated automatically</li>
</ul>
</details>
<h3>20240208 - Version 3.0.0</h3>
<details>
<summary class="changelog-summary">
<p class="changelog-summary">Rework of armour value calculation sheetworkers to improve performance. Minor styling changes</p>
</summary>
<ul>
<li>Rework of armour value calculation sheetworkers: combine 64 repeatingSums into 1 line, more info on forum post 11780379</li>
<li>Fix inability to remove lines in modify mode in some repeating sections</li>
<li>Changed sunsign field to use datalists to bring styling in line with rest of the sheet plus future proofing</li>
</ul>
</details>
<h3>20231204 - Version 2.9.2</h3>
<details>
<summary class="changelog-summary">
<p class="changelog-summary">Minor layout change for missile weapon grid to prevent 1 weapon displaying on 2 rows.</p>
</summary>
</details>
<h3>20230422 - Version 2.9.1</h3>
<details>
<summary class="changelog-summary">
<p class="changelog-summary">Various layout adjustments for mobile web layout (note: not styling for mobile app, not enough documentation available to do that).</p>
</summary>
</details>
<h3>20230408 - Version 2.9</h3>
<details>
<summary class="changelog-summary">
<p class="changelog-summary">Some minor tweaks and fixes:</p>
</summary>
<ul>
<li>Fix font color for notes box in dark mode</li>
<li>Fix background color for horse speed select input in dark mode</li>
<li>Clarified description for Horse Riding EML in sheet and roll template</li>
</ul>
</details>
<h3>20220407 - Version 2.8</h3>
<details>
<summary class="changelog-summary">
<p class="changelog-summary">Add styling for mobile browsers to view sheet on mobile phones. Not meant for full roll20 functionality, but for a pocket digital character sheet</p>
</summary>
</details>
<h3>20220314 - Version 2.7.1</h3>
<details>
<summary class="changelog-summary">
<p class="changelog-summary">Finetune some dark mode styling based on user feedback</p>
</summary>
</details>
<h3>20220312 - Version 2.7</h3>
<details>
<summary class="changelog-summary">
<p class="changelog-summary">Removed themes from sheet and merged dark styling with VTT darkmode</p>
</summary>
</details>
<h3>20220303 - Version 2.6</h3>
<details>
<summary class="changelog-summary">
<p class="changelog-summary">Small adjustment to styling to align better with new roll20 dark mode. When using roll20 dark mode, dark theme for the sheet is suggested.</p>
</summary>
</details>
<h3>20211023 - Version 2.5</h3>
<details>
<summary class="changelog-summary">
<p class="changelog-summary">Updated header to the sheet to include roll20's new ability to include the avatar image. </p>
</summary>
</details>
<h3>20210912 - Version 2.4</h3>
<details>
<summary class="changelog-summary">
<p class="changelog-summary">Some minor tweaks and fixes:</p>
</summary>
<ul>
<li>Allow decimal value input for armour</li>
<li>Fix bug in horse penalty calculation (encumbrance was ignored)</li>
<li>Fixed horse dodge roll button not working</li>
<li>Add SB field to spells to allow for optional rule Individual Spell skills (Shek-Pvar 24)</li>
<li>Added more fields to spells to quickly see time, duration etc. Added auto-calculation for Skill Index (SI) </li>
<li>layout changes to spells section to track additional info and create more space for spell description</li>
<li>background script to copy back character name to old "name" field for backward compatibility</li>
</ul>
</details>
<h3>20210804 - Version 2.3</h3>
<details>
<summary class="changelog-summary">
<p class="changelog-summary">Fix broken DML rolls and horse information not being stored. Plus some minor tweaks and fixes:</p>
</summary>
<ul>
<li>Add a header to the sheet inspired by the paper version of the character sheet, this will include the characters avatar in the future. </li>
<li>Restored AQ (armour quality) information in legacy armour section</li>
<li>Added option in settings to unhide armor information from legacy (v1) sheet if it was accidentally hidden but still needed</li>
<li>Added some more tooltips for clarification</li>
</ul>
</details>
<h3>20210803 - Version 2.2</h3>
<p>Small bugfix to address issue with drag-and-drop of roll buttons from repeating weapon section to macro quick bar</p>
<h3>20210802 - Version 2.1</h3>
<details>
<summary class="changelog-summary">
<p class="changelog-summary">Minor tweaks and bugfixes based on community feedback</p>
</summary>
<ul>
<li>Added option to enter the impact and renamed P (pierce) to IMP (impact) for missiles</li>
<li>Renamed "Carried" to "Equipped" , except for general equipment which is more likely to be carried than actually equipped</li>
<li>Updated calculations for combat stats: If the user chooses not to show the horse information on the sheet, horse statistics are not taken into account for combat stats (such as horse move speed for move, and horse initiative influencing initiative). The basic effect of reducing universal penalty and encumbrance is still calculated.</li>
<li>Renamed "carried" to "equipped" for gear and "rolls" to "tests" in roll template rolls</li>
<li>Also includes some small fixes of previous unversioned update: correcting types, layout issues and a bug in encumbrance calculation after migration</li>
</ul>
Thank you to Tommi and Devon for testing and feedback in the forums ( https://app.roll20.net/forum/permalink/10189325/ )
</details>
<hr>
<h3>20210801 - Version 2</h3>
<details>
<summary class="changelog-summary">
<p class="changelog-summary">Major overhaul of the original sheet, dubbed "version 2". Many new features, all calculations done via sheetworkers now and styling brought in line with the paper sheet, based on CSS Grid</p>
</summary>
<h4>NEW FEATURES</h4>
<ul>
<li>3 Tabs for Character, Inventory and Settings
<ul>
<li>Character Tab shows all information relevant during play, including an optional Horse section </li>
<li>Inventory tab has space for weapons, inventory, money, general notes and more. Denote on any item if it's actively carried or not (stored on horse or other location for example) </li>
<li>Settings tab provides options to show the Horse section, split out Piety tracking per god, and toggle some houserules. </li>
</ul>
</li>
<li>Development roll buttons for each skill</li>
<li>Roll buttons to do Attribute checks (with a prompt to select DM determined multiplier)</li>
<li>Separate missile weapon section with ranges and their penalties & damage</li>
<li>Dedicated roll button to roll attacks with HM penalty</li>
<li>An included horse section to facilitate HarnMaster horse combat rules where character and horse skills are averaged. (this section can be shown/hidden via the Settings tab)</li>
<li>Items on the Inventory tab can be marked as "Carried", which affects the Character tab: weight will be added to load carried, armor values will be added to armor protection and weapons will show up on the Character tab to roll attack, defense and WQ checks.</li>
</ul>
<h4>NEW/UPDATED CALCULATIONS</h4>
<ul>
<li>Show move, minimum move and turning hexes based on current Horse Speed. </li>
<li>Armour values: add armour pieces (find values in the HM3 Rulebook) in the inventory tab, fill in armour values for B/E/P/F and check locations covered. Check them as "worn/carried (C)" and total armour values are shown on the character tab.</li>
<li>Easily drop weapons and reduce inventory load (and encumbrance) on the fly</li>
<li>Auto calculate initiave and effective horse riding skill automatically for the horse included in the (optional) horse section, when "Mounted" (checkbox)</li>
</ul>
<h4>Upgrade information </h4>
<p>A migration script is included to perform the necessary changes when coming from an old sheet. Old armor cannot be migrated automatically, as previously all armor layers were stored in field per location. Old armor information can be found in the Inventory tab. Please:</p>
<ol>
<li>move this information to the need armor section in the inventory tab, per armor item. </li>
<li>Mark which items are carried/worn ("c" column)</li>
<li>Total weight and armor protection values for all layers per location is then calculated automatically.</li>
<li>Note down your armor before switching sheets, it will need to be input again on the new sheet (you'll also need the armor locations from the rulebook)</li>
<li>This is a one-time excercise for each character.</li>
</ol>
<p>Also please verify the settings on the Settings tab </p>
<p>Your weapons will be on the Inventory Tab after migration. Mark the "C" checkbox to select which weapons you're carrying and thus show up on the Character Tab . </p>
</details>
</div>
</div>
<!-- ROLL TEMPLATES -->
<!-- based on Jakob's better default Rolltemplate; adjusted to include reporting success and failure and infection feedback, plus many other tweaks for Harn.
props:
* character_name: Name of chaaracter performing action.
* rolldesc: Text describing roll in header.
* penalty: Autocalculated in value from Universal or Physical Penalty. Applied in rolltarget
* Modifier: Dieroll query in each roll, defaults to 0. Applied in rolltarget.
* ml: Unmodified target of the roll.
* rolltarget: Actual target of roll, derived from 'ml + (penalty * 5) + Modifier'
* rollresult: Die roll result.
* description: Optional property for any additional text at the end of table.
* infected: sepcial row just for infected wounds, value either 0 or on or not present.
* nocrit: optional property for rolls that cannot crit. If left out the roll reports crits on -0 and -5 rolls, if set to any value the roll will only report success or failure, no crits
* skilldevrol. optional property for rolls that cannot crit. If left out rolls lower than target are succesful, if set to any value any rolls higher than the target are succesful.
/-->
<rolltemplate class="sheet-rolltemplate-custom">
<div class="sheet-container sheet-color-{{color}}">
<div class="sheet-header">
{{#title}}<div class="sheet-title">{{title}}</div>{{/title}}
{{#subtitle}}<div class="sheet-subtitle">{{subtitle}}</div>{{/subtitle}}
{{#infected}}
{{#rollTotal() infected 1}}
<div class="sheet-infected">Infected</div>
{{/rollTotal() infected 1}}
{{/infected}}
</div>
<div class="sheet-content">
{{#allprops() title subtitle successdesc desc color rollresult rolltarget infected nocrit skilldevroll}}
<div class="sheet-key">{{key}}</div>
<div class="sheet-value">{{value}}</div>
{{/allprops() title subtitle successdesc desc color rollresult rolltarget infected nocrit skilldevroll}}
{{^Initiative}}
<div class="sheet-key sheet-rolltarget">TARGET</div>
<div class="sheet-value sheet-rolltarget">{{rolltarget}}</div>
<div class="sheet-key sheet-rollresult">RESULT</div>
<div class="sheet-value sheet-rollresult">{{rollresult}}</div>
{{/Initiative}}
{{^skilldevroll}} <!-- normal rolls have to roll under target and can possibly crit -->
{{#^rollGreater() rollresult rolltarget}}
{{#rollWasCrit() rollresult }}
{{^nocrit}}
<div class="sheet-crit-success">Critical Success!!</div>
{{/nocrit}}
{{#nocrit}}
<div class="sheet-success">Success</div>
{{/nocrit}}
{{/rollWasCrit() rollresult }}
{{#^rollWasCrit() rollresult }}
{{^nocrit}}
<div class="sheet-success">Marginal Success</div>
{{/nocrit}}
{{#nocrit}}
<div class="sheet-success">Success</div>
{{/nocrit}}
{{/^rollWasCrit() rollresult }}
{{/^rollGreater() rollresult rolltarget}}
{{#rollGreater() rollresult rolltarget}}
{{#rollWasCrit() rollresult }}
{{^nocrit}}
<div class="sheet-crit-failure">Critical Failure!!</div>
{{/nocrit}}
{{#nocrit}}
<div class="sheet-failure">Failure</div>
{{/nocrit}}
{{/rollWasCrit() rollresult }}
{{#^rollWasCrit() rollresult }}
{{^nocrit}}
<div class="sheet-failure">Marginal Failure</div>
{{/nocrit}}
{{#nocrit}}
<div class="sheet-failure">Failure</div>
{{/nocrit}}
{{/^rollWasCrit() rollresult }}
{{/rollGreater() rollresult rolltarget}}
{{/skilldevroll}}
{{#skilldevroll}} <!-- skill development rolls have to roll above target and never crit -->
{{#^rollGreater() rollresult rolltarget}}
<div class="sheet-failure">Failure.</div>
{{/^rollGreater() rollresult rolltarget}}
{{#rollGreater() rollresult rolltarget}}
<div class="sheet-success">Success.</div>
{{/rollGreater() rollresult rolltarget}}
{{/skilldevroll}}
{{#desc}}<div class="sheet-desc">{{desc}}</div>{{/desc}}
{{#^rollGreater() rollresult rolltarget}}
{{#successdesc}}<div class="sheet-desc">{{successdesc}}</div>{{/successdesc}}
{{/^rollGreater() rollresult rolltarget}}
</div>
</div>
</rolltemplate>
<!-- SHEETWORKERS -->
<script type="text/worker">
// small helper to make sure we have an integeer, and set a fallback in case the score is empty
const int = (score, fallback = 0) => parseInt(score) || fallback;
// reusable repeatingsum code from https://wiki.roll20.net/repeatingsum
const repeatingSum = (destinations, section, fields, ...extras) => {
const isNumber = value => parseFloat(value).toString() === value.toString();
const isOption = value => [...checks.valid, ...checks.roundtypes].includes(value);
const isRounding = value => checks.roundtypes.includes(value);
const isFraction = value => value.includes('/') && !(value.includes(',') || value.includes('|'));
const getTrimmed = value => value.toLowerCase().replace(/\s/g, '');
const getRounded = (type, value, pow) => (Math[type](value * Math.pow(10, pow)) / Math.pow(10, pow)).toFixed(Math.max(0, pow));
const getFraction = (value) => /*{ console.log(`value: ${value}`); */
parseInt(value.split('/')[0]) / parseInt(value.split('/')[1]);
const getMultiplier = (value, rounding = 1) => 'undefined' === typeof value ? (rounding ? 0: 1) : (
isNumber(value) ? parseFloat(value) : (isFraction(value) ? getFraction(value) : value));
if (!Array.isArray(destinations)) destinations = [getTrimmed(destinations)];
if (!Array.isArray(fields)) fields = [getTrimmed(fields)];
const fields_trimmed = fields.map(field => getTrimmed(field).split(':')[0]);
const subfields = fields_trimmed.slice(0,destinations.length);
const checks = { valid: ['multiplier'], roundtypes: ['ceil', 'round', 'floor'] };
let properties = {attributes: {}, options: {}};
extras.forEach(extra => {
const [prop, v] = getTrimmed(extra).split(':');
const multiplier_maybe = getMultiplier(v, isRounding(prop));
const obj = isNumber(multiplier_maybe) ? subfields.reduce((obj,field) => {
obj[field] = multiplier_maybe;
return obj;
},{}) : multiplier_maybe.split(',').reduce((obj, item) => {
const [stat, value] = item.split('|');
const multiplier = getMultiplier(value, isRounding(prop));
obj[stat] = multiplier;
return obj;
}, {});
properties[isOption(prop) ? 'options' : 'attributes'][prop] = obj;
});
getSectionIDs(`repeating_${section}`, idArray => {
const attrArray = idArray.reduce((m, id) => [...m, ...(fields_trimmed.map(field => `repeating_${section}_${id}_${field}`))], []);
getAttrs([...attrArray, ...Object.keys(properties.attributes)], v => {
const getValue = (section, id, field) => v[`repeating_${section}_${id}_${field}`] === 'on' ? 1 : parseFloat(v[`repeating_${section}_${id}_${field}`]) || 0;
const commonMultipliers = (fields.length <= destinations.length) ? [] : fields.splice(destinations.length, fields.length - destinations.length);
const output = destinations.reduce((obj, destination, index) => {
let sumTotal = idArray.reduce((total, id) => total + getValue(section, id, fields_trimmed[index]) * commonMultipliers.reduce((subtotal, mult) => subtotal * ((!mult.includes(':') || mult.split(':')[1].split(',').includes(fields_trimmed[index])) ? getValue(section, id, mult.split(':')[0]) : 1), 1), 0);
sumTotal *= (properties.options.hasOwnProperty('multiplier') && Object.keys(properties.options.multiplier).includes(fields_trimmed[index])) ? (parseFloat(properties.options.multiplier[fields_trimmed[index]]) || 0): 1;
sumTotal += Object.entries(properties.attributes).reduce((total, [key, value]) =>
total += (value.hasOwnProperty(fields_trimmed[index]) ? parseFloat(v[key] || 0) * (parseFloat(value[fields_trimmed[index]]) || 1): 0) , 0);
checks.roundtypes.forEach(type => {
if (properties.options.hasOwnProperty(type)) {
if (Object.keys(properties.options[type]).includes(fields_trimmed[index])) {
sumTotal = getRounded(type, sumTotal, (+properties.options[type][fields_trimmed[index]] || 0));
} else if (properties.options[type] == '0' || !isNaN(+properties.options[type] || 'x') ) {
sumTotal = getRounded(type, sumTotal, +properties.options[type]);
}
}
});
obj[destination] = sumTotal;
return obj;
}, {});
setAttrs(output);
});
});
}; // end repeatingsum code
// sheet tab buttons
const buttonlist = ['character','inventory','settings'];
buttonlist.forEach(button => {
on(`clicked:${button}`, function() {
setAttrs({
sheetTab: button
});
});
});
// check if we need to data migration when the sheet opens
on("sheet:opened", function() {
migrationCheck();
setAttrs({ "safe-sheet-open": Date.now() });
});
/*
# Old Data Conversion
Always try to migrate as much data as possible - copied from kreuvf's DSA sheet: https://github.com/kreuvf/roll20-character-sheets/tree/master/Das_Schwarze_Auge_4-1
Relevant character sheet versions
* 20171225: last version by https://app.roll20.net/users/72360/optionalrule of his original HarnMaster3 sheet
* 20210801: "version 2" of the sheet, complete rework of original HarnMaster3 sheet by https://app.roll20.net/users/72360/optionalrule ; see readme.md for info.
*/
function migrationCheck() {
getAttrs(["character_sheet_version", "data_version" , "name", "HWILL", "hwil"], function(v) {
let dataVersion = parseInt(v["data_version"]);
let sheetVersion = parseInt(v["character_sheet_version"]);
let oldName = v["name"]||0;
let oldhwill = parseInt(v["HWILL"]);
let newhwill = parseInt(v["hwil"])||0;
/*
If the character is new, data_version (the attribute) is just an empty string and dataVersion (the variable declared in this function) is NaN.
Since new characters do not need any migration, we just set the data_version to the current sheet version.
Why this is necessary
* Sheet-defined attributes such as data_version will change automatically if they are different in a new sheet version.
* Once a sheet-defined attribute is changed e. g. via setAttrs(), the value will not change with new sheet version.
* If a character was not opened for a long time (before data_version was set via script), the character's data version will update when the value is changed in a new sheet
* This would lead to no migrations being performed.
* On the other hand data_version could be left at its initial value, but that would mean that every new character would get all migrations unnecessarily!
* edit OvT: if it's an old (pre v2) sheet the character name will be stored in "name" instead of "character_name" ; we use this to migrate old sheets.
* Update: checking character_name doesn't work reliably, setting dataversion to 20171225 for sheet that don't have a data version; for now leaving out skipping migration for new sheets, confuses matters. Weapon and Armour migration won't run if there is no info in the repeating sections, that should cover new sheets.
*/
if (oldName !== 0 && isNaN(dataVersion)) {
dataVersion = 20171225;
console.log("Old name detected, data version set to", dataVersion);
}
else if (oldhwill !== 0 && newhwill === 0 ) {
dataVersion = 20210801;
console.log("Horse willpower in wrong attribute, data version set to", dataVersion);
}
else if (oldName === 0 && isNaN(dataVersion)) {
setCurrentVersion();
console.log("New character detected, data version set to", dataVersion);
return;
};
console.log("Checking versions before attempting data migration: Character sheet version is", v["character_sheet_version"], "and data version is", dataVersion);
let functionsToCall = [];
let firstFunction;
/*
we run over the possible migrations and check if they are already applied.
if not and it is the first migration, than the function name is saved as "firstFunction"
if it is not the first migration to apply it is added to "functionsToCall" array
*/
for (var i = 0; i < versionsWithMigrations.length; i++) {
if (dataVersion < versionsWithMigrations[i]) {
var functionName = "migrateTo" + versionsWithMigrations[i];
console.log("dataVersion " + dataVersion + " is older than version " + versionsWithMigrations[i] + " which needs a migration. Invoking migration function: " + functionName);
if (firstFunction) {
functionsToCall.push(functionName);
} else {
firstFunction = functionName;
}
};
}
// if there is at least one migration to do we add "setCurrentVersion" to the end of the function list which is responsible to set the current dataversion
// then we call the function with name "firstFunction"
if (firstFunction) {
functionsToCall.push("setCurrentVersion");
window[firstFunction](functionsToCall);
}
});
}
function setCurrentVersion(v) {
setAttrs({ "data_version": versionsWithMigrations.slice(-1).pop() });
console.log("Migration done, data version updated");
}
function callNextMigration(migrationChain) {
if (migrationChain && migrationChain.length > 0) {
let nextMigration = migrationChain.shift();
if (nextMigration) {
window[nextMigration](migrationChain);
}
}
}
/*
this list has to be always ordered ascending in order to apply the migration steps in the correct order
*/
var versionsWithMigrations = [
20210801,
20240917
]
/*
## From version 20171014 to 20210801
* Charactername now stored according to best practice recommendations roll20. Weapon AML and DML needs to be re-calculated
*/
function migrateTo20210801 (migrationChain) {
/* TODO: optimize code, we're getting and setting attributes twice */
console.log("migrateTo20210801 invoked");
/* move character name from old "name" attribute to character_name (roll20 best practice) */
getAttrs(['sheetversion', 'character_name', 'name', 'condition_ml', 'combat_endurance', 'hrcondition4endurance' ],
function(values) {
/* align storage of character name with roll20 recommendations */
var charname = values['name'];
console.log("Character name", charname);
/* calculate effectivecondition for migrated characters */
var conditionml = parseInt(values['condition_ml']);
var endurancevalue = parseInt(values['combat_endurance'])||0;
var condasendvalue = Math.round(conditionml / 5)||endurancevalue; /* if there is no condition, set this to be equal to endurance */
var conditionlimit = Math.round(endurancevalue*1.4)||0;
var effectivecondition = Math.min(condasendvalue,conditionlimit)||0;
if(values.hrcondition4endurance == 2) {
var healeffcondition = effectivecondition;
} else {
var healeffcondition = endurancevalue;
}
console.log("effective condition", effectivecondition, "healing condition", healeffcondition , "condition ml", conditionml, "condition limit" , conditionlimit);
setAttrs({
'combat_effectivecondition': effectivecondition,
'healing_effectivecondition': healeffcondition,
'character_name': charname
/* 'name': 0 we don't need to clear the old name, migration check works based on presence of old name field and version being set or not*/
});
});
/* re-calculate all weapons in the repeating weapons section. */
/* add re-calc armor (after moving armor values to new attrib) */
getSectionIDs('weapon', ids => {
if (ids.length === 0) {
console.log("Migration: No weapons found, nothing to migrate.");
return;
}
const fieldArray = [];
ids.forEach(id => fieldArray.push(
`repeating_weapon_${id}_weapon_ml`, `repeating_weapon_${id}_weapon_atk`, `repeating_weapon_${id}_weapon_def`
));
getAttrs(fieldArray , function (values) {
const update = {};
ids.forEach(id => {
console.log("working on:", `${id}`);
var wml = parseInt(values[`repeating_weapon_${id}_weapon_ml`]);
var watk = parseInt(values[`repeating_weapon_${id}_weapon_atk`]);
var wdef = parseInt(values[`repeating_weapon_${id}_weapon_def`]);
var waml = wml + watk;
var wdml = wml + wdef;
console.log("Migrating Weapon data", " ML:", wml, "ATK:", watk, "DEF:", wdef, "Weapon AML:", waml, "Weapon DML:", wdml);
update[`repeating_weapon_${id}_weapon_aml`] = waml;
update[`repeating_weapon_${id}_weapon_dml`] = wdml;
});
update[`notifyupgrade`] = 1; /* We're updating so turn on upgrade notification */
setAttrs(update, {}, function() {callNextMigration(migrationChain);} );
});
});
}
function migrateTo20240917 (migrationChain) {
console.log("migrateTo20240917 invoked");
/* move horse willpwoer from old "hwill" attribute to hwil */
getAttrs(["HWILL", "hwil"], function(values) {
var oldhwil = parseInt(values['HWILL']);
const update = {};
update[`hwil`] = oldhwil;
update[`notifyupgrade`] = 1; /* We're updating so turn on upgrade notification */
setAttrs(update, function() {callNextMigration(migrationChain);} );
});
}
// restore Character name in old name variable in parallel to new character_name for backward compatibility (old variable was empty out by migration script
on('change:character_name sheet:opened', function() {
getAttrs(['character_name'], function(values) {
var charactername = values['character_name'];
setAttrs({
'name': charactername
});
});
});
// weapon load totals
on('change:repeating_weapon remove:repeating_weapon', function() {
repeatingSum('load_weapons_total', 'weapon',['weapon_wgt','weapon_iscarried']);
});
// horse armor load totals
on('change:repeating_harmoritems remove:repeating_harmoritems', function() {
repeatingSum('hload_armor_total', 'harmoritems', 'harmor_wgt');
});
// item load totals
on('change:repeating_inventoryitems remove:repeating_inventoryitems', function() {
repeatingSum('load_inventory_total', 'inventoryitems', ['inventory_wgt','inventory_iscarried']);
});
// horse item load totals
on('change:repeating_hinventoryitems remove:repeating_hinventoryitems', function() {
repeatingSum('hload_inventory_total', 'hinventoryitems', 'hinventory_wgt');
});
// endurance
on('change:str change:sta change:wil',
function() {
getAttrs(['str', 'sta', 'wil'],
function(values) {
var stattotal = int(values['str']);
stattotal += int(values['sta']);
stattotal += int(values['wil']);
var endurance = Math.round(stattotal / 3)||0;
setAttrs({
'combat_endurance': endurance
});
});
});
// horse endurance
on('change:hstr change:hsta change:hwil',
function() {
getAttrs(['hstr', 'hsta', 'hwil'], function(values) {
var stattotal = parseInt(values['hstr'])||0;
stattotal += parseInt(values['hsta'])||0;
stattotal += parseInt(values['hwil'])||0;
var hendurance = Math.round(stattotal / 3)||0;
setAttrs({
'hcombat_endurance': hendurance
});
});
});
// condition/5 for use in load, shock and healing rolls (depending on rules settings); see Skills 9 of HarnMaster rulebook
on('change:condition_ml change:combat_endurance change:hrcondition4endurance',
function() {
getAttrs(['condition_ml', 'combat_endurance', 'hrcondition4endurance'],
function(values) {
var conditionml = parseInt(values['condition_ml']); /*note: we don't want to set this to 0 if condition is not filled in, this leads to errors later */
var endurancevalue = parseInt(values['combat_endurance'])||0;
var condasendvalue = Math.round(conditionml / 5)||endurancevalue; /* if there is no condition, set this to be equal to endurance */
var conditionlimit = Math.round(endurancevalue*1.4)||0;
var effectivecondition = Math.min(condasendvalue,conditionlimit)||0;
if(values.hrcondition4endurance == 2) {
var healeffcondition = effectivecondition;
} else {
var healeffcondition = endurancevalue;
}
console.log("effective condition", effectivecondition, "healing condition", healeffcondition , "condition ml", conditionml, "condition limit" , conditionlimit);
setAttrs({
'combat_effectivecondition': effectivecondition,
'healing_effectivecondition': healeffcondition
});
});
});
// load and encumbrance
on('change:load_weapons_total change:load_armor_total change:load_inventory_total change:combat_effectivecondition change:combat_endurance change:is_mounted', function() {
var total = 0.0;
getAttrs(['load_armor_total', 'load_weapons_total', 'load_inventory_total', 'combat_effectivecondition','combat_endurance' ,'is_mounted', 'hrcondition4endurance'], function(values) {
total += parseFloat(values['load_armor_total'])||0.0;
total += parseFloat(values['load_weapons_total'])||0.0;
total += parseFloat(values['load_inventory_total'])||0.0;
if(values.hrcondition4endurance != 0) {
var carrycapacity = int(values['combat_effectivecondition']);
} else {
var carrycapacity = int(values['combat_endurance']);
}
var encumbrance = Math.round(total/carrycapacity)||0;
if(values.is_mounted != 0) {
encumbrance = Math.round(encumbrance/2);
}
console.log("carry capacity", carrycapacity, "encumbrance", encumbrance, "total weight", total);
setAttrs({
'load_total': parseFloat(total)||0,
'encumbrance': encumbrance
});
});
});
// horse load limit, load and encumbrance
on('change:hstr change:weight change:load_total change:hload_armor_total change:hload_inventory_total change:hcombat_endurance change:hstr',
function() {
var total = 0.0;
getAttrs(['weight', 'load_total', 'hload_armor_total', 'hload_inventory_total', 'hcombat_endurance', 'hstr'],
function(values) {
total += parseFloat(values['weight'])||0.0;
total += parseFloat(values['load_total'])||0.0;
total += parseFloat(values['hload_armor_total'])||0.0;
total += parseFloat(values['hload_inventory_total'])||0.0;
var horsestrength = parseInt(values['hstr'])||0;
hllimit = Math.round(horsestrength*8);
var hadjustedloadtemp = Math.round(total-hllimit);
var hadjustedload = Math.max(0, hadjustedloadtemp);
var hcomend = parseInt(values['hcombat_endurance'])||0;
if ( hcomend != 0 ) {
var hencumb = Math.round(hadjustedload/hcomend)||0;
} else {
var hencumb = 0;
console.log("Horse endurance not known, setting horse encumbrance to 0");
}
var riderweight = parseFloat(values['weight'])||0;
var riderload = riderweight + parseFloat(values['load_total'])||0.0;
setAttrs({
'hloadlimit': hllimit,
'hadjusted_load': hadjustedload,
'hload_total': parseInt(total)||0,
'hencumbrance': hencumb,
'hload_rider_total': riderload
});
});
});
// injury totals
on('change:repeating_injury:injury_level remove:repeating_injury', function() {
repeatingSum('injury_total', 'injury', 'injury_level');
});
// horse injury totals
on('change:repeating_hinjury:hinjury_level remove:repeating_hinjury', function() {
repeatingSum('hinjury_total', 'hinjury', 'hinjury_level');
});
// injury infected feedback
on('change:repeating_injury:injury_infected', function() {
getAttrs([
'repeating_injury_injury_infected',
'repeating_spells_injury_infected_feedback'
], function(values) {
var isinfected = (values.repeating_injury_injury_infected == 0 ? 0 : 1);
setAttrs({
repeating_injury_injury_infected_feedback: isinfected
});
});
});
// horse injury infected feedback
on('change:repeating_hinjury:hinjury_infected', function() {
getAttrs([
'repeating_injury_hinjury_infected',
'repeating_spells_hinjury_infected_feedback'
], function(values) {
var isinfected = (values.repeating_injury_hinjury_infected == 0 ? 0 : 1);
setAttrs({
repeating_injury_hinjury_infected_feedback: isinfected
});
});
});
// universal and physical penalties
on('change:is_mounted change:injury_total change:fatigue_total change:encumbrance change:hrfumblestumblepenalty', function() {
getAttrs(['hrfumblestumblepenalty', 'injury_total', 'fatigue_total', 'encumbrance', 'is_mounted'], function(values) {
var inj = parseInt(values.injury_total)||0;
var fat = parseInt(values.fatigue_total)||0;
var enc = parseInt(values.encumbrance)||0;
if (values.is_mounted == 1) { fat = Math.round(fat / 2) };
var upenalty = inj + fat;
var ppenalty = enc + upenalty;
if (values.hrfumblestumblepenalty == 1) { var fspenalty = upenalty; }
else { var fspenalty = ppenalty; }
setAttrs({
'universal_penalty': upenalty,
'physical_penalty': ppenalty,
'fumblestumblepenalty': fspenalty
});
});
});
// horse universal and physical penalties
on('change:hinjury_total change:hfatigue_total change:hencumbrance', function() {
getAttrs(['hinjury_total', 'hfatigue_total', 'hencumbrance'], function(values) {
var hfat = parseInt(values.hfatigue_total)||0;
var hinj = parseInt(values.hinjury_total)||0;
var henc = parseInt(values.hencumbrance)||0;
var hupenalty = hinj + hfat;
var hppenalty = henc + hupenalty;
setAttrs({
'huniversal_penalty': hupenalty,
'hphysical_penalty': hppenalty
});
});
});
// Move speed in combat
on('change:encumbrance change:universal_penalty change:agl change:is_mounted change:hcombat_move', function() {
getAttrs(['agl', 'universal_penalty', 'encumbrance', 'is_mounted', 'hcombat_move', 'hrhorseonsheet'], function(values) {
var cmove = parseInt(values.agl) - parseInt(values.universal_penalty) - parseInt(values.encumbrance);
var currenthcmove = parseInt(values.hcombat_move);
cmove = Math.max(cmove, 1); // move is never less than 1 -->
if (values.is_mounted == 1 && values.hrhorseonsheet != 0) { cmove = currenthcmove }; // use horse move when mounted, don't do this if horse is not shown on sheet (horse speed would be 0)
console.log("combat move", cmove, "horse move", currenthcmove, "mounted?" , values.is_mounted);
setAttrs({
'combat_move': cmove
});
});
});
// effective riding skill on horse
on('change:ridingpersonal_ml change:hinitiative_ml change:hencumbrance change:huniversal_penalty change:encumbrance change:universal_penalty ',
function() {
getAttrs(['ridingpersonal_ml', 'hinitiative_ml', 'hencumbrance', 'huniversal_penalty', 'encumbrance', 'universal_penalty'],
function(values) {
var charphyspen = parseInt(values.encumbrance);
charphyspen += parseInt(values.universal_penalty);
var horsephyspen = parseInt(values.hencumbrance);
horsephyspen += parseInt(values.huniversal_penalty);
var charridingml = parseInt(values.ridingpersonal_ml);
var charridingeml = Math.round ( charridingml - 5*charphyspen);
var horseinitml = parseInt(values.hinitiative_ml);
var horseiniteml = Math.round ( horseinitml - 5*horsephyspen);
var charhorseridingeml = Math.round ( (charridingeml+horseiniteml)/2 );
setAttrs({
'tempridinghorse_eml': charridingeml,
'temphorseinit_eml': horseiniteml,
'ridinghorse_ml': charhorseridingeml
});
});
});
// combat initiative toggle between on and off horse
on('change:is_mounted change:ridinghorse_ml change:initiative_ml change:encumbrance change:universal_penalty',
function() {
getAttrs(['initiative_ml', 'ridinghorse_ml', 'is_mounted', 'combat_initiative', 'encumbrance', 'universal_penalty', 'hrhorseonsheet'],
function(values) {
var cinit = parseInt(values['initiative_ml'])||0;
var physpen = parseInt(values['encumbrance'])||0;
physpen += parseInt(values['universal_penalty'])||0;
cinit = Math.round(cinit - physpen*5);
if(values.is_mounted != 0 && values.hrhorseonsheet != 0) { cinit = parseInt(values['ridinghorse_ml'])}; // note: don't use horse ml if horse is not shown on sheet
setAttrs({
'combat_initiative': cinit
});
});
});
// horse combat initiative
on('change:hinitiative_ml change:hphysical_penalty sheet:opened',
function() {
getAttrs(['hinitiative_ml', 'hphysical_penalty'],
function(values) {
var hcinit = parseInt(values['hinitiative_ml'])||0;
var physpen = parseInt(values['hphysical_penalty'])||0;
hcinit = Math.round(hcinit - physpen*5);
setAttrs({
'hcombat_initiative': hcinit
});
});
});
// Horse Move speed in combat
on('change:horse_speed change:hencumbrance change:huniversal_penalty change:hmove', function() {
getAttrs(['hmove', 'huniversal_penalty', 'hencumbrance', 'horse_speed'], function(values) {
var hcmove = parseInt(values.hmove) - parseInt(values.huniversal_penalty) - parseInt(values.hencumbrance);
hcmove = Math.round( hcmove * parseFloat(values.horse_speed) ); // note: 0.5 speed for walk doesn't seem to work, goes down to 0.
var hcminmove = Math.round( hcmove/3 );
setAttrs({
'hcombat_move': hcmove,
'hcombat_min_move': hcminmove
});
});
});
// horse turning
on('change:horse_speed', function() {
getAttrs(['horse_speed'], function(values) {
var maxturn = 0;
if(values.horse_speed == 1) { maxturn = 3 };
if(values.horse_speed == 2) { maxturn = 5 };
if(values.horse_speed == 3) { maxturn = 10 };
setAttrs({
'hturn': maxturn
});
});
});
// WEAPON CALCULATIONS -->
// Weapon AML and DML calculations -->
on('change:repeating_weapon', function() {
getAttrs(['repeating_weapon_weapon_ml', 'repeating_weapon_weapon_atk', 'repeating_weapon_weapon_def'], function(values) {
var wml = parseInt(values.repeating_weapon_weapon_ml);
var watk = parseInt(values.repeating_weapon_weapon_atk);
var wdef = parseInt(values.repeating_weapon_weapon_def);
var waml = wml + watk;
var wdml = wml + wdef;
console.log("ML", wml, "ATK", watk, "DEF", wdef, "Weapon AML", waml, "Weapon DML", wdml);
setAttrs({
'repeating_weapon_weapon_aml': waml,
'repeating_weapon_weapon_dml': wdml
});
});
});
// Missile Weapon AML and DML calculations -->
on('change:repeating_missileweapon', function() {
getAttrs(['repeating_missileweapon_missileweapon_ml', 'repeating_missileweapon_missileweapon_p'], function(values) {
var mml = parseInt(values.repeating_missileweapon_missileweapon_ml);
var mdmg = parseInt(values.repeating_missileweapon_missileweapon_p);
var shortaml = mml;
var mediumaml = mml - 20;
var longaml = mml - 40;
var extremeaml = mml - 80;
var shortdmg = mdmg;
var mediumdmg = mdmg - 1;
var longdmg = Math.max(mdmg - 2, mdmg/2); // dmg is never less than 50% weapon dmg
var extremedmg = Math.max(mdmg - 3, mdmg/2); // dmg is never less than 50% weapon dmg
// console.log("ML", wml, "ATK", watk, "DEF", wdef, "Weapon AML", waml, "Weapon DML", wdml);
// note: mounted penalty calculated in roll button, don't add here
setAttrs({
'repeating_missileweapon_missileweapon_short_aml': shortaml,
'repeating_missileweapon_missileweapon_medium_aml': mediumaml,
'repeating_missileweapon_missileweapon_long_aml': longaml,
'repeating_missileweapon_missileweapon_extreme_aml': extremeaml,
'repeating_missileweapon_missileweapon_short_dmg': shortdmg,
'repeating_missileweapon_missileweapon_medium_dmg': mediumdmg,
'repeating_missileweapon_missileweapon_long_dmg': longdmg,
'repeating_missileweapon_missileweapon_extreme_dmg': extremedmg
});
});
});
// Unarmed AML and DML calculations -->
on('change:unarmed_ml', function() {
getAttrs(['unarmed_ml', 'punch_weapon_atk', 'kick_weapon_atk', 'punch_weapon_def', 'kick_weapon_def'], function(values) {
var uml = parseInt(values.unarmed_ml);
var paml = uml + parseInt(values.punch_weapon_atk);
var pdml = uml + parseInt(values.punch_weapon_def);
var kaml = uml + parseInt(values.kick_weapon_atk);
var kdml = uml + parseInt(values.kick_weapon_def);
setAttrs({
'punch_weapon_ml': uml,
'punch_weapon_aml': paml,
'punch_weapon_dml': pdml,
'kick_weapon_ml': uml,
'kick_weapon_aml': kaml,
'kick_weapon_dml': kdml
});
});
});
// ARMOR PROTECTION
// horse natural armour values based on aq
on('change:hnatural_aq', function() {
getAttrs(['hnatural_aq', 'hnatural_b', 'hnatural_e', 'hnatural_p', 'hnatural_f'], function(values) {
var horsenatarmb = 4;
var horsenatarme = 3;
var horsenatarmp = 1;
var horsenatarmf = 3;
var horsenatarmaq = parseInt(values.hnatural_aq);
var horsenatarmbaq = Math.min(horsenatarmb*2,horsenatarmb+horsenatarmaq);
var horsenatarmeaq = Math.min(horsenatarme*2,horsenatarme+horsenatarmaq);
var horsenatarmpaq = Math.min(horsenatarmp*2,horsenatarmp+horsenatarmaq);
var horsenatarmfaq = Math.min(horsenatarmf*2,horsenatarmf+horsenatarmaq);
setAttrs({
'hnatural_b': horsenatarmbaq,
'hnatural_e': horsenatarmeaq,
'hnatural_p': horsenatarmpaq,
'hnatural_f': horsenatarmfaq
});
});
});
/* OBSOLETE with new armour code; remove after testing - loop through all locations and fill with B/E/P/F values if location covered
const locations = ['sk','fa','nk','sh','ua','el','fo','ha','tx','ab','hp','gr','th','kn','ca','ft'];
locations.forEach(function (location) {
on('change:repeating_armoritems', function() {
const armorinfo = ['repeating_armoritems_armor_b', 'repeating_armoritems_armor_e', 'repeating_armoritems_armor_p', 'repeating_armoritems_armor_f'];
const currentloc = 'repeating_armoritems_armor_loc_' + location;
armorinfo.push(currentloc);
getAttrs(armorinfo, function(values) {
const locationarmorb = parseInt(values['repeating_armoritems_armor_b'])*parseInt(values[currentloc]);
const locationarmore = parseInt(values['repeating_armoritems_armor_e'])*parseInt(values[currentloc]);
const locationarmorp = parseInt(values['repeating_armoritems_armor_p'])*parseInt(values[currentloc]);
const locationarmorf = parseInt(values['repeating_armoritems_armor_f'])*parseInt(values[currentloc]);
setAttrs({
['repeating_armoritems_armor_' + location + '_bvalue']: locationarmorb,
['repeating_armoritems_armor_' + location + '_evalue']: locationarmore,
['repeating_armoritems_armor_' + location + '_pvalue']: locationarmorp,
['repeating_armoritems_armor_' + location + '_fvalue']: locationarmorf
});
// debugger; works, no longer needed -->
});
});
}); // end set armour values per location
*/
// New Armour calculations (3/2/2024) courtesy of GiGs , now also includes weight calc - https://app.roll20.net/forum/post/11780379/help-requested-with-the-repeatingsum-sheetworker-advanced-multi-column-calculation/?pageforid=11781474#post-11781474
const section_name = (section, id, field) => `repeating_${section}_${id}_${field}`;
on('change:repeating_armoritems remove:repeating_armoritems', function() {
const locations = ['sk','fa','nk','sh','ua','el','fo','ha','tx','ab','hp','gr','th','kn','ca','ft'];
const damage_types = ['b', 'e', 'p', 'f'];
const section = 'armoritems';
getSectionIDs(`repeating_${section}`, function(id_array) {
const carried = [];
const armor_total = [];
const armor_location = [];
const armor_info = [];
const armour_weight = [];
locations.forEach(location => damage_types.forEach(damage => armor_total.push(`${location}_${damage}`)));
id_array.forEach(id => {
armour_weight.push(section_name(section, id, 'armor_wgt'));
carried.push(section_name(section, id, 'armor_iscarried'));
locations.forEach(location => {
armor_location.push(section_name(section, id, `armor_loc_${location}`));
});
damage_types.forEach(damage => armor_info.push(section_name(section, id, `armor_${damage}`)));
});
getAttrs([...carried, ...armor_total, ...armor_location, ...armor_info, ...armour_weight], function(values) {
const output = {};
locations.forEach(location => {
damage_types.forEach(damage => output[`${location}_${damage}`] = 0);
});
id_array.forEach(id => {
const equipped = int(values[section_name(section, id, 'armor_iscarried')]);
damage_types.forEach(damage => {
const armor = int(values[section_name(section, id, `armor_${damage}`)]);
if(armor && equipped) {
locations.forEach(location => {
const covered = int(values[section_name(section, id, `armor_loc_${location}`)]);
output[`${location}_${damage}`] += (armor * covered);
// copy the armour for each piece to a hidden attribute for each location
output[section_name(section, id, `armor_${location}_${damage}value`)] = (armor * covered);
})
}
});
// calculate armour weight and add it.
let load_armor_total = 0;
id_array.forEach(id => {
const equipped = int(values[section_name(section, id, 'armor_iscarried')]);
load_armor_total += (equipped * parseFloat(values[section_name(section, id, 'armor_wgt')]));
});
output['load_armor_total'] = load_armor_total;
});
setAttrs(output);
});
});
});
// spell characteristics
// calculate SI from SB
on('change:repeating_spells:spell_eml change:repeating_rituals:ritual_eml change:repeating_psionics:talent_eml', function() {
getAttrs(['repeating_spells_spell_eml', 'repeating_rituals_ritual_eml', 'repeating_psionics_talent_eml'], function(values) {
var spellsi = Math.floor(parseInt(values['repeating_spells_spell_eml']/10));
var ritualsi = Math.floor(parseInt(values['repeating_rituals_ritual_eml']/10));
var talentsi = Math.floor(parseInt(values['repeating_psionics_talent_eml']/10));
console.log("spell si: ", spellsi);
setAttrs({
repeating_spells_spell_si: spellsi,
repeating_rituals_ritual_si: ritualsi,
repeating_psionics_talent_si: talentsi
});
});
});
// miscellaneous -->
on("clicked:hidelegacyarmor", function() {
setAttrs({'legacyarmorhidden' : 1});
console.log("Remove legacy armor button clicked (note: we're just hiding, not removing)");
});
on("clicked:dismissupgradenotice", function() {
setAttrs({'notifyupgrade' : 0});
console.log("Hiding sheet upgrade notification until next upgrade.");
});
</script>