mirror of
https://github.com/Nighthawk42/roll20-character-sheets.git
synced 2026-08-30 19:52:29 +00:00
1411 lines
64 KiB
HTML
1411 lines
64 KiB
HTML
<!-- ======================================= -->
|
|
<!-- Dragonslayer Sheet Toggle Button -->
|
|
<!-- ======================================= -->
|
|
<button type="action" name="act_toggleSheet" class="toggle-sheet-btn">Toggle Sheet</button>
|
|
<input type="hidden" class="sheet-mode-toggle" name="attr_sheetMode" value="pc" />
|
|
<div class="charsheet">
|
|
|
|
<input type="hidden" class="sheet-tabstoggle" name="attr_sheetTab" value="main" />
|
|
|
|
<!-- ======================================= -->
|
|
<!-- Dragonslayer Logo -->
|
|
<!-- ======================================= -->
|
|
<div class="sheet-logo-row">
|
|
<img alt="dragonslayerlogo.png"
|
|
src="https://raw.githubusercontent.com/Todd-Antill/dragonslayer_roll20/refs/heads/main/images/dragonslayerlogo.png">
|
|
</div>
|
|
|
|
<!-- ======================================= -->
|
|
<!-- Tab Buttons -->
|
|
<!-- ======================================= -->
|
|
<div class="sheet-tab-buttons">
|
|
<button type="action" name="act_main" class="sheet-button0">Main</button>
|
|
<button type="action" name="act_equipment" class="sheet-button1">Equipment</button>
|
|
<button type="action" name="act_abilities" class="sheet-button2">Abilities</button>
|
|
<button type="action" name="act_spells" class="sheet-button3">Spells</button>
|
|
<button type="action" name="act_wealth" class="sheet-button4">Wealth & Treasure</button>
|
|
<button type="action" name="act_henchmen" class="sheet-button5">Henchmen & Hirelings</button>
|
|
<button type="action" name="act_notes" class="sheet-button6">Notes</button>
|
|
</div>
|
|
|
|
<!-- ======================================= -->
|
|
<!-- Tab Content -->
|
|
<!-- ======================================= -->
|
|
<div class="sheet-tab-content">
|
|
|
|
<!-- ======================================= -->
|
|
<!-- Main Tab Content -->
|
|
<!-- ======================================= -->
|
|
<div class="sheet-main-tab">
|
|
<!-- ======================================= -->
|
|
<!-- Character Details -->
|
|
<!-- ======================================= -->
|
|
<div class="sheet-header-container">
|
|
|
|
<div class="sheet-header-row">
|
|
<div>
|
|
<input type="text" accept="race" name="attr_race">
|
|
<label for="attr_race">Race</label>
|
|
</div>
|
|
<div>
|
|
<input type="text" accept="class" name="attr_class">
|
|
<label for="attr_class">Class</label>
|
|
</div>
|
|
<div>
|
|
<input type="text" name="attr_level">
|
|
<label for="attr_level">Level</label>
|
|
</div>
|
|
<div>
|
|
<input type="text" name="attr_title">
|
|
<label for="attr_title">Title</label>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="sheet-alignment-row">
|
|
<div>
|
|
<input type="text" name="attr_alignment">
|
|
<label for="attr_alignment">Alignment</label>
|
|
</div>
|
|
<div>
|
|
<input type="text" name="attr_deity">
|
|
<label for="attr_deity">Deity</label>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="sheet-languages-row">
|
|
<div>
|
|
<input type="text" name="attr_languages">
|
|
<label for="attr_languages">Languages</label>
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<!-- ======================================= -->
|
|
<!-- Character Info Row -->
|
|
<!-- ======================================= -->
|
|
<div class="sheet-pc-info-row">
|
|
|
|
<div class="sheet-pc-info-section">
|
|
<!-- ARMOR CLASS =========================== -->
|
|
<h3>ARMOR CLASS</h3>
|
|
<div class="armor-class-container">
|
|
<input type="text" name="attr_armor-class">
|
|
</div>
|
|
<div class="armor-description-container">
|
|
<div class="compendium-drop-target">
|
|
<input type="text" name="attr_armor1_name" accept="Armor" class="armor-description-input">
|
|
<label for="attr_armor1_name" class="armor-description-label_1">Armor</label>
|
|
<input type="text" name="attr_armor2_name" accept="Armor" class="armor-description-input">
|
|
<label for="attr_armor2_name" class="armor-description-label_2">Shield</label>
|
|
<input type="text" name="attr_armor_magic_name" accept="Item" class="armor-description-input">
|
|
<label for="attr_armor_magic_name" class="armor-description-label_2">Magic Item</label>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
|
|
<div class="sheet-pc-info-section">
|
|
<!-- HIT POINTS =========================== -->
|
|
<h3>HIT POINTS</h3>
|
|
<div class="hp-container">
|
|
<label for="attr_current-hp" class="curr-hp-label">CURRENT</label>
|
|
<input type="text" name="attr_current-hp">
|
|
<label for="attr_max-hp" class="max-hp-label">MAX</label>
|
|
<input type="text" name="attr_max-hp">
|
|
</div>
|
|
<!-- MOVEMENT =========================== -->
|
|
<h3 class="movement-hdr"><div class="movement-hdr-small">MOVEMENT</div></h3>
|
|
<div class="movement-container">
|
|
<input type="text" name="attr_movement" class="move-input">
|
|
</div>
|
|
</div>
|
|
|
|
<div class="sheet-pc-info-section">
|
|
<!-- EXPERIENCE =========================== -->
|
|
<h3>EXPERIENCE</h3>
|
|
<div class="xp-container">
|
|
<div>
|
|
<input type="text" name="attr_experience">
|
|
<label for="attr_experience">Experience</label>
|
|
</div>
|
|
<div>
|
|
<input type="text" name="attr_xp-bonus">
|
|
<label for="attr_xp-bonus">XP Bonus</label>
|
|
</div>
|
|
</div>
|
|
<div class="xp-container-next-level">
|
|
<input type="text" name="attr_xp_next_level">
|
|
<label for="attr_xp-bonus">Next Level</label>
|
|
</div>
|
|
|
|
<!-- ATTACK BONUS =========================== -->
|
|
<h3 class="atk-bonus-hdr"><div class="atk-hdr-small">ATTACK BONUS</div></h3>
|
|
<div class="atk-bonus-container">
|
|
<input type="text" name="attr_attack-bonus">
|
|
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
|
<!-- ======================================= -->
|
|
<!-- Weapons Section -->
|
|
<!-- ======================================= -->
|
|
<div class="sheet-weapon-table">
|
|
<hr>
|
|
<!-- WEAPONS =========================== -->
|
|
<h3>WEAPONS</h3>
|
|
<hr>
|
|
|
|
<div class="weapon-row header-row">
|
|
<div class="cell-weapon">Weapon</div>
|
|
<div class="cell-type">Type</div>
|
|
<div class="cell-hitmod">Hit<br />Mod.</div>
|
|
<div class="cell-dmg">DMG</div>
|
|
<div class="cell-dmgmod">DMG<br />Mod.</div>
|
|
</div>
|
|
|
|
|
|
<fieldset class="repeating_weapon">
|
|
<div class="weapon-row">
|
|
<button type="roll" name="roll_attack_new" value="&{template:pc_attack_roll} {{character_name=@{character_name}}} {{weapon=@{new_weapon}}} {{rawToHit=[[1d20cs>=20]]}} {{toHitRoll=[[1d20 + (0 + @{new_weapon_hit_mod}) + (0 + ?{Additional Modifiers|0})]]}} {{modifier=[[ (0 + @{new_weapon_hit_mod}) + (0 + ?{Additional Modifiers|0}) ]]}} {{damage=[[ @{new_weapon_dmg} + (0 + @{new_weapon_dmg_mod}) ]]}} {{critDamage=[[ @{new_weapon_dmg} + @{new_weapon_dmg} + (0 + @{new_weapon_dmg_mod}) ]]}} {{fumbleResult=[[1d8]]}}"></button>
|
|
|
|
|
|
<input type="text" name="attr_new_weapon" />
|
|
<select name="attr_new_weapon_type">
|
|
<option value="Melee">Melee</option>
|
|
<option value="Ranged">Ranged</option>
|
|
</select>
|
|
<input type="number" name="attr_new_weapon_hit_mod" value="0" />
|
|
<select name="attr_new_weapon_dmg">
|
|
<option value="1d3">1d3</option>
|
|
<option value="1d4">1d4</option>
|
|
<option value="1d4+1">1d4+1</option>
|
|
<option value="2d4">2d4</option>
|
|
<option value="1d6">1d6</option>
|
|
<option value="1d6+1">1d6+1</option>
|
|
<option value="2d6">2d6</option>
|
|
<option value="1d8">1d8</option>
|
|
<option value="1d10">1d10</option>
|
|
</select>
|
|
<input type="number" name="attr_new_weapon_dmg_mod" value="0"/>
|
|
</div>
|
|
</fieldset>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<!-- ======================================= -->
|
|
<!-- Stats & Saving Throws -->
|
|
<!-- ======================================= -->
|
|
<div class="sheet-pc-stats-row">
|
|
|
|
<div class="sheet-pc-attributes compact">
|
|
<!-- Abilities =========================== -->
|
|
<h3>Abilities</h3>
|
|
<div class="sheet-abilities">
|
|
<div class="sheet-ability">
|
|
<button type="roll" name="roll_ability-strength"
|
|
value="&{template:rollunder} {{character_name=@{character_name}}} {{roll_type=a Strength Ability Check}} {{roll=[[1d20 + ?{Bonus|0}]]}} {{target=[[@{strength}]]}}"></button>
|
|
<div class="hex-container">
|
|
<input type="text" name="attr_strength" class="hex-input">
|
|
</div>
|
|
<label for="attr_strength">Strength</label>
|
|
</div>
|
|
<div class="sheet-ability">
|
|
<button type="roll" name="roll_ability-intelligence"
|
|
value="&{template:rollunder} {{character_name=@{character_name}}} {{roll_type=an Intelligence Ability Check}} {{roll=[[1d20 + ?{Bonus|0}]]}} {{target=[[@{intelligence}]]}}"></button>
|
|
<div class="hex-container">
|
|
<input type="text" name="attr_intelligence" class="hex-input">
|
|
</div>
|
|
<label for="attr_intelligence">Intelligence</label>
|
|
</div>
|
|
<div class="sheet-ability">
|
|
<button type="roll" name="roll_ability-wisdom"
|
|
value="&{template:rollunder} {{character_name=@{character_name}}} {{roll_type=an Wisdom Ability Check}} {{roll=[[1d20 + ?{Bonus|0}]]}} {{target=[[@{wisdom}]]}}"></button>
|
|
<div class="hex-container">
|
|
<input type="text" name="attr_wisdom" class="hex-input">
|
|
</div>
|
|
<label for="attr_wisdom">Wisdom</label>
|
|
</div>
|
|
<div class="sheet-ability">
|
|
<button type="roll" name="roll_ability-dexterity"
|
|
value="&{template:rollunder} {{character_name=@{character_name}}} {{roll_type=a Dexterity Ability Check}} {{roll=[[1d20 + ?{Bonus|0}]]}} {{target=[[@{dexterity}]]}}"></button>
|
|
<div class="hex-container">
|
|
<input type="text" name="attr_dexterity" class="hex-input">
|
|
</div>
|
|
<label for="attr_dexterity">Dexterity</label>
|
|
</div>
|
|
<div class="sheet-ability">
|
|
<button type="roll" name="roll_ability-constitution"
|
|
value="&{template:rollunder} {{character_name=@{character_name}}} {{roll_type=a Constitution Ability Check}} {{roll=[[1d20 + ?{Bonus|0}]]}} {{target=[[@{constitution}]]}}"></button>
|
|
<div class="hex-container">
|
|
<input type="text" name="attr_constitution" class="hex-input">
|
|
</div>
|
|
<label for="attr_constitution">Constitution</label>
|
|
</div>
|
|
<div class="sheet-ability">
|
|
<button type="roll" name="roll_ability-charisma"
|
|
value="&{template:rollunder} {{character_name=@{character_name}}} {{roll_type=a Charisma Ability Check}} {{roll=[[1d20 + ?{Bonus|0}]]}} {{target=[[@{charisma}]]}}"></button>
|
|
<div class="hex-container">
|
|
<input type="text" name="attr_charisma" class="hex-input">
|
|
</div>
|
|
<label for="attr_charisma">Charisma</label>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="sheet-pc-attribute-mods compact">
|
|
<!-- Modifiers =========================== -->
|
|
<h3>Modifiers</h3>
|
|
<div class="sheet-modifiers">
|
|
<div class="sheet-modifier">
|
|
<input type="text" name="attr_melee-hit-damage">
|
|
<input type="text" name="attr_force-door">
|
|
<label for="attr_melee-hit-damage">Melee To Hit & Damage</label>
|
|
<label for="attr_force-door">Force Door</label>
|
|
</div>
|
|
<div class="sheet-modifier">
|
|
<input type="text" name="attr_languages-mod">
|
|
<label for="attr_languages-mod">Modifier / # Languages</label>
|
|
</div>
|
|
<div class="sheet-modifier">
|
|
<input type="text" name="attr_magic-save">
|
|
<label for="attr_magic-save">Magic Save</label>
|
|
</div>
|
|
<div class="sheet-modifier">
|
|
<input type="text" name="attr_missile-hit-damage">
|
|
<input type="text" name="attr_armor-mod">
|
|
<label for="attr_missile-hit-damage">Missile To Hit & Damage</label>
|
|
<label for="attr_armor-mod">Armor</label>
|
|
</div>
|
|
<div class="sheet-modifier">
|
|
<input type="text" name="attr_hit-points-mod">
|
|
<label for="attr_hit-points-mod">Hit Point</label>
|
|
</div>
|
|
<div class="sheet-modifier">
|
|
<input type="text" name="attr_henchmen">
|
|
<input type="text" name="attr_henchmen-morale">
|
|
<label for="attr_henchmen"># Henchmen</label>
|
|
<label for="attr_henchmen-morale">Henchmen Morale</label>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="sheet-pc-saving-throws compact">
|
|
<!-- Saving Throws =========================== -->
|
|
<h3>Saving Throws</h3>
|
|
<div class="sheet-saving-throws-container">
|
|
<div class="sheet-saving-throws-wrapper">
|
|
<div class="sheet-saving-throws-buttons">
|
|
<button type="roll" name="roll_saving-breath"
|
|
value="&{template:rollover} {{character_name=@{character_name}}} {{roll_type=a Breath Saving Throw}} {{roll=[[1d20 + ?{Bonus|0}]]}} {{target=[[@{saving-breath}]]}}"></button>
|
|
<button type="roll" name="roll_saving-death"
|
|
value="&{template:rollover} {{character_name=@{character_name}}} {{roll_type=a Death Saving Throw}} {{roll=[[1d20 + ?{Bonus|0}]]}} {{target=[[@{saving-death}]]}}"></button>
|
|
<button type="roll" name="roll_saving-stone"
|
|
value="&{template:rollover} {{character_name=@{character_name}}} {{roll_type=a Stone Saving Throw}} {{roll=[[1d20 + ?{Bonus|0}]]}} {{target=[[@{saving-stone}]]}}"></button>
|
|
<button type="roll" name="roll_saving-wand"
|
|
value="&{template:rollover} {{character_name=@{character_name}}} {{roll_type=a Wand Saving Throw}} {{roll=[[1d20 + ?{Bonus|0}]]}} {{target=[[@{saving-wand}]]}}"></button>
|
|
<button type="roll" name="roll_saving-spell"
|
|
value="&{template:rollover} {{character_name=@{character_name}}} {{roll_type=a Spell Saving Throw}} {{roll=[[1d20 + ?{Bonus|0}]]}} {{target=[[@{saving-spell}]]}}"></button>
|
|
</div>
|
|
<div class="sheet-saving-throws">
|
|
<input type="text" name="attr_saving-breath" class="breath">
|
|
<label for="attr_saving-breath">Breath</label>
|
|
<input type="text" name="attr_saving-death" class="death">
|
|
<label for="attr_saving-death">Death</label>
|
|
<input type="text" name="attr_saving-stone" class="stone">
|
|
<label for="attr_saving-stone">Stone</label>
|
|
<input type="text" name="attr_saving-wand" class="wand">
|
|
<label for="attr_saving-wand">Wand</label>
|
|
<input type="text" name="attr_saving-spell" class="spell">
|
|
<label for="attr_saving-spell">Spell</label>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
<!-- ======================================= -->
|
|
<!-- Equipment Tab Content -->
|
|
<!-- ======================================= -->
|
|
<div class="sheet-equipment-tab">
|
|
<div class="equipment-columns">
|
|
|
|
<div class="equipment-column">
|
|
<label for="attr_equipment_item">
|
|
<h2>Items</h2>
|
|
</label>
|
|
<fieldset class="repeating_equipment1">
|
|
<div class="equipment-entry">
|
|
<input type="text" accept="equipment_name" name="attr_equipment_item">
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
|
|
<div class="equipment-column">
|
|
<label for="attr_equipment_item">
|
|
<h2>Items</h2>
|
|
</label>
|
|
<fieldset class="repeating_equipment2">
|
|
<div class="equipment-entry">
|
|
<input type="text" accept="equipment_name" name="attr_equipment_item">
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- ======================================= -->
|
|
<!-- Abilities Tab Content -->
|
|
<!-- ======================================= -->
|
|
<div class="sheet-abilities-tab">
|
|
<div class="abilities-columns">
|
|
|
|
<div class="abilities-column">
|
|
<h2>Abilities</h2>
|
|
|
|
<fieldset class="repeating_ability">
|
|
<div class="ability-entry">
|
|
<textarea name="attr_ability_description" rows="4"
|
|
placeholder="Enter ability details..."></textarea>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
|
|
<div class="thief-skills-column">
|
|
<h2>Thief Skills</h2>
|
|
<div class="thief-skills-list">
|
|
|
|
<div class="thief-skill">
|
|
<button type="roll" name="roll_thief_pickpockets"
|
|
value="&{template:thief_skill} {{character_name=@{character_name}}} {{skill=Pick Pockets}} {{roll=[[1d100]]}} {{target=[[@{pick_pockets}]]}}">
|
|
</button>
|
|
<div class="skill-name">Pick Pockets</div>
|
|
<input type="text" name="attr_pick_pockets">
|
|
</div>
|
|
|
|
<div class="thief-skill">
|
|
<button type="roll" name="roll_thief_openlocks"
|
|
value="&{template:thief_skill} {{character_name=@{character_name}}} {{skill=Open Locks}} {{roll=[[1d100]]}} {{target=[[@{open_locks}]]}}">
|
|
</button>
|
|
<div class="skill-name">Open Locks</div>
|
|
<input type="text" name="attr_open_locks">
|
|
</div>
|
|
|
|
<div class="thief-skill">
|
|
<button type="roll" name="roll_thief_findtraps"
|
|
value="&{template:thief_skill} {{character_name=@{character_name}}} {{skill=Find and Remove Traps}} {{roll=[[1d100]]}} {{target=[[@{find_traps}]]}}">
|
|
</button>
|
|
<div class="skill-name">Find and Remove Traps</div>
|
|
<input type="text" name="attr_find_traps">
|
|
</div>
|
|
|
|
<div class="thief-skill">
|
|
<button type="roll" name="roll_thief_movesilently"
|
|
value="&{template:thief_skill} {{character_name=@{character_name}}} {{skill=Move Silently}} {{roll=[[1d100]]}} {{target=[[@{move_silently}]]}}">
|
|
</button>
|
|
<div class="skill-name">Move Silently</div>
|
|
<input type="text" name="attr_move_silently">
|
|
</div>
|
|
|
|
<div class="thief-skill">
|
|
<button type="roll" name="roll_thief_hideinshadows"
|
|
value="&{template:thief_skill} {{character_name=@{character_name}}} {{skill=Hide in Shadows}} {{roll=[[1d100]]}} {{target=[[@{hide_in_shadows}]]}}">
|
|
</button>
|
|
<div class="skill-name">Hide in Shadows</div>
|
|
<input type="text" name="attr_hide_in_shadows">
|
|
</div>
|
|
|
|
<div class="thief-skill">
|
|
<button type="roll" name="roll_thief_climbwalls"
|
|
value="&{template:thief_skill} {{character_name=@{character_name}}} {{skill=Climb Walls}} {{roll=[[1d100]]}} {{target=[[@{climb_walls}]]}}">
|
|
</button>
|
|
<div class="skill-name">Climb Walls</div>
|
|
<input type="text" name="attr_climb_walls">
|
|
</div>
|
|
|
|
<div class="thief-skill">
|
|
<button type="roll" name="roll_thief_hearnoise"
|
|
value="&{template:thief_skill} {{character_name=@{character_name}}} {{skill=Hear Noise}} {{roll=[[1d6]]}} {{target=[[@{hear_noise}]]}}">
|
|
</button>
|
|
<div class="skill-name">Hear Noise</div>
|
|
<input type="text" name="attr_hear_noise">
|
|
</div>
|
|
|
|
<div class="thief-skill">
|
|
<button type="roll" name="roll_thief_appraise"
|
|
value="&{template:thief_skill} {{character_name=@{character_name}}} {{skill=Appraise}} {{roll=[[1d6]]}} {{target=[[@{appraise}]]}}">
|
|
</button>
|
|
<div class="skill-name">Appraise</div>
|
|
<input type="text" name="attr_appraise">
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<!-- ======================================= -->
|
|
<!-- Spells Tab Content -->
|
|
<!-- ======================================= -->
|
|
<div class="sheet-spells-tab">
|
|
|
|
<div class="spells-per-day">
|
|
<div class="spells-per-day-wrapper">
|
|
<div class="spells-per-day-left">
|
|
<div class="spells-per-day-label">Spells Per Day</div>
|
|
<div class="spells-level-label">Level</div>
|
|
</div>
|
|
<div class="spells-per-day-right">
|
|
<div class="spells-per-day-inputs">
|
|
<input type="text" name="attr_spell_per_day_1" />
|
|
<input type="text" name="attr_spell_per_day_2" />
|
|
<input type="text" name="attr_spell_per_day_3" />
|
|
<input type="text" name="attr_spell_per_day_4" />
|
|
<input type="text" name="attr_spell_per_day_5" />
|
|
<input type="text" name="attr_spell_per_day_6" />
|
|
<input type="text" name="attr_spell_per_day_7" />
|
|
<input type="text" name="attr_spell_per_day_8" />
|
|
<input type="text" name="attr_spell_per_day_9" />
|
|
</div>
|
|
<div class="spells-per-day-numbers">
|
|
<span>1</span>
|
|
<span>2</span>
|
|
<span>3</span>
|
|
<span>4</span>
|
|
<span>5</span>
|
|
<span>6</span>
|
|
<span>7</span>
|
|
<span>8</span>
|
|
<span>9</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="spells-list">
|
|
|
|
<div class="spells-list-column spells-list-low">
|
|
|
|
|
|
<div class="spell-level-entry">
|
|
<div class="spells-list-header">
|
|
<h2>Level 1</h2>
|
|
</div>
|
|
|
|
<div class="spell-level-labels">
|
|
<span title="Memorized Spell" class="memorized-header">✓</span>
|
|
<span class="spell-name-header">Spell Name</span>
|
|
</div>
|
|
|
|
<fieldset class="repeating_spelllevel1">
|
|
<div class="spell-entry">
|
|
<input type="checkbox" name="attr_spellmemorized" class="spell-memorized">
|
|
<input type="text" name="attr_spellname" accept="spell_name" placeholder="Spell Name">
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
|
|
|
|
<div class="spell-level-entry">
|
|
<div class="spells-list-header">
|
|
<h2>Level 2</h2>
|
|
</div>
|
|
|
|
<div class="spell-level-labels">
|
|
<span class="memorized-header">✓</span>
|
|
<span class="spell-name-header">Spell Name</span>
|
|
</div>
|
|
|
|
<fieldset class="repeating_spelllevel2">
|
|
<div class="spell-entry">
|
|
<input type="checkbox" name="attr_spellmemorized" class="spell-memorized">
|
|
<input type="text" name="attr_spellname" accept="spell_name" placeholder="Spell Name">
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
|
|
<div class="spell-level-entry">
|
|
<div class="spells-list-header">
|
|
<h2>Level 3</h2>
|
|
</div>
|
|
|
|
<div class="spell-level-labels">
|
|
<span class="memorized-header">✓</span>
|
|
<span class="spell-name-header">Spell Name</span>
|
|
</div>
|
|
|
|
<fieldset class="repeating_spelllevel3">
|
|
<div class="spell-entry">
|
|
<input type="checkbox" name="attr_spellmemorized" class="spell-memorized">
|
|
<input type="text" name="attr_spellname" accept="spell_name" placeholder="Spell Name">
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
|
|
|
|
|
|
<div class="spell-level-entry">
|
|
<div class="spells-list-header">
|
|
<h2>Level 4</h2>
|
|
</div>
|
|
|
|
<div class="spell-level-labels">
|
|
<span class="memorized-header">✓</span>
|
|
<span class="spell-name-header">Spell Name</span>
|
|
</div>
|
|
|
|
<fieldset class="repeating_spelllevel4">
|
|
<div class="spell-entry">
|
|
<input type="checkbox" name="attr_spellmemorized" class="spell-memorized">
|
|
<input type="text" name="attr_spellname" accept="spell_name" placeholder="Spell Name">
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
|
|
|
|
<div class="spell-level-entry">
|
|
<div class="spells-list-header">
|
|
<h2>Level 5</h2>
|
|
</div>
|
|
|
|
<div class="spell-level-labels">
|
|
<span class="memorized-header">✓</span>
|
|
<span class="spell-name-header">Spell Name</span>
|
|
</div>
|
|
|
|
<fieldset class="repeating_spelllevel5">
|
|
<div class="spell-entry">
|
|
<input type="checkbox" name="attr_spellmemorized" class="spell-memorized">
|
|
<input type="text" name="attr_spellname" accept="spell_name" placeholder="Spell Name">
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div class="spells-list-column spells-list-high">
|
|
|
|
|
|
<div class="spell-level-entry">
|
|
<div class="spells-list-header">
|
|
<h2>Level 6</h2>
|
|
</div>
|
|
|
|
<div class="spell-level-labels">
|
|
<span class="memorized-header">✓</span>
|
|
<span class="spell-name-header">Spell Name</span>
|
|
</div>
|
|
|
|
<fieldset class="repeating_spelllevel6">
|
|
<div class="spell-entry">
|
|
<input type="checkbox" name="attr_spellmemorized" class="spell-memorized">
|
|
<input type="text" name="attr_spellname" accept="spell_name" placeholder="Spell Name">
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
|
|
<div class="spell-level-entry">
|
|
<div class="spells-list-header">
|
|
<h2>Level 7</h2>
|
|
</div>
|
|
|
|
<div class="spell-level-labels">
|
|
<span class="memorized-header">✓</span>
|
|
<span class="spell-name-header">Spell Name</span>
|
|
</div>
|
|
|
|
<fieldset class="repeating_spelllevel7">
|
|
<div class="spell-entry">
|
|
<input type="checkbox" name="attr_spellmemorized" class="spell-memorized">
|
|
<input type="text" name="attr_spellname" accept="spell_name" placeholder="Spell Name">
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
|
|
<div class="spell-level-entry">
|
|
<div class="spells-list-header">
|
|
<h2>Level 8</h2>
|
|
</div>
|
|
|
|
<div class="spell-level-labels">
|
|
<span class="memorized-header">✓</span>
|
|
<span class="spell-name-header">Spell Name</span>
|
|
</div>
|
|
|
|
<fieldset class="repeating_spelllevel8">
|
|
<div class="spell-entry">
|
|
<input type="checkbox" name="attr_spellmemorized" class="spell-memorized">
|
|
<input type="text" name="attr_spellname" accept="spell_name" placeholder="Spell Name">
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
|
|
<div class="spell-level-entry">
|
|
<div class="spells-list-header">
|
|
<h2>Level 9</h2>
|
|
</div>
|
|
|
|
<div class="spell-level-labels">
|
|
<span class="memorized-header">✓</span>
|
|
<span class="spell-name-header">Spell Name</span>
|
|
</div>
|
|
|
|
<fieldset class="repeating_spelllevel9">
|
|
<div class="spell-entry">
|
|
<input type="checkbox" name="attr_spellmemorized" class="spell-memorized">
|
|
<input type="text" name="attr_spellname" accept="spell_name" placeholder="Spell Name">
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
|
|
|
</div>
|
|
</div>
|
|
|
|
<!-- ======================================= -->
|
|
<!-- Wealth & Treasure Tab Content -->
|
|
<!-- ======================================= -->
|
|
<div class="sheet-wealth-tab">
|
|
|
|
<div class="sheet-wealth-table">
|
|
<div class="wealth-row">
|
|
<div class="wealth-cell wealth-heading">Wealth</div>
|
|
<div class="wealth-cell coin-col"><input type="text" name="attr_coins_CP"></div>
|
|
<div class="wealth-cell coin-col"><input type="text" name="attr_coins_SP"></div>
|
|
<div class="wealth-cell coin-col"><input type="text" name="attr_coins_EP"></div>
|
|
<div class="wealth-cell coin-col"><input type="text" name="attr_coins_GP"></div>
|
|
<div class="wealth-cell coin-col"><input type="text" name="attr_coins_PP"></div>
|
|
</div>
|
|
<div class="wealth-row">
|
|
<div class="wealth-cell"></div>
|
|
<div class="wealth-cell coin-col"><label>CP</label></div>
|
|
<div class="wealth-cell coin-col"><label>SP</label></div>
|
|
<div class="wealth-cell coin-col"><label>EP</label></div>
|
|
<div class="wealth-cell coin-col"><label>GP</label></div>
|
|
<div class="wealth-cell coin-col"><label>PP</label></div>
|
|
</div>
|
|
</div>
|
|
<h2 class="treasure-heading">Treasure</h2>
|
|
|
|
<div class="treasure-two-col">
|
|
|
|
<div class="treasure-col">
|
|
<div class="treasure-col-header">
|
|
<div class="col-item-label">Item</div>
|
|
<div class="col-value-label">Value</div>
|
|
</div>
|
|
|
|
<fieldset class="repeating_treasureleft">
|
|
|
|
<div class="treasure-entry-2col">
|
|
|
|
<input type="text" name="attr_item">
|
|
<input type="text" name="attr_value">
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
|
|
<div class="treasure-col">
|
|
<div class="treasure-col-header">
|
|
<div class="col-item-label">Item</div>
|
|
<div class="col-value-label">Value</div>
|
|
</div>
|
|
|
|
<fieldset class="repeating_treasureright">
|
|
<div class="treasure-entry-2col">
|
|
<input type="text" name="attr_item">
|
|
<input type="text" name="attr_value">
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- ======================================= -->
|
|
<!-- Henchmen & Hirelings Tab Content -->
|
|
<!-- ======================================= -->
|
|
<div class="sheet-hireling-tab">
|
|
<fieldset class="repeating_hireling">
|
|
<div class="sheet-hireling-table">
|
|
|
|
<div class="hireling-row1-labels">
|
|
<div class="hireling-col-name">Name</div>
|
|
<div class="hireling-col-race">Race</div>
|
|
<div class="hireling-col-class">Class</div>
|
|
<div class="hireling-col-level">Level</div>
|
|
<div class="hireling-col-hp">HP</div>
|
|
<div class="hireling-col-armor">Armor</div>
|
|
<div class="hireling-col-ac">AC</div>
|
|
<div class="hireling-col-xp">XP</div>
|
|
</div>
|
|
|
|
<div class="hireling-row1-data">
|
|
<input type="text" class="col-name" name="attr_name">
|
|
<select class="hireling-col-race" name="attr_race">
|
|
<option value="">-- Race --</option>
|
|
<option value="Human">Human</option>
|
|
<option value="Cyclopsman">Cyclopsman</option>
|
|
<option value="Dwarf">Dwarf</option>
|
|
<option value="Elf">Elf</option>
|
|
<option value="Gnome">Gnome</option>
|
|
<option value="Halfling">Halfling</option>
|
|
<option value="Half-Elf">Half-Elf</option>
|
|
<option value="Half-Orc">Half-Orc</option>
|
|
</select>
|
|
<select class="hireling-col-class" name="attr_class">
|
|
<option value="">-- Class --</option>
|
|
<option value="Torch-Bearers">Torch-Bearers</option>
|
|
<option value="Porter">Porter</option>
|
|
<option value="Specialist">Specialist</option>
|
|
<option value="Man At Arms">Man At Arms</option>
|
|
<option value="Cleric">Cleric</option>
|
|
<option value="Druid">Druid</option>
|
|
<option value="Monk">Monk</option>
|
|
<option value="Fighter">Fighter</option>
|
|
<option value="Barbarian">Barbarian</option>
|
|
<option value="Paladin">Paladin</option>
|
|
<option value="Ranger">Ranger</option>
|
|
<option value="Magic-User">Magic-User</option>
|
|
<option value="Illusionist">Illusionist</option>
|
|
<option value="Thief">Thief</option>
|
|
<option value="Assassin">Assassin</option>
|
|
</select>
|
|
<input type="text" class="hireling-col-level" name="attr_level">
|
|
<input type="text" class="hireling-col-hp" name="attr_hitpoints">
|
|
<select class="hireling-col-armor" name="attr_armor">
|
|
<option value="">-- Armor --</option>
|
|
<option value="Leather">Leather</option>
|
|
<option value="Studded Leather">Studded Leather</option>
|
|
<option value="Ring Mail">Ring Mail</option>
|
|
<option value="Chain Mail">Chain Mail</option>
|
|
<option value="Half-Plate Mail">Half-Plate Mail</option>
|
|
<option value="Plate Mail">Plate Mail</option>
|
|
<option value="Shield">Shield</option>
|
|
</select>
|
|
<input type="text" class="hireling-col-ac" name="attr_armorclass">
|
|
<input type="text" class="hireling-col-xp" name="attr_xp">
|
|
</div>
|
|
|
|
<div class="hireling-row2-labels">
|
|
<div class="hireling-col-attack"></div>
|
|
<div class="hireling-col-weapon">Weapon</div>
|
|
<div class="hireling-col-hitmod">Hit Mod</div>
|
|
<div class="hireling-col-dmgdice">Damage</div>
|
|
<div class="hireling-col-dmgmod">Dmg Mod</div>
|
|
<div class="hireling-col-notes">Notes</div>
|
|
</div>
|
|
|
|
<div class="hireling-row2-data">
|
|
<button type="roll" class="hireling-col-attack" name="roll_attack" value="&{template:pc_attack_roll} {{character_name=@{name}}} {{weapon=@{weapon}}} {{toHitRoll=[[1d20 + (0 + @{hitmod}) + (0 + ?{Additional Mods|0})]]}} {{damage=[[ @{dmgdice} + (0 + @{dmgmod}) ]]}}"></button>
|
|
|
|
<input type="text" class="hireling-col-weapon" name="attr_weapon">
|
|
<input type="text" class="hireling-col-hitmod" name="attr_hitmod" value="0">
|
|
<select class="hireling-col-dmgdice" name="attr_dmgdice">
|
|
<option value="1d3">1d3</option>
|
|
<option value="1d4">1d4</option>
|
|
<option value="2d4">2d4</option>
|
|
<option value="1d6">1d6</option>
|
|
<option value="2d6">2d6</option>
|
|
<option value="1d8">1d8</option>
|
|
<option value="1d10">1d10</option>
|
|
<option value="1d12">1d12</option>
|
|
</select>
|
|
<input type="text" class="hireling-col-dmgmod" name="attr_dmgmod" value="0">
|
|
<input type="text" class="hireling-col-notes" name="attr_notes">
|
|
</div>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
|
|
<!-- ======================================= -->
|
|
<!-- Notes Tab Content -->
|
|
<!-- ======================================= -->
|
|
<div class="sheet-notes-tab">
|
|
<div class="sheet-notes">
|
|
<div class="notes-two-col">
|
|
|
|
<div class="notes-col">
|
|
|
|
<fieldset class="repeating_notes_left">
|
|
<div class="notes-entry">
|
|
<input type="text" name="attr_notetitle_left" placeholder="Note Name">
|
|
<textarea name="attr_notecontent_left" rows="4"></textarea>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
|
|
<div class="notes-col">
|
|
|
|
<fieldset class="repeating_notes_right">
|
|
<div class="notes-entry">
|
|
<input type="text" name="attr_notetitle_right" placeholder="Note Name">
|
|
<textarea name="attr_notecontent_right" rows="4"></textarea>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
<!-- ======================================= -->
|
|
<!-- Monster Sheet Content -->
|
|
<!-- ======================================= -->
|
|
<div class="monsheet">
|
|
<div class="monster-sheet">
|
|
|
|
<div class="monster-sheet-cols">
|
|
|
|
|
|
<div class="monster-info-grid">
|
|
|
|
<div class="stat-row">
|
|
<div class="stat-button">
|
|
<button type="roll" name="roll_noenc"
|
|
value="/w gm Monsters Encountered: [[0+@{monster_no_enc}]]"></button>
|
|
|
|
</div>
|
|
<div class="stat-label">No. Enc</div>
|
|
<div class="stat-input">
|
|
<div class="double-input">
|
|
<input type="text" name="attr_monster_no_enc" />
|
|
<button type="roll" name="roll_noenc_lair"
|
|
value="/w gm Monsters In Lair Encountered: [[0+@{monster_no_enc_lair}]]"></button>
|
|
<input type="text" name="attr_monster_no_enc_lair">
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="stat-row">
|
|
<div class="stat-button"></div>
|
|
<div class="stat-label">Alignment</div>
|
|
<div class="stat-input">
|
|
<input type="text" name="attr_monster_alignment">
|
|
</div>
|
|
</div>
|
|
|
|
<div class="stat-row">
|
|
<div class="stat-button"></div>
|
|
<div class="stat-label">Movement</div>
|
|
<div class="stat-input">
|
|
<input type="text" name="attr_monster_movement">
|
|
</div>
|
|
</div>
|
|
|
|
<div class="stat-row">
|
|
<div class="stat-button"></div>
|
|
<div class="stat-label">Armor Class</div>
|
|
<div class="stat-input">
|
|
<input type="text" name="attr_monster_armor_class">
|
|
</div>
|
|
</div>
|
|
|
|
<div class="stat-row">
|
|
<div class="stat-button">
|
|
<button type="roll" name="roll_hitdice"
|
|
value="/w gm Hit Dice: [[0+@{monster_hit_dice_full}]]"></button>
|
|
</div>
|
|
<div class="stat-label">Hit Dice</div>
|
|
<div class="stat-input">
|
|
<input type="text" name="attr_monster_hit_dice">
|
|
</div>
|
|
</div>
|
|
|
|
<div class="stat-row">
|
|
<div class="stat-button">
|
|
<button type="roll" name="roll_morale"
|
|
value="&{template:morale} {{roll=[[2d6]]}} {{morale=[[0+@{monster_morale}]]}}"></button>
|
|
</div>
|
|
<div class="stat-label">Morale</div>
|
|
<div class="stat-input">
|
|
<input type="text" name="attr_monster_morale">
|
|
</div>
|
|
</div>
|
|
|
|
<div class="stat-row">
|
|
<div class="stat-button"></div>
|
|
<div class="stat-label">Treasure</div>
|
|
<div class="stat-input">
|
|
<input type="text" name="attr_monster_treasure">
|
|
</div>
|
|
</div>
|
|
|
|
<div class="stat-row">
|
|
<div class="stat-button"></div>
|
|
<div class="stat-label">XP</div>
|
|
<div class="stat-input">
|
|
<input type="text" name="attr_monster_xp">
|
|
</div>
|
|
</div>
|
|
|
|
<div class="stat-row">
|
|
<div class="stat-button"></div>
|
|
<div class="stat-label">Save</div>
|
|
<div class="stat-input">
|
|
<input type="text" name="attr_monster_save_as">
|
|
</div>
|
|
</div>
|
|
|
|
<div class="monster-saving-throws">
|
|
<div class="saving-throws-grid">
|
|
<div class="saving-throw">
|
|
<button type="roll" name="roll_saving-mon-breath"
|
|
value="&{template:rollover} {{character_name=@{character_name}}} {{roll_type=a Breath Saving Throw}} {{roll=[[1d20 + ?{Bonus|0}]]}} {{target=[[@{monster_save_breath}]]}}"></button>
|
|
<input type="text" name="attr_monster_save_breath">
|
|
<div class="saving-label">Breath</div>
|
|
</div>
|
|
<div class="saving-throw">
|
|
<button type="roll" name="roll_saving-mon-death"
|
|
value="&{template:rollover} {{character_name=@{character_name}}} {{roll_type=a Death Saving Throw}} {{roll=[[1d20 + ?{Bonus|0}]]}} {{target=[[@{monster_save_death}]]}}"></button>
|
|
<input type="text" name="attr_monster_save_death">
|
|
<div class="saving-label">Death</div>
|
|
</div>
|
|
<div class="saving-throw">
|
|
<button type="roll" name="roll_saving-mon-stone"
|
|
value="&{template:rollover} {{character_name=@{character_name}}} {{roll_type=a Stone Saving Throw}} {{roll=[[1d20 + ?{Bonus|0}]]}} {{target=[[@{monster_save_stone}]]}}"></button>
|
|
<input type="text" name="attr_monster_save_stone">
|
|
<div class="saving-label">Stone</div>
|
|
</div>
|
|
<div class="saving-throw">
|
|
<button type="roll" name="roll_saving-mon-wand"
|
|
value="&{template:rollover} {{character_name=@{character_name}}} {{roll_type=a Wand Saving Throw}} {{roll=[[1d20 + ?{Bonus|0}]]}} {{target=[[@{monster_save_wand}]]}}"></button>
|
|
<input type="text" name="attr_monster_save_wand">
|
|
<div class="saving-label">Wand</div>
|
|
</div>
|
|
<div class="saving-throw">
|
|
<button type="roll" name="roll_saving-mon-spell"
|
|
value="&{template:rollover} {{character_name=@{character_name}}} {{roll_type=a Spell Saving Throw}} {{roll=[[1d20 + ?{Bonus|0}]]}} {{target=[[@{monster_save_spell}]]}}"></button>
|
|
<input type="text" name="attr_monster_save_spell">
|
|
<div class="saving-label">Spell</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="monster-attack">
|
|
<fieldset class="repeating_monster-attack">
|
|
<div class="atk-entry">
|
|
|
|
<div class="mon-atk-row-1">
|
|
<button type="roll" name="roll_monster_attack"
|
|
value="&{template:pc_attack_roll} {{character_name=@{character_name}}} {{weapon=@{mon_atk_attack_name}}} {{rawToHit=[[1d20cs>=20]]}} {{toHitRoll=[[1d20+@{mon_atk_attack_bonus}+?{Additional Modifiers|0}]]}} {{modifier=[[@{mon_atk_attack_bonus}+?{Additional Modifiers|0}]]}} {{damage=[[ @{mon_atk_primary_damage} ]]}} {{critDamage=[[ @{mon_atk_primary_damage}+0 ]]}} {{fumbleResult=[[1d8]]}}"></button>
|
|
<label>Attack Name</label>
|
|
<input type="text" name="attr_mon_atk_attack_name">
|
|
</div>
|
|
|
|
<div class="mon-atk-row-2">
|
|
<label>Attack Bonus</label>
|
|
<input type="text" name="attr_mon_atk_attack_bonus">
|
|
<button type="roll" name="roll_mon_atk_attack_text"
|
|
value="**@{character_name}** attacks with '@{mon_atk_attack_name}' for [[@{mon_atk_primary_damage}]] damage."></button>
|
|
|
|
|
|
<label>Damage</label>
|
|
<input type="text" name="attr_mon_atk_primary_damage">
|
|
</div>
|
|
|
|
<label class="mon-description-label"></label>
|
|
<div class="mon-atk-row-description">
|
|
<textarea name="attr_mon_atk_description"></textarea>
|
|
</div>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<rolltemplate class="sheet-rolltemplate-pc_attack_roll">
|
|
<div class="sheet-container">
|
|
<div class="sheet-header">
|
|
<strong>{{character_name}}</strong> attacks with a
|
|
<span class="sheet-atk-weapon">{{weapon}}</span> for a total roll of {{toHitRoll}}
|
|
|
|
|
|
{{#rollBetween() toHitRoll 2 9}}
|
|
and missed!
|
|
{{/rollBetween() toHitRoll 2 9}}
|
|
|
|
{{#rollWasFumble() toHitRoll}}
|
|
<span class="sheet-fumble">
|
|
<strong>Fumble Result</strong>:<br>
|
|
{{#rollTotal() fumbleResult 1}}Dexterity Check or miss next attack.{{/rollTotal() fumbleResult 1}}
|
|
{{#rollTotal() fumbleResult 2}}You attack, slip, and fall prone.{{/rollTotal() fumbleResult 2}}
|
|
{{#rollTotal() fumbleResult 3}}Weapon slips and lands behind enemy.{{/rollTotal() fumbleResult 3}}
|
|
{{#rollTotal() fumbleResult 4}}Headgear slips, blind until adjusted.{{/rollTotal() fumbleResult 4}}
|
|
{{#rollTotal() fumbleResult 5}}Cower in fear of enemy for 1 round.{{/rollTotal() fumbleResult 5}}
|
|
{{#rollTotal() fumbleResult 6}}Enemy receives free attack.{{/rollTotal() fumbleResult 6}}
|
|
{{#rollTotal() fumbleResult 7}}Hit Closest Ally for {{damage}} points of damage: Dexterity Check to half the
|
|
damage.{{/rollTotal() fumbleResult 7}}
|
|
{{#rollTotal() fumbleResult 8}}Hit Yourself for {{damage}} points of damage: Dexterity Check to half the
|
|
damage.{{/rollTotal() fumbleResult 8}}
|
|
</span>
|
|
{{/rollWasFumble() toHitRoll}}
|
|
|
|
{{#rollWasCrit() toHitRoll}}
|
|
<span class="sheet-crit">scoring a critical hit for {{critDamage}} damage.</span>
|
|
{{/rollWasCrit() toHitRoll}}
|
|
|
|
{{^rollWasFumble() toHitRoll}}
|
|
{{^rollWasCrit() toHitRoll}}
|
|
<span class="sheet-normal-damage">
|
|
<span class="sheet-ac-hit">
|
|
{{#rollTotal() toHitRoll 10}}
|
|
<span class="sheet-hit">hitting AC 10 for {{damage}} points of damage. </span>
|
|
{{/rollTotal() toHitRoll 10}}
|
|
{{#rollTotal() toHitRoll 11}}
|
|
<span class="sheet-hit">hitting AC 9 for {{damage}} points of damage.</span>
|
|
{{/rollTotal() toHitRoll 11}}
|
|
{{#rollTotal() toHitRoll 12}}
|
|
<span class="sheet-hit">hitting AC 8 for {{damage}} points of damage.</span>
|
|
{{/rollTotal() toHitRoll 12}}
|
|
{{#rollTotal() toHitRoll 13}}
|
|
<span class="sheet-hit">hitting AC 7 for {{damage}} points of damage.</span>
|
|
{{/rollTotal() toHitRoll 13}}
|
|
{{#rollTotal() toHitRoll 14}}
|
|
<span class="sheet-hit">hitting AC 6 for {{damage}} points of damage.</span>
|
|
{{/rollTotal() toHitRoll 14}}
|
|
{{#rollTotal() toHitRoll 15}}
|
|
<span class="sheet-hit">hitting AC 5 for {{damage}} points of damage.</span>
|
|
{{/rollTotal() toHitRoll 15}}
|
|
{{#rollTotal() toHitRoll 16}}
|
|
<span class="sheet-hit">hitting AC 4 for {{damage}} points of damage.</span>
|
|
{{/rollTotal() toHitRoll 16}}
|
|
{{#rollTotal() toHitRoll 17}}
|
|
<span class="sheet-hit">hitting AC 3 for {{damage}} points of damage.</span>
|
|
{{/rollTotal() toHitRoll 17}}
|
|
{{#rollTotal() toHitRoll 18}}
|
|
<span class="sheet-hit">hitting AC 2 for {{damage}} points of damage.</span>
|
|
{{/rollTotal() toHitRoll 18}}
|
|
{{#rollTotal() toHitRoll 19}}
|
|
<span class="sheet-hit">hitting AC 1 for {{damage}} points of damage.</span>
|
|
{{/rollTotal() toHitRoll 19}}
|
|
{{#rollTotal() toHitRoll 20}}
|
|
<span class="sheet-hit">hitting AC 0 for {{damage}} points of damage.</span>
|
|
{{/rollTotal() toHitRoll 20}}
|
|
{{#rollTotal() toHitRoll 21}}
|
|
<span class="sheet-hit">hitting AC -1 for {{damage}} points of damage.</span>
|
|
{{/rollTotal() toHitRoll 21}}
|
|
{{#rollTotal() toHitRoll 22}}
|
|
<span class="sheet-hit">hitting AC -2 for {{damage}} points of damage.</span>
|
|
{{/rollTotal() toHitRoll 22}}
|
|
{{#rollTotal() toHitRoll 23}}
|
|
<span class="sheet-hit">hitting AC -3 for {{damage}} points of damage.</span>
|
|
{{/rollTotal() toHitRoll 23}}
|
|
{{#rollTotal() toHitRoll 24}}
|
|
<span class="sheet-hit">hitting AC -4 for {{damage}} points of damage.</span>
|
|
{{/rollTotal() toHitRoll 24}}
|
|
{{#rollTotal() toHitRoll 25}}
|
|
<span class="sheet-hit">hitting AC -5 for {{damage}} points of damage.</span>
|
|
{{/rollTotal() toHitRoll 25}}
|
|
{{#rollTotal() toHitRoll 26}}
|
|
<span class="sheet-hit">hitting AC -6 for {{damage}} points of damage.</span>
|
|
{{/rollTotal() toHitRoll 26}}
|
|
{{#rollTotal() toHitRoll 27}}
|
|
<span class="sheet-hit">hitting AC -7 for {{damage}} points of damage.</span>
|
|
{{/rollTotal() toHitRoll 27}}
|
|
{{#rollTotal() toHitRoll 28}}
|
|
<span class="sheet-hit">hitting AC -8 for {{damage}} points of damage.</span>
|
|
{{/rollTotal() toHitRoll 28}}
|
|
{{#rollTotal() toHitRoll 29}}
|
|
<span class="sheet-hit">hitting AC -9 for {{damage}} points of damage.</span>
|
|
{{/rollTotal() toHitRoll 29}}
|
|
{{#rollGreater() toHitRoll 29}}
|
|
<span class="sheet-hit">hitting AC -10 for {{damage}} points of damage.</span>
|
|
{{/rollGreater() toHitRoll 29}}
|
|
</span>
|
|
</span>
|
|
{{/rollWasCrit() toHitRoll}}
|
|
{{/rollWasFumble() toHitRoll}}
|
|
</div>
|
|
</div>
|
|
</rolltemplate>
|
|
<rolltemplate class="sheet-rolltemplate-savingthrow">
|
|
<div class="sheet-roll-header">
|
|
<span><strong>{{character_name}}</strong></span> rolls a <strong>{{save}}</strong> Save
|
|
</div>
|
|
<div class="sheet-roll-result">
|
|
<span class="sheet-roll-dice">{{roll}}</span> vs. <span class="sheet-roll-target">{{target}}</span>
|
|
</div>
|
|
|
|
{{#rollLess() roll target}}
|
|
<div class="sheet-roll-failure">Failure!</div>
|
|
{{/rollLess() roll target}}
|
|
|
|
{{#rollTotal() roll target}}
|
|
<div class="sheet-roll-success">Success!</div>
|
|
{{/rollTotal() roll target}}
|
|
|
|
{{#rollGreater() roll target}}
|
|
<div class="sheet-roll-success">Success!</div>
|
|
{{/rollGreater() roll target}}
|
|
</rolltemplate>
|
|
<rolltemplate class="sheet-rolltemplate-rollover">
|
|
<div class="sheet-roll-header">
|
|
<strong>{{character_name}}</strong> rolls <strong>{{roll_type}}</strong>
|
|
</div>
|
|
<div class="sheet-roll-result">
|
|
<span class="sheet-roll-dice">{{roll}}</span> vs. <span class="sheet-roll-target">{{target}}</span>
|
|
</div>
|
|
{{#rollGreater() roll target}}
|
|
<div class="sheet-roll-success">Success!</div>
|
|
{{/rollGreater() roll target}}
|
|
{{#rollTotal() roll target}}
|
|
<div class="sheet-roll-success">Success!</div>
|
|
{{/rollTotal() roll target}}
|
|
{{#rollLess() roll target}}
|
|
<div class="sheet-roll-failure">Failure!</div>
|
|
{{/rollLess() roll target}}
|
|
</rolltemplate>
|
|
<rolltemplate class="sheet-rolltemplate-rollunder">
|
|
<div class="sheet-roll-header">
|
|
<strong>{{character_name}}</strong> rolls a <strong>{{roll_type}}</strong>
|
|
</div>
|
|
<div class="sheet-roll-result">
|
|
<span class="sheet-roll-dice">{{roll}}</span> vs. <span class="sheet-roll-target">{{target}}</span>
|
|
</div>
|
|
{{#rollLess() roll target}}
|
|
<div class="sheet-roll-success">Success!</div>
|
|
{{/rollLess() roll target}}
|
|
{{#rollTotal() roll target}}
|
|
<div class="sheet-roll-success">Success!</div>
|
|
{{/rollTotal() roll target}}
|
|
{{#rollGreater() roll target}}
|
|
<div class="sheet-roll-failure">Failure!</div>
|
|
{{/rollGreater() roll target}}
|
|
</rolltemplate>
|
|
<rolltemplate class="sheet-rolltemplate-thief_skill">
|
|
<div class="sheet-roll-message">
|
|
<strong>{{character_name}}</strong> rolls {{skill}} ({{roll}})
|
|
{{#rollBetween() roll 0 target}}
|
|
and Succeeds.
|
|
{{/rollBetween() roll 0 target}}
|
|
{{#rollGreater() roll target}}
|
|
and Fails.
|
|
{{/rollGreater() roll target}}
|
|
</div>
|
|
</rolltemplate>
|
|
<rolltemplate class="sheet-rolltemplate-morale">
|
|
<div class="sheet-roll-header">Morale Check</div>
|
|
<div class="sheet-roll-result">
|
|
<span class="sheet-roll-dice">{{roll}}</span> vs. <span class="sheet-roll-target">{{morale}}</span>
|
|
</div>
|
|
{{#rollBetween() roll 2 morale}}
|
|
<div class="sheet-roll-failure">Monster holds!</div>
|
|
{{/rollBetween() roll 2 morale}}
|
|
{{#rollGreater() roll morale}}
|
|
<div class="sheet-roll-success">Monster flees!</div>
|
|
{{/rollGreater() roll morale}}
|
|
</rolltemplate>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<script type="text/worker">
|
|
const buttonlist = ["main", "equipment", "abilities", "spells", "wealth", "henchmen", "notes"];
|
|
buttonlist.forEach(button => {
|
|
on(`clicked:${button}`, function() {
|
|
setAttrs({
|
|
sheetTab: button
|
|
});
|
|
});
|
|
});
|
|
|
|
on("clicked:toggleSheet", function() {
|
|
getAttrs(["sheetMode"], function(values) {
|
|
// Toggle between "pc" and "monster"
|
|
var newMode = (values.sheetMode === "monster") ? "pc" : "monster";
|
|
setAttrs({ sheetMode: newMode });
|
|
});
|
|
});
|
|
|
|
on("sheet:opened change:monster_hit_dice", function() {
|
|
getAttrs(["monster_hit_dice"], function(values) {
|
|
var input = values.monster_hit_dice || "";
|
|
if(input.indexOf("d8") !== -1) {
|
|
setAttrs({ monster_hit_dice_full: input });
|
|
} else {
|
|
var parts = input.split("+");
|
|
if(parts.length === 2) {
|
|
var dice = parseInt(parts[0].trim(), 10);
|
|
var bonus = parseInt(parts[1].trim(), 10);
|
|
if(!isNaN(dice) && !isNaN(bonus)) {
|
|
setAttrs({ monster_hit_dice_full: dice + "d8+" + bonus });
|
|
} else {
|
|
setAttrs({ monster_hit_dice_full: "0" });
|
|
}
|
|
} else {
|
|
var diceOnly = parseInt(input.trim(),10);
|
|
if(!isNaN(diceOnly)) {
|
|
setAttrs({ monster_hit_dice_full: diceOnly + "d8" });
|
|
} else {
|
|
setAttrs({ monster_hit_dice_full: "0" });
|
|
}
|
|
}
|
|
}
|
|
});
|
|
});
|
|
|
|
const abilityMods = {
|
|
strength: [
|
|
{ min: 3, max: 3, values: { 'melee-hit-damage': -3, 'force-door': -3 } },
|
|
{ min: 4, max: 5, values: { 'melee-hit-damage': -2, 'force-door': -2 } },
|
|
{ min: 6, max: 8, values: { 'melee-hit-damage': -1, 'force-door': -1 } },
|
|
{ min: 9, max: 12, values: { 'melee-hit-damage': 0, 'force-door': 0 } },
|
|
{ min: 13, max: 15, values: { 'melee-hit-damage': 1, 'force-door': 1 } },
|
|
{ min: 16, max: 17, values: { 'melee-hit-damage': 2, 'force-door': 2 } },
|
|
{ min: 18, max: 18, values: { 'melee-hit-damage': 3, 'force-door': 3 } },
|
|
],
|
|
intelligence: [
|
|
{ min: 3, max: 3, values: { 'languages-mod': -3 } },
|
|
{ min: 4, max: 5, values: { 'languages-mod': -2 } },
|
|
{ min: 6, max: 8, values: { 'languages-mod': -1 } },
|
|
{ min: 9, max: 12, values: { 'languages-mod': 0 } },
|
|
{ min: 13, max: 15, values: { 'languages-mod': 1 } },
|
|
{ min: 16, max: 17, values: { 'languages-mod': 2 } },
|
|
{ min: 18, max: 18, values: { 'languages-mod': 3 } },
|
|
],
|
|
wisdom: [
|
|
{ min: 3, max: 3, values: { 'magic-save': -3 } },
|
|
{ min: 4, max: 5, values: { 'magic-save': -2 } },
|
|
{ min: 6, max: 8, values: { 'magic-save': -1 } },
|
|
{ min: 9, max: 12, values: { 'magic-save': 0 } },
|
|
{ min: 13, max: 15, values: { 'magic-save': 1 } },
|
|
{ min: 16, max: 17, values: { 'magic-save': 2 } },
|
|
{ min: 18, max: 18, values: { 'magic-save': 3 } },
|
|
],
|
|
dexterity: [
|
|
{ min: 3, max: 3, values: { 'missile-hit-damage': -3, 'armor-mod': 3 } },
|
|
{ min: 4, max: 5, values: { 'missile-hit-damage': -2, 'armor-mod': 2 } },
|
|
{ min: 6, max: 8, values: { 'missile-hit-damage': -1, 'armor-mod': 1 } },
|
|
{ min: 9, max: 12, values: { 'missile-hit-damage': 0, 'armor-mod': 0 } },
|
|
{ min: 13, max: 15, values: { 'missile-hit-damage': 1, 'armor-mod': -1 } },
|
|
{ min: 16, max: 17, values: { 'missile-hit-damage': 2, 'armor-mod': -2 } },
|
|
{ min: 18, max: 18, values: { 'missile-hit-damage': 3, 'armor-mod': -3 } },
|
|
],
|
|
constitution: [
|
|
{ min: 3, max: 3, values: { 'hit-points-mod': -3 } },
|
|
{ min: 4, max: 5, values: { 'hit-points-mod': -2 } },
|
|
{ min: 6, max: 8, values: { 'hit-points-mod': -1 } },
|
|
{ min: 9, max: 12, values: { 'hit-points-mod': 0 } },
|
|
{ min: 13, max: 15, values: { 'hit-points-mod': 1 } },
|
|
{ min: 16, max: 17, values: { 'hit-points-mod': 2 } },
|
|
{ min: 18, max: 18, values: { 'hit-points-mod': 3 } },
|
|
],
|
|
charisma: [
|
|
{ min: 3, max: 3, values: { 'henchmen': 0, 'henchmen-morale': 4 } },
|
|
{ min: 4, max: 5, values: { 'henchmen': 1, 'henchmen-morale': 5 } },
|
|
{ min: 6, max: 8, values: { 'henchmen': 2, 'henchmen-morale': 6 } },
|
|
{ min: 9, max: 12, values: { 'henchmen': 3, 'henchmen-morale': 7 } },
|
|
{ min: 13, max: 15, values: { 'henchmen': 4, 'henchmen-morale': 8 } },
|
|
{ min: 16, max: 17, values: { 'henchmen': 5, 'henchmen-morale': 9 } },
|
|
{ min: 18, max: 18, values: { 'henchmen': 6, 'henchmen-morale': 10 } },
|
|
]
|
|
};
|
|
|
|
Object.keys(abilityMods).forEach(ability => {
|
|
on(`change:${ability}`, function() {
|
|
getAttrs([ability], function(values) {
|
|
const score = parseInt(values[ability]) || 0;
|
|
const modTable = abilityMods[ability];
|
|
const match = modTable.find(entry => score >= entry.min && score <= entry.max);
|
|
if (match) {
|
|
setAttrs(match.values);
|
|
}
|
|
});
|
|
});
|
|
});
|
|
|
|
// ===== SAVING THROWS SHEETWORKER =====
|
|
|
|
on("change:class change:level", function() {
|
|
getAttrs(["class", "level"], function(values) {
|
|
const cls = (values.class || "").toLowerCase().trim();
|
|
const level = parseInt(values.level || "0", 10);
|
|
|
|
const tables = {
|
|
cleric: [
|
|
{ max: 3, breath:16, death:10, stone:13, wand:14, spell:15 },
|
|
{ max: 6, breath:15, death:9, stone:12, wand:13, spell:14 },
|
|
{ max: 9, breath:13, death:7, stone:10, wand:11, spell:12 },
|
|
{ max:12, breath:12, death:6, stone:9, wand:10, spell:11 },
|
|
{ max:15, breath:11, death:5, stone:8, wand:9, spell:10 },
|
|
{ max:18, breath:10, death:4, stone:7, wand:8, spell:9 },
|
|
{ max:99,breath:8, death:2, stone:5, wand:6, spell:7 }
|
|
],
|
|
fighter: [
|
|
{ max:0, breath:17, death:16, stone:17, wand:18, spell:19 },
|
|
{ max:2, breath:16, death:14, stone:15, wand:16, spell:17 },
|
|
{ max:4, breath:15, death:13, stone:14, wand:15, spell:16 },
|
|
{ max:6, breath:13, death:11, stone:12, wand:13, spell:14 },
|
|
{ max:8, breath:12, death:10, stone:11, wand:12, spell:13 },
|
|
{ max:10, breath:9, death:8, stone:9, wand:10, spell:11 },
|
|
{ max:12, breath:8, death:7, stone:8, wand:9, spell:10 },
|
|
{ max:14, breath:5, death:5, stone:6, wand:7, spell:8 },
|
|
{ max:16, breath:4, death:4, stone:5, wand:6, spell:7 },
|
|
{ max:99, breath:4, death:3, stone:4, wand:5, spell:6 }
|
|
],
|
|
magicuser: [
|
|
{ max:5, breath:15, death:14, stone:13, wand:11, spell:12 },
|
|
{ max:10, breath:13, death:13, stone:11, wand:9, spell:10 },
|
|
{ max:15, breath:11, death:11, stone:9, wand:7, spell:8 },
|
|
{ max:20, breath:9, death:10, stone:7, wand:5, spell:6 },
|
|
{ max:99, breath:4, death:3, stone:4, wand:5, spell:6 }
|
|
],
|
|
thief: [
|
|
{ max:4, breath:16, death:13, stone:12, wand:14, spell:15 },
|
|
{ max:8, breath:15, death:12, stone:11, wand:12, spell:13 },
|
|
{ max:12, breath:14, death:11, stone:10, wand:10, spell:11 },
|
|
{ max:16, breath:12, death:10, stone:9, wand:8, spell:9 },
|
|
{ max:99, breath:11, death:9, stone:8, wand:6, spell:7 }
|
|
]
|
|
};
|
|
|
|
let table;
|
|
if (/cleric|druid|monk/.test(cls)) {
|
|
table = tables.cleric;
|
|
} else if (/fighter|barbarian|paladin|ranger/.test(cls)) {
|
|
table = tables.fighter;
|
|
} else if (/magic.?user|illusionist/.test(cls)) {
|
|
table = tables.magicuser;
|
|
} else if (/thief|assassin/.test(cls)) {
|
|
table = tables.thief;
|
|
} else {
|
|
return; // Class doesn't match any known type
|
|
}
|
|
|
|
const row = table.find(r => level <= r.max);
|
|
if (!row) return;
|
|
|
|
setAttrs({
|
|
"saving-breath": row.breath,
|
|
"saving-death": row.death,
|
|
"saving-stone": row.stone,
|
|
"saving-wand": row.wand,
|
|
"saving-spell": row.spell
|
|
});
|
|
});
|
|
});
|
|
|
|
|
|
|
|
</script>
|