Files
roll20-character-sheets/Elemental/elemental.html
T
2023-07-16 08:31:32 +10:00

762 lines
48 KiB
HTML

<div class='sheet-container'>
<div class='sheet-header'>
<div class='sheet-2colrow'>
<div class='sheet-col'>
<div class="sheet-block">
<div class="row">
<label class='sheet-label' data-i18n="name-u">Name:</label>
<input type="text" class='sheet-input' name="attr_character_name" placeholder="Character Name" />
</div>
<div class="row">
<label class='sheet-label' data-i18n="title-u">Title:</label>
<input type="text" class='sheet-input' name="attr_character_title" placeholder="Character Title" />
</div>
<div class="row">
<label class='sheet-label' data-i18n="species-u">Species:</label>
<input type="text" class='sheet-input' name="attr_character_race" placeholder="Race/Species" />
</div>
<br />
</div>
</div>
<div class='sheet-col'>
<img style="padding-top:15px;" src="https://github.com/SPConlin/roll20-character-sheets/blob/master/Elemental/images/logo.png?raw=true" />
</div>
</div>
</div>
<div class="sheet-tabs">
<div class="sheet-tab sheet-tab-core">
<input type="radio" name="attr_tab" value="core" checked="checked">
<span class="sheet-tab-label">Core</span>
<div class="sheet-tab-content">
<div class="sheet-content">
<div class='sheet-2colrow'>
<div class='sheet-col'>
<div class="sheet-heading">Experience Points</div>
<div class="sheet-block">
<div class="sheet-top">
<span class="sheet-blocklabel" style="width: 82px;" data-i18n="total-u">Total</span>
<span class="sheet-blocklabel" style="width: 84px;" data-i18n="spent-u">Spent</span>
<span class="sheet-blocklabel" style="width: 82px;" data-i18n="sacrifice-u">Sacrificed</span>
<span class="sheet-blocklabel" style="width: 80px;" data-i18n="reserve-u">Reserve</span>
</div>
<input type="number" class="sheet-number" style="width: 80px;" name="attr_xp_total" placeholder="0" />
<input type="number" class="sheet-derstat" style="width: 80px; color:white;" name="attr_xp_spent" value="0" readonly />
<input type="number" class="sheet-number" style="width: 80px;" name="attr_xp_sacrificed" placeholder="0" />
<input type="number" class="sheet-derstat" style="width: 80px; color:white;" name="attr_xp_reserve" value="0" readonly />
</div>
<br />
<div class="sheet-heading" data-i18n="attrskill-u">Attributes & Skills</div>
<div class="sheet-block">
<button type="roll" class="sheet-rollbutton" name="roll_agi" value="&{template:basic} {{type= Attribute}} {{name= Agility}} {{roll= [[1d6+@{agi}]]}} {{explode= [[1d6]]}}"></button>
<input type="text" style="width:275px; color:white;" class="sheet-attrname" data-i18n="agi-u" value="Agility" readonly />
<input type="number" class="sheet-number" name="attr_agi" value="0" />
<input type="hidden" name="attr_agi_xp_used" value="0" />
<input type="hidden" name="attr_agiskill_xp_used" value="0" />
<div class="sheet-skillblock">
<fieldset class="repeating_agiskills">
<button type="roll" class="sheet-rollbutton" name="roll_agi_skill" value="&{template:basic} {{type= Skill}} {{name= @{agi_skill} @{agi_skill_spec} }} {{roll= [[1d6 + @{agi} + @{agi_skill_rating}]]}} {{explode= [[1d6]]}}"></button>
<select style="width:125px;" name="attr_agi_skill">
<option value="" data-i18n="flaws" disabled>Skills</option>
<option value="Assassination" data-i18n="assassination">Assassination</option>
<option value="Athletics" data-i18n="athletics">Athletics</option>
<option value="Cover" data-i18n="cover">Cover</option>
<option value="Driving" data-i18n="driving">Driving</option>
<option value="Grappling" data-i18n="grappling">Grappling</option>
<option value="Marksmanship" data-i18n="marksmanship">Marksmanship</option>
<option value="Missle Deflection" data-i18n="missle_deflection">Missle Deflection</option>
<option value="Multistrike" data-i18n="multistrike">Multistrike</option>
<option value="Piloting" data-i18n="piloting">Piloting</option>
<option value="Riding" data-i18n="riding">Riding</option>
<option value="Sailing" data-i18n="sailing">Sailing</option>
<option value="Sleight-of-hand" data-i18n="sleight-of-hand">Sleight-of-Hand</option>
<option value="Stealth" data-i18n="stealth">Stealth</option>
<option value="Sworn Enemy" data-i18n="sworn_enemy">Sworn Enemy*</option>
<option value="Team Tactics" data-i18n="team_tactics">Team Tactics</option>
<option value="Unarmed Strike" data-i18n="unarmed_strike">Unarmed Strike</option>
<option value="Weapon Mastery" data-i18n="weapon_mastery">Weapon Mastery*</option>
<option value="" data-i18n="flaws" disabled>Flaws</option>
<option value='Clumsiness' data-i18n='clumsiness'>Clumsiness</option>
<option value='Handicap' data-i18n='handicap'>Handicap</option>
</select>
<input type="text" style="width: 125px;" name="attr_agi_skill_spec" value="" data-i18n-placeholder="skillspec-u" placeholder="Specifics" />
<input type="number" class="sheet-attrval" name="attr_agi_skill_rating" value="0" />
</fieldset>
</div>
</div>
<br />
<div class="sheet-block">
<button type="roll" class="sheet-rollbutton" name="roll_tough" value="&{template:basic} {{type= Attribute}} {{name= Toughness}} {{roll= [[1d6+@{tough}]]}} {{explode= [[1d6]]}}"></button>
<input type="text" style="width:275px; color:white;" class="sheet-attrname" data-i18n="tough-u" value="Toughness" readonly />
<input type="number" class="sheet-number" name="attr_tough" value="0" />
<input type="hidden" name="attr_tough_xp_used" value="0" />
<input type="hidden" name="attr_toughskill_xp_used" value="0" />
<div class="sheet-skillblock">
<fieldset class="repeating_toughskills">
<button type="roll" class="sheet-rollbutton" name="roll_tough_skill" value="&{template:basic} {{type= Skill}} {{name= @{tough_skill} @{tough_skill_spec} }} {{roll= [[1d6 + @{tough} + @{tough_skill_rating}]]}} {{explode= [[1d6]]}}"></button>
<select style="width:125px;" name="attr_tough_skill">
<option value="" data-i18n="skills" disabled>Skills</option>
<option value='Aquatic' data-i18n='aquatic'>Aquatic</option>
<option value='Armored Combat' data-i18n='armored combat'>Armored Combat</option>
<option value='Charge' data-i18n='charge'>Charge</option>
<option value='Endurance' data-i18n='endurance'>Endurance</option>
<option value='Bighty Blow' data-i18n='mighty blow'>Mighty Blow</option>
<option value='Resistance' data-i18n='resistance'>Resistance*</option>
<option value='Second Wind' data-i18n='second wind'>Second Wind</option>
<option value='Strength' data-i18n='strength'>Strength</option>
<option value='Unlife' data-i18n='unlife'>Unlife</option>
<option value="" data-i18n="flaws" disabled>Flaws</option>
<option value='Breathless' data-i18n='breathless'>Breathless</option>
<option value='Frailty' data-i18n='frailty'>Frailty</option>
<option value='Sunlight sensitivity' data-i18n='sunlight sensitivity'>Sunlight Sensitivity</option>
<option value='Vulnerability' data-i18n='vulnerability'>Vulnerability</option>
<option value='Weakness' data-i18n='weakness'>Weakness</option>
</select>
<input type="text" style="width: 125px;" name="attr_tough_skill_spec" value="" data-i18n-placeholder="skillspec-u" placeholder="Specifics" />
<input type="number" class="sheet-attrval" name="attr_tough_skill_rating" value="0" />
</fieldset>
</div>
</div>
<br />
<div class="sheet-block">
<button type="roll" class="sheet-rollbutton" name="roll_aware" value="&{template:basic} {{type= Attribute}} {{name= Awareness}} {{roll= [[1d6+@{aware}]]}} {{explode= [[1d6]]}}"></button>
<input type="text" style="width:275px; color:white;" class="sheet-attrname" data-i18n="aware-u" value="Awareness" readonly />
<input type="number" class="sheet-number" name="attr_aware" value="0" />
<input type="hidden" name="attr_aware_xp_used" value="0" />
<input type="hidden" name="attr_awareskill_xp_used" value="0" />
<div class="sheet-skillblock">
<fieldset class="repeating_awareskills">
<button type="roll" class="sheet-rollbutton" name="roll_aware_skill" value="&{template:basic} {{type= Skill}} {{name= @{aware_skill} @{aware_skill_spec} }} {{roll= [[1d6 + @{aware} + @{aware_skill_rating}]]}} {{explode= [[1d6]]}}"></button>
<select style="width:125px;" name="attr_aware_skill">
<option value="" data-i18n="Skills" disabled>Skills</option>
<option value='Appraisal' data-i18n='appraisal'>Appraisal</option>
<option value='Arcane Lore' data-i18n='arcane lore'>Arcane Lore</option>
<option value='Background' data-i18n='background'>Background*</option>
<option value='Computers' data-i18n='computers'>Computers</option>
<option value='Criminology' data-i18n='criminology'>Criminology</option>
<option value='Fixing' data-i18n='fixing'>Fixing</option>
<option value='Heavy Weapon' data-i18n='heavy_weapon'>Heavy Weapon*</option>
<option value='Languages' data-i18n='languages'>Languages*</option>
<option value='Locks & Traps' data-i18n='locks_traps'>Locks & Traps</option>
<option value='Medicine' data-i18n='medicine'>Medicine</option>
<option value='Memory' data-i18n='memory'>Memory</option>
<option value='Nightvision' data-i18n='nightvision'>Nightvision</option>
<option value='Observation' data-i18n='observation'>Observation</option>
<option value='Power or Spell' data-i18n='power_or_spell'>Power or Spell*</option>
<option value='Psychology' data-i18n='psychology'>Psychology</option>
<option value='Research' data-i18n='research'>Research</option>
<option value='Senses' data-i18n='senses'>Senses</option>
<option value='Sixth Sense' data-i18n='sixth sense'>Sixth Sense</option>
<option value='Survival' data-i18n='survival'>Survival*</option>
<option value='Surgery' data-i18n='surgery'>Surgery</option>
<option value='Surveillance' data-i18n='surveillance'>Surveillance</option>
<option value='Trivia' data-i18n='trivia'>Trivia</option>
<option value='Underworld' data-i18n='underworld'>Underworld</option>
<option value="" data-i18n="flaws" disabled>Flaws</option>
<option value='Absent-mindedness' data-i18n='absent-mindedness'>Absent-Mindedness</option>
<option value='Blindness' data-i18n='blindness'>Blindness</option>
<option value='Deafness' data-i18n='deafness'>Deafness</option>
</select>
<input type="text" style="width: 125px;" name="attr_aware_skill_spec" value="" data-i18n-placeholder="skillspec-u" placeholder="Specifics" />
<input type="number" class="sheet-attrval" name="attr_aware_skill_rating" value="0" />
</fieldset>
</div>
</div>
<br />
<div class="sheet-block">
<button type="roll" class="sheet-rollbutton" name="roll_will" value="&{template:basic} {{type= Attribute}} {{name= Will}} {{roll= [[1d6+@{will}]]}} {{explode= [[1d6]]}}"></button>
<input type="text" style="width:275px; color:white;" class="sheet-attrname" data-i18n="will-u" value="Will" readonly />
<input type="number" class="sheet-number" name="attr_will" value="0" />
<input type="hidden" name="attr_will_xp_used" value="0" />
<input type="hidden" name="attr_willskill_xp_used" value="0" />
<div class="sheet-skillblock">
<fieldset class="repeating_willskills">
<button type="roll" class="sheet-rollbutton" name="roll_will_skill" value="&{template:basic} {{type= Skill}} {{name= @{will_skill} @{will_skill_spec} }} {{roll= [[1d6 + @{will} + @{will_skill_rating}]]}} {{explode= [[1d6]]}}"></button>
<select style="width:125px;" name="attr_will_skill">
<option value="" data-i18n="skills" disabled>Skills</option>
<option value='Animal Handling' data-i18n='animal_handling'>Animal Handling*</option>
<option value='Art' data-i18n='art'>Art*</option>
<option value='Bargaining' data-i18n='bargaining'>Bargaining</option>
<option value='Battle Rage' data-i18n='battle_rage'>Battle Rage</option>
<option value='Command' data-i18n='command'>Command</option>
<option value='Focus' data-i18n='focus'>Focus</option>
<option value='Followers' data-i18n='followers'>Followers</option>
<option value='Impersonation' data-i18n='impersonation'>Impersonation</option>
<option value='Intimidation/Fear' data-i18n='intimidation_fear'>Intimidation/Fear</option>
<option value='Luck' data-i18n='luck'>Luck</option>
<option value='Oratory' data-i18n='oratory'>Oratory</option>
<option value='Persuasion' data-i18n='persuasion'>Persuasion</option>
<option value='Politics' data-i18n='politics'>Politics</option>
<option value='Reputation' data-i18n='reputation'>Reputation*</option>
<option value='Street Smarts' data-i18n='street_smarts'>Street Smarts</option>
<option value='Trickery' data-i18n='trickery'>Trickery</option>
<option value="" data-i18n="flaws" disabled>Flaws</option>
<option value='Addiction' data-i18n='addiction'>Addiction*</option>
<option value='Cowardice' data-i18n='cowardice'>Cowardice</option>
<option value='Code of Honor' data-i18n='code_of_honor'>Code of Honor*</option>
<option value='Flashbacks' data-i18n='flashbacks'>Flashbacks</option>
<option value='Greed' data-i18n='greed'>Greed*</option>
<option value='Outcast' data-i18n='outcast'>Outcast*</option>
<option value='Phobia' data-i18n='phobia'>Phobia*</option>
<option value='Unluck' data-i18n='unluck'>Unluck</option>
<option value='Unmistakable Feature' data-i18n='unmistakable_feature'>Unmistakable Feature*</option>
</select>
<input type="text" style="width: 125px;" name="attr_will_skill_spec" value="" data-i18n-placeholder="skillspec-u" placeholder="Specifics" />
<input type="number" class="sheet-attrval" name="attr_will_skill_rating" value="0" />
</fieldset>
</div>
</div>
</div>
<div class='sheet-col'>
<div class="sheet-heading" data-i18n='derstat'>Derived Statistics</div>
<div class="sheet-block sheet-smallblock">
<div class="sheet-top">
<button type="roll" class="sheet-rollbutton" style="width:65px" name="roll_health" value="&{template:stat} {{name= Health}} {{check= [[ 1d6*1d6 ]]}}" data-i18n="health-u">Health</button>
</div>
<input type="text" class="sheet-derstat" style="width:40px; color:white;" name="attr_curhealth" value="0" readonly />/<input type="text" class="sheet-derstat" style="width:35px; color:white;" name="attr_health" value="0" readonly />
</div>
<div class="sheet-block sheet-smallblock">
<div class="sheet-top">
<button type="roll" class="sheet-rollbutton" style="width:65px" name="roll_move" value="&{template:stat} {{name= Move}} {{check= [[ 1d6*1d6 ]]}}" data-i18n="move-u">Move</button>
</div>
<input type="text" class="sheet-derstat" style="width:40px; color:white;" name="attr_curmove" value="0" readonly />/<input type="text" class="sheet-derstat" style="width: 35px; color:white;" name="attr_move" value="0" readonly />
</div>
<div class="sheet-block sheet-smallblock">
<div class="sheet-top">
<button type="roll" class="sheet-rollbutton" style="width:65px" name="roll_init" value="&{template:stat} {{name= Initiative}} {{check= [[ 1d6*1d6 ]]}}" data-i18n="init-u">Init</button>
</div>
<input type="text" class="sheet-derstat" style="width:40px; color:white;" name="attr_curinit" value="0" readonly />/<input type="text" class="sheet-derstat" style="width: 35px; color:white;" name="attr_initiative" value="0" readonly />
</div>
<div class="sheet-block sheet-smallblock">
<div class="sheet-top">
<button type="roll" class="sheet-rollbutton" style="width:65px" name="roll_spirit" value="&{template:stat} {{name= Spirit}} {{check= [[ 1d6*1d6 ]]}}" data-i18n="spirit-u">Spirit</button>
</div>
<input type="text" class="sheet-derstat" style="width:40px; color:white;" name="attr_curspirit" value="0" readonly />/<input type="text" class="sheet-derstat" style="width: 35px; color:white;" name="attr_spirit" value="0" readonly />
</div>
<br/>
<div class="sheet-heading" data-i18n='bonus'>Bonuses & Penalties</div>
<div class="sheet-block sheet-smallblock" style="width:55px">
<div class="sheet-top" data-i18n='atk'>
Attack
</div>
<input type="text" class="sheet-number" style="width:50px" name="attr_atk" value="0" />
</div>
<div class="sheet-block sheet-smallblock" style="width:55px">
<div class="sheet-top" data-i18n='defense'>
Defense
</div>
<input type="text" class="sheet-number" style="width:50px" name="attr_def" value="0" />
</div>
<div class="sheet-block sheet-smallblock" style="width:55px">
<div class="sheet-top" data-i18n='damage'>
Damage
</div>
<input type="number" class="sheet-number" style="width:50px" name="attr_dam" value="0" />
</div>
<div class="sheet-block sheet-smallblock" style="width:110px;">
<div class="sheet-top" data-i18n='impair'>
Impairment Level
</div>
<input type="checkbox" name="attr_impair" value="1"/><span></span>
<input type="checkbox" name="attr_impair" value="2"/><span></span>
<input type="checkbox" name="attr_impair" value="3"/><span></span>
</div>
<div class="sheet-block sheet-smallblock" style="width:55px">
<div class="sheet-top" data-i18n='injury'>
Injuries
</div>
<input type="number" class="sheet-number" style="width:50px" name="attr_injury" value="0" />
</div>
<div class="sheet-block sheet-smallblock" style="width:55px">
<div class="sheet-top" data-i18n='move-u'>
Move
</div>
<input type="number" class="sheet-number" style="width:50px" name="attr_move_mod" value="0" />
</div>
<div class="sheet-block sheet-smallblock" style="width:55px">
<div class="sheet-top" data-i18n='init-u'>
Init
</div>
<input type="number" class="sheet-number" style="width:50px" name="attr_init_mod" value="0" />
</div>
<div class="sheet-block sheet-smallblock" style="width:55px">
<div class="sheet-top" data-i18n='spirit-u'>
Spirit
</div>
<input type="number" class="sheet-number" style="width:50px" name="attr_spirit_mod" value="0" />
</div>
<br/>
<div class="sheet-heading" data-i18n='notes-u'>Notes</div>
<div class="sheet-block">
<textarea name="attr_notes" style="width:95%; height:200px; color:black;"></textarea>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="sheet-tab sheet-tab-equipment">
<input type="radio" name="attr_tab" value="equipment">
<span class="sheet-tab-label">Equipment</span>
<div class="sheet-tab-content">
<div class="sheet-content">
<div class="sheet-heading">Weapons</div>
<div class="sheet-block">
<div class="sheet-top">
<span class="sheet-blocklabel" style="width: 155px;" data-i18n="name-u">Name</span>
<span class="sheet-blocklabel" style="width: 55px;" data-i18n="ammo-u">Ammo</span>
<span class="sheet-blocklabel" style="width: 50px;" data-i18n="rel-u">Rel</span>
<span class="sheet-blocklabel" style="width: 55px;" data-i18n="rng-u">Range</span>
<span class="sheet-blocklabel" style="width: 80px;" data-i18n="dam-u">DAM</span>
<span class="sheet-blocklabel" style="width: 55px;" data-i18n="aoe-u">AOE</span>
<span class="sheet-blocklabel" style="width: 50px;" data-i18n="wt-u">Wt</span>
<span class="sheet-blocklabel" style="width: 100px;" data-i18n="notes-u">Notes</span>
</div>
<fieldset class="repeating_weapons">
<input type="text" style="width:150px" name="attr_weaponname" />
<input type="text" style="width:50px" name="attr_weaponammo" />
<input type="text" style="width:50px" name="attr_weaponrel" />
<input type="text" style="width:50px" name="attr_weaponrng" />
<input type="text" style="width:75px" name="attr_weapondmg" />
<input type="text" style="width:50px" name="attr_weaponaoe" />
<input type="text" style="width:50px" name="attr_weaponwt" />
<input type="text" style="width:270px" name="attr_weaponnote" data-i18n-placeholder="notes-u" placeholder="Notes" />
</fieldset>
</div>
<div class="sheet-2colrow">
<div class="sheet-col">
<div class="sheet-heading">Armor</div>
<div class="sheet-block">
<div class="sheet-top">
<span class="sheet-blocklabel" style="width: 250px;" data-i18n="name-u">Name</span>
<span class="sheet-blocklabel" style="width: 55px;" data-i18n="arm-u">ARM</span>
<span class="sheet-blocklabel" style="width: 20px;" data-i18n="wt-u">Wt</span>
</div>
<fieldset class="repeating_armor">
<input type="text" style="width:250px" name="attr_armorname" />
<input type="text" style="width:50px" name="attr_armorsoak" />
<input type="text" style="width:50px" name="attr_armorwt" />
<br />
<input type="text" style="margin-left:20px; width:335px" name="attr_armornote" data-i18n-placeholder="notes-u" placeholder="Notes" />
</fieldset>
</div>
<div class="sheet-heading">Mounts & Vehicles</div>
<div class="sheet-block">
<div class="sheet-top">
<span class="sheet-blocklabel" style="width: 140px;" data-i18n="name-u">Name</span>
<span class="sheet-blocklabel" style="width: 55px;" data-i18n="crew-u">Crew</span>
<span class="sheet-blocklabel" style="width: 30px;" data-i18n="agiabbr-u">AGI</span>
<span class="sheet-blocklabel" style="width: 62px;" data-i18n="move-u">Move</span>
<span class="sheet-blocklabel" style="width: 37px;" data-i18n="arm-u">ARM</span>
<span class="sheet-blocklabel" style="width: 20px;" data-i18n="health-u">Health</span>
</div>
<fieldset class="repeating_armor">
<input type="text" style="width:135px" name="attr_mntname" />
<input type="text" style="width:50px" name="attr_mntcrew" />
<input type="text" style="width:30px" name="attr_mntagi" />
<input type="text" style="width:60px" name="attr_mntmove" />
<input type="text" style="width:30px" name="attr_mntarm" />
<input type="text" style="width:35px" name="attr_mnthealth" />
<br />
<input type="text" style="margin-left:20px; width:335px" name="attr_mntnote" data-i18n-placeholder="notes-u" placeholder="Notes" />
</fieldset>
</div>
</div>
<div class="sheet-col">
<div class="sheet-heading">Equipment</div>
<div class="sheet-block">
<div class="sheet-top">
<span class="sheet-blocklabel" style="width: 180px;" data-i18n="name-u">Name</span>
<span class="sheet-blocklabel" style="width: 130px;" data-i18n="loc-u">Location</span>
<span class="sheet-blocklabel" style="width: 20px;" data-i18n="wt-u">Wt</span>
</div>
<fieldset class="repeating_equipment">
<input type="text" style="width:175px" name="attr_equipname" />
<input type="text" style="width:125px" name="attr_equiploc" />
<input type="text" style="width:50px" name="attr_equipwt" />
<br />
<input type="text" style="margin-left:20px; width:335px" name="attr_equipnote" data-i18n-placeholder="notes-u" placeholder="Notes" />
</fieldset>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="sheet-tab sheet-tab-features">
<input type="radio" name="attr_tab" value="features">
<span class="sheet-tab-label">Spells & Powers</span>
<div class="sheet-tab-content">
<div class="sheet-content">
<div class="sheet-heading">Spells & Psionics</div>
<div class="sheet-block">
<div class="sheet-top">
<span class="sheet-blocklabel" style="width: 155px;" data-i18n="name-u">Name</span>
<span class="sheet-blocklabel" style="width: 55px;" data-i18n="dif-u">DIF</span>
<span class="sheet-blocklabel" style="width: 55px;" data-i18n="cast-u">Casting Time</span>
<span class="sheet-blocklabel" style="width: 55px;" data-i18n="rng-u">Range</span>
<span class="sheet-blocklabel" style="width: 80px;" data-i18n="dur-u">Duration</span>
<span class="sheet-blocklabel" style="width: 350px;" data-i18n="notes-u">Notes</span>
</div>
<fieldset class="repeating_spells">
<input type="text" style="width:150px" name="attr_spellname" />
<input type="text" style="width:50px" name="attr_spelldif" />
<input type="text" style="width:50px" name="attr_casttime" />
<input type="text" style="width:50px" name="attr_spellrng" />
<input type="text" style="width:75px" name="attr_spellduration" />
<input type="text" style="width:375px" name="attr_spellnote" data-i18n-placeholder="notes-u" placeholder="Notes" />
</fieldset>
</div>
<div class="sheet-heading">Powers</div>
<div class="sheet-block">
<div class="sheet-top">
<span class="sheet-blocklabel" style="width: 155px;" data-i18n="name-u">Name</span>
<span class="sheet-blocklabel" style="width: 130px;" data-i18n="rng-u">Range</span>
<span class="sheet-blocklabel" style="width: 200px;" data-i18n="meffect-u">Description</span>
</div>
<fieldset class="repeating_spells">
<input type="text" style="width:150px" name="attr_powername" />
<input type="text" style="width:125px" name="attr_powerrng" />
<input type="text" style="width:475px" name="attr_majoreffect" />
</fieldset>
</div>
</div>
</div>
</div>
<div class="sheet-tab sheet-tab-features" style="display:none">
<input type="radio" name="attr_tab" value="">
<span class="sheet-tab-label"></span>
<div class="sheet-tab-content">
<div class="sheet-content">
Settings
</div>
</div>
</div>
<div class="sheet-tab sheet-tab-features" style="display:none">
<input type="radio" name="attr_tab" value="advanced">
<span class="sheet-tab-label">Advanced Settings</span>
<div class="sheet-tab-content">
<div class="sheet-content">
Settings
</div>
</div>
</div>
</div>
</div>
<rolltemplate class="sheet-rolltemplate-basic">
<div class="sheet-template-container">
<div class="sheet-template-header" data-i18n="sc-u">{{type}} Check</div>
<div class="sheet-template-row">{{name}}: {{roll}}
{{#rollWasCrit() roll}}
<span> + </span>{{explode}}
{{#rollWasCrit() explode}}
<span data-i18n="crit-u">Critical!</span>
{{/rollWasCrit() explode}}
{{/rollWasCrit() roll}}
</div>
</div>
</rolltemplate>
<rolltemplate class="sheet-rolltemplate-stat">
<div class="sheet-template-container">
<div class="sheet-template-header" data-i18n="statc-u">Stat Check</div>
<div class="sheet-template-row">
{{#rollTotal() check 36}}
Fumble {{name}}: {{check}}
{{/rollTotal() check 36}}
{{#rollTotal() check 1}}
Crit {{name}}: {{check}}
{{/rollTotal() check 1}}
{{#rollBetween() check 2 35}}
{{name}}: {{check}}
{{/rollBetween() check 2 35}}
</div>
</div>
</rolltemplate>
<script type="text/worker">
on("change:agi", function() {
getAttrs(["agi","xp_total","xp_sacrificed","move_mod","tough_xp_used","aware_xp_used","will_xp_used","agiskill_xp_used","toughskill_xp_used","awareskill_xp_used","willskill_xp_used"], function(values) {
agi = parseInt(values.agi,10)||0;
xp_total = parseInt(values.xp_total,10)||0;
xp_sacrificed = parseInt(values.xp_sacrificed,10)||0;
move_mod = parseInt(values.move_mod,10)||0;
tough_xp_used = parseInt(values.tough_xp_used,10)||0;
aware_xp_used = parseInt(values.aware_xp_used,10)||0;
will_xp_used = parseInt(values.will_xp_used,10)||0;
agiskill_xp_used = parseInt(values.agiskill_xp_used,10)||0;
toughskill_xp_used = parseInt(values.toughskill_xp_used,10)||0;
awareskill_xp_used = parseInt(values.awareskill_xp_used,10)||0;
willskill_xp_used = parseInt(values.willskill_xp_used,10)||0;
agi_xp_used = calc_XPUsed(agi);
xpUsed = agi_xp_used + tough_xp_used + aware_xp_used + will_xp_used + agiskill_xp_used + toughskill_xp_used + awareskill_xp_used + willskill_xp_used;
setAttrs({
move: 9 + agi_xp_used,
curmove: 9 + agi_xp_used + move_mod,
agi_xp_used: agi_xp_used,
xp_spent: xpUsed,
xp_reserve: xp_total - xpUsed - xp_sacrificed
});
});
});
on("change:tough", function() {
getAttrs(["tough","xp_total","xp_sacrificed","injury","agi_xp_used","aware_xp_used","will_xp_used","agiskill_xp_used","toughskill_xp_used","awareskill_xp_used","willskill_xp_used"], function(values) {
tough = parseInt(values.tough,10)||0;
xp_total = parseInt(values.xp_total,10)||0;
xp_sacrificed = parseInt(values.xp_sacrificed,10)||0;
injuries = parseInt(values.injury,10)||0;
agi_xp_used = parseInt(values.agi_xp_used,10)||0;
aware_xp_used = parseInt(values.aware_xp_used,10)||0;
will_xp_used = parseInt(values.will_xp_used,10)||0;
agiskill_xp_used = parseInt(values.agiskill_xp_used,10)||0;
toughskill_xp_used = parseInt(values.toughskill_xp_used,10)||0;
awareskill_xp_used = parseInt(values.awareskill_xp_used,10)||0;
willskill_xp_used = parseInt(values.willskill_xp_used,10)||0;
tough_xp_used = calc_XPUsed(tough);
xpUsed = agi_xp_used + tough_xp_used + aware_xp_used + will_xp_used + agiskill_xp_used + toughskill_xp_used + awareskill_xp_used + willskill_xp_used;
setAttrs({
health: 9 + tough_xp_used,
curhealth: 9 + tough_xp_used - injuries,
tough_xp_used: tough_xp_used,
xp_spent: xpUsed,
xp_reserve: xp_total - xpUsed - xp_sacrificed
});
});
});
on("change:aware", function() {
getAttrs(["aware","xp_total","xp_sacrificed","init_mod","tough_xp_used","agi_xp_used","will_xp_used","agiskill_xp_used","toughskill_xp_used","awareskill_xp_used","willskill_xp_used"], function(values) {
aware = parseInt(values.aware,10)||0;
xp_total = parseInt(values.xp_total,10)||0;
xp_sacrificed = parseInt(values.xp_sacrificed,10)||0;
init_mod = parseInt(values.init_mod,10)||0;
agi_xp_used = parseInt(values.agi_xp_used,10)||0;
tough_xp_used = parseInt(values.tough_xp_used,10)||0;
will_xp_used = parseInt(values.will_xp_used,10)||0;
agiskill_xp_used = parseInt(values.agiskill_xp_used,10)||0;
toughskill_xp_used = parseInt(values.toughskill_xp_used,10)||0;
awareskill_xp_used = parseInt(values.awareskill_xp_used,10)||0;
willskill_xp_used = parseInt(values.willskill_xp_used,10)||0;
aware_xp_used = calc_XPUsed(aware);
xpUsed = agi_xp_used + tough_xp_used + aware_xp_used + will_xp_used + agiskill_xp_used + toughskill_xp_used + awareskill_xp_used + willskill_xp_used;
setAttrs({
initiative: 9 + aware_xp_used,
curinit: 9 + aware_xp_used + init_mod,
aware_xp_used: aware_xp_used,
xp_spent: xpUsed,
xp_reserve: xp_total - xpUsed - xp_sacrificed
});
});
});
on("change:will", function() {
getAttrs(["will","xp_total","xp_sacrificed","spirit_mod","tough_xp_used","aware_xp_used","agi_xp_used","agiskill_xp_used","toughskill_xp_used","awareskill_xp_used","willskill_xp_used"], function(values) {
will = parseInt(values.will,10)||0;
xp_total = parseInt(values.xp_total,10)||0;
xp_sacrificed = parseInt(values.xp_sacrificed,10)||0;
spirit_mod = parseInt(values.spirit_mod,10)||0;
agi_xp_used = parseInt(values.agi_xp_used,10)||0;
tough_xp_used = parseInt(values.tough_xp_used,10)||0;
aware_xp_used = parseInt(values.aware_xp_used,10)||0;
agiskill_xp_used = parseInt(values.agiskill_xp_used,10)||0;
toughskill_xp_used = parseInt(values.toughskill_xp_used,10)||0;
awareskill_xp_used = parseInt(values.awareskill_xp_used,10)||0;
willskill_xp_used = parseInt(values.willskill_xp_used,10)||0;
will_xp_used = calc_XPUsed(will);
xpUsed = agi_xp_used + tough_xp_used + aware_xp_used + will_xp_used + agiskill_xp_used + toughskill_xp_used + awareskill_xp_used + willskill_xp_used;
setAttrs({
spirit: 9 + will_xp_used,
curspirit: 9 + will_xp_used + spirit_mod,
will_xp_used: will_xp_used,
xp_spent: xpUsed,
xp_reserve: xp_total - xpUsed - xp_sacrificed
});
});
});
on("change:xp_total", function() {
getAttrs(["xp_total","xp_spent","xp_sacrificed"], function(values) {
xp_total = parseInt(values.xp_total,10)||0;
xp_spent = parseInt(values.xp_spent,10)||0;
xp_sacrificed = parseInt(values.xp_sacrificed,10)||0;
setAttrs({
xp_reserve: xp_total - xp_spent - xp_sacrificed
});
});
});
on("change:xp_sacrificed", function() {
getAttrs(["xp_total","xp_spent","xp_sacrificed"], function(values) {
xp_total = parseInt(values.xp_total,10)||0;
xp_spent = parseInt(values.xp_spent,10)||0;
xp_sacrificed = parseInt(values.xp_sacrificed,10)||0;
setAttrs({
xp_reserve: xp_total - xp_spent - xp_sacrificed
});
});
});
on("change:injury", function() {
getAttrs(["health","injury"], function(values) {
health = parseInt(values.health,10)||0;
injuries = parseInt(values.injury,10)||0;
setAttrs({
curhealth: health - injuries
});
});
});
on("change:move_mod", function() {
getAttrs(["move","move_mod"], function(values) {
move = parseInt(values.move,10)||0;
move_mod = parseInt(values.move_mod,10)||0;
setAttrs({
curmove: move + move_mod
});
});
});
on("change:init_mod", function() {
getAttrs(["initiative","init_mod"], function(values) {
init = parseInt(values.initiative,10)||0;
init_mod = parseInt(values.init_mod,10)||0;
setAttrs({
curinit: init + init_mod
});
});
});
on("change:spirit_mod", function() {
getAttrs(["spirit","spirit_mod"], function(values) {
spirit = parseInt(values.spirit,10)||0;
spirit_mod = parseInt(values.spirit_mod,10)||0;
setAttrs({
curspirit: spirit + spirit_mod
});
});
});
on('change:repeating_agiskills remove:repeating_agiskills', () => {
repeatingXPSum("agiskill_xp_used","agiskills","agi_skill_rating", function() {
getAttrs(["xp_total","xp_sacrificed","agi_xp_used","tough_xp_used","aware_xp_used","will_xp_used","agiskill_xp_used","toughskill_xp_used","awareskill_xp_used","willskill_xp_used"], function(values) {
xp_total = parseInt(values.xp_total,10)||0;
xp_sacrificed = parseInt(values.xp_sacrificed,10)||0;
agi_xp_used = parseInt(values.agi_xp_used,10)||0;
tough_xp_used = parseInt(values.tough_xp_used,10)||0;
aware_xp_used = parseInt(values.aware_xp_used,10)||0;
will_xp_used = parseInt(values.will_xp_used,10)||0;
agiskill_xp_used = parseInt(values.agiskill_xp_used,10)||0;
toughskill_xp_used = parseInt(values.toughskill_xp_used,10)||0;
awareskill_xp_used = parseInt(values.awareskill_xp_used,10)||0;
willskill_xp_used = parseInt(values.willskill_xp_used,10)||0;
xpUsed = agi_xp_used + tough_xp_used + aware_xp_used + will_xp_used + agiskill_xp_used + toughskill_xp_used + awareskill_xp_used + willskill_xp_used;
setAttrs({
xp_spent: xpUsed,
xp_reserve: xp_total - xpUsed - xp_sacrificed
});
});
});
});
on('change:repeating_toughskills remove:repeating_toughskills', () => {
repeatingXPSum("toughskill_xp_used","toughskills","tough_skill_rating", function() {
getAttrs(["xp_total","xp_sacrificed","agi_xp_used","tough_xp_used","aware_xp_used","will_xp_used","agiskill_xp_used","toughskill_xp_used","awareskill_xp_used","willskill_xp_used"], function(values) {
xp_total = parseInt(values.xp_total,10)||0;
xp_sacrificed = parseInt(values.xp_sacrificed,10)||0;
agi_xp_used = parseInt(values.agi_xp_used,10)||0;
tough_xp_used = parseInt(values.tough_xp_used,10)||0;
aware_xp_used = parseInt(values.aware_xp_used,10)||0;
will_xp_used = parseInt(values.will_xp_used,10)||0;
agiskill_xp_used = parseInt(values.agiskill_xp_used,10)||0;
toughskill_xp_used = parseInt(values.toughskill_xp_used,10)||0;
awareskill_xp_used = parseInt(values.awareskill_xp_used,10)||0;
willskill_xp_used = parseInt(values.willskill_xp_used,10)||0;
xpUsed = agi_xp_used + tough_xp_used + aware_xp_used + will_xp_used + agiskill_xp_used + toughskill_xp_used + awareskill_xp_used + willskill_xp_used;
setAttrs({
xp_spent: xpUsed,
xp_reserve: xp_total - xpUsed - xp_sacrificed
});
});
});
});
on('change:repeating_awareskills remove:repeating_awareskills', () => {
repeatingXPSum("awareskill_xp_used","awareskills","aware_skill_rating", function() {
getAttrs(["xp_total","xp_sacrificed","agi_xp_used","tough_xp_used","aware_xp_used","will_xp_used","agiskill_xp_used","toughskill_xp_used","awareskill_xp_used","willskill_xp_used"], function(values) {
xp_total = parseInt(values.xp_total,10)||0;
xp_sacrificed = parseInt(values.xp_sacrificed,10)||0;
agi_xp_used = parseInt(values.agi_xp_used,10)||0;
tough_xp_used = parseInt(values.tough_xp_used,10)||0;
aware_xp_used = parseInt(values.aware_xp_used,10)||0;
will_xp_used = parseInt(values.will_xp_used,10)||0;
agiskill_xp_used = parseInt(values.agiskill_xp_used,10)||0;
toughskill_xp_used = parseInt(values.toughskill_xp_used,10)||0;
awareskill_xp_used = parseInt(values.awareskill_xp_used,10)||0;
willskill_xp_used = parseInt(values.willskill_xp_used,10)||0;
xpUsed = agi_xp_used + tough_xp_used + aware_xp_used + will_xp_used + agiskill_xp_used + toughskill_xp_used + awareskill_xp_used + willskill_xp_used;
setAttrs({
xp_spent: xpUsed,
xp_reserve: xp_total - xpUsed - xp_sacrificed
});
});
});
});
on('change:repeating_willskills remove:repeating_willskills', () => {
repeatingXPSum("willskill_xp_used","willskills","will_skill_rating", function() {
getAttrs(["xp_total","xp_sacrificed","agi_xp_used","tough_xp_used","aware_xp_used","will_xp_used","agiskill_xp_used","toughskill_xp_used","awareskill_xp_used","willskill_xp_used"], function(values) {
xp_total = parseInt(values.xp_total,10)||0;
xp_sacrificed = parseInt(values.xp_sacrificed,10)||0;
agi_xp_used = parseInt(values.agi_xp_used,10)||0;
tough_xp_used = parseInt(values.tough_xp_used,10)||0;
aware_xp_used = parseInt(values.aware_xp_used,10)||0;
will_xp_used = parseInt(values.will_xp_used,10)||0;
agiskill_xp_used = parseInt(values.agiskill_xp_used,10)||0;
toughskill_xp_used = parseInt(values.toughskill_xp_used,10)||0;
awareskill_xp_used = parseInt(values.awareskill_xp_used,10)||0;
willskill_xp_used = parseInt(values.willskill_xp_used,10)||0;
xpUsed = agi_xp_used + tough_xp_used + aware_xp_used + will_xp_used + agiskill_xp_used + toughskill_xp_used + awareskill_xp_used + willskill_xp_used;
setAttrs({
xp_spent: xpUsed,
xp_reserve: xp_total - xpUsed - xp_sacrificed
});
});
});
});
function calc_XPUsed(grade) {
total = 0;
if (grade >= 0) {
for (i = 1; i <= grade; i++) {total += i; }
} else {
total = grade;
}
return total;
}
/* ===== PARAMETERS ==========
destination = the name of the attribute that stores the total quantity
section = name of repeating fieldset, without the repeating_
fields = the name of the attribute field to be summed
can be a single attribute: 'weight'
or an array of attributes: ['weight','number','equipped']
multiplier (optional) = a multiplier to to entire fieldset total. For instance, if summing coins of weight 0.02, might want to multiply the final total by 0.02.
*/
const repeatingXPSum = (destination, section, fields, callback, multiplier = 1) => {
if (!Array.isArray(fields)) fields = [fields];
getSectionIDs(`repeating_${section}`, idArray => {
const attrArray = idArray.reduce( (m,id) => [...m, ...(fields.map(field => `repeating_${section}_${id}_${field}`))],[]);
getAttrs(attrArray, v => {
console.log("===== values of v: "+ JSON.stringify(v) +" =====");
// getValue: if not a number, returns 1 if it is 'on' (checkbox), otherwise returns 0..
const getValue = (section, id,field) => parseFloat(v[`repeating_${section}_${id}_${field}`], 10) || (v[`repeating_${section}_${id}_${field}`] === 'on' ? 1 : 0);
const sumTotal = idArray.reduce((total, id) => total + fields.reduce((subtotal,field) => subtotal * calc_XPUsed(getValue(section, id,field)),1),0);
setAttrs({[destination]: sumTotal * multiplier}, callback);
});
});
};
</script>