mirror of
https://github.com/Nighthawk42/roll20-character-sheets.git
synced 2026-08-30 19:52:29 +00:00
837 lines
48 KiB
HTML
837 lines
48 KiB
HTML
<div class="sheet-character">
|
|
<h1 class="main-title header-font">TOW RPG Character Sheet</h1>
|
|
|
|
<div class="grid-container">
|
|
<div class="char-info-box">
|
|
<div class="info-line">
|
|
<label for="name">Name</label>
|
|
<input type="text" id="character_name" name="attr_character_name">
|
|
</div>
|
|
<div class="info-line">
|
|
<label for="origin">Origin</label>
|
|
<input type="text" id="origin" name="attr_origin">
|
|
</div>
|
|
<div class="info-line">
|
|
<label for="career">Career</label>
|
|
<input type="text" id="career" name="attr_career">
|
|
</div>
|
|
</div>
|
|
|
|
<div class="top-stats-box">
|
|
<div class="stat-box">
|
|
<div >Fate</div>
|
|
<div class="fate-container">
|
|
<div class="fate-input-group">
|
|
<input type="number" id="fate_current" name="attr_fate_current">
|
|
<span class="sub-label">Remaining</span>
|
|
</div>
|
|
<div class="fate-input-group">
|
|
<input type="number" id="fate_max" name="attr_fate_max">
|
|
<span class="sub-label">Maximum</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="stat-box">
|
|
<div >XP</div>
|
|
<div class="fate-container">
|
|
<div class="fate-input-group">
|
|
<input type="number" id="xp" name="attr_xp">
|
|
<span class="sub-label">Current</span>
|
|
</div>
|
|
<div class="fate-input-group">
|
|
<input type="number" id="xp_total" name="attr_xp_total">
|
|
<span class="sub-label">Total</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="stat-box">
|
|
<div >Speed</div>
|
|
<div class="fate-container">
|
|
<input type="text"
|
|
id="speed" name="attr_speed"
|
|
style="width: 80px;">
|
|
</div>
|
|
</div>
|
|
<div style="visibility: hidden; display: flex; gap: 0.5rem; justify-content: center;">
|
|
<div style="display: flex; flex-direction: column; gap: 0.25rem; justify-content: center;">
|
|
<button class="export-button" @click="triggerImport">Import Sheet</button>
|
|
<button class="export-button" @click="clearSheet">Clear Sheet</button>
|
|
</div>
|
|
<div style="display: flex; flex-direction: column; gap: 0.25rem; justify-content: center;">
|
|
<button class="export-button" @click="exportSheet">Export Sheet</button>
|
|
<button class="export-button" @click="printSheet">Print Sheet</button>
|
|
</div>
|
|
</div>
|
|
<input type="file" id="sheet-import" @change="importSheet($event)" accept=".json" style="display: none;">
|
|
</div>
|
|
|
|
<div class="char-skills-box">
|
|
<div class="chars-and-skills-container">
|
|
|
|
<div class="char-skill-row">
|
|
<div class="char-side">
|
|
<div class="char-info">
|
|
<span class="char-abbr">WS</span>
|
|
<span class="char-fullname">WEAPON SKILL</span>
|
|
</button>
|
|
</div>
|
|
<div class="char-value-container">
|
|
<input type="number" id="attr_ws" name="attr_ws">
|
|
<input type="checkbox" id="attr_ws_favoured" name="attr_ws_favoured">
|
|
</div>
|
|
</div>
|
|
<div class="skills-side">
|
|
<div class="skill-line">
|
|
<input type="number" id="attr_skill_melee" name="attr_skill_melee" style="width: 40px; text-align: center;">
|
|
<button type="action" value="ws|melee|skill" name="act_towroll"><span class="skill-name">Melee</span></button>
|
|
<div style="display: flex; align-items: center; gap: 0.5rem;">
|
|
<input type="number" id="attr_skill_melee_improvement" name="attr_skill_melee_improvement" style="width: 40px; text-align: center;">
|
|
</div>
|
|
</div>
|
|
<div class="skill-line">
|
|
<input type="number" id="attr_skill_defence" name="attr_skill_defence" style="width: 40px; text-align: center;">
|
|
<button type="action" value="ws|defence|skill" name="act_towroll"><span class="skill-name">Defence</span></button>
|
|
<div style="display: flex; align-items: center; gap: 0.5rem;">
|
|
<input type="number" id="attr_skill_defence_improvement" name="attr_skill_defence_improvement" style="width: 40px; text-align: center;">
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="char-skill-row">
|
|
<div class="char-side">
|
|
<div class="char-info">
|
|
<span class="char-abbr" >BS</span>
|
|
<span class="char-fullname">BALLISTIC SKILL</span>
|
|
</div>
|
|
<div class="char-value-container">
|
|
<input type="number" id="attr_bs" name="attr_bs">
|
|
<input type="checkbox" id="attr_bs_favoured" name="attr_bs_favoured">
|
|
</div>
|
|
</div>
|
|
<div class="skills-side">
|
|
<div class="skill-line">
|
|
<input type="number" id="attr_skill_shooting" name="attr_skill_shooting" style="width: 40px; text-align: center;">
|
|
<button type="action" value="bs|shooting|skill" name="act_towroll"><span class="skill-name">Shooting</span></button>
|
|
<div style="display: flex; align-items: center; gap: 0.5rem;">
|
|
<input type="number" id="attr_skill_shooting_improvement" name="attr_skill_shooting_improvement" style="width: 40px; text-align: center;">
|
|
</div>
|
|
</div>
|
|
<div class="skill-line">
|
|
<input type="number" id="attr_skill_throwing" name="attr_skill_throwing" style="width: 40px; text-align: center;">
|
|
<button type="action" value="bs|throwing|skill" name="act_towroll"><span class="skill-name">Throwing</span></button>
|
|
<div style="display: flex; align-items: center; gap: 0.5rem;">
|
|
<input type="number" id="attr_skill_throwing_improvement" name="attr_skill_throwing_improvement" style="width: 40px; text-align: center;">
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="char-skill-row">
|
|
<div class="char-side">
|
|
<div class="char-info">
|
|
<span class="char-abbr" >S</span>
|
|
<span class="char-fullname">STRENGTH</span>
|
|
</div>
|
|
<div class="char-value-container">
|
|
<input type="number" id="attr_s" name="attr_s">
|
|
<input type="checkbox" id="attr_s_favoured" name="attr_s_favoured">
|
|
</div>
|
|
</div>
|
|
<div class="skills-side">
|
|
<div class="skill-line">
|
|
<input type="number" id="attr_skill_brawn" name="attr_skill_brawn" style="width: 40px; text-align: center;">
|
|
<button type="action" value="s|brawn|skill" name="act_towroll"><span class="skill-name">Brawn</span></button>
|
|
<div style="display: flex; align-items: center; gap: 0.5rem;">
|
|
<input type="number" id="attr_skill_brawn_improvement" name="attr_skill_brawn_improvement" style="width: 40px; text-align: center;">
|
|
</div>
|
|
</div>
|
|
<div class="skill-line">
|
|
<input type="number" id="attr_skill_toil" name="attr_skill_toil" style="width: 40px; text-align: center;">
|
|
<button type="action" value="s|toil|skill" name="act_towroll"><span class="skill-name">Toil</span></button>
|
|
<div style="display: flex; align-items: center; gap: 0.5rem;">
|
|
<input type="number" id="attr_skill_toil_improvement" name="attr_skill_toil_improvement" style="width: 40px; text-align: center;">
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="char-skill-row">
|
|
<div class="char-side">
|
|
<div class="char-info">
|
|
<span class="char-abbr" >T</span>
|
|
<span class="char-fullname">TOUGHNESS</span>
|
|
</div>
|
|
<div class="char-value-container">
|
|
<input type="number" id="attr_t" name="attr_t">
|
|
<input type="checkbox" id="attr_t_favoured" name="attr_t_favoured">
|
|
</div>
|
|
</div>
|
|
<div class="skills-side">
|
|
<div class="skill-line">
|
|
<input type="number" id="attr_skill_survival" name="attr_skill_survival" style="width: 40px; text-align: center;">
|
|
<button type="action" value="t|survival|skill" name="act_towroll"><span class="skill-name">Survival</span></button>
|
|
<div style="display: flex; align-items: center; gap: 0.5rem;">
|
|
<input type="number" id="attr_skill_survival_improvement" name="attr_skill_survival_improvement" style="width: 40px; text-align: center;">
|
|
</div>
|
|
</div>
|
|
<div class="skill-line">
|
|
<input type="number" id="attr_skill_endurance" name="attr_skill_endurance" style="width: 40px; text-align: center;">
|
|
<button type="action" value="t|endurance|skill" name="act_towroll"><span class="skill-name">Endurance</span></button>
|
|
<div style="display: flex; align-items: center; gap: 0.5rem;">
|
|
<input type="number" id="attr_skill_endurance_improvement" name="attr_skill_endurance_improvement" style="width: 40px; text-align: center;">
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="char-skill-row">
|
|
<div class="char-side">
|
|
<div class="char-info">
|
|
<span class="char-abbr" >I</span>
|
|
<span class="char-fullname">Initiative</span>
|
|
</div>
|
|
<div class="char-value-container">
|
|
<input type="number" id="attr_i" name="attr_i">
|
|
<input type="checkbox" id="attr_i_favoured" name="attr_i_favoured">
|
|
</div>
|
|
</div>
|
|
<div class="skills-side">
|
|
<div class="skill-line">
|
|
<input type="number" id="attr_skill_awareness" name="attr_skill_awareness" style="width: 40px; text-align: center;">
|
|
<button type="action" value="i|awareness|skill" name="act_towroll"><span class="skill-name">Awareness</span></button>
|
|
<div style="display: flex; align-items: center; gap: 0.5rem;">
|
|
<input type="number" id="attr_skill_awareness_improvement" name="attr_skill_awareness_improvement" style="width: 40px; text-align: center;">
|
|
</div>
|
|
</div>
|
|
<div class="skill-line">
|
|
<input type="number" id="attr_skill_dexterity" name="attr_skill_dexterity" style="width: 40px; text-align: center;">
|
|
<button type="action" value="i|dexterity|skill" name="act_towroll"><span class="skill-name">Dexterity</span></button>
|
|
<div style="display: flex; align-items: center; gap: 0.5rem;">
|
|
<input type="number" id="attr_skill_dexterity_improvement" name="attr_skill_dexterity_improvement" style="width: 40px; text-align: center;">
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="char-skill-row">
|
|
<div class="char-side">
|
|
<div class="char-info">
|
|
<span class="char-abbr" >Ag</span>
|
|
<span class="char-fullname">AGILITY</span>
|
|
</div>
|
|
<div class="char-value-container">
|
|
<input type="number" id="attr_ag" name="attr_ag">
|
|
<input type="checkbox" id="attr_ag_favoured" name="attr_ag_favoured">
|
|
</div>
|
|
</div>
|
|
<div class="skills-side">
|
|
<div class="skill-line">
|
|
<input type="number" id="attr_skill_athletics" name="attr_skill_athletics" style="width: 40px; text-align: center;">
|
|
<button type="action" value="ag|athletics|skill" name="act_towroll"><span class="skill-name">Athletics</span></button>
|
|
<div style="display: flex; align-items: center; gap: 0.5rem;">
|
|
<input type="number" id="attr_skill_athletics_improvement" name="attr_skill_athletics_improvement" style="width: 40px; text-align: center;">
|
|
</div>
|
|
</div>
|
|
<div class="skill-line">
|
|
<input type="number" id="attr_skill_stealth" name="attr_skill_stealth" style="width: 40px; text-align: center;">
|
|
<button type="action" value="ag|stealth|skill" name="act_towroll"><span class="skill-name">Stealth</span></button>
|
|
<div style="display: flex; align-items: center; gap: 0.5rem;">
|
|
<input type="number" id="attr_skill_stealth_improvement" name="attr_skill_stealth_improvement" style="width: 40px; text-align: center;">
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="char-skill-row">
|
|
<div class="char-side">
|
|
<div class="char-info">
|
|
<span class="char-abbr" >RE</span>
|
|
<span class="char-fullname">REASON</span>
|
|
</div>
|
|
<div class="char-value-container">
|
|
<input type="number" id="attr_re" name="attr_re">
|
|
<input type="checkbox" id="attr_re_favoured" name="attr_re_favoured">
|
|
</div>
|
|
</div>
|
|
<div class="skills-side">
|
|
<div class="skill-line">
|
|
<input type="number" id="attr_skill_willpower" name="attr_skill_willpower" style="width: 40px; text-align: center;">
|
|
<button type="action" value="re|willpower|skill" name="act_towroll"><span class="skill-name">Willpower</span></button>
|
|
<div style="display: flex; align-items: center; gap: 0.5rem;">
|
|
<input type="number" id="attr_skill_willpower_improvement" name="attr_skill_willpower_improvement" style="width: 40px; text-align: center;">
|
|
</div>
|
|
</div>
|
|
<div class="skill-line">
|
|
<input type="number" id="attr_skill_recall" name="attr_skill_recall" style="width: 40px; text-align: center;">
|
|
<button type="action" value="re|recall|skill" name="act_towroll"><span class="skill-name">Recall</span></button>
|
|
<div style="display: flex; align-items: center; gap: 0.5rem;">
|
|
<input type="number" id="attr_skill_recall_improvement" name="attr_skill_recall_improvement" style="width: 40px; text-align: center;">
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="char-skill-row">
|
|
<div class="char-side">
|
|
<div class="char-info">
|
|
<span class="char-abbr" >Fel</span>
|
|
<span class="char-fullname">FELLOWSHIP</span>
|
|
</div>
|
|
<div class="char-value-container">
|
|
<input type="number" id="attr_fel" name="attr_fel">
|
|
<input type="checkbox" id="attr_fel_favoured" name="attr_fel_favoured">
|
|
</div>
|
|
</div>
|
|
<div class="skills-side">
|
|
<div class="skill-line">
|
|
<input type="number" id="attr_skill_leadership" name="attr_skill_leadership" style="width: 40px; text-align: center;">
|
|
<button type="action" value="fel|leadership|skill" name="act_towroll"><span class="skill-name">Leadership</span></button>
|
|
<div style="display: flex; align-items: center; gap: 0.5rem;">
|
|
<input type="number" id="attr_skill_leadershp_improvement" name="attr_skill_leadershp_improvement" style="width: 40px; text-align: center;">
|
|
</div>
|
|
</div>
|
|
<div class="skill-line">
|
|
<input type="number" id="attr_skill_charm" name="attr_skill_charm" style="width: 40px; text-align: center;">
|
|
<button type="action" value="fel|charm|skill" name="act_towroll"><span class="skill-name">Charm</span></button>
|
|
<div style="display: flex; align-items: center; gap: 0.5rem;">
|
|
<input type="number" id="attr_skill_charm_improvement" name="attr_skill_charm_improvement" style="width: 40px; text-align: center;">
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="lore-talents-box box">
|
|
<h3 class="box-title" x-tooltip="tooltips.lore">Lore</h3>
|
|
<div class="lore-inputs">
|
|
<input type="text" id="attr_lore1" name="attr_lore1">
|
|
<input type="text" id="attr_lore2" name="attr_lore2">
|
|
<input type="text" id="attr_lore3" name="attr_lore3">
|
|
<input type="text" id="attr_lore4" name="attr_lore4">
|
|
<input type="text" id="attr_lore5" name="attr_lore5">
|
|
<input type="text" id="attr_lore6" name="attr_lore6">
|
|
</div>
|
|
<h3 class="box-title" x-tooltip="tooltips.talents">Talents</h3>
|
|
<div class="talents-inputs">
|
|
<textarea class="talents-textarea" id="attr-talent" name="attr_talent"></textarea>
|
|
<fieldset class="repeating_talents">
|
|
<textarea class="talents-textarea" id="attr-talent" name="attr_talent"></textarea>
|
|
</fieldset>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="appearance-coin-box">
|
|
<div class="box">
|
|
<h3 class="box-title">Appearance</h3>
|
|
<div class="talents-inputs">
|
|
<input type="text" id="attr_appearance1" name="attr_appearance1">
|
|
<input type="text" id="attr_appearance2" name="attr_appearance2">
|
|
<input type="text" id="attr_appearance3" name="attr_appearance3">
|
|
<input type="text" id="attr_appearance4" name="attr_appearance4">
|
|
<input type="text" id="attr_appearance5" name="attr_appearance5">
|
|
<input type="text" id="attr_appearance6" name="attr_appearance6">
|
|
</div>
|
|
</div>
|
|
<div class="box" style="margin-top: 1rem;">
|
|
<h3 class="box-title">Coin</h3>
|
|
<div class="info-line">
|
|
<label for="status">Status</label>
|
|
<select id="status" name="attr_coin_status">
|
|
<option value="brass">Brass</option>
|
|
<option value="silver">Silver</option>
|
|
<option value="gold">Gold</option>
|
|
</select>
|
|
</div>
|
|
<div class="coin-grid-container" style="margin-top: 1rem;">
|
|
<label>Brass</label>
|
|
<div class="coin-slots-container">
|
|
<input type="text" id="attr_coins_brass" name="attr_coins_brass">
|
|
</div>
|
|
<label>Silver</label>
|
|
<div class="coin-slots-container">
|
|
<div class="coin-slots-container">
|
|
<input type="text" id="attr_coins_silver" name="attr_coins_silver">
|
|
</div>
|
|
</div>
|
|
<label>Gold</label>
|
|
<div class="coin-slots-container">
|
|
<input type="text" id="attr_coins_gold" name="attr_coins_gold">
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="box" style="margin-top: 1rem; display: flex; gap: 1rem; justify-content: center;">
|
|
<div style="text-align: center;">
|
|
<h3 class="box-title">Resilience</h3>
|
|
<div style="height: 30px; display: flex; align-items: center; justify-content: center;">
|
|
<input type="number" id="attr_resilience" name="attr_resilience" style="width: 50px; text-align: center; font-size: 1.5rem;">
|
|
</div>
|
|
<span class="sub-label" style="font-size: 0.8rem;">Toughness + Armour</span>
|
|
</div>
|
|
<div style="text-align: center;">
|
|
<h3 class="box-title">Protection</h3>
|
|
<div style="height: 30px; display: flex; align-items: center; justify-content: center;">
|
|
<input type="number" id="attr_protection" name="attr_protection" style="width: 50px; text-align: center; font-size: 1.5rem;">
|
|
</div>
|
|
<span class="sub-label" style="font-size: 0.8rem;">Armour</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="weapons-box box">
|
|
<h3 class="box-title">Weapons</h3>
|
|
<div class="weapons">
|
|
<div class="weapons-row">
|
|
<h5>Action</h5>
|
|
<h5>Name</h5>
|
|
<h5>Range</h5>
|
|
<h5>Dice Pool</h5>
|
|
<h5>Skill</h5>
|
|
<h5>Damage</h5>
|
|
<h5>1h/2h</h5>
|
|
<h5>Traits</h5>
|
|
</div>
|
|
<fieldset class="repeating_weapons">
|
|
<div class="weapons-row">
|
|
<button type="action" value="bs|shooting|skill" name="act_towroll"><span class="skill-name">Roll</span></button>
|
|
<input type="text" name="attr_weapon_name">
|
|
<input type="text" name="attr_weapon_range">
|
|
<input type="number" name="attr_weapon_dice_pool" step="1">
|
|
<input type="number" name="attr_weapon_skill_value" step="1">
|
|
<input type="number" name="attr_weapon_damage" step="1">
|
|
<input type="text" name="attr_weapon_hands">
|
|
<input type="text" name="attr_weapon_traits">
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="wounds-box box">
|
|
<h3 class="box-title">Wounds</h3>
|
|
<ul class="wounds-list">
|
|
<li>Treated</li>
|
|
<li><input type="checkbox" id="attr_wound_treated1" name="attr_wound_treated1"><input type="text" id="attr_wound_description1" name="attr_wound_description1"></li>
|
|
<li><input type="checkbox" id="attr_wound_treated2" name="attr_wound_treated2"><input type="text" id="attr_wound_description2" name="attr_wound_description2"></li>
|
|
<li><input type="checkbox" id="attr_wound_treated3" name="attr_wound_treated3"><input type="text" id="attr_wound_description3" name="attr_wound_description3"></li>
|
|
<li><input type="checkbox" id="attr_wound_treated4" name="attr_wound_treated4"><input type="text" id="attr_wound_description4" name="attr_wound_description4"></li>
|
|
<li><input type="checkbox" id="attr_wound_treated5" name="attr_wound_treated5"><input type="text" id="attr_wound_description5" name="attr_wound_description5"></li>
|
|
<li><input type="checkbox" id="attr_wound_treated6" name="attr_wound_treated6"><input type="text" id="attr_wound_description6" name="attr_wound_description6"></li>
|
|
<li><input type="checkbox" id="attr_wound_treated7" name="attr_wound_treated7"><input type="text" id="attr_wound_description7" name="attr_wound_description7"></li>
|
|
</ul>
|
|
<h3 class="box-title" style="margin-top: 1rem;">Conditions</h3>
|
|
<ul class="wounds-list">
|
|
<li><span ><input type="checkbox" id="attr_staggered" name="attr_staggered"> Staggered</span></li>
|
|
<li><input type="text" id="attr_condition1" name="attr_condition1"></li>
|
|
<li><input type="text" id="attr_condition2" name="attr_condition2"></li>
|
|
<li><input type="text" id="attr_condition3" name="attr_condition3"></li>
|
|
<li><input type="text" id="attr_condition4" name="attr_condition4"></li>
|
|
</ul>
|
|
</div>
|
|
|
|
<div class="trappings-box box">
|
|
<h3 class="box-title" x-tooltip="tooltips.trappings">Trappings</h3>
|
|
<div class="talents-inputs">
|
|
<input type="text" id="attr_trappings" name="attr_trappings">
|
|
<fieldset class="repeating_trappings">
|
|
<input type="text" id="attr_trappings" name="attr_trappings">
|
|
</fieldset>
|
|
|
|
</div>
|
|
<h3 class="box-title" x-tooltip="tooltips.assets" style="margin-top: 1rem;">Assets</h3>
|
|
<div class="talents-inputs">
|
|
<input type="text" id="attr_assets" name="attr_assets">
|
|
<fieldset class="repeating_assets">
|
|
<input type="text" id="attr_assets" name="attr_assets">
|
|
</fieldset>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="contacts-box box">
|
|
<h3 class="box-title">Contacts</h3>
|
|
<ul class="contacts-list">
|
|
<li><strong>Name</strong><strong style="margin-left: 80px;">Relationship</strong></li>
|
|
<li><input type="text" id="attr_contact" name="attr_contact" style="width: 100px;"><input type="text" id="attr_relationship" name="attr_relationship"></li>
|
|
<fieldset class="repeating_contacts">
|
|
<li><input type="text" id="attr_contact" name="attr_contact" style="width: 100px;"><input type="text" id="attr_relationship" name="attr_relationship"></li>
|
|
</fieldset>
|
|
</ul>
|
|
</div>
|
|
|
|
<div class="magic-box box">
|
|
<h3 class="box-title">Magic</h3>
|
|
<div style="display: flex; justify-content: space-around; gap: 1rem; margin-bottom: 1rem;">
|
|
<div style="text-align: center;">
|
|
<label class="header-font">Wizard Level</label>
|
|
<input type="number" id="attr_wizard_level" name="attr_wizard_level" style="width: 80px; text-align: center;">
|
|
</div>
|
|
<div style="text-align: center;">
|
|
<label class="header-font">Roll to Cast</label>
|
|
<button type="action" value="re|willpower|spell" name="act_towroll"><span class="skill-name">Cast</span></button>
|
|
</div>
|
|
</div>
|
|
<div style="border: 1px solid var(--ink-main); padding: 0.5rem; text-align: center;">
|
|
<h4 class="header-font" style="margin: 0 0 0.5rem 0; color: var(--ink-header);">Miscast Pool</h4>
|
|
<div style="display: flex; justify-content: center; align-items: center; gap: 5px;">
|
|
<input type="number" id="attr_miscast_pool" name="attr_miscast_pool" style="width: 80px; text-align: center;">
|
|
</div>
|
|
</div>
|
|
<div style="margin-top: 1rem;">
|
|
<h4 class="header-font" style="margin: 0 0 0.5rem 0; text-align: center; color: var(--ink-header);">Miscast Effects</h4>
|
|
<input type="text" id="attr_miscast_effects" name="attr_miscast_effects" style="margin-bottom: 0.5rem;">
|
|
</div>
|
|
</div>
|
|
|
|
<div class="other-characters-box box">
|
|
<h3 class="box-title">Other Characters</h3>
|
|
<ul class="contacts-list">
|
|
<li><strong>Name</strong><strong style="margin-left: 80px;">Relationship</strong></li>
|
|
<li><input type="text" id="attr_other_character_name1" name="attr_other_character_name1" style="width: 100px;"><input type="text" id="attr_other_character_relationship1" name="attr_other_character_relationship1" ></li>
|
|
<li><input type="text" id="attr_other_character_name2" name="attr_other_character_name2" style="width: 100px;"><input type="text" id="attr_other_character_relationship2" name="attr_other_character_relationship2" ></li>
|
|
<li><input type="text" id="attr_other_character_name3" name="attr_other_character_name3" style="width: 100px;"><input type="text" id="attr_other_character_relationship3" name="attr_other_character_relationship3" ></li>
|
|
<li><input type="text" id="attr_other_character_name4" name="attr_other_character_name4" style="width: 100px;"><input type="text" id="attr_other_character_relationship4" name="attr_other_character_relationship4" ></li>
|
|
<li><input type="text" id="attr_other_character_name5" name="attr_other_character_name5" style="width: 100px;"><input type="text" id="attr_other_character_relationship5" name="attr_other_character_relationship5" ></li>
|
|
<li><input type="text" id="attr_other_character_name6" name="attr_other_character_name6" style="width: 100px;"><input type="text" id="attr_other_character_relationship6" name="attr_other_character_relationship6" ></li>
|
|
<li><input type="text" id="attr_other_character_name7" name="attr_other_character_name7" style="width: 100px;"><input type="text" id="attr_other_character_relationship7" name="attr_other_character_relationship7" ></li>
|
|
</ul>
|
|
</div>
|
|
|
|
<div class="spells-box box">
|
|
<h3 class="box-title">Spells</h3>
|
|
<div class="spells">
|
|
<div class="spells-row">
|
|
<h5>CV</h5>
|
|
<h5>Target</h5>
|
|
<h5>Range</h5>
|
|
<h5>Duration</h5>
|
|
<h5>Formalised</h5>
|
|
<h5>Memorised</h5>
|
|
<h5>Effect</h5>
|
|
</div>
|
|
<fieldset class="repeating_spells">
|
|
<div class="spells-row">
|
|
<input type="number" id="attr_spell_cv" name="attr_spell_cv">
|
|
<input type="text" id="attr_spell_target" name="attr_spell_target">
|
|
<input type="text" id="attr_spell_range" name="attr_spell_range">
|
|
<input type="text" id="attr_spell_duration" name="attr_spell_duration">
|
|
<input type="checkbox" id="attr_spell_formalized" name="attr_spell_formalized">
|
|
<input type="checkbox" id="attr_spell_memorized" name="attr_spell_memorized">
|
|
<input type="text" id="attr_spell_effect" class="effect-input" name="attr_spell_effect">
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="grim-portent-box box">
|
|
<h3 class="box-title" x-tooltip="tooltips.grimPortent">Grim Portent</h3>
|
|
<div class="talents-inputs">
|
|
<input type="text" id="attr_grim_portent1" name="attr_grim_portent1">
|
|
<input type="text" id="attr_grim_portent2" name="attr_grim_portent2">
|
|
<input type="text" id="attr_grim_portent3" name="attr_grim_portent3">
|
|
<input type="text" id="attr_grim_portent4" name="attr_grim_portent4">
|
|
<input type="text" id="attr_grim_portent5" name="attr_grim_portent5">
|
|
<input type="text" id="attr_grim_portent6" name="attr_grim_portent6">
|
|
</div>
|
|
</div>
|
|
|
|
<div class="exacting-test-box box">
|
|
<h3 class="box-title" x-tooltip="tooltips.exactingTest">Exacting Test Progress</h3>
|
|
<div class="talents-inputs">
|
|
<input type="text" id="attr_exacting_test1" name="attr_exacting_test1">
|
|
<input type="text" id="attr_exacting_test2" name="attr_exacting_test2">
|
|
<input type="text" id="attr_exacting_test3" name="attr_exacting_test3">
|
|
<input type="text" id="attr_exacting_test4" name="attr_exacting_test4">
|
|
<input type="text" id="attr_exacting_test5" name="attr_exacting_test5">
|
|
<input type="text" id="attr_exacting_test6" name="attr_exacting_test6">
|
|
</div>
|
|
</div>
|
|
|
|
<div class="clues-insights-box box">
|
|
<h3 class="box-title" x-tooltip="tooltips.cluesAndInsights">Clues and Insights</h3>
|
|
<div class="talents-inputs">
|
|
<input type="text" id="attr_clues_insights1" name="attr_clues_insights1">
|
|
<input type="text" id="attr_clues_insights2" name="attr_clues_insights2">
|
|
<input type="text" id="attr_clues_insights3" name="attr_clues_insights3">
|
|
<input type="text" id="attr_clues_insights4" name="attr_clues_insights4">
|
|
<input type="text" id="attr_clues_insights5" name="attr_clues_insights5">
|
|
<input type="text" id="attr_clues_insights6" name="attr_clues_insights6">
|
|
</div>
|
|
</div>
|
|
|
|
<div class="favours-owed-box box">
|
|
<h3 class="box-title" x-tooltip="tooltips.favoursOwed">Favours Owed</h3>
|
|
<div class="talents-inputs">
|
|
<input type="text" id="attr_favours_owed1" name="attr_favours_owed1">
|
|
<input type="text" id="attr_favours_owed2" name="attr_favours_owed2">
|
|
<input type="text" id="attr_favours_owed3" name="attr_favours_owed3">
|
|
<input type="text" id="attr_favours_owed4" name="attr_favours_owed4">
|
|
<input type="text" id="attr_favours_owed5" name="attr_favours_owed5">
|
|
<input type="text" id="attr_favours_owed6" name="attr_favours_owed6">
|
|
</div>
|
|
</div>
|
|
|
|
<div class="notes-box box">
|
|
<h3 class="box-title" x-tooltip="tooltips.notes">Notes</h3>
|
|
<textarea class="notes-textarea" id="attr_notes" name="attr_notes"></textarea>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!--Roll Template-->
|
|
<rolltemplate class="sheet-rolltemplate-tow1ed">
|
|
<table>
|
|
<tr>
|
|
<th colspan="2" class="sheet-title"><b>{{ Character Name }}</b> {{selected_skill}}</th>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="sheet-tcat">Skill: </span></td>
|
|
<td><span class="sheet-inlinerollresult">{{skill}}</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="sheet-tcat">Dice Pool: </span></td>
|
|
<td><span class="sheet-inlinerollresult">{{characteristic}}d + {{modifier}}d</span></td>
|
|
</tr>
|
|
<tr class="sheet-topline">
|
|
<th colspan="2"><span></span></th>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="sheet-tcat">Numbers Rolled:</span></td>
|
|
<td><span class="sheet-inlinerollresult">{{computed::numbers_rolled}}</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="sheet-tcat">Successes:</span></td>
|
|
<td><span class="sheet-inlinerollresult">{{computed::successes}}</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="sheet-tcat">Success Type:</span></td>
|
|
<td><span class="sheet-inlinerollresult">{{computed::success_type}}</span></td>
|
|
</tr>
|
|
</table>
|
|
</rolltemplate>
|
|
|
|
<!--Roll Template-->
|
|
<rolltemplate class="sheet-rolltemplate-tow1ed2">
|
|
<table>
|
|
<tr>
|
|
<th colspan="2" class="sheet-title"><b>{{ Character Name }}</b> {{name}}</th>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="sheet-tcat">Skill: </span></td>
|
|
<td><span class="sheet-inlinerollresult">{{skill}}</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="sheet-tcat">Dice Pool: </span></td>
|
|
<td><span class="sheet-inlinerollresult">{{dice_pool}}d + {{modifier}}d</span></td>
|
|
</tr>
|
|
<tr class="sheet-topline">
|
|
<th colspan="2"><span></span></th>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="sheet-tcat">Numbers Rolled:</span></td>
|
|
<td><span class="sheet-inlinerollresult">{{computed::numbers_rolled}}</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="sheet-tcat">Successes:</span></td>
|
|
<td><span class="sheet-inlinerollresult">{{computed::successes}}</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="sheet-tcat">Weapon Damage:</span></td>
|
|
<td><span class="sheet-inlinerollresult">{{computed::damage}} - Opponent SL</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="sheet-tcat">Traits:</span></td>
|
|
<td><span class="sheet-inlinerollresult">{{traits}}</span></td>
|
|
</tr>
|
|
</table>
|
|
</rolltemplate>
|
|
|
|
<!-- <script> -->
|
|
<script type="text/worker">
|
|
|
|
function rollattack(roll_string, debug=false) {
|
|
if (debug) {
|
|
console.log("ROLL STRING:");
|
|
console.log(roll_string);
|
|
}
|
|
|
|
|
|
startRoll(roll_string, (results) => {
|
|
if (debug) {
|
|
console.log("ROLL RESULTS:");
|
|
console.log(results);
|
|
}
|
|
|
|
let dice_pool = results.results.dice_pool.result;
|
|
let damage = results.results.damage.result;
|
|
let skill = results.results.skill.result;
|
|
let modifier = results.results.modifier.result;
|
|
dice_pool = (dice_pool + modifier) > 0 ? (dice_pool + modifier) : 1;
|
|
|
|
// console.log("DICE POOL: " + dice_pool);
|
|
let successes = 0;
|
|
let numbers_rolled = [];
|
|
for (let i = 0; i < dice_pool; i++) {
|
|
let dieRoll = Math.floor(Math.random() * 10) + 1;
|
|
numbers_rolled.push(dieRoll);
|
|
if (dieRoll <= skill) {
|
|
successes += 1;
|
|
}
|
|
}
|
|
damage = damage + successes;
|
|
|
|
if (debug) {
|
|
console.log("NUMBERS ROLLED: " + numbers_rolled);
|
|
console.log("SUCCESSES: " + successes);
|
|
console.log("Damage: " + damage);
|
|
console.log("Skill: " + skill);
|
|
}
|
|
|
|
|
|
finishRoll(
|
|
results.rollId,
|
|
{
|
|
modifier: modifier,
|
|
skill: skill,
|
|
dice_pool: dice_pool,
|
|
successes: successes,
|
|
numbers_rolled: numbers_rolled,
|
|
damage: damage
|
|
}
|
|
);
|
|
|
|
if (debug) {
|
|
console.log('MODIFIER: '+modifier);
|
|
console.log('SKILL: '+skill);
|
|
console.log('DICE POOL: '+dice_pool);
|
|
console.log('SUCCESSES: '+successes);
|
|
console.log('NUMBERS ROLLED: '+numbers_rolled);
|
|
console.log(results.results);
|
|
}
|
|
});
|
|
}
|
|
|
|
const repeating_list = ["repeating_weapons"];
|
|
repeating_list.forEach(trigger => {
|
|
on(`clicked:${trigger}`, function(eventInfo) {
|
|
const source = eventInfo["sourceAttribute"] ? eventInfo["sourceAttribute"] : "";
|
|
let reroll = source ? source : "roll";
|
|
let key = trigger.replace("repeating_", "");
|
|
key = key.slice(0, key.length - 1);
|
|
|
|
let test_list = [];
|
|
getAttrs(test_list.concat([
|
|
`${trigger}_${key}_name`,
|
|
`${trigger}_${key}_dice_pool`,
|
|
`${trigger}_${key}_damage`,
|
|
`${trigger}_${key}_traits`,
|
|
`${trigger}_${key}_skill_value`,
|
|
]), function(values) {
|
|
|
|
let name = values[`${trigger}_${key}_name`];
|
|
let dice_pool = parseInt(values[`${trigger}_${key}_dice_pool`])||0;
|
|
let damage = parseInt(values[`${trigger}_${key}_damage`])||0;
|
|
let traits = values[`${trigger}_${key}_traits`];
|
|
let skill = values[`${trigger}_${key}_skill_value`];
|
|
|
|
console.log(name + " | " + dice_pool + " | " + damage + " | " + traits + " | " + skill);
|
|
|
|
let roll_string = "&{template:tow1ed2} [[?{Dice Mod | None,+0 | 1d,+1 | 2d,+2 | 3d,+3 | 4d,+4 | 5d,+5 | -1d,-1 | -2d,-2 | -3d,-3 | -4d,-4 | -5d,-5}]] {{modifier=$[[0]]}}{{name="+name+"}}{{dice_pool=[["+dice_pool+"]]}}{{damage=[["+damage+"]]}}{{traits="+traits+"}}{{skill=[["+skill+"]]}}{{Character Name=@{character_name} }}{{successes=[[d10]]}}{{numbers_rolled=[[d10]]}}";
|
|
rollattack(roll_string, true);
|
|
//rollTest(reroll, skill_name, skill_total, diff_roll, circ, superiority, dmg, dmg_info, slmod, critfum);
|
|
});
|
|
});
|
|
});
|
|
|
|
on('clicked:towroll', (info) => {
|
|
let characteristic = info.htmlAttributes.value;
|
|
const myArray = characteristic.split("|");
|
|
const selected_characteristic = myArray[0];
|
|
let selected_skill = myArray[1];
|
|
const selected_rolltype = myArray[2];
|
|
const debug = false;
|
|
|
|
if (debug) {
|
|
console.log("Selected Characteristic: " + selected_characteristic);
|
|
console.log("Selected Skill: " + selected_skill);
|
|
console.log("Selected Roll Type: " + selected_rolltype);
|
|
}
|
|
|
|
let roll_string = "&{template:tow1ed} [[?{Dice Mod | None,+0 | 1d,+1 | 2d,+2 | 3d,+3 | 4d,+4 | 5d,+5 | -1d,-1 | -2d,-2 | -3d,-3 | -4d,-4 | -5d,-5}]] {{characteristic=[[@{"+selected_characteristic+"}]]}}{{skill=[[@{skill_"+selected_skill+"}]]}}{{modifier=$[[0]]}}{{selected_skill="+selected_skill+"}}{{successes=[[d10]]}}{{numbers_rolled=[[d10]]}}{{success_type=[[d10]]}}{{Character Name=@{character_name} }}";
|
|
if (selected_rolltype == 'spell') {
|
|
roll_string = "&{template:tow1ed} [[?{Dice Mod | None,+0 | 1d,+1 | 2d,+2 | 3d,+3 | 4d,+4 | 5d,+5 | -1d,-1 | -2d,-2 | -3d,-3 | -4d,-4 | -5d,-5}]] {{characteristic=[[@{"+selected_characteristic+"}]]}}{{skill=[[@{skill_"+selected_skill+"}]]}}{{miscast_pool=[[@{miscast_pool}]]}}{{selected_skill="+selected_skill+"}}{{wizard_level=[[@{wizard_level}]]}}{{modifier=$[[0]]}}{{successes=[[d10]]}}{{numbers_rolled=[[d10]]}}{{success_type=[[d10]]}}{{Character Name=@{character_name} }}";
|
|
selected_skill = "magic";
|
|
}
|
|
|
|
rolltest(roll_string, selected_skill, debug);
|
|
});
|
|
|
|
function rolltest(roll_string, selected_skill, debug=false) {
|
|
startRoll(roll_string, (results) => {
|
|
if (debug) {
|
|
console.log("ROLL RESULTS:");
|
|
console.log(results);
|
|
}
|
|
let characteristic = results.results.characteristic.result;
|
|
let skill = results.results.skill.result;
|
|
let modifier = results.results.modifier.result;
|
|
let miscast_pool = results.results.miscast_pool ? results.results.miscast_pool.result : null;
|
|
let wizard_level = results.results.wizard_level ? results.results.wizard_level.result : null;
|
|
|
|
let dice_pool = (characteristic + modifier) > 0 ? (characteristic + modifier) : 1;
|
|
|
|
// console.log("DICE POOL: " + dice_pool);
|
|
let successes = 0;
|
|
let numbers_rolled = [];
|
|
let nines_rolled = [];
|
|
for (let i = 0; i < dice_pool; i++) {
|
|
let dieRoll = Math.floor(Math.random() * 10) + 1;
|
|
numbers_rolled.push(dieRoll);
|
|
if (dieRoll == 9 && selected_skill == "magic") {
|
|
nines_rolled.push(dieRoll);
|
|
}
|
|
if (dieRoll <= skill) {
|
|
successes += 1;
|
|
}
|
|
}
|
|
if (debug) {
|
|
console.log("NUMBERS ROLLED: " + numbers_rolled);
|
|
console.log("SUCCESSES: " + successes);
|
|
console.log("Miscast Pool: " + miscast_pool);
|
|
console.log("Wizard Level: " + wizard_level);
|
|
console.log("Selected Skill: " + selected_skill);
|
|
console.log("Nines Rolled: " + nines_rolled.length);
|
|
}
|
|
if (((nines_rolled.length + miscast_pool) > wizard_level) && selected_skill == "magic") {
|
|
successes = 0;
|
|
success_type = "Miscast Failure!";
|
|
} else if (successes >= 3) {
|
|
success_type = "Total Success!";
|
|
} else if (successes >= 2) {
|
|
success_type = "Success";
|
|
} else if (successes >= 1) {
|
|
success_type = "Marginal Success";
|
|
} else {
|
|
success_type = "Failure!";
|
|
}
|
|
|
|
finishRoll(
|
|
results.rollId,
|
|
{
|
|
modifier: modifier,
|
|
characteristic: characteristic,
|
|
skill: skill,
|
|
dice_pool: dice_pool,
|
|
successes: successes,
|
|
numbers_rolled: numbers_rolled,
|
|
success_type: success_type
|
|
}
|
|
);
|
|
|
|
if (debug) {
|
|
console.log('MODIFIER: '+modifier);
|
|
console.log('CHARACTERISTIC: '+characteristic);
|
|
console.log('SKILL: '+skill);
|
|
console.log('DICE POOL: '+dice_pool);
|
|
console.log('SUCCESSES: '+successes);
|
|
console.log('NUMBERS ROLLED: '+numbers_rolled);
|
|
console.log('SUCCESS_TYPE: '+success_type);
|
|
console.log(results.results);
|
|
}
|
|
});
|
|
}
|
|
</script>
|