Files
roll20-character-sheets/WeirdFrontiers/WeirdFrontiers.html
T
2024-06-03 13:15:14 -04:00

1830 lines
132 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<div class="barb">
<div class="main" name="darktrailsmain">
<img class="center title" alt="Weird Frontiers Title with tentacle" src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/WeirdFrontiers/WeirdFrontiersTitle.png">
<br/>
<input type="radio" name="attr_tab" class="tab tab1 invis" value="1" title="Main" checked="checked" />
<button type="action" name="act_tabby">Main</button>
<input type="radio" name="attr_tab" class="tab tab2 invis" value="2" title="Equipment & Notes" />
<button type="action" name="act_tabbytwo">Equipment & Notes</button>
<input type="radio" name="attr_tab" class="tab tab3 invis" value="3" title="Instructions" />
<button type="action" name="act_tabbythree">Instructions</button>
<br/>
<br/>
<div class="tab1">
<div class="basicinfo">
<input type="text" name="attr_character_name" title=@{attr_character_name} class="width100 biglabel" spellcheck=false> <br/>
<span class="width100 label"> Name</span><br/>
<div>
<select name="attr_class" title="@{attr_class}" value="calavera" class="width47 class">
<option value="zero-level">0 Level</option>
<option value="bedlamite">Bedlamite</option>
<option value="calavera" checked="checked">Calavera</option>
<option value="gambler">Gambler</option>
<option value="gunslinger">Gunslinger</option>
<option value="hellbilly">Hellbilly</option>
<option value="luchador">Luchador</option>
<option value="mountebank">Mountebank</option>
<option value="mystic-monk">Mystic Monk</option>
<option value="occultist">Occultist</option>
<option value="revelator">Revelator</option>
<option value="sin-eater">Sin-Eater</option>
<option value="tommyknocker">Tommyknocker</option>
</select>
<input type="radio" name="attr_class" class="zero invis" value="zero-level"/>
<input type="radio" name="attr_class" class="bedlamite invis" value="bedlamite" />
<input type="radio" name="attr_class" class="gambler invis" value="gambler" />
<input type="radio" name="attr_class" class="gunslinger invis" value="gunslinger" />
<input type="radio" name="attr_class" class="hellbilly invis" value="hellbilly" />
<input type="radio" name="attr_class" class="luchador invis" value="luchador" />
<input type="radio" name="attr_class" class="mountebank invis" value="mountebank" />
<input type="radio" name="attr_class" class="mystic-monk invis" value="mystic-monk" />
<input type="radio" name="attr_class" class="occultist invis" value="occultist" />
<input type="radio" name="attr_class" class="revelator invis" value="revelator" />
<input type="radio" name="attr_class" class="sin-eater invis" value="sin-eater" />
<input type="radio" name="attr_class" class="tommyknocker invis" value="tommyknocker" />
<input type="radio" name="attr_class" class="calavera invis" value="calavera" />
<img class="zero-image" alt="Zero Level" src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/WeirdFrontiers/WeirdFrontiersLogo.png">
<img class="bedlamite-image" alt="Bedlamite" src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/WeirdFrontiers/Bedlamite_Art.png">
<img class="calavera-image" alt="Calavera" src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/WeirdFrontiers/Calavera_Art.png">
<img class="gambler-image" alt="Gambler" src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/WeirdFrontiers/Gambler_Art.png">
<img class="gunslinger-image" alt="Gunslinger" src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/WeirdFrontiers/Gunslinger_Art.png">
<img class="hellbilly-image" alt="Hellbilly" src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/WeirdFrontiers/Hellbilly_Art.png">
<img class="luchador-image" alt="Luchador" src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/WeirdFrontiers/Luchador_Art.png">
<img class="mountebank-image" alt="Mountebank" src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/WeirdFrontiers/Mountebank_Art.png">
<img class="mystic-monk-image" alt="Mystic Monk" src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/WeirdFrontiers/MysticMonk_Art.png">
<img class="occultist-image" alt="Occultist" src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/WeirdFrontiers/Occultist_Art.png">
<img class="revelator-image" alt="Revelator" src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/WeirdFrontiers/Revelator_Art.png">
<img class="sin-eater-image" alt="Sin-eater" src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/WeirdFrontiers/Sin-eater_Art.png">
<img class="tommyknocker-image" alt="Tommyknocker" src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/WeirdFrontiers/Tommyknocker_Art.png">
<input class="center derived width15 disabled" name="attr_hit_die" title=@{attr_hit_die} readonly/> <input type="number" name="attr_xp" title=@{attr_xp} class="width20"> <select name="attr_level" title=@{attr_level} value=1 class="width15 center">
<option value=0> &nbsp;&nbsp;0</option>
<option value=1> &nbsp;&nbsp;1</option>
<option value=2> &nbsp;&nbsp;2</option>
<option value=3> &nbsp;&nbsp;3</option>
<option value=4> &nbsp;&nbsp;4</option>
<option value=5> &nbsp;&nbsp;5</option>
<option value=6> &nbsp;&nbsp;6</option>
<option value=7> &nbsp;&nbsp;7</option>
<option value=8> &nbsp;&nbsp;8</option>
<option value=9> &nbsp;&nbsp;9</option>
<option value=10> &nbsp;10</option>
</select>
</div>
<div class="up10">
<span class="width48 label inline"> Class</span> <span class="label width15 inline">HD</span> <span class="width20 label inline"> &nbsp;XP</span> <span class="label inline">Level</span>
</div>
<!--<div><span class="tinybreak">.</span></div> -->
<div>
<input type="text" name="attr_occupation" title=@{attr_occupation} class="width75" spellcheck=false>
<input type="number" name="attr_speed" title=@{attr_speed} class="width25"><br/>
</div>
<div>
<span class="width75 label inline"> Occupation</span> <span class="width25 label inline"> Speed</span>
</div>
<div>
<input type="text" name="attr_title" title=@{attr_title} class="width100 derived disabled" readonly>
</div>
<div>
<span class="width100 label inline">Title</span>
</div>
<div>
<select name="attr_birthsign" title=@{attr_birthsign} class="width100 left">
<option value="bad-moon-baby">Bad Moon Baby (attacks)</option>
<option value="hummingbird">Hummingbird Waltz (initiative)</option>
<option value="magpie">Magpie's Whisper (mimic sounds)</option>
<option value="armadillo">Armadillo's Hide (AC)</option>
<option value="fox">Fox's Guile (traps)</option>
<option value="hare">Luck 'o the Hare (crits/fumbles)</option>
<option value="harvest">Bountiful Harvest (HP)</option>
<option value="whitetail">Whitetail Grace (reflex saves)</option>
<option value="widow">Widow's Kiss (poison saves)</option>
<option value="badger">Badger Cunnin' (melee attacks)</option>
<option value="crow">Crow's Tongue (languages)</option>
<option value="shadow">Shadow-kin (corruption)</option>
<option value="rat">Desert Rat (fort saves)</option>
<option value="angel">Guardian Angel/Meddling Devil (reroll saves)</option>
<option value="ley">Ley Line Tuning Fork (magic use)</option>
<option value="unholy">Unholy Allergy (turn back night)</option>
<option value="rabbit">Lucky Rabbit's Foot (all saves)</option>
<option value="flying">Flying Rat's Radar (avoid surprise)</option>
<option value="grizzly">Grizzly's Swipe (melee damage)</option>
<option value="hawkeye">Hawkeye (ranged attacks)</option>
<option value="equine">Equine Charmer (horsemanship)</option>
<option value="jackalope">Jacklope Mojo (1 save type/day)</option>
<option value="lightnin">Lightnin' Rod (magic damage)</option>
<option value="sidewinder">Sidewinder Strike (ranged damage)</option>
<option value="roadrunner">Roadrunner's Pace (+/- 5' move)</option>
<option value="liver">Liver of Iron (alcohol)</option>
<option value="sixth">Sixth Sense (finding hidden)</option>
<option value="mountain">Mountain Tuff' (healing rec'd)</option>
<option value="roller">Holy Roller (healing given)</option>
<option value="cat">Stray Cat Strut (stealth/hide)</option>
</select>
</div>
<div class="up10">
<span class="width100 label inline"> Birth Augur / Lucky Sign</span>
</div>
<br/>
<label class="label center inverted width100">PATH</label>
<div class="path width100">
<div>
<span class="label width30 inline">Damned</span>
<span class="label width40 inline"></span>
<span class="label width30 inline">Righteous</span>
</div>
<input type="radio" name="attr_path" class="radio theline" value="Damned +1d" title="D+1d" />
<input type="radio" name="attr_path" class="radio theline" value="Damned +3" title="D+3" />
<input type="radio" name="attr_path" class="radio theline" value="Damned +2" title="D+2" />
<input type="radio" name="attr_path" class="radio theline" value="Damned +1" title="D+1" />
<input type="radio" name="attr_path" class="radio theline" value="The Line" title="The Line" />
<input type="radio" name="attr_path" class="radio theline" value="Righteous +1" title="R+1" />
<input type="radio" name="attr_path" class="radio theline" value="Righteous +2" title="R+2" />
<input type="radio" name="attr_path" class="radio theline" value="Righteous +3" title="R+3" />
<input type="radio" name="attr_path" class="radio" value="Righteous +1d" title="R+1d" />
<br/>
<div class="left">
<span class="label">+1d</span> <span class="label">+3 </span> <span class="label">&nbsp;+2 </span> <span class="label">&nbsp;&nbsp;+1 </span> <span class="label"> &nbsp;Line </span> <span class="label">+1 </span> <span class="label">&nbsp;&nbsp;+2 </span> <span class="label">&nbsp;&nbsp;+3 </span> <span class="label"> &nbsp;+1d</span>
</div>
</div>
<div class="hexboons left">
<div>
<span class="width25">
<input type="checkbox" name="attr_booned" class=" booned invis" />
<input title="Boons" type="number" min=0 max=20 value=0 name="attr_boons" class="width50 center boons"/>
</span>
<span class="width25">
<input type="checkbox" name="attr_hexed" class=" hexed invis" />
<input title="Hexes" type="number" min=0 max=20 value=0 name="attr_hexes" class="width50 center hexes"/>
</span>
<span class="width45 init">
<input type="number" name="attr_agility_mod" class="width20 derived disabled" value=0 readonly />
<button type="roll" name="roll_init" class="small" value="&{template:initiative} {{character=@{character_name}}} {{?{Situational Modifier|0} }} {{modifier=@{agility_mod} }} {{roll=[[1d20 + @{agility_mod} + ?{Situational Modifier} &{tracker}]] }}">20</button><button type="roll" name="roll_init" class="small" value="&{template:initiative} {{character=@{character_name}}} {{modifier=@{agility_mod} }} {{roll=[[1d16 + @{agility_mod} + ?{Situational Modifier} &{tracker}]] }}">16</button>
</span>
</div>
<div class="">
&nbsp;<span class="width20 label inline">Boons</span> <span class="width25 label inline">Hexes</span> <span class="label center width50 inline">Initiative</span>
</div>
</div>
<div class="left attrib">
<span class="biglabel inverted width55">STRENGTH</span><input type="number" min=3 max=19 value=10 name="attr_strength" class="bignumber width20" /><button type="roll" class="small" name="roll_strength" value="&{template:ability-check} {{character=@{character_name}}} {{ability=Strength}} {{score=@{strength} }} {{modifier=@{strength_mod} }} {{roll=[[1d20 + @{strength_mod}]]}}">T</button><button type="roll" class="small" name="roll_strength_u" value="&{template:ability-check} {{character=@{character_name}}} {{ability=Strength}} {{score=@{strength} }} {{modifier=@{strength_mod} }} {{roll=[[1d10cs0cf0 + @{strength_mod}]]}}">U</button>
<div class="up4 indent">
<span class="label">mod</span> <input type="number" name="attr_strength_mod" class="width10 smallnumber derived disabled" readonly /> <span class="label">max</span> <input type="number" class="width12 smallnumber" value=10 name="attr_strength_maxx" />
<button type="roll" name="roll_melee" class="invis" value="@{strength_mod}"></button>
</div>
</div>
<div class="left attrib">
<span class="biglabel inverted width55">AGILITY</span><input type="number" min=3 max=19 value=10 name="attr_agility" class="bignumber width20" /><button type="roll" class="small" name="roll_agility" value="&{template:ability-check} {{character=@{character_name}}} {{ability=Agility}} {{score=@{agility} }} {{modifier=@{agility_mod} }} {{roll=[[1d20 + @{agility_mod}]]}}">T</button><button type="roll" class="small" name="roll_agility_u" value="&{template:ability-check} {{character=@{character_name}}} {{ability=Agility}} {{score=@{agility} }} {{modifier=@{agility_mod} }} {{roll=[[1d10cs0cf0 + @{agility_mod}]]}}">U</button>
<div class="up4 indent">
<span class="label">mod</span> <input type="number" name="attr_agility_mod" class="width10 smallnumber derived disabled" readonly /> <span class="label">max</span> <input type="number" class="width12 smallnumber" value=10 name="attr_agility_maxx" />
<button type="roll" name="roll_ranged" class="invis" value="@{agility_mod}"></button>
</div>
</div>
<div class="left">
<span class="biglabel inverted width55">STAMINA</span><input type="number" min=3 max=19 value=10 name="attr_stamina" class="bignumber width20" /><button type="roll" class="small" name="roll_stamina" value="&{template:ability-check} {{character=@{character_name}}} {{ability=Stamina}} {{score=@{stamina} }} {{modifier=@{stamina_mod} }} {{roll=[[1d20 + @{stamina_mod}]]}}">T</button><button type="roll" class="small" name="roll_stamina_u" value="&{template:ability-check} {{character=@{character_name}}} {{ability=Stamina}} {{score=@{stamina} }} {{modifier=@{stamina_mod} }} {{roll=[[1d10cs0cf0 + @{stamina_mod}]]}}">U</button>
<div class="up4 indent">
<span class="label">mod</span> <input type="number" name="attr_stamina_mod" class="width10 smallnumber derived disabled" readonly /> <span class="label">max</span> <input type="number" class="width12 smallnumber" value=10 name="attr_stamina_maxx" />
</div>
</div>
<div class="left">
<span class="biglabel inverted width55">PERSONALITY</span><input type="number" min=3 max=19 value=10 name="attr_personality" class="bignumber width20" /><button type="roll" class="small" name="roll_personality" value="&{template:ability-check} {{character=@{character_name}}} {{ability=Personality}} {{score=@{personality} }} {{modifier=@{personality_mod} }} {{roll=[[1d20 + @{personality_mod}]]}} {{extra=Path: @{path}}}">T</button><button type="roll" class="small" name="roll_personality_u" value="&{template:ability-check} {{character=@{character_name}}} {{ability=Personality}} {{score=@{personality} }} {{modifier=@{personality_mod} }} {{roll=[[1d10cs0cf0 + @{personality_mod}]]}} {{extra=Path: @{path}}}">U</button>
<div class="up4 indent">
<span class="label">mod</span> <input type="number" name="attr_personality_mod" class="width10 smallnumber derived disabled" readonly /> <span class="label">max</span> <input type="number" class="width12 smallnumber" value=10 name="attr_personality_maxx" />
</div>
</div>
<div class="left">
<span class="biglabel inverted width55">LUCK</span><input type="number" min=3 max=19 value=10 name="attr_luck" class="bignumber width20" /><button type="roll" class="small" name="roll_luck" value="&{template:ability-check} {{character=@{character_name}}} {{ability=Luck}} {{score=@{luck} }} {{modifier=0 }} {{roll=[[1d20cs1cf20]] }}">T</button><button type="roll" class="small" name="roll_luck_u" value="&{template:ability-check} {{character=@{character_name}}} {{ability=Luck}} {{score=@{luck} }} {{modifier=0 }} {{roll=[[1d10cs0cf0]]}}">U</button>
<div class="up4 indent">
<span class="label">mod</span> <input type="number" name="attr_luck_mod" class="width10 smallnumber derived disabled" readonly /> <span class="label">max</span> <input type="number" class="width12 smallnumber" value=10 name="attr_luck_maxx" />
</div>
</div>
<div class="left">
<span class="biglabel inverted width55">INTELLIGENCE</span><input type="number" min=3 max=19 value=10 name="attr_intelligence" class="bignumber width20" /><button type="roll" class="small" name="roll_intelligence" value="&{template:ability-check} {{character=@{character_name}}} {{ability=Intelligence}} {{score=@{intelligence} }} {{modifier=@{intelligence_mod} }} {{roll=[[1d20 + @{intelligence_mod}]]}}">T</button><button type="roll" class="small" name="roll_intelligence_u" value="&{template:ability-check} {{character=@{character_name}}} {{ability=Intelligence}} {{score=@{intelligence} }} {{modifier=@{intelligence_mod} }} {{roll=[[1d10cs0cf0 + @{intelligence_mod}]]}}">U</button>
<div class="up4 indent">
<span class="label">mod</span> <input type="number" name="attr_intelligence_mod" class="width10 smallnumber derived disabled" readonly /> <span class="label">max</span> <input type="number" class="width12 smallnumber" value=10 name="attr_intelligence_maxx" />
</div>
</div>
<br/>
<div class="class-specific down10">
<input type="text" name="attr_primary_action_die" class="width25 derived disabled center"/><span class="width25 inline"></span><input type="text" name="attr_secondary_action_die" class="width25 derived disabled center"/>
<br/>
<span class="label width50 center inline">Primary Action</span><span class="label width50 center inline">Secondary Action</span>
<br/><br/>
<input type="checkbox" name="attr_class" class="bedlamite2 invis" value="bedlamite"/>
<input type="checkbox" name="attr_class" class="calavera2 invis" value="calavera" />
<input type="checkbox" name="attr_class" class="gambler2 invis" value="gambler" />
<input type="checkbox" name="attr_class" class="gunslinger2 invis" value="gunslinger" />
<input type="checkbox" name="attr_class" class="hellbilly2 invis" value="hellbilly" />
<input type="checkbox" name="attr_class" class="luchador2 invis" value="luchador"/>
<input type="checkbox" name="attr_class" class="mountebank2 invis" value="mountebank"/>
<input type="checkbox" name="attr_class" class="mystic-monk2 invis" value="mystic-monk"/>
<input type="checkbox" name="attr_class" class="occultist2 invis" value="occultist"/>
<input type="checkbox" name="attr_class" class="revelator2 invis" value="revelator"/>
<input type="checkbox" name="attr_class" class="sin-eater2 invis" value="sin-eater"/>
<input type="checkbox" name="attr_class" class="tommyknocker2 invis" value="tommyknocker"/>
<!-- CLASS DIE COMMON TO MANY CLASSES -->
<input class="center derived width35 invis disabled gambler2 gunslinger2 hellbilly2 mystic-monk2 luchador2" name="attr_class_die" readonly/>
<!-- BEDLAMITE SPECIFIC -->
<input class="bedlamite2 center derived width25 invis disabled" name="attr_wondrous_contraptions" readonly/>
<span class="bedlamite2 invis width25 label center"></span>
<input class="bedlamite2 center derived width25 invis disabled" name="attr_mundane_contraptions" readonly/>
<span class="bedlamite2 invis width50 label center">Wondrous Cntrps</span>
<span class="bedlamite2 invis width50 label center">Mundane Cntrps</span>
<input class="center derived width30 invis disabled bedlamite2 down10" name="attr_power_mod" readonly/>
<input class="center derived width30 invis disabled bedlamite2 down10" name="attr_max_contraption_level" readonly/>
<input class="center derived width30 invis disabled bedlamite2 down10" name="attr_derangement" readonly/>
<span class="bedlamite2 invis width35">Gear Check</span>
<span class="bedlamite2 invis width30">Max Lvl</span>
<span class="bedlamite2 invis width35">Derangement</span>
<!-- CALAVERA SPECIFIC -->
<input class="center derived width80 invis disabled calavera2" value="+1d ranged/melee damage" readonly/>
<span class="calavera2 width90 invis label center">Magical Gloom</span>
<!-- GAMBLER SPECIFIC -->
<button type="roll" name="roll_mojo_die" class="small invis gambler2" value="&{template:class-die} {{character=@{character_name}}} {{label=Mojo Die}} {{?{Situational Modifier|0} }} {{roll=[[@{class_die}cs0cf0 + ?{Situational Modifier}]] }}"></button>
<span class="gambler2 width10 invis"></span>
<input class="center derived width25 invis disabled gambler2" name="attr_tolerance" value="+1d" readonly/>
<span class="gambler2 width13 invis"></span>
<span class="gambler2 width25 invis">Mojo Die</span>
<span class="gambler2 width15 invis"></span>
<span class="gambler2 width45 invis">Alcohol Toler.</span>
<input class="center derived width45 invis disabled down10 gambler2" name="attr_crime" value="+1d" readonly/>
<span class="gambler2 width75 invis">Non-violent Crime</span>
<!-- GUNSLINGER SPECIFIC -->
<span class="gunslinger2 width10 invis"></span>
<input class="center derived width35 invis disabled gunslinger2" name="attr_crit_range" value="20" readonly/>
<span class="gunslinger2 width35 invis">Deadeye Die</span>
<span class="gunslinger2 width10 invis"></span>
<span class="gunslinger2 width35 invis">Crit Range</span>
<!-- HELLBILLY SPECIFIC -->
<button type="roll" name="roll_ballad_die" class="small invis hellbilly2" value="&{template:class-die} {{character=@{character_name}}} {{label=Ballad Die}} {{?{Situational Modifier|0} }} {{roll=[[@{class_die}cs0cf0 + ?{Situational Modifier}]] }}"></button>
<span class="hellbilly2 width75 invis">Ballad Die</span>
<!-- LUCHADOR SPECIFIC -->
<span class="luchador2 width10 invis"></span>
<input class="center derived width35 invis disabled luchador2" name="attr_fame" readonly/>
<span class="luchador2 width35 invis">Lucha Die</span>
<span class="luchador2 width10 invis"></span>
<span class="luchador2 width35 invis">Fame</span>
<input class="center derived width30 invis disabled luchador2 down10" name="attr_battle_hardened" readonly/>
<span class="luchador2 center width90 invis">Battle Hardened (Unarmed Dmg)</span>
<!-- MOUNTEBANK SPECIFIC -->
<input class="center derived width25 invis disabled mountebank2" name="attr_known_formulae" readonly/>
<span class="mountebank2 width30 invis"></span>
<input class="center derived width25 invis disabled mountebank2" name="attr_max_formula_level" readonly/>
<span class="mountebank2 width45 invis">Known Formulae</span>
<span class="mountebank2 width5 invis"></span>
<span class="mountebank2 width45 invis">Max Form. Level</span>
<input class="center derived width25 invis disabled mountebank2" name="attr_max_active_formulae" readonly/>
<span class="mountebank2 width30 invis"></span>
<input class="center derived width25 invis disabled mountebank2" name="attr_power_mod" readonly/>
<span class="mountebank2 width45 invis">Max Active Form.</span>
<span class="mountebank2 width12 invis"></span>
<span class="mountebank2 width35 invis">Brew Check</span>
<span class="mountebank2 width5 invis"></span>
<input class="center derived width25 invis disabled down10 mountebank2" name="attr_fire_bomb_damage" readonly/>
<span class="mountebank2 width30 invis"></span>
<input class="center derived width25 invis disabled down10 mountebank2" name="attr_acid_bomb_damage" readonly/>
<span class="mountebank2 width45 invis">Fire Bomb Dmg</span>
<span class="mountebank2 width5 invis"></span>
<span class="mountebank2 width45 invis">Acid Bomb Dmg</span>
<input class="center derived width45 invis disabled mountebank2" name="attr_adhesive" readonly/>
<span class="mountebank2 width20 invis"></span>
<input class="center derived width25 invis disabled mountebank2" name="attr_poultice_healing" readonly/>
<span class="mountebank2 width8 invis"></span>
<span class="mountebank2 width45 invis">Adhesive</span>
<span class="mountebank2 width5 invis"></span>
<span class="mountebank2 width45 invis">Poultice Healing</span>
<!-- MYSTIC MONK SPECIFIC -->
<button type="roll" name="roll_chi_die" class="small invis mystic-monk2" value="&{template:class-die} {{character=@{character_name}}} {{label=Chi Die}} {{?{Situational Modifier|0} }} {{roll=[[@{class_die}cs0cf0 + ?{Situational Modifier}]] }}"></button>
<span class="mystic-monk2 width10 invis"></span>
<input class="center derived width35 invis disabled mystic-monk2" name="attr_living_weapon" readonly/>
<span class="mystic-monk2 width38 invis"> Chi Die</span>
<span class="mystic-monk2 width20 invis"></span>
<span class="mystic-monk2 width38 invis">Living Weapon</span>
<!-- OCCULTIST SPECIFIC -->
<input class="center derived width25 invis disabled occultist2" name="attr_power_mod" readonly/>
<span class="occultist2 width5 invis"></span>
<input class="center derived width25 invis disabled occultist2" name="attr_known_spells" readonly/>
<span class="occultist2 width5 invis"></span>
<input class="center derived width25 invis disabled occultist2" name="attr_max_spell_level" readonly/>
<span class="occultist2 width33 invis">Spell Check</span>
<span class="occultist2 width30 invis"># Known</span>
<span class="occultist2 width30 invis">Max Level</span>
<input class="center width90 invis down10 occultist2" type="text" name="attr_familiar" spellcheck=false />
<span class="occultist2 width90 invis">Familiar</span>
<!-- REVELATOR SPECIFIC -->
<input class="center width45 invis revelator2" type="number" name="attr_fall_from_grace" value="1"/>
<span class="revelator2 width100 invis">Fall From Grace</span>
<br class="revelator2 invis"/>
<br class="revelator2 invis"/>
<input class="center width19 invis derived disabled revelator2" type="number" name="attr_spells_first" value="0"/>
<input class="center width19 invis derived disabled revelator2" type="number" name="attr_spells_second" value="0"/>
<input class="center width19 invis derived disabled revelator2" type="number" name="attr_spells_third" value="0"/>
<input class="center width19 invis derived disabled revelator2" type="number" name="attr_spells_fourth" value="0"/>
<input class="center width19 invis derived disabled revelator2" type="number" name="attr_spells_fifth" value="0"/>
<span class="revelator2 width19 invis">1st</span>
<span class="revelator2 width19 invis">2nd</span>
<span class="revelator2 width19 invis">3rd</span>
<span class="revelator2 width19 invis">4th</span>
<span class="revelator2 width19 invis">5th</span>
<span class="revelator2 width100 invis">--------Miracles--------</span>
<!--SIN-EATER SPECIFIC -->
<input class="center width30 invis sin-eater2" type="number" min=0 value=0 name="attr_coin_charges"/>
<span class="sin-eater2 width100 invis">Ferryman's Coin Charges (Max=level)</span>
<!-- TOMMYKNOCKER SPECIFIC -->
<input class="center width90 invis derived disabled tommyknocker2" type="text" value="+1d melee damage & str checks" readonly/>
<span class="tommyknocker2 width100 invis">Strength of the Grave</span>
<input class="center width90 invis derived disabled down10 tommyknocker2" type="text" value="receive -1d damage & no crits" readonly/>
<span class="tommyknocker2 width100 invis">Tough as Nails</span>
</div>
</div>
<div class="middlegap">
<img src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/WeirdFrontiers/guns.png" alt="Crossed Guns Silhouette" class="center" />
<div class="hp">
<input type="number" name="attr_hit_points" class="width35 center opaque"/> / <input type="number" name="attr_hit_points_max" class="width35 center opaque"/>
</div>
<br/>
<div class="ac">
<input type="text" name="attr_armor_class" class="width30 center opaque"/><br/>
</div>
<br/>
<div class="grit">
&nbsp;&nbsp;<input title="@{grit}" type="text" name="attr_grit" value="0" class="width30 center opaque"/> / <input title="@{grit_max}" type="number" name="attr_grit_max" class="width30 center opaque"/><br/>
&nbsp;&nbsp;<button type="roll" name="roll_grit" value="&{template:saving-throw} {{character=@{character_name}}} {{save=Grit Check / Will}} {{modifier=@{will} }} {{roll=[[1d20 + @{will}]]}} {{extra=Current Hexes: @{hexes}\nPoints Lost on Fail: varies}}"></button>
</div>
<div class="left left20 saves">
<div class="">
<span class="width35 label reflex inline">Ref </span><input type="number" min=-5 max=12 value=0 name="attr_reflex_mod" class="width20"/> <input type="number" min=-5 max=10 value=0 name="attr_reflex" class="width24 derived disabled"/><button type="roll" name="roll_reflex" value="&{template:saving-throw} {{character=@{character_name}}} {{save=Reflex}} {{modifier=@{reflex} }} {{roll=[[1d20 + @{reflex}]]}}"></button>
</div>
<br/>
<br/>
<div class="fort">
<span class="width35 label fortitude inline">Fort</span><input type="number" min=-5 max=12 value=0 name="attr_fort_mod" class="width20"/> <input type="number" min=-5 max=10 value=0 name="attr_fort" class="width24 derived disabled"/><button type="roll" name="roll_fort" value="&{template:saving-throw} {{character=@{character_name}}} {{save=Fort}} {{modifier=@{fort} }} {{roll=[[1d20 + @{fort}]]}}"></button>
</div>
<br/>
<br/>
<div class="will">
<span class="width35 label will inline">Will</span><input type="number" min=-5 max=12 value=0 name="attr_will_mod" class="width20"/> <input type="number" min=-5 max=10 value=0 name="attr_will" class="width24 derived disabled"/><button type="roll" name="roll_will" value="&{template:saving-throw} {{character=@{character_name}}} {{save=Will}} {{modifier=@{will} }} {{roll=[[1d20 + @{will}]]}}"></button>
</div>
</div>
<div class="luckyroll">
<div class=""><input class="width90 center disabled derived" type="text" value="" name="attr_lucky_roll" /></div>
<div><span class="label">Lucky Roll</span></div>
</div>
<br/>
<div class="extraattack">
<div>
<input title="Attack" type="number" min=0 max=20 value=0 name="attr_melee_bonus" class="width50 center derived disabled"/>
</div>
<div>
<span class="width100 center label">Melee Bonus</span>
</div>
<div>
<input title="Ranged" type="number" min=0 max=20 value=0 name="attr_ranged_bonus" class="width50 center derived disabled down10"/>
</div>
<div>
<span class="width100 center label">Ranged Bonus</span>
</div>
<div>
<select title="Crit" name="attr_crit_die" class="width45 center crit-die derived disabled down10">
<option class="label" value="d3">d3</option>
<option class="label" value="d4">d4</option>
<option class="label" value="d5">d5</option>
<option class="label" value="d6" selected>d6</option>
<option class="label" value="d7">d7</option>
<option class="label" value="d8">d8</option>
<option class="label" value="d10">d10</option>
<option class="label" value="d12">d12</option>
<option class="label" value="d14">d14</option>
<option class="label" value="d16">d16</option>
<option class="label" value="d20">d20</option>
<option class="label" value="d24">d24</option>
<option class="label" value="d30">d30</option>
</select>
</div>
<div class="up10">
<span class="width100 center label">Crit Die</span>
</div>
<div>
<select title="Base Fumble Die" name="attr_fumble_die_base" class="width45 center fumble-die derived disabled down10">
<option class="label" value="d2">d2</option>
<option class="label" value="d3">d3</option>
<option class="label" value="d4">d4</option>
<option class="label" value="d5">d5</option>
<option class="label" value="d6" selected>d6</option>
<option class="label" value="d7">d7</option>
<option class="label" value="d8">d8</option>
<option class="label" value="d10">d10</option>
<option class="label" value="d12">d12</option>
<option class="label" value="d14">d14</option>
<option class="label" value="d16">d16</option>
<option class="label" value="d20">d20</option>
<option class="label" value="d24">d24</option>
<option class="label" value="d30">d30</option>
</select>
<input type="checkbox" name="attr_hexed" class=" hexed invis" />
<select title="Fumble Die Modified" name="attr_fumble_die" class="width45 center derived fumble-die disabled down10" >
<option class="label" value="d2">d2</option>
<option class="label" value="d3">d3</option>
<option class="label" value="d4">d4</option>
<option class="label" value="d5">d5</option>
<option class="label" value="d6" selected>d6</option>
<option class="label" value="d7">d7</option>
<option class="label" value="d8">d8</option>
<option class="label" value="d10">d10</option>
<option class="label" value="d12">d12</option>
<option class="label" value="d14">d14</option>
<option class="label" value="d16">d16</option>
<option class="label" value="d20">d20</option>
<option class="label" value="d24">d24</option>
<option class="label" value="d30">d30</option>
</select>
</div>
<div class="up10">
<span class="width100 center label">Fumble Die</span>
</div>
</div>
</div>
<div class="rightcol">
<span class="label width100 inverted center list-header inline">
<span>WEAPONS</span>
</span>
<div class="table-header">
<span class="width45 label inline">Name</span> <span class="width14 label inline">Type</span> <span class="width18 label inline">Range</span> <span class="width20 label inline">Damage</span>
</div>
<div name="attr_signature_weapons" class="list width100 weapons">
<fieldset class="repeating_weapons">
<div class="list-item">
<input type="text" class="width45 item-name item-field" name="attr_weaponname" placeholder="Weapon Name..." spellcheck=false />
<select name="attr_weapontype" class="width14 item-field" value="">
<option value="Melee">Melee</option>
<option value="Ranged">Ranged</option>
</select>
<input type="text" class="width18" name="attr_weaponrange" placeholder="S/M/L" />
<select name="attr_weapondamagenumdice" class="width5">
<option value="0">0</option>
<option value="1" selected="selected">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
</select>
<select name="attr_weapondamagedie" class="width9">
<option value="d3">d3</option>
<option value="d4">d4</option>
<option value="d5">d5</option>
<option value="d6" selected="selected">d6</option>
<option value="d7">d7</option>
<option value="d8">d8</option>
<option value="d10">d10</option>
<option value="d12">d12</option>
<option value="d14">d14</option>
<option value="d16">d16</option>
</select>
<select name="attr_weapondamagebonus" class="width7">
<option value="-4">-4</option>
<option value="-3">-3</option>
<option value="-2">-2</option>
<option value="-1">-1</option>
<option value="0" selected="selected">+0</option>
<option value="1">+1</option>
<option value="2">+2</option>
<option value="3">+3</option>
<option value="4">+4</option>
</select>
<br/>
<input type="number" name="attr_weaponstathitbonus" class="invis" />
<input type="number" name="attr_weaponstatdamagebonus" class="invis" />
<input type="text" name="attr_weaponhitbonusdie" class="invis" />
<input type="text" name="attr_weapondamagebonusdie" class="invis" />
<input type="number" name="attr_signature_mod" class="invis" />
<button type="roll" name="roll_weapon_primary" class="small" value="&{template:attack} {{character=@{character_name}}} {{weapon=@{weaponname}}} {{weapontype=@{weapontype}}} {{modifier=[[@{weaponstathitbonus} + @{signature_mod} + ?{Situational Modifier|0}]] }} {{roll=[[@{primary_action_die}@{primary_crit_threshold} + @{weaponstathitbonus} + @{signature_mod} + ?{Situational Modifier} ]] }} {{damage=[[{ @{weapondamagenumdice}@{weapondamagedie}cs0cf0+@{weapondamagebonus}+@{weaponstatdamagebonus}, 0d0+1}kh1]]}} {{critdie=@{crit_die} }} {{critroll=[[@{crit_die} + @{luck_mod}]] }} {{fumbledie=@{fumble_die} }} {{fumbleroll=[[@{fumble_die}cs0cf0 -(@{luck_mod})]]}} {{hasextra=[[@{weaponhitbonusdie}]] }} {{extra=@{class_die_label}(@{weaponhitbonusdie}): [[@{weaponhitbonusdie}cf<2cs>3]]}}">P</button><button type="roll" name="roll_weapon_secondary" class="small" value="&{template:attack} {{character=@{character_name}}} {{weapon=@{weaponname}}} {{weapontype=@{weapontype}}} {{modifier=[[@{weaponstathitbonus} + @{signature_mod} + ?{Situational Modifier|0}]] }} {{roll=[[@{secondary_action_die}@{secondary_crit_threshold} + @{weaponstathitbonus} + @{signature_mod} + ?{Situational Modifier|0}]] }} {{damage=[[{ @{weapondamagenumdice}@{weapondamagedie}cs0cf0+@{weapondamagebonus}+@{weaponstatdamagebonus}, 0d0+1}kh1 ]]}} {{critdie=@{crit_die} }} {{critroll=[[@{crit_die} + @{luck_mod}]] }} {{fumbledie=@{fumble_die} }} {{fumbleroll=[[@{fumble_die}cs0cf0 -(@{luck_mod})]]}} {{hasextra=[[@{weaponhitbonusdie}]] }} {{extra=@{class_die_label}(@{weaponhitbonusdie}): [[@{weaponhitbonusdie}cf<2cs>3]]}}">S</button>
<input type="text" name="attr_weaponnotes" class="width80 up4" placeholder="Notes, Ammunition, Special..." spellcheck=false />
<span class="label small">Sig&nbsp;</span><input type="checkbox" name="attr_signature" checked>
</div>
</fieldset>
</div> <!-- close signature weapons -->
<label class="label width100 inverted center">
<span>SPECIAL ABILITIES AND SPELLS</span>
</label>
<div class="table-header">
<span class="width38 label inline">Name</span><span class="width13 label inline">Area</span> <span class="width12 label inline">Range</span> <span class="width14 label inline">Duration </span> <span class="width20 label inline"> Damage</span>
</div>
<div class="special-abilities list">
<fieldset class="repeating_powers">
<div class="list-item">
<input type="text" class="width38 item-name item-field" name="attr_powername" placeholder="Ability Name..." spellcheck=false />
<input type="text" class="width14 item-field" name="attr_powerarea" placeholder="10' rad..."/>
<input type="text" class="width11 item-field" name="attr_powerrange" placeholder="10'..." />
<input type="text" class="width14 item-field" name="attr_powerduration" placeholder="1 rnd/lvl..." />
<select name="attr_powerdamagenumdice" class="width5 item-field">
<option value="0" selected="selected">0</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
</select>
<select name="attr_powerdamagedie" class="width9 item-field">
<option value="d3">d3</option>
<option value="d4">d4</option>
<option value="d5">d5</option>
<option value="d6" selected="selected">d6</option>
<option value="d7">d7</option>
<option value="d8">d8</option>
<option value="d10">d10</option>
<option value="d12">d12</option>
<option value="d14">d14</option>
<option value="d16">d16</option>
</select>
<select name="attr_powerdamagebonus" class="width7 item-field">
<option value="-4">-4</option>
<option value="-3">-3</option>
<option value="-2">-2</option>
<option value="-1">-1</option>
<option value="0" selected="selected">+0</option>
<option value="1">+1</option>
<option value="2">+2</option>
<option value="3">+3</option>
<option value="4">+4</option>
</select>
<br/>
<button type="roll" class="small" name="roll_power_primary" value="&{template:power} {{character=@{character_name}}} {{power=@{powername}}} {{?{Situational Modifier|0} }}{{modifier=@{power_mod} }} {{roll=[[@{primary_action_die}@{primary_crit_threshold} + @{power_mod} + ?{Situational Modifier|0} ]] }} {{damage=[[@{powerdamagenumdice}@{powerdamagedie}cs0cf0+@{powerdamagebonus}]] }} {{critdie=@{crit_die} }} {{critroll=[[@{crit_die}cs0cf0 + @{luck_mod}]] }} {{fumbledie=@{fumble_die} }} {{fumbleroll=[[@{fumble_die}cs0cf0 -(@{luck_mod})]]}} {{notes=@{powernotes} }}">P</button><button type="roll" class="small" name="roll_power_secondary" value="&{template:power} {{character=@{character_name}}} {{power=@{powername}}} {{?{Situational Modifier|0} }} {{modifier=@{power_mod} }} {{roll=[[@{secondary_action_die}@{secondary_crit_threshold} + @{power_mod} + ?{Situational Modifier|0}]] }} {{damage=[[@{powerdamagenumdice}@{powerdamagedie}cs0cf0+@{powerdamagebonus}]] }} {{critdie=@{crit_die} }} {{critroll=[[@{crit_die}cs0cf0 + @{luck_mod}]] }} {{fumbledie=@{fumble_die} }} {{fumbleroll=[[@{fumble_die}cs0cf0 -(@{luck_mod})]]}} {{notes=@{powernotes} }}">S</button>
<input type="text" name="attr_powernotes" class="width85 up4" placeholder="Notes..." spellcheck=false />
</div>
</fieldset>
</div> <!-- close special abilities -->
</div> <!-- close rightcol -->
</div> <!-- close tab1 -->
<div class="tab2">
<img class="tab2" alt="Weird Frontiers Logo" src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/WeirdFrontiers/WeirdFrontiersLogo.png">
<div class="width52">
<label class="label inverted center">
<span>GOODS & SUNDRIES</span>
</label>
<div class="width100">
<textarea name="attr_sundries" class="sundries"></textarea>
</div>
<label class="label width100 inverted center">
<span>DINERO & VALUABLES</span>
</label>
<div class="width100">
<textarea name="attr_valuables" class="valuables"></textarea>
</div>
<label class="label width100 inverted center">
<span>ARCANE VAULT</span>
</label>
<div class="width100">
<textarea name="attr_arcane" class="arcane"></textarea>
</div>
</div>
<div class="width52 rightcol2">
<label class="label width100 inverted center">
<span>TRAIL NOTES</span>
</label>
<div class="width100">
<textarea name="attr_trail_notes" class="trail-notes"></textarea>
</div>
<label class="label width100 inverted center">
<span>STABLE</span>
</label>
<div class="width100">
<textarea name="attr_stable" class="stable"></textarea>
</div>
</div>
</div> <!-- end tab2 -->
<div class="tab3">
<div class="instructions">
<div class="width100 center biglabel inverted">SHEET INSTRUCTIONS</div>
<br/>
<div><input type="text" class="width12" disabled> Blue fields are for you to enter information</div>
<div><input type="text" class="width12 disabled" disabled> Grey fields are auto-calculated information; you cannot edit them</div>
<div><span class="width12 label">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<button class="btn" disabled />Modify</button>&nbsp;&nbsp;&nbsp;</span> Clicking this button allows you to reorder or delete Weapons or Spells</div>
<div><span class="label width12 inline">Actions</span> All characters have a Primary Action Die. At higher levels you get a Secondary Action Die.</div>
<div class="bigindent"> The "P" button next to a weapon or spell means using your primary action die</div>
<div class="bigindent"> The "S" button next to a weapon or spell means using your secondary action die (if any)</div>
<div><span class="label width12 inline">Attributes</span> Six main attributes (Strength, Agility, etc.) define your character</div>
<div class="bigindent"> Each attribute has a "max" field representing the normal value (when not modified by situational factors)</div>
<div class="bigindent"> The large field is the current value; it may have been raised by magic or lowered by spellburn</div>
<div class="bigindent"> The "mod" field represents a modifier (automatically applied to related rolls done from this sheet)</div>
<div class="bigindent"> The "T" button uses a d20 for trained skills; the "U" button uses a d10 for untrained</div>
<div><span class="label width12 inline">Birth Augur</span> You apply your luck modifier (positive or negative) to this type of roll</div>
<div class="bigindent"> This is not automatically added to sheet rolls and should be put into the Situational Modifier box</div>
<div><span class="label width12 inline">Boons</span> You begin a session with 0 boons and gain a boon whenever you roll a natural 20 on a d20 "attempt" roll.</div>
<div class="bigindent"> This includes attack rolls, saving throws, spell checks, rolling a 1 on a Luck check, etc</div>
<div class="bigindent"> Normal DCC rules for critical hits using other size dice apply (e.g. 20 or 24 on a d24 = boon)</div>
<div class="bigindent"> Spend a boon 1) for a reroll (except natural 1's/fumbles), 2) to gain +1d / -1d on one roll for you or ally, 3) gain +1d / -1d on both attack and damage for yourself, or 4) to negate a hex</div>
<div><span class="label width12 inline">Class</span> Each combination of class and level has associated attack and saving throw bonuses</div>
<div class="bigindent"> Selecting "0 Level" will set level to 0; changing from "0 Level" to anything else will set level to 1</div>
<div class="bigindent"> A class specific set of fields is located in the the lower left corner of the sheet</div>
<div><span class="label width12 inline">Grit</span> Representing your character's ability to withstand fear, this is expressed as "current / maximum"</div>
<div class="bigindent"> The maximum is the average of Stamina & Personality</div>
<div class="bigindent"> The button rolls a grit check (will save); failure means losing points from current total </div>
<div class="bigindent"> Reaching 0 grit means going mad and rolling on the Madness Table and losing a point off max grit </div>
<div class="bigindent"> If you modify Personality or Stamina, max grit will auto calculate; be sure to track permanent losses</div>
<div><span class="label width12 inline">Hexes</span> You begin a session with 0 hexes and gain a hex whenever you roll a natural 1 on an "attempt" roll.</div>
<div class="bigindent"> Each hex gives you a +1d on fumble rolls (automatically calculated) </div>
<div class="bigindent"> Each hex add 1 to the DC of Grit checks (tell the Judge when rolling) </div>
<div class="bigindent"> Each hex gives you a -1d on interaction rolls with NPCs </div>
<div class="bigindent"> Each hex gives you +10% on Madness Chart rolls </div>
<div><span class="label width12 inline">Hit Points</span> Representing your character's health, these are expressed as "current / maximum".</div>
<div><span class="label width12 inline">Initiative</span> Use the "20" button for 1 handed attacks and the "16" button for 2 handed</div>
<div class="bigindent"> Certain classes (Luchador, Tommyknocker) have additional rules about initiative dice </div>
<div class="bigindent"> Results are sent to Roll20's initiative tracker </div>
<div><span class="label width12 inline">Modifier</span> When making rolls from this sheet, you will be asked for a "Situational Modifier"</div>
<div class="bigindent"> Do NOT enter things like normal attribute/class/level bonuses; they are already included </div>
<div class="bigindent"> DO enter things like spellburn, luck burned before a roll, or anything the GM indicates </div>
<div class="bigindent"> DO enter very specific class benefits (e.g. lucky roll, Calaveras' double save mod vs undead)</div>
<div class="bigindent"> Enter a minus sign for negative values but NOT a plus sign for positive values</div>
<div><span class="label width12 inline">Powers & Weapons</span> Add an entry for each power/spell/weapon/etc. you may use</div>
<div class="bigindent"> The "P" button uses your primary action die </div>
<div class="bigindent"> The "S" button uses your secondary action die </div>
<div class="bigindent"> Class magic/attack bonuses and attribute bonuses (e.g. Spell Check) are included automatically </div>
<div class="bigindent"> Classes' special die (e.g. Lucha Die, Chi Die) will be rolled but must be added to attack roll </div>
</div>
</div> <!-- end tab3 -->
</div> <!-- end main -->
</div> <!-- end barb -->
<rolltemplate class="sheet-rolltemplate-ability-check">
<div>
<div class="sheet-rolltemplate-header">
<div class="sheet-rolltemplate-heading">{{character}}</div>
<div class="sheet-rolltemplate-subheading">{{ability}} Check</div>
</div>
<div class="sheet-rolltemplate-results">
<span class="sheet-rolltemplate-result">{{roll}}</span>
<br/>
<br/>
<div class="sheet-rolltemplate-extra-results">
<span class="sheet-rolltemplate-extra-result">Ability Score: {{score}}</span><br/>
<span class="sheet-rolltemplate-extra-result">Modifier: {{modifier}}</span>
{{#extra}}
<br/>
<span class="sheet-rolltemplate-extra-result">{{extra}}</span>
{{/extra}}
{{#rollWasCrit() roll}}
<br/>
<span>Critical: </span><span class="sheet-rolltemplate-green">Boon!</span>
{{/rollWasCrit() roll}}
{{#rollWasFumble() roll}}
<br/>
<span>Fumble: </span><span class="sheet-rolltemplate-red">Hex!</span>
{{/rollWasFumble() roll}}
</div>
</div>
</div>
</rolltemplate>
<rolltemplate class="sheet-rolltemplate-saving-throw">
<div>
<div class="sheet-rolltemplate-header">
<div class="sheet-rolltemplate-heading">{{character}}</div>
<div class="sheet-rolltemplate-subheading">{{save}} Save</div>
</div>
<div class="sheet-rolltemplate-results">
<span class="sheet-rolltemplate-result">{{roll}}</span>
<br/>
<br/>
<div class="sheet-rolltemplate-extra-results">
<span class="sheet-rolltemplate-extra-result">Modifier: {{modifier}}</span>
{{#extra}}
<br/>
<span class="sheet-rolltemplate-extra-result">{{extra}}</span>
{{/extra}}
{{#rollWasCrit() roll}}
<br/>
<span>Critical: </span><span class="sheet-rolltemplate-green">Boon!</span>
{{/rollWasCrit() roll}}
{{#rollWasFumble() roll}}
<br/>
<span>Fumble: </span><span class="sheet-rolltemplate-red">Hex!</span>
{{/rollWasFumble() roll}}
</div>
</div>
</div>
</rolltemplate>
<rolltemplate class="sheet-rolltemplate-attack">
<div>
<div class="sheet-rolltemplate-header">
<div class="sheet-rolltemplate-heading">{{character}}</div>
<div class="sheet-rolltemplate-subheading">{{weapon}} ({{weapontype}})</div>
</div>
<div class="sheet-rolltemplate-results">
<span class="sheet-rolltemplate-result">{{roll}}</span>
<br/>
<br/>
<div class="sheet-rolltemplate-extra-results">
<span class="sheet-rolltemplate-extra-result">Modifier (included): {{modifier}}</span>
<br/>
<span class="sheet-rolltemplate-extra-result">Damage: {{damage}}</span>
{{#rollGreater() hasextra 0}}
<br/>
<span class="sheet-rolltemplate-extra-result">{{extra}}</span>
{{/rollGreater() hasextra 0}}
{{#rollWasCrit() roll}}
<br/>
<span>Critical ({{critdie}}): </span>{{critroll}} & <span class="sheet-rolltemplate-green">Boon!</span>
{{/rollWasCrit() roll}}
{{#rollWasFumble() roll}}
<br/>
<span>Fumble ({{fumbledie}}): </span>{{fumbleroll}} & <span class="sheet-rolltemplate-red">Hex!</span>
{{/rollWasFumble() roll}}
</div>
</div>
</div>
</rolltemplate>
<rolltemplate class="sheet-rolltemplate-power">
<div>
<div class="sheet-rolltemplate-header">
<div class="sheet-rolltemplate-heading">{{character}}</div>
<div class="sheet-rolltemplate-subheading">{{power}}</div>
</div>
<div class="sheet-rolltemplate-results">
<span class="sheet-rolltemplate-result">{{roll}}</span>
<br/>
<br/>
<div class="sheet-rolltemplate-extra-results">
<span class="sheet-rolltemplate-extra-result">Modifier: {{modifier}}</span>
<br/>
<span class="sheet-rolltemplate-extra-result">Damage: {{damage}}</span>
{{#rollWasCrit() roll}}
<br/>
<span>Critical: </span><span class="sheet-rolltemplate-green">Boon!</span>
{{/rollWasCrit() roll}}
{{#rollWasFumble() roll}}
<br/>
<span>Fumble: </span><span class="sheet-rolltemplate-red">Hex!</span>
{{/rollWasFumble() roll}}
<br/>
<span class="sheet-rolltemplate-extra-result">Notes: <span class="sheet-rolltemplate-italic">{{notes}}</span></span>
</div>
</div>
</div>
</rolltemplate>
<rolltemplate class="sheet-rolltemplate-initiative">
<div>
<div class="sheet-rolltemplate-header">
<div class="sheet-rolltemplate-heading">{{character}}</div>
<div class="sheet-rolltemplate-subheading">Initiative</div>
</div>
<div class="sheet-rolltemplate-results">
<span class="sheet-rolltemplate-result">{{roll}}</span>
<br/>
<br/>
<div class="sheet-rolltemplate-extra-results">
<span class="sheet-rolltemplate-extra-result">Modifier: {{modifier}}</span>
</div>
</div>
</div>
</rolltemplate>
<rolltemplate class="sheet-rolltemplate-class-die">
<div>
<div class="sheet-rolltemplate-header">
<div class="sheet-rolltemplate-heading">{{character}}</div>
<div class="sheet-rolltemplate-subheading">{{label}}</div>
</div>
<div class="sheet-rolltemplate-results">
<span class="sheet-rolltemplate-result">{{roll}}</span>
<br/>
<br/>
<div class="sheet-rolltemplate-extra-results">
</div>
</div>
</div>
</rolltemplate>
<script type="text/worker">
var classList = ["Bedlamite", "Calavera", "Gunslinger", "Luchador", "Mountebank", "Occultist", "Revelator", "Sin-Eater", "Tommyknocker", "Other"];
var abilityScores = ["strength", "agility", "stamina", "personality", "luck", "intelligence"];
var abilityMods = [-3, -3, -3, -3, -2, -2, -1, -1, -1, 0, 0, 0, 0, 1, 1, 1, 2, 2, 3, 3];
var diceChain = ["d2", "d3", "d4", "d5", "d6", "d7", "d8", "d10", "d12", "d14", "d16", "d20", "d24", "d30"];
classes = {};
var zero = {attackBonus:0, damageBonus:0, ref:0, fort:0, will:0, crit:"d4", fumble:"d12", title:"Pardner", primaryActionDie:"d20", secondaryActionDie:"0", classDieLabel:"", critRange:"1", meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["zero-level"] = {name:"0 Level", hitDie:"d4", luckyRoll:""};
classes["zero-level"].levels = [];
classes["zero-level"].levels[0] = zero;
classes["bedlamite"] = {name:"Bedlamite", hitDie:"d8", powerAttribute:"intelligence", luckyRoll:"repair"};
classes["bedlamite"].levels = [];
classes["bedlamite"].levels[0] = zero;
classes["bedlamite"].levels[1] = {attackBonus:0, ref:1, fort:0, will:1, crit:"d6", fumble:"d12", title:"Grease Monkey", primaryActionDie:"d20", secondaryActionDie:"0", derangement:40, knownWondrousContraptions:3, knownMundaneContraptions:2, maxContraptions:5, maxContraptionLevel:1, meleeAttackBonusDie:"d0", meleeDamageBonusDie:"d0", rangedAttackBonusDie:"d0", rangedDamageBonusDie:"d0"};
classes["bedlamite"].levels[2] = {attackBonus:1, ref:1, fort:1, will:2, crit:"d7", fumble:"d10", title:"Wrench Savant", primaryActionDie:"d20", secondaryActionDie:"0", derangement:45, knownWondrousContraptions:4, knownMundaneContraptions:3, maxContraptions:6, maxContraptionLevel:1, meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["bedlamite"].levels[3] = {attackBonus:1, ref:2, fort:1, will:3, crit:"d7", fumble:"d10", title:"Machinist", primaryActionDie:"d20", secondaryActionDie:"0", derangement:50, knownWondrousContraptions:5, knownMundaneContraptions:4, maxContraptions:7, maxContraptionLevel:2, meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["bedlamite"].levels[4] = {attackBonus:2, ref:2, fort:2, will:4, crit:"d8", fumble:"d8", title:"Artificer", primaryActionDie:"d20", secondaryActionDie:"0", derangement:55, knownWondrousContraptions:6, knownMundaneContraptions:5, maxContraptions:8, maxContraptionLevel:2, meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["bedlamite"].levels[5] = {attackBonus:2, ref:3, fort:2, will:5, crit:"d8", fumble:"d8", title:"Bedlamite", primaryActionDie:"d20", secondaryActionDie:"d14", derangement:60, knownWondrousContraptions:7, knownMundaneContraptions:6, maxContraptions:9, maxContraptionLevel:3, meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["bedlamite"].levels[6] = {attackBonus:3, ref:3, fort:3, will:6, crit:"d10", fumble:"d7", title:"Bedlamite VI", primaryActionDie:"d20", secondaryActionDie:"d14", derangement:65, knownWondrousContraptions:8, knownMundaneContraptions:7, maxContraptions:10, maxContraptionLevel:3, meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["bedlamite"].levels[7] = {attackBonus:3, ref:4, fort:3, will:7, crit:"d10", fumble:"d7", title:"Bedlamite VII", primaryActionDie:"d20", secondaryActionDie:"d16", derangement:70, knownWondrousContraptions:9, knownMundaneContraptions:8, maxContraptions:11, maxContraptionLevel:4, meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["bedlamite"].levels[8] = {attackBonus:4, ref:4, fort:4, will:8, crit:"d12", fumble:"d6", title:"Bedlamite VIII", primaryActionDie:"d20", secondaryActionDie:"d16", derangement:75, knownWondrousContraptions:10, knownMundaneContraptions:9, maxContraptions:12, maxContraptionLevel:4, meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["bedlamite"].levels[9] = {attackBonus:4, ref:5, fort:4, will:9, crit:"d12", fumble:"d6", title:"Bedlamite IX", primaryActionDie:"d20", secondaryActionDie:"d20", derangement:80, knownWondrousContraptions:11, knownMundaneContraptions:10, maxContraptions:13, maxContraptionLevel:5, meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["bedlamite"].levels[10] = {attackBonus:5, ref:5, fort:5, will:10, crit:"d14", fumble:"d5", title:"Bedlamite X", primaryActionDie:"d20", secondaryActionDie:"d20", derangement:85, knownWondrousContraptions:12, knownMundaneContraptions:11, maxContraptions:14, maxContraptionLevel:5, meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["calavera"] = {name:"Calavera", hitDie:"d8", powerAttribute:"personality", luckyRoll:"dead speak"};
classes["calavera"].levels = [];
classes["calavera"].levels[0] = zero;
classes["calavera"].levels[1] = {attackBonus:1, ref:1, fort:0, will:1, crit:"d7", fumble:"d12", title:"Gloom-kin", primaryActionDie:"d20", secondaryActionDie:"0", meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["calavera"].levels[2] = {attackBonus:1, ref:1, fort:1, will:2, crit:"d7", fumble:"d10", title:"Harbinger", primaryActionDie:"d20", secondaryActionDie:"0", meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["calavera"].levels[3] = {attackBonus:2, ref:2, fort:1, will:2, crit:"d8", fumble:"d10", title:"Banshee", primaryActionDie:"d20", secondaryActionDie:"0", meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["calavera"].levels[4] = {attackBonus:3, ref:3, fort:2, will:3, crit:"d8", fumble:"d8", title:"Ill-boder", primaryActionDie:"d20", secondaryActionDie:"0", meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["calavera"].levels[5] = {attackBonus:3, ref:3, fort:2, will:4, crit:"d10", fumble:"d8", title:"Calavera", primaryActionDie:"d20", secondaryActionDie:"d14", meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["calavera"].levels[6] = {attackBonus:4, ref:4, fort:3, will:4, crit:"d10", fumble:"d7", title:"Calavera VI", primaryActionDie:"d20", secondaryActionDie:"d14", meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["calavera"].levels[7] = {attackBonus:5, ref:5, fort:3, will:5, crit:"d12", fumble:"d7", title:"Calavera VII", primaryActionDie:"d20", secondaryActionDie:"d16", meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["calavera"].levels[8] = {attackBonus:5, ref:5, fort:4, will:6, crit:"d12", fumble:"d6", title:"Calavera VIII", primaryActionDie:"d20", secondaryActionDie:"d16", meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["calavera"].levels[9] = {attackBonus:6, ref:6, fort:5, will:6, crit:"d14", fumble:"d6", title:"Calavera IX", primaryActionDie:"d20", secondaryActionDie:"d20", meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["calavera"].levels[10] = {attackBonus:7, ref:6, fort:5, will:7, crit:"d16", fumble:"d4", title:"Calavera X", primaryActionDie:"d20", secondaryActionDie:"d20", meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["gambler"] = {name:"Gambler", hitDie:"d8", classDieLabel: "Mojo Die (bushw only)", luckyRoll:"all saves"};
classes["gambler"].levels = [];
classes["gambler"].levels[0] = zero;
classes["gambler"].levels[1] = {attackBonus:1, ref:1, fort:0, will:1, crit:"d8", fumble:"d12", title:"Gamester", primaryActionDie:"d20", secondaryActionDie:"", classDie:"d3", meleeAttackBonusDie:"d3", meleeDamageBonusDie:"0", rangedAttackBonusDie:"d3", rangedDamageBonusDie:"0"};
classes["gambler"].levels[2] = {attackBonus:2, ref:2, fort:0, will:1, crit:"d8", fumble:"d12", title:"Cardsharp", primaryActionDie:"d20", secondaryActionDie:"", classDie:"d4", meleeAttackBonusDie:"d4", meleeDamageBonusDie:"0", rangedAttackBonusDie:"d4", rangedDamageBonusDie:"0"};
classes["gambler"].levels[3] = {attackBonus:2, ref:2, fort:1, will:2, crit:"d10", fumble:"d12", title:"Tinhorn", primaryActionDie:"d20", secondaryActionDie:"", classDie:"d5", meleeAttackBonusDie:"d5", meleeDamageBonusDie:"0", rangedAttackBonusDie:"d5", rangedDamageBonusDie:"0"};
classes["gambler"].levels[4] = {attackBonus:3, ref:3, fort:1, will:2, crit:"d10", fumble:"d10", title:"Black-leg", primaryActionDie:"d20", secondaryActionDie:"", classDie:"d6", meleeAttackBonusDie:"d6", meleeDamageBonusDie:"0", rangedAttackBonusDie:"d6", rangedDamageBonusDie:"0"};
classes["gambler"].levels[5] = {attackBonus:4, ref:3, fort:2, will:3, crit:"d12", fumble:"d10", title:"Gambler", primaryActionDie:"d20", secondaryActionDie:"d14", classDie:"d7", meleeAttackBonusDie:"d7", meleeDamageBonusDie:"0", rangedAttackBonusDie:"d7", rangedDamageBonusDie:"0"};
classes["gambler"].levels[6] = {attackBonus:4, ref:4, fort:2, will:3, crit:"d12", fumble:"d8", title:"Gambler VI", primaryActionDie:"d20", secondaryActionDie:"d16", classDie:"d8", meleeAttackBonusDie:"d8", meleeDamageBonusDie:"0", rangedAttackBonusDie:"d8", rangedDamageBonusDie:"0"};
classes["gambler"].levels[7] = {attackBonus:5, ref:4, fort:3, will:4, crit:"d14", fumble:"d8", title:"Gambler VII", primaryActionDie:"d20", secondaryActionDie:"d20", classDie:"d10", meleeAttackBonusDie:"d10", meleeDamageBonusDie:"0", rangedAttackBonusDie:"d10", rangedDamageBonusDie:"0"};
classes["gambler"].levels[8] = {attackBonus:6, ref:5, fort:3, will:4, crit:"d14", fumble:"d7", title:"Gambler VII", primaryActionDie:"d24", secondaryActionDie:"d20", classDie:"d12", meleeAttackBonusDie:"d12", meleeDamageBonusDie:"0", rangedAttackBonusDie:"d12", rangedDamageBonusDie:"0"};
classes["gambler"].levels[9] = {attackBonus:6, ref:5, fort:4, will:5, crit:"d16", fumble:"d7", title:"Gambler IX", primaryActionDie:"d24", secondaryActionDie:"d20", classDie:"d14", meleeAttackBonusDie:"d14", meleeDamageBonusDie:"0", rangedAttackBonusDie:"d14", rangedDamageBonusDie:"0"};
classes["gambler"].levels[10] = {attackBonus:7, ref:6, fort:4, will:5, crit:"d16", fumble:"d6", title:"Gambler X", primaryActionDie:"d24", secondaryActionDie:"d24", classDie:"d16", meleeAttackBonusDie:"d16", meleeDamageBonusDie:"0", rangedAttackBonusDie:"d16", rangedDamageBonusDie:"0"};
classes["gunslinger"] = {name:"Gunslinger", hitDie:"d10", classDieLabel:"Deadeye Die (gh. iron)", luckyRoll:"gun initiative"};
classes["gunslinger"].levels = [];
classes["gunslinger"].levels[0] = zero;
classes["gunslinger"].levels[1] = {attackBonus:0, ref:1, fort:1, will:0, crit:"d10", fumble:"d12", title: "Drifter", primaryActionDie:"d20", secondaryActionDie:"", classDie:"d3", critRange:"2", critRangeDisplay:"19-20", meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"d3", rangedDamageBonusDie:"0"};
classes["gunslinger"].levels[2] = {attackBonus:0, ref:2, fort:1, will:1, crit:"d10", fumble:"d10", title:"Persuader", primaryActionDie:"d20", secondaryActionDie:"", classDie:"d4", critRange:"2", critRangeDisplay:"19-20", meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"d4", rangedDamageBonusDie:"0"};
classes["gunslinger"].levels[3] = {attackBonus:0, ref:3, fort:2, will:1, crit:"d12", fumble:"d10", title:"Maverick", primaryActionDie:"d20", secondaryActionDie:"", classDie:"d5", critRange:"2", critRangeDisplay:"19-20", meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"d5", rangedDamageBonusDie:"0"};
classes["gunslinger"].levels[4] = {attackBonus:0, ref:4, fort:2, will:2, crit:"d12", fumble:"d8", title:"Renegade", primaryActionDie:"d20", secondaryActionDie:"", classDie:"d6", critRange:"2", critRangeDisplay:"19-20", meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"d6", rangedDamageBonusDie:"0"};
classes["gunslinger"].levels[5] = {attackBonus:0, ref:5, fort:3, will:2, crit:"d14", fumble:"d7", title:"Shootist", primaryActionDie:"d20", secondaryActionDie:"d14", classDie:"d7", critRange:"3", critRangeDisplay:"18-20", meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"d7", rangedDamageBonusDie:"0"};
classes["gunslinger"].levels[6] = {attackBonus:0, ref:6, fort:3, will:3, crit:"d16", fumble:"d6", title:"Shootist VI", primaryActionDie:"d20", secondaryActionDie:"d16", classDie:"d8", critRange:"3", critRangeDisplay:"18-20", meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"d8", rangedDamageBonusDie:"0"};
classes["gunslinger"].levels[7] = {attackBonus:0, ref:7, fort:4, will:3, crit:"d20", fumble:"d6", title:"Shootist VII", primaryActionDie:"d20", secondaryActionDie:"d20", classDie:"d10", critRange:"3", critRangeDisplay:"18-20", meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"d10", rangedDamageBonusDie:"0"};
classes["gunslinger"].levels[8] = {attackBonus:0, ref:8, fort:4, will:4, crit:"d20+1", fumble:"d5", title:"Shootist VIII", primaryActionDie:"d24", secondaryActionDie:"d20", classDie:"d12", critRange:"3", critRangeDisplay:"18-20", meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"d12", rangedDamageBonusDie:"0"};
classes["gunslinger"].levels[9] = {attackBonus:0, ref:9, fort:5, will:4, crit:"d24", fumble:"d4", title:"Shootist IX", primaryActionDie:"d24", secondaryActionDie:"d20", classDie:"d14", critRange:"4", critRangeDisplay:"17-20", meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"d14", rangedDamageBonusDie:"0"};
classes["gunslinger"].levels[10] = {attackBonus:0, ref:10, fort:5, will:5, crit:"d24+1", fumble:"d3", title:"Shootist X", primaryActionDie:"d24", secondaryActionDie:"d24", classDie:"d16", critRange:"4", critRangeDisplay:"17-20", meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"d16", rangedDamageBonusDie:"0"};
classes["hellbilly"] = {name:"Hellbilly", hitDie:"d12", classDieLabel:"Ballad Die", luckyRoll: "mntn. lore"};
classes["hellbilly"].levels = [];
classes["hellbilly"].levels[0] = zero;
classes["hellbilly"].levels[1] = {attackBonus:1, damageBonus:0, ref:0, fort:1, will:1, crit:"d10", fumble:"d12", title:"Hellion", primaryActionDie:"d20", secondaryActionDie:"0", classDie:"d3", meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"d0", rangedDamageBonusDie:"d0"};
classes["hellbilly"].levels[2] = {attackBonus:1, damageBonus:0, ref:1, fort:2, will:1, crit:"d10", fumble:"d10", title:"Hayseed", primaryActionDie:"d20", secondaryActionDie:"0", classDie:"d4", meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["hellbilly"].levels[3] = {attackBonus:2, damageBonus:0, ref:2, fort:2, will:2, crit:"d12", fumble:"d10", title:"Wood Booger", primaryActionDie:"d20", secondaryActionDie:"0", classDie:"d5", meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["hellbilly"].levels[4] = {attackBonus:2, damageBonus:0, ref:2, fort:3, will:2, crit:"d12", fumble:"d8", title:"Mountain Devil", primaryActionDie:"d20", secondaryActionDie:"0", classDie:"d6", meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["hellbilly"].levels[5] = {attackBonus:3, damageBonus:0, ref:3, fort:3, will:3, crit:"d14", fumble:"d8", title:"Hellbilly", primaryActionDie:"d20", secondaryActionDie:"d14", classDie:"d7", meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["hellbilly"].levels[6] = {attackBonus:3, damageBonus:0, ref:3, fort:4, will:3, crit:"d14", fumble:"d7", title:"Hellbilly VI", primaryActionDie:"d20", secondaryActionDie:"d16", classDie:"d8", meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["hellbilly"].levels[7] = {attackBonus:4, damageBonus:0, ref:4, fort:4, will:4, crit:"d16", fumble:"d7", title:"Hellbilly VII", primaryActionDie:"d20", secondaryActionDie:"d20", classDie:"d10", meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["hellbilly"].levels[8] = {attackBonus:4, damageBonus:0, ref:4, fort:5, will:4, crit:"d16", fumble:"d6", title:"Hellbilly VIII", primaryActionDie:"d20+1", secondaryActionDie:"d20", classDie:"d12", meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["hellbilly"].levels[9] = {attackBonus:5, damageBonus:0, ref:5, fort:5, will:5, crit:"d20", fumble:"d6", title:"Hellbilly IX", primaryActionDie:"d20+2", secondaryActionDie:"d20", classDie:"d14", meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["hellbilly"].levels[10] = {attackBonus:5, damageBonus:0, ref:5, fort:6, will:5, crit:"d20", fumble:"d5", title:"Hellbilly X", primaryActionDie:"d20+3", secondaryActionDie:"d20", classDie:"d16", meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["luchador"] = {name:"Luchador", hitDie:"d12", classDieLabel:"Lucha Die (Unarm.)", luckyRoll:"reflex"};
classes["luchador"].levels = [];
classes["luchador"].levels[0] = zero;
classes["luchador"].levels[1] = {attackBonus:0, damageBonus:0, ref:1, fort:1, will:0, crit:"d10", fumble:"d12", title:"Pluma", primaryActionDie:"d20", secondaryActionDie:"0", classDie:"d3", meleeAttackBonusDie:"d3", meleeDamageBonusDie:"d3", rangedAttackBonusDie:"d0", rangedDamageBonusDie:"d0", fame:35, battleHardenedDie:"d8"};
classes["luchador"].levels[2] = {attackBonus:0, damageBonus:0, ref:1, fort:2, will:1, crit:"d12", fumble:"d10", title:"Gallo", primaryActionDie:"d20", secondaryActionDie:"0", classDie:"d4", meleeAttackBonusDie:"d4", meleeDamageBonusDie:"d4", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0", fame:45, battleHardenedDie:"d8"};
classes["luchador"].levels[3] = {attackBonus:0, damageBonus:0, ref:2, fort:3, will:1, crit:"d14", fumble:"d8", title:"La máscara", primaryActionDie:"d20", secondaryActionDie:"0", classDie:"d5", meleeAttackBonusDie:"d5", meleeDamageBonusDie:"d5", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0", fame:50, battleHardenedDie:"d10"};
classes["luchador"].levels[4] = {attackBonus:0, damageBonus:0, ref:2, fort:3, will:2, crit:"d16", fumble:"d7", title:"Técnico", primaryActionDie:"d20", secondaryActionDie:"0", classDie:"d6", meleeAttackBonusDie:"d6", meleeDamageBonusDie:"d6", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0", fame:55, battleHardenedDie:"d10"};
classes["luchador"].levels[5] = {attackBonus:0, damageBonus:0, ref:3, fort:4, will:2, crit:"d16+1", fumble:"d6", title:"Luchador", primaryActionDie:"d20", secondaryActionDie:"d14", classDie:"d7", meleeAttackBonusDie:"d7", meleeDamageBonusDie:"d7", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0", fame:60, battleHardenedDie:"d12"};
classes["luchador"].levels[6] = {attackBonus:0, damageBonus:0, ref:3, fort:4, will:3, crit:"d20", fumble:"d5", title:"Luchador VI", primaryActionDie:"d20", secondaryActionDie:"d16", classDie:"d8", meleeAttackBonusDie:"d8", meleeDamageBonusDie:"d8", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0", fame:65, battleHardenedDie:"d12"};
classes["luchador"].levels[7] = {attackBonus:0, damageBonus:0, ref:4, fort:5, will:3, crit:"d20+1", fumble:"d4", title:"Luchador VII", primaryActionDie:"d20", secondaryActionDie:"d20", classDie:"d10", meleeAttackBonusDie:"d10", meleeDamageBonusDie:"d10", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0", fame:70, battleHardenedDie:"d14"};
classes["luchador"].levels[8] = {attackBonus:0, damageBonus:0, ref:4, fort:5, will:4, crit:"d24", fumble:"d3", title:"Luchador VIII", primaryActionDie:"d24", secondaryActionDie:"d20", classDie:"d12", meleeAttackBonusDie:"d12", meleeDamageBonusDie:"d12", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0", fame:80, battleHardenedDie:"d14"};
classes["luchador"].levels[9] = {attackBonus:0, damageBonus:0, ref:5, fort:6, will:4, crit:"d24+1", fumble:"d3", title:"Luchador IX", primaryActionDie:"d24", secondaryActionDie:"d24", classDie:"d12+1", meleeAttackBonusDie:"d12+1", meleeDamageBonusDie:"d12+1", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0", fame:90, battleHardenedDie:"d16"};
classes["luchador"].levels[10] = {attackBonus:0, damageBonus:0, ref:6, fort:6, will:5, crit:"d30", fumble:"d2", title:"Luchador X", primaryActionDie:"d30", secondaryActionDie:"d24", classDie:"d12+2", meleeAttackBonusDie:"d12+2", meleeDamageBonusDie:"d12+2", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0", fame:100, battleHardenedDie:"d16"};
classes["mountebank"] = {name:"Mountebank", hitDie:"d6", powerAttribute:"intelligence", luckyRoll:"showmanship"}
classes["mountebank"].levels = [];
classes["mountebank"].levels[0] = zero;
classes["mountebank"].levels[1] = {attackBonus:0, damageBonus:0, ref:1, fort:0, will:1, crit:"d6", fumble:"d12", title:"Quacksalver", primaryActionDie:"d20", secondaryActionDie:"0", classDie:"0", knownFormulae:4, maxFormulaLevel:1, maxActiveFormulae:2, fireBombDamage:"1d6", acidBombDamage:"1d5", adhesive:"12\" / 10 lbs", poulticeHealing:"1d4", meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["mountebank"].levels[2] = {attackBonus:1, damageBonus:0, ref:1, fort:1, will:1, crit:"d6", fumble:"d12", title:"Cook", primaryActionDie:"d20", secondaryActionDie:"0", classDie:"0", knownFormulae:5, maxFormulaLevel:1, maxActiveFormulae:2, fireBombDamage:"1d6", acidBombDamage:"1d5", adhesive:"24\" / 25 lbs", poulticeHealing:"1d4", meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["mountebank"].levels[3] = {attackBonus:1, damageBonus:0, ref:2, fort:1, will:2, crit:"d8", fumble:"d10", title:"Craftsman", primaryActionDie:"d20", secondaryActionDie:"0", classDie:"0", knownFormulae:6, maxFormulaLevel:2, maxActiveFormulae:3, fireBombDamage:"1d8", acidBombDamage:"1d6", adhesive:"36\" / 35 lbs", poulticeHealing:"1d5", meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["mountebank"].levels[4] = {attackBonus:2, damageBonus:0, ref:2, fort:2, will:2, crit:"d8", fumble:"d10", title:"Chemist", primaryActionDie:"d20", secondaryActionDie:"0", classDie:"0", knownFormulae:7, maxFormulaLevel:2, maxActiveFormulae:3, fireBombDamage:"1d8", acidBombDamage:"1d6", adhesive:"48\" / 45 lbs", poulticeHealing:"1d5", meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["mountebank"].levels[5] = {attackBonus:2, damageBonus:0, ref:3, fort:2, will:3, crit:"d10", fumble:"d8", title:"Mountebank", primaryActionDie:"d20", secondaryActionDie:"d14", classDie:"0", knownFormulae:8, maxFormulaLevel:3, maxActiveFormulae:4, fireBombDamage:"1d10", acidBombDamage:"1d8", adhesive:"60\" / 55 lbs", poulticeHealing:"1d6", meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["mountebank"].levels[6] = {attackBonus:3, damageBonus:0, ref:3, fort:3, will:3, crit:"d10", fumble:"d8", title:"Mountebank VI", primaryActionDie:"d20", secondaryActionDie:"d16", classDie:"0", knownFormulae:9, maxFormulaLevel:3, maxActiveFormulae:4, fireBombDamage:"1d10", acidBombDamage:"1d8", adhesive:"72\" / 65 lbs", poulticeHealing:"1d6", meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["mountebank"].levels[7] = {attackBonus:3, damageBonus:0, ref:4, fort:3, will:4, crit:"d12", fumble:"d7", title:"Mountebank VII", primaryActionDie:"d20", secondaryActionDie:"d20", classDie:"0", knownFormulae:10, maxFormulaLevel:4, maxActiveFormulae:5, fireBombDamage:"1d12", acidBombDamage:"1d10", adhesive:"84\" / 75 lbs", poulticeHealing:"1d8", meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["mountebank"].levels[8] = {attackBonus:4, damageBonus:0, ref:4, fort:4, will:4, crit:"d14", fumble:"d7", title:"Mountebank VIII", primaryActionDie:"d24", secondaryActionDie:"d20", classDie:"0", knownFormulae:11, maxFormulaLevel:4, maxActiveFormulae:5, fireBombDamage:"1d12", acidBombDamage:"1d10", adhesive:"96\" / 85 lbs", poulticeHealing:"1d8", meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["mountebank"].levels[9] = {attackBonus:4, damageBonus:0, ref:5, fort:4, will:5, crit:"d14", fumble:"d6", title:"Mountebank IX", primaryActionDie:"d24", secondaryActionDie:"d20", classDie:"0", knownFormulae:12, maxFormulaLevel:5, maxActiveFormulae:6, fireBombDamage:"1d14", acidBombDamage:"1d12", adhesive:"108\" / 95 lbs", poulticeHealing:"1d10", meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["mountebank"].levels[10] = {attackBonus:5, damageBonus:0, ref:6, fort:5, will:5, crit:"d16", fumble:"d6", title:"Mountebank X", primaryActionDie:"d24", secondaryActionDie:"d24", classDie:"0", knownFormulae:13, maxFormulaLevel:5, maxActiveFormulae:6, fireBombDamage:"1d14", acidBombDamage:"1d12", adhesive:"120\" / 105 lbs", poulticeHealing:"1d10", meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["mystic-monk"] = {name:"Mystic Monk", hitDie:"d10", classDieLabel:"Chi Die", luckyRoll:"initiative"};
classes["mystic-monk"].levels = [];
classes["mystic-monk"].levels[0] = zero;
classes["mystic-monk"].levels[1] = {attackBonus:0, damageBonus:0, ref:1, fort:0, will:1, crit:"d10", fumble:"d12", title:"Wandering Son", primaryActionDie:"d20", secondaryActionDie:"0", classDie:"d3", livingWeapon:"d6", meleeAttackBonusDie:"d3", meleeDamageBonusDie:"d3", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["mystic-monk"].levels[2] = {attackBonus:0, damageBonus:0, ref:2, fort:1, will:1, crit:"d12", fumble:"d10", title:"Seeker of the Way", primaryActionDie:"d20", secondaryActionDie:"0", classDie:"d4", livingWeapon:"d6", meleeAttackBonusDie:"d4", meleeDamageBonusDie:"d4", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["mystic-monk"].levels[3] = {attackBonus:0, damageBonus:0, ref:3, fort:1, will:2, crit:"d14", fumble:"d8", title:"Follower of the Dragon Path", primaryActionDie:"d20", secondaryActionDie:"0", classDie:"d5", livingWeapon:"d7", meleeAttackBonusDie:"d5", meleeDamageBonusDie:"d5", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["mystic-monk"].levels[4] = {attackBonus:0, damageBonus:0, ref:4, fort:2, will:3, crit:"d16", fumble:"d6", title:"Initiate of Mysteries", primaryActionDie:"d20", secondaryActionDie:"0", classDie:"d6", livingWeapon:"d7", meleeAttackBonusDie:"d6", meleeDamageBonusDie:"d6", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["mystic-monk"].levels[5] = {attackBonus:0, damageBonus:0, ref:5, fort:2, will:3, crit:"d16+1", fumble:"d5", title:"Mystic Monk", primaryActionDie:"d20", secondaryActionDie:"d14", classDie:"d7", livingWeapon:"d8", meleeAttackBonusDie:"d7", meleeDamageBonusDie:"d7", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["mystic-monk"].levels[6] = {attackBonus:0, damageBonus:0, ref:6, fort:3, will:4, crit:"d16+2", fumble:"d4", title:"Mystic Monk VI", primaryActionDie:"d20", secondaryActionDie:"d16", classDie:"d8", livingWeapon:"d8", meleeAttackBonusDie:"d8", meleeDamageBonusDie:"d8", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["mystic-monk"].levels[7] = {attackBonus:0, damageBonus:0, ref:7, fort:3, will:4, crit:"d20", fumble:"d4", title:"Mystic Monk VII", primaryActionDie:"d20", secondaryActionDie:"d20", classDie:"d10", livingWeapon:"d10", meleeAttackBonusDie:"d10", meleeDamageBonusDie:"d10", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["mystic-monk"].levels[8] = {attackBonus:0, damageBonus:0, ref:8, fort:4, will:5, crit:"d20+1", fumble:"d3", title:"Mystic Monk VIII", primaryActionDie:"d24", secondaryActionDie:"d20", classDie:"d12+1", livingWeapon:"d10", meleeAttackBonusDie:"d12+1", meleeDamageBonusDie:"d12+1", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["mystic-monk"].levels[9] = {attackBonus:0, damageBonus:0, ref:9, fort:4, will:6, crit:"d24", fumble:"d3", title:"Mystic Monk IX", primaryActionDie:"d24", secondaryActionDie:"d20", classDie:"d12+2", livingWeapon:"d12", meleeAttackBonusDie:"d12+2", meleeDamageBonusDie:"d12+2", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["mystic-monk"].levels[10] = {attackBonus:0, damageBonus:0, ref:10, fort:5, will:6, crit:"d30", fumble:"d3-1", title:"Mystic Monk X", primaryActionDie:"d24", secondaryActionDie:"d24", classDie:"d14", livingWeapon:"d12", meleeAttackBonusDie:"d14", meleeDamageBonusDie:"d14", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["occultist"] = {name:"Occultist", hitDie:"d6", powerAttribute:"intelligence", luckyRoll:"investigation"};
classes["occultist"].levels = [];
classes["occultist"].levels[0] = zero;
classes["occultist"].levels[1] = {attackBonus:0, damageBonus:0, ref:1, fort:0, will:1, crit:"d6", fumble:"d12", title:"Conjurer", primaryActionDie:"d20", secondaryActionDie:"0", classDie:"0", knownSpells:4, maxSpellLevel:1, meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["occultist"].levels[2] = {attackBonus:1, damageBonus:0, ref:1, fort:1, will:2, crit:"d6", fumble:"d12", title:"Warlock", primaryActionDie:"d20", secondaryActionDie:"0", classDie:"0", knownSpells:5, maxSpellLevel:1, meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["occultist"].levels[3] = {attackBonus:1, damageBonus:0, ref:2, fort:1, will:3, crit:"d7", fumble:"d12", title:"Enchanter", primaryActionDie:"d20", secondaryActionDie:"0", classDie:"0", knownSpells:6, maxSpellLevel:2, meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["occultist"].levels[4] = {attackBonus:2, damageBonus:0, ref:2, fort:1, will:4, crit:"d7", fumble:"d10", title:"Soothsayer", primaryActionDie:"d20", secondaryActionDie:"0", classDie:"0", knownSpells:7, maxSpellLevel:2, meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["occultist"].levels[5] = {attackBonus:2, damageBonus:0, ref:3, fort:2, will:5, crit:"d8", fumble:"d10", title:"Occultist", primaryActionDie:"d20", secondaryActionDie:"d14", classDie:"0", knownSpells:8, maxSpellLevel:3, meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["occultist"].levels[6] = {attackBonus:3, damageBonus:0, ref:3, fort:2, will:6, crit:"d8", fumble:"d10", title:"Occultist VI", primaryActionDie:"d20", secondaryActionDie:"d16", classDie:"0", knownSpells:9, maxSpellLevel:3, meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["occultist"].levels[7] = {attackBonus:3, damageBonus:0, ref:4, fort:2, will:7, crit:"d8", fumble:"d8", title:"Occultist VII", primaryActionDie:"d20", secondaryActionDie:"d20", classDie:"0", knownSpells:10, maxSpellLevel:4, meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["occultist"].levels[8] = {attackBonus:4, damageBonus:0, ref:4, fort:3, will:8, crit:"d8", fumble:"d8", title:"Occultist VIII", primaryActionDie:"d20+1", secondaryActionDie:"d20", classDie:"0", knownSpells:12, maxSpellLevel:4, meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["occultist"].levels[9] = {attackBonus:4, damageBonus:0, ref:5, fort:3, will:9, crit:"d10", fumble:"d7", title:"Occultist IX", primaryActionDie:"d20+2", secondaryActionDie:"d20", classDie:"0", knownSpells:14, maxSpellLevel:5, meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["occultist"].levels[10] = {attackBonus:5, damageBonus:0, ref:5, fort:4, will:10, crit:"d10", fumble:"d7", title:"Occultist X", primaryActionDie:"d20+3", secondaryActionDie:"d20", classDie:"0", knownSpells:16, maxSpellLevel:5, meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["revelator"] = {name:"Revelator", hitDie:"d8", powerAttribute:"personality", luckyRoll:"will save"};
classes["revelator"].levels = [];
classes["revelator"].levels[0] = zero;
classes["revelator"].levels[1] = {attackBonus:0, ref:0, fort:1, will:1, crit:"d8", fumble:"d12", title:"Bible Beater", primaryActionDie:"d20", secondaryActionDie:"0", spellsFirst:4, spellsSecond:0, spellsThird:0, spellsFourth:0, spellsFifth:0, meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["revelator"].levels[2] = {attackBonus:1, ref:0, fort:1, will:2, crit:"d8", fumble:"d10", title:"Evangelist", primaryActionDie:"d20", secondaryActionDie:"0", spellsFirst:5, spellsSecond:0, spellsThird:0, spellsFourth:0, spellsFifth:0, meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["revelator"].levels[3] = {attackBonus:2, ref:1, fort:1, will:3, crit:"d10", fumble:"d10", title:"Preacher", primaryActionDie:"d20", secondaryActionDie:"0", spellsFirst:5, spellsSecond:3, spellsThird:0, spellsFourth:0, spellsFifth:0, meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["revelator"].levels[4] = {attackBonus:2, ref:1, fort:2, will:4, crit:"d10", fumble:"d8", title:"Revivalist", primaryActionDie:"d20", secondaryActionDie:"0", spellsFirst:6, spellsSecond:4, spellsThird:0, spellsFourth:0, spellsFifth:0, meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["revelator"].levels[5] = {attackBonus:3, ref:1, fort:2, will:5, crit:"d12", fumble:"d8", title:"Revelator", primaryActionDie:"d20", secondaryActionDie:"0", spellsFirst:6, spellsSecond:5, spellsThird:2, spellsFourth:0, spellsFifth:0, meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["revelator"].levels[6] = {attackBonus:4, ref:2, fort:2, will:6, crit:"d12", fumble:"d7", title:"Revelator VI", primaryActionDie:"d20", secondaryActionDie:"d16", spellsFirst:7, spellsSecond:5, spellsThird:3, spellsFourth:0, spellsFifth:0, meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["revelator"].levels[7] = {attackBonus:5, ref:2, fort:3, will:7, crit:"d14", fumble:"d7", title:"Revelator VII", primaryActionDie:"d20", secondaryActionDie:"d20", spellsFirst:7, spellsSecond:6, spellsThird:4, spellsFourth:1, spellsFifth:0, meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["revelator"].levels[8] = {attackBonus:5, ref:2, fort:3, will:8, crit:"d14", fumble:"d6", title:"Revelator VIII", primaryActionDie:"d24", secondaryActionDie:"d20", spellsFirst:8, spellsSecond:6, spellsThird:5, spellsFourth:2, spellsFifth:0, meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["revelator"].levels[9] = {attackBonus:6, ref:3, fort:3, will:9, crit:"d16", fumble:"d6", title:"Revelator IX", primaryActionDie:"d24", secondaryActionDie:"d20", spellsFirst:8, spellsSecond:7, spellsThird:5, spellsFourth:3, spellsFifth:1, meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["revelator"].levels[10] = {attackBonus:7, ref:3, fort:5, will:10, crit:"d16", fumble:"d5", title:"Revelator X", primaryActionDie:"d24", secondaryActionDie:"d20", spellsFirst:9, spellsSecond:7, spellsThird:6, spellsFourth:4, spellsFifth:2, meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["sin-eater"] = {name:"Sin Eater", hitDie:"d10", powerAttribute:"personality", luckyRoll:"navigation"};
classes["sin-eater"].levels = [];
classes["sin-eater"].levels[0] = zero;
classes["sin-eater"].levels[1] = {attackBonus:1, ref:0, fort:1, will:2, crit:"d10", fumble:"d12", title:"Soul Shepherd", primaryActionDie:"d20", secondaryActionDie:"0", meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["sin-eater"].levels[2] = {attackBonus:2, ref:1, fort:2, will:2, crit:"d10", fumble:"d12", title:"Raven-kin", primaryActionDie:"d20", secondaryActionDie:"0", meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["sin-eater"].levels[3] = {attackBonus:3, ref:1, fort:3, will:2, crit:"d12", fumble:"d10", title:"Nomad", primaryActionDie:"d20", secondaryActionDie:"0", meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["sin-eater"].levels[4] = {attackBonus:3, ref:2, fort:4, will:3, crit:"d12", fumble:"d10", title:"Spirit-warden", primaryActionDie:"d20", secondaryActionDie:"0", meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["sin-eater"].levels[5] = {attackBonus:4, ref:2, fort:4, will:3, crit:"d14", fumble:"d8", title:"Sin-eater", primaryActionDie:"d20", secondaryActionDie:"d14", meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["sin-eater"].levels[6] = {attackBonus:5, ref:3, fort:5, will:4, crit:"d14", fumble:"d8", title:"Sin-eater VI", primaryActionDie:"d20", secondaryActionDie:"d16", meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["sin-eater"].levels[7] = {attackBonus:6, ref:3, fort:5, will:4, crit:"d14", fumble:"d7", title:"Sin-eater VII", primaryActionDie:"d20", secondaryActionDie:"d20", meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["sin-eater"].levels[8] = {attackBonus:6, ref:4, fort:6, will:5, crit:"d16", fumble:"d7", title:"Sin-eater VIII", primaryActionDie:"d24", secondaryActionDie:"d20", meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["sin-eater"].levels[9] = {attackBonus:7, ref:4, fort:6, will:5, crit:"d16", fumble:"d6", title:"Sin-eater IX", primaryActionDie:"d24", secondaryActionDie:"d24", meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["sin-eater"].levels[10] = {attackBonus:8, ref:5, fort:7, will:6, crit:"d20", fumble:"d6", title:"Sin-eater X", primaryActionDie:"d24", secondaryActionDie:"d24", meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["tommyknocker"] = {name:"Tommyknocker", hitDie:"d14", luckyRoll:"fort save"};
classes["tommyknocker"].levels = [];
classes["tommyknocker"].levels[0] = zero;
classes["tommyknocker"].levels[1] = {attackBonus:1, damageBonus:0, ref:0, fort:1, will:1, crit:"d8", fumble:"d12", title:"Rotter", primaryActionDie:"d20", secondaryActionDie:"0", classDie:"0", meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"d0", rangedDamageBonusDie:"d0"};
classes["tommyknocker"].levels[2] = {attackBonus:2, damageBonus:0, ref:0, fort:2, will:1, crit:"d8", fumble:"d12", title:"Deadhead", primaryActionDie:"d20", secondaryActionDie:"0", classDie:"0", meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["tommyknocker"].levels[3] = {attackBonus:2, damageBonus:0, ref:1, fort:3, will:2, crit:"d10", fumble:"d10", title:"Revenant", primaryActionDie:"d20", secondaryActionDie:"0", classDie:"0", meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["tommyknocker"].levels[4] = {attackBonus:3, damageBonus:0, ref:1, fort:4, will:2, crit:"d10", fumble:"d10", title:"Pariah", primaryActionDie:"d20", secondaryActionDie:"0", classDie:"0", meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["tommyknocker"].levels[5] = {attackBonus:3, damageBonus:0, ref:1, fort:5, will:3, crit:"d12", fumble:"d8", title:"Tommyknocker", primaryActionDie:"d20", secondaryActionDie:"0", classDie:"0", meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["tommyknocker"].levels[6] = {attackBonus:4, damageBonus:0, ref:2, fort:5, will:3, crit:"d12", fumble:"d8", title:"Tommyknocker VI", primaryActionDie:"d20", secondaryActionDie:"d14", classDie:"0", meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["tommyknocker"].levels[7] = {attackBonus:5, damageBonus:0, ref:2, fort:6, will:4, crit:"d14", fumble:"d7", title:"Tommyknocker VII", primaryActionDie:"d20", secondaryActionDie:"d16", classDie:"0", meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["tommyknocker"].levels[8] = {attackBonus:5, damageBonus:0, ref:3, fort:6, will:4, crit:"d14", fumble:"d7", title:"Tommyknocker VIII", primaryActionDie:"d20", secondaryActionDie:"d20", classDie:"0", meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["tommyknocker"].levels[9] = {attackBonus:6, damageBonus:0, ref:3, fort:7, will:5, crit:"d16", fumble:"d6", title:"Tommyknocker IX", primaryActionDie:"d20", secondaryActionDie:"d20", classDie:"0", meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
classes["tommyknocker"].levels[10] = {attackBonus:6, damageBonus:0, ref:4, fort:7, will:5, crit:"d16", fumble:"d6", title:"Tommyknocker X", primaryActionDie:"d20", secondaryActionDie:"d20", classDie:"0", meleeAttackBonusDie:"0", meleeDamageBonusDie:"0", rangedAttackBonusDie:"0", rangedDamageBonusDie:"0"};
var DT_MAX_LEVEL = 10;
var DT_MIN_STAT = 3;
var DT_MAX_STAT = 19;
var DT_MAX_HP = 999;
function updatePowers()
{
var attrs = [];
attrs.push("level");
attrs.push("class");
attrs.push("strength_mod");
attrs.push("agility_mod");
attrs.push("stamina_mod");
attrs.push("personality_mod");
attrs.push("intelligence_mod");
attrs.push("luck_mod");
getAttrs(attrs, function(vals)
{
var powerSetter = {};
var cls = vals["class"];
var level = parseInt(vals["level"]);
console.log("updatePowers: powerAttribute = " + classes[cls].powerAttribute);
if(classes[cls].powerAttribute)
{
powerSetter["power_mod"] = level + vals[classes[cls].powerAttribute + "_mod"];
}
else
{
powerSetter["power_mod"] = 0;
}
setAttrs(powerSetter);
});
}
function updateWeapons()
{
getSectionIDs("weapons", function(idarray) {
var weaponTypes = [];
for(var i = 0; i < idarray.length; i++)
{
weaponTypes.push("repeating_weapons_" + idarray[i] + "_weapontype");
}
weaponTypes.push("class");
weaponTypes.push("level");
weaponTypes.push("strength_mod");
weaponTypes.push("agility_mod");
getAttrs(weaponTypes, function(vals)
{
var cls = vals["class"];
var level = parseInt(vals["level"]);
var str_mod = parseInt(vals["strength_mod"]);
var agi_mod = parseInt(vals["agility_mod"]);
console.log("updateWeapons: str_mod = " + str_mod + " agi_mod = " + agi_mod);
var weaponAttsSetter = {};
for(i=0; i < idarray.length; i++) {
//update each weapon's hit bonus and bonus dice with new class/level mods
console.log("trying to update weapon with id " + idarray[i]);
if(vals["repeating_weapons_" + idarray[i] + "_weapontype"] == "Melee")
{
weaponAttsSetter["repeating_weapons_" + idarray[i] + "_weaponstathitbonus"] = classes[cls].levels[level].attackBonus + str_mod;
weaponAttsSetter["repeating_weapons_" + idarray[i] + "_weaponstatdamagebonus"] = str_mod;
weaponAttsSetter["repeating_weapons_" + idarray[i] + "_weaponhitbonusdie"] = classes[cls].levels[level].meleeAttackBonusDie;
}
else
{
weaponAttsSetter["repeating_weapons_" + idarray[i] + "_weaponstathitbonus"] = classes[cls].levels[level].attackBonus + agi_mod;
weaponAttsSetter["repeating_weapons_" + idarray[i] + "_weaponstatdamagebonus"] = 0;
weaponAttsSetter["repeating_weapons_" + idarray[i] + "_weaponhitbonusdie"] = classes[cls].levels[level].rangedAttackBonusDie;
}
}
setAttrs(weaponAttsSetter);
});
});
}
function abilityScoreMaxChanged(argEvent)
{
var abname = argEvent.sourceAttribute;
var ab = parseInt(argEvent.newValue);
console.log("abilityScoreMaxChanged: abname = " + abname + " currVal = " + ab + " prevVal = " + argEvent.previousValue);
console.log(argEvent);
var update = false;
var setter = {};
if(isNaN(ab))
{
ab = parseInt(argEvent.previousValue);
update = true;
}
else if(ab < DT_MIN_STAT)
{
ab = DT_MIN_STAT;
update = true;
}
else if(ab > DT_MAX_STAT)
{
ab = DT_MAX_STAT;
update = true;
}
if(update == true)
{
setter[abname] = ab;
setAttrs(setter);
}
}
function abilityScoreChanged(argEvent)
{
var ab = argEvent.sourceAttribute;
console.log("abilityScoreChanged: abname = " + ab);
if(ab.includes("max"))
{
return; //this is a change of a stat_max, so no need to do any mod calculations
}
updateAbilityScoreMod(ab);
if(ab == "personality" || ab == "stamina")
{
updateGrit();
}
}
function updateGrit()
{
getAttrs(["personality", "stamina", "grit"], function(values){
var per = parseInt(values["personality"]);
var sta = parseInt(values["stamina"]);
var grit = parseInt(values["grit"]);
var gritmax = parseInt((per + sta)/2);
var setter = {};
setter["grit_max"] = gritmax;
if(grit > gritmax)
{
grit = gritmax;
setter["grit"] = grit;
}
setAttrs(setter);
});
}
function updateAbilityScoreMod(argAbility)
{
getAttrs([argAbility, "class", "level", "reflex_mod", "fort_mod", "will_mod", "agility_mod", "stamina_mod", "personality_mod"], function(values){
var ab = values[argAbility];
var agi_mod = parseInt(values["agility_mod"]);
var sta_mod = parseInt(values["stamina_mod"]);
var per_mod = parseInt(values["personality_mod"]);
var fort_mod = parseInt(values["fort_mod"]);
var will_mod = parseInt(values["will_mod"]);
var cls = values["class"];
var level = parseInt(values["level"]);
var setter = {};
if(ab < DT_MIN_STAT || ab > DT_MAX_STAT)
{
if(ab < DT_MIN_STAT)
{
ab = DT_MIN_STAT;
}
else if(ab > DT_MAX_STAT)
{
ab = DT_MAX_STAT;
}
setter[argAbility] = ab;
}
console.log("updateAbilityScoreMod: " + argAbility + " = " + ab);
setter[argAbility+"_mod"] = abilityMods[ab];
if(argAbility == "agility")
{
var ref_mod = parseInt(values["reflex_mod"]);
if(isNaN(ref_mod))
{
ref_mod = 0;
setter["reflex_mod"] = ref_mod;
}
var ref = ref_mod + abilityMods[ab];
ref += classes[cls].levels[level].ref;
setter["reflex"] = ref;
setter["ranged_bonus"] = classes[cls].levels[level].attackBonus + abilityMods[ab];
}
if(argAbility == "strength")
{
setter["melee_bonus"] = classes[cls].levels[level].attackBonus + abilityMods[ab];
}
else if(argAbility == "stamina")
{
var fort_mod = parseInt(values["fort_mod"]);
if(isNaN(fort_mod))
{
fort_mod = 0;
setter["fort_mod"] = fort_mod;
}
var fort = fort_mod + abilityMods[ab];
fort += classes[cls].levels[level].fort;
setter["fort"] = fort;
}
else if(argAbility == "personality")
{
var will_mod = parseInt(values["will_mod"]);
if(isNaN(will_mod))
{
will_mod = 0;
setter["will_mod"] = will_mod;
}
var will = will_mod + abilityMods[ab];
will += classes[cls].levels[level].will;
setter["will"] = will;
}
console.log(setter);
setAttrs(setter, function(){
updateWeapons();
updatePowers();
});
});
}
function hitPointsChanged(argEvent)
{
updateHitPoints(argEvent.previousValue);
}
function updateHitPoints(argPrevValue)
{
console.log("updateHitPoints: argPrevValue = " + argPrevValue);
getAttrs(["hit_points"], function(values){
var hp = values["hit_points"];
var setter = {};
if(isNaN(hp))
{
hp = argPrevValue
}
else if(hp < 0)
{
hp = 0;
}
else if(hp > DT_MAX_HP)
{
hp = DT_MAX_HP;
}
setter["hit_points"] = hp;
setAttrs(setter);
});
}
function classOrLevelChanged(argEvent)
{
console.log("classChanged()");
updateClassSpecificInfo(argEvent.sourceAttribute, argEvent.previousValue);
}
function updateClassSpecificInfo(argAttrib, argPrevValue)
{
console.log("updateClassSpecificInfo: argAttrib = " + argAttrib + "and argPrevValue = " + argPrevValue);
getAttrs(["class", "level", "hexes", "path","reflex_mod", "fort_mod", "will_mod", "agility_mod", "stamina_mod", "personality_mod", "strength_mod", "intelligence_mod", "luck_mod"], function(values){
var cls = values["class"];
var setter = {};
var level = parseInt(values["level"]);
var title = "";
var ref_mod = parseInt(values["reflex_mod"]);
var agi_mod = parseInt(values["agility_mod"]);
var fort_mod = parseInt(values["fort_mod"]);
var sta_mod = parseInt(values["stamina_mod"]);
var will_mod = parseInt(values["will_mod"]);
var per_mod = parseInt(values["personality_mod"]);
var str_mod = parseInt(values["strength_mod"]);
var int_mod = parseInt(values["intelligence_mod"]);
var hexCount = parseInt(values["hexes"]);
var powerAttr = "";
var power_mod = 0;
var lucky_roll = "";
var critRange = 1;
var critRangeDisplay = "20";
var primaryCritThreshold = "cs0";
var secondaryCritThreshold = "cs0";
var primaryActionNumber = 20;
var secondaryActionNumber = 0;
console.log("updateClassSpecificInfo: cls = " + cls + " level = " + level);
if(cls == "" || cls == "0")
{
cls = "zero-level";
level = 0;
}
else if(cls == "zero-level")
{
level = 0;
}
else
{
if(level == 0)
{
level = 1;
}
}
if(isNaN(level))
{
if(isNaN(argPrevValue))
{
level = 1;
}
else
{
level = parseInt(argPrevValue);
}
}
else if(level < 0 | level > DT_MAX_LEVEL)
{
if(level < 0)
{
cls = "zero-level";
level = 0;
}
if(level > DT_MAX_LEVEL)
{
level = DT_MAX_LEVEL;
}
}
console.log("updateClassSpecific: path = " + values["path"]);
if(!values["path"])
{
setter["path"] = "The Line";
}
if(isNaN(ref_mod))
{
ref_mod = 0;
setter["reflex_mod"] = ref_mod;
}
if(isNaN(agi_mod))
{
agi_mod = 0;
setter["agility_mod"] = agi_mod;
}
if(isNaN(fort_mod))
{
fort_mod = 0;
setter["fort_mod"] = fort_mod;
}
if(isNaN(sta_mod))
{
sta_mod = 0;
setter["stamina_mod"] = sta_mod;
}
if(isNaN(will_mod))
{
will_mod = 0;
setter["will_mod"] = will_mod;
}
if(isNaN(per_mod))
{
per_mod = 0;
setter["personality_mod"] = per_mod;
}
if(isNaN(str_mod))
{
str_mod = 0;
setter["strength_mod"] = str_mod;
}
var ref = ref_mod + agi_mod;
ref += classes[cls].levels[level].ref;
setter["reflex"] = ref;
var fort = fort_mod + sta_mod;
fort += classes[cls].levels[level].fort;
setter["fort"] = fort;
var will = will_mod + per_mod;
will += classes[cls].levels[level].will;
setter["will"] = will;
if(classes[cls].powerAttribute)
{
powerAttr = classes[cls].powerAttribute;
power_mod = values[powerAttr + "_mod"] + level;
setter["power_mod"] = power_mod;
}
if(classes[cls].luckyRoll)
{
setter["lucky_roll"] = classes[cls].luckyRoll;
}
if(classes[cls].levels[level].critRange)
{
critRange = classes[cls].levels[level].critRange;
}
primaryActionNumber = parseInt(classes[cls].levels[level].primaryActionDie.slice(1)); // extract "24" from "d24" for example
if(classes[cls].levels[level].secondaryActionDie != "0")
{
secondaryActionNumber = parseInt(classes[cls].levels[level].secondaryActionDie.slice(1)); // extract "20" from "d20" for example
}
if(isNaN(primaryActionNumber))
{
primaryActionNumber = 20;
}
if(isNaN(secondaryActionNumber))
{
secondaryActionNumber = 0;
}
for(var j = 0; j < critRange;j++)
{
primaryCritThreshold += ("cs" + primaryActionNumber--);
if(secondaryActionNumber > 16)
{
secondaryCritThreshold += ("cs" + secondaryActionNumber--);
}
}
if(classes[cls].levels[level].critRangeDisplay)
{
critRangeDisplay = classes[cls].levels[level].critRangeDisplay;
}
setter["primary_crit_threshold"] = primaryCritThreshold;
setter["secondary_crit_threshold"] = secondaryCritThreshold;
setter["crit_range"] = critRangeDisplay;
setter["melee_bonus"] = classes[cls].levels[level].attackBonus + str_mod;
setter["ranged_bonus"] = classes[cls].levels[level].attackBonus + agi_mod;
setter["crit_die"] = classes[cls].levels[level].crit;
var fumble = classes[cls].levels[level].fumble;
setter["fumble_die_base"] = fumble;
var newFumbleIndex = 0;
for(var i = 0; i < diceChain.length; i++)
{
if(fumble == diceChain[i])
{
newFumbleIndex = i + hexCount;
if(newFumbleIndex >= diceChain.length)
{
newFumbleIndex = diceChain.length - 1;
}
}
}
console.log("updateClassSpecificInfo: class = " + cls + " and level = " + level);
if(true)// if(level != 0)
{
title = classes[cls].levels[level].title;
if(classes[cls].levels[level].classDie)
{
setter["class_die"] = classes[cls].levels[level].classDie;
}
else
{
setter["class_die"] = "";
}
if(classes[cls].classDieLabel)
{
setter["class_die_label"] = classes[cls].classDieLabel;
}
else
{
setter["class_die_label"] = "";
}
if(classes[cls].levels[level].meleeAttackBonusDie)
{
setter["melee_attack_bonus_die"] = classes[cls].levels[level].meleeAttackBonusDie;
}
else
{
setter["melee_attack_bonus_die"] = "";
}
if(classes[cls].levels[level].rangedAttackBonusDie)
{
setter["ranged_attack_bonus_die"] = classes[cls].levels[level].rangedAttackBonusDie;
}
else
{
setter["ranged_attack_bonus_die"] = "";
}
if(classes[cls].levels[level].meleeDamageBonusDie)
{
setter["melee_damage_bonus_die"] = classes[cls].levels[level].meleeDamageBonusDie;
}
else
{
setter["melee_damage_bonus_die"] = "";
}
if(classes[cls].levels[level].rangedDamageBonusDie)
{
setter["ranged_damage_bonus_die"] = classes[cls].levels[level].rangedDamageBonusDie;
}
else
{
setter["ranged_damage_bonus_die"] = "";
}
}
if(classes[cls].levels[level].primaryActionDie)
{
setter["primary_action_die"] = classes[cls].levels[level].primaryActionDie;
}
else
{
setter["primary_action_die"] = "d20";
}
if(classes[cls].levels[level].secondaryActionDie)
{
setter["secondary_action_die"] = classes[cls].levels[level].secondaryActionDie;
}
else
{
setter["secondary_action_die"] = "0";
}
setter["fumble_die"] = diceChain[newFumbleIndex];
setter["class"] = cls;
setter["level"] = level;
setter["title"] = title;
setter["hit_die"] = classes[cls].hitDie;
if(cls == "bedlamite")
{
setter["wondrous_contraptions"] = classes[cls].levels[level].knownWondrousContraptions;
setter["mundane_contraptions"] = classes[cls].levels[level].knownMundaneContraptions;
setter["max_contraption_level"] = classes[cls].levels[level].maxContraptionLevel;
setter["max_contraptions"] = classes[cls].levels[level].maxContraptions;
setter["derangement"] = classes[cls].levels[level].derangement + "%";
}
if(cls == "revelator")
{
setter["spells_first"] = classes[cls].levels[level].spellsFirst;
setter["spells_second"] = classes[cls].levels[level].spellsSecond;
setter["spells_third"] = classes[cls].levels[level].spellsThird;
setter["spells_fourth"] = classes[cls].levels[level].spellsFourth;
setter["spells_fifth"] = classes[cls].levels[level].spellsFifth;
}
if(cls == "luchador")
{
setter["fame"] = classes[cls].levels[level].fame + "%";
setter["battle_hardened"] = classes[cls].levels[level].battleHardenedDie;
}
if(cls == "mountebank")
{
setter["known_formulae"] = classes[cls].levels[level].knownFormulae;
setter["max_formula_level"] = classes[cls].levels[level].maxFormulaLevel;
setter["max_active_formulae"] = classes[cls].levels[level].maxActiveFormulae;
setter["fire_bomb_damage"] = classes[cls].levels[level].fireBombDamage;
setter["acid_bomb_damage"] = classes[cls].levels[level].acidBombDamage;
setter["adhesive"] = classes[cls].levels[level].adhesive;
setter["poultice_healing"] = classes[cls].levels[level].poulticeHealing;
setter["brew_check"] = level + int_mod;
}
if(cls == "mystic-monk")
{
setter["living_weapon"] = classes[cls].levels[level].livingWeapon;
}
if(cls == "occultist")
{
setter["known_spells"] = classes[cls].levels[level].knownSpells;
setter["max_spell_level"] = classes[cls].levels[level].maxSpellLevel;
}
console.log(setter);
setAttrs(setter, function()
{
getSectionIDs("weapons", function(idarray) {
var weaponTypes = [];
for(var i = 0; i < idarray.length; i++)
{
weaponTypes.push("repeating_weapons_" + idarray[i] + "_weapontype");
}
getAttrs(weaponTypes, function(vals)
{
var weaponAttsSetter = {};
for(i=0; i < idarray.length; i++) {
//update each weapon's hit bonus and bonus dice with new class/level mods
console.log("trying to update weapon with id " + idarray[i]);
if(vals["repeating_weapons_" + idarray[i] + "_weapontype"] == "Melee")
{
weaponAttsSetter["repeating_weapons_" + idarray[i] + "_weaponstathitbonus"] = classes[cls].levels[level].attackBonus + str_mod;
weaponAttsSetter["repeating_weapons_" + idarray[i] + "_weaponhitbonusdie"] = classes[cls].levels[level].meleeAttackBonusDie;
}
else
{
weaponAttsSetter["repeating_weapons_" + idarray[i] + "_weaponstathitbonus"] = classes[cls].levels[level].attackBonus + agi_mod;
weaponAttsSetter["repeating_weapons_" + idarray[i] + "_weaponhitbonusdie"] = classes[cls].levels[level].rangedAttackBonusDie;
}
}
setAttrs(weaponAttsSetter);
});
});
getSectionIDs("powers", function(idarray) {
for(var i=0; i < idarray.length; i++) {
console.log("trying to update power with id " + idarray[i]);
}
});
});
});
}
function selectTabby()
{
console.log("selectTab1");
setAttrs({"tab": 1});
}
function selectTabbyTwo()
{
console.log("selectTab2");
setAttrs({"tab": 2});
}
function selectTabbyThree()
{
console.log("selectTab3");
setAttrs({"tab":3});
}
on("sheet:opened", function(eventInfo)
{
console.log("Dark trails sheet opened");
//log("Dark trails class changed");
//setAttrs({"level": 37});
for(var i = 0; i < abilityScores.length; i++)
{
updateAbilityScoreMod(abilityScores[i]);
on("change:"+abilityScores[i], abilityScoreChanged);
on("change:"+abilityScores[i]+"_maxx", abilityScoreMaxChanged);
}
updateGrit();
updateClassSpecificInfo("class", "");
on("change:class change:level", classOrLevelChanged);
});
on("change:hit_points", hitPointsChanged);
on("clicked:tabby", selectTabby);
on("clicked:tabbytwo", selectTabbyTwo);
on("clicked:tabbythree", selectTabbyThree);
on("change:boons", function(eventInfo)
{
getAttrs(["boons"], function(values)
{
var boonCount = parseInt(values["boons"]);
if(boonCount > 0)
{
setAttrs({"booned":"on"});
}
else
{
setAttrs({"booned":0});
}
});
});
on("change:hexes change:fumble_die_base", function(eventInfo)
{
console.log("hexes changed");
getAttrs(["hexes", "fumble_die_base"], function(values){
var hexCount = parseInt(values["hexes"]);
var fumble = values["fumble_die_base"];
var newFumbleIndex = 0;
console.log("hexesChanged: hexCount = " + hexCount + " and base fumble die = " + fumble);
if(hexCount > 0)
{
for(var i = 0; i < diceChain.length; i++)
{
if(fumble == diceChain[i])
{
newFumbleIndex = i + hexCount;
console.log("hexesChanged: newFumbleIndex = " + newFumbleIndex + " and diceChain.length = " + diceChain.length);
if(newFumbleIndex >= diceChain.length)
{
newFumbleIndex = diceChain.length - 1;
}
console.log("hexesChanged: newFumbleIndex = " + newFumbleIndex);
}
}
setAttrs({"hexed":"on", "fumble_die":diceChain[newFumbleIndex]});
}
else
{
setAttrs({"hexed":0, "fumble_die":fumble});
}
});
});
on("change:reflex_mod change:fort_mod change:will_mod", function(eventInfo)
{
getAttrs(["class", "level", "agility_mod", "stamina_mod", "personality_mod"], function(values){
var cls = values["class"];
var level = parseInt(values["level"]);
var agimod = parseInt(values["agility_mod"]);
var stamod = parseInt(values["stamina_mod"]);
var permod = parseInt(values["personality_mod"]);
var mod = parseInt(eventInfo.newValue);
var save = 0;
var stat = eventInfo.sourceAttribute;
var setter = {};
if(isNaN(mod))
{
mod = 0;
setter[stat] = mod;
}
if(mod < -5)
{
mod = -5;
setter[stat] = mod;
}
else if(mod > 10)
{
mod = 10;
setter[stat] = mod;
}
if(isNaN(agimod))
{
agimod = 0;
setter["agility_mod"] = agimod;
}
if(isNaN(stamod))
{
stamod = 0;
setter["stamina_mod"] = stamod;
}
if(isNaN(permod))
{
permod = 0;
setter["personality_mod"] = permod;
}
console.log("save mod changed: stat = " + stat + " agimod = " + agimod + " stamod = " + stamod + " permod = " + permod);
save = mod;
if(stat == "reflex_mod")
{
save += classes[cls].levels[level].ref;
save += agimod;
}
else if(stat == "fort_mod")
{
save += classes[cls].levels[level].fort;
save += stamod;
}
else if(stat == "will_mod")
{
save += classes[cls].levels[level].will;
save += permod;
}
setter[stat.slice(0, stat.length-4)] = save;
setAttrs(setter);
});
});
on("change:grit", function(eventInfo)
{
getAttrs(["grit_max"], function(values){
var max = parseInt(values["grit_max"]);
var newVal = parseInt(eventInfo.newValue);
var setter = {};
if(isNaN(newVal))
{
setter["grit"] = eventInfo.previousValue;
setAttrs(setter);
}
else if(newVal > max)
{
setter["grit"] = eventInfo.previousValue;
setAttrs(setter);
}
else if(newVal < 0)
{
setter["grit"] = eventInfo.previousValue;
setAttrs(setter);
}
});
});
on("change:repeating_weapons:weapontype change:repeating_weapons:weaponname change:repeating_weapons:weaponrange change:repeating_weapons:weapondamagenumdice change:repeating_weapons:weapondamagedie change:repeating_weapons:weapondamagebonus change:repeating_weapons:weaponnotes change:repeating_weapons:signature", function(eventInfo){
console.log("repeating_weapons changed");
getAttrs(["repeating_weapons_weapontype", "melee_bonus", "strength_mod", "agility_mod", "ranged_bonus", "melee_attack_bonus_die", "melee_damage_bonus_die", "ranged_attack_bonus_die", "ranged_damage_bonus_die", "repeating_weapons_signature"], function(values){
var type = values["repeating_weapons_weapontype"];
var strmod = parseInt(values["strength_mod"]);
var agimod = parseInt(values["agility_mod"]);
var melee = parseInt(values["melee_bonus"]);
var ranged = parseInt(values["ranged_bonus"]);
var sig = values["repeating_weapons_signature"];
var setter = {};
if(sig == "on")
{
setter["repeating_weapons_signature_mod"] = 0;
}
else
{
setter["repeating_weapons_signature_mod"] = -2;
}
var meleeattackbonusdie = values["melee_attack_bonus_die"];
var meleedamagebonusdie = values["melee_damage_bonus_die"];
var rangedattackbonusdie = values["ranged_attack_bonus_die"];
var rangeddamagebonusdie = values["ranged_damage_bonus_die"];
console.log("weapontype changed to " + type);
console.log("melee_attack_bonus_die = " + meleeattackbonusdie);
console.log("ranged_attack_bonus_die = " + rangedattackbonusdie);
if(type == "Melee")
{
setter["repeating_weapons_weaponstathitbonus"] = melee;
setter["repeating_weapons_weaponstatdamagebonus"] = strmod;
setter["repeating_weapons_weaponhitbonusdie"] = meleeattackbonusdie;
setter["repeating_weapons_weapondamagebonusdie"] = meleedamagebonusdie;
}
else if(type == "Ranged")
{
setter["repeating_weapons_weaponstathitbonus"] = ranged;
setter["repeating_weapons_weaponstatdamagebonus"] = 0;
setter["repeating_weapons_weaponhitbonusdie"] = rangedattackbonusdie;
setter["repeating_weapons_weapondamagebonusdie"] = rangeddamagebonusdie;
}
console.log(setter);
setAttrs(setter);
});
});
</script>