Files
roll20-character-sheets/Fallout 2d20/sheet.html
T

3027 lines
147 KiB
HTML

<input type="hidden" class="setting-npc" name="attr_setting_npc" value="0" />
<input type="hidden" class="style-vault-girl" name="attr_style_vault_girl" value="0" />
<input type="hidden" class="style-outline" name="attr_style_outline" value="0" />
<input type="hidden" class="style-pip-boy" name="attr_style_pip_boy" value="0" />
<!-- start interface -->
<div class="interface">
<div class="tabs">
<input type="hidden" class="tabstoggle" name="attr_tab" value="creation" />
<div class="tab-creation"><button type="action"
name="act_creation">S.P.E.C.I.A.L.</button></div>
<div class="tab-character"><button type="action"
name="act_character">Character</button></div>
<div class="tab-perks"><button type="action"
name="act_perks">Perks</button></div>
<div class="tab-items"><button type="action"
name="act_items">Items</button></div>
<div class="tab-npc"><button type="action"
name="act_npc">NPC</button></div>
<div class="tab-settings"><button type="action"
name="act_settings">Settings</button></div>
</div>
<input type="hidden" class="tabstoggle" name="attr_tab" value="creation" />
<!-- start creation page -->
<div class="grid col1 creation">
<div class="subtabs">
<input type="hidden" class="subtabstoggle" name="attr_subtab" value="origin" />
<div class="tab-origin"><button type="action" name="act_origin">Origin</button></div>
<div class="tab-attributes"><button type="action" name="act_attributes">Attributes</button></div>
<div class="tab-skills"><button type="action" name="act_skills">Skills</button></div>
<div class="tab-perk"><button type="action" name="act_perk">Perk</button></div>
<div class="tab-derived"><button type="action" name="act_derived">Derived</button></div>
<div class="tab-equipment"><button type="action" name="act_equipment">Equipment</button></div>
<div class="tab-finalize"><button type="action" name="act_finalize">Confirm</button></div>
</div>
<input type="hidden" class="subtabstoggle" name="attr_subtab" value="origin" />
<h1>S.P.E.C.I.A.L. Profile</h1>
<p class="vb-tip">Please answer a few questions to create your
S.P.E.C.I.A.L. profile.</p>
<div class="origin grid col1">
<h2>1. Describe your Origin
<button class="next" type="action" name="act_next">Next</button></h2>
<div class="grid col2 gap">
<div class="grid col2">
<label>Origin</label>
<select id="origin" name="attr_origin">
<option value="">Choose</option>
<option value="brotherhood">Brotherhood of Steel</option>
<option value="ghoul">Ghoul</option>
<option value="mutant">Super Mutant</option>
<option value="robot">Mister Handy</option>
<option value="survivor">Survivor</option>
<option value="vault">Vault Dweller</option>
</select>
</div>
</div>
<input type="hidden" name="attr_origin_choice"
class="origin-choice" value="" />
<!-- start origin panels -->
<div class="origin-brotherhood grid col1">
<h3>The Chain that Binds</h3>
<p>You gain one additional Tag skill, which must be one of Energy
Weapons, Science, or Repair.</p>
<div class="grid col2 gap">
<div class="grid col2">
<label>Tag skill</label>
<select id="brotherhood-tag" name="attr_brotherhood_tag">
<option value="">Choose</option>
<option value="energy_weapons">Energy Weapons</option>
<option value="science">Science</option>
<option value="repair">Repair</option>
</select>
</div>
</div>
</div>
<div class="origin-ghoul grid col1">
<h3>Necrotic Post-Human</h3>
</div>
<div class="origin-mutant grid col1">
<h3>Forced Evolution</h3>
</div>
<div class="origin-robot grid col1">
<h3>Mister Handy Robot</h3>
</div>
<div class="origin-survivor grid col1">
<p>You may choose two of the following traits, or one trait
and one additional perk. Each trait has a benefit and
may have an accompanying penalty.</p>
<div class="grid col2 gap">
<div class="grid col2">
<label>Choice</label>
<select id="survivor-choice" name="attr_survivor_choice">
<option value="">Choose</option>
<option value="trait">Two traits</option>
<option value="perk">One trait / one perk</option>
</select>
</div>
</div>
<div class="grid col2 gap">
<input type="hidden" name="attr_survivor_choice"
class="survivor-choice" value="" />
<div class="grid col2 survivor-trait1">
<label>Trait</label>
<select id="survivor-trait1" name="attr_survivor_trait1">
<option value="">Choose</option>
<option value="educated">Educated</option>
<option value="fast_shot">Fast Shot</option>
<option value="gifted">Gifted</option>
<option value="heavy_handed">Heavy Handed</option>
<option value="small_frame">Small Frame</option>
</select>
</div>
<div class="grid col2 survivor-trait2">
<label>Trait</label>
<select id="survivor-trait2" name="attr_survivor_trait2">
<option value="">Choose</option>
<option value="educated">Educated</option>
<option value="fast_shot">Fast Shot</option>
<option value="gifted">Gifted</option>
<option value="heavy_handed">Heavy Handed</option>
<option value="small_frame">Small Frame</option>
</select>
</div>
<div class="grid col2 survivor-perk">
<label>Perk</label>
<select id="survivor-perk" name="attr_survivor_perk">
<option value="">Choose</option>
<option value="action_boy_girl">Action Boy/Girl</option>
<option value="adamantine_skeleton">Adamantine Skeleton</option>
<option value="adrenalin_rush">Adrenalin Rush</option>
<option value="animal_friend">Animal Friend</option>
<option value="aquaboy_aquagirl">Aquaboy/Aquagirl</option>
<option value="armorer">Armorer</option>
<option value="awareness">Awareness</option>
<option value="barbarian">Barbarian</option>
<option value="basher">Basher</option>
<option value="better_criticals">Better Criticals</option>
<option value="big_leagues">Big Leagues</option>
<option value="black_widow_lady_killer">Black Widow/Lady Killer</option>
<option value="blacksmith">Blacksmith</option>
<option value="blitz">Blitz</option>
<option value="bloody_mess">Bloody Mess</option>
<option value="can_do">Can Do!</option>
<option value="cap_collector">Cap Collector</option>
<option value="cautious_nature">Cautious Nature</option>
<option value="center_mass">Center Mass</option>
<option value="chem_resistant">Chem Resistant</option>
<option value="chemist">Chemist</option>
<option value="commando">Commando</option>
<option value="comprehension">Comprehension</option>
<option value="concentrated_fire">Concentrated Fire</option>
<option value="daring_nature">Daring Nature</option>
<option value="demolition_expert">Demolition Expert</option>
<option value="dodger">Dodger</option>
<option value="dogmeat">Dogmeat</option>
<option value="entomologist">Entomologist</option>
<option value="fast_metabolism">Fast Metabolism</option>
<option value="faster_healing">Faster Healing</option>
<option value="finesse">Finesse</option>
<option value="fortune_finder">Fortune Finder</option>
<option value="ghost">Ghost</option>
<option value="grim_reapers_sprint">Grim Reaper's Sprint</option>
<option value="gun_fu">Gun Fu</option>
<option value="gun_nut">Gun Nut</option>
<option value="gunslinger">Gunslinger</option>
<option value="hacker">Hacker</option>
<option value="healer">Healer</option>
<option value="heave_ho">Heave Ho!</option>
<option value="hunter">Hunter</option>
<option value="infiltrator">Infiltrator</option>
<option value="inspirational">Inspirational</option>
<option value="intense_training">Intense Training</option>
<option value="iron_fist">Iron Fist</option>
<option value="junktown_jerky_vendor">Junktown Jerky Vendor</option>
<option value="jury_rigging">Jury Rigging</option>
<option value="laser_commander">Laser Commander</option>
<option value="lead_belly">Lead Belly</option>
<option value="life_giver">Life Giver</option>
<option value="light_step">Light Step</option>
<option value="master_thief">Master Thief</option>
<option value="medic">Medic</option>
<option value="meltdown">Meltdown</option>
<option value="mister_sandman">Mister Sandman</option>
<option value="moving_target">Moving Target</option>
<option value="mysterious_stranger">Mysterious Stranger</option>
<option value="nerd_rage">Nerd Rage</option>
<option value="night_person">Night Person</option>
<option value="ninja">Ninja</option>
<option value="nuclear_physicist">Nuclear Physicist</option>
<option value="pain_train">Pain Train</option>
<option value="paralyzing_palm">Paralyzing Palm</option>
<option value="party_boy_party_girl">Party Boy/Party Girl</option>
<option value="pathfinder">Pathfinder</option>
<option value="pharma_farma">Pharma Farma</option>
<option value="pickpocket">Pickpocket</option>
<option value="piercing_strike">Piercing Strike</option>
<option value="pyromaniac">Pyromaniac</option>
<option value="quick_draw">Quick Draw</option>
<option value="quick_hands">Quick Hands</option>
<option value="rad_resistance">Rad Resistance</option>
<option value="refractor">Refractor</option>
<option value="ricochet">Ricochet</option>
<option value="rifleman">Rifleman</option>
<option value="robotics_expert">Robotics Expert</option>
<option value="science">Science!</option>
<option value="scoundrel">Scoundrel</option>
<option value="scrapper">Scrapper</option>
<option value="scrounger">Scrounger</option>
<option value="shotgun_surgeon">Shotgun Surgeon</option>
<option value="skilled">Skilled</option>
<option value="size_matters">Size Matters</option>
<option value="slayer">Slayer</option>
<option value="smooth_talker">Smooth Talker</option>
<option value="snakeater">Snakeater</option>
<option value="sniper">Sniper</option>
<option value="solar_powered">Solar Powered</option>
<option value="steady_aim">Steady Aim</option>
<option value="strong_back">Strong Back</option>
<option value="tag">Tag!</option>
<option value="terrifying_presence">Terrifying Presence</option>
<option value="toughness">Toughness</option>
</select>
</div>
</div>
<input type="hidden" name="attr_survivor_choice"
class="survivor-choice" value="" />
<input class="survivor-trait1" type="hidden"
name="attr_survivor_trait1" value="" />
<input class="survivor-trait2" type="hidden"
name="attr_survivor_trait2" value="" />
<div class="survivor-educated grid col1">
<h3>Educated</h3>
<p>You have one additional tag skill.</p>
<div class="grid col2 gap">
<div class="grid col2">
<label>Tag skill</label>
<select id="survivor-tag" name="attr_survivor_tag">
<option value="">Choose</option>
<option value="athletics">Athletics</option>
<option value="barter">Barter</option>
<option value="big_guns">Big Guns</option>
<option value="energy_weapons">Energy Weapons</option>
<option value="explosives">Explosives</option>
<option value="lockpick">Lockpick</option>
<option value="medicine">Medicine</option>
<option value="melee_weapons">Melee Weapons</option>
<option value="pilot">Pilot</option>
<option value="repair">Repair</option>
<option value="science">Science</option>
<option value="small_guns">Small Guns</option>
<option value="sneak">Sneak</option>
<option value="speech">Speech</option>
<option value="survival">Survival</option>
<option value="throwing">Throwing</option>
<option value="unarmed">Unarmed</option>
</select>
</div>
</div>
</div>
<div class="survivor-fastshot grid col1">
<h3>Fast shot</h3>
</div>
<div class="survivor-gifted grid col1">
<h3>Gifted</h3>
<p>Choose two S.P.E.C.I.A.L.
attributes and increase them by +1 each.</p>
<div class="grid col2 gap">
<div class="grid col2">
<label>Attribute</label>
<select id="survivor-attr1" name="attr_survivor_attr1">
<option value="">Choose</option>
<option value="strength">Strength</option>
<option value="perception">Perception</option>
<option value="endurance">Endurance</option>
<option value="charisma">Charisma</option>
<option value="intelligence">Intelligence</option>
<option value="agility">Agility</option>
<option value="luck">Luck</option>
</select>
</div>
<div class="grid col2">
<label>Attribute</label>
<select id="survivor-attr2" name="attr_survivor_attr2">
<option value="">Choose</option>
<option value="strength">Strength</option>
<option value="perception">Perception</option>
<option value="endurance">Endurance</option>
<option value="charisma">Charisma</option>
<option value="intelligence">Intelligence</option>
<option value="agility">Agility</option>
<option value="luck">Luck</option>
</select>
</div>
</div>
</div>
<div class="survivor-heavy grid col1">
<h3>Heavy Handed</h3>
</div>
<div class="survivor-small grid col1">
<h3>Small Frame</h3>
</div>
</div>
<div class="origin-vault grid col1">
<h3>Vault Kid</h3>
<div class="grid col2 gap">
<div class="grid col2">
<label>Tag skill</label>
<select id="vault-tag" name="attr_vault_tag">
<option value="">Choose</option>
<option value="athletics">Athletics</option>
<option value="barter">Barter</option>
<option value="big_guns">Big Guns</option>
<option value="energy_weapons">Energy Weapons</option>
<option value="explosives">Explosives</option>
<option value="lockpick">Lockpick</option>
<option value="medicine">Medicine</option>
<option value="melee_weapons">Melee Weapons</option>
<option value="pilot">Pilot</option>
<option value="repair">Repair</option>
<option value="science">Science</option>
<option value="small_guns">Small Guns</option>
<option value="sneak">Sneak</option>
<option value="speech">Speech</option>
<option value="survival">Survival</option>
<option value="throwing">Throwing</option>
<option value="unarmed">Unarmed</option>
</select>
</div>
</div>
</div>
<!-- end origin panels -->
</div>
<div class="attributes grid col1">
<h2>2. Describe your S.P.E.C.I.A.L. attributes
<button class="prev" type="action" name="act_prev">Previous</button>
<button class="next" type="action" name="act_next">Next</button></h2>
<div class="grid col1">
<div class="grid col2 gap">
<div class="grid col2">
<label>Attribute Points</label>
<input type="hidden" name="attr_attribute_points"
value="5" />
<span class="input" name="attr_attribute_points"></span>
</div>
</div>
<div class="grid col2 strength">
<label>Strength</label>
<span class="input">
<input type="hidden" class="attribute-value"
name="attr_strength" value="5" />
<button type="action" name="act_strength4"
class="value-4">4</button>
<button type="action" name="act_strength5"
class="value-5">5</button>
<button type="action" name="act_strength6"
class="value-6">6</button>
<button type="action" name="act_strength7"
class="value-7">7</button>
<button type="action" name="act_strength8"
class="value-8">8</button>
<button type="action" name="act_strength9"
class="value-9">9</button>
<button type="action" name="act_strength10"
class="value-10">10</button>
<input type="hidden" name="attr_strength_mod"
value="0" />
(+<span name="attr_strength_mod"></span>)
<input type="hidden" name="attr_strength_total"
value="5" />
<span class="total" name="attr_strength_total"></span>
</span>
</div>
<div class="grid col2 perception">
<label>Perception</label>
<span class="input">
<input type="hidden" class="attribute-value"
name="attr_perception" value="5" />
<button type="action" name="act_perception4"
class="value-4">4</button>
<button type="action" name="act_perception5"
class="value-5">5</button>
<button type="action" name="act_perception6"
class="value-6">6</button>
<button type="action" name="act_perception7"
class="value-7">7</button>
<button type="action" name="act_perception8"
class="value-8">8</button>
<button type="action" name="act_perception9"
class="value-9">9</button>
<button type="action" name="act_perception10"
class="value-10">10</button>
<input type="hidden" name="attr_perception_mod"
value="0" />
(+<span name="attr_perception_mod"></span>)
<input type="hidden" name="attr_perception_total"
value="5" />
<span class="total" name="attr_perception_total"></span>
</span>
</div>
<div class="grid col2 endurance">
<label>Endurance</label>
<span class="input">
<input type="hidden" class="attribute-value"
name="attr_endurance" value="5" />
<button type="action" name="act_endurance4"
class="value-4">4</button>
<button type="action" name="act_endurance5"
class="value-5">5</button>
<button type="action" name="act_endurance6"
class="value-6">6</button>
<button type="action" name="act_endurance7"
class="value-7">7</button>
<button type="action" name="act_endurance8"
class="value-8">8</button>
<button type="action" name="act_endurance9"
class="value-9">9</button>
<button type="action" name="act_endurance10"
class="value-10">10</button>
<input type="hidden" name="attr_endurance_mod"
value="0" />
(+<span name="attr_endurance_mod"></span>)
<input type="hidden" name="attr_endurance_total"
value="5" />
<span class="total" name="attr_endurance_total"></span>
</span>
</div>
<div class="grid col2 charisma">
<label>Charisma</label>
<span class="input">
<input type="hidden" name="attr_origin_choice"
class="origin-choice" value="" />
<input type="hidden" class="attribute-value"
name="attr_charisma" value="5" />
<button type="action" name="act_charisma4"
class="value-4">4</button>
<button type="action" name="act_charisma5"
class="value-5">5</button>
<button type="action" name="act_charisma6"
class="value-6">6</button>
<button type="action" name="act_charisma7"
class="value-7">7</button>
<button type="action" name="act_charisma8"
class="value-8">8</button>
<button type="action" name="act_charisma9"
class="value-9">9</button>
<button type="action" name="act_charisma10"
class="value-10">10</button>
<input type="hidden" name="attr_charisma_mod"
value="0" />
(+<span name="attr_charisma_mod"></span>)
<input type="hidden" name="attr_charisma_total"
value="5" />
<span class="total" name="attr_charisma_total"></span>
</span>
</div>
<div class="grid col2 intelligence">
<label>Intelligence</label>
<span class="input">
<input type="hidden" name="attr_origin_choice"
class="origin-choice" value="" />
<input type="hidden" class="attribute-value"
name="attr_intelligence" value="5" />
<button type="action" name="act_intelligence4"
class="value-4">4</button>
<button type="action" name="act_intelligence5"
class="value-5">5</button>
<button type="action" name="act_intelligence6"
class="value-6">6</button>
<button type="action" name="act_intelligence7"
class="value-7">7</button>
<button type="action" name="act_intelligence8"
class="value-8">8</button>
<button type="action" name="act_intelligence9"
class="value-9">9</button>
<button type="action" name="act_intelligence10"
class="value-10">10</button>
<input type="hidden" name="attr_intelligence_mod"
value="0" />
(+<span name="attr_intelligence_mod"></span>)
<input type="hidden" name="attr_intelligence_total"
value="5" />
<span class="total" name="attr_intelligence_total"></span>
</span>
</div>
<div class="grid col2 agility">
<label>Agility</label>
<span class="input">
<input type="hidden" class="attribute-value"
name="attr_agility" value="5" />
<button type="action" name="act_agility4"
class="value-4">4</button>
<button type="action" name="act_agility5"
class="value-5">5</button>
<button type="action" name="act_agility6"
class="value-6">6</button>
<button type="action" name="act_agility7"
class="value-7">7</button>
<button type="action" name="act_agility8"
class="value-8">8</button>
<button type="action" name="act_agility9"
class="value-9">9</button>
<button type="action" name="act_agility10"
class="value-10">10</button>
<input type="hidden" name="attr_agility_mod"
value="0" />
(+<span name="attr_agility_mod"></span>)
<input type="hidden" name="attr_agility_total"
value="5" />
<span class="total" name="attr_agility_total"></span>
</span>
</div>
<div class="grid col2 luck">
<label>Luck</label>
<span class="input">
<input type="hidden" class="attribute-value"
name="attr_luck" value="5" />
<button type="action" name="act_luck4"
class="value-4">4</button>
<button type="action" name="act_luck5"
class="value-5">5</button>
<button type="action" name="act_luck6"
class="value-6">6</button>
<button type="action" name="act_luck7"
class="value-7">7</button>
<button type="action" name="act_luck8"
class="value-8">8</button>
<button type="action" name="act_luck9"
class="value-9">9</button>
<button type="action" name="act_luck10"
class="value-10">10</button>
<input type="hidden" name="attr_luck_mod"
value="0" />
(+<span name="attr_luck_mod"></span>)
<input type="hidden" name="attr_luck_total"
value="5" />
<input type="hidden" name="attr_luck_total_max"
value="5" />
<span class="total" name="attr_luck_total_max"></span>
</span>
</div>
</div>
</div>
<div class="skills grid col1">
<h2>3. Indicate which skills you possess
<button class="prev" type="action" name="act_prev">Previous</button>
<button class="next" type="action" name="act_next">Next</button></h2>
<div class="grid col2 gap">
<div class="grid col2">
<label>Tag skill</label>
<select id="skills-tag1" name="attr_skills_tag1">
<option value="">Choose</option>
<option value="athletics">Athletics</option>
<option value="barter">Barter</option>
<option value="big_guns">Big Guns</option>
<option value="energy_weapons">Energy Weapons</option>
<option value="explosives">Explosives</option>
<option value="lockpick">Lockpick</option>
<option value="medicine">Medicine</option>
<option value="melee_weapons">Melee Weapons</option>
<option value="pilot">Pilot</option>
<option value="repair">Repair</option>
<option value="science">Science</option>
<option value="small_guns">Small Guns</option>
<option value="sneak">Sneak</option>
<option value="speech">Speech</option>
<option value="survival">Survival</option>
<option value="throwing">Throwing</option>
<option value="unarmed">Unarmed</option>
</select>
</div>
<div class="grid col2">
<label>Tag skill</label>
<select id="skills-tag2" name="attr_skills_tag2">
<option value="">Choose</option>
<option value="athletics">Athletics</option>
<option value="barter">Barter</option>
<option value="big_guns">Big Guns</option>
<option value="energy_weapons">Energy Weapons</option>
<option value="explosives">Explosives</option>
<option value="lockpick">Lockpick</option>
<option value="medicine">Medicine</option>
<option value="melee_weapons">Melee Weapons</option>
<option value="pilot">Pilot</option>
<option value="repair">Repair</option>
<option value="science">Science</option>
<option value="small_guns">Small Guns</option>
<option value="sneak">Sneak</option>
<option value="speech">Speech</option>
<option value="survival">Survival</option>
<option value="throwing">Throwing</option>
<option value="unarmed">Unarmed</option>
</select>
</div>
<div class="grid col2">
<label>Tag skill</label>
<select id="skills-tag3" name="attr_skills_tag3">
<option value="">Choose</option>
<option value="athletics">Athletics</option>
<option value="barter">Barter</option>
<option value="big_guns">Big Guns</option>
<option value="energy_weapons">Energy Weapons</option>
<option value="explosives">Explosives</option>
<option value="lockpick">Lockpick</option>
<option value="medicine">Medicine</option>
<option value="melee_weapons">Melee Weapons</option>
<option value="pilot">Pilot</option>
<option value="repair">Repair</option>
<option value="science">Science</option>
<option value="small_guns">Small Guns</option>
<option value="sneak">Sneak</option>
<option value="speech">Speech</option>
<option value="survival">Survival</option>
<option value="throwing">Throwing</option>
<option value="unarmed">Unarmed</option>
</select>
</div>
<div class="grid col2">
<label>Skill Points</label>
<input type="hidden" name="attr_skill_points"
value="5" />
<span class="input" name="attr_skill_points"></span>
</div>
<div class="skills-grid">
<div class="header">Name</div>
<div class="header">Tag</div>
<div class="header">Points</div>
<div class="header">Rank</div>
<div><label>Athletics</label> [STR]</div>
<div><input type="hidden"
name="attr_athletics_tag" value=""
class="tag-skill" />
<span class="tag">yes</span></div>
<div><input type="number" id="athletics"
name="attr_athletics" value="" min="0"
max="6" /></div>
<div><input type="hidden"
name="attr_athletics_total" value="" />
<span name="attr_athletics_total"></span></div>
<div><label>Barter</label> [CHA]</div>
<div><input type="hidden"
name="attr_barter_tag" value=""
class="tag-skill" />
<span class="tag">yes</span></div>
<div><input type="number" id="barter"
name="attr_barter" value="" min="0"
max="6" /></div>
<div><input type="hidden"
name="attr_barter_total" value="" />
<span name="attr_barter_total"></span></div>
<div><label>Big Guns</label> [END]</div>
<div><input type="hidden"
name="attr_big_guns_tag" value=""
class="tag-skill" />
<span class="tag">yes</span></div>
<div><input type="number" id="big-guns"
name="attr_big_guns" value="" min="0"
max="6" /></div>
<div><input type="hidden"
name="attr_big_guns_total" value="" />
<span name="attr_big_guns_total"></span></div>
<div><label>Energy Weapons</label> [PER]</div>
<div><input type="hidden"
name="attr_energy_weapons_tag" value=""
class="tag-skill" />
<span class="tag">yes</span></div>
<div><input type="number" id="energy-weapons"
name="attr_energy_weapons" value="" min="0"
max="6" /></div>
<div><input type="hidden"
name="attr_energy_weapons_total" value="" />
<span name="attr_energy_weapons_total"></span></div>
<div><label>Explosives</label> [PER]</div>
<div><input type="hidden"
name="attr_explosives_tag" value=""
class="tag-skill" />
<span class="tag">yes</span></div>
<div><input type="number" id="explosives"
name="attr_explosives" value="" min="0"
max="6" /></div>
<div><input type="hidden"
name="attr_explosives_total" value="" />
<span name="attr_explosives_total"></span></div>
<div><label>Lockpick</label> [PER]</div>
<div><input type="hidden"
name="attr_lockpick_tag" value=""
class="tag-skill" />
<span class="tag">yes</span></div>
<div><input type="number" id="lockpick"
name="attr_lockpick" value="" min="0"
max="6" /></div>
<div><input type="hidden"
name="attr_lockpick_total" value="" />
<span name="attr_lockpick_total"></span></div>
<div><label>Medicine</label> [INT]</div>
<div><input type="hidden"
name="attr_medicine_tag" value=""
class="tag-skill" />
<span class="tag">yes</span></div>
<div><input type="number" id="medicine"
name="attr_medicine" value="" min="0"
max="6" /></div>
<div><input type="hidden"
name="attr_medicine_total" value="" />
<span name="attr_medicine_total"></span></div>
<div><label>Melee Weapons</label> [STR]</div>
<div><input type="hidden"
name="attr_melee_weapons_tag" value=""
class="tag-skill" />
<span class="tag">yes</span></div>
<div><input type="number" id="melee-weapons"
name="attr_melee_weapons" value="" min="0"
max="6" /></div>
<div><input type="hidden"
name="attr_melee_weapons_total" value="" />
<span name="attr_melee_weapons_total"></span></div>
<div><label>Pilot</label> [PER]</div>
<div><input type="hidden"
name="attr_pilot_tag" value=""
class="tag-skill" />
<span class="tag">yes</span></div>
<div><input type="number" id="pilot"
name="attr_pilot" value="" min="0"
max="6" /></div>
<div><input type="hidden"
name="attr_pilot_total" value="" />
<span name="attr_pilot_total"></span></div>
</div>
<div class="skills-grid">
<div class="header">Name</div>
<div class="header">Tag</div>
<div class="header">Points</div>
<div class="header">Rank</div>
<div><label>Repair</label> [INT]</div>
<div><input type="hidden"
name="attr_repair_tag" value=""
class="tag-skill" />
<span class="tag">yes</span></div>
<div><input type="number" id="repair"
name="attr_repair" value="" min="0"
max="6" /></div>
<div><input type="hidden"
name="attr_repair_total" value="" />
<span name="attr_repair_total"></span></div>
<div><label>Science</label> [INT]</div>
<div><input type="hidden"
name="attr_science_tag" value=""
class="tag-skill" />
<span class="tag">yes</span></div>
<div><input type="number" id="science"
name="attr_science" value="" min="0"
max="6" /></div>
<div><input type="hidden"
name="attr_science_total" value="" />
<span name="attr_science_total"></span></div>
<div><label>Small Guns</label> [AGI]</div>
<div><input type="hidden"
name="attr_small_guns_tag" value=""
class="tag-skill" />
<span class="tag">yes</span></div>
<div><input type="number" id="small-guns"
name="attr_small_guns" value="" min="0"
max="6" /></div>
<div><input type="hidden"
name="attr_small_guns_total" value="" />
<span name="attr_small_guns_total"></span></div>
<div><label>Sneak</label> [AGI]</div>
<div><input type="hidden"
name="attr_sneak_tag" value=""
class="tag-skill" />
<span class="tag">yes</span></div>
<div><input type="number" id="sneak"
name="attr_sneak" value="" min="0"
max="6" /></div>
<div><input type="hidden"
name="attr_sneak_total" value="" />
<span name="attr_sneak_total"></span></div>
<div><label>Speech</label> [CHA]</div>
<div><input type="hidden"
name="attr_speech_tag" value=""
class="tag-skill" />
<span class="tag">yes</span></div>
<div><input type="number" id="speech"
name="attr_speech" value="" min="0"
max="6" /></div>
<div><input type="hidden"
name="attr_speech_total" value="" />
<span name="attr_speech_total"></span></div>
<div><label>Survival</label> [END]</div>
<div><input type="hidden"
name="attr_survival_tag" value=""
class="tag-skill" />
<span class="tag">yes</span></div>
<div><input type="number" id="survival"
name="attr_survival" value="" min="0"
max="6" /></div>
<div><input type="hidden"
name="attr_survival_total" value="" />
<span name="attr_survival_total"></span></div>
<div><label>Throwing</label> [AGI]</div>
<div><input type="hidden"
name="attr_throwing_tag" value=""
class="tag-skill" />
<span class="tag">yes</span></div>
<div><input type="number" id="throwing"
name="attr_throwing" value="" min="0"
max="6" /></div>
<div><input type="hidden"
name="attr_athrowing_total" value="" />
<span name="attr_throwing_total"></span></div>
<div><label>Unarmed</label> [STR]</div>
<div><input type="hidden"
name="attr_unarmed_tag" value=""
class="tag-skill" />
<span class="tag">yes</span></div>
<div><input type="number" id="unarmed"
name="attr_unarmed" value="" min="0"
max="6" /></div>
<div><input type="hidden"
name="attr_unarmed_total" value="" />
<span name="attr_unarmed_total"></span></div>
</div>
</div>
</div>
<div class="perk grid col1">
<h2>4. Indicate your first perk
<button class="prev" type="action" name="act_prev">Previous</button>
<button class="next" type="action" name="act_next">Next</button></h2>
<div class="grid col2 gap">
<div class="grid col2">
<label>Perk</label>
<select id="perks-starting" name="attr_perks_starting">
<option value="">Choose</option>
<option value="action_boy_girl">Action Boy/Girl</option>
<option value="adamantine_skeleton">Adamantine Skeleton</option>
<option value="adrenalin_rush">Adrenalin Rush</option>
<option value="animal_friend">Animal Friend</option>
<option value="aquaboy_aquagirl">Aquaboy/Aquagirl</option>
<option value="armorer">Armorer</option>
<option value="awareness">Awareness</option>
<option value="barbarian">Barbarian</option>
<option value="basher">Basher</option>
<option value="better_criticals">Better Criticals</option>
<option value="big_leagues">Big Leagues</option>
<option value="black_widow_lady_killer">Black Widow/Lady Killer</option>
<option value="blacksmith">Blacksmith</option>
<option value="blitz">Blitz</option>
<option value="bloody_mess">Bloody Mess</option>
<option value="can_do">Can Do!</option>
<option value="cap_collector">Cap Collector</option>
<option value="cautious_nature">Cautious Nature</option>
<option value="center_mass">Center Mass</option>
<option value="chem_resistant">Chem Resistant</option>
<option value="chemist">Chemist</option>
<option value="commando">Commando</option>
<option value="comprehension">Comprehension</option>
<option value="concentrated_fire">Concentrated Fire</option>
<option value="daring_nature">Daring Nature</option>
<option value="demolition_expert">Demolition Expert</option>
<option value="dodger">Dodger</option>
<option value="dogmeat">Dogmeat</option>
<option value="entomologist">Entomologist</option>
<option value="fast_metabolism">Fast Metabolism</option>
<option value="faster_healing">Faster Healing</option>
<option value="finesse">Finesse</option>
<option value="fortune_finder">Fortune Finder</option>
<option value="ghost">Ghost</option>
<option value="grim_reapers_sprint">Grim Reaper's Sprint</option>
<option value="gun_fu">Gun Fu</option>
<option value="gun_nut">Gun Nut</option>
<option value="gunslinger">Gunslinger</option>
<option value="hacker">Hacker</option>
<option value="healer">Healer</option>
<option value="heave_ho">Heave Ho!</option>
<option value="hunter">Hunter</option>
<option value="infiltrator">Infiltrator</option>
<option value="inspirational">Inspirational</option>
<option value="intense_training">Intense Training</option>
<option value="iron_fist">Iron Fist</option>
<option value="junktown_jerky_vendor">Junktown Jerky Vendor</option>
<option value="jury_rigging">Jury Rigging</option>
<option value="laser_commander">Laser Commander</option>
<option value="lead_belly">Lead Belly</option>
<option value="life_giver">Life Giver</option>
<option value="light_step">Light Step</option>
<option value="master_thief">Master Thief</option>
<option value="medic">Medic</option>
<option value="meltdown">Meltdown</option>
<option value="mister_sandman">Mister Sandman</option>
<option value="moving_target">Moving Target</option>
<option value="mysterious_stranger">Mysterious Stranger</option>
<option value="nerd_rage">Nerd Rage</option>
<option value="night_person">Night Person</option>
<option value="ninja">Ninja</option>
<option value="nuclear_physicist">Nuclear Physicist</option>
<option value="pain_train">Pain Train</option>
<option value="paralyzing_palm">Paralyzing Palm</option>
<option value="party_boy_party_girl">Party Boy/Party Girl</option>
<option value="pathfinder">Pathfinder</option>
<option value="pharma_farma">Pharma Farma</option>
<option value="pickpocket">Pickpocket</option>
<option value="piercing_strike">Piercing Strike</option>
<option value="pyromaniac">Pyromaniac</option>
<option value="quick_draw">Quick Draw</option>
<option value="quick_hands">Quick Hands</option>
<option value="rad_resistance">Rad Resistance</option>
<option value="refractor">Refractor</option>
<option value="ricochet">Ricochet</option>
<option value="rifleman">Rifleman</option>
<option value="robotics_expert">Robotics Expert</option>
<option value="science">Science!</option>
<option value="scoundrel">Scoundrel</option>
<option value="scrapper">Scrapper</option>
<option value="scrounger">Scrounger</option>
<option value="shotgun_surgeon">Shotgun Surgeon</option>
<option value="skilled">Skilled</option>
<option value="size_matters">Size Matters</option>
<option value="slayer">Slayer</option>
<option value="smooth_talker">Smooth Talker</option>
<option value="snakeater">Snakeater</option>
<option value="sniper">Sniper</option>
<option value="solar_powered">Solar Powered</option>
<option value="steady_aim">Steady Aim</option>
<option value="strong_back">Strong Back</option>
<option value="tag">Tag!</option>
<option value="terrifying_presence">Terrifying Presence</option>
<option value="toughness">Toughness</option>
</select>
</div>
</div>
</div>
<div class="derived grid col1">
<h2>5. We have calculated the following statistics
<button class="prev" type="action" name="act_prev">Previous</button>
<button class="next" type="action" name="act_next">Next</button></h2>
<div class="grid col2 gap">
<div class="grid col2">
<label>Carry Weight (lbs.)</label>
<input type="hidden" name="attr_carry_weight_max"
value="200" />
<span class="input" name="attr_carry_weight_max"></span>
<label>Base Physical Damage Resistance</label>
<input type="hidden" name="attr_base_physical_dr"
value="0" />
<span class="input" name="attr_base_physical_dr"></span>
<label>Base Energy Damage Resistance</label>
<input type="hidden" name="attr_base_energy_dr"
value="0" />
<span class="input" name="attr_base_energy_dr"></span>
<label>Radiation Damage Resistance</label>
<input type="hidden" name="attr_base_rad_dr"
value="0" />
<span class="input" name="attr_base_rad_dr"></span>
<label>Poison Damage Resistance</label>
<input type="hidden" name="attr_base_poison_dr"
value="0" />
<span class="input" name="attr_base_poison_dr"></span>
</div>
<div class="grid col2">
<label>Defense</label>
<input type="hidden" name="attr_defense"
value="1" />
<span class="input" name="attr_defense"></span>
<label>Initiative</label>
<input type="hidden" name="attr_initiative"
value="10" />
<span class="input" name="attr_initiative"></span>
<label>Health Points</label>
<input type="hidden" name="attr_hp_max"
value="10" />
<span class="input" name="attr_hp_max"></span>
<label>Melee Damage</label>
<span class="input">
<input type="hidden" name="attr_melee_damage"
value="0" class="melee-damage" />
<span>+</span>
<span name="attr_melee_damage" />
<span class="die" />
</span>
</div>
</div>
</div>
<div class="equipment grid col1">
<h2>6. Select a starting equipment package
<button class="prev" type="action" name="act_prev">Previous</button>
<button class="next" type="action" name="act_next">Next</button></h2>
<div class="grid col2 gap">
<div class="grid col2">
<input type="hidden" name="attr_origin_choice"
class="origin-choice" value="" />
<label>Origin package</label>
<select id="brotherhood-package" class="origin-brotherhood"
name="attr_brotherhood_package">
<option value="">Choose</option>
<option value="steel_initiate">Brotherhood of Steel Initiate</option>
<option value="steel_scribe">Brotherhood of Steel Scribe</option>
</select>
<select id="mutant-package" class="origin-mutant"
name="attr_mutant_package">
<option value="">Choose</option>
<option value="brute">Brute</option>
<option value="skirmisher">Skirmisher</option>
</select>
<select id="robot-package" class="origin-robot"
name="attr_robot_package">
<option value="">Choose</option>
<option value="nanny">Miss Nanny</option>
<option value="farmhand">Mister Farmhand</option>
<option value="gutsy">Mister Gutsy</option>
<option value="handy">Mister Handy</option>
<option value="nurse">Nurse Handy</option>
</select>
<select id="wastelander-package" class="origin-survivor origin-ghoul"
name="attr_wastelander_package">
<option value="">Choose</option>
<option value="mercenary">Mercenary</option>
<option value="raider">Raider</option>
<option value="settler">Settler</option>
<option value="trader">Trader</option>
<option value="wanderer">Wanderer</option>
</select>
<select id="vault-package" class="origin-vault"
name="attr_vault_package">
<option value="">Choose</option>
<option value="resident">Vault-Tec Resident</option>
<option value="security">Vault-Tec Security</option>
</select>
</div>
<div class="grid col2">
<label>Personal Trinket
<button type="action" name="act_rolltrinket">&#127922;</button></label>
<select id="personal-trinket"
name="attr_personal_trinket">
<option value="">Choose</option>
<option value="1">A gold pocket watch</option>
<option value="2">A garbled holodisk</option>
<option value="3">A brightly colored bandanna</option>
<option value="4">A silver locket</option>
<option value="5">Medal</option>
<option value="6">Potted plant</option>
<option value="7">Tickets to a pre-war event</option>
<option value="8">Wedding ring</option>
<option value="9">Pre-war party invitation</option>
<option value="10">An engraved flip lighter</option>
<option value="11">Loaded casino dice</option>
<option value="12">Id card</option>
<option value="13">Cosmetics case</option>
<option value="14">Musical Instrument</option>
<option value="15">Broken eyeglasses</option>
<option value="16">Necklace made of junk</option>
<option value="17">Pages of an unfinished story</option>
<option value="18">Overdue library book</option>
<option value="19">A postcard with an address</option>
<option value="20">A pre-war neck-tie</option>
</select>
</div>
<div class="grid col2">
<input type="hidden" name="attr_skills_tag1_name"
value="" />
<label><span name="attr_skills_tag1_name"></span></label>
<input type="hidden" name="attr_skills_tag1_package"
value="" />
<span class="input" name="attr_skills_tag1_package"></span>
</div>
<div class="grid col2">
<input type="hidden" name="attr_skills_tag2_name"
value="" />
<label><span name="attr_skills_tag2_name"></span></label>
<input type="hidden" name="attr_skills_tag2_package"
value="" />
<span class="input" name="attr_skills_tag2_package"></span>
</div>
<div class="grid col2">
<input type="hidden" name="attr_skills_tag3_name"
value="" />
<label><span name="attr_skills_tag3_name"></span></label>
<input type="hidden" name="attr_skills_tag3_package"
value="" />
<span class="input" name="attr_skills_tag3_package"></span>
</div>
<div class="grid col2">
<input type="hidden" name="attr_origin_tag_name"
class="origin-tag-name" value="" />
<label><span name="attr_origin_tag_name"></span></label>
<input type="hidden" name="attr_origin_tag_package"
value="" />
<span class="input" name="attr_origin_tag_package"></span>
</div>
</div>
</div>
<div class="finalize grid col1">
<h2>You are all done!
<button class="prev" type="action" name="act_prev">Previous</button></h2>
<p>Thank you for completing your S.P.E.C.I.A.L. profile. Feel free
to go back and edit your profile at any time. Click below to
confirm once you are satisfied.</p>
<div class="grid col2 gap confirm-button">
<button type="action" name="act_copyspecial" class="btn">&#128077;
Confirm your profile</button>
<em>This will copy your selected perks and items to the character
sheet.</em>
</div>
</div>
</div>
<!-- end creation page -->
<!-- start character page -->
<div class="grid col1 character">
<div class="grid col4-csheet gap">
<div class="grid col1 logo">
<h1>Fallout</h1>
<div role="doc-subtitle">The Roleplaying Game</div>
</div>
<div class="grid col1 nogap">
<label class="character-name">Character name</label>
<input type="text" id="character-name" name="attr_character_name"
value="" class="character-name" />
</div>
<div class="grid col2">
<label>XP earned</label>
<input type="number" id="xp" name="attr_xp" value="" />
<label>XP next level</label>
<span class="input" name="attr_xp_next_level" />
<label>Origin</label>
<input type="hidden" name="attr_origin_name" value="" />
<span class="input" name="attr_origin_name" />
</div>
<div class="grid col1 level">
<span class="header">Level</span>
<input type="hidden" name="attr_level" value="1" />
<span class="value" name="attr_level" value="1" />
</div>
</div>
<div class="grid col7 special">
<div class="grid col1 nogap strength">
<span class="header">Strength</span>
<span class="value" name="attr_strength_total" />
</div>
<div class="grid col1 nogap perception">
<span class="header">Perception</span>
<span class="value" name="attr_perception_total" />
</div>
<div class="grid col1 nogap endurance">
<span class="header">Endurance</span>
<span class="value" name="attr_endurance_total" />
</div>
<div class="grid col1 nogap charisma">
<span class="header">Charisma</span>
<span class="value" name="attr_charisma_total" />
</div>
<div class="grid col1 nogap intelligence">
<span class="header">Intelligence</span>
<span class="value" name="attr_intelligence_total" />
</div>
<div class="grid col1 nogap agility">
<span class="header">Agility</span>
<span class="value" name="attr_agility_total" />
</div>
<div class="grid col1 nogap luck">
<span class="header">Luck</span>
<span class="value" name="attr_luck_total_max" />
</div>
</div>
<div class="grid col5">
<div class="grid col2 luckpts">
<label>Luck points</label>
<input type="number" id="luck-points" name="attr_luck_total"
value="5" />
</div>
</div>
<div class="grid col2-csheet gap">
<div class="grid col1">
<h2>Skills</h2>
<div class="skills-grid-mini">
<div class="header">Name</div>
<div class="header">Tag</div>
<div class="header">Rank</div>
<div><button type="roll" name="roll_athletics_total"
value="&{template:foskill} {{name=@{character_name}}} {{attr=Strength}} {{attr_num=@{strength_total}}} {{skill=Athletics}} {{skill_num=@{athletics_total}}} {{target=[[@{strength_total}+@{athletics_total}]]}} {{dice_num=?{Number of dice|2}}} {{difficulty=?{Difficulty|1}}} {{result=[[?{Number of dice|22}d20<[[@{charisma_total}+@{athletics_total}]]sacs<1cf>20 ]]}}">
Athletics</button> [STR]</div>
<div><input type="hidden"
name="attr_athletics_tag" value=""
class="tag-skill" />
<input type="hidden" name="attr_athletics_cs"
value="1" />
<span class="tag">yes</span></div>
<div><input type="hidden"
name="attr_athletics_total" value="" />
<span name="attr_athletics_total"></span></div>
<div><button type="roll" name="roll_barter_total"
value="&{template:foskill} {{name=@{character_name}}} {{attr=Charisma}} {{attr_num=@{charisma_total}}} {{skill=Barter}} {{skill_num=@{barter_total}}} {{target=[[@{charisma_total}+@{barter_total}]]}} {{dice_num=?{Number of dice|2}}} {{difficulty=?{Difficulty|1}}} {{result=[[?{Number of dice|22}d20<[[@{charisma_total}+@{barter_total}]]sacs<1cf>20 ]]}}">
Barter</button> [CHA]</div>
<div><input type="hidden"
name="attr_barter_tag" value=""
class="tag-skill" />
<input type="hidden" name="attr_barter_cs"
value="1" />
<span class="tag">yes</span></div>
<div><input type="hidden"
name="attr_barter_total" value="" />
<span name="attr_barter_total"></span></div>
<div><button type="roll" name="roll_big_guns_total"
value="&{template:foskill} {{name=@{character_name}}} {{attr=Endurance}} {{attr_num=@{endurance_total}}} {{skill=Big Guns}} {{skill_num=@{big_guns_total}}} {{target=[[@{endurance_total}+@{big_guns_total}]]}} {{dice_num=?{Number of dice|2}}} {{difficulty=?{Difficulty|1}}} {{result=[[?{Number of dice|22}d20<[[@{charisma_total}+@{big_guns_total}]]sacs<1cf>20 ]]}}">
Big Guns</button> [END]</div>
<div><input type="hidden"
name="attr_big_guns_tag" value=""
class="tag-skill" />
<input type="hidden" name="attr_big_guns_cs"
value="1" />
<span class="tag">yes</span></div>
<div><input type="hidden"
name="attr_big_guns_total" value="" />
<span name="attr_big_guns_total"></span></div>
<div><button type="roll" name="roll_energy_weapons_total"
value="&{template:foskill} {{name=@{character_name}}} {{attr=Perception}} {{attr_num=@{perception_total}}} {{skill=Energy Weapons}} {{skill_num=@{energy_weapons_total}}} {{target=[[@{perception_total}+@{energy_weapons_total}]]}} {{dice_num=?{Number of dice|2}}} {{difficulty=?{Difficulty|1}}} {{result=[[?{Number of dice|22}d20<[[@{charisma_total}+@{energy_weapons_total}]]sacs<1cf>20 ]]}}">
Energy Weapons</button> [PER]</div>
<div><input type="hidden"
name="attr_energy_weapons_tag" value=""
class="tag-skill" />
<input type="hidden" name="attr_energy_weapons_cs"
value="1" />
<span class="tag">yes</span></div>
<div><input type="hidden"
name="attr_energy_weapons_total" value="" />
<span name="attr_energy_weapons_total"></span></div>
<div><button type="roll" name="roll_explosives_total"
value="&{template:foskill} {{name=@{character_name}}} {{attr=Perception}} {{attr_num=@{perception_total}}} {{skill=Explosives}} {{skill_num=@{explosives_total}}} {{target=[[@{perception_total}+@{explosives_total}]]}} {{dice_num=?{Number of dice|2}}} {{difficulty=?{Difficulty|1}}} {{result=[[?{Number of dice|22}d20<[[@{charisma_total}+@{explosives_total}]]sacs<1cf>20 ]]}}">
Explosives</button> [PER]</div>
<div><input type="hidden"
name="attr_explosives_tag" value=""
class="tag-skill" />
<input type="hidden" name="attr_explosives_cs"
value="1" />
<span class="tag">yes</span></div>
<div><input type="hidden"
name="attr_explosives_total" value="" />
<span name="attr_explosives_total"></span></div>
<div><button type="roll" name="roll_lockpick_total"
value="&{template:foskill} {{name=@{character_name}}} {{attr=Perception}} {{attr_num=@{perception_total}}} {{skill=Lockpick}} {{skill_num=@{lockpick_total}}} {{target=[[@{perception_total}+@{lockpick_total}]]}} {{dice_num=?{Number of dice|2}}} {{difficulty=?{Difficulty|1}}} {{result=[[?{Number of dice|22}d20<[[@{charisma_total}+@{lockpick_total}]]sacs<1cf>20 ]]}}">
Lockpick</button> [PER]</div>
<div><input type="hidden"
name="attr_lockpick_tag" value=""
class="tag-skill" />
<input type="hidden" name="attr_lockpick_cs"
value="1" />
<span class="tag">yes</span></div>
<div><input type="hidden"
name="attr_lockpick_total" value="" />
<span name="attr_lockpick_total"></span></div>
<div><button type="roll" name="roll_medicine_total"
value="&{template:foskill} {{name=@{character_name}}} {{attr=Intelligence}} {{attr_num=@{intelligence_total}}} {{skill=Medicine}} {{skill_num=@{medicine_total}}} {{target=[[@{intelligence_total}+@{medicine_total}]]}} {{dice_num=?{Number of dice|2}}} {{difficulty=?{Difficulty|1}}} {{result=[[?{Number of dice|22}d20<[[@{charisma_total}+@{medicine_total}]]sacs<1cf>20 ]]}}">
Medicine</button> [INT]</div>
<div><input type="hidden"
name="attr_medicine_tag" value=""
class="tag-skill" />
<input type="hidden" name="attr_medicine_cs"
value="1" />
<span class="tag">yes</span></div>
<div><input type="hidden"
name="attr_medicine_total" value="" />
<span name="attr_medicine_total"></span></div>
<div><button type="roll" name="roll_melee_weapons_total"
value="&{template:foskill} {{name=@{character_name}}} {{attr=Strength}} {{attr_num=@{strength_total}}} {{skill=Melee Weapons}} {{skill_num=@{melee_weapons_total}}} {{target=[[@{strength_total}+@{melee_weapons_total}]]}} {{dice_num=?{Number of dice|2}}} {{difficulty=?{Difficulty|1}}} {{result=[[?{Number of dice|22}d20<[[@{charisma_total}+@{melee_weapons_total}]]sacs<1cf>20 ]]}}">
Melee Weapons</button> [STR]</div>
<div><input type="hidden"
name="attr_melee_weapons_tag" value=""
class="tag-skill" />
<input type="hidden" name="attr_melee_weapons_cs"
value="1" />
<span class="tag">yes</span></div>
<div><input type="hidden"
name="attr_melee_weapons_total" value="" />
<span name="attr_melee_weapons_total"></span></div>
<div><button type="roll" name="roll_pilot_total"
value="&{template:foskill} {{name=@{character_name}}} {{attr=Perception}} {{attr_num=@{perception_total}}} {{skill=Pilot}} {{skill_num=@{pilot_total}}} {{target=[[@{perception_total}+@{pilot_total}]]}} {{dice_num=?{Number of dice|2}}} {{difficulty=?{Difficulty|1}}} {{result=[[?{Number of dice|22}d20<[[@{charisma_total}+@{pilot_total}]]sacs<1cf>20 ]]}}">
Pilot</button> [PER]</div>
<div><input type="hidden"
name="attr_pilot_tag" value=""
class="tag-skill" />
<input type="hidden" name="attr_pilot_cs"
value="1" />
<span class="tag">yes</span></div>
<div><input type="hidden"
name="attr_pilot_total" value="" />
<span name="attr_pilot_total"></span></div>
<div><button type="roll" name="roll_repair_total"
value="&{template:foskill} {{name=@{character_name}}} {{attr=Intelligence}} {{attr_num=@{intelligence_total}}} {{skill=Repair}} {{skill_num=@{repair_total}}} {{target=[[@{intelligence_total}+@{repair_total}]]}} {{dice_num=?{Number of dice|2}}} {{difficulty=?{Difficulty|1}}} {{result=[[?{Number of dice|22}d20<[[@{charisma_total}+@{repair_total}]]sacs<1cf>20 ]]}}">
Repair</button> [INT]</div>
<div><input type="hidden"
name="attr_repair_tag" value=""
class="tag-skill" />
<input type="hidden" name="attr_repair_cs"
value="1" />
<span class="tag">yes</span></div>
<div><input type="hidden"
name="attr_repair_total" value="" />
<span name="attr_repair_total"></span></div>
<div><button type="roll" name="roll_science_total"
value="&{template:foskill} {{name=@{character_name}}} {{attr=Intelligence}} {{attr_num=@{intelligence_total}}} {{skill=Science}} {{skill_num=@{science_total}}} {{target=[[@{intelligence_total}+@{science_total}]]}} {{dice_num=?{Number of dice|2}}} {{difficulty=?{Difficulty|1}}} {{result=[[?{Number of dice|22}d20<[[@{charisma_total}+@{science_total}]]sacs<1cf>20 ]]}}">
Science</button> [INT]</div>
<div><input type="hidden"
name="attr_science_tag" value=""
class="tag-skill" />
<input type="hidden" name="attr_science_cs"
value="1" />
<span class="tag">yes</span></div>
<div><input type="hidden"
name="attr_science_total" value="" />
<span name="attr_science_total"></span></div>
<div><button type="roll" name="roll_small_guns_total"
value="&{template:foskill} {{name=@{character_name}}} {{attr=Agility}} {{attr_num=@{agility_total}}} {{skill=Small Guns}} {{skill_num=@{small_guns_total}}} {{target=[[@{agility_total}+@{small_guns_total}]]}} {{dice_num=?{Number of dice|2}}} {{difficulty=?{Difficulty|1}}} {{result=[[?{Number of dice|22}d20<[[@{charisma_total}+@{small_guns_total}]]sacs<1cf>20 ]]}}">
Small Guns</button> [AGI]</div>
<div><input type="hidden"
name="attr_small_guns_tag" value=""
class="tag-skill" />
<input type="hidden" name="attr_small_guns_cs"
value="1" />
<span class="tag">yes</span></div>
<div><input type="hidden"
name="attr_small_guns_total" value="" />
<span name="attr_small_guns_total"></span></div>
<div><button type="roll" name="roll_sneak_total"
value="&{template:foskill} {{name=@{character_name}}} {{attr=Agility}} {{attr_num=@{agility_total}}} {{skill=Sneak}} {{skill_num=@{sneak_total}}} {{target=[[@{agility_total}+@{sneak_total}]]}} {{dice_num=?{Number of dice|2}}} {{difficulty=?{Difficulty|1}}} {{result=[[?{Number of dice|22}d20<[[@{charisma_total}+@{sneak_total}]]sacs<1cf>20 ]]}}">
Sneak</button> [AGI]</div>
<div><input type="hidden"
name="attr_sneak_tag" value=""
class="tag-skill" />
<input type="hidden" name="attr_sneak_cs"
value="1" />
<span class="tag">yes</span></div>
<div><input type="hidden"
name="attr_sneak_total" value="" />
<span name="attr_sneak_total"></span></div>
<div><button type="roll" name="roll_speech_total"
value="&{template:foskill} {{name=@{character_name}}} {{attr=Charisma}} {{attr_num=@{charisma_total}}} {{skill=Speech}} {{skill_num=@{speech_total}}} {{target=[[@{charisma_total}+@{speech_total}]]}} {{dice_num=?{Number of dice|2}}} {{difficulty=?{Difficulty|1}}} {{result=[[?{Number of dice|22}d20<[[@{charisma_total}+@{speech_total}]]sacs<1cf>20 ]]}}">
Speech</button> [CHA]</div>
<div><input type="hidden"
name="attr_speech_tag" value=""
class="tag-skill" />
<input type="hidden" name="attr_speech_cs"
value="1" />
<span class="tag">yes</span></div>
<div><input type="hidden"
name="attr_speech_total" value="" />
<span name="attr_speech_total"></span></div>
<div><button type="roll" name="roll_survival_total"
value="&{template:foskill} {{name=@{character_name}}} {{attr=Endurance}} {{attr_num=@{endurance_total}}} {{skill=Survival}} {{skill_num=@{survival_total}}} {{target=[[@{endurance_total}+@{survival_total}]]}} {{dice_num=?{Number of dice|2}}} {{difficulty=?{Difficulty|1}}} {{result=[[?{Number of dice|22}d20<[[@{charisma_total}+@{survival_total}]]sacs<1cf>20 ]]}}">
Survival</button> [END]</div>
<div><input type="hidden"
name="attr_survival_tag" value=""
class="tag-skill" />
<input type="hidden" name="attr_survival_cs"
value="1" />
<span class="tag">yes</span></div>
<div><input type="hidden"
name="attr_survival_total" value="" />
<span name="attr_survival_total"></span></div>
<div><button type="roll" name="roll_throwing_total"
value="&{template:foskill} {{name=@{character_name}}} {{attr=Agility}} {{attr_num=@{agility_total}}} {{skill=Throwing}} {{skill_num=@{throwing_total}}} {{target=[[@{agility_total}+@{throwing_total}]]}} {{dice_num=?{Number of dice|2}}} {{difficulty=?{Difficulty|1}}} {{result=[[?{Number of dice|22}d20<[[@{charisma_total}+@{throwing_total}]]sacs<1cf>20 ]]}}">
Throwing</button> [AGI]</div>
<div><input type="hidden"
name="attr_throwing_tag" value=""
class="tag-skill" />
<input type="hidden" name="attr_throwing_cs"
value="1" />
<span class="tag">yes</span></div>
<div><input type="hidden"
name="attr_throwing_total" value="" />
<span name="attr_throwing_total"></span></div>
<div><button type="roll" name="roll_unarmed_total"
value="&{template:foskill} {{name=@{character_name}}} {{attr=Strength}} {{attr_num=@{strength_total}}} {{skill=Unarmed}} {{skill_num=@{unarmed_total}}} {{target=[[@{strength_total}+@{unarmed_total}]]}} {{dice_num=?{Number of dice|2}}} {{difficulty=?{Difficulty|1}}} {{result=[[?{Number of dice|22}d20<[[@{charisma_total}+@{unarmed_total}]]sacs<1cf>20 ]]}}">
Unarmed</button> [STR]</div>
<div><input type="hidden"
name="attr_unarmed_tag" value=""
class="tag-skill" />
<input type="hidden" name="attr_unarmed_cs"
value="1" />
<span class="tag">yes</span></div>
<div><input type="hidden"
name="attr_unarmed_total" value="" />
<span name="attr_unarmed_total"></span></div>
</div>
</div>
<div class="grid col1 combat">
<h2>Combat</h2>
<div class="grid col3 gap">
<div class="grid col7-meleedmg">
<label>Melee damage</label>
<span name="attr_melee_damage" />
<span>+</span>
<input type="number" name="attr_melee_damage_mod" value="" />
<span>=</span>
<input type="hidden" name="attr_melee_damage_total"
value="0" />
<span name="attr_melee_damage_total" />
<button type="roll" name="roll_meleedmg"
value="&{template:focd} {{name=@{character_name}}} {{dice_num=[[@{melee_damage_total}]]}} {{roll=[[1d6]]}} {{continue=[Roll another die](~meleedmg)}}" />
</div>
<div class="grid col7-defense">
<label>Defense</label>
<span name="attr_defense" />
<span>+</span>
<input type="number" name="attr_defense_mod" value="" />
<span>=</span>
<input type="hidden" name="attr_defense_total"
value="1" />
<span name="attr_defense_total" />
<button type="roll" name="roll_defense"
value="&{template:foattribute} {{name=@{character_name}}} {{attr=Defense}} {{attr_num=@{defense_total}}}" />
</div>
<div class="grid col7-initiative">
<label>Initiative</label>
<span name="attr_initiative" />
<span>+</span>
<input type="number" name="attr_initiative_mod" value="" />
<span>=</span>
<input type="hidden" name="attr_initiative_total"
value="10" />
<span name="attr_initiative_total" />
<button type="roll" name="roll_initiative"
value="&{template:foattribute} {{name=@{character_name}}} {{attr=Initiative}} {{attr_num=[[@{initiative_total} &{tracker}]]}}" />
</div>
</div>
<input type="hidden" name="attr_origin_choice"
class="origin-choice" value="" />
<div class="grid col3 locations gap">
<div class="grid col6-dr gap">
<div class="header">Base Damage Resistance</div>
<label class="physical-dr">Physical Damage Resistance</label>
<span name="attr_base_physical_dr" />
<span>+</span>
<input type="number" name="attr_base_physical_dr_mod" value="" />
<span>=</span>
<input type="hidden" name="attr_base_physical_dr_total"
value="0" />
<span name="attr_base_physical_dr_total" />
<label class="energy-dr">Energy Damage Resistance</label>
<span name="attr_base_energy_dr" />
<span>+</span>
<input type="number" name="attr_base_energy_dr_mod" value="" />
<span>=</span>
<input type="hidden" name="attr_base_energy_dr_total"
value="0" />
<span name="attr_base_energy_dr_total" />
<label class="rad-dr">Radiation Damage Resistance</label>
<input type="hidden" class="base-dr" name="attr_base_rad_dr" />
<span name="attr_base_rad_dr" />
<span>+</span>
<input type="number" name="attr_base_rad_dr_mod" value="" />
<span>=</span>
<input type="hidden" name="attr_base_rad_dr_total"
value="0" />
<span name="attr_base_rad_dr_total" />
<label class="poison-dr">Poison Damage Resistance</label>
<input type="hidden" class="base-dr" name="attr_base_poison_dr" />
<span name="attr_base_poison_dr" />
<span>+</span>
<input type="number" name="attr_base_poison_dr_mod" value="" />
<span>=</span>
<input type="hidden" name="attr_base_poison_dr_total"
value="0" />
<span name="attr_base_poison_dr_total" />
</div>
<div class="grid col4 location gap">
<div class="header">Head (1-2)</div>
<div class="header robot">Optics (1-2)</div>
<label class="physical-dr">Physical Damage Resistance</label>
<input type="text" name="attr_head_pdr"
value="" />
<label class="energy-dr">Energy Damage Resistance</label>
<input type="text" name="attr_head_edr"
value="" />
<label class="rad-dr">Radiation Damage Resistance</label>
<input type="text" name="attr_head_rdr"
value="" />
<label>HP</label>
<input type="text" name="attr_head_hp"
value="" />
</div>
<div class="grid col2 gap">
<input type="hidden" name="attr_hp_ratio" value="100"
class="hp-ratio" />
<div class="header">Health Points</div>
<label>Maximum</label>
<span class="input" name="attr_hp_max" />
<label>Current</label>
<input type="number" name="attr_hp" value="10" />
<label>Radiation</label>
<input type="number" name="attr_rad_damage" value="0" />
</div>
<div class="grid col4 location gap slot1">
<div class="header">Right Arm (12-14)</div>
<div class="header robot">Arm 1 (9-11)</div>
<label class="physical-dr">Physical Damage Resistance</label>
<input type="text" name="attr_rarm_pdr"
value="" />
<label class="energy-dr">Energy Damage Resistance</label>
<input type="text" name="attr_rarm_edr"
value="" />
<label class="rad-dr">Radiation Damage Resistance</label>
<input type="text" name="attr_rarm_rdr"
value="" />
<label>HP</label>
<input type="text" name="attr_rarm_hp"
value="" />
</div>
<div class="grid col4 location gap slot3">
<div class="header">Left Arm (9-11)</div>
<div class="header robot">Arm 2 (12-14)</div>
<label class="physical-dr">Physical Damage Resistance</label>
<input type="text" name="attr_larm_pdr"
value="" />
<label class="energy-dr">Energy Damage Resistance</label>
<input type="text" name="attr_larm_edr"
value="" />
<label class="rad-dr">Radiation Damage Resistance</label>
<input type="text" name="attr_larm_rdr"
value="" />
<label>HP</label>
<input type="text" name="attr_larm_hp"
value="" />
</div>
<div class="grid col4 location gap slot2">
<div class="header">Torso (3-8)</div>
<div class="header robot">Main Body (3-8)</div>
<label class="physical-dr">Physical Damage Resistance</label>
<input type="text" name="attr_torso_pdr"
value="" />
<label class="energy-dr">Energy Damage Resistance</label>
<input type="text" name="attr_torso_edr"
value="" />
<label class="rad-dr">Radiation Damage Resistance</label>
<input type="text" name="attr_torso_rdr"
value="" />
<label>HP</label>
<input type="text" name="attr_torso_hp"
value="" />
</div>
<div class="grid col4 location gap slot1">
<div class="header">Right Leg (18-20)</div>
<div class="header robot">Arm 3 (15-17)</div>
<label class="physical-dr">Physical Damage Resistance</label>
<input type="text" name="attr_rleg_pdr"
value="" />
<label class="energy-dr">Energy Damage Resistance</label>
<input type="text" name="attr_rleg_edr"
value="" />
<label class="rad-dr">Radiation Damage Resistance</label>
<input type="text" name="attr_rleg_rdr"
value="" />
<label>HP</label>
<input type="text" name="attr_rleg_hp"
value="" />
</div>
<div class="grid col4 location gap slot3">
<div class="header">Left Leg (15-17)</div>
<div class="header robot">Thruster (18-20)</div>
<label class="physical-dr">Physical Damage Resistance</label>
<input type="text" name="attr_lleg_pdr"
value="" />
<label class="energy-dr">Energy Damage Resistance</label>
<input type="text" name="attr_lleg_edr"
value="" />
<label class="rad-dr">Radiation Damage Resistance</label>
<input type="text" name="attr_lleg_rdr"
value="" />
<label>HP</label>
<input type="text" name="attr_lleg_hp"
value="" />
</div>
</div>
</div>
</div>
<div class="grid col1 weapons">
<h2>Weapons</h2>
<div class="grid col1 nogap weapons-grid">
<div class="rep-grid-header">
<div>Name</div>
<div>Skill</div>
<div>Damage</div>
<div>Effects</div>
<div>Type</div>
<div>Rate</div>
<div>Range</div>
<div>Qualities</div>
<div>Ammo</div>
<div>Lbs.</div>
</div>
<fieldset class="repeating_weapons rep-grid">
<input type="hidden" name="attr_weaponskill" value="" />
<div><input type="text" name="attr_weaponname" value="" /></div>
<div>
<select name="attr_weaponskill">
<option value="">Choose</option>
<option value="big_guns">Big Guns</option>
<option value="energy_weapons">Energy Weapons</option>
<option value="explosives">Explosives</option>
<option value="melee_weapons">Melee Weapons</option>
<option value="small_guns">Small Guns</option>
<option value="throwing">Throwing</option>
<option value="unarmed">Unarmed</option>
</select>
</div>
<div><input type="number" name="attr_weapondamage" value=""
class="melee-damage" />
<button type="roll" name="roll_weapondamage"
value="&{template:focd} {{name=@{character_name}}} {{dice_num=[[@{weapondamage}]]}} {{roll=[[1d6]]}}" /></div>
<div><input type="text" name="attr_weaponeffects" value="" /></div>
<div>
<select name="attr_weapontype">
<option value="">Choose</option>
<option value="physical">Physical</option>
<option value="energy">Energy</option>
<option value="radiation">Radiation</option>
<option value="Poison">Poison</option>
</select>
</div>
<div>
<input type="number" name="attr_weaponrate" value=""
min="0" max="6" />
</div>
<div>
<select name="attr_weaponrange">
<option value=""></option>
<option value="close">C</option>
<option value="medium">M</option>
<option value="long">L</option>
<option value="extreme">X</option>
</select>
</div>
<div><input type="text" name="attr_weaponqualities" value="" /></div>
<div><input type="number" name="attr_weaponammo" value="" /></div>
<div><input type="number" name="attr_weaponweight" value="" /></div>
</fieldset>
</div>
</div>
</div>
<!-- end character page -->
<!-- start perks page -->
<div class="grid col1 perks">
<h1>Perks & Traits</h1>
<div class="grid col1 nogap perks-grid">
<div class="rep-grid-header">
<div>Name</div>
<div>Rank</div>
<div>Effect</div>
</div>
<fieldset class="repeating_perks rep-grid">
<div class="header"><span name="attr_perkname" /></div>
<div><input type="hidden" class="perkrank" name="attr_perkrank" />
<span name="attr_perkrank" /></div>
<div class="editable">
<span name="attr_perkeffect" />
<details>
<summary>Edit</summary>
<div class="grid col2 nogap">
<label>Name</label>
<input type="text" name="attr_perkname"
value="" />
<label>Rank</label>
<input type="number" name="attr_perkrank"
value="" />
<label>Effect</label>
<textarea name="attr_perkeffect"></textarea>
</div>
</details>
</div>
</fieldset>
</div>
</div>
<!-- end perks page -->
<!-- start items page -->
<div class="grid col1 items">
<h1>Inventory</h1>
<div class="grid col2-csheet gap">
<div class="grid col1">
<h2 class="grid col2 caps">
<label>Caps</label>
<input type="number" id="caps" name="attr_caps" value="0" />
</h2>
<h2>Ammo</h2>
<div class="grid col1 nogap ammo-grid">
<div class="rep-grid-header">
<div>Caliber</div>
<div>Quantity</div>
</div>
<fieldset class="repeating_ammo rep-grid">
<div><input type="text" name="attr_ammoname"
value="" /></div>
<div><input type="text" name="attr_ammoqty"
value="" /></div>
</fieldset>
</div>
<h2>Carry Weight</h2>
<div class="grid col2">
<input type="hidden" name="attr_carry_weight_weapons" value="0" />
<label>Weapons Weight</label>
<span class="input" name="attr_carry_weight_weapons" />
<input type="hidden" name="attr_carry_weight_gear" value="0" />
<label>Gear Weight</label>
<span class="input" name="attr_carry_weight_gear" />
<input type="hidden" name="attr_carry_weight" value="0" />
<label>Current Carry Weight</label>
<span class="input" name="attr_carry_weight" />
<input type="hidden" name="attr_carry_weight_max" value="0" />
<label>Maximum Carry Weight</label>
<span class="input" name="attr_carry_weight_max" />
</div>
</div>
<div>
<h2>Gear</h2>
<div class="grid col1 nogap items-grid">
<div class="rep-grid-header">
<div>Name</div>
<div>Lbs.</div>
</div>
<fieldset class="repeating_items rep-grid">
<div><input type="text" name="attr_itemname"
value="" /></div>
<div><input type="number" name="attr_itemweight"
value="" /></div>
</fieldset>
</div>
</div>
</div>
</div>
<!-- end items page -->
<!-- start npc page -->
<div class="grid col1 npc">
<h1>NPC</h1>
<div class="grid col2 gap npc-grid">
<div class="grid col1 npc-bio">
<h2><span name="attr_character_name" /></h2>
<div class="grid col3 gap">
<label>Level</label>
<input type="number" name="attr_npc_level" value="1" />
<input type="text" name="attr_npc_keywords" placeholder="keywords" />
</div>
<div class="grid col6 gap">
<select name="attr_npc_type">
<option value="normal">Normal</option>
<option value="mighty">Mighty</option>
<option value="legendary">Legendary</option>
<option value="notable">Notable</option>
<option value="major">Major</option>
</select>
<select name="attr_npc_category">
<option value="creature">Creature</option>
<option value="character">Character</option>
</select>
<span>(</span>
<input type="number" name="attr_npc_xp" value="10" />
<label>XP</label>
<span>)</span>
</div>
<textarea name="attr_npc_description"></textarea>
</div>
<div class="grid col1">
x
</div>
</div>
</div>
<!-- end npc page -->
<!-- start settings page -->
<div class="grid col1 settings">
<h1>Character Sheet Settings</h1>
<h2>Release Notes</h2>
<h3>Alpha 0.1</h3>
<span>
<p>Combat Dice use the <span class="die" /> symbol where possible.
Elsewhere they are abbreviated as <em>CD</em>.</p>
<p>2d20 rolls and Combat Dice are implemented in a simple fashion that
uses the built in dice roller in chat. Click on any skill on the
character sheet to roll a number of d20s. Critical successes and
complications must be counted manually from the chat results.</p>
<p>Clicking on combat dice under melee damage or weapons will roll
a single combat die and display the results.</p>
<p>I am exploring other options for a future release.</p>
</span>
<!--
<h2>Character</h2>
<div class="grid col2">
<span>NPC</span>
<label class="switch">
<input type="checkbox" name="attr_setting_npc" value="1" />
<span class="slider"></span>
</label>
</div>
-->
<h2>Style</h2>
<div class="grid col2">
<span>Vault Girl</span>
<label class="switch">
<input type="checkbox" name="attr_style_vault_girl" value="1" />
<span class="slider"></span>
</label>
<span>Outline only (for hit locations)</span>
<label class="switch">
<input type="checkbox" name="attr_style_outline" value="1" />
<span class="slider"></span>
</label>
<!--
<span>Pip-Boy R20</span>
<label class="switch">
<input type="checkbox" name="attr_style_pip_boy" value="1" />
<span class="slider"></span>
</label>
-->
</div>
</div>
<!-- end settings page -->
</div>
<!-- end interface -->
<script type="text/worker">
const tablist = ["creation","character","perks","items","npc","settings"];
const subtablist = ["origin","attributes","skills","perk","derived",
"equipment","finalize"];
const attributelist = ["STRENGTH","PERCEPTION","ENDURANCE","CHARISMA",
"INTELLIGENCE","AGILITY","LUCK"];
const totalAttributelist = ["STRENGTH_TOTAL","PERCEPTION_TOTAL",
"ENDURANCE_TOTAL","CHARISMA_TOTAL","INTELLIGENCE_TOTAL","AGILITY_TOTAL",
"LUCK_TOTAL"];
const skillList = ["ATHLETICS","BARTER","BIG_GUNS",
"ENERGY_WEAPONS","EXPLOSIVES","LOCKPICK","MEDICINE","MELEE_WEAPONS",
"PILOT","REPAIR","SCIENCE","SMALL_GUNS","SNEAK","SPEECH","SURVIVAL",
"THROWING","UNARMED"];
const originTagList = ["ORIGIN","BROTHERHOOD_TAG","SURVIVOR_CHOICE",
"SURVIVOR_TRAIT1","SURVIVOR_TRAIT2","SURVIVOR_PERK","SURVIVOR_TAG",
"VAULT_TAG"];
const survivorAttrList = ["SURVIVOR_ATTR1","SURVIVOR_ATTR2"];
const tagSkillList = ["SKILLS_TAG1","SKILLS_TAG2","SKILLS_TAG3"];
const addList = ["LEVEL"];
const confirmList = ["ORIGIN","BROTHERHOOD_PACKAGE","MUTANT_PACKAGE",
"ROBOT_PACKAGE","WASTELANDER_PACKAGE","VAULT_PACKAGE","PERSONAL_TRINKET",
"SKILLS_TAG1_PACKAGE","SKILLS_TAG2_PACKAGE","SKILLS_TAG3_PACKAGE",
"ORIGIN_TAG_PACKAGE","PERKS_STARTING","SURVIVOR_CHOICE","SURVIVOR_TRAIT1",
"SURVIVOR_TRAIT2","SURVIVOR_PERK"];
const triggerList =
addList.concat(attributelist).concat(skillList).concat(originTagList)
.concat(survivorAttrList).concat(tagSkillList);
const valueList =
addList.concat(attributelist).concat(totalAttributelist).concat(skillList)
.concat(originTagList).concat(survivorAttrList).concat(tagSkillList);
const originsDictionary = {
"brotherhood": {"name": "Brotherhood of Steel"},
"ghoul": {"name": "Ghoul"},
"mutant": {"name": "Super Mutant"},
"robot": {"name": "Mister Handy"},
"survivor": {"name": "Survivor"},
"vault": {"name": "Vault Dweller"}
};
const originPackagesDictionary = {
"brotherhood": {
"steel_initiate": [
{"item": "Brotherhood fatigues", "weight": 4},
{"item": "Brotherhood hood", "weight": 0},
{"item": "Combat knife", "weight": 1},
{"item": "Laser pistol and a fusion cell containing 10 +5 CD shots or a "
+"10mm pistol with 10+5 CD rounds of 10mm pistol ammunition", "weight": 4},
{"item": "Brotherhood holotags containing identifying information", "weight": 0}
],
"steel_scribe": [
{"item": "Brotherhood Field Scribe's armor", "weight": 4},
{"item": "Brotherhood Scribe's hat", "weight": 0},
{"item": "Combat knife", "weight": 1},
{"item": "Laser pistol and a fusion cell containing 6 +3 CD shots or "
+"a 10mm pistol with 6+3 CD rounds of 10mm pistol ammunition.", "weight": 4},
{"item": "Brotherhood holotags containing identifying information", "weight": 0}
]
},
"mutant": {
"brute": [
{"item": "Raider armor torso", "weight": 7},
{"item": "Raider armor for one leg, or one arm", "weight": 3},
{"item": "A pipe rifle, and 6 +3 CD rounds of .38 ammunition", "weight": 2},
{"item": "A baseball bat or machete", "weight": 3},
{"trinket": 1},
{"caps": 5}
],
"skirmisher": [
{"item": "Raider armor torso", "weight": 7},
{"item": "Raider armor for one leg, or one arm", "weight": 3},
{"item": "Heavy bolt-action pipe rifle, and 8 +4 CD rounds of .308 ammunition", "weight": 3},
{"item": "A board", "weight": 3},
{"trinket": 1},
{"caps": 5}
]
},
"robot": {
"nanny": [
{"item": "Pincer arm attachment", "weight": 0},
{"item": "Flamer arm attachment", "weight": 0},
{"item": "Arm attachment of your choice", "weight": 0},
{"item": "Standard plating", "weight": 0},
{"item": "Behavioral analysis mod", "weight": 0},
{"item": "Hazard detection mod", "weight": 0},
{"caps": 10}
],
"farmhand": [
{"item": "Pincer arm attachment", "weight": 0},
{"item": "Buzz-saw arm attachment", "weight": 0},
{"item": "Laser emitter arm attachment", "weight": 0},
{"item": "Standard plating", "weight": 0},
{"item": "One bag of fertilizer", "weight": 1},
{"item": "2 mutfruits", "weight": 0},
{"caps": 25}
],
"gutsy": [
{"item": "10mm auto pistol arm", "weight": 0},
{"item": "Buzz-saw arm attachment", "weight": 0},
{"item": "Laser emitter arm attachment", "weight": 0},
{"item": "Mister Gutsy plating", "weight": 0},
{"item": "Recon sensors mod", "weight": 0},
{"caps": 10}
],
"handy": [
{"item": "Pincer arm attachment", "weight": 0},
{"item": "Flamer arm attachment", "weight": 0},
{"item": "Buzz-saw arm attachment", "weight": 0},
{"item": "Standard plating", "weight": 0},
{"item": "Robot repair kit", "weight": 0},
{"item": "Integral boiler mod", "weight": -10},
{"caps": 10}
],
"nurse": [
{"item": "Pincer arm or buzz-saw arm attachment", "weight": 0},
{"item": "Buzz saw arm attachment", "weight": 0},
{"item": "Attachment of your choice", "weight": 0},
{"item": "Standard plating", "weight": 0},
{"item": "Stimpak", "weight": 0},
{"item": "Diagnosis mod", "weight": 0},
{"caps": 10}
]
},
"wastelander": {
"mercenary": [
{"item": "Tough clothing", "weight": 3},
{"item": "A leather armor chest piece, or a leather armor arm "
+"and a leather armor leg (your choice as to which arm and leg)", "weight": 5},
{"item": "One melee weapon from the following: machete, "
+"baseball bat, tire iron", "weight": 3},
{"item": "One ranged weapon from the following: 10mm automatic pistol, "
+".44 pistol, hunting rifle, bolt-action pipe gun", "weight": 10},
{"item": "10 +5 CD rounds of ammunition for the chosen ranged weapon", "weight": 0},
{"item": "A note advertising a job in a nearby settlement that "
+"offers to pay 50 caps", "weight": 0},
{"caps": 15}
],
"raider": [
{"item": "Harness", "weight": 1},
{"item": "Raider armor chest piece", "weight": 7},
{"item": "Raider armor for one of your arms (your choice)", "weight": 3},
{"item": "One melee weapon from the following list: lead pipe, pool cue, "
+"tire iron", "weight": 3},
{"item": "A pipe gun, with 10 +5 CD rounds of .38 caliber ammunition", "weight": 2},
{"item": "1 dose of Jet or RadAway", "weight": 0},
{"item": "One Molotov cocktail or one stimpak", "weight": 1},
{"caps": 15}
],
"settler": [
{"item": "Tough clothing", "weight": 3},
{"item": "One melee weapon from the following: switch-blade, pipe wrench, "
+"rolling pin, knuckles", "weight": 2},
{"item": "A pipe gun, with 6 +3 CD rounds of .38 caliber ammunition", "weight": 2},
{"food": 2},
{"trinket": 1},
{"caps": 45}
],
"trader": [
{"item": "Tough clothing", "weight": 3},
{"item": "A leather armor chest piece, or a leather armor arm and "
+"a leather armor leg (your choice as to which arm and leg)", "weight": 5},
{"item": "A pipe gun, with 8 +4 CD rounds of .38 caliber ammunition", "weight": 2},
{"trinket": 1},
{"ammo": 3},
{"aid": 3},
{"junk": 3},
{"item": "A pack brahmin (see Brahmin, p.341)", "weight": 0},
{"caps": 50}
],
"wanderer": [
{"item": "Drifter outfit", "weight": 10},
{"item": "One melee weapon from the following: switchblade, pipe wrench, "
+"rolling pin, knuckles", "weight": 2},
{"item": "A pipe gun, with 8 +4 CD rounds of .38 caliber ammunition", "weight": 2},
{"item": "1 dose of Jet or RadAway", "weight": 0},
{"trinket": 1},
{"caps": 30}
]
},
"vault": {
"resident": [
{"item": "Vault jumpsuit", "weight": 1},
{"item": "Vault-Tec branded canteen containing 1 purified water", "weight": 0},
{"item": "Pip-Boy", "weight": 0},
{"item": "Switchblade", "weight": 1},
{"item": "10mm pistol with 6 +3 CD rounds of 10mm pistol ammunition", "weight": 4},
{"item": "2 stimpaks", "weight": 0},
{"caps": 10}
],
"security": [
{"item": "Vault jumpsuit", "weight": 1},
{"item": "Vault-Tec security armor, and Vault-Tec security helmet", "weight": 10},
{"item": "Vault-Tec branded canteen containing 1 purified water", "weight": 0},
{"item": "Pip-Boy", "weight": 0},
{"item": "Baton", "weight": 2},
{"item": "10mm pistol with 8 +4 CD rounds of 10mm pistol ammunition", "weight": 4},
{"item": "1 stimpaks", "weight": 0}
]
}
};
const traitDictionary = {
"brotherhood": {
"name": "The Chain that Binds",
"description": ""
},
"ghoul": {
"name": "Necrotic Post-Human",
"description": ""
},
"mutant": {
"name": "Forced Evolution",
"description": ""
},
"robot": {
"name": "Mister Handy Robot",
"description": ""
},
"educated": {
"name": "Educated",
"description": ""
},
"fast_shot": {
"name": "Fast Shot",
"description": ""
},
"gifted": {
"name": "Gifted",
"description": ""
},
"heavy_handed": {
"name": "Heavy Handed",
"description": ""
},
"small_frame": {
"name": "Small Frame",
"description": ""
},
};
const perksDictionary = {
"ACTION_BOY_GIRL": {"name": "Action Boy/Girl"},
"ADAMANTINE_SKELETON": {"name": "Adamantine Skeleton"},
"ADRENALIN_RUSH": {"name": "Adrenalin Rush"},
"ANIMAL_FRIEND": {"name": "Animal Friend"},
"AQUABOY_AQUAGIRL": {"name": "Aquaboy/Aquagirl"},
"ARMORER": {"name": "Armorer"},
"AWARENESS": {"name": "Awareness"},
"BARBARIAN": {"name": "Barbarian"},
"BASHER": {"name": "Basher"},
"BETTER_CRITICALS": {"name": "Better Criticals"},
"BIG_LEAGUES": {"name": "Big Leagues"},
"BLACK_WIDOW_LADY_KILLER": {"name": "Black Widow/Lady Killer"},
"BLACKSMITH": {"name": "Blacksmith"},
"BLITZ": {"name": "Blitz"},
"BLOODY_MESS": {"name": "Bloody Mess"},
"CAN_DO": {"name": "Can Do!"},
"CAP_COLLECTOR": {"name": "Cap Collector"},
"CAUTIOUS_NATURE": {"name": "Cautious Nature"},
"CENTER_MASS": {"name": "Center Mass"},
"CHEM_RESISTANT": {"name": "Chem Resistant"},
"CHEMIST": {"name": "Chemist"},
"COMMANDO": {"name": "Commando"},
"COMPREHENSION": {"name": "Comprehension"},
"CONCENTRATED_FIRE": {"name": "Concentrated Fire"},
"DARING_NATURE": {"name": "Daring Nature"},
"DEMOLITION_EXPERT": {"name": "Demolition Expert"},
"DODGER": {"name": "Dodger"},
"DOGMEAT": {"name": "Dogmeat"},
"ENTOMOLOGIST": {"name": "Entomologist"},
"FAST_METABOLISM": {"name": "Fast Metabolism"},
"FASTER_HEALING": {"name": "Faster Healing"},
"FINESSE": {"name": "Finesse"},
"FORTUNE_FINDER": {"name": "Fortune Finder"},
"GHOST": {"name": "Ghost"},
"GRIM_REAPER_S_SPRINT": {"name": "Grim Reaper's Sprint"},
"GUN_FU": {"name": "Gun Fu"},
"GUN_NUT": {"name": "Gun Nut"},
"GUNSLINGER": {"name": "Gunslinger"},
"HACKER": {"name": "Hacker"},
"HEALER": {"name": "Healer"},
"HEAVE_HO": {"name": "Heave Ho!"},
"HUNTER": {"name": "Hunter"},
"INFILTRATOR": {"name": "Infiltrator"},
"INSPIRATIONAL": {"name": "Inspirational"},
"INTENSE_TRAINING": {"name": "Intense Training"},
"IRON_FIST": {"name": "Iron Fist"},
"JUNKTOWN_JERKY_VENDOR": {"name": "Junktown Jerky Vendor"},
"JURY_RIGGING": {"name": "Jury Rigging"},
"LASER_COMMANDER": {"name": "Laser Commander"},
"LEAD_BELLY": {"name": "Lead Belly"},
"LIFE_GIVER": {"name": "Life Giver"},
"LIGHT_STEP": {"name": "Light Step"},
"MASTER_THIEF": {"name": "Master Thief"},
"MEDIC": {"name": "Medic"},
"MELTDOWN": {"name": "Meltdown"},
"MISTER_SANDMAN": {"name": "Mister Sandman"},
"MOVING_TARGET": {"name": "Moving Target"},
"MYSTERIOUS_STRANGER": {"name": "Mysterious Stranger"},
"NERD_RAGE": {"name": "Nerd Rage"},
"NIGHT_PERSON": {"name": "Night Person"},
"NINJA": {"name": "Ninja"},
"NUCLEAR_PHYSICIST": {"name": "Nuclear Physicist"},
"PAIN_TRAIN": {"name": "Pain Train"},
"PARALYZING_PALM": {"name": "Paralyzing Palm"},
"PARTY_BOY_PARTY_GIRL": {"name": "Party Boy/Party Girl"},
"PATHFINDER": {"name": "Pathfinder"},
"PHARMA_FARMA": {"name": "Pharma Farma"},
"PICKPOCKET": {"name": "Pickpocket"},
"PIERCING_STRIKE": {"name": "Piercing Strike"},
"PYROMANIAC": {"name": "Pyromaniac"},
"QUICK_DRAW": {"name": "Quick Draw"},
"QUICK_HANDS": {"name": "Quick Hands"},
"RAD_RESISTANCE": {"name": "Rad Resistance"},
"REFRACTOR": {"name": "Refractor"},
"RICOCHET": {"name": "Ricochet"},
"RIFLEMAN": {"name": "Rifleman"},
"ROBOTICS_EXPERT": {"name": "Robotics Expert"},
"SCIENCE": {"name": "Science!"},
"SCOUNDREL": {"name": "Scoundrel"},
"SCRAPPER": {"name": "Scrapper"},
"SCROUNGER": {"name": "Scrounger"},
"SHOTGUN_SURGEON": {"name": "Shotgun Surgeon"},
"SKILLED": {"name": "Skilled"},
"SIZE_MATTERS": {"name": "Size Matters"},
"SLAYER": {"name": "Slayer"},
"SMOOTH_TALKER": {"name": "Smooth Talker"},
"SNAKEATER": {"name": "Snakeater"},
"SNIPER": {"name": "Sniper"},
"SOLAR_POWERED": {"name": "Solar Powered"},
"STEADY_AIM": {"name": "Steady Aim"},
"STRONG_BACK": {"name": "Strong Back"},
"TAG": {"name": "Tag!"},
"TERRIFYING_PRESENCE": {"name": "Terrifying Presence"},
"TOUGHNESS": {"name": "Toughness"}
}
const skillsDictionary = {
"ATHLETICS": {
"name": "Athletics",
"package": ["Casual clothing, 1 Buffout"]
},
"BARTER": {
"name": "Barter",
"package": ["2d20 additional caps"]
},
"BIG_GUNS": {
"name": "Big Guns",
"package": ["4 +2 CD shots of flamer fuel"]
},
"ENERGY_WEAPONS": {
"name": "Energy Weapons",
"package": ["Fusion cell containing 6 +3 CD shots"]
},
"EXPLOSIVES": {
"name": "Explosives",
"package": ["2 Molotov cocktails","2 baseball grenades"]
},
"LOCKPICK": {
"name": "Lockpick",
"package": ["4 +2 CD bobby pins"]
},
"MEDICINE": {
"name": "Medicine",
"package": ["1 first aid kit, 1 Stimpak"]
},
"MELEE_WEAPONS": {
"name": "Melee Weapons",
"package": ["Machete","baseball bat"]
},
"PILOT": {
"name": "Pilot",
"package": ["Broken car parts (equivalent to 5 common scrap)"]
},
"REPAIR": {
"name": "Repair",
"package": ["Multi-Tool"]
},
"SCIENCE": {
"name": "Science",
"package": ["Lab coat, 1 dose of Mentats"]
},
"SMALL_GUNS": {
"name": "Small Guns",
"package": ["6 +3 CD additional shots of ammunition of a type you already possess"]
},
"SNEAK": {
"name": "Sneak",
"package": ["One dose of Calmex"]
},
"SPEECH": {
"name": "Speech",
"package": ["Formal hat, formal clothing"]
},
"SURVIVAL": {
"name": "Survival",
"package": ["2 purified water, 1 iguana on a stick"]
},
"THROWING": {
"name": "Throwing",
"package": ["4 +2d throwing knives","2 +1d tomahawks"]
},
"UNARMED": {
"name": "Unarmed",
"package": ["Knuckles"]
}
};
const trinketList = {
1: "A gold pocket watch",
2: "A garbled holodisk",
3: "A brightly colored bandanna",
4: "A silver locket",
5: "Medal",
6: "Potted plant",
7: "Tickets to a pre-war event",
8: "Wedding ring",
9: "Pre-war party invitation",
10: "An engraved flip lighter",
11: "Loaded casino dice",
12: "Id card",
13: "Cosmetics case",
14: "Musical Instrument",
15: "Broken eyeglasses",
16: "Necklace made of junk",
17: "Pages of an unfinished story",
18: "Overdue library book",
19: "A postcard with an address",
20: "A pre-war neck-tie",
};
const foodList = {
2: "Tarberry",
3: "Perfectly Preserved Pie",
4: "Melon (non-irradiated)",
5: "Carrot (non-irradiated)",
6: "Institute Food Packet",
7: "Sugar Bombs (preserved)",
8: "Mutfruit (non-irradiated)",
9: "Fancy Lads Snack Cakes (preserved)",
10: "Sweet Roll",
11: "Razorgrain",
12: "Iguana Bits",
13: "Cram",
14: "Carrot",
15: "BlamCo Brand Mac and Cheese",
16: "Sugar Bombs",
17: "Potted Meat",
18: "Pork 'n' Beans",
19: "InstaMash",
20: "Dandy Boy Apples",
21: "Canned Dog Food",
22: "Fancy Lads Snack Cakes",
23: "Gum Drops",
24: "Mutfruit",
25: "Potato Crisps",
26: "Salisbury Steak",
27: "Yum-Yum Deviled Eggs",
28: "Brain Fungus",
29: "Corn",
30: "Gourd",
31: "Melon",
32: "Silt Bean",
33: "Tato",
34: "InstaMash (preserved)",
35: "Salisbury Steak (preserved)",
36: "Food Paste",
37: "Noodle Cup",
38: "Corn (non-irradiated)",
39: "BlamCo Brand Mac and Cheese (preserved)",
40: "Tarberry"
}
const ammoList = {
2: "2mm EC (6+3 CD)",
3: "2mm EC (6+3 CD)",
4: "2mm EC (6+3 CD)",
5: "Plasma Cartridge (10+5 CD)",
6: "Missile (2+1 CD)*",
7: "Fusion Core (1)**",
8: "5mm (12+6 CD 10)",
9: "5mm (12+6 CD 10)",
10: ".50 ammo (4+2 CD)",
11: ".50 ammo (4+2 CD)",
12: "Syringer Ammo (4+2 CD)",
13: "Syringer Ammo (4+2 CD)",
14: "Gamma Round (4+2 CD)",
15: "Flamer Fuel (12+6 CD)",
16: "Flamer Fuel (12+6 CD)",
17: ".45 Rounds (9+4 CD)",
18: ".45 Rounds (9+4 CD)",
19: "10mm (8+4CD)",
20: "10mm (8+4CD)",
21: ".38 Ammo (10+5 CD)",
22: ".38 Ammo (10+5 CD)",
23: "Flare (2+1 CD)",
24: ".308 ammo (6+3 CD)",
25: "Shotgun Shells (6+3 CD)",
26: "Shotgun Shells (6+3 CD)",
27: "Fusion Cell (14+7 CD)",
28: "Fusion Cell (14+7 CD)",
29: "Railway Spike (6+3 CD)",
30: "Railway Spike (6+3 CD)",
31: ".44 Magnum (4+2 CD)",
32: ".44 Magnum (4+2 CD)",
33: "5.56mm (8+4 CD)",
34: "5.56mm (8+4 CD)",
35: "Missile (2+1 CD)*",
36: "Fusion Core (1)**",
37: "Plasma Cartridge (10+5 CD)",
38: "Mini-Nuke (1+1 CD)**",
39: "Mini-Nuke (1+1 CD)**",
40: "Mini-Nuke (1+1 CD)**"
}
const aidList = {
2: "Super Stimpak",
3: "Calmex",
4: "Day Tripper",
5: "Addictol",
6: "Stimpak",
7: "Stimpak",
8: "RadAway",
9: "RadAway",
10: "Psycho",
11: "Psycho",
12: "Med-X",
13: "Med-X",
14: "Daddy-O",
15: "Daddy-O",
16: "Rad-X (diluted)",
17: "Rad-X (diluted)",
18: "Healing Salve",
19: "Healing Salve",
20: "Dirty Water",
21: "Dirty Water",
22: "Dirty Water",
23: "Stimpak (diluted)",
24: "Stimpak (diluted)",
25: "RadAway (diluted)",
26: "RadAway (diluted)",
27: "Buffout",
28: "Buffout",
29: "Jet",
30: "Jet",
31: "Mentats",
32: "Mentats",
33: "Rad-X",
34: "Rad-X",
35: "Stimpak",
36: "Stimpak",
37: "Antibiotics",
38: "Overdrive",
39: "Fury",
40: "X-Cell"
}
function updateTagSkillPackage(update, tagSkill, skill) {
update[`${tagSkill}_name`] =
skillsDictionary[skill.toUpperCase()]["name"];
let package_options =
skillsDictionary[skill.toUpperCase()]["package"];
if (package_options.length == 2) {
update[`${tagSkill}_package`] =
skillsDictionary[skill.toUpperCase()]["package"][0] +
" or " +
skillsDictionary[skill.toUpperCase()]["package"][1];
} else {
update[`${tagSkill}_package`] =
skillsDictionary[skill.toUpperCase()]["package"][0];
}
return update;
}
function updateOriginPackage(update, origin, package) {
let items = originPackagesDictionary[origin][package];
for (var i = 0; i < items.length; i++) {
if (items[i]["item"]) {
update = updateRepeatingLine(update, "items",
["itemname", "itemweight"], [items[i]["item"], items[i]["weight"]]);
} else if (items[i]["trinket"]) {
let choice = Math.floor(Math.random() * 20) + 1;
update = updateRepeatingLine(update, "items",
["itemname", "itemweight"], [trinketList[choice], 0]);
} else if (items[i]["food"]) {
let food = parseInt(items[i]["food"])||0;
update = rollLootTable(update, foodList, food);
} else if (items[i]["ammo"]) {
let ammo = parseInt(items[i]["ammo"])||0;
update = rollLootTable(update, ammoList, ammo);
} else if (items[i]["aid"]) {
let aid = parseInt(items[i]["aid"])||0;
update = rollLootTable(update, aidList, aid);
} else if (items[i]["junk"]) {
let junk = parseInt(items[i]["junk"])||0;
for (var i2 = 0; i2 < junk; i2++) {
let junk_items = Math.floor(Math.random() * 20) +
Math.floor(Math.random() * 20) + 2;
update = updateRepeatingLine(update, "items",
["itemname", "itemweight"], [junk_items + " junk items", junk_items * 2]);
}
} else if (items[i]["caps"]) {
update["caps"] = parseInt(items[i]["caps"])||0;
}
}
return update;
}
function rollLootTable(update, table, count) {
for (var i2 = 0; i2 < count; i2++) {
let choice = Math.floor(Math.random() * 20) +
Math.floor(Math.random() * 20) + 2;
update = updateRepeatingLine(update, "items",
["itemname", "itemweight"], [table[choice], 0]);
}
return update;
}
function updateRepeatingLine(update, section, fields, values) {
let newrowid = generateRowID();
for (var i = 0; i < fields.length; i++) {
let field = fields[i];
let value = values[i];
update["repeating_" + section + "_" + newrowid + "_" + field] = value;
}
return update;
}
tablist.forEach(button => {
on(`clicked:${button}`, function() {
setAttrs({"tab": button});
});
});
subtablist.forEach(button => {
on(`clicked:${button}`, function() {
setAttrs({"subtab": button});
});
});
on("clicked:prev", function() {
getAttrs(["SUBTAB"], function(values) {
let subtab = subtablist.indexOf(values.SUBTAB) - 1;
setAttrs({"subtab": subtablist[subtab]});
});
});
on("clicked:next", function() {
getAttrs(["SUBTAB"], function(values) {
let subtab = subtablist.indexOf(values.SUBTAB) + 1;
setAttrs({"subtab": subtablist[subtab]});
});
});
on("clicked:rolltrinket", function() {
let choice = Math.floor(Math.random() * 20) + 1;
setAttrs({"personal_trinket": choice});
});
function rollCombatDice(count) {
let results = {
"damage": 0,
"effects": 0
}
for (var i = 0; i < count; i++) {
let roll = Math.floor(Math.random() * 6) + 1;
switch (roll) {
case 1:
results["damage"] += 1;
break;
case 2:
results["damage"] += 2;
break;
case 5:
case 6:
results["damage"] += 1;
results["effects"] += 1;
break;
}
}
return results;
}
on("clicked:combatdice", function() {
let results = rollCombatDice(6);
console.log(results);
});
on("clicked:copyspecial", function() {
getAttrs(confirmList, function(values) {
let update = {};
let survivor = values.SURVIVOR_CHOICE;
let survivor_trait1 = values.SURVIVOR_TRAIT1;
let survivor_trait2 = values.SURVIVOR_TRAIT2;
let survivor_perk = values.SURVIVOR_PERK;
let perks_starting = values.PERKS_STARTING;
let origin = values.ORIGIN;
let trinket = parseInt(values.PERSONAL_TRINKET)||0;
// origin trait
if (origin == "survivor") {
let name = traitDictionary[survivor_trait1]["name"];
let effect = traitDictionary[survivor_trait1]["description"];
update = updateRepeatingLine(update, "perks",
["perkname", "perkeffect"], [name, effect]);
if (survivor == "trait") {
name = traitDictionary[survivor_trait2]["name"];
effect = traitDictionary[survivor_trait2]["description"];
update = updateRepeatingLine(update, "perks",
["perkname", "perkeffect"], [name, effect]);
}
} else if (origin) {
let name = traitDictionary[origin]["name"];
let effect = traitDictionary[origin]["description"];
update = updateRepeatingLine(update, "perks",
["perkname", "perkeffect"], [name, effect]);
}
// perks
if (perks_starting) {
let name = perksDictionary[perks_starting.toUpperCase()]["name"];
update = updateRepeatingLine(update, "perks",
["perkname", "perkrank"], [name, 1]);
}
if (survivor_perk && survivor == "perk") {
let name = perksDictionary[survivor_perk.toUpperCase()]["name"];
update = updateRepeatingLine(update, "perks",
["perkname", "perkrank"], [name, 1]);
}
// origin package
let origin_type = origin;
let package = "";
if (origin == "ghoul" || origin == "survivor") {
origin_type = "wastelander";
package = values.WASTELANDER_PACKAGE;
} else if (origin) {
let originUpper = origin.toUpperCase();
package = values[`${originUpper}_PACKAGE`];
}
if (package) {
update = updateOriginPackage(update, origin_type, package);
}
// trinket
update = updateRepeatingLine(update, "items",
["itemname", "itemweight"], [trinketList[trinket], 0]);
// tag skill packages
tagSkillList.forEach(tag => {
update = updateRepeatingLine(update, "items",
["itemname"], [values[`${tag}_PACKAGE`]]);
});
// origin tag package, if exists
let origin_tag_package = values.ORIGIN_TAG_PACKAGE;
if (origin_tag_package) {
update = updateRepeatingLine(update, "items",
["itemname"], [origin_tag_package]);
}
update["tab"] = "character";
setAttrs(update);
});
});
attributelist.forEach(attribute => {
for (let i = 4; i < 11; i++) {
let attribute_name = attribute.toLowerCase();
on(`clicked:${attribute_name}${i}`, function() {
let update = {};
update[attribute_name] = i;
setAttrs(update);
});
}
});
/* used in the creation panel */
triggerList.forEach(trigger => {
on(`change:${trigger}`, function(eventInfo) {
getAttrs(valueList, function(values) {
let update = {};
let attributes = {};
let origin = values.ORIGIN;
let brotherhood_tag = values.BROTHERHOOD_TAG;
let survivor = values.SURVIVOR_CHOICE;
let survivor_trait1 = values.SURVIVOR_TRAIT1;
let survivor_trait2 = values.SURVIVOR_TRAIT2;
let survivor_perk = values.SURVIVOR_PERK;
let survivor_tag = values.SURVIVOR_TAG;
let vault = values.VAULT_TAG;
let level = parseInt(values.LEVEL)||1;
let attribute_buy = 0;
attributelist.forEach(attribute => {
let name = attribute.toLowerCase();
let points = parseInt(values[attribute])||0;
attributes[name] = points;
if (origin == "mutant" && points > 6 &&
(attribute == "CHARISMA" || attribute == "INTELLIGENCE")) {
points = Math.min(points, 6);
update[`${name}`] = points;
}
update[`${name}_max`] = points;
update[`${name}_mod`] = 0;
update[`${name}_total`] = points;
update[`${name}_total_max`] = points;
attribute_buy += points;
});
let attribute_points = 40 - attribute_buy;
let skill_buy = 0;
skillList.forEach(skill => {
let cost = parseInt(values[skill])||0;
let name = skill.toLowerCase();
let points = parseInt(values[skill])||0;
update[`${name}_tag`] = 0;
update[`${name}_cs`] = 1;
update[`${name}_total`] = Math.min(points, 6);
skill_buy += cost;
});
update["origin_tag_name"] = "";
update["origin_tag_package"] = "";
let skill_points = 9 + attributes["intelligence"] - skill_buy
+ (level - 1);
update["attribute_points"] = attribute_points;
update["skill_points"] = skill_points;
update["origin_choice"] = origin;
update["origin_name"] = origin ?
originsDictionary[origin]["name"] :
"";
switch(origin) {
case "brotherhood":
if (brotherhood_tag) {
let points =
parseInt(values[brotherhood_tag.toUpperCase()])||0;
update[`${brotherhood_tag}_tag`] = 1;
update[`${brotherhood_tag}_cs`] = Math.min(points + 2, 6);
update[`${brotherhood_tag}_total`] = Math.min(points + 2, 6);
update = updateTagSkillPackage(update, "origin_tag",
brotherhood_tag);
}
break;
case "ghoul":
update["survival_tag"] = 1;
update["survival_cs"] = Math.min(values.SURVIVAL + 2, 6);
update["survival_total"] = Math.min(values.SURVIVAL + 2, 6);
break;
case "mutant":
attributes["strength"] += 2;
attributes["endurance"] += 2;
update["strength_mod"] = 2;
update["endurance_mod"] = 2;
update["strength_total"] = values.STRENGTH + 2;
update["endurance_total"] = values.ENDURANCE + 2;
update["strength_total_max"] = values.STRENGTH + 2;
update["endurance_total_max"] = values.ENDURANCE + 2;
break;
case "survivor":
update["survivor_choice"] = survivor;
update["survivor_trait1"] = survivor_trait1;
update["survivor_trait2"] = survivor_trait2;
update["survivor_perk"] = survivor_perk;
if ((survivor_trait1 == "educated"
|| (survivor == "trait" && survivor_trait2 == "educated"))
&& survivor_tag) {
let points =
parseInt(values[survivor_tag.toUpperCase()])||0;
update[`${survivor_tag}_tag`] = 1;
update[`${survivor_tag}_cs`] = Math.min(points + 2, 6);
update[`${survivor_tag}_total`] = Math.min(points + 2, 6);
update = updateTagSkillPackage(update, "origin_tag",
survivor_tag);
}
if (survivor_trait1 == "gifted"
|| (survivor == "trait" && survivor_trait2 == "gifted")) {
survivorAttrList.forEach(attribute => {
let name = values[attribute];
if (name) {
let points =
parseInt(values[name.toUpperCase()])||0;
attributes[name] += 1;
update[`${name}_mod`] = 1;
update[`${name}_total`] = points + 1;
update[`${name}_total_max`] = points + 1;
}
});
update["luck_total"] = update["luck_total_max"] - 1;
}
break;
case "vault":
if (vault) {
let points =
parseInt(values[vault.toUpperCase()])||0;
update[`${vault}_tag`] = 1;
update[`${vault}_cs`] = Math.min(points + 2, 6);
update[`${vault}_total`] = Math.min(points + 2, 6);
update = updateTagSkillPackage(update, "origin_tag",
vault);
}
break;
}
tagSkillList.forEach(tagSkill => {
let skill = values[tagSkill];
if (skill) {
let points = parseInt(values[skill.toUpperCase()])||0;
let max = origin == "mutant" ? 4 : 6;
update[`${skill}_tag`] = 1;
update[`${skill}_cs`] = Math.min(points + 2, max);
update[`${skill}_total`] = Math.min(points + 2, max);
update = updateTagSkillPackage(update, tagSkill, skill);
}
});
update["carry_weight_max"] = origin == "robot" ? 150 :
150 + attributes["strength"] * 10;
update["base_rad_dr"] = origin == "mutant" || origin == "ghoul" || origin == "robot" ?
"immune" : 0;
update["base_poison_dr"] = origin == "mutant" || origin == "robot" ? "immune" : 0;
update["defense"] = attributes["agility"] > 8 ? 2 : 1;
update["initiative"] = attributes["perception"] +
attributes["agility"];
update["hp"] = attributes["endurance"] + attributes["luck"]
+ (level - 1);
update["hp_max"] = attributes["endurance"] + attributes["luck"]
+ (level - 1);
update["hp_ratio"] = 100;
update["melee_damage"] =
attributes["strength"] > 10 ? 3 :
attributes["strength"] > 8 ? 2 :
attributes["strength"] > 6 ? 1 :
0;
if (survivor_trait1 == "heavy_handed"
|| (survivor == "trait" && survivor_trait2 == "heavy_handed")) {
update["melee_damage"] += 1;
}
setAttrs(update);
});
});
});
on("change:hp change:hp_max sheet:opened", function() {
getAttrs(["HP","HP_max"], function(values) {
let hp = parseInt(values.HP)||0;
let hp_max = parseInt(values.HP_max)||0;
let hp_ratio = Math.round(hp / hp_max * 10) * 10;
setAttrs({
"hp_ratio": hp_ratio
});
});
});
on("change:xp sheet:opened", function() {
getAttrs(["XP","XP_NEXT_LEVEL"], function(values) {
let xp = parseInt(values.XP)||0;
let level = 2;
while ( xp >= ((level * (level-1) / 2) * 100) ) {
level++;
}
let xp_next_level = (level * (level-1) / 2) * 100;
setAttrs({
"level": level - 1,
"xp_next_level": xp_next_level
});
});
});
on("change:repeating_weapons:weaponweight", function() {
repeatingSum("carry_weight_weapons", "weapons", "weaponweight");
});
on("change:repeating_items:itemweight", function() {
repeatingSum("carry_weight_gear", "items", "itemweight");
});
on("change:carry_weight_weapons change:carry_weight_gear", function() {
getAttrs(["CARRY_WEIGHT_WEAPONS", "CARRY_WEIGHT_GEAR"], function(values) {
let carry_weight_weapons = parseInt(values.CARRY_WEIGHT_WEAPONS)||0;
let carry_weight_gear = parseInt(values.CARRY_WEIGHT_GEAR)||0;
let carry_weight = carry_weight_weapons + carry_weight_gear;
setAttrs({
"carry_weight": carry_weight
});
});
});
const combatList = ["MELEE_DAMAGE","DEFENSE","INITIATIVE"];
combatList.forEach(stat => {
let statLower = stat.toLowerCase();
on(`change:${statLower} change:${statLower}_mod`, function(eventInfo) {
getAttrs([`${stat}`, `${stat}_MOD`], function(values) {
let update = {};
let base = parseInt(values[`${stat}`])||0;
let mod = parseInt(values[`${stat}_MOD`])||0;
let total = base + mod;
update[`${statLower}_total`] = total;
setAttrs(update);
});
});
});
const typeList = ["PHYSICAL","ENERGY","RAD","POISON"];
typeList.forEach(type => {
let typeLower = type.toLowerCase();
on(`change:base_${typeLower}_dr change:base_${typeLower}_dr_mod`, function(eventInfo) {
getAttrs([`BASE_${type}_DR`, `BASE_${type}_DR_MOD`], function(values) {
let update = {};
let base_dr = parseInt(values[`BASE_${type}_DR`])||0;
let base_dr_mod = parseInt(values[`BASE_${type}_DR_MOD`])||0;
let base_dr_total = base_dr + base_dr_mod;
update[`base_${typeLower}_dr_total`] = base_dr_total;
setAttrs(update);
});
});
});
/* ===== 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);
});
setAttrs(output);
});
});
};
</script>
<rolltemplate class="sheet-rolltemplate-foskill">
<div class="container">
<h1>{{name}} tests {{skill}}</h1>
<p>{{dice_num}}d20 vs. {{target}}<br />
{{attr}} ({{attr_num}}) + {{skill}} ({{skill_num}})</p>
<p><strong>
{{result}}
{{#rollTotal() result 1}}success{{/rollTotal() result 1}}
{{#^rollTotal() result 1}}successes{{/^rollTotal() result 1}}
</strong>
{{#rollWasCrit() result}}<br />+ Crtical success(es){{/rollWasCrit() result}}
{{#rollWasFumble() result}}<br />+ Complication(s){{/rollWasFumble() result}}
</p>
<p>Difficulty {{difficulty}}</p>
</div>
</rolltemplate>
<rolltemplate class="sheet-rolltemplate-foattribute">
<div class="container">
<h1>{{name}}: {{attr}}</h1>
<p>{{attr_num}}</p>
</div>
</rolltemplate>
<rolltemplate class="sheet-rolltemplate-focd">
{{#rollBetween() roll 1 1}}
<div class="container diehit">
<h1>{{name}} rolls a combat die</h1>
<p><strong>1 damage</strong></p>
{{continue}}
</div>
{{/rollBetween() roll 1 1}}
{{#rollBetween() roll 2 2}}
<div class="container diehitx2">
<h1>{{name}} rolls a combat die</h1>
<p><strong>2 damage</strong></p>
{{continue}}
</div>
{{/rollBetween() roll 2 2}}
{{#rollBetween() roll 3 4}}
<div class="container die">
<h1>{{name}} rolls a combat die</h1>
<p><strong>Nothing</strong></p>
{{continue}}
</div>
{{/rollBetween() roll 3 4}}
{{#rollBetween() roll 5 6}}
<div class="container dievb">
<h1>{{name}} rolls a combat die</h1>
<p><strong>1 damage + damage effects trigger</strong></p>
{{continue}}
</div>
{{/rollBetween() roll 5 6}}
</rolltemplate>