Files
roll20-character-sheets/Maximum Apocalypse/MaximumApocalypse.html
T
David Maitland 5983fe06b9 Fixed Charisma half label position.
Updated preview image, ReadMe & sheet.json with v3 (roll button)
changes.
2020-12-07 23:28:29 +00:00

1624 lines
110 KiB
HTML

<input type="hidden" name="attr_mod_query" value="?{Modifiers|None, 0|1 Advantage, 1|1 Disadvantage, -1|2 Advantages, 2|2 Disadvantage, -2|3 Advantages, 3|3 Disadvantage, -3}"/>
<input type="hidden" name="attr_mod_bool_one_if_adv" value="({[[{@{mod_query}, 0}kh1]], 1}kl1)"/>
<input type="hidden" name="attr_mod_bool_one_if_dis" value="([[{[[{@{mod_query}, 0}kl1]], -1}kh1]]*-1)"/>
<input type="hidden" name="attr_mod_bool_one_if_nomod" value="(1-@{mod_bool_one_if_adv}+-@{mod_bool_one_if_dis})"/>
<input type="hidden" name="attr_roll_perc_adv" value="(([[@{mod_bool_one_if_adv}+1*@{mod_bool_one_if_adv}]]d10kl1cs>0cf<0-[[1*@{mod_bool_one_if_adv}]])*10)"/>
<input type="hidden" name="attr_roll_perc_dis" value="(([[@{mod_bool_one_if_dis}+1*@{mod_bool_one_if_dis}]]d10kh1cs>0cf<0-[[1*@{mod_bool_one_if_dis}]])*10)"/>
<input type="hidden" name="attr_roll_perc_nomod" value="(([[1*@{mod_bool_one_if_nomod}]]d10cs>0cf<0-[[1*@{mod_bool_one_if_nomod}]])*10)"/>
<input type="hidden" name="attr_roll_perc" value="@{roll_perc_adv}+@{roll_perc_dis}+@{roll_perc_nomod}+(1d10cs>0cf<0)"/>
<input type="hidden" name="attr_roll_thresh_mod" value="((({@{mod_query}, 1}kh1-1)*5)+@{threshold_modifier})"/>
<div class="main">
<div class="character section">
<div class="character-name-input data-entry"><input name="attr_character_name" type="text"/></div>
<div class="character-name-label"><label data-i18n="character_name">Character Name.</label></div>
<div class="logo">
<img height="500px" width="500px" src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/Maximum%20Apocalypse/ma-logo.png" alt="Maxiumum Apocalypse"/>
</div>
<div class="player-name-input data-entry"><input name="attr_player_name" type="text"/></div>
<div class="player-name-label"><label data-i18n="player_name">Player Name.</label></div>
<div class="archetype-primary-input data-entry">
<select name="attr_archetype_primary">
<option value="" selected></option>
<option data-i18n="firefighter" value="firefighter">Firefighter.</option>
<option data-i18n="gunslinger" value="gunslinger">Gunslinger.</option>
<option data-i18n="hunter" value="hunter">Hunter.</option>
<option data-i18n="mechanic" value="mechanic">Mechanic.</option>
<option data-i18n="priest" value="priest">Priest.</option>
<option data-i18n="ronin" value="ronin">Ronin.</option>
<option data-i18n="scientist" value="scientist">Scientist.</option>
<option data-i18n="surgeon" value="surgeon">Surgeon.</option>
<option data-i18n="thief" value="thief">Thief.</option>
<option data-i18n="veteran" value="veteran">Veteran.</option>
</select>
</div>
<div class="archetype-primary-label"><label data-i18n="primary_archetype">Primary Archetype.</label></div>
<div class="archetype-secondary-input data-entry">
<select name="attr_archetype_secondary">
<option value="" selected></option>
<option data-i18n="firefighter" value="firefighter">Firefighter.</option>
<option data-i18n="gunslinger" value="gunslinger">Gunslinger.</option>
<option data-i18n="hunter" value="hunter">Hunter.</option>
<option data-i18n="mechanic" value="mechanic">Mechanic.</option>
<option data-i18n="priest" value="priest">Priest.</option>
<option data-i18n="ronin" value="ronin">Ronin.</option>
<option data-i18n="scientist" value="scientist">Scientist.</option>
<option data-i18n="surgeon" value="surgeon">Surgeon.</option>
<option data-i18n="thief" value="thief">Thief.</option>
<option data-i18n="veteran" value="veteran">Veteran.</option>
</select>
</div>
<div class="archetype-secondary-label"><label data-i18n="secondary_archetype">Secondary Archetype.</label></div>
<div class="apocalypse-input data-entry">
<select name="attr_apocalypse">
<option value="" selected></option>
<option data-i18n="alien_invasion" value="aliens">Alien Invasion.</option>
<option data-i18n="food_riots" value="food_riots">Food Riots.</option>
<option data-i18n="kaiju_attack" value="kaiju">Kaiju Attack.</option>
<option data-i18n="nuclear_holocaust" value="nuclear">Nuclear Holocaust.</option>
<option data-i18n="peak_oil_collapse" value="oil-collapse">Peak Oil Collapse.</option>
<option data-i18n="robot_upraising" value="robots">Robot Uprising.</option>
<option data-i18n="seismic_cataclysm" value="seismic">Seismic Cataclysm.</option>
<option data-i18n="supernatural_horrors" value="horrors">Supernatural Horrors.</option>
<option data-i18n="the_rapture" value="rapture">The Rapture.</option>
<option data-i18n="time_paradox" value="time_paradox">Time Paradox.</option>
<option data-i18n="zombie_apocalypse" value="zombies">Zombie Apocalypse.</option>
</select>
</div>
<div class="apocalypse-label"><label data-i18n="personal_apocalypse">Personal Apocalypse.</label></div>
<div class="age-input data-entry">
<select name="attr_age">
<option value="" selected></option>
<option data-i18n="child_0-15" value="child">Child (0-15).</option>
<option data-i18n="youth_16-29" value="youth">Youth (16-29).</option>
<option data-i18n="middle_30-45" value="Mmddle">Middle (30-45).</option>
<option data-i18n="mature_46-59" value="mature">Mature (46-59).</option>
<option data-i18n="geriatric_60+" value="geriatric">Geriatric (60+).</option>
</select>
</div>
<div class="age-label"><label data-i18n="age">Age.</label></div>
</div>
<div class="stats-grid">
<div class="stat str">
<div class="stat-labels str-labels">
<div class="banner">
<button value="&{template:maxapoc} {{subtitle=^{strength}}} {{firstdegree1=[[@{str_thresh}+@{roll_thresh_mod}+1]]}} {{firstdegree=[[@{str_thresh}+@{roll_thresh_mod}]]}} {{seconddegree1=[[floor((@{str_thresh}+@{roll_thresh_mod})/2)+1]]}} {{seconddegree=[[floor((@{str_thresh}+@{roll_thresh_mod})/2)]]}} {{thirddegree1=[[floor((@{str_thresh}+@{roll_thresh_mod})/4)+1]]}} {{thirddegree=[[floor((@{str_thresh}+@{roll_thresh_mod})/4)]]}} {{profroll=[[@{roll_perc}]]}} {{mod=[[@{mod_query}]]}} {{absmod=[[abs(@{mod_query})]]}} {{title=@{character_name}}}" type="roll" class="blank-roll-button stat-roll">
<span data-i18n="strength">Strength.</span>
</button>
</div>
<div class="code dark"><span class="code">(STR)</span></div>
</div>
<div class="str-input"><input class="stat" type="number" name="attr_str"/></div>
<div class="half str-h"><input class="stat-half" type="number" name="attr_str_half" readonly/></div>
<div class="half str-h-label">1/2&nbsp;&nbsp;&nbsp;</div>
<div class="quarter str-q"><input class="stat-quarter" type="number" name="attr_str_quarter" readonly/></div>
<div class="quarter str-q-label">&nbsp;&nbsp;&nbsp;1/4</div>
<input type="hidden" name="attr_str_temp_check" class="stat-temp-check"/>
<div class="str-temp stat-temp"><input class="stat-quarter" type="number" name="attr_str_temp" readonly/></div>
<input type="hidden" name="attr_str_thresh"/>
</div>
<div class="stat for">
<div class="stat-labels for-labels">
<div class="banner">
<button value="&{template:maxapoc} {{subtitle=^{fortitude}}} {{firstdegree1=[[@{for_thresh}+@{roll_thresh_mod}+1]]}} {{firstdegree=[[@{for_thresh}+@{roll_thresh_mod}]]}} {{seconddegree1=[[floor((@{for_thresh}+@{roll_thresh_mod})/2)+1]]}} {{seconddegree=[[floor((@{for_thresh}+@{roll_thresh_mod})/2)]]}} {{thirddegree1=[[floor((@{for_thresh}+@{roll_thresh_mod})/4)+1]]}} {{thirddegree=[[floor((@{for_thresh}+@{roll_thresh_mod})/4)]]}} {{profroll=[[@{roll_perc}]]}} {{mod=[[@{mod_query}]]}} {{absmod=[[abs(@{mod_query})]]}} {{title=@{character_name}}}" type="roll" class="blank-roll-button stat-roll">
<span data-i18n="fortitude">Fortitude.</span>
</button>
</div>
<div class="code dark"><span class="code">(FOR)</span></div>
</div>
<div class="for-input"><input class="stat" type="number" name="attr_for"/></div>
<div class="half for-h"><input class="stat-half" type="number" name="attr_for_half" readonly/></div>
<div class="half for-h-label">1/2&nbsp;&nbsp;&nbsp;</div>
<div class="quarter for-q"><input class="stat-quarter" type="number" name="attr_for_quarter" readonly/></div>
<div class="quarter for-q-label">&nbsp;&nbsp;&nbsp;1/4</div>
<input type="hidden" name="attr_for_temp_check" class="stat-temp-check"/>
<div class="for-temp stat-temp"><input class="stat-quarter" type="number" name="attr_for_temp" readonly/></div>
<input type="hidden" name="attr_for_thresh"/>
</div>
<div class="stat agi">
<div class="stat-labels agi-labels">
<div class="banner">
<button value="&{template:maxapoc} {{subtitle=^{agility}}} {{firstdegree1=[[@{agi_thresh}+@{roll_thresh_mod}+1]]}} {{firstdegree=[[@{agi_thresh}+@{roll_thresh_mod}]]}} {{seconddegree1=[[floor((@{agi_thresh}+@{roll_thresh_mod})/2)+1]]}} {{seconddegree=[[floor((@{agi_thresh}+@{roll_thresh_mod})/2)]]}} {{thirddegree1=[[floor((@{agi_thresh}+@{roll_thresh_mod})/4)+1]]}} {{thirddegree=[[floor((@{agi_thresh}+@{roll_thresh_mod})/4)]]}} {{profroll=[[@{roll_perc}]]}} {{mod=[[@{mod_query}]]}} {{absmod=[[abs(@{mod_query})]]}} {{title=@{character_name}}}" type="roll" class="blank-roll-button stat-roll">
<span data-i18n="agility">Agility.</span>
</button>
</div>
<div class="code dark"><span class="code">(AGI)</span></div>
</div>
<div class="agi-input"><input class="stat" type="number" name="attr_agi"/></div>
<div class="half agi-h"><input class="stat-half" type="number" name="attr_agi_half" readonly/></div>
<div class="half agi-h-label">1/2&nbsp;&nbsp;&nbsp;</div>
<div class="quarter agi-q"><input class="stat-quarter" type="number" name="attr_agi_quarter" readonly/></div>
<div class="quarter agi-q-label">&nbsp;&nbsp;&nbsp;1/4</div>
<input type="hidden" name="attr_agi_temp_check" class="stat-temp-check"/>
<div class="agi-temp stat-temp"><input class="stat-quarter" type="number" name="attr_agi_temp" readonly/></div>
<input type="hidden" name="attr_agi_thresh"/>
</div>
<div class="stat int">
<div class="stat-labels int-labels">
<div class="banner">
<button value="&{template:maxapoc} {{subtitle=^{intelligence}}} {{firstdegree1=[[@{int_thresh}+@{roll_thresh_mod}+1]]}} {{firstdegree=[[@{int_thresh}+@{roll_thresh_mod}]]}} {{seconddegree1=[[floor((@{int_thresh}+@{roll_thresh_mod})/2)+1]]}} {{seconddegree=[[floor((@{int_thresh}+@{roll_thresh_mod})/2)]]}} {{thirddegree1=[[floor((@{int_thresh}+@{roll_thresh_mod})/4)+1]]}} {{thirddegree=[[floor((@{int_thresh}+@{roll_thresh_mod})/4)]]}} {{profroll=[[@{roll_perc}]]}} {{mod=[[@{mod_query}]]}} {{absmod=[[abs(@{mod_query})]]}} {{title=@{character_name}}}" type="roll" class="blank-roll-button stat-roll">
<span data-i18n="intelligence">Intelligence.</span>
</button>
</div>
<div class="code dark"><span class="code">(INT)</span></div>
</div>
<div class="int-input"><input class="stat" type="number" name="attr_int"/></div>
<div class="half int-h"><input class="stat-half" type="number" name="attr_int_half" readonly/></div>
<div class="half int-h-label">1/2&nbsp;&nbsp;&nbsp;</div>
<div class="quarter int-q"><input class="stat-quarter" type="number" name="attr_int_quarter" readonly/></div>
<div class="quarter int-q-label">&nbsp;&nbsp;&nbsp;1/4</div>
<input type="hidden" name="attr_int_temp_check" class="stat-temp-check"/>
<div class="int-temp stat-temp"><input class="stat-quarter" type="number" name="attr_int_temp" readonly/></div>
<input type="hidden" name="attr_int_thresh"/>
</div>
<div class="stat ins">
<div class="stat-labels ins-labels">
<div class="banner">
<button value="&{template:maxapoc} {{subtitle=^{instinct}}} {{firstdegree1=[[@{ins_thresh}+@{roll_thresh_mod}+1]]}} {{firstdegree=[[@{ins_thresh}+@{roll_thresh_mod}]]}} {{seconddegree1=[[floor((@{ins_thresh}+@{roll_thresh_mod})/2)+1]]}} {{seconddegree=[[floor((@{ins_thresh}+@{roll_thresh_mod})/2)]]}} {{thirddegree1=[[floor((@{ins_thresh}+@{roll_thresh_mod})/4)+1]]}} {{thirddegree=[[floor((@{ins_thresh}+@{roll_thresh_mod})/4)]]}} {{profroll=[[@{roll_perc}]]}} {{mod=[[@{mod_query}]]}} {{absmod=[[abs(@{mod_query})]]}} {{title=@{character_name}}}" type="roll" class="blank-roll-button stat-roll">
<span data-i18n="instinct">Instinct.</span>
</button>
</div>
<div class="code dark"><span class="code">(INS)</span></div>
</div>
<div class="ins-input"><input class="stat" type="number" name="attr_ins"/></div>
<div class="half ins-h"><input class="stat-half" type="number" name="attr_ins_half" readonly/></div>
<div class="half ins-h-label">1/2&nbsp;&nbsp;&nbsp;</div>
<div class="quarter ins-q"><input class="stat-quarter" type="number" name="attr_ins_quarter" readonly/></div>
<div class="quarter ins-q-label">&nbsp;&nbsp;&nbsp;1/4</div>
<input type="hidden" name="attr_ins_temp_check" class="stat-temp-check"/>
<div class="ins-temp stat-temp"><input class="stat-quarter" type="number" name="attr_ins_temp" readonly/></div>
<input type="hidden" name="attr_ins_thresh"/>
</div>
<div class="stat cha">
<div class="stat-labels cha-labels">
<div class="banner">
<button value="&{template:maxapoc} {{subtitle=^{charisma}}} {{firstdegree1=[[@{cha_thresh}+@{roll_thresh_mod}+1]]}} {{firstdegree=[[@{cha_thresh}+@{roll_thresh_mod}]]}} {{seconddegree1=[[floor((@{cha_thresh}+@{roll_thresh_mod})/2)+1]]}} {{seconddegree=[[floor((@{cha_thresh}+@{roll_thresh_mod})/2)]]}} {{thirddegree1=[[floor((@{cha_thresh}+@{roll_thresh_mod})/4)+1]]}} {{thirddegree=[[floor((@{cha_thresh}+@{roll_thresh_mod})/4)]]}} {{profroll=[[@{roll_perc}]]}} {{mod=[[@{mod_query}]]}} {{absmod=[[abs(@{mod_query})]]}} {{title=@{character_name}}}" type="roll" class="blank-roll-button stat-roll">
<span data-i18n="charisma">Charisma.</span>
</button>
</div>
<div class="code dark"><span class="code">(CHA)</span></div>
</div>
<div class="cha-input"><input class="stat" type="number" name="attr_cha"/></div>
<div class="half cha-h"><input class="stat-half" type="number" name="attr_cha_half" readonly/></div>
<div class="half cha-h-label">1/2&nbsp;&nbsp;&nbsp;</div>
<div class="quarter cha-q"><input class="stat-quarter" type="number" name="attr_cha_quarter" readonly/></div>
<div class="quarter cha-q-label">&nbsp;&nbsp;&nbsp;1/4</div>
<input type="hidden" name="attr_cha_temp_check" class="stat-temp-check"/>
<div class="cha-temp stat-temp"><input class="stat-quarter" type="number" name="attr_cha_temp" readonly/></div>
<input type="hidden" name="attr_cha_thresh"/>
</div>
<div class="stat fs">
<div class="stat-labels fs-labels">
<div class="banner">
<button value="&{template:maxapoc} {{subtitle=^{fighting_skill}}} {{firstdegree1=[[@{fs_thresh}+@{roll_thresh_mod}+1]]}} {{firstdegree=[[@{fs_thresh}+@{roll_thresh_mod}]]}} {{seconddegree1=[[floor((@{fs_thresh}+@{roll_thresh_mod})/2)+1]]}} {{seconddegree=[[floor((@{fs_thresh}+@{roll_thresh_mod})/2)]]}} {{thirddegree1=[[floor((@{fs_thresh}+@{roll_thresh_mod})/4)+1]]}} {{thirddegree=[[floor((@{fs_thresh}+@{roll_thresh_mod})/4)]]}} {{profroll=[[@{roll_perc}]]}} {{mod=[[@{mod_query}]]}} {{absmod=[[abs(@{mod_query})]]}} {{title=@{character_name}}}" type="roll" class="blank-roll-button stat-roll">
<span data-i18n="fighting_skill">Fighting Skill.</span>
</button>
</div>
<div class="code dark"><span class="code">(FS)</span></div>
</div>
<div class="fs-input"><input class="stat" type="number" name="attr_fs"/></div>
<div class="half fs-h"><input class="stat-half" type="number" name="attr_fs_half" readonly/></div>
<div class="half fs-h-label">1/2&nbsp;&nbsp;&nbsp;</div>
<div class="quarter fs-q"><input class="stat-quarter" type="number" name="attr_fs_quarter" readonly/></div>
<div class="quarter fs-q-label">&nbsp;&nbsp;&nbsp;1/4</div>
<input type="hidden" name="attr_fs_temp_check" class="stat-temp-check"/>
<div class="fs-temp stat-temp"><input class="stat-quarter" type="number" name="attr_fs_temp" readonly/></div>
<input type="hidden" name="attr_fs_thresh"/>
</div>
<div class="stat bs">
<div class="stat-labels bs-labels">
<div class="banner">
<button value="&{template:maxapoc} {{subtitle=^{ballistic_skill}}} {{firstdegree1=[[@{bs_thresh}+@{roll_thresh_mod}+1]]}} {{firstdegree=[[@{bs_thresh}+@{roll_thresh_mod}]]}} {{seconddegree1=[[floor((@{bs_thresh}+@{roll_thresh_mod})/2)+1]]}} {{seconddegree=[[floor((@{bs_thresh}+@{roll_thresh_mod})/2)]]}} {{thirddegree1=[[floor((@{bs_thresh}+@{roll_thresh_mod})/4)+1]]}} {{thirddegree=[[floor((@{bs_thresh}+@{roll_thresh_mod})/4)]]}} {{profroll=[[@{roll_perc}]]}} {{mod=[[@{mod_query}]]}} {{absmod=[[abs(@{mod_query})]]}} {{title=@{character_name}}}" type="roll" class="blank-roll-button stat-roll">
<span data-i18n="ballistic_skill">Ballistic Skill.</span>
</button>
</div>
<div class="code dark"><span class="code">(BS)</span></div>
</div>
<div class="bs-input"><input class="stat" type="number" name="attr_bs"/></div>
<div class="half bs-h"><input class="stat-half" type="number" name="attr_bs_half" readonly/></div>
<div class="half bs-h-label">1/2&nbsp;&nbsp;&nbsp;</div>
<div class="quarter bs-q"><input class="stat-quarter" type="number" name="attr_bs_quarter" readonly/></div>
<div class="quarter bs-q-label">&nbsp;&nbsp;&nbsp;1/4</div>
<input type="hidden" name="attr_fs_temp_check" class="stat-temp-check"/>
<div class="bs-temp stat-temp"><input class="stat-quarter" type="number" name="attr_bs_temp" readonly/></div>
<input type="hidden" name="attr_bs_thresh"/>
</div>
</div>
<div class="skills section flex-col">
<div class="skill-banner banner"><span data-i18n="skills">Skills.</span></div>
<div class="skill-str code">(STR)</div>
<div class="skill-for code">(FOR)</div>
<div class="skill-agi code">(AGI)</div>
<div class="skill-int code">(INT)</div>
<div class="skill-ins code">(INS)</div>
<div class="skill-cha code">(CHA)</div>
<div class="skill-fs code">(FS)</div>
<div class="skill-bs code">(BS)</div>
<!-- SKILLS ROW 1 -->
<div class="athletics-prof prof">
<select class="prof" name="attr_athletics_prof">
<option value="-">-</option>
<option value="p">P</option>
<option value="s">S</option>
<option value="t">T</option>
<option value="m">M</option>
</select>
<input type="hidden" name="attr_athletics"/>
<input type="hidden" name="attr_athletics_prof_desc"/>
</div>
<div class="athletics-label">
<button value="&{template:maxapoc} {{subtitle=^{athletics}}} {{profdesc=@{athletics_prof_desc}}} {{firstdegree1=[[@{athletics}+@{roll_thresh_mod}+1]]}} {{firstdegree=[[@{athletics}+@{roll_thresh_mod}]]}} {{seconddegree1=[[floor((@{athletics}+@{roll_thresh_mod})/2)+1]]}} {{seconddegree=[[floor((@{athletics}+@{roll_thresh_mod})/2)]]}} {{thirddegree1=[[floor((@{athletics}+@{roll_thresh_mod})/4)+1]]}} {{thirddegree=[[floor((@{athletics}+@{roll_thresh_mod})/4)]]}} {{profroll=[[@{roll_perc}]]}} {{mod=[[@{mod_query}]]}} {{absmod=[[abs(@{mod_query})]]}} {{title=@{character_name}}}" type="roll" class="skill-label blank-roll-button">
<span data-i18n="athletics">Athletics.</span>
</button>
</div>
<div class="archery-prof prof">
<select class="prof" name="attr_archery_prof">
<option value="-">-</option>
<option value="p">P</option>
<option value="s">S</option>
<option value="t">T</option>
<option value="m">M</option>
</select>
<input type="hidden" name="attr_archery"/>
<input type="hidden" name="attr_archery_prof_desc"/>
</div>
<div class="archery-label">
<button value="&{template:maxapoc} {{subtitle=^{archery}}} {{profdesc=@{archery_prof_desc}}} {{firstdegree1=[[@{archery}+@{roll_thresh_mod}+1]]}} {{firstdegree=[[@{archery}+@{roll_thresh_mod}]]}} {{seconddegree1=[[floor((@{archery}+@{roll_thresh_mod})/2)+1]]}} {{seconddegree=[[floor((@{archery}+@{roll_thresh_mod})/2)]]}} {{thirddegree1=[[floor((@{archery}+@{roll_thresh_mod})/4)+1]]}} {{thirddegree=[[floor((@{archery}+@{roll_thresh_mod})/4)]]}} {{profroll=[[@{roll_perc}]]}} {{mod=[[@{mod_query}]]}} {{absmod=[[abs(@{mod_query})]]}} {{title=@{character_name}}}" type="roll" class="skill-label blank-roll-button">
<span data-i18n="archery">Archery.</span>
</button>
</div>
<div class="academics-prof prof">
<select class="prof" name="attr_academics_prof">
<option value="-">-</option>
<option value="p">P</option>
<option value="s">S</option>
<option value="t">T</option>
<option value="m">M</option>
</select>
<input type="hidden" name="attr_academics"/>
<input type="hidden" name="attr_academics_prof_desc"/>
</div>
<div class="academics-label">
<button value="&{template:maxapoc} {{subtitle=^{academics}}} {{profdesc=@{academics_prof_desc}}} {{firstdegree1=[[@{academics}+@{roll_thresh_mod}+1]]}} {{firstdegree=[[@{academics}+@{roll_thresh_mod}]]}} {{seconddegree1=[[floor((@{academics}+@{roll_thresh_mod})/2)+1]]}} {{seconddegree=[[floor((@{academics}+@{roll_thresh_mod})/2)]]}} {{thirddegree1=[[floor((@{academics}+@{roll_thresh_mod})/4)+1]]}} {{thirddegree=[[floor((@{academics}+@{roll_thresh_mod})/4)]]}} {{profroll=[[@{roll_perc}]]}} {{mod=[[@{mod_query}]]}} {{absmod=[[abs(@{mod_query})]]}} {{title=@{character_name}}}" type="roll" class="skill-label blank-roll-button">
<span data-i18n="academics">Academics.</span>
</button>
</div>
<div class="crafting-prof prof">
<select class="prof" name="attr_crafting_prof">
<option value="-">-</option>
<option value="p">P</option>
<option value="s">S</option>
<option value="t">T</option>
<option value="m">M</option>
</select>
<input type="hidden" name="attr_crafting"/>
<input type="hidden" name="attr_crafting_prof_desc"/>
</div>
<div class="crafting-label">
<button value="&{template:maxapoc} {{subtitle=^{crafting}}} {{profdesc=@{crafting_prof_desc}}} {{firstdegree1=[[@{crafting}+@{roll_thresh_mod}+1]]}} {{firstdegree=[[@{crafting}+@{roll_thresh_mod}]]}} {{seconddegree1=[[floor((@{crafting}+@{roll_thresh_mod})/2)+1]]}} {{seconddegree=[[floor((@{crafting}+@{roll_thresh_mod})/2)]]}} {{thirddegree1=[[floor((@{crafting}+@{roll_thresh_mod})/4)+1]]}} {{thirddegree=[[floor((@{crafting}+@{roll_thresh_mod})/4)]]}} {{profroll=[[@{roll_perc}]]}} {{mod=[[@{mod_query}]]}} {{absmod=[[abs(@{mod_query})]]}} {{title=@{character_name}}}" type="roll" class="skill-label blank-roll-button">
<span data-i18n="crafting">Crafting.</span>
</button>
</div>
<div class="animalken-prof prof">
<select class="prof" name="attr_animalken_prof">
<option value="-">-</option>
<option value="p">P</option>
<option value="s">S</option>
<option value="t">T</option>
<option value="m">M</option>
</select>
<input type="hidden" name="attr_animalken"/>
<input type="hidden" name="attr_animalken_prof_desc"/>
</div>
<div class="animalken-label">
<button value="&{template:maxapoc} {{subtitle=^{animal_ken}}} {{profdesc=@{animalken_prof_desc}}} {{firstdegree1=[[@{animalken}+@{roll_thresh_mod}+1]]}} {{firstdegree=[[@{animalken}+@{roll_thresh_mod}]]}} {{seconddegree1=[[floor((@{animalken}+@{roll_thresh_mod})/2)+1]]}} {{seconddegree=[[floor((@{animalken}+@{roll_thresh_mod})/2)]]}} {{thirddegree1=[[floor((@{animalken}+@{roll_thresh_mod})/4)+1]]}} {{thirddegree=[[floor((@{animalken}+@{roll_thresh_mod})/4)]]}} {{profroll=[[@{roll_perc}]]}} {{mod=[[@{mod_query}]]}} {{absmod=[[abs(@{mod_query})]]}} {{title=@{character_name}}}" type="roll" class="skill-label blank-roll-button">
<span data-i18n="animal_ken">Animal Ken.</span>
</button>
</div>
<div class="blades-prof prof">
<select class="prof" name="attr_blades_prof">
<option value="-">-</option>
<option value="p">P</option>
<option value="s">S</option>
<option value="t">T</option>
<option value="m">M</option>
</select>
<input type="hidden" name="attr_blades"/>
<input type="hidden" name="attr_blades_prof_desc"/>
</div>
<div class="blades-label">
<button value="&{template:maxapoc} {{subtitle=^{blades}}} {{profdesc=@{blades_prof_desc}}} {{firstdegree1=[[@{blades}+@{roll_thresh_mod}+1]]}} {{firstdegree=[[@{blades}+@{roll_thresh_mod}]]}} {{seconddegree1=[[floor((@{blades}+@{roll_thresh_mod})/2)+1]]}} {{seconddegree=[[floor((@{blades}+@{roll_thresh_mod})/2)]]}} {{thirddegree1=[[floor((@{blades}+@{roll_thresh_mod})/4)+1]]}} {{thirddegree=[[floor((@{blades}+@{roll_thresh_mod})/4)]]}} {{profroll=[[@{roll_perc}]]}} {{mod=[[@{mod_query}]]}} {{absmod=[[abs(@{mod_query})]]}} {{title=@{character_name}}}" type="roll" class="skill-label blank-roll-button">
<span data-i18n="blades">Blades.</span>
</button>
</div>
<div class="firearms-prof prof">
<select class="prof" name="attr_firearms_prof">
<option value="-">-</option>
<option value="p">P</option>
<option value="s">S</option>
<option value="t">T</option>
<option value="m">M</option>
</select>
<input type="hidden" name="attr_firearms"/>
<input type="hidden" name="attr_firearms_prof_desc"/>
</div>
<div class="firearms-label">
<button value="&{template:maxapoc} {{subtitle=^{firearms}}} {{profdesc=@{firearms_prof_desc}}} {{firstdegree1=[[@{firearms}+@{roll_thresh_mod}+1]]}} {{firstdegree=[[@{firearms}+@{roll_thresh_mod}]]}} {{seconddegree1=[[floor((@{firearms}+@{roll_thresh_mod})/2)+1]]}} {{seconddegree=[[floor((@{firearms}+@{roll_thresh_mod})/2)]]}} {{thirddegree1=[[floor((@{firearms}+@{roll_thresh_mod})/4)+1]]}} {{thirddegree=[[floor((@{firearms}+@{roll_thresh_mod})/4)]]}} {{profroll=[[@{roll_perc}]]}} {{mod=[[@{mod_query}]]}} {{absmod=[[abs(@{mod_query})]]}} {{title=@{character_name}}}" type="roll" class="skill-label blank-roll-button">
<span data-i18n="firearms">Firearms.</span>
</button>
</div>
<!-- SKILLS ROW 2 -->
<div class="lockpick-prof prof">
<select class="prof" name="attr_lockpick_prof">
<option value="-">-</option>
<option value="p">P</option>
<option value="s">S</option>
<option value="t">T</option>
<option value="m">M</option>
</select>
<input type="hidden" name="attr_lockpick"/>
<input type="hidden" name="attr_lockpick_prof_desc"/>
</div>
<div class="lockpick-label">
<button value="&{template:maxapoc} {{subtitle=^{lockpick}}} {{profdesc=@{lockpick_prof_desc}}} {{firstdegree1=[[@{lockpick}+@{roll_thresh_mod}+1]]}} {{firstdegree=[[@{lockpick}+@{roll_thresh_mod}]]}} {{seconddegree1=[[floor((@{lockpick}+@{roll_thresh_mod})/2)+1]]}} {{seconddegree=[[floor((@{lockpick}+@{roll_thresh_mod})/2)]]}} {{thirddegree1=[[floor((@{lockpick}+@{roll_thresh_mod})/4)+1]]}} {{thirddegree=[[floor((@{lockpick}+@{roll_thresh_mod})/4)]]}} {{profroll=[[@{roll_perc}]]}} {{mod=[[@{mod_query}]]}} {{absmod=[[abs(@{mod_query})]]}} {{title=@{character_name}}}" type="roll" class="skill-label blank-roll-button">
<span data-i18n="lockpick">Lockpick.</span>
</button>
</div>
<div class="mechanics-prof prof">
<select class="prof" name="attr_mechanics_prof">
<option value="-">-</option>
<option value="p">P</option>
<option value="s">S</option>
<option value="t">T</option>
<option value="m">M</option>
</select>
<input type="hidden" name="attr_mechanics"/>
<input type="hidden" name="attr_mechanics_prof_desc"/>
</div>
<div class="mechanics-label">
<button value="&{template:maxapoc} {{subtitle=^{mechanics}}} {{profdesc=@{mechanics_prof_desc}}} {{firstdegree1=[[@{mechanics}+@{roll_thresh_mod}+1]]}} {{firstdegree=[[@{mechanics}+@{roll_thresh_mod}]]}} {{seconddegree1=[[floor((@{mechanics}+@{roll_thresh_mod})/2)+1]]}} {{seconddegree=[[floor((@{mechanics}+@{roll_thresh_mod})/2)]]}} {{thirddegree1=[[floor((@{mechanics}+@{roll_thresh_mod})/4)+1]]}} {{thirddegree=[[floor((@{mechanics}+@{roll_thresh_mod})/4)]]}} {{profroll=[[@{roll_perc}]]}} {{mod=[[@{mod_query}]]}} {{absmod=[[abs(@{mod_query})]]}} {{title=@{character_name}}}" type="roll" class="skill-label blank-roll-button">
<span data-i18n="mechanics">Mechanics.</span>
</button>
</div>
<div class="drive-prof prof">
<select class="prof" name="attr_drive_prof">
<option value="-">-</option>
<option value="p">P</option>
<option value="s">S</option>
<option value="t">T</option>
<option value="m">M</option>
</select>
<input type="hidden" name="attr_drive"/>
<input type="hidden" name="attr_drive_prof_desc"/>
</div>
<div class="drive-label">
<button value="&{template:maxapoc} {{subtitle=^{drive}}} {{profdesc=@{drive_prof_desc}}} {{firstdegree1=[[@{drive}+@{roll_thresh_mod}+1]]}} {{firstdegree=[[@{drive}+@{roll_thresh_mod}]]}} {{seconddegree1=[[floor((@{drive}+@{roll_thresh_mod})/2)+1]]}} {{seconddegree=[[floor((@{drive}+@{roll_thresh_mod})/2)]]}} {{thirddegree1=[[floor((@{drive}+@{roll_thresh_mod})/4)+1]]}} {{thirddegree=[[floor((@{drive}+@{roll_thresh_mod})/4)]]}} {{profroll=[[@{roll_perc}]]}} {{mod=[[@{mod_query}]]}} {{absmod=[[abs(@{mod_query})]]}} {{title=@{character_name}}}" type="roll" class="skill-label blank-roll-button">
<span data-i18n="drive">Drive.</span>
</button>
</div>
<div class="charm-prof prof">
<select class="prof" name="attr_charm_prof">
<option value="-">-</option>
<option value="p">P</option>
<option value="s">S</option>
<option value="t">T</option>
<option value="m">M</option>
</select>
<input type="hidden" name="attr_charm"/>
<input type="hidden" name="attr_charm_prof_desc"/>
</div>
<div class="charm-label">
<button value="&{template:maxapoc} {{subtitle=^{charm}}} {{profdesc=@{charm_prof_desc}}} {{firstdegree1=[[@{charm}+@{roll_thresh_mod}+1]]}} {{firstdegree=[[@{charm}+@{roll_thresh_mod}]]}} {{seconddegree1=[[floor((@{charm}+@{roll_thresh_mod})/2)+1]]}} {{seconddegree=[[floor((@{charm}+@{roll_thresh_mod})/2)]]}} {{thirddegree1=[[floor((@{charm}+@{roll_thresh_mod})/4)+1]]}} {{thirddegree=[[floor((@{charm}+@{roll_thresh_mod})/4)]]}} {{profroll=[[@{roll_perc}]]}} {{mod=[[@{mod_query}]]}} {{absmod=[[abs(@{mod_query})]]}} {{title=@{character_name}}}" type="roll" class="skill-label blank-roll-button">
<span data-i18n="charm">Charm.</span>
</button>
</div>
<div class="brawl-prof prof">
<select class="prof" name="attr_brawl_prof">
<option value="-">-</option>
<option value="p">P</option>
<option value="s">S</option>
<option value="t">T</option>
<option value="m">M</option>
</select>
<input type="hidden" name="attr_brawl"/>
<input type="hidden" name="attr_brawl_prof_desc"/>
</div>
<div class="brawl-label">
<button value="&{template:maxapoc} {{subtitle=^{brawl}}} {{profdesc=@{brawl_prof_desc}}} {{firstdegree1=[[@{brawl}+@{roll_thresh_mod}+1]]}} {{firstdegree=[[@{brawl}+@{roll_thresh_mod}]]}} {{seconddegree1=[[floor((@{brawl}+@{roll_thresh_mod})/2)+1]]}} {{seconddegree=[[floor((@{brawl}+@{roll_thresh_mod})/2)]]}} {{thirddegree1=[[floor((@{brawl}+@{roll_thresh_mod})/4)+1]]}} {{thirddegree=[[floor((@{brawl}+@{roll_thresh_mod})/4)]]}} {{profroll=[[@{roll_perc}]]}} {{mod=[[@{mod_query}]]}} {{absmod=[[abs(@{mod_query})]]}} {{title=@{character_name}}}" type="roll" class="skill-label blank-roll-button">
<span data-i18n="brawl">Brawl.</span>
</button>
</div>
<div class="heavyweapons-prof prof">
<select class="prof" name="attr_heavyweapons_prof">
<option value="-">-</option>
<option value="p">P</option>
<option value="s">S</option>
<option value="t">T</option>
<option value="m">M</option>
</select>
<input type="hidden" name="attr_heavyweapons"/>
<input type="hidden" name="attr_heavyweapons_prof_desc"/>
</div>
<div class="heavyweapons-label">
<button value="&{template:maxapoc} {{subtitle=^{heavy_weapons}}} {{profdesc=@{heavyweapons_prof_desc}}} {{firstdegree1=[[@{heavyweapons}+@{roll_thresh_mod}+1]]}} {{firstdegree=[[@{heavyweapons}+@{roll_thresh_mod}]]}} {{seconddegree1=[[floor((@{heavyweapons}+@{roll_thresh_mod})/2)+1]]}} {{seconddegree=[[floor((@{heavyweapons}+@{roll_thresh_mod})/2)]]}} {{thirddegree1=[[floor((@{heavyweapons}+@{roll_thresh_mod})/4)+1]]}} {{thirddegree=[[floor((@{heavyweapons}+@{roll_thresh_mod})/4)]]}} {{profroll=[[@{roll_perc}]]}} {{mod=[[@{mod_query}]]}} {{absmod=[[abs(@{mod_query})]]}} {{title=@{character_name}}}" type="roll" class="skill-label blank-roll-button">
<span data-i18n="heavy_weapons">Heavy Weapons.</span>
</button>
</div>
<!-- SKILLS ROW 3 -->
<div class="palming-prof prof">
<select class="prof" name="attr_palming_prof">
<option value="-">-</option>
<option value="p">P</option>
<option value="s">S</option>
<option value="t">T</option>
<option value="m">M</option>
</select>
<input type="hidden" name="attr_palming"/>
<input type="hidden" name="attr_palming_prof_desc"/>
</div>
<div class="palming-label">
<button value="&{template:maxapoc} {{subtitle=^{palming}}} {{profdesc=@{palming_prof_desc}}} {{firstdegree1=[[@{palming}+@{roll_thresh_mod}+1]]}} {{firstdegree=[[@{palming}+@{roll_thresh_mod}]]}} {{seconddegree1=[[floor((@{palming}+@{roll_thresh_mod})/2)+1]]}} {{seconddegree=[[floor((@{palming}+@{roll_thresh_mod})/2)]]}} {{thirddegree1=[[floor((@{palming}+@{roll_thresh_mod})/4)+1]]}} {{thirddegree=[[floor((@{palming}+@{roll_thresh_mod})/4)]]}} {{profroll=[[@{roll_perc}]]}} {{mod=[[@{mod_query}]]}} {{absmod=[[abs(@{mod_query})]]}} {{title=@{character_name}}}" type="roll" class="skill-label blank-roll-button">
<span data-i18n="palming">Palming.</span>
</button>
</div>
<div class="medicine-prof prof">
<select class="prof" name="attr_medicine_prof">
<option value="-">-</option>
<option value="p">P</option>
<option value="s">S</option>
<option value="t">T</option>
<option value="m">M</option>
</select>
<input type="hidden" name="attr_medicine"/>
<input type="hidden" name="attr_medicine_prof_desc"/>
</div>
<div class="medicine-label">
<button value="&{template:maxapoc} {{subtitle=^{medicine}}} {{profdesc=@{medicine_prof_desc}}} {{firstdegree1=[[@{medicine}+@{roll_thresh_mod}+1]]}} {{firstdegree=[[@{medicine}+@{roll_thresh_mod}]]}} {{seconddegree1=[[floor((@{medicine}+@{roll_thresh_mod})/2)+1]]}} {{seconddegree=[[floor((@{medicine}+@{roll_thresh_mod})/2)]]}} {{thirddegree1=[[floor((@{medicine}+@{roll_thresh_mod})/4)+1]]}} {{thirddegree=[[floor((@{medicine}+@{roll_thresh_mod})/4)]]}} {{profroll=[[@{roll_perc}]]}} {{mod=[[@{mod_query}]]}} {{absmod=[[abs(@{mod_query})]]}} {{title=@{character_name}}}" type="roll" class="skill-label blank-roll-button">
<span data-i18n="medicine">Medicine.</span>
</button>
</div>
<div class="navigation-prof prof">
<select class="prof" name="attr_navigation_prof">
<option value="-">-</option>
<option value="p">P</option>
<option value="s">S</option>
<option value="t">T</option>
<option value="m">M</option>
</select>
<input type="hidden" name="attr_navigation"/>
<input type="hidden" name="attr_navigation_prof_desc"/>
</div>
<div class="navigation-label">
<button value="&{template:maxapoc} {{subtitle=^{navigation}}} {{profdesc=@{navigation_prof_desc}}} {{firstdegree1=[[@{navigation}+@{roll_thresh_mod}+1]]}} {{firstdegree=[[@{navigation}+@{roll_thresh_mod}]]}} {{seconddegree1=[[floor((@{navigation}+@{roll_thresh_mod})/2)+1]]}} {{seconddegree=[[floor((@{navigation}+@{roll_thresh_mod})/2)]]}} {{thirddegree1=[[floor((@{navigation}+@{roll_thresh_mod})/4)+1]]}} {{thirddegree=[[floor((@{navigation}+@{roll_thresh_mod})/4)]]}} {{profroll=[[@{roll_perc}]]}} {{mod=[[@{mod_query}]]}} {{absmod=[[abs(@{mod_query})]]}} {{title=@{character_name}}}" type="roll" class="skill-label blank-roll-button">
<span data-i18n="navigation">Navigation.</span>
</button>
</div>
<div class="command-prof prof">
<select class="prof" name="attr_command_prof">
<option value="-">-</option>
<option value="p">P</option>
<option value="s">S</option>
<option value="t">T</option>
<option value="m">M</option>
</select>
<input type="hidden" name="attr_command"/>
<input type="hidden" name="attr_command_prof_desc"/>
</div>
<div class="command-label">
<button value="&{template:maxapoc} {{subtitle=^{command}}} {{profdesc=@{command_prof_desc}}} {{firstdegree1=[[@{command}+@{roll_thresh_mod}+1]]}} {{firstdegree=[[@{command}+@{roll_thresh_mod}]]}} {{seconddegree1=[[floor((@{command}+@{roll_thresh_mod})/2)+1]]}} {{seconddegree=[[floor((@{command}+@{roll_thresh_mod})/2)]]}} {{thirddegree1=[[floor((@{command}+@{roll_thresh_mod})/4)+1]]}} {{thirddegree=[[floor((@{command}+@{roll_thresh_mod})/4)]]}} {{profroll=[[@{roll_perc}]]}} {{mod=[[@{mod_query}]]}} {{absmod=[[abs(@{mod_query})]]}} {{title=@{character_name}}}" type="roll" class="skill-label blank-roll-button">
<span data-i18n="command">Command.</span>
</button>
</div>
<div class="clubs-prof prof">
<select class="prof" name="attr_clubs_prof">
<option value="-">-</option>
<option value="p">P</option>
<option value="s">S</option>
<option value="t">T</option>
<option value="m">M</option>
</select>
<input type="hidden" name="attr_clubs"/>
<input type="hidden" name="attr_clubs_prof_desc"/>
</div>
<div class="clubs-label">
<button value="&{template:maxapoc} {{subtitle=^{clubs}}} {{profdesc=@{clubs_prof_desc}}} {{firstdegree1=[[@{clubs}+@{roll_thresh_mod}+1]]}} {{firstdegree=[[@{clubs}+@{roll_thresh_mod}]]}} {{seconddegree1=[[floor((@{clubs}+@{roll_thresh_mod})/2)+1]]}} {{seconddegree=[[floor((@{clubs}+@{roll_thresh_mod})/2)]]}} {{thirddegree1=[[floor((@{clubs}+@{roll_thresh_mod})/4)+1]]}} {{thirddegree=[[floor((@{clubs}+@{roll_thresh_mod})/4)]]}} {{profroll=[[@{roll_perc}]]}} {{mod=[[@{mod_query}]]}} {{absmod=[[abs(@{mod_query})]]}} {{title=@{character_name}}}" type="roll" class="skill-label blank-roll-button">
<span data-i18n="clubs">Clubs.</span>
</button>
</div>
<!-- SKILLS ROW 4 -->
<div class="stealth-prof prof">
<select class="prof" name="attr_stealth_prof">
<option value="-">-</option>
<option value="p">P</option>
<option value="s">S</option>
<option value="t">T</option>
<option value="m">M</option>
</select>
<input type="hidden" name="attr_stealth"/>
<input type="hidden" name="attr_stealth_prof_desc"/>
</div>
<div class="stealth-label">
<button value="&{template:maxapoc} {{subtitle=^{stealth}}} {{profdesc=@{stealth_prof_desc}}} {{firstdegree1=[[@{stealth}+@{roll_thresh_mod}+1]]}} {{firstdegree=[[@{stealth}+@{roll_thresh_mod}]]}} {{seconddegree1=[[floor((@{stealth}+@{roll_thresh_mod})/2)+1]]}} {{seconddegree=[[floor((@{stealth}+@{roll_thresh_mod})/2)]]}} {{thirddegree1=[[floor((@{stealth}+@{roll_thresh_mod})/4)+1]]}} {{thirddegree=[[floor((@{stealth}+@{roll_thresh_mod})/4)]]}} {{profroll=[[@{roll_perc}]]}} {{mod=[[@{mod_query}]]}} {{absmod=[[abs(@{mod_query})]]}} {{title=@{character_name}}}" type="roll" class="skill-label blank-roll-button">
<span data-i18n="stealth">Stealth.</span>
</button>
</div>
<div class="science-prof prof">
<select class="prof" name="attr_science_prof">
<option value="-">-</option>
<option value="p">P</option>
<option value="s">S</option>
<option value="t">T</option>
<option value="m">M</option>
</select>
<input type="hidden" name="attr_science"/>
<input type="hidden" name="attr_science_prof_desc"/>
</div>
<div class="science-label">
<button value="&{template:maxapoc} {{subtitle=^{science}}} {{profdesc=@{science_prof_desc}}} {{firstdegree1=[[@{science}+@{roll_thresh_mod}+1]]}} {{firstdegree=[[@{science}+@{roll_thresh_mod}]]}} {{seconddegree1=[[floor((@{science}+@{roll_thresh_mod})/2)+1]]}} {{seconddegree=[[floor((@{science}+@{roll_thresh_mod})/2)]]}} {{thirddegree1=[[floor((@{science}+@{roll_thresh_mod})/4)+1]]}} {{thirddegree=[[floor((@{science}+@{roll_thresh_mod})/4)]]}} {{profroll=[[@{roll_perc}]]}} {{mod=[[@{mod_query}]]}} {{absmod=[[abs(@{mod_query})]]}} {{title=@{character_name}}}" type="roll" class="skill-label blank-roll-button">
<span data-i18n="science">Science.</span>
</button>
</div>
<div class="perception-prof prof">
<select class="prof" name="attr_perception_prof">
<option value="-">-</option>
<option value="p">P</option>
<option value="s">S</option>
<option value="t">T</option>
<option value="m">M</option>
</select>
<input type="hidden" name="attr_perception"/>
<input type="hidden" name="attr_perception_prof_desc"/>
</div>
<div class="perception-label">
<button value="&{template:maxapoc} {{subtitle=^{perception}}} {{profdesc=@{perception_prof_desc}}} {{firstdegree1=[[@{perception}+@{roll_thresh_mod}+1]]}} {{firstdegree=[[@{perception}+@{roll_thresh_mod}]]}} {{seconddegree1=[[floor((@{perception}+@{roll_thresh_mod})/2)+1]]}} {{seconddegree=[[floor((@{perception}+@{roll_thresh_mod})/2)]]}} {{thirddegree1=[[floor((@{perception}+@{roll_thresh_mod})/4)+1]]}} {{thirddegree=[[floor((@{perception}+@{roll_thresh_mod})/4)]]}} {{profroll=[[@{roll_perc}]]}} {{mod=[[@{mod_query}]]}} {{absmod=[[abs(@{mod_query})]]}} {{title=@{character_name}}}" type="roll" class="skill-label blank-roll-button">
<span data-i18n="perception">Perception.</span>
</button>
</div>
<div class="interrogate-prof prof">
<select class="prof" name="attr_interrogate_prof">
<option value="-">-</option>
<option value="p">P</option>
<option value="s">S</option>
<option value="t">T</option>
<option value="m">M</option>
</select>
<input type="hidden" name="attr_interrogate"/>
<input type="hidden" name="attr_interrogate_prof_desc"/>
</div>
<div class="interrogate-label">
<button value="&{template:maxapoc} {{subtitle=^{interrogate}}} {{profdesc=@{interrogate_prof_desc}}} {{firstdegree1=[[@{interrogate}+@{roll_thresh_mod}+1]]}} {{firstdegree=[[@{interrogate}+@{roll_thresh_mod}]]}} {{seconddegree1=[[floor((@{interrogate}+@{roll_thresh_mod})/2)+1]]}} {{seconddegree=[[floor((@{interrogate}+@{roll_thresh_mod})/2)]]}} {{thirddegree1=[[floor((@{interrogate}+@{roll_thresh_mod})/4)+1]]}} {{thirddegree=[[floor((@{interrogate}+@{roll_thresh_mod})/4)]]}} {{profroll=[[@{roll_perc}]]}} {{mod=[[@{mod_query}]]}} {{absmod=[[abs(@{mod_query})]]}} {{title=@{character_name}}}" type="roll" class="skill-label blank-roll-button">
<span data-i18n="interrogate">Interrogate.</span>
</button>
</div>
<!-- SKILLS ROW 5 -->
<div class="wrangle-prof prof">
<select class="prof" name="attr_wrangle_prof">
<option value="-">-</option>
<option value="p">P</option>
<option value="s">S</option>
<option value="t">T</option>
<option value="m">M</option>
</select>
<input type="hidden" name="attr_wrangle"/>
<input type="hidden" name="attr_wrangle_prof_desc"/>
</div>
<div class="wrangle-label">
<button value="&{template:maxapoc} {{subtitle=^{wrangle}}} {{profdesc=@{wrangle_prof_desc}}} {{firstdegree1=[[@{wrangle}+@{roll_thresh_mod}+1]]}} {{firstdegree=[[@{wrangle}+@{roll_thresh_mod}]]}} {{seconddegree1=[[floor((@{wrangle}+@{roll_thresh_mod})/2)+1]]}} {{seconddegree=[[floor((@{wrangle}+@{roll_thresh_mod})/2)]]}} {{thirddegree1=[[floor((@{wrangle}+@{roll_thresh_mod})/4)+1]]}} {{thirddegree=[[floor((@{wrangle}+@{roll_thresh_mod})/4)]]}} {{profroll=[[@{roll_perc}]]}} {{mod=[[@{mod_query}]]}} {{absmod=[[abs(@{mod_query})]]}} {{title=@{character_name}}}" type="roll" class="skill-label blank-roll-button">
<span data-i18n="wrangle">Wrangle.</span>
</button>
</div>
<div class="techuse-prof prof">
<select class="prof" name="attr_techuse_prof">
<option value="-">-</option>
<option value="p">P</option>
<option value="s">S</option>
<option value="t">T</option>
<option value="m">M</option>
</select>
<input type="hidden" name="attr_techuse"/>
<input type="hidden" name="attr_techuse_prof_desc"/>
</div>
<div class="techuse-label">
<button value="&{template:maxapoc} {{subtitle=^{tech_use}}} {{profdesc=@{techuse_prof_desc}}} {{firstdegree1=[[@{techuse}+@{roll_thresh_mod}+1]]}} {{firstdegree=[[@{techuse}+@{roll_thresh_mod}]]}} {{seconddegree1=[[floor((@{techuse}+@{roll_thresh_mod})/2)+1]]}} {{seconddegree=[[floor((@{techuse}+@{roll_thresh_mod})/2)]]}} {{thirddegree1=[[floor((@{techuse}+@{roll_thresh_mod})/4)+1]]}} {{thirddegree=[[floor((@{techuse}+@{roll_thresh_mod})/4)]]}} {{profroll=[[@{roll_perc}]]}} {{mod=[[@{mod_query}]]}} {{absmod=[[abs(@{mod_query})]]}} {{title=@{character_name}}}" type="roll" class="skill-label blank-roll-button">
<span data-i18n="tech_use">Tech Use.</span>
</button>
</div>
<div class="survival-prof prof">
<select class="prof" name="attr_survival_prof">
<option value="-">-</option>
<option value="p">P</option>
<option value="s">S</option>
<option value="t">T</option>
<option value="m">M</option>
</select>
<input type="hidden" name="attr_survival"/>
<input type="hidden" name="attr_survival_prof_desc"/>
</div>
<div class="survival-label">
<button value="&{template:maxapoc} {{subtitle=^{survival}}} {{profdesc=@{survival_prof_desc}}} {{firstdegree1=[[@{survival}+@{roll_thresh_mod}+1]]}} {{firstdegree=[[@{survival}+@{roll_thresh_mod}]]}} {{seconddegree1=[[floor((@{survival}+@{roll_thresh_mod})/2)+1]]}} {{seconddegree=[[floor((@{survival}+@{roll_thresh_mod})/2)]]}} {{thirddegree1=[[floor((@{survival}+@{roll_thresh_mod})/4)+1]]}} {{thirddegree=[[floor((@{survival}+@{roll_thresh_mod})/4)]]}} {{profroll=[[@{roll_perc}]]}} {{mod=[[@{mod_query}]]}} {{absmod=[[abs(@{mod_query})]]}} {{title=@{character_name}}}" type="roll" class="skill-label blank-roll-button">
<span data-i18n="survival">Survival.</span>
</button>
</div>
<div class="intimidate-prof prof">
<select class="prof" name="attr_intimidate_prof">
<option value="-">-</option>
<option value="p">P</option>
<option value="s">S</option>
<option value="t">T</option>
<option value="m">M</option>
</select>
<input type="hidden" name="attr_intimidate"/>
<input type="hidden" name="attr_intimidate_prof_desc"/>
</div>
<div class="intimidate-label">
<button value="&{template:maxapoc} {{subtitle=^{intimidate}}} {{profdesc=@{intimidate_prof_desc}}} {{firstdegree1=[[@{intimidate}+@{roll_thresh_mod}+1]]}} {{firstdegree=[[@{intimidate}+@{roll_thresh_mod}]]}} {{seconddegree1=[[floor((@{intimidate}+@{roll_thresh_mod})/2)+1]]}} {{seconddegree=[[floor((@{intimidate}+@{roll_thresh_mod})/2)]]}} {{thirddegree1=[[floor((@{intimidate}+@{roll_thresh_mod})/4)+1]]}} {{thirddegree=[[floor((@{intimidate}+@{roll_thresh_mod})/4)]]}} {{profroll=[[@{roll_perc}]]}} {{mod=[[@{mod_query}]]}} {{absmod=[[abs(@{mod_query})]]}} {{title=@{character_name}}}" type="roll" class="skill-label blank-roll-button">
<span data-i18n="intimidate">Intimidate.</span>
</button>
</div>
<!-- SKILLS ROW 6 -->
<div class="tracking-prof prof">
<select class="prof" name="attr_tracking_prof">
<option value="-">-</option>
<option value="p">P</option>
<option value="s">S</option>
<option value="t">T</option>
<option value="m">M</option>
</select>
<input type="hidden" name="attr_tracking"/>
<input type="hidden" name="attr_tracking_prof_desc"/>
</div>
<div class="tracking-label">
<button value="&{template:maxapoc} {{subtitle=^{tracking}}} {{profdesc=@{tracking_prof_desc}}} {{firstdegree1=[[@{tracking}+@{roll_thresh_mod}+1]]}} {{firstdegree=[[@{tracking}+@{roll_thresh_mod}]]}} {{seconddegree1=[[floor((@{tracking}+@{roll_thresh_mod})/2)+1]]}} {{seconddegree=[[floor((@{tracking}+@{roll_thresh_mod})/2)]]}} {{thirddegree1=[[floor((@{tracking}+@{roll_thresh_mod})/4)+1]]}} {{thirddegree=[[floor((@{tracking}+@{roll_thresh_mod})/4)]]}} {{profroll=[[@{roll_perc}]]}} {{mod=[[@{mod_query}]]}} {{absmod=[[abs(@{mod_query})]]}} {{title=@{character_name}}}" type="roll" class="skill-label blank-roll-button">
<span data-i18n="tracking">Tracking.</span>
</button>
</div>
<!-- SKILLS ROW 7 -->
<div class="xenotechuse-prof prof">
<select class="prof" name="attr_xenotechuse_prof">
<option value="-">-</option>
<option value="p">P</option>
<option value="s">S</option>
<option value="t">T</option>
<option value="m">M</option>
</select>
<input type="hidden" name="attr_xenotechuse"/>
<input type="hidden" name="attr_xenotechuse_prof_desc"/>
</div>
<div class="xenotechuse-label">
<button value="&{template:maxapoc} {{subtitle=^{xenotech_use}}} {{profdesc=@{xenotechuse_prof_desc}}} {{firstdegree1=[[@{xenotechuse}+@{roll_thresh_mod}+1]]}} {{firstdegree=[[@{xenotechuse}+@{roll_thresh_mod}]]}} {{seconddegree1=[[floor((@{xenotechuse}+@{roll_thresh_mod})/2)+1]]}} {{seconddegree=[[floor((@{xenotechuse}+@{roll_thresh_mod})/2)]]}} {{thirddegree1=[[floor((@{xenotechuse}+@{roll_thresh_mod})/4)+1]]}} {{thirddegree=[[floor((@{xenotechuse}+@{roll_thresh_mod})/4)]]}} {{profroll=[[@{roll_perc}]]}} {{mod=[[@{mod_query}]]}} {{absmod=[[abs(@{mod_query})]]}} {{title=@{character_name}}}" type="roll" class="skill-label blank-roll-button">
<span data-i18n="xenotech_use">Xenotech Use.</span>
</button>
</div>
<div class="prof-desc">
<div class="prof-circle"><select class="prof" disabled/></div>
<div class="prof-code-not code">-</div>
<div class="prof-desc-not"><label data-i18n="not_proficient">Not Proficient.</label></div>
<div class="prof-code-p code">P</div>
<div class="prof-desc-p"><label data-i18n="proficient">Proficient.</label></div>
<div class="prof-code-s code">S</div>
<div class="prof-desc-s"><label data-i18n="skilled">Skilled.</label></div>
<div class="prof-code-t code">T</div>
<div class="prof-desc-t"><label data-i18n="trained">Trained.</label></div>
<div class="prof-code-m code">M</div>
<div class="prof-desc-m"><label data-i18n="master">Master.</label></div>
<div class="prof-text"><span data-i18n="proficiency_text">Skills that are NOT PROFICIENT start as DISADVANTAGE and cannot have ADVANTAGE when rolled.</span></div>
</div>
<div class="roll-modifiers">
<span class="label" data-i18n="threshold_modifier_text">Threshold modifier prompt on every roll ?</span>
<input type="checkbox" value="?{Threshold Modifier|0}" name="attr_threshold_modifier"/>
</div>
<div class="luck-label"><span data-i18n="luck" class="banner">Luck.</span><span class="dark code"> (L)</span></div>
<div class="luck-use-label">
<input type="hidden" name="attr_has_faith" class="has-faith-check"/>
<span data-i18n="use_per_game">Use Per Game.</span><br/>
<span>( </span><span data-i18n="luck">Luck.</span><span>/ 10 </span><span class="has-faith" data-i18n="+3_for_faith">+3 for Faith.</span><span>)</span>
</div>
<div class="luck-input">
<input class="stat" type="number" name="attr_luck"/>
</div>
<div class="luck-max lozenge">
<input class="lozenge" type="number" name="attr_luck_uses_max" width="18" readonly/>
</div>
<div class="luck-current">
<input class="stat" type="number" name="attr_luck_uses"/>
</div>
<div class="luck-base-label luck-lower-label">
<span data-i18n="base_stat_perc">Base Stat %.</span>
</div>
<div class="luck-max-label luck-lower-label">
<span data-i18n="max">Max.</span>
</div>
<div class="luck-current-label luck-lower-label">
<span data-i18n="current">Current.</span>
</div>
</div>
<div class="sp-stats section">
<div class="sp-stats-ltl"></div>
<div class="sp-stats-lbl"></div>
<div class="sp-stats-banner banner"><span data-i18n="special_stats">Special Stats.</span></div>
<div class="sp-stats-ltr"></div>
<div class="sp-stats-lbr"></div>
<div class="armor-shield">
<div class="shield-label subheading"><span data-i18n="armor">Armor.</span></div>
<div class="shield-input-max">
<input class="shield shield-max" type="number" name="attr_armor_max"/>
</div>
<div class="shield-input-max-label self-center shield-label">
<span data-i18n="max">Max.</span>
</div>
<div class="shield-input-current self-center">
<input class="shield shield-current" type="number" name="attr_armor" value="0"/>
</div>
<div class="shield-input-current-label self-center shield-label">
<span data-i18n="current">Current.</span>
</div>
</div>
<div class="armor-table">
<div class="armor-head">
<div class="armor-col-head-1 table-head"><span data-i18n="armor_piece">Armor Piece.</span></div>
<div class="armor-col-head-2 table-head-small"><span data-i18n="armor_points">Armor Points.</span></div>
<div class="armor-col-head-3 table-head">CP</div>
</div>
<div class="armor-row table-row">
<fieldset class="repeating_armor">
<input name="attr_armor_name" class="armor-name table-cell" type="text" size="15"/>
<input name="attr_armor_ap" class="armor-ap table-cell" type="number" size="5"/>
<input name="attr_armor_cp" class="armor-cp table-cell" type="number" size="5"/>
</fieldset>
</div>
<input type="hidden" name="attr_armor_cp_total"/>
</div>
<div class="build">
<div class="stat-labels build-labels">
<div class="subheading"><span data-i18n="build" class="subheading">Build.</span></div>
<div class="footing"><span class="footing">(STR + FOR)</span></div>
</div>
<div class="build-input">
<input class="build-lozenge" type="number" name="attr_build" width="18" readonly/>
</div>
<div class="dc-input">
<input class="dc-lozenge" type="number" name="attr_build_dc" width="18" readonly/>
<span class="dc-input-label">DC</span>
</div>
</div>
<div class="health">
<div class="stat-labels health-labels">
<div class="subheading"><span data-i18n="health_points" class="subheading">Health Points.</span></div>
<div class="footing"><span class="footing">(BUILD / 5)</span></div>
</div>
<div class="health-max">
<input class="health-lozenge" type="number" name="attr_health_max" readonly/>
</div>
<div class="health-current">
<input class="health-current" type="number" name="attr_health" value="0"/>
</div>
<div class="health-max-label self-center luck-lower-label">
<span data-i18n="max">Max.</span>
</div>
<div class="health-current-label self-center luck-lower-label">
<span data-i18n="current">Current.</span>
</div>
</div>
<div class="initiative">
<div class="stat-labels init-labels">
<div class="subheading"><span data-i18n="initiative" class="subheading">Initiative.</span></div>
<div class="footing"><span class="footing">(AGI + LUCK) / 10</span></div>
</div>
<div class="init">
<input class="init-lozenge" type="number" name="attr_init" width="18" readonly/>
</div>
<div class="init- init-5">
<input class="init- init-5" type="number" name="attr_init_5" readonly/>
</div>
<div class="init- init-10">
<input class="init- init-10" type="number" name="attr_init_10" readonly/>
</div>
<div class="init- init-15">
<input class="init- init-15" type="number" name="attr_init_15" readonly/>
</div>
<div class="init-5-l self-center">
<span class="half">-5</span>
</div>
<div class="init-10-l self-center">
<span class="half">-10</span>
</div>
<div class="init-15-l self-center">
<span class="half">-15</span>
</div>
<div class="init- init-temp">
<input class="init- init-temp" type="number" name="attr_init_temp"/>
</div>
<div class="init- init-temp-label">
<span data-i18n="temporary_modifier" class="footing">Temp. Modifier</span><span class="footing">:</span>
</div>
</div>
<div class="saves">
<div class="save-salvage special-stat">
<div class="stat-labels salvage-labels">
<div class="subheading">
<button value="&{template:maxapoc} {{subtitle=^{salvage}}} {{firstdegree1=[[@{salvage}+@{roll_thresh_mod}+1]]}} {{firstdegree=[[@{salvage}+@{roll_thresh_mod}]]}} {{seconddegree1=[[floor((@{salvage}+@{roll_thresh_mod})/2)+1]]}} {{seconddegree=[[floor((@{salvage}+@{roll_thresh_mod})/2)]]}} {{thirddegree1=[[floor((@{salvage}+@{roll_thresh_mod})/4)+1]]}} {{thirddegree=[[floor((@{salvage}+@{roll_thresh_mod})/4)]]}} {{profroll=[[@{roll_perc}]]}} {{mod=[[@{mod_query}]]}} {{absmod=[[abs(@{mod_query})]]}} {{title=@{character_name}}}" type="roll" class="blank-roll-button">
<span data-i18n="salvage" class="subheading">Salvage.</span>
</button>
</div>
<div class="footing"><span class="footing">(INS + LUCK) / 2</span></div>
</div>
<div class="salvage-input"><input class="stat" type="number" name="attr_salvage" readonly/></div>
<div class="half salvage-h"><input class="stat-half" type="number" name="attr_salvage_half" readonly/></div>
<div class="half salvage-h-label">1/2&nbsp;&nbsp;&nbsp;</div>
<div class="quarter salvage-q"><input class="stat-quarter" type="number" name="attr_salvage_quarter" readonly/></div>
<div class="quarter salvage-q-label">&nbsp;&nbsp;&nbsp;1/4</div>
</div>
<div class="save-resilience special-stat">
<div class="stat-labels resilience-labels">
<div class="subheading">
<button value="&{template:maxapoc} {{subtitle=^{resilience}}} {{firstdegree1=[[@{resilience}+@{roll_thresh_mod}+1]]}} {{firstdegree=[[@{resilience}+@{roll_thresh_mod}]]}} {{seconddegree1=[[floor((@{resilience}+@{roll_thresh_mod})/2)+1]]}} {{seconddegree=[[floor((@{resilience}+@{roll_thresh_mod})/2)]]}} {{thirddegree1=[[floor((@{resilience}+@{roll_thresh_mod})/4)+1]]}} {{thirddegree=[[floor((@{resilience}+@{roll_thresh_mod})/4)]]}} {{profroll=[[@{roll_perc}]]}} {{mod=[[@{mod_query}]]}} {{absmod=[[abs(@{mod_query})]]}} {{title=@{character_name}}}" type="roll" class="blank-roll-button">
<span data-i18n="resilience" class="subheading">Resilience.</span>
</button>
</div>
<div class="footing"><span class="footing">(STR + FORT) / 2</span></div>
</div>
<div class="resilience-input"><input class="stat" type="number" name="attr_resilience" readonly/></div>
<div class="half resilience-h"><input class="stat-half" type="number" name="attr_resilience_half" readonly/></div>
<div class="half resilience-h-label">1/2&nbsp;&nbsp;&nbsp;</div>
<div class="quarter resilience-q"><input class="stat-quarter" type="number" name="attr_resilience_quarter" readonly/></div>
<div class="quarter resilience-q-label">&nbsp;&nbsp;&nbsp;1/4</div>
</div>
<div class="save-resolve special-stat">
<div class="stat-labels resolve-labels">
<div class="subheading">
<button value="&{template:maxapoc} {{subtitle=^{resolve}}} {{firstdegree1=[[@{resolve}+@{roll_thresh_mod}+1]]}} {{firstdegree=[[@{resolve}+@{roll_thresh_mod}]]}} {{seconddegree1=[[floor((@{resolve}+@{roll_thresh_mod})/2)+1]]}} {{seconddegree=[[floor((@{resolve}+@{roll_thresh_mod})/2)]]}} {{thirddegree1=[[floor((@{resolve}+@{roll_thresh_mod})/4)+1]]}} {{thirddegree=[[floor((@{resolve}+@{roll_thresh_mod})/4)]]}} {{profroll=[[@{roll_perc}]]}} {{mod=[[@{mod_query}]]}} {{absmod=[[abs(@{mod_query})]]}} {{title=@{character_name}}}" type="roll" class="blank-roll-button">
<span data-i18n="resolve" class="subheading">Resolve.</span>
</button>
</div>
<div class="footing"><span class="footing">(INT + INS) / 2</span></div>
</div>
<div class="resolve-input"><input class="stat" type="number" name="attr_resolve" readonly/></div>
<div class="half resolve-h"><input class="stat-half" type="number" name="attr_resolve_half" readonly/></div>
<div class="half resolve-h-label">1/2&nbsp;&nbsp;&nbsp;</div>
<div class="quarter resolve-q"><input class="stat-quarter" type="number" name="attr_resolve_quarter" readonly/></div>
<div class="quarter resolve-q-label">&nbsp;&nbsp;&nbsp;1/4</div>
</div>
<div class="save-immunity special-stat">
<div class="stat-labels immunity-labels">
<div class="subheading">
<button value="&{template:maxapoc} {{subtitle=^{immunity}}} {{firstdegree1=[[@{immunity}+@{roll_thresh_mod}+1]]}} {{firstdegree=[[@{immunity}+@{roll_thresh_mod}]]}} {{seconddegree1=[[floor((@{immunity}+@{roll_thresh_mod})/2)+1]]}} {{seconddegree=[[floor((@{immunity}+@{roll_thresh_mod})/2)]]}} {{thirddegree1=[[floor((@{immunity}+@{roll_thresh_mod})/4)+1]]}} {{thirddegree=[[floor((@{immunity}+@{roll_thresh_mod})/4)]]}} {{profroll=[[@{roll_perc}]]}} {{mod=[[@{mod_query}]]}} {{absmod=[[abs(@{mod_query})]]}} {{title=@{character_name}}}" type="roll" class="blank-roll-button">
<span data-i18n="immunity" class="subheading">Immunity.</span>
</button>
</div>
<div class="footing"><span class="footing">(FOR + LUCK) / 2</span></div>
</div>
<div class="immunity-input"><input class="stat" type="number" name="attr_immunity" readonly/></div>
<div class="half immunity-h"><input class="stat-half" type="number" name="attr_immunity_half" readonly/></div>
<div class="half immunity-h-label">1/2&nbsp;&nbsp;&nbsp;</div>
<div class="quarter immunity-q"><input class="stat-quarter" type="number" name="attr_immunity_quarter" readonly/></div>
<div class="quarter immunity-q-label">&nbsp;&nbsp;&nbsp;1/4</div>
</div>
</div>
</div>
<div class="defense section">
<div class="defense-banner banner"><span data-i18n="defensive_actions">Defensive Actions.</span></div>
<div class="defense-table">
<div class="defense-head">
<div class="defense-col-head-1 table-head"><span data-i18n="defensive_actions">Defense Actions.</span></div>
<div class="defense-col-head-2 table-head"><span data-i18n="threshold">Threshold.</span></div>
<div class="defense-col-head-3 table-head">1/2</div>
<div class="defense-col-head-4 table-head">1/4</div>
</div>
<div class="dodge-row defense-row table-row">
<div class="dodge-desc defense-desc table-cell">
<span data-i18n="dodge" class="subheading">Dodge.</span><br/>
<input type="hidden" name="attr_has_reflex" class="has-reflex-check"/>
<span class="footing">(AGI + INS) / 2 </span><span class="has-reflex footing" data-i18n="+10_for_reflex">+10 for Reflex.</span>
</div>
<div class="dodge-threshold table-cell"><input name="attr_dodge" class="defense-threshold" type="number" readonly/></div>
<div class="dodge-threshold-h table-cell"><input name="attr_dodge_half" class="defense-threshold-h" type="number" readonly/></div>
<div class="dodge-threshold-q table-cell"><input name="attr_dodge_quarter" class="defense-threshold-q" type="number" readonly/></div>
</div>
<div class="full-dodge-row defense-row table-row">
<div class="full-dodge-desc defense-desc table-cell">
<span data-i18n="full_dodge" class="subheading">Full Dodge.</span><br/>
<span class="footing">(DODGE + 1/2 STR) Init -5</span>
</div>
<div class="full-dodge-threshold table-cell"><input name="attr_full_dodge" class="defense-threshold" type="number" readonly/></div>
<div class="full-dodge-threshold-h table-cell"><input name="attr_full_dodge_half" class="defense-threshold-h" type="number" readonly/></div>
<div class="full-dodge-threshold-q table-cell"><input name="attr_full_dodge_quarter" class="defense-threshold-q" type="number" readonly/></div>
</div>
<div class="parry-row defense-row table-row">
<div class="parry-desc defense-desc table-cell">
<span data-i18n="parry" class="subheading">Parry.</span><br/>
<span class="footing">(<span data-i18n="blades">Blades.</span>/<span data-i18n="brawl">Brawl.</span>/<span data-i18n="clubs">Clubs.</span>)</span>
</div>
<div class="parry-threshold table-cell"><input name="attr_parry" class="defense-threshold" type="number" readonly/></div>
<div class="parry-threshold-h table-cell"><input name="attr_parry_half" class="defense-threshold-h" type="number" readonly/></div>
<div class="parry-threshold-q table-cell"><input name="attr_parry_quarter" class="defense-threshold-q" type="number" readonly/></div>
</div>
<div class="riposte-row defense-row table-row">
<div class="riposte-desc defense-desc table-cell">
<span data-i18n="riposte" class="subheading">Riposte.</span><br/>
<span class="footing">(<span data-i18n="parry">Parry.</span>+<span data-i18n="attack">Attack.</span>) Init -3</span>
</div>
<div class="riposte-threshold table-cell"><input name="attr_riposte" class="defense-threshold" type="number" readonly/></div>
<div class="riposte-threshold-h table-cell"><input name="attr_riposte_half" class="defense-threshold-h" type="number" readonly/></div>
<div class="riposte-threshold-q table-cell"><input name="attr_riposte_quarter" class="defense-threshold-q" type="number" readonly/></div>
</div>
</div>
</div>
<div class="attacks section">
<div class="attack-banner banner"><span data-i18n="weapon_attacks">Weapon Attacks.</span></div>
<div class="attack-table">
<div class="attack-head">
<div class="attack-col-head-1 table-head"><span data-i18n="weapon">Weapon.</span></div>
<div class="attack-col-head-2 table-head">DC</div>
<div class="attack-col-head-3 table-head"><span data-i18n="threshold">Threshold.</span></div>
<div class="attack-col-head-4 table-head">1/2</div>
<div class="attack-col-head-5 table-head">1/4</div>
<div class="attack-col-head-6 table-head"><span data-i18n="ammo">Ammo.</span></div>
<div class="attack-col-head-7 table-head"><span data-i18n="traits">Traits.</span></div>
<div class="attack-col-head-8 table-head">CP</div>
</div>
<div class="attack-row-brawl table-row">
<input name="attr_brawl_weapon" class="attack-weapon table-cell" type="text" data-i18n="unarmed_brawl" value="Unarmed (Brawl)" readonly/>
<input name="attr_build_dc" class="attack-dc table-cell" type="number" readonly/>
<input name="attr_brawl" class="attack-threshold table-cell" type="number" readonly/>
<input name="attr_brawl_half" class="attack-threshold-h table-cell" type="number" readonly/>
<input name="attr_brawl_quarter" class="attack-threshold-q table-cell" type="number" readonly/>
<input name="attr_brawl_ammo" class="attack-ammo table-cell" type="text" value="n/a" readonly/>
<input name="attr_brawl_traits" class="attack-traits table-cell" type="text"/>
<input name="attr_brawl_cp" class="attack-cp table-cell" type="text" value="n/a" readonly/>
</div>
<div class="attack-row table-row">
<fieldset class="repeating_attack">
<input name="attr_attack_weapon" class="attack-weapon table-cell" type="text"/>
<input name="attr_attack_dc" class="attack-dc table-cell" type="number" size="5"/>
<input name="attr_attack_threshold" class="attack-threshold table-cell" type="number"/>
<input name="attr_attack_threshold_quarter" class="attack-threshold-h table-cell" type="number"/>
<input name="attr_attack_threshold_half" class="attack-threshold-q table-cell" type="number"/>
<input name="attr_attack_ammo" class="attack-ammo table-cell" type="number"/>
<input name="attr_attack_traits" class="attack-traits table-cell" type="text"/>
<input name="attr_attack_cp" class="attack-cp table-cell" type="number"/>
</fieldset>
</div>
<input type="hidden" name="attr_attack_cp_total"/>
</div>
</div>
<div class="gear section">
<div class="gear-banner banner"><span data-i18n="gear_inventory">Gear Inventory.</span></div>
<div class="gear-table">
<div class="gear-head">
<div class="gear-col-head-1 table-head"><span data-i18n="item">Item.</span></div>
<div class="gear-col-head-3 table-head"><span data-i18n="characteristic">Characteristic.</span></div>
<div class="gear-col-head-8 table-head">CP</div>
</div>
<div class="gear-row table-row">
<fieldset class="repeating_gear">
<input name="attr_gear_item" class="gear-item table-cell" type="text"/>
<textarea name="attr_gear_characteristic" class="gear-characteristic table-cell" rows="1"></textarea>
<input name="attr_gear_cp" class="gear-cp table-cell" type="number"/>
</fieldset>
</div>
<input type="hidden" name="attr_gear_cp_total"/>
</div>
</div>
<div class="abilities section">
<div class="abilities-banner banner"><span data-i18n="special_abilities">Special Abilities.</span></div>
<div class="abilities-table">
<div class="abilities-head">
<div class="abilities-col-head-1 table-head table-cell"><span data-i18n="source">Source.</span></div>
<div class="abilities-col-head-3 table-head table-cell"><span data-i18n="ability_name">Ability Name.</span></div>
<div class="abilities-col-head-8 table-head table-cell"><span data-i18n="effect">Effect.</span></div>
</div>
<div class="abilities-row table-row">
<fieldset class="repeating_abilities">
<input name="attr_ability_source" class="ability-source table-cell" type="text"/>
<input name="attr_ability_name" class="ability-name table-cell" type="text"/>
<textarea name="attr_ability_effect" class="ability-effect table-cell" rows="1"></textarea>
</fieldset>
</div>
</div>
</div>
<div class="cp section">
<div class="cp-banner banner"><span data-i18n="current">Current.</span><br/>CP</div>
<div class="cp-inferior cp-box"><input name="attr_cp_inferior" class="cp-input" type="number" autocomplete="chrome-off"/></div>
<div class="cp-inferior-label cp-label"><span data-i18n="inferior_cp">Inferior CP.</span></div>
<div class="cp-cp cp-box"><input name="attr_cp" class="cp-input" type="number" autocomplete="chrome-off"/></div>
<div class="cp-cp-label cp-label">CP</div>
<div class="cp-superior cp-box"><input name="attr_cp_superior" class="cp-input" type="number" autocomplete="chrome-off"/></div>
<div class="cp-superior-label cp-label"><span data-i18n="superior_cp">Superior CP.</span></div>
<div class="cp-cx cp-box"><input name="attr_cx" class="cp-input" type="number" autocomplete="chrome-off"/></div>
<div class="cp-cp-label cp-label">CX</div>
<input type="hidden" name="attr_cp_total"/>
</div>
<div class="cp-costs section">
<span data-i18n="cp_costs">CP Costs.</span><br/>
<span data-i18n="heal">Heal.</span> = <span data-i18n="one_per_4_hp">1 per 4 HP.</span><br/>
<span data-i18n="repair">Repair.</span> = <span data-i18n="one_per_4_cp">1 per 4 CP.</span><br/>
<span data-i18n="armor">Armor.</span> = <span data-i18n="three_per_armor_point">3 per Armor pt.</span>
</div>
<div class="resolve-infection section">
<div class="resolve-table">
<div class="resolve-banner-text banner">
<span data-i18n="resolve_dmg">Resolve DMG.</span>
</div>
<div class="resolve-banner-status">
<input class="resolve-status" type="checkbox" checked disabled/>
</div>
<div class="unnerved-desc resolve-desc">
<span data-i18n="unnerved" class="subheading">Unnerved.</span><br/>
<span class="footing">(<span data-i18n="disadvantage_on_rolls">Disadv. on rolls.</span>)</span>
</div>
<div class="unnerved-status resolve-status"><input name="attr_unnerved" class="unnerved-status resolve-status" type="checkbox"/></div>
<div class="shaken-desc resolve-desc">
<span data-i18n="shaken" class="subheading">Shaken.</span><br/>
<span class="footing">(<span data-i18n="-3_initiative">-3 initiative.</span>)</span>
</div>
<div class="shaken-status resolve-status"><input name="attr_shaken" class="shaken-status resolve-status" type="checkbox"/></div>
<div class="insanity-desc resolve-desc">
<span data-i18n="insanity_condition" class="insanity-desc subheading">Insanity Condition.</span>
</div>
<div class="insanity-status resolve-status"><input name="attr_insanity" class="insanity-status resolve-status" type="checkbox"/></div>
</div>
<div class="infection-table">
<div class="infection-banner banner">
<span data-i18n="infection">Infection.</span>
</div>
<div class="infection-no infection-col-head-1 table-head"><span data-i18n="stage">Stage.</span></div>
<div class="infection-desc infection-col-head-2 table-head"><span data-i18n="infection">Infection.</span></div>
<div class="infection-status infection-col-head-3 table-head"><input class="infection-status" type="checkbox" checked disabled/></div>
<div class="infection-no incubation-no">1</div>
<div class="infection-desc incubation-desc"><span data-i18n="incubation" class="subheading">Incubation.</span></div>
<div class="infection-status incubation-status"><input name="attr_incubation" class="infection-status incubation-status" type="checkbox"/></div>
<div class="infection-no gestation-no">2</div>
<div class="infection-desc gestation-desc"><span data-i18n="gestation" class="subheading">Gestation.</span></div>
<div class="infection-status gestation-status"><input name="attr_gestation" class="infection-status gestation-status" type="checkbox"/></div>
<div class="infection-no symptomatic-no">3</div>
<div class="infection-desc symptomatic-desc"><span data-i18n="symptomatic" class="subheading">Symptomatic.</span></div>
<div class="infection-status symptomatic-status"><input name="attr_symptomatic" class="infection-status symptomatic-status" type="checkbox"/></div>
<div class="infection-no prodromal-no">4</div>
<div class="infection-desc prodromal-desc"><span data-i18n="prodromal" class="subheading">Prodromal.</span></div>
<div class="infection-status prodromal-status"><input name="attr_prodromal" class="infection-status prodromal-status" type="checkbox"/></div>
<div class="infection-no acute-no">5</div>
<div class="infection-desc acute-desc"><span data-i18n="acute" class="subheading">Acute.</span></div>
<div class="infection-status acute-status"><input name="attr_acute" class="infection-status acute-status" type="checkbox"/></div>
<div class="infection-no transformdie-no">6</div>
<div class="infection-desc transformdie-desc"><span data-i18n="transform_die" class="subheading">Transform/Die.</span></div>
<div class="infection-status transformdie-status"><input name="attr_transformdie" class="infection-status transformdie-status" type="checkbox"/></div>
</div>
</div>
<div class="hunger section">
<div class="hunger-banner banner"><span data-i18n="hunger" class="banner">Hunger.</span></div>
<input type="hidden" name="attr_starving" class="starving-check"/>
<div class="starving hunger-desc-left table-head-small">1/4 FOR = </div>
<div class="starving hunger-desc-right table-head-small"><span data-i18n="starving">Starving.</span></div>
<input type="hidden" name="attr_emaciated" class="emaciated-check"/>
<div class="emaciated hunger-desc-left table-head-small">1/2 FOR = </div>
<div class="emaciated hunger-desc-right table-head-small"><span data-i18n="emaciated">Emaciated.</span></div>
<input type="hidden" name="attr_dead" class="dead-check"/>
<div class="dead hunger-desc-left table-head-small">FOR = </div>
<div class="dead hunger-desc-right table-head-small"><span data-i18n="dead">Dead.</span></div>
<div class="hunger-input"><input name="attr_hunger" class="hunger-input prof" type="number" value="0"/></div>
</div>
<div class="build-repair section">
<div class="build-banner banner"><span data-i18n="build_repair">Build / Repair.</span></div>
<div class="head desc table-head"><span data-i18n="repair_skill">Repair Skill.</span></div>
<div class="head build-prof table-head">P</div>
<div class="head build-threshold table-head-small"><span data-i18n="threshold">Threshold.</span></div>
<div class="head build-threshold-h table-head">1/2</div>
<div class="head build-threshold-q table-head">1/4</div>
<div class="crafting desc"><span data-i18n="crafting" class="subheading">Crafting.</span></div>
<div class="crafting build-prof"><input name="attr_crafting_prof" class="build-prof fill" type="text" readonly/></div>
<div class="crafting build-threshold"><input name="attr_crafting" class="fill" type="number" readonly/></div>
<div class="crafting build-threshold-h"><input name="attr_crafting_half" class="fill" type="number" readonly/></div>
<div class="crafting build-threshold-q"><input name="attr_crafting_quarter" class="fill" type="number" readonly/></div>
<div class="mechanics desc"><span data-i18n="mechanics" class="subheading">Mechanics.</span></div>
<div class="mechanics build-prof"><input name="attr_mechanics_prof" class="build-prof fill" type="text" readonly/></div>
<div class="mechanics build-threshold"><input name="attr_mechanics" class="fill" type="number" readonly/></div>
<div class="mechanics build-threshold-h"><input name="attr_mechanics_half" class="fill" type="number" readonly/></div>
<div class="mechanics build-threshold-q"><input name="attr_mechanics_quarter" class="fill" type="number" readonly/></div>
<div class="science desc"><span data-i18n="science" class="subheading">Science.</span></div>
<div class="science build-prof"><input name="attr_science_prof" class="build-prof fill" type="text" readonly/></div>
<div class="science build-threshold"><input name="attr_science" class="fill" type="number" readonly/></div>
<div class="science build-threshold-h"><input name="attr_science_half" class="fill" type="number" readonly/></div>
<div class="science build-threshold-q"><input name="attr_science_quarter" class="fill" type="number" readonly/></div>
<div class="medicine desc"><span data-i18n="medicine" class="subheading">Medicine.</span></div>
<div class="medicine build-prof"><input name="attr_medicine_prof" class="build-prof fill" type="text" readonly/></div>
<div class="medicine build-threshold"><input name="attr_medicine" class="fill" type="number" readonly/></div>
<div class="medicine build-threshold-h"><input name="attr_medicine_half" class="fill" type="number" readonly/></div>
<div class="medicine build-threshold-q"><input name="attr_medicine_quarter" class="fill" type="number" readonly/></div>
</div>
<div class="encum-table section">
<div class="encum-banner banner"><span data-i18n="encumbrance">Encumbrance.</span></div>
<div class="encum-head table-head">
-1 <span data-i18n="initiative">initiative.</span>,
<span data-i18n="disadvantage_on_dodge">Disadv. on Dodge.</span>,
1/2 <span data-i18n="move">Move.</span>
</div>
<div class="encum max-label subheading">( 200 + <span data-i18n="build">Build.</span>) CP</div>
<div class="encum current-label subheading"><span data-i18n="current">Current.</span></div>
<div class="encum exceeded-label subheading"><span data-i18n="yes">Y.</span>?</div>
<div class="encum max"><input name="attr_encum_max" class="fill" type="number" readonly/></div>
<div class="encum current"><input name="attr_encum" class="build-prof fill" type="number" readonly/></div>
<div class="encum exceeded"><input name="attr_encumbered" class="fill" type="checkbox" readonly/></div>
</div>
<div class="experience">
<div class="experience-banner"><span data-i18n="experience">Experience.</span></div>
<div class="experience-unused-label table-head"><span data-i18n="unused_xp">Unused XP.</span></div>
<div class="experience-total-label table-head"><span data-i18n="total_xp">Total XP.</span></div>
<div class="experience-unused cp-box"><input name="attr_xp_unused" class="cp-input" type="number" autocomplete="chrome-off"/></div>
<div class="experience-total cp-box"><input name="attr_xp_total" class="cp-input" type="number" autocomplete="chrome-off"/></div>
</div>
</div>
<script type="text/worker">
/* ======================================================
BEGIN MULTIVERSAL SHEET WORKER GENERATOR
======================================================
Use this script to build sheet workers automatically.
Place this section in your script block, preferably at the end.
Fill the two data objects, multistats and multifunctions, with your details.
VERSION 1.
READMORE: https://app.roll20.net/forum/permalink/7664925/
======================================================*/
const multistats = {
luck_uses_max: {rule: 'luck_uses', attributes: ['luck', 'has_faith'], modifier: 10},
build: {rule: 'special_stat', attributes: ['str', 'for'], modifier: 1},
build_dc: {rule: 'build_dc', attributes: ['build']},
health_max: {rule: 'special_stat', attributes: ['build'], modifier: 5},
starving: {rule: 'greater_than_or_equal', attributes: ['hunger', 'for_quarter']},
emaciated: {rule: 'greater_than_or_equal', attributes: ['hunger', 'for_half']},
dead: {rule: 'greater_than_or_equal', attributes: ['hunger', 'for']},
init: {rule: 'init', values: -1, attributes: ['agi', 'luck', 'init_temp', 'encumbered', 'shaken', 'acute', 'starving', 'emaciated'], modifier: 10},
init_5: {rule: 'add', attributes: ['init'], modifier: -5},
init_10: {rule: 'add', attributes: ['init'], modifier: -10},
init_15: {rule: 'add', attributes: ['init'], modifier: -15},
salvage: {rule: 'special_stat', attributes: ['ins', 'luck'], modifier: 2},
resilience: {rule: 'special_stat', attributes: ['str', 'fort'], modifier: 2},
resolve: {rule: 'special_stat', attributes: ['int', 'ins'], modifier: 2},
immunity: {rule: 'special_stat', attributes: ['for', 'luck'], modifier: 2},
dodge: {rule: 'dodge', attributes: ['agi', 'ins', 'has_reflex'], modifier: 2},
full_dodge: {rule: 'full_dodge', attributes: ['dodge', 'str']},
parry: {rule: 'max', attributes: ['blades', 'brawl', 'clubs']},
riposte: {rule: 'max', attributes: ['blades', 'brawl', 'clubs']},
encum_max: {rule: 'add', attributes: ['build'], modifier: 200},
cp_total: {rule: 'sum', attributes: ['cp_inferior', 'cp', 'cp_superior', 'cx']},
encum: {rule: 'sum', attributes: ['armor_cp_total', 'attack_cp_total', 'gear_cp_total', 'cp_total']},
encumbered: {rule: 'encumbered', attributes: ['encum', 'encum_max', 'armor_max']}
};
const stats = ['str', 'for', 'agi', 'int', 'ins', 'cha', 'fs', 'bs',
'salvage', 'resilience', 'resolve', 'immunity', 'crafting', 'mechanics', 'science', 'medicine',
'dodge', 'full_dodge', 'parry', 'riposte'];
stats.forEach(stat => {
multistats[`${stat}_half`] = {rule: 'half', attributes: [stat]};
multistats[`${stat}_quarter`] = {rule: 'quarter', attributes: [stat]};
multistats[`${stat}_temp`] = {rule: 'toggle', values: -1, attributes: ['starving'], modifier: -10};
multistats[`${stat}_temp_check`] = {rule: 'sum', attributes: [`${stat}_temp`]}; /* just copy the temp value */
multistats[`${stat}_thresh`] = {rule: 'sum', attributes: [`${stat}`, `${stat}_temp`]};
});
const skills = {athletics: 'str', archery: 'agi', academics: 'int', crafting: 'ins' , animalken: 'cha', blades: 'fs', firearms: 'bs',
lockpick: 'agi', mechanics: 'int', drive: 'ins', charm: 'cha', brawl: 'fs' , heavyweapons: 'bs', palming: 'agi', medicine: 'int',
navigation: 'ins' , command: 'cha', clubs: 'fs', stealth: 'agi', science: 'int', perception: 'ins', interrogate: 'cha',
wrangle: 'agi', techuse: 'int', survival: 'ins', intimidate: 'cha', tracking: 'ins', xenotechuse: 'ins'};
Object.entries(skills).forEach(([skill,stat]) => {
multistats[skill] = {rule: 'prof', values: -1, attributes: [stat+'_thresh', skill+'_prof']};
multistats[skill+"_prof_desc"] = {rule: 'prof_desc', values: -1, attributes: [skill+'_prof']};
});
const prof_mods = {};
prof_mods['-'] = {mod:0,desc:'Not Proficient'};
prof_mods['p'] = {mod:0,desc:'Proficient'};
prof_mods['s'] = {mod:5,desc:'Skilled'};
prof_mods['t'] = {mod:10,desc:'Trained'};
prof_mods['m'] = {mod:15,desc:'Master'};
const multifunctions = {
sum: (arr) => arr.reduce((total, add) => total + add), // add up any number of attributes
pick_from_list: (arr) => arr[ arr[0] ], // get the value of an attribute, from a select.
half: (arr) => Math.max(Math.floor(arr[0] / 2), 1),
quarter: (arr) => Math.max(Math.floor(arr[0] / 4), 1),
build_dc: (arr) => Math.floor(arr[0]/50)-1,
add: (arr, val) => arr[0]+val,
full_dodge: (arr) => Math.floor(arr[0]+(arr[1]/2)),
max: (arr) => Math.max(...arr),
encumbered: (arr) => arr[0] > arr[1] || arr[2] >= 12 ? 'on' : '0',
greater_than_or_equal: (arr) => arr[0] >= arr[1] ? 'on' : '0',
toggle: (arr, modifier) => arr[0] === 'on' ? modifier : 0,
luck_uses: function(arr, divisor) {
let luck = arr[0];
let has_faith = arr[1];
let luck_uses = Math.floor(luck / divisor)
luck_uses = luck_uses + (has_faith > 0 ? 3 : 0);
return luck_uses;
},
dodge: function(arr, divisor) {
let agi = arr[0];
let ins = arr[1];
let has_reflex = arr[2];
let dodge = Math.floor((agi + ins) / divisor)
dodge = dodge + (has_reflex > 0 ? 10 : 0);
return dodge;
},
prof: function(arr) {
let stat_val = parseInt(arr[0]) || 0;
let prof_mod = prof_mods[arr[1]];
return stat_val + prof_mod.mod;
},
prof_desc: function(arr) {
let prof_mod = prof_mods[arr[0]];
return prof_mod.desc;
},
special_stat: function(arr, divisor) {
let sum = multifunctions.sum(arr);
let stat = Math.floor(sum / divisor);
return stat;
},
init: function(arr, divisor) {
let agi = parseInt(arr[0]) || 0;
let luck = parseInt(arr[1]) || 0;
let initTemp = parseInt(arr[2]) || 0;
let encumbered = arr[3];
let shaken = arr[4];
let acute = arr[5];
let starving = arr[6];
let emaciated = arr[7];
let init = Math.floor((agi+luck) / divisor);
init += initTemp;
init -= encumbered === 'on' ? 1 : 0;
init -= shaken === 'on' ? 3 : 0;
init -= acute === 'on' ? 5 : 0;
init -= starving === 'on' ? 2 : 0;
init -= emaciated === 'on' ? 2 : 0;
return init;
}
};
// ======================================================*/
// DO NOT EDIT BELOW THIS LINE //
// ======================================================*/
const mvlog = (title, text, color = 'green', style='font-size:12px; font-weight:normal;', headerstyle = 'font-size:13px; font-weight:bold;') => {
let titleStyle = `color:${color}; ${headerstyle} text-decoration:underline;`;
let textStyle = `color:${color}; ${style}`;
const output = `%c${title}:%c ${text}`;
console.log(output,titleStyle,textStyle);
};
// can use $ placeholder in attribute names. This converts '$_stat' to 'repeating_section_stat'
const rep = '$'; //placeholder for repeating_section_
const makeRepeatingName = (attribute, section) => attribute.startsWith(rep) ? attribute.replace(rep, `repeating_${section}_`) : attribute;
const makeRepeatingAttributes = (attributes, section) => attributes.map(a => makeRepeatingName(a, section));
const makeRepeatingID = (a, section, id) => a.replace(`repeating_${section}_`,`repeating_${section}_${id}_`);
// given array of attributes, find if any have repeating_ and return the section name
// section name will be 2nd element of name split on "_"
const findSection = (arr) => {
const s = arr.find(a => a.includes('repeating_'));
const section = (s ? s.split('_')[1] : null);
return section;
};
// check if attribute is one where a repeating section attribute depends on attributes both inside and outside the repeating section
const isMixed = (attributes, destination) => {
const some = someRepeating(attributes);
const all = allRepeating(attributes);
const repeatingdestination = destination.startsWith('repeating_');
return (some && !all && repeatingdestination);
};
const allRepeating = attributes => attributes.every(r => r.startsWith('repeating_'));
const someRepeating = attributes => attributes.some(r => r.startsWith('repeating_'));
const defaultDataType = 'array'; // might change this to object
const getData = (values, data = 'a', isnumbers = 0) => {
// only a is functional right now, so this function is redundant.
switch(data.charAt(0).toLowerCase()) {
case 'o': return values;
case 'a': return Object.values(values).map(i => 1 === isnumbers ? parseInt(i) ||0 : (0 === isnumbers ? +i || 0 : i));
case 'v': return Object.values(values)[0];
}
};
const processMax = (destination, result, max) => {
const settings = {};
if(max === 'current' || max === 'both') settings[destination] = result;
if(max === 'max' || max === 'both') settings[`${destination}_max`] = result;
return settings;
};
const isFunction = value => value && (Object.prototype.toString.call(value) === '[object Function]' || 'function' === typeof value || value instanceof Function);
const processFunction = (destination, values, section) => {
const rule = multistats[destination].rule;
const func = isFunction(rule) ? rule: multifunctions[rule]; // need to test if this works for arrow functions
const data = multistats[destination].data || defaultDataType;
const isnumbers = multistats[destination].values || 0;
const v = getData(values, data, isnumbers);
const modifier = multistats[destination].modifier || null;
const result = func(v, modifier);
mvlog(`${makeRepeatingName(destination,section).toUpperCase()} MULTIFUNCTION`, `RULE: ${rule}; VALUES: ${JSON.stringify(values)}; RESULT: ${result}`);
return result;
};
Object.keys(multistats).forEach(destination => {
// get the section name if it exists. It is needed for mixed workers
const attributes_base = multistats[destination].attributes;
const section = multistats[destination].section || findSection(attributes_base) || null;
const attributes = makeRepeatingAttributes(attributes_base, section);
const realdestination = makeRepeatingName(destination, section); // needed in case of $ in destination
mvlog(`MULTIVERSAL- ${realdestination}`,`${attributes.join(', ')}`,'green');
if (isMixed(attributes, realdestination)) {
const changes = attributes.reduce((change, step) => `${change} change:${step.replace('repeating_' + section + '_','repeating_' +section + ':')}`,
`remove:repeating_${section} sheet:opened`);
on(changes.toLowerCase(), function (event) {
const trigger = event.sourceAttribute || '';
const triggerRow = (trigger && trigger.includes('_') && trigger.length >2) ? trigger.split('_')[2] : '';
// if triggerRow, only update initial row
getSectionIDs(`repeating_${section}`, function (ids) {
const sectionAtts = attributes.filter(f => f.startsWith(`repeating_${section}`));
const fixedAtts = attributes.filter(f => !f.startsWith(`repeating_${section}`));
if (triggerRow) ids = [triggerRow];
const fieldNames = ids.reduce( (m,id) => [...m, ...(sectionAtts.map(field => makeRepeatingID(field,section,id) ))],[]);
getAttrs([...fieldNames,...fixedAtts], function (values) {
let settings = {};
const max = multistats[destination].max || 'current';
const fixedValues = fixedAtts.reduce((obj, a) => {
obj[a] = values[a];
return obj;
}, {});
ids.forEach(id => {
// first get all relevant attributes for this row of the section
const sectionValues = sectionAtts.reduce((obj, a) => {
const att = makeRepeatingID(a, section, id);
obj[att] = values[att];
return obj;}, {});
// now apply the formula for this row and add to settings
const combinedValues = {...sectionValues,...fixedValues};
const result = processFunction(destination,combinedValues, section);
const tempDestination = makeRepeatingID(realdestination,section,id);
const tempSettings = processMax(tempDestination, result, max);
settings = Object.assign({}, settings, tempSettings);
});
setAttrs(settings);
});
});
});
} else {
const changes = attributes.reduce((change, step) => `${change} change:${step.replace('repeating_' + section + '_','repeating_' +section + ':')}`,
`${someRepeating([...attributes,realdestination]) ? '' : 'sheet:opened '}${section ? `remove:repeating_${section}` : ''}`);
on(changes.toLowerCase(), function () {
getAttrs(attributes, function (values) {
const result = processFunction(destination,values, section);
const max = multistats[destination].max || 'current';
const settings = processMax(realdestination, result, max);
setAttrs(settings);
});
});
}
});
// ======================================================*/
// END Multiversal Sheet Worker Generator //
// ======================================================*/
/* ===== PARAMETERS ==========
destinations = the name of the attribute that stores the total quantity
can be a single attribute, or an array: ['total_cost', 'total_weight']
If more than one, the matching fields must be in the same order.
section = name of repeating fieldset, without the repeating_
fields = the name of the attribute field to be summed
destination and fields both can be a single attribute: 'weight'
or an array of attributes: ['weight','number','equipped']
*/
const repeatingSum = (destinations, section, fields) => {
if (!Array.isArray(destinations)) destinations = [destinations.replace(/\s/g, '').split(',')];
if (!Array.isArray(fields)) fields = [fields.replace(/\s/g, '').split(',')];
getSectionIDs(`repeating_${section}`, idArray => {
const attrArray = idArray.reduce((m, id) => [...m, ...(fields.map(field => `repeating_${section}_${id}_${field}`))], []);
getAttrs([...attrArray], 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.forEach((destination, index) => {
output[destination] = idArray.reduce((total, id) => total + getValue(section, id, fields[index]) * commonMultipliers.reduce((subtotal, mult) => subtotal * getValue(section, id, mult), 1), 0);
});
console.log('repeatingSum: destinations: "' + destinations + '"; section: "' + section + '"; fields: "' + fields + '"; output: "' + JSON.stringify(output));
setAttrs(output);
});
});
};
const repeatingPresence = (destinations, section, fields, names) => {
if (!Array.isArray(destinations)) destinations = [destinations.replace(/\s/g, '').split(',')];
if (!Array.isArray(fields)) fields = [fields.replace(/\s/g, '').split(',')];
if (!Array.isArray(names)) names = [names.replace(/\s/g, '').split(',')];
getSectionIDs(`repeating_${section}`, idArray => {
const attrArray = idArray.reduce((m, id) => [...m, ...(fields.map(field => `repeating_${section}_${id}_${field}`))], []);
getAttrs([...attrArray], v => {
const checkValue = (section, id, field, name) => v[`repeating_${section}_${id}_${field}`].trim().toLowerCase() === `${name}` ||
v[`repeating_${section}_${id}_${field}`].trim().toLowerCase() === getTranslationByKey(`${name}`) ? 1 : 0;
const output = {};
destinations.forEach((destination, index) => {
output[destination] = idArray.reduce((total, id) => total + checkValue(section, id, fields[index], names[index]), 0);
});
console.log('repeatingPresence: destinations: "' + destinations + '"; section: "' + section + '"; fields: "' + fields + '"; names: "' + names + '"; output: "' + JSON.stringify(output));
setAttrs(output);
});
});
};
/* armor point total */
on('change:repeating_armor:armor_ap remove:repeating_armor', function() {
repeatingSum("armor_max","armor","armor_ap");
});
/* armor cp total */
on('change:repeating_armor:armor_cp remove:repeating_armor', function() {
repeatingSum("armor_cp_total","armor","armor_cp");
});
/* weapon cp total */
on('change:repeating_attack:attack_cp remove:repeating_attack', function() {
repeatingSum("attack_cp_total","attack","attack_cp");
});
/* gear cp total */
on('change:repeating_gear:gear_cp remove:repeating_gear', function() {
repeatingSum("gear_cp_total","gear","gear_cp");
});
/* detect Faith special ability */
on('change:repeating_abilities:ability_name remove:repeating_abilities', function() {
repeatingPresence(["has_faith", "has_reflex"],"abilities",["ability_name", "ability_name"], ["faith", "reflex"]);
});
/* END OF REPEATING SUMS */
</script>
<rolltemplate class="sheet-rolltemplate-maxapoc">
<div class="sheet-container">
<div class="sheet-header">
{{#title}}<div class="sheet-title">{{title}}</div>{{/title}}
{{#subtitle}}<div class="sheet-subtitle">{{subtitle}}</div>{{/subtitle}}
</div>
<div class="sheet-content">
<!-- DEBUG -->
{{#debug}}
<div class="sheet-desc">DEBUG START</div>
{{#allprops() attack}}
<div>{{key}}</div><div>{{value}}</div>
{{/allprops() attack}}
<div class="sheet-desc">DEBUG END</div>
{{/debug}}
<!-- PROFICIENCY -->
{{#profdesc}}<div class="sheet-key">Proficiency</div><div class="sheet-value">{{profdesc}}</div>{{/profdesc}}
<!-- MODIFIER -->
<div class="sheet-key">Modifier</div>
{{#rollGreater() mod 0}}
<div class="sheet-value">{{mod}} Advantage(s)</div>
{{/rollGreater() mod 0}}
{{#rollTotal() mod 0}}
<div class="sheet-value">None</div>
{{/rollTotal() mod 0}}
{{#rollLess() mod 0}}
<div class="sheet-value">{{absmod}} Disadvantage(s)</div>
{{/rollLess() mod 0}}
<!-- DEGREES OF SUCCESS -->
<div class="sheet-key">Required Success</div>
{{#rollGreater() mod -2}}
<div class="sheet-value">Normal</div>
{{/rollGreater() mod -2}}
{{#rollTotal() mod -2}}
<div class="sheet-value">Great</div>
{{/rollTotal() mod -2}}
{{#rollTotal() mod -3}}
<div class="sheet-value">Amazing</div>
{{/rollTotal() mod -3}}
<!-- SUCCESS TARGETS -->
<div class="sheet-desc">Success Targets</div>
<!-- 1 DISADVANTAGE OR LESS -->
{{#rollGreater() mod -2}}
<div class="sheet-key">Normal</div><div class="sheet-value">{{firstdegree}}</div>
<div class="sheet-key">Great</div><div class="sheet-value">{{seconddegree}}</div>
{{/rollGreater() mod -2}}
<!-- 2 DISADVANTAGES -->
{{#rollTotal() mod -2}}
<div class="sheet-key">Normal</div><div class="sheet-value">N/A</div>
<div class="sheet-key">Great</div><div class="sheet-value">{{seconddegree}}</div>
{{/rollTotal() mod -2}}
<!-- 3 DISADVANTAGES -->
{{#rollTotal() mod -3}}
<div class="sheet-key">Normal</div><div class="sheet-value">N/A</div>
<div class="sheet-key">Great</div><div class="sheet-value">N/A</div>
{{/rollTotal() mod -3}}
<!-- END: SUCCESS TARGETS -->
<!-- ROLL -->
<div class="sheet-key">Amazing</div><div class="sheet-value">{{thirddegree}}</div>
<!-- ROLL OUTCOME -->
<div class="sheet-desc">Result</div>
<div class="sheet-key">Roll</div><div class="sheet-value">{{profroll}}</div>
<div class="sheet-key">Outcome</div>
<!-- 1 DISADVANTAGE OR LESS -->
{{#rollGreater() mod -2}}
{{#rollLess() profroll 2}}
<div class="sheet-value">Critical Success !!!</div>
<div class="sheet-key">Degrees of Success</div><div class="sheet-value">4</div>
{{/rollLess() profroll 2}}
{{#rollBetween() profroll 2 thirddegree}}
<div class="sheet-value">Amazing Success !!</div>
<div class="sheet-key">Degrees of Success</div><div class="sheet-value">3</div>
{{/rollBetween() profroll 2 thirddegree}}
{{#rollBetween() profroll thirddegree1 seconddegree}}
<div class="sheet-value">Great Success !</div>
<div class="sheet-key">Degrees of Success</div><div class="sheet-value">2</div>
{{/rollBetween() profroll thirddegree1 seconddegree}}
{{#rollBetween() profroll seconddegree1 firstdegree}}
<div class="sheet-value">Success</div>
<div class="sheet-key">Degrees of Success</div><div class="sheet-value">1</div>
{{/rollBetween() profroll seconddegree1 firstdegree}}
{{/rollGreater() mod -2}}
<!-- 2 DISADVANTAGES -->
{{#rollTotal() mod -2}}
{{#rollLess() profroll 2}}
<div class="sheet-value">Critical Success !!!</div>
<div class="sheet-key">Degrees of Success</div><div class="sheet-value">3</div>
{{/rollLess() profroll 2}}
{{#rollBetween() profroll 2 thirddegree}}
<div class="sheet-value">Amazing Success !!</div>
<div class="sheet-key">Degrees of Success</div><div class="sheet-value">2</div>
{{/rollBetween() profroll 2 thirddegree}}
{{#rollBetween() profroll thirddegree1 seconddegree}}
<div class="sheet-value">Great Success !</div>
<div class="sheet-key">Degrees of Success</div><div class="sheet-value">1</div>
{{/rollBetween() profroll thirddegree1 seconddegree}}
{{#rollBetween() profroll seconddegree1 firstdegree}}
<div class="sheet-value">Failure</div>
{{/rollBetween() profroll seconddegree1 firstdegree}}
{{/rollTotal() mod -2}}
<!-- 3 DISADVANTAGES -->
{{#rollTotal() mod -3}}
{{#rollLess() profroll 2}}
<div class="sheet-value">Critical Success !!!</div>
<div class="sheet-key">Degrees of Success</div><div class="sheet-value">2</div>
{{/rollLess() profroll 2}}
{{#rollBetween() profroll 2 thirddegree}}
<div class="sheet-value">Amazing Success !!</div>
<div class="sheet-key">Degrees of Success</div><div class="sheet-value">1</div>
{{/rollBetween() profroll 2 thirddegree}}
{{#rollBetween() profroll thirddegree1 seconddegree}}
<div class="sheet-value">Failure</div>
{{/rollBetween() profroll thirddegree1 seconddegree}}
{{#rollBetween() profroll seconddegree1 firstdegree}}
<div class="sheet-value">Failure</div>
{{/rollBetween() profroll seconddegree1 firstdegree}}
{{/rollTotal() mod -3}}
<!-- END: ROLL OUTCOME -->
{{#rollBetween() profroll firstdegree1 99}}
<div class="sheet-value">Failure</div>
{{/rollBetween() profroll firstdegree1 99}}
{{#rollGreater() profroll 99}}
<div class="sheet-value">Critical Failure !!!!</div>
{{/rollGreater() profroll 99}}
</div>
</div>
</rolltemplate>