Files
roll20-character-sheets/Hyperborea/hyperborea.html
T

1097 lines
49 KiB
HTML

<input type="hidden" class="sheet-sheet_toggle" name="attr_sheet_tab" value="pc_tab"/>
<div class="sheet-two_col">
<div class="sheet-two_col">
<input type="radio" id="pc_tab_button" name="attr_sheet_toggle" value="pc_tab" checked/>
<label class="sheet-radio_label" for="attr_sheet_toggle">PC Sheet</label>
</div>
<div class="sheet-two_col">
<input type="radio" id="monster_tab_button" name="attr_sheet_toggle" value="monster_tab" />
<label class="sheet-radio_label" for="attr_sheet_toggle">Monster Sheet</label>
</div>
</div>
<h1>Hyperborea</h1>
<br/>
<!--
PC Sheet
-->
<div class="sheet-pc_tab">
<div class="sheet-one_col">
<div class="sheet-two_col">
<div class="sheet-two_col_box">
<label class="sheet-txt_label">Name</label>
<input class="sheet-txt_input" type="text" name="attr_character_name"/>
<label class="sheet-txt_label">Class</label>
<input class="sheet-txt_input" type="text" name="attr_class"/>
<label class="sheet-txt_label">Race</label>
<input class="sheet-txt_input" type="text" name="attr_race"/>
<label class="sheet-txt_label">Alignment</label>
<input class="sheet-txt_input" type="text" name="attr_alignment"/>
<label class="sheet-txt_label">Languages</label>
<input class="sheet-txt_input" type="text" name="attr_languages"/>
<label class="sheet-txt_label">Religion</label>
<input class="sheet-txt_input" type="text" name="attr_religion"/>
<label class="sheet-txt_label">Secondary Skills</label>
<input class="sheet-txt_input" type="text" name="attr_skills"/>
<label class="sheet-txt_label">Experience Points</label>
<input class="sheet-txt_input" type="text" name="attr_xp"/>
</div>
<div class="sheet-two_col_box">
<label class="sheet-txt_label">HP</label>
<input class="sheet-digit_input_left" type="number" name="attr_hp"/>
<label class="sheet-txt_label">Max HP</label>
<input class="sheet-digit_input_left" type="number" name="attr_hp_max"/>
<label class="sheet-txt_label">HD</label>
<select class="sheet-digit_input_left" name="attr_hd">
<option value="d4">d4</option>
<option value="d6">d6</option>
<option value="d8">d8</option>
<option value="d10">d10</option>
<option value="d12">d12</option>
</select>
<label class="sheet-txt_label">Level</label>
<input class="sheet-digit_input_left" type="number" name="attr_level"/>
<label class="sheet-txt_label">Age</label>
<input class="sheet-digit_input_left" type="text" name="attr_age"/>
<label class="sheet-txt_label">Height</label>
<input class="sheet-digit_input_left" type="text" name="attr_height"/>
<label class="sheet-txt_label">Weight</label>
<input class="sheet-digit_input_left" type="text" name="attr_weight"/>
<label class="sheet-txt_label">Gender</label>
<input class="sheet-digit_input_left" type="text" name="attr_gender"/>
</div>
</div>
<div class="sheet-three_col">
<div class="sheet-one_col_box">
<div class="sheet-stat_block">
<label class="sheet-txt_title">ST</label>
<input class="sheet-digit_input_small_bold" type="text" name="attr_st"/>
</div>
<div class="sheet-stat_block_small">
<label class="sheet-txt_label_small">ST Mod:</label>
<input class="sheet-digit_input_stat" type="number" name="attr_st_mod" value="0"/>
</div>
<div class="sheet-stat_block_small">
<input type="hidden" name="attr_st_feat_bonus" value="0"/>
<label class="sheet-txt_label_small">8% Feat Bonus:</label>
<input class="sheet-stat_checkbox" type="checkbox" name="attr_st_feat_bonus_toggle"/>
</div>
<div class="sheet-stat_block_small">
<label class="sheet-txt_label_small">Melee Mod:</label>
<span class="sheet-txt_label" name="attr_hit_mod"></span>
</div>
<div class="sheet-stat_block_small">
<label class="sheet-txt_label_small">Damage Mod:</label>
<span class="sheet-txt_label_small" name="attr_dmg_mod"></span>
</div>
<div class="sheet-stat_block_small">
<button class="sheet-stat_button" type="roll" name="test_of_st" value="&{template:default} {{name=Test of ST (@{character_name})}} {{Roll (d6) = [[d6]]}} {{Success on = @{test_st}:6}}">ST Test</button>
<button class="sheet-stat_button" type="roll" name="feat_of_st" value="&{template:default} {{name=Feat of ST (@{character_name})}} {{Roll (%) = [[d100]]}} {{Success on = [[@{feat_st}+(@{st_feat_bonus})]]%}}">ST Feat</button>
</div>
</div>
<div class="sheet-one_col_box">
<div class="sheet-stat_block_small">
<label class="sheet-txt_title">DX</label>
<input class="sheet-digit_input_small_bold" type="text" name="attr_dx"/>
</div>
<div class="sheet-stat_block_small">
<label class="sheet-txt_label_small">DX Mod:</label>
<input class="sheet-digit_input_stat" type="number" name="attr_dx_mod" value="0"/>
</div>
<div class="sheet-stat_block_small">
<input type="hidden" name="attr_dx_feat_bonus" value="0"/>
<label class="sheet-txt_label_small">8% Feat Bonus:</label>
<input class="sheet-stat_checkbox" type="checkbox" name="attr_dx_feat_bonus_toggle"/>
</div>
<div class="sheet-stat_block_small">
<label class="sheet-txt_label_small">Missile Mod:</label>
<span class="sheet-txt_label_small" name="attr_missile_mod"></span>
</div>
<div class="sheet-stat_block_small">
<label class="sheet-txt_label_small">Defence Mod:</label>
<span class="sheet-txt_label_small" name="attr_def_mod"></span>
</div>
<div class="sheet-stat_block_small">
<button class="sheet-stat_button" type="roll" name="test_of_dx" value="&{template:default} {{name=Test of DX (@{character_name})}} {{Roll (d6) = [[d6]]}} {{Success on = @{test_dx}:6}}">DX Test</button>
<button class="sheet-stat_button" type="roll" name="feat_of_dx" value="&{template:default} {{name=Feat of DX (@{character_name})}} {{Roll (%) = [[d100]]}} {{Success on = [[@{feat_dx}+(@{dx_feat_bonus})]]%}}">DX Feat</button>
</div>
</div>
<div class="sheet-one_col_box">
<div class="sheet-stat_block_small">
<label class="sheet-txt_title">CN</label>
<input class="sheet-digit_input_small_bold" type="text" name="attr_cn"/>
</div>
<div class="sheet-stat_block_small">
<label class="sheet-txt_label_small">CN Mod:</label>
<input class="sheet-digit_input_stat" type="number" name="attr_cn_mod" value="0"/>
</div>
<div class="sheet-stat_block_small">
<input type="hidden" name="attr_cn_feat_bonus" value="0"/>
<label class="sheet-txt_label_small">8% Feat Bonus:</label>
<input class="sheet-stat_checkbox" type="checkbox" name="attr_cn_feat_bonus_toggle"/>
</div>
<div class="sheet-stat_block_small">
<label class="sheet-txt_label_small">Hit Point Mod:</label>
<span class="sheet-txt_label_small" name="attr_hp_mod"></span>
</div>
<div class="sheet-stat_block_small">
<label class="sheet-txt_label_small">Poison Mod:</label>
<span class="sheet-txt_label_small" name="attr_poison_mod"></span>
</div>
<div class="sheet-stat_block_small">
<button class="sheet-stat_button" type="roll" name="test_of_trauma" value="&{template:default} {{name=Trauma Survival (@{character_name})}} {{Roll (%) = [[d100]]}} {{Success on = @{trauma}%}}">Trauma</button>
<button class="sheet-stat_button" type="roll" name="new_hp" value="&{template:default} {{name=New HP (@{character_name})}} {{Roll (@{hd}) = [[@{hd}+(@{hp_mod})]]}}">New HP</button>
</div>
<div class="sheet-stat_block_small">
<button class="sheet-stat_button" type="roll" name="test_of_cn" value="&{template:default} {{name=Test of CN (@{character_name})}} {{Roll (d6) = [[d6]]}} {{Success on = @{test_cn}:6}}">CN Test</button>
<button class="sheet-stat_button" type="roll" name="feat_of_cn" value="&{template:default} {{name=Feat of CN (@{character_name})}} {{Roll (%) = [[d100]]}} {{Success on = [[@{feat_cn}+(@{cn_feat_bonus})]]%}}">CN Feat</button>
</div>
</div>
<div class="sheet-one_col_box">
<div class="sheet-stat_block_small">
<label class="sheet-txt_title">IN</label>
<input class="sheet-digit_input_small_bold" type="text" name="attr_in"/>
</div>
<div class="sheet-stat_block_small">
<label class="sheet-txt_label_small">IN Mod:</label>
<input class="sheet-digit_input_stat" type="number" name="attr_in_mod" value="0"/>
</div>
<div class="sheet-stat_block_small">
<label class="sheet-txt_label_small">Language Mod:</label>
<span class="sheet-txt_label_small" name="attr_lang_mod"></span>
</div>
<div class="sheet-stat_block_small">
<label class="sheet-txt_label_small">Spell Mod:</label>
<span class="sheet-txt_label_small" name="attr_mag_spell_mod"></span>
</div>
<div class="sheet-stat_block_small">
<button class="sheet-stat_button" type="roll" name="learn_mag_spell" value="&{template:default} {{name=Learn Magician Spell (@{character_name})}} {{Roll (%) = [[d100]]}} {{Success on = @{learn_mag_spell}%}}">Learn Magician Spell</button>
</div>
</div>
<div class="sheet-one_col_box">
<div class="sheet-stat_block_small">
<label class="sheet-txt_title">WS</label>
<input class="sheet-digit_input_small_bold" type="text" name="attr_ws"/>
</div>
<div class="sheet-stat_block_small">
<label class="sheet-txt_label_small">WS Mod:</label>
<input class="sheet-digit_input_stat" type="number" name="attr_ws_mod" value="0"/>
</div>
<div class="sheet-stat_block_small">
<label class="sheet-txt_label_small">Willpower Mod:</label>
<span class="sheet-txt_label_small" name="attr_will_mod"></span>
</div>
<div class="sheet-stat_block_small">
<label class="sheet-txt_label_small">Spell Mod:</label>
<span class="sheet-txt_label_small" name="attr_cle_spell_mod"></span>
</div>
<div class="sheet-stat_block_small">
<button class="sheet-stat_button" type="roll" name="learn_cle_spell" value="&{template:default} {{name=Learn Cleric Spell (@{character_name})}} {{Roll (%) = [[d100]]}} {{Success on = @{learn_cle_spell}%}}">Learn Cleric Spell</button>
</div>
</div>
<div class="sheet-one_col_box">
<div class="sheet-stat_block_small">
<label class="sheet-txt_title">CH</label>
<input class="sheet-digit_input_small_bold" type="text" name="attr_ch"/>
</div>
<div class="sheet-stat_block_small">
<label class="sheet-txt_label_small">CH Mod:</label>
<input class="sheet-digit_input_stat" type="number" name="attr_ch_mod" value="0"/>
</div>
<div class="sheet-stat_block_small">
<label class="sheet-txt_label_small">Reaction Mod:</label>
<span class="sheet-txt_label_small" name="attr_react_mod"></span>
</div>
<div class="sheet-stat_block_small">
<label class="sheet-txt_label_small">Max. Henchmen:</label>
<span class="sheet-txt_label_small" name="attr_max_hench"></span>
</div>
<div class="sheet-stat_block_small">
<label class="sheet-txt_label_small">Turning Mod:</label>
<span class="sheet-txt_label_small" name="attr_turn_mod"></span>
</div>
</div>
</div>
<div class="sheet-three_col">
<div class="sheet-one_col_box">
<h2>Saving Throw</h2>
<div class="sheet-one_col">
<div class="sheet-two_col">
<label class="sheet-txt_label">Base SV</label>
<input class="sheet-digit_input" type="number" name="attr_base_sv"/>
<label class="sheet-txt_label">Death Mod.</label>
<input class="sheet-digit_input" type="number" name="attr_death_sv"/>
<label class="sheet-txt_label">Trans. Mod.</label>
<input class="sheet-digit_input" type="number" name="attr_trans_sv"/>
<label class="sheet-txt_label">Device Mod.</label>
<input class="sheet-digit_input" type="number" name="attr_device_sv"/>
<label class="sheet-txt_label">Avoidance Mod.</label>
<input class="sheet-digit_input" type="number" name="attr_avoid_sv"/>
<label class="sheet-txt_label">Sorcery Mod.</label>
<input class="sheet-digit_input" type="number" name="attr_sorcery_sv"/>
<button class="sheet-stat_button" type="roll" name="sv_roll" value="&{template:default} {{name=Saving Throw (@{character_name})}} {{Roll (d20) = [[d20]]}} {{Save on Death = [[@{base_sv}-@{death_sv}]]}} {{Save on Transform = [[@{base_sv}-@{trans_sv}]]}} {{Save on Device = [[@{base_sv}-@{device_sv}]]}} {{Save on Avoidance = [[@{base_sv}-@{avoid_sv}]]}} {{Save on Sorcery = [[@{base_sv}-@{sorcery_sv}]]}}">Saving Throw</button>
</div>
</div>
</div>
<div class="sheet-one_col_box">
<h2>Armour</h2>
<div class="sheet-one_col">
<div class="sheet-one_col">
<div class="sheet-two_col">
<label class="sheet-txt_title">AC</label>
<input class="sheet-digit_input" type="number" name="attr_ac" value="9"/>
<label class="sheet-txt_label_bold">DR</label>
<input class="sheet-digit_input" type="number" name="attr_dr" value="0"/>
<label class="sheet-txt_label">Type</label>
<input class="sheet-txt_input" type="text" name="attr_armour" placeholder="none"/>
<label class="sheet-txt_label">Shield</label>
<input class="sheet-txt_input" type="text" name="attr_shield" placeholder="none"/>
</div>
</div>
</div>
</div>
<div class="sheet-one_col_box">
<div class="sheet-two_col">
<label class="sheet-txt_title">FA</label>
<input class="sheet-digit_input" type="number" name="attr_fa" value="1"/>
<label class="sheet-txt_label_bold">MV</label>
<input class="sheet-digit_input" type="number" name="attr_mv" step="5"/>
<label class="sheet-txt_label_bold">CA</label>
<input class="sheet-digit_input" type="number" name="attr_ca" value="0"/>
<label class="sheet-txt_label_bold">TA</label>
<input class="sheet-digit_input" type="number" name="attr_ta" value="0"/>
</div>
<button class="sheet-stat_button" type="roll" name="turn_undead" value="&{template:default} {{name=Turn Undead (@{character_name})}} {{Roll (d12) = [[d12-(@{turn_mod})]]}} {{TA = @{ta}}}">Turn Undead</button>
</div>
</div>
<input type="hidden" class="sheet-weapon_toggle" name="attr_weapon_tab" value="melee_tab"/>
<div class="sheet-two_col">
<div class="sheet-two_col">
<input type="radio" id="melee_tab_button" name="attr_weapon_toggle" value="melee_tab" checked/>
<label class="sheet-radio_label" for="attr_weapon_toggle">Melee Weapons</label>
</div>
<div class="sheet-two_col">
<input type="radio" id="missile_tab_button" name="attr_weapon_toggle" value="missile_tab" />
<label class="sheet-radio_label" for="attr_weapon_toggle">Missile Weapons</label>
</div>
</div>
<div class="sheet-melee_tab">
<div class="sheet-one_col_box">
<div>
<h2>Melee Weapons</h2>
<div class="sheet-weapon_table">
<label class="sheet-table_header_small">Attack Roll</label>
<label class="sheet-table_header_large2">Type</label>
<label class="sheet-table_header_small">WC</label>
<label class="sheet-table_header_small">Atk. Rate</label>
<label class="sheet-table_header_small">Atk. Mod.</label>
<label class="sheet-table_header_small">Dmg. Mod.</label>
<label class="sheet-table_header_small">Damage</label>
</div>
<fieldset class="repeating_melee">
<div class="sheet-weapon_table">
<button class="sheet-stat_button" type="roll" name="melee" value="&{template:default} {{name=Melee Attack (@{character_name})}} {{Hit AC = [[20-(d20+@{fa}+(@{weapon_atk_mod})+(@{hit_mod}))]]}} {{Damage = [[@{weapon_dmg}+(@{weapon_dmg_mod})+(@{dmg_mod})]]}} {{Weapon=@{weapon_type}}}"></button>
<input class="sheet-table_entry_large2_left" type="text" name="attr_weapon_type" placeholder="type"/>
<input class="sheet-table_entry_small" type="text" name="attr_weapon_wc" placeholder="wc"/>
<input class="sheet-table_entry_small" type="text" name="attr_weapon_rate" placeholder="rate"/>
<input class="sheet-table_entry_small" type="text" name="attr_weapon_atk_mod" value="0"/>
<input class="sheet-table_entry_small" type="text" name="attr_weapon_dmg_mod" value="0"/>
<input class="sheet-table_entry_small" type="text" name="attr_weapon_dmg" placeholder="damage"/>
</div>
</fieldset>
</div>
</div>
</div>
<div class="sheet-missile_tab">
<div class="sheet-one_col_box">
<div>
<h2>Missile Weapons</h2>
<div class="sheet-weapon_table">
<label class="sheet-table_header_small">Attack Roll</label>
<label class="sheet-table_header_large2">Type</label>
<label class="sheet-table_header_small">Range</label>
<label class="sheet-table_header_small">Atk. Rate</label>
<label class="sheet-table_header_small">Atk. Mod.</label>
<label class="sheet-table_header_small">Dmg. Mod.</label>
<label class="sheet-table_header_small">Damage</label>
</div>
<fieldset class="repeating_missile">
<div class="sheet-weapon_table">
<button class="sheet-stat_button" type="roll" name="melee" value="&{template:default} {{name=Missile Attack (@{character_name})}} {{Hit AC = [[20-(d20+@{fa}+(@{weapon_atk_mod})+(@{missile_mod}))]]}} {{Damage = [[@{weapon_dmg}+(@{weapon_dmg_mod})]]}} {{Weapon=@{weapon_type}}}"></button>
<input class="sheet-table_entry_large2_left" type="text" name="attr_weapon_type" placeholder="type"/>
<input class="sheet-table_entry_small" type="text" name="attr_weapon_range" placeholder="range"/>
<input class="sheet-table_entry_small" type="text" name="attr_weapon_rate" placeholder="rate"/>
<input class="sheet-table_entry_small" type="text" name="attr_weapon_atk_mod" value="0"/>
<input class="sheet-table_entry_small" type="text" name="attr_weapon_dmg_mod" value="0"/>
<input class="sheet-table_entry_small" type="text" name="attr_weapon_dmg" placeholder="damage"/>
</div>
</fieldset>
</div>
</div>
</div>
<input type="hidden" class="sheet-ability_toggle" name="attr_ability_tab" value="class_tab"/>
<div class="sheet-two_col">
<div class="sheet-two_col">
<input type="radio" id="class_tab_button" name="attr_ability_toggle" value="class_tab" checked/>
<label class="sheet-radio_label" for="attr_ability_toggle">Abilities</label>
</div>
<div class="sheet-two_col">
<input type="radio" id="spell_tab_button" name="attr_ability_toggle" value="spell_tab" />
<label class="sheet-radio_label" for="attr_ability_toggle">Spells</label>
</div>
</div>
<div class="sheet-class_tab">
<div class="sheet-one_col_box">
<h2>Class Abilities</h2>
<div class="sheet-ability_table">
<label class="sheet-table_header_small">Roll</label>
<label class="sheet-table_header">Name</label>
<label class="sheet-table_header_small">Die</label>
<label class="sheet-table_header_small">Threshold</label>
<label class="sheet-table_header_xlarge">Description</label>
</div>
<fieldset class="repeating_abilities">
<div class="sheet-ability_table">
<button class="sheet-stat_button" type="roll" name="ability" value="&{template:default} {{name=@{ability_name} (@{character_name})}} {{Roll (@{ability_die})= [[@{ability_die}]]}} {{Success on = @{ability_threshold}}}"></button>
<input class="sheet-table_entry_large" type="text" name="attr_ability_name" placeholder="ability name"/>
<input class="sheet-table_entry_small" type="text" name="attr_ability_die" placeholder="die"/>
<input class="sheet-table_entry_small" type="text" name="attr_ability_threshold" placeholder="threshold"/>
<input class="sheet-table_entry_xlarge" type="text" name="attr_ability_desc" placeholder="description"/>
</div>
</fieldset>
</div>
</div>
<div class="sheet-spell_tab">
<div class="sheet-one_col_box">
<h3>Magician Spell Slots</h3>
<div class="sheet-spell_slot_table">
<label class="sheet-table_header_small">Level 1</label>
<label class="sheet-table_header_small">Level 2</label>
<label class="sheet-table_header_small">Level 3</label>
<label class="sheet-table_header_small">Level 4</label>
<label class="sheet-table_header_small">Level 5</label>
<label class="sheet-table_header_small">Level 6</label>
<input class="sheet-table_entry_small" type="number" name="attr_mag_spell_slot_1" value="0"/>
<input class="sheet-table_entry_small" type="number" name="attr_mag_spell_slot_2" value="0"/>
<input class="sheet-table_entry_small" type="number" name="attr_mag_spell_slot_3" value="0"/>
<input class="sheet-table_entry_small" type="number" name="attr_mag_spell_slot_4" value="0"/>
<input class="sheet-table_entry_small" type="number" name="attr_mag_spell_slot_5" value="0"/>
<input class="sheet-table_entry_small" type="number" name="attr_mag_spell_slot_6" value="0"/>
</div>
<h3>Cleric Spell Slots</h3>
<div class="sheet-spell_slot_table">
<label class="sheet-table_header_small">Level 1</label>
<label class="sheet-table_header_small">Level 2</label>
<label class="sheet-table_header_small">Level 3</label>
<label class="sheet-table_header_small">Level 4</label>
<label class="sheet-table_header_small">Level 5</label>
<label class="sheet-table_header_small">Level 6</label>
<input class="sheet-table_entry_small" type="number" name="attr_clr_spell_slot_1" value="0"/>
<input class="sheet-table_entry_small" type="number" name="attr_clr_spell_slot_2" value="0"/>
<input class="sheet-table_entry_small" type="number" name="attr_clr_spell_slot_3" value="0"/>
<input class="sheet-table_entry_small" type="number" name="attr_clr_spell_slot_4" value="0"/>
<input class="sheet-table_entry_small" type="number" name="attr_clr_spell_slot_5" value="0"/>
<input class="sheet-table_entry_small" type="number" name="attr_clr_spell_slot_6" value="0"/>
</div>
<h2>Spells</h2>
<div class="sheet-one_col">
<div class="sheet-spell_table">
<label class="sheet-table_header_large">Name</label>
<label class="sheet-table_header_small">Level</label>
<label class="sheet-table_header_small">Range</label>
<label class="sheet-table_header_small">Duration</label>
<label class="sheet-table_header_small">Num. Mem.</label>
<label class="sheet-table_header_large2">Notes</label>
</div>
<fieldset class="repeating_spell">
<div class="sheet-spell_table">
<input class="sheet-table_entry_large" type="text" name="attr_spell_name" placeholder="name"/>
<input class="sheet-table_entry_small" type="text" name="attr_spell_level" placeholder="level"/>
<input class="sheet-table_entry_small" type="text" name="attr_spell_range" placeholder="range"/>
<input class="sheet-table_entry_small" type="text" name="attr_spell_duration" placeholder="duration"/>
<input class="sheet-table_entry_small" type="number" name="attr_spell_num_mem" value="0"/>
<input class="sheet-table_entry_large2_left" type="text" name="attr_spell_notes"/>
</div>
</fieldset>
</div>
</div>
</div>
<input type="hidden" class="sheet-items_toggle" name="attr_items_tab" value="equipment_tab"/>
<div class="sheet-two_col">
<div class="sheet-two_col">
<input type="radio" id="equipment_tab_button" name="attr_items_toggle" value="equipment_tab" checked/>
<label class="sheet-radio_label" for="attr_items_toggle">Goods</label>
</div>
<div class="sheet-two_col">
<input type="radio" id="hireling_tab_button" name="attr_items_toggle" value="hireling_tab" />
<label class="sheet-radio_label" for="attr_items_toggle">Hirelings</label>
</div>
</div>
<div class="sheet-equipment_tab">
<div class="sheet-two_col_box">
<div class="sheet-one_col">
<div class="sheet-one_col">
<h2>Coins</h2>
<div class="sheet-coin_table">
<label></label>
<label class="sheet-table_header_small">PP</label>
<label class="sheet-table_header_small">GP</label>
<label class="sheet-table_header_small">EP</label>
<label class="sheet-table_header_small">SP</label>
<label class="sheet-table_header_small">CP</label>
<label class="sheet-txt_label">Equipped</label>
<input class="sheet-table_entry_small" type="number" name="attr_pp_equip" value="0"/>
<input class="sheet-table_entry_small" type="number" name="attr_gp_equip" value="0"/>
<input class="sheet-table_entry_small" type="number" name="attr_ep_equip" value="0"/>
<input class="sheet-table_entry_small" type="number" name="attr_sp_equip" value="0"/>
<input class="sheet-table_entry_small" type="number" name="attr_cp_equip" value="0"/>
<label class="sheet-txt_label">Stashed</label>
<input class="sheet-table_entry_small" type="number" name="attr_pp" value="0"/>
<input class="sheet-table_entry_small" type="number" name="attr_gp" value="0"/>
<input class="sheet-table_entry_small" type="number" name="attr_ep" value="0"/>
<input class="sheet-table_entry_small" type="number" name="attr_sp" value="0"/>
<input class="sheet-table_entry_small" type="number" name="attr_cp" value="0"/>
</div>
</div>
<div class="sheet-one_col">
<h2>Equipment</h2>
<div class="sheet-equipment_table">
<label class="sheet-table_header_large2">Item</label>
<label class="sheet-table_header_small">Count</label>
<label class="sheet-table_header_small">Weight</label>
<label class="sheet-table_header_small">Equipped</label>
</div>
<fieldset class="repeating_equipment">
<div class="sheet-equipment_table">
<input class="sheet-table_entry_large2_left" type="text" name="attr_equip_name" placeholder="name"/>
<input class="sheet-table_entry_small" type="number" name="attr_equip_count" value="1"/>
<input class="sheet-table_entry_small" type="text" name="attr_equip_weight" placeholder="weight"/>
<input class="sheet-table_entry_small" type="checkbox" name="attr_equip_is" value="1" checked/>
</div>
</fieldset>
</div>
</div>
<div class="sheet-fixed">
<div class="sheet-one_col">
<h2>Encumbrance</h2>
<div class="sheet-two_col">
<label class="sheet-txt_label">Coin Weight:</label>
<span class="sheet-digit_input_right" type="text" name="attr_coin_encumbrance" value="0"></span>
<label class="sheet-txt_label">Equipment Weight:</label>
<span class="sheet-digit_input_right" type="text" name="attr_equip_encumbrance" value="0"></span>
<label class="sheet-txt_label_bold">Total Weight:</label>
<span class="sheet-digit_input_right_bold" type="text" name="attr_encumbrance" value="0"></span>
<label class="sheet-txt_label">Unencumbered Limit:</label>
<input class="sheet-digit_input_right" type="text" name="attr_encumbrance_max"/>
<label class="sheet-txt_label">Encumbered Limit:</label>
<input class="sheet-digit_input_right" type="text" name="attr_encumbrance_max_2"/>
</div>
</div>
</div>
</div>
</div>
<div class="sheet-hireling_tab">
<div class="sheet-one_col_box">
<h2>Hirelings/Henchmen</h2>
<div class="sheet-hireling_table">
<label class="sheet-table_header">Name</label>
<label class="sheet-table_header_xlarge">Notes</label>
</div>
<fieldset class="repeating_hirelings">
<div class="sheet-hireling_table">
<input class="sheet-table_entry_large" type="text" name="attr_hireling_name" placeholder="name"/>
<input class="sheet-table_entry_xlarge" type="text" name="attr_hireling_notes" placeholder="Notes"/>
</div>
</fieldset>
</div>
</div>
<div class="sheet-one_col_box">
<h2>Notes</h2>
<div class="sheet-one_col">
<textarea class="sheet-textarea" name="attr_notes"></textarea>
</div>
</div>
</div>
</div>
<!--
Monster Sheet
-->
<div class="sheet-monster_tab">
<div class="sheet-one_col">
<div class="sheet-two_col">
<div class="sheet-one_col_box">
<h2>Stat Block</h2>
<div class="sheet-two_col">
<label class="sheet-txt_label">Name</label>
<input class="sheet-txt_input" type="text" name="attr_character_name" placeholder="name"/>
<label class="sheet-txt_label">Alias</label>
<input class="sheet-txt_input" type="text" name="attr_monster_alias"/>
<label class="sheet-txt_label">AL</label>
<input class="sheet-txt_input" type="text" name="attr_alignment"/>
<label class="sheet-txt_label">Size</label>
<input class="sheet-txt_input" type="text" name="attr_monster_size"/>
<label class="sheet-txt_label">MV</label>
<input class="sheet-txt_input" type="text" name="attr_mv"/>
<label class="sheet-txt_label">DX</label>
<input class="sheet-txt_input" type="text" name="attr_dx"/>
<label class="sheet-txt_label">AC</label>
<input class="sheet-txt_input" type="text" name="attr_ac"/>
<label class="sheet-txt_label">HD</label>
<input class="sheet-txt_input" type="text" name="attr_monster_hd"/>
<label class="sheet-txt_label">#A</label>
<input class="sheet-txt_input" type="text" name="attr_monster_num_attack"/>
<label class="sheet-txt_label">SV</label>
<input class="sheet-txt_input" type="text" name="attr_base_sv"/>
<label class="sheet-txt_label">ML</label>
<input class="sheet-txt_input" type="text" name="attr_monster_ml"/>
<label class="sheet-txt_label">SA</label>
<input class="sheet-txt_input" type="text" name="attr_monster_sa"/>
<label class="sheet-txt_label">XP</label>
<input class="sheet-txt_input" type="text" name="attr_monster_xp"/>
</div>
</div>
<div class="sheet-one_col_box">
<h2>Notes</h2>
<textarea class="sheet-monster_sa_area" name="attr_notes"></textarea>
</div>
</div>
<div class="sheet-one_col_box">
<h2>Attack</h2>
<div class="sheet-monster_attack_table">
<label class="sheet-table_header_small">Attack Roll</label>
<label class="sheet-table_header_large2">Type</label>
<label class="sheet-table_header_small">Atk. Mod.</label>
<label class="sheet-table_header_small">Damage</label>
</div>
<fieldset class="repeating_monsterAttack">
<div class="sheet-monster_attack_table">
<button class="sheet-stat_button" type="roll" name="melee" value="&{template:default} {{name=Monster Attack (@{monster_alias})}} {{Hit AC = [[20-(d20+(@{weapon_atk_mod}))]]}} {{Damage = [[@{weapon_dmg}]]}} {{Weapon=@{weapon_type}}}"></button>
<input class="sheet-table_entry_large2_left" type="text" name="attr_weapon_type" placeholder="type"/>
<input class="sheet-table_entry_small" type="text" name="attr_weapon_atk_mod" value="0"/>
<input class="sheet-table_entry_small" type="text" name="attr_weapon_dmg" placeholder="damage"/>
</div>
</fieldset>
</div>
</div>
</div>
<script type="text/worker">
const xparseInt = (val) => parseInt(val) || 0;
const xparseFloat = (val) => parseFloat(val) || 0.0;
/*
* The following function is taken from:
* https://wiki.roll20.net/RepeatingSum
*
* ===== PARAMETERS ==========
* destinations = the name of the attribute that stores the total quantity
* can be a single attribute, or an array: ['total_cost', 'total_weight']
* If more than one, the matching fields must be in the same order.
* section = name of repeating fieldset, without the repeating_
* fields = the name of the attribute field to be summed
* destination and fields both can be a single attribute: 'weight'
* or an array of attributes: ['weight','number','equipped']
*/
const repeatingSum = (destinations, section, fields) => {
if (!Array.isArray(destinations)) destinations = [destinations.replace(/\s/g, '').split(',')];
if (!Array.isArray(fields)) fields = [fields.replace(/\s/g, '').split(',')];
getSectionIDs(`repeating_${section}`, idArray => {
const attrArray = idArray.reduce((m, id) => [...m, ...(fields.map(field => `repeating_${section}_${id}_${field}`))], []);
getAttrs([...attrArray], v => {
const getValue = (section, id, field) => v[`repeating_${section}_${id}_${field}`] === 'on' ? 1 : parseFloat(v[`repeating_${section}_${id}_${field}`]) || 0;
const commonMultipliers = (fields.length <= destinations.length) ? [] : fields.splice(destinations.length, fields.length - destinations.length);
const output = {};
destinations.forEach((destination, index) => {
output[destination] = idArray.reduce((total, id) => Math.round(total + getValue(section, id, fields[index]) * commonMultipliers.reduce((subtotal, mult) => subtotal * getValue(section, id, mult), 1)), 0);
});
setAttrs(output);
});
});
};
on(`change:st change:st_mod`, () => {
getAttrs(["st", "st_mod"], values => {
const st_base = xparseInt(values["st"]);
const st_mod = xparseInt(values["st_mod"]);
const st_val = st_base + st_mod;
hit_mod = 0;
if (st_val <= 3) {
hit_mod = -2;
} else if (st_val <= 6 && st_val >= 4) {
hit_mod = -1;
} else if (st_val <= 17 && st_val >= 15) {
hit_mod = 1;
} else if (st_val >= 18) {
hit_mod = 2;
}
setAttrs({
[`hit_mod`]: hit_mod
});
dmg_mod = 0;
if (st_val <= 3) {
dmg_mod = -2;
} else if (st_val <= 8 && st_val >= 4) {
dmg_mod = -1;
} else if (st_val <= 16 && st_val >= 13) {
dmg_mod = 1;
} else if (st_val == 17) {
dmg_mod = 2;
} else if (st_val >= 18) {
dmg_mod = 3;
}
setAttrs({
[`dmg_mod`]: dmg_mod
});
test_st = 1;
if (st_val <= 12 && st_val >= 7) {
test_st = 2;
} else if (st_val <= 16 && st_val >= 13) {
test_st = 3;
} else if (st_val == 17) {
test_st = 4;
} else if (st_val >= 18) {
test_st = 5;
}
setAttrs({
[`test_st`]: test_st
});
feat_st = 0;
if (st_val <= 6 && st_val >=4) {
feat_st = 1;
} else if (st_val == 7 || st_val == 8) {
feat_st = 2;
} else if (st_val <= 12 && st_val >= 9) {
feat_st = 4;
} else if (st_val == 14 || st_val == 13) {
feat_st = 8;
} else if (st_val == 16 || st_val == 15) {
feat_st = 16;
} else if (st_val == 17) {
feat_st = 24;
} else if (st_val >= 18) {
feat_st = 32;
}
setAttrs({
[`feat_st`]: feat_st
});
});
});
on(`change:dx change:dx_mod`, () => {
getAttrs(["dx", "dx_mod"], values => {
const dx_base = xparseInt(values["dx"]);
const dx_mod = xparseInt(values["dx_mod"]);
const dx_val = dx_base + dx_mod;
missile_mod = 0;
if (dx_val <= 3) {
missile_mod = -2;
} else if (dx_val <= 8 && dx_val >= 4) {
missile_mod = -1;
} else if (dx_val <= 16 && dx_val >= 13) {
missile_mod = 1;
} else if (dx_val == 17) {
missile_mod = 2;
} else if (dx_val >= 18) {
missile_mod = 3;
}
setAttrs({
[`missile_mod`]: missile_mod
});
def_mod = 0;
if (dx_val <= 3) {
def_mod = -2;
} else if (dx_val <= 6 && dx_val >= 4) {
def_mod = -1;
} else if (dx_val <= 17 && dx_val >= 15) {
def_mod = 1;
} else if (dx_val >= 18) {
def_mod = 2;
}
setAttrs({
[`def_mod`]: def_mod
});
test_dx = 1;
if (dx_val <= 12 && dx_val >= 7) {
test_dx = 2;
} else if (dx_val <= 16 && dx_val >= 13) {
test_dx = 3;
} else if (dx_val == 17) {
test_dx = 4;
} else if (dx_val >= 18) {
test_dx = 5;
}
setAttrs({
[`test_dx`]: test_dx
});
feat_dx = 0;
if (dx_val <= 6 && dx_val >=4) {
feat_dx = 1;
} else if (dx_val == 7 || dx_val == 8) {
feat_dx = 2;
} else if (dx_val <= 12 && dx_val >= 9) {
feat_dx = 4;
} else if (dx_val == 14 || dx_val == 13) {
feat_dx = 8;
} else if (dx_val == 16 || dx_val == 15) {
feat_dx = 16;
} else if (dx_val == 17) {
feat_dx = 24;
} else if (dx_val >= 18) {
feat_dx = 32;
}
setAttrs({
[`feat_dx`]: feat_dx
});
});
});
on(`change:cn change:cn_mod`, () => {
getAttrs(["cn", "cn_mod"], values => {
const cn_base = xparseInt(values["cn"]);
const cn_mod = xparseInt(values["cn_mod"]);
const cn_val = cn_base + cn_mod;
hp_mod = 0;
if (cn_val <= 6) {
hp_mod = -1;
} else if (cn_val <= 16 && cn_val >= 13) {
hp_mod = 1;
} else if (cn_val == 17) {
hp_mod = 2;
} else if (cn_val >= 18) {
hp_mod = 3;
}
setAttrs({
[`hp_mod`]: hp_mod
});
poison_mod = 0;
if (cn_val <= 3) {
poison_mod = -2;
} else if (cn_val <= 6 && cn_val >= 4) {
poison_mod = -1;
} else if (cn_val <= 17 && cn_val >= 15) {
poison_mod = 1;
} else if (cn_val >= 18) {
poison_mod = 2;
}
setAttrs({
[`poison_mod`]: poison_mod
});
trauma = 45;
if (cn_val <= 6 && cn_val >= 4) {
trauma = 55;
} else if (cn_val == 7 || cn_val == 8) {
trauma = 65;
} else if (cn_val <= 12 && cn_val >= 9) {
trauma = 75;
} else if (cn_val == 13 || cn_val == 14) {
trauma = 80;
} else if (cn_val == 15 || cn_val == 16) {
trauma = 85;
} else if (cn_val == 17) {
trauma = 90;
} else if (cn_val >= 18) {
trauma = 95;
}
setAttrs({
[`trauma`]: trauma
});
test_cn = 1;
if (cn_val <= 12 && cn_val >= 7) {
test_cn = 2;
} else if (cn_val <= 16 && cn_val >= 13) {
test_cn = 3;
} else if (cn_val == 17) {
test_cn = 4;
} else if (cn_val >= 18) {
test_cn = 5;
}
setAttrs({
[`test_cn`]: test_cn
});
feat_cn = 0;
if (cn_val <= 6 && cn_val >=4) {
feat_cn = 1;
} else if (cn_val == 7 || cn_val == 8) {
feat_cn = 2;
} else if (cn_val <= 12 && cn_val >= 9) {
feat_cn = 4;
} else if (cn_val == 14 || cn_val == 13) {
feat_cn = 8;
} else if (cn_val == 16 || cn_val == 15) {
feat_cn = 16;
} else if (cn_val == 17) {
feat_cn = 24;
} else if (cn_val >= 18) {
feat_cn = 32;
}
setAttrs({
[`feat_cn`]: feat_cn
});
});
});
on(`change:in change:in_mod`, () => {
getAttrs(["in", "in_mod"], values => {
const in_base = xparseInt(values["in"]);
const in_mod = xparseInt(values["in_mod"]);
const in_val = in_base + in_mod;
lang_mod = 0;
if (in_val <= 6) {
lang_mod = -1;
} else if (in_val <= 16 && in_val >= 13) {
lang_mod = 1;
} else if (in_val == 17) {
lang_mod = 2;
} else if (in_val >= 18) {
lang_mod = 3;
}
setAttrs({
[`lang_mod`]: lang_mod
});
mag_spell_mod = 0;
if (in_val == 14 || in_val == 13) {
mag_spell_mod = 1;
} else if (in_val == 16 || in_val == 15) {
mag_spell_mod = 2;
} else if (in_val == 17) {
mag_spell_mod = 3;
} else if (in_val >= 18) {
mag_spell_mod = 4;
}
setAttrs({
[`mag_spell_mod`]: mag_spell_mod
});
learn_mag_spell = 0;
if (in_val <= 12 && in_val >= 9) {
learn_mag_spell = 50;
} else if (in_val == 14 || in_val == 13) {
learn_mag_spell = 65;
} else if (in_val == 16 || in_val == 15) {
learn_mag_spell = 75;
} else if (in_val == 17) {
learn_mag_spell = 85;
} else if (in_val >= 18) {
learn_mag_spell = 95;
}
setAttrs({
[`learn_mag_spell`]: learn_mag_spell
});
});
});
on(`change:ws change:ws_mod`, () => {
getAttrs(["ws", "ws_mod"], values => {
const ws_base = xparseInt(values["ws"]);
const ws_mod = xparseInt(values["ws_mod"]);
const ws_val = ws_base + ws_mod;
will_mod = 0;
if (ws_val <= 3) {
will_mod = -2;
} else if (ws_val <= 6 && ws_val >= 4) {
will_mod = -1;
} else if (ws_val <= 17 && ws_val >= 15) {
will_mod = 1;
} else if (ws_val >= 18) {
will_mod = 2;
}
setAttrs({
[`will_mod`]: will_mod
});
cle_spell_mod = 0;
if (ws_val == 14 || ws_val == 13) {
cle_spell_mod = 1;
} else if (ws_val == 16 || ws_val == 15) {
cle_spell_mod = 2;
} else if (ws_val == 17) {
cle_spell_mod = 3;
} else if (ws_val >= 18) {
cle_spell_mod = 4;
}
setAttrs({
[`cle_spell_mod`]: cle_spell_mod
});
learn_cle_spell = 0;
if (ws_val <= 12 && ws_val >= 9) {
learn_cle_spell = 50;
} else if (ws_val == 14 || ws_val == 13) {
learn_cle_spell = 65;
} else if (ws_val == 16 || ws_val == 15) {
learn_cle_spell = 75;
} else if (ws_val == 17) {
learn_cle_spell = 85;
} else if (ws_val >= 18) {
learn_cle_spell = 95;
}
setAttrs({
[`learn_cle_spell`]: learn_cle_spell
});
});
});
on(`change:ch change:ch_mod`, () => {
getAttrs(["ch", "ch_mod"], values => {
const ch_base = xparseInt(values["ch"]);
const ch_mod = xparseInt(values["ch_mod"]);
const ch_val = ch_base + ch_mod;
react_mod = 0;
if (ch_val <= 3) {
react_mod = -3;
} else if (ch_val <= 6 && ch_val >= 4) {
react_mod = -2;
} else if (ch_val == 8 || ch_val == 7) {
react_mod = -1;
} else if (ch_val <= 16 && ch_val >= 13) {
react_mod = 1;
} else if (ch_val == 17) {
react_mod = 2;
} else if (ch_val >= 18) {
react_mod = 3;
}
setAttrs({
[`react_mod`]: react_mod
});
max_hench = 1;
if (ch_val <= 6 && ch_val >= 4) {
max_hench = 2;
} else if (ch_val == 7 || ch_val == 8) {
max_hench = 3;
} else if (ch_val <= 12 && ch_val >= 9) {
max_hench = 4;
} else if (ch_val == 14 || ch_val == 13) {
max_hench = 6;
} else if (ch_val == 16 || ch_val == 15) {
max_hench = 8;
} else if (ch_val == 17) {
max_hench = 10;
} else if (ch_val >= 18) {
max_hench = 12;
}
setAttrs({
[`max_hench`]: max_hench
});
turn_mod = 0;
if (ch_val <= 6) {
turn_mod = -1;
} else if (ch_val >= 15) {
turn_mod = 1;
}
setAttrs({
[`turn_mod`]: turn_mod
});
});
});
on('change:repeating_equipment:equip_weight change:repeating_equipment:equip_count change:repeating_equipment:equip_is remove:repeating_equipment', function () {
repeatingSum('equip_encumbrance', 'equipment', ['equip_weight', 'equip_count', 'equip_is']);
});
on('change:pp_equip change:gp_equip change:ep_equip change:sp_equip change:cp_equip', function () {
getAttrs(['pp_equip', 'gp_equip', 'ep_equip', 'sp_equip', 'cp_equip', 'encumbrance'], function (values) {
const encumbrance = Math.floor((xparseFloat(values.pp_equip) +
xparseFloat(values.gp_equip) +
xparseFloat(values.ep_equip) +
xparseFloat(values.sp_equip) +
xparseFloat(values.cp_equip)) / 100);
setAttrs({
[`coin_encumbrance`]: encumbrance
});
});
});
on('change:equip_encumbrance change:coin_encumbrance', function () {
getAttrs(['equip_encumbrance', 'coin_encumbrance'], function (values) {
const encumbrance = Math.round(xparseFloat(values.equip_encumbrance) + xparseFloat(values.coin_encumbrance));
setAttrs({
[`encumbrance`]: encumbrance
});
});
});
on('change:st_feat_bonus_toggle', function () {
getAttrs(['st_feat_bonus_toggle'], function (value) {
if (value.st_feat_bonus_toggle == "on") {
setAttrs({
[`st_feat_bonus`]: 8
});
} else {
setAttrs({
[`st_feat_bonus`]: 0
});
}
});
});
on('change:dx_feat_bonus_toggle', function () {
getAttrs(['dx_feat_bonus_toggle'], function (value) {
if (value.dx_feat_bonus_toggle == "on") {
setAttrs({
[`dx_feat_bonus`]: 8
});
} else {
setAttrs({
[`dx_feat_bonus`]: 0
});
}
});
});
on('change:cn_feat_bonus_toggle', function () {
getAttrs(['cn_feat_bonus_toggle'], function (value) {
if (value.cn_feat_bonus_toggle == "on") {
setAttrs({
[`cn_feat_bonus`]: 8
});
} else {
setAttrs({
[`cn_feat_bonus`]: 0
});
}
});
});
on('change:weapon_toggle', function () {
getAttrs(['weapon_toggle'], function (value) {
setAttrs({
[`weapon_tab`]: value.weapon_toggle
});
});
});
on('change:ability_toggle', function () {
getAttrs(['ability_toggle'], function (value) {
setAttrs({
[`ability_tab`]: value.ability_toggle
});
});
});
on('change:items_toggle', function () {
getAttrs(['items_toggle'], function (value) {
setAttrs({
[`items_tab`]: value.items_toggle
});
});
});
on('change:sheet_toggle', function () {
getAttrs(['sheet_toggle'], function (value) {
setAttrs({
[`sheet_tab`]: value.sheet_toggle
});
});
});
</script>