mirror of
https://github.com/Nighthawk42/roll20-character-sheets.git
synced 2026-09-05 22:52:32 +00:00
Initiative penalties to auto-calculation. Highlighting for hunger conditions.
1251 lines
72 KiB
HTML
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 </div>
|
|
<div class="quarter str-q"><input class="stat-quarter" type="number" name="attr_str_quarter" readonly/></div>
|
|
<div class="quarter str-q-label"> 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 </div>
|
|
<div class="quarter for-q"><input class="stat-quarter" type="number" name="attr_for_quarter" readonly/></div>
|
|
<div class="quarter for-q-label"> 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 </div>
|
|
<div class="quarter agi-q"><input class="stat-quarter" type="number" name="attr_agi_quarter" readonly/></div>
|
|
<div class="quarter agi-q-label"> 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 </div>
|
|
<div class="quarter int-q"><input class="stat-quarter" type="number" name="attr_int_quarter" readonly/></div>
|
|
<div class="quarter int-q-label"> 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 </div>
|
|
<div class="quarter ins-q"><input class="stat-quarter" type="number" name="attr_ins_quarter" readonly/></div>
|
|
<div class="quarter ins-q-label"> 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 </div>
|
|
<div class="quarter cha-q"><input class="stat-quarter" type="number" name="attr_cha_quarter" readonly/></div>
|
|
<div class="quarter cha-q-label"> 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 </div>
|
|
<div class="quarter fs-q"><input class="stat-quarter" type="number" name="attr_fs_quarter" readonly/></div>
|
|
<div class="quarter fs-q-label"> 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 </div>
|
|
<div class="quarter bs-q"><input class="stat-quarter" type="number" name="attr_bs_quarter" readonly/></div>
|
|
<div class="quarter bs-q-label"> 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>÷ 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 ÷ 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 </div>
|
|
<div class="quarter salvage-q"><input class="stat-quarter" type="number" name="attr_salvage_quarter" readonly/></div>
|
|
<div class="quarter salvage-q-label"> 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 </div>
|
|
<div class="quarter resilience-q"><input class="stat-quarter" type="number" name="attr_resilience_quarter" readonly/></div>
|
|
<div class="quarter resilience-q-label"> 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 </div>
|
|
<div class="quarter resolve-q"><input class="stat-quarter" type="number" name="attr_resolve_quarter" readonly/></div>
|
|
<div class="quarter resolve-q-label"> 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 </div>
|
|
<div class="quarter immunity-q"><input class="stat-quarter" type="number" name="attr_immunity_quarter" readonly/></div>
|
|
<div class="quarter immunity-q-label"> 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> |