Files
roll20-character-sheets/Maximum Apocalypse/MaximumApocalypse.html
T
David Maitland 2e1d6691de Changed structure to allow room for longer names & descriptions. Added
Initiative penalties to auto-calculation. Highlighting for hunger
conditions.
2020-11-22 23:04:18 +00:00

1251 lines
72 KiB
HTML

<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/dtsm12/roll20-character-sheets/Maximum-Apocalypse-v1/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"><span data-i18n="strength" class="banner">Strength.</span></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>
</div>
<div class="stat for">
<div class="stat-labels for-labels">
<div class="banner"><span data-i18n="fortitude" class="banner">Fortitude.</span></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>
</div>
<div class="stat agi">
<div class="stat-labels agi-labels">
<div class="banner"><span data-i18n="agility" class="banner">Agility.</span></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>
</div>
<div class="stat int">
<div class="stat-labels int-labels">
<div class="banner"><span data-i18n="agility" class="banner">Intelligence.</span></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>
</div>
<div class="stat ins">
<div class="stat-labels ins-labels">
<div class="banner"><span data-i18n="instinct" class="banner">Instinct.</span></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>
</div>
<div class="stat cha">
<div class="stat-labels cha-labels">
<div class="banner"><span data-i18n="charisma" class="banner">Charisma.</span></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 ha-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>
</div>
<div class="stat fs">
<div class="stat-labels fs-labels">
<div class="banner"><span data-i18n="fighting_skill" class="banner">Fighting Skill.</span></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>
</div>
<div class="stat bs">
<div class="stat-labels bs-labels">
<div class="banner"><span data-i18n="ballistic_skill" class="banner">Ballistic Skill.</span></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>
</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">
<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_half"/>
<input type="hidden" name="attr_athletics_quarter"/>
</div>
<div class="athletics-label"><label data-i18n="athletics" class="skill-label top-skill">Athletics.</label></div>
<div class="archery-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_half"/>
<input type="hidden" name="attr_archery_quarter"/>
</div>
<div class="archery-label"><label data-i18n="archery" class="skill-label top-skill">Archery.</label></div>
<div class="academics-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_half"/>
<input type="hidden" name="attr_academics_quarter"/>
</div>
<div class="academics-label"><label data-i18n="academics" class="skill-label top-skill">Academics.</label></div>
<div class="crafting-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_half"/>
<input type="hidden" name="attr_crafting_quarter"/>
</div>
<div class="crafting-label"><label data-i18n="crafting" class="skill-label top-skill">Crafting.</label></div>
<div class="animalken-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_half"/>
<input type="hidden" name="attr_animalken_quarter"/>
</div>
<div class="animalken-label"><label data-i18n="animal_ken" class="skill-label top-skill">Animal Ken.</label></div>
<div class="blades-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_half"/>
<input type="hidden" name="attr_blades_quarter"/>
</div>
<div class="blades-label"><label data-i18n="blades" class="skill-label top-skill">Blades.</label></div>
<div class="firearms-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_half"/>
<input type="hidden" name="attr_firearms_quarter"/>
</div>
<div class="firearms-label"><label data-i18n="firearms" class="skill-label top-skill">Firearms.</label></div>
<!-- SKILLS ROW 2 -->
<div class="lockpick-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_half"/>
<input type="hidden" name="attr_lockpick_quarter"/>
</div>
<div class="lockpick-label"><label data-i18n="lockpick" class="skill-label">Lockpick.</label></div>
<div class="mechanics-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_half"/>
<input type="hidden" name="attr_mechanics_quarter"/>
</div>
<div class="mechanics-label"><label data-i18n="mechanics" class="skill-label">Mechanics.</label></div>
<div class="drive-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_half"/>
<input type="hidden" name="attr_drive_quarter"/>
</div>
<div class="drive-label"><label data-i18n="drive" class="skill-label">Drive.</label></div>
<div class="charm-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_half"/>
<input type="hidden" name="attr_charm_quarter"/>
</div>
<div class="charm-label"><label data-i18n="charm" class="skill-label">Charm.</label></div>
<div class="brawl-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_half"/>
<input type="hidden" name="attr_brawl_quarter"/>
</div>
<div class="brawl-label"><label data-i18n="brawl" class="skill-label">Brawl.</label></div>
<div class="heavyweapons-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_half"/>
<input type="hidden" name="attr_heavyweapons_quarter"/>
</div>
<div class="heavyweapons-label"><label data-i18n="heavy_weapons" class="skill-label">Heavy Weapons.</label></div>
<!-- SKILLS ROW 3 -->
<div class="palming-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_half"/>
<input type="hidden" name="attr_palming_quarter"/>
</div>
<div class="palming-label"><label data-i18n="palming" class="skill-label">Palming.</label></div>
<div class="medicine-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_half"/>
<input type="hidden" name="attr_medicine_quarter"/>
</div>
<div class="medicine-label"><label data-i18n="medicine" class="skill-label">Medicine.</label></div>
<div class="navigation-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_half"/>
<input type="hidden" name="attr_navigation_quarter"/>
</div>
<div class="navigation-label"><label data-i18n="navigation" class="skill-label">Navigation.</label></div>
<div class="command-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_half"/>
<input type="hidden" name="attr_command_quarter"/>
</div>
<div class="command-label"><label data-i18n="command" class="skill-label">Command.</label></div>
<div class="clubs-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_half"/>
<input type="hidden" name="attr_clubs_quarter"/>
</div>
<div class="clubs-label"><label data-i18n="clubs" class="skill-label">Clubs.</label></div>
<!-- SKILLS ROW 4 -->
<div class="stealth-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_half"/>
<input type="hidden" name="attr_stealth_quarter"/>
</div>
<div class="stealth-label"><label data-i18n="stealth" class="skill-label">Stealth.</label></div>
<div class="science-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_half"/>
<input type="hidden" name="attr_science_quarter"/>
</div>
<div class="science-label"><label data-i18n="science" class="skill-label">Science.</label></div>
<div class="perception-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_half"/>
<input type="hidden" name="attr_perception_quarter"/>
</div>
<div class="perception-label"><label data-i18n="perception" class="skill-label">Perception.</label></div>
<div class="interrogate-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_half"/>
<input type="hidden" name="attr_interrogate_quarter"/>
</div>
<div class="interrogate-label"><label data-i18n="interrogate" class="skill-label">Interrogate.</label></div>
<!-- SKILLS ROW 5 -->
<div class="wrangle-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_half"/>
<input type="hidden" name="attr_wrangle_quarter"/>
</div>
<div class="wrangle-label"><label data-i18n="wrangle" class="skill-label">Wrangle.</label></div>
<div class="techuse-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_half"/>
<input type="hidden" name="attr_techuse_quarter"/>
</div>
<div class="techuse-label"><label data-i18n="tech_use" class="skill-label">Tech Use.</label></div>
<div class="survival-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_half"/>
<input type="hidden" name="attr_survival_quarter"/>
</div>
<div class="survival-label"><label data-i18n="survival" class="skill-label">Survival.</label></div>
<div class="intimidate-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_half"/>
<input type="hidden" name="attr_intimidate_quarter"/>
</div>
<div class="intimidate-label"><label data-i18n="intimidate" class="skill-label">Intimidate.</label></div>
<!-- SKILLS ROW 6 -->
<div class="tracking-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_half"/>
<input type="hidden" name="attr_tracking_quarter"/>
</div>
<div class="tracking-label"><label data-i18n="tracking" class="skill-label">Tracking.</label></div>
<!-- SKILLS ROW 7 -->
<div class="xenotechuse-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_half"/>
<input type="hidden" name="attr_xenotechuse_quarter"/>
</div>
<div class="xenotechuse-label"><label data-i18n="xenotech_use" class="skill-label">Xenotech Use.</label></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="luck-label"><span data-i18n="luck" class="banner">Luck.</span><span class="dark code"> (L)</span></div>
<div class="luck-triangle"></div>
<div class="luck-use-label">
<span data-i18n="use_per_game">Use Per Game.</span><br/>
<span>(</span><span data-i18n="luck">Luck.</span><span>&divide; 10)</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 &divide; 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">-5</span>
</div>
<div class="init-15-l self-center">
<span class="half">-5</span>
</div>
</div>
<div class="saves">
<div class="save-salvage stat">
<div class="stat-labels salvage-labels">
<div class="subheading"><span data-i18n="salvage" class="subheading">Salvage.</span></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 stat">
<div class="stat-labels resilience-labels">
<div class="subheading"><span data-i18n="resilience" class="subheading">Resilience.</span></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 stat">
<div class="stat-labels resolve-labels">
<div class="subheading"><span data-i18n="resolve" class="subheading">Resolve.</span></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 stat">
<div class="stat-labels immunity-labels">
<div class="subheading"><span data-i18n="immunity" class="subheading">Immunity.</span></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/>
<span class="footing">(AGI + INS) / 2</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: 'special_stat', attributes: ['luck'], 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', '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: 'special_stat', attributes: ['agi', 'ins'], 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', 'athletics', 'archery', 'academics', 'crafting' ,
'animalken', 'blades', 'firearms', 'lockpick', 'mechanics', 'drive', 'charm', 'brawl' , 'heavyweapons',
'palming', 'medicine', 'navigation' , 'command', 'clubs', 'stealth', 'science', 'perception', 'interrogate',
'wrangle', 'techuse', 'survival', 'intimidate', 'tracking', 'xenotechuse'];
stats.forEach(stat => {
multistats[`${stat}_half`] = {rule: 'half', attributes: [stat]};
multistats[`${stat}_quarter`] = {rule: 'quarter', attributes: [stat]};
});
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, skill+'_prof']};
});
const prof_mods = {};
prof_mods['-'] = 0;
prof_mods['p'] = 0;
prof_mods['s'] = 5;
prof_mods['t'] = 10;
prof_mods['m'] = 15;
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',
prof: function(arr) {
let stat_val = parseInt(arr[0]) || 0;
let prof_mod = prof_mods[arr[1]];
return stat_val + prof_mod;
},
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]);
let luck = parseInt(arr[1]);
let encumbered = arr[2];
let shaken = arr[3];
let acute = arr[4];
let starving = arr[5];
let emaciated = arr[6];
let init = Math.floor((agi+luck) / divisor);
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);
});
});
};
on('change:repeating_armor:armor_ap remove:repeating_armor', function() {
repeatingSum("armor_max","armor","armor_ap");
});
on('change:repeating_armor:armor_cp remove:repeating_armor', function() {
repeatingSum("armor_cp_total","armor","armor_cp");
});
on('change:repeating_attack:attack_cp remove:repeating_attack', function() {
repeatingSum("attack_cp_total","attack","attack_cp");
});
on('change:repeating_gear:gear_cp remove:repeating_gear', function() {
repeatingSum("gear_cp_total","gear","gear_cp");
});
/* END OF REPEATING SUMS */
</script>